@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.js
CHANGED
|
@@ -4036,7 +4036,7 @@ function getTrustLevel(score) {
|
|
|
4036
4036
|
}
|
|
4037
4037
|
|
|
4038
4038
|
// src/version.ts
|
|
4039
|
-
var SDK_VERSION = "5.
|
|
4039
|
+
var SDK_VERSION = "5.20.0";
|
|
4040
4040
|
|
|
4041
4041
|
// src/http.ts
|
|
4042
4042
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -4191,7 +4191,12 @@ function getCacheKey(request, counterpartyId) {
|
|
|
4191
4191
|
// its start_checkout quote was served the cached quote-leg grant (no
|
|
4192
4192
|
// settlementOutcome) and never reached the backend. Same F-A1-07 bug class.
|
|
4193
4193
|
request.commercePhase || "",
|
|
4194
|
-
request.checkoutSessionId || ""
|
|
4194
|
+
request.checkoutSessionId || "",
|
|
4195
|
+
// 5.19.0: a route_config purpose claim is checked server-side against
|
|
4196
|
+
// the stored rule for this method + path, so it changes the verdict.
|
|
4197
|
+
request.purposeSource || "",
|
|
4198
|
+
request.requestMethod || "",
|
|
4199
|
+
request.requestPath || ""
|
|
4195
4200
|
].join("|");
|
|
4196
4201
|
}
|
|
4197
4202
|
function getCachedResult(request, counterpartyId) {
|
|
@@ -4349,6 +4354,9 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4349
4354
|
if (requestData.enableRuntimeChallenge)
|
|
4350
4355
|
body.enableRuntimeChallenge = requestData.enableRuntimeChallenge;
|
|
4351
4356
|
if (requestData.routePolicy) body.routePolicy = requestData.routePolicy;
|
|
4357
|
+
if (config.actingProof?.connectorToken) {
|
|
4358
|
+
body.actingProof = { connectorToken: config.actingProof.connectorToken };
|
|
4359
|
+
}
|
|
4352
4360
|
if (requestData.approvalHeldByRoute) body.approvalHeldByRoute = true;
|
|
4353
4361
|
if (requestData.createSession) body.createSession = requestData.createSession;
|
|
4354
4362
|
if (requestData.durationRequired) body.durationRequired = requestData.durationRequired;
|
|
@@ -4365,6 +4373,11 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4365
4373
|
if (requestData.buyerEmail) body.buyerEmail = requestData.buyerEmail;
|
|
4366
4374
|
if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
|
|
4367
4375
|
if (requestData.attemptId) body.attemptId = requestData.attemptId;
|
|
4376
|
+
if (requestData.purposeSource) body.purposeSource = requestData.purposeSource;
|
|
4377
|
+
if (requestData.agentArtifacts) body.agentArtifacts = requestData.agentArtifacts;
|
|
4378
|
+
if (requestData.metadata) body.metadata = requestData.metadata;
|
|
4379
|
+
if (requestData.requestMethod) body.requestMethod = requestData.requestMethod;
|
|
4380
|
+
if (requestData.requestPath) body.requestPath = requestData.requestPath;
|
|
4368
4381
|
if (requestData.considerationSet) body.considerationSet = requestData.considerationSet;
|
|
4369
4382
|
body.sdkVersion = SDK_VERSION;
|
|
4370
4383
|
if (requestData.callerMetadata || requestData.clientIp || requestData.userAgent) {
|
|
@@ -4511,22 +4524,43 @@ async function verify(config, request, options) {
|
|
|
4511
4524
|
"[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."
|
|
4512
4525
|
);
|
|
4513
4526
|
}
|
|
4514
|
-
const uncacheable = Boolean(request.commerceArtifacts);
|
|
4527
|
+
const uncacheable = Boolean(request.commerceArtifacts) || Boolean(mergedConfig.actingProof);
|
|
4515
4528
|
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
|
|
4516
4529
|
const cached = getCachedResult(request, mergedConfig.counterpartyId);
|
|
4517
4530
|
if (cached) {
|
|
4518
4531
|
if (mergedConfig.debug) {
|
|
4519
4532
|
console.log("[VerificationGateway] Returning cached result");
|
|
4520
4533
|
}
|
|
4521
|
-
|
|
4522
|
-
|
|
4523
|
-
|
|
4524
|
-
|
|
4525
|
-
|
|
4526
|
-
|
|
4527
|
-
|
|
4534
|
+
return sharedVerdict(cached, request);
|
|
4535
|
+
}
|
|
4536
|
+
}
|
|
4537
|
+
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
|
|
4538
|
+
const key = getCacheKey(request, mergedConfig.counterpartyId);
|
|
4539
|
+
const pending = inflightVerifies.get(key);
|
|
4540
|
+
if (pending) return sharedVerdict(await pending, request);
|
|
4541
|
+
const flight = verifyViaApi(mergedConfig, request, urls, uncacheable);
|
|
4542
|
+
inflightVerifies.set(key, flight);
|
|
4543
|
+
try {
|
|
4544
|
+
return await flight;
|
|
4545
|
+
} finally {
|
|
4546
|
+
inflightVerifies.delete(key);
|
|
4528
4547
|
}
|
|
4529
4548
|
}
|
|
4549
|
+
return verifyViaApi(mergedConfig, request, urls, uncacheable);
|
|
4550
|
+
}
|
|
4551
|
+
var inflightVerifies = /* @__PURE__ */ new Map();
|
|
4552
|
+
var sharedVerdicts = /* @__PURE__ */ new WeakSet();
|
|
4553
|
+
function sharedVerdict(source, request) {
|
|
4554
|
+
const hit = { ...source };
|
|
4555
|
+
if (request.attemptId) {
|
|
4556
|
+
hit.attemptId = request.attemptId;
|
|
4557
|
+
} else {
|
|
4558
|
+
delete hit.attemptId;
|
|
4559
|
+
}
|
|
4560
|
+
sharedVerdicts.add(hit);
|
|
4561
|
+
return hit;
|
|
4562
|
+
}
|
|
4563
|
+
async function verifyViaApi(mergedConfig, request, urls, uncacheable) {
|
|
4530
4564
|
const enrichedRequest = { ...request };
|
|
4531
4565
|
if (!enrichedRequest.counterpartyUrl && mergedConfig.counterpartyUrl) {
|
|
4532
4566
|
enrichedRequest.counterpartyUrl = mergedConfig.counterpartyUrl;
|
|
@@ -4554,9 +4588,18 @@ async function verify(config, request, options) {
|
|
|
4554
4588
|
if (!apiResponse.access?.allowed) {
|
|
4555
4589
|
const aggregatedFailures = apiResponse.access?.failures;
|
|
4556
4590
|
const idVerifiedFromBackend = apiResponse.verificationContext?.idVerified === true && !aggregatedFailures?.some((f) => REJECTED_IDENTITY_DIMENSIONS.has(f.dimension));
|
|
4591
|
+
const denyAgent = idVerifiedFromBackend && apiResponse.agent ? {
|
|
4592
|
+
astraId: apiResponse.agent.astraId,
|
|
4593
|
+
name: apiResponse.agent.name,
|
|
4594
|
+
trustScore: apiResponse.agent.trustScore,
|
|
4595
|
+
trustLevel: getTrustLevel(apiResponse.agent.trustScore),
|
|
4596
|
+
blockchainAnchored: apiResponse.agent.blockchainStatus === "anchored",
|
|
4597
|
+
status: apiResponse.agent.agentStatus
|
|
4598
|
+
} : void 0;
|
|
4557
4599
|
const result2 = {
|
|
4558
4600
|
identityVerified: idVerifiedFromBackend,
|
|
4559
4601
|
policyAllowed: false,
|
|
4602
|
+
...denyAgent && { agent: denyAgent },
|
|
4560
4603
|
// 3.6.0: the server now emits top-level denialReasons on every deny
|
|
4561
4604
|
// path — prefer it verbatim; the failure-message reconstruction remains
|
|
4562
4605
|
// as the fallback for older backends.
|
|
@@ -4596,7 +4639,9 @@ async function verify(config, request, options) {
|
|
|
4596
4639
|
fulfilment: apiResponse.fulfilment,
|
|
4597
4640
|
mandates: apiResponse.mandates,
|
|
4598
4641
|
kyaToken: apiResponse.kyaToken,
|
|
4599
|
-
aep: apiResponse.aep
|
|
4642
|
+
aep: apiResponse.aep,
|
|
4643
|
+
// 5.20.0 (round 29.1): non-fatal integration warnings (e.g. events_url_missing).
|
|
4644
|
+
warnings: apiResponse.warnings
|
|
4600
4645
|
};
|
|
4601
4646
|
return result2;
|
|
4602
4647
|
}
|
|
@@ -4664,7 +4709,9 @@ async function verify(config, request, options) {
|
|
|
4664
4709
|
// 5.15.0: merchant-lane AP2 mandates + KYAPay identity token.
|
|
4665
4710
|
mandates: apiResponse.mandates,
|
|
4666
4711
|
kyaToken: apiResponse.kyaToken,
|
|
4667
|
-
aep: apiResponse.aep
|
|
4712
|
+
aep: apiResponse.aep,
|
|
4713
|
+
// 5.20.0 (round 29.1): non-fatal integration warnings (e.g. events_url_missing).
|
|
4714
|
+
warnings: apiResponse.warnings
|
|
4668
4715
|
};
|
|
4669
4716
|
if (result.recommendation === "deny") {
|
|
4670
4717
|
result.policyAllowed = false;
|
|
@@ -4690,8 +4737,18 @@ async function verify(config, request, options) {
|
|
|
4690
4737
|
cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
|
|
4691
4738
|
}
|
|
4692
4739
|
}
|
|
4740
|
+
notifyVerificationListeners(request, result);
|
|
4693
4741
|
return result;
|
|
4694
4742
|
}
|
|
4743
|
+
var verificationListeners = /* @__PURE__ */ new Set();
|
|
4744
|
+
function notifyVerificationListeners(request, result) {
|
|
4745
|
+
for (const listener of verificationListeners) {
|
|
4746
|
+
try {
|
|
4747
|
+
listener(result, request);
|
|
4748
|
+
} catch {
|
|
4749
|
+
}
|
|
4750
|
+
}
|
|
4751
|
+
}
|
|
4695
4752
|
|
|
4696
4753
|
// src/adapters/stepup-poll.ts
|
|
4697
4754
|
var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
|
|
@@ -4702,6 +4759,9 @@ var MAX_TOTAL_BYTES = 16 * 1024;
|
|
|
4702
4759
|
// src/adapters/commerce-detect.ts
|
|
4703
4760
|
var MAX_BODY_BYTES = 64 * 1024;
|
|
4704
4761
|
|
|
4762
|
+
// src/adapters/routes-cache.ts
|
|
4763
|
+
var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
|
|
4764
|
+
|
|
4705
4765
|
// src/edge-config.ts
|
|
4706
4766
|
var DEFAULT_EDGE_CONFIG = Object.freeze({
|
|
4707
4767
|
version: 1,
|
|
@@ -4943,9 +5003,6 @@ var BeaconBuffer = class {
|
|
|
4943
5003
|
};
|
|
4944
5004
|
var beaconBuffer = new BeaconBuffer();
|
|
4945
5005
|
|
|
4946
|
-
// src/adapters/express.ts
|
|
4947
|
-
var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
|
|
4948
|
-
|
|
4949
5006
|
// src/adapters/nextjs.ts
|
|
4950
5007
|
var DEFAULT_ROUTES_REFRESH_MS2 = 5 * 60 * 1e3;
|
|
4951
5008
|
|
|
@@ -5031,6 +5088,25 @@ var import_jose2 = require("jose");
|
|
|
5031
5088
|
// src/idempotency/index.ts
|
|
5032
5089
|
var DEFAULT_IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1e3;
|
|
5033
5090
|
|
|
5091
|
+
// src/ucp/approval-events.ts
|
|
5092
|
+
var MemorySeenEvents = class {
|
|
5093
|
+
constructor(max = 1e4) {
|
|
5094
|
+
this.max = max;
|
|
5095
|
+
this.ids = /* @__PURE__ */ new Set();
|
|
5096
|
+
}
|
|
5097
|
+
async has(eventId) {
|
|
5098
|
+
return this.ids.has(eventId);
|
|
5099
|
+
}
|
|
5100
|
+
async add(eventId) {
|
|
5101
|
+
if (this.ids.size >= this.max) {
|
|
5102
|
+
const first = this.ids.values().next().value;
|
|
5103
|
+
if (first !== void 0) this.ids.delete(first);
|
|
5104
|
+
}
|
|
5105
|
+
this.ids.add(eventId);
|
|
5106
|
+
}
|
|
5107
|
+
};
|
|
5108
|
+
var defaultSeen = new MemorySeenEvents();
|
|
5109
|
+
|
|
5034
5110
|
// src/payments/kyapay.ts
|
|
5035
5111
|
var import_jose4 = require("jose");
|
|
5036
5112
|
|
|
@@ -5070,7 +5146,9 @@ function toDecision(result) {
|
|
|
5070
5146
|
if (result.identityVerified && result.policyAllowed) {
|
|
5071
5147
|
return {
|
|
5072
5148
|
recommendation: "ALLOW",
|
|
5073
|
-
|
|
5149
|
+
// 5.19.0: the score is on `trustScore` for the merchant; `reason` is
|
|
5150
|
+
// text a merchant may relay to the agent, so it never embeds the number.
|
|
5151
|
+
reason: "Verified",
|
|
5074
5152
|
trustScore: result.agent?.trustScore,
|
|
5075
5153
|
sessionId: "sessionId" in result ? result.sessionId : void 0
|
|
5076
5154
|
};
|