@agentunion/fastaun-browser 0.2.15 → 0.2.17
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/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +4 -1
- package/dist/auth.js.map +1 -1
- package/dist/client.d.ts +48 -8
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +981 -190
- package/dist/client.js.map +1 -1
- package/dist/e2ee-group.d.ts +38 -0
- package/dist/e2ee-group.d.ts.map +1 -1
- package/dist/e2ee-group.js +183 -13
- package/dist/e2ee-group.js.map +1 -1
- package/dist/group-id.d.ts +24 -0
- package/dist/group-id.d.ts.map +1 -0
- package/dist/group-id.js +94 -0
- package/dist/group-id.js.map +1 -0
- package/dist/keystore/index.d.ts +16 -0
- package/dist/keystore/index.d.ts.map +1 -1
- package/dist/keystore/indexeddb.d.ts +4 -1
- package/dist/keystore/indexeddb.d.ts.map +1 -1
- package/dist/keystore/indexeddb.js +60 -3
- package/dist/keystore/indexeddb.js.map +1 -1
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +1 -0
- package/dist/transport.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* group_id 归一化工具。
|
|
3
|
+
*
|
|
4
|
+
* AUN 协议规定的 canonical 格式为 `group.{domain}/{base}`。
|
|
5
|
+
*
|
|
6
|
+
* 历史上出现过四种老/脏格式:
|
|
7
|
+
* 1. {base}.{domain} 例如 g-xxx.agentid.pub / 10086.agentid.pub
|
|
8
|
+
* 2. g-{slug}.{domain} (属于 1 的一种)
|
|
9
|
+
* 3. {base}@{domain} 例如 g-xxx@agentid.pub
|
|
10
|
+
* 4. group.{A}/{base}@{B} 旧版服务端迁移脚本未识别 @ 导致的污染数据
|
|
11
|
+
* 真实语义:group.{B}.{A}/{base}
|
|
12
|
+
*
|
|
13
|
+
* 与 Python SDK aun_core.group_id 和服务端
|
|
14
|
+
* extensions/services/group/service._split_group_id_domain 保持等价,零代码共享。
|
|
15
|
+
*/
|
|
16
|
+
export declare function normalizeGroupId(raw: unknown, opts?: {
|
|
17
|
+
localIssuer?: string;
|
|
18
|
+
}): string;
|
|
19
|
+
export declare function splitGroupId(raw: unknown): {
|
|
20
|
+
base: string;
|
|
21
|
+
domain: string;
|
|
22
|
+
};
|
|
23
|
+
export declare function buildDiscoveryHost(raw: unknown): string;
|
|
24
|
+
//# sourceMappingURL=group-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-id.d.ts","sourceRoot":"","sources":["../src/group-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAyDtF;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAU3E;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAIvD"}
|
package/dist/group-id.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* group_id 归一化工具。
|
|
3
|
+
*
|
|
4
|
+
* AUN 协议规定的 canonical 格式为 `group.{domain}/{base}`。
|
|
5
|
+
*
|
|
6
|
+
* 历史上出现过四种老/脏格式:
|
|
7
|
+
* 1. {base}.{domain} 例如 g-xxx.agentid.pub / 10086.agentid.pub
|
|
8
|
+
* 2. g-{slug}.{domain} (属于 1 的一种)
|
|
9
|
+
* 3. {base}@{domain} 例如 g-xxx@agentid.pub
|
|
10
|
+
* 4. group.{A}/{base}@{B} 旧版服务端迁移脚本未识别 @ 导致的污染数据
|
|
11
|
+
* 真实语义:group.{B}.{A}/{base}
|
|
12
|
+
*
|
|
13
|
+
* 与 Python SDK aun_core.group_id 和服务端
|
|
14
|
+
* extensions/services/group/service._split_group_id_domain 保持等价,零代码共享。
|
|
15
|
+
*/
|
|
16
|
+
export function normalizeGroupId(raw, opts) {
|
|
17
|
+
const value = String(raw ?? '').trim().toLowerCase();
|
|
18
|
+
if (!value)
|
|
19
|
+
return '';
|
|
20
|
+
// 情况 4:已迁移但 base 位置残留 @issuer 尾巴
|
|
21
|
+
if (value.startsWith('group.') && value.includes('/')) {
|
|
22
|
+
const issuerAndBase = value.slice(6);
|
|
23
|
+
const slashIdx = issuerAndBase.indexOf('/');
|
|
24
|
+
if (slashIdx > 0 && slashIdx < issuerAndBase.length - 1) {
|
|
25
|
+
const aDomain = issuerAndBase.slice(0, slashIdx).replace(/^\.+|\.+$/g, '');
|
|
26
|
+
const baseTail = issuerAndBase.slice(slashIdx + 1);
|
|
27
|
+
if (baseTail.includes('@')) {
|
|
28
|
+
const atIdx = baseTail.indexOf('@');
|
|
29
|
+
const base = baseTail.slice(0, atIdx).replace(/^\.+|\.+$/g, '');
|
|
30
|
+
const bDomain = baseTail.slice(atIdx + 1).replace(/^\.+|\.+$/g, '');
|
|
31
|
+
if (base && bDomain) {
|
|
32
|
+
const merged = aDomain ? `${bDomain}.${aDomain}` : bDomain;
|
|
33
|
+
return `group.${merged}/${base}`;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return aDomain
|
|
37
|
+
? `group.${aDomain}/${baseTail.replace(/^\.+|\.+$/g, '')}`
|
|
38
|
+
: value;
|
|
39
|
+
}
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
// 情况 3:base@domain / g-{slug}@domain
|
|
43
|
+
if (value.includes('@')) {
|
|
44
|
+
const atIdx = value.indexOf('@');
|
|
45
|
+
const base = value.slice(0, atIdx).replace(/^\.+|\.+$/g, '');
|
|
46
|
+
const domain = value.slice(atIdx + 1).replace(/^\.+|\.+$/g, '');
|
|
47
|
+
if (base && domain)
|
|
48
|
+
return `group.${domain}/${base}`;
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
// 情况 1/2:base.domain / g-{slug}.domain
|
|
52
|
+
const localIssuer = (opts?.localIssuer ?? '').trim().replace(/^\.+|\.+$/g, '').toLowerCase();
|
|
53
|
+
if (value.startsWith('g-')) {
|
|
54
|
+
const rest = value.slice(2);
|
|
55
|
+
const dotIdx = rest.indexOf('.');
|
|
56
|
+
if (dotIdx > 0) {
|
|
57
|
+
const slug = rest.slice(0, dotIdx);
|
|
58
|
+
const domain = rest.slice(dotIdx + 1).replace(/^\.+|\.+$/g, '');
|
|
59
|
+
if (slug && domain)
|
|
60
|
+
return `group.${domain}/g-${slug}`;
|
|
61
|
+
}
|
|
62
|
+
if (localIssuer)
|
|
63
|
+
return `group.${localIssuer}/g-${rest}`;
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
const dotIdx = value.indexOf('.');
|
|
67
|
+
if (dotIdx > 0) {
|
|
68
|
+
const base = value.slice(0, dotIdx);
|
|
69
|
+
const domain = value.slice(dotIdx + 1).replace(/^\.+|\.+$/g, '');
|
|
70
|
+
if (base && domain)
|
|
71
|
+
return `group.${domain}/${base}`;
|
|
72
|
+
}
|
|
73
|
+
if (localIssuer)
|
|
74
|
+
return `group.${localIssuer}/${value}`;
|
|
75
|
+
return value;
|
|
76
|
+
}
|
|
77
|
+
export function splitGroupId(raw) {
|
|
78
|
+
const canonical = normalizeGroupId(raw);
|
|
79
|
+
if (canonical.startsWith('group.') && canonical.includes('/')) {
|
|
80
|
+
const issuerAndBase = canonical.slice(6);
|
|
81
|
+
const slashIdx = issuerAndBase.indexOf('/');
|
|
82
|
+
const domain = issuerAndBase.slice(0, slashIdx).replace(/^\.+|\.+$/g, '');
|
|
83
|
+
const base = issuerAndBase.slice(slashIdx + 1).replace(/^\.+|\.+$/g, '');
|
|
84
|
+
return { base, domain };
|
|
85
|
+
}
|
|
86
|
+
return { base: canonical.replace(/^\.+|\.+$/g, ''), domain: '' };
|
|
87
|
+
}
|
|
88
|
+
export function buildDiscoveryHost(raw) {
|
|
89
|
+
const { base, domain } = splitGroupId(raw);
|
|
90
|
+
if (!base || !domain)
|
|
91
|
+
return '';
|
|
92
|
+
return `${base}.${domain}`;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=group-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-id.js","sourceRoot":"","sources":["../src/group-id.ts"],"names":[],"mappings":"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"}
|
package/dist/keystore/index.d.ts
CHANGED
|
@@ -80,6 +80,8 @@ export interface KeyStore {
|
|
|
80
80
|
loadSeq?(aid: string, deviceId: string, slotId: string, namespace: string): Promise<number>;
|
|
81
81
|
/** 加载某 device+slot 下所有 namespace 的 contiguous_seq */
|
|
82
82
|
loadAllSeqs?(aid: string, deviceId: string, slotId: string): Promise<Record<string, number>>;
|
|
83
|
+
/** 删除单个 namespace 的 contiguous_seq 行 */
|
|
84
|
+
deleteSeq?(aid: string, deviceId: string, slotId: string, namespace: string): Promise<void>;
|
|
83
85
|
/** 列出已存储的所有身份 AID(可选) */
|
|
84
86
|
listIdentities?(): Promise<string[]>;
|
|
85
87
|
/** 加载身份元数据(可选) */
|
|
@@ -94,5 +96,19 @@ export interface KeyStore {
|
|
|
94
96
|
saveIssuerRootCert?(issuer: string, certPem: string, fingerprintSha256?: string): Promise<[string, string]>;
|
|
95
97
|
/** 加载已存储的信任根列表 JSON */
|
|
96
98
|
loadTrustRoots?(): Promise<Record<string, unknown> | null>;
|
|
99
|
+
/** 保存群组状态快照 */
|
|
100
|
+
saveGroupState?(groupId: string, state: GroupStateRecord): Promise<void>;
|
|
101
|
+
/** 加载群组状态快照 */
|
|
102
|
+
loadGroupState?(groupId: string): Promise<GroupStateRecord | null>;
|
|
103
|
+
}
|
|
104
|
+
/** 群组状态记录 */
|
|
105
|
+
export interface GroupStateRecord {
|
|
106
|
+
group_id: string;
|
|
107
|
+
state_version: number;
|
|
108
|
+
state_hash: string;
|
|
109
|
+
key_epoch: number;
|
|
110
|
+
membership_json: string;
|
|
111
|
+
policy_json: string;
|
|
112
|
+
updated_at: number;
|
|
97
113
|
}
|
|
98
114
|
//# 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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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { KeyStore } from './index.js';
|
|
1
|
+
import type { KeyStore, GroupStateRecord } from './index.js';
|
|
2
2
|
import { type GroupSecretRecord, type IdentityRecord, type KeyPairRecord, type MetadataRecord, type PrekeyMap, type PrekeyRecord, type SessionRecord } from '../types.js';
|
|
3
3
|
/**
|
|
4
4
|
* 基于 IndexedDB 的密钥存储实现。
|
|
@@ -90,6 +90,9 @@ export declare class IndexedDBKeyStore implements KeyStore {
|
|
|
90
90
|
saveSeq(aid: string, deviceId: string, slotId: string, namespace: string, contiguousSeq: number): Promise<void>;
|
|
91
91
|
loadSeq(aid: string, deviceId: string, slotId: string, namespace: string): Promise<number>;
|
|
92
92
|
loadAllSeqs(aid: string, deviceId: string, slotId: string): Promise<Record<string, number>>;
|
|
93
|
+
deleteSeq(aid: string, deviceId: string, slotId: string, namespace: string): Promise<void>;
|
|
94
|
+
saveGroupState(groupId: string, state: GroupStateRecord): Promise<void>;
|
|
95
|
+
loadGroupState(groupId: string): Promise<GroupStateRecord | null>;
|
|
93
96
|
/** 信任根列表 JSON 在 IndexedDB 中的 key */
|
|
94
97
|
private static readonly _TRUST_LIST_KEY;
|
|
95
98
|
/** 信任根 bundle PEM 在 IndexedDB 中的 key */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexeddb.d.ts","sourceRoot":"","sources":["../../src/keystore/indexeddb.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"indexeddb.d.ts","sourceRoot":"","sources":["../../src/keystore/indexeddb.ts"],"names":[],"mappings":"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"}
|
|
@@ -110,7 +110,7 @@ async function _decryptPEM(enc, seed) {
|
|
|
110
110
|
}
|
|
111
111
|
// ── IndexedDB 工具 ──────────────────────────────────────
|
|
112
112
|
const DB_NAME = 'aun-keystore';
|
|
113
|
-
const DB_VERSION =
|
|
113
|
+
const DB_VERSION = 5;
|
|
114
114
|
/** 对象仓库名称 */
|
|
115
115
|
const STORE_KEY_PAIRS = 'key_pairs';
|
|
116
116
|
const STORE_CERTS = 'certs';
|
|
@@ -120,6 +120,7 @@ const STORE_PREKEYS = 'prekeys';
|
|
|
120
120
|
const STORE_GROUP_CURRENT = 'group_current';
|
|
121
121
|
const STORE_GROUP_OLD_EPOCHS = 'group_old_epochs';
|
|
122
122
|
const STORE_SESSIONS = 'e2ee_sessions';
|
|
123
|
+
const STORE_GROUP_STATE = 'group_state';
|
|
123
124
|
const STRUCTURED_RECOVERY_RETENTION_MS = 7 * 24 * 3600 * 1000;
|
|
124
125
|
const CRITICAL_METADATA_KEYS = [];
|
|
125
126
|
function metadataStoreKey(aid) {
|
|
@@ -243,6 +244,9 @@ function openDB() {
|
|
|
243
244
|
if (!db.objectStoreNames.contains(STORE_SESSIONS)) {
|
|
244
245
|
db.createObjectStore(STORE_SESSIONS);
|
|
245
246
|
}
|
|
247
|
+
if (!db.objectStoreNames.contains(STORE_GROUP_STATE)) {
|
|
248
|
+
db.createObjectStore(STORE_GROUP_STATE);
|
|
249
|
+
}
|
|
246
250
|
};
|
|
247
251
|
request.onsuccess = () => {
|
|
248
252
|
const db = request.result;
|
|
@@ -1135,6 +1139,20 @@ export class IndexedDBKeyStore {
|
|
|
1135
1139
|
group_id: groupId,
|
|
1136
1140
|
});
|
|
1137
1141
|
}
|
|
1142
|
+
else {
|
|
1143
|
+
// epoch === localEpoch 但 secret 为空:合并 data,保留已有字段
|
|
1144
|
+
const merged = { ...current, ...this._buildGroupCurrentRecord(groupId, opts, members, now) };
|
|
1145
|
+
if (!opts.epochChain && current.epoch_chain) {
|
|
1146
|
+
merged.epoch_chain = current.epoch_chain;
|
|
1147
|
+
}
|
|
1148
|
+
if (current.pending_rotation_id && !opts.pendingRotationId) {
|
|
1149
|
+
merged.pending_rotation_id = current.pending_rotation_id;
|
|
1150
|
+
if (current.pending_created_at)
|
|
1151
|
+
merged.pending_created_at = current.pending_created_at;
|
|
1152
|
+
}
|
|
1153
|
+
await idbPut(STORE_GROUP_CURRENT, currentKey, merged);
|
|
1154
|
+
return true;
|
|
1155
|
+
}
|
|
1138
1156
|
}
|
|
1139
1157
|
await idbPut(STORE_GROUP_CURRENT, currentKey, {
|
|
1140
1158
|
...this._buildGroupCurrentRecord(groupId, opts, members, now),
|
|
@@ -1156,8 +1174,15 @@ export class IndexedDBKeyStore {
|
|
|
1156
1174
|
const current = deepClone(currentRaw);
|
|
1157
1175
|
delete current.group_id;
|
|
1158
1176
|
const localEpoch = Number(current.epoch ?? 0);
|
|
1159
|
-
if (epoch > localEpoch)
|
|
1160
|
-
|
|
1177
|
+
if (epoch > localEpoch) {
|
|
1178
|
+
// 归档旧 epoch 到 old_epochs,然后用新 epoch 更新 current
|
|
1179
|
+
const expiresAt = Date.now() + (opts.oldEpochRetentionMs ?? 604800_000);
|
|
1180
|
+
const oldRecord = { ...current, group_id: groupId, expires_at: expiresAt };
|
|
1181
|
+
const oldKey = groupOldStoreKey(aid, groupId, localEpoch);
|
|
1182
|
+
await idbPut(STORE_GROUP_OLD_EPOCHS, oldKey, oldRecord);
|
|
1183
|
+
await idbPut(STORE_GROUP_CURRENT, currentKey, newRecord);
|
|
1184
|
+
return true;
|
|
1185
|
+
}
|
|
1161
1186
|
if (epoch === localEpoch) {
|
|
1162
1187
|
if (typeof current.secret === 'string' && current.secret !== opts.secret) {
|
|
1163
1188
|
if (!String(current.pending_rotation_id ?? '').trim())
|
|
@@ -1430,6 +1455,38 @@ export class IndexedDBKeyStore {
|
|
|
1430
1455
|
}
|
|
1431
1456
|
return result;
|
|
1432
1457
|
}
|
|
1458
|
+
async deleteSeq(aid, deviceId, slotId, namespace) {
|
|
1459
|
+
const key = seqTrackerStoreKey(aid, deviceId, slotId, namespace);
|
|
1460
|
+
await idbDelete(STORE_INSTANCE_STATE, key);
|
|
1461
|
+
}
|
|
1462
|
+
// ── Group State(群组状态快照) ─────────────────────────────
|
|
1463
|
+
async saveGroupState(groupId, state) {
|
|
1464
|
+
const key = encodePart(groupId);
|
|
1465
|
+
await idbPut(STORE_GROUP_STATE, key, {
|
|
1466
|
+
group_id: groupId,
|
|
1467
|
+
state_version: state.state_version,
|
|
1468
|
+
state_hash: state.state_hash,
|
|
1469
|
+
key_epoch: state.key_epoch,
|
|
1470
|
+
membership_json: state.membership_json,
|
|
1471
|
+
policy_json: state.policy_json,
|
|
1472
|
+
updated_at: state.updated_at ?? Date.now(),
|
|
1473
|
+
});
|
|
1474
|
+
}
|
|
1475
|
+
async loadGroupState(groupId) {
|
|
1476
|
+
const key = encodePart(groupId);
|
|
1477
|
+
const data = await idbGet(STORE_GROUP_STATE, key);
|
|
1478
|
+
if (!data || typeof data.state_version !== 'number')
|
|
1479
|
+
return null;
|
|
1480
|
+
return {
|
|
1481
|
+
group_id: groupId,
|
|
1482
|
+
state_version: data.state_version,
|
|
1483
|
+
state_hash: data.state_hash ?? '',
|
|
1484
|
+
key_epoch: data.key_epoch ?? 0,
|
|
1485
|
+
membership_json: data.membership_json ?? '[]',
|
|
1486
|
+
policy_json: data.policy_json ?? '{}',
|
|
1487
|
+
updated_at: data.updated_at ?? 0,
|
|
1488
|
+
};
|
|
1489
|
+
}
|
|
1433
1490
|
// ── Trust Root Storage(信任根证书存储) ─────────────────
|
|
1434
1491
|
// 浏览器环境无文件系统,统一存入 STORE_INSTANCE_STATE 并以特定前缀的 key 区分。
|
|
1435
1492
|
// 对外返回的"路径"为虚拟标识(indexeddb://...),仅用于日志/兼容字段。
|