@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.
- package/README.md +604 -0
- package/dist/auth.d.ts +150 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +1388 -0
- package/dist/auth.js.map +1 -0
- package/dist/certs/root.d.ts +2 -0
- package/dist/certs/root.d.ts.map +1 -0
- package/dist/certs/root.js +16 -0
- package/dist/certs/root.js.map +1 -0
- package/dist/client.d.ts +341 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +4061 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +37 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +85 -0
- package/dist/config.js.map +1 -0
- package/dist/crypto.d.ts +41 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +132 -0
- package/dist/crypto.js.map +1 -0
- package/dist/discovery.d.ts +20 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +75 -0
- package/dist/discovery.js.map +1 -0
- package/dist/e2ee-group.d.ts +221 -0
- package/dist/e2ee-group.d.ts.map +1 -0
- package/dist/e2ee-group.js +1174 -0
- package/dist/e2ee-group.js.map +1 -0
- package/dist/e2ee.d.ts +187 -0
- package/dist/e2ee.d.ts.map +1 -0
- package/dist/e2ee.js +1067 -0
- package/dist/e2ee.js.map +1 -0
- package/dist/errors.d.ts +118 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +250 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +33 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +68 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/keystore/index.d.ts +88 -0
- package/dist/keystore/index.d.ts.map +1 -0
- package/dist/keystore/index.js +3 -0
- package/dist/keystore/index.js.map +1 -0
- package/dist/keystore/indexeddb.d.ts +94 -0
- package/dist/keystore/indexeddb.d.ts.map +1 -0
- package/dist/keystore/indexeddb.js +1434 -0
- package/dist/keystore/indexeddb.js.map +1 -0
- package/dist/namespaces/auth.d.ts +52 -0
- package/dist/namespaces/auth.d.ts.map +1 -0
- package/dist/namespaces/auth.js +237 -0
- package/dist/namespaces/auth.js.map +1 -0
- package/dist/namespaces/custody.d.ts +48 -0
- package/dist/namespaces/custody.d.ts.map +1 -0
- package/dist/namespaces/custody.js +230 -0
- package/dist/namespaces/custody.js.map +1 -0
- package/dist/secret-store/index.d.ts +20 -0
- package/dist/secret-store/index.d.ts.map +1 -0
- package/dist/secret-store/index.js +12 -0
- package/dist/secret-store/index.js.map +1 -0
- package/dist/secret-store/indexeddb-store.d.ts +22 -0
- package/dist/secret-store/indexeddb-store.d.ts.map +1 -0
- package/dist/secret-store/indexeddb-store.js +133 -0
- package/dist/secret-store/indexeddb-store.js.map +1 -0
- package/dist/seq-tracker.d.ts +30 -0
- package/dist/seq-tracker.d.ts.map +1 -0
- package/dist/seq-tracker.js +219 -0
- package/dist/seq-tracker.js.map +1 -0
- package/dist/transport.d.ts +45 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +251 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +171 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- 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 @@
|
|
|
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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"}
|