@astrasyncai/verification-gateway 4.5.0 → 4.6.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/README.md +1 -1
- package/dist/adapter-interface/interface.d.mts +2 -2
- package/dist/adapter-interface/interface.d.ts +2 -2
- package/dist/adapters/express.d.mts +2 -2
- package/dist/adapters/express.d.ts +2 -2
- package/dist/adapters/express.js +6 -1
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +6 -1
- package/dist/adapters/express.mjs.map +1 -1
- package/dist/adapters/mcp.d.mts +3 -394
- package/dist/adapters/mcp.d.ts +3 -394
- package/dist/adapters/mcp.js +6 -1
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +6 -1
- package/dist/adapters/mcp.mjs.map +1 -1
- package/dist/adapters/nextjs.d.mts +2 -2
- package/dist/adapters/nextjs.d.ts +2 -2
- package/dist/adapters/nextjs.js +6 -1
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +6 -1
- package/dist/adapters/nextjs.mjs.map +1 -1
- package/dist/adapters/sdk.d.mts +2 -2
- package/dist/adapters/sdk.d.ts +2 -2
- package/dist/adapters/sdk.js +6 -1
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +6 -1
- package/dist/adapters/sdk.mjs.map +1 -1
- package/dist/agent/index.d.mts +2 -2
- package/dist/agent/index.d.ts +2 -2
- 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 +60 -13
- package/dist/bin/astrasync-codex-hook.js +60 -13
- package/dist/bin/astrasync-guard.js +60 -13
- package/dist/bin/astrasync.js +68 -15
- package/dist/browser/background.js +60 -13
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +60 -13
- package/dist/browser/background.mjs.map +1 -1
- package/dist/browser/browser-adapter.d.mts +2 -2
- package/dist/browser/browser-adapter.d.ts +2 -2
- package/dist/claude-code/claude-code-adapter.d.mts +2 -2
- package/dist/claude-code/claude-code-adapter.d.ts +2 -2
- package/dist/cli/index.d.mts +2 -2
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.js +33 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +33 -6
- package/dist/cli/index.mjs.map +1 -1
- package/dist/codex/index.d.mts +2 -2
- package/dist/codex/index.d.ts +2 -2
- package/dist/codex/index.js +60 -13
- package/dist/codex/index.js.map +1 -1
- package/dist/codex/index.mjs +60 -13
- package/dist/codex/index.mjs.map +1 -1
- package/dist/cursor/cursor-adapter.d.mts +2 -2
- package/dist/cursor/cursor-adapter.d.ts +2 -2
- package/dist/cursor/extension.d.mts +2 -2
- package/dist/cursor/extension.d.ts +2 -2
- package/dist/cursor/extension.js +60 -13
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +60 -13
- 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 +6 -1
- package/dist/edge-core/index.js.map +1 -1
- package/dist/edge-core/index.mjs +6 -1
- package/dist/edge-core/index.mjs.map +1 -1
- package/dist/{express-DaqL11tx.d.ts → express-D-8Ks2Uo.d.ts} +1 -1
- package/dist/{express-CR6F3njD.d.mts → express-DBtPKXOL.d.mts} +1 -1
- package/dist/gateway/gateway.d.mts +2 -2
- package/dist/gateway/gateway.d.ts +2 -2
- package/dist/gateway/gateway.js +60 -13
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +60 -13
- package/dist/gateway/gateway.mjs.map +1 -1
- package/dist/git-trigger/git-hooks.d.mts +2 -2
- package/dist/git-trigger/git-hooks.d.ts +2 -2
- package/dist/{index-BfIxCYIZ.d.ts → index-BND3kQev.d.ts} +1 -2
- package/dist/{index-CwAh7Tln.d.mts → index-CUfmJ1Dq.d.mts} +1 -2
- package/dist/{index-B5Ts1WtM.d.ts → index-DlZORQsb.d.ts} +1 -1
- package/dist/{index-Cub7lK-T.d.mts → index-kGCGWd5x.d.mts} +1 -1
- package/dist/index.d.mts +10 -10
- package/dist/index.d.ts +10 -10
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +12 -1
- 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/local-evaluator/evaluator.js +22 -7
- package/dist/local-evaluator/evaluator.js.map +1 -1
- package/dist/local-evaluator/evaluator.mjs +22 -7
- package/dist/local-evaluator/evaluator.mjs.map +1 -1
- package/dist/mcp-DToTlwIn.d.ts +396 -0
- package/dist/mcp-ZRN4kY3b.d.mts +396 -0
- package/dist/{nextjs-DlX6xwbU.d.mts → nextjs-C0KASOy_.d.mts} +1 -1
- package/dist/{nextjs-DL6uE1ye.d.ts → nextjs-lwNvWYWT.d.ts} +1 -1
- package/dist/registration/index.d.mts +5 -1
- package/dist/registration/index.d.ts +5 -1
- package/dist/registration/index.js +2 -1
- package/dist/registration/index.js.map +1 -1
- package/dist/registration/index.mjs +2 -1
- package/dist/registration/index.mjs.map +1 -1
- package/dist/{sdk-C6SASmsh.d.ts → sdk-B4aodEwj.d.ts} +1 -1
- package/dist/{sdk-Bbh9B_dw.d.mts → sdk-B9dSwum7.d.mts} +1 -1
- package/dist/transport/index.d.mts +2 -2
- package/dist/transport/index.d.ts +2 -2
- 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-DwSfO7Sb.d.ts → types-CGPU7HLi.d.ts} +8 -0
- package/dist/{types-nIh3HtuA.d.ts → types-CfSJLS4i.d.mts} +14 -1
- package/dist/{types-C0zfSXMB.d.mts → types-Cx9hTpKI.d.mts} +8 -0
- package/dist/{types-C7Rb-w0d.d.mts → types-DhhJxKIC.d.ts} +14 -1
- 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 +6 -1
- package/dist/verify.js.map +1 -1
- package/dist/verify.mjs +6 -1
- package/dist/verify.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -474,9 +474,9 @@ var LocalEvaluator = class {
|
|
|
474
474
|
if (scopeBlock) {
|
|
475
475
|
return { recommendation: "DENY", reason: scopeBlock };
|
|
476
476
|
}
|
|
477
|
-
const
|
|
478
|
-
if (
|
|
479
|
-
return
|
|
477
|
+
const limitDecision = this.checkLimits(context);
|
|
478
|
+
if (limitDecision) {
|
|
479
|
+
return limitDecision;
|
|
480
480
|
}
|
|
481
481
|
if (context.purpose === "sub_agent.spawn" && this.policy.selfInstantiation) {
|
|
482
482
|
if (!this.policy.selfInstantiation.allowed) {
|
|
@@ -541,9 +541,21 @@ var LocalEvaluator = class {
|
|
|
541
541
|
checkLimits(context) {
|
|
542
542
|
const limits = this.policy.limits;
|
|
543
543
|
if (!limits) return null;
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
544
|
+
const value = context.transactionValue;
|
|
545
|
+
if (value !== void 0 && value > 0 && (limits.autonomousThreshold !== void 0 || limits.maxTransactionAmount !== void 0)) {
|
|
546
|
+
const autonomousThreshold = limits.autonomousThreshold ?? 0;
|
|
547
|
+
const hardLimit = limits.maxTransactionAmount ?? limits.autonomousThreshold ?? 0;
|
|
548
|
+
if (value > autonomousThreshold) {
|
|
549
|
+
if (value >= hardLimit) {
|
|
550
|
+
return {
|
|
551
|
+
recommendation: "DENY",
|
|
552
|
+
reason: `Transaction value ${value} at or above Hard Limit ${hardLimit}`
|
|
553
|
+
};
|
|
554
|
+
}
|
|
555
|
+
return {
|
|
556
|
+
recommendation: "MANUAL_REVIEW",
|
|
557
|
+
reason: `Transaction value ${value} is in the human-approval band (${autonomousThreshold}, ${hardLimit})`
|
|
558
|
+
};
|
|
547
559
|
}
|
|
548
560
|
}
|
|
549
561
|
if (limits.maxRequestsPerHour !== void 0) {
|
|
@@ -556,7 +568,10 @@ var LocalEvaluator = class {
|
|
|
556
568
|
} else {
|
|
557
569
|
entry.count++;
|
|
558
570
|
if (entry.count > limits.maxRequestsPerHour) {
|
|
559
|
-
return
|
|
571
|
+
return {
|
|
572
|
+
recommendation: "DENY",
|
|
573
|
+
reason: `Rate limit exceeded: ${entry.count}/${limits.maxRequestsPerHour} requests per hour`
|
|
574
|
+
};
|
|
560
575
|
}
|
|
561
576
|
}
|
|
562
577
|
}
|
|
@@ -3765,10 +3780,16 @@ function validatePurpose(purpose, path) {
|
|
|
3765
3780
|
errors.push({ path: `${path}.targets`, message: "targets must be an array of strings" });
|
|
3766
3781
|
}
|
|
3767
3782
|
if (p.blockedPatterns !== void 0 && !isStringArray(p.blockedPatterns)) {
|
|
3768
|
-
errors.push({
|
|
3783
|
+
errors.push({
|
|
3784
|
+
path: `${path}.blockedPatterns`,
|
|
3785
|
+
message: "blockedPatterns must be an array of strings"
|
|
3786
|
+
});
|
|
3769
3787
|
}
|
|
3770
3788
|
if (p.requiresApproval !== void 0 && typeof p.requiresApproval !== "boolean") {
|
|
3771
|
-
errors.push({
|
|
3789
|
+
errors.push({
|
|
3790
|
+
path: `${path}.requiresApproval`,
|
|
3791
|
+
message: "requiresApproval must be a boolean"
|
|
3792
|
+
});
|
|
3772
3793
|
}
|
|
3773
3794
|
return errors;
|
|
3774
3795
|
}
|
|
@@ -3791,11 +3812,29 @@ function validateLimits(limits, path) {
|
|
|
3791
3812
|
return [{ path, message: "limits must be an object" }];
|
|
3792
3813
|
}
|
|
3793
3814
|
const l = limits;
|
|
3815
|
+
if (l.autonomousThreshold !== void 0 && typeof l.autonomousThreshold !== "number") {
|
|
3816
|
+
errors.push({
|
|
3817
|
+
path: `${path}.autonomousThreshold`,
|
|
3818
|
+
message: "autonomousThreshold must be a number"
|
|
3819
|
+
});
|
|
3820
|
+
}
|
|
3794
3821
|
if (l.maxTransactionAmount !== void 0 && typeof l.maxTransactionAmount !== "number") {
|
|
3795
|
-
errors.push({
|
|
3822
|
+
errors.push({
|
|
3823
|
+
path: `${path}.maxTransactionAmount`,
|
|
3824
|
+
message: "maxTransactionAmount must be a number"
|
|
3825
|
+
});
|
|
3826
|
+
}
|
|
3827
|
+
if (typeof l.autonomousThreshold === "number" && typeof l.maxTransactionAmount === "number" && l.autonomousThreshold > l.maxTransactionAmount) {
|
|
3828
|
+
errors.push({
|
|
3829
|
+
path: `${path}.autonomousThreshold`,
|
|
3830
|
+
message: "autonomousThreshold (Autonomous Limit) must be <= maxTransactionAmount (Hard Limit)"
|
|
3831
|
+
});
|
|
3796
3832
|
}
|
|
3797
3833
|
if (l.maxRequestsPerHour !== void 0 && typeof l.maxRequestsPerHour !== "number") {
|
|
3798
|
-
errors.push({
|
|
3834
|
+
errors.push({
|
|
3835
|
+
path: `${path}.maxRequestsPerHour`,
|
|
3836
|
+
message: "maxRequestsPerHour must be a number"
|
|
3837
|
+
});
|
|
3799
3838
|
}
|
|
3800
3839
|
if (l.currency !== void 0 && typeof l.currency !== "string") {
|
|
3801
3840
|
errors.push({ path: `${path}.currency`, message: "currency must be a string" });
|
|
@@ -3810,7 +3849,10 @@ function validateRiskThresholds(thresholds, path) {
|
|
|
3810
3849
|
const t = thresholds;
|
|
3811
3850
|
for (const range of ["autoAllow", "requireApproval", "autoBlock"]) {
|
|
3812
3851
|
if (!t[range] || typeof t[range] !== "object") {
|
|
3813
|
-
errors.push({
|
|
3852
|
+
errors.push({
|
|
3853
|
+
path: `${path}.${range}`,
|
|
3854
|
+
message: `${range} is required and must be an object with min and max`
|
|
3855
|
+
});
|
|
3814
3856
|
continue;
|
|
3815
3857
|
}
|
|
3816
3858
|
const r = t[range];
|
|
@@ -3915,7 +3957,7 @@ function getTrustLevel(score) {
|
|
|
3915
3957
|
}
|
|
3916
3958
|
|
|
3917
3959
|
// src/version.ts
|
|
3918
|
-
var SDK_VERSION = "4.
|
|
3960
|
+
var SDK_VERSION = "4.6.0";
|
|
3919
3961
|
|
|
3920
3962
|
// src/http.ts
|
|
3921
3963
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -4139,6 +4181,11 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
4139
4181
|
// 4.0.0: typed marker so adapters render the misconfig envelope (503 +
|
|
4140
4182
|
// MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
|
|
4141
4183
|
...isMisconfig && { misconfigured: true },
|
|
4184
|
+
// 4.6.0: a transient api_error is retryable — mark it so consumers surface
|
|
4185
|
+
// "temporarily unavailable, retry" (recommendation 'error') instead of
|
|
4186
|
+
// coercing the absent recommendation to a policy 'deny'. Misconfig is
|
|
4187
|
+
// deterministic and intentionally NOT marked retryable.
|
|
4188
|
+
...isApiError && { retryable: true },
|
|
4142
4189
|
correlationId: options.correlationId,
|
|
4143
4190
|
attemptId: options.attemptId,
|
|
4144
4191
|
verifiedAt: /* @__PURE__ */ new Date()
|