@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
package/dist/gateway/gateway.mjs
CHANGED
|
@@ -3672,7 +3672,7 @@ function getTrustLevel(score) {
|
|
|
3672
3672
|
}
|
|
3673
3673
|
|
|
3674
3674
|
// src/version.ts
|
|
3675
|
-
var SDK_VERSION = "
|
|
3675
|
+
var SDK_VERSION = "4.0.0";
|
|
3676
3676
|
|
|
3677
3677
|
// src/well-known.ts
|
|
3678
3678
|
var CACHE_TTL_MS = 60 * 60 * 1e3;
|
|
@@ -3698,7 +3698,7 @@ var DEFAULT_CONFIG = {
|
|
|
3698
3698
|
};
|
|
3699
3699
|
var initCheckPerformed = false;
|
|
3700
3700
|
var deprecationWarningShown = false;
|
|
3701
|
-
async function performInitCheck(apiBaseUrl, debug, strictInit) {
|
|
3701
|
+
async function performInitCheck(apiBaseUrl, debug, strictInit, apiKey) {
|
|
3702
3702
|
initCheckPerformed = true;
|
|
3703
3703
|
try {
|
|
3704
3704
|
const probeUrl = `${apiBaseUrl}/agents/verify-access`;
|
|
@@ -3715,6 +3715,28 @@ async function performInitCheck(apiBaseUrl, debug, strictInit) {
|
|
|
3715
3715
|
`[VerificationGateway] init check passed for ${apiBaseUrl} (content-type: ${contentType})`
|
|
3716
3716
|
);
|
|
3717
3717
|
}
|
|
3718
|
+
if (apiKey) {
|
|
3719
|
+
const selfCheck = await fetch(`${apiBaseUrl}/agents/verify-access/self-check`, {
|
|
3720
|
+
headers: { Authorization: `Bearer ${apiKey}` }
|
|
3721
|
+
});
|
|
3722
|
+
if (selfCheck.status === 401) {
|
|
3723
|
+
const body = await selfCheck.json().catch(() => ({}));
|
|
3724
|
+
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}` : "") + `.`;
|
|
3725
|
+
if (strictInit) {
|
|
3726
|
+
throw new Error(`${message} (strictInit=true)`);
|
|
3727
|
+
}
|
|
3728
|
+
console.error(message);
|
|
3729
|
+
} else if (selfCheck.ok) {
|
|
3730
|
+
const body = await selfCheck.json().catch(() => ({}));
|
|
3731
|
+
if (typeof body.daysToExpiry === "number" && body.daysToExpiry <= 7) {
|
|
3732
|
+
console.warn(
|
|
3733
|
+
`[VerificationGateway] the configured AstraSync API key expires in ${body.daysToExpiry} day(s) \u2014 rotate it at Settings \u2192 Developer Tools before integrations start failing.`
|
|
3734
|
+
);
|
|
3735
|
+
} else if (debug) {
|
|
3736
|
+
console.log("[VerificationGateway] API key self-check passed");
|
|
3737
|
+
}
|
|
3738
|
+
}
|
|
3739
|
+
}
|
|
3718
3740
|
} catch (err) {
|
|
3719
3741
|
if (strictInit) {
|
|
3720
3742
|
throw err;
|
|
@@ -3792,8 +3814,17 @@ function cacheResult(request, result, configuredTtl, counterpartyId) {
|
|
|
3792
3814
|
function createGuidanceResponse(_config, reason, options = {}) {
|
|
3793
3815
|
const source = options.source ?? "no_credentials";
|
|
3794
3816
|
const isApiError = source === "api_error";
|
|
3817
|
+
const isMisconfig = source === "merchant_misconfig";
|
|
3795
3818
|
const urls = options.urls;
|
|
3796
|
-
const guidance =
|
|
3819
|
+
const guidance = isMisconfig ? {
|
|
3820
|
+
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.",
|
|
3821
|
+
registrationUrl: urls?.registrationUrl ?? "",
|
|
3822
|
+
documentationUrl: options.remediation?.docsUrl ?? urls?.documentationUrl ?? "",
|
|
3823
|
+
steps: [
|
|
3824
|
+
"Report the failure to the site operator \u2014 their AstraSync API key needs rotating",
|
|
3825
|
+
"Do not retry: the failure is deterministic until the operator updates their key"
|
|
3826
|
+
]
|
|
3827
|
+
} : isApiError ? {
|
|
3797
3828
|
message: "Verification is temporarily unavailable. Retry with exponential backoff; if the issue persists, contact support with the correlationId.",
|
|
3798
3829
|
registrationUrl: urls?.registrationUrl ?? "",
|
|
3799
3830
|
documentationUrl: urls?.documentationUrl ?? "",
|
|
@@ -3831,13 +3862,22 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
3831
3862
|
// partners (and their custom onDenied handlers) can branch on
|
|
3832
3863
|
// dimension. Without this, the synthesised stub was indistinguishable
|
|
3833
3864
|
// from a real policy deny.
|
|
3834
|
-
failures:
|
|
3865
|
+
failures: isMisconfig ? [
|
|
3866
|
+
{
|
|
3867
|
+
dimension: "verify_access.merchant_misconfigured",
|
|
3868
|
+
message: reason ?? "The integration API key was rejected by AstraSync",
|
|
3869
|
+
guidance: guidance.message
|
|
3870
|
+
}
|
|
3871
|
+
] : isApiError ? [
|
|
3835
3872
|
{
|
|
3836
3873
|
dimension: "verify_access.api_error",
|
|
3837
3874
|
message: reason ?? "Verification temporarily unavailable",
|
|
3838
3875
|
guidance: guidance.message
|
|
3839
3876
|
}
|
|
3840
3877
|
] : void 0,
|
|
3878
|
+
// 4.0.0: typed marker so adapters render the misconfig envelope (503 +
|
|
3879
|
+
// MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
|
|
3880
|
+
...isMisconfig && { misconfigured: true },
|
|
3841
3881
|
correlationId: options.correlationId,
|
|
3842
3882
|
attemptId: options.attemptId,
|
|
3843
3883
|
verifiedAt: /* @__PURE__ */ new Date()
|
|
@@ -3892,7 +3932,8 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
3892
3932
|
const response = await fetch(`${config.apiBaseUrl}/agents/verify-access`, {
|
|
3893
3933
|
method: "POST",
|
|
3894
3934
|
headers,
|
|
3895
|
-
body: JSON.stringify(body)
|
|
3935
|
+
body: JSON.stringify(body),
|
|
3936
|
+
signal: AbortSignal.timeout(config.verifyTimeoutMs ?? 1e4)
|
|
3896
3937
|
});
|
|
3897
3938
|
const data = await response.json();
|
|
3898
3939
|
if (response.status === 410) {
|
|
@@ -3916,6 +3957,17 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
3916
3957
|
};
|
|
3917
3958
|
}
|
|
3918
3959
|
if (!response.ok) {
|
|
3960
|
+
if (response.status === 401) {
|
|
3961
|
+
return {
|
|
3962
|
+
success: false,
|
|
3963
|
+
error: data.message || data.error || "Integration API key rejected",
|
|
3964
|
+
misconfig: true,
|
|
3965
|
+
misconfigCode: typeof data?.code === "string" ? data.code : void 0,
|
|
3966
|
+
remediation: data?.remediation && typeof data.remediation === "object" ? data.remediation : void 0,
|
|
3967
|
+
correlationId: typeof data?.correlationId === "string" ? data.correlationId : void 0,
|
|
3968
|
+
attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0
|
|
3969
|
+
};
|
|
3970
|
+
}
|
|
3919
3971
|
return {
|
|
3920
3972
|
success: false,
|
|
3921
3973
|
error: data.message || data.error || `API returned ${response.status}`,
|
|
@@ -3937,9 +3989,19 @@ async function verify(config, request, options) {
|
|
|
3937
3989
|
const urls = mergedConfig.apiBaseUrl ? getCachedWellKnownUrls(mergedConfig.apiBaseUrl) : void 0;
|
|
3938
3990
|
if (!initCheckPerformed && !mergedConfig.disableInitChecks && mergedConfig.apiBaseUrl) {
|
|
3939
3991
|
if (mergedConfig.strictInit) {
|
|
3940
|
-
await performInitCheck(
|
|
3992
|
+
await performInitCheck(
|
|
3993
|
+
mergedConfig.apiBaseUrl,
|
|
3994
|
+
mergedConfig.debug,
|
|
3995
|
+
true,
|
|
3996
|
+
mergedConfig.apiKey
|
|
3997
|
+
);
|
|
3941
3998
|
} else {
|
|
3942
|
-
void performInitCheck(
|
|
3999
|
+
void performInitCheck(
|
|
4000
|
+
mergedConfig.apiBaseUrl,
|
|
4001
|
+
mergedConfig.debug,
|
|
4002
|
+
false,
|
|
4003
|
+
mergedConfig.apiKey
|
|
4004
|
+
);
|
|
3943
4005
|
}
|
|
3944
4006
|
}
|
|
3945
4007
|
if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
|
|
@@ -3978,9 +4040,10 @@ async function verify(config, request, options) {
|
|
|
3978
4040
|
const serverDenialReasons = Array.isArray(rawServerDenialReasons) && rawServerDenialReasons.length > 0 ? rawServerDenialReasons : void 0;
|
|
3979
4041
|
if (!apiResponse.success) {
|
|
3980
4042
|
return createGuidanceResponse(mergedConfig, apiResponse.error, {
|
|
3981
|
-
source: "api_error",
|
|
4043
|
+
source: apiResponse.misconfig ? "merchant_misconfig" : "api_error",
|
|
3982
4044
|
correlationId: apiResponse.correlationId,
|
|
3983
4045
|
attemptId: apiResponse.attemptId,
|
|
4046
|
+
remediation: apiResponse.remediation,
|
|
3984
4047
|
urls
|
|
3985
4048
|
});
|
|
3986
4049
|
}
|