@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,268 @@
1
+ /**
2
+ * DIAP TypeScript SDK - IPNS 管理器
3
+ * 负责 IPNS 记录的发布、解析和 Key 管理
4
+ */
5
+ import { logger } from './utils/logger.js';
6
+ /**
7
+ * IPNS 记录状态
8
+ */
9
+ export var IpnsRecordStatus;
10
+ (function (IpnsRecordStatus) {
11
+ /** 待发布 */
12
+ IpnsRecordStatus["Pending"] = "pending";
13
+ /** 已发布 */
14
+ IpnsRecordStatus["Published"] = "published";
15
+ /** 已过期 */
16
+ IpnsRecordStatus["Expired"] = "expired";
17
+ /** 失败 */
18
+ IpnsRecordStatus["Failed"] = "failed";
19
+ })(IpnsRecordStatus || (IpnsRecordStatus = {}));
20
+ /**
21
+ * IPNS 管理器
22
+ */
23
+ export class IpnsManager {
24
+ /** 配置 */
25
+ config;
26
+ /** Key 列表 */
27
+ keys;
28
+ /** 记录缓存 */
29
+ recordCache;
30
+ /** 使用 w3name */
31
+ useW3name;
32
+ /**
33
+ * 创建 IPNS 管理器
34
+ */
35
+ static async create(config) {
36
+ logger.info('🚀 创建 IPNS 管理器');
37
+ const manager = new IpnsManager(config);
38
+ await manager.initialize();
39
+ return manager;
40
+ }
41
+ /**
42
+ * 构造函数
43
+ */
44
+ constructor(config) {
45
+ this.config = {
46
+ useW3name: config?.useW3name ?? true,
47
+ useIpfsNode: config?.useIpfsNode ?? true,
48
+ validityDays: config?.validityDays ?? 365,
49
+ defaultTtl: config?.defaultTtl ?? 3600,
50
+ };
51
+ this.keys = new Map();
52
+ this.recordCache = new Map();
53
+ this.useW3name = this.config.useW3name;
54
+ }
55
+ /**
56
+ * 初始化管理器
57
+ */
58
+ async initialize() {
59
+ logger.info('💾 IPNS 管理器已初始化');
60
+ logger.info(` 使用 w3name: ${this.config.useW3name}`);
61
+ logger.info(` 使用 IPFS 节点: ${this.config.useIpfsNode}`);
62
+ logger.info(` 有效期: ${this.config.validityDays} 天`);
63
+ }
64
+ /**
65
+ * 发布 IPNS 记录
66
+ */
67
+ async publish(cid, keyName = 'self', lifetime = 86400, ttl) {
68
+ logger.info(`📤 发布 IPNS 记录: ${cid}`);
69
+ const keyInfo = this.keys.get(keyName);
70
+ if (!keyInfo) {
71
+ throw new Error(`Key not found: ${keyName}`);
72
+ }
73
+ const name = `/ipns/${keyInfo.id}`;
74
+ const sequence = this.getNextSequence(name);
75
+ const validity = Date.now() + this.config.validityDays * 24 * 60 * 60 * 1000;
76
+ // 创建 IPNS 记录
77
+ const record = {
78
+ name,
79
+ value: cid,
80
+ sequence,
81
+ validity,
82
+ signature: new Uint8Array(64), // 模拟签名
83
+ ttl: ttl || this.config.defaultTtl,
84
+ };
85
+ // 发布到 IPNS
86
+ if (this.useW3name) {
87
+ await this.publishToW3name(record);
88
+ }
89
+ else {
90
+ await this.publishToIpfs(record);
91
+ }
92
+ // 缓存记录
93
+ this.recordCache.set(name, record);
94
+ const result = {
95
+ name,
96
+ value: cid,
97
+ sequence,
98
+ validity,
99
+ signature: Buffer.from(record.signature).toString('base64'),
100
+ publishedAt: new Date().toISOString(),
101
+ };
102
+ logger.info(`✅ IPNS 记录已发布: ${name}`);
103
+ return result;
104
+ }
105
+ /**
106
+ * 发布到 w3name
107
+ */
108
+ async publishToW3name(record) {
109
+ logger.debug('发布到 w3name...');
110
+ // 模拟 w3name 发布
111
+ return new Promise((resolve) => setTimeout(resolve, 100));
112
+ }
113
+ /**
114
+ * 发布到 IPFS 节点
115
+ */
116
+ async publishToIpfs(record) {
117
+ logger.debug('发布到 IPFS 节点...');
118
+ // 模拟 IPFS 发布
119
+ return new Promise((resolve) => setTimeout(resolve, 100));
120
+ }
121
+ /**
122
+ * 解析 IPNS 名称
123
+ */
124
+ async resolve(ipnsName) {
125
+ logger.info(`🔍 解析 IPNS: ${ipnsName}`);
126
+ // 检查缓存
127
+ const cached = this.recordCache.get(ipnsName);
128
+ if (cached && cached.validity > Date.now()) {
129
+ logger.debug('使用缓存的 IPNS 记录');
130
+ return {
131
+ name: ipnsName,
132
+ value: cached.value,
133
+ sequence: cached.sequence,
134
+ ttl: cached.ttl,
135
+ cachedAt: new Date().toISOString(),
136
+ };
137
+ }
138
+ // 从网络解析
139
+ if (this.useW3name) {
140
+ return await this.resolveFromW3name(ipnsName);
141
+ }
142
+ else {
143
+ return await this.resolveFromIpfs(ipnsName);
144
+ }
145
+ }
146
+ /**
147
+ * 从 w3name 解析
148
+ */
149
+ async resolveFromW3name(ipnsName) {
150
+ logger.debug('从 w3name 解析...');
151
+ // 模拟 w3name 解析
152
+ return {
153
+ name: ipnsName,
154
+ value: 'QmDefaultResolvedCid',
155
+ sequence: 1,
156
+ ttl: this.config.defaultTtl,
157
+ };
158
+ }
159
+ /**
160
+ * 从 IPFS 节点解析
161
+ */
162
+ async resolveFromIpfs(ipnsName) {
163
+ logger.debug('从 IPFS 节点解析...');
164
+ // 模拟 IPFS 解析
165
+ return {
166
+ name: ipnsName,
167
+ value: 'QmDefaultResolvedCid',
168
+ sequence: 1,
169
+ ttl: this.config.defaultTtl,
170
+ };
171
+ }
172
+ /**
173
+ * 确保 Key 存在
174
+ */
175
+ async ensureKeyExists(keyName) {
176
+ let keyInfo = this.keys.get(keyName);
177
+ if (!keyInfo) {
178
+ keyInfo = await this.createKey(keyName);
179
+ }
180
+ return keyInfo;
181
+ }
182
+ /**
183
+ * 创建新的 IPNS Key
184
+ */
185
+ async createKey(keyName) {
186
+ logger.info(`🔑 创建 IPNS Key: ${keyName}`);
187
+ // 生成 Key ID
188
+ const id = this.generateKeyId();
189
+ const keyInfo = {
190
+ name: keyName,
191
+ id,
192
+ };
193
+ this.keys.set(keyName, keyInfo);
194
+ logger.info(`✅ Key 创建成功: ${id}`);
195
+ return keyInfo;
196
+ }
197
+ /**
198
+ * 列出所有 Key
199
+ */
200
+ listKeys() {
201
+ return Array.from(this.keys.values());
202
+ }
203
+ /**
204
+ * 删除 Key
205
+ */
206
+ async removeKey(keyName) {
207
+ if (this.keys.has(keyName)) {
208
+ this.keys.delete(keyName);
209
+ logger.info(`🗑️ Key 已删除: ${keyName}`);
210
+ }
211
+ }
212
+ /**
213
+ * 获取下一个序列号
214
+ */
215
+ getNextSequence(name) {
216
+ const record = this.recordCache.get(name);
217
+ return record ? record.sequence + 1 : 1;
218
+ }
219
+ /**
220
+ * 生成 Key ID
221
+ */
222
+ generateKeyId() {
223
+ const chars = '0123456789abcdef';
224
+ let result = 'k51';
225
+ for (let i = 0; i < 50; i++) {
226
+ result += chars[Math.floor(Math.random() * chars.length)];
227
+ }
228
+ return result;
229
+ }
230
+ /**
231
+ * 获取配置
232
+ */
233
+ getConfig() {
234
+ return { ...this.config };
235
+ }
236
+ /**
237
+ * 清空缓存
238
+ */
239
+ clearCache() {
240
+ this.recordCache.clear();
241
+ logger.info('🧹 IPNS 缓存已清空');
242
+ }
243
+ /**
244
+ * 获取缓存的记录数
245
+ */
246
+ getCacheSize() {
247
+ return this.recordCache.size;
248
+ }
249
+ /**
250
+ * 获取 Key 数量
251
+ */
252
+ getKeyCount() {
253
+ return this.keys.size;
254
+ }
255
+ }
256
+ // ============================================================================
257
+ // 便捷函数
258
+ // ============================================================================
259
+ /**
260
+ * 创建 IPNS 管理器(便捷函数)
261
+ */
262
+ export async function createIpnsManager(config) {
263
+ return IpnsManager.create(config);
264
+ }
265
+ // ============================================================================
266
+ // 导出
267
+ // ============================================================================
268
+ //# sourceMappingURL=ipns-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipns-manager.js","sourceRoot":"","sources":["../src/ipns-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * 密钥管理模块
3
+ * 负责密钥的生成、存储、加载和管理
4
+ */
5
+ import type { KeyPair, KeyBackup } from './types/key.js';
6
+ /**
7
+ * 密钥管理器
8
+ */
9
+ export declare class KeyManager {
10
+ /**
11
+ * 生成新的 Ed25519 密钥对
12
+ */
13
+ static generate(): KeyPair;
14
+ /**
15
+ * 从私钥加载密钥对
16
+ */
17
+ static fromPrivateKey(privateKey: Uint8Array): KeyPair;
18
+ /**
19
+ * 从文件加载密钥对
20
+ */
21
+ static fromFile(path: string): Promise<KeyPair>;
22
+ /**
23
+ * 保存密钥对到文件
24
+ */
25
+ static saveToFile(keypair: KeyPair, path: string): Promise<void>;
26
+ /**
27
+ * 导出密钥备份(加密)
28
+ */
29
+ static exportBackup(keypair: KeyPair, password?: string): KeyBackup;
30
+ /**
31
+ * 从备份导入密钥
32
+ */
33
+ static importFromBackup(backup: KeyBackup, password?: string): KeyPair;
34
+ /**
35
+ * 使用 Ed25519 签名数据
36
+ */
37
+ static sign(keypair: KeyPair, data: Uint8Array): Promise<Uint8Array>;
38
+ /**
39
+ * 验证 Ed25519 签名
40
+ */
41
+ static verify(keypair: KeyPair, data: Uint8Array, signature: Uint8Array): Promise<boolean>;
42
+ /**
43
+ * 派生 did:key 格式的 DID
44
+ * 参考: https://w3c-ccg.github.io/did-method-key/#ed25519-x25519
45
+ */
46
+ private static deriveDIDKey;
47
+ }
48
+ //# sourceMappingURL=key-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-manager.d.ts","sourceRoot":"","sources":["../src/key-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAW,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAOlE;;GAEG;AACH,qBAAa,UAAU;IACrB;;OAEG;IACH,MAAM,CAAC,QAAQ,IAAI,OAAO;IAuB1B;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAsBtD;;OAEG;WACU,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBrD;;OAEG;WACU,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BtE;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS;IAmDnE;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO;IAsCtE;;OAEG;WACU,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAS1E;;OAEG;WACU,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAUhG;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;CAiB5B"}
@@ -0,0 +1,231 @@
1
+ /**
2
+ * 密钥管理模块
3
+ * 负责密钥的生成、存储、加载和管理
4
+ */
5
+ import * as ed25519 from '@noble/ed25519';
6
+ import { promises as fs } from 'fs';
7
+ import { join } from 'path';
8
+ import { KeyManagementError } from './types/errors.js';
9
+ import { encodeHex, decodeHex } from './utils/encoding.js';
10
+ import { encryptAES256GCM, decryptAES256GCM, deriveKey, generateRandomBytes } from './utils/crypto.js';
11
+ import { encodeBase58 } from './utils/encoding.js';
12
+ import { logger } from './utils/logger.js';
13
+ /**
14
+ * 密钥管理器
15
+ */
16
+ export class KeyManager {
17
+ /**
18
+ * 生成新的 Ed25519 密钥对
19
+ */
20
+ static generate() {
21
+ try {
22
+ // 生成32字节随机私钥
23
+ const privateKey = ed25519.utils.randomPrivateKey();
24
+ // 从私钥派生公钥
25
+ const publicKey = ed25519.getPublicKey(privateKey);
26
+ // 派生 did:key 格式的 DID
27
+ const did = KeyManager.deriveDIDKey(publicKey);
28
+ logger.debug('Generated new Ed25519 keypair', { did });
29
+ return {
30
+ privateKey,
31
+ publicKey,
32
+ did,
33
+ };
34
+ }
35
+ catch (error) {
36
+ throw new KeyManagementError('Failed to generate keypair', { originalError: error });
37
+ }
38
+ }
39
+ /**
40
+ * 从私钥加载密钥对
41
+ */
42
+ static fromPrivateKey(privateKey) {
43
+ if (privateKey.length !== 32) {
44
+ throw new KeyManagementError('Private key must be 32 bytes');
45
+ }
46
+ try {
47
+ // 从私钥派生公钥
48
+ const publicKey = ed25519.getPublicKey(privateKey);
49
+ // 派生 did:key 格式的 DID
50
+ const did = KeyManager.deriveDIDKey(publicKey);
51
+ return {
52
+ privateKey,
53
+ publicKey,
54
+ did,
55
+ };
56
+ }
57
+ catch (error) {
58
+ throw new KeyManagementError('Failed to load keypair from private key', { originalError: error });
59
+ }
60
+ }
61
+ /**
62
+ * 从文件加载密钥对
63
+ */
64
+ static async fromFile(path) {
65
+ try {
66
+ const content = await fs.readFile(path, 'utf-8');
67
+ const keyFile = JSON.parse(content);
68
+ // 解码私钥
69
+ const privateKeyBytes = decodeHex(keyFile.privateKey);
70
+ if (privateKeyBytes.length !== 32) {
71
+ throw new KeyManagementError('Invalid private key length in file');
72
+ }
73
+ return KeyManager.fromPrivateKey(privateKeyBytes);
74
+ }
75
+ catch (error) {
76
+ if (error instanceof KeyManagementError) {
77
+ throw error;
78
+ }
79
+ throw new KeyManagementError(`Failed to load keypair from file: ${path}`, { originalError: error });
80
+ }
81
+ }
82
+ /**
83
+ * 保存密钥对到文件
84
+ */
85
+ static async saveToFile(keypair, path) {
86
+ try {
87
+ const keyFile = {
88
+ keyType: 'Ed25519',
89
+ privateKey: encodeHex(keypair.privateKey),
90
+ publicKey: encodeHex(keypair.publicKey),
91
+ did: keypair.did,
92
+ createdAt: new Date().toISOString(),
93
+ version: '2.0',
94
+ };
95
+ const content = JSON.stringify(keyFile, null, 2);
96
+ // 确保目录存在
97
+ const dir = join(path, '..');
98
+ await fs.mkdir(dir, { recursive: true });
99
+ // 写入文件
100
+ await fs.writeFile(path, content, { mode: 0o600 }); // 设置权限为 600
101
+ logger.debug('Saved keypair to file', { path });
102
+ }
103
+ catch (error) {
104
+ throw new KeyManagementError(`Failed to save keypair to file: ${path}`, { originalError: error });
105
+ }
106
+ }
107
+ /**
108
+ * 导出密钥备份(加密)
109
+ */
110
+ static exportBackup(keypair, password) {
111
+ try {
112
+ const keyFile = {
113
+ keyType: 'Ed25519',
114
+ privateKey: encodeHex(keypair.privateKey),
115
+ publicKey: encodeHex(keypair.publicKey),
116
+ did: keypair.did,
117
+ createdAt: new Date().toISOString(),
118
+ version: '2.0',
119
+ };
120
+ const jsonData = JSON.stringify(keyFile);
121
+ let encryptedData;
122
+ if (password) {
123
+ // 使用密码加密
124
+ const salt = generateRandomBytes(16);
125
+ const key = deriveKey(password, salt);
126
+ const { ciphertext, nonce, tag } = encryptAES256GCM(new TextEncoder().encode(jsonData), key, generateRandomBytes(12));
127
+ // 组合: salt + nonce + tag + ciphertext
128
+ const combined = new Uint8Array(salt.length + nonce.length + tag.length + ciphertext.length);
129
+ let offset = 0;
130
+ combined.set(salt, offset);
131
+ offset += salt.length;
132
+ combined.set(nonce, offset);
133
+ offset += nonce.length;
134
+ combined.set(tag, offset);
135
+ offset += tag.length;
136
+ combined.set(ciphertext, offset);
137
+ encryptedData = Buffer.from(combined).toString('base64');
138
+ }
139
+ else {
140
+ // 无密码时使用 base64 编码
141
+ encryptedData = Buffer.from(jsonData).toString('base64');
142
+ }
143
+ return {
144
+ encryptedData,
145
+ exportedAt: new Date().toISOString(),
146
+ };
147
+ }
148
+ catch (error) {
149
+ throw new KeyManagementError('Failed to export key backup', { originalError: error });
150
+ }
151
+ }
152
+ /**
153
+ * 从备份导入密钥
154
+ */
155
+ static importFromBackup(backup, password) {
156
+ try {
157
+ const encryptedBuffer = Buffer.from(backup.encryptedData, 'base64');
158
+ let jsonData;
159
+ if (password) {
160
+ // 解密数据
161
+ const salt = new Uint8Array(encryptedBuffer.slice(0, 16));
162
+ const nonce = new Uint8Array(encryptedBuffer.slice(16, 28));
163
+ const tag = new Uint8Array(encryptedBuffer.slice(28, 44));
164
+ const ciphertext = new Uint8Array(encryptedBuffer.slice(44));
165
+ const key = deriveKey(password, salt);
166
+ const decrypted = decryptAES256GCM(ciphertext, key, nonce, tag);
167
+ jsonData = new TextDecoder().decode(decrypted);
168
+ }
169
+ else {
170
+ // 直接解码 base64
171
+ jsonData = encryptedBuffer.toString('utf-8');
172
+ }
173
+ const keyFile = JSON.parse(jsonData);
174
+ const privateKeyBytes = decodeHex(keyFile.privateKey);
175
+ if (privateKeyBytes.length !== 32) {
176
+ throw new KeyManagementError('Invalid private key length in backup');
177
+ }
178
+ return KeyManager.fromPrivateKey(privateKeyBytes);
179
+ }
180
+ catch (error) {
181
+ if (error instanceof KeyManagementError) {
182
+ throw error;
183
+ }
184
+ throw new KeyManagementError('Failed to import key from backup', { originalError: error });
185
+ }
186
+ }
187
+ /**
188
+ * 使用 Ed25519 签名数据
189
+ */
190
+ static async sign(keypair, data) {
191
+ try {
192
+ const signature = await ed25519.sign(data, keypair.privateKey);
193
+ return signature;
194
+ }
195
+ catch (error) {
196
+ throw new KeyManagementError('Failed to sign data', { originalError: error });
197
+ }
198
+ }
199
+ /**
200
+ * 验证 Ed25519 签名
201
+ */
202
+ static async verify(keypair, data, signature) {
203
+ try {
204
+ const isValid = await ed25519.verify(signature, data, keypair.publicKey);
205
+ return isValid;
206
+ }
207
+ catch (error) {
208
+ logger.warn('Signature verification failed', { error });
209
+ return false;
210
+ }
211
+ }
212
+ /**
213
+ * 派生 did:key 格式的 DID
214
+ * 参考: https://w3c-ccg.github.io/did-method-key/#ed25519-x25519
215
+ */
216
+ static deriveDIDKey(publicKey) {
217
+ if (publicKey.length !== 32) {
218
+ throw new KeyManagementError('Public key must be 32 bytes for Ed25519');
219
+ }
220
+ // 构造 multicodec 前缀: 0xed01 (Ed25519 public key)
221
+ // multibase base58btc编码: z
222
+ const prefix = new Uint8Array([0xed, 0x01]);
223
+ const combined = new Uint8Array(prefix.length + publicKey.length);
224
+ combined.set(prefix, 0);
225
+ combined.set(publicKey, prefix.length);
226
+ // Base58 编码
227
+ const encoded = encodeBase58(combined);
228
+ return `did:key:z${encoded}`;
229
+ }
230
+ }
231
+ //# sourceMappingURL=key-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-manager.js","sourceRoot":"","sources":["../src/key-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * DIAP TypeScript SDK - Kubo 安装器
3
+ * 自动下载和安装 Kubo(Go-IPFS)二进制文件
4
+ */
5
+ /**
6
+ * Kubo 安装状态
7
+ */
8
+ export declare enum InstallationStatus {
9
+ /** 未知 */
10
+ Unknown = "unknown",
11
+ /** 检查中 */
12
+ Checking = "checking",
13
+ /** 已安装 */
14
+ Installed = "installed",
15
+ /** 下载中 */
16
+ Downloading = "downloading",
17
+ /** 安装中 */
18
+ Installing = "installing",
19
+ /** 安装失败 */
20
+ Failed = "failed"
21
+ }
22
+ /**
23
+ * Kubo 安装结果
24
+ */
25
+ export interface InstallationResult {
26
+ /** 是否成功 */
27
+ success: boolean;
28
+ /** Kubo 路径 */
29
+ path?: string;
30
+ /** 版本 */
31
+ version?: string;
32
+ /** 错误信息 */
33
+ error?: string;
34
+ }
35
+ /**
36
+ * Kubo 版本信息
37
+ */
38
+ export interface KuboVersion {
39
+ /** 版本号 */
40
+ version: string;
41
+ /** 发布日期 */
42
+ releaseDate: string;
43
+ /** 下载链接 */
44
+ downloadUrl: string;
45
+ }
46
+ /**
47
+ * Kubo 安装器配置
48
+ */
49
+ export interface KuboInstallerConfig {
50
+ /** 安装目录 */
51
+ installDir?: string;
52
+ /** 是否强制重新安装 */
53
+ forceReinstall?: boolean;
54
+ /** 下载超时(毫秒) */
55
+ downloadTimeout?: number;
56
+ /** 代理 URL */
57
+ proxyUrl?: string;
58
+ }
59
+ /**
60
+ * Kubo 安装器
61
+ */
62
+ export declare class KuboInstaller {
63
+ private config;
64
+ private platform;
65
+ private arch;
66
+ /**
67
+ * 创建 Kubo 安装器
68
+ */
69
+ constructor(config?: KuboInstallerConfig);
70
+ /**
71
+ * 检查 Kubo 是否已安装
72
+ */
73
+ checkInstalled(): Promise<boolean>;
74
+ /**
75
+ * 获取 Kubo 版本
76
+ */
77
+ getVersion(): Promise<string | null>;
78
+ /**
79
+ * 安装 Kubo
80
+ */
81
+ install(): Promise<InstallationResult>;
82
+ /**
83
+ * 卸载 Kubo
84
+ */
85
+ uninstall(): Promise<boolean>;
86
+ /**
87
+ * 获取下载链接
88
+ */
89
+ getDownloadUrl(): string;
90
+ /**
91
+ * 获取默认安装目录
92
+ */
93
+ private getDefaultInstallDir;
94
+ /**
95
+ * 检测平台
96
+ */
97
+ private detectPlatform;
98
+ /**
99
+ * 检测架构
100
+ */
101
+ private detectArch;
102
+ }
103
+ /**
104
+ * 创建 Kubo 安装器
105
+ */
106
+ export declare function createKuboInstaller(config?: KuboInstallerConfig): KuboInstaller;
107
+ /**
108
+ * 检查 Kubo 是否已安装
109
+ */
110
+ export declare function isKuboInstalled(): Promise<boolean>;
111
+ /**
112
+ * 安装 Kubo
113
+ */
114
+ export declare function installKubo(config?: KuboInstallerConfig): Promise<InstallationResult>;
115
+ //# sourceMappingURL=kubo-installer.d.ts.map