@agentunion/fastaun-browser 0.4.4 → 0.4.6

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 (73) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/_packed_docs/CHANGELOG.md +41 -0
  3. package/_packed_docs/INDEX.md +2 -2
  4. package/_packed_docs/KITE_DOCS_GUIDE.md +1 -1
  5. package/_packed_docs/agent.md//350/277/234/347/250/213agent.md/347/274/223/345/255/230/344/270/216etag/351/200/217/344/274/240/346/226/271/346/241/210.md +73 -84
  6. package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +16 -15
  7. package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +2 -2
  8. package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +22 -5
  9. package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +42 -26
  10. package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +2 -2
  11. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +61 -35
  12. package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +3 -3
  13. package/_packed_docs/sdk/09-message-rpc-manual.md +6 -6
  14. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +6 -4
  15. package/_packed_docs/sdk/INDEX.md +2 -2
  16. package/_packed_docs/sdk/README.md +3 -3
  17. package/dist/agent-md.d.ts +111 -0
  18. package/dist/agent-md.d.ts.map +1 -0
  19. package/dist/agent-md.js +656 -0
  20. package/dist/agent-md.js.map +1 -0
  21. package/dist/aid-store.d.ts +8 -40
  22. package/dist/aid-store.d.ts.map +1 -1
  23. package/dist/aid-store.js +89 -172
  24. package/dist/aid-store.js.map +1 -1
  25. package/dist/auth.d.ts +8 -13
  26. package/dist/auth.d.ts.map +1 -1
  27. package/dist/auth.js +37 -130
  28. package/dist/auth.js.map +1 -1
  29. package/dist/bundle.js +6540 -6033
  30. package/dist/client.d.ts +8 -65
  31. package/dist/client.d.ts.map +1 -1
  32. package/dist/client.js +193 -762
  33. package/dist/client.js.map +1 -1
  34. package/dist/index.d.ts +4 -2
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +3 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/keystore/index.d.ts +49 -22
  39. package/dist/keystore/index.d.ts.map +1 -1
  40. package/dist/keystore/index.js +6 -1
  41. package/dist/keystore/index.js.map +1 -1
  42. package/dist/keystore/indexeddb-identity-store.d.ts +59 -0
  43. package/dist/keystore/indexeddb-identity-store.d.ts.map +1 -0
  44. package/dist/keystore/indexeddb-identity-store.js +489 -0
  45. package/dist/keystore/indexeddb-identity-store.js.map +1 -0
  46. package/dist/keystore/indexeddb-shared.d.ts +76 -0
  47. package/dist/keystore/indexeddb-shared.d.ts.map +1 -0
  48. package/dist/keystore/indexeddb-shared.js +382 -0
  49. package/dist/keystore/indexeddb-shared.js.map +1 -0
  50. package/dist/keystore/indexeddb-token-store.d.ts +119 -0
  51. package/dist/keystore/indexeddb-token-store.d.ts.map +1 -0
  52. package/dist/keystore/indexeddb-token-store.js +1086 -0
  53. package/dist/keystore/indexeddb-token-store.js.map +1 -0
  54. package/dist/keystore/indexeddb.d.ts +11 -1
  55. package/dist/keystore/indexeddb.d.ts.map +1 -1
  56. package/dist/keystore/indexeddb.js +167 -18
  57. package/dist/keystore/indexeddb.js.map +1 -1
  58. package/dist/register-flow.d.ts +53 -0
  59. package/dist/register-flow.d.ts.map +1 -0
  60. package/dist/register-flow.js +401 -0
  61. package/dist/register-flow.js.map +1 -0
  62. package/dist/v2/session/keystore.d.ts +5 -0
  63. package/dist/v2/session/keystore.d.ts.map +1 -1
  64. package/dist/v2/session/keystore.js +29 -0
  65. package/dist/v2/session/keystore.js.map +1 -1
  66. package/dist/version.d.ts +1 -1
  67. package/dist/version.js +1 -1
  68. package/package.json +1 -1
  69. package/_packed_docs/0.4.0_/345/267/256/345/274/202/346/240/270/345/256/236/345/206/263/347/255/226/350/256/260/345/275/225.md +0 -302
  70. package/_packed_docs/AUN_SDK_0.4.0_/350/256/276/350/256/241/345/257/271/346/257/224/345/210/206/346/236/220.md +0 -194
  71. package/_packed_docs/AUN_SDK_/351/207/215/346/236/204/345/256/236/346/226/275/350/256/241/345/210/222.md +0 -596
  72. package/_packed_docs/AUN_SDK_/351/207/215/346/236/204/350/256/276/350/256/241/346/226/271/346/241/210_v3.md +0 -1698
  73. package/_packed_docs/python-sdk-v2-only-changelog.md +0 -189
