@didomi/consent-string-schema

中文文档
1.1.0发布于 2026/04/09TypeScriptESM + CJS近 30 天下载 1.6万
* [同意弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦
中文使用文档
文档目录12 节
  1. 图表格式
  2. 类型
  3. 外地
  4. 同意字符串类型
  5. 规格版本
  6. 测试
  7. 类型
  8. 领域和部分
  9. Schema 验证
  10. 结构验证
  11. 类型验证
  12. 密钥验证

协议字符串Schema

同意字符串将用户同意状态存储为二进制数据,编码为base64. 将用户同意状态编码为二进制字符串,或从已存在的字符串中解码,都需要一个编码器/解码器库. Schema以人可读的方式定义同意字符串格式. 这样可以定义出新的格式,或者对现有格式进行更新,而不修改编码器/解码器库.

图表格式

计划的结构如下:

  • consent_string_type
  • specification_version
  • tests
  • types
  • fields 或者说 segments

类型

编码员和解码员需要知道他们合作的数据类型. 计划定义有特定类型的字段, 很像编程中的变量。 下列类型必须得到编码器/解码器库的支持:

{\fn方正粗倩简体\fs12\an8\1cHFFFF00\b0}类型编号说明
1个u11 比特大小( 0 或 1) 无符号整数
2个u2未签名的2比特大小的整数
3个u33 比特大小的无符号整数
页:1u44 比特大小的无符号整数
页:1u66 比特大小的无符号整数
6个u1212 比特大小的无符号整数
第7条u1616位数大小的无符号整数
第8条u2424位大小的无符号整数
第9条u3232 位大小的无符号整数
10个date日期
第11个uuid用户名 - Base16 字符串 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
第12条fibonacci数字
第13条fibonacci_rangeFibonacci 编号的 Fibonacci ID 范围, 以 Fibonacci 编号为起始 id 和编号 id 编号
页:1u16_range以 u16 个数字开头的 Ids 范围
15个bit_field位数阵列
16个fixed_bit_field固定大小比特字段阵列,大小属性必须在方案内指定
页:1bit_field_2_bitsBit 字段阵列( bool, bul)
第 18 条ranges_u16Id 范围矩阵 - (起始 id: u16;结束 id: u16)
第 19 条ranges_fibonacciId 范围矩阵 - (起始 id: fibonacci,编号 ids: fibonacci)
20国string表示字符串的固定位数 。 该字符的ASCII整数ID被减去了65并被编码为一int(6).
21国optimized_range第一个数据类型总是布尔(u1),如果它是真实的,下一个是Fibonacci范围,如果是假的 - Bitfield .
22个optimized_u16_range以 u16 range - (最大 id: u12, range flag: u1, 类型: [u16 range, 固定 bit field(大小: max id)] 优化位域
第23条array_of_optimized_u16_ranges优化- u16 排列( 数字 记录: u12, 键: u6, 类型: u2, ids: 优化- u16 排列)
24个n_array_of_ranges_x_y通用类型QQ,Y>(数字 记录:u12,密钥:u,类型:u,IDs:优化 范围)
第25条optimized_array_of_u16_ranges(max id:u16,是:u1,类型:[(数字 of indies:u12,是:a range:u1,类型:[起 id:u16,端 id:u16],起 id:u16]),固定 bit field(大小:最大 id)]
第 26 条array_of_u16_ranges(编号: of records:u12,密钥:u6,类型:u2,号码:u12,是 a range:u1,类型:[(从 id:u16起,端-id:u16起,起-id:u16起)
27个segment_type3bits 分区类型代码
第28条enabled_disabled_ids启用和禁用以变体属性所列出的某些类型编码的 ID
29个array_of_attributed_u16_ranges用于出版商限制编码的指定范围的数组
30个version以 6bits 编号编码的同意字符串版本

外地

计划的主要组成部分是 field编辑 field 是一个编程语言中的变量的模拟,每个归档必须有一个类型. 有一个实地定义的例子:

{
  "type": "version",
  "description": "The Didomi Consent String version 6bits number",
  "key": "dcs_version",
  "value": 2  
}

在这里,我们正在定义的领域与 type "版本"和 key 等于“ dcs version” 。 编码器将使用 key 属性访问用户状态对象中提供的字段值。 我们还可以定义领域 value 属性指示编码器不从用户状态对象读取值,而是从计划读取值.

另一个例子是 field 属性是 optional。每个字段都可以是可选的,这将指示 编码器,在字段值之前将1比特旗放入编码字符串中. 如果旗帜是 1,该值是存在的并解码的。 如果是这样 0,在解码时,该值缺失并跳出. 有可选字段定义的例子

{
  "type": "date",
  "key": "sync",
  "optional": true
}

有些字段可以使用不同的编码算法进行编码来进行优化. 说明什么 算法(类型)可以通过编码器用于我们使用的值编码器 variants 字段属性 :

{

  "type": "enabled_disabled_ids",
  "description": "User Status for purposes opt-out",
  "key": "purposes_li",
  "variants": [
    "bit_field_2_bits",
    "ranges_u16",
    "ranges_fibonacci"
  ]
}

这个例子说明了如何使用三种方法来编码用户状态: bit_field_2_bits, (中文(简体) ), ranges_u16,以及 ranges_fibonacci。 。 。 . 编码器选择产生最短结果的方法并包含 在编码值之前选择方法的代码,允许解码器 以正确解码字符串.

有些类型需要有大小信息才能正确编码/解码.

{
  "type": "string",
  "description": "Two-letter ISO 639-1 language code in which the CMP UI was presented",
  "key": "consent_language",
  "size": 12
}

我们在这里定义了一个12位字符串类型字段.

所有字段属性都有摘要:

{\fn方正粗倩简体\fs12\an8\1cHFFFF00\b0}字段属性强制说明
1个typeY字段类型
2个keyY从模型中提取值的密钥
3个descriptionY字段说明
页:1size无类型大小位
页:1optional无true 如果值可能缺失
6个value无字段常数值
第7条variants无类型编码方法变体

同意字符串计划支持以下类型:

{\fn方正粗倩简体\fs12\an8\1cHFFFF00\b0}字符串类型说明
1个didomi_consent_stringDidomi 同意字符串
2个iab_tcf_stringIAB TCF 协议字符串
3个gpp_stringGPP 字符串

规格版本

对于每个字符串类型,可以定义几个规格版本,例如:, 给迪多米同意弦 specification_version 1和2,其中第1版 对编码器有一些限制.

测试

同意字符串计划定义了编码器和解码器的测试 tests 阵列。 编码器/解码器库应 运行这些测试,以确保库根据计划产生预期结果.

类型

这个 types 数组定义了由同意字符串计划支持的子集类型(类型) (中文(简体) ). 每个 type 从 types 必须至少出现在字段定义中,来自字段定义的所有类型都应该是 列入清单 types 阵列.

领域和部分

同意字符串计划可以 fields 顶级数组或 segments 阵列。 这个 fields 阵列包含字段定义( r)外地和 segments 能够 用于定义分块字符串结构,其中每个分块编码 单独连接,然后使用 . 字符键.

例如:

{
  "tests": {
    "encoded": "CQH-gkAQH-gkAAHABBENBOFgAPAAAELAAAAAF5wAQF5gXnABAXmAAAAA.YAAAAAAAAAAA"
  }
}

这里有一个 IAB TCF 字符串作为 encoded 值有两个部分:核心部分和出版部分.

在被定义为下列对象的图示中:

 {
    "name": "Disclosed Vendors",
    "key": "disclosed_vendors",
    "optional": true,
    "fields": [
      {
        "type": "segment_type",
        "description": "DisclosedVendors segment is 1 which is 001 in binary.",
        "key": "disclosed_vendors_segment_type",
        "value": 1
      },
      {
        "type": "optimized_array_of_u16_ranges",
        "description": "Vendors Disclosure",
        "key": "disclosed_vendors"
      }
    ]
  }

每个 segment 已经 name, (中文(简体) ), key, (中文(简体) ), optional 财务报告和审定财务报表 fields 属性,除 optional 强制的.

Schema 验证

同意字符串计划库提供 validator 函数,通过3个步骤验证计划:

  • 使用 zod 图书馆
  • 验证计划类型
  • 验证密钥

结构验证

我们用 zod 以定义同意字符串结构以及控制类型。 比如说,有 field 使用定义 zod数字 :

import { z } from 'zod';

export const availableTypesSchema = z.nativeEnum(SchemaTypes);

export const typesSchema = uniqueNotEmptyArray(availableTypesSchema);

export const consentStringTypeSchema = z.enum([
  'didomi_consent_string',
  'iab_tcf_string',
  'gpp_string',
]);

export const variantsTypes = z.enum([SchemaTypes.bit_field_2_bits, SchemaTypes.ranges_fibonacci, SchemaTypes.ranges_u16]);

export const variantsSchema = uniqueNotEmptyArray(variantsTypes);

export const fieldSchema = z.object({
  type: availableTypesSchema,
  description: z.string(),
  key: z.string(),
  optional: z.boolean().optional(),
  size: z.number().or(z.string()).optional(),
  value: z.number().optional(),
  variants: variantsSchema.optional()
});

这个计划确保了 type 属性只包含允许的类型 variants 属性包含三个允许的类型.

类型验证

虽然 zod 验证类型,计划还必须确保所有类型 types 阵列用于字段定义, 并且所有字段类型都列在 types 阵列。 此镜像编程语言, 其中类型被定义 使用前和未使用的定义可能触发警告或错误. 图书馆的 typeValidator 之后执行此约束 zod 审定.

密钥验证

最后的验证步骤需要确保域定义中的所有密钥都独一无二. 图书馆的 keyValidator 运行后 页:1 typeValidator 以强制执行这一限制.

版本与发布记录

@didomi/consent-string-schema 共发布 1 个版本,首次发布于 2026/04/09;过去 12 个月发布了 1 个版本。

版本发布日期距今
1.1.0latest2026/04/097 个月前

关于 @didomi/consent-string-schema 的常见问题

@didomi/consent-string-schema 是什么?

* [同意弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦-弦

如何安装 @didomi/consent-string-schema?

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

@didomi/consent-string-schema 支持 TypeScript 吗?

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

@didomi/consent-string-schema 支持 ESM 还是 CommonJS?

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

@didomi/consent-string-schema 可以商用吗?

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

@didomi/consent-string-schema 的下载量有多少?

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

@didomi/consent-string-schema 还在维护吗?

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