@astrasyncai/verification-gateway 3.12.0 → 4.0.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 (99) hide show
  1. package/dist/adapter-interface/interface.d.mts +2 -2
  2. package/dist/adapter-interface/interface.d.ts +2 -2
  3. package/dist/adapters/express.d.mts +2 -2
  4. package/dist/adapters/express.d.ts +2 -2
  5. package/dist/adapters/express.js +85 -8
  6. package/dist/adapters/express.js.map +1 -1
  7. package/dist/adapters/express.mjs +85 -8
  8. package/dist/adapters/express.mjs.map +1 -1
  9. package/dist/adapters/mcp.d.mts +1 -1
  10. package/dist/adapters/mcp.d.ts +1 -1
  11. package/dist/adapters/mcp.js +90 -8
  12. package/dist/adapters/mcp.js.map +1 -1
  13. package/dist/adapters/mcp.mjs +90 -8
  14. package/dist/adapters/mcp.mjs.map +1 -1
  15. package/dist/adapters/nextjs.d.mts +2 -2
  16. package/dist/adapters/nextjs.d.ts +2 -2
  17. package/dist/adapters/nextjs.js +86 -8
  18. package/dist/adapters/nextjs.js.map +1 -1
  19. package/dist/adapters/nextjs.mjs +86 -8
  20. package/dist/adapters/nextjs.mjs.map +1 -1
  21. package/dist/adapters/sdk.d.mts +2 -2
  22. package/dist/adapters/sdk.d.ts +2 -2
  23. package/dist/adapters/sdk.js +71 -8
  24. package/dist/adapters/sdk.js.map +1 -1
  25. package/dist/adapters/sdk.mjs +71 -8
  26. package/dist/adapters/sdk.mjs.map +1 -1
  27. package/dist/agent/index.d.mts +2 -2
  28. package/dist/agent/index.d.ts +2 -2
  29. package/dist/bin/astrasync-claude-hook.js +71 -8
  30. package/dist/bin/astrasync-codex-hook.js +71 -8
  31. package/dist/bin/astrasync-guard.js +71 -8
  32. package/dist/bin/astrasync.js +71 -8
  33. package/dist/browser/background.js +71 -8
  34. package/dist/browser/background.js.map +1 -1
  35. package/dist/browser/background.mjs +71 -8
  36. package/dist/browser/background.mjs.map +1 -1
  37. package/dist/browser/browser-adapter.d.mts +2 -2
  38. package/dist/browser/browser-adapter.d.ts +2 -2
  39. package/dist/claude-code/claude-code-adapter.d.mts +2 -2
  40. package/dist/claude-code/claude-code-adapter.d.ts +2 -2
  41. package/dist/cli/index.d.mts +2 -2
  42. package/dist/cli/index.d.ts +2 -2
  43. package/dist/codex/index.d.mts +2 -2
  44. package/dist/codex/index.d.ts +2 -2
  45. package/dist/codex/index.js +71 -8
  46. package/dist/codex/index.js.map +1 -1
  47. package/dist/codex/index.mjs +71 -8
  48. package/dist/codex/index.mjs.map +1 -1
  49. package/dist/cursor/cursor-adapter.d.mts +2 -2
  50. package/dist/cursor/cursor-adapter.d.ts +2 -2
  51. package/dist/cursor/extension.d.mts +2 -2
  52. package/dist/cursor/extension.d.ts +2 -2
  53. package/dist/cursor/extension.js +71 -8
  54. package/dist/cursor/extension.js.map +1 -1
  55. package/dist/cursor/extension.mjs +71 -8
  56. package/dist/cursor/extension.mjs.map +1 -1
  57. package/dist/edge-config.d.mts +1 -1
  58. package/dist/edge-config.d.ts +1 -1
  59. package/dist/{express-B39o89gf.d.mts → express-BZajRs4i.d.mts} +1 -1
  60. package/dist/{express-BuxKNO_q.d.ts → express-CjCUB1k7.d.ts} +1 -1
  61. package/dist/gateway/gateway.d.mts +2 -2
  62. package/dist/gateway/gateway.d.ts +2 -2
  63. package/dist/gateway/gateway.js +71 -8
  64. package/dist/gateway/gateway.js.map +1 -1
  65. package/dist/gateway/gateway.mjs +71 -8
  66. package/dist/gateway/gateway.mjs.map +1 -1
  67. package/dist/git-trigger/git-hooks.d.mts +2 -2
  68. package/dist/git-trigger/git-hooks.d.ts +2 -2
  69. package/dist/{index-DME3w3lf.d.mts → index-B0cyMZDL.d.mts} +1 -1
  70. package/dist/{index-CqydB4ks.d.mts → index-BRYteOqO.d.mts} +1 -1
  71. package/dist/{index-BG62SXso.d.ts → index-BZQdVqNw.d.ts} +1 -1
  72. package/dist/{index-CLHdqs2M.d.ts → index-adgKhujR.d.ts} +1 -1
  73. package/dist/index.d.mts +8 -8
  74. package/dist/index.d.ts +8 -8
  75. package/dist/index.js +119 -8
  76. package/dist/index.js.map +1 -1
  77. package/dist/index.mjs +119 -8
  78. package/dist/index.mjs.map +1 -1
  79. package/dist/local-evaluator/evaluator.d.mts +2 -2
  80. package/dist/local-evaluator/evaluator.d.ts +2 -2
  81. package/dist/{nextjs-Ddlw_J1J.d.ts → nextjs-D_iFf5k-.d.ts} +1 -1
  82. package/dist/{nextjs-D74W7wt-.d.mts → nextjs-DeUTnOBd.d.mts} +1 -1
  83. package/dist/{sdk-CT7gdkfR.d.ts → sdk-BM3mwEAq.d.ts} +1 -1
  84. package/dist/{sdk-Bn6bj7kt.d.mts → sdk-_il1Q41f.d.mts} +1 -1
  85. package/dist/transport/index.d.mts +2 -2
  86. package/dist/transport/index.d.ts +2 -2
  87. package/dist/{types-BntuzEEn.d.mts → types-BcDf9Kk0.d.mts} +15 -0
  88. package/dist/{types-DHu7m9HI.d.ts → types-CHKCgDFC.d.ts} +1 -1
  89. package/dist/{types-Djw4GLtz.d.mts → types-DfnP7JiM.d.mts} +1 -1
  90. package/dist/{types-SDu4Llbe.d.ts → types-fTQD448H.d.ts} +15 -0
  91. package/dist/ui/index.d.mts +1 -1
  92. package/dist/ui/index.d.ts +1 -1
  93. package/dist/verify.d.mts +4 -2
  94. package/dist/verify.d.ts +4 -2
  95. package/dist/verify.js +76 -8
  96. package/dist/verify.js.map +1 -1
  97. package/dist/verify.mjs +75 -8
  98. package/dist/verify.mjs.map +1 -1
  99. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import { PlatformAdapter, AdapterConfig } from '../adapter-interface/interface.mjs';
