@astrasyncai/verification-gateway 4.2.0 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/README.md +45 -21
  2. package/dist/adapter-interface/interface.d.mts +2 -2
  3. package/dist/adapter-interface/interface.d.ts +2 -2
  4. package/dist/adapters/express.d.mts +2 -2
  5. package/dist/adapters/express.d.ts +2 -2
  6. package/dist/adapters/express.js +56 -4
  7. package/dist/adapters/express.js.map +1 -1
  8. package/dist/adapters/express.mjs +56 -4
  9. package/dist/adapters/express.mjs.map +1 -1
  10. package/dist/adapters/mcp.d.mts +38 -30
  11. package/dist/adapters/mcp.d.ts +38 -30
  12. package/dist/adapters/mcp.js +22 -5
  13. package/dist/adapters/mcp.js.map +1 -1
  14. package/dist/adapters/mcp.mjs +22 -5
  15. package/dist/adapters/mcp.mjs.map +1 -1
  16. package/dist/adapters/nextjs.d.mts +2 -2
  17. package/dist/adapters/nextjs.d.ts +2 -2
  18. package/dist/adapters/nextjs.js +54 -4
  19. package/dist/adapters/nextjs.js.map +1 -1
  20. package/dist/adapters/nextjs.mjs +54 -4
  21. package/dist/adapters/nextjs.mjs.map +1 -1
  22. package/dist/adapters/sdk.d.mts +2 -2
  23. package/dist/adapters/sdk.d.ts +2 -2
  24. package/dist/agent/index.d.mts +2 -2
  25. package/dist/agent/index.d.ts +2 -2
  26. package/dist/agent/index.js +2 -2
  27. package/dist/agent/index.js.map +1 -1
  28. package/dist/agent/index.mjs +2 -2
  29. package/dist/agent/index.mjs.map +1 -1
  30. package/dist/bin/astrasync-claude-hook.js +2 -2
  31. package/dist/bin/astrasync-codex-hook.js +2 -2
  32. package/dist/bin/astrasync-guard.js +2 -2
  33. package/dist/bin/astrasync.js +14 -4
  34. package/dist/browser/background.js +2 -2
  35. package/dist/browser/background.js.map +1 -1
  36. package/dist/browser/background.mjs +2 -2
  37. package/dist/browser/background.mjs.map +1 -1
  38. package/dist/browser/browser-adapter.d.mts +2 -2
  39. package/dist/browser/browser-adapter.d.ts +2 -2
  40. package/dist/claude-code/claude-code-adapter.d.mts +2 -2
  41. package/dist/claude-code/claude-code-adapter.d.ts +2 -2
  42. package/dist/cli/index.d.mts +2 -2
  43. package/dist/cli/index.d.ts +2 -2
  44. package/dist/codex/index.d.mts +2 -2
  45. package/dist/codex/index.d.ts +2 -2
  46. package/dist/codex/index.js +2 -2
  47. package/dist/codex/index.js.map +1 -1
  48. package/dist/codex/index.mjs +2 -2
  49. package/dist/codex/index.mjs.map +1 -1
  50. package/dist/cursor/cursor-adapter.d.mts +2 -2
  51. package/dist/cursor/cursor-adapter.d.ts +2 -2
  52. package/dist/cursor/extension.d.mts +2 -2
  53. package/dist/cursor/extension.d.ts +2 -2
  54. package/dist/cursor/extension.js +2 -2
  55. package/dist/cursor/extension.js.map +1 -1
  56. package/dist/cursor/extension.mjs +2 -2
  57. package/dist/cursor/extension.mjs.map +1 -1
  58. package/dist/edge-config.d.mts +1 -1
  59. package/dist/edge-config.d.ts +1 -1
  60. package/dist/edge-core/index.d.mts +1 -1
  61. package/dist/edge-core/index.d.ts +1 -1
  62. package/dist/edge-core/index.js +25 -5
  63. package/dist/edge-core/index.js.map +1 -1
  64. package/dist/edge-core/index.mjs +25 -5
  65. package/dist/edge-core/index.mjs.map +1 -1
  66. package/dist/{express-D_4hTn5Z.d.mts → express-CR6F3njD.d.mts} +1 -1
  67. package/dist/{express-BVd1_3FE.d.ts → express-DaqL11tx.d.ts} +1 -1
  68. package/dist/gateway/gateway.d.mts +2 -2
  69. package/dist/gateway/gateway.d.ts +2 -2
  70. package/dist/gateway/gateway.js +2 -2
  71. package/dist/gateway/gateway.js.map +1 -1
  72. package/dist/gateway/gateway.mjs +2 -2
  73. package/dist/gateway/gateway.mjs.map +1 -1
  74. package/dist/git-trigger/git-hooks.d.mts +2 -2
  75. package/dist/git-trigger/git-hooks.d.ts +2 -2
  76. package/dist/{index-B0YHu_SP.d.ts → index-B5Ts1WtM.d.ts} +3 -3
  77. package/dist/{index-T1aBoUcc.d.ts → index-BfIxCYIZ.d.ts} +1 -1
  78. package/dist/{index-BPEBlOsE.d.mts → index-Cub7lK-T.d.mts} +3 -3
  79. package/dist/{index-DQb5-_1X.d.mts → index-CwAh7Tln.d.mts} +1 -1
  80. package/dist/index.d.mts +7 -7
  81. package/dist/index.d.ts +7 -7
  82. package/dist/index.js +74 -35
  83. package/dist/index.js.map +1 -1
  84. package/dist/index.mjs +71 -32
  85. package/dist/index.mjs.map +1 -1
  86. package/dist/local-evaluator/evaluator.d.mts +2 -2
  87. package/dist/local-evaluator/evaluator.d.ts +2 -2
  88. package/dist/metadata-capture.d.mts +18 -5
  89. package/dist/metadata-capture.d.ts +18 -5
  90. package/dist/metadata-capture.js +21 -4
  91. package/dist/metadata-capture.js.map +1 -1
  92. package/dist/metadata-capture.mjs +20 -4
  93. package/dist/metadata-capture.mjs.map +1 -1
  94. package/dist/{nextjs-w7RTbP1P.d.ts → nextjs-DL6uE1ye.d.ts} +1 -1
  95. package/dist/{nextjs-WyeVr2Kp.d.mts → nextjs-DlX6xwbU.d.mts} +1 -1
  96. package/dist/{sdk-CbTNIkAa.d.mts → sdk-Bbh9B_dw.d.mts} +1 -1
  97. package/dist/{sdk-QeX0Z8Ho.d.ts → sdk-C6SASmsh.d.ts} +1 -1
  98. package/dist/transport/index.d.mts +2 -2
  99. package/dist/transport/index.d.ts +2 -2
  100. package/dist/transport/index.js +5 -5
  101. package/dist/transport/index.js.map +1 -1
  102. package/dist/transport/index.mjs +2 -2
  103. package/dist/transport/index.mjs.map +1 -1
  104. package/dist/{types-r850cOt0.d.mts → types-C0zfSXMB.d.mts} +22 -0
  105. package/dist/{types-DqfPU5Bl.d.mts → types-C7Rb-w0d.d.mts} +1 -1
  106. package/dist/{types-sMxBT-nM.d.ts → types-DwSfO7Sb.d.ts} +22 -0
  107. package/dist/{types-BLUx92FJ.d.ts → types-nIh3HtuA.d.ts} +1 -1
  108. package/dist/ui/index.d.mts +1 -1
  109. package/dist/ui/index.d.ts +1 -1
  110. package/dist/verify.d.mts +1 -1
  111. package/dist/verify.d.ts +1 -1
  112. package/package.json +2 -4
