@astrasyncai/verification-gateway 4.5.1 → 5.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/README.md +1 -1
- 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 +11 -33
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +11 -33
- package/dist/adapters/express.mjs.map +1 -1
- package/dist/adapters/mcp.d.mts +2 -2
- package/dist/adapters/mcp.d.ts +2 -2
- package/dist/adapters/mcp.js +28 -65
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +27 -64
- 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 +9 -30
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +9 -30
- 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 +8 -124
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +8 -122
- 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/agent/index.js +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/index.mjs +1 -1
- package/dist/agent/index.mjs.map +1 -1
- package/dist/bin/astrasync-claude-hook.js +63 -41
- package/dist/bin/astrasync-codex-hook.js +63 -41
- package/dist/bin/astrasync-guard.js +63 -41
- package/dist/bin/astrasync.js +75 -48
- package/dist/browser/background.js +63 -41
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +63 -41
- 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/cli/index.js +33 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +33 -6
- package/dist/cli/index.mjs.map +1 -1
- package/dist/codex/index.d.mts +2 -2
- package/dist/codex/index.d.ts +2 -2
- package/dist/codex/index.js +63 -41
- package/dist/codex/index.js.map +1 -1
- package/dist/codex/index.mjs +63 -41
- 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 +63 -41
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +63 -41
- 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/edge-config.js +1 -1
- package/dist/edge-config.js.map +1 -1
- package/dist/edge-config.mjs +1 -1
- package/dist/edge-config.mjs.map +1 -1
- package/dist/edge-core/index.d.mts +1 -3
- package/dist/edge-core/index.d.ts +1 -3
- package/dist/edge-core/index.js +11 -33
- package/dist/edge-core/index.js.map +1 -1
- package/dist/edge-core/index.mjs +11 -33
- package/dist/edge-core/index.mjs.map +1 -1
- package/dist/{express-DaqL11tx.d.ts → express-B5lWuemA.d.ts} +1 -1
- package/dist/{express-CR6F3njD.d.mts → express-Dm-snUuY.d.mts} +1 -1
- package/dist/gateway/gateway.d.mts +2 -2
- package/dist/gateway/gateway.d.ts +2 -2
- package/dist/gateway/gateway.js +63 -41
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +63 -41
- 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-Cub7lK-T.d.mts → index-B5k_vUmK.d.mts} +1 -1
- package/dist/{index-BfIxCYIZ.d.ts → index-BOzM6xUq.d.mts} +1 -2
- package/dist/{index-CwAh7Tln.d.mts → index-dRfxUdFA.d.ts} +1 -2
- package/dist/{index-B5Ts1WtM.d.ts → index-y8xToocF.d.ts} +1 -1
- package/dist/index.d.mts +10 -10
- package/dist/index.d.ts +10 -10
- package/dist/index.js +30 -217
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +30 -210
- 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/local-evaluator/evaluator.js +22 -7
- package/dist/local-evaluator/evaluator.js.map +1 -1
- package/dist/local-evaluator/evaluator.mjs +22 -7
- package/dist/local-evaluator/evaluator.mjs.map +1 -1
- package/dist/{mcp-BgBJu4Jl.d.mts → mcp-DgsyQiQq.d.mts} +53 -52
- package/dist/{mcp--DgKOwfu.d.ts → mcp-OosmAcKf.d.ts} +53 -52
- package/dist/{nextjs-DlX6xwbU.d.mts → nextjs-B1sBdEav.d.mts} +1 -1
- package/dist/{nextjs-DL6uE1ye.d.ts → nextjs-DoRmhV_Z.d.ts} +1 -1
- package/dist/registration/index.d.mts +5 -1
- package/dist/registration/index.d.ts +5 -1
- package/dist/registration/index.js +1 -1
- package/dist/registration/index.js.map +1 -1
- package/dist/registration/index.mjs +1 -1
- package/dist/registration/index.mjs.map +1 -1
- package/dist/sdk-B83N3xKc.d.mts +142 -0
- package/dist/sdk-H_9BTNBS.d.ts +142 -0
- package/dist/transport/index.d.mts +2 -2
- package/dist/transport/index.d.ts +2 -2
- package/dist/transport/index.js +1 -1
- package/dist/transport/index.js.map +1 -1
- package/dist/transport/index.mjs +1 -1
- package/dist/transport/index.mjs.map +1 -1
- package/dist/{types-DwSfO7Sb.d.ts → types-BK2POWNc.d.ts} +23 -50
- package/dist/{types-C0zfSXMB.d.mts → types-CJjZvPr9.d.mts} +23 -50
- package/dist/{types-C7Rb-w0d.d.mts → types-CXf3q4kZ.d.ts} +14 -3
- package/dist/{types-nIh3HtuA.d.ts → types-DQmop7ZW.d.mts} +14 -3
- package/dist/ui/index.d.mts +2 -17
- package/dist/ui/index.d.ts +2 -17
- package/dist/ui/index.js +1 -43
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/index.mjs +1 -42
- package/dist/ui/index.mjs.map +1 -1
- package/dist/verify.d.mts +3 -4
- package/dist/verify.d.ts +3 -4
- package/dist/verify.js +8 -28
- package/dist/verify.js.map +1 -1
- package/dist/verify.mjs +8 -28
- package/dist/verify.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/sdk-Bbh9B_dw.d.mts +0 -215
- package/dist/sdk-C6SASmsh.d.ts +0 -215
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RequestHandler, Request } from 'express';
|
|
2
|
-
import {
|
|
2
|
+
import { w as VerificationResult, j as ExpressMiddlewareOptions, b as AstraSyncCredentials } from './types-BK2POWNc.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* AstraSync Universal Verification Gateway - Express Middleware
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RequestHandler, Request } from 'express';
|
|
2
|
-
import {
|
|
2
|
+
import { w as VerificationResult, j as ExpressMiddlewareOptions, b as AstraSyncCredentials } from './types-CJjZvPr9.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* AstraSync Universal Verification Gateway - Express Middleware
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as AstraSyncGatewayConfig, P as PDLSSContext, V as VerificationDecision } from '../types-
|
|
2
|
-
import '../types-
|
|
1
|
+
import { a as AstraSyncGatewayConfig, P as PDLSSContext, V as VerificationDecision } from '../types-DQmop7ZW.mjs';
|
|
2
|
+
import '../types-CJjZvPr9.mjs';
|
|
3
3
|
import '../metadata-capture.mjs';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as AstraSyncGatewayConfig, P as PDLSSContext, V as VerificationDecision } from '../types-
|
|
2
|
-
import '../types-
|
|
1
|
+
import { a as AstraSyncGatewayConfig, P as PDLSSContext, V as VerificationDecision } from '../types-CXf3q4kZ.js';
|
|
2
|
+
import '../types-BK2POWNc.js';
|
|
3
3
|
import '../metadata-capture.js';
|
|
4
4
|
|
|
5
5
|
/**
|
package/dist/gateway/gateway.js
CHANGED
|
@@ -257,9 +257,9 @@ var LocalEvaluator = class {
|
|
|
257
257
|
if (scopeBlock) {
|
|
258
258
|
return { recommendation: "DENY", reason: scopeBlock };
|
|
259
259
|
}
|
|
260
|
-
const
|
|
261
|
-
if (
|
|
262
|
-
return
|
|
260
|
+
const limitDecision = this.checkLimits(context);
|
|
261
|
+
if (limitDecision) {
|
|
262
|
+
return limitDecision;
|
|
263
263
|
}
|
|
264
264
|
if (context.purpose === "sub_agent.spawn" && this.policy.selfInstantiation) {
|
|
265
265
|
if (!this.policy.selfInstantiation.allowed) {
|
|
@@ -324,9 +324,21 @@ var LocalEvaluator = class {
|
|
|
324
324
|
checkLimits(context) {
|
|
325
325
|
const limits = this.policy.limits;
|
|
326
326
|
if (!limits) return null;
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
327
|
+
const value = context.transactionValue;
|
|
328
|
+
if (value !== void 0 && value > 0 && (limits.autonomousThreshold !== void 0 || limits.maxTransactionAmount !== void 0)) {
|
|
329
|
+
const autonomousThreshold = limits.autonomousThreshold ?? 0;
|
|
330
|
+
const hardLimit = limits.maxTransactionAmount ?? limits.autonomousThreshold ?? 0;
|
|
331
|
+
if (value > autonomousThreshold) {
|
|
332
|
+
if (value >= hardLimit) {
|
|
333
|
+
return {
|
|
334
|
+
recommendation: "DENY",
|
|
335
|
+
reason: `Transaction value ${value} at or above Hard Limit ${hardLimit}`
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
return {
|
|
339
|
+
recommendation: "MANUAL_REVIEW",
|
|
340
|
+
reason: `Transaction value ${value} is in the human-approval band (${autonomousThreshold}, ${hardLimit})`
|
|
341
|
+
};
|
|
330
342
|
}
|
|
331
343
|
}
|
|
332
344
|
if (limits.maxRequestsPerHour !== void 0) {
|
|
@@ -339,7 +351,10 @@ var LocalEvaluator = class {
|
|
|
339
351
|
} else {
|
|
340
352
|
entry.count++;
|
|
341
353
|
if (entry.count > limits.maxRequestsPerHour) {
|
|
342
|
-
return
|
|
354
|
+
return {
|
|
355
|
+
recommendation: "DENY",
|
|
356
|
+
reason: `Rate limit exceeded: ${entry.count}/${limits.maxRequestsPerHour} requests per hour`
|
|
357
|
+
};
|
|
343
358
|
}
|
|
344
359
|
}
|
|
345
360
|
}
|
|
@@ -3548,10 +3563,16 @@ function validatePurpose(purpose, path) {
|
|
|
3548
3563
|
errors.push({ path: `${path}.targets`, message: "targets must be an array of strings" });
|
|
3549
3564
|
}
|
|
3550
3565
|
if (p.blockedPatterns !== void 0 && !isStringArray(p.blockedPatterns)) {
|
|
3551
|
-
errors.push({
|
|
3566
|
+
errors.push({
|
|
3567
|
+
path: `${path}.blockedPatterns`,
|
|
3568
|
+
message: "blockedPatterns must be an array of strings"
|
|
3569
|
+
});
|
|
3552
3570
|
}
|
|
3553
3571
|
if (p.requiresApproval !== void 0 && typeof p.requiresApproval !== "boolean") {
|
|
3554
|
-
errors.push({
|
|
3572
|
+
errors.push({
|
|
3573
|
+
path: `${path}.requiresApproval`,
|
|
3574
|
+
message: "requiresApproval must be a boolean"
|
|
3575
|
+
});
|
|
3555
3576
|
}
|
|
3556
3577
|
return errors;
|
|
3557
3578
|
}
|
|
@@ -3574,11 +3595,29 @@ function validateLimits(limits, path) {
|
|
|
3574
3595
|
return [{ path, message: "limits must be an object" }];
|
|
3575
3596
|
}
|
|
3576
3597
|
const l = limits;
|
|
3598
|
+
if (l.autonomousThreshold !== void 0 && typeof l.autonomousThreshold !== "number") {
|
|
3599
|
+
errors.push({
|
|
3600
|
+
path: `${path}.autonomousThreshold`,
|
|
3601
|
+
message: "autonomousThreshold must be a number"
|
|
3602
|
+
});
|
|
3603
|
+
}
|
|
3577
3604
|
if (l.maxTransactionAmount !== void 0 && typeof l.maxTransactionAmount !== "number") {
|
|
3578
|
-
errors.push({
|
|
3605
|
+
errors.push({
|
|
3606
|
+
path: `${path}.maxTransactionAmount`,
|
|
3607
|
+
message: "maxTransactionAmount must be a number"
|
|
3608
|
+
});
|
|
3609
|
+
}
|
|
3610
|
+
if (typeof l.autonomousThreshold === "number" && typeof l.maxTransactionAmount === "number" && l.autonomousThreshold > l.maxTransactionAmount) {
|
|
3611
|
+
errors.push({
|
|
3612
|
+
path: `${path}.autonomousThreshold`,
|
|
3613
|
+
message: "autonomousThreshold (Autonomous Limit) must be <= maxTransactionAmount (Hard Limit)"
|
|
3614
|
+
});
|
|
3579
3615
|
}
|
|
3580
3616
|
if (l.maxRequestsPerHour !== void 0 && typeof l.maxRequestsPerHour !== "number") {
|
|
3581
|
-
errors.push({
|
|
3617
|
+
errors.push({
|
|
3618
|
+
path: `${path}.maxRequestsPerHour`,
|
|
3619
|
+
message: "maxRequestsPerHour must be a number"
|
|
3620
|
+
});
|
|
3582
3621
|
}
|
|
3583
3622
|
if (l.currency !== void 0 && typeof l.currency !== "string") {
|
|
3584
3623
|
errors.push({ path: `${path}.currency`, message: "currency must be a string" });
|
|
@@ -3593,7 +3632,10 @@ function validateRiskThresholds(thresholds, path) {
|
|
|
3593
3632
|
const t = thresholds;
|
|
3594
3633
|
for (const range of ["autoAllow", "requireApproval", "autoBlock"]) {
|
|
3595
3634
|
if (!t[range] || typeof t[range] !== "object") {
|
|
3596
|
-
errors.push({
|
|
3635
|
+
errors.push({
|
|
3636
|
+
path: `${path}.${range}`,
|
|
3637
|
+
message: `${range} is required and must be an object with min and max`
|
|
3638
|
+
});
|
|
3597
3639
|
continue;
|
|
3598
3640
|
}
|
|
3599
3641
|
const r = t[range];
|
|
@@ -3689,7 +3731,7 @@ function verifyLocal(evaluator, context) {
|
|
|
3689
3731
|
return evaluator.evaluate(context);
|
|
3690
3732
|
}
|
|
3691
3733
|
|
|
3692
|
-
// src/
|
|
3734
|
+
// src/trust-levels.ts
|
|
3693
3735
|
function getTrustLevel(score) {
|
|
3694
3736
|
if (score >= 80) return "PLATINUM";
|
|
3695
3737
|
if (score >= 60) return "GOLD";
|
|
@@ -3698,7 +3740,7 @@ function getTrustLevel(score) {
|
|
|
3698
3740
|
}
|
|
3699
3741
|
|
|
3700
3742
|
// src/version.ts
|
|
3701
|
-
var SDK_VERSION = "
|
|
3743
|
+
var SDK_VERSION = "5.0.0";
|
|
3702
3744
|
|
|
3703
3745
|
// src/http.ts
|
|
3704
3746
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -3728,11 +3770,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
|
|
|
3728
3770
|
// src/verify.ts
|
|
3729
3771
|
var DEFAULT_CONFIG = {
|
|
3730
3772
|
apiBaseUrl: "https://astrasync.ai/api",
|
|
3731
|
-
// v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
|
|
3732
|
-
// access). Pre-rename this defaulted to `'guidance'`, which combined with
|
|
3733
|
-
// a route gated at `'guidance'` to silently let unverified traffic
|
|
3734
|
-
// through (`hasMinimumAccess('guidance', 'guidance') === true`).
|
|
3735
|
-
defaultAccessLevel: "none",
|
|
3736
3773
|
// minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
|
|
3737
3774
|
// cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
|
|
3738
3775
|
// default; the caller's explicit value is honoured for cacheable results.
|
|
@@ -3893,13 +3930,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
3893
3930
|
// policy is not evaluated (we never reached the gate).
|
|
3894
3931
|
identityVerified: false,
|
|
3895
3932
|
policyAllowed: false,
|
|
3896
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
3897
|
-
// Adapters additionally short-circuit on `!identityVerified ||
|
|
3898
|
-
// !policyAllowed` before the gate check, but the access level still has
|
|
3899
|
-
// to be honest at the data layer so downstream consumers (SDK adapters
|
|
3900
|
-
// in other languages, custom integrations) inherit the correct
|
|
3901
|
-
// semantics.
|
|
3902
|
-
accessLevel: "none",
|
|
3903
3933
|
guidance,
|
|
3904
3934
|
denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
|
|
3905
3935
|
// Round-10 (#47, O5): on API-error fallback, surface a typed failure so
|
|
@@ -3922,6 +3952,11 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
3922
3952
|
// 4.0.0: typed marker so adapters render the misconfig envelope (503 +
|
|
3923
3953
|
// MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
|
|
3924
3954
|
...isMisconfig && { misconfigured: true },
|
|
3955
|
+
// 4.6.0: a transient api_error is retryable — mark it so consumers surface
|
|
3956
|
+
// "temporarily unavailable, retry" (recommendation 'error') instead of
|
|
3957
|
+
// coercing the absent recommendation to a policy 'deny'. Misconfig is
|
|
3958
|
+
// deterministic and intentionally NOT marked retryable.
|
|
3959
|
+
...isApiError && { retryable: true },
|
|
3925
3960
|
correlationId: options.correlationId,
|
|
3926
3961
|
attemptId: options.attemptId,
|
|
3927
3962
|
verifiedAt: /* @__PURE__ */ new Date()
|
|
@@ -3988,7 +4023,6 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
3988
4023
|
attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
|
|
3989
4024
|
access: {
|
|
3990
4025
|
allowed: false,
|
|
3991
|
-
accessLevel: "none",
|
|
3992
4026
|
reason: "endpoint_deactivated",
|
|
3993
4027
|
failures: [
|
|
3994
4028
|
{
|
|
@@ -4051,7 +4085,7 @@ async function verify(config, request, options) {
|
|
|
4051
4085
|
if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
|
|
4052
4086
|
deprecationWarningShown = true;
|
|
4053
4087
|
console.warn(
|
|
4054
|
-
"[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access
|
|
4088
|
+
"[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access decisions (verified ID + runtime challenge + PDLSS + trust score). To gate access to an endpoint, configure the endpoint's trust_score_requirement server-side."
|
|
4055
4089
|
);
|
|
4056
4090
|
}
|
|
4057
4091
|
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
|
|
@@ -4097,14 +4131,6 @@ async function verify(config, request, options) {
|
|
|
4097
4131
|
const result2 = {
|
|
4098
4132
|
identityVerified: idVerifiedFromBackend,
|
|
4099
4133
|
policyAllowed: false,
|
|
4100
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
4101
|
-
// Pre-rename this hardcoded `'guidance'`, which conflated with the
|
|
4102
|
-
// colocated `guidance: {...}` help-payload object below and let
|
|
4103
|
-
// denied requests pass any route gated at `'guidance'` because
|
|
4104
|
-
// `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
|
|
4105
|
-
// ALSO short-circuit on `!identityVerified || !policyAllowed` before
|
|
4106
|
-
// the gate check — belt-and-braces.
|
|
4107
|
-
accessLevel: "none",
|
|
4108
4134
|
// 3.6.0: the server now emits top-level denialReasons on every deny
|
|
4109
4135
|
// path — prefer it verbatim; the failure-message reconstruction remains
|
|
4110
4136
|
// as the fallback for older backends.
|
|
@@ -4153,7 +4179,6 @@ async function verify(config, request, options) {
|
|
|
4153
4179
|
trustScore: apiResponse.organization.trustScore
|
|
4154
4180
|
} : void 0;
|
|
4155
4181
|
const verificationContext = apiResponse.verificationContext;
|
|
4156
|
-
const accessLevel = apiResponse.access?.accessLevel ?? "standard";
|
|
4157
4182
|
const result = {
|
|
4158
4183
|
// 4.5.0 (probe F1): read idVerified from verificationContext with the
|
|
4159
4184
|
// SAME absent⇒false default as the deny branch. The previous `!== false`
|
|
@@ -4165,7 +4190,6 @@ async function verify(config, request, options) {
|
|
|
4165
4190
|
// this load-bearing must never be defaulted on.
|
|
4166
4191
|
identityVerified: apiResponse.verificationContext?.idVerified === true,
|
|
4167
4192
|
policyAllowed: true,
|
|
4168
|
-
accessLevel,
|
|
4169
4193
|
agent,
|
|
4170
4194
|
developer,
|
|
4171
4195
|
organization,
|
|
@@ -4192,7 +4216,6 @@ async function verify(config, request, options) {
|
|
|
4192
4216
|
};
|
|
4193
4217
|
if (result.recommendation === "deny") {
|
|
4194
4218
|
result.policyAllowed = false;
|
|
4195
|
-
result.accessLevel = "none";
|
|
4196
4219
|
result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
|
|
4197
4220
|
result.guidance = result.runtimeChallenge ? {
|
|
4198
4221
|
message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
|
|
@@ -4305,7 +4328,6 @@ function toGatewayConfig(config) {
|
|
|
4305
4328
|
return {
|
|
4306
4329
|
apiBaseUrl: config.apiBaseUrl || "https://api.astrasync.ai",
|
|
4307
4330
|
apiKey: config.apiKey,
|
|
4308
|
-
defaultAccessLevel: config.defaultAccessLevel,
|
|
4309
4331
|
minTrustScore: config.minTrustScore,
|
|
4310
4332
|
minTrustScoreForFull: config.minTrustScoreForFull,
|
|
4311
4333
|
cacheTtl: config.cacheTtl,
|
|
@@ -4333,7 +4355,7 @@ function toDecision(result) {
|
|
|
4333
4355
|
if (result.identityVerified && result.policyAllowed) {
|
|
4334
4356
|
return {
|
|
4335
4357
|
recommendation: "ALLOW",
|
|
4336
|
-
reason: `Verified
|
|
4358
|
+
reason: result.agent?.trustScore ? `Verified (trust score ${result.agent.trustScore})` : "Verified",
|
|
4337
4359
|
trustScore: result.agent?.trustScore,
|
|
4338
4360
|
sessionId: "sessionId" in result ? result.sessionId : void 0
|
|
4339
4361
|
};
|