@astrasyncai/verification-gateway 5.18.1 → 5.20.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/CHANGELOG.md +232 -0
- package/README.md +217 -4
- package/dist/adapter-interface/interface.d.mts +2 -2
- package/dist/adapter-interface/interface.d.ts +2 -2
- package/dist/adapters/express.d.mts +9 -1
- package/dist/adapters/express.d.ts +9 -1
- package/dist/adapters/express.js +160 -52
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +160 -52
- package/dist/adapters/express.mjs.map +1 -1
- package/dist/adapters/http-pdlss.d.mts +7 -1
- package/dist/adapters/http-pdlss.d.ts +7 -1
- package/dist/adapters/http-pdlss.js +18 -2
- package/dist/adapters/http-pdlss.js.map +1 -1
- package/dist/adapters/http-pdlss.mjs +16 -1
- package/dist/adapters/http-pdlss.mjs.map +1 -1
- package/dist/adapters/kit-express.d.mts +93 -1
- package/dist/adapters/kit-express.d.ts +93 -1
- package/dist/adapters/kit-express.js +181 -2
- package/dist/adapters/kit-express.js.map +1 -1
- package/dist/adapters/kit-express.mjs +180 -2
- package/dist/adapters/kit-express.mjs.map +1 -1
- package/dist/adapters/mcp.d.mts +102 -9
- package/dist/adapters/mcp.d.ts +102 -9
- package/dist/adapters/mcp.js +242 -19
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +240 -19
- package/dist/adapters/mcp.mjs.map +1 -1
- package/dist/adapters/nextjs.d.mts +1 -1
- package/dist/adapters/nextjs.d.ts +1 -1
- package/dist/adapters/nextjs.js +97 -14
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +97 -14
- package/dist/adapters/nextjs.mjs.map +1 -1
- package/dist/adapters/sdk.d.mts +101 -2
- package/dist/adapters/sdk.d.ts +101 -2
- package/dist/adapters/sdk.js +199 -12
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +199 -12
- package/dist/adapters/sdk.mjs.map +1 -1
- package/dist/agent/index.d.mts +1 -1
- package/dist/agent/index.d.ts +1 -1
- 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 +94 -16
- package/dist/bin/astrasync-codex-hook.js +94 -16
- package/dist/bin/astrasync-guard.js +94 -16
- package/dist/bin/astrasync.js +127 -16
- package/dist/browser/background.js +94 -16
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +94 -16
- package/dist/browser/background.mjs.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +1 -1
- package/dist/cli/index.mjs.map +1 -1
- package/dist/codex/index.js +94 -16
- package/dist/codex/index.js.map +1 -1
- package/dist/codex/index.mjs +94 -16
- package/dist/codex/index.mjs.map +1 -1
- package/dist/cursor/extension.js +94 -16
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +94 -16
- 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 -1
- package/dist/edge-core/index.d.ts +1 -1
- package/dist/edge-core/index.js +69 -12
- package/dist/edge-core/index.js.map +1 -1
- package/dist/edge-core/index.mjs +69 -12
- package/dist/edge-core/index.mjs.map +1 -1
- package/dist/gateway/gateway.d.mts +2 -2
- package/dist/gateway/gateway.d.ts +2 -2
- package/dist/gateway/gateway.js +94 -16
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +94 -16
- package/dist/gateway/gateway.mjs.map +1 -1
- package/dist/git-trigger/git-hooks.d.mts +1 -1
- package/dist/git-trigger/git-hooks.d.ts +1 -1
- package/dist/index.d.mts +706 -34
- package/dist/index.d.ts +706 -34
- package/dist/index.js +1391 -205
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1374 -195
- 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/registration/index.d.mts +11 -2
- package/dist/registration/index.d.ts +11 -2
- 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/transport/index.d.mts +1 -1
- package/dist/transport/index.d.ts +1 -1
- package/dist/transport/index.js +3 -2
- package/dist/transport/index.js.map +1 -1
- package/dist/transport/index.mjs +3 -2
- package/dist/transport/index.mjs.map +1 -1
- package/dist/{types-BRz2U0Pn.d.ts → types-B_HLhZ9n.d.ts} +1 -1
- package/dist/{types-BfILnheI.d.mts → types-CU17R4Nr.d.mts} +11 -0
- package/dist/{types-BfILnheI.d.ts → types-CU17R4Nr.d.ts} +11 -0
- package/dist/{types-Cns4l8gX.d.mts → types-CxjqmPl-.d.mts} +115 -13
- package/dist/{types-Cns4l8gX.d.ts → types-CxjqmPl-.d.ts} +115 -13
- package/dist/{types-3ObBpsnf.d.mts → types-D37aSQ9c.d.mts} +106 -3
- package/dist/{types-CfBpm3w5.d.mts → types-Djpz-L0w.d.mts} +1 -1
- package/dist/{types-BoxZEYPS.d.ts → types-Dn8tXnei.d.ts} +106 -3
- package/dist/ui/index.d.mts +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/dist/verify.d.mts +50 -4
- package/dist/verify.d.ts +50 -4
- package/dist/verify.js +93 -14
- package/dist/verify.js.map +1 -1
- package/dist/verify.mjs +91 -14
- package/dist/verify.mjs.map +1 -1
- package/dist/webhooks.d.mts +16 -3
- package/dist/webhooks.d.ts +16 -3
- package/dist/webhooks.js +24 -13
- package/dist/webhooks.js.map +1 -1
- package/dist/webhooks.mjs +24 -13
- package/dist/webhooks.mjs.map +1 -1
- package/package.json +1 -1
package/dist/codex/index.mjs
CHANGED
|
@@ -4006,7 +4006,7 @@ function getTrustLevel(score) {
|
|
|
4006
4006
|
}
|
|
4007
4007
|
|
|
4008
4008
|
// src/version.ts
|
|
4009
|
-
var SDK_VERSION = "5.
|
|
4009
|
+
var SDK_VERSION = "5.20.0";
|
|
4010
4010
|
|
|
4011
4011
|
// src/http.ts
|
|
4012
4012
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -4161,7 +4161,12 @@ function getCacheKey(request, counterpartyId) {
|
|
|
4161
4161
|
// its start_checkout quote was served the cached quote-leg grant (no
|
|
4162
4162
|
// settlementOutcome) and never reached the backend. Same F-A1-07 bug class.
|
|
4163
4163
|
request.commercePhase || "",
|
|
4164
|
-
request.checkoutSessionId || ""
|
|
4164
|
+
request.checkoutSessionId || "",
|
|
4165
|
+
// 5.19.0: a route_config purpose claim is checked server-side against
|
|
4166
|
+
// the stored rule for this method + path, so it changes the verdict.
|
|
4167
|
+
request.purposeSource || "",
|
|
4168
|
+
request.requestMethod || "",
|
|
4169
|
+
request.requestPath || ""
|
|
4165
4170
|
].join("|");
|
|
4166
4171
|
}
|
|
4167
4172
|
function getCachedResult(request, counterpartyId) {
|
|
@@ -4319,6 +4324,9 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4319
4324
|
if (requestData.enableRuntimeChallenge)
|
|
4320
4325
|
body.enableRuntimeChallenge = requestData.enableRuntimeChallenge;
|
|
4321
4326
|
if (requestData.routePolicy) body.routePolicy = requestData.routePolicy;
|
|
4327
|
+
if (config.actingProof?.connectorToken) {
|
|
4328
|
+
body.actingProof = { connectorToken: config.actingProof.connectorToken };
|
|
4329
|
+
}
|
|
4322
4330
|
if (requestData.approvalHeldByRoute) body.approvalHeldByRoute = true;
|
|
4323
4331
|
if (requestData.createSession) body.createSession = requestData.createSession;
|
|
4324
4332
|
if (requestData.durationRequired) body.durationRequired = requestData.durationRequired;
|
|
@@ -4335,6 +4343,11 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4335
4343
|
if (requestData.buyerEmail) body.buyerEmail = requestData.buyerEmail;
|
|
4336
4344
|
if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
|
|
4337
4345
|
if (requestData.attemptId) body.attemptId = requestData.attemptId;
|
|
4346
|
+
if (requestData.purposeSource) body.purposeSource = requestData.purposeSource;
|
|
4347
|
+
if (requestData.agentArtifacts) body.agentArtifacts = requestData.agentArtifacts;
|
|
4348
|
+
if (requestData.metadata) body.metadata = requestData.metadata;
|
|
4349
|
+
if (requestData.requestMethod) body.requestMethod = requestData.requestMethod;
|
|
4350
|
+
if (requestData.requestPath) body.requestPath = requestData.requestPath;
|
|
4338
4351
|
if (requestData.considerationSet) body.considerationSet = requestData.considerationSet;
|
|
4339
4352
|
body.sdkVersion = SDK_VERSION;
|
|
4340
4353
|
if (requestData.callerMetadata || requestData.clientIp || requestData.userAgent) {
|
|
@@ -4481,22 +4494,43 @@ async function verify(config, request, options) {
|
|
|
4481
4494
|
"[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."
|
|
4482
4495
|
);
|
|
4483
4496
|
}
|
|
4484
|
-
const uncacheable = Boolean(request.commerceArtifacts);
|
|
4497
|
+
const uncacheable = Boolean(request.commerceArtifacts) || Boolean(mergedConfig.actingProof);
|
|
4485
4498
|
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
|
|
4486
4499
|
const cached = getCachedResult(request, mergedConfig.counterpartyId);
|
|
4487
4500
|
if (cached) {
|
|
4488
4501
|
if (mergedConfig.debug) {
|
|
4489
4502
|
console.log("[VerificationGateway] Returning cached result");
|
|
4490
4503
|
}
|
|
4491
|
-
|
|
4492
|
-
|
|
4493
|
-
|
|
4494
|
-
|
|
4495
|
-
|
|
4496
|
-
|
|
4497
|
-
|
|
4504
|
+
return sharedVerdict(cached, request);
|
|
4505
|
+
}
|
|
4506
|
+
}
|
|
4507
|
+
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
|
|
4508
|
+
const key = getCacheKey(request, mergedConfig.counterpartyId);
|
|
4509
|
+
const pending = inflightVerifies.get(key);
|
|
4510
|
+
if (pending) return sharedVerdict(await pending, request);
|
|
4511
|
+
const flight = verifyViaApi(mergedConfig, request, urls, uncacheable);
|
|
4512
|
+
inflightVerifies.set(key, flight);
|
|
4513
|
+
try {
|
|
4514
|
+
return await flight;
|
|
4515
|
+
} finally {
|
|
4516
|
+
inflightVerifies.delete(key);
|
|
4498
4517
|
}
|
|
4499
4518
|
}
|
|
4519
|
+
return verifyViaApi(mergedConfig, request, urls, uncacheable);
|
|
4520
|
+
}
|
|
4521
|
+
var inflightVerifies = /* @__PURE__ */ new Map();
|
|
4522
|
+
var sharedVerdicts = /* @__PURE__ */ new WeakSet();
|
|
4523
|
+
function sharedVerdict(source, request) {
|
|
4524
|
+
const hit = { ...source };
|
|
4525
|
+
if (request.attemptId) {
|
|
4526
|
+
hit.attemptId = request.attemptId;
|
|
4527
|
+
} else {
|
|
4528
|
+
delete hit.attemptId;
|
|
4529
|
+
}
|
|
4530
|
+
sharedVerdicts.add(hit);
|
|
4531
|
+
return hit;
|
|
4532
|
+
}
|
|
4533
|
+
async function verifyViaApi(mergedConfig, request, urls, uncacheable) {
|
|
4500
4534
|
const enrichedRequest = { ...request };
|
|
4501
4535
|
if (!enrichedRequest.counterpartyUrl && mergedConfig.counterpartyUrl) {
|
|
4502
4536
|
enrichedRequest.counterpartyUrl = mergedConfig.counterpartyUrl;
|
|
@@ -4524,9 +4558,18 @@ async function verify(config, request, options) {
|
|
|
4524
4558
|
if (!apiResponse.access?.allowed) {
|
|
4525
4559
|
const aggregatedFailures = apiResponse.access?.failures;
|
|
4526
4560
|
const idVerifiedFromBackend = apiResponse.verificationContext?.idVerified === true && !aggregatedFailures?.some((f) => REJECTED_IDENTITY_DIMENSIONS.has(f.dimension));
|
|
4561
|
+
const denyAgent = idVerifiedFromBackend && apiResponse.agent ? {
|
|
4562
|
+
astraId: apiResponse.agent.astraId,
|
|
4563
|
+
name: apiResponse.agent.name,
|
|
4564
|
+
trustScore: apiResponse.agent.trustScore,
|
|
4565
|
+
trustLevel: getTrustLevel(apiResponse.agent.trustScore),
|
|
4566
|
+
blockchainAnchored: apiResponse.agent.blockchainStatus === "anchored",
|
|
4567
|
+
status: apiResponse.agent.agentStatus
|
|
4568
|
+
} : void 0;
|
|
4527
4569
|
const result2 = {
|
|
4528
4570
|
identityVerified: idVerifiedFromBackend,
|
|
4529
4571
|
policyAllowed: false,
|
|
4572
|
+
...denyAgent && { agent: denyAgent },
|
|
4530
4573
|
// 3.6.0: the server now emits top-level denialReasons on every deny
|
|
4531
4574
|
// path — prefer it verbatim; the failure-message reconstruction remains
|
|
4532
4575
|
// as the fallback for older backends.
|
|
@@ -4566,7 +4609,9 @@ async function verify(config, request, options) {
|
|
|
4566
4609
|
fulfilment: apiResponse.fulfilment,
|
|
4567
4610
|
mandates: apiResponse.mandates,
|
|
4568
4611
|
kyaToken: apiResponse.kyaToken,
|
|
4569
|
-
aep: apiResponse.aep
|
|
4612
|
+
aep: apiResponse.aep,
|
|
4613
|
+
// 5.20.0 (round 29.1): non-fatal integration warnings (e.g. events_url_missing).
|
|
4614
|
+
warnings: apiResponse.warnings
|
|
4570
4615
|
};
|
|
4571
4616
|
return result2;
|
|
4572
4617
|
}
|
|
@@ -4634,7 +4679,9 @@ async function verify(config, request, options) {
|
|
|
4634
4679
|
// 5.15.0: merchant-lane AP2 mandates + KYAPay identity token.
|
|
4635
4680
|
mandates: apiResponse.mandates,
|
|
4636
4681
|
kyaToken: apiResponse.kyaToken,
|
|
4637
|
-
aep: apiResponse.aep
|
|
4682
|
+
aep: apiResponse.aep,
|
|
4683
|
+
// 5.20.0 (round 29.1): non-fatal integration warnings (e.g. events_url_missing).
|
|
4684
|
+
warnings: apiResponse.warnings
|
|
4638
4685
|
};
|
|
4639
4686
|
if (result.recommendation === "deny") {
|
|
4640
4687
|
result.policyAllowed = false;
|
|
@@ -4660,8 +4707,18 @@ async function verify(config, request, options) {
|
|
|
4660
4707
|
cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
|
|
4661
4708
|
}
|
|
4662
4709
|
}
|
|
4710
|
+
notifyVerificationListeners(request, result);
|
|
4663
4711
|
return result;
|
|
4664
4712
|
}
|
|
4713
|
+
var verificationListeners = /* @__PURE__ */ new Set();
|
|
4714
|
+
function notifyVerificationListeners(request, result) {
|
|
4715
|
+
for (const listener of verificationListeners) {
|
|
4716
|
+
try {
|
|
4717
|
+
listener(result, request);
|
|
4718
|
+
} catch {
|
|
4719
|
+
}
|
|
4720
|
+
}
|
|
4721
|
+
}
|
|
4665
4722
|
|
|
4666
4723
|
// src/adapters/stepup-poll.ts
|
|
4667
4724
|
var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
|
|
@@ -4672,6 +4729,9 @@ var MAX_TOTAL_BYTES = 16 * 1024;
|
|
|
4672
4729
|
// src/adapters/commerce-detect.ts
|
|
4673
4730
|
var MAX_BODY_BYTES = 64 * 1024;
|
|
4674
4731
|
|
|
4732
|
+
// src/adapters/routes-cache.ts
|
|
4733
|
+
var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
|
|
4734
|
+
|
|
4675
4735
|
// src/edge-config.ts
|
|
4676
4736
|
var DEFAULT_EDGE_CONFIG = Object.freeze({
|
|
4677
4737
|
version: 1,
|
|
@@ -4913,9 +4973,6 @@ var BeaconBuffer = class {
|
|
|
4913
4973
|
};
|
|
4914
4974
|
var beaconBuffer = new BeaconBuffer();
|
|
4915
4975
|
|
|
4916
|
-
// src/adapters/express.ts
|
|
4917
|
-
var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
|
|
4918
|
-
|
|
4919
4976
|
// src/adapters/nextjs.ts
|
|
4920
4977
|
var DEFAULT_ROUTES_REFRESH_MS2 = 5 * 60 * 1e3;
|
|
4921
4978
|
|
|
@@ -5009,6 +5066,25 @@ import {
|
|
|
5009
5066
|
// src/idempotency/index.ts
|
|
5010
5067
|
var DEFAULT_IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1e3;
|
|
5011
5068
|
|
|
5069
|
+
// src/ucp/approval-events.ts
|
|
5070
|
+
var MemorySeenEvents = class {
|
|
5071
|
+
constructor(max = 1e4) {
|
|
5072
|
+
this.max = max;
|
|
5073
|
+
this.ids = /* @__PURE__ */ new Set();
|
|
5074
|
+
}
|
|
5075
|
+
async has(eventId) {
|
|
5076
|
+
return this.ids.has(eventId);
|
|
5077
|
+
}
|
|
5078
|
+
async add(eventId) {
|
|
5079
|
+
if (this.ids.size >= this.max) {
|
|
5080
|
+
const first = this.ids.values().next().value;
|
|
5081
|
+
if (first !== void 0) this.ids.delete(first);
|
|
5082
|
+
}
|
|
5083
|
+
this.ids.add(eventId);
|
|
5084
|
+
}
|
|
5085
|
+
};
|
|
5086
|
+
var defaultSeen = new MemorySeenEvents();
|
|
5087
|
+
|
|
5012
5088
|
// src/payments/kyapay.ts
|
|
5013
5089
|
import {
|
|
5014
5090
|
createLocalJWKSet,
|
|
@@ -5053,7 +5129,9 @@ function toDecision(result) {
|
|
|
5053
5129
|
if (result.identityVerified && result.policyAllowed) {
|
|
5054
5130
|
return {
|
|
5055
5131
|
recommendation: "ALLOW",
|
|
5056
|
-
|
|
5132
|
+
// 5.19.0: the score is on `trustScore` for the merchant; `reason` is
|
|
5133
|
+
// text a merchant may relay to the agent, so it never embeds the number.
|
|
5134
|
+
reason: "Verified",
|
|
5057
5135
|
trustScore: result.agent?.trustScore,
|
|
5058
5136
|
sessionId: "sessionId" in result ? result.sessionId : void 0
|
|
5059
5137
|
};
|