@agentunion/fastaun-browser 0.4.5 → 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 (54) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/_packed_docs/CHANGELOG.md +28 -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 +15 -14
  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 +1 -1
  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 +7 -40
  22. package/dist/aid-store.d.ts.map +1 -1
  23. package/dist/aid-store.js +71 -171
  24. package/dist/aid-store.js.map +1 -1
  25. package/dist/auth.js +1 -1
  26. package/dist/auth.js.map +1 -1
  27. package/dist/bundle.js +4224 -4151
  28. package/dist/client.d.ts +3 -61
  29. package/dist/client.d.ts.map +1 -1
  30. package/dist/client.js +136 -703
  31. package/dist/client.js.map +1 -1
  32. package/dist/index.d.ts +3 -2
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +2 -1
  35. package/dist/index.js.map +1 -1
  36. package/dist/keystore/index.d.ts +6 -2
  37. package/dist/keystore/index.d.ts.map +1 -1
  38. package/dist/keystore/indexeddb-identity-store.d.ts +59 -0
  39. package/dist/keystore/indexeddb-identity-store.d.ts.map +1 -0
  40. package/dist/keystore/indexeddb-identity-store.js +489 -0
  41. package/dist/keystore/indexeddb-identity-store.js.map +1 -0
  42. package/dist/keystore/indexeddb-shared.d.ts +76 -0
  43. package/dist/keystore/indexeddb-shared.d.ts.map +1 -0
  44. package/dist/keystore/indexeddb-shared.js +382 -0
  45. package/dist/keystore/indexeddb-shared.js.map +1 -0
  46. package/dist/keystore/indexeddb-token-store.d.ts +119 -0
  47. package/dist/keystore/indexeddb-token-store.d.ts.map +1 -0
  48. package/dist/keystore/indexeddb-token-store.js +1086 -0
  49. package/dist/keystore/indexeddb-token-store.js.map +1 -0
  50. package/dist/register-flow.d.ts +22 -3
  51. package/dist/register-flow.d.ts.map +1 -1
  52. package/dist/register-flow.js +49 -3
  53. package/dist/register-flow.js.map +1 -1
  54. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -10,8 +10,9 @@ export { EventDispatcher, Subscription, type EventHandler } from './events.js';
10
10
  export { CryptoProvider } from './crypto.js';
11
11
  export { RPCTransport } from './transport.js';
12
12
  export { GatewayDiscovery } from './discovery.js';
13
- export type { KeyStore } from './keystore/index.js';
14
- export { IndexedDBKeyStore, SeedMigrationError, type SeedChangeResult } from './keystore/indexeddb.js';
13
+ export type { KeyStore, TokenStore } from './keystore/index.js';
14
+ export { IndexedDBIdentityStore, SeedMigrationError, type SeedChangeResult } from './keystore/indexeddb-identity-store.js';
15
+ export { IndexedDBTokenStore } from './keystore/indexeddb-token-store.js';
15
16
  export type { SecretStore } from './secret-store/index.js';
16
17
  export { createDefaultSecretStore } from './secret-store/index.js';
17
18
  export { IndexedDBSecretStore } from './secret-store/indexeddb-store.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -19,7 +19,8 @@ export { CryptoProvider } from './crypto.js';
19
19
  export { RPCTransport } from './transport.js';
20
20
  // 发现
21
21
  export { GatewayDiscovery } from './discovery.js';
22
- export { IndexedDBKeyStore, SeedMigrationError } from './keystore/indexeddb.js';
22
+ export { IndexedDBIdentityStore, SeedMigrationError } from './keystore/indexeddb-identity-store.js';
23
+ export { IndexedDBTokenStore } from './keystore/indexeddb-token-store.js';
23
24
  export { createDefaultSecretStore } from './secret-store/index.js';
24
25
  export { IndexedDBSecretStore } from './secret-store/indexeddb-store.js';
25
26
  // 认证
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM;AACN,OAAO,EAAE,SAAS,EAA0B,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,GAAG,EAAqB,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAgB,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAA+B,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE/E,KAAK;AACL,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAC;AAExE,OAAO;AACP,OAAO,EACL,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,SAAS,EACT,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,aAAa,EACb,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,SAAS,EACT,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,+BAA+B,EAC/B,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,KAAK;AACL,OAAO,EACL,eAAe,EAqBf,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,KAAK;AACL,OAAO,EAAE,eAAe,EAAE,YAAY,EAAqB,MAAM,aAAa,CAAC;AAE/E,MAAM;AACN,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM;AACN,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,KAAK;AACL,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAIlD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAyB,MAAM,yBAAyB,CAAC;AAIvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAEzE,KAAK;AACL,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAuB,MAAM,oBAAoB,CAAC;AAEvE,sBAAsB;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE3E,MAAM;AACN,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM;AACN,OAAO,EAAE,SAAS,EAA0B,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,GAAG,EAAqB,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAgB,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAA+B,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE/E,KAAK;AACL,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAC;AAExE,OAAO;AACP,OAAO,EACL,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,SAAS,EACT,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,aAAa,EACb,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,SAAS,EACT,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,+BAA+B,EAC/B,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,KAAK;AACL,OAAO,EACL,eAAe,EAqBf,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,KAAK;AACL,OAAO,EAAE,eAAe,EAAE,YAAY,EAAqB,MAAM,aAAa,CAAC;AAE/E,MAAM;AACN,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM;AACN,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,KAAK;AACL,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAIlD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAyB,MAAM,wCAAwC,CAAC;AAC3H,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAI1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAEzE,KAAK;AACL,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAuB,MAAM,oBAAoB,CAAC;AAEvE,sBAAsB;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE3E,MAAM;AACN,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
@@ -138,6 +138,12 @@ export interface GroupStateRecord {
138
138
  }
