@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.
- package/CHANGELOG.md +41 -0
- package/_packed_docs/CHANGELOG.md +41 -0
- package/_packed_docs/INDEX.md +2 -2
- package/_packed_docs/KITE_DOCS_GUIDE.md +1 -1
- 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
- package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +16 -15
- package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +2 -2
- package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +22 -5
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +42 -26
- package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +2 -2
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +61 -35
- package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +3 -3
- package/_packed_docs/sdk/09-message-rpc-manual.md +6 -6
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +6 -4
- package/_packed_docs/sdk/INDEX.md +2 -2
- package/_packed_docs/sdk/README.md +3 -3
- package/dist/agent-md.d.ts +111 -0
- package/dist/agent-md.d.ts.map +1 -0
- package/dist/agent-md.js +656 -0
- package/dist/agent-md.js.map +1 -0
- package/dist/aid-store.d.ts +8 -40
- package/dist/aid-store.d.ts.map +1 -1
- package/dist/aid-store.js +89 -172
- package/dist/aid-store.js.map +1 -1
- package/dist/auth.d.ts +8 -13
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +37 -130
- package/dist/auth.js.map +1 -1
- package/dist/bundle.js +6540 -6033
- package/dist/client.d.ts +8 -65
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +193 -762
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/keystore/index.d.ts +49 -22
- package/dist/keystore/index.d.ts.map +1 -1
- package/dist/keystore/index.js +6 -1
- package/dist/keystore/index.js.map +1 -1
- package/dist/keystore/indexeddb-identity-store.d.ts +59 -0
- package/dist/keystore/indexeddb-identity-store.d.ts.map +1 -0
- package/dist/keystore/indexeddb-identity-store.js +489 -0
- package/dist/keystore/indexeddb-identity-store.js.map +1 -0
- package/dist/keystore/indexeddb-shared.d.ts +76 -0
- package/dist/keystore/indexeddb-shared.d.ts.map +1 -0
- package/dist/keystore/indexeddb-shared.js +382 -0
- package/dist/keystore/indexeddb-shared.js.map +1 -0
- package/dist/keystore/indexeddb-token-store.d.ts +119 -0
- package/dist/keystore/indexeddb-token-store.d.ts.map +1 -0
- package/dist/keystore/indexeddb-token-store.js +1086 -0
- package/dist/keystore/indexeddb-token-store.js.map +1 -0
- package/dist/keystore/indexeddb.d.ts +11 -1
- package/dist/keystore/indexeddb.d.ts.map +1 -1
- package/dist/keystore/indexeddb.js +167 -18
- package/dist/keystore/indexeddb.js.map +1 -1
- package/dist/register-flow.d.ts +53 -0
- package/dist/register-flow.d.ts.map +1 -0
- package/dist/register-flow.js +401 -0
- package/dist/register-flow.js.map +1 -0
- package/dist/v2/session/keystore.d.ts +5 -0
- package/dist/v2/session/keystore.d.ts.map +1 -1
- package/dist/v2/session/keystore.js +29 -0
- package/dist/v2/session/keystore.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- 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
- 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
- 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
- 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
- package/_packed_docs/python-sdk-v2-only-changelog.md +0 -189
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
// ── IndexedDB 共享基础设施(内部模块,不对外导出)──────────────────
|
|
2
|
+
import { pemToArrayBuffer } from '../crypto.js';
|
|
3
|
+
import { normalizeInstanceId, slotIsolationKey } from '../config.js';
|
|
4
|
+
import { isJsonObject, } from '../types.js';
|
|
5
|
+
export const _noopLog = { error: () => { }, warn: () => { }, info: () => { }, debug: () => { } };
|
|
6
|
+
// ── 对象仓库名称 ──────────────────────────────────────────────────
|
|
7
|
+
export const STORE_KEY_PAIRS = 'key_pairs';
|
|
8
|
+
export const STORE_CERTS = 'certs';
|
|
9
|
+
export const STORE_METADATA = 'metadata';
|
|
10
|
+
export const STORE_INSTANCE_STATE = 'instance_state';
|
|
11
|
+
export const STORE_PREKEYS = 'prekeys';
|
|
12
|
+
export const STORE_GROUP_CURRENT = 'group_current';
|
|
13
|
+
export const STORE_GROUP_OLD_EPOCHS = 'group_old_epochs';
|
|
14
|
+
export const STORE_SESSIONS = 'e2ee_sessions';
|
|
15
|
+
export const STORE_GROUP_STATE = 'group_state';
|
|
16
|
+
export const STORE_AGENT_MD_CACHE = 'agent_md_cache';
|
|
17
|
+
export const STORE_PENDING_IDENTITIES = 'pending_identities';
|
|
18
|
+
export const STRUCTURED_RECOVERY_RETENTION_MS = 7 * 24 * 3600 * 1000;
|
|
19
|
+
const DB_NAME = 'aun-keystore';
|
|
20
|
+
const DB_VERSION = 7;
|
|
21
|
+
// ── 工具函数 ──────────────────────────────────────────────────────
|
|
22
|
+
export function safeAid(aid) {
|
|
23
|
+
return aid.replace(/[/\\:]/g, '_');
|
|
24
|
+
}
|
|
25
|
+
export function encodePart(value) {
|
|
26
|
+
return encodeURIComponent(value);
|
|
27
|
+
}
|
|
28
|
+
export function deepClone(value) {
|
|
29
|
+
return JSON.parse(JSON.stringify(value));
|
|
30
|
+
}
|
|
31
|
+
export function isRecord(value) {
|
|
32
|
+
return isJsonObject(value);
|
|
33
|
+
}
|
|
34
|
+
export function toBufferSource(bytes) {
|
|
35
|
+
return bytes.slice().buffer;
|
|
36
|
+
}
|
|
37
|
+
export function sameJson(a, b) {
|
|
38
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
39
|
+
}
|
|
40
|
+
export function randomHex(byteLength) {
|
|
41
|
+
const bytes = crypto.getRandomValues(new Uint8Array(byteLength));
|
|
42
|
+
return Array.from(bytes).map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
43
|
+
}
|
|
44
|
+
export function metadataStoreKey(aid) {
|
|
45
|
+
return safeAid(aid);
|
|
46
|
+
}
|
|
47
|
+
export function normalizeCertFingerprint(certFingerprint) {
|
|
48
|
+
const normalized = String(certFingerprint ?? '').trim().toLowerCase();
|
|
49
|
+
if (!normalized)
|
|
50
|
+
return '';
|
|
51
|
+
if (!normalized.startsWith('sha256:'))
|
|
52
|
+
return '';
|
|
53
|
+
const hexPart = normalized.slice(7);
|
|
54
|
+
if (hexPart.length !== 64 || /[^0-9a-f]/.test(hexPart))
|
|
55
|
+
return '';
|
|
56
|
+
return normalized;
|
|
57
|
+
}
|
|
58
|
+
export async function fingerprintFromCertPem(certPem) {
|
|
59
|
+
try {
|
|
60
|
+
const der = pemToArrayBuffer(certPem);
|
|
61
|
+
const hash = await crypto.subtle.digest('SHA-256', der);
|
|
62
|
+
const hex = Array.from(new Uint8Array(hash)).map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
63
|
+
return `sha256:${hex}`;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return '';
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export function certStoreKey(aid, certFingerprint) {
|
|
70
|
+
const normalized = normalizeCertFingerprint(certFingerprint);
|
|
71
|
+
if (!normalized)
|
|
72
|
+
return safeAid(aid);
|
|
73
|
+
return `${safeAid(aid)}|${encodePart(normalized)}`;
|
|
74
|
+
}
|
|
75
|
+
export function instanceStateStoreKey(aid, deviceId, slotId = '') {
|
|
76
|
+
const normalizedDevice = normalizeInstanceId(deviceId, 'device_id');
|
|
77
|
+
const slotKey = slotIsolationKey(slotId) || '_singleton';
|
|
78
|
+
return `${safeAid(aid)}|${encodePart(normalizedDevice)}|${encodePart(slotKey)}`;
|
|
79
|
+
}
|
|
80
|
+
export function prekeyPrefix(aid) {
|
|
81
|
+
return `${safeAid(aid)}|`;
|
|
82
|
+
}
|
|
83
|
+
export function prekeyStoreKey(aid, prekeyId, deviceId = '') {
|
|
84
|
+
const normalizedDeviceId = String(deviceId ?? '').trim();
|
|
85
|
+
if (!normalizedDeviceId) {
|
|
86
|
+
return `${safeAid(aid)}|${encodePart(prekeyId)}`;
|
|
87
|
+
}
|
|
88
|
+
return `${safeAid(aid)}|${encodePart(normalizedDeviceId)}|${encodePart(prekeyId)}`;
|
|
89
|
+
}
|
|
90
|
+
export function groupCurrentPrefix(aid) {
|
|
91
|
+
return `${safeAid(aid)}|`;
|
|
92
|
+
}
|
|
93
|
+
export function groupCurrentStoreKey(aid, groupId) {
|
|
94
|
+
return `${safeAid(aid)}|${encodePart(groupId)}`;
|
|
95
|
+
}
|
|
96
|
+
export function groupOldPrefix(aid, groupId) {
|
|
97
|
+
const base = `${safeAid(aid)}|`;
|
|
98
|
+
if (groupId === undefined)
|
|
99
|
+
return base;
|
|
100
|
+
return `${base}${encodePart(groupId)}|`;
|
|
101
|
+
}
|
|
102
|
+
export function groupOldStoreKey(aid, groupId, epoch) {
|
|
103
|
+
return `${safeAid(aid)}|${encodePart(groupId)}|${epoch}`;
|
|
104
|
+
}
|
|
105
|
+
export function sessionPrefix(aid) {
|
|
106
|
+
return `${safeAid(aid)}|`;
|
|
107
|
+
}
|
|
108
|
+
export function sessionStoreKey(aid, sessionId) {
|
|
109
|
+
return `${safeAid(aid)}|${encodePart(sessionId)}`;
|
|
110
|
+
}
|
|
111
|
+
export function seqTrackerPrefix(aid, deviceId, slotId) {
|
|
112
|
+
const normalizedDevice = normalizeInstanceId(deviceId, 'device_id');
|
|
113
|
+
const slotKey = slotIsolationKey(slotId) || '_singleton';
|
|
114
|
+
return `_seq_|${safeAid(aid)}|${encodePart(normalizedDevice)}|${encodePart(slotKey)}|`;
|
|
115
|
+
}
|
|
116
|
+
export function seqTrackerStoreKey(aid, deviceId, slotId, namespace) {
|
|
117
|
+
return `${seqTrackerPrefix(aid, deviceId, slotId)}${encodePart(namespace)}`;
|
|
118
|
+
}
|
|
119
|
+
export function agentMdCachePrefix(ownerAid) {
|
|
120
|
+
return `${safeAid(ownerAid)}|`;
|
|
121
|
+
}
|
|
122
|
+
export function agentMdCacheStoreKey(ownerAid, targetAid) {
|
|
123
|
+
return `${agentMdCachePrefix(ownerAid)}${encodePart(targetAid)}`;
|
|
124
|
+
}
|
|
125
|
+
export function pendingIdentityPrefix(aid) {
|
|
126
|
+
return `${safeAid(aid)}-`;
|
|
127
|
+
}
|
|
128
|
+
export function stripStructuredFields(metadata) {
|
|
129
|
+
const plain = deepClone(metadata);
|
|
130
|
+
delete plain.e2ee_prekeys;
|
|
131
|
+
delete plain.group_secrets;
|
|
132
|
+
delete plain.e2ee_sessions;
|
|
133
|
+
return plain;
|
|
134
|
+
}
|
|
135
|
+
export function defaultAgentMdCacheRecord(aid) {
|
|
136
|
+
return {
|
|
137
|
+
aid,
|
|
138
|
+
content: '',
|
|
139
|
+
local_etag: '',
|
|
140
|
+
remote_etag: '',
|
|
141
|
+
last_modified: '',
|
|
142
|
+
fetched_at: 0,
|
|
143
|
+
observed_at: 0,
|
|
144
|
+
checked_at: 0,
|
|
145
|
+
remote_status: '',
|
|
146
|
+
verify_status: '',
|
|
147
|
+
verify_error: '',
|
|
148
|
+
last_error: '',
|
|
149
|
+
updated_at: 0,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
export function normalizeAgentMdCacheRecord(aid, value) {
|
|
153
|
+
if (!isRecord(value))
|
|
154
|
+
return null;
|
|
155
|
+
const out = defaultAgentMdCacheRecord(aid);
|
|
156
|
+
for (const key of ['content', 'local_etag', 'remote_etag', 'last_modified', 'remote_status', 'verify_status', 'verify_error', 'last_error']) {
|
|
157
|
+
out[key] = String(value[key] ?? '');
|
|
158
|
+
}
|
|
159
|
+
for (const key of ['fetched_at', 'observed_at', 'checked_at', 'updated_at']) {
|
|
160
|
+
const n = Number(value[key] ?? 0);
|
|
161
|
+
out[key] = Number.isFinite(n) ? Math.trunc(n) : 0;
|
|
162
|
+
}
|
|
163
|
+
out.aid = String(value.aid ?? aid).trim() || aid;
|
|
164
|
+
return out;
|
|
165
|
+
}
|
|
166
|
+
export function mergeAgentMdCacheRecord(aid, current, fields) {
|
|
167
|
+
const out = current ? { ...current } : defaultAgentMdCacheRecord(aid);
|
|
168
|
+
out.aid = aid;
|
|
169
|
+
for (const key of ['content', 'local_etag', 'remote_etag', 'last_modified', 'remote_status', 'verify_status', 'verify_error', 'last_error']) {
|
|
170
|
+
if (Object.prototype.hasOwnProperty.call(fields, key) && fields[key] !== undefined && fields[key] !== null) {
|
|
171
|
+
out[key] = String(fields[key] ?? '');
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
for (const key of ['fetched_at', 'observed_at', 'checked_at']) {
|
|
175
|
+
if (Object.prototype.hasOwnProperty.call(fields, key) && fields[key] !== undefined && fields[key] !== null) {
|
|
176
|
+
const n = Number(fields[key] ?? 0);
|
|
177
|
+
out[key] = Number.isFinite(n) ? Math.trunc(n) : 0;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
out.updated_at = Date.now();
|
|
181
|
+
return out;
|
|
182
|
+
}
|
|
183
|
+
// ── 私钥字段级加密 (AES-256-GCM + PBKDF2) ──────────────────────
|
|
184
|
+
const _ENC_ALGO = 'AES-GCM';
|
|
185
|
+
const _PBKDF2_ITERATIONS = 100_000;
|
|
186
|
+
function _uint8ToBase64(bytes) {
|
|
187
|
+
let b = '';
|
|
188
|
+
for (let i = 0; i < bytes.length; i++)
|
|
189
|
+
b += String.fromCharCode(bytes[i]);
|
|
190
|
+
return btoa(b);
|
|
191
|
+
}
|
|
192
|
+
function _base64ToUint8(b64) {
|
|
193
|
+
return Uint8Array.from(atob(b64), c => c.charCodeAt(0));
|
|
194
|
+
}
|
|
195
|
+
async function _deriveEncKey(seed, salt) {
|
|
196
|
+
const raw = new TextEncoder().encode(seed);
|
|
197
|
+
const base = await crypto.subtle.importKey('raw', raw, 'PBKDF2', false, ['deriveKey']);
|
|
198
|
+
return crypto.subtle.deriveKey({ name: 'PBKDF2', salt: salt, iterations: _PBKDF2_ITERATIONS, hash: 'SHA-256' }, base, { name: _ENC_ALGO, length: 256 }, false, ['encrypt', 'decrypt']);
|
|
199
|
+
}
|
|
200
|
+
export async function encryptPEM(pem, seed) {
|
|
201
|
+
const salt = crypto.getRandomValues(new Uint8Array(16));
|
|
202
|
+
const iv = crypto.getRandomValues(new Uint8Array(12));
|
|
203
|
+
const key = await _deriveEncKey(seed, salt);
|
|
204
|
+
const ct = await crypto.subtle.encrypt({ name: _ENC_ALGO, iv: iv }, key, new TextEncoder().encode(pem));
|
|
205
|
+
return {
|
|
206
|
+
ct: _uint8ToBase64(new Uint8Array(ct)),
|
|
207
|
+
iv: _uint8ToBase64(iv),
|
|
208
|
+
salt: _uint8ToBase64(salt),
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
export async function decryptPEM(enc, seed) {
|
|
212
|
+
const salt = _base64ToUint8(enc.salt);
|
|
213
|
+
const iv = _base64ToUint8(enc.iv);
|
|
214
|
+
const ct = _base64ToUint8(enc.ct);
|
|
215
|
+
const key = await _deriveEncKey(seed, salt);
|
|
216
|
+
const pt = await crypto.subtle.decrypt({ name: _ENC_ALGO, iv: toBufferSource(iv) }, key, toBufferSource(ct));
|
|
217
|
+
return new TextDecoder().decode(pt);
|
|
218
|
+
}
|
|
219
|
+
export function hasEncryptionSeed(seed) {
|
|
220
|
+
return seed !== undefined;
|
|
221
|
+
}
|
|
222
|
+
// ── IndexedDB 连接管理 ────────────────────────────────────────────
|
|
223
|
+
let _cachedDB = null;
|
|
224
|
+
let _openDBPromise = null;
|
|
225
|
+
export function openDB() {
|
|
226
|
+
if (_cachedDB)
|
|
227
|
+
return Promise.resolve(_cachedDB);
|
|
228
|
+
if (_openDBPromise)
|
|
229
|
+
return _openDBPromise;
|
|
230
|
+
_openDBPromise = new Promise((resolve, reject) => {
|
|
231
|
+
const request = indexedDB.open(DB_NAME, DB_VERSION);
|
|
232
|
+
request.onupgradeneeded = () => {
|
|
233
|
+
const db = request.result;
|
|
234
|
+
for (const name of [
|
|
235
|
+
STORE_KEY_PAIRS, STORE_CERTS, STORE_METADATA, STORE_INSTANCE_STATE,
|
|
236
|
+
STORE_PREKEYS, STORE_GROUP_CURRENT, STORE_GROUP_OLD_EPOCHS, STORE_SESSIONS,
|
|
237
|
+
STORE_GROUP_STATE, STORE_AGENT_MD_CACHE, STORE_PENDING_IDENTITIES,
|
|
238
|
+
]) {
|
|
239
|
+
if (!db.objectStoreNames.contains(name))
|
|
240
|
+
db.createObjectStore(name);
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
request.onsuccess = () => {
|
|
244
|
+
const db = request.result;
|
|
245
|
+
db.onversionchange = () => {
|
|
246
|
+
_cachedDB = null;
|
|
247
|
+
_openDBPromise = null;
|
|
248
|
+
try {
|
|
249
|
+
db.close();
|
|
250
|
+
}
|
|
251
|
+
catch { /* ignore */ }
|
|
252
|
+
};
|
|
253
|
+
db.onclose = () => { _cachedDB = null; };
|
|
254
|
+
_cachedDB = db;
|
|
255
|
+
_openDBPromise = null;
|
|
256
|
+
resolve(db);
|
|
257
|
+
};
|
|
258
|
+
request.onerror = () => {
|
|
259
|
+
_openDBPromise = null;
|
|
260
|
+
reject(new Error('IndexedDB 不可用(可能处于隐私模式或 IndexedDB 被禁用)。' +
|
|
261
|
+
'请使用本地 split store (Node.js) 或在浏览器中允许 IndexedDB。'));
|
|
262
|
+
};
|
|
263
|
+
request.onblocked = () => {
|
|
264
|
+
_openDBPromise = null;
|
|
265
|
+
reject(new Error('IndexedDB 升级被其它 tab 阻塞,请关闭其它页面后重试'));
|
|
266
|
+
};
|
|
267
|
+
});
|
|
268
|
+
return _openDBPromise;
|
|
269
|
+
}
|
|
270
|
+
// ── IndexedDB CRUD 工具 ───────────────────────────────────────────
|
|
271
|
+
export async function idbGet(storeName, key) {
|
|
272
|
+
const db = await openDB();
|
|
273
|
+
return new Promise((resolve, reject) => {
|
|
274
|
+
const tx = db.transaction(storeName, 'readonly');
|
|
275
|
+
const req = tx.objectStore(storeName).get(key);
|
|
276
|
+
tx.oncomplete = () => { resolve(req.result ?? null); };
|
|
277
|
+
tx.onerror = () => { reject(tx.error ?? new Error(`读取 ${storeName} 失败`)); };
|
|
278
|
+
tx.onabort = () => { reject(tx.error ?? new Error(`读取 ${storeName} 被中止`)); };
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
export async function idbGetAll(storeName) {
|
|
282
|
+
const db = await openDB();
|
|
283
|
+
return new Promise((resolve, reject) => {
|
|
284
|
+
const tx = db.transaction(storeName, 'readonly');
|
|
285
|
+
const store = tx.objectStore(storeName);
|
|
286
|
+
const valuesReq = store.getAll();
|
|
287
|
+
const keysReq = store.getAllKeys();
|
|
288
|
+
tx.oncomplete = () => {
|
|
289
|
+
const values = valuesReq.result ?? [];
|
|
290
|
+
const keys = keysReq.result ?? [];
|
|
291
|
+
resolve(keys.map((key, index) => ({
|
|
292
|
+
key: typeof key === 'string' ? key : String(key),
|
|
293
|
+
value: values[index],
|
|
294
|
+
})));
|
|
295
|
+
};
|
|
296
|
+
tx.onerror = () => { reject(tx.error ?? new Error(`读取 ${storeName} 全量数据失败`)); };
|
|
297
|
+
tx.onabort = () => { reject(tx.error ?? new Error(`读取 ${storeName} 全量数据被中止`)); };
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
export async function idbGetAllByPrefix(storeName, prefix) {
|
|
301
|
+
const db = await openDB();
|
|
302
|
+
return new Promise((resolve, reject) => {
|
|
303
|
+
const tx = db.transaction(storeName, 'readonly');
|
|
304
|
+
const store = tx.objectStore(storeName);
|
|
305
|
+
const range = IDBKeyRange.bound(prefix, `${prefix}`, false, false);
|
|
306
|
+
const result = [];
|
|
307
|
+
const req = store.openCursor(range);
|
|
308
|
+
req.onsuccess = () => {
|
|
309
|
+
const cursor = req.result;
|
|
310
|
+
if (!cursor)
|
|
311
|
+
return;
|
|
312
|
+
result.push({
|
|
313
|
+
key: typeof cursor.key === 'string' ? cursor.key : String(cursor.key),
|
|
314
|
+
value: cursor.value,
|
|
315
|
+
});
|
|
316
|
+
cursor.continue();
|
|
317
|
+
};
|
|
318
|
+
tx.oncomplete = () => { resolve(result); };
|
|
319
|
+
tx.onerror = () => { reject(tx.error ?? new Error(`按前缀读取 ${storeName} 失败`)); };
|
|
320
|
+
tx.onabort = () => { reject(tx.error ?? new Error(`按前缀读取 ${storeName} 被中止`)); };
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
export async function idbPut(storeName, key, value) {
|
|
324
|
+
const db = await openDB();
|
|
325
|
+
return new Promise((resolve, reject) => {
|
|
326
|
+
const tx = db.transaction(storeName, 'readwrite');
|
|
327
|
+
tx.objectStore(storeName).put(value, key);
|
|
328
|
+
tx.oncomplete = () => { resolve(); };
|
|
329
|
+
tx.onerror = () => { reject(tx.error ?? new Error(`写入 ${storeName} 失败`)); };
|
|
330
|
+
tx.onabort = () => { reject(tx.error ?? new Error(`写入 ${storeName} 被中止`)); };
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
export async function idbDelete(storeName, key) {
|
|
334
|
+
const db = await openDB();
|
|
335
|
+
return new Promise((resolve, reject) => {
|
|
336
|
+
const tx = db.transaction(storeName, 'readwrite');
|
|
337
|
+
tx.objectStore(storeName).delete(key);
|
|
338
|
+
tx.oncomplete = () => { resolve(); };
|
|
339
|
+
tx.onerror = () => { reject(tx.error ?? new Error(`删除 ${storeName} 失败`)); };
|
|
340
|
+
tx.onabort = () => { reject(tx.error ?? new Error(`删除 ${storeName} 被中止`)); };
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
// ── SPKI 提取(证书公钥一致性校验用)────────────────────────────
|
|
344
|
+
export function extractSpkiB64FromCertPem(certPem) {
|
|
345
|
+
try {
|
|
346
|
+
const der = new Uint8Array(pemToArrayBuffer(certPem));
|
|
347
|
+
const tlv = (d, o) => {
|
|
348
|
+
let lo = o + 1, len;
|
|
349
|
+
if (d[lo] & 0x80) {
|
|
350
|
+
const n = d[lo] & 0x7f;
|
|
351
|
+
len = 0;
|
|
352
|
+
for (let i = 0; i < n; i++)
|
|
353
|
+
len = (len << 8) | d[lo + 1 + i];
|
|
354
|
+
lo += 1 + n;
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
len = d[lo];
|
|
358
|
+
lo += 1;
|
|
359
|
+
}
|
|
360
|
+
return [lo, len];
|
|
361
|
+
};
|
|
362
|
+
const skip = (d, o) => { const [vs, vl] = tlv(d, o); return vs + vl; };
|
|
363
|
+
let [vs] = tlv(der, 0);
|
|
364
|
+
let pos = vs;
|
|
365
|
+
const [tbsVs] = tlv(der, pos);
|
|
366
|
+
pos = tbsVs;
|
|
367
|
+
if (der[pos] === 0xa0)
|
|
368
|
+
pos = skip(der, pos);
|
|
369
|
+
for (let i = 0; i < 5; i++)
|
|
370
|
+
pos = skip(der, pos);
|
|
371
|
+
const spkiEnd = skip(der, pos);
|
|
372
|
+
const spkiBytes = der.slice(pos, spkiEnd);
|
|
373
|
+
let b = '';
|
|
374
|
+
for (let i = 0; i < spkiBytes.length; i++)
|
|
375
|
+
b += String.fromCharCode(spkiBytes[i]);
|
|
376
|
+
return btoa(b);
|
|
377
|
+
}
|
|
378
|
+
catch {
|
|
379
|
+
return '';
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=indexeddb-shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexeddb-shared.js","sourceRoot":"","sources":["../../src/keystore/indexeddb-shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import type { ModuleLogger } from '../logger.js';
|
|
2
|
+
import type { AgentMdCacheRecord, AgentMdCacheUpsert, TokenStore, GroupStateRecord } from './index.js';
|
|
3
|
+
import { type GroupSecretRecord, type MetadataRecord, type PrekeyMap, type PrekeyRecord, type SessionRecord } from './indexeddb-shared.js';
|
|
4
|
+
/**
|
|
5
|
+
* 基于 IndexedDB 的 TokenStore 实现(不含私钥操作)。
|
|
6
|
+
*
|
|
7
|
+
* 设计语义:
|
|
8
|
+
* - metadata 只保存普通 metadata 字段;
|
|
9
|
+
* - e2ee_prekeys / group_secrets 只保存到结构化 store;
|
|
10
|
+
* - 若检测到旧版本把结构化数据写进了 metadata,会自动迁移到结构化 store。
|
|
11
|
+
*/
|
|
12
|
+
export declare class IndexedDBTokenStore implements TokenStore {
|
|
13
|
+
private _log;
|
|
14
|
+
setLogger(log: ModuleLogger): void;
|
|
15
|
+
private static _aidTails;
|
|
16
|
+
private _withAidLock;
|
|
17
|
+
loadCert(aid: string, certFingerprint?: string): Promise<string | null>;
|
|
18
|
+
saveCert(aid: string, certPem: string, certFingerprint?: string, opts?: {
|
|
19
|
+
makeActive?: boolean;
|
|
20
|
+
}): Promise<void>;
|
|
21
|
+
loadInstanceState(aid: string, deviceId: string, slotId?: string): Promise<MetadataRecord | null>;
|
|
22
|
+
saveInstanceState(aid: string, deviceId: string, slotId: string, state: MetadataRecord): Promise<void>;
|
|
23
|
+
updateInstanceState(aid: string, deviceId: string, slotId: string, updater: (state: MetadataRecord) => MetadataRecord | void): Promise<MetadataRecord>;
|
|
24
|
+
loadE2EEPrekeys(aid: string, deviceId?: string): Promise<PrekeyMap>;
|
|
25
|
+
/**
|
|
26
|
+
* 按 prekey_id 单点查询本地 prekey(O(log N) IndexedDB primary-key 查找)。
|
|
27
|
+
*
|
|
28
|
+
* 解密入站消息时,envelope 里只带 prekey_id,没有 device_id。优先用 IndexedDB
|
|
29
|
+
* 主键直查;命中则 O(log N),未命中再回退到前缀扫描,保证跨 device_id 也能找到。
|
|
30
|
+
*/
|
|
31
|
+
loadE2EEPrekeyById(aid: string, prekeyId: string): Promise<Record<string, unknown> | null>;
|
|
32
|
+
saveE2EEPrekey(aid: string, prekeyId: string, prekeyData: PrekeyRecord, deviceId?: string): Promise<void>;
|
|
33
|
+
cleanupE2EEPrekeys(aid: string, cutoffMs: number, keepLatest?: number, deviceId?: string): Promise<string[]>;
|
|
34
|
+
listGroupSecretIds(aid: string): Promise<string[]>;
|
|
35
|
+
cleanupGroupOldEpochsState(aid: string, groupId: string, cutoffMs: number): Promise<number>;
|
|
36
|
+
loadGroupSecretEpoch(aid: string, groupId: string, epoch?: number | null): Promise<GroupSecretRecord | null>;
|
|
37
|
+
loadGroupSecretEpochs(aid: string, groupId: string): Promise<GroupSecretRecord[]>;
|
|
38
|
+
storeGroupSecretTransition(aid: string, groupId: string, opts: {
|
|
39
|
+
epoch: number;
|
|
40
|
+
secret: string;
|
|
41
|
+
commitment: string;
|
|
42
|
+
memberAids: string[];
|
|
43
|
+
epochChain?: string;
|
|
44
|
+
pendingRotationId?: string;
|
|
45
|
+
epochChainUnverified?: boolean | null;
|
|
46
|
+
epochChainUnverifiedReason?: string | null;
|
|
47
|
+
oldEpochRetentionMs: number;
|
|
48
|
+
}): Promise<boolean>;
|
|
49
|
+
storeGroupSecretEpoch(aid: string, groupId: string, opts: {
|
|
50
|
+
epoch: number;
|
|
51
|
+
secret: string;
|
|
52
|
+
commitment: string;
|
|
53
|
+
memberAids: string[];
|
|
54
|
+
epochChain?: string;
|
|
55
|
+
pendingRotationId?: string;
|
|
56
|
+
epochChainUnverified?: boolean | null;
|
|
57
|
+
epochChainUnverifiedReason?: string | null;
|
|
58
|
+
oldEpochRetentionMs: number;
|
|
59
|
+
}): Promise<boolean>;
|
|
60
|
+
discardPendingGroupSecretState(aid: string, groupId: string, epoch: number, rotationId: string): Promise<boolean>;
|
|
61
|
+
deleteGroupSecretState(aid: string, groupId: string): Promise<void>;
|
|
62
|
+
loadE2EESessions(aid: string): Promise<SessionRecord[]>;
|
|
63
|
+
saveE2EESession(aid: string, sessionId: string, data: SessionRecord): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* 读取单个 metadata KV(如 gateway_url 等跨进程缓存项)。
|
|
66
|
+
* 不存在时返回空字符串,与 Python keystore 的 get_metadata 语义保持一致。
|
|
67
|
+
*/
|
|
68
|
+
getMetadata(aid: string, key: string): Promise<string>;
|
|
69
|
+
/**
|
|
70
|
+
* 写入单个 metadata KV。空字符串视为删除该字段。
|
|
71
|
+
* 与 _saveMetadataOnlyUnlocked 不同,本方法只更新指定 key,不影响其他字段。
|
|
72
|
+
*/
|
|
73
|
+
setMetadata(aid: string, key: string, value: string): Promise<void>;
|
|
74
|
+
saveSeq(aid: string, deviceId: string, slotId: string, namespace: string, contiguousSeq: number): Promise<void>;
|
|
75
|
+
loadSeq(aid: string, deviceId: string, slotId: string, namespace: string): Promise<number>;
|
|
76
|
+
loadAllSeqs(aid: string, deviceId: string, slotId: string): Promise<Record<string, number>>;
|
|
77
|
+
deleteSeq(aid: string, deviceId: string, slotId: string, namespace: string): Promise<void>;
|
|
78
|
+
loadAgentMdCache(ownerAid: string, targetAid: string): Promise<AgentMdCacheRecord | null>;
|
|
79
|
+
upsertAgentMdCache(ownerAid: string, targetAid: string, fields: AgentMdCacheUpsert): Promise<AgentMdCacheRecord>;
|
|
80
|
+
listAgentMdContentAids(agentMdPath: string): Promise<string[]>;
|
|
81
|
+
saveGroupState(groupId: string, state: GroupStateRecord): Promise<void>;
|
|
82
|
+
loadGroupState(groupId: string): Promise<GroupStateRecord | null>;
|
|
83
|
+
private static readonly _TRUST_LIST_KEY;
|
|
84
|
+
private static readonly _TRUST_BUNDLE_KEY;
|
|
85
|
+
private static readonly _TRUST_CERT_PREFIX;
|
|
86
|
+
private static readonly _TRUST_ISSUER_PREFIX;
|
|
87
|
+
/** 计算 PEM 证书的 SHA-256 指纹(hex,无冒号) */
|
|
88
|
+
private _pemFingerprint;
|
|
89
|
+
/** 拆分 bundle PEM 文本为单个 PEM 证书数组 */
|
|
90
|
+
private _splitPemBundle;
|
|
91
|
+
saveTrustRoots(trustList: Record<string, unknown>, rootCerts: Array<{
|
|
92
|
+
id?: string;
|
|
93
|
+
cert_pem: string;
|
|
94
|
+
fingerprint_sha256?: string;
|
|
95
|
+
}>): Promise<string>;
|
|
96
|
+
saveIssuerRootCert(issuer: string, certPem: string, fingerprintSha256?: string): Promise<[string, string]>;
|
|
97
|
+
loadTrustRoots(): Promise<Record<string, unknown> | null>;
|
|
98
|
+
private _loadMetadataOnlyUnlocked;
|
|
99
|
+
private _saveMetadataOnlyUnlocked;
|
|
100
|
+
private _migrateLegacyStructuredStateUnlocked;
|
|
101
|
+
private _loadPrekeysUnlocked;
|
|
102
|
+
private _loadPrekeyByIdUnlocked;
|
|
103
|
+
private _replacePrekeysUnlocked;
|
|
104
|
+
private _loadGroupEntriesUnlocked;
|
|
105
|
+
private _replaceGroupEntriesUnlocked;
|
|
106
|
+
private _saveSingleGroupEntryUnlocked;
|
|
107
|
+
private _storeGroupSecretTransitionUnlocked;
|
|
108
|
+
private _storeGroupSecretEpochUnlocked;
|
|
109
|
+
private _discardPendingGroupSecretUnlocked;
|
|
110
|
+
private _buildGroupCurrentRecord;
|
|
111
|
+
private _mergeGroupEntryFromLegacy;
|
|
112
|
+
private _preferNewerGroupEpochRecord;
|
|
113
|
+
private _isUnexpiredRecord;
|
|
114
|
+
private _isPrekeyRecoverable;
|
|
115
|
+
private _isGroupEpochRecoverable;
|
|
116
|
+
private _loadSessionsUnlocked;
|
|
117
|
+
private _migrateLegacySessionsUnlocked;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=indexeddb-token-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexeddb-token-store.d.ts","sourceRoot":"","sources":["../../src/keystore/indexeddb-token-store.ts"],"names":[],"mappings":"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"}
|