@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
|
@@ -3938,7 +3938,7 @@ function getTrustLevel(score) {
|
|
|
3938
3938
|
}
|
|
3939
3939
|
|
|
3940
3940
|
// src/version.ts
|
|
3941
|
-
var SDK_VERSION = "
|
|
3941
|
+
var SDK_VERSION = "4.0.0";
|
|
3942
3942
|
|
|
3943
3943
|
// src/well-known.ts
|
|
3944
3944
|
var CACHE_TTL_MS = 60 * 60 * 1e3;
|
|
@@ -3964,7 +3964,7 @@ var DEFAULT_CONFIG = {
|
|
|
3964
3964
|
};
|
|
3965
3965
|
var initCheckPerformed = false;
|
|
3966
3966
|
var deprecationWarningShown = false;
|
|
3967
|
-
async function performInitCheck(apiBaseUrl, debug, strictInit) {
|
|
3967
|
+
async function performInitCheck(apiBaseUrl, debug, strictInit, apiKey) {
|
|
3968
3968
|
initCheckPerformed = true;
|
|
3969
3969
|
try {
|
|
3970
3970
|
const probeUrl = `${apiBaseUrl}/agents/verify-access`;
|
|
@@ -3981,6 +3981,28 @@ async function performInitCheck(apiBaseUrl, debug, strictInit) {
|
|
|
3981
3981
|
`[VerificationGateway] init check passed for ${apiBaseUrl} (content-type: ${contentType})`
|
|
3982
3982
|
);
|
|
3983
3983
|
}
|
|
3984
|
+
if (apiKey) {
|
|
3985
|
+
const selfCheck = await fetch(`${apiBaseUrl}/agents/verify-access/self-check`, {
|
|
3986
|
+
headers: { Authorization: `Bearer ${apiKey}` }
|
|
3987
|
+
});
|
|
3988
|
+
if (selfCheck.status === 401) {
|
|
3989
|
+
const body = await selfCheck.json().catch(() => ({}));
|
|
3990
|
+
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}` : "") + `.`;
|
|
3991
|
+
if (strictInit) {
|
|
3992
|
+
throw new Error(`${message} (strictInit=true)`);
|
|
3993
|
+
}
|
|
3994
|
+
console.error(message);
|
|
3995
|
+
} else if (selfCheck.ok) {
|
|
3996
|
+
const body = await selfCheck.json().catch(() => ({}));
|
|
3997
|
+
if (typeof body.daysToExpiry === "number" && body.daysToExpiry <= 7) {
|
|
3998
|
+
console.warn(
|
|
3999
|
+
`[VerificationGateway] the configured AstraSync API key expires in ${body.daysToExpiry} day(s) \u2014 rotate it at Settings \u2192 Developer Tools before integrations start failing.`
|
|
4000
|
+
);
|
|
4001
|
+
} else if (debug) {
|
|
4002
|
+
console.log("[VerificationGateway] API key self-check passed");
|
|
4003
|
+
}
|
|
4004
|
+
}
|
|
4005
|
+
}
|
|
3984
4006
|
} catch (err) {
|
|
3985
4007
|
if (strictInit) {
|
|
3986
4008
|
throw err;
|
|
@@ -4058,8 +4080,17 @@ function cacheResult(request, result, configuredTtl, counterpartyId) {
|
|
|
4058
4080
|
function createGuidanceResponse(_config, reason, options = {}) {
|
|
4059
4081
|
const source = options.source ?? "no_credentials";
|
|
4060
4082
|
const isApiError = source === "api_error";
|
|
4083
|
+
const isMisconfig = source === "merchant_misconfig";
|
|
4061
4084
|
const urls = options.urls;
|
|
4062
|
-
const guidance =
|
|
4085
|
+
const guidance = isMisconfig ? {
|
|
4086
|
+
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.",
|
|
4087
|
+
registrationUrl: urls?.registrationUrl ?? "",
|
|
4088
|
+
documentationUrl: options.remediation?.docsUrl ?? urls?.documentationUrl ?? "",
|
|
4089
|
+
steps: [
|
|
4090
|
+
"Report the failure to the site operator \u2014 their AstraSync API key needs rotating",
|
|
4091
|
+
"Do not retry: the failure is deterministic until the operator updates their key"
|
|
4092
|
+
]
|
|
4093
|
+
} : isApiError ? {
|
|
4063
4094
|
message: "Verification is temporarily unavailable. Retry with exponential backoff; if the issue persists, contact support with the correlationId.",
|
|
4064
4095
|
registrationUrl: urls?.registrationUrl ?? "",
|
|
4065
4096
|
documentationUrl: urls?.documentationUrl ?? "",
|
|
@@ -4097,13 +4128,22 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
4097
4128
|
// partners (and their custom onDenied handlers) can branch on
|
|
4098
4129
|
// dimension. Without this, the synthesised stub was indistinguishable
|
|
4099
4130
|
// from a real policy deny.
|
|
4100
|
-
failures:
|
|
4131
|
+
failures: isMisconfig ? [
|
|
4132
|
+
{
|
|
4133
|
+
dimension: "verify_access.merchant_misconfigured",
|
|
4134
|
+
message: reason ?? "The integration API key was rejected by AstraSync",
|
|
4135
|
+
guidance: guidance.message
|
|
4136
|
+
}
|
|
4137
|
+
] : isApiError ? [
|
|
4101
4138
|
{
|
|
4102
4139
|
dimension: "verify_access.api_error",
|
|
4103
4140
|
message: reason ?? "Verification temporarily unavailable",
|
|
4104
4141
|
guidance: guidance.message
|
|
4105
4142
|
}
|
|
4106
4143
|
] : void 0,
|
|
4144
|
+
// 4.0.0: typed marker so adapters render the misconfig envelope (503 +
|
|
4145
|
+
// MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
|
|
4146
|
+
...isMisconfig && { misconfigured: true },
|
|
4107
4147
|
correlationId: options.correlationId,
|
|
4108
4148
|
attemptId: options.attemptId,
|
|
4109
4149
|
verifiedAt: /* @__PURE__ */ new Date()
|
|
@@ -4158,7 +4198,8 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4158
4198
|
const response = await fetch(`${config.apiBaseUrl}/agents/verify-access`, {
|
|
4159
4199
|
method: "POST",
|
|
4160
4200
|
headers,
|
|
4161
|
-
body: JSON.stringify(body)
|
|
4201
|
+
body: JSON.stringify(body),
|
|
4202
|
+
signal: AbortSignal.timeout(config.verifyTimeoutMs ?? 1e4)
|
|
4162
4203
|
});
|
|
4163
4204
|
const data = await response.json();
|
|
4164
4205
|
if (response.status === 410) {
|
|
@@ -4182,6 +4223,17 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4182
4223
|
};
|
|
4183
4224
|
}
|
|
4184
4225
|
if (!response.ok) {
|
|
4226
|
+
if (response.status === 401) {
|
|
4227
|
+
return {
|
|
4228
|
+
success: false,
|
|
4229
|
+
error: data.message || data.error || "Integration API key rejected",
|
|
4230
|
+
misconfig: true,
|
|
4231
|
+
misconfigCode: typeof data?.code === "string" ? data.code : void 0,
|
|
4232
|
+
remediation: data?.remediation && typeof data.remediation === "object" ? data.remediation : void 0,
|
|
4233
|
+
correlationId: typeof data?.correlationId === "string" ? data.correlationId : void 0,
|
|
4234
|
+
attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0
|
|
4235
|
+
};
|
|
4236
|
+
}
|
|
4185
4237
|
return {
|
|
4186
4238
|
success: false,
|
|
4187
4239
|
error: data.message || data.error || `API returned ${response.status}`,
|
|
@@ -4203,9 +4255,19 @@ async function verify(config, request, options) {
|
|
|
4203
4255
|
const urls = mergedConfig.apiBaseUrl ? getCachedWellKnownUrls(mergedConfig.apiBaseUrl) : void 0;
|
|
4204
4256
|
if (!initCheckPerformed && !mergedConfig.disableInitChecks && mergedConfig.apiBaseUrl) {
|
|
4205
4257
|
if (mergedConfig.strictInit) {
|
|
4206
|
-
await performInitCheck(
|
|
4258
|
+
await performInitCheck(
|
|
4259
|
+
mergedConfig.apiBaseUrl,
|
|
4260
|
+
mergedConfig.debug,
|
|
4261
|
+
true,
|
|
4262
|
+
mergedConfig.apiKey
|
|
4263
|
+
);
|
|
4207
4264
|
} else {
|
|
4208
|
-
void performInitCheck(
|
|
4265
|
+
void performInitCheck(
|
|
4266
|
+
mergedConfig.apiBaseUrl,
|
|
4267
|
+
mergedConfig.debug,
|
|
4268
|
+
false,
|
|
4269
|
+
mergedConfig.apiKey
|
|
4270
|
+
);
|
|
4209
4271
|
}
|
|
4210
4272
|
}
|
|
4211
4273
|
if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
|
|
@@ -4244,9 +4306,10 @@ async function verify(config, request, options) {
|
|
|
4244
4306
|
const serverDenialReasons = Array.isArray(rawServerDenialReasons) && rawServerDenialReasons.length > 0 ? rawServerDenialReasons : void 0;
|
|
4245
4307
|
if (!apiResponse.success) {
|
|
4246
4308
|
return createGuidanceResponse(mergedConfig, apiResponse.error, {
|
|
4247
|
-
source: "api_error",
|
|
4309
|
+
source: apiResponse.misconfig ? "merchant_misconfig" : "api_error",
|
|
4248
4310
|
correlationId: apiResponse.correlationId,
|
|
4249
4311
|
attemptId: apiResponse.attemptId,
|
|
4312
|
+
remediation: apiResponse.remediation,
|
|
4250
4313
|
urls
|
|
4251
4314
|
});
|
|
4252
4315
|
}
|