# @didomi/consent-string 中文文档

规范地址：https://npmcn.com/package/%40didomi/consent-string/

版本：1\.24\.0
npm 元数据更新时间：2026-04-09T09:49:37.482Z
中文译文更新时间：2026-11-12T07:34:04.036Z
软件包许可：未声明

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40didomi/consent-string
原文对照：https://npmcn.com/package/%40didomi/consent-string/?lang=original

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：521 kB，437 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：2 个
- 首次发布：2026-04-09T09:49:36.371Z
- 最新版本发布：2026-04-09T09:49:36.633Z
- 近 30 天下载量：15863（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：1（近 12 个月 1 个）

## 中文简介

同意字符串将用户同意状态存储为二进制数据,编码为base64. 将用户同意状态编码为二进制字符串,或从已存在的字符串中解码,都需要一个编码器/解码器库.

## 安装

```sh
npm install @didomi/consent-string
```

也可以使用：`pnpm add @didomi/consent-string`、`yarn add @didomi/consent-string`、`bun add @didomi/consent-string`

## README

# 同意字符串编码器/解码器

同意字符串将用户同意状态存储为二进制数据,编码为base64. 将用户同意状态编码为二进制字符串,或从已存在的字符串中解码,都需要一个编码器/解码器库.

库支持定义于 `@didomi/consent-string-schema` 图书馆.

