ragevault 0.2.3

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.
Files changed (72) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +350 -0
  3. package/dist/assets.d.ts +14 -0
  4. package/dist/assets.js +47 -0
  5. package/dist/assets.js.map +1 -0
  6. package/dist/audit.d.ts +35 -0
  7. package/dist/audit.js +79 -0
  8. package/dist/audit.js.map +1 -0
  9. package/dist/branding.d.ts +36 -0
  10. package/dist/branding.js +55 -0
  11. package/dist/branding.js.map +1 -0
  12. package/dist/crypto/cipher.d.ts +74 -0
  13. package/dist/crypto/cipher.js +95 -0
  14. package/dist/crypto/cipher.js.map +1 -0
  15. package/dist/crypto/cipher.test.d.ts +7 -0
  16. package/dist/crypto/cipher.test.js +50 -0
  17. package/dist/crypto/cipher.test.js.map +1 -0
  18. package/dist/generator.d.ts +36 -0
  19. package/dist/generator.js +114 -0
  20. package/dist/generator.js.map +1 -0
  21. package/dist/model.d.ts +96 -0
  22. package/dist/model.js +43 -0
  23. package/dist/model.js.map +1 -0
  24. package/dist/porters.d.ts +35 -0
  25. package/dist/porters.js +175 -0
  26. package/dist/porters.js.map +1 -0
  27. package/dist/prompt.d.ts +14 -0
  28. package/dist/prompt.js +56 -0
  29. package/dist/prompt.js.map +1 -0
  30. package/dist/ragevault.d.ts +22 -0
  31. package/dist/ragevault.js +814 -0
  32. package/dist/ragevault.js.map +1 -0
  33. package/dist/server/public/app.js +420 -0
  34. package/dist/server/public/apple-touch-icon.png +0 -0
  35. package/dist/server/public/favicon.png +0 -0
  36. package/dist/server/public/fonts/archivo.woff2 +0 -0
  37. package/dist/server/public/fonts/space-grotesk.woff2 +0 -0
  38. package/dist/server/public/icon-192.png +0 -0
  39. package/dist/server/public/icon-512.png +0 -0
  40. package/dist/server/public/icon-maskable.png +0 -0
  41. package/dist/server/public/index.html +225 -0
  42. package/dist/server/public/manifest.webmanifest +16 -0
  43. package/dist/server/public/styles.css +362 -0
  44. package/dist/server/public/sw.js +30 -0
  45. package/dist/server/server.d.ts +30 -0
  46. package/dist/server/server.js +410 -0
  47. package/dist/server/server.js.map +1 -0
  48. package/dist/server/session.d.ts +36 -0
  49. package/dist/server/session.js +89 -0
  50. package/dist/server/session.js.map +1 -0
  51. package/dist/store/vaultfile.d.ts +64 -0
  52. package/dist/store/vaultfile.js +110 -0
  53. package/dist/store/vaultfile.js.map +1 -0
  54. package/dist/store/vaultfile.test.d.ts +5 -0
  55. package/dist/store/vaultfile.test.js +45 -0
  56. package/dist/store/vaultfile.test.js.map +1 -0
  57. package/dist/totp.d.ts +26 -0
  58. package/dist/totp.js +88 -0
  59. package/dist/totp.js.map +1 -0
  60. package/dist/totp.test.d.ts +5 -0
  61. package/dist/totp.test.js +41 -0
  62. package/dist/totp.test.js.map +1 -0
  63. package/dist/tui/ansi.d.ts +34 -0
  64. package/dist/tui/ansi.js +52 -0
  65. package/dist/tui/ansi.js.map +1 -0
  66. package/dist/tui/app.d.ts +83 -0
  67. package/dist/tui/app.js +607 -0
  68. package/dist/tui/app.js.map +1 -0
  69. package/dist/update/channel.d.ts +53 -0
  70. package/dist/update/channel.js +135 -0
  71. package/dist/update/channel.js.map +1 -0
  72. package/package.json +68 -0
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Import / export — get your secrets in and out.
3
+ *
4
+ * Import understands the common CSV shapes (generic, Bitwarden, Chrome/Firefox,
5
+ * KeePass) by sniffing the header row. Export writes a portable JSON or CSV —
6
+ * necessarily *plaintext*, so callers must warn loudly and clean up after.
7
+ *
8
+ * Part of RageVault.
9
+ * Crafted by SoyRage Agency — https://soyrage.es/
10
+ * MIT licensed (see LICENSE).
11
+ */
12
+ import { newId } from "./model.js";
13
+ /** A minimal, correct CSV parser (RFC 4180-ish: quotes, escaped quotes, CRLF). */
14
+ export function parseCsv(text) {
15
+ const rows = [];
16
+ let row = [], field = "", inQuotes = false;
17
+ for (let i = 0; i < text.length; i++) {
18
+ const ch = text[i];
19
+ if (inQuotes) {
20
+ if (ch === '"') {
21
+ if (text[i + 1] === '"') {
22
+ field += '"';
23
+ i++;
24
+ }
25
+ else
26
+ inQuotes = false;
27
+ }
28
+ else
29
+ field += ch;
30
+ }
31
+ else if (ch === '"')
32
+ inQuotes = true;
33
+ else if (ch === ",") {
34
+ row.push(field);
35
+ field = "";
36
+ }
37
+ else if (ch === "\n") {
38
+ row.push(field);
39
+ rows.push(row);
40
+ row = [];
41
+ field = "";
42
+ }
43
+ else if (ch === "\r") { /* skip */ }
44
+ else
45
+ field += ch;
46
+ }
47
+ if (field.length || row.length) {
48
+ row.push(field);
49
+ rows.push(row);
50
+ }
51
+ return rows.filter((r) => r.some((c) => c.trim() !== ""));
52
+ }
53
+ const COLS = {
54
+ title: ["name", "title", "account"],
55
+ username: ["username", "login_username", "login", "email", "user"],
56
+ password: ["password", "login_password", "pass"],
57
+ url: ["url", "uri", "login_uri", "website", "urls"],
58
+ notes: ["notes", "note", "comments"],
59
+ totp: ["totp", "otpauth", "login_totp", "2fa", "one-time password", "otpauth url"],
60
+ category: ["folder", "category", "group", "grouping", "vault"],
61
+ };
62
+ function indexFor(header, names) {
63
+ const lower = header.map((h) => h.trim().toLowerCase());
64
+ for (const n of names) {
65
+ const i = lower.indexOf(n);
66
+ if (i !== -1)
67
+ return i;
68
+ }
69
+ return -1;
70
+ }
71
+ /** Import items from CSV text. Returns the parsed items + how columns mapped. */
72
+ export function importCsv(text) {
73
+ const rows = parseCsv(text);
74
+ if (rows.length < 2)
75
+ return { items: [], mapped: {} };
76
+ const header = rows[0];
77
+ const idx = Object.fromEntries(Object.entries(COLS).map(([k, names]) => [k, indexFor(header, names)]));
78
+ const now = new Date().toISOString();
79
+ const items = [];
80
+ for (const r of rows.slice(1)) {
81
+ const get = (k) => (idx[k] >= 0 ? (r[idx[k]] ?? "").trim() : "");
82
+ const title = get("title") || get("url") || "(untitled)";
83
+ items.push({
84
+ id: newId(), title,
85
+ username: get("username") || undefined,
86
+ password: get("password") || "",
87
+ url: get("url") || undefined,
88
+ notes: get("notes") || undefined,
89
+ totp: get("totp") || undefined,
90
+ tags: [], favorite: false, createdAt: now, updatedAt: now, history: [],
91
+ });
92
+ }
93
+ const mapped = Object.fromEntries(Object.entries(idx).filter(([, v]) => v >= 0).map(([k, v]) => [k, header[v]]));
94
+ return { items, mapped };
95
+ }
96
+ /** Import a Bitwarden JSON export (`{ items:[{ login:{...} }], folders:[...] }`). */
97
+ export function importBitwardenJson(j) {
98
+ const now = new Date().toISOString();
99
+ const list = Array.isArray(j.items) ? j.items : [];
100
+ return list.map((i) => {
101
+ const login = (i.login ?? {});
102
+ const uris = Array.isArray(login.uris) ? login.uris : [];
103
+ return {
104
+ id: newId(), title: String(i.name ?? "(untitled)"),
105
+ username: login.username ? String(login.username) : undefined,
106
+ password: login.password ? String(login.password) : "",
107
+ url: uris[0]?.uri ? String(uris[0].uri) : undefined,
108
+ notes: i.notes ? String(i.notes) : undefined,
109
+ totp: login.totp ? String(login.totp) : undefined,
110
+ tags: [], favorite: Boolean(i.favorite), createdAt: now, updatedAt: now, history: [],
111
+ };
112
+ });
113
+ }
114
+ /** Import a Proton Pass JSON export (`{ vaults: { id: { items:[{ data:{...} }] } } }`). */
115
+ export function importProtonPassJson(j) {
116
+ const now = new Date().toISOString();
117
+ const out = [];
118
+ const vaults = (j.vaults ?? {});
119
+ for (const vault of Object.values(vaults)) {
120
+ for (const it of vault.items ?? []) {
121
+ const data = (it.data ?? {});
122
+ const meta = (data.metadata ?? {});
123
+ const content = (data.content ?? {});
124
+ const urls = Array.isArray(content.urls) ? content.urls : [];
125
+ if (!meta.name && !content.password)
126
+ continue;
127
+ out.push({
128
+ id: newId(), title: String(meta.name ?? "(untitled)"),
129
+ username: (content.itemEmail ?? content.username) ? String(content.itemEmail ?? content.username) : undefined,
130
+ password: content.password ? String(content.password) : "",
131
+ url: urls[0] ? String(urls[0]) : undefined,
132
+ notes: meta.note ? String(meta.note) : undefined,
133
+ totp: content.totpUri ? String(content.totpUri) : undefined,
134
+ tags: [], favorite: false, createdAt: now, updatedAt: now, history: [],
135
+ });
136
+ }
137
+ }
138
+ return out;
139
+ }
140
+ /**
141
+ * Auto-detect the export format and import: Bitwarden / Proton Pass JSON, a prior
142
+ * RageVault JSON, or CSV (1Password / Chrome / KeePass / generic).
143
+ */
144
+ export function importAny(content, _filename = "") {
145
+ const t = content.trim();
146
+ if (t.startsWith("{")) {
147
+ try {
148
+ const j = JSON.parse(t);
149
+ if (j.vaults)
150
+ return { items: importProtonPassJson(j), source: "Proton Pass (JSON)" };
151
+ if (Array.isArray(j.items) && !j.meta)
152
+ return { items: importBitwardenJson(j), source: "Bitwarden (JSON)" };
153
+ if (j.meta && Array.isArray(j.items))
154
+ return { items: j.items ?? [], source: "RageVault (JSON)" };
155
+ }
156
+ catch { /* fall through to CSV */ }
157
+ }
158
+ const { items, mapped } = importCsv(content);
159
+ return { items, source: `CSV (${Object.keys(mapped).join(", ") || "generic"})` };
160
+ }
161
+ /** Export the vault to portable (PLAINTEXT) JSON. */
162
+ export function exportJson(data) {
163
+ return JSON.stringify(data, null, 2);
164
+ }
165
+ /** Export items to (PLAINTEXT) CSV in the generic shape most tools import. */
166
+ export function exportCsv(data) {
167
+ const esc = (s) => `"${(s ?? "").replace(/"/g, '""')}"`;
168
+ const cat = (id) => data.categories.find((c) => c.id === id)?.name ?? "";
169
+ const lines = ["name,url,username,password,notes,totp,category"];
170
+ for (const i of data.items) {
171
+ lines.push([i.title, i.url ?? "", i.username ?? "", i.password ?? "", i.notes ?? "", i.totp ?? "", cat(i.categoryId)].map(esc).join(","));
172
+ }
173
+ return lines.join("\n") + "\n";
174
+ }
175
+ //# sourceMappingURL=porters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"porters.js","sourceRoot":"","sources":["../src/porters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Tiny terminal prompt helpers — a line reader, a no-echo secret reader, and a
3
+ * yes/no. Kept dependency-free so the standalone binary stays self-contained.
4
+ *
5
+ * Part of RageVault.
6
+ * Crafted by SoyRage Agency — https://soyrage.es/
7
+ * MIT licensed (see LICENSE).
8
+ */
9
+ /** Prompt for a line of input, with an optional default. */
10
+ export declare function ask(question: string, fallback?: string): Promise<string>;
11
+ /** Prompt for a secret without echoing it (shows nothing as you type). */
12
+ export declare function askSecret(question: string): Promise<string>;
13
+ /** A yes/no confirmation (default no). */
14
+ export declare function confirm(question: string, def?: boolean): Promise<boolean>;
package/dist/prompt.js ADDED
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Tiny terminal prompt helpers — a line reader, a no-echo secret reader, and a
3
+ * yes/no. Kept dependency-free so the standalone binary stays self-contained.
4
+ *
5
+ * Part of RageVault.
6
+ * Crafted by SoyRage Agency — https://soyrage.es/
7
+ * MIT licensed (see LICENSE).
8
+ */
9
+ import { createInterface } from "node:readline";
10
+ /** Prompt for a line of input, with an optional default. */
11
+ export function ask(question, fallback = "") {
12
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
13
+ const suffix = fallback ? ` [${fallback}]` : "";
14
+ return new Promise((resolve) => rl.question(` ${question}${suffix} `, (a) => { rl.close(); resolve(a.trim() || fallback); }));
15
+ }
16
+ /** Prompt for a secret without echoing it (shows nothing as you type). */
17
+ export function askSecret(question) {
18
+ return new Promise((resolve) => {
19
+ const stdin = process.stdin;
20
+ const wasRaw = stdin.isRaw;
21
+ process.stdout.write(` ${question} `);
22
+ let value = "";
23
+ const onData = (chunk) => {
24
+ const s = chunk.toString("utf8");
25
+ if (s === "\r" || s === "\n") {
26
+ stdin.removeListener("data", onData);
27
+ if (stdin.isTTY && !wasRaw)
28
+ stdin.setRawMode(false);
29
+ stdin.pause();
30
+ process.stdout.write("\n");
31
+ resolve(value);
32
+ return;
33
+ }
34
+ if (s === "\x7f" || s === "\b") {
35
+ value = value.slice(0, -1);
36
+ return;
37
+ }
38
+ if (s === "\x03") {
39
+ process.stdout.write("\n");
40
+ process.exit(130);
41
+ }
42
+ if (s >= " ")
43
+ value += s;
44
+ };
45
+ if (stdin.isTTY)
46
+ stdin.setRawMode(true);
47
+ stdin.resume();
48
+ stdin.on("data", onData);
49
+ });
50
+ }
51
+ /** A yes/no confirmation (default no). */
52
+ export async function confirm(question, def = false) {
53
+ const a = await ask(`${question} ${def ? "(Y/n)" : "(y/N)"}`, def ? "y" : "n");
54
+ return /^y/i.test(a);
55
+ }
56
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * `ragevault` — the command-line front door to your self-hosted vault.
4
+ *
5
+ * ragevault init create an encrypted vault (asks a master key)
6
+ * ragevault add add a secret (generate or type the password)
7
+ * ragevault ls [query] list items — secrets stay blurred
8
+ * ragevault get <query> [--reveal|--copy]
9
+ * ragevault gen [--length N | --words N | --pronounceable]
10
+ * ragevault passwd change the master password (fast re-wrap)
11
+ * ragevault users [add <name> <role>]
12
+ * ragevault wg set up WireGuard for remote access (optional)
13
+ * ragevault version
14
+ *
15
+ * Secrets are shown blurred (••••••) by default; you ask to reveal or copy them,
16
+ * so a shoulder-surfer never sees every password at a glance.
17
+ *
18
+ * Part of RageVault.
19
+ * Crafted by SoyRage Agency — https://soyrage.es/
20
+ * MIT licensed (see LICENSE).
21
+ */
22
+ export {};