@evomap/evolver 1.89.17 → 1.89.18

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 (82) hide show
  1. package/README.ja-JP.md +1 -1
  2. package/README.ko-KR.md +1 -1
  3. package/README.md +1 -1
  4. package/README.zh-CN.md +1 -1
  5. package/index.js +89 -17
  6. package/package.json +1 -1
  7. package/src/adapters/claudeCode.js +36 -7
  8. package/src/adapters/hookAdapter.js +24 -0
  9. package/src/atp/atpExecute.js +3 -1
  10. package/src/atp/hubClient.js +5 -3
  11. package/src/atp/serviceHelper.js +3 -2
  12. package/src/evolve/guards.js +1 -1
  13. package/src/evolve/pipeline/collect.js +1 -1
  14. package/src/evolve/pipeline/dispatch.js +1 -1
  15. package/src/evolve/pipeline/enrich.js +1 -1
  16. package/src/evolve/pipeline/hub.js +1 -1
  17. package/src/evolve/pipeline/select.js +1 -1
  18. package/src/evolve/pipeline/signals.js +1 -1
  19. package/src/evolve/utils.js +1 -1
  20. package/src/evolve.js +1 -1
  21. package/src/gep/a2aProtocol.js +1 -1
  22. package/src/gep/antiAbuseTelemetry.js +1 -1
  23. package/src/gep/autoDistillConv.js +1 -1
  24. package/src/gep/autoDistillLlm.js +1 -1
  25. package/src/gep/candidateEval.js +1 -1
  26. package/src/gep/candidates.js +1 -1
  27. package/src/gep/cliContracts.js +37 -1
  28. package/src/gep/contentHash.js +1 -1
  29. package/src/gep/conversationDistiller.js +1 -1
  30. package/src/gep/conversationSniffer.js +1 -1
  31. package/src/gep/crypto.js +1 -1
  32. package/src/gep/curriculum.js +1 -1
  33. package/src/gep/deviceId.js +1 -1
  34. package/src/gep/directoryClient.js +7 -3
  35. package/src/gep/envFingerprint.js +1 -1
  36. package/src/gep/epigenetics.js +1 -1
  37. package/src/gep/execBridge.js +1 -1
  38. package/src/gep/explore.js +1 -1
  39. package/src/gep/hash.js +1 -1
  40. package/src/gep/hubFetch.js +1 -1
  41. package/src/gep/hubReview.js +1 -1
  42. package/src/gep/hubSearch.js +1 -1
  43. package/src/gep/hubVerify.js +1 -1
  44. package/src/gep/learningSignals.js +1 -1
  45. package/src/gep/memoryGraph.js +1 -1
  46. package/src/gep/memoryGraphAdapter.js +1 -1
  47. package/src/gep/mutation.js +1 -1
  48. package/src/gep/narrativeMemory.js +1 -1
  49. package/src/gep/oauthLogin.js +3 -5
  50. package/src/gep/openPRRegistry.js +1 -1
  51. package/src/gep/personality.js +1 -1
  52. package/src/gep/policyCheck.js +1 -1
  53. package/src/gep/privacyClient.js +28 -10
  54. package/src/gep/prompt.js +1 -1
  55. package/src/gep/recallInject.js +1 -1
  56. package/src/gep/recallVerifier.js +1 -1
  57. package/src/gep/reflection.js +1 -1
  58. package/src/gep/savingsCore.js +1 -1
  59. package/src/gep/selector.js +1 -1
  60. package/src/gep/skillDistiller.js +1 -1
  61. package/src/gep/skillPublisher.js +8 -3
  62. package/src/gep/solidify.js +1 -1
  63. package/src/gep/strategy.js +1 -1
  64. package/src/gep/taskReceiver.js +3 -2
  65. package/src/gep/tokenSavings.js +1 -1
  66. package/src/gep/validator/index.js +7 -2
  67. package/src/gep/validator/reporter.js +7 -2
  68. package/src/gep/validator/stakeBootstrap.js +7 -2
  69. package/src/gep/workspaceKeychain.js +1 -1
  70. package/src/proxy/clientSettings.js +405 -0
  71. package/src/proxy/extensions/traceControl.js +1 -1
  72. package/src/proxy/index.js +10 -5
  73. package/src/proxy/inject.js +1 -1
  74. package/src/proxy/lifecycle/manager.js +82 -16
  75. package/src/proxy/mailbox/state.js +207 -0
  76. package/src/proxy/mailbox/store.js +164 -64
  77. package/src/proxy/router/messages_route.js +4 -3
  78. package/src/proxy/server/http.js +40 -6
  79. package/src/proxy/sync/inbound.js +31 -12
  80. package/src/proxy/sync/outbound.js +157 -22
  81. package/src/proxy/trace/extractor.js +1 -1
  82. package/src/proxy/trace/usage.js +1 -1
