@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/cursor/extension.js
CHANGED
|
@@ -3994,7 +3994,7 @@ function getTrustLevel(score) {
|
|
|
3994
3994
|
}
|
|
3995
3995
|
|
|
3996
3996
|
// src/version.ts
|
|
3997
|
-
var SDK_VERSION = "5.
|
|
3997
|
+
var SDK_VERSION = "5.20.0";
|
|
3998
3998
|
|
|
3999
3999
|
// src/http.ts
|
|
4000
4000
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -4149,7 +4149,12 @@ function getCacheKey(request, counterpartyId) {
|
|
|
4149
4149
|
// its start_checkout quote was served the cached quote-leg grant (no
|
|
4150
4150
|
// settlementOutcome) and never reached the backend. Same F-A1-07 bug class.
|
|
4151
4151
|
request.commercePhase || "",
|
|
4152
|
-
request.checkoutSessionId || ""
|
|
4152
|
+
request.checkoutSessionId || "",
|
|
4153
|
+
// 5.19.0: a route_config purpose claim is checked server-side against
|
|
4154
|
+
// the stored rule for this method + path, so it changes the verdict.
|
|
4155
|
+
request.purposeSource || "",
|
|
4156
|
+
request.requestMethod || "",
|
|
4157
|
+
request.requestPath || ""
|
|
4153
4158
|
].join("|");
|
|
4154
4159
|
}
|
|
4155
4160
|
function getCachedResult(request, counterpartyId) {
|
|
@@ -4307,6 +4312,9 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4307
4312
|
if (requestData.enableRuntimeChallenge)
|
|
4308
4313
|
body.enableRuntimeChallenge = requestData.enableRuntimeChallenge;
|
|
4309
4314
|
if (requestData.routePolicy) body.routePolicy = requestData.routePolicy;
|
|
4315
|
+
if (config.actingProof?.connectorToken) {
|
|
4316
|
+
body.actingProof = { connectorToken: config.actingProof.connectorToken };
|
|
4317
|
+
}
|
|
4310
4318
|
if (requestData.approvalHeldByRoute) body.approvalHeldByRoute = true;
|
|
4311
4319
|
if (requestData.createSession) body.createSession = requestData.createSession;
|
|
4312
4320
|
if (requestData.durationRequired) body.durationRequired = requestData.durationRequired;
|
|
@@ -4323,6 +4331,11 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4323
4331
|
if (requestData.buyerEmail) body.buyerEmail = requestData.buyerEmail;
|
|
4324
4332
|
if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
|
|
4325
4333
|
if (requestData.attemptId) body.attemptId = requestData.attemptId;
|
|
4334
|
+
if (requestData.purposeSource) body.purposeSource = requestData.purposeSource;
|
|
4335
|
+
if (requestData.agentArtifacts) body.agentArtifacts = requestData.agentArtifacts;
|
|
4336
|
+
if (requestData.metadata) body.metadata = requestData.metadata;
|
|
4337
|
+
if (requestData.requestMethod) body.requestMethod = requestData.requestMethod;
|
|
4338
|
+
if (requestData.requestPath) body.requestPath = requestData.requestPath;
|
|
4326
4339
|
if (requestData.considerationSet) body.considerationSet = requestData.considerationSet;
|
|
4327
4340
|
body.sdkVersion = SDK_VERSION;
|
|
4328
4341
|
if (requestData.callerMetadata || requestData.clientIp || requestData.userAgent) {
|
|
@@ -4469,22 +4482,43 @@ async function verify(config, request, options) {
|
|
|
4469
4482
|
"[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."
|
|
4470
4483
|
);
|
|
4471
4484
|
}
|
|
4472
|
-
const uncacheable = Boolean(request.commerceArtifacts);
|
|
4485
|
+
const uncacheable = Boolean(request.commerceArtifacts) || Boolean(mergedConfig.actingProof);
|
|
4473
4486
|
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
|
|
4474
4487
|
const cached = getCachedResult(request, mergedConfig.counterpartyId);
|
|
4475
4488
|
if (cached) {
|
|
4476
4489
|
if (mergedConfig.debug) {
|
|
4477
4490
|
console.log("[VerificationGateway] Returning cached result");
|
|
4478
4491
|
}
|
|
4479
|
-
|
|
4480
|
-
|
|
4481
|
-
|
|
4482
|
-
|
|
4483
|
-
|
|
4484
|
-
|
|
4485
|
-
|
|
4492
|
+
return sharedVerdict(cached, request);
|
|
4493
|
+
}
|
|
4494
|
+
}
|
|
4495
|
+
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
|
|
4496
|
+
const key = getCacheKey(request, mergedConfig.counterpartyId);
|
|
4497
|
+
const pending = inflightVerifies.get(key);
|
|
4498
|
+
if (pending) return sharedVerdict(await pending, request);
|
|
4499
|
+
const flight = verifyViaApi(mergedConfig, request, urls, uncacheable);
|
|
4500
|
+
inflightVerifies.set(key, flight);
|
|
4501
|
+
try {
|
|
4502
|
+
return await flight;
|
|
4503
|
+
} finally {
|
|
4504
|
+
inflightVerifies.delete(key);
|
|
4486
4505
|
}
|
|
4487
4506
|
}
|
|
4507
|
+
return verifyViaApi(mergedConfig, request, urls, uncacheable);
|
|
4508
|
+
}
|
|
4509
|
+
var inflightVerifies = /* @__PURE__ */ new Map();
|
|
4510
|
+
var sharedVerdicts = /* @__PURE__ */ new WeakSet();
|
|
4511
|
+
function sharedVerdict(source, request) {
|
|
4512
|
+
const hit = { ...source };
|
|
4513
|
+
if (request.attemptId) {
|
|
4514
|
+
hit.attemptId = request.attemptId;
|
|
4515
|
+
} else {
|
|
4516
|
+
delete hit.attemptId;
|
|
4517
|
+
}
|
|
4518
|
+
sharedVerdicts.add(hit);
|
|
4519
|
+
return hit;
|
|
4520
|
+
}
|
|
4521
|
+
async function verifyViaApi(mergedConfig, request, urls, uncacheable) {
|
|
4488
4522
|
const enrichedRequest = { ...request };
|
|
4489
4523
|
if (!enrichedRequest.counterpartyUrl && mergedConfig.counterpartyUrl) {
|
|
4490
4524
|
enrichedRequest.counterpartyUrl = mergedConfig.counterpartyUrl;
|
|
@@ -4512,9 +4546,18 @@ async function verify(config, request, options) {
|
|
|
4512
4546
|
if (!apiResponse.access?.allowed) {
|
|
4513
4547
|
const aggregatedFailures = apiResponse.access?.failures;
|
|
4514
4548
|
const idVerifiedFromBackend = apiResponse.verificationContext?.idVerified === true && !aggregatedFailures?.some((f) => REJECTED_IDENTITY_DIMENSIONS.has(f.dimension));
|
|
4549
|
+
const denyAgent = idVerifiedFromBackend && apiResponse.agent ? {
|
|
4550
|
+
astraId: apiResponse.agent.astraId,
|
|
4551
|
+
name: apiResponse.agent.name,
|
|
4552
|
+
trustScore: apiResponse.agent.trustScore,
|
|
4553
|
+
trustLevel: getTrustLevel(apiResponse.agent.trustScore),
|
|
4554
|
+
blockchainAnchored: apiResponse.agent.blockchainStatus === "anchored",
|
|
4555
|
+
status: apiResponse.agent.agentStatus
|
|
4556
|
+
} : void 0;
|
|
4515
4557
|
const result2 = {
|
|
4516
4558
|
identityVerified: idVerifiedFromBackend,
|
|
4517
4559
|
policyAllowed: false,
|
|
4560
|
+
...denyAgent && { agent: denyAgent },
|
|
4518
4561
|
// 3.6.0: the server now emits top-level denialReasons on every deny
|
|
4519
4562
|
// path — prefer it verbatim; the failure-message reconstruction remains
|
|
4520
4563
|
// as the fallback for older backends.
|
|
@@ -4554,7 +4597,9 @@ async function verify(config, request, options) {
|
|
|
4554
4597
|
fulfilment: apiResponse.fulfilment,
|
|
4555
4598
|
mandates: apiResponse.mandates,
|
|
4556
4599
|
kyaToken: apiResponse.kyaToken,
|
|
4557
|
-
aep: apiResponse.aep
|
|
4600
|
+
aep: apiResponse.aep,
|
|
4601
|
+
// 5.20.0 (round 29.1): non-fatal integration warnings (e.g. events_url_missing).
|
|
4602
|
+
warnings: apiResponse.warnings
|
|
4558
4603
|
};
|
|
4559
4604
|
return result2;
|
|
4560
4605
|
}
|
|
@@ -4622,7 +4667,9 @@ async function verify(config, request, options) {
|
|
|
4622
4667
|
// 5.15.0: merchant-lane AP2 mandates + KYAPay identity token.
|
|
4623
4668
|
mandates: apiResponse.mandates,
|
|
4624
4669
|
kyaToken: apiResponse.kyaToken,
|
|
4625
|
-
aep: apiResponse.aep
|
|
4670
|
+
aep: apiResponse.aep,
|
|
4671
|
+
// 5.20.0 (round 29.1): non-fatal integration warnings (e.g. events_url_missing).
|
|
4672
|
+
warnings: apiResponse.warnings
|
|
4626
4673
|
};
|
|
4627
4674
|
if (result.recommendation === "deny") {
|
|
4628
4675
|
result.policyAllowed = false;
|
|
@@ -4648,8 +4695,18 @@ async function verify(config, request, options) {
|
|
|
4648
4695
|
cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
|
|
4649
4696
|
}
|
|
4650
4697
|
}
|
|
4698
|
+
notifyVerificationListeners(request, result);
|
|
4651
4699
|
return result;
|
|
4652
4700
|
}
|
|
4701
|
+
var verificationListeners = /* @__PURE__ */ new Set();
|
|
4702
|
+
function notifyVerificationListeners(request, result) {
|
|
4703
|
+
for (const listener of verificationListeners) {
|
|
4704
|
+
try {
|
|
4705
|
+
listener(result, request);
|
|
4706
|
+
} catch {
|
|
4707
|
+
}
|
|
4708
|
+
}
|
|
4709
|
+
}
|
|
4653
4710
|
|
|
4654
4711
|
// src/adapters/stepup-poll.ts
|
|
4655
4712
|
var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
|
|
@@ -4660,6 +4717,9 @@ var MAX_TOTAL_BYTES = 16 * 1024;
|
|
|
4660
4717
|
// src/adapters/commerce-detect.ts
|
|
4661
4718
|
var MAX_BODY_BYTES = 64 * 1024;
|
|
4662
4719
|
|
|
4720
|
+
// src/adapters/routes-cache.ts
|
|
4721
|
+
var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
|
|
4722
|
+
|
|
4663
4723
|
// src/edge-config.ts
|
|
4664
4724
|
var DEFAULT_EDGE_CONFIG = Object.freeze({
|
|
4665
4725
|
version: 1,
|
|
@@ -4901,9 +4961,6 @@ var BeaconBuffer = class {
|
|
|
4901
4961
|
};
|
|
4902
4962
|
var beaconBuffer = new BeaconBuffer();
|
|
4903
4963
|
|
|
4904
|
-
// src/adapters/express.ts
|
|
4905
|
-
var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
|
|
4906
|
-
|
|
4907
4964
|
// src/adapters/nextjs.ts
|
|
4908
4965
|
var DEFAULT_ROUTES_REFRESH_MS2 = 5 * 60 * 1e3;
|
|
4909
4966
|
|
|
@@ -4989,6 +5046,25 @@ var import_jose2 = require("jose");
|
|
|
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
|
var import_jose4 = require("jose");
|
|
4994
5070
|
|
|
@@ -5028,7 +5104,9 @@ function toDecision(result) {
|
|
|
5028
5104
|
if (result.identityVerified && result.policyAllowed) {
|
|
5029
5105
|
return {
|
|
5030
5106
|
recommendation: "ALLOW",
|
|
5031
|
-
|
|
5107
|
+
// 5.19.0: the score is on `trustScore` for the merchant; `reason` is
|
|
5108
|
+
// text a merchant may relay to the agent, so it never embeds the number.
|
|
5109
|
+
reason: "Verified",
|
|
5032
5110
|
trustScore: result.agent?.trustScore,
|
|
5033
5111
|
sessionId: "sessionId" in result ? result.sessionId : void 0
|
|
5034
5112
|
};
|