@astrasyncai/verification-gateway 2.4.8 → 2.4.10
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 +81 -31
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +81 -31
- 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 +64 -26
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +64 -26
- 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 +89 -32
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +89 -32
- 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 +65 -25
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +65 -25
- 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/browser/background.js +60 -25
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +60 -25
- 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/cli/index.d.mts +2 -2
- package/dist/cli/index.d.ts +2 -2
- 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 +60 -25
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +60 -25
- package/dist/cursor/extension.mjs.map +1 -1
- package/dist/{express-DvVjR2H4.d.mts → express-4WStX3PV.d.mts} +1 -1
- package/dist/{express-714gJbaW.d.ts → express-C1ePFB7n.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 +60 -25
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +60 -25
- 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-DYFS9QVb.d.mts → index-ChPX4WHl.d.mts} +1 -1
- package/dist/{index-DO0oG8ED.d.ts → index-Cjm-zBeZ.d.ts} +1 -1
- package/dist/{index-2WAlxs2G.d.ts → index-CzJMCgEy.d.ts} +1 -1
- package/dist/{index-P9t7M_dJ.d.mts → index-D8IEntil.d.mts} +1 -1
- package/dist/index.d.mts +22 -11
- package/dist/index.d.ts +22 -11
- package/dist/index.js +133 -42
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +132 -42
- 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-CZ-MwSOT.d.ts → nextjs-BIORS__0.d.ts} +1 -1
- package/dist/{nextjs-BCoH7EqF.d.mts → nextjs-CjzHdaXA.d.mts} +1 -1
- package/dist/registration/index.d.mts +76 -1
- package/dist/registration/index.d.ts +76 -1
- package/dist/registration/index.js +27 -2
- package/dist/registration/index.js.map +1 -1
- package/dist/registration/index.mjs +25 -1
- package/dist/registration/index.mjs.map +1 -1
- package/dist/{sdk-wwhFDXWX.d.mts → sdk-Chhz-FcT.d.mts} +9 -4
- package/dist/{sdk-kiA49vqJ.d.ts → sdk-CqTEQAc6.d.ts} +9 -4
- package/dist/transport/index.d.mts +2 -2
- package/dist/transport/index.d.ts +2 -2
- package/dist/{types-DOAb89cm.d.mts → types-DNK2BgIf.d.mts} +1 -1
- package/dist/{types-aucqzfUa.d.ts → types-DoWIuzfj.d.ts} +1 -1
- package/dist/{types-BwDmjIdr.d.mts → types-L15pYd2c.d.mts} +21 -4
- package/dist/{types-BwDmjIdr.d.ts → types-L15pYd2c.d.ts} +21 -4
- package/dist/ui/index.d.mts +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +1 -1
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/index.mjs +1 -1
- package/dist/ui/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/gateway/gateway.mjs
CHANGED
|
@@ -3029,7 +3029,7 @@ function getTrustLevel(score) {
|
|
|
3029
3029
|
}
|
|
3030
3030
|
|
|
3031
3031
|
// src/version.ts
|
|
3032
|
-
var SDK_VERSION = "2.4.
|
|
3032
|
+
var SDK_VERSION = "2.4.10";
|
|
3033
3033
|
|
|
3034
3034
|
// src/verify.ts
|
|
3035
3035
|
var DEFAULT_CONFIG = {
|
|
@@ -3040,8 +3040,10 @@ var DEFAULT_CONFIG = {
|
|
|
3040
3040
|
// through (`hasMinimumAccess('guidance', 'guidance') === true`).
|
|
3041
3041
|
defaultAccessLevel: "none",
|
|
3042
3042
|
// minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
|
|
3043
|
-
|
|
3044
|
-
//
|
|
3043
|
+
// Round-18.5 F4: cacheTtl deliberately unset. When undefined, cacheResult
|
|
3044
|
+
// applies the split default (60s autonomous / 300s step-up). When the
|
|
3045
|
+
// caller sets cacheTtl explicitly, that value is honoured uniformly.
|
|
3046
|
+
// Set cacheTtl: 0 to disable caching entirely.
|
|
3045
3047
|
debug: false
|
|
3046
3048
|
};
|
|
3047
3049
|
var initCheckPerformed = false;
|
|
@@ -3068,11 +3070,28 @@ async function performInitCheck(apiBaseUrl, debug) {
|
|
|
3068
3070
|
}
|
|
3069
3071
|
}
|
|
3070
3072
|
var verificationCache = /* @__PURE__ */ new Map();
|
|
3071
|
-
function getCacheKey(
|
|
3072
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
3075
|
-
|
|
3073
|
+
function getCacheKey(request) {
|
|
3074
|
+
const c = request.credentials;
|
|
3075
|
+
return [
|
|
3076
|
+
c.astraId || "",
|
|
3077
|
+
c.apiKey || "",
|
|
3078
|
+
c.jwt || "",
|
|
3079
|
+
request.purpose || "",
|
|
3080
|
+
request.action || "",
|
|
3081
|
+
request.resourceType || "",
|
|
3082
|
+
request.resource || "",
|
|
3083
|
+
request.jurisdiction || "",
|
|
3084
|
+
request.transactionValue ?? "",
|
|
3085
|
+
request.currency || "",
|
|
3086
|
+
request.counterpartyUrl || "",
|
|
3087
|
+
request.counterpartyType || "",
|
|
3088
|
+
request.isSubAgentRequest ? "1" : "0",
|
|
3089
|
+
request.parentAgentId || "",
|
|
3090
|
+
request.subAgentDepth ?? ""
|
|
3091
|
+
].join("|");
|
|
3092
|
+
}
|
|
3093
|
+
function getCachedResult(request) {
|
|
3094
|
+
const key = getCacheKey(request);
|
|
3076
3095
|
const cached = verificationCache.get(key);
|
|
3077
3096
|
if (cached && cached.expiresAt > Date.now()) {
|
|
3078
3097
|
return cached.result;
|
|
@@ -3082,8 +3101,11 @@ function getCachedResult(credentials) {
|
|
|
3082
3101
|
}
|
|
3083
3102
|
return null;
|
|
3084
3103
|
}
|
|
3085
|
-
|
|
3086
|
-
|
|
3104
|
+
var DEFAULT_AUTONOMOUS_TTL_SECONDS = 60;
|
|
3105
|
+
var DEFAULT_STEP_UP_TTL_SECONDS = 300;
|
|
3106
|
+
function cacheResult(request, result, configuredTtl) {
|
|
3107
|
+
const ttlSeconds = configuredTtl && configuredTtl > 0 ? configuredTtl : result.requiresStepUp ? DEFAULT_STEP_UP_TTL_SECONDS : DEFAULT_AUTONOMOUS_TTL_SECONDS;
|
|
3108
|
+
const key = getCacheKey(request);
|
|
3087
3109
|
verificationCache.set(key, {
|
|
3088
3110
|
result,
|
|
3089
3111
|
expiresAt: Date.now() + ttlSeconds * 1e3
|
|
@@ -3112,12 +3134,17 @@ function createGuidanceResponse(config, reason, options = {}) {
|
|
|
3112
3134
|
]
|
|
3113
3135
|
};
|
|
3114
3136
|
return {
|
|
3115
|
-
|
|
3137
|
+
// Round-18 G4: createGuidanceResponse fires for unverified-agent path or
|
|
3138
|
+
// API-error fallback. Identity is not verified (no agent resolved);
|
|
3139
|
+
// policy is not evaluated (we never reached the gate).
|
|
3140
|
+
identityVerified: false,
|
|
3141
|
+
policyAllowed: false,
|
|
3116
3142
|
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
3117
|
-
// Adapters additionally short-circuit on
|
|
3118
|
-
// the gate check, but the access level still has
|
|
3119
|
-
// data layer so downstream consumers (SDK adapters
|
|
3120
|
-
// custom integrations) inherit the correct
|
|
3143
|
+
// Adapters additionally short-circuit on `!identityVerified ||
|
|
3144
|
+
// !policyAllowed` before the gate check, but the access level still has
|
|
3145
|
+
// to be honest at the data layer so downstream consumers (SDK adapters
|
|
3146
|
+
// in other languages, custom integrations) inherit the correct
|
|
3147
|
+
// semantics.
|
|
3121
3148
|
accessLevel: "none",
|
|
3122
3149
|
guidance,
|
|
3123
3150
|
denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
|
|
@@ -3233,8 +3260,8 @@ async function verify(config, request) {
|
|
|
3233
3260
|
"[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access-level decisions (the SDK reads access.accessLevel from the verify-access response). To gate access to an endpoint, configure the endpoint's trust_score_requirement server-side."
|
|
3234
3261
|
);
|
|
3235
3262
|
}
|
|
3236
|
-
if (mergedConfig.cacheTtl
|
|
3237
|
-
const cached = getCachedResult(request
|
|
3263
|
+
if (mergedConfig.cacheTtl !== 0) {
|
|
3264
|
+
const cached = getCachedResult(request);
|
|
3238
3265
|
if (cached) {
|
|
3239
3266
|
if (mergedConfig.debug) {
|
|
3240
3267
|
console.log("[VerificationGateway] Returning cached result");
|
|
@@ -3261,15 +3288,17 @@ async function verify(config, request) {
|
|
|
3261
3288
|
}
|
|
3262
3289
|
if (!apiResponse.access?.allowed) {
|
|
3263
3290
|
const aggregatedFailures = apiResponse.access?.failures;
|
|
3291
|
+
const idVerifiedFromBackend = apiResponse.verificationContext?.idVerified === true;
|
|
3264
3292
|
const result2 = {
|
|
3265
|
-
|
|
3293
|
+
identityVerified: idVerifiedFromBackend,
|
|
3294
|
+
policyAllowed: false,
|
|
3266
3295
|
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
3267
3296
|
// Pre-rename this hardcoded `'guidance'`, which conflated with the
|
|
3268
3297
|
// colocated `guidance: {...}` help-payload object below and let
|
|
3269
3298
|
// denied requests pass any route gated at `'guidance'` because
|
|
3270
3299
|
// `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
|
|
3271
|
-
// ALSO short-circuit on
|
|
3272
|
-
// belt-and-braces.
|
|
3300
|
+
// ALSO short-circuit on `!identityVerified || !policyAllowed` before
|
|
3301
|
+
// the gate check — belt-and-braces.
|
|
3273
3302
|
accessLevel: "none",
|
|
3274
3303
|
denialReasons: aggregatedFailures && aggregatedFailures.length > 0 ? aggregatedFailures.map((f) => f.message) : apiResponse.access?.reason ? [apiResponse.access.reason] : ["Access denied"],
|
|
3275
3304
|
failures: aggregatedFailures,
|
|
@@ -3313,7 +3342,13 @@ async function verify(config, request) {
|
|
|
3313
3342
|
const verificationContext = apiResponse.verificationContext;
|
|
3314
3343
|
const accessLevel = apiResponse.access?.accessLevel ?? "standard";
|
|
3315
3344
|
const result = {
|
|
3316
|
-
|
|
3345
|
+
// Round-18 G4: backend allowed access. Identity is verified (we resolved
|
|
3346
|
+
// the caller to an agent) and policy passed all gates. Read idVerified
|
|
3347
|
+
// from verificationContext for symmetry with the deny branch; default true
|
|
3348
|
+
// on success path since `access.allowed === true` implies identity was
|
|
3349
|
+
// resolvable (anonymous-allow paths flow through createGuidanceResponse).
|
|
3350
|
+
identityVerified: apiResponse.verificationContext?.idVerified !== false,
|
|
3351
|
+
policyAllowed: true,
|
|
3317
3352
|
accessLevel,
|
|
3318
3353
|
agent,
|
|
3319
3354
|
developer,
|
|
@@ -3336,7 +3371,7 @@ async function verify(config, request) {
|
|
|
3336
3371
|
warningHeader: apiResponse.warningHeader
|
|
3337
3372
|
};
|
|
3338
3373
|
if (result.recommendation === "deny") {
|
|
3339
|
-
result.
|
|
3374
|
+
result.policyAllowed = false;
|
|
3340
3375
|
result.accessLevel = "none";
|
|
3341
3376
|
result.denialReasons = result.recommendationReasons || [
|
|
3342
3377
|
"Access denied by AstraSync recommendation"
|
|
@@ -3355,8 +3390,8 @@ async function verify(config, request) {
|
|
|
3355
3390
|
}
|
|
3356
3391
|
result.denialReasons = result.recommendationReasons || ["Step-up verification required"];
|
|
3357
3392
|
}
|
|
3358
|
-
if (mergedConfig.cacheTtl
|
|
3359
|
-
cacheResult(request
|
|
3393
|
+
if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny") {
|
|
3394
|
+
cacheResult(request, result, mergedConfig.cacheTtl);
|
|
3360
3395
|
}
|
|
3361
3396
|
return result;
|
|
3362
3397
|
}
|
|
@@ -3431,7 +3466,7 @@ function toVerificationRequest(context, astraId) {
|
|
|
3431
3466
|
};
|
|
3432
3467
|
}
|
|
3433
3468
|
function toDecision(result) {
|
|
3434
|
-
if (result.
|
|
3469
|
+
if (result.identityVerified && result.policyAllowed) {
|
|
3435
3470
|
return {
|
|
3436
3471
|
recommendation: "ALLOW",
|
|
3437
3472
|
reason: `Verified with access level: ${result.accessLevel}`,
|