@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
|
@@ -497,9 +497,9 @@ var LocalEvaluator = class {
|
|
|
497
497
|
if (scopeBlock) {
|
|
498
498
|
return { recommendation: "DENY", reason: scopeBlock };
|
|
499
499
|
}
|
|
500
|
-
const
|
|
501
|
-
if (
|
|
502
|
-
return
|
|
500
|
+
const limitDecision = this.checkLimits(context);
|
|
501
|
+
if (limitDecision) {
|
|
502
|
+
return limitDecision;
|
|
503
503
|
}
|
|
504
504
|
if (context.purpose === "sub_agent.spawn" && this.policy.selfInstantiation) {
|
|
505
505
|
if (!this.policy.selfInstantiation.allowed) {
|
|
@@ -564,9 +564,21 @@ var LocalEvaluator = class {
|
|
|
564
564
|
checkLimits(context) {
|
|
565
565
|
const limits = this.policy.limits;
|
|
566
566
|
if (!limits) return null;
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
567
|
+
const value = context.transactionValue;
|
|
568
|
+
if (value !== void 0 && value > 0 && (limits.autonomousThreshold !== void 0 || limits.maxTransactionAmount !== void 0)) {
|
|
569
|
+
const autonomousThreshold = limits.autonomousThreshold ?? 0;
|
|
570
|
+
const hardLimit = limits.maxTransactionAmount ?? limits.autonomousThreshold ?? 0;
|
|
571
|
+
if (value > autonomousThreshold) {
|
|
572
|
+
if (value >= hardLimit) {
|
|
573
|
+
return {
|
|
574
|
+
recommendation: "DENY",
|
|
575
|
+
reason: `Transaction value ${value} at or above Hard Limit ${hardLimit}`
|
|
576
|
+
};
|
|
577
|
+
}
|
|
578
|
+
return {
|
|
579
|
+
recommendation: "MANUAL_REVIEW",
|
|
580
|
+
reason: `Transaction value ${value} is in the human-approval band (${autonomousThreshold}, ${hardLimit})`
|
|
581
|
+
};
|
|
570
582
|
}
|
|
571
583
|
}
|
|
572
584
|
if (limits.maxRequestsPerHour !== void 0) {
|
|
@@ -579,7 +591,10 @@ var LocalEvaluator = class {
|
|
|
579
591
|
} else {
|
|
580
592
|
entry.count++;
|
|
581
593
|
if (entry.count > limits.maxRequestsPerHour) {
|
|
582
|
-
return
|
|
594
|
+
return {
|
|
595
|
+
recommendation: "DENY",
|
|
596
|
+
reason: `Rate limit exceeded: ${entry.count}/${limits.maxRequestsPerHour} requests per hour`
|
|
597
|
+
};
|
|
583
598
|
}
|
|
584
599
|
}
|
|
585
600
|
}
|
|
@@ -3788,10 +3803,16 @@ function validatePurpose(purpose, path) {
|
|
|
3788
3803
|
errors.push({ path: `${path}.targets`, message: "targets must be an array of strings" });
|
|
3789
3804
|
}
|
|
3790
3805
|
if (p.blockedPatterns !== void 0 && !isStringArray(p.blockedPatterns)) {
|
|
3791
|
-
errors.push({
|
|
3806
|
+
errors.push({
|
|
3807
|
+
path: `${path}.blockedPatterns`,
|
|
3808
|
+
message: "blockedPatterns must be an array of strings"
|
|
3809
|
+
});
|
|
3792
3810
|
}
|
|
3793
3811
|
if (p.requiresApproval !== void 0 && typeof p.requiresApproval !== "boolean") {
|
|
3794
|
-
errors.push({
|
|
3812
|
+
errors.push({
|
|
3813
|
+
path: `${path}.requiresApproval`,
|
|
3814
|
+
message: "requiresApproval must be a boolean"
|
|
3815
|
+
});
|
|
3795
3816
|
}
|
|
3796
3817
|
return errors;
|
|
3797
3818
|
}
|
|
@@ -3814,11 +3835,29 @@ function validateLimits(limits, path) {
|
|
|
3814
3835
|
return [{ path, message: "limits must be an object" }];
|
|
3815
3836
|
}
|
|
3816
3837
|
const l = limits;
|
|
3838
|
+
if (l.autonomousThreshold !== void 0 && typeof l.autonomousThreshold !== "number") {
|
|
3839
|
+
errors.push({
|
|
3840
|
+
path: `${path}.autonomousThreshold`,
|
|
3841
|
+
message: "autonomousThreshold must be a number"
|
|
3842
|
+
});
|
|
3843
|
+
}
|
|
3817
3844
|
if (l.maxTransactionAmount !== void 0 && typeof l.maxTransactionAmount !== "number") {
|
|
3818
|
-
errors.push({
|
|
3845
|
+
errors.push({
|
|
3846
|
+
path: `${path}.maxTransactionAmount`,
|
|
3847
|
+
message: "maxTransactionAmount must be a number"
|
|
3848
|
+
});
|
|
3849
|
+
}
|
|
3850
|
+
if (typeof l.autonomousThreshold === "number" && typeof l.maxTransactionAmount === "number" && l.autonomousThreshold > l.maxTransactionAmount) {
|
|
3851
|
+
errors.push({
|
|
3852
|
+
path: `${path}.autonomousThreshold`,
|
|
3853
|
+
message: "autonomousThreshold (Autonomous Limit) must be <= maxTransactionAmount (Hard Limit)"
|
|
3854
|
+
});
|
|
3819
3855
|
}
|
|
3820
3856
|
if (l.maxRequestsPerHour !== void 0 && typeof l.maxRequestsPerHour !== "number") {
|
|
3821
|
-
errors.push({
|
|
3857
|
+
errors.push({
|
|
3858
|
+
path: `${path}.maxRequestsPerHour`,
|
|
3859
|
+
message: "maxRequestsPerHour must be a number"
|
|
3860
|
+
});
|
|
3822
3861
|
}
|
|
3823
3862
|
if (l.currency !== void 0 && typeof l.currency !== "string") {
|
|
3824
3863
|
errors.push({ path: `${path}.currency`, message: "currency must be a string" });
|
|
@@ -3833,7 +3872,10 @@ function validateRiskThresholds(thresholds, path) {
|
|
|
3833
3872
|
const t = thresholds;
|
|
3834
3873
|
for (const range of ["autoAllow", "requireApproval", "autoBlock"]) {
|
|
3835
3874
|
if (!t[range] || typeof t[range] !== "object") {
|
|
3836
|
-
errors.push({
|
|
3875
|
+
errors.push({
|
|
3876
|
+
path: `${path}.${range}`,
|
|
3877
|
+
message: `${range} is required and must be an object with min and max`
|
|
3878
|
+
});
|
|
3837
3879
|
continue;
|
|
3838
3880
|
}
|
|
3839
3881
|
const r = t[range];
|
|
@@ -3929,7 +3971,7 @@ function verifyLocal(evaluator, context) {
|
|
|
3929
3971
|
return evaluator.evaluate(context);
|
|
3930
3972
|
}
|
|
3931
3973
|
|
|
3932
|
-
// src/
|
|
3974
|
+
// src/trust-levels.ts
|
|
3933
3975
|
function getTrustLevel(score) {
|
|
3934
3976
|
if (score >= 80) return "PLATINUM";
|
|
3935
3977
|
if (score >= 60) return "GOLD";
|
|
@@ -3938,7 +3980,7 @@ function getTrustLevel(score) {
|
|
|
3938
3980
|
}
|
|
3939
3981
|
|
|
3940
3982
|
// src/version.ts
|
|
3941
|
-
var SDK_VERSION = "
|
|
3983
|
+
var SDK_VERSION = "5.0.0";
|
|
3942
3984
|
|
|
3943
3985
|
// src/http.ts
|
|
3944
3986
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -3968,11 +4010,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
|
|
|
3968
4010
|
// src/verify.ts
|
|
3969
4011
|
var DEFAULT_CONFIG = {
|
|
3970
4012
|
apiBaseUrl: "https://astrasync.ai/api",
|
|
3971
|
-
// v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
|
|
3972
|
-
// access). Pre-rename this defaulted to `'guidance'`, which combined with
|
|
3973
|
-
// a route gated at `'guidance'` to silently let unverified traffic
|
|
3974
|
-
// through (`hasMinimumAccess('guidance', 'guidance') === true`).
|
|
3975
|
-
defaultAccessLevel: "none",
|
|
3976
4013
|
// minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
|
|
3977
4014
|
// cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
|
|
3978
4015
|
// default; the caller's explicit value is honoured for cacheable results.
|
|
@@ -4133,13 +4170,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
4133
4170
|
// policy is not evaluated (we never reached the gate).
|
|
4134
4171
|
identityVerified: false,
|
|
4135
4172
|
policyAllowed: false,
|
|
4136
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
4137
|
-
// Adapters additionally short-circuit on `!identityVerified ||
|
|
4138
|
-
// !policyAllowed` before the gate check, but the access level still has
|
|
4139
|
-
// to be honest at the data layer so downstream consumers (SDK adapters
|
|
4140
|
-
// in other languages, custom integrations) inherit the correct
|
|
4141
|
-
// semantics.
|
|
4142
|
-
accessLevel: "none",
|
|
4143
4173
|
guidance,
|
|
4144
4174
|
denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
|
|
4145
4175
|
// Round-10 (#47, O5): on API-error fallback, surface a typed failure so
|
|
@@ -4162,6 +4192,11 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
4162
4192
|
// 4.0.0: typed marker so adapters render the misconfig envelope (503 +
|
|
4163
4193
|
// MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
|
|
4164
4194
|
...isMisconfig && { misconfigured: true },
|
|
4195
|
+
// 4.6.0: a transient api_error is retryable — mark it so consumers surface
|
|
4196
|
+
// "temporarily unavailable, retry" (recommendation 'error') instead of
|
|
4197
|
+
// coercing the absent recommendation to a policy 'deny'. Misconfig is
|
|
4198
|
+
// deterministic and intentionally NOT marked retryable.
|
|
4199
|
+
...isApiError && { retryable: true },
|
|
4165
4200
|
correlationId: options.correlationId,
|
|
4166
4201
|
attemptId: options.attemptId,
|
|
4167
4202
|
verifiedAt: /* @__PURE__ */ new Date()
|
|
@@ -4228,7 +4263,6 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4228
4263
|
attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
|
|
4229
4264
|
access: {
|
|
4230
4265
|
allowed: false,
|
|
4231
|
-
accessLevel: "none",
|
|
4232
4266
|
reason: "endpoint_deactivated",
|
|
4233
4267
|
failures: [
|
|
4234
4268
|
{
|
|
@@ -4291,7 +4325,7 @@ async function verify(config, request, options) {
|
|
|
4291
4325
|
if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
|
|
4292
4326
|
deprecationWarningShown = true;
|
|
4293
4327
|
console.warn(
|
|
4294
|
-
"[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access
|
|
4328
|
+
"[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."
|
|
4295
4329
|
);
|
|
4296
4330
|
}
|
|
4297
4331
|
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
|
|
@@ -4337,14 +4371,6 @@ async function verify(config, request, options) {
|
|
|
4337
4371
|
const result2 = {
|
|
4338
4372
|
identityVerified: idVerifiedFromBackend,
|
|
4339
4373
|
policyAllowed: false,
|
|
4340
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
4341
|
-
// Pre-rename this hardcoded `'guidance'`, which conflated with the
|
|
4342
|
-
// colocated `guidance: {...}` help-payload object below and let
|
|
4343
|
-
// denied requests pass any route gated at `'guidance'` because
|
|
4344
|
-
// `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
|
|
4345
|
-
// ALSO short-circuit on `!identityVerified || !policyAllowed` before
|
|
4346
|
-
// the gate check — belt-and-braces.
|
|
4347
|
-
accessLevel: "none",
|
|
4348
4374
|
// 3.6.0: the server now emits top-level denialReasons on every deny
|
|
4349
4375
|
// path — prefer it verbatim; the failure-message reconstruction remains
|
|
4350
4376
|
// as the fallback for older backends.
|
|
@@ -4393,7 +4419,6 @@ async function verify(config, request, options) {
|
|
|
4393
4419
|
trustScore: apiResponse.organization.trustScore
|
|
4394
4420
|
} : void 0;
|
|
4395
4421
|
const verificationContext = apiResponse.verificationContext;
|
|
4396
|
-
const accessLevel = apiResponse.access?.accessLevel ?? "standard";
|
|
4397
4422
|
const result = {
|
|
4398
4423
|
// 4.5.0 (probe F1): read idVerified from verificationContext with the
|
|
4399
4424
|
// SAME absent⇒false default as the deny branch. The previous `!== false`
|
|
@@ -4405,7 +4430,6 @@ async function verify(config, request, options) {
|
|
|
4405
4430
|
// this load-bearing must never be defaulted on.
|
|
4406
4431
|
identityVerified: apiResponse.verificationContext?.idVerified === true,
|
|
4407
4432
|
policyAllowed: true,
|
|
4408
|
-
accessLevel,
|
|
4409
4433
|
agent,
|
|
4410
4434
|
developer,
|
|
4411
4435
|
organization,
|
|
@@ -4432,7 +4456,6 @@ async function verify(config, request, options) {
|
|
|
4432
4456
|
};
|
|
4433
4457
|
if (result.recommendation === "deny") {
|
|
4434
4458
|
result.policyAllowed = false;
|
|
4435
|
-
result.accessLevel = "none";
|
|
4436
4459
|
result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
|
|
4437
4460
|
result.guidance = result.runtimeChallenge ? {
|
|
4438
4461
|
message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
|
|
@@ -4545,7 +4568,6 @@ function toGatewayConfig(config) {
|
|
|
4545
4568
|
return {
|
|
4546
4569
|
apiBaseUrl: config.apiBaseUrl || "https://api.astrasync.ai",
|
|
4547
4570
|
apiKey: config.apiKey,
|
|
4548
|
-
defaultAccessLevel: config.defaultAccessLevel,
|
|
4549
4571
|
minTrustScore: config.minTrustScore,
|
|
4550
4572
|
minTrustScoreForFull: config.minTrustScoreForFull,
|
|
4551
4573
|
cacheTtl: config.cacheTtl,
|
|
@@ -4573,7 +4595,7 @@ function toDecision(result) {
|
|
|
4573
4595
|
if (result.identityVerified && result.policyAllowed) {
|
|
4574
4596
|
return {
|
|
4575
4597
|
recommendation: "ALLOW",
|
|
4576
|
-
reason: `Verified
|
|
4598
|
+
reason: result.agent?.trustScore ? `Verified (trust score ${result.agent.trustScore})` : "Verified",
|
|
4577
4599
|
trustScore: result.agent?.trustScore,
|
|
4578
4600
|
sessionId: "sessionId" in result ? result.sessionId : void 0
|
|
4579
4601
|
};
|