@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.
- package/dist/adapter-interface/interface.d.mts +2 -2
- package/dist/adapter-interface/interface.d.ts +2 -2
- package/dist/adapters/express.d.mts +2 -2
- package/dist/adapters/express.d.ts +2 -2
- package/dist/adapters/express.js +85 -8
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +85 -8
- package/dist/adapters/express.mjs.map +1 -1
- package/dist/adapters/mcp.d.mts +1 -1
- package/dist/adapters/mcp.d.ts +1 -1
- package/dist/adapters/mcp.js +90 -8
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +90 -8
- package/dist/adapters/mcp.mjs.map +1 -1
- package/dist/adapters/nextjs.d.mts +2 -2
- package/dist/adapters/nextjs.d.ts +2 -2
- package/dist/adapters/nextjs.js +86 -8
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +86 -8
- package/dist/adapters/nextjs.mjs.map +1 -1
- package/dist/adapters/sdk.d.mts +2 -2
- package/dist/adapters/sdk.d.ts +2 -2
- package/dist/adapters/sdk.js +71 -8
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +71 -8
- package/dist/adapters/sdk.mjs.map +1 -1
- package/dist/agent/index.d.mts +2 -2
- package/dist/agent/index.d.ts +2 -2
- package/dist/bin/astrasync-claude-hook.js +71 -8
- package/dist/bin/astrasync-codex-hook.js +71 -8
- package/dist/bin/astrasync-guard.js +71 -8
- package/dist/bin/astrasync.js +71 -8
- package/dist/browser/background.js +71 -8
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +71 -8
- package/dist/browser/background.mjs.map +1 -1
- package/dist/browser/browser-adapter.d.mts +2 -2
- package/dist/browser/browser-adapter.d.ts +2 -2
- package/dist/claude-code/claude-code-adapter.d.mts +2 -2
- package/dist/claude-code/claude-code-adapter.d.ts +2 -2
- package/dist/cli/index.d.mts +2 -2
- package/dist/cli/index.d.ts +2 -2
- package/dist/codex/index.d.mts +2 -2
- package/dist/codex/index.d.ts +2 -2
- package/dist/codex/index.js +71 -8
- package/dist/codex/index.js.map +1 -1
- package/dist/codex/index.mjs +71 -8
- package/dist/codex/index.mjs.map +1 -1
- package/dist/cursor/cursor-adapter.d.mts +2 -2
- package/dist/cursor/cursor-adapter.d.ts +2 -2
- package/dist/cursor/extension.d.mts +2 -2
- package/dist/cursor/extension.d.ts +2 -2
- package/dist/cursor/extension.js +71 -8
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +71 -8
- package/dist/cursor/extension.mjs.map +1 -1
- package/dist/edge-config.d.mts +1 -1
- package/dist/edge-config.d.ts +1 -1
- package/dist/{express-B39o89gf.d.mts → express-BZajRs4i.d.mts} +1 -1
- package/dist/{express-BuxKNO_q.d.ts → express-CjCUB1k7.d.ts} +1 -1
- package/dist/gateway/gateway.d.mts +2 -2
- package/dist/gateway/gateway.d.ts +2 -2
- package/dist/gateway/gateway.js +71 -8
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +71 -8
- package/dist/gateway/gateway.mjs.map +1 -1
- package/dist/git-trigger/git-hooks.d.mts +2 -2
- package/dist/git-trigger/git-hooks.d.ts +2 -2
- package/dist/{index-DME3w3lf.d.mts → index-B0cyMZDL.d.mts} +1 -1
- package/dist/{index-CqydB4ks.d.mts → index-BRYteOqO.d.mts} +1 -1
- package/dist/{index-BG62SXso.d.ts → index-BZQdVqNw.d.ts} +1 -1
- package/dist/{index-CLHdqs2M.d.ts → index-adgKhujR.d.ts} +1 -1
- package/dist/index.d.mts +8 -8
- package/dist/index.d.ts +8 -8
- package/dist/index.js +119 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +119 -8
- package/dist/index.mjs.map +1 -1
- package/dist/local-evaluator/evaluator.d.mts +2 -2
- package/dist/local-evaluator/evaluator.d.ts +2 -2
- package/dist/{nextjs-Ddlw_J1J.d.ts → nextjs-D_iFf5k-.d.ts} +1 -1
- package/dist/{nextjs-D74W7wt-.d.mts → nextjs-DeUTnOBd.d.mts} +1 -1
- package/dist/{sdk-CT7gdkfR.d.ts → sdk-BM3mwEAq.d.ts} +1 -1
- package/dist/{sdk-Bn6bj7kt.d.mts → sdk-_il1Q41f.d.mts} +1 -1
- package/dist/transport/index.d.mts +2 -2
- package/dist/transport/index.d.ts +2 -2
- package/dist/{types-BntuzEEn.d.mts → types-BcDf9Kk0.d.mts} +15 -0
- package/dist/{types-DHu7m9HI.d.ts → types-CHKCgDFC.d.ts} +1 -1
- package/dist/{types-Djw4GLtz.d.mts → types-DfnP7JiM.d.mts} +1 -1
- package/dist/{types-SDu4Llbe.d.ts → types-fTQD448H.d.ts} +15 -0
- package/dist/ui/index.d.mts +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/dist/verify.d.mts +4 -2
- package/dist/verify.d.ts +4 -2
- package/dist/verify.js +76 -8
- package/dist/verify.js.map +1 -1
- package/dist/verify.mjs +75 -8
- package/dist/verify.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -3936,7 +3936,7 @@ function getTrustLevel(score) {
|
|
|
3936
3936
|
}
|
|
3937
3937
|
|
|
3938
3938
|
// src/version.ts
|
|
3939
|
-
var SDK_VERSION = "
|
|
3939
|
+
var SDK_VERSION = "4.0.0";
|
|
3940
3940
|
|
|
3941
3941
|
// src/well-known.ts
|
|
3942
3942
|
var CACHE_TTL_MS = 60 * 60 * 1e3;
|
|
@@ -3962,7 +3962,7 @@ var DEFAULT_CONFIG = {
|
|
|
3962
3962
|
};
|
|
3963
3963
|
var initCheckPerformed = false;
|
|
3964
3964
|
var deprecationWarningShown = false;
|
|
3965
|
-
async function performInitCheck(apiBaseUrl, debug, strictInit) {
|
|
3965
|
+
async function performInitCheck(apiBaseUrl, debug, strictInit, apiKey) {
|
|
3966
3966
|
initCheckPerformed = true;
|
|
3967
3967
|
try {
|
|
3968
3968
|
const probeUrl = `${apiBaseUrl}/agents/verify-access`;
|
|
@@ -3979,6 +3979,28 @@ async function performInitCheck(apiBaseUrl, debug, strictInit) {
|
|
|
3979
3979
|
`[VerificationGateway] init check passed for ${apiBaseUrl} (content-type: ${contentType})`
|
|
3980
3980
|
);
|
|
3981
3981
|
}
|
|
3982
|
+
if (apiKey) {
|
|
3983
|
+
const selfCheck = await fetch(`${apiBaseUrl}/agents/verify-access/self-check`, {
|
|
3984
|
+
headers: { Authorization: `Bearer ${apiKey}` }
|
|
3985
|
+
});
|
|
3986
|
+
if (selfCheck.status === 401) {
|
|
3987
|
+
const body = await selfCheck.json().catch(() => ({}));
|
|
3988
|
+
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}` : "") + `.`;
|
|
3989
|
+
if (strictInit) {
|
|
3990
|
+
throw new Error(`${message} (strictInit=true)`);
|
|
3991
|
+
}
|
|
3992
|
+
console.error(message);
|
|
3993
|
+
} else if (selfCheck.ok) {
|
|
3994
|
+
const body = await selfCheck.json().catch(() => ({}));
|
|
3995
|
+
if (typeof body.daysToExpiry === "number" && body.daysToExpiry <= 7) {
|
|
3996
|
+
console.warn(
|
|
3997
|
+
`[VerificationGateway] the configured AstraSync API key expires in ${body.daysToExpiry} day(s) \u2014 rotate it at Settings \u2192 Developer Tools before integrations start failing.`
|
|
3998
|
+
);
|
|
3999
|
+
} else if (debug) {
|
|
4000
|
+
console.log("[VerificationGateway] API key self-check passed");
|
|
4001
|
+
}
|
|
4002
|
+
}
|
|
4003
|
+
}
|
|
3982
4004
|
} catch (err) {
|
|
3983
4005
|
if (strictInit) {
|
|
3984
4006
|
throw err;
|
|
@@ -4056,8 +4078,17 @@ function cacheResult(request, result, configuredTtl, counterpartyId) {
|
|
|
4056
4078
|
function createGuidanceResponse(_config, reason, options = {}) {
|
|
4057
4079
|
const source = options.source ?? "no_credentials";
|
|
4058
4080
|
const isApiError = source === "api_error";
|
|
4081
|
+
const isMisconfig = source === "merchant_misconfig";
|
|
4059
4082
|
const urls = options.urls;
|
|
4060
|
-
const guidance =
|
|
4083
|
+
const guidance = isMisconfig ? {
|
|
4084
|
+
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.",
|
|
4085
|
+
registrationUrl: urls?.registrationUrl ?? "",
|
|
4086
|
+
documentationUrl: options.remediation?.docsUrl ?? urls?.documentationUrl ?? "",
|
|
4087
|
+
steps: [
|
|
4088
|
+
"Report the failure to the site operator \u2014 their AstraSync API key needs rotating",
|
|
4089
|
+
"Do not retry: the failure is deterministic until the operator updates their key"
|
|
4090
|
+
]
|
|
4091
|
+
} : isApiError ? {
|
|
4061
4092
|
message: "Verification is temporarily unavailable. Retry with exponential backoff; if the issue persists, contact support with the correlationId.",
|
|
4062
4093
|
registrationUrl: urls?.registrationUrl ?? "",
|
|
4063
4094
|
documentationUrl: urls?.documentationUrl ?? "",
|
|
@@ -4095,13 +4126,22 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
4095
4126
|
// partners (and their custom onDenied handlers) can branch on
|
|
4096
4127
|
// dimension. Without this, the synthesised stub was indistinguishable
|
|
4097
4128
|
// from a real policy deny.
|
|
4098
|
-
failures:
|
|
4129
|
+
failures: isMisconfig ? [
|
|
4130
|
+
{
|
|
4131
|
+
dimension: "verify_access.merchant_misconfigured",
|
|
4132
|
+
message: reason ?? "The integration API key was rejected by AstraSync",
|
|
4133
|
+
guidance: guidance.message
|
|
4134
|
+
}
|
|
4135
|
+
] : isApiError ? [
|
|
4099
4136
|
{
|
|
4100
4137
|
dimension: "verify_access.api_error",
|
|
4101
4138
|
message: reason ?? "Verification temporarily unavailable",
|
|
4102
4139
|
guidance: guidance.message
|
|
4103
4140
|
}
|
|
4104
4141
|
] : void 0,
|
|
4142
|
+
// 4.0.0: typed marker so adapters render the misconfig envelope (503 +
|
|
4143
|
+
// MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
|
|
4144
|
+
...isMisconfig && { misconfigured: true },
|
|
4105
4145
|
correlationId: options.correlationId,
|
|
4106
4146
|
attemptId: options.attemptId,
|
|
4107
4147
|
verifiedAt: /* @__PURE__ */ new Date()
|
|
@@ -4156,7 +4196,8 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4156
4196
|
const response = await fetch(`${config.apiBaseUrl}/agents/verify-access`, {
|
|
4157
4197
|
method: "POST",
|
|
4158
4198
|
headers,
|
|
4159
|
-
body: JSON.stringify(body)
|
|
4199
|
+
body: JSON.stringify(body),
|
|
4200
|
+
signal: AbortSignal.timeout(config.verifyTimeoutMs ?? 1e4)
|
|
4160
4201
|
});
|
|
4161
4202
|
const data = await response.json();
|
|
4162
4203
|
if (response.status === 410) {
|
|
@@ -4180,6 +4221,17 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4180
4221
|
};
|
|
4181
4222
|
}
|
|
4182
4223
|
if (!response.ok) {
|
|
4224
|
+
if (response.status === 401) {
|
|
4225
|
+
return {
|
|
4226
|
+
success: false,
|
|
4227
|
+
error: data.message || data.error || "Integration API key rejected",
|
|
4228
|
+
misconfig: true,
|
|
4229
|
+
misconfigCode: typeof data?.code === "string" ? data.code : void 0,
|
|
4230
|
+
remediation: data?.remediation && typeof data.remediation === "object" ? data.remediation : void 0,
|
|
4231
|
+
correlationId: typeof data?.correlationId === "string" ? data.correlationId : void 0,
|
|
4232
|
+
attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0
|
|
4233
|
+
};
|
|
4234
|
+
}
|
|
4183
4235
|
return {
|
|
4184
4236
|
success: false,
|
|
4185
4237
|
error: data.message || data.error || `API returned ${response.status}`,
|
|
@@ -4201,9 +4253,19 @@ async function verify(config, request, options) {
|
|
|
4201
4253
|
const urls = mergedConfig.apiBaseUrl ? getCachedWellKnownUrls(mergedConfig.apiBaseUrl) : void 0;
|
|
4202
4254
|
if (!initCheckPerformed && !mergedConfig.disableInitChecks && mergedConfig.apiBaseUrl) {
|
|
4203
4255
|
if (mergedConfig.strictInit) {
|
|
4204
|
-
await performInitCheck(
|
|
4256
|
+
await performInitCheck(
|
|
4257
|
+
mergedConfig.apiBaseUrl,
|
|
4258
|
+
mergedConfig.debug,
|
|
4259
|
+
true,
|
|
4260
|
+
mergedConfig.apiKey
|
|
4261
|
+
);
|
|
4205
4262
|
} else {
|
|
4206
|
-
void performInitCheck(
|
|
4263
|
+
void performInitCheck(
|
|
4264
|
+
mergedConfig.apiBaseUrl,
|
|
4265
|
+
mergedConfig.debug,
|
|
4266
|
+
false,
|
|
4267
|
+
mergedConfig.apiKey
|
|
4268
|
+
);
|
|
4207
4269
|
}
|
|
4208
4270
|
}
|
|
4209
4271
|
if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
|
|
@@ -4242,9 +4304,10 @@ async function verify(config, request, options) {
|
|
|
4242
4304
|
const serverDenialReasons = Array.isArray(rawServerDenialReasons) && rawServerDenialReasons.length > 0 ? rawServerDenialReasons : void 0;
|
|
4243
4305
|
if (!apiResponse.success) {
|
|
4244
4306
|
return createGuidanceResponse(mergedConfig, apiResponse.error, {
|
|
4245
|
-
source: "api_error",
|
|
4307
|
+
source: apiResponse.misconfig ? "merchant_misconfig" : "api_error",
|
|
4246
4308
|
correlationId: apiResponse.correlationId,
|
|
4247
4309
|
attemptId: apiResponse.attemptId,
|
|
4310
|
+
remediation: apiResponse.remediation,
|
|
4248
4311
|
urls
|
|
4249
4312
|
});
|
|
4250
4313
|
}
|