@agentunion/fastaun 0.4.3 → 0.4.5
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 +213 -185
- package/_packed_docs/CHANGELOG.md +213 -185
- package/_packed_docs/INDEX.md +17 -17
- package/_packed_docs/KITE_DOCS_GUIDE.md +11 -11
- package/_packed_docs/agent.md/SCHEMA.md +49 -49
- package/_packed_docs/agent.md/examples/signed-openclaw-lobster.md +22 -22
- 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 +327 -327
- package/_packed_docs/cli/AUN-CLI/350/256/276/350/256/241/346/226/207/346/241/243.md +686 -686
- package/_packed_docs/design/2026-05-22-aun-rpc-trace-enhancement.md +542 -542
- package/_packed_docs/design/E2EE_V2/347/256/200/345/214/226/344/270/2721DH/345/212/240Per-AID_Wrap/346/226/271/346/241/210.md +124 -124
- package/_packed_docs/design//350/267/250/350/257/255/350/250/200/345/256/271/345/231/250E2E/346/265/213/350/257/225/346/226/271/346/241/210.md +665 -665
- package/_packed_docs/protocol/01-/350/272/253/344/273/275/344/270/216/345/207/255/350/257/201/345/215/217/350/256/256-auth.md +2 -2
- package/_packed_docs/protocol/14-/344/272/244/344/272/222/346/234/272/345/210/266-/345/223/215/345/272/224/346/250/241/345/274/217/344/270/216/350/207/252/344/270/273/346/250/241/345/274/217.md +170 -170
- package/_packed_docs/protocol/15-/347/246/273/347/272/277/346/216/250/351/200/201/351/200/232/347/237/245/345/215/217/350/256/256.md +419 -419
- package/_packed_docs/protocol/README.md +1 -1
- package/_packed_docs/protocol/aun-docs-guide.md +1 -1
- package/_packed_docs/protocol//351/231/204/345/275/225A-/346/234/257/350/257/255/350/241/250.md +15 -15
- package/_packed_docs/protocol//351/231/204/345/275/225B-/346/211/251/345/261/225/346/200/247/346/214/207/345/215/227.md +4 -4
- package/_packed_docs/protocol//351/231/204/345/275/225J-/345/256/242/346/210/267/347/253/257/346/216/245/345/205/245/347/244/272/344/276/213.md +98 -98
- package/_packed_docs/protocol//351/231/204/345/275/225M-JWT/350/256/244/350/257/201/345/256/236/347/216/260/346/214/207/345/215/227.md +46 -46
- package/_packed_docs/protocol//351/231/204/345/275/225N-/345/210/206/345/270/203/345/274/217Trace/345/215/217/350/256/256.md +257 -257
- package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +1 -1
- package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +1 -1
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +1 -0
- package/_packed_docs/sdk/09-payload-reference.md +13 -13
- package/_packed_docs/sdk/E2EE_V2/346/266/210/346/201/257/351/200/232/344/277/241/346/227/266/345/272/217/345/233/276.md +171 -171
- package/dist/aid-store.d.ts +1 -0
- package/dist/aid-store.js +26 -3
- package/dist/aid-store.js.map +1 -1
- package/dist/aid.d.ts +2 -1
- package/dist/aid.js +7 -6
- package/dist/aid.js.map +1 -1
- package/dist/auth.d.ts +17 -32
- package/dist/auth.js +42 -291
- package/dist/auth.js.map +1 -1
- package/dist/client.d.ts +10 -3
- package/dist/client.js +275 -138
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/keystore/aid-db.d.ts +0 -4
- package/dist/keystore/aid-db.js +4 -95
- package/dist/keystore/aid-db.js.map +1 -1
- package/dist/keystore/file.d.ts +8 -5
- package/dist/keystore/file.js +109 -68
- package/dist/keystore/file.js.map +1 -1
- package/dist/keystore/index.d.ts +39 -36
- package/dist/keystore/index.js +3 -2
- package/dist/keystore/index.js.map +1 -1
- package/dist/register-flow.d.ts +49 -0
- package/dist/register-flow.js +366 -0
- package/dist/register-flow.js.map +1 -0
- package/dist/secret-store/file-store.js +6 -1
- package/dist/secret-store/file-store.js.map +1 -1
- package/dist/tools/cross-sdk-agent.js +0 -9
- package/dist/tools/cross-sdk-agent.js.map +1 -1
- package/dist/transport.d.ts +1 -0
- package/dist/transport.js +7 -1
- package/dist/transport.js.map +1 -1
- package/dist/v2/session/keystore.d.ts +5 -0
- package/dist/v2/session/keystore.js +21 -3
- 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 -1697
- package/_packed_docs/python-sdk-v2-only-changelog.md +0 -189
package/dist/index.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ export { FileSecretStore, SeedMigrationError, type SeedChangeResult } from './se
|
|
|
21
21
|
export { RPCTransport } from './transport.js';
|
|
22
22
|
export { GatewayDiscovery } from './discovery.js';
|
|
23
23
|
export { AuthFlow } from './auth.js';
|
|
24
|
+
export { RegisterFlow, type RegisterResult } from './register-flow.js';
|
|
24
25
|
export { ProtectedHeaders } from './protected-headers.js';
|
|
25
26
|
export type { ProtectedHeadersInput } from './protected-headers.js';
|
|
26
27
|
export { encryptP2PMessage, encryptGroupMessage, decryptMessage, } from './v2/e2ee/index.js';
|
package/dist/index.js
CHANGED
|
@@ -28,6 +28,7 @@ export { RPCTransport } from './transport.js';
|
|
|
28
28
|
export { GatewayDiscovery } from './discovery.js';
|
|
29
29
|
// ── 认证流程 ─────────────────────────────────────────────────
|
|
30
30
|
export { AuthFlow } from './auth.js';
|
|
31
|
+
export { RegisterFlow } from './register-flow.js';
|
|
31
32
|
// ── E2EE ─────────────────────────────────────────────────────
|
|
32
33
|
export { ProtectedHeaders } from './protected-headers.js';
|
|
33
34
|
// ── E2EE V2 ──────────────────────────────────────────────────
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,4DAA4D;AAC5D,OAAO,EAAE,SAAS,EAA0B,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,GAAG,EAAqB,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAkC,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAA+B,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE/E,8DAA8D;AAC9D,OAAO,EAAE,WAAW,EAAkB,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAExF,4DAA4D;AAC5D,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,+BAA+B,EAC/B,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,8DAA8D;AAC9D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAqB,MAAM,aAAa,CAAC;AAE/E,8DAA8D;AAC9D,OAAO,EACL,eAAe,EAiBf,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,6DAA6D;AAC7D,OAAO,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAC;AAInE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAyB,MAAM,8BAA8B,CAAC;AAE1G,6DAA6D;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,8DAA8D;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,4DAA4D;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,4DAA4D;AAC5D,OAAO,EAAE,SAAS,EAA0B,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,GAAG,EAAqB,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAkC,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAA+B,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE/E,8DAA8D;AAC9D,OAAO,EAAE,WAAW,EAAkB,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAExF,4DAA4D;AAC5D,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,+BAA+B,EAC/B,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,8DAA8D;AAC9D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAqB,MAAM,aAAa,CAAC;AAE/E,8DAA8D;AAC9D,OAAO,EACL,eAAe,EAiBf,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,6DAA6D;AAC7D,OAAO,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAC;AAInE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAyB,MAAM,8BAA8B,CAAC;AAE1G,6DAA6D;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,8DAA8D;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,4DAA4D;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAuB,MAAM,oBAAoB,CAAC;AAEvE,gEAAgE;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,gEAAgE;AAChE,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"}
|
|
@@ -40,10 +40,6 @@ export declare class AIDDatabase {
|
|
|
40
40
|
setMetadata(key: string, value: string): void;
|
|
41
41
|
deleteMetadata(key: string): void;
|
|
42
42
|
getAllMetadata(): Record<string, string>;
|
|
43
|
-
private _agentMdCacheColumns;
|
|
44
|
-
private _normalizeAgentMdRecord;
|
|
45
|
-
loadAgentMdCache(aid: string): Record<string, unknown> | null;
|
|
46
|
-
upsertAgentMdCache(aid: string, fields: Record<string, unknown>): Record<string, unknown>;
|
|
47
43
|
saveGroupState(groupId: string, stateVersion: number, stateHash: string, keyEpoch: number, membershipJson: string, policyJson: string): void;
|
|
48
44
|
loadGroupState(groupId: string): {
|
|
49
45
|
group_id: string;
|
package/dist/keystore/aid-db.js
CHANGED
|
@@ -8,7 +8,7 @@ import { mkdirSync } from 'node:fs';
|
|
|
8
8
|
import { createRequire } from 'node:module';
|
|
9
9
|
import { dirname, resolve } from 'node:path';
|
|
10
10
|
import { slotIsolationKey } from '../config.js';
|
|
11
|
-
const SCHEMA_VERSION =
|
|
11
|
+
const SCHEMA_VERSION = 3;
|
|
12
12
|
const { DatabaseSync } = createRequire(import.meta.url)('node:sqlite');
|
|
13
13
|
const _dbPool = new Map();
|
|
14
14
|
function configureDatabase(db, busyTimeoutMs) {
|
|
@@ -83,21 +83,6 @@ const DDL_STATEMENTS = [
|
|
|
83
83
|
key TEXT PRIMARY KEY,
|
|
84
84
|
value TEXT NOT NULL,
|
|
85
85
|
updated_at INTEGER NOT NULL
|
|
86
|
-
)`,
|
|
87
|
-
`CREATE TABLE IF NOT EXISTS agent_md_cache (
|
|
88
|
-
aid TEXT PRIMARY KEY,
|
|
89
|
-
content TEXT NOT NULL DEFAULT '',
|
|
90
|
-
local_etag TEXT NOT NULL DEFAULT '',
|
|
91
|
-
remote_etag TEXT NOT NULL DEFAULT '',
|
|
92
|
-
last_modified TEXT NOT NULL DEFAULT '',
|
|
93
|
-
fetched_at INTEGER NOT NULL DEFAULT 0,
|
|
94
|
-
observed_at INTEGER NOT NULL DEFAULT 0,
|
|
95
|
-
checked_at INTEGER NOT NULL DEFAULT 0,
|
|
96
|
-
remote_status TEXT NOT NULL DEFAULT '',
|
|
97
|
-
verify_status TEXT NOT NULL DEFAULT '',
|
|
98
|
-
verify_error TEXT NOT NULL DEFAULT '',
|
|
99
|
-
last_error TEXT NOT NULL DEFAULT '',
|
|
100
|
-
updated_at INTEGER NOT NULL
|
|
101
86
|
)`,
|
|
102
87
|
`CREATE TABLE IF NOT EXISTS group_state (
|
|
103
88
|
group_id TEXT PRIMARY KEY,
|
|
@@ -175,6 +160,9 @@ export class AIDDatabase {
|
|
|
175
160
|
this._db.exec("ALTER TABLE instance_state ADD COLUMN slot_id_full TEXT NOT NULL DEFAULT ''");
|
|
176
161
|
this._db.exec("ALTER TABLE seq_tracker ADD COLUMN slot_id_full TEXT NOT NULL DEFAULT ''");
|
|
177
162
|
}
|
|
163
|
+
if (row.version < 3) {
|
|
164
|
+
this._db.exec('DROP TABLE IF EXISTS agent_md_cache');
|
|
165
|
+
}
|
|
178
166
|
this._db.prepare('UPDATE _schema_version SET version = ? WHERE id = 1').run(SCHEMA_VERSION);
|
|
179
167
|
}
|
|
180
168
|
}
|
|
@@ -244,85 +232,6 @@ export class AIDDatabase {
|
|
|
244
232
|
result[row.key] = row.value;
|
|
245
233
|
return result;
|
|
246
234
|
}
|
|
247
|
-
_agentMdCacheColumns() {
|
|
248
|
-
return [
|
|
249
|
-
'aid',
|
|
250
|
-
'content',
|
|
251
|
-
'local_etag',
|
|
252
|
-
'remote_etag',
|
|
253
|
-
'last_modified',
|
|
254
|
-
'fetched_at',
|
|
255
|
-
'observed_at',
|
|
256
|
-
'checked_at',
|
|
257
|
-
'remote_status',
|
|
258
|
-
'verify_status',
|
|
259
|
-
'verify_error',
|
|
260
|
-
'last_error',
|
|
261
|
-
'updated_at',
|
|
262
|
-
];
|
|
263
|
-
}
|
|
264
|
-
_normalizeAgentMdRecord(row) {
|
|
265
|
-
const out = {};
|
|
266
|
-
for (const col of this._agentMdCacheColumns())
|
|
267
|
-
out[col] = row[col];
|
|
268
|
-
for (const col of ['fetched_at', 'observed_at', 'checked_at', 'updated_at']) {
|
|
269
|
-
out[col] = Number(out[col] ?? 0);
|
|
270
|
-
}
|
|
271
|
-
return out;
|
|
272
|
-
}
|
|
273
|
-
loadAgentMdCache(aid) {
|
|
274
|
-
const target = String(aid ?? '').trim();
|
|
275
|
-
if (!target)
|
|
276
|
-
return null;
|
|
277
|
-
const columns = this._agentMdCacheColumns();
|
|
278
|
-
const row = this._db.prepare(`SELECT ${columns.join(', ')} FROM agent_md_cache WHERE aid = ?`).get(target);
|
|
279
|
-
return row ? this._normalizeAgentMdRecord(row) : null;
|
|
280
|
-
}
|
|
281
|
-
upsertAgentMdCache(aid, fields) {
|
|
282
|
-
const target = String(aid ?? '').trim();
|
|
283
|
-
if (!target)
|
|
284
|
-
throw new Error('agent_md_cache aid is required');
|
|
285
|
-
const current = this.loadAgentMdCache(target) ?? {
|
|
286
|
-
aid: target,
|
|
287
|
-
content: '',
|
|
288
|
-
local_etag: '',
|
|
289
|
-
remote_etag: '',
|
|
290
|
-
last_modified: '',
|
|
291
|
-
fetched_at: 0,
|
|
292
|
-
observed_at: 0,
|
|
293
|
-
checked_at: 0,
|
|
294
|
-
remote_status: '',
|
|
295
|
-
verify_status: '',
|
|
296
|
-
verify_error: '',
|
|
297
|
-
last_error: '',
|
|
298
|
-
updated_at: 0,
|
|
299
|
-
};
|
|
300
|
-
for (const key of [
|
|
301
|
-
'content',
|
|
302
|
-
'local_etag',
|
|
303
|
-
'remote_etag',
|
|
304
|
-
'last_modified',
|
|
305
|
-
'remote_status',
|
|
306
|
-
'verify_status',
|
|
307
|
-
'verify_error',
|
|
308
|
-
'last_error',
|
|
309
|
-
]) {
|
|
310
|
-
if (Object.prototype.hasOwnProperty.call(fields, key) && fields[key] !== undefined && fields[key] !== null) {
|
|
311
|
-
current[key] = String(fields[key] ?? '');
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
for (const key of ['fetched_at', 'observed_at', 'checked_at']) {
|
|
315
|
-
if (Object.prototype.hasOwnProperty.call(fields, key) && fields[key] !== undefined && fields[key] !== null) {
|
|
316
|
-
const value = Number(fields[key] ?? 0);
|
|
317
|
-
current[key] = Number.isFinite(value) ? Math.trunc(value) : 0;
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
current.updated_at = Date.now();
|
|
321
|
-
const columns = this._agentMdCacheColumns();
|
|
322
|
-
this._db.prepare(`INSERT INTO agent_md_cache (${columns.join(', ')}) VALUES (${columns.map(() => '?').join(', ')})
|
|
323
|
-
ON CONFLICT(aid) DO UPDATE SET ${columns.filter(col => col !== 'aid').map(col => `${col}=excluded.${col}`).join(', ')}`).run(...columns.map(col => current[col]));
|
|
324
|
-
return this.loadAgentMdCache(target) ?? current;
|
|
325
|
-
}
|
|
326
235
|
saveGroupState(groupId, stateVersion, stateHash, keyEpoch, membershipJson, policyJson) {
|
|
327
236
|
this._db.prepare(`INSERT INTO group_state (group_id, state_version, state_hash, key_epoch, membership_json, policy_json, updated_at)
|
|
328
237
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aid-db.js","sourceRoot":"","sources":["../../src/keystore/aid-db.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aid-db.js","sourceRoot":"","sources":["../../src/keystore/aid-db.ts"],"names":[],"mappings":"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"}
|
package/dist/keystore/file.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - tokens / instance_state / metadata_kv / group_state 全部存 SQLite
|
|
7
7
|
* - 废弃 meta.json
|
|
8
8
|
*/
|
|
9
|
-
import type {
|
|
9
|
+
import type { KeyStore } from './index.js';
|
|
10
10
|
import type { SecretStore } from '../secret-store/index.js';
|
|
11
11
|
import type { ModuleLogger } from '../logger.js';
|
|
12
12
|
import { V2KeyStore } from '../v2/session/keystore.js';
|
|
@@ -33,6 +33,7 @@ export declare class FileKeyStore implements KeyStore {
|
|
|
33
33
|
private _prepareRoot;
|
|
34
34
|
loadKeyPair(aid: string): KeyPairRecord | null;
|
|
35
35
|
saveKeyPair(aid: string, keyPair: KeyPairRecord): void;
|
|
36
|
+
private _saveKeyPairAtPath;
|
|
36
37
|
private _restoreKeyPair;
|
|
37
38
|
loadCert(aid: string, certFingerprint?: string): string | null;
|
|
38
39
|
saveCert(aid: string, certPem: string, certFingerprint?: string, opts?: {
|
|
@@ -54,8 +55,6 @@ export declare class FileKeyStore implements KeyStore {
|
|
|
54
55
|
loadMetadata(aid: string): Record<string, unknown> | null;
|
|
55
56
|
/** 保存指定 AID 的元数据;只覆盖传入字段,不清理其它 metadata。 */
|
|
56
57
|
saveMetadata(aid: string, metadata: Record<string, unknown>): void;
|
|
57
|
-
private _protectText;
|
|
58
|
-
private _revealText;
|
|
59
58
|
saveE2EEPrekey(aid: string, prekeyId: string, prekeyData: Record<string, unknown>, deviceId?: string): Promise<void>;
|
|
60
59
|
loadE2EEPrekeys(aid: string, deviceId?: string): Promise<Record<string, Record<string, unknown>>>;
|
|
61
60
|
listGroupSecretIds(aid: string): Promise<string[]>;
|
|
@@ -69,8 +68,6 @@ export declare class FileKeyStore implements KeyStore {
|
|
|
69
68
|
}): Promise<boolean>;
|
|
70
69
|
saveE2EESession(aid: string, sessionId: string, data: Record<string, unknown>): Promise<void>;
|
|
71
70
|
loadE2EESessions(aid: string): Promise<Array<Record<string, unknown>>>;
|
|
72
|
-
loadAgentMdCache(ownerAid: string, targetAid: string): AgentMdCacheRecord | null;
|
|
73
|
-
upsertAgentMdCache(ownerAid: string, targetAid: string, fields: AgentMdCacheUpsert): AgentMdCacheRecord;
|
|
74
71
|
trustRootDir(): string;
|
|
75
72
|
trustRootBundlePath(): string;
|
|
76
73
|
saveTrustRoots(trustList: Record<string, unknown>, rootCerts: Array<{
|
|
@@ -91,16 +88,22 @@ export declare class FileKeyStore implements KeyStore {
|
|
|
91
88
|
* 子目录 private/ public/ 一并创建。
|
|
92
89
|
*/
|
|
93
90
|
pendingIdentityDir(aid: string): string;
|
|
91
|
+
listPendingIdentityDirs(aid: string): string[];
|
|
92
|
+
savePendingKeyPair(pendingDir: string, aid: string, keyPair: KeyPairRecord): void;
|
|
93
|
+
loadPendingKeyPair(pendingDir: string, aid: string): KeyPairRecord | null;
|
|
94
|
+
savePendingCert(pendingDir: string, certPem: string): void;
|
|
94
95
|
/**
|
|
95
96
|
* 把临时目录原子 rename 到正式 AIDs/{aid}/。
|
|
96
97
|
* 目标已存在 → 抛错(调用方应当返回 IdentityConflictError)。
|
|
97
98
|
*/
|
|
98
99
|
promotePendingIdentity(pendingDir: string, aid: string): string;
|
|
100
|
+
private _ensurePendingKeyPairProtected;
|
|
99
101
|
/**
|
|
100
102
|
* 删除 AIDs/_pending/ 下 mtime 超过 maxAgeMs 的子目录。
|
|
101
103
|
* 失败仅记 warn,不抛错。返回被清理的目录数量。
|
|
102
104
|
*/
|
|
103
105
|
cleanupPendingDirs(maxAgeMs?: number): number;
|
|
106
|
+
discardPendingIdentity(pendingDir: string): void;
|
|
104
107
|
/** 获取指定 AID 的 V2KeyStore(共享同一 SQLite 连接)。 */
|
|
105
108
|
getV2KeyStore(aid: string): V2KeyStore;
|
|
106
109
|
}
|
package/dist/keystore/file.js
CHANGED
|
@@ -27,6 +27,23 @@ function secureFilePermissions(path) {
|
|
|
27
27
|
catch { /* ignore */ }
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
+
function replaceFileSync(tmpPath, targetPath) {
|
|
31
|
+
try {
|
|
32
|
+
renameSync(tmpPath, targetPath);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
catch (renameErr) {
|
|
36
|
+
try {
|
|
37
|
+
unlinkSync(targetPath);
|
|
38
|
+
}
|
|
39
|
+
catch (unlinkErr) {
|
|
40
|
+
if (unlinkErr.code !== 'ENOENT') {
|
|
41
|
+
throw new Error(`replace target cleanup failed: ${unlinkErr instanceof Error ? unlinkErr.message : String(unlinkErr)}; original rename error: ${renameErr instanceof Error ? renameErr.message : String(renameErr)}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
renameSync(tmpPath, targetPath);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
30
47
|
function deepClone(value) {
|
|
31
48
|
return JSON.parse(JSON.stringify(value));
|
|
32
49
|
}
|
|
@@ -126,17 +143,21 @@ export class FileKeyStore {
|
|
|
126
143
|
const path = this._keyPairPath(aid);
|
|
127
144
|
if (!existsSync(path))
|
|
128
145
|
return null;
|
|
146
|
+
let raw;
|
|
129
147
|
try {
|
|
130
|
-
|
|
131
|
-
return this._restoreKeyPair(aid, raw);
|
|
148
|
+
raw = JSON.parse(readFileSync(path, 'utf-8'));
|
|
132
149
|
}
|
|
133
150
|
catch (exc) {
|
|
134
151
|
this._logger.warn('key.json read or parse failed, treating as non-existent');
|
|
135
152
|
return null;
|
|
136
153
|
}
|
|
154
|
+
return this._restoreKeyPair(aid, raw, path);
|
|
137
155
|
}
|
|
138
156
|
saveKeyPair(aid, keyPair) {
|
|
139
157
|
const path = this._keyPairPath(aid);
|
|
158
|
+
this._saveKeyPairAtPath(aid, path, keyPair);
|
|
159
|
+
}
|
|
160
|
+
_saveKeyPairAtPath(aid, path, keyPair) {
|
|
140
161
|
mkdirSync(dirname(path), { recursive: true });
|
|
141
162
|
const protected_ = deepClone(keyPair);
|
|
142
163
|
const pem = protected_.private_key_pem;
|
|
@@ -145,16 +166,35 @@ export class FileKeyStore {
|
|
|
145
166
|
const rec = this._secretStore.protect(safeAid(aid), 'identity/private_key', Buffer.from(pem, 'utf-8'));
|
|
146
167
|
protected_.private_key_protection = rec;
|
|
147
168
|
}
|
|
148
|
-
|
|
169
|
+
const tmpPath = `${path}.tmp-${process.pid}-${Date.now()}-${crypto.randomBytes(4).toString('hex')}`;
|
|
170
|
+
writeFileSync(tmpPath, JSON.stringify(protected_, null, 2), { mode: 0o600 });
|
|
171
|
+
secureFilePermissions(tmpPath);
|
|
172
|
+
try {
|
|
173
|
+
replaceFileSync(tmpPath, path);
|
|
174
|
+
}
|
|
175
|
+
catch (exc) {
|
|
176
|
+
try {
|
|
177
|
+
unlinkSync(tmpPath);
|
|
178
|
+
}
|
|
179
|
+
catch { /* ignore tmp cleanup failure */ }
|
|
180
|
+
throw exc;
|
|
181
|
+
}
|
|
149
182
|
secureFilePermissions(path);
|
|
150
183
|
}
|
|
151
|
-
_restoreKeyPair(aid, kp) {
|
|
184
|
+
_restoreKeyPair(aid, kp, persistPath) {
|
|
152
185
|
const out = deepClone(kp);
|
|
153
186
|
const rec = out.private_key_protection;
|
|
154
187
|
if (isJsonObject(rec)) {
|
|
155
188
|
const plain = this._secretStore.reveal(safeAid(aid), 'identity/private_key', rec);
|
|
156
|
-
if (plain)
|
|
157
|
-
|
|
189
|
+
if (!plain) {
|
|
190
|
+
throw new Error(`private key decrypt failed for aid ${aid}: seed_password mismatch or key.json corrupted`);
|
|
191
|
+
}
|
|
192
|
+
out.private_key_pem = plain.toString('utf-8');
|
|
193
|
+
return out;
|
|
194
|
+
}
|
|
195
|
+
if (persistPath && typeof out.private_key_pem === 'string' && out.private_key_pem) {
|
|
196
|
+
// 兼容历史明文 key.json:首次加载成功后立即用当前 seed_password 加密回写。
|
|
197
|
+
this._saveKeyPairAtPath(aid, persistPath, out);
|
|
158
198
|
}
|
|
159
199
|
return out;
|
|
160
200
|
}
|
|
@@ -284,6 +324,8 @@ export class FileKeyStore {
|
|
|
284
324
|
for (const entry of readdirSync(this._aidsRoot, { withFileTypes: true })) {
|
|
285
325
|
if (!entry.isDirectory())
|
|
286
326
|
continue;
|
|
327
|
+
if (entry.name.startsWith('_'))
|
|
328
|
+
continue;
|
|
287
329
|
const identity = this.loadIdentity(entry.name);
|
|
288
330
|
if (identity)
|
|
289
331
|
return identity;
|
|
@@ -368,44 +410,6 @@ export class FileKeyStore {
|
|
|
368
410
|
}
|
|
369
411
|
}
|
|
370
412
|
// ── 旧 E2EE 存储互操作 ───────────────────────────────────
|
|
371
|
-
_protectText(aid, name, plaintext) {
|
|
372
|
-
if (!plaintext)
|
|
373
|
-
return plaintext;
|
|
374
|
-
try {
|
|
375
|
-
const rec = this._secretStore.protect(safeAid(aid), name, Buffer.from(plaintext, 'utf-8'));
|
|
376
|
-
return JSON.stringify(rec);
|
|
377
|
-
}
|
|
378
|
-
catch (exc) {
|
|
379
|
-
this._logger.error(`field encryption failed (scope=${safeAid(aid)}, name=${name}): ${exc instanceof Error ? exc.message : String(exc)}`);
|
|
380
|
-
return plaintext;
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
_revealText(aid, name, stored) {
|
|
384
|
-
if (!stored)
|
|
385
|
-
return stored;
|
|
386
|
-
let rec;
|
|
387
|
-
try {
|
|
388
|
-
rec = JSON.parse(stored);
|
|
389
|
-
}
|
|
390
|
-
catch {
|
|
391
|
-
return stored;
|
|
392
|
-
}
|
|
393
|
-
if (rec === null || typeof rec !== 'object' || Array.isArray(rec)) {
|
|
394
|
-
return stored;
|
|
395
|
-
}
|
|
396
|
-
const record = rec;
|
|
397
|
-
if (record.scheme !== 'file_aes' || String(record.name ?? '') !== name) {
|
|
398
|
-
return stored;
|
|
399
|
-
}
|
|
400
|
-
try {
|
|
401
|
-
const plain = this._secretStore.reveal(safeAid(aid), name, record);
|
|
402
|
-
return plain ? plain.toString('utf-8') : stored;
|
|
403
|
-
}
|
|
404
|
-
catch (exc) {
|
|
405
|
-
this._logger.error(`field decryption failed (scope=${safeAid(aid)}, name=${name}): ${exc instanceof Error ? exc.message : String(exc)}`);
|
|
406
|
-
return stored;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
413
|
async saveE2EEPrekey(aid, prekeyId, prekeyData, deviceId = '') {
|
|
410
414
|
const now = Date.now();
|
|
411
415
|
const privateKey = String(prekeyData.private_key_pem ?? '');
|
|
@@ -432,7 +436,7 @@ export class FileKeyStore {
|
|
|
432
436
|
if (!id)
|
|
433
437
|
continue;
|
|
434
438
|
const entry = {
|
|
435
|
-
private_key_pem:
|
|
439
|
+
private_key_pem: String(row.private_key_enc ?? ''),
|
|
436
440
|
created_at: row.created_at,
|
|
437
441
|
updated_at: row.updated_at,
|
|
438
442
|
expires_at: row.expires_at,
|
|
@@ -465,7 +469,7 @@ export class FileKeyStore {
|
|
|
465
469
|
const entry = {
|
|
466
470
|
group_id: groupId,
|
|
467
471
|
epoch: current.epoch,
|
|
468
|
-
secret:
|
|
472
|
+
secret: String(current.secret_enc ?? ''),
|
|
469
473
|
updated_at: current.updated_at,
|
|
470
474
|
};
|
|
471
475
|
try {
|
|
@@ -483,7 +487,7 @@ export class FileKeyStore {
|
|
|
483
487
|
return null;
|
|
484
488
|
const entry = {
|
|
485
489
|
epoch: old.epoch,
|
|
486
|
-
secret:
|
|
490
|
+
secret: String(old.secret_enc ?? ''),
|
|
487
491
|
updated_at: old.updated_at,
|
|
488
492
|
};
|
|
489
493
|
if (old.expires_at != null)
|
|
@@ -505,14 +509,14 @@ export class FileKeyStore {
|
|
|
505
509
|
return false;
|
|
506
510
|
if (current && Number(current.epoch ?? 0) !== epoch) {
|
|
507
511
|
const oldEpoch = Number(current.epoch ?? 0);
|
|
508
|
-
const oldSecret =
|
|
512
|
+
const oldSecret = String(current.secret_enc ?? '');
|
|
509
513
|
db.prepare(`INSERT INTO group_old_epochs (group_id, epoch, secret_enc, data, updated_at, expires_at)
|
|
510
514
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
511
515
|
ON CONFLICT(group_id, epoch) DO UPDATE SET
|
|
512
516
|
secret_enc=excluded.secret_enc,
|
|
513
517
|
data=excluded.data,
|
|
514
518
|
updated_at=excluded.updated_at,
|
|
515
|
-
expires_at=excluded.expires_at`).run(groupId, oldEpoch,
|
|
519
|
+
expires_at=excluded.expires_at`).run(groupId, oldEpoch, oldSecret, String(current.data ?? '{}'), Number(current.updated_at ?? now), Number(current.updated_at ?? now) + Number(opts.oldEpochRetentionMs ?? 0));
|
|
516
520
|
}
|
|
517
521
|
const data = {
|
|
518
522
|
commitment: String(opts.commitment ?? ''),
|
|
@@ -541,7 +545,7 @@ export class FileKeyStore {
|
|
|
541
545
|
if (!sessionId)
|
|
542
546
|
continue;
|
|
543
547
|
try {
|
|
544
|
-
const entry = JSON.parse(
|
|
548
|
+
const entry = JSON.parse(String(row.data_enc ?? '{}'));
|
|
545
549
|
if (entry && typeof entry === 'object' && !Array.isArray(entry)) {
|
|
546
550
|
result.push({ ...entry, session_id: sessionId, updated_at: row.updated_at });
|
|
547
551
|
}
|
|
@@ -550,24 +554,6 @@ export class FileKeyStore {
|
|
|
550
554
|
}
|
|
551
555
|
return result;
|
|
552
556
|
}
|
|
553
|
-
// ── agent.md Cache ───────────────────────────────────────
|
|
554
|
-
loadAgentMdCache(ownerAid, targetAid) {
|
|
555
|
-
const owner = String(ownerAid ?? '').trim();
|
|
556
|
-
const target = String(targetAid ?? '').trim();
|
|
557
|
-
if (!owner || !target)
|
|
558
|
-
return null;
|
|
559
|
-
const record = this._getDB(owner).loadAgentMdCache(target);
|
|
560
|
-
return record ? deepClone(record) : null;
|
|
561
|
-
}
|
|
562
|
-
upsertAgentMdCache(ownerAid, targetAid, fields) {
|
|
563
|
-
const owner = String(ownerAid ?? '').trim();
|
|
564
|
-
const target = String(targetAid ?? '').trim();
|
|
565
|
-
if (!owner || !target) {
|
|
566
|
-
throw new Error('upsertAgentMdCache requires ownerAid and targetAid');
|
|
567
|
-
}
|
|
568
|
-
const record = this._getDB(owner).upsertAgentMdCache(target, fields);
|
|
569
|
-
return deepClone(record);
|
|
570
|
-
}
|
|
571
557
|
// ── 信任根管理 ─────────────────────────────────────────────
|
|
572
558
|
trustRootDir() {
|
|
573
559
|
const dir = join(this._root, 'CA', 'root');
|
|
@@ -667,11 +653,50 @@ export class FileKeyStore {
|
|
|
667
653
|
mkdirSync(join(dir, 'public'), { recursive: true });
|
|
668
654
|
return dir;
|
|
669
655
|
}
|
|
656
|
+
listPendingIdentityDirs(aid) {
|
|
657
|
+
const root = this._pendingRoot();
|
|
658
|
+
if (!existsSync(root))
|
|
659
|
+
return [];
|
|
660
|
+
const prefix = `${safeAid(aid)}-`;
|
|
661
|
+
const items = [];
|
|
662
|
+
for (const entry of readdirSync(root, { withFileTypes: true })) {
|
|
663
|
+
if (!entry.isDirectory() || !entry.name.startsWith(prefix))
|
|
664
|
+
continue;
|
|
665
|
+
const path = join(root, entry.name);
|
|
666
|
+
try {
|
|
667
|
+
items.push({ path, mtimeMs: statSync(path).mtimeMs });
|
|
668
|
+
}
|
|
669
|
+
catch { /* ignore unreadable pending entry */ }
|
|
670
|
+
}
|
|
671
|
+
return items.sort((a, b) => b.mtimeMs - a.mtimeMs).map((item) => item.path);
|
|
672
|
+
}
|
|
673
|
+
savePendingKeyPair(pendingDir, aid, keyPair) {
|
|
674
|
+
this._saveKeyPairAtPath(aid, join(pendingDir, 'private', 'key.json'), keyPair);
|
|
675
|
+
}
|
|
676
|
+
loadPendingKeyPair(pendingDir, aid) {
|
|
677
|
+
const keyPath = join(pendingDir, 'private', 'key.json');
|
|
678
|
+
if (!existsSync(keyPath))
|
|
679
|
+
return null;
|
|
680
|
+
let raw;
|
|
681
|
+
try {
|
|
682
|
+
raw = JSON.parse(readFileSync(keyPath, 'utf-8'));
|
|
683
|
+
}
|
|
684
|
+
catch {
|
|
685
|
+
return null;
|
|
686
|
+
}
|
|
687
|
+
return this._restoreKeyPair(aid, raw, keyPath);
|
|
688
|
+
}
|
|
689
|
+
savePendingCert(pendingDir, certPem) {
|
|
690
|
+
const certPath = join(pendingDir, 'public', 'cert.pem');
|
|
691
|
+
mkdirSync(dirname(certPath), { recursive: true });
|
|
692
|
+
writeFileSync(certPath, certPem, { encoding: 'utf-8', mode: 0o600 });
|
|
693
|
+
}
|
|
670
694
|
/**
|
|
671
695
|
* 把临时目录原子 rename 到正式 AIDs/{aid}/。
|
|
672
696
|
* 目标已存在 → 抛错(调用方应当返回 IdentityConflictError)。
|
|
673
697
|
*/
|
|
674
698
|
promotePendingIdentity(pendingDir, aid) {
|
|
699
|
+
this._ensurePendingKeyPairProtected(pendingDir, aid);
|
|
675
700
|
const target = join(this._aidsRoot, safeAid(aid));
|
|
676
701
|
if (existsSync(target)) {
|
|
677
702
|
throw new Error(`promotePendingIdentity: target exists: ${target}`);
|
|
@@ -690,6 +715,19 @@ export class FileKeyStore {
|
|
|
690
715
|
fsRenameSync(pendingDir, target);
|
|
691
716
|
return target;
|
|
692
717
|
}
|
|
718
|
+
_ensurePendingKeyPairProtected(pendingDir, aid) {
|
|
719
|
+
const keyPath = join(pendingDir, 'private', 'key.json');
|
|
720
|
+
if (!existsSync(keyPath)) {
|
|
721
|
+
throw new Error(`pending identity missing key pair for ${aid}`);
|
|
722
|
+
}
|
|
723
|
+
const raw = JSON.parse(readFileSync(keyPath, 'utf-8'));
|
|
724
|
+
if (typeof raw.private_key_pem === 'string' && raw.private_key_pem) {
|
|
725
|
+
throw new Error(`pending identity private key is plaintext for ${aid}`);
|
|
726
|
+
}
|
|
727
|
+
if (!isJsonObject(raw.private_key_protection)) {
|
|
728
|
+
throw new Error(`pending identity private key is not encrypted for ${aid}`);
|
|
729
|
+
}
|
|
730
|
+
}
|
|
693
731
|
/**
|
|
694
732
|
* 删除 AIDs/_pending/ 下 mtime 超过 maxAgeMs 的子目录。
|
|
695
733
|
* 失败仅记 warn,不抛错。返回被清理的目录数量。
|
|
@@ -722,6 +760,9 @@ export class FileKeyStore {
|
|
|
722
760
|
}
|
|
723
761
|
return removed;
|
|
724
762
|
}
|
|
763
|
+
discardPendingIdentity(pendingDir) {
|
|
764
|
+
fsRmSync(pendingDir, { recursive: true, force: true });
|
|
765
|
+
}
|
|
725
766
|
/** 获取指定 AID 的 V2KeyStore(共享同一 SQLite 连接)。 */
|
|
726
767
|
getV2KeyStore(aid) {
|
|
727
768
|
const db = this._getDB(aid);
|