@agentunion/fastaun-browser 0.2.13

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 (82) hide show
  1. package/README.md +604 -0
  2. package/dist/auth.d.ts +150 -0
  3. package/dist/auth.d.ts.map +1 -0
  4. package/dist/auth.js +1388 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/certs/root.d.ts +2 -0
  7. package/dist/certs/root.d.ts.map +1 -0
  8. package/dist/certs/root.js +16 -0
  9. package/dist/certs/root.js.map +1 -0
  10. package/dist/client.d.ts +341 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +4061 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/config.d.ts +37 -0
  15. package/dist/config.d.ts.map +1 -0
  16. package/dist/config.js +85 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/crypto.d.ts +41 -0
  19. package/dist/crypto.d.ts.map +1 -0
  20. package/dist/crypto.js +132 -0
  21. package/dist/crypto.js.map +1 -0
  22. package/dist/discovery.d.ts +20 -0
  23. package/dist/discovery.d.ts.map +1 -0
  24. package/dist/discovery.js +75 -0
  25. package/dist/discovery.js.map +1 -0
  26. package/dist/e2ee-group.d.ts +221 -0
  27. package/dist/e2ee-group.d.ts.map +1 -0
  28. package/dist/e2ee-group.js +1174 -0
  29. package/dist/e2ee-group.js.map +1 -0
  30. package/dist/e2ee.d.ts +187 -0
  31. package/dist/e2ee.d.ts.map +1 -0
  32. package/dist/e2ee.js +1067 -0
  33. package/dist/e2ee.js.map +1 -0
  34. package/dist/errors.d.ts +118 -0
  35. package/dist/errors.d.ts.map +1 -0
  36. package/dist/errors.js +250 -0
  37. package/dist/errors.js.map +1 -0
  38. package/dist/events.d.ts +33 -0
  39. package/dist/events.d.ts.map +1 -0
  40. package/dist/events.js +68 -0
  41. package/dist/events.js.map +1 -0
  42. package/dist/index.d.ts +22 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +32 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/keystore/index.d.ts +88 -0
  47. package/dist/keystore/index.d.ts.map +1 -0
  48. package/dist/keystore/index.js +3 -0
  49. package/dist/keystore/index.js.map +1 -0
  50. package/dist/keystore/indexeddb.d.ts +94 -0
  51. package/dist/keystore/indexeddb.d.ts.map +1 -0
  52. package/dist/keystore/indexeddb.js +1434 -0
  53. package/dist/keystore/indexeddb.js.map +1 -0
  54. package/dist/namespaces/auth.d.ts +52 -0
  55. package/dist/namespaces/auth.d.ts.map +1 -0
  56. package/dist/namespaces/auth.js +237 -0
  57. package/dist/namespaces/auth.js.map +1 -0
  58. package/dist/namespaces/custody.d.ts +48 -0
  59. package/dist/namespaces/custody.d.ts.map +1 -0
  60. package/dist/namespaces/custody.js +230 -0
  61. package/dist/namespaces/custody.js.map +1 -0
  62. package/dist/secret-store/index.d.ts +20 -0
  63. package/dist/secret-store/index.d.ts.map +1 -0
  64. package/dist/secret-store/index.js +12 -0
  65. package/dist/secret-store/index.js.map +1 -0
  66. package/dist/secret-store/indexeddb-store.d.ts +22 -0
  67. package/dist/secret-store/indexeddb-store.d.ts.map +1 -0
  68. package/dist/secret-store/indexeddb-store.js +133 -0
  69. package/dist/secret-store/indexeddb-store.js.map +1 -0
  70. package/dist/seq-tracker.d.ts +30 -0
  71. package/dist/seq-tracker.d.ts.map +1 -0
  72. package/dist/seq-tracker.js +219 -0
  73. package/dist/seq-tracker.js.map +1 -0
  74. package/dist/transport.d.ts +45 -0
  75. package/dist/transport.d.ts.map +1 -0
  76. package/dist/transport.js +251 -0
  77. package/dist/transport.js.map +1 -0
  78. package/dist/types.d.ts +171 -0
  79. package/dist/types.d.ts.map +1 -0
  80. package/dist/types.js +10 -0
  81. package/dist/types.js.map +1 -0
  82. package/package.json +37 -0
