@diap/sdk 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +86 -86
  3. package/dist/agent-auth.d.ts +96 -0
  4. package/dist/agent-auth.d.ts.map +1 -0
  5. package/dist/agent-auth.js +343 -0
  6. package/dist/agent-auth.js.map +1 -0
  7. package/dist/agent-verification.d.ts +158 -0
  8. package/dist/agent-verification.d.ts.map +1 -0
  9. package/dist/agent-verification.js +237 -0
  10. package/dist/agent-verification.js.map +1 -0
  11. package/dist/config-manager.d.ts +156 -0
  12. package/dist/config-manager.d.ts.map +1 -0
  13. package/dist/config-manager.js +241 -0
  14. package/dist/config-manager.js.map +1 -0
  15. package/dist/did-builder.d.ts +62 -0
  16. package/dist/did-builder.d.ts.map +1 -0
  17. package/dist/did-builder.js +315 -0
  18. package/dist/did-builder.js.map +1 -0
  19. package/dist/did-cache.d.ts +133 -0
  20. package/dist/did-cache.d.ts.map +1 -0
  21. package/dist/did-cache.js +273 -0
  22. package/dist/did-cache.js.map +1 -0
  23. package/dist/identity-manager.d.ts +87 -0
  24. package/dist/identity-manager.d.ts.map +1 -0
  25. package/dist/identity-manager.js +196 -0
  26. package/dist/identity-manager.js.map +1 -0
  27. package/dist/index.d.ts +43 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +52 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/ipfs-bidirectional-verification.d.ts +201 -0
  32. package/dist/ipfs-bidirectional-verification.d.ts.map +1 -0
  33. package/dist/ipfs-bidirectional-verification.js +298 -0
  34. package/dist/ipfs-bidirectional-verification.js.map +1 -0
  35. package/dist/ipfs-client.d.ts +151 -0
  36. package/dist/ipfs-client.d.ts.map +1 -0
  37. package/dist/ipfs-client.js +623 -0
  38. package/dist/ipfs-client.js.map +1 -0
  39. package/dist/ipfs-node-manager.d.ts +136 -0
  40. package/dist/ipfs-node-manager.d.ts.map +1 -0
  41. package/dist/ipfs-node-manager.js +232 -0
  42. package/dist/ipfs-node-manager.js.map +1 -0
  43. package/dist/ipns-manager.d.ts +182 -0
  44. package/dist/ipns-manager.d.ts.map +1 -0
  45. package/dist/ipns-manager.js +268 -0
  46. package/dist/ipns-manager.js.map +1 -0
  47. package/dist/key-manager.d.ts +48 -0
  48. package/dist/key-manager.d.ts.map +1 -0
  49. package/dist/key-manager.js +231 -0
  50. package/dist/key-manager.js.map +1 -0
  51. package/dist/kubo-installer.d.ts +115 -0
  52. package/dist/kubo-installer.d.ts.map +1 -0
  53. package/dist/kubo-installer.js +205 -0
  54. package/dist/kubo-installer.js.map +1 -0
  55. package/dist/libp2p/encrypted-peer-id.d.ts +24 -0
  56. package/dist/libp2p/encrypted-peer-id.d.ts.map +1 -0
  57. package/dist/libp2p/encrypted-peer-id.js +134 -0
  58. package/dist/libp2p/encrypted-peer-id.js.map +1 -0
  59. package/dist/nonce-manager.d.ts +176 -0
  60. package/dist/nonce-manager.d.ts.map +1 -0
  61. package/dist/nonce-manager.js +382 -0
  62. package/dist/nonce-manager.js.map +1 -0
  63. package/dist/p2p/hyperswarm-communicator.d.ts +252 -0
  64. package/dist/p2p/hyperswarm-communicator.d.ts.map +1 -0
  65. package/dist/p2p/hyperswarm-communicator.js +469 -0
  66. package/dist/p2p/hyperswarm-communicator.js.map +1 -0
  67. package/dist/p2p/iroh-communicator.d.ts +216 -0
  68. package/dist/p2p/iroh-communicator.d.ts.map +1 -0
  69. package/dist/p2p/iroh-communicator.js +408 -0
  70. package/dist/p2p/iroh-communicator.js.map +1 -0
  71. package/dist/pubsub-authenticator.d.ts +246 -0
  72. package/dist/pubsub-authenticator.d.ts.map +1 -0
  73. package/dist/pubsub-authenticator.js +384 -0
  74. package/dist/pubsub-authenticator.js.map +1 -0
  75. package/dist/real-name-auth.d.ts +238 -0
  76. package/dist/real-name-auth.d.ts.map +1 -0
  77. package/dist/real-name-auth.js +259 -0
  78. package/dist/real-name-auth.js.map +1 -0
  79. package/dist/types/did.d.ts +76 -0
  80. package/dist/types/did.d.ts.map +1 -0
  81. package/dist/types/did.js +5 -0
  82. package/dist/types/did.js.map +1 -0
  83. package/dist/types/errors.d.ts +42 -0
  84. package/dist/types/errors.d.ts.map +1 -0
  85. package/dist/types/errors.js +69 -0
  86. package/dist/types/errors.js.map +1 -0
  87. package/dist/types/index.d.ts +9 -0
  88. package/dist/types/index.d.ts.map +1 -0
  89. package/dist/types/index.js +9 -0
  90. package/dist/types/index.js.map +1 -0
  91. package/dist/types/key.d.ts +43 -0
  92. package/dist/types/key.d.ts.map +1 -0
  93. package/dist/types/key.js +5 -0
  94. package/dist/types/key.js.map +1 -0
  95. package/dist/types/zkp.d.ts +80 -0
  96. package/dist/types/zkp.d.ts.map +1 -0
  97. package/dist/types/zkp.js +16 -0
  98. package/dist/types/zkp.js.map +1 -0
  99. package/dist/utils/crypto.d.ts +24 -0
  100. package/dist/utils/crypto.d.ts.map +1 -0
  101. package/dist/utils/crypto.js +65 -0
  102. package/dist/utils/crypto.js.map +1 -0
  103. package/dist/utils/encoding.d.ts +36 -0
  104. package/dist/utils/encoding.d.ts.map +1 -0
  105. package/dist/utils/encoding.js +80 -0
  106. package/dist/utils/encoding.js.map +1 -0
  107. package/dist/utils/logger.d.ts +24 -0
  108. package/dist/utils/logger.d.ts.map +1 -0
  109. package/dist/utils/logger.js +37 -0
  110. package/dist/utils/logger.js.map +1 -0
  111. package/dist/zkp/key-generator.d.ts +56 -0
  112. package/dist/zkp/key-generator.d.ts.map +1 -0
  113. package/dist/zkp/key-generator.js +165 -0
  114. package/dist/zkp/key-generator.js.map +1 -0
  115. package/dist/zkp/simplified-backend.d.ts +23 -0
  116. package/dist/zkp/simplified-backend.d.ts.map +1 -0
  117. package/dist/zkp/simplified-backend.js +77 -0
  118. package/dist/zkp/simplified-backend.js.map +1 -0
  119. package/dist/zkp/snarkjs-backend.d.ts +150 -0
  120. package/dist/zkp/snarkjs-backend.d.ts.map +1 -0
  121. package/dist/zkp/snarkjs-backend.js +218 -0
  122. package/dist/zkp/snarkjs-backend.js.map +1 -0
  123. package/dist/zkp/universal-manager.d.ts +44 -0
  124. package/dist/zkp/universal-manager.d.ts.map +1 -0
  125. package/dist/zkp/universal-manager.js +181 -0
  126. package/dist/zkp/universal-manager.js.map +1 -0
  127. package/package.json +2 -2
