@agentunion/fastaun-browser 0.3.5 → 0.4.0
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 +14 -0
- package/_packed_docs/AUN_SDK_/351/207/215/346/236/204/345/256/236/346/226/275/350/256/241/345/210/222.md +596 -0
- 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 +1633 -0
- package/_packed_docs/CHANGELOG.md +14 -0
- package/_packed_docs/INDEX.md +17 -11
- package/_packed_docs/KITE_DOCS_GUIDE.md +11 -10
- package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +134 -158
- package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +11 -7
- package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +98 -119
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +147 -374
- package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +153 -153
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +163 -1364
- package/_packed_docs/sdk/07-/351/224/231/350/257/257/345/244/204/347/220/206.md +71 -91
- package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +76 -63
- package/_packed_docs/sdk/09-custody-api-manual.md +7 -6
- package/_packed_docs/sdk/09-meta-rpc-manual.md +13 -14
- package/_packed_docs/sdk/09-storage-rpc-manual.md +89 -0
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +37 -49
- package/_packed_docs/sdk/INDEX.md +72 -98
- package/_packed_docs/sdk/README.md +85 -266
- package/dist/aid-store.d.ts +64 -0
- package/dist/aid-store.d.ts.map +1 -0
- package/dist/aid-store.js +855 -0
- package/dist/aid-store.js.map +1 -0
- package/dist/aid.d.ts +50 -0
- package/dist/aid.d.ts.map +1 -0
- package/dist/aid.js +106 -0
- package/dist/aid.js.map +1 -0
- package/dist/auth.d.ts +17 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +27 -4
- package/dist/auth.js.map +1 -1
- package/dist/bundle.js +1981 -2048
- package/dist/cert-utils.d.ts +26 -0
- package/dist/cert-utils.d.ts.map +1 -0
- package/dist/cert-utils.js +221 -0
- package/dist/cert-utils.js.map +1 -0
- package/dist/client.d.ts +93 -58
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +775 -170
- package/dist/client.js.map +1 -1
- package/dist/error-codes.d.ts +25 -0
- package/dist/error-codes.d.ts.map +1 -0
- package/dist/error-codes.js +31 -0
- package/dist/error-codes.js.map +1 -0
- package/dist/errors.d.ts +4 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +4 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/keystore/index.d.ts +1 -1
- package/dist/keystore/index.d.ts.map +1 -1
- package/dist/result.d.ts +19 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +10 -0
- package/dist/result.js.map +1 -0
- package/dist/transport.d.ts +3 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +17 -2
- package/dist/transport.js.map +1 -1
- package/dist/types.d.ts +13 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +22 -0
- package/dist/types.js.map +1 -1
- package/dist/v2/e2ee/encrypt-p2p.js +1 -1
- package/dist/v2/e2ee/encrypt-p2p.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { certificateSha256Fingerprint } from './crypto.js';
|
|
2
|
+
export declare function parseAgentMdTailSignature(content: string): {
|
|
3
|
+
payload: string;
|
|
4
|
+
fields: Record<string, string> | null;
|
|
5
|
+
parseError?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function normalizeAgentMdPayload(content: string): string;
|
|
8
|
+
export declare function buildAgentMdSignatureBlock(certFingerprint: string, timestamp: number, signatureB64: string): string;
|
|
9
|
+
export declare function extractAgentMdAid(payload: string): string;
|
|
10
|
+
export declare function publicKeyDerB64(certPem: string): string;
|
|
11
|
+
export interface CertMetadata {
|
|
12
|
+
subject: string;
|
|
13
|
+
issuer: string;
|
|
14
|
+
notBefore: Date;
|
|
15
|
+
notAfter: Date;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 从证书 PEM 解析元数据:subject CN、issuer CN、有效期。
|
|
19
|
+
* 对齐 Python(cert_common_name)/ Go(Subject.CommonName / Issuer.CommonName)。
|
|
20
|
+
* 解析失败的字段降级为空串 / epoch Date,不抛异常。
|
|
21
|
+
*/
|
|
22
|
+
export declare function parseCertMetadata(certPem: string): CertMetadata;
|
|
23
|
+
export declare function signBytes(privateKeyPem: string, payload: Uint8Array): Promise<string>;
|
|
24
|
+
export declare function verifySignatureWithCert(certPem: string, signatureB64: string, data: Uint8Array): Promise<boolean>;
|
|
25
|
+
export { certificateSha256Fingerprint as certFingerprint };
|
|
26
|
+
//# sourceMappingURL=cert-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cert-utils.d.ts","sourceRoot":"","sources":["../src/cert-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,4BAA4B,EAO7B,MAAM,aAAa,CAAC;AAMrB,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAyB1I;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI/D;AAED,wBAAgB,0BAA0B,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAQnH;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAazD;AAsBD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAYvD;AAoDD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAsC/D;AAED,wBAAsB,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAG3F;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAOvH;AAED,OAAO,EAAE,4BAA4B,IAAI,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { base64ToUint8, certificateSha256Fingerprint, ecdsaSignDer, ecdsaVerifyDer, importCertPublicKeyEcdsa, importPrivateKeyEcdsa, pemToArrayBuffer, uint8ToBase64, } from './crypto.js';
|
|
2
|
+
const AGENT_MD_SIGNATURE_MARKER = '<!-- AUN-SIGNATURE';
|
|
3
|
+
const AGENT_MD_SIGNATURE_RE = /^<!-- AUN-SIGNATURE\r?\n(?<body>[\s\S]*?)\r?\n-->\s*$/;
|
|
4
|
+
const AGENT_MD_FINGERPRINT_RE = /^sha256:[0-9a-f]{64}$/;
|
|
5
|
+
export function parseAgentMdTailSignature(content) {
|
|
6
|
+
const idx = content.lastIndexOf(AGENT_MD_SIGNATURE_MARKER);
|
|
7
|
+
if (idx < 0)
|
|
8
|
+
return { payload: content, fields: null };
|
|
9
|
+
if (idx > 0 && content[idx - 1] !== '\n' && content[idx - 1] !== '\r')
|
|
10
|
+
return { payload: content, fields: null };
|
|
11
|
+
const tail = content.slice(idx);
|
|
12
|
+
const match = tail.match(AGENT_MD_SIGNATURE_RE);
|
|
13
|
+
if (!match)
|
|
14
|
+
return { payload: content.slice(0, idx), fields: null, parseError: 'malformed signature block' };
|
|
15
|
+
const fields = {};
|
|
16
|
+
for (const rawLine of match.groups?.body?.split(/\r?\n/) ?? []) {
|
|
17
|
+
const line = rawLine.trim();
|
|
18
|
+
if (!line)
|
|
19
|
+
continue;
|
|
20
|
+
const colon = line.indexOf(':');
|
|
21
|
+
if (colon < 0)
|
|
22
|
+
return { payload: content.slice(0, idx), fields: null, parseError: `malformed signature field: ${line}` };
|
|
23
|
+
fields[line.slice(0, colon).trim().toLowerCase()] = line.slice(colon + 1).trim();
|
|
24
|
+
}
|
|
25
|
+
for (const req of ['cert_fingerprint', 'timestamp', 'signature']) {
|
|
26
|
+
if (!fields[req])
|
|
27
|
+
return { payload: content.slice(0, idx), fields: null, parseError: `signature block missing ${req}` };
|
|
28
|
+
}
|
|
29
|
+
if (!AGENT_MD_FINGERPRINT_RE.test(fields.cert_fingerprint.toLowerCase())) {
|
|
30
|
+
return { payload: content.slice(0, idx), fields: null, parseError: 'invalid cert_fingerprint' };
|
|
31
|
+
}
|
|
32
|
+
if (!Number.isFinite(Number(fields.timestamp))) {
|
|
33
|
+
return { payload: content.slice(0, idx), fields: null, parseError: 'invalid timestamp' };
|
|
34
|
+
}
|
|
35
|
+
return { payload: content.slice(0, idx), fields };
|
|
36
|
+
}
|
|
37
|
+
export function normalizeAgentMdPayload(content) {
|
|
38
|
+
let payload = parseAgentMdTailSignature(String(content ?? '')).payload;
|
|
39
|
+
if (payload && !payload.endsWith('\n') && !payload.endsWith('\r'))
|
|
40
|
+
payload += '\n';
|
|
41
|
+
return payload;
|
|
42
|
+
}
|
|
43
|
+
export function buildAgentMdSignatureBlock(certFingerprint, timestamp, signatureB64) {
|
|
44
|
+
return [
|
|
45
|
+
AGENT_MD_SIGNATURE_MARKER,
|
|
46
|
+
`cert_fingerprint: ${certFingerprint}`,
|
|
47
|
+
`timestamp: ${Math.trunc(timestamp)}`,
|
|
48
|
+
`signature: ${signatureB64}`,
|
|
49
|
+
'-->',
|
|
50
|
+
].join('\n');
|
|
51
|
+
}
|
|
52
|
+
export function extractAgentMdAid(payload) {
|
|
53
|
+
const lines = payload.replace(/^\ufeff/, '').split(/\r?\n/);
|
|
54
|
+
if (!lines.length || lines[0].trim() !== '---')
|
|
55
|
+
return '';
|
|
56
|
+
for (const line of lines.slice(1)) {
|
|
57
|
+
const t = line.trim();
|
|
58
|
+
if (t === '---')
|
|
59
|
+
break;
|
|
60
|
+
if (t.startsWith('aid:')) {
|
|
61
|
+
let v = t.slice(4).trim();
|
|
62
|
+
if (v.length >= 2 && v[0] === v[v.length - 1] && (v[0] === '"' || v[0] === "'"))
|
|
63
|
+
v = v.slice(1, -1);
|
|
64
|
+
return v.trim();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return '';
|
|
68
|
+
}
|
|
69
|
+
function readDerLength(data, offset) {
|
|
70
|
+
if (offset >= data.length)
|
|
71
|
+
return null;
|
|
72
|
+
const first = data[offset];
|
|
73
|
+
if (first < 0x80)
|
|
74
|
+
return { value: first, lenBytes: 1 };
|
|
75
|
+
const numBytes = first & 0x7f;
|
|
76
|
+
if (numBytes === 0 || numBytes > 4)
|
|
77
|
+
return null;
|
|
78
|
+
let value = 0;
|
|
79
|
+
for (let i = 0; i < numBytes; i++)
|
|
80
|
+
value = (value << 8) | data[offset + 1 + i];
|
|
81
|
+
return { value, lenBytes: 1 + numBytes };
|
|
82
|
+
}
|
|
83
|
+
function readDerTlv(data, offset) {
|
|
84
|
+
const len = readDerLength(data, offset + 1);
|
|
85
|
+
if (!len)
|
|
86
|
+
return null;
|
|
87
|
+
const valueStart = offset + 1 + len.lenBytes;
|
|
88
|
+
const valueEnd = valueStart + len.value;
|
|
89
|
+
if (valueEnd > data.length)
|
|
90
|
+
return null;
|
|
91
|
+
return { tag: data[offset], valueStart, valueEnd, fullEnd: valueEnd };
|
|
92
|
+
}
|
|
93
|
+
export function publicKeyDerB64(certPem) {
|
|
94
|
+
const certDer = new Uint8Array(pemToArrayBuffer(certPem));
|
|
95
|
+
const cert = readDerTlv(certDer, 0);
|
|
96
|
+
if (!cert || cert.tag !== 0x30)
|
|
97
|
+
return '';
|
|
98
|
+
const tbs = readDerTlv(certDer, cert.valueStart);
|
|
99
|
+
if (!tbs || tbs.tag !== 0x30)
|
|
100
|
+
return '';
|
|
101
|
+
let pos = tbs.valueStart;
|
|
102
|
+
if (certDer[pos] === 0xa0)
|
|
103
|
+
pos = readDerTlv(certDer, pos)?.fullEnd ?? pos;
|
|
104
|
+
for (let i = 0; i < 5; i++)
|
|
105
|
+
pos = readDerTlv(certDer, pos)?.fullEnd ?? pos;
|
|
106
|
+
const spki = readDerTlv(certDer, pos);
|
|
107
|
+
if (!spki || spki.tag !== 0x30)
|
|
108
|
+
return '';
|
|
109
|
+
return uint8ToBase64(certDer.slice(pos, spki.fullEnd));
|
|
110
|
+
}
|
|
111
|
+
// ── 证书元数据解析(subject CN / issuer CN / 有效期)────────────────
|
|
112
|
+
/** 从 Name(SEQUENCE) 范围内提取 CN(OID 2.5.4.3 = 55 04 03)。失败返回 ''。 */
|
|
113
|
+
function extractCommonName(der, nameStart, nameEnd) {
|
|
114
|
+
let pos = nameStart;
|
|
115
|
+
while (pos < nameEnd) {
|
|
116
|
+
const set = readDerTlv(der, pos);
|
|
117
|
+
if (!set || set.tag !== 0x31)
|
|
118
|
+
break;
|
|
119
|
+
let rpos = set.valueStart;
|
|
120
|
+
while (rpos < set.valueEnd) {
|
|
121
|
+
const seq = readDerTlv(der, rpos);
|
|
122
|
+
if (!seq || seq.tag !== 0x30)
|
|
123
|
+
break;
|
|
124
|
+
const oid = readDerTlv(der, seq.valueStart);
|
|
125
|
+
if (oid && oid.tag === 0x06) {
|
|
126
|
+
const isCN = oid.valueEnd - oid.valueStart === 3
|
|
127
|
+
&& der[oid.valueStart] === 0x55 && der[oid.valueStart + 1] === 0x04 && der[oid.valueStart + 2] === 0x03;
|
|
128
|
+
if (isCN) {
|
|
129
|
+
const val = readDerTlv(der, oid.fullEnd);
|
|
130
|
+
if (val)
|
|
131
|
+
return new TextDecoder().decode(der.slice(val.valueStart, val.valueEnd));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
rpos = seq.fullEnd;
|
|
135
|
+
}
|
|
136
|
+
pos = set.fullEnd;
|
|
137
|
+
}
|
|
138
|
+
return '';
|
|
139
|
+
}
|
|
140
|
+
/** 解析 UTCTime(0x17) / GeneralizedTime(0x18) 为 Date。失败返回 null。 */
|
|
141
|
+
function parseDerTime(der, offset) {
|
|
142
|
+
const tlv = readDerTlv(der, offset);
|
|
143
|
+
if (!tlv)
|
|
144
|
+
return null;
|
|
145
|
+
const raw = new TextDecoder().decode(der.slice(tlv.valueStart, tlv.valueEnd));
|
|
146
|
+
if (tlv.tag === 0x17) {
|
|
147
|
+
// UTCTime: YYMMDDHHMMSSZ
|
|
148
|
+
const yy = parseInt(raw.slice(0, 2), 10);
|
|
149
|
+
const year = yy >= 50 ? 1900 + yy : 2000 + yy;
|
|
150
|
+
const ms = Date.UTC(year, parseInt(raw.slice(2, 4), 10) - 1, parseInt(raw.slice(4, 6), 10), parseInt(raw.slice(6, 8), 10), parseInt(raw.slice(8, 10), 10), parseInt(raw.slice(10, 12), 10));
|
|
151
|
+
return Number.isNaN(ms) ? null : new Date(ms);
|
|
152
|
+
}
|
|
153
|
+
if (tlv.tag === 0x18) {
|
|
154
|
+
// GeneralizedTime: YYYYMMDDHHMMSSZ
|
|
155
|
+
const ms = Date.UTC(parseInt(raw.slice(0, 4), 10), parseInt(raw.slice(4, 6), 10) - 1, parseInt(raw.slice(6, 8), 10), parseInt(raw.slice(8, 10), 10), parseInt(raw.slice(10, 12), 10), parseInt(raw.slice(12, 14), 10));
|
|
156
|
+
return Number.isNaN(ms) ? null : new Date(ms);
|
|
157
|
+
}
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* 从证书 PEM 解析元数据:subject CN、issuer CN、有效期。
|
|
162
|
+
* 对齐 Python(cert_common_name)/ Go(Subject.CommonName / Issuer.CommonName)。
|
|
163
|
+
* 解析失败的字段降级为空串 / epoch Date,不抛异常。
|
|
164
|
+
*/
|
|
165
|
+
export function parseCertMetadata(certPem) {
|
|
166
|
+
const fallback = { subject: '', issuer: '', notBefore: new Date(0), notAfter: new Date(0) };
|
|
167
|
+
try {
|
|
168
|
+
const der = new Uint8Array(pemToArrayBuffer(certPem));
|
|
169
|
+
const cert = readDerTlv(der, 0);
|
|
170
|
+
if (!cert || cert.tag !== 0x30)
|
|
171
|
+
return fallback;
|
|
172
|
+
const tbs = readDerTlv(der, cert.valueStart);
|
|
173
|
+
if (!tbs || tbs.tag !== 0x30)
|
|
174
|
+
return fallback;
|
|
175
|
+
let pos = tbs.valueStart;
|
|
176
|
+
if (der[pos] === 0xa0)
|
|
177
|
+
pos = readDerTlv(der, pos)?.fullEnd ?? pos; // version
|
|
178
|
+
pos = readDerTlv(der, pos)?.fullEnd ?? pos; // serialNumber
|
|
179
|
+
pos = readDerTlv(der, pos)?.fullEnd ?? pos; // signature AlgId
|
|
180
|
+
const issuer = readDerTlv(der, pos);
|
|
181
|
+
if (!issuer || issuer.tag !== 0x30)
|
|
182
|
+
return fallback;
|
|
183
|
+
const issuerCN = extractCommonName(der, issuer.valueStart, issuer.valueEnd);
|
|
184
|
+
pos = issuer.fullEnd;
|
|
185
|
+
const validity = readDerTlv(der, pos);
|
|
186
|
+
if (!validity || validity.tag !== 0x30)
|
|
187
|
+
return fallback;
|
|
188
|
+
const notBefore = parseDerTime(der, validity.valueStart);
|
|
189
|
+
const nb = readDerTlv(der, validity.valueStart);
|
|
190
|
+
const notAfter = nb ? parseDerTime(der, nb.fullEnd) : null;
|
|
191
|
+
pos = validity.fullEnd;
|
|
192
|
+
const subject = readDerTlv(der, pos);
|
|
193
|
+
if (!subject || subject.tag !== 0x30)
|
|
194
|
+
return fallback;
|
|
195
|
+
const subjectCN = extractCommonName(der, subject.valueStart, subject.valueEnd);
|
|
196
|
+
return {
|
|
197
|
+
subject: subjectCN,
|
|
198
|
+
issuer: issuerCN,
|
|
199
|
+
notBefore: notBefore ?? new Date(0),
|
|
200
|
+
notAfter: notAfter ?? new Date(0),
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
return fallback;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
export async function signBytes(privateKeyPem, payload) {
|
|
208
|
+
const key = await importPrivateKeyEcdsa(privateKeyPem);
|
|
209
|
+
return uint8ToBase64(await ecdsaSignDer(key, payload));
|
|
210
|
+
}
|
|
211
|
+
export async function verifySignatureWithCert(certPem, signatureB64, data) {
|
|
212
|
+
try {
|
|
213
|
+
const key = await importCertPublicKeyEcdsa(certPem);
|
|
214
|
+
return await ecdsaVerifyDer(key, base64ToUint8(signatureB64), data);
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
export { certificateSha256Fingerprint as certFingerprint };
|
|
221
|
+
//# sourceMappingURL=cert-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cert-utils.js","sourceRoot":"","sources":["../src/cert-utils.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
import { type AUNConfig } from './config.js';
|
|
2
2
|
import { type EventHandler, type Subscription } from './events.js';
|
|
3
3
|
import { GatewayDiscovery } from './discovery.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import { ConnectionState, type RpcParams, type RpcResult } from './types.js';
|
|
5
|
+
import { AID } from './aid.js';
|
|
6
|
+
export interface AUNClientOptions extends Record<string, unknown> {
|
|
7
|
+
aun_path?: string;
|
|
8
|
+
aunPath?: string;
|
|
9
|
+
root_ca_pem?: string;
|
|
10
|
+
rootCaPem?: string;
|
|
11
|
+
root_ca_path?: string;
|
|
12
|
+
seed_password?: string;
|
|
13
|
+
seedPassword?: string;
|
|
14
|
+
encryption_seed?: string;
|
|
15
|
+
encryptionSeed?: string;
|
|
16
|
+
discovery_port?: number;
|
|
17
|
+
discoveryPort?: number;
|
|
18
|
+
verify_ssl?: boolean;
|
|
19
|
+
verifySSL?: boolean;
|
|
20
|
+
verifySsl?: boolean;
|
|
21
|
+
require_forward_secrecy?: boolean;
|
|
22
|
+
requireForwardSecrecy?: boolean;
|
|
23
|
+
replay_window_seconds?: number;
|
|
24
|
+
replayWindowSeconds?: number;
|
|
25
|
+
debug?: boolean;
|
|
26
|
+
protected_headers?: Record<string, unknown> | null;
|
|
27
|
+
aid?: never;
|
|
28
|
+
}
|
|
8
29
|
/**
|
|
9
30
|
* AUN Core SDK 客户端 — 浏览器版本。
|
|
10
31
|
*
|
|
@@ -25,6 +46,8 @@ export declare class AUNClient {
|
|
|
25
46
|
private _aid;
|
|
26
47
|
private _identity;
|
|
27
48
|
private _state;
|
|
49
|
+
private _currentAid;
|
|
50
|
+
private _instanceProtectedHeaders;
|
|
28
51
|
private _gatewayUrl;
|
|
29
52
|
private _deviceId;
|
|
30
53
|
private _slotId;
|
|
@@ -39,12 +62,6 @@ export declare class AUNClient {
|
|
|
39
62
|
private _keystore;
|
|
40
63
|
private _auth;
|
|
41
64
|
private _transport;
|
|
42
|
-
/** 认证命名空间 */
|
|
43
|
-
readonly auth: AuthNamespace;
|
|
44
|
-
/** AID 托管命名空间 */
|
|
45
|
-
readonly custody: CustodyNamespace;
|
|
46
|
-
/** 元数据命名空间(心跳、状态、信任根管理) */
|
|
47
|
-
readonly meta: MetaNamespace;
|
|
48
65
|
private _certCache;
|
|
49
66
|
private _heartbeatTimer;
|
|
50
67
|
private _heartbeatCount;
|
|
@@ -82,7 +99,7 @@ export declare class AUNClient {
|
|
|
82
99
|
private _localAgentMdEtag;
|
|
83
100
|
/** gateway 在 RPC envelope._meta.agent_md_etag 注入的服务端 etag;纯观察,无下游依赖。 */
|
|
84
101
|
private _remoteAgentMdEtag;
|
|
85
|
-
/** 浏览器侧
|
|
102
|
+
/** 浏览器侧 AIDs 逻辑根目录,正文映射到 IndexedDB 里的 {aid}/agent.md。 */
|
|
86
103
|
private _agentMdPath;
|
|
87
104
|
private _agentMdCache;
|
|
88
105
|
private _agentMdFetchInflight;
|
|
@@ -105,6 +122,13 @@ export declare class AUNClient {
|
|
|
105
122
|
private _reconnectActive;
|
|
106
123
|
private _reconnectAbort;
|
|
107
124
|
private _serverKicked;
|
|
125
|
+
private _nextRetryAt;
|
|
126
|
+
private _retryAttempt;
|
|
127
|
+
private _retryMaxAttempts;
|
|
128
|
+
private _lastError;
|
|
129
|
+
private _lastErrorCode;
|
|
130
|
+
/** 对端 AID 缓存(aid string → AID 对象) */
|
|
131
|
+
private _peerCache;
|
|
108
132
|
/**
|
|
109
133
|
* 缓存最近一次服务端 gateway.disconnect 信息(含 code/reason/detail),
|
|
110
134
|
* 让后续 connection.state(terminal_failed) 也能携带 detail(如配额超限信息)。
|
|
@@ -117,11 +141,16 @@ export declare class AUNClient {
|
|
|
117
141
|
private _logKeystore;
|
|
118
142
|
private _logDiscovery;
|
|
119
143
|
private _logEvents;
|
|
120
|
-
constructor(
|
|
144
|
+
constructor(options?: AUNClientOptions | null);
|
|
145
|
+
constructor(aid: AID, options?: AUNClientOptions | null);
|
|
121
146
|
get aid(): string | null;
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
147
|
+
private _setAgentMdRoot;
|
|
148
|
+
private _resolveAgentMdUrl;
|
|
149
|
+
private _ensureAgentMdUploadToken;
|
|
150
|
+
private _uploadAgentMd;
|
|
151
|
+
private _downloadAgentMd;
|
|
152
|
+
private _headAgentMd;
|
|
153
|
+
private _verifyAgentMd;
|
|
125
154
|
/**
|
|
126
155
|
* 浏览器版本 publishAgentMd。默认从 {agentMdPath}/{self_aid}/agent.md 的等价 IndexedDB 正文读取,
|
|
127
156
|
* 然后签名、上传,并刷新 agentmd.json 元数据。
|
|
@@ -133,12 +162,7 @@ export declare class AUNClient {
|
|
|
133
162
|
* 浏览器版本 fetchAgentMd。aid 缺省时取自身;下载后的正文固定写入
|
|
134
163
|
* {agentMdPath}/{aid}/agent.md 的等价 IndexedDB 正文,agentmd.json 只保存元数据。
|
|
135
164
|
*/
|
|
136
|
-
|
|
137
|
-
aid: string;
|
|
138
|
-
content: string;
|
|
139
|
-
signature: Record<string, unknown>;
|
|
140
|
-
in_sync: boolean | null;
|
|
141
|
-
}>;
|
|
165
|
+
private _fetchAgentMdCache;
|
|
142
166
|
getLocalAgentMdEtag(): string;
|
|
143
167
|
getRemoteAgentMdEtag(): string;
|
|
144
168
|
private _agentMdContentEtag;
|
|
@@ -167,31 +191,50 @@ export declare class AUNClient {
|
|
|
167
191
|
private _observeAgentMdMeta;
|
|
168
192
|
private _observeAgentMdEtag;
|
|
169
193
|
private _observeAgentMdFromEnvelope;
|
|
170
|
-
|
|
194
|
+
private _checkAgentMdCache;
|
|
171
195
|
/** transport 的 meta observer:吸收 gateway 注入的 _meta 字段。失败不影响业务。 */
|
|
172
196
|
private _observeRpcMeta;
|
|
173
197
|
get state(): ConnectionState;
|
|
198
|
+
private _publicState;
|
|
199
|
+
get currentAid(): AID | null;
|
|
200
|
+
get hasIdentity(): boolean;
|
|
201
|
+
get canSign(): boolean;
|
|
202
|
+
get canConnect(): boolean;
|
|
203
|
+
get canSend(): boolean;
|
|
204
|
+
get isReady(): boolean;
|
|
205
|
+
get isOnline(): boolean;
|
|
206
|
+
get isClosed(): boolean;
|
|
207
|
+
get aunPath(): string | null;
|
|
208
|
+
/** 下次重连时间(仅在 retry_backoff 状态时非 null,对齐 Python next_retry_at) */
|
|
209
|
+
get nextRetryAt(): Date | null;
|
|
210
|
+
/** 距下次重连的剩余秒数(仅在 retry_backoff 状态时非 null,对齐 Python next_retry_in_seconds) */
|
|
211
|
+
get nextRetryInSeconds(): number | null;
|
|
212
|
+
/** 当前重连尝试次数(对齐 Python retry_attempt) */
|
|
213
|
+
get retryAttempt(): number;
|
|
214
|
+
/** 最大重连次数(0 = 无限,对齐 Python retry_max_attempts) */
|
|
215
|
+
get retryMaxAttempts(): number;
|
|
216
|
+
/** 最近一次错误(对齐 Python last_error) */
|
|
217
|
+
get lastError(): Error | null;
|
|
218
|
+
/** 最近一次错误码(对齐 Python last_error_code) */
|
|
219
|
+
get lastErrorCode(): string | null;
|
|
220
|
+
loadIdentity(aid: AID): void;
|
|
221
|
+
setProtectedHeaders(headers: Record<string, unknown> | null): void;
|
|
222
|
+
getProtectedHeaders(): Record<string, string> | null;
|
|
223
|
+
cachePeer(aid: AID): AID;
|
|
224
|
+
getPeer(aid: string): AID | null;
|
|
225
|
+
lookupPeer(aid: string): Promise<AID>;
|
|
226
|
+
peers(): AID[];
|
|
174
227
|
get gatewayUrl(): string | null;
|
|
175
228
|
set gatewayUrl(url: string | null);
|
|
176
229
|
get discovery(): GatewayDiscovery;
|
|
177
230
|
/** 最近一次 health check 结果,null 表示尚未检查 */
|
|
178
231
|
get gatewayHealth(): boolean | null;
|
|
179
|
-
/**
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
|
|
183
|
-
*
|
|
184
|
-
* @param auth - 认证参数,必须包含 access_token 和 gateway
|
|
185
|
-
* @param options - 可选的会话选项(auto_reconnect, heartbeat_interval 等)
|
|
186
|
-
*/
|
|
187
|
-
connect(auth: RpcParams, options?: RpcParams): Promise<void>;
|
|
232
|
+
/** 仅认证当前身份,获取/刷新 token,但不建立长连接。 */
|
|
233
|
+
authenticate(options?: RpcParams): Promise<Record<string, unknown>>;
|
|
234
|
+
/** 连接到 Gateway;身份来自构造函数或 loadIdentity(aid),认证由 SDK 内部自动完成。 */
|
|
235
|
+
connect(options?: RpcParams): Promise<void>;
|
|
188
236
|
/** 断开连接但保留本地状态,可再次 connect */
|
|
189
237
|
disconnect(): Promise<void>;
|
|
190
|
-
/** 列出本地所有已存储的身份摘要(仅返回有有效私钥的 AID) */
|
|
191
|
-
listIdentities(): Promise<Array<{
|
|
192
|
-
aid: string;
|
|
193
|
-
metadata?: MetadataRecord;
|
|
194
|
-
}>>;
|
|
195
238
|
/** 关闭连接 */
|
|
196
239
|
close(): Promise<void>;
|
|
197
240
|
/**
|
|
@@ -207,9 +250,7 @@ export declare class AUNClient {
|
|
|
207
250
|
* 拆分出来以便 pull gate 包裹整个操作。
|
|
208
251
|
*/
|
|
209
252
|
private _callImplInner;
|
|
210
|
-
|
|
211
|
-
status(params?: RpcParams): Promise<RpcResult>;
|
|
212
|
-
trustRoots(params?: RpcParams): Promise<RpcResult>;
|
|
253
|
+
private _callRawV2Rpc;
|
|
213
254
|
/**
|
|
214
255
|
* 订阅事件。
|
|
215
256
|
*
|
|
@@ -234,6 +275,9 @@ export declare class AUNClient {
|
|
|
234
275
|
* 不带 payload 的事件(通知):自动 pull 最新消息。
|
|
235
276
|
*/
|
|
236
277
|
private _processAndPublishGroupMessage;
|
|
278
|
+
private _decryptEncryptedPushPayload;
|
|
279
|
+
private _publishEncryptedPushAsUndecryptable;
|
|
280
|
+
private _publishEncryptedPushMessage;
|
|
237
281
|
/** 收到不带 payload 的 group.message_created 通知后,自动 pull 最新消息 */
|
|
238
282
|
private _autoPullGroupMessages;
|
|
239
283
|
/** 后台补齐群消息空洞 */
|
|
@@ -306,6 +350,7 @@ export declare class AUNClient {
|
|
|
306
350
|
private _signClientOperation;
|
|
307
351
|
private _connectOnce;
|
|
308
352
|
private _resolveGateway;
|
|
353
|
+
private _resolveGatewayForAid;
|
|
309
354
|
private _resolveGateways;
|
|
310
355
|
private _syncIdentityAfterConnect;
|
|
311
356
|
private _normalizeConnectParams;
|
|
@@ -338,11 +383,11 @@ export declare class AUNClient {
|
|
|
338
383
|
* 创建命名群:本地生成 P-256 keypair,调用 group.create 传入 public_key,
|
|
339
384
|
* 服务端签发群 AID 证书,返回后将证书和私钥存入 keystore。
|
|
340
385
|
*/
|
|
341
|
-
createNamedGroup
|
|
386
|
+
private createNamedGroup;
|
|
342
387
|
/**
|
|
343
388
|
* 为已有普通群绑定命名 AID(升级为命名群)。
|
|
344
389
|
*/
|
|
345
|
-
bindGroupAid
|
|
390
|
+
private bindGroupAid;
|
|
346
391
|
/** 判断是否应重试重连 */
|
|
347
392
|
private _shouldRetryReconnect;
|
|
348
393
|
/** 从 keystore 恢复 SeqTracker 状态(真正可 await,确保在 transport.connect 前完成) */
|
|
@@ -365,7 +410,7 @@ export declare class AUNClient {
|
|
|
365
410
|
*
|
|
366
411
|
* connect 成功后自动调用,可幂等手动调用。
|
|
367
412
|
*/
|
|
368
|
-
|
|
413
|
+
private _initV2Session;
|
|
369
414
|
private _v2TrustedIKPubDer;
|
|
370
415
|
private _v2SPKTimestampText;
|
|
371
416
|
private _v2VerifySPKDevice;
|
|
@@ -385,25 +430,20 @@ export declare class AUNClient {
|
|
|
385
430
|
* @param opts 可选 messageId / timestamp(与 Python 行为一致)
|
|
386
431
|
* @returns 服务端响应
|
|
387
432
|
*/
|
|
388
|
-
|
|
389
|
-
messageId?: string;
|
|
390
|
-
timestamp?: number;
|
|
391
|
-
protectedHeaders?: Record<string, unknown>;
|
|
392
|
-
context?: Record<string, unknown>;
|
|
393
|
-
}): Promise<unknown>;
|
|
433
|
+
private _sendV2;
|
|
394
434
|
/**
|
|
395
435
|
* 拉取并解密 V2 P2P 消息。
|
|
396
436
|
*
|
|
397
437
|
* @param afterSeq 从此 seq 之后开始拉取(0/省略 = 从当前 contiguous 开始)
|
|
398
438
|
* @param limit 最多拉取条数
|
|
399
439
|
*/
|
|
400
|
-
|
|
440
|
+
private _pullV2;
|
|
401
441
|
/**
|
|
402
442
|
* 确认 V2 消息已消费 + 自检销毁旧 SPK(PFS)。
|
|
403
443
|
*
|
|
404
444
|
* @param upToSeq 确认到此 seq;省略则用当前 contiguous
|
|
405
445
|
*/
|
|
406
|
-
|
|
446
|
+
private _ackV2;
|
|
407
447
|
/** 解密单条 V2 消息(与 Python `_decrypt_v2_message` 对齐)。缺 sender IK 时先入 pending,后台补齐后重试。 */
|
|
408
448
|
private _decryptV2Message;
|
|
409
449
|
/**
|
|
@@ -414,12 +454,7 @@ export declare class AUNClient {
|
|
|
414
454
|
* @param opts 可选 messageId / timestamp
|
|
415
455
|
* @returns 服务端响应
|
|
416
456
|
*/
|
|
417
|
-
|
|
418
|
-
messageId?: string;
|
|
419
|
-
timestamp?: number;
|
|
420
|
-
protectedHeaders?: Record<string, unknown>;
|
|
421
|
-
context?: Record<string, unknown>;
|
|
422
|
-
}): Promise<unknown>;
|
|
457
|
+
private _sendGroupV2;
|
|
423
458
|
private _pullGroupV2Internal;
|
|
424
459
|
/**
|
|
425
460
|
* 拉取并解密 V2 Group 消息。
|
|
@@ -428,14 +463,14 @@ export declare class AUNClient {
|
|
|
428
463
|
* @param afterSeq 从此 seq 之后开始拉取(0/省略 = 从当前 contiguous 开始)
|
|
429
464
|
* @param limit 最多拉取条数
|
|
430
465
|
*/
|
|
431
|
-
|
|
466
|
+
private _pullGroupV2;
|
|
432
467
|
/**
|
|
433
468
|
* 确认 V2 群消息已消费。
|
|
434
469
|
*
|
|
435
470
|
* @param groupId 群 ID
|
|
436
471
|
* @param upToSeq 确认到此 seq;省略则用当前 contiguous
|
|
437
472
|
*/
|
|
438
|
-
|
|
473
|
+
private _ackGroupV2;
|
|
439
474
|
/**
|
|
440
475
|
* V2 P2P 多设备 wrap envelope 构造(不发送)。
|
|
441
476
|
* thought.put 复用此函数构造与 message.send 相同的 V2 envelope。
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAOA,OAAO,EAAkD,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7F,OAAO,EAAsC,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|