@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
|
@@ -3986,7 +3986,7 @@ function getTrustLevel(score) {
|
|
|
3986
3986
|
}
|
|
3987
3987
|
|
|
3988
3988
|
// src/version.ts
|
|
3989
|
-
var SDK_VERSION = "5.
|
|
3989
|
+
var SDK_VERSION = "5.20.0";
|
|
3990
3990
|
|
|
3991
3991
|
// src/http.ts
|
|
3992
3992
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -4141,7 +4141,12 @@ function getCacheKey(request, counterpartyId) {
|
|
|
4141
4141
|
// its start_checkout quote was served the cached quote-leg grant (no
|
|
4142
4142
|
// settlementOutcome) and never reached the backend. Same F-A1-07 bug class.
|
|
4143
4143
|
request.commercePhase || "",
|
|
4144
|
-
request.checkoutSessionId || ""
|
|
4144
|
+
request.checkoutSessionId || "",
|
|
4145
|
+
// 5.19.0: a route_config purpose claim is checked server-side against
|
|
4146
|
+
// the stored rule for this method + path, so it changes the verdict.
|
|
4147
|
+
request.purposeSource || "",
|
|
4148
|
+
request.requestMethod || "",
|
|
4149
|
+
request.requestPath || ""
|
|
4145
4150
|
].join("|");
|
|
4146
4151
|
}
|
|
4147
4152
|
function getCachedResult(request, counterpartyId) {
|
|
@@ -4299,6 +4304,9 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4299
4304
|
if (requestData.enableRuntimeChallenge)
|
|
4300
4305
|
body.enableRuntimeChallenge = requestData.enableRuntimeChallenge;
|
|
4301
4306
|
if (requestData.routePolicy) body.routePolicy = requestData.routePolicy;
|
|
4307
|
+
if (config.actingProof?.connectorToken) {
|
|
4308
|
+
body.actingProof = { connectorToken: config.actingProof.connectorToken };
|
|
4309
|
+
}
|
|
4302
4310
|
if (requestData.approvalHeldByRoute) body.approvalHeldByRoute = true;
|
|
4303
4311
|
if (requestData.createSession) body.createSession = requestData.createSession;
|
|
4304
4312
|
if (requestData.durationRequired) body.durationRequired = requestData.durationRequired;
|
|
@@ -4315,6 +4323,11 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4315
4323
|
if (requestData.buyerEmail) body.buyerEmail = requestData.buyerEmail;
|
|
4316
4324
|
if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
|
|
4317
4325
|
if (requestData.attemptId) body.attemptId = requestData.attemptId;
|
|
4326
|
+
if (requestData.purposeSource) body.purposeSource = requestData.purposeSource;
|
|
4327
|
+
if (requestData.agentArtifacts) body.agentArtifacts = requestData.agentArtifacts;
|
|
4328
|
+
if (requestData.metadata) body.metadata = requestData.metadata;
|
|
4329
|
+
if (requestData.requestMethod) body.requestMethod = requestData.requestMethod;
|
|
4330
|
+
if (requestData.requestPath) body.requestPath = requestData.requestPath;
|
|
4318
4331
|
if (requestData.considerationSet) body.considerationSet = requestData.considerationSet;
|
|
4319
4332
|
body.sdkVersion = SDK_VERSION;
|
|
4320
4333
|
if (requestData.callerMetadata || requestData.clientIp || requestData.userAgent) {
|
|
@@ -4461,22 +4474,43 @@ async function verify(config, request, options) {
|
|
|
4461
4474
|
"[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."
|
|
4462
4475
|
);
|
|
4463
4476
|
}
|
|
4464
|
-
const uncacheable = Boolean(request.commerceArtifacts);
|
|
4477
|
+
const uncacheable = Boolean(request.commerceArtifacts) || Boolean(mergedConfig.actingProof);
|
|
4465
4478
|
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
|
|
4466
4479
|
const cached = getCachedResult(request, mergedConfig.counterpartyId);
|
|
4467
4480
|
if (cached) {
|
|
4468
4481
|
if (mergedConfig.debug) {
|
|
4469
4482
|
console.log("[VerificationGateway] Returning cached result");
|
|
4470
4483
|
}
|
|
4471
|
-
|
|
4472
|
-
|
|
4473
|
-
|
|
4474
|
-
|
|
4475
|
-
|
|
4476
|
-
|
|
4477
|
-
|
|
4484
|
+
return sharedVerdict(cached, request);
|
|
4485
|
+
}
|
|
4486
|
+
}
|
|
4487
|
+
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
|
|
4488
|
+
const key = getCacheKey(request, mergedConfig.counterpartyId);
|
|
4489
|
+
const pending = inflightVerifies.get(key);
|
|
4490
|
+
if (pending) return sharedVerdict(await pending, request);
|
|
4491
|
+
const flight = verifyViaApi(mergedConfig, request, urls, uncacheable);
|
|
4492
|
+
inflightVerifies.set(key, flight);
|
|
4493
|
+
try {
|
|
4494
|
+
return await flight;
|
|
4495
|
+
} finally {
|
|
4496
|
+
inflightVerifies.delete(key);
|
|
4478
4497
|
}
|
|
4479
4498
|
}
|
|
4499
|
+
return verifyViaApi(mergedConfig, request, urls, uncacheable);
|
|
4500
|
+
}
|
|
4501
|
+
var inflightVerifies = /* @__PURE__ */ new Map();
|
|
4502
|
+
var sharedVerdicts = /* @__PURE__ */ new WeakSet();
|
|
4503
|
+
function sharedVerdict(source, request) {
|
|
4504
|
+
const hit = { ...source };
|
|
4505
|
+
if (request.attemptId) {
|
|
4506
|
+
hit.attemptId = request.attemptId;
|
|
4507
|
+
} else {
|
|
4508
|
+
delete hit.attemptId;
|
|
4509
|
+
}
|
|
4510
|
+
sharedVerdicts.add(hit);
|
|
4511
|
+
return hit;
|
|
4512
|
+
}
|
|
4513
|
+
async function verifyViaApi(mergedConfig, request, urls, uncacheable) {
|
|
4480
4514
|
const enrichedRequest = { ...request };
|
|
4481
4515
|
if (!enrichedRequest.counterpartyUrl && mergedConfig.counterpartyUrl) {
|
|
4482
4516
|
enrichedRequest.counterpartyUrl = mergedConfig.counterpartyUrl;
|
|
@@ -4504,9 +4538,18 @@ async function verify(config, request, options) {
|
|
|
4504
4538
|
if (!apiResponse.access?.allowed) {
|
|
4505
4539
|
const aggregatedFailures = apiResponse.access?.failures;
|
|
4506
4540
|
const idVerifiedFromBackend = apiResponse.verificationContext?.idVerified === true && !aggregatedFailures?.some((f) => REJECTED_IDENTITY_DIMENSIONS.has(f.dimension));
|
|
4541
|
+
const denyAgent = idVerifiedFromBackend && apiResponse.agent ? {
|
|
4542
|
+
astraId: apiResponse.agent.astraId,
|
|
4543
|
+
name: apiResponse.agent.name,
|
|
4544
|
+
trustScore: apiResponse.agent.trustScore,
|
|
4545
|
+
trustLevel: getTrustLevel(apiResponse.agent.trustScore),
|
|
4546
|
+
blockchainAnchored: apiResponse.agent.blockchainStatus === "anchored",
|
|
4547
|
+
status: apiResponse.agent.agentStatus
|
|
4548
|
+
} : void 0;
|
|
4507
4549
|
const result2 = {
|
|
4508
4550
|
identityVerified: idVerifiedFromBackend,
|
|
4509
4551
|
policyAllowed: false,
|
|
4552
|
+
...denyAgent && { agent: denyAgent },
|
|
4510
4553
|
// 3.6.0: the server now emits top-level denialReasons on every deny
|
|
4511
4554
|
// path — prefer it verbatim; the failure-message reconstruction remains
|
|
4512
4555
|
// as the fallback for older backends.
|
|
@@ -4546,7 +4589,9 @@ async function verify(config, request, options) {
|
|
|
4546
4589
|
fulfilment: apiResponse.fulfilment,
|
|
4547
4590
|
mandates: apiResponse.mandates,
|
|
4548
4591
|
kyaToken: apiResponse.kyaToken,
|
|
4549
|
-
aep: apiResponse.aep
|
|
4592
|
+
aep: apiResponse.aep,
|
|
4593
|
+
// 5.20.0 (round 29.1): non-fatal integration warnings (e.g. events_url_missing).
|
|
4594
|
+
warnings: apiResponse.warnings
|
|
4550
4595
|
};
|
|
4551
4596
|
return result2;
|
|
4552
4597
|
}
|
|
@@ -4614,7 +4659,9 @@ async function verify(config, request, options) {
|
|
|
4614
4659
|
// 5.15.0: merchant-lane AP2 mandates + KYAPay identity token.
|
|
4615
4660
|
mandates: apiResponse.mandates,
|
|
4616
4661
|
kyaToken: apiResponse.kyaToken,
|
|
4617
|
-
aep: apiResponse.aep
|
|
4662
|
+
aep: apiResponse.aep,
|
|
4663
|
+
// 5.20.0 (round 29.1): non-fatal integration warnings (e.g. events_url_missing).
|
|
4664
|
+
warnings: apiResponse.warnings
|
|
4618
4665
|
};
|
|
4619
4666
|
if (result.recommendation === "deny") {
|
|
4620
4667
|
result.policyAllowed = false;
|
|
@@ -4640,8 +4687,18 @@ async function verify(config, request, options) {
|
|
|
4640
4687
|
cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
|
|
4641
4688
|
}
|
|
4642
4689
|
}
|
|
4690
|
+
notifyVerificationListeners(request, result);
|
|
4643
4691
|
return result;
|
|
4644
4692
|
}
|
|
4693
|
+
var verificationListeners = /* @__PURE__ */ new Set();
|
|
4694
|
+
function notifyVerificationListeners(request, result) {
|
|
4695
|
+
for (const listener of verificationListeners) {
|
|
4696
|
+
try {
|
|
4697
|
+
listener(result, request);
|
|
4698
|
+
} catch {
|
|
4699
|
+
}
|
|
4700
|
+
}
|
|
4701
|
+
}
|
|
4645
4702
|
|
|
4646
4703
|
// src/adapters/stepup-poll.ts
|
|
4647
4704
|
var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
|
|
@@ -4652,6 +4709,9 @@ var MAX_TOTAL_BYTES = 16 * 1024;
|
|
|
4652
4709
|
// src/adapters/commerce-detect.ts
|
|
4653
4710
|
var MAX_BODY_BYTES = 64 * 1024;
|
|
4654
4711
|
|
|
4712
|
+
// src/adapters/routes-cache.ts
|
|
4713
|
+
var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
|
|
4714
|
+
|
|
4655
4715
|
// src/edge-config.ts
|
|
4656
4716
|
var DEFAULT_EDGE_CONFIG = Object.freeze({
|
|
4657
4717
|
version: 1,
|
|
@@ -4893,9 +4953,6 @@ var BeaconBuffer = class {
|
|
|
4893
4953
|
};
|
|
4894
4954
|
var beaconBuffer = new BeaconBuffer();
|
|
4895
4955
|
|
|
4896
|
-
// src/adapters/express.ts
|
|
4897
|
-
var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
|
|
4898
|
-
|
|
4899
4956
|
// src/adapters/nextjs.ts
|
|
4900
4957
|
var DEFAULT_ROUTES_REFRESH_MS2 = 5 * 60 * 1e3;
|
|
4901
4958
|
|
|
@@ -4989,6 +5046,25 @@ import {
|
|
|
4989
5046
|
// src/idempotency/index.ts
|
|
4990
5047
|
var DEFAULT_IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1e3;
|
|
4991
5048
|
|
|
5049
|
+
// src/ucp/approval-events.ts
|
|
5050
|
+
var MemorySeenEvents = class {
|
|
5051
|
+
constructor(max = 1e4) {
|
|
5052
|
+
this.max = max;
|
|
5053
|
+
this.ids = /* @__PURE__ */ new Set();
|
|
5054
|
+
}
|
|
5055
|
+
async has(eventId) {
|
|
5056
|
+
return this.ids.has(eventId);
|
|
5057
|
+
}
|
|
5058
|
+
async add(eventId) {
|
|
5059
|
+
if (this.ids.size >= this.max) {
|
|
5060
|
+
const first = this.ids.values().next().value;
|
|
5061
|
+
if (first !== void 0) this.ids.delete(first);
|
|
5062
|
+
}
|
|
5063
|
+
this.ids.add(eventId);
|
|
5064
|
+
}
|
|
5065
|
+
};
|
|
5066
|
+
var defaultSeen = new MemorySeenEvents();
|
|
5067
|
+
|
|
4992
5068
|
// src/payments/kyapay.ts
|
|
4993
5069
|
import {
|
|
4994
5070
|
createLocalJWKSet,
|
|
@@ -5033,7 +5109,9 @@ function toDecision(result) {
|
|
|
5033
5109
|
if (result.identityVerified && result.policyAllowed) {
|
|
5034
5110
|
return {
|
|
5035
5111
|
recommendation: "ALLOW",
|
|
5036
|
-
|
|
5112
|
+
// 5.19.0: the score is on `trustScore` for the merchant; `reason` is
|
|
5113
|
+
// text a merchant may relay to the agent, so it never embeds the number.
|
|
5114
|
+
reason: "Verified",
|
|
5037
5115
|
trustScore: result.agent?.trustScore,
|
|
5038
5116
|
sessionId: "sessionId" in result ? result.sessionId : void 0
|
|
5039
5117
|
};
|