2
- import { P as PDLSSContext, V as VerificationDecision, A as AgentAction, I as InterceptResult } from '../types-Djw4GLtz.mjs';
2
+ import { P as PDLSSContext, V as VerificationDecision, A as AgentAction, I as InterceptResult } from '../types-DfnP7JiM.mjs';
3
3
  import '../gateway/gateway.mjs';
4
- import '../types-BntuzEEn.mjs';
4
+ import '../types-BcDf9Kk0.mjs';
5
5
  import '../metadata-capture.mjs';
6
6
 
7
7
  /**
@@ -1,7 +1,7 @@
1
1
  import { PlatformAdapter, AdapterConfig } from '../adapter-interface/interface.js';
2
- import { P as PDLSSContext, V as VerificationDecision, A as AgentAction, I as InterceptResult } from '../types-DHu7m9HI.js';
2
+ import { P as PDLSSContext, V as VerificationDecision, A as AgentAction, I as InterceptResult } from '../types-CHKCgDFC.js';
3
3
  import '../gateway/gateway.js';
4
- import '../types-SDu4Llbe.js';
4
+ import '../types-fTQD448H.js';
5
5
  import '../metadata-capture.js';
6
6
 
7
7
  /**
@@ -1,7 +1,7 @@
1
1
  import { PlatformAdapter, AdapterConfig } from '../adapter-interface/interface.mjs';
2
- import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-Djw4GLtz.mjs';
2
+ import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-DfnP7JiM.mjs';
3
3
  import '../gateway/gateway.mjs';
4
- import '../types-BntuzEEn.mjs';
4
+ import '../types-BcDf9Kk0.mjs';
5
5
  import '../metadata-capture.mjs';
6
6
 
7
7
  /**
@@ -1,7 +1,7 @@
1
1
  import { PlatformAdapter, AdapterConfig } from '../adapter-interface/interface.js';
2
- import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-DHu7m9HI.js';
2
+ import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-CHKCgDFC.js';
3
3
  import '../gateway/gateway.js';
4
- import '../types-SDu4Llbe.js';
4
+ import '../types-fTQD448H.js';
5
5
  import '../metadata-capture.js';
6
6
 
7
7
  /**
@@ -1,6 +1,6 @@
1
- import { b as LocalPurposeRule, d as LocalScope, c as LocalRiskThresholds, L as LocalPolicy, P as PDLSSContext, V as VerificationDecision, A as AgentAction, I as InterceptResult } from '../types-Djw4GLtz.mjs';
1
+ import { b as LocalPurposeRule, d as LocalScope, c as LocalRiskThresholds, L as LocalPolicy, P as PDLSSContext, V as VerificationDecision, A as AgentAction, I as InterceptResult } from '../types-DfnP7JiM.mjs';
2
2
  import { PlatformAdapter, AdapterConfig } from '../adapter-interface/interface.mjs';
3
- import '../types-BntuzEEn.mjs';
3
+ import '../types-BcDf9Kk0.mjs';
4
4
  import '../metadata-capture.mjs';
5
5
  import '../gateway/gateway.mjs';
6
6
 
@@ -1,6 +1,6 @@
1
- import { b as LocalPurposeRule, d as LocalScope, c as LocalRiskThresholds, L as LocalPolicy, P as PDLSSContext, V as VerificationDecision, A as AgentAction, I as InterceptResult } from '../types-DHu7m9HI.js';
1
+ import { b as LocalPurposeRule, d as LocalScope, c as LocalRiskThresholds, L as LocalPolicy, P as PDLSSContext, V as VerificationDecision, A as AgentAction, I as InterceptResult } from '../types-CHKCgDFC.js';
2
2
  import { PlatformAdapter, AdapterConfig } from '../adapter-interface/interface.js';
3
- import '../types-SDu4Llbe.js';
3
+ import '../types-fTQD448H.js';
4
4
  import '../metadata-capture.js';
5
5
  import '../gateway/gateway.js';
6
6
 
@@ -1,7 +1,7 @@
1
1
  import { PlatformAdapter, AdapterConfig } from '../adapter-interface/interface.mjs';
2
- import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-Djw4GLtz.mjs';
2
+ import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-DfnP7JiM.mjs';
3
3
  import { AstraSyncGateway } from '../gateway/gateway.mjs';
4
- import '../types-BntuzEEn.mjs';
4
+ import '../types-BcDf9Kk0.mjs';
5
5
  import '../metadata-capture.mjs';
6
6
 
7
7
  /**
@@ -1,7 +1,7 @@
1
1
  import { PlatformAdapter, AdapterConfig } from '../adapter-interface/interface.js';
2
- import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-DHu7m9HI.js';
2
+ import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-CHKCgDFC.js';
3
3
  import { AstraSyncGateway } from '../gateway/gateway.js';
4
- import '../types-SDu4Llbe.js';
4
+ import '../types-fTQD448H.js';
5
5
  import '../metadata-capture.js';
6
6
 
7
7
  /**
@@ -3985,7 +3985,7 @@ function getTrustLevel(score) {
3985
3985
  }
3986
3986
 
3987
3987
  // src/version.ts
3988
- var SDK_VERSION = "3.12.0";
3988
+ var SDK_VERSION = "4.0.0";
3989
3989
 
3990
3990
  // src/well-known.ts
3991
3991
  var CACHE_TTL_MS = 60 * 60 * 1e3;
@@ -4011,7 +4011,7 @@ var DEFAULT_CONFIG = {
4011
4011
  };
4012
4012
  var initCheckPerformed = false;
4013
4013
  var deprecationWarningShown = false;
4014
- async function performInitCheck(apiBaseUrl, debug, strictInit) {
4014
+ async function performInitCheck(apiBaseUrl, debug, strictInit, apiKey) {
4015
4015
  initCheckPerformed = true;
4016
4016
  try {
4017
4017
  const probeUrl = `${apiBaseUrl}/agents/verify-access`;
@@ -4028,6 +4028,28 @@ async function performInitCheck(apiBaseUrl, debug, strictInit) {
4028
4028
  `[VerificationGateway] init check passed for ${apiBaseUrl} (content-type: ${contentType})`
4029
4029
  );
4030
4030
  }
4031
+ if (apiKey) {
4032
+ const selfCheck = await fetch(`${apiBaseUrl}/agents/verify-access/self-check`, {
4033
+ headers: { Authorization: `Bearer ${apiKey}` }
4034
+ });
4035
+ if (selfCheck.status === 401) {
4036
+ const body = await selfCheck.json().catch(() => ({}));
4037
+ const message = `[VerificationGateway] the configured AstraSync API key was REJECTED at startup (${body.code ?? "api_key_invalid"}: ${body.message ?? "invalid key"}). Every inbound agent will be turned away until the key is rotated` + (body.remediation?.manageUrl ? ` at ${body.remediation.manageUrl}` : "") + `.`;
4038
+ if (strictInit) {
4039
+ throw new Error(`${message} (strictInit=true)`);
4040
+ }
4041
+ console.error(message);
4042
+ } else if (selfCheck.ok) {
4043
+ const body = await selfCheck.json().catch(() => ({}));
4044
+ if (typeof body.daysToExpiry === "number" && body.daysToExpiry <= 7) {
4045
+ console.warn(
4046
+ `[VerificationGateway] the configured AstraSync API key expires in ${body.daysToExpiry} day(s) \u2014 rotate it at Settings \u2192 Developer Tools before integrations start failing.`
4047
+ );
4048
+ } else if (debug) {
4049
+ console.log("[VerificationGateway] API key self-check passed");
4050
+ }
4051
+ }
4052
+ }
4031
4053
  } catch (err) {
4032
4054
  if (strictInit) {
4033
4055
  throw err;
@@ -4105,8 +4127,17 @@ function cacheResult(request, result, configuredTtl, counterpartyId) {
4105
4127
  function createGuidanceResponse(_config, reason, options = {}) {
4106
4128
  const source = options.source ?? "no_credentials";
4107
4129
  const isApiError = source === "api_error";
4130
+ const isMisconfig = source === "merchant_misconfig";
4108
4131
  const urls = options.urls;
4109
- const guidance = isApiError ? {
4132
+ const guidance = isMisconfig ? {
4133
+ message: "This site's AstraSync integration is misconfigured (its API key was revoked, expired, or rotated). Your identity and the AstraSync platform are fine \u2014 contact the site operator. Retrying will not help.",
4134
+ registrationUrl: urls?.registrationUrl ?? "",
4135
+ documentationUrl: options.remediation?.docsUrl ?? urls?.documentationUrl ?? "",
4136
+ steps: [
4137
+ "Report the failure to the site operator \u2014 their AstraSync API key needs rotating",
4138
+ "Do not retry: the failure is deterministic until the operator updates their key"
4139
+ ]
4140
+ } : isApiError ? {
4110
4141
  message: "Verification is temporarily unavailable. Retry with exponential backoff; if the issue persists, contact support with the correlationId.",
4111
4142
  registrationUrl: urls?.registrationUrl ?? "",
4112
4143
  documentationUrl: urls?.documentationUrl ?? "",
@@ -4144,13 +4175,22 @@ function createGuidanceResponse(_config, reason, options = {}) {
4144
4175
  // partners (and their custom onDenied handlers) can branch on
4145
4176
  // dimension. Without this, the synthesised stub was indistinguishable
4146
4177
  // from a real policy deny.
4147
- failures: isApiError ? [
4178
+ failures: isMisconfig ? [
4179
+ {
4180
+ dimension: "verify_access.merchant_misconfigured",
4181
+ message: reason ?? "The integration API key was rejected by AstraSync",
4182
+ guidance: guidance.message
4183
+ }
4184
+ ] : isApiError ? [
4148
4185
  {
4149
4186
  dimension: "verify_access.api_error",
4150
4187
  message: reason ?? "Verification temporarily unavailable",
4151
4188
  guidance: guidance.message
4152
4189
  }
4153
4190
  ] : void 0,
4191
+ // 4.0.0: typed marker so adapters render the misconfig envelope (503 +
4192
+ // MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
4193
+ ...isMisconfig && { misconfigured: true },
4154
4194
  correlationId: options.correlationId,
4155
4195
  attemptId: options.attemptId,
4156
4196
  verifiedAt: /* @__PURE__ */ new Date()
