@envsave/cli 1.0.42 → 1.0.43
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 +24 -16
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -836,7 +836,7 @@ async function checkLicense() {
|
|
|
836
836
|
// package.json
|
|
837
837
|
var package_default = {
|
|
838
838
|
name: "@envsave/cli",
|
|
839
|
-
version: "1.0.
|
|
839
|
+
version: "1.0.43",
|
|
840
840
|
description: "Local secret vault for LLM-safe environments — encrypted secrets that agents can't bulk-discover",
|
|
841
841
|
type: "module",
|
|
842
842
|
main: "dist/index.js",
|
|
@@ -933,7 +933,7 @@ Usage:
|
|
|
933
933
|
envsave backup Upload encrypted vault to server
|
|
934
934
|
envsave restore Download vault backup from server
|
|
935
935
|
envsave sync Sync vault with server (pull if cloud newer)
|
|
936
|
-
envsave vercel <KEY|es_key>... Push secrets to Vercel
|
|
936
|
+
envsave vercel <KEY|es_key>... Push secrets to Vercel under both clean name + opaque id
|
|
937
937
|
envsave help Show this help
|
|
938
938
|
|
|
939
939
|
Security model:
|
|
@@ -1568,22 +1568,30 @@ Pushing ${secrets.length} secret(s) to Vercel (${environments.join(", ")})...
|
|
|
1568
1568
|
`);
|
|
1569
1569
|
let success = 0;
|
|
1570
1570
|
let failed = 0;
|
|
1571
|
+
const pushVar = (varName, value, env) => {
|
|
1572
|
+
spawnSync("vercel", ["env", "rm", varName, env, "-y"], {
|
|
1573
|
+
stdio: "ignore"
|
|
1574
|
+
});
|
|
1575
|
+
const proc = spawnSync("vercel", ["env", "add", varName, env], {
|
|
1576
|
+
input: Buffer.from(value),
|
|
1577
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
1578
|
+
});
|
|
1579
|
+
if (proc.status === 0)
|
|
1580
|
+
return true;
|
|
1581
|
+
const errMsg = proc.stderr.toString().trim();
|
|
1582
|
+
console.error(` \x1B[31m✗\x1B[0m ${varName} [${env}]: ${errMsg}`);
|
|
1583
|
+
return false;
|
|
1584
|
+
};
|
|
1571
1585
|
for (const secret of secrets) {
|
|
1586
|
+
const varNames = secret.name !== secret.opaque ? [secret.opaque, secret.name] : [secret.opaque];
|
|
1572
1587
|
for (const env of environments) {
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
if (proc.status === 0) {
|
|
1581
|
-
console.log(` \x1B[32m✓\x1B[0m ${secret.name} → ${secret.opaque} [${env}]`);
|
|
1582
|
-
success++;
|
|
1583
|
-
} else {
|
|
1584
|
-
const errMsg = proc.stderr.toString().trim();
|
|
1585
|
-
console.error(` \x1B[31m✗\x1B[0m ${secret.name} → ${secret.opaque} [${env}]: ${errMsg}`);
|
|
1586
|
-
failed++;
|
|
1588
|
+
for (const varName of varNames) {
|
|
1589
|
+
if (pushVar(varName, secret.value, env)) {
|
|
1590
|
+
console.log(` \x1B[32m✓\x1B[0m ${varName} [${env}]`);
|
|
1591
|
+
success++;
|
|
1592
|
+
} else {
|
|
1593
|
+
failed++;
|
|
1594
|
+
}
|
|
1587
1595
|
}
|
|
1588
1596
|
}
|
|
1589
1597
|
}
|