@astrasyncai/verification-gateway 4.3.0 → 4.4.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 (83) hide show
  1. package/dist/adapters/express.js +91 -19
  2. package/dist/adapters/express.js.map +1 -1
  3. package/dist/adapters/express.mjs +91 -19
  4. package/dist/adapters/express.mjs.map +1 -1
  5. package/dist/adapters/mcp.js +52 -13
  6. package/dist/adapters/mcp.js.map +1 -1
  7. package/dist/adapters/mcp.mjs +52 -13
  8. package/dist/adapters/mcp.mjs.map +1 -1
  9. package/dist/adapters/nextjs.js +89 -17
  10. package/dist/adapters/nextjs.js.map +1 -1
  11. package/dist/adapters/nextjs.mjs +89 -17
  12. package/dist/adapters/nextjs.mjs.map +1 -1
  13. package/dist/adapters/sdk.js +24 -6
  14. package/dist/adapters/sdk.js.map +1 -1
  15. package/dist/adapters/sdk.mjs +24 -6
  16. package/dist/adapters/sdk.mjs.map +1 -1
  17. package/dist/agent/index.js +24 -3
  18. package/dist/agent/index.js.map +1 -1
  19. package/dist/agent/index.mjs +24 -3
  20. package/dist/agent/index.mjs.map +1 -1
  21. package/dist/bin/astrasync-claude-hook.js +22 -4
  22. package/dist/bin/astrasync-codex-hook.js +22 -4
  23. package/dist/bin/astrasync-guard.js +26 -8
  24. package/dist/bin/astrasync.js +66 -23
  25. package/dist/browser/background.js +22 -4
  26. package/dist/browser/background.js.map +1 -1
  27. package/dist/browser/background.mjs +22 -4
  28. package/dist/browser/background.mjs.map +1 -1
  29. package/dist/cli/index.js +23 -2
  30. package/dist/cli/index.js.map +1 -1
  31. package/dist/cli/index.mjs +23 -2
  32. package/dist/cli/index.mjs.map +1 -1
  33. package/dist/codex/index.js +22 -4
  34. package/dist/codex/index.js.map +1 -1
  35. package/dist/codex/index.mjs +22 -4
  36. package/dist/codex/index.mjs.map +1 -1
  37. package/dist/cursor/extension.js +22 -4
  38. package/dist/cursor/extension.js.map +1 -1
  39. package/dist/cursor/extension.mjs +22 -4
  40. package/dist/cursor/extension.mjs.map +1 -1
  41. package/dist/edge-config.js +24 -1
  42. package/dist/edge-config.js.map +1 -1
  43. package/dist/edge-config.mjs +22 -1
  44. package/dist/edge-config.mjs.map +1 -1
  45. package/dist/edge-core/index.js +96 -11
  46. package/dist/edge-core/index.js.map +1 -1
  47. package/dist/edge-core/index.mjs +96 -11
  48. package/dist/edge-core/index.mjs.map +1 -1
  49. package/dist/gateway/gateway.js +22 -4
  50. package/dist/gateway/gateway.js.map +1 -1
  51. package/dist/gateway/gateway.mjs +22 -4
  52. package/dist/gateway/gateway.mjs.map +1 -1
  53. package/dist/index.d.mts +51 -2
  54. package/dist/index.d.ts +51 -2
  55. package/dist/index.js +151 -26
  56. package/dist/index.js.map +1 -1
  57. package/dist/index.mjs +147 -26
  58. package/dist/index.mjs.map +1 -1
  59. package/dist/metadata-capture.d.mts +17 -0
  60. package/dist/metadata-capture.d.ts +17 -0
  61. package/dist/metadata-capture.js +25 -4
  62. package/dist/metadata-capture.js.map +1 -1
  63. package/dist/metadata-capture.mjs +25 -4
  64. package/dist/metadata-capture.mjs.map +1 -1
  65. package/dist/platform-signatures.d.mts +18 -1
  66. package/dist/platform-signatures.d.ts +18 -1
  67. package/dist/platform-signatures.js +35 -2
  68. package/dist/platform-signatures.js.map +1 -1
  69. package/dist/platform-signatures.mjs +35 -2
  70. package/dist/platform-signatures.mjs.map +1 -1
  71. package/dist/registration/index.js +25 -4
  72. package/dist/registration/index.js.map +1 -1
  73. package/dist/registration/index.mjs +25 -4
  74. package/dist/registration/index.mjs.map +1 -1
  75. package/dist/transport/index.js +22 -1
  76. package/dist/transport/index.js.map +1 -1
  77. package/dist/transport/index.mjs +22 -1
  78. package/dist/transport/index.mjs.map +1 -1
  79. package/dist/verify.js +29 -11
  80. package/dist/verify.js.map +1 -1
  81. package/dist/verify.mjs +29 -11
  82. package/dist/verify.mjs.map +1 -1
  83. package/package.json +1 -1