139
139
  /** 私钥/完整身份存储接口,仅 AIDStore / RegisterFlow 持有。 */
140
140
  export interface KeyStore {
141
+ /** 加载证书 PEM */
142
+ loadCert(aid: string, certFingerprint?: string): Promise<string | null>;
143
+ /** 保存证书 PEM */
144
+ saveCert(aid: string, certPem: string, certFingerprint?: string, opts?: {
145
+ makeActive?: boolean;
146
+ }): Promise<void>;
141
147
  /** 加载密钥对 */
142
148
  loadKeyPair(aid: string): Promise<KeyPairRecord | null>;
143
149
  /** 保存密钥对 */
@@ -170,6 +176,4 @@ export interface KeyStore {
170
176
  privateKeysMigrated: number;
171
177
  }>;
172
178
  }
173
- /** 物理实现通常同时实现 TokenStore 与 KeyStore;注册流程显式要求组合类型。 */
174
- export type FullKeyStore = TokenStore & KeyStore;
175
179
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/keystore/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/keystore/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { ModuleLogger } from '../logger.js';
2
+ import type { KeyStore } from './index.js';
3
+ import { type KeyPairRecord } from './indexeddb-shared.js';
4
+ import type { IdentityRecord } from '../types.js';
5
+ export declare class SeedMigrationError extends Error {
6
+ constructor(message: string);
7
+ }
8
+ export interface SeedChangeResult {
9
+ migrated: number;
10
+ skipped: number;
11
+ errors: number;
12
+ privateKeysVerified: number;
13
+ privateKeysMigrated: number;
14
+ }
15
+ /**
16
+ * 基于 IndexedDB 的身份存储实现(含私钥)。
17
+ * AIDStore / RegisterFlow 持有此类型。
18
+ */
19
+ export declare class IndexedDBIdentityStore implements KeyStore {
20
+ private _log;
21
+ setLogger(log: ModuleLogger): void;
22
+ private static _aidTails;
23
+ /** 私钥加密种子;空字符串也是有效 seed,默认不再写入明文私钥。 */
24
+ private _encryptionSeed;
25
+ constructor(opts?: {
26
+ encryptionSeed?: string;
27
+ });
28
+ static changeSeed(oldSeed: string, newSeed: string): Promise<SeedChangeResult>;
29
+ changeSeed(oldSeed: string, newSeed: string): Promise<SeedChangeResult>;
30
+ private _withAidLock;
31
+ listIdentities(): Promise<string[]>;
32
+ loadKeyPair(aid: string): Promise<KeyPairRecord | null>;
33
+ saveKeyPair(aid: string, keyPair: KeyPairRecord): Promise<void>;
34
+ pendingIdentityDir(aid: string): Promise<string>;
35
+ listPendingIdentityDirs(aid: string): Promise<string[]>;
36
+ savePendingKeyPair(handle: string, aid: string, keyPair: KeyPairRecord): Promise<void>;
37
+ loadPendingKeyPair(handle: string, aid: string): Promise<KeyPairRecord | null>;
38
+ savePendingCert(handle: string, certPem: string): Promise<void>;
39
+ promotePendingIdentity(handle: string, aid: string): Promise<string>;
40
+ discardPendingIdentity(handle: string): Promise<void>;
41
+ cleanupPendingDirs(maxAgeMs?: number): Promise<number>;
42
+ loadCert(aid: string, certFingerprint?: string): Promise<string | null>;
43
+ saveCert(aid: string, certPem: string, certFingerprint?: string, opts?: {
44
+ makeActive?: boolean;
45
+ }): Promise<void>;
46
+ loadIdentity(aid: string): Promise<IdentityRecord | null>;
47
+ saveIdentity(aid: string, identity: IdentityRecord): Promise<void>;
48
+ getMetadata(aid: string, key: string): Promise<string>;
49
+ setMetadata(aid: string, key: string, value: string): Promise<void>;
50
+ private _loadPendingRecord;
51
+ private _protectedPendingKeyPair;
52
+ private _loadKeyPairUnlocked;
53
+ private _saveKeyPairUnlocked;
54
+ private _loadCertUnlocked;
55
+ private _saveCertUnlocked;
56
+ private _loadMetadataOnlyUnlocked;
57
+ private _saveMetadataOnlyUnlocked;
58
+ }
59
+ //# sourceMappingURL=indexeddb-identity-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexeddb-identity-store.d.ts","sourceRoot":"","sources":["../../src/keystore/indexeddb-identity-store.ts"],"names":[],"mappings":"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"}
@@ -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