@@ -0,0 +1,489 @@
1
+ // ── IndexedDBIdentityStore — 含私钥操作的 KeyStore 实现 ──────────
2
+ //
3
+ // 持有方:AIDStore / RegisterFlow。
4
+ // 负责:密钥对、完整身份、pending 注册、证书、metadata KV、信任根。
5
+ //
6
+ // 不含 prekeys/群组密钥/sessions/seq/agent.md 缓存等会话侧操作。
7
+ import { _noopLog, STORE_KEY_PAIRS, STORE_CERTS, STORE_METADATA, STORE_PENDING_IDENTITIES, safeAid, deepClone, isRecord, metadataStoreKey, normalizeCertFingerprint, fingerprintFromCertPem, certStoreKey, stripStructuredFields, pendingIdentityPrefix, randomHex, extractSpkiB64FromCertPem, encryptPEM, decryptPEM, hasEncryptionSeed, idbGet, idbGetAll, idbGetAllByPrefix, idbPut, idbDelete, } from './indexeddb-shared.js';
8
+ export class SeedMigrationError extends Error {
9
+ constructor(message) {
10
+ super(message);
11
+ this.name = 'SeedMigrationError';
12
+ }
13
+ }
14
+ /**
15
+ * 基于 IndexedDB 的身份存储实现(含私钥)。
16
+ * AIDStore / RegisterFlow 持有此类型。
17
+ */
18
+ export class IndexedDBIdentityStore {
19
+ _log = _noopLog;
20
+ setLogger(log) { this._log = log; }
21
+ static _aidTails = new Map();
22
+ /** 私钥加密种子;空字符串也是有效 seed,默认不再写入明文私钥。 */
23
+ _encryptionSeed;
24
+ constructor(opts) {
25
+ this._encryptionSeed = opts?.encryptionSeed ?? '';
26
+ }
27
+ static async changeSeed(oldSeed, newSeed) {
28
+ if (oldSeed === '.seed') {
29
+ throw new SeedMigrationError('JS IndexedDB keystore does not support file .seed migration');
30
+ }
31
+ const rows = await idbGetAll(STORE_KEY_PAIRS);
32
+ const migrations = [];
33
+ for (const row of rows) {
34
+ if (!isRecord(row.value))
35
+ continue;
36
+ const envelope = row.value._encrypted_pk;
37
+ if (!isRecord(envelope)) {
38
+ const plain = row.value.private_key_pem;
39
+ if (typeof plain === 'string' && plain) {
40
+ migrations.push({ key: row.key, value: deepClone(row.value), privateKeyPem: plain });
41
+ }
42
+ continue;
43
+ }
44
+ try {
45
+ const privateKeyPem = await decryptPEM(envelope, oldSeed);
46
+ migrations.push({ key: row.key, value: deepClone(row.value), privateKeyPem });
47
+ }
48
+ catch {
49
+ throw new SeedMigrationError(`seed migration refused: private key is not encrypted by old seed: aid=${row.key}`);
50
+ }
51
+ }
52
+ if (migrations.length === 0) {
53
+ throw new SeedMigrationError('seed migration refused: no encrypted private key verified with old seed');
54
+ }
55
+ const result = {
56
+ migrated: 0,
57
+ skipped: 0,
58
+ errors: 0,
59
+ privateKeysVerified: migrations.length,
60
+ privateKeysMigrated: 0,
61
+ };
62
+ for (const item of migrations) {
63
+ const next = deepClone(item.value);
64
+ next._encrypted_pk = await encryptPEM(item.privateKeyPem, newSeed);
65
+ const verified = await decryptPEM(next._encrypted_pk, newSeed);
66
+ if (verified !== item.privateKeyPem) {
67
+ throw new SeedMigrationError(`new seed verification failed for private key: aid=${item.key}`);
68
+ }
69
+ delete next.private_key_pem;
70
+ await idbPut(STORE_KEY_PAIRS, item.key, next);
71
+ result.migrated += 1;
72
+ result.privateKeysMigrated += 1;
73
+ }
74
+ return result;
75
+ }
76
+ async changeSeed(oldSeed, newSeed) {
77
+ const result = await IndexedDBIdentityStore.changeSeed(oldSeed, newSeed);
78
+ this._encryptionSeed = newSeed;
79
+ return result;
80
+ }
81
+ async _withAidLock(aid, fn) {
82
+ const key = safeAid(aid);
83
+ const previous = IndexedDBIdentityStore._aidTails.get(key) ?? Promise.resolve();
84
+ let release;
85
+ const current = new Promise((resolve) => { release = resolve; });
86
+ const tail = previous.catch(() => undefined).then(() => current);
87
+ IndexedDBIdentityStore._aidTails.set(key, tail);
88
+ await previous.catch(() => undefined);
89
+ try {
90
+ return await fn();
91
+ }
92
+ finally {
93
+ release();
94
+ if (IndexedDBIdentityStore._aidTails.get(key) === tail) {
95
+ IndexedDBIdentityStore._aidTails.delete(key);
96
+ }
97
+ }
98
+ }
99
+ async listIdentities() {
100
+ const tStart = Date.now();
101
+ this._log.debug('listIdentities enter');
102
+ try {
103
+ const records = await idbGetAll(STORE_METADATA);
104
+ const aids = new Set();
105
+ for (const item of records) {
106
+ if (item.key.startsWith('_seq_|'))
107
+ continue;
108
+ const value = item.value;
109
+ const aid = typeof value === 'object' && value !== null && isRecord(value) && typeof value.aid === 'string' && value.aid
110
+ ? value.aid
111
+ : item.key;
112
+ aids.add(String(aid));
113
+ }
114
+ for (const item of await idbGetAll(STORE_KEY_PAIRS)) {
115
+ if (!item.key.startsWith('_seq_|'))
116
+ aids.add(item.key);
117
+ }
118
+ for (const item of await idbGetAll(STORE_CERTS)) {
119
+ if (item.key.startsWith('_seq_|'))
120
+ continue;
121
+ const [safe] = item.key.split('|', 1);
122
+ if (safe)
123
+ aids.add(safe);
124
+ }
125
+ const result = [...aids].sort();
126
+ this._log.debug(`listIdentities exit: elapsed=${Date.now() - tStart}ms count=${result.length}`);
127
+ return result;
128
+ }
129
+ catch (err) {
130
+ this._log.debug(`listIdentities exit (error): elapsed=${Date.now() - tStart}ms err=${err instanceof Error ? err.message : String(err)}`);
131
+ throw err;
132
+ }
133
+ }
134
+ // ── 密钥对 ──────────────────────────────────────────
135
+ async loadKeyPair(aid) {
136
+ const data = await idbGet(STORE_KEY_PAIRS, metadataStoreKey(aid));
137
+ if (!isRecord(data))
138
+ return null;
139
+ const result = deepClone(data);
140
+ const epk = result._encrypted_pk;
141
+ if (epk && typeof epk === 'object' && !Array.isArray(epk) && hasEncryptionSeed(this._encryptionSeed)) {
142
+ try {
143
+ const envelope = epk;
144
+ result.private_key_pem = await decryptPEM(envelope, this._encryptionSeed);
145
+ delete result._encrypted_pk;
146
+ }
147
+ catch {
148
+ this._log.error(`[keystore] decrypt ${aid} private key failed, maybe encryptionSeed mismatch`);
149
+ throw new Error(`private key decrypt failed for aid ${aid}: seed_password mismatch or IndexedDB record corrupted`);
150
+ }
151
+ }
152
+ else if (!epk && typeof result.private_key_pem === 'string' && hasEncryptionSeed(this._encryptionSeed)) {
153
+ await this.saveKeyPair(aid, result);
154
+ }
155
+ return result;
156
+ }
157
+ async saveKeyPair(aid, keyPair) {
158
+ const record = deepClone(keyPair);
159
+ if (hasEncryptionSeed(this._encryptionSeed) && typeof record.private_key_pem === 'string') {
160
+ record._encrypted_pk = await encryptPEM(record.private_key_pem, this._encryptionSeed);
161
+ delete record.private_key_pem;
162
+ }
163
+ await idbPut(STORE_KEY_PAIRS, metadataStoreKey(aid), record);
164
+ }
165
+ // ── RegisterAID pending 身份 ─────────────────────────
166
+ async pendingIdentityDir(aid) {
167
+ const handle = `${pendingIdentityPrefix(aid)}${randomHex(4)}-${Math.floor(Date.now() / 1000)}`;
168
+ const now = Date.now();
169
+ await idbPut(STORE_PENDING_IDENTITIES, handle, {
170
+ aid,
171
+ created_at: now,
172
+ updated_at: now,
173
+ });
174
+ return handle;
175
+ }
176
+ async listPendingIdentityDirs(aid) {
177
+ const prefix = pendingIdentityPrefix(aid);
178
+ const rows = await idbGetAllByPrefix(STORE_PENDING_IDENTITIES, prefix);
179
+ return rows
180
+ .filter((row) => row.key.startsWith(prefix) && isRecord(row.value) && String(row.value.aid ?? '') === aid)
181
+ .sort((a, b) => Number(b.value.updated_at ?? 0) - Number(a.value.updated_at ?? 0))
182
+ .map((row) => row.key);
183
+ }
184
+ async savePendingKeyPair(handle, aid, keyPair) {
185
+ const current = await this._loadPendingRecord(handle, aid);
186
+ if (!current)
187
+ throw new Error(`pending identity not found: ${handle}`);
188
+ const record = deepClone(keyPair);
189
+ const privateKeyPem = record.private_key_pem;
190
+ if (typeof privateKeyPem !== 'string' || !privateKeyPem) {
191
+ throw new Error('savePendingKeyPair requires private_key_pem');
192
+ }
193
+ record._encrypted_pk = await encryptPEM(privateKeyPem, this._encryptionSeed ?? '');
194
+ delete record.private_key_pem;
195
+ await idbPut(STORE_PENDING_IDENTITIES, handle, {
196
+ ...current,
197
+ aid,
198
+ key_pair: record,
199
+ updated_at: Date.now(),
200
+ });
201
+ }
202
+ async loadPendingKeyPair(handle, aid) {
203
+ const current = await this._loadPendingRecord(handle, aid, false);
204
+ if (!current || !isRecord(current.key_pair))
205
+ return null;
206
+ const result = deepClone(current.key_pair);
207
+ const encrypted = result._encrypted_pk;
208
+ if (isRecord(encrypted)) {
209
+ try {
210
+ const envelope = encrypted;
211
+ result.private_key_pem = await decryptPEM(envelope, this._encryptionSeed ?? '');
212
+ delete result._encrypted_pk;
213
+ return result;
214
+ }
215
+ catch {
216
+ this._log.error(`[keystore] decrypt pending ${aid} private key failed, maybe encryptionSeed mismatch`);
217
+ throw new Error(`pending identity private key decrypt failed for aid ${aid}: seed_password mismatch or IndexedDB record corrupted`);
218
+ }
219
+ }
220
+ if (typeof result.private_key_pem === 'string' && result.private_key_pem) {
221
+ await this.savePendingKeyPair(handle, aid, result);
222
+ return result;
223
+ }
224
+ return result;
225
+ }
226
+ async savePendingCert(handle, certPem) {
227
+ const current = await this._loadPendingRecord(handle, undefined);
228
+ if (!current)
229
+ throw new Error(`pending identity not found: ${handle}`);
230
+ await idbPut(STORE_PENDING_IDENTITIES, handle, {
231
+ ...current,
232
+ cert: certPem,
233
+ updated_at: Date.now(),
234
+ });
235
+ }
236
+ async promotePendingIdentity(handle, aid) {
237
+ const current = await this._loadPendingRecord(handle, aid);
238
+ if (!current)
239
+ throw new Error(`pending identity not found: ${handle}`);
240
+ if (!isRecord(current.key_pair)) {
241
+ throw new Error(`promotePendingIdentity: missing pending key pair: ${handle}`);
242
+ }
243
+ const targetKey = metadataStoreKey(aid);
244
+ const [existingKeyPair, existingCert, existingMetadata] = await Promise.all([
245
+ idbGet(STORE_KEY_PAIRS, targetKey),
246
+ idbGet(STORE_CERTS, certStoreKey(aid)),
247
+ idbGet(STORE_METADATA, targetKey),
248
+ ]);
249
+ if (existingKeyPair || existingCert || existingMetadata) {
250
+ throw new Error(`promotePendingIdentity: target exists: ${targetKey}`);
251
+ }
252
+ const keyPair = await this._protectedPendingKeyPair(current, aid);
253
+ await idbPut(STORE_KEY_PAIRS, targetKey, keyPair);
254
+ if (typeof current.cert === 'string' && current.cert) {
255
+ await idbPut(STORE_CERTS, certStoreKey(aid), current.cert);
256
+ }
257
+ await idbDelete(STORE_PENDING_IDENTITIES, handle);
258
+ return targetKey;
259
+ }
260
+ async discardPendingIdentity(handle) {
261
+ await idbDelete(STORE_PENDING_IDENTITIES, handle);
262
+ }
263
+ async cleanupPendingDirs(maxAgeMs = 600_000) {
264
+ const rows = await idbGetAll(STORE_PENDING_IDENTITIES);
265
+ const now = Date.now();
266
+ let removed = 0;
267
+ for (const row of rows) {
268
+ if (!isRecord(row.value))
269
+ continue;
270
+ const updatedAt = Number(row.value.updated_at ?? row.value.created_at ?? 0);
271
+ if (updatedAt && now - updatedAt < maxAgeMs)
272
+ continue;
273
+ await idbDelete(STORE_PENDING_IDENTITIES, row.key);
274
+ removed++;
275
+ }
276
+ return removed;
277
+ }
278
+ // ── 证书 ──────────────────────────────────────────
279
+ async loadCert(aid, certFingerprint) {
280
+ const normalized = normalizeCertFingerprint(certFingerprint);
281
+ if (normalized) {
282
+ const versioned = await idbGet(STORE_CERTS, certStoreKey(aid, normalized));
283
+ if (typeof versioned === 'string')
284
+ return versioned;
285
+ const active = await idbGet(STORE_CERTS, certStoreKey(aid));
286
+ if (typeof active === 'string' && await fingerprintFromCertPem(active) === normalized)
287
+ return active;
288
+ return null;
289
+ }
290
+ const data = await idbGet(STORE_CERTS, certStoreKey(aid));
291
+ return typeof data === 'string' ? data : null;
292
+ }
293
+ async saveCert(aid, certPem, certFingerprint, opts) {
294
+ const normalized = normalizeCertFingerprint(certFingerprint);
295
+ if (normalized) {
296
+ await idbPut(STORE_CERTS, certStoreKey(aid, normalized), certPem);
297
+ if (opts?.makeActive) {
298
+ await idbPut(STORE_CERTS, certStoreKey(aid), certPem);
299
+ }
300
+ return;
301
+ }
302
+ await idbPut(STORE_CERTS, certStoreKey(aid), certPem);
303
+ }
304
+ // ── 身份信息(组合操作) ──────────────────────────
305
+ async loadIdentity(aid) {
306
+ const tStart = Date.now();
307
+ this._log.debug(`loadIdentity enter: aid=${aid}`);
308
+ try {
309
+ const result = await this._withAidLock(aid, async () => {
310
+ const [keyPair, cert] = await Promise.all([
311
+ this._loadKeyPairUnlocked(aid),
312
+ this._loadCertUnlocked(aid),
313
+ ]);
314
+ const metadataOnly = await this._loadMetadataOnlyUnlocked(aid) ?? {};
315
+ const hasMeta = Object.keys(metadataOnly).length > 0;
316
+ if (!keyPair && !cert && !hasMeta)
317
+ return null;
318
+ const identity = {};
319
+ if (hasMeta)
320
+ Object.assign(identity, metadataOnly);
321
+ if (keyPair)
322
+ Object.assign(identity, keyPair);
323
+ if (cert) {
324
+ const localPubB64 = keyPair?.public_key_der_b64;
325
+ if (typeof localPubB64 === 'string' && localPubB64) {
326
+ const certSpkiB64 = extractSpkiB64FromCertPem(cert);
327
+ if (certSpkiB64 && certSpkiB64 !== localPubB64) {
328
+ this._log.error(`[keystore] identity ${aid} key public key mismatches cert public key, discard cert`);
329
+ }
330
+ else {
331
+ identity.cert = cert;
332
+ }
333
+ }
334
+ else {
335
+ identity.cert = cert;
336
+ }
337
+ }
338
+ return identity;
339
+ });
340
+ this._log.debug(`loadIdentity exit: elapsed=${Date.now() - tStart}ms aid=${aid} found=${result !== null}`);
341
+ return result;
342
+ }
343
+ catch (err) {
344
+ this._log.debug(`loadIdentity exit (error): elapsed=${Date.now() - tStart}ms aid=${aid} err=${err instanceof Error ? err.message : String(err)}`);
345
+ throw err;
346
+ }
347
+ }
348
+ async saveIdentity(aid, identity) {
349
+ const tStart = Date.now();
350
+ this._log.debug(`saveIdentity enter: aid=${aid} has_cert=${!!identity.cert}`);
351
+ try {
352
+ await this._withAidLock(aid, async () => {
353
+ const keyPairFields = {};
354
+ for (const key of ['private_key_pem', 'public_key_der_b64', 'curve']) {
355
+ if (key in identity)
356
+ keyPairFields[key] = identity[key];
357
+ }
358
+ if (Object.keys(keyPairFields).length > 0) {
359
+ await this._saveKeyPairUnlocked(aid, keyPairFields);
360
+ }
361
+ const cert = identity.cert;
362
+ if (typeof cert === 'string' && cert) {
363
+ await this._saveCertUnlocked(aid, cert);
364
+ }
365
+ const metadataFields = {};
366
+ for (const [key, value] of Object.entries(identity)) {
367
+ if (!['private_key_pem', 'public_key_der_b64', 'curve', 'cert'].includes(key)) {
368
+ metadataFields[key] = value;
369
+ }
370
+ }
371
+ if (Object.keys(metadataFields).length > 0) {
372
+ const plain = stripStructuredFields(metadataFields);
373
+ if (Object.keys(plain).length > 0) {
374
+ const current = (await this._loadMetadataOnlyUnlocked(aid)) ?? {};
375
+ Object.assign(current, plain);
376
+ await this._saveMetadataOnlyUnlocked(aid, current);
377
+ }
378
+ }
379
+ });
380
+ this._log.debug(`saveIdentity exit: elapsed=${Date.now() - tStart}ms aid=${aid}`);
381
+ }
382
+ catch (err) {
383
+ this._log.debug(`saveIdentity exit (error): elapsed=${Date.now() - tStart}ms aid=${aid} err=${err instanceof Error ? err.message : String(err)}`);
384
+ throw err;
385
+ }
386
+ }
387
+ // ── Metadata KV(gateway_url 等)────────────────────────
388
+ async getMetadata(aid, key) {
389
+ if (!key)
390
+ return '';
391
+ return this._withAidLock(aid, async () => {
392
+ const md = (await this._loadMetadataOnlyUnlocked(aid)) ?? {};
393
+ const value = md[key];
394
+ if (typeof value === 'string')
395
+ return value;
396
+ if (value === null || value === undefined)
397
+ return '';
398
+ return String(value);
399
+ });
400
+ }
401
+ async setMetadata(aid, key, value) {
402
+ if (!key)
403
+ return;
404
+ await this._withAidLock(aid, async () => {
405
+ const current = (await this._loadMetadataOnlyUnlocked(aid)) ?? {};
406
+ const next = deepClone(current);
407
+ if (value === '' || value === undefined || value === null) {
408
+ delete next[key];
409
+ }
410
+ else {
411
+ next[key] = value;
412
+ }
413
+ await this._saveMetadataOnlyUnlocked(aid, next);
414
+ });
415
+ }
416
+ // ── 内部辅助 ─────────────────────────────────────────
417
+ async _loadPendingRecord(handle, aid, required = true) {
418
+ const data = await idbGet(STORE_PENDING_IDENTITIES, handle);
419
+ if (!isRecord(data)) {
420
+ if (required)
421
+ throw new Error(`pending identity not found: ${handle}`);
422
+ return null;
423
+ }
424
+ const record = deepClone(data);
425
+ if (aid !== undefined && String(record.aid ?? '') !== aid) {
426
+ throw new Error(`pending identity aid mismatch: ${handle}`);
427
+ }
428
+ return record;
429
+ }
430
+ async _protectedPendingKeyPair(current, aid) {
431
+ if (!isRecord(current.key_pair)) {
432
+ throw new Error(`pending identity missing key pair for ${aid}`);
433
+ }
434
+ const keyPair = deepClone(current.key_pair);
435
+ const privateKeyPem = keyPair.private_key_pem;
436
+ if (typeof privateKeyPem === 'string' && privateKeyPem) {
437
+ throw new Error(`pending identity private key is plaintext for ${aid}`);
438
+ }
439
+ if (!isRecord(keyPair._encrypted_pk)) {
440
+ throw new Error(`pending identity private key is not encrypted for ${aid}`);
441
+ }
442
+ return keyPair;
443
+ }
444
+ async _loadKeyPairUnlocked(aid) {
445
+ const data = await idbGet(STORE_KEY_PAIRS, metadataStoreKey(aid));
446
+ if (!isRecord(data))
447
+ return null;
448
+ const result = deepClone(data);
449
+ if (isRecord(result._encrypted_pk) && hasEncryptionSeed(this._encryptionSeed)) {
450
+ try {
451
+ const envelope = result._encrypted_pk;
452
+ result.private_key_pem = await decryptPEM(envelope, this._encryptionSeed);
453
+ delete result._encrypted_pk;
454
+ }
455
+ catch {
456
+ this._log.error(`[keystore] decrypt ${aid} private key failed, maybe encryptionSeed mismatch`);
457
+ throw new Error(`private key decrypt failed for aid ${aid}: seed_password mismatch or IndexedDB record corrupted`);
458
+ }
459
+ }
460
+ else if (!isRecord(result._encrypted_pk) && typeof result.private_key_pem === 'string' && hasEncryptionSeed(this._encryptionSeed)) {
461
+ await this._saveKeyPairUnlocked(aid, result);
462
+ }
463
+ return result;
464
+ }
465
+ async _saveKeyPairUnlocked(aid, keyPair) {
466
+ const record = deepClone(keyPair);
467
+ if (hasEncryptionSeed(this._encryptionSeed) && typeof record.private_key_pem === 'string') {
468
+ record._encrypted_pk = await encryptPEM(record.private_key_pem, this._encryptionSeed);
469
+ delete record.private_key_pem;
470
+ }
471
+ await idbPut(STORE_KEY_PAIRS, metadataStoreKey(aid), record);
472
+ }
473
+ async _loadCertUnlocked(aid) {
474
+ const data = await idbGet(STORE_CERTS, certStoreKey(aid));
475
+ return typeof data === 'string' ? data : null;
476
+ }
477
+ async _saveCertUnlocked(aid, certPem) {
478
+ await idbPut(STORE_CERTS, certStoreKey(aid), certPem);
479
+ }
480
+ async _loadMetadataOnlyUnlocked(aid) {
481
+ const data = await idbGet(STORE_METADATA, metadataStoreKey(aid));
482
+ return isRecord(data) ? deepClone(data) : null;
483
+ }
484
+ async _saveMetadataOnlyUnlocked(aid, metadata) {
485
+ const plain = stripStructuredFields(metadata);
486
+ await idbPut(STORE_METADATA, metadataStoreKey(aid), plain);
487
+ }
488
+ }
489
+ //# sourceMappingURL=indexeddb-identity-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexeddb-identity-store.js","sourceRoot":"","sources":["../../src/keystore/indexeddb-identity-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import type { ModuleLogger } from '../logger.js';
2
+ import type { AgentMdCacheRecord, AgentMdCacheUpsert } from './index.js';
3
+ import { type GroupOldEpochRecord, type GroupSecretRecord, type JsonObject, type KeyPairRecord, type MetadataRecord, type PrekeyMap, type PrekeyRecord, type SessionRecord } from '../types.js';
4
+ export declare const _noopLog: ModuleLogger;
5
+ export declare const STORE_KEY_PAIRS = "key_pairs";
6
+ export declare const STORE_CERTS = "certs";
7
+ export declare const STORE_METADATA = "metadata";
8
+ export declare const STORE_INSTANCE_STATE = "instance_state";
9
+ export declare const STORE_PREKEYS = "prekeys";
10
+ export declare const STORE_GROUP_CURRENT = "group_current";
11
+ export declare const STORE_GROUP_OLD_EPOCHS = "group_old_epochs";
12
+ export declare const STORE_SESSIONS = "e2ee_sessions";
13
+ export declare const STORE_GROUP_STATE = "group_state";
14
+ export declare const STORE_AGENT_MD_CACHE = "agent_md_cache";
15
+ export declare const STORE_PENDING_IDENTITIES = "pending_identities";
16
+ export declare const STRUCTURED_RECOVERY_RETENTION_MS: number;
17
+ export declare function safeAid(aid: string): string;
18
+ export declare function encodePart(value: string): string;
19
+ export declare function deepClone<T>(value: T): T;
20
+ export declare function isRecord(value: unknown): value is JsonObject;
21
+ export declare function toBufferSource(bytes: Uint8Array): BufferSource;
22
+ export declare function sameJson(a: JsonObject | string | number | boolean | null | undefined, b: JsonObject | string | number | boolean | null | undefined): boolean;
23
+ export declare function randomHex(byteLength: number): string;
24
+ export declare function metadataStoreKey(aid: string): string;
25
+ export declare function normalizeCertFingerprint(certFingerprint?: string): string;
26
+ export declare function fingerprintFromCertPem(certPem: string): Promise<string>;
27
+ export declare function certStoreKey(aid: string, certFingerprint?: string): string;
28
+ export declare function instanceStateStoreKey(aid: string, deviceId: string, slotId?: string): string;
29
+ export declare function prekeyPrefix(aid: string): string;
30
+ export declare function prekeyStoreKey(aid: string, prekeyId: string, deviceId?: string): string;
31
+ export declare function groupCurrentPrefix(aid: string): string;
32
+ export declare function groupCurrentStoreKey(aid: string, groupId: string): string;
33
+ export declare function groupOldPrefix(aid: string, groupId?: string): string;
34
+ export declare function groupOldStoreKey(aid: string, groupId: string, epoch: number): string;
35
+ export declare function sessionPrefix(aid: string): string;
36
+ export declare function sessionStoreKey(aid: string, sessionId: string): string;
37
+ export declare function seqTrackerPrefix(aid: string, deviceId: string, slotId: string): string;
38
+ export declare function seqTrackerStoreKey(aid: string, deviceId: string, slotId: string, namespace: string): string;
39
+ export declare function agentMdCachePrefix(ownerAid: string): string;
40
+ export declare function agentMdCacheStoreKey(ownerAid: string, targetAid: string): string;
41
+ export declare function pendingIdentityPrefix(aid: string): string;
42
+ export declare function stripStructuredFields(metadata: MetadataRecord): MetadataRecord;
43
+ export declare function defaultAgentMdCacheRecord(aid: string): AgentMdCacheRecord;
44
+ export declare function normalizeAgentMdCacheRecord(aid: string, value: unknown): AgentMdCacheRecord | null;
45
+ export declare function mergeAgentMdCacheRecord(aid: string, current: AgentMdCacheRecord | null, fields: AgentMdCacheUpsert): AgentMdCacheRecord;
46
+ export interface EncryptedEnvelope {
47
+ ct: string;
48
+ iv: string;
49
+ salt: string;
50
+ }
51
+ export declare function encryptPEM(pem: string, seed: string): Promise<EncryptedEnvelope>;
52
+ export declare function decryptPEM(enc: EncryptedEnvelope, seed: string): Promise<string>;
53
+ export declare function hasEncryptionSeed(seed: string | undefined): seed is string;
54
+ export declare function openDB(): Promise<IDBDatabase>;
55
+ export declare function idbGet<T>(storeName: string, key: string): Promise<T | undefined>;
56
+ export declare function idbGetAll<T>(storeName: string): Promise<Array<{
57
+ key: string;
58
+ value: T;
59
+ }>>;
60
+ export declare function idbGetAllByPrefix<T>(storeName: string, prefix: string): Promise<Array<{
61
+ key: string;
62
+ value: T;
63
+ }>>;
64
+ export declare function idbPut<T>(storeName: string, key: string, value: T): Promise<void>;
65
+ export declare function idbDelete(storeName: string, key: string): Promise<void>;
66
+ export declare function extractSpkiB64FromCertPem(certPem: string): string;
67
+ export type LegacyGroupSecretMap = Record<string, GroupSecretRecord>;
68
+ export type PendingIdentityRecord = {
69
+ aid: string;
70
+ key_pair?: JsonObject;
71
+ cert?: string;
72
+ created_at: number;
73
+ updated_at: number;
74
+ };
75
+ export type { GroupOldEpochRecord, GroupSecretRecord, JsonObject, KeyPairRecord, MetadataRecord, PrekeyMap, PrekeyRecord, SessionRecord, };
76
+ //# sourceMappingURL=indexeddb-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexeddb-shared.d.ts","sourceRoot":"","sources":["../../src/keystore/indexeddb-shared.ts"],"names":[],"mappings":"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"}