@astrasyncai/verification-gateway 5.13.0 → 5.15.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 (98) hide show
  1. package/README.md +27 -17
  2. package/dist/adapters/express.d.mts +1 -1
  3. package/dist/adapters/express.d.ts +1 -1
  4. package/dist/adapters/express.js +504 -249
  5. package/dist/adapters/express.js.map +1 -1
  6. package/dist/adapters/express.mjs +504 -249
  7. package/dist/adapters/express.mjs.map +1 -1
  8. package/dist/adapters/mcp.d.mts +1 -1
  9. package/dist/adapters/mcp.d.ts +1 -1
  10. package/dist/adapters/mcp.js +20 -6
  11. package/dist/adapters/mcp.js.map +1 -1
  12. package/dist/adapters/mcp.mjs +20 -6
  13. package/dist/adapters/mcp.mjs.map +1 -1
  14. package/dist/adapters/nextjs.d.mts +1 -1
  15. package/dist/adapters/nextjs.d.ts +1 -1
  16. package/dist/adapters/nextjs.js +487 -248
  17. package/dist/adapters/nextjs.js.map +1 -1
  18. package/dist/adapters/nextjs.mjs +487 -248
  19. package/dist/adapters/nextjs.mjs.map +1 -1
  20. package/dist/adapters/sdk.d.mts +18 -10
  21. package/dist/adapters/sdk.d.ts +18 -10
  22. package/dist/adapters/sdk.js +80 -23
  23. package/dist/adapters/sdk.js.map +1 -1
  24. package/dist/adapters/sdk.mjs +80 -23
  25. package/dist/adapters/sdk.mjs.map +1 -1
  26. package/dist/agent/index.js +1 -1
  27. package/dist/agent/index.js.map +1 -1
  28. package/dist/agent/index.mjs +1 -1
  29. package/dist/agent/index.mjs.map +1 -1
  30. package/dist/bin/astrasync-claude-hook.js +82 -20
  31. package/dist/bin/astrasync-codex-hook.js +82 -20
  32. package/dist/bin/astrasync-guard.js +82 -20
  33. package/dist/bin/astrasync.js +316 -43
  34. package/dist/browser/background.js +77 -15
  35. package/dist/browser/background.js.map +1 -1
  36. package/dist/browser/background.mjs +87 -15
  37. package/dist/browser/background.mjs.map +1 -1
  38. package/dist/cli/index.js +1 -1
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/cli/index.mjs +1 -1
  41. package/dist/cli/index.mjs.map +1 -1
  42. package/dist/codex/index.js +82 -20
  43. package/dist/codex/index.js.map +1 -1
  44. package/dist/codex/index.mjs +92 -20
  45. package/dist/codex/index.mjs.map +1 -1
  46. package/dist/cursor/extension.js +82 -20
  47. package/dist/cursor/extension.js.map +1 -1
  48. package/dist/cursor/extension.mjs +92 -20
  49. package/dist/cursor/extension.mjs.map +1 -1
  50. package/dist/edge-config.d.mts +31 -2
  51. package/dist/edge-config.d.ts +31 -2
  52. package/dist/edge-config.js +35 -5
  53. package/dist/edge-config.js.map +1 -1
  54. package/dist/edge-config.mjs +32 -4
  55. package/dist/edge-config.mjs.map +1 -1
  56. package/dist/edge-core/index.d.mts +43 -6
  57. package/dist/edge-core/index.d.ts +43 -6
  58. package/dist/edge-core/index.js +120 -19
  59. package/dist/edge-core/index.js.map +1 -1
  60. package/dist/edge-core/index.mjs +118 -19
  61. package/dist/edge-core/index.mjs.map +1 -1
  62. package/dist/gateway/gateway.js +77 -15
  63. package/dist/gateway/gateway.js.map +1 -1
  64. package/dist/gateway/gateway.mjs +87 -15
  65. package/dist/gateway/gateway.mjs.map +1 -1
  66. package/dist/git-trigger/git-hooks.d.mts +1 -1
  67. package/dist/git-trigger/git-hooks.d.ts +1 -1
  68. package/dist/index.d.mts +1314 -34
  69. package/dist/index.d.ts +1314 -34
  70. package/dist/index.js +5143 -2621
  71. package/dist/index.js.map +1 -1
  72. package/dist/index.mjs +5090 -2623
  73. package/dist/index.mjs.map +1 -1
  74. package/dist/registration/index.d.mts +28 -2
  75. package/dist/registration/index.d.ts +28 -2
  76. package/dist/registration/index.js +18 -3
  77. package/dist/registration/index.js.map +1 -1
  78. package/dist/registration/index.mjs +15 -2
  79. package/dist/registration/index.mjs.map +1 -1
  80. package/dist/transport/index.d.mts +7 -5
  81. package/dist/transport/index.d.ts +7 -5
  82. package/dist/transport/index.js +61 -5
  83. package/dist/transport/index.js.map +1 -1
  84. package/dist/transport/index.mjs +67 -11
  85. package/dist/transport/index.mjs.map +1 -1
  86. package/dist/{types-C_b4QTyO.d.ts → types-DtJjlW4O.d.ts} +104 -10
  87. package/dist/{types-BCkwBA84.d.mts → types-Dxf9DBpr.d.mts} +106 -12
  88. package/dist/{types-BCkwBA84.d.ts → types-Dxf9DBpr.d.ts} +106 -12
  89. package/dist/{types-DlshIIR-.d.mts → types-Eg6VoBNH.d.mts} +104 -10
  90. package/dist/ui/index.d.mts +1 -1
  91. package/dist/ui/index.d.ts +1 -1
  92. package/dist/verify.d.mts +1 -1
  93. package/dist/verify.d.ts +1 -1
  94. package/dist/verify.js +20 -6
  95. package/dist/verify.js.map +1 -1
  96. package/dist/verify.mjs +20 -6
  97. package/dist/verify.mjs.map +1 -1
  98. package/package.json +1 -1
