@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
package/dist/gateway/gateway.mjs
CHANGED
|
@@ -231,9 +231,9 @@ var LocalEvaluator = class {
|
|
|
231
231
|
if (scopeBlock) {
|
|
232
232
|
return { recommendation: "DENY", reason: scopeBlock };
|
|
233
233
|
}
|
|
234
|
-
const
|
|
235
|
-
if (
|
|
236
|
-
return
|
|
234
|
+
const limitDecision = this.checkLimits(context);
|
|
235
|
+
if (limitDecision) {
|
|
236
|
+
return limitDecision;
|
|
237
237
|
}
|
|
238
238
|
if (context.purpose === "sub_agent.spawn" && this.policy.selfInstantiation) {
|
|
239
239
|
if (!this.policy.selfInstantiation.allowed) {
|
|
@@ -298,9 +298,21 @@ var LocalEvaluator = class {
|
|
|
298
298
|
checkLimits(context) {
|
|
299
299
|
const limits = this.policy.limits;
|
|
300
300
|
if (!limits) return null;
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
301
|
+
const value = context.transactionValue;
|
|
302
|
+
if (value !== void 0 && value > 0 && (limits.autonomousThreshold !== void 0 || limits.maxTransactionAmount !== void 0)) {
|
|
303
|
+
const autonomousThreshold = limits.autonomousThreshold ?? 0;
|
|
304
|
+
const hardLimit = limits.maxTransactionAmount ?? limits.autonomousThreshold ?? 0;
|
|
305
|
+
if (value > autonomousThreshold) {
|
|
306
|
+
if (value >= hardLimit) {
|
|
307
|
+
return {
|
|
308
|
+
recommendation: "DENY",
|
|
309
|
+
reason: `Transaction value ${value} at or above Hard Limit ${hardLimit}`
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
return {
|
|
313
|
+
recommendation: "MANUAL_REVIEW",
|
|
314
|
+
reason: `Transaction value ${value} is in the human-approval band (${autonomousThreshold}, ${hardLimit})`
|
|
315
|
+
};
|
|
304
316
|
}
|
|
305
317
|
}
|
|
306
318
|
if (limits.maxRequestsPerHour !== void 0) {
|
|
@@ -313,7 +325,10 @@ var LocalEvaluator = class {
|
|
|
313
325
|
} else {
|
|
314
326
|
entry.count++;
|
|
315
327
|
if (entry.count > limits.maxRequestsPerHour) {
|
|
316
|
-
return
|
|
328
|
+
return {
|
|
329
|
+
recommendation: "DENY",
|
|
330
|
+
reason: `Rate limit exceeded: ${entry.count}/${limits.maxRequestsPerHour} requests per hour`
|
|
331
|
+
};
|
|
317
332
|
}
|
|
318
333
|
}
|
|
319
334
|
}
|
|
@@ -3522,10 +3537,16 @@ function validatePurpose(purpose, path) {
|
|
|
3522
3537
|
errors.push({ path: `${path}.targets`, message: "targets must be an array of strings" });
|
|
3523
3538
|
}
|
|
3524
3539
|
if (p.blockedPatterns !== void 0 && !isStringArray(p.blockedPatterns)) {
|
|
3525
|
-
errors.push({
|
|
3540
|
+
errors.push({
|
|
3541
|
+
path: `${path}.blockedPatterns`,
|
|
3542
|
+
message: "blockedPatterns must be an array of strings"
|
|
3543
|
+
});
|
|
3526
3544
|
}
|
|
3527
3545
|
if (p.requiresApproval !== void 0 && typeof p.requiresApproval !== "boolean") {
|
|
3528
|
-
errors.push({
|
|
3546
|
+
errors.push({
|
|
3547
|
+
path: `${path}.requiresApproval`,
|
|
3548
|
+
message: "requiresApproval must be a boolean"
|
|
3549
|
+
});
|
|
3529
3550
|
}
|
|
3530
3551
|
return errors;
|
|
3531
3552
|
}
|
|
@@ -3548,11 +3569,29 @@ function validateLimits(limits, path) {
|
|
|
3548
3569
|
return [{ path, message: "limits must be an object" }];
|
|
3549
3570
|
}
|
|
3550
3571
|
const l = limits;
|
|
3572
|
+
if (l.autonomousThreshold !== void 0 && typeof l.autonomousThreshold !== "number") {
|
|
3573
|
+
errors.push({
|
|
3574
|
+
path: `${path}.autonomousThreshold`,
|
|
3575
|
+
message: "autonomousThreshold must be a number"
|
|
3576
|
+
});
|
|
3577
|
+
}
|
|
3551
3578
|
if (l.maxTransactionAmount !== void 0 && typeof l.maxTransactionAmount !== "number") {
|
|
3552
|
-
errors.push({
|
|
3579
|
+
errors.push({
|
|
3580
|
+
path: `${path}.maxTransactionAmount`,
|
|
3581
|
+
message: "maxTransactionAmount must be a number"
|
|
3582
|
+
});
|
|
3583
|
+
}
|
|
3584
|
+
if (typeof l.autonomousThreshold === "number" && typeof l.maxTransactionAmount === "number" && l.autonomousThreshold > l.maxTransactionAmount) {
|
|
3585
|
+
errors.push({
|
|
3586
|
+
path: `${path}.autonomousThreshold`,
|
|
3587
|
+
message: "autonomousThreshold (Autonomous Limit) must be <= maxTransactionAmount (Hard Limit)"
|
|
3588
|
+
});
|
|
3553
3589
|
}
|
|
3554
3590
|
if (l.maxRequestsPerHour !== void 0 && typeof l.maxRequestsPerHour !== "number") {
|
|
3555
|
-
errors.push({
|
|
3591
|
+
errors.push({
|
|
3592
|
+
path: `${path}.maxRequestsPerHour`,
|
|
3593
|
+
message: "maxRequestsPerHour must be a number"
|
|
3594
|
+
});
|
|
3556
3595
|
}
|
|
3557
3596
|
if (l.currency !== void 0 && typeof l.currency !== "string") {
|
|
3558
3597
|
errors.push({ path: `${path}.currency`, message: "currency must be a string" });
|
|
@@ -3567,7 +3606,10 @@ function validateRiskThresholds(thresholds, path) {
|
|
|
3567
3606
|
const t = thresholds;
|
|
3568
3607
|
for (const range of ["autoAllow", "requireApproval", "autoBlock"]) {
|
|
3569
3608
|
if (!t[range] || typeof t[range] !== "object") {
|
|
3570
|
-
errors.push({
|
|
3609
|
+
errors.push({
|
|
3610
|
+
path: `${path}.${range}`,
|
|
3611
|
+
message: `${range} is required and must be an object with min and max`
|
|
3612
|
+
});
|
|
3571
3613
|
continue;
|
|
3572
3614
|
}
|
|
3573
3615
|
const r = t[range];
|
|
@@ -3672,7 +3714,7 @@ function getTrustLevel(score) {
|
|
|
3672
3714
|
}
|
|
3673
3715
|
|
|
3674
3716
|
// src/version.ts
|
|
3675
|
-
var SDK_VERSION = "4.
|
|
3717
|
+
var SDK_VERSION = "4.6.0";
|
|
3676
3718
|
|
|
3677
3719
|
// src/http.ts
|
|
3678
3720
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -3896,6 +3938,11 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
3896
3938
|
// 4.0.0: typed marker so adapters render the misconfig envelope (503 +
|
|
3897
3939
|
// MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
|
|
3898
3940
|
...isMisconfig && { misconfigured: true },
|
|
3941
|
+
// 4.6.0: a transient api_error is retryable — mark it so consumers surface
|
|
3942
|
+
// "temporarily unavailable, retry" (recommendation 'error') instead of
|
|
3943
|
+
// coercing the absent recommendation to a policy 'deny'. Misconfig is
|
|
3944
|
+
// deterministic and intentionally NOT marked retryable.
|
|
3945
|
+
...isApiError && { retryable: true },
|
|
3899
3946
|
correlationId: options.correlationId,
|
|
3900
3947
|
attemptId: options.attemptId,
|
|
3901
3948
|
verifiedAt: /* @__PURE__ */ new Date()
|