@@ -1,3 +1,24 @@
1
+ // src/version.ts
2
+ var SDK_VERSION = "4.4.0";
3
+
4
+ // src/http.ts
5
+ var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
6
+ function withUserAgent(initHeaders) {
7
+ if (!initHeaders) return { "user-agent": SDK_USER_AGENT };
8
+ if (initHeaders instanceof Headers) {
9
+ const copy = new Headers(initHeaders);
10
+ if (!copy.has("user-agent")) copy.set("user-agent", SDK_USER_AGENT);
11
+ return copy;
12
+ }
13
+ if (Array.isArray(initHeaders)) {
14
+ const has2 = initHeaders.some(([name]) => name.toLowerCase() === "user-agent");
15
+ return has2 ? initHeaders : [...initHeaders, ["user-agent", SDK_USER_AGENT]];
16
+ }
17
+ const has = Object.keys(initHeaders).some((name) => name.toLowerCase() === "user-agent");
18
+ return has ? initHeaders : { "user-agent": SDK_USER_AGENT, ...initHeaders };
19
+ }
20
+ var sdkFetch = (input, init) => fetch(input, { ...init, headers: withUserAgent(init?.headers) });
21
+
1
22
  // src/access-levels.ts
2
23
  function getTrustLevel(score) {
3
24
  if (score >= 80) return "PLATINUM";
@@ -6,9 +27,6 @@ function getTrustLevel(score) {
6
27
  return "BRONZE";
7
28
  }
8
29
 
9
- // src/version.ts
10
- var SDK_VERSION = "4.1.0";
11
-
12
30
  // src/well-known.ts
13
31
  var CACHE_TTL_MS = 60 * 60 * 1e3;
14
32
  var cache = /* @__PURE__ */ new Map();
@@ -19,7 +37,7 @@ function wellKnownUrl(apiBaseUrl) {
19
37
  }
20
38
  async function fetchWellKnown(apiBaseUrl) {
21
39
  const url = wellKnownUrl(apiBaseUrl);
22
- const response = await fetch(url, {
40
+ const response = await sdkFetch(url, {
23
41
  method: "GET",
24
42
  headers: { Accept: "application/json" },
25
43
  signal: AbortSignal.timeout(5e3)
@@ -89,7 +107,7 @@ async function performInitCheck(apiBaseUrl, debug, strictInit, apiKey) {
89
107
  initCheckPerformed = true;
90
108
  try {
91
109
  const probeUrl = `${apiBaseUrl}/agents/verify-access`;
92
- const response = await fetch(probeUrl, { method: "HEAD" });
110
+ const response = await sdkFetch(probeUrl, { method: "HEAD" });
93
111
  const contentType = response.headers.get("content-type") ?? "";
94
112
  if (contentType.startsWith("text/html")) {
95
113
  const message = `[VerificationGateway] apiBaseUrl '${apiBaseUrl}' returned HTML (content-type: ${contentType}). This usually means apiBaseUrl is pointing at a marketing site instead of the API. Expected: 'https://astrasync.ai/api' (prod) or 'https://staging.astrasync.ai/api' (staging).`;
@@ -103,7 +121,7 @@ async function performInitCheck(apiBaseUrl, debug, strictInit, apiKey) {
103
121
  );
104
122
  }
105
123
  if (apiKey) {
106
- const selfCheck = await fetch(`${apiBaseUrl}/agents/verify-access/self-check`, {
124
+ const selfCheck = await sdkFetch(`${apiBaseUrl}/agents/verify-access/self-check`, {
107
125
  headers: { Authorization: `Bearer ${apiKey}` }
108
126
  });
109
127
  if (selfCheck.status === 401) {
@@ -350,7 +368,7 @@ async function callVerifyAccessAPI(config, request) {
350
368
  headers["X-API-Key"] = config.apiKey;
351
369
  }
352
370
  try {
353
- const response = await fetch(`${config.apiBaseUrl}/agents/verify-access`, {
371
+ const response = await sdkFetch(`${config.apiBaseUrl}/agents/verify-access`, {
354
372
  method: "POST",
355
373
  headers,
356
374
  body: JSON.stringify(body),
@@ -593,7 +611,7 @@ async function recordDecision(config, sessionId, decision, reason) {
593
611
  headers["Authorization"] = `Bearer ${config.apiKey}`;
594
612
  headers["X-API-Key"] = config.apiKey;
595
613
  }
596
- await fetch(`${config.apiBaseUrl}/agents/verify-access/${sessionId}/decision`, {
614
+ await sdkFetch(`${config.apiBaseUrl}/agents/verify-access/${sessionId}/decision`, {
597
615
  method: "POST",
598
616
  headers,
599
617
  body: JSON.stringify({ decision, reason })
@@ -638,7 +656,13 @@ var PLATFORM_HEADER_NAMES = /* @__PURE__ */ new Set([
638
656
  "x-agent-card-url",
639
657
  "x-agent-provider"
640
658
  ]);
641
- var PLATFORM_HEADER_PREFIXES = ["x-goog-", "x-stainless-", "x-anthropic-", "x-openai-"];
659
+ var PLATFORM_HEADER_PREFIXES = [
660
+ "x-goog-",
661
+ "x-stainless-",
662
+ "x-anthropic-",
663
+ "x-openai-",
664
+ "sec-ch-"
665
+ ];
642
666
  var KEY_FORMAT_PREFIXES = [
643
667
  "sk-ant-api03",
644
668
  "sk-ant-api",
@@ -710,6 +734,7 @@ function sanitizeHeaders(raw) {
710
734
  const headers = {};
711
735
  const platformHeaders = {};
712
736
  let apiKeyFormat;
737
+ let cookieCount;
713
738
  let totalBytes = 0;
714
739
  let count = 0;
715
740
  if (!raw) return { headers };
@@ -724,6 +749,9 @@ function sanitizeHeaders(raw) {
724
749
  if (fmt && !apiKeyFormat) apiKeyFormat = fmt;
725
750
  continue;
726
751
  }
752
+ if (name === "cookie") {
753
+ cookieCount = joined.split(";").filter((s) => s.trim().length > 0).length;
754
+ }
727
755
  if (isSecretHeader(name)) continue;
728
756
  let value = joined;
729
757
  if (byteLength(value) > MAX_HEADER_VALUE_BYTES) {
@@ -739,6 +767,7 @@ function sanitizeHeaders(raw) {
739
767
  const result = { headers };
740
768
  if (apiKeyFormat) result.apiKeyFormat = apiKeyFormat;
741
769
  if (Object.keys(platformHeaders).length > 0) result.platformHeaders = platformHeaders;
770
+ if (cookieCount !== void 0) result.cookieCount = cookieCount;
742
771
  return result;
743
772
  }
744
773
  var CONNECTION_HEADER_SOURCES = [
@@ -750,6 +779,9 @@ var CONNECTION_HEADER_SOURCES = [
750
779
  ["region", ["x-vercel-ip-country-region", "cloudfront-viewer-country-region"]],
751
780
  ["countryRegionName", ["cloudfront-viewer-country-region-name"]],
752
781
  ["city", ["x-vercel-ip-city", "cloudfront-viewer-city"]],
782
+ ["latitude", ["x-vercel-ip-latitude", "cloudfront-viewer-latitude"]],
783
+ ["longitude", ["x-vercel-ip-longitude", "cloudfront-viewer-longitude"]],
784
+ ["postalCode", ["x-vercel-ip-postal-code", "cloudfront-viewer-postal-code"]],
753
785
  ["asn", ["cloudfront-viewer-asn"]],
754
786
  ["tlsVersion", ["cloudfront-viewer-tls"]],
755
787
  ["httpVersion", ["cloudfront-viewer-http-version"]],
@@ -784,19 +816,25 @@ function deriveConnectionFromHeaders(headers) {
784
816
  }
785
817
  }
786
818
  }
787
- if (!connection.ip) {
819
+ {
788
820
  const addr = lower["cloudfront-viewer-address"]?.trim();
789
- if (addr) connection.ip = addr.replace(/:\d+$/, "");
821
+ const portMatch = addr?.match(/:(\d+)$/);
822
+ if (portMatch) connection.sourcePort = portMatch[1];
823
+ if (!connection.ip && addr) connection.ip = addr.replace(/:\d+$/, "");
790
824
  }
791
825
  if (!connection.ip) {
792
826
  const xff = lower["x-forwarded-for"];
793
827
  const client = xff?.split(",")[0]?.trim();
794
828
  if (client) connection.ip = client;
795
829
  }
830
+ if (!connection.tlsCipher) {
831
+ const cipher = connection.tlsVersion?.split(":")[1];
832
+ if (cipher) connection.tlsCipher = cipher;
833
+ }
796
834
  return Object.keys(connection).length > 0 ? connection : void 0;
797
835
  }
798
836
  function buildSdkObservedMetadata(rawHeaders) {
799
- const { headers, apiKeyFormat, platformHeaders } = sanitizeHeaders(rawHeaders);
837
+ const { headers, apiKeyFormat, platformHeaders, cookieCount } = sanitizeHeaders(rawHeaders);
800
838
  const flat = {};
801
839
  if (rawHeaders) {
802
840
  for (const name of Object.keys(rawHeaders)) {
@@ -811,6 +849,7 @@ function buildSdkObservedMetadata(rawHeaders) {
811
849
  ...apiKeyFormat && { apiKeyFormat },
812
850
  ...platformHeaders && { platformHeaders },
813
851
  ...connection && { connection },
852
+ ...cookieCount !== void 0 && { cookieCount },
814
853
  schemaVersion: CAPTURE_SCHEMA_VERSION
815
854
  };
816
855
  }
@@ -842,7 +881,7 @@ function resolvePollUrl(config, pollUrl) {
842
881
  async function pollStepUpStatus(config, approval) {
843
882
  if (!approval.pollUrl) return null;
844
883
  try {
845
- const res = await fetch(resolvePollUrl(config, approval.pollUrl), {
884
+ const res = await sdkFetch(resolvePollUrl(config, approval.pollUrl), {
846
885
  method: "GET",
847
886
  signal: AbortSignal.timeout(POLL_REQUEST_TIMEOUT_MS)
848
887
  });