@@ -0,0 +1,241 @@
1
+ /**
2
+ * DIAP TypeScript SDK - 配置管理模块
3
+ * Decentralized Intelligent Agent Protocol
4
+ * 负责加载、保存和管理 SDK 配置
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import { logger } from './utils/logger.js';
9
+ // ============================================================================
10
+ // 默认值
11
+ // ============================================================================
12
+ const DEFAULT_TIMEOUT_SECONDS = 30;
13
+ const DEFAULT_IPNS_VALIDITY_DAYS = 365;
14
+ const DEFAULT_CACHE_TTL_SECONDS = 21600; // 6小时
15
+ const DEFAULT_CACHE_MAX_ENTRIES = 1000;
16
+ const DEFAULT_LOG_LEVEL = 'info';
17
+ /**
18
+ * 获取默认配置文件路径
19
+ */
20
+ export function getDefaultConfigPath() {
21
+ // 在 Node.js 中使用 home 目录
22
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '.';
23
+ return path.join(homeDir, '.config', 'diap-ts-sdk', 'config.json');
24
+ }
25
+ /**
26
+ * 获取默认数据目录
27
+ */
28
+ export function getDefaultDataDir() {
29
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '.';
30
+ return path.join(homeDir, '.local', 'share', 'diap-ts-sdk');
31
+ }
32
+ /**
33
+ * 获取默认缓存目录
34
+ */
35
+ export function getDefaultCacheDir() {
36
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '.';
37
+ return path.join(homeDir, '.cache', 'diap-ts-sdk');
38
+ }
39
+ // ============================================================================
40
+ // 默认配置
41
+ // ============================================================================
42
+ /**
43
+ * 创建默认配置
44
+ */
45
+ export function createDefaultConfig() {
46
+ const dataDir = getDefaultDataDir();
47
+ const cacheDir = getDefaultCacheDir();
48
+ return {
49
+ agent: {
50
+ name: 'DIAP Agent',
51
+ privateKeyPath: path.join(dataDir, 'keys', 'agent.key'),
52
+ autoGenerateKey: true,
53
+ },
54
+ ipfs: {
55
+ timeoutSeconds: DEFAULT_TIMEOUT_SECONDS,
56
+ },
57
+ ipns: {
58
+ useW3name: true,
59
+ useIpfsNode: true,
60
+ validityDays: DEFAULT_IPNS_VALIDITY_DAYS,
61
+ },
62
+ cache: {
63
+ enabled: true,
64
+ ttlSeconds: DEFAULT_CACHE_TTL_SECONDS,
65
+ maxEntries: DEFAULT_CACHE_MAX_ENTRIES,
66
+ cacheDir: cacheDir,
67
+ },
68
+ logging: {
69
+ level: DEFAULT_LOG_LEVEL,
70
+ },
71
+ };
72
+ }
73
+ // ============================================================================
74
+ // ConfigManager 类
75
+ // ============================================================================
76
+ /**
77
+ * 配置管理器
78
+ */
79
+ export class ConfigManager {
80
+ config;
81
+ configPath;
82
+ /**
83
+ * 创建配置管理器
84
+ */
85
+ constructor(config, configPath) {
86
+ this.config = config;
87
+ this.configPath = configPath;
88
+ logger.debug(`配置管理器已创建,路径: ${configPath}`);
89
+ }
90
+ /**
91
+ * 从文件加载配置
92
+ */
93
+ static fromFile(configPath) {
94
+ logger.info(`从文件加载配置: ${configPath}`);
95
+ try {
96
+ if (fs.existsSync(configPath)) {
97
+ const content = fs.readFileSync(configPath, 'utf-8');
98
+ const config = JSON.parse(content);
99
+ logger.info('配置加载成功');
100
+ return new ConfigManager(config, configPath);
101
+ }
102
+ else {
103
+ logger.warn(`配置文件不存在: ${configPath}`);
104
+ throw new Error(`配置文件不存在: ${configPath}`);
105
+ }
106
+ }
107
+ catch (error) {
108
+ logger.error(`加载配置失败: ${error}`);
109
+ throw error;
110
+ }
111
+ }
112
+ /**
113
+ * 创建或加载配置
114
+ */
115
+ static async load() {
116
+ const configPath = getDefaultConfigPath();
117
+ logger.info(`加载配置,路径: ${configPath}`);
118
+ if (fs.existsSync(configPath)) {
119
+ return ConfigManager.fromFile(configPath);
120
+ }
121
+ // 创建默认配置并保存
122
+ logger.info('使用默认配置');
123
+ const config = createDefaultConfig();
124
+ const manager = new ConfigManager(config, configPath);
125
+ // 尝试保存默认配置
126
+ try {
127
+ await manager.saveToFile();
128
+ logger.info(`已保存默认配置到: ${configPath}`);
129
+ }
130
+ catch (error) {
131
+ logger.warn(`无法保存默认配置: ${error}`);
132
+ }
133
+ return manager;
134
+ }
135
+ /**
136
+ * 获取当前配置
137
+ */
138
+ getConfig() {
139
+ return this.config;
140
+ }
141
+ /**
142
+ * 获取配置路径
143
+ */
144
+ getConfigPath() {
145
+ return this.configPath;
146
+ }
147
+ /**
148
+ * 更新配置
149
+ */
150
+ updateConfig(newConfig) {
151
+ this.config = {
152
+ ...this.config,
153
+ ...newConfig,
154
+ };
155
+ logger.debug('配置已更新');
156
+ }
157
+ /**
158
+ * 保存配置到文件
159
+ */
160
+ async saveToFile() {
161
+ try {
162
+ // 确保目录存在
163
+ const dir = path.dirname(this.configPath);
164
+ if (!fs.existsSync(dir)) {
165
+ fs.mkdirSync(dir, { recursive: true });
166
+ }
167
+ const content = JSON.stringify(this.config, null, 2);
168
+ fs.writeFileSync(this.configPath, content, 'utf-8');
169
+ logger.info(`配置已保存到: ${this.configPath}`);
170
+ }
171
+ catch (error) {
172
+ logger.error(`保存配置失败: ${error}`);
173
+ throw error;
174
+ }
175
+ }
176
+ /**
177
+ * 验证配置
178
+ */
179
+ validate() {
180
+ const errors = [];
181
+ // 验证 IPFS 配置
182
+ if (!this.config.ipfs.awsApiUrl && !this.config.ipfs.pinataApiKey) {
183
+ errors.push('必须配置 AWS IPFS 节点或 Pinata');
184
+ }
185
+ // 验证 IPNS 配置
186
+ if (!this.config.ipns.useW3name && !this.config.ipns.useIpfsNode) {
187
+ errors.push('必须至少启用一种 IPNS 发布方式');
188
+ }
189
+ // 验证日志级别
190
+ const validLevels = ['trace', 'debug', 'info', 'warn', 'error'];
191
+ if (!validLevels.includes(this.config.logging.level)) {
192
+ errors.push(`无效的日志级别: ${this.config.logging.level}`);
193
+ }
194
+ return {
195
+ valid: errors.length === 0,
196
+ errors,
197
+ };
198
+ }
199
+ /**
200
+ * 创建子配置访问器
201
+ */
202
+ getAgentConfig() {
203
+ return this.config.agent;
204
+ }
205
+ getIpfsConfig() {
206
+ return this.config.ipfs;
207
+ }
208
+ getIpnsConfig() {
209
+ return this.config.ipns;
210
+ }
211
+ getCacheConfig() {
212
+ return this.config.cache;
213
+ }
214
+ getLoggingConfig() {
215
+ return this.config.logging;
216
+ }
217
+ }
218
+ // ============================================================================
219
+ // 便捷函数
220
+ // ============================================================================
221
+ /**
222
+ * 加载配置(便捷函数)
223
+ */
224
+ export async function loadConfig() {
225
+ return ConfigManager.load();
226
+ }
227
+ /**
228
+ * 获取默认配置(便捷函数)
229
+ */
230
+ export function getDefaultConfig() {
231
+ return createDefaultConfig();
232
+ }
233
+ /**
234
+ * 保存配置到指定路径
235
+ */
236
+ export async function saveConfig(config, configPath) {
237
+ const path = configPath || getDefaultConfigPath();
238
+ const manager = new ConfigManager(config, path);
239
+ await manager.saveToFile();
240
+ }
241
+ //# sourceMappingURL=config-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../src/config-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * DID 构建器
3
+ * 构建和发布符合 W3C DID 规范的 DID 文档
4
+ * 基于 Rust SDK 的实现逻辑
5
+ */
6
+ import type { DIDDocument, DIDPublishResult, EncryptedPeerID } from './types/did.js';
7
+ import type { KeyPair } from './types/key.js';
8
+ import type { IpfsClient } from './ipfs-client.js';
9
+ /**
10
+ * DID 构建器
11
+ */
12
+ export declare class DIDBuilder {
13
+ private ipfsClient;
14
+ private services;
15
+ constructor(ipfsClient: IpfsClient);
16
+ /**
17
+ * 添加服务端点
18
+ */
19
+ addService(serviceType: string, endpoint: any): this;
20
+ /**
21
+ * 添加 PubSub 服务
22
+ */
23
+ addPubsubService(serviceType: string, endpoint: any, topics: string[], addresses: string[]): this;
24
+ /**
25
+ * 构建 DID 文档
26
+ */
27
+ buildDIDDocument(keypair: KeyPair, encryptedPeerId: EncryptedPeerID): DIDDocument;
28
+ /**
29
+ * 构建包含 PubSub 信息的 DID 文档
30
+ */
31
+ buildDIDDocumentWithPubsub(keypair: KeyPair, encryptedPeerId: EncryptedPeerID, pubsubTopics: string[], networkAddresses: string[]): DIDDocument;
32
+ /**
33
+ * 派生 did:key 格式的 DID
34
+ */
35
+ private deriveDIDKey;
36
+ /**
37
+ * 创建并发布 DID 文档
38
+ */
39
+ createAndPublish(keypair: KeyPair, peerId: string): Promise<DIDPublishResult>;
40
+ /**
41
+ * 创建并发布包含 PubSub 信息的 DID 文档
42
+ */
43
+ createAndPublishWithPubsub(keypair: KeyPair, peerId: string, pubsubTopics: string[], networkAddresses: string[]): Promise<DIDPublishResult>;
44
+ /**
45
+ * 上传 DID 文档到 IPFS
46
+ */
47
+ private uploadDIDDocument;
48
+ }
49
+ /**
50
+ * 从 IPFS CID 获取 DID 文档
51
+ */
52
+ export declare function getDIDDocumentFromCID(ipfsClient: IpfsClient, cid: string): Promise<DIDDocument>;
53
+ /**
54
+ * 验证 DID 文档完整性
55
+ * 支持多种哈希算法:SHA-256, SHA-512, Blake2b-512, Blake2s-256
56
+ */
57
+ export declare function verifyDIDDocumentIntegrity(didDoc: DIDDocument, expectedCid: string): Promise<boolean>;
58
+ /**
59
+ * 验证 DID 文档完整性(同步版本,仅做结构验证)
60
+ */
61
+ export declare function verifyDIDDocumentIntegritySync(didDoc: DIDDocument): boolean;
62
+ //# sourceMappingURL=did-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"did-builder.d.ts","sourceRoot":"","sources":["../src/did-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,WAAW,EAGX,gBAAgB,EAChB,eAAe,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AASnD;;GAEG;AACH,qBAAa,UAAU;IAGT,OAAO,CAAC,UAAU;IAF9B,OAAO,CAAC,QAAQ,CAAiB;gBAEb,UAAU,EAAE,UAAU;IAE1C;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI;IAUpD;;OAEG;IACH,gBAAgB,CACd,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,GAAG,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,MAAM,EAAE,GAClB,IAAI;IAYP;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,GAAG,WAAW;IAsCjF;;OAEG;IACH,0BAA0B,CACxB,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,MAAM,EAAE,EACtB,gBAAgB,EAAE,MAAM,EAAE,GACzB,WAAW;IA0Cd;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoCnF;;OAEG;IACG,0BAA0B,CAC9B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EAAE,EACtB,gBAAgB,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,gBAAgB,CAAC;IAoC5B;;OAEG;YACW,iBAAiB;CAKhC;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,WAAW,CAAC,CAStB;AAYD;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CA+DlB;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAY3E"}
@@ -0,0 +1,315 @@
1
+ /**
2
+ * DID 构建器
3
+ * 构建和发布符合 W3C DID 规范的 DID 文档
4
+ * 基于 Rust SDK 的实现逻辑
5
+ */
6
+ import { DIDError } from './types/errors.js';
7
+ import { encodeBase58, encodeBase64 } from './utils/encoding.js';
8
+ import { encryptPeerId } from './libp2p/encrypted-peer-id.js';
9
+ import { logger } from './utils/logger.js';
10
+ import { sha256 } from '@noble/hashes/sha256';
11
+ import { sha512 } from '@noble/hashes/sha512';
12
+ import { blake2b, blake2s } from '@noble/hashes/blake2';
13
+ /**
14
+ * DID 构建器
15
+ */
16
+ export class DIDBuilder {
17
+ ipfsClient;
18
+ services = [];
19
+ constructor(ipfsClient) {
20
+ this.ipfsClient = ipfsClient;
21
+ }
22
+ /**
23
+ * 添加服务端点
24
+ */
25
+ addService(serviceType, endpoint) {
26
+ const service = {
27
+ id: `#${serviceType.toLowerCase()}`,
28
+ type: serviceType,
29
+ serviceEndpoint: endpoint,
30
+ };
31
+ this.services.push(service);
32
+ return this;
33
+ }
34
+ /**
35
+ * 添加 PubSub 服务
36
+ */
37
+ addPubsubService(serviceType, endpoint, topics, addresses) {
38
+ const service = {
39
+ id: `#${serviceType.toLowerCase()}`,
40
+ type: serviceType,
41
+ serviceEndpoint: endpoint,
42
+ pubsubTopics: topics,
43
+ networkAddresses: addresses,
44
+ };
45
+ this.services.push(service);
46
+ return this;
47
+ }
48
+ /**
49
+ * 构建 DID 文档
50
+ */
51
+ buildDIDDocument(keypair, encryptedPeerId) {
52
+ const publicKeyMultibase = this.deriveDIDKey(keypair.publicKey);
53
+ const verificationMethod = {
54
+ id: `${keypair.did}#key-1`,
55
+ type: 'Ed25519VerificationKey2020',
56
+ controller: keypair.did,
57
+ publicKeyMultibase,
58
+ };
59
+ const libp2pService = {
60
+ id: `${keypair.did}#libp2p`,
61
+ type: 'LibP2PNode',
62
+ serviceEndpoint: {
63
+ ciphertext: encodeBase64(encryptedPeerId.ciphertext),
64
+ nonce: encodeBase64(encryptedPeerId.nonce),
65
+ signature: encodeBase64(encryptedPeerId.signature),
66
+ method: encryptedPeerId.method,
67
+ },
68
+ };
69
+ const allServices = [libp2pService, ...this.services];
70
+ const didDoc = {
71
+ '@context': [
72
+ 'https://www.w3.org/ns/did/v1',
73
+ 'https://w3id.org/security/suites/ed25519-2020/v1',
74
+ ],
75
+ id: keypair.did,
76
+ verificationMethod: [verificationMethod],
77
+ authentication: [`${keypair.did}#key-1`],
78
+ service: allServices,
79
+ created: new Date().toISOString(),
80
+ };
81
+ return didDoc;
82
+ }
83
+ /**
84
+ * 构建包含 PubSub 信息的 DID 文档
85
+ */
86
+ buildDIDDocumentWithPubsub(keypair, encryptedPeerId, pubsubTopics, networkAddresses) {
87
+ const publicKeyMultibase = this.deriveDIDKey(keypair.publicKey);
88
+ const verificationMethod = {
89
+ id: `${keypair.did}#key-1`,
90
+ type: 'Ed25519VerificationKey2020',
91
+ controller: keypair.did,
92
+ publicKeyMultibase,
93
+ };
94
+ const libp2pService = {
95
+ id: `${keypair.did}#libp2p`,
96
+ type: 'libp2p',
97
+ serviceEndpoint: {
98
+ ciphertext: encodeBase64(encryptedPeerId.ciphertext),
99
+ nonce: encodeBase64(encryptedPeerId.nonce),
100
+ signature: encodeBase64(encryptedPeerId.signature),
101
+ method: encryptedPeerId.method,
102
+ protocol: 'libp2p',
103
+ version: '1.0.0',
104
+ },
105
+ pubsubTopics,
106
+ networkAddresses,
107
+ };
108
+ const allServices = [libp2pService, ...this.services];
109
+ const didDoc = {
110
+ '@context': [
111
+ 'https://www.w3.org/ns/did/v1',
112
+ 'https://w3id.org/security/suites/ed25519-2020/v1',
113
+ ],
114
+ id: keypair.did,
115
+ verificationMethod: [verificationMethod],
116
+ authentication: [`${keypair.did}#key-1`],
117
+ service: allServices,
118
+ created: new Date().toISOString(),
119
+ };
120
+ return didDoc;
121
+ }
122
+ /**
123
+ * 派生 did:key 格式的 DID
124
+ */
125
+ deriveDIDKey(publicKey) {
126
+ if (publicKey.length !== 32) {
127
+ throw new DIDError('Public key must be 32 bytes for Ed25519');
128
+ }
129
+ const prefix = new Uint8Array([0xed, 0x01]);
130
+ const combined = new Uint8Array(prefix.length + publicKey.length);
131
+ combined.set(prefix, 0);
132
+ combined.set(publicKey, prefix.length);
133
+ const encoded = encodeBase58(combined);
134
+ return `did:key:z${encoded}`;
135
+ }
136
+ /**
137
+ * 创建并发布 DID 文档
138
+ */
139
+ async createAndPublish(keypair, peerId) {
140
+ try {
141
+ logger.info('🚀 开始DID发布流程(简化版)');
142
+ logger.info('步骤1: 加密libp2p PeerID');
143
+ const encryptedPeerId = encryptPeerId(keypair.privateKey, peerId);
144
+ logger.info('✓ PeerID已加密');
145
+ logger.info('步骤2: 构建DID文档');
146
+ const didDocument = this.buildDIDDocument(keypair, encryptedPeerId);
147
+ logger.info('✓ DID文档构建完成');
148
+ logger.info(` DID: ${didDocument.id}`);
149
+ logger.info('步骤3: 上传DID文档到IPFS');
150
+ const uploadResult = await this.uploadDIDDocument(didDocument);
151
+ logger.info('✓ 上传完成');
152
+ logger.info(` CID: ${uploadResult.cid}`);
153
+ logger.info('✅ DID发布成功');
154
+ logger.info(` DID: ${keypair.did}`);
155
+ logger.info(` CID: ${uploadResult.cid}`);
156
+ logger.info(' 绑定关系: 通过ZKP验证');
157
+ return {
158
+ did: keypair.did,
159
+ cid: uploadResult.cid,
160
+ didDocument,
161
+ encryptedPeerId,
162
+ };
163
+ }
164
+ catch (error) {
165
+ throw new DIDError('Failed to create and publish DID document', {
166
+ originalError: error,
167
+ });
168
+ }
169
+ }
170
+ /**
171
+ * 创建并发布包含 PubSub 信息的 DID 文档
172
+ */
173
+ async createAndPublishWithPubsub(keypair, peerId, pubsubTopics, networkAddresses) {
174
+ logger.info('🚀 开始DID发布流程(包含PubSub信息)');
175
+ logger.info('步骤1: 加密libp2p PeerID');
176
+ const encryptedPeerId = encryptPeerId(keypair.privateKey, peerId);
177
+ logger.info('✓ PeerID已加密');
178
+ logger.info('步骤2: 构建包含PubSub信息的DID文档');
179
+ const didDocument = this.buildDIDDocumentWithPubsub(keypair, encryptedPeerId, pubsubTopics, networkAddresses);
180
+ logger.info('✓ DID文档构建完成');
181
+ logger.info(` DID: ${didDocument.id}`);
182
+ logger.info('步骤3: 上传DID文档到IPFS');
183
+ const uploadResult = await this.uploadDIDDocument(didDocument);
184
+ logger.info('✓ 上传完成');
185
+ logger.info(` CID: ${uploadResult.cid}`);
186
+ logger.info('✅ DID发布成功(包含PubSub信息)');
187
+ logger.info(` DID: ${keypair.did}`);
188
+ logger.info(` CID: ${uploadResult.cid}`);
189
+ logger.info(` PubSub主题: ${pubsubTopics.join(', ')}`);
190
+ logger.info(` 网络地址: ${networkAddresses.join(', ')}`);
191
+ return {
192
+ did: keypair.did,
193
+ cid: uploadResult.cid,
194
+ didDocument,
195
+ encryptedPeerId,
196
+ };
197
+ }
198
+ /**
199
+ * 上传 DID 文档到 IPFS
200
+ */
201
+ async uploadDIDDocument(didDoc) {
202
+ const json = JSON.stringify(didDoc, null, 2);
203
+ const result = await this.ipfsClient.upload(json, 'did.json');
204
+ return { cid: result.cid, size: result.size };
205
+ }
206
+ }
207
+ /**
208
+ * 从 IPFS CID 获取 DID 文档
209
+ */
210
+ export async function getDIDDocumentFromCID(ipfsClient, cid) {
211
+ logger.info(`从IPFS获取DID文档: ${cid}`);
212
+ const content = await ipfsClient.get(cid);
213
+ const didDoc = JSON.parse(content);
214
+ logger.info(`✓ DID文档获取成功: ${didDoc.id}`);
215
+ return didDoc;
216
+ }
217
+ /**
218
+ * Multihash 代码到哈希函数映射
219
+ */
220
+ const MULTIHASH_CODES = {
221
+ 0x12: 'sha256',
222
+ 0x13: 'sha512',
223
+ 0xb220: 'blake2b512',
224
+ 0xb260: 'blake2s256',
225
+ };
226
+ /**
227
+ * 验证 DID 文档完整性
228
+ * 支持多种哈希算法:SHA-256, SHA-512, Blake2b-512, Blake2s-256
229
+ */
230
+ export async function verifyDIDDocumentIntegrity(didDoc, expectedCid) {
231
+ logger.info('验证DID文档完整性与CID绑定(支持多种哈希算法)');
232
+ const json = JSON.stringify(didDoc);
233
+ logger.debug(` DID文档大小: ${json.length} 字节`);
234
+ try {
235
+ const { CID } = await import('multiformats/cid');
236
+ const cid = CID.parse(expectedCid);
237
+ logger.debug(` CID版本: ${cid.version}`);
238
+ logger.debug(` CID codec: ${cid.codec}`);
239
+ const multihash = cid.multihash;
240
+ const hashCode = multihash.code;
241
+ const hashDigest = multihash.digest;
242
+ logger.debug(` Multihash code: 0x${hashCode.toString(16)}`);
243
+ logger.debug(` Multihash digest: ${toHexString(hashDigest)}`);
244
+ let computedHash;
245
+ switch (hashCode) {
246
+ case 0x12:
247
+ logger.debug(' 使用SHA-256计算哈希');
248
+ computedHash = new Uint8Array(sha256(new TextEncoder().encode(json)));
249
+ break;
250
+ case 0x13:
251
+ logger.debug(' 使用SHA-512计算哈希');
252
+ computedHash = new Uint8Array(sha512(new TextEncoder().encode(json)));
253
+ break;
254
+ case 0xb220:
255
+ logger.debug(' 使用Blake2b-512计算哈希');
256
+ computedHash = new Uint8Array(blake2b(new TextEncoder().encode(json), 64));
257
+ break;
258
+ case 0xb260:
259
+ logger.debug(' 使用Blake2s-256计算哈希');
260
+ computedHash = new Uint8Array(blake2s(new TextEncoder().encode(json), 32));
261
+ break;
262
+ default:
263
+ logger.warn(` ⚠️ 不支持的哈希算法: 0x${hashCode.toString(16)}`);
264
+ logger.debug(' 回退到SHA-256');
265
+ computedHash = new Uint8Array(sha256(new TextEncoder().encode(json)));
266
+ }
267
+ logger.debug(` 计算的哈希: ${toHexString(computedHash)}`);
268
+ const hashesMatch = buffersEqual(computedHash, new Uint8Array(hashDigest));
269
+ if (hashesMatch) {
270
+ logger.info('✅ DID文档哈希与CID匹配');
271
+ }
272
+ else {
273
+ logger.warn('❌ DID文档哈希与CID不匹配');
274
+ logger.debug(` 预期: ${toHexString(hashDigest)}`);
275
+ logger.debug(` 实际: ${toHexString(computedHash)}`);
276
+ logger.debug(` 哈希算法: 0x${hashCode.toString(16)}`);
277
+ }
278
+ return hashesMatch;
279
+ }
280
+ catch (error) {
281
+ logger.error('验证DID文档完整性失败', { error });
282
+ return false;
283
+ }
284
+ }
285
+ /**
286
+ * 验证 DID 文档完整性(同步版本,仅做结构验证)
287
+ */
288
+ export function verifyDIDDocumentIntegritySync(didDoc) {
289
+ try {
290
+ return (didDoc['@context'] !== undefined &&
291
+ didDoc.id !== undefined &&
292
+ didDoc.verificationMethod !== undefined &&
293
+ Array.isArray(didDoc.verificationMethod) &&
294
+ didDoc.verificationMethod.length > 0);
295
+ }
296
+ catch (error) {
297
+ return false;
298
+ }
299
+ }
300
+ function toHexString(bytes) {
301
+ const buffer = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);
302
+ return Array.from(buffer)
303
+ .map((b) => b.toString(16).padStart(2, '0'))
304
+ .join('');
305
+ }
306
+ function buffersEqual(a, b) {
307
+ if (a.length !== b.length)
308
+ return false;
309
+ for (let i = 0; i < a.length; i++) {
310
+ if (a[i] !== b[i])
311
+ return false;
312
+ }
313
+ return true;
314
+ }
315
+ //# sourceMappingURL=did-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"did-builder.js","sourceRoot":"","sources":["../src/did-builder.ts"],"names":[],"mappings":"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"}