package/dist/index.js ADDED
@@ -0,0 +1,32 @@
1
+ // ── @agentunion/fastaun-browser 包入口 ──────────────────────────────
2
+ export const __version__ = '0.2.13';
3
+ // 客户端
4
+ export { AUNClient } from './client.js';
5
+ // 配置
6
+ export { getDeviceId, createConfig } from './config.js';
7
+ // 错误类型
8
+ export { AUNError, ConnectionError, TimeoutError, AuthError, PermissionError, ValidationError, NotFoundError, RateLimitError, StateError, SerializationError, SessionError, GroupError, GroupNotFoundError, GroupStateError, E2EEError, E2EEDecryptFailedError, E2EEGroupSecretMissingError, E2EEGroupEpochMismatchError, E2EEGroupCommitmentInvalidError, E2EEGroupNotMemberError, E2EEGroupDecryptFailedError, CertificateRevokedError, E2EEDegradedError, ClientSignatureError, mapRemoteError, } from './errors.js';
9
+ // 类型
10
+ export { isJsonObject, } from './types.js';
11
+ // 事件
12
+ export { EventDispatcher, Subscription } from './events.js';
13
+ // 密码学
14
+ export { CryptoProvider } from './crypto.js';
15
+ // 传输层
16
+ export { RPCTransport } from './transport.js';
17
+ // 发现
18
+ export { GatewayDiscovery } from './discovery.js';
19
+ export { IndexedDBKeyStore } from './keystore/indexeddb.js';
20
+ export { createDefaultSecretStore } from './secret-store/index.js';
21
+ export { IndexedDBSecretStore } from './secret-store/indexeddb-store.js';
22
+ // 认证
23
+ export { AuthFlow } from './auth.js';
24
+ export { AuthNamespace } from './namespaces/auth.js';
25
+ export { CustodyNamespace } from './namespaces/custody.js';
26
+ // E2EE — P2P
27
+ export { E2EEManager, SUITE, MODE_PREKEY_ECDH_V2, MODE_LONG_TERM_KEY } from './e2ee.js';
28
+ // E2EE — 群组
29
+ export { GroupE2EEManager, MODE_EPOCH_GROUP_KEY, GroupReplayGuard, GroupKeyRequestThrottle, encryptGroupMessage, decryptGroupMessage, buildMembershipManifest, signMembershipManifest, verifyMembershipManifest, computeMembershipCommitment, verifyMembershipCommitment, storeGroupSecret, storeGroupSecretEpoch, loadGroupSecret, loadAllGroupSecrets, cleanupOldEpochs, generateGroupSecret, buildKeyDistribution, handleKeyDistribution, handleKeyRequest, handleKeyResponse, buildKeyRequest, checkEpochDowngrade, } from './e2ee-group.js';
30
+ // 根证书
31
+ export { ROOT_CA_PEM } from './certs/root.js';
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAEpC,MAAM;AACN,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,KAAK;AACL,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAC;AAExE,OAAO;AACP,OAAO,EACL,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,SAAS,EACT,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,EAsBL,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,MAAM,yBAAyB,CAAC;AAI5D,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,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,aAAa;AACb,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAGxF,YAAY;AACZ,OAAO,EACL,gBAAgB,EAAE,oBAAoB,EACtC,gBAAgB,EAAE,uBAAuB,EACzC,mBAAmB,EAAE,mBAAmB,EACxC,uBAAuB,EAAE,sBAAsB,EAAE,wBAAwB,EACzE,2BAA2B,EAAE,0BAA0B,EACvD,gBAAgB,EAAE,qBAAqB,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAC/F,mBAAmB,EAAE,oBAAoB,EACzC,qBAAqB,EAAE,gBAAgB,EAAE,iBAAiB,EAC1D,eAAe,EAAE,mBAAmB,GACrC,MAAM,iBAAiB,CAAC;AAEzB,MAAM;AACN,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,88 @@
1
+ import type { GroupSecretRecord, IdentityRecord, KeyPairRecord, MetadataRecord, PrekeyMap, PrekeyRecord, SessionRecord } from '../types.js';
2
+ /**
3
+ * 密钥存储接口(浏览器版本 — 所有方法均为异步)。
4
+ *
5
+ * 与 Python SDK 的 KeyStore Protocol 等价,但由于 IndexedDB
6
+ * 的异步特性,所有方法返回 Promise。
7
+ */
8
+ export interface KeyStore {
9
+ /** 列出本地已有身份 */
10
+ listIdentities?(): Promise<string[]>;
11
+ /** 加载密钥对 */
12
+ loadKeyPair(aid: string): Promise<KeyPairRecord | null>;
13
+ /** 保存密钥对 */
14
+ saveKeyPair(aid: string, keyPair: KeyPairRecord): Promise<void>;
15
+ /** 加载证书 PEM */
16
+ loadCert(aid: string, certFingerprint?: string): Promise<string | null>;
17
+ /** 保存证书 PEM */
18
+ saveCert(aid: string, certPem: string, certFingerprint?: string, opts?: {
19
+ makeActive?: boolean;
20
+ }): Promise<void>;
21
+ /** 加载完整身份信息 */
22
+ loadIdentity(aid: string): Promise<IdentityRecord | null>;
23
+ /** 保存完整身份信息 */
24
+ saveIdentity(aid: string, identity: IdentityRecord): Promise<void>;
25
+ /** 加载实例级状态 */
26
+ loadInstanceState?(aid: string, deviceId: string, slotId?: string): Promise<MetadataRecord | null>;
27
+ /** 保存实例级状态 */
28
+ saveInstanceState?(aid: string, deviceId: string, slotId: string, state: MetadataRecord): Promise<void>;
29
+ /** 原子更新实例级状态 */
30
+ updateInstanceState?(aid: string, deviceId: string, slotId: string, updater: (state: MetadataRecord) => MetadataRecord | void): Promise<MetadataRecord>;
31
+ /** 加载结构化 prekeys(deviceId 可选,不传等价于 deviceId='') */
32
+ loadE2EEPrekeys?(aid: string, deviceId?: string): Promise<PrekeyMap>;
33
+ /** 保存单个 prekey(deviceId 可选,不传等价于 deviceId='') */
34
+ saveE2EEPrekey?(aid: string, prekeyId: string, prekeyData: PrekeyRecord, deviceId?: string): Promise<void>;
35
+ /** 清理过期 prekeys(deviceId 可选,不传等价于 deviceId='') */
36
+ cleanupE2EEPrekeys?(aid: string, cutoffMs: number, keepLatest?: number, deviceId?: string): Promise<string[]>;
37
+ /** 列出本地已存储群组密钥的 group_id */
38
+ listGroupSecretIds?(aid: string): Promise<string[]>;
39
+ /** 清理单个群组过期 old epochs */
40
+ cleanupGroupOldEpochsState?(aid: string, groupId: string, cutoffMs: number): Promise<number>;
41
+ /** 按 row 加载当前或指定 epoch 的群组密钥 */
42
+ loadGroupSecretEpoch?(aid: string, groupId: string, epoch?: number | null): Promise<GroupSecretRecord | null>;
43
+ /** 按 row 加载某个群组的当前和历史 epoch 密钥 */
44
+ loadGroupSecretEpochs?(aid: string, groupId: string): Promise<GroupSecretRecord[]>;
45
+ /** 事务化保存群组密钥状态转移 */
46
+ storeGroupSecretTransition?(aid: string, groupId: string, opts: {
47
+ epoch: number;
48
+ secret: string;
49
+ commitment: string;
50
+ memberAids: string[];
51
+ epochChain?: string;
52
+ pendingRotationId?: string;
53
+ epochChainUnverified?: boolean | null;
54
+ epochChainUnverifiedReason?: string | null;
55
+ oldEpochRetentionMs: number;
56
+ }): Promise<boolean>;
57
+ /** 事务化保存指定 epoch 密钥;低于 current 时写入 old epoch row */
58
+ storeGroupSecretEpoch?(aid: string, groupId: string, opts: {
59
+ epoch: number;
60
+ secret: string;
61
+ commitment: string;
62
+ memberAids: string[];
63
+ epochChain?: string;
64
+ pendingRotationId?: string;
65
+ epochChainUnverified?: boolean | null;
66
+ epochChainUnverifiedReason?: string | null;
67
+ oldEpochRetentionMs: number;
68
+ }): Promise<boolean>;
69
+ /** 事务化丢弃指定 pending rotation */
70
+ discardPendingGroupSecretState?(aid: string, groupId: string, epoch: number, rotationId: string): Promise<boolean>;
71
+ /** 删除单个群组的所有密钥状态(群组解散时使用) */
72
+ deleteGroupSecretState?(aid: string, groupId: string): Promise<void>;
73
+ /** 加载全部 E2EE sessions */
74
+ loadE2EESessions?(aid: string): Promise<SessionRecord[]>;
75
+ /** 保存单个 E2EE session */
76
+ saveE2EESession?(aid: string, sessionId: string, data: SessionRecord): Promise<void>;
77
+ /** 保存单个 namespace 的 contiguous_seq */
78
+ saveSeq?(aid: string, deviceId: string, slotId: string, namespace: string, contiguousSeq: number): Promise<void>;
79
+ /** 加载单个 namespace 的 contiguous_seq */
80
+ loadSeq?(aid: string, deviceId: string, slotId: string, namespace: string): Promise<number>;
81
+ /** 加载某 device+slot 下所有 namespace 的 contiguous_seq */
82
+ loadAllSeqs?(aid: string, deviceId: string, slotId: string): Promise<Record<string, number>>;
83
+ /** 列出已存储的所有身份 AID(可选) */
84
+ listIdentities?(): Promise<string[]>;
85
+ /** 加载身份元数据(可选) */
86
+ loadMetadata?(aid: string): Promise<Record<string, unknown> | null>;
87
+ }
88
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/keystore/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // ── KeyStore 接口定义 ──────────────────────────────────────
2
+ export {};
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/keystore/index.ts"],"names":[],"mappings":"AAAA,0DAA0D"}
@@ -0,0 +1,94 @@
1
+ import type { KeyStore } from './index.js';
2
+ import { type GroupSecretRecord, type IdentityRecord, type KeyPairRecord, type MetadataRecord, type PrekeyMap, type PrekeyRecord, type SessionRecord } from '../types.js';
3
+ /**
4
+ * 基于 IndexedDB 的密钥存储实现。
5
+ *
6
+ * 设计语义:
7
+ * - metadata 只保存普通 metadata 字段;
8
+ * - e2ee_prekeys / group_secrets 只保存到结构化 store;
9
+ * - loadMetadata() 返回的是运行时拼出来的 merged view;
10
+ * - 若检测到旧版本把结构化数据写进了 metadata,会自动迁移到结构化 store。
11
+ */
12
+ export declare class IndexedDBKeyStore implements KeyStore {
13
+ private static _aidTails;
14
+ /** 私钥加密种子;为空时降级为明文存储(向后兼容) */
15
+ private _encryptionSeed;
16
+ constructor(opts?: {
17
+ encryptionSeed?: string;
18
+ });
19
+ private _withAidLock;
20
+ listIdentities(): Promise<string[]>;
21
+ loadKeyPair(aid: string): Promise<KeyPairRecord | null>;
22
+ saveKeyPair(aid: string, keyPair: KeyPairRecord): Promise<void>;
23
+ loadCert(aid: string, certFingerprint?: string): Promise<string | null>;
24
+ saveCert(aid: string, certPem: string, certFingerprint?: string, opts?: {
25
+ makeActive?: boolean;
26
+ }): Promise<void>;
27
+ loadInstanceState(aid: string, deviceId: string, slotId?: string): Promise<MetadataRecord | null>;
28
+ saveInstanceState(aid: string, deviceId: string, slotId: string, state: MetadataRecord): Promise<void>;
29
+ updateInstanceState(aid: string, deviceId: string, slotId: string, updater: (state: MetadataRecord) => MetadataRecord | void): Promise<MetadataRecord>;
30
+ loadIdentity(aid: string): Promise<IdentityRecord | null>;
31
+ saveIdentity(aid: string, identity: IdentityRecord): Promise<void>;
32
+ loadE2EEPrekeys(aid: string, deviceId?: string): Promise<PrekeyMap>;
33
+ saveE2EEPrekey(aid: string, prekeyId: string, prekeyData: PrekeyRecord, deviceId?: string): Promise<void>;
34
+ cleanupE2EEPrekeys(aid: string, cutoffMs: number, keepLatest?: number, deviceId?: string): Promise<string[]>;
35
+ listGroupSecretIds(aid: string): Promise<string[]>;
36
+ cleanupGroupOldEpochsState(aid: string, groupId: string, cutoffMs: number): Promise<number>;
37
+ loadGroupSecretEpoch(aid: string, groupId: string, epoch?: number | null): Promise<GroupSecretRecord | null>;
38
+ loadGroupSecretEpochs(aid: string, groupId: string): Promise<GroupSecretRecord[]>;
39
+ storeGroupSecretTransition(aid: string, groupId: string, opts: {
40
+ epoch: number;
41
+ secret: string;
42
+ commitment: string;
43
+ memberAids: string[];
44
+ epochChain?: string;
45
+ pendingRotationId?: string;
46
+ epochChainUnverified?: boolean | null;
47
+ epochChainUnverifiedReason?: string | null;
48
+ oldEpochRetentionMs: number;
49
+ }): Promise<boolean>;
50
+ storeGroupSecretEpoch(aid: string, groupId: string, opts: {
51
+ epoch: number;
52
+ secret: string;
53
+ commitment: string;
54
+ memberAids: string[];
55
+ epochChain?: string;
56
+ pendingRotationId?: string;
57
+ epochChainUnverified?: boolean | null;
58
+ epochChainUnverifiedReason?: string | null;
59
+ oldEpochRetentionMs: number;
60
+ }): Promise<boolean>;
61
+ discardPendingGroupSecretState(aid: string, groupId: string, epoch: number, rotationId: string): Promise<boolean>;
62
+ deleteGroupSecretState(aid: string, groupId: string): Promise<void>;
63
+ loadE2EESessions(aid: string): Promise<SessionRecord[]>;
64
+ saveE2EESession(aid: string, sessionId: string, data: SessionRecord): Promise<void>;
65
+ private _loadKeyPairUnlocked;
66
+ private _saveKeyPairUnlocked;
67
+ private _loadCertUnlocked;
68
+ private _saveCertUnlocked;
69
+ private _loadMetadataOnlyUnlocked;
70
+ private _replaceStructuredStateUnlocked;
71
+ private _saveMetadataOnlyUnlocked;
72
+ private _migrateLegacyStructuredStateUnlocked;
73
+ private _loadPrekeysUnlocked;
74
+ private _replacePrekeysUnlocked;
75
+ private _loadGroupEntriesUnlocked;
76
+ private _replaceGroupEntriesUnlocked;
77
+ private _saveSingleGroupEntryUnlocked;
78
+ private _storeGroupSecretTransitionUnlocked;
79
+ private _storeGroupSecretEpochUnlocked;
80
+ private _discardPendingGroupSecretUnlocked;
81
+ private _buildGroupCurrentRecord;
82
+ private _mergeGroupEntryFromLegacy;
83
+ private _preferNewerGroupEpochRecord;
84
+ private _isUnexpiredRecord;
85
+ private _isPrekeyRecoverable;
86
+ private _isGroupEpochRecoverable;
87
+ private _loadSessionsUnlocked;
88
+ private _replaceSessionsUnlocked;
89
+ private _migrateLegacySessionsUnlocked;
90
+ saveSeq(aid: string, deviceId: string, slotId: string, namespace: string, contiguousSeq: number): Promise<void>;
91
+ loadSeq(aid: string, deviceId: string, slotId: string, namespace: string): Promise<number>;
92
+ loadAllSeqs(aid: string, deviceId: string, slotId: string): Promise<Record<string, number>>;
93
+ }
94
+ //# sourceMappingURL=indexeddb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexeddb.d.ts","sourceRoot":"","sources":["../../src/keystore/indexeddb.ts"],"names":[],"mappings":"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"}