@astrasyncai/verification-gateway 4.5.1 → 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 +2 -2
- package/dist/adapters/mcp.d.ts +2 -2
- 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 +67 -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 +6 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6 -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--DgKOwfu.d.ts → mcp-DToTlwIn.d.ts} +1 -1
- package/dist/{mcp-BgBJu4Jl.d.mts → mcp-ZRN4kY3b.d.mts} +1 -1
- 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 +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/{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
|
@@ -495,9 +495,9 @@ var LocalEvaluator = class {
|
|
|
495
495
|
if (scopeBlock) {
|
|
496
496
|
return { recommendation: "DENY", reason: scopeBlock };
|
|
497
497
|
}
|
|
498
|
-
const
|
|
499
|
-
if (
|
|
500
|
-
return
|
|
498
|
+
const limitDecision = this.checkLimits(context);
|
|
499
|
+
if (limitDecision) {
|
|
500
|
+
return limitDecision;
|
|
501
501
|
}
|
|
502
502
|
if (context.purpose === "sub_agent.spawn" && this.policy.selfInstantiation) {
|
|
503
503
|
if (!this.policy.selfInstantiation.allowed) {
|
|
@@ -562,9 +562,21 @@ var LocalEvaluator = class {
|
|
|
562
562
|
checkLimits(context) {
|
|
563
563
|
const limits = this.policy.limits;
|
|
564
564
|
if (!limits) return null;
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
565
|
+
const value = context.transactionValue;
|
|
566
|
+
if (value !== void 0 && value > 0 && (limits.autonomousThreshold !== void 0 || limits.maxTransactionAmount !== void 0)) {
|
|
567
|
+
const autonomousThreshold = limits.autonomousThreshold ?? 0;
|
|
568
|
+
const hardLimit = limits.maxTransactionAmount ?? limits.autonomousThreshold ?? 0;
|
|
569
|
+
if (value > autonomousThreshold) {
|
|
570
|
+
if (value >= hardLimit) {
|
|
571
|
+
return {
|
|
572
|
+
recommendation: "DENY",
|
|
573
|
+
reason: `Transaction value ${value} at or above Hard Limit ${hardLimit}`
|
|
574
|
+
};
|
|
575
|
+
}
|
|
576
|
+
return {
|
|
577
|
+
recommendation: "MANUAL_REVIEW",
|
|
578
|
+
reason: `Transaction value ${value} is in the human-approval band (${autonomousThreshold}, ${hardLimit})`
|
|
579
|
+
};
|
|
568
580
|
}
|
|
569
581
|
}
|
|
570
582
|
if (limits.maxRequestsPerHour !== void 0) {
|
|
@@ -577,7 +589,10 @@ var LocalEvaluator = class {
|
|
|
577
589
|
} else {
|
|
578
590
|
entry.count++;
|
|
579
591
|
if (entry.count > limits.maxRequestsPerHour) {
|
|
580
|
-
return
|
|
592
|
+
return {
|
|
593
|
+
recommendation: "DENY",
|
|
594
|
+
reason: `Rate limit exceeded: ${entry.count}/${limits.maxRequestsPerHour} requests per hour`
|
|
595
|
+
};
|
|
581
596
|
}
|
|
582
597
|
}
|
|
583
598
|
}
|
|
@@ -3786,10 +3801,16 @@ function validatePurpose(purpose, path) {
|
|
|
3786
3801
|
errors.push({ path: `${path}.targets`, message: "targets must be an array of strings" });
|
|
3787
3802
|
}
|
|
3788
3803
|
if (p.blockedPatterns !== void 0 && !isStringArray(p.blockedPatterns)) {
|
|
3789
|
-
errors.push({
|
|
3804
|
+
errors.push({
|
|
3805
|
+
path: `${path}.blockedPatterns`,
|
|
3806
|
+
message: "blockedPatterns must be an array of strings"
|
|
3807
|
+
});
|
|
3790
3808
|
}
|
|
3791
3809
|
if (p.requiresApproval !== void 0 && typeof p.requiresApproval !== "boolean") {
|
|
3792
|
-
errors.push({
|
|
3810
|
+
errors.push({
|
|
3811
|
+
path: `${path}.requiresApproval`,
|
|
3812
|
+
message: "requiresApproval must be a boolean"
|
|
3813
|
+
});
|
|
3793
3814
|
}
|
|
3794
3815
|
return errors;
|
|
3795
3816
|
}
|
|
@@ -3812,11 +3833,29 @@ function validateLimits(limits, path) {
|
|
|
3812
3833
|
return [{ path, message: "limits must be an object" }];
|
|
3813
3834
|
}
|
|
3814
3835
|
const l = limits;
|
|
3836
|
+
if (l.autonomousThreshold !== void 0 && typeof l.autonomousThreshold !== "number") {
|
|
3837
|
+
errors.push({
|
|
3838
|
+
path: `${path}.autonomousThreshold`,
|
|
3839
|
+
message: "autonomousThreshold must be a number"
|
|
3840
|
+
});
|
|
3841
|
+
}
|
|
3815
3842
|
if (l.maxTransactionAmount !== void 0 && typeof l.maxTransactionAmount !== "number") {
|
|
3816
|
-
errors.push({
|
|
3843
|
+
errors.push({
|
|
3844
|
+
path: `${path}.maxTransactionAmount`,
|
|
3845
|
+
message: "maxTransactionAmount must be a number"
|
|
3846
|
+
});
|
|
3847
|
+
}
|
|
3848
|
+
if (typeof l.autonomousThreshold === "number" && typeof l.maxTransactionAmount === "number" && l.autonomousThreshold > l.maxTransactionAmount) {
|
|
3849
|
+
errors.push({
|
|
3850
|
+
path: `${path}.autonomousThreshold`,
|
|
3851
|
+
message: "autonomousThreshold (Autonomous Limit) must be <= maxTransactionAmount (Hard Limit)"
|
|
3852
|
+
});
|
|
3817
3853
|
}
|
|
3818
3854
|
if (l.maxRequestsPerHour !== void 0 && typeof l.maxRequestsPerHour !== "number") {
|
|
3819
|
-
errors.push({
|
|
3855
|
+
errors.push({
|
|
3856
|
+
path: `${path}.maxRequestsPerHour`,
|
|
3857
|
+
message: "maxRequestsPerHour must be a number"
|
|
3858
|
+
});
|
|
3820
3859
|
}
|
|
3821
3860
|
if (l.currency !== void 0 && typeof l.currency !== "string") {
|
|
3822
3861
|
errors.push({ path: `${path}.currency`, message: "currency must be a string" });
|
|
@@ -3831,7 +3870,10 @@ function validateRiskThresholds(thresholds, path) {
|
|
|
3831
3870
|
const t = thresholds;
|
|
3832
3871
|
for (const range of ["autoAllow", "requireApproval", "autoBlock"]) {
|
|
3833
3872
|
if (!t[range] || typeof t[range] !== "object") {
|
|
3834
|
-
errors.push({
|
|
3873
|
+
errors.push({
|
|
3874
|
+
path: `${path}.${range}`,
|
|
3875
|
+
message: `${range} is required and must be an object with min and max`
|
|
3876
|
+
});
|
|
3835
3877
|
continue;
|
|
3836
3878
|
}
|
|
3837
3879
|
const r = t[range];
|
|
@@ -3936,7 +3978,7 @@ function getTrustLevel(score) {
|
|
|
3936
3978
|
}
|
|
3937
3979
|
|
|
3938
3980
|
// src/version.ts
|
|
3939
|
-
var SDK_VERSION = "4.
|
|
3981
|
+
var SDK_VERSION = "4.6.0";
|
|
3940
3982
|
|
|
3941
3983
|
// src/http.ts
|
|
3942
3984
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -4160,6 +4202,11 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
4160
4202
|
// 4.0.0: typed marker so adapters render the misconfig envelope (503 +
|
|
4161
4203
|
// MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
|
|
4162
4204
|
...isMisconfig && { misconfigured: true },
|
|
4205
|
+
// 4.6.0: a transient api_error is retryable — mark it so consumers surface
|
|
4206
|
+
// "temporarily unavailable, retry" (recommendation 'error') instead of
|
|
4207
|
+
// coercing the absent recommendation to a policy 'deny'. Misconfig is
|
|
4208
|
+
// deterministic and intentionally NOT marked retryable.
|
|
4209
|
+
...isApiError && { retryable: true },
|
|
4163
4210
|
correlationId: options.correlationId,
|
|
4164
4211
|
attemptId: options.attemptId,
|
|
4165
4212
|
verifiedAt: /* @__PURE__ */ new Date()
|