@@ -530,6 +530,7 @@ function bufferToBase64(bytes) {
530
530
  }
531
531
 
532
532
  // src/transport/rfc9421-verify.ts
533
+ var import_crypto = require("crypto");
533
534
  var import_http_message_signatures = require("http-message-signatures");
534
535
 
535
536
  // src/transport/nonce-store.ts
@@ -601,6 +602,16 @@ async function verifyRFC9421(request, options) {
601
602
  normalizeRequest(request)
602
603
  );
603
604
  if (result === true) {
605
+ const digestError = checkContentDigest(request);
606
+ if (digestError) {
607
+ return {
608
+ ok: false,
609
+ kid: resolvedKid,
610
+ registry: resolver.name,
611
+ algorithm: resolvedAlg,
612
+ error: digestError
613
+ };
614
+ }
604
615
  return {
605
616
  ok: true,
606
617
  kid: resolvedKid,
@@ -625,6 +636,21 @@ async function verifyRFC9421(request, options) {
625
636
  };
626
637
  }
627
638
  }
639
+ function checkContentDigest(request) {
640
+ if (request.body === void 0) return null;
641
+ const raw = Object.entries(request.headers).find(
642
+ ([k]) => k.toLowerCase() === "content-digest"
643
+ )?.[1];
644
+ if (!raw) return null;
645
+ const header = Array.isArray(raw) ? raw.join(", ") : raw;
646
+ const entries = [...header.matchAll(/(sha-256|sha-512)=:([A-Za-z0-9+/=]+):/g)];
647
+ if (entries.length === 0) return null;
648
+ for (const [, alg, value] of entries) {
649
+ const expected = (0, import_crypto.createHash)(alg === "sha-256" ? "sha256" : "sha512").update(request.body, "utf8").digest("base64");
650
+ if (expected !== value) return "content-digest does not match the body";
651
+ }
652
+ return null;
653
+ }
628
654
  function normalizeRequest(request) {
629
655
  return {
630
656
  method: request.method.toUpperCase(),
@@ -726,7 +752,7 @@ async function getCrypto() {
726
752
  }
727
753
 
728
754
  // src/version.ts
729
- var SDK_VERSION = "5.13.0";
755
+ var SDK_VERSION = "5.15.0";
730
756
 
731
757
  // src/http.ts
732
758
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -874,8 +900,9 @@ function extractBearer(authHeader) {
874
900
  function extractPaymentToken(body) {
875
901
  const paymentData = body.payment_data;
876
902
  if (!paymentData) return void 0;
877
- const raw = coerceString3(paymentData.token);
878
- const provider = coerceString3(paymentData.provider);
903
+ const instrument = paymentData.instrument;
904
+ const raw = coerceString3(instrument?.credential?.token) ?? coerceString3(paymentData.token);
905
+ const provider = coerceString3(paymentData.provider) ?? coerceString3(paymentData.handler_id);
879
906
  if (!raw) return { raw: void 0, type: null, provider };
880
907
  const type = classifyPaymentToken(raw);
881
908
  return { raw, type, provider };
@@ -1738,8 +1765,10 @@ async function getSubtle() {
1738
1765
  // src/transport/mpp.ts
1739
1766
  var import_mppx = require("mppx");
1740
1767
  function extractMPPFromRequest(request) {
1741
- const auth = readHeader3(request.headers, "authorization");
1742
- if (!auth || !/^\s*Payment\s+/i.test(auth)) return null;
1768
+ const alt = readHeader3(request.headers, "payment-authorization");
1769
+ const authHeader = readHeader3(request.headers, "authorization");
1770
+ const auth = authHeader && /^\s*Payment\s+/i.test(authHeader) ? authHeader : alt ? /^\s*Payment\s+/i.test(alt) ? alt : `Payment ${alt.trim()}` : void 0;
1771
+ if (!auth) return null;
1743
1772
  try {
1744
1773
  const credential = import_mppx.Credential.deserialize(auth);
1745
1774
  return {
@@ -1926,6 +1955,16 @@ function verifyMPP(input) {
1926
1955
  var import_schemas = require("@x402/core/schemas");
1927
1956
  var import_utils = require("@x402/core/utils");
1928
1957
  function extractX402FromRequest(request) {
1958
+ const v2Header = readHeader4(request.headers, "payment-signature");
1959
+ if (v2Header) {
1960
+ try {
1961
+ const decoded = (0, import_utils.safeBase64Decode)(v2Header);
1962
+ const parsed = decoded ? tryParsePayload(JSON.parse(decoded)) : null;
1963
+ if (parsed) return buildPayloadContext(parsed, "header");
1964
+ } catch {
1965
+ }
1966
+ return { kind: "error", version: 2, source: "header", error: { type: "invalid-x402-payload" } };
1967
+ }
1929
1968
  const headerValue = readHeader4(request.headers, "x-payment");
1930
1969
  if (request.body && typeof request.body === "object") {
1931
1970
  const parsed = tryParsePayload(request.body);
@@ -1952,6 +1991,21 @@ function extractX402FromRequest(request) {
1952
1991
  }
1953
1992
  function extractX402FromResponse(response) {
1954
1993
  if (response.status !== 402) return null;
1994
+ const v2Header = readHeader4(response.headers, "payment-required");
1995
+ if (v2Header) {
1996
+ try {
1997
+ const decoded = (0, import_utils.safeBase64Decode)(v2Header);
1998
+ const parsed = decoded ? tryParseRequired(JSON.parse(decoded)) : null;
1999
+ if (parsed) return buildRequiredContext(parsed, "header");
2000
+ } catch {
2001
+ }
2002
+ return {
2003
+ kind: "error",
2004
+ version: 2,
2005
+ source: "header",
2006
+ error: { type: "invalid-x402-required" }
2007
+ };
2008
+ }
1955
2009
  if (response.body && typeof response.body === "object") {
1956
2010
  const parsed = tryParseRequired(response.body);
1957
2011
  if (parsed) return buildRequiredContext(parsed, "body");
@@ -2465,6 +2519,8 @@ function resolvePaymentToken(input) {
2465
2519
  const mppMethod = input.mpp?.context.credential?.challenge?.method;
2466
2520
  if (mppMethod === "tempo") return { present: true, type: "tempo-tx" };
2467
2521
  if (mppMethod === "stripe") return { present: true, type: "stripe-spt" };
2522
+ if (input.x402?.paymentPayload) return { present: true, type: "x402-payload" };
2523
+ if (input.ap2?.triple.payment) return { present: true, type: "ap2-payment-mandate" };
2468
2524
  return void 0;
2469
2525
  }
2470
2526
  function runConstraintEval(input) {