@wizzlethorpe/vaults 0.5.0 → 0.6.1
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/build.js +55 -4
- package/dist/build.js.map +1 -1
- package/dist/commands/init.js +6 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/patreon.js +413 -0
- package/dist/commands/patreon.js.map +1 -0
- package/dist/commands/preview.js +7 -0
- package/dist/commands/preview.js.map +1 -1
- package/dist/commands/push.js +7 -0
- package/dist/commands/push.js.map +1 -1
- package/dist/config.js +79 -4
- package/dist/config.js.map +1 -1
- package/dist/dotenv.js +112 -0
- package/dist/dotenv.js.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -1
- package/dist/render/auth-template.js +434 -37
- package/dist/render/auth-template.js.map +1 -1
- package/dist/render/patreon-match.js +42 -0
- package/dist/render/patreon-match.js.map +1 -0
- package/dist/sensitive.js +60 -0
- package/dist/sensitive.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { stat } from "node:fs/promises";
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
3
|
+
import { dirname, join, relative } from "node:path";
|
|
4
|
+
/**
|
|
5
|
+
* Loud warning when a file that contains secrets is about to be written.
|
|
6
|
+
* Today's only secrets-bearing file is `.env` (session-signing key,
|
|
7
|
+
* Patreon client secret); `.vaultrc.json` itself is config-only as of
|
|
8
|
+
* the secrets split and is intentionally trackable.
|
|
9
|
+
*
|
|
10
|
+
* The check is best-effort: if `git` isn't on PATH, or the vault isn't
|
|
11
|
+
* inside a git repo, we still emit a quieter reminder. Never throws —
|
|
12
|
+
* a wrong gitignore guess shouldn't block writing the file.
|
|
13
|
+
*/
|
|
14
|
+
export async function warnSensitive(vaultPath, filePath, what = "the session-signing key and (when configured) the Patreon client secret") {
|
|
15
|
+
const gitRoot = await findGitRoot(vaultPath);
|
|
16
|
+
if (!gitRoot) {
|
|
17
|
+
console.warn(` \x1b[33m⚠\x1b[0m ${filePath} contains ${what}. `
|
|
18
|
+
+ `If you ever put this vault under git, gitignore it first.`);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const ignored = await isGitIgnored(gitRoot, vaultPath, filePath);
|
|
22
|
+
if (ignored)
|
|
23
|
+
return; // healthy state — silent
|
|
24
|
+
console.warn(`\n \x1b[31m⚠ SECURITY:\x1b[0m ${filePath} is NOT gitignored in this repo!`);
|
|
25
|
+
console.warn(` This file contains ${what}. Add it to .gitignore before committing.`);
|
|
26
|
+
console.warn(` cd ${gitRoot} && echo "${pathRelativeToRepoRoot(gitRoot, vaultPath, filePath)}" >> .gitignore\n`);
|
|
27
|
+
}
|
|
28
|
+
async function findGitRoot(start) {
|
|
29
|
+
let dir = start;
|
|
30
|
+
for (let i = 0; i < 32; i++) { // generous loop bound; protects against symlink cycles
|
|
31
|
+
try {
|
|
32
|
+
const s = await stat(join(dir, ".git"));
|
|
33
|
+
if (s.isDirectory() || s.isFile())
|
|
34
|
+
return dir;
|
|
35
|
+
}
|
|
36
|
+
catch { /* keep walking */ }
|
|
37
|
+
const parent = dirname(dir);
|
|
38
|
+
if (parent === dir)
|
|
39
|
+
return null;
|
|
40
|
+
dir = parent;
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
async function isGitIgnored(gitRoot, vaultPath, filePath) {
|
|
45
|
+
const fullPath = join(vaultPath, filePath);
|
|
46
|
+
return new Promise((resolve) => {
|
|
47
|
+
// `git check-ignore` exits 0 when the path IS ignored, 1 when not, 128
|
|
48
|
+
// on error. Errors (no git, permissions) → assume not ignored so we
|
|
49
|
+
// err on the side of warning.
|
|
50
|
+
const proc = spawn("git", ["-C", gitRoot, "check-ignore", "--quiet", fullPath], {
|
|
51
|
+
stdio: "ignore",
|
|
52
|
+
});
|
|
53
|
+
proc.on("exit", (code) => resolve(code === 0));
|
|
54
|
+
proc.on("error", () => resolve(false));
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function pathRelativeToRepoRoot(gitRoot, vaultPath, filePath) {
|
|
58
|
+
return relative(gitRoot, join(vaultPath, filePath)).split(/[/\\]/).join("/");
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=sensitive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitive.js","sourceRoot":"","sources":["../src/sensitive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEpD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAiB,EACjB,QAAgB,EAChB,OAAe,yEAAyE;IAExF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CACV,sBAAsB,QAAQ,aAAa,IAAI,IAAI;cACjD,2DAA2D,CAC9D,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjE,IAAI,OAAO;QAAE,OAAO,CAAC,yBAAyB;IAE9C,OAAO,CAAC,IAAI,CACV,kCAAkC,QAAQ,kCAAkC,CAC7E,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,2CAA2C,CAAC,CAAC;IACtF,OAAO,CAAC,IAAI,CACV,UAAU,OAAO,aAAa,sBAAsB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,mBAAmB,CACtG,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAAa;IACtC,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,uDAAuD;QACpF,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE;gBAAE,OAAO,GAAG,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,SAAiB,EAAE,QAAgB;IAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,uEAAuE;QACvE,oEAAoE;QACpE,8BAA8B;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE;YAC9E,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAe,EAAE,SAAiB,EAAE,QAAgB;IAClF,OAAO,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/E,CAAC"}
|
package/package.json
CHANGED