@astrasyncai/verification-gateway 5.16.0 → 5.17.1
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/README.md +94 -18
- package/dist/adapters/express.d.mts +1 -1
- package/dist/adapters/express.d.ts +1 -1
- package/dist/adapters/express.js +33 -5
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +33 -5
- package/dist/adapters/express.mjs.map +1 -1
- package/dist/adapters/mcp.d.mts +1 -1
- package/dist/adapters/mcp.d.ts +1 -1
- package/dist/adapters/mcp.js +24 -5
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +24 -5
- 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 +24 -5
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +24 -5
- package/dist/adapters/nextjs.mjs.map +1 -1
- package/dist/adapters/sdk.d.mts +1 -1
- package/dist/adapters/sdk.d.ts +1 -1
- package/dist/adapters/sdk.js +5 -1
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +5 -1
- package/dist/adapters/sdk.mjs.map +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 +5 -1
- package/dist/bin/astrasync-codex-hook.js +5 -1
- package/dist/bin/astrasync-guard.js +447 -25
- package/dist/bin/astrasync.js +470 -28
- package/dist/browser/background.js +5 -1
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +5 -1
- 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 +5 -1
- package/dist/codex/index.js.map +1 -1
- package/dist/codex/index.mjs +5 -1
- package/dist/codex/index.mjs.map +1 -1
- package/dist/cursor/extension.js +5 -1
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +5 -1
- 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 +5 -1
- package/dist/edge-core/index.js.map +1 -1
- package/dist/edge-core/index.mjs +5 -1
- package/dist/edge-core/index.mjs.map +1 -1
- package/dist/gateway/gateway.js +5 -1
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +5 -1
- 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 +16 -2
- package/dist/index.d.ts +16 -2
- package/dist/index.js +33 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +33 -5
- package/dist/index.mjs.map +1 -1
- 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.js +1 -1
- package/dist/transport/index.js.map +1 -1
- package/dist/transport/index.mjs +1 -1
- package/dist/transport/index.mjs.map +1 -1
- package/dist/{types-Bm1QvGqI.d.ts → types-DA8LzAOB.d.ts} +6 -0
- package/dist/{types-Blz520bR.d.mts → types-DRb_plOh.d.mts} +14 -0
- package/dist/{types-Blz520bR.d.ts → types-DRb_plOh.d.ts} +14 -0
- package/dist/{types-DBe4hgfT.d.mts → types-vNBvYD7Z.d.mts} +6 -0
- package/dist/ui/index.d.mts +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/dist/verify.d.mts +1 -1
- package/dist/verify.d.ts +1 -1
- package/dist/verify.js +5 -1
- package/dist/verify.js.map +1 -1
- package/dist/verify.mjs +5 -1
- package/dist/verify.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -30,7 +30,7 @@ function getTrustLevel(score) {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
// src/version.ts
|
|
33
|
-
var SDK_VERSION = "5.
|
|
33
|
+
var SDK_VERSION = "5.17.1";
|
|
34
34
|
|
|
35
35
|
// src/http.ts
|
|
36
36
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -266,6 +266,7 @@ function getCacheKey(request, counterpartyId) {
|
|
|
266
266
|
request.enableRuntimeChallenge ? "1" : "0",
|
|
267
267
|
// 5.16.0: route policy changes the verdict (owners / challenge).
|
|
268
268
|
request.routePolicy ? JSON.stringify(request.routePolicy) : "",
|
|
269
|
+
request.approvalHeldByRoute ? "1" : "0",
|
|
269
270
|
// callerMetadata fields contribute to risk model; include the ones
|
|
270
271
|
// backend reads. sourceIp/userAgent/forwardedFor change per-request
|
|
271
272
|
// so their inclusion effectively forces a re-check for any varying
|
|
@@ -479,6 +480,7 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
479
480
|
if (requestData.enableRuntimeChallenge)
|
|
480
481
|
body.enableRuntimeChallenge = requestData.enableRuntimeChallenge;
|
|
481
482
|
if (requestData.routePolicy) body.routePolicy = requestData.routePolicy;
|
|
483
|
+
if (requestData.approvalHeldByRoute) body.approvalHeldByRoute = true;
|
|
482
484
|
if (requestData.createSession) body.createSession = requestData.createSession;
|
|
483
485
|
if (requestData.durationRequired) body.durationRequired = requestData.durationRequired;
|
|
484
486
|
if (requestData.counterpartyType) body.counterpartyType = requestData.counterpartyType;
|
|
@@ -810,6 +812,8 @@ async function verify(config, request, options) {
|
|
|
810
812
|
} else if (result.recommendation === "step_up_required" && result.identityVerified) {
|
|
811
813
|
result.requiresStepUp = true;
|
|
812
814
|
result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Step-up verification required"];
|
|
815
|
+
const stepUpFailures = apiResponse.access?.failures;
|
|
816
|
+
if (stepUpFailures?.length) result.failures = stepUpFailures;
|
|
813
817
|
}
|
|
814
818
|
const escalates = result.requiresStepUp === true || result.requiresApproval === true || result.recommendation === "step_up_required";
|
|
815
819
|
if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny" && !escalates) {
|
|
@@ -1009,12 +1013,31 @@ function requiresHumanApproval(result) {
|
|
|
1009
1013
|
return result.requiresStepUp === true || result.requiresApproval === true;
|
|
1010
1014
|
}
|
|
1011
1015
|
function annotateApprovalRequired(result) {
|
|
1012
|
-
result
|
|
1013
|
-
...result.
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
+
if (isDimensionApproval(result)) {
|
|
1017
|
+
result.denialReasons = [DIMENSION_APPROVAL_REASON, ...result.denialReasons ?? []];
|
|
1018
|
+
return;
|
|
1019
|
+
}
|
|
1020
|
+
const named = (result.failures ?? []).some(
|
|
1021
|
+
(f) => f.dimension === "commerce.intent.approval_required"
|
|
1022
|
+
);
|
|
1023
|
+
if (!named) {
|
|
1024
|
+
result.failures = [
|
|
1025
|
+
...result.failures ?? [],
|
|
1026
|
+
{ dimension: "commerce.intent.approval_required", message: APPROVAL_REASON }
|
|
1027
|
+
];
|
|
1028
|
+
}
|
|
1016
1029
|
result.denialReasons = [APPROVAL_REASON, ...result.denialReasons ?? []];
|
|
1017
1030
|
}
|
|
1031
|
+
var DIMENSION_APPROVAL_REASON = "The agent's owner asked to approve this kind of request. The owner can approve or deny it in the AstraSync dashboard.";
|
|
1032
|
+
var DIMENSION_APPROVAL = /^pdlss\.[a-z_]+\.approval_required$/;
|
|
1033
|
+
function isDimensionApproval(result) {
|
|
1034
|
+
const f = result.failures ?? [];
|
|
1035
|
+
return f.some((x) => DIMENSION_APPROVAL.test(x.dimension)) && !f.some((x) => x.dimension === "commerce.intent.approval_required");
|
|
1036
|
+
}
|
|
1037
|
+
function onlyNeedsApproval(result) {
|
|
1038
|
+
if (!result.policyAllowed || !requiresHumanApproval(result)) return false;
|
|
1039
|
+
return (result.failures ?? []).every((f) => /\.approval_required$/.test(f.dimension));
|
|
1040
|
+
}
|
|
1018
1041
|
|
|
1019
1042
|
// src/settlement.ts
|
|
1020
1043
|
async function authorizeSettlement(config, req) {
|
|
@@ -2690,6 +2713,7 @@ function createMiddleware(options) {
|
|
|
2690
2713
|
const attemptHeader = req.headers["x-astra-attempt-id"];
|
|
2691
2714
|
const inboundAttemptId = typeof attemptHeader === "string" && /^att_[0-9a-f]{32}$/.test(attemptHeader) ? attemptHeader : void 0;
|
|
2692
2715
|
const commerceArtifacts = detectExpressCommerce(req);
|
|
2716
|
+
const heldByRoute = options.approvalHeldByRoute?.(req) === true;
|
|
2693
2717
|
const verificationRequest = {
|
|
2694
2718
|
credentials,
|
|
2695
2719
|
...commerceArtifacts && { commerceArtifacts },
|
|
@@ -2701,6 +2725,7 @@ function createMiddleware(options) {
|
|
|
2701
2725
|
counterpartyType: config.counterpartyType || "api",
|
|
2702
2726
|
enableRuntimeChallenge,
|
|
2703
2727
|
...routePolicyOf(routeConfig) && { routePolicy: routePolicyOf(routeConfig) },
|
|
2728
|
+
...heldByRoute && { approvalHeldByRoute: true },
|
|
2704
2729
|
durationRequired: astraCreds?.pdlss?.duration?.maxSessionDuration,
|
|
2705
2730
|
...txValue !== void 0 && { transactionValue: txValue },
|
|
2706
2731
|
...txCurrency && { currency: txCurrency },
|
|
@@ -2757,6 +2782,9 @@ function createMiddleware(options) {
|
|
|
2757
2782
|
onDenied(result, req, res);
|
|
2758
2783
|
return;
|
|
2759
2784
|
}
|
|
2785
|
+
if (heldByRoute && !result.stepUpApproval && onlyNeedsApproval(result)) {
|
|
2786
|
+
return next();
|
|
2787
|
+
}
|
|
2760
2788
|
if (requiresHumanApproval(result)) {
|
|
2761
2789
|
annotateApprovalRequired(result);
|
|
2762
2790
|
if (shouldRecordDecisions && sessionId) {
|