@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
|
@@ -474,9 +474,9 @@ var LocalEvaluator = class {
|
|
|
474
474
|
if (scopeBlock) {
|
|
475
475
|
return { recommendation: "DENY", reason: scopeBlock };
|
|
476
476
|
}
|
|
477
|
-
const
|
|
478
|
-
if (
|
|
479
|
-
return
|
|
477
|
+
const limitDecision = this.checkLimits(context);
|
|
478
|
+
if (limitDecision) {
|
|
479
|
+
return limitDecision;
|
|
480
480
|
}
|
|
481
481
|
if (context.purpose === "sub_agent.spawn" && this.policy.selfInstantiation) {
|
|
482
482
|
if (!this.policy.selfInstantiation.allowed) {
|
|
@@ -541,9 +541,21 @@ var LocalEvaluator = class {
|
|
|
541
541
|
checkLimits(context) {
|
|
542
542
|
const limits = this.policy.limits;
|
|
543
543
|
if (!limits) return null;
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
544
|
+
const value = context.transactionValue;
|
|
545
|
+
if (value !== void 0 && value > 0 && (limits.autonomousThreshold !== void 0 || limits.maxTransactionAmount !== void 0)) {
|
|
546
|
+
const autonomousThreshold = limits.autonomousThreshold ?? 0;
|
|
547
|
+
const hardLimit = limits.maxTransactionAmount ?? limits.autonomousThreshold ?? 0;
|
|
548
|
+
if (value > autonomousThreshold) {
|
|
549
|
+
if (value >= hardLimit) {
|
|
550
|
+
return {
|
|
551
|
+
recommendation: "DENY",
|
|
552
|
+
reason: `Transaction value ${value} at or above Hard Limit ${hardLimit}`
|
|
553
|
+
};
|
|
554
|
+
}
|
|
555
|
+
return {
|
|
556
|
+
recommendation: "MANUAL_REVIEW",
|
|
557
|
+
reason: `Transaction value ${value} is in the human-approval band (${autonomousThreshold}, ${hardLimit})`
|
|
558
|
+
};
|
|
547
559
|
}
|
|
548
560
|
}
|
|
549
561
|
if (limits.maxRequestsPerHour !== void 0) {
|
|
@@ -556,7 +568,10 @@ var LocalEvaluator = class {
|
|
|
556
568
|
} else {
|
|
557
569
|
entry.count++;
|
|
558
570
|
if (entry.count > limits.maxRequestsPerHour) {
|
|
559
|
-
return
|
|
571
|
+
return {
|
|
572
|
+
recommendation: "DENY",
|
|
573
|
+
reason: `Rate limit exceeded: ${entry.count}/${limits.maxRequestsPerHour} requests per hour`
|
|
574
|
+
};
|
|
560
575
|
}
|
|
561
576
|
}
|
|
562
577
|
}
|
|
@@ -3765,10 +3780,16 @@ function validatePurpose(purpose, path) {
|
|
|
3765
3780
|
errors.push({ path: `${path}.targets`, message: "targets must be an array of strings" });
|
|
3766
3781
|
}
|
|
3767
3782
|
if (p.blockedPatterns !== void 0 && !isStringArray(p.blockedPatterns)) {
|
|
3768
|
-
errors.push({
|
|
3783
|
+
errors.push({
|
|
3784
|
+
path: `${path}.blockedPatterns`,
|
|
3785
|
+
message: "blockedPatterns must be an array of strings"
|
|
3786
|
+
});
|
|
3769
3787
|
}
|
|
3770
3788
|
if (p.requiresApproval !== void 0 && typeof p.requiresApproval !== "boolean") {
|
|
3771
|
-
errors.push({
|
|
3789
|
+
errors.push({
|
|
3790
|
+
path: `${path}.requiresApproval`,
|
|
3791
|
+
message: "requiresApproval must be a boolean"
|
|
3792
|
+
});
|
|
3772
3793
|
}
|
|
3773
3794
|
return errors;
|
|
3774
3795
|
}
|
|
@@ -3791,11 +3812,29 @@ function validateLimits(limits, path) {
|
|
|
3791
3812
|
return [{ path, message: "limits must be an object" }];
|
|
3792
3813
|
}
|
|
3793
3814
|
const l = limits;
|
|
3815
|
+
if (l.autonomousThreshold !== void 0 && typeof l.autonomousThreshold !== "number") {
|
|
3816
|
+
errors.push({
|
|
3817
|
+
path: `${path}.autonomousThreshold`,
|
|
3818
|
+
message: "autonomousThreshold must be a number"
|
|
3819
|
+
});
|
|
3820
|
+
}
|
|
3794
3821
|
if (l.maxTransactionAmount !== void 0 && typeof l.maxTransactionAmount !== "number") {
|
|
3795
|
-
errors.push({
|
|
3822
|
+
errors.push({
|
|
3823
|
+
path: `${path}.maxTransactionAmount`,
|
|
3824
|
+
message: "maxTransactionAmount must be a number"
|
|
3825
|
+
});
|
|
3826
|
+
}
|
|
3827
|
+
if (typeof l.autonomousThreshold === "number" && typeof l.maxTransactionAmount === "number" && l.autonomousThreshold > l.maxTransactionAmount) {
|
|
3828
|
+
errors.push({
|
|
3829
|
+
path: `${path}.autonomousThreshold`,
|
|
3830
|
+
message: "autonomousThreshold (Autonomous Limit) must be <= maxTransactionAmount (Hard Limit)"
|
|
3831
|
+
});
|
|
3796
3832
|
}
|
|
3797
3833
|
if (l.maxRequestsPerHour !== void 0 && typeof l.maxRequestsPerHour !== "number") {
|
|
3798
|
-
errors.push({
|
|
3834
|
+
errors.push({
|
|
3835
|
+
path: `${path}.maxRequestsPerHour`,
|
|
3836
|
+
message: "maxRequestsPerHour must be a number"
|
|
3837
|
+
});
|
|
3799
3838
|
}
|
|
3800
3839
|
if (l.currency !== void 0 && typeof l.currency !== "string") {
|
|
3801
3840
|
errors.push({ path: `${path}.currency`, message: "currency must be a string" });
|
|
@@ -3810,7 +3849,10 @@ function validateRiskThresholds(thresholds, path) {
|
|
|
3810
3849
|
const t = thresholds;
|
|
3811
3850
|
for (const range of ["autoAllow", "requireApproval", "autoBlock"]) {
|
|
3812
3851
|
if (!t[range] || typeof t[range] !== "object") {
|
|
3813
|
-
errors.push({
|
|
3852
|
+
errors.push({
|
|
3853
|
+
path: `${path}.${range}`,
|
|
3854
|
+
message: `${range} is required and must be an object with min and max`
|
|
3855
|
+
});
|
|
3814
3856
|
continue;
|
|
3815
3857
|
}
|
|
3816
3858
|
const r = t[range];
|
|
@@ -3906,7 +3948,7 @@ function verifyLocal(evaluator, context) {
|
|
|
3906
3948
|
return evaluator.evaluate(context);
|
|
3907
3949
|
}
|
|
3908
3950
|
|
|
3909
|
-
// src/
|
|
3951
|
+
// src/trust-levels.ts
|
|
3910
3952
|
function getTrustLevel(score) {
|
|
3911
3953
|
if (score >= 80) return "PLATINUM";
|
|
3912
3954
|
if (score >= 60) return "GOLD";
|
|
@@ -3915,7 +3957,7 @@ function getTrustLevel(score) {
|
|
|
3915
3957
|
}
|
|
3916
3958
|
|
|
3917
3959
|
// src/version.ts
|
|
3918
|
-
var SDK_VERSION = "
|
|
3960
|
+
var SDK_VERSION = "5.0.0";
|
|
3919
3961
|
|
|
3920
3962
|
// src/http.ts
|
|
3921
3963
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -3945,11 +3987,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
|
|
|
3945
3987
|
// src/verify.ts
|
|
3946
3988
|
var DEFAULT_CONFIG = {
|
|
3947
3989
|
apiBaseUrl: "https://astrasync.ai/api",
|
|
3948
|
-
// v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
|
|
3949
|
-
// access). Pre-rename this defaulted to `'guidance'`, which combined with
|
|
3950
|
-
// a route gated at `'guidance'` to silently let unverified traffic
|
|
3951
|
-
// through (`hasMinimumAccess('guidance', 'guidance') === true`).
|
|
3952
|
-
defaultAccessLevel: "none",
|
|
3953
3990
|
// minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
|
|
3954
3991
|
// cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
|
|
3955
3992
|
// default; the caller's explicit value is honoured for cacheable results.
|
|
@@ -4110,13 +4147,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
4110
4147
|
// policy is not evaluated (we never reached the gate).
|
|
4111
4148
|
identityVerified: false,
|
|
4112
4149
|
policyAllowed: false,
|
|
4113
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
4114
|
-
// Adapters additionally short-circuit on `!identityVerified ||
|
|
4115
|
-
// !policyAllowed` before the gate check, but the access level still has
|
|
4116
|
-
// to be honest at the data layer so downstream consumers (SDK adapters
|
|
4117
|
-
// in other languages, custom integrations) inherit the correct
|
|
4118
|
-
// semantics.
|
|
4119
|
-
accessLevel: "none",
|
|
4120
4150
|
guidance,
|
|
4121
4151
|
denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
|
|
4122
4152
|
// Round-10 (#47, O5): on API-error fallback, surface a typed failure so
|
|
@@ -4139,6 +4169,11 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
4139
4169
|
// 4.0.0: typed marker so adapters render the misconfig envelope (503 +
|
|
4140
4170
|
// MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
|
|
4141
4171
|
...isMisconfig && { misconfigured: true },
|
|
4172
|
+
// 4.6.0: a transient api_error is retryable — mark it so consumers surface
|
|
4173
|
+
// "temporarily unavailable, retry" (recommendation 'error') instead of
|
|
4174
|
+
// coercing the absent recommendation to a policy 'deny'. Misconfig is
|
|
4175
|
+
// deterministic and intentionally NOT marked retryable.
|
|
4176
|
+
...isApiError && { retryable: true },
|
|
4142
4177
|
correlationId: options.correlationId,
|
|
4143
4178
|
attemptId: options.attemptId,
|
|
4144
4179
|
verifiedAt: /* @__PURE__ */ new Date()
|
|
@@ -4205,7 +4240,6 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4205
4240
|
attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
|
|
4206
4241
|
access: {
|
|
4207
4242
|
allowed: false,
|
|
4208
|
-
accessLevel: "none",
|
|
4209
4243
|
reason: "endpoint_deactivated",
|
|
4210
4244
|
failures: [
|
|
4211
4245
|
{
|
|
@@ -4268,7 +4302,7 @@ async function verify(config, request, options) {
|
|
|
4268
4302
|
if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
|
|
4269
4303
|
deprecationWarningShown = true;
|
|
4270
4304
|
console.warn(
|
|
4271
|
-
"[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access
|
|
4305
|
+
"[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."
|
|
4272
4306
|
);
|
|
4273
4307
|
}
|
|
4274
4308
|
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
|
|
@@ -4314,14 +4348,6 @@ async function verify(config, request, options) {
|
|
|
4314
4348
|
const result2 = {
|
|
4315
4349
|
identityVerified: idVerifiedFromBackend,
|
|
4316
4350
|
policyAllowed: false,
|
|
4317
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
4318
|
-
// Pre-rename this hardcoded `'guidance'`, which conflated with the
|
|
4319
|
-
// colocated `guidance: {...}` help-payload object below and let
|
|
4320
|
-
// denied requests pass any route gated at `'guidance'` because
|
|
4321
|
-
// `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
|
|
4322
|
-
// ALSO short-circuit on `!identityVerified || !policyAllowed` before
|
|
4323
|
-
// the gate check — belt-and-braces.
|
|
4324
|
-
accessLevel: "none",
|
|
4325
4351
|
// 3.6.0: the server now emits top-level denialReasons on every deny
|
|
4326
4352
|
// path — prefer it verbatim; the failure-message reconstruction remains
|
|
4327
4353
|
// as the fallback for older backends.
|
|
@@ -4370,7 +4396,6 @@ async function verify(config, request, options) {
|
|
|
4370
4396
|
trustScore: apiResponse.organization.trustScore
|
|
4371
4397
|
} : void 0;
|
|
4372
4398
|
const verificationContext = apiResponse.verificationContext;
|
|
4373
|
-
const accessLevel = apiResponse.access?.accessLevel ?? "standard";
|
|
4374
4399
|
const result = {
|
|
4375
4400
|
// 4.5.0 (probe F1): read idVerified from verificationContext with the
|
|
4376
4401
|
// SAME absent⇒false default as the deny branch. The previous `!== false`
|
|
@@ -4382,7 +4407,6 @@ async function verify(config, request, options) {
|
|
|
4382
4407
|
// this load-bearing must never be defaulted on.
|
|
4383
4408
|
identityVerified: apiResponse.verificationContext?.idVerified === true,
|
|
4384
4409
|
policyAllowed: true,
|
|
4385
|
-
accessLevel,
|
|
4386
4410
|
agent,
|
|
4387
4411
|
developer,
|
|
4388
4412
|
organization,
|
|
@@ -4409,7 +4433,6 @@ async function verify(config, request, options) {
|
|
|
4409
4433
|
};
|
|
4410
4434
|
if (result.recommendation === "deny") {
|
|
4411
4435
|
result.policyAllowed = false;
|
|
4412
|
-
result.accessLevel = "none";
|
|
4413
4436
|
result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
|
|
4414
4437
|
result.guidance = result.runtimeChallenge ? {
|
|
4415
4438
|
message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
|
|
@@ -4525,7 +4548,6 @@ function toGatewayConfig(config) {
|
|
|
4525
4548
|
return {
|
|
4526
4549
|
apiBaseUrl: config.apiBaseUrl || "https://api.astrasync.ai",
|
|
4527
4550
|
apiKey: config.apiKey,
|
|
4528
|
-
defaultAccessLevel: config.defaultAccessLevel,
|
|
4529
4551
|
minTrustScore: config.minTrustScore,
|
|
4530
4552
|
minTrustScoreForFull: config.minTrustScoreForFull,
|
|
4531
4553
|
cacheTtl: config.cacheTtl,
|
|
@@ -4553,7 +4575,7 @@ function toDecision(result) {
|
|
|
4553
4575
|
if (result.identityVerified && result.policyAllowed) {
|
|
4554
4576
|
return {
|
|
4555
4577
|
recommendation: "ALLOW",
|
|
4556
|
-
reason: `Verified
|
|
4578
|
+
reason: result.agent?.trustScore ? `Verified (trust score ${result.agent.trustScore})` : "Verified",
|
|
4557
4579
|
trustScore: result.agent?.trustScore,
|
|
4558
4580
|
sessionId: "sessionId" in result ? result.sessionId : void 0
|
|
4559
4581
|
};
|