@agentunion/fastaun 0.5.33 → 0.5.35

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.
Files changed (113) hide show
  1. package/CHANGELOG.md +59 -2
  2. package/README.md +28 -26
  3. package/_packed_docs/CHANGELOG.md +59 -2
  4. package/_packed_docs/INDEX.md +26 -12
  5. package/_packed_docs/KITE_DOCS_GUIDE.md +17 -11
  6. package/_packed_docs/agent.md/SCHEMA.md +1 -1
  7. package/_packed_docs/aun/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +2 -2
  8. package/_packed_docs/protocol/03-Gateway-/350/277/236/346/216/245/346/250/241/345/274/217.md +58 -8
  9. package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.1.md +17 -17
  10. package/_packed_docs/protocol/echo-probe-gateway.md +99 -0
  11. package/_packed_docs/protocol/echo-probe-sdk.md +91 -0
  12. package/_packed_docs/sdk/0.5.33-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +464 -316
  13. package/_packed_docs/sdk/0.5.33-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +499 -304
  14. package/_packed_docs/sdk/0.5.34-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +133 -0
  15. package/_packed_docs/sdk/0.5.34-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +107 -0
  16. package/_packed_docs/sdk/0.5.35-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +189 -0
  17. package/_packed_docs/sdk/0.5.35-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +204 -0
  18. package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +16 -13
  19. package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +13 -1
  20. package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +19 -9
  21. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +87 -20
  22. package/_packed_docs/sdk/09-collab-rpc-manual.md +48 -30
  23. package/_packed_docs/sdk/09-custody-api-manual.md +3 -3
  24. package/_packed_docs/sdk/09-group-rpc-manual.md +60 -13
  25. package/_packed_docs/sdk/09-message-rpc-manual.md +22 -0
  26. package/_packed_docs/sdk/09-meta-rpc-manual.md +2 -1
  27. package/_packed_docs/sdk/09-payload-reference.md +9 -8
  28. package/_packed_docs/sdk/09-proxy-rpc-manual.md +20 -14
  29. package/_packed_docs/sdk/09-storage-rpc-manual.md +1698 -1659
  30. package/_packed_docs/sdk/09-stream-rpc-manual.md +33 -20
  31. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +19 -17
  32. package/_packed_docs/sdk/AUN/344/272/213/344/273/266/345/217/221/345/270/203/350/256/242/351/230/205/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +125 -30
  33. package/_packed_docs/sdk/AUN/344/272/213/344/273/266/345/217/221/345/270/203/350/256/242/351/230/205/345/274/200/345/217/221/347/247/273/346/244/215/346/214/207/345/215/227.md +109 -33
  34. package/_packed_docs/sdk/INDEX.md +30 -18
  35. package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/2272.1.md +1 -1
  36. package/_packed_docs/sdk/Ownership2.1-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +5 -5
  37. package/_packed_docs/sdk/Ownership2.1-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +5 -5
  38. package/_packed_docs/sdk/Ownership2.1/350/257/246/347/273/206/350/256/276/350/256/241.md +9 -9
  39. package/_packed_docs/sdk/README.md +11 -6
  40. package/_packed_docs//346/266/210/346/201/257/345/274/271/346/200/247/350/241/245/346/213/211/351/200/232/351/201/223/345/256/236/346/226/275/350/256/241/345/210/222.md +400 -0
  41. package/_packed_docs//346/266/210/346/201/257/345/274/271/346/200/247/350/241/245/346/213/211/351/200/232/351/201/223/346/226/271/346/241/210.md +485 -0
  42. package/dist/auth.js +39 -45
  43. package/dist/auth.js.map +1 -1
  44. package/dist/client/control-messages.js +2 -2
  45. package/dist/client/control-messages.js.map +1 -1
  46. package/dist/client/delivery.d.ts +12 -1
  47. package/dist/client/delivery.js +281 -46
  48. package/dist/client/delivery.js.map +1 -1
  49. package/dist/client/lifecycle.js +13 -1
  50. package/dist/client/lifecycle.js.map +1 -1
  51. package/dist/client/rpc-budget.d.ts +21 -0
  52. package/dist/client/rpc-budget.js +82 -0
  53. package/dist/client/rpc-budget.js.map +1 -0
  54. package/dist/client/rpc-pipeline.d.ts +5 -0
  55. package/dist/client/rpc-pipeline.js +227 -63
  56. package/dist/client/rpc-pipeline.js.map +1 -1
  57. package/dist/client/sync-channels.d.ts +90 -0
  58. package/dist/client/sync-channels.js +508 -0
  59. package/dist/client/sync-channels.js.map +1 -0
  60. package/dist/client/v2-e2ee.d.ts +5 -1
  61. package/dist/client/v2-e2ee.js +420 -303
  62. package/dist/client/v2-e2ee.js.map +1 -1
  63. package/dist/client.d.ts +17 -0
  64. package/dist/client.js +373 -50
  65. package/dist/client.js.map +1 -1
  66. package/dist/events.d.ts +1 -0
  67. package/dist/events.js +5 -0
  68. package/dist/events.js.map +1 -1
  69. package/dist/index.d.ts +3 -1
  70. package/dist/index.js +1 -0
  71. package/dist/index.js.map +1 -1
  72. package/dist/mail-client.d.ts +101 -0
  73. package/dist/mail-client.js +369 -0
  74. package/dist/mail-client.js.map +1 -0
  75. package/dist/pubsub/binding.js +23 -3
  76. package/dist/pubsub/binding.js.map +1 -1
  77. package/dist/pubsub/channel.d.ts +15 -3
  78. package/dist/pubsub/channel.js +114 -7
  79. package/dist/pubsub/channel.js.map +1 -1
  80. package/dist/pubsub/client.d.ts +17 -2
  81. package/dist/pubsub/client.js +205 -40
  82. package/dist/pubsub/client.js.map +1 -1
  83. package/dist/pubsub/credentials.d.ts +3 -0
  84. package/dist/pubsub/credentials.js +57 -20
  85. package/dist/pubsub/credentials.js.map +1 -1
  86. package/dist/pubsub/index.d.ts +5 -2
  87. package/dist/pubsub/index.js +70 -54
  88. package/dist/pubsub/index.js.map +1 -1
  89. package/dist/pubsub/service.d.ts +9 -0
  90. package/dist/pubsub/service.js +266 -20
  91. package/dist/pubsub/service.js.map +1 -1
  92. package/dist/pubsub/types.d.ts +13 -1
  93. package/dist/storage/lowlevel.d.ts +3 -1
  94. package/dist/storage/lowlevel.js +13 -0
  95. package/dist/storage/lowlevel.js.map +1 -1
  96. package/dist/storage/types.d.ts +10 -0
  97. package/dist/storage/types.js.map +1 -1
  98. package/dist/storage/vfs.d.ts +3 -1
  99. package/dist/storage/vfs.js +2 -2
  100. package/dist/storage/vfs.js.map +1 -1
  101. package/dist/tools/cross-sdk-agent.d.ts +55 -5
  102. package/dist/tools/cross-sdk-agent.js +88 -21
  103. package/dist/tools/cross-sdk-agent.js.map +1 -1
  104. package/dist/transport.d.ts +16 -0
  105. package/dist/transport.js +129 -7
  106. package/dist/transport.js.map +1 -1
  107. package/dist/udp-standby.d.ts +89 -0
  108. package/dist/udp-standby.js +487 -0
  109. package/dist/udp-standby.js.map +1 -0
  110. package/dist/version.d.ts +1 -1
  111. package/dist/version.js +1 -1
  112. package/package.json +5 -1
  113. package/scripts/patch-imapflow-external.mjs +69 -0
