@agentunion/fastaun-browser 0.3.4 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +127 -111
- package/_packed_docs/CHANGELOG.md +127 -111
- package/_packed_docs/INDEX.md +16 -16
- package/_packed_docs/KITE_DOCS_GUIDE.md +7 -7
- 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 -0
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +469 -454
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +1494 -1410
- package/_packed_docs/sdk/09-storage-rpc-manual.md +89 -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 +240 -24
- package/dist/client.d.ts +7 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +220 -19
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/namespaces/auth.d.ts +6 -0
- package/dist/namespaces/auth.d.ts.map +1 -1
- package/dist/namespaces/auth.js +25 -0
- package/dist/namespaces/auth.js.map +1 -1
- package/dist/transport.js +1 -1
- package/dist/transport.js.map +1 -1
- package/dist/v2/e2ee/encrypt-p2p.js +1 -1
- package/package.json +1 -1
package/dist/bundle.js
CHANGED
|
@@ -1185,7 +1185,8 @@ var DIAG_PARAM_FIELDS = [
|
|
|
1185
1185
|
"request_id",
|
|
1186
1186
|
"owner_aid",
|
|
1187
1187
|
"rotated_by",
|
|
1188
|
-
"action"
|
|
1188
|
+
"action",
|
|
1189
|
+
"force"
|
|
1189
1190
|
];
|
|
1190
1191
|
var DIAG_RESULT_FIELDS = [
|
|
1191
1192
|
...DIAG_PARAM_FIELDS,
|
|
@@ -1702,7 +1703,7 @@ var _noopLog4 = { error: () => {
|
|
|
1702
1703
|
}, debug: () => {
|
|
1703
1704
|
} };
|
|
1704
1705
|
var AUN_SDK_LANG = "javascript";
|
|
1705
|
-
var AUN_SDK_VERSION = "0.3.
|
|
1706
|
+
var AUN_SDK_VERSION = "0.3.6";
|
|
1706
1707
|
function splitPemBundle(bundle) {
|
|
1707
1708
|
const marker = "-----END CERTIFICATE-----";
|
|
1708
1709
|
const certs = [];
|
|
@@ -2013,7 +2014,13 @@ var _AuthFlow = class _AuthFlow {
|
|
|
2013
2014
|
const cert = await this._keystore.loadCert(identity.aid);
|
|
2014
2015
|
if (cert) identity.cert = cert;
|
|
2015
2016
|
const instanceState = await this._loadInstanceState(identity.aid);
|
|
2016
|
-
if (instanceState)
|
|
2017
|
+
if (instanceState) {
|
|
2018
|
+
for (const key of _AuthFlow._INSTANCE_STATE_FIELDS) {
|
|
2019
|
+
if (key in instanceState) {
|
|
2020
|
+
identity[key] = instanceState[key];
|
|
2021
|
+
}
|
|
2022
|
+
}
|
|
2023
|
+
}
|
|
2017
2024
|
this._log.debug(`loadIdentity exit: elapsed=${Date.now() - tStart}ms aid=${identity.aid} has_cert=${!!identity.cert}`);
|
|
2018
2025
|
return identity;
|
|
2019
2026
|
} catch (err) {
|
|
@@ -2532,7 +2539,25 @@ var _AuthFlow = class _AuthFlow {
|
|
|
2532
2539
|
});
|
|
2533
2540
|
return { cert: response.cert };
|
|
2534
2541
|
}
|
|
2535
|
-
/**
|
|
2542
|
+
/**
|
|
2543
|
+
* 从服务端下载指定 AID 的证书(公开 API)。
|
|
2544
|
+
*
|
|
2545
|
+
* @param gatewayUrl - Gateway WebSocket URL
|
|
2546
|
+
* @param aid - 目标 AID
|
|
2547
|
+
* @returns 证书 PEM 字符串,如果 AID 未注册则返回 null
|
|
2548
|
+
*
|
|
2549
|
+
* @example
|
|
2550
|
+
* ```typescript
|
|
2551
|
+
* const cert = await auth.fetchPeerCert('wss://gateway.example.com', 'alice.aid.com');
|
|
2552
|
+
* if (cert) {
|
|
2553
|
+
* console.log('Alice is registered');
|
|
2554
|
+
* }
|
|
2555
|
+
* ```
|
|
2556
|
+
*/
|
|
2557
|
+
async fetchPeerCert(gatewayUrl, aid) {
|
|
2558
|
+
return this._downloadRegisteredCert(gatewayUrl, aid);
|
|
2559
|
+
}
|
|
2560
|
+
/** 下载服务端当前登记的证书(内部实现);未注册返回 null */
|
|
2536
2561
|
async _downloadRegisteredCert(gatewayUrl, aid) {
|
|
2537
2562
|
const certUrl = gatewayHttpUrl(gatewayUrl, `/pki/cert/${aid}`);
|
|
2538
2563
|
try {
|
|
@@ -3735,6 +3760,30 @@ var AuthNamespace = class {
|
|
|
3735
3760
|
throw err;
|
|
3736
3761
|
}
|
|
3737
3762
|
}
|
|
3763
|
+
/** 只读加载本地已注册身份(密钥对 + 证书 + 实例状态)。无副作用,不触发网络请求。 */
|
|
3764
|
+
async loadIdentity(params) {
|
|
3765
|
+
const aid = String((params ?? {})?.aid ?? "").trim() || void 0;
|
|
3766
|
+
const identity = await this._internal._auth.loadIdentityOrNone(aid);
|
|
3767
|
+
if (!identity) {
|
|
3768
|
+
throw new StateError(`identity not found for aid: ${aid ?? "<default>"}`);
|
|
3769
|
+
}
|
|
3770
|
+
return identity;
|
|
3771
|
+
}
|
|
3772
|
+
/** 只读加载本地已注册身份,不存在时返回 null。 */
|
|
3773
|
+
async loadIdentityOrNull(params) {
|
|
3774
|
+
const aid = String((params ?? {})?.aid ?? "").trim() || void 0;
|
|
3775
|
+
return await this._internal._auth.loadIdentityOrNone(aid);
|
|
3776
|
+
}
|
|
3777
|
+
/** 获取对端 AID 的证书 PEM(本地缓存优先,未命中走 PKI HTTP + 链验证)。 */
|
|
3778
|
+
async fetchPeerCert(params) {
|
|
3779
|
+
const aid = String(params?.aid ?? "").trim();
|
|
3780
|
+
if (!aid) throw new Error("auth.fetchPeerCert requires 'aid'");
|
|
3781
|
+
const fp = String(params?.cert_fingerprint ?? "").trim() || void 0;
|
|
3782
|
+
if (typeof this._internal._fetchPeerCert !== "function") {
|
|
3783
|
+
throw new Error("client does not support _fetchPeerCert");
|
|
3784
|
+
}
|
|
3785
|
+
return String(await this._internal._fetchPeerCert(aid, fp)).trim();
|
|
3786
|
+
}
|
|
3738
3787
|
async signAgentMd(content, opts) {
|
|
3739
3788
|
const tStart = Date.now();
|
|
3740
3789
|
this._log.debug(`signAgentMd enter: aid=${opts?.aid ?? "<current>"} content_len=${String(content ?? "").length}`);
|
|
@@ -10312,7 +10361,7 @@ function isPlainObject(value) {
|
|
|
10312
10361
|
var encoder3 = new TextEncoder();
|
|
10313
10362
|
var decoder = new TextDecoder();
|
|
10314
10363
|
var E2EE_SDK_LANG = "javascript";
|
|
10315
|
-
var E2EE_SDK_VERSION = "0.3.
|
|
10364
|
+
var E2EE_SDK_VERSION = "0.3.6";
|
|
10316
10365
|
async function sha2563(data) {
|
|
10317
10366
|
const buf = await crypto.subtle.digest("SHA-256", data.slice().buffer);
|
|
10318
10367
|
return new Uint8Array(buf);
|
|
@@ -11485,6 +11534,69 @@ function extractV2EnvelopeFromSource(source) {
|
|
|
11485
11534
|
}
|
|
11486
11535
|
return null;
|
|
11487
11536
|
}
|
|
11537
|
+
function truthyBool(value) {
|
|
11538
|
+
if (value === true || value === 1) return true;
|
|
11539
|
+
if (typeof value === "string") {
|
|
11540
|
+
const normalized = value.trim().toLowerCase();
|
|
11541
|
+
return normalized === "true" || normalized === "1" || normalized === "yes" || normalized === "on";
|
|
11542
|
+
}
|
|
11543
|
+
return false;
|
|
11544
|
+
}
|
|
11545
|
+
function isEncryptedEnvelopePayload(payload) {
|
|
11546
|
+
if (!isJsonObject(payload)) return false;
|
|
11547
|
+
const payloadType = String(payload.type ?? "").trim();
|
|
11548
|
+
if (payloadType.startsWith("e2ee.")) return true;
|
|
11549
|
+
if (!String(payload.ciphertext ?? "").trim()) return false;
|
|
11550
|
+
return payload.nonce !== void 0 || payload.tag !== void 0 || payload.recipient !== void 0 || payload.recipients !== void 0 || payload.wrapped_key !== void 0 || payload.recipients_digest !== void 0;
|
|
11551
|
+
}
|
|
11552
|
+
function encryptedPushEnvelope(msg) {
|
|
11553
|
+
if (isEncryptedEnvelopePayload(msg.payload)) return msg.payload;
|
|
11554
|
+
if (typeof msg.envelope_json === "string" && msg.envelope_json.trim()) {
|
|
11555
|
+
try {
|
|
11556
|
+
const parsed = JSON.parse(msg.envelope_json);
|
|
11557
|
+
if (isEncryptedEnvelopePayload(parsed)) return parsed;
|
|
11558
|
+
} catch {
|
|
11559
|
+
return null;
|
|
11560
|
+
}
|
|
11561
|
+
}
|
|
11562
|
+
return null;
|
|
11563
|
+
}
|
|
11564
|
+
function isEncryptedPushMessage(msg) {
|
|
11565
|
+
if (truthyBool(msg.encrypted)) return true;
|
|
11566
|
+
return encryptedPushEnvelope(msg) !== null;
|
|
11567
|
+
}
|
|
11568
|
+
function isV2EncryptedEnvelopePayload(envelope) {
|
|
11569
|
+
if (!envelope) return false;
|
|
11570
|
+
const payloadType = String(envelope.type ?? "").trim();
|
|
11571
|
+
if (payloadType === "e2ee.p2p_encrypted" || payloadType === "e2ee.group_encrypted") return true;
|
|
11572
|
+
return String(envelope.version ?? "").trim().toLowerCase() === "v2" && payloadType.startsWith("e2ee.");
|
|
11573
|
+
}
|
|
11574
|
+
function safeUndecryptablePushEvent(msg, group) {
|
|
11575
|
+
const event = {
|
|
11576
|
+
message_id: msg.message_id ?? null,
|
|
11577
|
+
from: msg.from ?? null,
|
|
11578
|
+
seq: msg.seq ?? null,
|
|
11579
|
+
timestamp: msg.timestamp ?? msg.t_server ?? null,
|
|
11580
|
+
device_id: msg.device_id ?? null,
|
|
11581
|
+
slot_id: msg.slot_id ?? null,
|
|
11582
|
+
_decrypt_error: "encrypted push payload is not decryptable on raw push path",
|
|
11583
|
+
_decrypt_stage: "push_envelope"
|
|
11584
|
+
};
|
|
11585
|
+
if (group) {
|
|
11586
|
+
event.group_id = msg.group_id ?? null;
|
|
11587
|
+
} else {
|
|
11588
|
+
event.to = msg.to ?? null;
|
|
11589
|
+
}
|
|
11590
|
+
const envelope = encryptedPushEnvelope(msg);
|
|
11591
|
+
if (envelope) {
|
|
11592
|
+
event._envelope_type = String(envelope.type ?? "");
|
|
11593
|
+
event._suite = String(envelope.suite ?? "");
|
|
11594
|
+
if (isV2EncryptedEnvelopePayload(envelope)) {
|
|
11595
|
+
attachV2EnvelopeMetadata(event, v2E2eeMeta(envelope));
|
|
11596
|
+
}
|
|
11597
|
+
}
|
|
11598
|
+
return event;
|
|
11599
|
+
}
|
|
11488
11600
|
function metadataWithoutAuth(value) {
|
|
11489
11601
|
if (!isJsonObject(value)) return null;
|
|
11490
11602
|
const body = {};
|
|
@@ -12482,7 +12594,7 @@ var _AUNClient = class _AUNClient {
|
|
|
12482
12594
|
async _callImplInner(method, p) {
|
|
12483
12595
|
if (method === "message.pull" && this._v2Session) {
|
|
12484
12596
|
this._clientLog.debug("call route: message.pull \u2192 V2 pull");
|
|
12485
|
-
const messages = await this.pullV2(Number(p.after_seq ?? 0) || 0, Number(p.limit ?? 50) || 50);
|
|
12597
|
+
const messages = await this.pullV2(Number(p.after_seq ?? 0) || 0, Number(p.limit ?? 50) || 50, { force: p.force === true });
|
|
12486
12598
|
return { messages };
|
|
12487
12599
|
}
|
|
12488
12600
|
if (method === "message.ack" && this._v2Session) {
|
|
@@ -12595,6 +12707,29 @@ var _AUNClient = class _AUNClient {
|
|
|
12595
12707
|
}
|
|
12596
12708
|
return result;
|
|
12597
12709
|
}
|
|
12710
|
+
async _callRawV2Rpc(method, params) {
|
|
12711
|
+
const p = { ...params ?? {} };
|
|
12712
|
+
delete p._pull_gate_locked;
|
|
12713
|
+
delete p._skip_auto_ack;
|
|
12714
|
+
delete p.skip_auto_ack;
|
|
12715
|
+
if (method.startsWith("group.") && p.group_id !== void 0 && p.group_id !== null) {
|
|
12716
|
+
p.group_id = normalizeGroupId(String(p.group_id)) || String(p.group_id);
|
|
12717
|
+
}
|
|
12718
|
+
if (method.startsWith("group.") && p.device_id === void 0) {
|
|
12719
|
+
p.device_id = this._deviceId;
|
|
12720
|
+
}
|
|
12721
|
+
if (method.startsWith("group.") && p.slot_id === void 0) {
|
|
12722
|
+
p.slot_id = this._slotId;
|
|
12723
|
+
}
|
|
12724
|
+
if (SIGNED_METHODS.has(method)) {
|
|
12725
|
+
if (this._shouldSkipClientSignature(method, p)) {
|
|
12726
|
+
delete p.client_signature;
|
|
12727
|
+
} else {
|
|
12728
|
+
await this._signClientOperation(method, p);
|
|
12729
|
+
}
|
|
12730
|
+
}
|
|
12731
|
+
return await this._transport.call(method, p);
|
|
12732
|
+
}
|
|
12598
12733
|
// ── 便利方法 ──────────────────────────────────────
|
|
12599
12734
|
async ping(params) {
|
|
12600
12735
|
return this.meta.ping(params);
|
|
@@ -12638,10 +12773,15 @@ var _AUNClient = class _AUNClient {
|
|
|
12638
12773
|
return;
|
|
12639
12774
|
}
|
|
12640
12775
|
const seq = msg.seq;
|
|
12776
|
+
const encryptedPush = isEncryptedPushMessage(msg);
|
|
12641
12777
|
if (seq !== void 0 && seq !== null && this._aid) {
|
|
12642
12778
|
const ns = `p2p:${this._aid}`;
|
|
12643
12779
|
if (seq > 0) this._seqTracker.updateMaxSeen(ns, seq);
|
|
12644
|
-
const
|
|
12780
|
+
const contigBefore = this._seqTracker.getContiguousSeq(ns);
|
|
12781
|
+
const seqNeedsPull = this._seqTracker.onMessageSeq(ns, seq);
|
|
12782
|
+
const published = encryptedPush ? await this._publishEncryptedPushMessage("message.received", "message.undecryptable", ns, seq, msg, false) : await this._publishOrderedMessage("message.received", ns, seq, msg);
|
|
12783
|
+
const contigAfter = this._seqTracker.getContiguousSeq(ns);
|
|
12784
|
+
const needPull = seqNeedsPull && !published;
|
|
12645
12785
|
if (needPull) {
|
|
12646
12786
|
this._safeAsync(this._fillP2pGap());
|
|
12647
12787
|
}
|
|
@@ -12657,12 +12797,13 @@ var _AUNClient = class _AUNClient {
|
|
|
12657
12797
|
this._clientLog.warn(`P2P auto-ack failed:${String(e)}`);
|
|
12658
12798
|
});
|
|
12659
12799
|
}
|
|
12660
|
-
this._saveSeqTrackerState();
|
|
12661
|
-
|
|
12662
|
-
if (seq !== void 0 && seq !== null && this._aid) {
|
|
12663
|
-
const ns = `p2p:${this._aid}`;
|
|
12664
|
-
await this._publishOrderedMessage("message.received", ns, seq, msg);
|
|
12800
|
+
if (contigAfter !== contigBefore) this._saveSeqTrackerState();
|
|
12801
|
+
if (encryptedPush) return;
|
|
12665
12802
|
} else {
|
|
12803
|
+
if (encryptedPush) {
|
|
12804
|
+
await this._publishEncryptedPushMessage("message.received", "message.undecryptable", "", seq ?? 0, msg, false);
|
|
12805
|
+
return;
|
|
12806
|
+
}
|
|
12666
12807
|
await this._publishAppEvent("message.received", msg);
|
|
12667
12808
|
}
|
|
12668
12809
|
} catch (exc) {
|
|
@@ -12764,10 +12905,15 @@ var _AUNClient = class _AUNClient {
|
|
|
12764
12905
|
await this._autoPullGroupMessages(msg);
|
|
12765
12906
|
return;
|
|
12766
12907
|
}
|
|
12908
|
+
const encryptedPush = isEncryptedPushMessage(msg);
|
|
12767
12909
|
if (groupId && seq !== void 0 && seq !== null) {
|
|
12768
12910
|
const ns = `group:${groupId}`;
|
|
12769
12911
|
if (seq > 0) this._seqTracker.updateMaxSeen(ns, seq);
|
|
12770
|
-
const
|
|
12912
|
+
const contigBefore = this._seqTracker.getContiguousSeq(ns);
|
|
12913
|
+
const seqNeedsPull = this._seqTracker.onMessageSeq(ns, seq);
|
|
12914
|
+
const published = encryptedPush ? await this._publishEncryptedPushMessage("group.message_created", "group.message_undecryptable", ns, seq, msg, true) : await this._publishOrderedMessage("group.message_created", ns, seq, msg);
|
|
12915
|
+
const contigAfter = this._seqTracker.getContiguousSeq(ns);
|
|
12916
|
+
const needPull = seqNeedsPull && !published;
|
|
12771
12917
|
if (needPull) {
|
|
12772
12918
|
this._safeAsync(this._fillGroupGap(groupId));
|
|
12773
12919
|
}
|
|
@@ -12784,12 +12930,13 @@ var _AUNClient = class _AUNClient {
|
|
|
12784
12930
|
this._clientLog.warn("group message auto-ack failed: group=" + groupId, e);
|
|
12785
12931
|
});
|
|
12786
12932
|
}
|
|
12787
|
-
this._saveSeqTrackerState();
|
|
12788
|
-
|
|
12789
|
-
if (groupId && seq !== void 0 && seq !== null) {
|
|
12790
|
-
const nsKey = `group:${groupId}`;
|
|
12791
|
-
await this._publishOrderedMessage("group.message_created", nsKey, seq, msg);
|
|
12933
|
+
if (contigAfter !== contigBefore) this._saveSeqTrackerState();
|
|
12934
|
+
if (encryptedPush) return;
|
|
12792
12935
|
} else {
|
|
12936
|
+
if (encryptedPush) {
|
|
12937
|
+
await this._publishEncryptedPushMessage("group.message_created", "group.message_undecryptable", "", seq ?? 0, msg, true);
|
|
12938
|
+
return;
|
|
12939
|
+
}
|
|
12793
12940
|
await this._publishAppEvent("group.message_created", msg);
|
|
12794
12941
|
}
|
|
12795
12942
|
} catch (exc) {
|
|
@@ -12809,6 +12956,52 @@ var _AUNClient = class _AUNClient {
|
|
|
12809
12956
|
}
|
|
12810
12957
|
}
|
|
12811
12958
|
}
|
|
12959
|
+
async _decryptEncryptedPushPayload(msg, group) {
|
|
12960
|
+
const envelope = encryptedPushEnvelope(msg);
|
|
12961
|
+
if (!isV2EncryptedEnvelopePayload(envelope)) return null;
|
|
12962
|
+
const aad = isJsonObject(envelope.aad) ? envelope.aad : {};
|
|
12963
|
+
const fromAid = String(msg.from_aid ?? msg.from ?? msg.sender_aid ?? aad.from ?? "").trim();
|
|
12964
|
+
const plaintext = await this._decryptV2EnvelopeForThought({ envelope, fromAid });
|
|
12965
|
+
if (!plaintext) return null;
|
|
12966
|
+
const e2eeMeta = v2E2eeMeta(envelope);
|
|
12967
|
+
const result = {
|
|
12968
|
+
message_id: String(msg.message_id ?? ""),
|
|
12969
|
+
from: fromAid,
|
|
12970
|
+
seq: msg.seq ?? null,
|
|
12971
|
+
timestamp: msg.t_server ?? msg.timestamp ?? null,
|
|
12972
|
+
payload: plaintext,
|
|
12973
|
+
encrypted: true,
|
|
12974
|
+
e2ee: e2eeMeta
|
|
12975
|
+
};
|
|
12976
|
+
result.direction = fromAid && fromAid === this._aid ? "outbound_sync" : "inbound";
|
|
12977
|
+
if (msg.t_server !== void 0) result.t_server = msg.t_server;
|
|
12978
|
+
if (msg.device_id !== void 0) result.device_id = msg.device_id;
|
|
12979
|
+
if (msg.slot_id !== void 0) result.slot_id = msg.slot_id;
|
|
12980
|
+
if (group) {
|
|
12981
|
+
result.group_id = msg.group_id ?? aad.group_id ?? envelope.group_id ?? null;
|
|
12982
|
+
} else {
|
|
12983
|
+
result.to = msg.to ?? this._aid ?? "";
|
|
12984
|
+
}
|
|
12985
|
+
attachV2EnvelopeMetadata(result, e2eeMeta);
|
|
12986
|
+
return result;
|
|
12987
|
+
}
|
|
12988
|
+
async _publishEncryptedPushAsUndecryptable(event, ns, seq, msg, group) {
|
|
12989
|
+
const safeEvent = safeUndecryptablePushEvent(msg, group);
|
|
12990
|
+
if (ns) {
|
|
12991
|
+
return this._publishOrderedMessage(event, ns, seq, safeEvent);
|
|
12992
|
+
}
|
|
12993
|
+
await this._publishAppEvent(event, safeEvent);
|
|
12994
|
+
return true;
|
|
12995
|
+
}
|
|
12996
|
+
async _publishEncryptedPushMessage(normalEvent, undecryptableEvent, ns, seq, msg, group) {
|
|
12997
|
+
const decrypted = await this._decryptEncryptedPushPayload(msg, group);
|
|
12998
|
+
if (decrypted) {
|
|
12999
|
+
if (ns) return this._publishOrderedMessage(normalEvent, ns, seq, decrypted);
|
|
13000
|
+
await this._publishAppEvent(normalEvent, decrypted);
|
|
13001
|
+
return true;
|
|
13002
|
+
}
|
|
13003
|
+
return this._publishEncryptedPushAsUndecryptable(undecryptableEvent, ns, seq, msg, group);
|
|
13004
|
+
}
|
|
12812
13005
|
/** 收到不带 payload 的 group.message_created 通知后,自动 pull 最新消息 */
|
|
12813
13006
|
async _autoPullGroupMessages(notification) {
|
|
12814
13007
|
const groupId = notification.group_id ?? "";
|
|
@@ -14839,7 +15032,25 @@ var _AUNClient = class _AUNClient {
|
|
|
14839
15032
|
*/
|
|
14840
15033
|
async initV2Session() {
|
|
14841
15034
|
if (!this._aid) return;
|
|
14842
|
-
|
|
15035
|
+
let identity = this._identity;
|
|
15036
|
+
if (!identity?.private_key_pem) {
|
|
15037
|
+
try {
|
|
15038
|
+
const reloaded = await this._keystore.loadIdentity(this._aid);
|
|
15039
|
+
if (reloaded?.private_key_pem) {
|
|
15040
|
+
this._identity = reloaded;
|
|
15041
|
+
identity = reloaded;
|
|
15042
|
+
this._clientLog.warn("V2 session init: identity cache was stale, reloaded from keystore");
|
|
15043
|
+
try {
|
|
15044
|
+
const persistIdentity = this._auth._persistIdentity;
|
|
15045
|
+
if (typeof persistIdentity === "function") {
|
|
15046
|
+
await persistIdentity.call(this._auth, reloaded);
|
|
15047
|
+
}
|
|
15048
|
+
} catch {
|
|
15049
|
+
}
|
|
15050
|
+
}
|
|
15051
|
+
} catch {
|
|
15052
|
+
}
|
|
15053
|
+
}
|
|
14843
15054
|
if (!identity?.private_key_pem) {
|
|
14844
15055
|
this._clientLog.warn("V2 session init skipped: no AID private key");
|
|
14845
15056
|
return;
|
|
@@ -15149,20 +15360,21 @@ var _AUNClient = class _AUNClient {
|
|
|
15149
15360
|
* @param afterSeq 从此 seq 之后开始拉取(0/省略 = 从当前 contiguous 开始)
|
|
15150
15361
|
* @param limit 最多拉取条数
|
|
15151
15362
|
*/
|
|
15152
|
-
async pullV2(afterSeq = 0, limit = 50) {
|
|
15363
|
+
async pullV2(afterSeq = 0, limit = 50, opts) {
|
|
15153
15364
|
if (!this._v2Session) {
|
|
15154
15365
|
throw new StateError("V2 session not initialized (not connected?)");
|
|
15155
15366
|
}
|
|
15156
15367
|
const ns = this._aid ? `p2p:${this._aid}` : "";
|
|
15157
15368
|
const decrypted = [];
|
|
15158
|
-
let nextAfterSeq = afterSeq || (ns ? this._seqTracker.getContiguousSeq(ns) : 0);
|
|
15369
|
+
let nextAfterSeq = opts?.force ? afterSeq : afterSeq || (ns ? this._seqTracker.getContiguousSeq(ns) : 0);
|
|
15159
15370
|
let pageCount = 0;
|
|
15160
15371
|
const maxPages = 100;
|
|
15161
15372
|
while (pageCount < maxPages) {
|
|
15162
15373
|
pageCount += 1;
|
|
15163
|
-
const result = await this.
|
|
15374
|
+
const result = await this._callRawV2Rpc("message.v2.pull", {
|
|
15164
15375
|
after_seq: nextAfterSeq,
|
|
15165
|
-
limit
|
|
15376
|
+
limit,
|
|
15377
|
+
...opts?.force ? { force: true } : {}
|
|
15166
15378
|
});
|
|
15167
15379
|
const messages = Array.isArray(result?.messages) ? result.messages : [];
|
|
15168
15380
|
const seqs = messages.map((msg) => Number(msg.seq ?? 0)).filter((seq) => Number.isFinite(seq) && seq > 0);
|
|
@@ -15451,6 +15663,10 @@ var _AUNClient = class _AUNClient {
|
|
|
15451
15663
|
encrypted: true,
|
|
15452
15664
|
e2ee
|
|
15453
15665
|
};
|
|
15666
|
+
const explicitDirection = String(msg.direction ?? "").trim();
|
|
15667
|
+
result.direction = explicitDirection || (fromAid && fromAid === this._aid ? "outbound_sync" : "inbound");
|
|
15668
|
+
if (msg.device_id !== void 0) result.device_id = msg.device_id;
|
|
15669
|
+
if (msg.slot_id !== void 0) result.slot_id = msg.slot_id;
|
|
15454
15670
|
attachV2EnvelopeMetadata(result, e2ee);
|
|
15455
15671
|
return result;
|
|
15456
15672
|
}
|
|
@@ -16804,7 +17020,7 @@ var ProtectedHeaders = class _ProtectedHeaders {
|
|
|
16804
17020
|
};
|
|
16805
17021
|
|
|
16806
17022
|
// src/index.ts
|
|
16807
|
-
var __version__ = "0.3.
|
|
17023
|
+
var __version__ = "0.3.6";
|
|
16808
17024
|
export {
|
|
16809
17025
|
AUNClient,
|
|
16810
17026
|
AUNError,
|
package/dist/client.d.ts
CHANGED
|
@@ -207,6 +207,7 @@ export declare class AUNClient {
|
|
|
207
207
|
* 拆分出来以便 pull gate 包裹整个操作。
|
|
208
208
|
*/
|
|
209
209
|
private _callImplInner;
|
|
210
|
+
private _callRawV2Rpc;
|
|
210
211
|
ping(params?: RpcParams): Promise<RpcResult>;
|
|
211
212
|
status(params?: RpcParams): Promise<RpcResult>;
|
|
212
213
|
trustRoots(params?: RpcParams): Promise<RpcResult>;
|
|
@@ -234,6 +235,9 @@ export declare class AUNClient {
|
|
|
234
235
|
* 不带 payload 的事件(通知):自动 pull 最新消息。
|
|
235
236
|
*/
|
|
236
237
|
private _processAndPublishGroupMessage;
|
|
238
|
+
private _decryptEncryptedPushPayload;
|
|
239
|
+
private _publishEncryptedPushAsUndecryptable;
|
|
240
|
+
private _publishEncryptedPushMessage;
|
|
237
241
|
/** 收到不带 payload 的 group.message_created 通知后,自动 pull 最新消息 */
|
|
238
242
|
private _autoPullGroupMessages;
|
|
239
243
|
/** 后台补齐群消息空洞 */
|
|
@@ -397,7 +401,9 @@ export declare class AUNClient {
|
|
|
397
401
|
* @param afterSeq 从此 seq 之后开始拉取(0/省略 = 从当前 contiguous 开始)
|
|
398
402
|
* @param limit 最多拉取条数
|
|
399
403
|
*/
|
|
400
|
-
pullV2(afterSeq?: number, limit?: number
|
|
404
|
+
pullV2(afterSeq?: number, limit?: number, opts?: {
|
|
405
|
+
force?: boolean;
|
|
406
|
+
}): Promise<unknown[]>;
|
|
401
407
|
/**
|
|
402
408
|
* 确认 V2 消息已消费 + 自检销毁旧 SPK(PFS)。
|
|
403
409
|
*
|
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;AAIlD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAkCrD,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|