@agentunion/fastaun-browser 0.3.6 → 0.4.1
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 +24 -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 +1697 -0
- package/_packed_docs/CHANGELOG.md +24 -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 +168 -1383
- 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/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 +125 -0
- package/dist/aid-store.d.ts.map +1 -0
- package/dist/aid-store.js +841 -0
- package/dist/aid-store.js.map +1 -0
- package/dist/aid.d.ts +56 -0
- package/dist/aid.d.ts.map +1 -0
- package/dist/aid.js +112 -0
- package/dist/aid.js.map +1 -0
- package/dist/auth.js +1 -1
- package/dist/auth.js.map +1 -1
- package/dist/bundle.js +1630 -1901
- 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 +89 -60
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +568 -160
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +0 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -2
- package/dist/config.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 +16 -1
- 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 +2 -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,32 @@
|
|
|
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 ConnectionOptions {
|
|
7
|
+
auto_reconnect?: boolean;
|
|
8
|
+
connect_timeout?: number;
|
|
9
|
+
retry_initial_delay?: number;
|
|
10
|
+
retry_max_delay?: number;
|
|
11
|
+
retry_max_attempts?: number;
|
|
12
|
+
heartbeat_interval?: number;
|
|
13
|
+
call_timeout?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface AUNClientOptions extends Record<string, unknown> {
|
|
16
|
+
root_ca_pem?: string;
|
|
17
|
+
rootCaPem?: string;
|
|
18
|
+
root_ca_path?: string;
|
|
19
|
+
verify_ssl?: boolean;
|
|
20
|
+
verifySSL?: boolean;
|
|
21
|
+
verifySsl?: boolean;
|
|
22
|
+
require_forward_secrecy?: boolean;
|
|
23
|
+
requireForwardSecrecy?: boolean;
|
|
24
|
+
replay_window_seconds?: number;
|
|
25
|
+
replayWindowSeconds?: number;
|
|
26
|
+
debug?: boolean;
|
|
27
|
+
protected_headers?: Record<string, unknown> | null;
|
|
28
|
+
aid?: never;
|
|
29
|
+
}
|
|
8
30
|
/**
|
|
9
31
|
* AUN Core SDK 客户端 — 浏览器版本。
|
|
10
32
|
*
|
|
@@ -25,6 +47,8 @@ export declare class AUNClient {
|
|
|
25
47
|
private _aid;
|
|
26
48
|
private _identity;
|
|
27
49
|
private _state;
|
|
50
|
+
private _currentAid;
|
|
51
|
+
private _instanceProtectedHeaders;
|
|
28
52
|
private _gatewayUrl;
|
|
29
53
|
private _deviceId;
|
|
30
54
|
private _slotId;
|
|
@@ -39,12 +63,6 @@ export declare class AUNClient {
|
|
|
39
63
|
private _keystore;
|
|
40
64
|
private _auth;
|
|
41
65
|
private _transport;
|
|
42
|
-
/** 认证命名空间 */
|
|
43
|
-
readonly auth: AuthNamespace;
|
|
44
|
-
/** AID 托管命名空间 */
|
|
45
|
-
readonly custody: CustodyNamespace;
|
|
46
|
-
/** 元数据命名空间(心跳、状态、信任根管理) */
|
|
47
|
-
readonly meta: MetaNamespace;
|
|
48
66
|
private _certCache;
|
|
49
67
|
private _heartbeatTimer;
|
|
50
68
|
private _heartbeatCount;
|
|
@@ -82,7 +100,7 @@ export declare class AUNClient {
|
|
|
82
100
|
private _localAgentMdEtag;
|
|
83
101
|
/** gateway 在 RPC envelope._meta.agent_md_etag 注入的服务端 etag;纯观察,无下游依赖。 */
|
|
84
102
|
private _remoteAgentMdEtag;
|
|
85
|
-
/** 浏览器侧
|
|
103
|
+
/** 浏览器侧 AIDs 逻辑根目录,正文映射到 IndexedDB 里的 {aid}/agent.md。 */
|
|
86
104
|
private _agentMdPath;
|
|
87
105
|
private _agentMdCache;
|
|
88
106
|
private _agentMdFetchInflight;
|
|
@@ -105,6 +123,13 @@ export declare class AUNClient {
|
|
|
105
123
|
private _reconnectActive;
|
|
106
124
|
private _reconnectAbort;
|
|
107
125
|
private _serverKicked;
|
|
126
|
+
private _nextRetryAt;
|
|
127
|
+
private _retryAttempt;
|
|
128
|
+
private _retryMaxAttempts;
|
|
129
|
+
private _lastError;
|
|
130
|
+
private _lastErrorCode;
|
|
131
|
+
/** 对端 AID 缓存(aid string → AID 对象) */
|
|
132
|
+
private _peerCache;
|
|
108
133
|
/**
|
|
109
134
|
* 缓存最近一次服务端 gateway.disconnect 信息(含 code/reason/detail),
|
|
110
135
|
* 让后续 connection.state(terminal_failed) 也能携带 detail(如配额超限信息)。
|
|
@@ -117,11 +142,15 @@ export declare class AUNClient {
|
|
|
117
142
|
private _logKeystore;
|
|
118
143
|
private _logDiscovery;
|
|
119
144
|
private _logEvents;
|
|
120
|
-
constructor(
|
|
145
|
+
constructor(aid?: AID);
|
|
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(opts?: ConnectionOptions): 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
|
/**
|
|
@@ -208,9 +251,6 @@ export declare class AUNClient {
|
|
|
208
251
|
*/
|
|
209
252
|
private _callImplInner;
|
|
210
253
|
private _callRawV2Rpc;
|
|
211
|
-
ping(params?: RpcParams): Promise<RpcResult>;
|
|
212
|
-
status(params?: RpcParams): Promise<RpcResult>;
|
|
213
|
-
trustRoots(params?: RpcParams): Promise<RpcResult>;
|
|
214
254
|
/**
|
|
215
255
|
* 订阅事件。
|
|
216
256
|
*
|
|
@@ -310,6 +350,7 @@ export declare class AUNClient {
|
|
|
310
350
|
private _signClientOperation;
|
|
311
351
|
private _connectOnce;
|
|
312
352
|
private _resolveGateway;
|
|
353
|
+
private _resolveGatewayForAid;
|
|
313
354
|
private _resolveGateways;
|
|
314
355
|
private _syncIdentityAfterConnect;
|
|
315
356
|
private _normalizeConnectParams;
|
|
@@ -342,11 +383,11 @@ export declare class AUNClient {
|
|
|
342
383
|
* 创建命名群:本地生成 P-256 keypair,调用 group.create 传入 public_key,
|
|
343
384
|
* 服务端签发群 AID 证书,返回后将证书和私钥存入 keystore。
|
|
344
385
|
*/
|
|
345
|
-
createNamedGroup
|
|
386
|
+
private createNamedGroup;
|
|
346
387
|
/**
|
|
347
388
|
* 为已有普通群绑定命名 AID(升级为命名群)。
|
|
348
389
|
*/
|
|
349
|
-
bindGroupAid
|
|
390
|
+
private bindGroupAid;
|
|
350
391
|
/** 判断是否应重试重连 */
|
|
351
392
|
private _shouldRetryReconnect;
|
|
352
393
|
/** 从 keystore 恢复 SeqTracker 状态(真正可 await,确保在 transport.connect 前完成) */
|
|
@@ -369,7 +410,7 @@ export declare class AUNClient {
|
|
|
369
410
|
*
|
|
370
411
|
* connect 成功后自动调用,可幂等手动调用。
|
|
371
412
|
*/
|
|
372
|
-
|
|
413
|
+
private _initV2Session;
|
|
373
414
|
private _v2TrustedIKPubDer;
|
|
374
415
|
private _v2SPKTimestampText;
|
|
375
416
|
private _v2VerifySPKDevice;
|
|
@@ -389,27 +430,20 @@ export declare class AUNClient {
|
|
|
389
430
|
* @param opts 可选 messageId / timestamp(与 Python 行为一致)
|
|
390
431
|
* @returns 服务端响应
|
|
391
432
|
*/
|
|
392
|
-
|
|
393
|
-
messageId?: string;
|
|
394
|
-
timestamp?: number;
|
|
395
|
-
protectedHeaders?: Record<string, unknown>;
|
|
396
|
-
context?: Record<string, unknown>;
|
|
397
|
-
}): Promise<unknown>;
|
|
433
|
+
private _sendV2;
|
|
398
434
|
/**
|
|
399
435
|
* 拉取并解密 V2 P2P 消息。
|
|
400
436
|
*
|
|
401
437
|
* @param afterSeq 从此 seq 之后开始拉取(0/省略 = 从当前 contiguous 开始)
|
|
402
438
|
* @param limit 最多拉取条数
|
|
403
439
|
*/
|
|
404
|
-
|
|
405
|
-
force?: boolean;
|
|
406
|
-
}): Promise<unknown[]>;
|
|
440
|
+
private _pullV2;
|
|
407
441
|
/**
|
|
408
442
|
* 确认 V2 消息已消费 + 自检销毁旧 SPK(PFS)。
|
|
409
443
|
*
|
|
410
444
|
* @param upToSeq 确认到此 seq;省略则用当前 contiguous
|
|
411
445
|
*/
|
|
412
|
-
|
|
446
|
+
private _ackV2;
|
|
413
447
|
/** 解密单条 V2 消息(与 Python `_decrypt_v2_message` 对齐)。缺 sender IK 时先入 pending,后台补齐后重试。 */
|
|
414
448
|
private _decryptV2Message;
|
|
415
449
|
/**
|
|
@@ -420,12 +454,7 @@ export declare class AUNClient {
|
|
|
420
454
|
* @param opts 可选 messageId / timestamp
|
|
421
455
|
* @returns 服务端响应
|
|
422
456
|
*/
|
|
423
|
-
|
|
424
|
-
messageId?: string;
|
|
425
|
-
timestamp?: number;
|
|
426
|
-
protectedHeaders?: Record<string, unknown>;
|
|
427
|
-
context?: Record<string, unknown>;
|
|
428
|
-
}): Promise<unknown>;
|
|
457
|
+
private _sendGroupV2;
|
|
429
458
|
private _pullGroupV2Internal;
|
|
430
459
|
/**
|
|
431
460
|
* 拉取并解密 V2 Group 消息。
|
|
@@ -434,14 +463,14 @@ export declare class AUNClient {
|
|
|
434
463
|
* @param afterSeq 从此 seq 之后开始拉取(0/省略 = 从当前 contiguous 开始)
|
|
435
464
|
* @param limit 最多拉取条数
|
|
436
465
|
*/
|
|
437
|
-
|
|
466
|
+
private _pullGroupV2;
|
|
438
467
|
/**
|
|
439
468
|
* 确认 V2 群消息已消费。
|
|
440
469
|
*
|
|
441
470
|
* @param groupId 群 ID
|
|
442
471
|
* @param upToSeq 确认到此 seq;省略则用当前 contiguous
|
|
443
472
|
*/
|
|
444
|
-
|
|
473
|
+
private _ackGroupV2;
|
|
445
474
|
/**
|
|
446
475
|
* V2 P2P 多设备 wrap envelope 构造(不发送)。
|
|
447
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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"}
|