Ưμ㼯A [这里](https://github.com/didomi/consent-string-schema)

## Didomi 同意字符串

Didomi 的同意字符串格式在以下文件中描述 :

-   DCS v1 (英语) [杜米 - 同意弦 - 司马 - v1.json](https://github.com/didomi/consent-string-schema/blob/main/src/schemas/didomi-consent-string/didomi-consent-string-schema-v1.json)
-   DCS v2 (英语) [杜米 - 同意弦 - 司马 - v2.json](https://github.com/didomi/consent-string-schema/blob/main/src/schemas/didomi-consent-string/didomi-consent-string-schema-v2.json)

### 编码

我们在用图书馆 `encodeDCS` 功能将用户状态编码到 DCS :

```typescript
import { encodeDCS } from '@didomi/consent-string';

const consentString = encodeDCS(1, {
  userId: 'd113bb93-7aa3-4684-ab31-aa9ae45470cb',
  created: new Date('2024-01-01'),
  updated: new Date('2024-01-01'),
  vendors: {
    optin: {
      enabled: [],
      disabled: [],
    },
    optout: {
      enabled: [],
      disabled: [],
    },
  },
  purposes: {
    optin: {
      enabled: [],
      disabled: [],
    },
    optout: {
      enabled: [],
      disabled: [],
    },
  },
  sync: null,
});
```

这个 `encodeDCS` 接受下列参数:

-   `version` - 那个 `number` 要使用的DCS 版本
-   `userStatus` - 用户状态 `object` 编码
-   `options` - 选项 `object` 用于编码 DCS

可选 `options` 对象提供 `SchemaOverrides` 特性

```typescript
/**
 * Options for encoding a DCS
 */
export type EncodeDCSOptions = {
  /**
   * Overrides applied to the schema
   */
  schemaOverrides?: SchemaOverrides;
};
```

使用 `SchemaOverrides` 我们可以限制方案只使用选定的编码算法,例如:

```typescript
const userStatus = {
  userId: 'd113bb93-7aa3-4684-ab31-aa9ae45470cb',
  created: new Date('2024-01-01'),
  updated: new Date('2024-01-01'),
  regulationId: 10,
  purposes: {
    optin: {
      enabled: [1, 100],
      disabled: [],
    },
    optout: {
      enabled: [],
      disabled: [],
    },
  },
  vendors: {
    optin: {
      enabled: [],
      disabled: [],
    },
    optout: {
      enabled: [],
      disabled: [],
    },
  },
  sync: null,
};

const consentStringWithVariantRestrictions = encodeDCS(2, userStatus, {
  schemaOverrides: {
    fields: {
      purposes_optin: {
        variants: [EncodingAlgorithm.BIT_FIELD_2_BITS],
      },
    },
  },
});
```

在这种情况下 `consentStringWithVariantRestrictions` 应使用比特字段编码 `purposes_optin` 财务报告和审定财务报表 生成的结果与DCS v1 编码相同.

有一个 `EncodingAlgorithm` 支持的选项

```typescript
export enum EncodingAlgorithm {
  BIT_FIELD_2_BITS = 'bit_field_2_bits',
  RANGES_FIBONACCI = 'ranges_fibonacci',
  RANGES_U16 = 'ranges_u16',
}
```

### 解码

要解码DCS字符串我们需要使用 `decodeDCS` 函数

```typescript
import { decodeDCS } from '@didomi/consent-string';

const consentString =
  'BGHWv4UYba5-dZnABdKu__D6iWHsD6iWHsJ9iee2BAAilKiABFKVQAACIscAAAiLGAAA';
const expectedUserStatus = {
  user_id: '1875afe1-461b-6b9f-9d66-700174abbffc',
  created: '2023-04-12T18:10:00.000Z',
  updated: '2023-04-12T18:10:00.000Z',
  sync: '2023-05-24T18:10:00.000Z',
  vendors_optin: {
    enabled: [128, 129, 130, 131, 132],
    disabled: [],
  },
  purposes_optin: {
    enabled: [1, 2, 6, 7, 8],
    disabled: [3, 4],
  },
  vendors_optout: {
    enabled: [128, 129, 130, 131, 132],
    disabled: [],
  },
  purposes_optout: {
    enabled: [1, 2, 6, 7, 8],
    disabled: [3, 4],
  },
};
expect(decodeDCS(consentString)).toEqual(expectedUserStatus);
```

这个 `decodeDCS` 接受此选项 `consentString` 作为参数并返回用户状态对象.

### 解码日志

在某些情况下,我们需要知道用来生产DCS字符串的编码算法. 这个 `logs` 选项提供了收集编码器信息的途径:

| 日志条目参数 | 类型 | 说明 |
| --- | --- | --- |
| `key` | 字符串 | 用户状态编码字段的密钥 |
| `offset` | 编号 | 页:1 `key` 在DCS系统 |
| `usedEncoder` | 字符串 | 使用的编码器类型 |

有伐木的例子:

```typescript
import { decodeDCS } from '@didomi/consent-string';

const consentString =
  'CGHWv4UYba5-dZnABdKu__D6iWHsD6iWHsAAKn2J57YEACKUqIAEUpVAAAIixwAACIsY';
const expectedEntries: LogEntry[] = [
  {
    key: 'version',
    offset: 0,
    usedEncoder: 'u6',
  },
  {
    key: 'user_id',
    offset: 6,
    usedEncoder: 'UUID',
  },
  {
    key: 'created',
    offset: 134,
    usedEncoder: 'date',
  },
  {
    key: 'updated',
    offset: 170,
    usedEncoder: 'date',
  },
  {
    key: 'regulation_id',
    offset: 206,
    usedEncoder: 'u16',
  },
  {
    key: 'sync',
    offset: 222,
    usedEncoder: 'date',
  },
  {
    key: 'purposes_optin',
    offset: 259,
    usedEncoder: 'bitField2Bits',
  },
  {
    key: 'purposes_optout',
    offset: 294,
    usedEncoder: 'bitField2Bits',
  },
  {
    key: 'vendors_optin',
    offset: 329,
    usedEncoder: 'rangesFibonacci',
  },
  {
    key: 'vendors_optout',
    offset: 367,
    usedEncoder: 'rangesFibonacci',
  },
];
const entries: LogEntry[] = [];
const logs: Logs = { enabled: true, entries };
decodeDCS(consentString, { logs });
expect(entries).toEqual(expectedEntries);
```

## 常见问题

### @didomi/consent-string 是什么？

同意字符串将用户同意状态存储为二进制数据,编码为base64\. 将用户同意状态编码为二进制字符串,或从已存在的字符串中解码,都需要一个编码器/解码器库\.

### 如何安装 @didomi/consent-string？

在项目目录运行 npm install @didomi/consent-string，或使用 pnpm add / yarn add / bun add。

### @didomi/consent-string 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @didomi/consent-string 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @didomi/consent-string 可以商用吗？

@didomi/consent-string 使用 未声明 许可。package\.json 没有声明许可证。没有许可证的代码默认保留全部权利，商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括，不构成法律意见，请以许可原文为准。

### @didomi/consent-string 的下载量有多少？

根据 npm 官方下载统计，@didomi/consent-string 在 2026/10/12 – 2026/11/10 这 30 天内被下载 15,863 次，日均约 529 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @didomi/consent-string 还在维护吗？

最新版本 1\.24\.0 发布于 2026/04/09（7 个月前）；至今共发布 1 个版本，其中过去 12 个月发布了 1 个；首次发布于 2026/04/09。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

