@node9/proxy 1.48.0 → 1.50.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/dist/cli.js +77 -2
- package/dist/cli.mjs +77 -2
- package/dist/dashboard.mjs +8 -0
- package/dist/index.js +51 -0
- package/dist/index.mjs +51 -0
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -4216,6 +4216,42 @@ var init_shields = __esm({
|
|
|
4216
4216
|
}
|
|
4217
4217
|
});
|
|
4218
4218
|
|
|
4219
|
+
// src/config/managed.ts
|
|
4220
|
+
function rankIn(order, value) {
|
|
4221
|
+
return order.indexOf(value);
|
|
4222
|
+
}
|
|
4223
|
+
function resolveByOrder(order, local, cloud, locked) {
|
|
4224
|
+
if (rankIn(order, cloud) === -1) return local;
|
|
4225
|
+
if (locked) return cloud;
|
|
4226
|
+
return rankIn(order, local) > rankIn(order, cloud) ? local : cloud;
|
|
4227
|
+
}
|
|
4228
|
+
function resolveManagedMode(local, cloud, locked) {
|
|
4229
|
+
return resolveByOrder(MODE_ORDER, local, cloud, locked);
|
|
4230
|
+
}
|
|
4231
|
+
function applyManagedEgress(local, managed, locked) {
|
|
4232
|
+
const next = { ...local };
|
|
4233
|
+
if (typeof managed.enabled === "boolean") {
|
|
4234
|
+
next.enabled = locked.includes("egressEnabled") ? managed.enabled : local.enabled || managed.enabled;
|
|
4235
|
+
}
|
|
4236
|
+
if (typeof managed.mode === "string") {
|
|
4237
|
+
next.mode = resolveByOrder(
|
|
4238
|
+
EGRESS_MODE_ORDER,
|
|
4239
|
+
local.mode,
|
|
4240
|
+
managed.mode,
|
|
4241
|
+
locked.includes("egressMode")
|
|
4242
|
+
);
|
|
4243
|
+
}
|
|
4244
|
+
return next;
|
|
4245
|
+
}
|
|
4246
|
+
var MODE_ORDER, EGRESS_MODE_ORDER;
|
|
4247
|
+
var init_managed = __esm({
|
|
4248
|
+
"src/config/managed.ts"() {
|
|
4249
|
+
"use strict";
|
|
4250
|
+
MODE_ORDER = ["observe", "audit", "standard", "strict"];
|
|
4251
|
+
EGRESS_MODE_ORDER = ["off", "review", "block"];
|
|
4252
|
+
}
|
|
4253
|
+
});
|
|
4254
|
+
|
|
4219
4255
|
// src/config/index.ts
|
|
4220
4256
|
function _resetConfigCache() {
|
|
4221
4257
|
cachedConfig = null;
|
|
@@ -4426,6 +4462,27 @@ function getConfig(cwd) {
|
|
|
4426
4462
|
if (Array.isArray(raw.shields)) {
|
|
4427
4463
|
cloudManagedShields = raw.shields.filter((s) => typeof s === "string");
|
|
4428
4464
|
}
|
|
4465
|
+
if (raw.managedConfig && typeof raw.managedConfig === "object") {
|
|
4466
|
+
const mc = raw.managedConfig;
|
|
4467
|
+
const locked = Array.isArray(mc.locked) ? mc.locked.filter((f) => typeof f === "string") : [];
|
|
4468
|
+
if (typeof mc.mode === "string") {
|
|
4469
|
+
mergedSettings.mode = resolveManagedMode(
|
|
4470
|
+
mergedSettings.mode,
|
|
4471
|
+
mc.mode,
|
|
4472
|
+
locked.includes("mode")
|
|
4473
|
+
);
|
|
4474
|
+
}
|
|
4475
|
+
if (mc.egress && typeof mc.egress === "object") {
|
|
4476
|
+
mergedPolicy.egress = applyManagedEgress(
|
|
4477
|
+
mergedPolicy.egress,
|
|
4478
|
+
{
|
|
4479
|
+
enabled: typeof mc.egress.enabled === "boolean" ? mc.egress.enabled : void 0,
|
|
4480
|
+
mode: typeof mc.egress.mode === "string" ? mc.egress.mode : void 0
|
|
4481
|
+
},
|
|
4482
|
+
locked
|
|
4483
|
+
);
|
|
4484
|
+
}
|
|
4485
|
+
}
|
|
4429
4486
|
if (raw.panicMode === true) {
|
|
4430
4487
|
mergedSettings.panicMode = true;
|
|
4431
4488
|
}
|
|
@@ -4537,6 +4594,7 @@ var init_config = __esm({
|
|
|
4537
4594
|
import_os3 = __toESM(require("os"));
|
|
4538
4595
|
init_config_schema();
|
|
4539
4596
|
init_shields();
|
|
4597
|
+
init_managed();
|
|
4540
4598
|
DANGEROUS_WORDS = [
|
|
4541
4599
|
"mkfs",
|
|
4542
4600
|
// formats/wipes a filesystem partition
|
|
@@ -16890,6 +16948,21 @@ function extractRules(body) {
|
|
|
16890
16948
|
function extractShields(body) {
|
|
16891
16949
|
return Array.isArray(body.shields) ? body.shields.filter((s) => typeof s === "string") : [];
|
|
16892
16950
|
}
|
|
16951
|
+
function extractManagedConfig(body) {
|
|
16952
|
+
const mc = body.managedConfig;
|
|
16953
|
+
if (!mc || typeof mc !== "object") return void 0;
|
|
16954
|
+
const out = {
|
|
16955
|
+
locked: Array.isArray(mc.locked) ? mc.locked.filter((f) => typeof f === "string") : []
|
|
16956
|
+
};
|
|
16957
|
+
if (typeof mc.mode === "string") out.mode = mc.mode;
|
|
16958
|
+
if (mc.egress && typeof mc.egress === "object") {
|
|
16959
|
+
const e = {};
|
|
16960
|
+
if (typeof mc.egress.enabled === "boolean") e.enabled = mc.egress.enabled;
|
|
16961
|
+
if (typeof mc.egress.mode === "string") e.mode = mc.egress.mode;
|
|
16962
|
+
if (e.enabled !== void 0 || e.mode !== void 0) out.egress = e;
|
|
16963
|
+
}
|
|
16964
|
+
return out.mode !== void 0 || out.egress !== void 0 ? out : void 0;
|
|
16965
|
+
}
|
|
16893
16966
|
function writeCache2(cache) {
|
|
16894
16967
|
const dir = import_path31.default.dirname(rulesCacheFile());
|
|
16895
16968
|
if (!import_fs32.default.existsSync(dir)) import_fs32.default.mkdirSync(dir, { recursive: true });
|
|
@@ -16910,7 +16983,8 @@ async function syncOnce() {
|
|
|
16910
16983
|
shadowMode: result.body.shadowMode,
|
|
16911
16984
|
syncIntervalHours: result.body.syncIntervalHours,
|
|
16912
16985
|
workspaceId: result.body.workspaceId,
|
|
16913
|
-
shields: extractShields(result.body)
|
|
16986
|
+
shields: extractShields(result.body),
|
|
16987
|
+
managedConfig: extractManagedConfig(result.body)
|
|
16914
16988
|
};
|
|
16915
16989
|
writeCache2(cache);
|
|
16916
16990
|
}
|
|
@@ -17083,7 +17157,8 @@ async function runCloudSync() {
|
|
|
17083
17157
|
shadowMode: result.body.shadowMode,
|
|
17084
17158
|
syncIntervalHours: result.body.syncIntervalHours,
|
|
17085
17159
|
workspaceId: result.body.workspaceId,
|
|
17086
|
-
shields: extractShields(result.body)
|
|
17160
|
+
shields: extractShields(result.body),
|
|
17161
|
+
managedConfig: extractManagedConfig(result.body)
|
|
17087
17162
|
};
|
|
17088
17163
|
writeCache2(cache);
|
|
17089
17164
|
maybePushBlast();
|
package/dist/cli.mjs
CHANGED
|
@@ -4194,6 +4194,42 @@ var init_shields = __esm({
|
|
|
4194
4194
|
}
|
|
4195
4195
|
});
|
|
4196
4196
|
|
|
4197
|
+
// src/config/managed.ts
|
|
4198
|
+
function rankIn(order, value) {
|
|
4199
|
+
return order.indexOf(value);
|
|
4200
|
+
}
|
|
4201
|
+
function resolveByOrder(order, local, cloud, locked) {
|
|
4202
|
+
if (rankIn(order, cloud) === -1) return local;
|
|
4203
|
+
if (locked) return cloud;
|
|
4204
|
+
return rankIn(order, local) > rankIn(order, cloud) ? local : cloud;
|
|
4205
|
+
}
|
|
4206
|
+
function resolveManagedMode(local, cloud, locked) {
|
|
4207
|
+
return resolveByOrder(MODE_ORDER, local, cloud, locked);
|
|
4208
|
+
}
|
|
4209
|
+
function applyManagedEgress(local, managed, locked) {
|
|
4210
|
+
const next = { ...local };
|
|
4211
|
+
if (typeof managed.enabled === "boolean") {
|
|
4212
|
+
next.enabled = locked.includes("egressEnabled") ? managed.enabled : local.enabled || managed.enabled;
|
|
4213
|
+
}
|
|
4214
|
+
if (typeof managed.mode === "string") {
|
|
4215
|
+
next.mode = resolveByOrder(
|
|
4216
|
+
EGRESS_MODE_ORDER,
|
|
4217
|
+
local.mode,
|
|
4218
|
+
managed.mode,
|
|
4219
|
+
locked.includes("egressMode")
|
|
4220
|
+
);
|
|
4221
|
+
}
|
|
4222
|
+
return next;
|
|
4223
|
+
}
|
|
4224
|
+
var MODE_ORDER, EGRESS_MODE_ORDER;
|
|
4225
|
+
var init_managed = __esm({
|
|
4226
|
+
"src/config/managed.ts"() {
|
|
4227
|
+
"use strict";
|
|
4228
|
+
MODE_ORDER = ["observe", "audit", "standard", "strict"];
|
|
4229
|
+
EGRESS_MODE_ORDER = ["off", "review", "block"];
|
|
4230
|
+
}
|
|
4231
|
+
});
|
|
4232
|
+
|
|
4197
4233
|
// src/config/index.ts
|
|
4198
4234
|
import fs3 from "fs";
|
|
4199
4235
|
import path3 from "path";
|
|
@@ -4407,6 +4443,27 @@ function getConfig(cwd) {
|
|
|
4407
4443
|
if (Array.isArray(raw.shields)) {
|
|
4408
4444
|
cloudManagedShields = raw.shields.filter((s) => typeof s === "string");
|
|
4409
4445
|
}
|
|
4446
|
+
if (raw.managedConfig && typeof raw.managedConfig === "object") {
|
|
4447
|
+
const mc = raw.managedConfig;
|
|
4448
|
+
const locked = Array.isArray(mc.locked) ? mc.locked.filter((f) => typeof f === "string") : [];
|
|
4449
|
+
if (typeof mc.mode === "string") {
|
|
4450
|
+
mergedSettings.mode = resolveManagedMode(
|
|
4451
|
+
mergedSettings.mode,
|
|
4452
|
+
mc.mode,
|
|
4453
|
+
locked.includes("mode")
|
|
4454
|
+
);
|
|
4455
|
+
}
|
|
4456
|
+
if (mc.egress && typeof mc.egress === "object") {
|
|
4457
|
+
mergedPolicy.egress = applyManagedEgress(
|
|
4458
|
+
mergedPolicy.egress,
|
|
4459
|
+
{
|
|
4460
|
+
enabled: typeof mc.egress.enabled === "boolean" ? mc.egress.enabled : void 0,
|
|
4461
|
+
mode: typeof mc.egress.mode === "string" ? mc.egress.mode : void 0
|
|
4462
|
+
},
|
|
4463
|
+
locked
|
|
4464
|
+
);
|
|
4465
|
+
}
|
|
4466
|
+
}
|
|
4410
4467
|
if (raw.panicMode === true) {
|
|
4411
4468
|
mergedSettings.panicMode = true;
|
|
4412
4469
|
}
|
|
@@ -4515,6 +4572,7 @@ var init_config = __esm({
|
|
|
4515
4572
|
"use strict";
|
|
4516
4573
|
init_config_schema();
|
|
4517
4574
|
init_shields();
|
|
4575
|
+
init_managed();
|
|
4518
4576
|
DANGEROUS_WORDS = [
|
|
4519
4577
|
"mkfs",
|
|
4520
4578
|
// formats/wipes a filesystem partition
|
|
@@ -16864,6 +16922,21 @@ function extractRules(body) {
|
|
|
16864
16922
|
function extractShields(body) {
|
|
16865
16923
|
return Array.isArray(body.shields) ? body.shields.filter((s) => typeof s === "string") : [];
|
|
16866
16924
|
}
|
|
16925
|
+
function extractManagedConfig(body) {
|
|
16926
|
+
const mc = body.managedConfig;
|
|
16927
|
+
if (!mc || typeof mc !== "object") return void 0;
|
|
16928
|
+
const out = {
|
|
16929
|
+
locked: Array.isArray(mc.locked) ? mc.locked.filter((f) => typeof f === "string") : []
|
|
16930
|
+
};
|
|
16931
|
+
if (typeof mc.mode === "string") out.mode = mc.mode;
|
|
16932
|
+
if (mc.egress && typeof mc.egress === "object") {
|
|
16933
|
+
const e = {};
|
|
16934
|
+
if (typeof mc.egress.enabled === "boolean") e.enabled = mc.egress.enabled;
|
|
16935
|
+
if (typeof mc.egress.mode === "string") e.mode = mc.egress.mode;
|
|
16936
|
+
if (e.enabled !== void 0 || e.mode !== void 0) out.egress = e;
|
|
16937
|
+
}
|
|
16938
|
+
return out.mode !== void 0 || out.egress !== void 0 ? out : void 0;
|
|
16939
|
+
}
|
|
16867
16940
|
function writeCache2(cache) {
|
|
16868
16941
|
const dir = path31.dirname(rulesCacheFile());
|
|
16869
16942
|
if (!fs32.existsSync(dir)) fs32.mkdirSync(dir, { recursive: true });
|
|
@@ -16884,7 +16957,8 @@ async function syncOnce() {
|
|
|
16884
16957
|
shadowMode: result.body.shadowMode,
|
|
16885
16958
|
syncIntervalHours: result.body.syncIntervalHours,
|
|
16886
16959
|
workspaceId: result.body.workspaceId,
|
|
16887
|
-
shields: extractShields(result.body)
|
|
16960
|
+
shields: extractShields(result.body),
|
|
16961
|
+
managedConfig: extractManagedConfig(result.body)
|
|
16888
16962
|
};
|
|
16889
16963
|
writeCache2(cache);
|
|
16890
16964
|
}
|
|
@@ -17057,7 +17131,8 @@ async function runCloudSync() {
|
|
|
17057
17131
|
shadowMode: result.body.shadowMode,
|
|
17058
17132
|
syncIntervalHours: result.body.syncIntervalHours,
|
|
17059
17133
|
workspaceId: result.body.workspaceId,
|
|
17060
|
-
shields: extractShields(result.body)
|
|
17134
|
+
shields: extractShields(result.body),
|
|
17135
|
+
managedConfig: extractManagedConfig(result.body)
|
|
17061
17136
|
};
|
|
17062
17137
|
writeCache2(cache);
|
|
17063
17138
|
maybePushBlast();
|
package/dist/dashboard.mjs
CHANGED
|
@@ -2412,6 +2412,13 @@ var init_shields = __esm({
|
|
|
2412
2412
|
}
|
|
2413
2413
|
});
|
|
2414
2414
|
|
|
2415
|
+
// src/config/managed.ts
|
|
2416
|
+
var init_managed = __esm({
|
|
2417
|
+
"src/config/managed.ts"() {
|
|
2418
|
+
"use strict";
|
|
2419
|
+
}
|
|
2420
|
+
});
|
|
2421
|
+
|
|
2415
2422
|
// src/config/index.ts
|
|
2416
2423
|
var DANGEROUS_WORDS, DEFAULT_CONFIG;
|
|
2417
2424
|
var init_config = __esm({
|
|
@@ -2419,6 +2426,7 @@ var init_config = __esm({
|
|
|
2419
2426
|
"use strict";
|
|
2420
2427
|
init_config_schema();
|
|
2421
2428
|
init_shields();
|
|
2429
|
+
init_managed();
|
|
2422
2430
|
DANGEROUS_WORDS = [
|
|
2423
2431
|
"mkfs",
|
|
2424
2432
|
// formats/wipes a filesystem partition
|
package/dist/index.js
CHANGED
|
@@ -3501,6 +3501,36 @@ function readShieldOverrides() {
|
|
|
3501
3501
|
return readShieldsFile().overrides ?? {};
|
|
3502
3502
|
}
|
|
3503
3503
|
|
|
3504
|
+
// src/config/managed.ts
|
|
3505
|
+
var MODE_ORDER = ["observe", "audit", "standard", "strict"];
|
|
3506
|
+
var EGRESS_MODE_ORDER = ["off", "review", "block"];
|
|
3507
|
+
function rankIn(order, value) {
|
|
3508
|
+
return order.indexOf(value);
|
|
3509
|
+
}
|
|
3510
|
+
function resolveByOrder(order, local, cloud, locked) {
|
|
3511
|
+
if (rankIn(order, cloud) === -1) return local;
|
|
3512
|
+
if (locked) return cloud;
|
|
3513
|
+
return rankIn(order, local) > rankIn(order, cloud) ? local : cloud;
|
|
3514
|
+
}
|
|
3515
|
+
function resolveManagedMode(local, cloud, locked) {
|
|
3516
|
+
return resolveByOrder(MODE_ORDER, local, cloud, locked);
|
|
3517
|
+
}
|
|
3518
|
+
function applyManagedEgress(local, managed, locked) {
|
|
3519
|
+
const next = { ...local };
|
|
3520
|
+
if (typeof managed.enabled === "boolean") {
|
|
3521
|
+
next.enabled = locked.includes("egressEnabled") ? managed.enabled : local.enabled || managed.enabled;
|
|
3522
|
+
}
|
|
3523
|
+
if (typeof managed.mode === "string") {
|
|
3524
|
+
next.mode = resolveByOrder(
|
|
3525
|
+
EGRESS_MODE_ORDER,
|
|
3526
|
+
local.mode,
|
|
3527
|
+
managed.mode,
|
|
3528
|
+
locked.includes("egressMode")
|
|
3529
|
+
);
|
|
3530
|
+
}
|
|
3531
|
+
return next;
|
|
3532
|
+
}
|
|
3533
|
+
|
|
3504
3534
|
// src/config/index.ts
|
|
3505
3535
|
var DANGEROUS_WORDS = [
|
|
3506
3536
|
"mkfs",
|
|
@@ -3958,6 +3988,27 @@ function getConfig(cwd) {
|
|
|
3958
3988
|
if (Array.isArray(raw.shields)) {
|
|
3959
3989
|
cloudManagedShields = raw.shields.filter((s) => typeof s === "string");
|
|
3960
3990
|
}
|
|
3991
|
+
if (raw.managedConfig && typeof raw.managedConfig === "object") {
|
|
3992
|
+
const mc = raw.managedConfig;
|
|
3993
|
+
const locked = Array.isArray(mc.locked) ? mc.locked.filter((f) => typeof f === "string") : [];
|
|
3994
|
+
if (typeof mc.mode === "string") {
|
|
3995
|
+
mergedSettings.mode = resolveManagedMode(
|
|
3996
|
+
mergedSettings.mode,
|
|
3997
|
+
mc.mode,
|
|
3998
|
+
locked.includes("mode")
|
|
3999
|
+
);
|
|
4000
|
+
}
|
|
4001
|
+
if (mc.egress && typeof mc.egress === "object") {
|
|
4002
|
+
mergedPolicy.egress = applyManagedEgress(
|
|
4003
|
+
mergedPolicy.egress,
|
|
4004
|
+
{
|
|
4005
|
+
enabled: typeof mc.egress.enabled === "boolean" ? mc.egress.enabled : void 0,
|
|
4006
|
+
mode: typeof mc.egress.mode === "string" ? mc.egress.mode : void 0
|
|
4007
|
+
},
|
|
4008
|
+
locked
|
|
4009
|
+
);
|
|
4010
|
+
}
|
|
4011
|
+
}
|
|
3961
4012
|
if (raw.panicMode === true) {
|
|
3962
4013
|
mergedSettings.panicMode = true;
|
|
3963
4014
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -3471,6 +3471,36 @@ function readShieldOverrides() {
|
|
|
3471
3471
|
return readShieldsFile().overrides ?? {};
|
|
3472
3472
|
}
|
|
3473
3473
|
|
|
3474
|
+
// src/config/managed.ts
|
|
3475
|
+
var MODE_ORDER = ["observe", "audit", "standard", "strict"];
|
|
3476
|
+
var EGRESS_MODE_ORDER = ["off", "review", "block"];
|
|
3477
|
+
function rankIn(order, value) {
|
|
3478
|
+
return order.indexOf(value);
|
|
3479
|
+
}
|
|
3480
|
+
function resolveByOrder(order, local, cloud, locked) {
|
|
3481
|
+
if (rankIn(order, cloud) === -1) return local;
|
|
3482
|
+
if (locked) return cloud;
|
|
3483
|
+
return rankIn(order, local) > rankIn(order, cloud) ? local : cloud;
|
|
3484
|
+
}
|
|
3485
|
+
function resolveManagedMode(local, cloud, locked) {
|
|
3486
|
+
return resolveByOrder(MODE_ORDER, local, cloud, locked);
|
|
3487
|
+
}
|
|
3488
|
+
function applyManagedEgress(local, managed, locked) {
|
|
3489
|
+
const next = { ...local };
|
|
3490
|
+
if (typeof managed.enabled === "boolean") {
|
|
3491
|
+
next.enabled = locked.includes("egressEnabled") ? managed.enabled : local.enabled || managed.enabled;
|
|
3492
|
+
}
|
|
3493
|
+
if (typeof managed.mode === "string") {
|
|
3494
|
+
next.mode = resolveByOrder(
|
|
3495
|
+
EGRESS_MODE_ORDER,
|
|
3496
|
+
local.mode,
|
|
3497
|
+
managed.mode,
|
|
3498
|
+
locked.includes("egressMode")
|
|
3499
|
+
);
|
|
3500
|
+
}
|
|
3501
|
+
return next;
|
|
3502
|
+
}
|
|
3503
|
+
|
|
3474
3504
|
// src/config/index.ts
|
|
3475
3505
|
var DANGEROUS_WORDS = [
|
|
3476
3506
|
"mkfs",
|
|
@@ -3928,6 +3958,27 @@ function getConfig(cwd) {
|
|
|
3928
3958
|
if (Array.isArray(raw.shields)) {
|
|
3929
3959
|
cloudManagedShields = raw.shields.filter((s) => typeof s === "string");
|
|
3930
3960
|
}
|
|
3961
|
+
if (raw.managedConfig && typeof raw.managedConfig === "object") {
|
|
3962
|
+
const mc = raw.managedConfig;
|
|
3963
|
+
const locked = Array.isArray(mc.locked) ? mc.locked.filter((f) => typeof f === "string") : [];
|
|
3964
|
+
if (typeof mc.mode === "string") {
|
|
3965
|
+
mergedSettings.mode = resolveManagedMode(
|
|
3966
|
+
mergedSettings.mode,
|
|
3967
|
+
mc.mode,
|
|
3968
|
+
locked.includes("mode")
|
|
3969
|
+
);
|
|
3970
|
+
}
|
|
3971
|
+
if (mc.egress && typeof mc.egress === "object") {
|
|
3972
|
+
mergedPolicy.egress = applyManagedEgress(
|
|
3973
|
+
mergedPolicy.egress,
|
|
3974
|
+
{
|
|
3975
|
+
enabled: typeof mc.egress.enabled === "boolean" ? mc.egress.enabled : void 0,
|
|
3976
|
+
mode: typeof mc.egress.mode === "string" ? mc.egress.mode : void 0
|
|
3977
|
+
},
|
|
3978
|
+
locked
|
|
3979
|
+
);
|
|
3980
|
+
}
|
|
3981
|
+
}
|
|
3931
3982
|
if (raw.panicMode === true) {
|
|
3932
3983
|
mergedSettings.panicMode = true;
|
|
3933
3984
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@node9/proxy",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.50.0",
|
|
4
4
|
"description": "The Sudo Command for AI Agents. Execution Security for Claude Code, Codex, Gemini, Cursor, Opencode, Pi, and any MCP server.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|