@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
|
@@ -3969,7 +3969,7 @@ function getTrustLevel(score) {
|
|
|
3969
3969
|
}
|
|
3970
3970
|
|
|
3971
3971
|
// src/version.ts
|
|
3972
|
-
var SDK_VERSION = "5.
|
|
3972
|
+
var SDK_VERSION = "5.20.0";
|
|
3973
3973
|
|
|
3974
3974
|
// src/http.ts
|
|
3975
3975
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -4124,7 +4124,12 @@ function getCacheKey(request, counterpartyId) {
|
|
|
4124
4124
|
// its start_checkout quote was served the cached quote-leg grant (no
|
|
4125
4125
|
// settlementOutcome) and never reached the backend. Same F-A1-07 bug class.
|
|
4126
4126
|
request.commercePhase || "",
|
|
4127
|
-
request.checkoutSessionId || ""
|
|
4127
|
+
request.checkoutSessionId || "",
|
|
4128
|
+
// 5.19.0: a route_config purpose claim is checked server-side against
|
|
4129
|
+
// the stored rule for this method + path, so it changes the verdict.
|
|
4130
|
+
request.purposeSource || "",
|
|
4131
|
+
request.requestMethod || "",
|
|
4132
|
+
request.requestPath || ""
|
|
4128
4133
|
].join("|");
|
|
4129
4134
|
}
|
|
4130
4135
|
function getCachedResult(request, counterpartyId) {
|
|
@@ -4282,6 +4287,9 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4282
4287
|
if (requestData.enableRuntimeChallenge)
|
|
4283
4288
|
body.enableRuntimeChallenge = requestData.enableRuntimeChallenge;
|
|
4284
4289
|
if (requestData.routePolicy) body.routePolicy = requestData.routePolicy;
|
|
4290
|
+
if (config.actingProof?.connectorToken) {
|
|
4291
|
+
body.actingProof = { connectorToken: config.actingProof.connectorToken };
|
|
4292
|
+
}
|
|
4285
4293
|
if (requestData.approvalHeldByRoute) body.approvalHeldByRoute = true;
|
|
4286
4294
|
if (requestData.createSession) body.createSession = requestData.createSession;
|
|
4287
4295
|
if (requestData.durationRequired) body.durationRequired = requestData.durationRequired;
|
|
@@ -4298,6 +4306,11 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4298
4306
|
if (requestData.buyerEmail) body.buyerEmail = requestData.buyerEmail;
|
|
4299
4307
|
if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
|
|
4300
4308
|
if (requestData.attemptId) body.attemptId = requestData.attemptId;
|
|
4309
|
+
if (requestData.purposeSource) body.purposeSource = requestData.purposeSource;
|
|
4310
|
+
if (requestData.agentArtifacts) body.agentArtifacts = requestData.agentArtifacts;
|
|
4311
|
+
if (requestData.metadata) body.metadata = requestData.metadata;
|
|
4312
|
+
if (requestData.requestMethod) body.requestMethod = requestData.requestMethod;
|
|
4313
|
+
if (requestData.requestPath) body.requestPath = requestData.requestPath;
|
|
4301
4314
|
if (requestData.considerationSet) body.considerationSet = requestData.considerationSet;
|
|
4302
4315
|
body.sdkVersion = SDK_VERSION;
|
|
4303
4316
|
if (requestData.callerMetadata || requestData.clientIp || requestData.userAgent) {
|
|
@@ -4444,22 +4457,43 @@ async function verify(config, request, options) {
|
|
|
4444
4457
|
"[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."
|
|
4445
4458
|
);
|
|
4446
4459
|
}
|
|
4447
|
-
const uncacheable = Boolean(request.commerceArtifacts);
|
|
4460
|
+
const uncacheable = Boolean(request.commerceArtifacts) || Boolean(mergedConfig.actingProof);
|
|
4448
4461
|
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
|
|
4449
4462
|
const cached = getCachedResult(request, mergedConfig.counterpartyId);
|
|
4450
4463
|
if (cached) {
|
|
4451
4464
|
if (mergedConfig.debug) {
|
|
4452
4465
|
console.log("[VerificationGateway] Returning cached result");
|
|
4453
4466
|
}
|
|
4454
|
-
|
|
4455
|
-
|
|
4456
|
-
|
|
4457
|
-
|
|
4458
|
-
|
|
4459
|
-
|
|
4460
|
-
|
|
4467
|
+
return sharedVerdict(cached, request);
|
|
4468
|
+
}
|
|
4469
|
+
}
|
|
4470
|
+
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
|
|
4471
|
+
const key = getCacheKey(request, mergedConfig.counterpartyId);
|
|
4472
|
+
const pending = inflightVerifies.get(key);
|
|
4473
|
+
if (pending) return sharedVerdict(await pending, request);
|
|
4474
|
+
const flight = verifyViaApi(mergedConfig, request, urls, uncacheable);
|
|
4475
|
+
inflightVerifies.set(key, flight);
|
|
4476
|
+
try {
|
|
4477
|
+
return await flight;
|
|
4478
|
+
} finally {
|
|
4479
|
+
inflightVerifies.delete(key);
|
|
4461
4480
|
}
|
|
4462
4481
|
}
|
|
4482
|
+
return verifyViaApi(mergedConfig, request, urls, uncacheable);
|
|
4483
|
+
}
|
|
4484
|
+
var inflightVerifies = /* @__PURE__ */ new Map();
|
|
4485
|
+
var sharedVerdicts = /* @__PURE__ */ new WeakSet();
|
|
4486
|
+
function sharedVerdict(source, request) {
|
|
4487
|
+
const hit = { ...source };
|
|
4488
|
+
if (request.attemptId) {
|
|
4489
|
+
hit.attemptId = request.attemptId;
|
|
4490
|
+
} else {
|
|
4491
|
+
delete hit.attemptId;
|
|
4492
|
+
}
|
|
4493
|
+
sharedVerdicts.add(hit);
|
|
4494
|
+
return hit;
|
|
4495
|
+
}
|
|
4496
|
+
async function verifyViaApi(mergedConfig, request, urls, uncacheable) {
|
|
4463
4497
|
const enrichedRequest = { ...request };
|
|
4464
4498
|
if (!enrichedRequest.counterpartyUrl && mergedConfig.counterpartyUrl) {
|
|
4465
4499
|
enrichedRequest.counterpartyUrl = mergedConfig.counterpartyUrl;
|
|
@@ -4487,9 +4521,18 @@ async function verify(config, request, options) {
|
|
|
4487
4521
|
if (!apiResponse.access?.allowed) {
|
|
4488
4522
|
const aggregatedFailures = apiResponse.access?.failures;
|
|
4489
4523
|
const idVerifiedFromBackend = apiResponse.verificationContext?.idVerified === true && !aggregatedFailures?.some((f) => REJECTED_IDENTITY_DIMENSIONS.has(f.dimension));
|
|
4524
|
+
const denyAgent = idVerifiedFromBackend && apiResponse.agent ? {
|
|
4525
|
+
astraId: apiResponse.agent.astraId,
|
|
4526
|
+
name: apiResponse.agent.name,
|
|
4527
|
+
trustScore: apiResponse.agent.trustScore,
|
|
4528
|
+
trustLevel: getTrustLevel(apiResponse.agent.trustScore),
|
|
4529
|
+
blockchainAnchored: apiResponse.agent.blockchainStatus === "anchored",
|
|
4530
|
+
status: apiResponse.agent.agentStatus
|
|
4531
|
+
} : void 0;
|
|
4490
4532
|
const result2 = {
|
|
4491
4533
|
identityVerified: idVerifiedFromBackend,
|
|
4492
4534
|
policyAllowed: false,
|
|
4535
|
+
...denyAgent && { agent: denyAgent },
|
|
4493
4536
|
// 3.6.0: the server now emits top-level denialReasons on every deny
|
|
4494
4537
|
// path — prefer it verbatim; the failure-message reconstruction remains
|
|
4495
4538
|
// as the fallback for older backends.
|
|
@@ -4529,7 +4572,9 @@ async function verify(config, request, options) {
|
|
|
4529
4572
|
fulfilment: apiResponse.fulfilment,
|
|
4530
4573
|
mandates: apiResponse.mandates,
|
|
4531
4574
|
kyaToken: apiResponse.kyaToken,
|
|
4532
|
-
aep: apiResponse.aep
|
|
4575
|
+
aep: apiResponse.aep,
|
|
4576
|
+
// 5.20.0 (round 29.1): non-fatal integration warnings (e.g. events_url_missing).
|
|
4577
|
+
warnings: apiResponse.warnings
|
|
4533
4578
|
};
|
|
4534
4579
|
return result2;
|
|
4535
4580
|
}
|
|
@@ -4597,7 +4642,9 @@ async function verify(config, request, options) {
|
|
|
4597
4642
|
// 5.15.0: merchant-lane AP2 mandates + KYAPay identity token.
|
|
4598
4643
|
mandates: apiResponse.mandates,
|
|
4599
4644
|
kyaToken: apiResponse.kyaToken,
|
|
4600
|
-
aep: apiResponse.aep
|
|
4645
|
+
aep: apiResponse.aep,
|
|
4646
|
+
// 5.20.0 (round 29.1): non-fatal integration warnings (e.g. events_url_missing).
|
|
4647
|
+
warnings: apiResponse.warnings
|
|
4601
4648
|
};
|
|
4602
4649
|
if (result.recommendation === "deny") {
|
|
4603
4650
|
result.policyAllowed = false;
|
|
@@ -4623,8 +4670,18 @@ async function verify(config, request, options) {
|
|
|
4623
4670
|
cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
|
|
4624
4671
|
}
|
|
4625
4672
|
}
|
|
4673
|
+
notifyVerificationListeners(request, result);
|
|
4626
4674
|
return result;
|
|
4627
4675
|
}
|
|
4676
|
+
var verificationListeners = /* @__PURE__ */ new Set();
|
|
4677
|
+
function notifyVerificationListeners(request, result) {
|
|
4678
|
+
for (const listener of verificationListeners) {
|
|
4679
|
+
try {
|
|
4680
|
+
listener(result, request);
|
|
4681
|
+
} catch {
|
|
4682
|
+
}
|
|
4683
|
+
}
|
|
4684
|
+
}
|
|
4628
4685
|
|
|
4629
4686
|
// src/adapters/stepup-poll.ts
|
|
4630
4687
|
var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
|
|
@@ -4635,6 +4692,9 @@ var MAX_TOTAL_BYTES = 16 * 1024;
|
|
|
4635
4692
|
// src/adapters/commerce-detect.ts
|
|
4636
4693
|
var MAX_BODY_BYTES = 64 * 1024;
|
|
4637
4694
|
|
|
4695
|
+
// src/adapters/routes-cache.ts
|
|
4696
|
+
var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
|
|
4697
|
+
|
|
4638
4698
|
// src/edge-config.ts
|
|
4639
4699
|
var DEFAULT_EDGE_CONFIG = Object.freeze({
|
|
4640
4700
|
version: 1,
|
|
@@ -4876,9 +4936,6 @@ var BeaconBuffer = class {
|
|
|
4876
4936
|
};
|
|
4877
4937
|
var beaconBuffer = new BeaconBuffer();
|
|
4878
4938
|
|
|
4879
|
-
// src/adapters/express.ts
|
|
4880
|
-
var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
|
|
4881
|
-
|
|
4882
4939
|
// src/adapters/nextjs.ts
|
|
4883
4940
|
var DEFAULT_ROUTES_REFRESH_MS2 = 5 * 60 * 1e3;
|
|
4884
4941
|
|
|
@@ -4972,6 +5029,25 @@ import {
|
|
|
4972
5029
|
// src/idempotency/index.ts
|
|
4973
5030
|
var DEFAULT_IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1e3;
|
|
4974
5031
|
|
|
5032
|
+
// src/ucp/approval-events.ts
|
|
5033
|
+
var MemorySeenEvents = class {
|
|
5034
|
+
constructor(max = 1e4) {
|
|
5035
|
+
this.max = max;
|
|
5036
|
+
this.ids = /* @__PURE__ */ new Set();
|
|
5037
|
+
}
|
|
5038
|
+
async has(eventId) {
|
|
5039
|
+
return this.ids.has(eventId);
|
|
5040
|
+
}
|
|
5041
|
+
async add(eventId) {
|
|
5042
|
+
if (this.ids.size >= this.max) {
|
|
5043
|
+
const first = this.ids.values().next().value;
|
|
5044
|
+
if (first !== void 0) this.ids.delete(first);
|
|
5045
|
+
}
|
|
5046
|
+
this.ids.add(eventId);
|
|
5047
|
+
}
|
|
5048
|
+
};
|
|
5049
|
+
var defaultSeen = new MemorySeenEvents();
|
|
5050
|
+
|
|
4975
5051
|
// src/payments/kyapay.ts
|
|
4976
5052
|
import {
|
|
4977
5053
|
createLocalJWKSet,
|
|
@@ -5016,7 +5092,9 @@ function toDecision(result) {
|
|
|
5016
5092
|
if (result.identityVerified && result.policyAllowed) {
|
|
5017
5093
|
return {
|
|
5018
5094
|
recommendation: "ALLOW",
|
|
5019
|
-
|
|
5095
|
+
// 5.19.0: the score is on `trustScore` for the merchant; `reason` is
|
|
5096
|
+
// text a merchant may relay to the agent, so it never embeds the number.
|
|
5097
|
+
reason: "Verified",
|
|
5020
5098
|
trustScore: result.agent?.trustScore,
|
|
5021
5099
|
sessionId: "sessionId" in result ? result.sessionId : void 0
|
|
5022
5100
|
};
|