@@ -184,6 +184,7 @@ class EvoMapProxy {
184
184
  this.dataDir = opts.dataDir || opts.dbPath || _defaultDataDir();
185
185
  this.port = opts.port;
186
186
  this.logger = opts.logger || console;
187
+ this.clientSettings = opts.clientSettings || null;
187
188
  this._skillPath = opts.skillPath || null;
188
189
  this._anthropicBaseUrl = (opts.anthropicBaseUrl || process.env.EVOMAP_ANTHROPIC_BASE_URL || 'https://api.anthropic.com').replace(/\/+$/, '');
189
190
  this._openaiBaseUrl = String(opts.openaiBaseUrl || process.env.EVOMAP_OPENAI_BASE_URL || DEFAULT_OPENAI_BASE_URL).replace(/\/+$/, '');
@@ -396,6 +397,7 @@ class EvoMapProxy {
396
397
  this.server = new ProxyHttpServer(routes, {
397
398
  port: this.port,
398
399
  logger: this.logger,
400
+ clientSettings: this.clientSettings,
399
401
  });
400
402
 
401
403
  const serverInfo = await this.server.start();
@@ -462,7 +464,8 @@ class EvoMapProxy {
462
464
  || (stats.skipped || 0) > 0
463
465
  || (stats.duplicates || 0) > 0;
464
466
  if (!madeProgress) break;
465
- if (stats.reasons?.max_pending_uploads || stats.reasons?.collection_disabled
467
+ if (stats.reasons?.max_pending_uploads || stats.reasons?.max_enqueue_bytes
468
+ || stats.reasons?.collection_disabled
466
469
  || stats.reasons?.missing_file || stats.reasons?.missing_store
467
470
  || stats.reasons?.read_failed || stats.reasons?.thrown) {
468
471
  break;
@@ -824,8 +827,9 @@ class EvoMapProxy {
824
827
  // here, so clients (e.g. Claude Code) can authenticate to the proxy
825
828
  // with `ANTHROPIC_AUTH_TOKEN=<proxy_token>` without losing the ability
826
829
  // to reach Anthropic upstream. When the client did not pass x-api-key,
827
- // the proxy substitutes its own ANTHROPIC_API_KEY / ANTHROPIC_AUTH_TOKEN
828
- // env var on the upstream request. Env is read per-request so creds
830
+ // the proxy substitutes its own EVOMAP_ANTHROPIC_API_KEY /
831
+ // ANTHROPIC_API_KEY / ANTHROPIC_AUTH_TOKEN env var on the upstream request.
832
+ // Env is read per-request so creds
829
833
  // can be hot-swapped without restart, matching the EVOMAP_MODEL_*
830
834
  // policy in README.
831
835
  async _proxyAnthropic(reqPath, body, opts = {}) {
@@ -846,8 +850,9 @@ class EvoMapProxy {
846
850
  }
847
851
 
848
852
  if (!fwd['x-api-key']) {
849
- if (process.env.ANTHROPIC_API_KEY) {
850
- fwd['x-api-key'] = process.env.ANTHROPIC_API_KEY;
853
+ const upstreamApiKey = process.env.EVOMAP_ANTHROPIC_API_KEY || process.env.ANTHROPIC_API_KEY;
854
+ if (upstreamApiKey) {
855
+ fwd['x-api-key'] = upstreamApiKey;
851
856
  } else {
852
857
  const upstreamAuthToken = process.env.EVOMAP_ANTHROPIC_AUTH_TOKEN
853
858
  || (process.env.EVOMAP_PROXY_AUTO_INJECTED === '1' ? '' : process.env.ANTHROPIC_AUTH_TOKEN);
@@ -1 +1 @@
1
- const _0x859dd7=_0x286f;(function(_0x1c8665,_0x314dac){const _0x10143e=_0x286f,_0x3ea0e1=_0x1c8665();while(!![]){try{const _0x124615=parseInt(_0x10143e(0x8b,'\x43\x28\x54\x65'))/(-0x51*-0x18+-0x131d+0xb86)*(-parseInt(_0x10143e(0xc6,'\x4e\x42\x75\x23'))/(-0xc5*-0x13+0x351*-0x1+-0x3c4*0x3))+-parseInt(_0x10143e(0xed,'\x2a\x79\x6e\x61'))/(-0xc0c+0x1*-0xb57+0x1766)+-parseInt(_0x10143e(0xda,'\x26\x38\x26\x26'))/(-0x2699+0x1000*-0x1+-0x1f*-0x1c3)+-parseInt(_0x10143e(0xa2,'\x39\x6d\x40\x79'))/(0x1*0x1918+0x36*0x65+-0x2e61)+-parseInt(_0x10143e(0x9a,'\x40\x5d\x63\x39'))/(-0xdb4*-0x2+-0xac0+0x851*-0x2)+-parseInt(_0x10143e(0xb6,'\x59\x4e\x6c\x40'))/(-0x3*-0x3fd+-0x1*-0x69e+-0x128e)+parseInt(_0x10143e(0x103,'\x25\x79\x23\x64'))/(-0x13be+-0x624*-0x6+0x26*-0x73)*(parseInt(_0x10143e(0x86,'\x39\x6d\x40\x79'))/(0x8f5*0x1+-0x1d8*-0xb+-0x1d34));if(_0x124615===_0x314dac)break;else _0x3ea0e1['push'](_0x3ea0e1['shift']());}catch(_0x388846){_0x3ea0e1['push'](_0x3ea0e1['shift']());}}}(_0x2dd2,-0x606*-0x3+0x8*0x636b+-0x19340));const _0x42e93d=(function(){const _0x47f961=_0x286f,_0x5607bc={};_0x5607bc[_0x47f961(0xac,'\x74\x23\x66\x4e')]=_0x47f961(0x8a,'\x25\x79\x23\x64'),_0x5607bc[_0x47f961(0xd9,'\x25\x46\x66\x49')]=function(_0x3bb26e,_0xfe61b2){return _0x3bb26e===_0xfe61b2;},_0x5607bc[_0x47f961(0x112,'\x21\x52\x4f\x25')]=_0x47f961(0xc0,'\x58\x69\x66\x66'),_0x5607bc[_0x47f961(0xfe,'\x59\x74\x34\x24')]=function(_0x3ce5f5,_0x49de39){return _0x3ce5f5===_0x49de39;},_0x5607bc[_0x47f961(0xdf,'\x52\x58\x4e\x72')]=function(_0x79ecfa,_0x20af45){return _0x79ecfa!==_0x20af45;},_0x5607bc[_0x47f961(0x107,'\x25\x79\x23\x64')]=_0x47f961(0xe0,'\x43\x48\x44\x74');const _0x39b810=_0x5607bc;let _0x337486=!![];return function(_0x3ff43c,_0x34df47){const _0x1828a0=_0x47f961,_0x1e19f3={'\x59\x56\x49\x78\x4c':_0x39b810[_0x1828a0(0x92,'\x64\x63\x5d\x43')],'\x50\x65\x73\x47\x76':function(_0x52f851,_0x48a598){return _0x39b810['\x7a\x47\x50\x4f\x72'](_0x52f851,_0x48a598);},'\x64\x58\x4b\x51\x7a':function(_0x2c2b5d,_0x195c32){const _0x32f8ef=_0x1828a0;return _0x39b810[_0x32f8ef(0xff,'\x59\x4e\x6c\x40')](_0x2c2b5d,_0x195c32);},'\x42\x63\x79\x62\x43':_0x39b810[_0x1828a0(0x8c,'\x25\x51\x48\x44')],'\x63\x70\x41\x44\x73':function(_0x186f9a,_0x42dcad){const _0x28c6fd=_0x1828a0;return _0x39b810[_0x28c6fd(0xcd,'\x24\x5d\x26\x35')](_0x186f9a,_0x42dcad);}};if(_0x39b810[_0x1828a0(0xd2,'\x78\x5a\x30\x51')](_0x39b810[_0x1828a0(0xf0,'\x78\x5a\x30\x51')],_0x39b810[_0x1828a0(0x102,'\x28\x67\x33\x39')])){const _0x5ad673=_0x24ed91(_0x4d2e93[_0x1828a0(0xc8,'\x29\x61\x38\x4d')+_0x1828a0(0xf9,'\x25\x51\x48\x44')+_0x1828a0(0xbc,'\x25\x79\x23\x64')]||'')[_0x1828a0(0xa9,'\x24\x59\x32\x4f')]()[_0x1828a0(0xf7,'\x4b\x4e\x52\x56')+_0x1828a0(0xe9,'\x64\x63\x5d\x43')]();return _0x5ad673==='\x30'||_0x5ad673===_0x1e19f3[_0x1828a0(0xbe,'\x58\x69\x66\x66')]||_0x1e19f3['\x50\x65\x73\x47\x76'](_0x5ad673,_0x1828a0(0x9d,'\x43\x28\x54\x65'))||_0x1e19f3[_0x1828a0(0xe5,'\x28\x67\x33\x39')](_0x5ad673,_0x1e19f3[_0x1828a0(0xa1,'\x25\x79\x23\x64')])||_0x1e19f3[_0x1828a0(0x96,'\x42\x6b\x58\x52')](_0x5ad673,'\x6e\x6f');}else{const _0xc904e1=_0x337486?function(){const _0x10dda0=_0x1828a0;if(_0x34df47){const _0x14b157=_0x34df47[_0x10dda0(0xf6,'\x39\x6d\x40\x79')](_0x3ff43c,arguments);return _0x34df47=null,_0x14b157;}}:function(){};return _0x337486=![],_0xc904e1;}};}()),_0x8fec98=_0x42e93d(this,function(){const _0x3d4914=_0x286f;return _0x8fec98[_0x3d4914(0x10e,'\x54\x6d\x57\x53')]()[_0x3d4914(0xbb,'\x58\x67\x36\x32')](_0x3d4914(0x10f,'\x4e\x42\x75\x23')+_0x3d4914(0x9e,'\x43\x28\x54\x65'))[_0x3d4914(0xef,'\x78\x5a\x30\x51')]()[_0x3d4914(0xa3,'\x74\x23\x66\x4e')+_0x3d4914(0xcc,'\x53\x45\x6d\x62')](_0x8fec98)[_0x3d4914(0xf8,'\x4b\x4e\x52\x56')](_0x3d4914(0xa5,'\x59\x5d\x6e\x30')+_0x3d4914(0x94,'\x59\x4e\x6c\x40'));});_0x8fec98();function _0x2dd2(){const _0x148ebc=['\x65\x43\x6f\x39\x46\x47','\x67\x61\x43\x6a','\x6e\x66\x6d\x6e\x57\x36\x57','\x70\x38\x6b\x4b\x57\x34\x35\x52\x57\x36\x43','\x45\x71\x48\x4c\x57\x4f\x39\x6c\x57\x51\x74\x63\x4a\x38\x6b\x30\x62\x68\x4e\x63\x4f\x43\x6b\x72','\x57\x37\x4a\x64\x53\x6d\x6f\x4a\x57\x35\x79','\x57\x36\x74\x64\x4d\x4b\x78\x63\x53\x6d\x6b\x78\x57\x36\x2f\x63\x54\x38\x6b\x41','\x57\x34\x42\x64\x56\x4d\x74\x63\x4c\x53\x6b\x61','\x57\x37\x6c\x64\x4a\x65\x68\x63\x4a\x43\x6b\x67','\x6e\x31\x64\x64\x55\x5a\x47\x41\x57\x34\x2f\x64\x4d\x71\x65','\x57\x51\x33\x63\x49\x76\x7a\x46\x57\x50\x57','\x76\x43\x6f\x47\x76\x4d\x2f\x64\x53\x53\x6f\x72\x57\x36\x6c\x64\x49\x61','\x57\x36\x70\x64\x56\x33\x46\x63\x47\x6d\x6b\x39','\x66\x74\x68\x64\x56\x67\x44\x2b','\x57\x34\x70\x64\x4c\x6d\x6f\x51\x57\x37\x44\x2b\x41\x38\x6b\x37\x57\x36\x4f','\x57\x34\x74\x64\x4e\x53\x6f\x68\x57\x36\x50\x51\x7a\x47','\x57\x36\x2f\x63\x53\x38\x6f\x6c\x57\x50\x71\x76\x57\x36\x47\x61\x42\x71','\x57\x52\x65\x54\x62\x6d\x6b\x53\x57\x35\x68\x63\x4f\x53\x6f\x70\x64\x71','\x57\x36\x53\x32\x67\x53\x6f\x31\x68\x62\x62\x6e\x46\x71','\x57\x51\x52\x63\x4b\x68\x54\x39\x57\x52\x4f','\x45\x47\x4e\x63\x4e\x47\x5a\x64\x4c\x53\x6f\x47\x64\x4d\x4f','\x57\x36\x31\x39\x57\x4f\x74\x64\x54\x65\x6d','\x43\x38\x6b\x55\x65\x4a\x30\x53','\x57\x37\x46\x64\x47\x43\x6b\x70\x57\x36\x2f\x64\x47\x53\x6f\x51\x68\x63\x44\x54\x57\x50\x43\x43\x6a\x53\x6b\x6a','\x57\x37\x2f\x64\x56\x6d\x6f\x56\x57\x34\x58\x6c','\x57\x4f\x4b\x5a\x57\x36\x44\x55\x42\x71','\x57\x34\x64\x64\x52\x43\x6b\x77\x66\x6d\x6f\x30\x57\x4f\x79\x33\x75\x61\x74\x63\x4d\x5a\x53\x45\x64\x71','\x57\x50\x61\x5a\x57\x35\x62\x59','\x75\x53\x6f\x62\x57\x50\x4e\x63\x54\x71\x70\x64\x53\x53\x6f\x4f\x42\x61','\x57\x36\x78\x64\x49\x53\x6f\x62\x57\x35\x76\x35','\x57\x51\x68\x63\x4c\x53\x6f\x77\x44\x43\x6b\x4a','\x78\x6d\x6f\x56\x45\x65\x46\x63\x56\x43\x6f\x4d\x57\x4f\x58\x64','\x57\x4f\x68\x64\x47\x43\x6f\x33\x72\x71\x34\x6b','\x57\x52\x37\x64\x4f\x30\x69\x52\x57\x36\x68\x64\x4f\x71','\x57\x50\x70\x63\x54\x6d\x6f\x78\x72\x53\x6b\x4b\x57\x35\x35\x51\x45\x57','\x6f\x77\x56\x63\x55\x63\x33\x63\x53\x5a\x53','\x57\x34\x70\x64\x4a\x38\x6f\x70\x57\x37\x7a\x55\x46\x71','\x57\x4f\x35\x46\x57\x35\x4f\x6c\x42\x43\x6f\x48\x69\x6d\x6f\x48','\x65\x38\x6b\x68\x57\x35\x56\x64\x56\x4b\x56\x63\x52\x38\x6b\x4d\x69\x71','\x44\x6d\x6f\x71\x72\x68\x4e\x63\x4c\x43\x6f\x79\x57\x52\x72\x44','\x57\x35\x42\x63\x48\x49\x50\x72\x6d\x75\x4a\x63\x4c\x31\x34','\x45\x68\x78\x64\x4c\x38\x6b\x50\x57\x52\x57','\x57\x37\x62\x53\x57\x51\x33\x64\x49\x67\x65','\x70\x6d\x6b\x43\x57\x37\x58\x51\x57\x35\x35\x4c\x57\x50\x34\x66','\x66\x76\x52\x63\x4b\x62\x74\x63\x50\x6d\x6b\x4f\x57\x52\x79','\x45\x43\x6f\x56\x72\x38\x6b\x56\x6a\x59\x47\x38\x57\x37\x34','\x74\x71\x56\x64\x56\x66\x35\x6f\x57\x37\x50\x32','\x72\x53\x6b\x37\x63\x48\x34\x69','\x57\x51\x4c\x68\x57\x52\x71\x54\x57\x4f\x52\x63\x55\x38\x6f\x75\x57\x51\x43','\x70\x53\x6f\x41\x75\x38\x6f\x36\x61\x43\x6b\x51\x57\x34\x48\x6a','\x57\x50\x68\x63\x56\x6d\x6f\x69\x76\x6d\x6b\x4a','\x57\x4f\x42\x63\x4b\x78\x65\x6f\x70\x4e\x69\x61\x6e\x57','\x57\x34\x33\x63\x4c\x43\x6f\x72\x57\x50\x4b\x64','\x72\x53\x6b\x32\x63\x5a\x57\x75\x6d\x43\x6b\x4f\x65\x61','\x57\x51\x78\x63\x4b\x53\x6f\x38\x46\x53\x6b\x7a\x57\x36\x44\x44\x75\x57','\x65\x49\x47\x43\x57\x4f\x56\x63\x55\x61','\x6b\x61\x74\x63\x4b\x53\x6f\x77\x43\x49\x72\x6a\x57\x51\x34','\x45\x6d\x6f\x49\x57\x34\x2f\x64\x4c\x4b\x71','\x6f\x38\x6f\x4c\x44\x43\x6f\x36\x62\x57','\x42\x53\x6f\x53\x57\x4f\x70\x63\x49\x64\x47','\x69\x53\x6f\x61\x41\x76\x79','\x45\x4a\x37\x64\x52\x77\x33\x64\x52\x32\x6c\x64\x4b\x43\x6f\x2f\x57\x4f\x46\x63\x4a\x43\x6b\x49\x57\x50\x39\x76','\x77\x38\x6f\x55\x57\x34\x6e\x66\x6c\x61','\x42\x43\x6f\x6c\x78\x4d\x43','\x62\x6d\x6f\x48\x43\x6d\x6f\x6e\x69\x61','\x57\x4f\x33\x63\x48\x72\x30\x6f\x67\x65\x42\x63\x55\x65\x47','\x68\x73\x68\x64\x4c\x4e\x74\x64\x4e\x6d\x6f\x68\x57\x36\x35\x6a\x62\x4d\x79\x72\x57\x51\x7a\x73','\x57\x37\x64\x63\x50\x4a\x35\x4e\x67\x77\x5a\x63\x53\x65\x4b','\x6e\x38\x6b\x4c\x57\x36\x79\x66','\x57\x35\x4a\x64\x47\x4c\x65','\x57\x50\x5a\x63\x4a\x72\x58\x46','\x69\x43\x6b\x39\x75\x53\x6b\x55\x67\x71','\x44\x53\x6f\x6b\x57\x34\x50\x74\x65\x62\x42\x64\x47\x72\x75','\x57\x52\x78\x63\x56\x53\x6f\x44\x72\x43\x6b\x66','\x72\x78\x68\x63\x55\x64\x47\x30\x57\x50\x71\x56\x57\x37\x65\x4c\x57\x37\x52\x64\x51\x53\x6f\x2f\x57\x37\x57','\x75\x38\x6f\x6b\x57\x36\x4a\x64\x53\x78\x6c\x64\x56\x68\x33\x63\x4a\x61','\x6d\x72\x69\x6d\x57\x50\x4a\x63\x54\x57','\x41\x61\x4c\x6d\x57\x51\x2f\x64\x4a\x71\x72\x5a\x57\x36\x30','\x63\x6d\x6b\x47\x57\x34\x71','\x62\x78\x43\x52\x57\x34\x5a\x63\x50\x33\x30\x68\x57\x50\x71','\x57\x52\x68\x63\x4e\x6d\x6f\x33\x57\x52\x64\x63\x56\x47','\x61\x48\x69\x74\x57\x51\x65','\x57\x37\x6e\x76\x6d\x53\x6b\x78\x57\x37\x53\x45','\x76\x43\x6f\x51\x72\x33\x52\x64\x52\x53\x6f\x7a\x57\x36\x6c\x64\x4e\x61','\x45\x38\x6f\x6f\x57\x36\x4a\x64\x4b\x65\x38','\x78\x43\x6f\x57\x73\x57','\x45\x38\x6f\x43\x44\x4b\x4a\x64\x4c\x6d\x6f\x59\x57\x35\x52\x64\x4c\x47','\x63\x38\x6b\x51\x57\x52\x71\x59\x41\x78\x42\x64\x52\x48\x4e\x64\x4b\x31\x70\x64\x54\x6d\x6b\x73','\x72\x78\x70\x64\x53\x38\x6b\x30\x64\x74\x62\x43\x57\x52\x6c\x63\x56\x4d\x33\x63\x4f\x47','\x57\x4f\x6c\x63\x53\x4a\x56\x64\x52\x43\x6f\x75\x71\x63\x6c\x63\x4f\x47','\x57\x50\x78\x64\x51\x6d\x6f\x77\x46\x31\x4b\x6e\x79\x77\x47','\x72\x5a\x70\x63\x54\x4a\x68\x64\x53\x38\x6f\x6c','\x57\x51\x54\x7a\x44\x63\x39\x34\x6c\x38\x6f\x64\x57\x52\x4f','\x57\x35\x69\x4a\x72\x61\x6e\x73\x65\x6d\x6f\x77\x71\x61','\x6f\x38\x6f\x46\x44\x4b\x72\x50\x70\x38\x6b\x51\x66\x57\x46\x64\x49\x53\x6f\x51','\x57\x4f\x46\x63\x4d\x62\x43\x6e','\x57\x36\x4b\x57\x68\x43\x6f\x4e\x62\x48\x57','\x57\x52\x33\x64\x49\x6d\x6f\x4f\x75\x4d\x47\x32\x79\x76\x6d','\x57\x52\x4e\x64\x54\x65\x38','\x67\x33\x4f\x6f\x69\x5a\x54\x4f','\x57\x52\x4a\x63\x47\x53\x6f\x54\x41\x43\x6b\x6d\x57\x37\x44\x6d\x73\x57','\x57\x34\x74\x64\x52\x4c\x79\x2f\x6d\x47','\x57\x50\x78\x64\x4b\x67\x4f\x47\x57\x34\x69','\x6e\x43\x6b\x32\x57\x37\x30\x42','\x57\x51\x6c\x64\x51\x75\x30\x39','\x70\x57\x74\x64\x47\x47','\x57\x50\x76\x36\x57\x36\x71\x78\x44\x47','\x63\x4b\x64\x63\x4a\x72\x42\x63\x4a\x48\x52\x63\x54\x6d\x6f\x64','\x57\x50\x6d\x59\x57\x52\x64\x63\x47\x57\x2f\x64\x55\x6d\x6b\x2f\x79\x47','\x57\x37\x72\x64\x6e\x53\x6b\x33\x57\x37\x65\x65\x7a\x4e\x38','\x63\x43\x6b\x42\x57\x34\x56\x64\x4f\x31\x64\x64\x4f\x6d\x6f\x47\x73\x53\x6f\x54\x57\x52\x33\x64\x53\x57','\x57\x4f\x78\x63\x4a\x38\x6b\x45\x57\x51\x53\x35\x41\x6d\x6b\x4b\x57\x36\x56\x63\x54\x77\x35\x32','\x78\x6d\x6f\x56\x45\x65\x46\x63\x56\x43\x6f\x4d\x57\x4f\x58\x73','\x71\x65\x37\x64\x4a\x38\x6b\x42\x57\x52\x57','\x70\x53\x6b\x6e\x57\x36\x50\x4a\x57\x35\x39\x56\x57\x50\x65\x7a','\x62\x78\x43\x52\x57\x34\x5a\x63\x50\x33\x30\x68\x57\x4f\x75','\x61\x59\x52\x63\x54\x71','\x57\x37\x6e\x66\x70\x38\x6b\x69\x57\x37\x38','\x57\x35\x4e\x64\x4c\x6d\x6f\x69\x57\x37\x30','\x45\x74\x42\x64\x51\x77\x33\x64\x52\x77\x6c\x63\x4e\x6d\x6f\x59\x57\x51\x74\x63\x56\x38\x6b\x62\x57\x50\x38','\x57\x52\x4e\x63\x49\x43\x6f\x53\x44\x43\x6b\x6a\x57\x36\x6a\x67\x78\x61','\x57\x51\x52\x63\x4b\x47\x78\x64\x47\x6d\x6f\x4c\x45\x58\x46\x63\x4a\x57','\x57\x37\x52\x64\x53\x4e\x4e\x63\x49\x6d\x6b\x4a','\x57\x50\x74\x63\x56\x38\x6f\x48\x57\x4f\x70\x63\x52\x6d\x6b\x44\x46\x72\x30','\x57\x35\x61\x78\x6b\x6d\x6f\x6a\x69\x64\x66\x36\x76\x71','\x42\x77\x74\x64\x50\x43\x6b\x73\x57\x4f\x46\x63\x51\x53\x6f\x51','\x79\x53\x6f\x7a\x57\x37\x6e\x30\x6e\x71','\x7a\x65\x6d\x57\x57\x34\x47\x6f\x57\x37\x52\x63\x4d\x43\x6b\x52','\x57\x35\x39\x6e\x57\x36\x56\x63\x4b\x53\x6f\x78','\x57\x51\x69\x65\x70\x53\x6b\x67\x57\x34\x61','\x57\x34\x42\x63\x47\x43\x6b\x4f\x67\x66\x39\x6a\x57\x36\x33\x64\x53\x6d\x6f\x4e\x57\x52\x47\x4b\x57\x4f\x79','\x73\x43\x6f\x7a\x57\x35\x48\x65\x6f\x61','\x43\x53\x6f\x71\x42\x33\x4e\x64\x4a\x47','\x70\x38\x6f\x67\x57\x51\x4a\x63\x52\x6d\x6f\x69\x76\x71','\x57\x4f\x37\x64\x54\x43\x6f\x34\x79\x77\x47','\x6b\x38\x6b\x64\x57\x37\x53\x36\x63\x71','\x6b\x43\x6b\x2b\x57\x35\x31\x48\x57\x34\x34','\x68\x74\x6c\x64\x49\x67\x6a\x30\x57\x34\x6a\x34\x57\x36\x47','\x57\x50\x4a\x63\x55\x38\x6f\x63','\x76\x31\x37\x64\x4c\x6d\x6b\x55\x57\x52\x64\x63\x47\x43\x6f\x6d\x57\x4f\x4f','\x57\x4f\x56\x63\x4a\x62\x61\x63\x63\x4c\x70\x63\x55\x65\x30','\x57\x52\x53\x47\x57\x35\x35\x54\x43\x47','\x6e\x74\x38\x37\x57\x50\x4e\x63\x49\x53\x6b\x2b\x43\x33\x69','\x57\x36\x31\x54\x57\x50\x4a\x64\x54\x65\x4e\x63\x4f\x43\x6b\x51','\x57\x35\x61\x61\x69\x43\x6f\x46\x65\x71'];_0x2dd2=function(){return _0x148ebc;};return _0x2dd2();}'use strict';const {getProxyToken:_0x1c2f04,getProxyUrl:_0x478072}=require('\x2e\x2f\x73\x65\x72\x76\x65\x72'+_0x859dd7(0xd7,'\x2a\x79\x6e\x61')+'\x73');function _0x302020(_0x52867c=process.env){const _0x5e468a=_0x859dd7,_0x1dc02c={'\x74\x4a\x51\x65\x70':function(_0x3294ac,_0xa846c6){return _0x3294ac(_0xa846c6);},'\x64\x65\x6a\x42\x73':function(_0x2fb4db,_0x3e6f97){return _0x2fb4db===_0x3e6f97;},'\x6f\x64\x45\x50\x49':_0x5e468a(0xf3,'\x65\x39\x64\x42'),'\x64\x48\x66\x47\x66':function(_0xa1930e,_0x1254ea){return _0xa1930e===_0x1254ea;},'\x79\x4f\x5a\x5a\x4f':_0x5e468a(0xe2,'\x25\x79\x23\x64'),'\x52\x71\x67\x4d\x70':function(_0x11eb93,_0x25f687){return _0x11eb93===_0x25f687;},'\x69\x67\x53\x74\x6a':_0x5e468a(0xce,'\x4b\x4e\x52\x56'),'\x61\x78\x41\x51\x43':function(_0x2fdd9c,_0x2e685a){return _0x2fdd9c===_0x2e685a;}},_0xfcdab9=_0x1dc02c['\x74\x4a\x51\x65\x70'](String,_0x52867c[_0x5e468a(0xb5,'\x65\x75\x21\x69')+_0x5e468a(0xd3,'\x33\x53\x39\x56')+_0x5e468a(0x8d,'\x59\x4e\x6c\x40')]||'')[_0x5e468a(0x97,'\x29\x61\x38\x4d')]()[_0x5e468a(0x9b,'\x49\x36\x6d\x38')+_0x5e468a(0xe9,'\x64\x63\x5d\x43')]();return _0x1dc02c[_0x5e468a(0xdc,'\x5a\x79\x67\x68')](_0xfcdab9,'\x30')||_0xfcdab9===_0x1dc02c[_0x5e468a(0x113,'\x59\x74\x34\x24')]||_0x1dc02c[_0x5e468a(0x8f,'\x24\x59\x32\x4f')](_0xfcdab9,_0x1dc02c[_0x5e468a(0xd8,'\x6d\x6f\x58\x4c')])||_0x1dc02c[_0x5e468a(0x106,'\x4b\x4e\x52\x56')](_0xfcdab9,_0x1dc02c[_0x5e468a(0x9f,'\x5b\x4a\x56\x51')])||_0x1dc02c[_0x5e468a(0xfc,'\x65\x39\x64\x42')](_0xfcdab9,'\x6e\x6f');}function _0x286f(_0x4c87d0,_0x54bb91){_0x4c87d0=_0x4c87d0-(-0x6dd*-0x4+0x2388+-0x3e77);const _0x4cd921=_0x2dd2();let _0x248e15=_0x4cd921[_0x4c87d0];if(_0x286f['\x67\x7a\x79\x53\x57\x4e']===undefined){var _0x5e64a3=function(_0x1a4914){const _0x487980='\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';let _0x3d00d1='',_0x4f783b='',_0x5e1fd1=_0x3d00d1+_0x5e64a3,_0xa61f16=(''+function(){return 0x2*-0x2f9+0x1e4a+-0x1858;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(-0x1f1a+-0x20*-0x124+-0x565);for(let _0x3f6d9b=0x22b2*-0x1+-0x3d*0x25+0x2b83,_0xaaa0b7,_0x11223f,_0x55dc9f=-0xe5*-0x22+-0x1*0xb93+-0x173*0xd;_0x11223f=_0x1a4914['\x63\x68\x61\x72\x41\x74'](_0x55dc9f++);~_0x11223f&&(_0xaaa0b7=_0x3f6d9b%(-0x20e1+0x127*-0x13+0x36ca)?_0xaaa0b7*(-0x4*0x21d+0x36d+-0xc1*-0x7)+_0x11223f:_0x11223f,_0x3f6d9b++%(-0x2*0x3fb+-0xbcd*0x1+0x13c7*0x1))?_0x3d00d1+=_0xa61f16||_0x5e1fd1['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x55dc9f+(0x26c7+0x11d0+0x1d3*-0x1f))-(-0x6e1+0x2f*0x79+0xb*-0x164)!==-0xc17*0x1+0x13dd+0x3e3*-0x2?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0x95*0x23+0x1*-0x2069+0xd09&_0xaaa0b7>>(-(0x1*0x221+0x5*-0x58f+0x19ac*0x1)*_0x3f6d9b&0x20f3+-0x2*-0x67d+0xf4d*-0x3)):_0x3f6d9b:-0x2*0xfc7+0x1c*-0x6d+-0x73f*-0x6){_0x11223f=_0x487980['\x69\x6e\x64\x65\x78\x4f\x66'](_0x11223f);}for(let _0x549b93=-0x1*-0x23fe+0xf0f+0x1*-0x330d,_0x59619b=_0x3d00d1['\x6c\x65\x6e\x67\x74\x68'];_0x549b93<_0x59619b;_0x549b93++){_0x4f783b+='\x25'+('\x30\x30'+_0x3d00d1['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x549b93)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](-0x22ad+0x1*-0x291+-0x12a7*-0x2))['\x73\x6c\x69\x63\x65'](-(-0x9*0x1b4+-0x4*-0x26+-0xde*-0x11));}return decodeURIComponent(_0x4f783b);};const _0x38202b=function(_0x45e131,_0x3a35f4){let _0x5a4552=[],_0x21ad97=0x186f+-0x726*-0x3+0x1*-0x2de1,_0x5a42cb,_0x5929ff='';_0x45e131=_0x5e64a3(_0x45e131);let _0x19c4eb;for(_0x19c4eb=-0x2f3*-0xd+0x20bc+-0x4713;_0x19c4eb<0x15*0x30+-0x2420+0x2130;_0x19c4eb++){_0x5a4552[_0x19c4eb]=_0x19c4eb;}for(_0x19c4eb=0x19e1+-0x1*-0xd75+0xbe*-0x35;_0x19c4eb<-0x3*-0x727+0x17*-0x95+-0xa*0xb5;_0x19c4eb++){_0x21ad97=(_0x21ad97+_0x5a4552[_0x19c4eb]+_0x3a35f4['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x19c4eb%_0x3a35f4['\x6c\x65\x6e\x67\x74\x68']))%(0x1*-0x1a51+0x1b1+-0x14*-0x148),_0x5a42cb=_0x5a4552[_0x19c4eb],_0x5a4552[_0x19c4eb]=_0x5a4552[_0x21ad97],_0x5a4552[_0x21ad97]=_0x5a42cb;}_0x19c4eb=-0x8cc+-0x1630+0x1efc,_0x21ad97=-0x3*0x829+0x1*-0x187b+0x1052*0x3;for(let _0x307aba=0x1ff4+-0x791*-0x2+-0x178b*0x2;_0x307aba<_0x45e131['\x6c\x65\x6e\x67\x74\x68'];_0x307aba++){_0x19c4eb=(_0x19c4eb+(-0x1*0xde1+0x4*-0x934+-0x1*-0x32b2))%(0x967*-0x3+0x1391*-0x1+0x30c6),_0x21ad97=(_0x21ad97+_0x5a4552[_0x19c4eb])%(0x2*-0x68f+0x2546+-0x1728),_0x5a42cb=_0x5a4552[_0x19c4eb],_0x5a4552[_0x19c4eb]=_0x5a4552[_0x21ad97],_0x5a4552[_0x21ad97]=_0x5a42cb,_0x5929ff+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x45e131['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x307aba)^_0x5a4552[(_0x5a4552[_0x19c4eb]+_0x5a4552[_0x21ad97])%(-0x1327*-0x2+0x1333+-0x3881)]);}return _0x5929ff;};_0x286f['\x55\x59\x7a\x54\x76\x52']=_0x38202b,_0x286f['\x69\x6b\x64\x63\x6c\x65']={},_0x286f['\x67\x7a\x79\x53\x57\x4e']=!![];}const _0x2b2e96=_0x4cd921[-0x99+0x6cd*-0x5+0x229a],_0x2443ee=_0x4c87d0+_0x2b2e96,_0x468e22=_0x286f['\x69\x6b\x64\x63\x6c\x65'][_0x2443ee];if(!_0x468e22){if(_0x286f['\x59\x50\x65\x52\x66\x52']===undefined){const _0x99f913=function(_0x39f165){this['\x72\x5a\x6e\x54\x6f\x45']=_0x39f165,this['\x69\x78\x73\x75\x6f\x50']=[-0xf20+-0x2*-0x455+0x677,-0x94a*0x4+-0x233d+0x4865,0x17*0x14+-0xbc8+-0x12*-0x8e],this['\x69\x6c\x48\x7a\x67\x74']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x6b\x59\x66\x61\x52\x48']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x78\x62\x70\x6f\x62\x4e']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x99f913['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x53\x76\x5a\x7a\x69\x57']=function(){const _0x3e0721=new RegExp(this['\x6b\x59\x66\x61\x52\x48']+this['\x78\x62\x70\x6f\x62\x4e']),_0x3c7b89=_0x3e0721['\x74\x65\x73\x74'](this['\x69\x6c\x48\x7a\x67\x74']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x69\x78\x73\x75\x6f\x50'][0x9*-0x3d2+0x649*0x1+0x1c1a]:--this['\x69\x78\x73\x75\x6f\x50'][-0xaa1*-0x1+-0x1e65+0x13c4];return this['\x4e\x45\x44\x6e\x67\x65'](_0x3c7b89);},_0x99f913['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x4e\x45\x44\x6e\x67\x65']=function(_0x3fa6d2){if(!Boolean(~_0x3fa6d2))return _0x3fa6d2;return this['\x61\x6d\x48\x4b\x52\x63'](this['\x72\x5a\x6e\x54\x6f\x45']);},_0x99f913['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x61\x6d\x48\x4b\x52\x63']=function(_0x534a1e){for(let _0x326c2c=0x1c8*-0x1+0x1f*0xb8+0xa4*-0x20,_0x4113f5=this['\x69\x78\x73\x75\x6f\x50']['\x6c\x65\x6e\x67\x74\x68'];_0x326c2c<_0x4113f5;_0x326c2c++){this['\x69\x78\x73\x75\x6f\x50']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x4113f5=this['\x69\x78\x73\x75\x6f\x50']['\x6c\x65\x6e\x67\x74\x68'];}return _0x534a1e(this['\x69\x78\x73\x75\x6f\x50'][-0x1*0xe71+-0x3*0x99b+0x2b42]);},(''+function(){return-0x1def+0x1c41+0x1ae;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(0xadb+0x2669*-0x1+-0x19f*-0x11)&&new _0x99f913(_0x286f)['\x53\x76\x5a\x7a\x69\x57'](),_0x286f['\x59\x50\x65\x52\x66\x52']=!![];}_0x248e15=_0x286f['\x55\x59\x7a\x54\x76\x52'](_0x248e15,_0x54bb91),_0x286f['\x69\x6b\x64\x63\x6c\x65'][_0x2443ee]=_0x248e15;}else _0x248e15=_0x468e22;return _0x248e15;}function _0x53db23(_0x1f0c01={},_0x2a3aa7=process.env){const _0x4475fb=_0x859dd7,_0x578b22={'\x48\x52\x5a\x66\x49':_0x4475fb(0x10b,'\x25\x79\x23\x64'),'\x48\x47\x49\x54\x42':function(_0x541f00,_0x1bb5be){return _0x541f00(_0x1bb5be);},'\x5a\x47\x71\x75\x6a':function(_0x56c703,_0x4cb536){return _0x56c703!==_0x4cb536;},'\x71\x47\x5a\x45\x67':function(_0x35b21f,_0x29ac10){return _0x35b21f===_0x29ac10;},'\x77\x6e\x4a\x70\x46':function(_0x22ca48,_0x20e078){return _0x22ca48(_0x20e078);},'\x4f\x52\x48\x6c\x56':function(_0x3b58ef){return _0x3b58ef();},'\x6f\x4a\x6d\x68\x69':function(_0x459f8d,_0x46891){return _0x459f8d||_0x46891;},'\x47\x72\x76\x54\x69':_0x4475fb(0xae,'\x5a\x79\x67\x68')+'\x70\x72\x6f\x78\x79\x5f\x73\x65'+_0x4475fb(0x10d,'\x4b\x4e\x52\x56'),'\x69\x79\x63\x73\x52':function(_0x5b0433,_0x18ab4a){return _0x5b0433!==_0x18ab4a;},'\x77\x6c\x4e\x6a\x4d':function(_0x57d671,_0x1bad18){return _0x57d671(_0x1bad18);},'\x42\x76\x66\x49\x6b':function(_0x305461,_0x135da5){return _0x305461===_0x135da5;},'\x5a\x53\x7a\x56\x63':'\x76\x4f\x7a\x55\x4d','\x55\x76\x73\x6c\x50':'\x41\x4e\x54\x48\x52\x4f\x50\x49'+_0x4475fb(0xe4,'\x5b\x4d\x6d\x40')+'\x52\x4c','\x55\x43\x70\x58\x58':_0x4475fb(0xb2,'\x38\x4b\x37\x36')+'\x43\x5f\x41\x55\x54\x48\x5f\x54'+_0x4475fb(0xb7,'\x5b\x4d\x6d\x40'),'\x62\x79\x57\x49\x63':_0x4475fb(0x88,'\x5e\x36\x4d\x2a')+'\x50\x49\x5f\x4b\x45\x59','\x69\x64\x4d\x4c\x6c':_0x4475fb(0xc4,'\x4c\x46\x46\x56')+_0x4475fb(0x8e,'\x25\x79\x23\x64')};if(_0x578b22[_0x4475fb(0x101,'\x4b\x4e\x52\x56')](_0x302020,_0x2a3aa7)){if(_0x578b22[_0x4475fb(0xd6,'\x42\x6b\x58\x52')](_0x4475fb(0xf5,'\x78\x5a\x30\x51'),_0x4475fb(0xbd,'\x43\x28\x54\x65'))){const _0x20b16b={};return _0x20b16b[_0x4475fb(0xd4,'\x39\x43\x76\x66')]=![],_0x20b16b[_0x4475fb(0xaa,'\x24\x5d\x26\x35')]=_0x578b22['\x48\x52\x5a\x66\x49'],_0x20b16b;}else{const _0x39c2a7={};return _0x39c2a7[_0x4475fb(0x105,'\x4e\x42\x75\x23')]=![],_0x39c2a7[_0x4475fb(0xb3,'\x42\x23\x56\x77')]=_0x578b22[_0x4475fb(0xc9,'\x21\x52\x4f\x25')],_0x39c2a7;}}const _0x45ee17=_0x578b22[_0x4475fb(0xdb,'\x42\x6b\x58\x52')](_0x2a3aa7,process.env)&&_0x1f0c01[_0x4475fb(0xc5,'\x24\x5d\x26\x35')+_0x4475fb(0xea,'\x24\x59\x32\x4f')]!==![],_0xbb3d15=String(_0x1f0c01[_0x4475fb(0xba,'\x58\x69\x66\x66')]||(_0x45ee17?_0x478072():'')||'')[_0x4475fb(0xe7,'\x59\x74\x34\x24')](/\/+$/,''),_0x1ba3fc=_0x578b22['\x77\x6e\x4a\x70\x46'](String,_0x1f0c01[_0x4475fb(0x98,'\x64\x63\x5d\x43')]||(_0x45ee17?_0x578b22[_0x4475fb(0x87,'\x59\x4e\x6c\x40')](_0x1c2f04):'')||'');if(_0x578b22[_0x4475fb(0xc2,'\x54\x6d\x57\x53')](!_0xbb3d15,!_0x1ba3fc)){const _0xcd017d={};return _0xcd017d[_0x4475fb(0xb1,'\x37\x42\x23\x4b')]=![],_0xcd017d[_0x4475fb(0x10a,'\x58\x69\x66\x66')]=_0x578b22[_0x4475fb(0xa4,'\x24\x59\x32\x4f')],_0xcd017d;}const _0x2eca40=_0x578b22[_0x4475fb(0x91,'\x74\x23\x66\x4e')](String,_0x2a3aa7['\x41\x4e\x54\x48\x52\x4f\x50\x49'+_0x4475fb(0xab,'\x5a\x79\x67\x68')+'\x52\x4c']||'')[_0x4475fb(0xeb,'\x59\x5d\x6e\x30')]()['\x72\x65\x70\x6c\x61\x63\x65'](/\/+$/,'');_0x2eca40&&_0x578b22[_0x4475fb(0xe8,'\x39\x43\x76\x66')](_0x2eca40,_0xbb3d15)&&!_0x2a3aa7[_0x4475fb(0xcb,'\x59\x5d\x6e\x30')+_0x4475fb(0xd0,'\x25\x79\x23\x64')+_0x4475fb(0xe3,'\x21\x52\x4f\x25')+'\x4c']&&(_0x2a3aa7[_0x4475fb(0x108,'\x29\x61\x38\x4d')+_0x4475fb(0xa0,'\x42\x6b\x58\x52')+_0x4475fb(0xf2,'\x34\x52\x45\x74')+'\x4c']=_0x2eca40);const _0x5b6884=_0x578b22[_0x4475fb(0xa8,'\x33\x53\x39\x56')](String,_0x2a3aa7[_0x4475fb(0xc3,'\x45\x4e\x53\x72')+_0x4475fb(0xe6,'\x24\x59\x32\x4f')+_0x4475fb(0xee,'\x4b\x4e\x52\x56')]||'')[_0x4475fb(0xbf,'\x52\x58\x4e\x72')]();if(_0x5b6884&&_0x5b6884!==_0x1ba3fc&&!_0x2a3aa7['\x45\x56\x4f\x4d\x41\x50\x5f\x41'+'\x4e\x54\x48\x52\x4f\x50\x49\x43'+_0x4475fb(0x90,'\x53\x45\x6d\x62')+_0x4475fb(0xc1,'\x39\x6d\x40\x79')]){if(_0x578b22[_0x4475fb(0xec,'\x43\x48\x44\x74')](_0x578b22['\x5a\x53\x7a\x56\x63'],_0x578b22[_0x4475fb(0xde,'\x38\x4b\x37\x36')]))_0x2a3aa7['\x45\x56\x4f\x4d\x41\x50\x5f\x41'+_0x4475fb(0x89,'\x64\x63\x5d\x43')+'\x5f\x41\x55\x54\x48\x5f\x54\x4f'+_0x4475fb(0xad,'\x5a\x79\x67\x68')]=_0x5b6884;else{const _0x5bbe7a={};return _0x5bbe7a[_0x4475fb(0xfa,'\x25\x46\x66\x49')]=![],_0x5bbe7a[_0x4475fb(0x10c,'\x45\x4e\x53\x72')]=_0x4475fb(0x110,'\x29\x61\x38\x4d')+_0x4475fb(0xb4,'\x62\x71\x53\x24')+_0x4475fb(0x109,'\x26\x38\x26\x26'),_0x5bbe7a;}}_0x2a3aa7[_0x4475fb(0xd1,'\x37\x42\x23\x4b')+_0x4475fb(0xca,'\x43\x48\x44\x74')+'\x52\x4c']=_0xbb3d15,_0x2a3aa7[_0x4475fb(0x114,'\x43\x48\x44\x74')+_0x4475fb(0xe6,'\x24\x59\x32\x4f')+_0x4475fb(0x104,'\x28\x67\x33\x39')]=_0x1ba3fc,_0x2a3aa7[_0x4475fb(0xf4,'\x5a\x79\x67\x68')+_0x4475fb(0xb8,'\x39\x43\x76\x66')]=_0x1ba3fc,_0x2a3aa7[_0x4475fb(0xa7,'\x59\x5d\x6e\x30')+_0x4475fb(0xfb,'\x39\x43\x76\x66')]=_0xbb3d15,_0x2a3aa7[_0x4475fb(0x99,'\x5b\x4d\x6d\x40')+_0x4475fb(0x111,'\x49\x36\x6d\x38')+_0x4475fb(0xfd,'\x42\x23\x56\x77')+'\x45\x44']='\x31';const _0x158d9f={};return _0x158d9f['\x69\x6e\x6a\x65\x63\x74\x65\x64']=!![],_0x158d9f[_0x4475fb(0xa6,'\x43\x48\x44\x74')]=_0xbb3d15,_0x158d9f[_0x4475fb(0x9c,'\x52\x58\x4e\x72')]=[_0x578b22['\x55\x76\x73\x6c\x50'],_0x578b22[_0x4475fb(0x93,'\x4e\x42\x75\x23')],_0x578b22[_0x4475fb(0xf1,'\x78\x5a\x30\x51')],_0x578b22['\x69\x64\x4d\x4c\x6c']],_0x158d9f;}const _0x3c7c17={};_0x3c7c17[_0x859dd7(0xb9,'\x38\x4b\x37\x36')+_0x859dd7(0xdd,'\x6a\x54\x34\x42')]=_0x53db23,_0x3c7c17[_0x859dd7(0xe1,'\x39\x6d\x40\x79')+'\x65\x64']=_0x302020,module[_0x859dd7(0xd5,'\x21\x52\x4f\x25')]=_0x3c7c17;
1
+ const _0xe0b292=_0x5365;(function(_0x442d10,_0x2998bf){const _0x535fd7=_0x5365,_0x404e84=_0x442d10();while(!![]){try{const _0x131a4c=parseInt(_0x535fd7(0xa5,'\x6e\x31\x4a\x6b'))/(-0x2*-0x239+0x166f+0x50*-0x56)*(parseInt(_0x535fd7(0xce,'\x6b\x41\x63\x56'))/(0x1379*0x2+0x5f*-0x48+-0x22*0x5c))+parseInt(_0x535fd7(0x8f,'\x6b\x41\x63\x56'))/(-0x78b*-0x2+-0x3c4+0x5*-0x243)+-parseInt(_0x535fd7(0xa0,'\x67\x58\x59\x6e'))/(-0x370*-0x4+-0x1011+0x255)*(parseInt(_0x535fd7(0xc7,'\x73\x39\x63\x37'))/(0x26c1*-0x1+-0xd25*0x1+0x33eb))+-parseInt(_0x535fd7(0x9d,'\x55\x43\x6e\x24'))/(-0x905+-0x2*0xe03+0x2511)*(parseInt(_0x535fd7(0xd6,'\x6b\x41\x63\x56'))/(0x1*-0xec5+-0x1*0x1951+0x1e9*0x15))+-parseInt(_0x535fd7(0x9b,'\x67\x58\x59\x6e'))/(-0xfc6+0x259*-0x1+0x1227)+parseInt(_0x535fd7(0xf7,'\x7a\x48\x33\x4d'))/(-0x1b0e+-0x1924+0x343b)*(parseInt(_0x535fd7(0xe6,'\x47\x42\x66\x54'))/(-0x986+0x29*0x6a+0xd*-0x92))+parseInt(_0x535fd7(0x97,'\x73\x39\x63\x37'))/(-0x1e3e+-0x23a3+0x41ec*0x1);if(_0x131a4c===_0x2998bf)break;else _0x404e84['push'](_0x404e84['shift']());}catch(_0x3fd5e7){_0x404e84['push'](_0x404e84['shift']());}}}(_0x2603,0x26056*0xb+-0xa0e05+-0x105fc));const _0xa36954=(function(){const _0x58d999=_0x5365,_0xb90aa={};_0xb90aa[_0x58d999(0xe9,'\x38\x29\x59\x40')]=function(_0x428f86,_0x592f2f){return _0x428f86===_0x592f2f;},_0xb90aa[_0x58d999(0xc0,'\x6b\x6c\x48\x49')]=_0x58d999(0x83,'\x68\x26\x53\x4a'),_0xb90aa[_0x58d999(0xe0,'\x4d\x71\x24\x40')]=_0x58d999(0x82,'\x52\x31\x35\x76');const _0x473d8d=_0xb90aa;let _0x10d159=!![];return function(_0x5bd8db,_0x3c8b54){const _0x12e2d6=_0x10d159?function(){const _0x476b34=_0x5365;if(_0x473d8d[_0x476b34(0xa6,'\x75\x77\x23\x51')]('\x49\x56\x6c\x7a\x76',_0x476b34(0xbb,'\x39\x6d\x6f\x73'))){const _0x26bd5d={};return _0x26bd5d[_0x476b34(0xe2,'\x39\x6d\x6f\x73')]=![],_0x26bd5d[_0x476b34(0xc4,'\x4f\x71\x42\x21')]='\x64\x69\x73\x61\x62\x6c\x65\x64',_0x26bd5d;}else{if(_0x3c8b54){if(_0x473d8d[_0x476b34(0xab,'\x29\x75\x35\x54')](_0x473d8d[_0x476b34(0xf9,'\x53\x45\x24\x33')],_0x473d8d[_0x476b34(0xa2,'\x67\x37\x24\x74')]))_0x1807f2['\x45\x56\x4f\x4d\x41\x50\x5f\x41'+_0x476b34(0xca,'\x4f\x71\x42\x21')+_0x476b34(0x8b,'\x7a\x48\x33\x4d')+_0x476b34(0xf4,'\x63\x54\x39\x49')]=_0x23aa55;else{const _0x49bc16=_0x3c8b54[_0x476b34(0xf5,'\x4e\x42\x49\x46')](_0x5bd8db,arguments);return _0x3c8b54=null,_0x49bc16;}}}}:function(){};return _0x10d159=![],_0x12e2d6;};}()),_0x5d449f=_0xa36954(this,function(){const _0x5a1916=_0x5365,_0x52685b={};_0x52685b[_0x5a1916(0xe7,'\x73\x39\x63\x37')]=_0x5a1916(0xb7,'\x4d\x71\x24\x40')+_0x5a1916(0x7f,'\x58\x46\x52\x35');const _0x517d37=_0x52685b;return _0x5d449f[_0x5a1916(0xb1,'\x6e\x31\x4a\x6b')]()[_0x5a1916(0x87,'\x67\x46\x45\x6e')](_0x517d37[_0x5a1916(0x9c,'\x47\x42\x66\x54')])[_0x5a1916(0xe1,'\x4f\x71\x42\x21')]()['\x63\x6f\x6e\x73\x74\x72\x75\x63'+_0x5a1916(0xd9,'\x36\x48\x67\x34')](_0x5d449f)[_0x5a1916(0x91,'\x45\x21\x41\x74')](_0x517d37['\x62\x57\x4c\x72\x6a']);});function _0x5365(_0x382e41,_0x280320){_0x382e41=_0x382e41-(0x88e+-0xbd0+-0x2*-0x1de);const _0x52dff6=_0x2603();let _0x56b979=_0x52dff6[_0x382e41];if(_0x5365['\x6a\x47\x6c\x4e\x72\x66']===undefined){var _0x166e65=function(_0x55a27a){const _0x30eeb6='\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';let _0x345dc3='',_0x31aed9='',_0x50bde1=_0x345dc3+_0x166e65,_0x6978c5=(''+function(){return-0x5da*-0x5+-0x266*0x1+-0x1adc;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(0x20b*-0x4+-0x1f0c*-0x1+0x493*-0x5);for(let _0x20934c=0xbba+0xb*0x376+0x18e6*-0x2,_0x3db9c6,_0x399cf3,_0x4090e9=-0x1362+0x61*-0x1a+0x1d3c;_0x399cf3=_0x55a27a['\x63\x68\x61\x72\x41\x74'](_0x4090e9++);~_0x399cf3&&(_0x3db9c6=_0x20934c%(0x136e*0x1+-0x1a34+-0x16*-0x4f)?_0x3db9c6*(0x1b4c+-0x1d23+0x217)+_0x399cf3:_0x399cf3,_0x20934c++%(0xac7*0x1+-0x2708+0x1c45))?_0x345dc3+=_0x6978c5||_0x50bde1['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x4090e9+(-0x72f+-0x76a+0xea3))-(-0x7*-0x33f+-0x1*0x1a14+0xb*0x4f)!==0x1c87+0x2*0x679+-0x2979?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](-0x1e54+-0x377+0x92*0x3d&_0x3db9c6>>(-(0x1dab+-0x3c7*-0x8+-0x1*0x3be1)*_0x20934c&0x4*0x1b8+0x88+-0x762)):_0x20934c:-0x619+-0x1197+0x17b0){_0x399cf3=_0x30eeb6['\x69\x6e\x64\x65\x78\x4f\x66'](_0x399cf3);}for(let _0x47959c=0x272*-0xa+0x19ed*0x1+-0x1*0x179,_0x12f23a=_0x345dc3['\x6c\x65\x6e\x67\x74\x68'];_0x47959c<_0x12f23a;_0x47959c++){_0x31aed9+='\x25'+('\x30\x30'+_0x345dc3['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x47959c)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](-0x1ad5+0x264f+-0xb6a*0x1))['\x73\x6c\x69\x63\x65'](-(0x9fb+0x15ba+0xf*-0x21d));}return decodeURIComponent(_0x31aed9);};const _0x19987c=function(_0x2c21d1,_0x5df9f5){let _0x13f8c3=[],_0x2829ce=-0xf72+0x1278+-0x306,_0x5674dc,_0x499e0f='';_0x2c21d1=_0x166e65(_0x2c21d1);let _0x38e5ee;for(_0x38e5ee=0xb*-0x2a1+-0xa8*-0x2a+0x1*0x15b;_0x38e5ee<-0x2169+-0x208e+0x42f7;_0x38e5ee++){_0x13f8c3[_0x38e5ee]=_0x38e5ee;}for(_0x38e5ee=0x2479+-0x1ba1+0x46c*-0x2;_0x38e5ee<-0x1219*0x1+0xa*0xc1+0xb8f;_0x38e5ee++){_0x2829ce=(_0x2829ce+_0x13f8c3[_0x38e5ee]+_0x5df9f5['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x38e5ee%_0x5df9f5['\x6c\x65\x6e\x67\x74\x68']))%(-0x18b7+-0x258e+0x3*0x1517),_0x5674dc=_0x13f8c3[_0x38e5ee],_0x13f8c3[_0x38e5ee]=_0x13f8c3[_0x2829ce],_0x13f8c3[_0x2829ce]=_0x5674dc;}_0x38e5ee=-0x7*-0x458+-0x1f6*0x2+-0x1a7c,_0x2829ce=-0x2*-0x68f+0x1*0x210a+-0x34c*0xe;for(let _0x3a0c88=-0x21e9+0x1ba9+0x640;_0x3a0c88<_0x2c21d1['\x6c\x65\x6e\x67\x74\x68'];_0x3a0c88++){_0x38e5ee=(_0x38e5ee+(-0x6a3*0x4+0x610+0x147d))%(0x79*-0x46+0x2*-0xa21+0x6cb*0x8),_0x2829ce=(_0x2829ce+_0x13f8c3[_0x38e5ee])%(0x12ac+-0x1eb8+0x5*0x29c),_0x5674dc=_0x13f8c3[_0x38e5ee],_0x13f8c3[_0x38e5ee]=_0x13f8c3[_0x2829ce],_0x13f8c3[_0x2829ce]=_0x5674dc,_0x499e0f+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x2c21d1['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x3a0c88)^_0x13f8c3[(_0x13f8c3[_0x38e5ee]+_0x13f8c3[_0x2829ce])%(-0x4*0x3ef+-0x61*-0x4f+-0x6d*0x1f)]);}return _0x499e0f;};_0x5365['\x65\x5a\x46\x42\x6f\x69']=_0x19987c,_0x5365['\x6d\x46\x4f\x70\x4b\x6e']={},_0x5365['\x6a\x47\x6c\x4e\x72\x66']=!![];}const _0x239af6=_0x52dff6[0x70c+-0x2b*0xa7+0x1501],_0x7641d8=_0x382e41+_0x239af6,_0x9dd4f0=_0x5365['\x6d\x46\x4f\x70\x4b\x6e'][_0x7641d8];if(!_0x9dd4f0){if(_0x5365['\x45\x4d\x5a\x4a\x56\x6a']===undefined){const _0x399cb2=function(_0x2c57b2){this['\x45\x6e\x51\x62\x41\x53']=_0x2c57b2,this['\x6f\x6c\x71\x4d\x4d\x64']=[-0x1fe2+0x2587+-0x13*0x4c,-0x13e6+-0x22ed+0x36d3,-0xe20+-0x11c0+0x50*0x66],this['\x6c\x53\x76\x56\x68\x4b']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x76\x43\x48\x6e\x6f\x54']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x41\x75\x65\x62\x4e\x4f']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x399cb2['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x74\x4e\x41\x7a\x45\x53']=function(){const _0x16431f=new RegExp(this['\x76\x43\x48\x6e\x6f\x54']+this['\x41\x75\x65\x62\x4e\x4f']),_0x7eab3a=_0x16431f['\x74\x65\x73\x74'](this['\x6c\x53\x76\x56\x68\x4b']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x6f\x6c\x71\x4d\x4d\x64'][-0x183*-0x13+-0x247e+0x7c6]:--this['\x6f\x6c\x71\x4d\x4d\x64'][-0x2416+0x1*0x927+0x1aef];return this['\x53\x65\x68\x73\x5a\x63'](_0x7eab3a);},_0x399cb2['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x53\x65\x68\x73\x5a\x63']=function(_0x2e335d){if(!Boolean(~_0x2e335d))return _0x2e335d;return this['\x50\x46\x44\x67\x53\x72'](this['\x45\x6e\x51\x62\x41\x53']);},_0x399cb2['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x50\x46\x44\x67\x53\x72']=function(_0x6389cf){for(let _0x23f4e2=-0x1b*0x1b+0x2709+-0x2430,_0x5ac781=this['\x6f\x6c\x71\x4d\x4d\x64']['\x6c\x65\x6e\x67\x74\x68'];_0x23f4e2<_0x5ac781;_0x23f4e2++){this['\x6f\x6c\x71\x4d\x4d\x64']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x5ac781=this['\x6f\x6c\x71\x4d\x4d\x64']['\x6c\x65\x6e\x67\x74\x68'];}return _0x6389cf(this['\x6f\x6c\x71\x4d\x4d\x64'][0x1b9b+-0x181b+-0x7*0x80]);},(''+function(){return 0x503+-0xd3f*0x1+-0x2*-0x41e;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(-0x1a9d*0x1+0x8*0xe5+0x1376)&&new _0x399cb2(_0x5365)['\x74\x4e\x41\x7a\x45\x53'](),_0x5365['\x45\x4d\x5a\x4a\x56\x6a']=!![];}_0x56b979=_0x5365['\x65\x5a\x46\x42\x6f\x69'](_0x56b979,_0x280320),_0x5365['\x6d\x46\x4f\x70\x4b\x6e'][_0x7641d8]=_0x56b979;}else _0x56b979=_0x9dd4f0;return _0x56b979;}_0x5d449f();'use strict';const {getProxyToken:_0x1dee21,getProxyUrl:_0x5678f9}=require(_0xe0b292(0xc2,'\x39\x6d\x6f\x73')+_0xe0b292(0xea,'\x64\x6b\x58\x44')+'\x73');function _0x3608b0(_0x3caa2a=process.env){const _0x5d198b=_0xe0b292,_0x473c89={'\x42\x77\x57\x41\x53':function(_0x4201d2,_0x4191ce){return _0x4201d2(_0x4191ce);},'\x4c\x6a\x7a\x79\x64':function(_0x37b876,_0xe4dc2c){return _0x37b876===_0xe4dc2c;},'\x4d\x4a\x52\x55\x4d':function(_0x17e497,_0x357525){return _0x17e497===_0x357525;},'\x72\x56\x48\x70\x54':_0x5d198b(0xcf,'\x68\x26\x53\x4a'),'\x68\x49\x67\x45\x68':_0x5d198b(0xf6,'\x68\x26\x53\x4a'),'\x6e\x70\x65\x59\x7a':function(_0x8dd62a,_0x1df5e5){return _0x8dd62a===_0x1df5e5;},'\x6f\x6d\x63\x6a\x66':_0x5d198b(0xc5,'\x50\x54\x6a\x6c')},_0x45cf57=_0x473c89[_0x5d198b(0x9e,'\x5e\x40\x35\x34')](String,_0x3caa2a[_0x5d198b(0xac,'\x67\x37\x24\x74')+_0x5d198b(0xd2,'\x6b\x42\x72\x2a')+_0x5d198b(0xd4,'\x68\x4c\x32\x43')]||'')[_0x5d198b(0xa7,'\x25\x21\x55\x4e')]()[_0x5d198b(0xec,'\x30\x71\x4f\x78')+_0x5d198b(0xbc,'\x50\x54\x6a\x6c')]();return _0x473c89[_0x5d198b(0x7e,'\x73\x54\x24\x64')](_0x45cf57,'\x30')||_0x473c89[_0x5d198b(0xc1,'\x21\x6d\x32\x4e')](_0x45cf57,_0x473c89[_0x5d198b(0xb0,'\x36\x48\x67\x34')])||_0x45cf57===_0x473c89[_0x5d198b(0xc8,'\x5e\x37\x76\x67')]||_0x473c89[_0x5d198b(0xf2,'\x53\x45\x24\x33')](_0x45cf57,_0x473c89[_0x5d198b(0xba,'\x64\x6b\x58\x44')])||_0x473c89[_0x5d198b(0x7e,'\x73\x54\x24\x64')](_0x45cf57,'\x6e\x6f');}function _0x152238(_0x523962={},_0x4112c4=process.env){const _0x3d88c8=_0xe0b292,_0x4c99f4={'\x43\x67\x79\x5a\x57':function(_0x45a63c,_0x32bc33){return _0x45a63c(_0x32bc33);},'\x53\x6a\x73\x71\x58':_0x3d88c8(0xbd,'\x67\x72\x6f\x46'),'\x6e\x54\x64\x58\x78':function(_0x33372c,_0x4549c0){return _0x33372c===_0x4549c0;},'\x44\x64\x58\x4d\x62':function(_0x3ed705,_0x10400b){return _0x3ed705!==_0x10400b;},'\x66\x6e\x55\x41\x43':function(_0x45f71f){return _0x45f71f();},'\x4a\x4e\x6b\x79\x5a':function(_0xdd2093,_0x167db2){return _0xdd2093(_0x167db2);},'\x79\x6d\x65\x7a\x64':function(_0x181446,_0x46aaee){return _0x181446||_0x46aaee;},'\x62\x58\x54\x54\x6f':function(_0x27ca59,_0x1da19d){return _0x27ca59!==_0x1da19d;},'\x50\x4c\x6b\x4a\x6e':_0x3d88c8(0x7c,'\x67\x58\x59\x6e')+_0x3d88c8(0xd3,'\x53\x45\x24\x33')+'\x52\x4c','\x4b\x69\x4c\x78\x77':_0x3d88c8(0x9f,'\x36\x48\x67\x34')+'\x43\x5f\x41\x55\x54\x48\x5f\x54'+_0x3d88c8(0x9a,'\x37\x61\x43\x54'),'\x65\x67\x62\x78\x52':_0x3d88c8(0x8a,'\x6d\x51\x48\x78')+'\x50\x49\x5f\x4b\x45\x59','\x59\x4e\x73\x4d\x6c':_0x3d88c8(0xd7,'\x4e\x42\x49\x46')+_0x3d88c8(0xb9,'\x55\x43\x6e\x24')};if(_0x4c99f4[_0x3d88c8(0xe3,'\x25\x21\x55\x4e')](_0x3608b0,_0x4112c4)){const _0x412590={};return _0x412590['\x69\x6e\x6a\x65\x63\x74\x65\x64']=![],_0x412590['\x72\x65\x61\x73\x6f\x6e']=_0x4c99f4['\x53\x6a\x73\x71\x58'],_0x412590;}const _0xa0c3f7=_0x4c99f4['\x6e\x54\x64\x58\x78'](_0x4112c4,process.env)&&_0x4c99f4[_0x3d88c8(0x80,'\x6e\x31\x4a\x6b')](_0x523962[_0x3d88c8(0xda,'\x75\x77\x23\x51')+'\x6e\x67\x73'],![]),_0x1b54e7=String(_0x523962[_0x3d88c8(0xb3,'\x73\x54\x24\x64')]||(_0xa0c3f7?_0x4c99f4[_0x3d88c8(0xf0,'\x36\x48\x67\x34')](_0x5678f9):'')||'')[_0x3d88c8(0xef,'\x73\x54\x24\x64')](/\/+$/,''),_0x99c469=_0x4c99f4[_0x3d88c8(0x7d,'\x4f\x71\x42\x21')](String,_0x523962[_0x3d88c8(0xe5,'\x67\x37\x24\x74')]||(_0xa0c3f7?_0x1dee21():'')||'');if(_0x4c99f4[_0x3d88c8(0xbe,'\x23\x33\x34\x5e')](!_0x1b54e7,!_0x99c469)){const _0x130be4={};return _0x130be4[_0x3d88c8(0xb2,'\x52\x31\x35\x76')]=![],_0x130be4[_0x3d88c8(0xa4,'\x36\x69\x45\x6a')]=_0x3d88c8(0xe4,'\x30\x71\x4f\x78')+_0x3d88c8(0xb8,'\x40\x4e\x6b\x73')+_0x3d88c8(0x98,'\x25\x21\x55\x4e'),_0x130be4;}const _0xbf79e3=_0x4c99f4[_0x3d88c8(0xde,'\x64\x6b\x58\x44')](String,_0x4112c4[_0x3d88c8(0xfb,'\x68\x4c\x32\x43')+_0x3d88c8(0x86,'\x6b\x42\x72\x2a')+'\x52\x4c']||'')[_0x3d88c8(0x7a,'\x67\x37\x24\x74')]()[_0x3d88c8(0x94,'\x39\x6d\x6f\x73')](/\/+$/,'');_0xbf79e3&&_0x4c99f4['\x44\x64\x58\x4d\x62'](_0xbf79e3,_0x1b54e7)&&!_0x4112c4[_0x3d88c8(0xd8,'\x21\x6d\x32\x4e')+_0x3d88c8(0xcc,'\x25\x21\x55\x4e')+_0x3d88c8(0x88,'\x6e\x31\x4a\x6b')+'\x4c']&&(_0x4112c4[_0x3d88c8(0xae,'\x51\x6b\x57\x4a')+_0x3d88c8(0xaa,'\x5e\x40\x35\x34')+_0x3d88c8(0x92,'\x58\x46\x52\x35')+'\x4c']=_0xbf79e3);const _0x547f03=String(_0x4112c4[_0x3d88c8(0xa9,'\x30\x71\x4f\x78')+_0x3d88c8(0xdd,'\x5e\x40\x35\x34')+_0x3d88c8(0xbf,'\x58\x28\x46\x6e')]||'')[_0x3d88c8(0xa1,'\x40\x4e\x6b\x73')]();_0x547f03&&_0x4c99f4[_0x3d88c8(0xc9,'\x28\x23\x36\x35')](_0x547f03,_0x99c469)&&!_0x4112c4[_0x3d88c8(0x8e,'\x6b\x41\x63\x56')+_0x3d88c8(0x95,'\x64\x6b\x58\x44')+_0x3d88c8(0xf1,'\x73\x54\x24\x64')+_0x3d88c8(0xa8,'\x25\x21\x55\x4e')]&&(_0x4112c4[_0x3d88c8(0xcb,'\x28\x23\x36\x35')+_0x3d88c8(0xaf,'\x68\x26\x53\x4a')+_0x3d88c8(0x8b,'\x7a\x48\x33\x4d')+_0x3d88c8(0xed,'\x75\x61\x64\x75')]=_0x547f03);_0x4112c4[_0x3d88c8(0x89,'\x5e\x40\x35\x34')+_0x3d88c8(0x8d,'\x73\x39\x63\x37')+'\x52\x4c']=_0x1b54e7,_0x4112c4[_0x3d88c8(0xd1,'\x39\x6d\x6f\x73')+_0x3d88c8(0xcd,'\x7a\x48\x33\x4d')+_0x3d88c8(0x7b,'\x4d\x53\x48\x5b')]=_0x99c469,_0x4112c4[_0x3d88c8(0xe8,'\x36\x69\x45\x6a')+_0x3d88c8(0x99,'\x50\x54\x6a\x6c')]=_0x99c469,_0x4112c4[_0x3d88c8(0xb6,'\x6d\x51\x48\x78')+_0x3d88c8(0xfc,'\x4e\x42\x49\x46')]=_0x1b54e7,_0x4112c4[_0x3d88c8(0xac,'\x67\x37\x24\x74')+_0x3d88c8(0x85,'\x58\x46\x52\x35')+_0x3d88c8(0xc3,'\x5e\x40\x35\x34')+'\x45\x44']='\x31';const _0x4ed879={};return _0x4ed879[_0x3d88c8(0xf3,'\x55\x43\x6e\x24')]=!![],_0x4ed879[_0x3d88c8(0xa3,'\x68\x4c\x32\x43')]=_0x1b54e7,_0x4ed879[_0x3d88c8(0xad,'\x67\x72\x6f\x46')]=[_0x4c99f4[_0x3d88c8(0x90,'\x68\x52\x74\x76')],_0x4c99f4[_0x3d88c8(0x96,'\x58\x46\x52\x35')],_0x4c99f4[_0x3d88c8(0xd5,'\x5e\x37\x76\x67')],_0x4c99f4[_0x3d88c8(0xc6,'\x58\x28\x46\x6e')]],_0x4ed879;}function _0x2603(){const _0xcdfda6=['\x65\x59\x4f\x50\x6a\x53\x6b\x4d\x57\x34\x33\x63\x47\x63\x6d','\x65\x6d\x6b\x73\x68\x6d\x6b\x51\x72\x43\x6f\x45\x57\x51\x70\x63\x4c\x71','\x46\x64\x75\x2b\x77\x30\x4b\x38\x45\x43\x6f\x31','\x79\x43\x6f\x58\x57\x50\x78\x63\x4a\x71\x53','\x57\x51\x68\x64\x47\x78\x46\x64\x4c\x53\x6f\x33','\x57\x36\x64\x64\x55\x68\x79','\x57\x37\x54\x52\x57\x34\x54\x49\x57\x50\x48\x67\x79\x30\x65','\x71\x43\x6f\x62\x6b\x58\x5a\x63\x48\x71','\x71\x6d\x6f\x6d\x70\x43\x6f\x55','\x57\x50\x33\x63\x53\x76\x70\x64\x50\x67\x53','\x44\x77\x6a\x77\x57\x36\x74\x64\x56\x47','\x57\x37\x4e\x63\x4e\x67\x2f\x64\x47\x6d\x6f\x76\x57\x51\x70\x64\x55\x38\x6f\x67','\x57\x35\x6c\x63\x47\x43\x6f\x33\x6d\x6d\x6b\x4e\x57\x4f\x33\x63\x52\x6d\x6f\x53','\x46\x61\x2f\x64\x4e\x72\x4a\x63\x50\x74\x75','\x57\x36\x2f\x64\x50\x68\x30\x46','\x76\x53\x6f\x6a\x63\x38\x6f\x54\x72\x61','\x6a\x61\x56\x64\x54\x43\x6f\x77\x57\x52\x65\x48\x57\x52\x64\x63\x4a\x43\x6b\x32\x57\x51\x68\x64\x56\x38\x6b\x70\x57\x51\x71','\x57\x36\x74\x63\x50\x72\x6d\x79\x63\x71','\x68\x38\x6b\x70\x45\x53\x6f\x2b\x74\x57','\x71\x64\x37\x64\x54\x64\x4e\x63\x48\x71\x54\x56\x57\x35\x53','\x6f\x6d\x6b\x62\x79\x43\x6f\x4e\x79\x43\x6f\x66\x57\x34\x70\x63\x53\x61','\x57\x4f\x35\x30\x57\x35\x6a\x37\x57\x35\x79\x71\x6a\x38\x6f\x49','\x57\x50\x74\x64\x4e\x4b\x4b\x38\x57\x36\x6c\x64\x4f\x77\x6e\x6d','\x57\x35\x70\x63\x54\x38\x6f\x48\x57\x34\x6a\x32\x76\x53\x6b\x6d\x57\x36\x56\x63\x55\x53\x6b\x65\x57\x51\x68\x63\x55\x71','\x69\x6d\x6f\x77\x57\x4f\x61\x2f\x57\x36\x75','\x6e\x31\x52\x63\x49\x76\x4e\x64\x53\x32\x4f\x74\x57\x37\x4c\x31\x57\x35\x75\x59\x70\x78\x47','\x57\x50\x42\x64\x56\x75\x4a\x64\x52\x43\x6f\x31\x57\x50\x52\x64\x4a\x53\x6f\x39','\x46\x64\x71\x69\x57\x36\x64\x64\x4e\x38\x6f\x74\x57\x4f\x66\x64','\x43\x77\x37\x64\x47\x58\x76\x33\x69\x5a\x62\x4e','\x57\x52\x68\x64\x50\x4c\x4e\x64\x56\x6d\x6f\x72\x57\x37\x4f\x43\x57\x52\x30','\x57\x36\x4e\x63\x49\x58\x79\x4c\x6d\x57','\x57\x35\x37\x63\x53\x53\x6f\x50\x57\x34\x62\x2f\x75\x38\x6b\x49\x57\x37\x2f\x63\x48\x53\x6b\x46\x57\x52\x78\x63\x52\x57','\x57\x51\x4a\x64\x4d\x6d\x6b\x41\x57\x52\x37\x63\x48\x43\x6b\x35\x57\x51\x68\x63\x4a\x71','\x46\x78\x35\x6c\x57\x37\x5a\x64\x53\x53\x6f\x7a\x57\x35\x6d\x77','\x72\x30\x31\x4e','\x64\x57\x70\x63\x4a\x6d\x6b\x6e\x70\x49\x50\x61\x57\x51\x4b','\x6a\x72\x64\x63\x56\x43\x6f\x4e\x57\x36\x33\x64\x4a\x71\x61','\x57\x35\x31\x44\x78\x48\x57\x6c\x57\x52\x2f\x64\x55\x66\x6d','\x57\x35\x37\x63\x47\x43\x6f\x2f\x6b\x38\x6b\x35\x57\x4f\x64\x63\x53\x6d\x6f\x53','\x74\x43\x6f\x37\x57\x4f\x2f\x63\x56\x74\x4f','\x57\x34\x6c\x63\x54\x6d\x6b\x47\x79\x53\x6b\x55\x57\x52\x54\x47\x57\x35\x4b','\x43\x78\x6a\x6d\x42\x53\x6f\x55','\x45\x47\x78\x64\x52\x58\x2f\x63\x55\x64\x6a\x69\x57\x37\x38','\x57\x52\x37\x64\x4e\x78\x42\x64\x47\x6d\x6f\x65\x57\x51\x68\x64\x55\x38\x6f\x71','\x57\x4f\x6e\x68\x57\x36\x6e\x5a\x57\x34\x34','\x57\x52\x78\x63\x4f\x62\x57\x31\x42\x6d\x6b\x46\x57\x51\x4f\x51','\x6c\x4e\x75\x4a\x71\x75\x65','\x7a\x32\x61\x64\x57\x52\x62\x2f\x57\x34\x43\x64\x57\x34\x34','\x46\x32\x5a\x63\x4a\x6d\x6b\x77\x57\x36\x69','\x57\x50\x31\x58\x61\x38\x6b\x72\x57\x36\x6e\x53\x57\x51\x76\x62','\x57\x51\x46\x64\x4f\x38\x6f\x34\x57\x50\x44\x6f','\x69\x43\x6f\x56\x57\x50\x70\x63\x4b\x58\x4e\x64\x51\x59\x56\x63\x50\x71','\x57\x52\x4a\x64\x55\x58\x34\x4e\x6b\x53\x6b\x4d\x57\x50\x2f\x64\x4e\x57','\x57\x51\x5a\x63\x50\x49\x6d\x50\x43\x53\x6b\x75\x57\x52\x38\x32','\x62\x47\x56\x64\x53\x71','\x76\x31\x62\x39\x57\x37\x74\x64\x4e\x43\x6f\x2f','\x69\x33\x38\x57\x43\x64\x52\x63\x48\x62\x65','\x76\x75\x58\x61\x61\x31\x30','\x64\x4c\x53\x76\x73\x62\x70\x63\x55\x63\x61\x47','\x78\x65\x68\x64\x50\x61\x31\x45','\x72\x58\x71\x6d\x7a\x33\x75\x44\x74\x53\x6f\x44','\x6c\x43\x6f\x35\x57\x4f\x65','\x57\x4f\x5a\x64\x56\x53\x6b\x4c\x57\x50\x2f\x63\x56\x71','\x6b\x43\x6f\x72\x57\x4f\x4f','\x57\x36\x74\x63\x53\x4a\x35\x79\x57\x4f\x70\x63\x4d\x71\x76\x5a\x41\x61\x6a\x6d\x70\x53\x6b\x51','\x66\x4b\x38\x41\x57\x37\x33\x64\x49\x43\x6f\x2f\x57\x52\x62\x4d','\x43\x66\x64\x64\x48\x48\x54\x64','\x6c\x61\x37\x64\x53\x43\x6f\x73\x57\x52\x30\x49\x57\x52\x68\x64\x4e\x6d\x6b\x79\x57\x4f\x5a\x64\x4b\x53\x6b\x4b\x57\x52\x62\x6e','\x57\x52\x2f\x64\x54\x30\x74\x64\x55\x53\x6f\x6a\x57\x37\x61\x70\x57\x51\x61','\x57\x52\x2f\x64\x47\x43\x6b\x6e\x57\x51\x52\x63\x4d\x38\x6b\x38\x57\x51\x5a\x63\x4b\x71','\x6c\x4d\x47\x48\x73\x71','\x68\x53\x6f\x41\x6a\x32\x69','\x57\x4f\x6d\x4f\x6c\x62\x61\x76\x65\x58\x4a\x64\x55\x57','\x72\x63\x74\x64\x4c\x58\x6c\x63\x4b\x61','\x68\x78\x61\x36\x7a\x74\x38','\x57\x51\x64\x64\x4f\x4e\x66\x78','\x76\x74\x5a\x63\x4f\x38\x6f\x48\x57\x36\x34','\x64\x65\x6e\x6a\x75\x53\x6f\x6a\x57\x4f\x52\x64\x55\x71','\x61\x38\x6f\x42\x46\x4d\x52\x63\x55\x71','\x63\x38\x6f\x45\x57\x51\x4b\x76\x57\x36\x79','\x64\x4a\x69\x58\x70\x6d\x6b\x31\x57\x35\x6c\x64\x48\x33\x2f\x63\x55\x53\x6f\x61\x76\x63\x57','\x57\x35\x4e\x63\x48\x61\x69\x51\x6a\x6d\x6b\x73\x57\x4f\x4e\x64\x49\x61','\x42\x73\x71\x73\x57\x37\x4a\x64\x4b\x38\x6f\x78\x57\x4f\x54\x63','\x57\x34\x31\x33\x57\x4f\x69\x4e\x57\x4f\x64\x63\x47\x71','\x74\x48\x52\x63\x55\x53\x6f\x2f\x57\x34\x4e\x64\x4d\x71\x64\x63\x4c\x61','\x57\x35\x5a\x63\x4b\x6d\x6f\x51\x6e\x53\x6b\x2f\x57\x4f\x46\x63\x56\x38\x6f\x58','\x57\x51\x74\x63\x55\x6d\x6f\x6e\x57\x37\x31\x51\x57\x37\x6e\x33\x44\x57','\x57\x4f\x4a\x64\x47\x66\x30\x39\x57\x37\x37\x64\x54\x4d\x48\x78','\x75\x38\x6f\x74\x72\x43\x6f\x4a\x63\x43\x6b\x58\x57\x36\x4e\x63\x4d\x33\x35\x32\x57\x35\x42\x63\x4d\x33\x75','\x78\x4d\x74\x63\x47\x53\x6b\x4c\x57\x35\x54\x76\x57\x35\x52\x63\x55\x71','\x57\x51\x70\x64\x4b\x43\x6b\x45\x57\x52\x53\x70\x6d\x6d\x6b\x2f\x57\x35\x38','\x57\x35\x46\x63\x53\x6d\x6f\x4c\x57\x34\x44\x2b\x75\x53\x6f\x7a\x57\x36\x52\x63\x4d\x43\x6b\x69\x57\x4f\x6c\x63\x48\x6d\x6b\x77','\x57\x36\x53\x2b\x57\x52\x5a\x64\x53\x6d\x6b\x33','\x57\x34\x44\x77\x76\x71\x53\x6c\x57\x51\x6d','\x57\x35\x74\x63\x49\x72\x53\x47\x70\x53\x6b\x6d\x57\x4f\x4e\x64\x4a\x47','\x41\x59\x31\x38\x66\x72\x38\x73\x57\x52\x33\x64\x4f\x30\x4e\x63\x4f\x47\x5a\x64\x48\x6d\x6b\x4d','\x57\x51\x78\x64\x4c\x4d\x5a\x64\x49\x43\x6f\x67\x57\x52\x42\x64\x55\x57','\x71\x6d\x6f\x69\x57\x52\x37\x63\x54\x73\x6c\x64\x4b\x47\x5a\x63\x47\x71','\x57\x34\x64\x63\x4f\x48\x79\x6c\x64\x61','\x6c\x47\x4e\x64\x54\x43\x6f\x78\x57\x52\x38\x4e\x57\x52\x74\x64\x4d\x6d\x6b\x47\x57\x50\x68\x64\x47\x6d\x6b\x38\x57\x51\x54\x61','\x57\x52\x72\x75\x57\x37\x6e\x68\x57\x37\x34\x5a','\x57\x35\x68\x64\x47\x4b\x57\x58\x78\x67\x69','\x70\x53\x6f\x4a\x76\x64\x61','\x57\x37\x6e\x74\x73\x77\x35\x59\x42\x4e\x5a\x63\x47\x53\x6b\x74\x57\x51\x4f\x62\x57\x35\x33\x63\x4d\x31\x69','\x6e\x47\x43\x6c\x57\x50\x7a\x65','\x66\x4b\x34\x53\x72\x4c\x38\x65\x74\x38\x6f\x69','\x57\x35\x2f\x63\x51\x43\x6f\x50\x70\x38\x6b\x2b','\x43\x4d\x58\x62\x63\x4b\x58\x4e\x66\x6d\x6f\x7a','\x57\x37\x79\x55\x70\x48\x6d\x4d\x66\x58\x30','\x66\x6d\x6b\x73\x67\x53\x6b\x2f','\x65\x67\x4f\x66\x71\x4b\x57','\x57\x4f\x56\x64\x49\x33\x57','\x57\x51\x58\x62\x6d\x43\x6b\x32\x57\x34\x6e\x70','\x6a\x48\x4e\x63\x53\x38\x6f\x32\x57\x34\x4a\x64\x51\x61\x43','\x65\x63\x6c\x63\x50\x38\x6b\x6d\x66\x61','\x57\x52\x72\x73\x57\x37\x6e\x65','\x57\x4f\x54\x4c\x57\x35\x71','\x57\x50\x4e\x63\x48\x5a\x53\x6f\x76\x38\x6b\x2b\x57\x50\x30\x38','\x57\x35\x70\x63\x49\x53\x6f\x32\x6c\x6d\x6b\x49\x57\x50\x4a\x63\x50\x53\x6f\x37','\x75\x71\x58\x72\x57\x4f\x74\x64\x53\x57','\x68\x30\x57\x68\x41\x77\x35\x57\x57\x35\x56\x64\x48\x57','\x57\x36\x4c\x4a\x57\x34\x50\x57','\x6f\x73\x56\x63\x56\x53\x6f\x6b\x6c\x38\x6b\x48\x57\x35\x42\x64\x53\x71','\x63\x6d\x6f\x4a\x57\x51\x71\x45\x57\x34\x38\x49\x75\x4c\x57','\x71\x78\x72\x44\x6d\x4b\x4f','\x7a\x74\x46\x63\x51\x6d\x6f\x79\x57\x37\x37\x64\x52\x5a\x56\x63\x4f\x71','\x6f\x43\x6f\x66\x72\x32\x4a\x63\x55\x6d\x6f\x58\x70\x53\x6b\x76','\x6a\x67\x47\x53','\x57\x36\x30\x77\x7a\x43\x6f\x32\x57\x50\x53\x77\x57\x34\x53\x30\x57\x35\x2f\x63\x47\x53\x6f\x54\x57\x35\x48\x64\x57\x50\x6d','\x57\x4f\x57\x67\x64\x65\x39\x7a\x57\x37\x4a\x64\x51\x4b\x64\x64\x4c\x76\x48\x2f\x42\x57','\x57\x51\x6c\x63\x55\x38\x6f\x72\x57\x36\x72\x4b\x57\x36\x35\x33\x7a\x47'];_0x2603=function(){return _0xcdfda6;};return _0x2603();}const _0x595b34={};_0x595b34[_0xe0b292(0xdc,'\x45\x21\x41\x74')+_0xe0b292(0xee,'\x21\x6d\x32\x4e')]=_0x152238,_0x595b34[_0xe0b292(0xdf,'\x36\x49\x32\x21')+'\x65\x64']=_0x3608b0,module['\x65\x78\x70\x6f\x72\x74\x73']=_0x595b34;
@@ -3,6 +3,7 @@
3
3
  const fs = require('fs');
4
4
  const path = require('path');
5
5
  const { PROXY_PROTOCOL_VERSION } = require('../mailbox/store');
6
+ const { readMailboxStateFile } = require('../mailbox/state');
6
7
  const { buildEnvelope } = require('../envelope');
7
8
  const crypto = require('crypto');
8
9
  const {
@@ -601,6 +602,23 @@ class LifecycleManager {
601
602
  return storeSecret;
602
603
  }
603
604
  if (validNodeSecret(envSecret)) {
605
+ const diskRotated = this._latestDiskHubRotatedSecret();
606
+ if (diskRotated) {
607
+ this._setNodeSecretState({
608
+ secret: diskRotated.secret,
609
+ version: diskRotated.version ? String(diskRotated.version) : '',
610
+ source: 'hub_rotate',
611
+ envSuppressed: this.store.getState('node_secret_env_suppressed') || '',
612
+ });
613
+ if (!this._storeSourceLogged) {
614
+ this._storeSourceLogged = true;
615
+ this.logger.warn(
616
+ '[lifecycle] MailboxStore memory differs from disk hub-rotated node_secret; ' +
617
+ 'using disk value and treating env as stale.'
618
+ );
619
+ }
620
+ return diskRotated.secret;
621
+ }
604
622
  this._syncEnvNodeSecretToStore(envSecret);
605
623
  if (!this._envOverrideLogged) {
606
624
  this._envOverrideLogged = true;
@@ -618,16 +636,40 @@ class LifecycleManager {
618
636
  return storeSecret || envSecret || null;
619
637
  }
620
638
 
639
+ _latestDiskHubRotatedSecret() {
640
+ const file = this.store && this.store._stateFile;
641
+ if (!file) return null;
642
+ const state = readMailboxStateFile(file);
643
+ const secret = typeof state?.node_secret === 'string' ? state.node_secret.trim() : null;
644
+ if (!validNodeSecret(secret) || state?.node_secret_source !== 'hub_rotate') return null;
645
+ return {
646
+ secret,
647
+ version: parseNodeSecretVersion(state.node_secret_version),
648
+ };
649
+ }
650
+
621
651
  _syncEnvNodeSecretToStore(envSecret) {
622
652
  const envVersion = parseNodeSecretVersion(process.env.A2A_NODE_SECRET_VERSION || process.env.EVOMAP_NODE_SECRET_VERSION);
623
- this.store.setState('node_secret', envSecret);
624
- this.store.setState('node_secret_version', envVersion ? String(envVersion) : '');
625
- // Mark the new store value as env-seeded so a future rotation can
626
- // distinguish "operator pasted this in" from "hub returned this".
627
- this.store.setState('node_secret_source', 'env_seed');
653
+ this._setNodeSecretState({
654
+ secret: envSecret,
655
+ version: envVersion ? String(envVersion) : '',
656
+ source: 'env_seed',
657
+ envSuppressed: '',
658
+ });
628
659
  this._clearEnvSecretSuppression();
629
660
  }
630
661
 
662
+ _setNodeSecretState({ secret = '', version = '', source = '', envSuppressed = '' } = {}) {
663
+ if (this.store && typeof this.store.setNodeSecretState === 'function') {
664
+ this.store.setNodeSecretState({ secret, version, source, envSuppressed });
665
+ return;
666
+ }
667
+ this.store.setState('node_secret', secret);
668
+ this.store.setState('node_secret_version', version ? String(version) : '');
669
+ this.store.setState('node_secret_source', source);
670
+ this.store.setState('node_secret_env_suppressed', envSuppressed);
671
+ }
672
+
631
673
  _effectiveEnvNodeSecret() {
632
674
  const envSecret = getEnvNodeSecret();
633
675
  return this._isEnvNodeSecretSuppressed(envSecret) ? null : envSecret;
@@ -811,11 +853,6 @@ class LifecycleManager {
811
853
  const secret = data?.payload?.node_secret || data?.node_secret || null;
812
854
  const secretVersion = parseNodeSecretVersion(data?.payload?.node_secret_version || data?.node_secret_version);
813
855
  if (secret && validNodeSecret(secret)) {
814
- this.store.setState('node_secret', secret);
815
- // Tag the store entry so the next process that boots into a stale
816
- // shell env can recognise this value as hub-authoritative and
817
- // refuse to overwrite it (see _resolveNodeSecret above).
818
- this.store.setState('node_secret_source', 'hub_rotate');
819
856
  // Hub just handed us a fresh secret. Whatever sits in
820
857
  // A2A_NODE_SECRET is now older than the store, so suppress the
821
858
  // env-wins reconciliation in _resolveNodeSecret for the rest of
@@ -830,9 +867,14 @@ class LifecycleManager {
830
867
  } else {
831
868
  this._clearEnvSecretSuppression();
832
869
  }
870
+ this._setNodeSecretState({
871
+ secret,
872
+ version: secretVersion ? String(secretVersion) : '',
873
+ source: 'hub_rotate',
874
+ envSuppressed: this.store.getState('node_secret_env_suppressed') || '',
875
+ });
833
876
  this.logger.log('[lifecycle] new node_secret stored from hello response');
834
- }
835
- if (secretVersion) {
877
+ } else if (secretVersion) {
836
878
  this.store.setState('node_secret_version', String(secretVersion));
837
879
  } else {
838
880
  this.store.setState('node_secret_version', '');
@@ -1001,10 +1043,34 @@ class LifecycleManager {
1001
1043
  */
1002
1044
  _dropLocalSecret(reason) {
1003
1045
  this.logger.warn(`[lifecycle] dropping cached node_secret (reason=${reason}); next hello will run unauthenticated`);
1004
- try { this.store.setState('node_secret', ''); } catch { /* best-effort */ }
1005
- try { this.store.setState('node_secret_version', ''); } catch { /* best-effort */ }
1006
- // Clear the source tag too -- nothing is stored, nothing to attribute.
1007
- try { this.store.setState('node_secret_source', ''); } catch { /* best-effort */ }
1046
+ const diskRotated = this._latestDiskHubRotatedSecret();
1047
+ const storeSecret = this.store.getState('node_secret') || null;
1048
+ if (diskRotated && diskRotated.secret !== storeSecret) {
1049
+ try {
1050
+ this._setNodeSecretState({
1051
+ secret: diskRotated.secret,
1052
+ version: diskRotated.version ? String(diskRotated.version) : '',
1053
+ source: 'hub_rotate',
1054
+ envSuppressed: this.store.getState('node_secret_env_suppressed') || '',
1055
+ });
1056
+ this.logger.warn('[lifecycle] local in-memory node_secret is stale; preserving newer disk hub-rotated secret');
1057
+ return;
1058
+ } catch (err) {
1059
+ const reason = err && (err.code || err.name) ? (err.code || err.name) : 'error';
1060
+ this.logger.warn(`[lifecycle] failed to sync newer disk hub-rotated node_secret into memory (reason=${reason})`);
1061
+ }
1062
+ }
1063
+ try {
1064
+ this._setNodeSecretState({
1065
+ secret: '',
1066
+ version: '',
1067
+ source: '',
1068
+ envSuppressed: this.store.getState('node_secret_env_suppressed') || '',
1069
+ });
1070
+ } catch (err) {
1071
+ const reason = err && (err.code || err.name || err.message) ? (err.code || err.name || err.message) : 'error';
1072
+ this.logger.warn(`[lifecycle] failed to clear local node_secret state (reason=${reason})`);
1073
+ }
1008
1074
  // Suppress only the exact env secret that was just proven stale. If no
1009
1075
  // env secret is present, do not leave a marker that blocks a future reset.
1010
1076
  this._markCurrentEnvSecretSuppressed();
@@ -0,0 +1,207 @@
1
+ 'use strict';
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+
6
+ const PRIVATE_DIR_MODE = 0o700;
7
+ const PRIVATE_FILE_MODE = 0o600;
8
+ const STATE_LOCK_STALE_MS = 10_000;
9
+ const STATE_LOCK_WAIT_MS = 10;
10
+
11
+ const MAILBOX_NODE_SECRET_STATE_KEYS = Object.freeze([
12
+ 'node_secret',
13
+ 'node_secret_version',
14
+ 'node_secret_source',
15
+ 'node_secret_env_suppressed',
16
+ ]);
17
+
18
+ const MAILBOX_NODE_SECRET_STATE_KEY_SET = new Set(MAILBOX_NODE_SECRET_STATE_KEYS);
19
+ const MAILBOX_NODE_SECRET_TUPLE_KEYS = Object.freeze([
20
+ 'node_secret',
21
+ 'node_secret_version',
22
+ 'node_secret_source',
23
+ ]);
24
+ const MAILBOX_NODE_SECRET_TUPLE_KEY_SET = new Set(MAILBOX_NODE_SECRET_TUPLE_KEYS);
25
+
26
+ function bestEffortChmod(filePath, mode) {
27
+ try { fs.chmodSync(filePath, mode); } catch { /* best effort; no-op on Windows */ }
28
+ }
29
+
30
+ function ensurePrivateDir(dir) {
31
+ if (!fs.existsSync(dir)) {
32
+ fs.mkdirSync(dir, { recursive: true, mode: PRIVATE_DIR_MODE });
33
+ }
34
+ bestEffortChmod(dir, PRIVATE_DIR_MODE);
35
+ }
36
+
37
+ function writePrivateFile(filePath, content) {
38
+ fs.writeFileSync(filePath, content, { encoding: 'utf8', mode: PRIVATE_FILE_MODE });
39
+ bestEffortChmod(filePath, PRIVATE_FILE_MODE);
40
+ }
41
+
42
+ function sleepSync(ms) {
43
+ try {
44
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
45
+ } catch {
46
+ const end = Date.now() + ms;
47
+ while (Date.now() < end) {}
48
+ }
49
+ }
50
+
51
+ function acquireStateFileLock(stateFile) {
52
+ ensurePrivateDir(path.dirname(stateFile));
53
+ const lockDir = `${stateFile}.lock`;
54
+ const startedAt = Date.now();
55
+ while (true) {
56
+ try {
57
+ fs.mkdirSync(lockDir, { mode: PRIVATE_DIR_MODE });
58
+ bestEffortChmod(lockDir, PRIVATE_DIR_MODE);
59
+ return function releaseStateFileLock() {
60
+ try { fs.rmdirSync(lockDir); } catch {}
61
+ };
62
+ } catch (e) {
63
+ if (!e || e.code !== 'EEXIST') throw e;
64
+ try {
65
+ const ageMs = Date.now() - fs.statSync(lockDir).mtimeMs;
66
+ if (ageMs > STATE_LOCK_STALE_MS) {
67
+ fs.rmSync(lockDir, { recursive: true, force: true });
68
+ continue;
69
+ }
70
+ } catch (statErr) {
71
+ if (statErr && statErr.code === 'ENOENT') continue;
72
+ throw statErr;
73
+ }
74
+ if (Date.now() - startedAt > STATE_LOCK_STALE_MS) {
75
+ const err = new Error('timed out waiting for mailbox state lock');
76
+ err.code = 'MAILBOX_STATE_LOCK_TIMEOUT';
77
+ throw err;
78
+ }
79
+ sleepSync(STATE_LOCK_WAIT_MS);
80
+ }
81
+ }
82
+ }
83
+
84
+ function isPlainState(value) {
85
+ return value && typeof value === 'object' && !Array.isArray(value);
86
+ }
87
+
88
+ function isHubRotatedNodeSecretState(state) {
89
+ return isPlainState(state)
90
+ && state.node_secret_source === 'hub_rotate'
91
+ && typeof state.node_secret === 'string'
92
+ && Boolean(state.node_secret.trim());
93
+ }
94
+
95
+ function parseNodeSecretVersion(value) {
96
+ const n = Number(value);
97
+ return Number.isInteger(n) && n > 0 ? n : null;
98
+ }
99
+
100
+ function isFullNodeSecretTupleUpdate(updatedSet) {
101
+ return Boolean(updatedSet) && MAILBOX_NODE_SECRET_TUPLE_KEYS.every((key) => updatedSet.has(key));
102
+ }
103
+
104
+ function canApplyPartialNodeSecretTupleWrite(key, disk, next) {
105
+ if (key !== 'node_secret_version') return false;
106
+ if (!isHubRotatedNodeSecretState(disk)) return true;
107
+ if (!isHubRotatedNodeSecretState(next)) return false;
108
+ if (String(next.node_secret).trim() !== String(disk.node_secret).trim()) return false;
109
+ const nextVersion = parseNodeSecretVersion(next.node_secret_version);
110
+ const diskVersion = parseNodeSecretVersion(disk.node_secret_version);
111
+ return Boolean(nextVersion && (!diskVersion || nextVersion >= diskVersion));
112
+ }
113
+
114
+ /**
115
+ * @param {string} stateFile
116
+ * @returns {Record<string, unknown>|null}
117
+ */
118
+ function readMailboxStateFile(stateFile) {
119
+ try {
120
+ if (!fs.existsSync(stateFile)) return null;
121
+ const parsed = JSON.parse(fs.readFileSync(stateFile, 'utf8'));
122
+ return isPlainState(parsed) ? parsed : null;
123
+ } catch {
124
+ return null;
125
+ }
126
+ }
127
+
128
+ function replaceStateFile(stateFile, state) {
129
+ const dir = path.dirname(stateFile);
130
+ ensurePrivateDir(dir);
131
+ const tmp = `${stateFile}.${process.pid}.tmp`;
132
+ writePrivateFile(tmp, JSON.stringify(state || {}, null, 2) + '\n');
133
+ // Windows: renameSync throws EPERM when the destination file already
134
+ // exists, unlike POSIX where rename(2) atomically replaces the target.
135
+ if (process.platform === 'win32') {
136
+ try { fs.unlinkSync(stateFile); } catch (e) {
137
+ if (e.code !== 'ENOENT') throw e;
138
+ }
139
+ }
140
+ fs.renameSync(tmp, stateFile);
141
+ bestEffortChmod(stateFile, PRIVATE_FILE_MODE);
142
+ }
143
+
144
+ /**
145
+ * Merge a partial state write with the latest on-disk state.
146
+ *
147
+ * Callers pass the keys they intentionally changed. Secret-bearing keys are
148
+ * only written when they are in `updatedKeys`, so an old long-running
149
+ * MailboxStore cannot overwrite a fresher Hub-rotated or divergence-cleared
150
+ * secret tuple that was written by another process between load and persist.
151
+ *
152
+ * @param {string} stateFile
153
+ * @param {Record<string, unknown>} nextState
154
+ * @param {Iterable<string>} updatedKeys
155
+ * @returns {Record<string, unknown>}
156
+ */
157
+ function writeMergedMailboxStateFile(stateFile, nextState, updatedKeys) {
158
+ const releaseLock = acquireStateFileLock(stateFile);
159
+ try {
160
+ const next = isPlainState(nextState) ? nextState : {};
161
+ const disk = readMailboxStateFile(stateFile);
162
+ const hasDiskState = isPlainState(disk);
163
+ const merged = hasDiskState ? { ...disk } : {};
164
+ const updatedSet = updatedKeys ? new Set(Array.from(updatedKeys)) : null;
165
+ const keys = updatedSet ? Array.from(updatedSet) : Object.keys(next);
166
+ const touchesNodeSecretTuple = keys.some((key) => MAILBOX_NODE_SECRET_TUPLE_KEY_SET.has(key));
167
+ const preserveDiskNodeSecretTuple = touchesNodeSecretTuple
168
+ && hasDiskState
169
+ && isHubRotatedNodeSecretState(disk)
170
+ && !isFullNodeSecretTupleUpdate(updatedSet);
171
+
172
+ for (const key of keys) {
173
+ if (MAILBOX_NODE_SECRET_STATE_KEY_SET.has(key) && hasDiskState && (!updatedSet || !updatedSet.has(key))) {
174
+ continue;
175
+ }
176
+ if (
177
+ MAILBOX_NODE_SECRET_TUPLE_KEY_SET.has(key) &&
178
+ preserveDiskNodeSecretTuple &&
179
+ !canApplyPartialNodeSecretTupleWrite(key, disk, next)
180
+ ) {
181
+ continue;
182
+ }
183
+ if (!Object.prototype.hasOwnProperty.call(next, key)) {
184
+ delete merged[key];
185
+ continue;
186
+ }
187
+ merged[key] = next[key];
188
+ }
189
+
190
+ replaceStateFile(stateFile, merged);
191
+ return merged;
192
+ } finally {
193
+ releaseLock();
194
+ }
195
+ }
196
+
197
+ module.exports = {
198
+ PRIVATE_DIR_MODE,
199
+ PRIVATE_FILE_MODE,
200
+ MAILBOX_NODE_SECRET_STATE_KEYS,
201
+ bestEffortChmod,
202
+ ensurePrivateDir,
203
+ writePrivateFile,
204
+ readMailboxStateFile,
205
+ isHubRotatedNodeSecretState,
206
+ writeMergedMailboxStateFile,
207
+ };