package/dist/auth.js CHANGED
@@ -16,7 +16,7 @@ import * as http from 'node:http';
16
16
  import * as https from 'node:https';
17
17
  import * as path from 'node:path';
18
18
  import { URL, fileURLToPath } from 'node:url';
19
- import { AuthError, StateError, ValidationError, AUNError, mapRemoteError } from './errors.js';
19
+ import { AuthError, ConnectionError, StateError, ValidationError, AUNError, mapRemoteError } from './errors.js';
20
20
  import { shortRpcViaNetworkActor } from './transport.js';
21
21
  import { isJsonObject, } from './types.js';
22
22
  import { VERSION as AUN_SDK_VERSION } from './version.js';
@@ -659,7 +659,7 @@ export class AuthFlow {
659
659
  let identity = this._loadIdentityOrRaise(opts?.aid);
660
660
  this._logger.debug(`authenticate enter: aid=${identity.aid}, gateway=${gatewayUrl}`);
661
661
  try {
662
- // 优先复用 tokenStore 里的 cached access_token(未过期且有 refresh_token)
662
+ // 优先复用 tokenStore 里的 cached access_token(未过期)
663
663
  // 避免每次调 authenticate 都走两阶段重登的网络往返
664
664
  // 注意:_loadIdentityOrRaise 不带 instance_state(access_token 等),
665
665
  // 这里需要主动走 _loadInstanceState 拿到 token
@@ -667,7 +667,7 @@ export class AuthFlow {
667
667
  const identityWithState = { ...identity, ...instanceState };
668
668
  const cachedToken = AuthFlow._getCachedAccessToken(identityWithState);
669
669
  const cachedRefresh = String(identityWithState.refresh_token ?? '');
670
- if (cachedToken && cachedRefresh) {
670
+ if (cachedToken) {
671
671
  // 复用 cached token 前必须验证本地身份完整性:
672
672
  // cert 存在 + cert 公钥 == keypair 公钥 + cert 时间窗口有效。
673
673
  // 任何一项不通过 → 不复用,走两步重登(或抛错)。
@@ -824,7 +824,7 @@ export class AuthFlow {
824
824
  */
825
825
  async connectSession(transport, challenge, gatewayUrl, opts) {
826
826
  const tStart = Date.now();
827
- const nonce = this._extractChallengeNonce(challenge);
827
+ let nonce = this._extractChallengeNonce(challenge);
828
828
  const deviceId = String(opts?.deviceId ?? '');
829
829
  const slotId = String(opts?.slotId ?? '');
830
830
  const deliveryMode = opts?.deliveryMode ?? null;
@@ -832,6 +832,27 @@ export class AuthFlow {
832
832
  const shortTtlMs = opts?.shortTtlMs;
833
833
  const extraInfo = opts?.extraInfo;
834
834
  this.setInstanceContext({ deviceId, slotId });
835
+ let reconnectRequired = false;
836
+ const initializeSession = async (token) => {
837
+ if (reconnectRequired && typeof transport.connect === 'function') {
838
+ nonce = this._extractChallengeNonce(await transport.connect(gatewayUrl));
839
+ reconnectRequired = false;
840
+ }
841
+ try {
842
+ return await this._initializeSession(transport, nonce, token, {
843
+ deviceId, slotId, deliveryMode, connectionKind, shortTtlMs, extraInfo,
844
+ });
845
+ }
846
+ catch (err) {
847
+ if (err instanceof AuthError)
848
+ reconnectRequired = true;
849
+ else if (err instanceof ConnectionError && /\bcode=4001\b/.test(err.message)) {
850
+ reconnectRequired = true;
851
+ throw new AuthError(err.message);
852
+ }
853
+ throw err;
854
+ }
855
+ };
835
856
  this._logger.debug(`connectSession enter: gateway=${gatewayUrl}, device_id=${deviceId}, slot_id=${slotId}, has_explicit_token=${!!opts?.accessToken}, has_challenge_nonce=${!!nonce}`);
836
857
  try {
837
858
  let identity;
@@ -845,14 +866,7 @@ export class AuthFlow {
845
866
  const explicitToken = String(opts?.accessToken || '');
846
867
  if (explicitToken && identity !== null) {
847
868
  try {
848
- const hello = await this._initializeSession(transport, nonce, explicitToken, {
849
- deviceId,
850
- slotId,
851
- deliveryMode,
852
- connectionKind,
853
- shortTtlMs,
854
- extraInfo,
855
- });
869
+ const hello = await initializeSession(explicitToken);
856
870
  identity.access_token = explicitToken;
857
871
  this._persistIdentity(identity);
858
872
  this._logger.debug(`connectSession exit: elapsed=${Date.now() - tStart}ms strategy=explicit_token aid=${String(identity.aid ?? '')}`);
@@ -868,29 +882,15 @@ export class AuthFlow {
868
882
  if (identity === null) {
869
883
  const authContext = await this.ensureAuthenticated(gatewayUrl);
870
884
  const token = String(authContext.token);
871
- const hello = await this._initializeSession(transport, nonce, token, {
872
- deviceId,
873
- slotId,
874
- deliveryMode,
875
- connectionKind,
876
- shortTtlMs,
877
- extraInfo,
878
- });
885
+ const hello = await initializeSession(token);
879
886
  this._logger.debug(`connectSession exit: elapsed=${Date.now() - tStart}ms strategy=ensure_authenticated aid=${String(authContext.identity?.aid ?? '')}`);
880
887
  return { ...authContext, hello };
881
888
  }
882
889
  // 策略 2:缓存的 access_token
883
890
  const cachedToken = AuthFlow._getCachedAccessToken(identity);
884
- if (cachedToken) {
891
+ if (cachedToken && cachedToken !== explicitToken) {
885
892
  try {
886
- const hello = await this._initializeSession(transport, nonce, cachedToken, {
887
- deviceId,
888
- slotId,
889
- deliveryMode,
890
- connectionKind,
891
- shortTtlMs,
892
- extraInfo,
893
- });
893
+ const hello = await initializeSession(cachedToken);
894
894
  this._logger.debug(`connectSession exit: elapsed=${Date.now() - tStart}ms strategy=cached_token aid=${String(identity.aid ?? '')}`);
895
895
  return { token: cachedToken, identity, hello };
896
896
  }
@@ -907,14 +907,7 @@ export class AuthFlow {
907
907
  identity = await this.refreshCachedTokens(gatewayUrl, identity);
908
908
  const newCachedToken = AuthFlow._getCachedAccessToken(identity);
909
909
  if (newCachedToken) {
910
- const hello = await this._initializeSession(transport, nonce, newCachedToken, {
911
- deviceId,
912
- slotId,
913
- deliveryMode,
914
- connectionKind,
915
- shortTtlMs,
916
- extraInfo,
917
- });
910
+ const hello = await initializeSession(newCachedToken);
918
911
  this._logger.debug(`connectSession exit: elapsed=${Date.now() - tStart}ms strategy=refresh_token aid=${String(identity.aid ?? '')}`);
919
912
  return { token: newCachedToken, identity, hello };
920
913
  }
@@ -934,14 +927,7 @@ export class AuthFlow {
934
927
  if (!token) {
935
928
  throw new AuthError('authenticate did not return access_token');
936
929
  }
937
- const hello = await this._initializeSession(transport, nonce, token, {
938
- deviceId,
939
- slotId,
940
- deliveryMode,
941
- connectionKind,
942
- shortTtlMs,
943
- extraInfo,
944
- });
930
+ const hello = await initializeSession(token);
945
931
  identity = this.loadIdentity(identity.aid);
946
932
  this._logger.debug(`connectSession exit: elapsed=${Date.now() - tStart}ms strategy=full_reauth aid=${String(identity?.aid ?? '')}`);
947
933
  return { token, identity, hello };
@@ -1562,8 +1548,12 @@ export class AuthFlow {
1562
1548
  agent_md_validation_v1: true,
1563
1549
  p2p_peer_pull_v1: true,
1564
1550
  gateway_migrate_v1: true,
1551
+ elastic_connections_v1: true,
1552
+ sync_channels_v1: true,
1565
1553
  ...(this._requestAdmission && this._verifySsl && this._riskCapabilityEnabled?.() ? { risk_test_v1: true } : {}),
1566
1554
  };
1555
+ if (connectionKind !== 'long' || typeof extraInfoRaw?._sync_parent === 'string' || capabilities.udp_standby_v1 !== true)
1556
+ delete capabilities.udp_standby_v1;
1567
1557
  const request = {
1568
1558
  nonce,
1569
1559
  auth: { method: 'kite_token', token },
@@ -1592,6 +1582,10 @@ export class AuthFlow {
1592
1582
  // 长短连接选项:默认 long 时不写入 options(保持 wire 兼容)
1593
1583
  if (connectionKind === 'short') {
1594
1584
  const options = { kind: 'short' };
1585
+ if (typeof extraInfoRaw?._sync_parent === 'string') {
1586
+ options.purpose = 'history_sync';
1587
+ options.parent_connection_id = extraInfoRaw._sync_parent;
1588
+ }
1595
1589
  const ttl = Number(opts?.shortTtlMs ?? 0);
1596
1590
  if (ttl > 0) {
1597
1591
  options.short_ttl_ms = ttl;