@@ -611,7 +611,9 @@ var SECRET_HEADER_NAMES = /* @__PURE__ */ new Set([
611
611
  "x-astrasync-signature",
612
612
  "x-astrasync-secret",
613
613
  "x-hub-signature",
614
- "x-hub-signature-256"
614
+ "x-hub-signature-256",
615
+ // Short-lived verify dedupe token — must never persist in stored metadata.
616
+ "x-astra-verified-hop"
615
617
  ]);
616
618
  var SECRET_HEADER_PREFIXES = ["x-astrasync-", "kya-", "kya_"];
617
619
  var CREDENTIAL_HEADER_NAMES = /* @__PURE__ */ new Set([
@@ -746,16 +748,25 @@ var CONNECTION_HEADER_SOURCES = [
746
748
  ["cf-ipcountry", "x-vercel-ip-country", "cloudfront-viewer-country", "fastly-geo-country"]
747
749
  ],
748
750
  ["region", ["x-vercel-ip-country-region", "cloudfront-viewer-country-region"]],
751
+ ["countryRegionName", ["cloudfront-viewer-country-region-name"]],
749
752
  ["city", ["x-vercel-ip-city", "cloudfront-viewer-city"]],
750
753
  ["asn", ["cloudfront-viewer-asn"]],
751
754
  ["tlsVersion", ["cloudfront-viewer-tls"]],
752
755
  ["httpVersion", ["cloudfront-viewer-http-version"]],
756
+ ["timeZone", ["x-vercel-ip-timezone", "cloudfront-viewer-time-zone"]],
757
+ ["metroCode", ["cloudfront-viewer-metro-code"]],
753
758
  // TLS fingerprints can only be computed where TLS terminates. When a CDN
754
759
  // terminates TLS in front of the merchant, its fingerprint headers ARE the
755
760
  // connection-layer truth — normalising them here is the permanent design.
756
- ["tlsFingerprint", ["cf-ja3-hash"]],
757
- ["ja4", ["cf-ja4"]]
761
+ // CloudFront delivers JA3/JA4 only via an origin request policy and only
762
+ // for HTTPS viewer connections.
763
+ ["tlsFingerprint", ["cf-ja3-hash", "cloudfront-viewer-ja3-fingerprint"]],
764
+ ["ja4", ["cf-ja4", "cloudfront-viewer-ja4-fingerprint"]],
765
+ // Header-structure fingerprint: browser/SDK-distinctive header ordering.
766
+ ["headerOrder", ["cloudfront-viewer-header-order"]],
767
+ ["headerCount", ["cloudfront-viewer-header-count"]]
758
768
  ];
769
+ var MAX_CONNECTION_VALUE_CHARS = 256;
759
770
  function deriveConnectionFromHeaders(headers) {
760
771
  if (!headers) return void 0;
761
772
  const lower = {};
@@ -768,11 +779,15 @@ function deriveConnectionFromHeaders(headers) {
768
779
  for (const source of sources) {
769
780
  const value = lower[source]?.trim();
770
781
  if (value) {
771
- connection[key] = value;
782
+ connection[key] = value.slice(0, MAX_CONNECTION_VALUE_CHARS);
772
783
  break;
773
784
  }
774
785
  }
775
786
  }
787
+ if (!connection.ip) {
788
+ const addr = lower["cloudfront-viewer-address"]?.trim();
789
+ if (addr) connection.ip = addr.replace(/:\d+$/, "");
790
+ }
776
791
  if (!connection.ip) {
777
792
  const xff = lower["x-forwarded-for"];
778
793
  const client = xff?.split(",")[0]?.trim();
@@ -871,7 +886,7 @@ async function awaitStepUpApproval(config, approval) {
871
886
  return "timeout";
872
887
  }
873
888
 
874
- // src/transport/mcp-server.ts
889
+ // src/verified-hop.ts
875
890
  var MCP_VERIFIED_HOP_HEADER = "X-Astra-Verified-Hop";
876
891
  var MCP_VERIFIED_HOP_MAX_AGE_MS = 6e4;
877
892
  function serializeVerifiedHop(marker) {
@@ -898,6 +913,8 @@ function isVerifiedHopValidFor(marker, expectedAstraId, opts = {}) {
898
913
  const now = opts.now ?? Date.now();
899
914
  return now - marker.checkedAt <= maxAge && now >= marker.checkedAt;
900
915
  }
916
+
917
+ // src/transport/mcp-server.ts
901
918
  function parseMcpJsonRpc(body) {
902
919
  if (!body || typeof body !== "object" || Array.isArray(body)) return null;
903
920
  const obj = body;