@@ -4205,7 +4245,8 @@ async function callVerifyAccessAPI(config, request) {
4205
4245
  const response = await fetch(`${config.apiBaseUrl}/agents/verify-access`, {
4206
4246
  method: "POST",
4207
4247
  headers,
4208
- body: JSON.stringify(body)
4248
+ body: JSON.stringify(body),
4249
+ signal: AbortSignal.timeout(config.verifyTimeoutMs ?? 1e4)
4209
4250
  });
4210
4251
  const data = await response.json();
4211
4252
  if (response.status === 410) {
@@ -4229,6 +4270,17 @@ async function callVerifyAccessAPI(config, request) {
4229
4270
  };
4230
4271
  }
4231
4272
  if (!response.ok) {
4273
+ if (response.status === 401) {
4274
+ return {
4275
+ success: false,
4276
+ error: data.message || data.error || "Integration API key rejected",
4277
+ misconfig: true,
4278
+ misconfigCode: typeof data?.code === "string" ? data.code : void 0,
4279
+ remediation: data?.remediation && typeof data.remediation === "object" ? data.remediation : void 0,
4280
+ correlationId: typeof data?.correlationId === "string" ? data.correlationId : void 0,
4281
+ attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0
4282
+ };
4283
+ }
4232
4284
  return {
4233
4285
  success: false,
4234
4286
  error: data.message || data.error || `API returned ${response.status}`,
@@ -4250,9 +4302,19 @@ async function verify(config, request, options) {
4250
4302
  const urls = mergedConfig.apiBaseUrl ? getCachedWellKnownUrls(mergedConfig.apiBaseUrl) : void 0;
4251
4303
  if (!initCheckPerformed && !mergedConfig.disableInitChecks && mergedConfig.apiBaseUrl) {
4252
4304
  if (mergedConfig.strictInit) {
4253
- await performInitCheck(mergedConfig.apiBaseUrl, mergedConfig.debug, true);
4305
+ await performInitCheck(
4306
+ mergedConfig.apiBaseUrl,
4307
+ mergedConfig.debug,
4308
+ true,
4309
+ mergedConfig.apiKey
4310
+ );
4254
4311
  } else {
4255
- void performInitCheck(mergedConfig.apiBaseUrl, mergedConfig.debug, false);
4312
+ void performInitCheck(
4313
+ mergedConfig.apiBaseUrl,
4314
+ mergedConfig.debug,
4315
+ false,
4316
+ mergedConfig.apiKey
4317
+ );
4256
4318
  }
4257
4319
  }
4258
4320
  if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
@@ -4291,9 +4353,10 @@ async function verify(config, request, options) {
4291
4353
  const serverDenialReasons = Array.isArray(rawServerDenialReasons) && rawServerDenialReasons.length > 0 ? rawServerDenialReasons : void 0;
4292
4354
  if (!apiResponse.success) {
4293
4355
  return createGuidanceResponse(mergedConfig, apiResponse.error, {
4294
- source: "api_error",
4356
+ source: apiResponse.misconfig ? "merchant_misconfig" : "api_error",
4295
4357
  correlationId: apiResponse.correlationId,
4296
4358
  attemptId: apiResponse.attemptId,
4359
+ remediation: apiResponse.remediation,
4297
4360
  urls
4298
4361
  });
4299
4362
  }