@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
|
@@ -3915,7 +3915,7 @@ function getTrustLevel(score) {
|
|
|
3915
3915
|
}
|
|
3916
3916
|
|
|
3917
3917
|
// src/version.ts
|
|
3918
|
-
var SDK_VERSION = "
|
|
3918
|
+
var SDK_VERSION = "4.0.0";
|
|
3919
3919
|
|
|
3920
3920
|
// src/well-known.ts
|
|
3921
3921
|
var CACHE_TTL_MS = 60 * 60 * 1e3;
|
|
@@ -3941,7 +3941,7 @@ var DEFAULT_CONFIG = {
|
|
|
3941
3941
|
};
|
|
3942
3942
|
var initCheckPerformed = false;
|
|
3943
3943
|
var deprecationWarningShown = false;
|
|
3944
|
-
async function performInitCheck(apiBaseUrl, debug, strictInit) {
|
|
3944
|
+
async function performInitCheck(apiBaseUrl, debug, strictInit, apiKey) {
|
|
3945
3945
|
initCheckPerformed = true;
|
|
3946
3946
|
try {
|
|
3947
3947
|
const probeUrl = `${apiBaseUrl}/agents/verify-access`;
|
|
@@ -3958,6 +3958,28 @@ async function performInitCheck(apiBaseUrl, debug, strictInit) {
|
|
|
3958
3958
|
`[VerificationGateway] init check passed for ${apiBaseUrl} (content-type: ${contentType})`
|
|
3959
3959
|
);
|
|
3960
3960
|
}
|
|
3961
|
+
if (apiKey) {
|
|
3962
|
+
const selfCheck = await fetch(`${apiBaseUrl}/agents/verify-access/self-check`, {
|
|
3963
|
+
headers: { Authorization: `Bearer ${apiKey}` }
|
|
3964
|
+
});
|
|
3965
|
+
if (selfCheck.status === 401) {
|
|
3966
|
+
const body = await selfCheck.json().catch(() => ({}));
|
|
3967
|
+
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}` : "") + `.`;
|
|
3968
|
+
if (strictInit) {
|
|
3969
|
+
throw new Error(`${message} (strictInit=true)`);
|
|
3970
|
+
}
|
|
3971
|
+
console.error(message);
|
|
3972
|
+
} else if (selfCheck.ok) {
|
|
3973
|
+
const body = await selfCheck.json().catch(() => ({}));
|
|
3974
|
+
if (typeof body.daysToExpiry === "number" && body.daysToExpiry <= 7) {
|
|
3975
|
+
console.warn(
|
|
3976
|
+
`[VerificationGateway] the configured AstraSync API key expires in ${body.daysToExpiry} day(s) \u2014 rotate it at Settings \u2192 Developer Tools before integrations start failing.`
|
|
3977
|
+
);
|
|
3978
|
+
} else if (debug) {
|
|
3979
|
+
console.log("[VerificationGateway] API key self-check passed");
|
|
3980
|
+
}
|
|
3981
|
+
}
|
|
3982
|
+
}
|
|
3961
3983
|
} catch (err) {
|
|
3962
3984
|
if (strictInit) {
|
|
3963
3985
|
throw err;
|
|
@@ -4035,8 +4057,17 @@ function cacheResult(request, result, configuredTtl, counterpartyId) {
|
|
|
4035
4057
|
function createGuidanceResponse(_config, reason, options = {}) {
|
|
4036
4058
|
const source = options.source ?? "no_credentials";
|
|
4037
4059
|
const isApiError = source === "api_error";
|
|
4060
|
+
const isMisconfig = source === "merchant_misconfig";
|
|
4038
4061
|
const urls = options.urls;
|
|
4039
|
-
const guidance =
|
|
4062
|
+
const guidance = isMisconfig ? {
|
|
4063
|
+
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.",
|
|
4064
|
+
registrationUrl: urls?.registrationUrl ?? "",
|
|
4065
|
+
documentationUrl: options.remediation?.docsUrl ?? urls?.documentationUrl ?? "",
|
|
4066
|
+
steps: [
|
|
4067
|
+
"Report the failure to the site operator \u2014 their AstraSync API key needs rotating",
|
|
4068
|
+
"Do not retry: the failure is deterministic until the operator updates their key"
|
|
4069
|
+
]
|
|
4070
|
+
} : isApiError ? {
|
|
4040
4071
|
message: "Verification is temporarily unavailable. Retry with exponential backoff; if the issue persists, contact support with the correlationId.",
|
|
4041
4072
|
registrationUrl: urls?.registrationUrl ?? "",
|
|
4042
4073
|
documentationUrl: urls?.documentationUrl ?? "",
|
|
@@ -4074,13 +4105,22 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
4074
4105
|
// partners (and their custom onDenied handlers) can branch on
|
|
4075
4106
|
// dimension. Without this, the synthesised stub was indistinguishable
|
|
4076
4107
|
// from a real policy deny.
|
|
4077
|
-
failures:
|
|
4108
|
+
failures: isMisconfig ? [
|
|
4109
|
+
{
|
|
4110
|
+
dimension: "verify_access.merchant_misconfigured",
|
|
4111
|
+
message: reason ?? "The integration API key was rejected by AstraSync",
|
|
4112
|
+
guidance: guidance.message
|
|
4113
|
+
}
|
|
4114
|
+
] : isApiError ? [
|
|
4078
4115
|
{
|
|
4079
4116
|
dimension: "verify_access.api_error",
|
|
4080
4117
|
message: reason ?? "Verification temporarily unavailable",
|
|
4081
4118
|
guidance: guidance.message
|
|
4082
4119
|
}
|
|
4083
4120
|
] : void 0,
|
|
4121
|
+
// 4.0.0: typed marker so adapters render the misconfig envelope (503 +
|
|
4122
|
+
// MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
|
|
4123
|
+
...isMisconfig && { misconfigured: true },
|
|
4084
4124
|
correlationId: options.correlationId,
|
|
4085
4125
|
attemptId: options.attemptId,
|
|
4086
4126
|
verifiedAt: /* @__PURE__ */ new Date()
|
|
@@ -4135,7 +4175,8 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4135
4175
|
const response = await fetch(`${config.apiBaseUrl}/agents/verify-access`, {
|
|
4136
4176
|
method: "POST",
|
|
4137
4177
|
headers,
|
|
4138
|
-
body: JSON.stringify(body)
|
|
4178
|
+
body: JSON.stringify(body),
|
|
4179
|
+
signal: AbortSignal.timeout(config.verifyTimeoutMs ?? 1e4)
|
|
4139
4180
|
});
|
|
4140
4181
|
const data = await response.json();
|
|
4141
4182
|
if (response.status === 410) {
|
|
@@ -4159,6 +4200,17 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4159
4200
|
};
|
|
4160
4201
|
}
|
|
4161
4202
|
if (!response.ok) {
|
|
4203
|
+
if (response.status === 401) {
|
|
4204
|
+
return {
|
|
4205
|
+
success: false,
|
|
4206
|
+
error: data.message || data.error || "Integration API key rejected",
|
|
4207
|
+
misconfig: true,
|
|
4208
|
+
misconfigCode: typeof data?.code === "string" ? data.code : void 0,
|
|
4209
|
+
remediation: data?.remediation && typeof data.remediation === "object" ? data.remediation : void 0,
|
|
4210
|
+
correlationId: typeof data?.correlationId === "string" ? data.correlationId : void 0,
|
|
4211
|
+
attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0
|
|
4212
|
+
};
|
|
4213
|
+
}
|
|
4162
4214
|
return {
|
|
4163
4215
|
success: false,
|
|
4164
4216
|
error: data.message || data.error || `API returned ${response.status}`,
|
|
@@ -4180,9 +4232,19 @@ async function verify(config, request, options) {
|
|
|
4180
4232
|
const urls = mergedConfig.apiBaseUrl ? getCachedWellKnownUrls(mergedConfig.apiBaseUrl) : void 0;
|
|
4181
4233
|
if (!initCheckPerformed && !mergedConfig.disableInitChecks && mergedConfig.apiBaseUrl) {
|
|
4182
4234
|
if (mergedConfig.strictInit) {
|
|
4183
|
-
await performInitCheck(
|
|
4235
|
+
await performInitCheck(
|
|
4236
|
+
mergedConfig.apiBaseUrl,
|
|
4237
|
+
mergedConfig.debug,
|
|
4238
|
+
true,
|
|
4239
|
+
mergedConfig.apiKey
|
|
4240
|
+
);
|
|
4184
4241
|
} else {
|
|
4185
|
-
void performInitCheck(
|
|
4242
|
+
void performInitCheck(
|
|
4243
|
+
mergedConfig.apiBaseUrl,
|
|
4244
|
+
mergedConfig.debug,
|
|
4245
|
+
false,
|
|
4246
|
+
mergedConfig.apiKey
|
|
4247
|
+
);
|
|
4186
4248
|
}
|
|
4187
4249
|
}
|
|
4188
4250
|
if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
|
|
@@ -4221,9 +4283,10 @@ async function verify(config, request, options) {
|
|
|
4221
4283
|
const serverDenialReasons = Array.isArray(rawServerDenialReasons) && rawServerDenialReasons.length > 0 ? rawServerDenialReasons : void 0;
|
|
4222
4284
|
if (!apiResponse.success) {
|
|
4223
4285
|
return createGuidanceResponse(mergedConfig, apiResponse.error, {
|
|
4224
|
-
source: "api_error",
|
|
4286
|
+
source: apiResponse.misconfig ? "merchant_misconfig" : "api_error",
|
|
4225
4287
|
correlationId: apiResponse.correlationId,
|
|
4226
4288
|
attemptId: apiResponse.attemptId,
|
|
4289
|
+
remediation: apiResponse.remediation,
|
|
4227
4290
|
urls
|
|
4228
4291
|
});
|
|
4229
4292
|
}
|