@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/config.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import { readFile, writeFile } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
+ import { readDotEnv, writeDotEnv } from "./dotenv.js";
4
+ import { warnSensitive } from "./sensitive.js";
3
5
  const DEFAULT_CONFIG = {
4
6
  imageQuality: 85,
5
7
  maxFileBytes: 25 * 1024 * 1024,
@@ -8,8 +10,23 @@ const DEFAULT_CONFIG = {
8
10
  rolePasswords: {},
9
11
  };
10
12
  const CONFIG_FILE = ".vaultrc.json";
13
+ // Env var names — same as the Wrangler secret names so the .env line you
14
+ // write is exactly what gets uploaded as the Cloudflare Pages secret.
15
+ const ENV_SESSION_SECRET = "SESSION_SECRET";
16
+ const ENV_PATREON_CLIENT_SECRET = "PATREON_CLIENT_SECRET";
17
+ /**
18
+ * Read config from `.vaultrc.json` + `.env` + process.env.
19
+ *
20
+ * Precedence (lowest → highest): defaults → .vaultrc.json → .env → process.env → overrides.
21
+ *
22
+ * Secrets follow the same precedence but with one extra source: legacy
23
+ * `.vaultrc.json` files that still have `sessionSecret` or
24
+ * `patreon.clientSecret` baked in. Those values get used at load time and
25
+ * silently migrated to `.env` on the next save.
26
+ */
11
27
  export async function loadConfig(vaultPath, overrides) {
12
28
  const fileConfig = await readFileConfig(vaultPath);
29
+ const dotEnv = await readDotEnv(vaultPath);
13
30
  const envConfig = readEnvConfig();
14
31
  const merged = {
15
32
  ...DEFAULT_CONFIG,
@@ -17,29 +34,87 @@ export async function loadConfig(vaultPath, overrides) {
17
34
  ...envConfig,
18
35
  ...overrides,
19
36
  };
37
+ // Secrets: prefer process.env → .env → legacy .vaultrc.json. The latter
38
+ // is back-compat only.
39
+ const sessionFromEnv = process.env[ENV_SESSION_SECRET] || dotEnv[ENV_SESSION_SECRET];
40
+ if (sessionFromEnv)
41
+ merged.sessionSecret = sessionFromEnv;
42
+ if (merged.patreon) {
43
+ const patreonSecretFromEnv = process.env[ENV_PATREON_CLIENT_SECRET] || dotEnv[ENV_PATREON_CLIENT_SECRET];
44
+ if (patreonSecretFromEnv) {
45
+ merged.patreon = { ...merged.patreon, clientSecret: patreonSecretFromEnv };
46
+ }
47
+ }
20
48
  // Deep-clone the mutable fields so callers can mutate (push to roles,
21
49
  // assign to rolePasswords) without mutating DEFAULT_CONFIG by reference.
22
50
  return {
23
51
  ...merged,
24
52
  roles: [...merged.roles],
25
53
  rolePasswords: { ...merged.rolePasswords },
54
+ ...(merged.patreon ? {
55
+ patreon: { ...merged.patreon, tiers: { ...(merged.patreon.tiers ?? {}) } },
56
+ } : {}),
26
57
  };
27
58
  }
28
59
  /**
29
- * Persist the full config back to .vaultrc.json. The CLI uses this whenever
30
- * it mutates auth state (role add/remove/promote/demote, password reset,
31
- * sessionSecret generation, projectName saved on first push).
60
+ * Persist config + secrets to disk. Config goes to `.vaultrc.json`
61
+ * (trackable); secrets go to `.env` (gitignored). Per-process one-shot
62
+ * warning if `.env` lives in a git repo without being gitignored.
63
+ *
64
+ * Migration: any legacy secrets we find in `.vaultrc.json` get moved to
65
+ * `.env` on the first save. The user's git history will still contain
66
+ * them, so they should rotate any session secret that was ever pushed.
32
67
  */
68
+ const warnedVaults = new Set();
33
69
  export async function saveConfig(vaultPath, cfg) {
34
- // Strip default-equal fields so the on-disk file stays minimal.
70
+ // Build the trackable config. Secrets are excluded; defaults stripped.
35
71
  const out = {};
36
72
  for (const k of Object.keys(cfg)) {
73
+ if (k === "sessionSecret")
74
+ continue; // → .env
37
75
  const v = cfg[k];
76
+ if (k === "patreon" && v) {
77
+ const { clientSecret: _drop, ...rest } = v;
78
+ out.patreon = rest;
79
+ continue;
80
+ }
38
81
  if (deepEqual(v, DEFAULT_CONFIG[k]))
39
82
  continue;
40
83
  out[k] = v;
41
84
  }
42
85
  await writeFile(join(vaultPath, CONFIG_FILE), JSON.stringify(out, null, 2) + "\n");
86
+ // Mirror secrets to .env. Use null to delete keys that are no longer set
87
+ // so a user clearing Patreon doesn't leave a stray client secret behind.
88
+ const envUpdates = {
89
+ [ENV_SESSION_SECRET]: cfg.sessionSecret || null,
90
+ [ENV_PATREON_CLIENT_SECRET]: cfg.patreon?.clientSecret || null,
91
+ };
92
+ // Only touch .env if there's something to set/clear; avoids creating an
93
+ // empty .env in vaults that don't have any secrets.
94
+ const hasAnySecret = Object.values(envUpdates).some((v) => v != null);
95
+ if (hasAnySecret || (await readDotEnv(vaultPath))[ENV_SESSION_SECRET] || (await readDotEnv(vaultPath))[ENV_PATREON_CLIENT_SECRET]) {
96
+ await writeDotEnv(vaultPath, envUpdates);
97
+ }
98
+ if (!warnedVaults.has(vaultPath)) {
99
+ warnedVaults.add(vaultPath);
100
+ if (hasAnySecret) {
101
+ const what = describeSecrets(cfg);
102
+ if (what)
103
+ await warnSensitive(vaultPath, ".env", what);
104
+ }
105
+ }
106
+ }
107
+ function describeSecrets(cfg) {
108
+ const parts = [];
109
+ if (cfg.sessionSecret)
110
+ parts.push("the session-signing key");
111
+ if (cfg.patreon?.clientSecret)
112
+ parts.push("a Patreon client secret");
113
+ if (parts.length === 0)
114
+ return null;
115
+ return parts.length === 1
116
+ ? parts[0]
117
+ : parts.slice(0, -1).join(", ") + " and " + parts[parts.length - 1];
43
118
  }
44
119
  export async function saveSessionSecret(vaultPath, secret) {
45
120
  const cfg = await loadConfig(vaultPath, {});
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AA0D/C,MAAM,cAAc,GAAgB;IAClC,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;IAC9B,KAAK,EAAE,CAAC,QAAQ,CAAC;IACjB,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,EAAE;CAClB,CAAC;AAEF,MAAM,WAAW,GAAG,eAAe,CAAC;AAEpC,yEAAyE;AACzE,sEAAsE;AACtE,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAC5C,MAAM,yBAAyB,GAAG,uBAAuB,CAAC;AAE1D;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,SAAiB,EAAE,SAA+B;IACjF,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG;QACb,GAAG,cAAc;QACjB,GAAG,UAAU;QACb,GAAG,SAAS;QACZ,GAAG,SAAS;KACb,CAAC;IAEF,wEAAwE;IACxE,uBAAuB;IACvB,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACrF,IAAI,cAAc;QAAE,MAAM,CAAC,aAAa,GAAG,cAAc,CAAC;IAE1D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACzG,IAAI,oBAAoB,EAAE,CAAC;YACzB,MAAM,CAAC,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,yEAAyE;IACzE,OAAO;QACL,GAAG,MAAM;QACT,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACxB,aAAa,EAAE,EAAE,GAAG,MAAM,CAAC,aAAa,EAAE;QAC1C,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACnB,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,EAAE;SAC3E,CAAC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;AAEvC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,SAAiB,EAAE,GAAgB;IAClE,uEAAuE;IACvE,MAAM,GAAG,GAAyB,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAA0B,EAAE,CAAC;QAC1D,IAAI,CAAC,KAAK,eAAe;YAAE,SAAS,CAAC,SAAS;QAC9C,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,CAAkB,CAAC;YAC5D,GAAG,CAAC,OAAO,GAAG,IAAqB,CAAC;YACpC,SAAS;QACX,CAAC;QACD,IAAI,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAsB,CAAY,CAAC;YAAE,SAAS;QAC7E,GAA+B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEnF,yEAAyE;IACzE,yEAAyE;IACzE,MAAM,UAAU,GAAkC;QAChD,CAAC,kBAAkB,CAAC,EAAE,GAAG,CAAC,aAAa,IAAI,IAAI;QAC/C,CAAC,yBAAyB,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,YAAY,IAAI,IAAI;KAC/D,CAAC;IACF,wEAAwE;IACxE,oDAAoD;IACpD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IACtE,IAAI,YAAY,IAAI,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,EAAE,CAAC;QAClI,MAAM,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5B,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,IAAI;gBAAE,MAAM,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAgB;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,GAAG,CAAC,aAAa;QAAE,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC7D,IAAI,GAAG,CAAC,OAAO,EAAE,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACrE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;QACvB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE;QACX,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAiB,EAAE,MAAc;IACvE,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC5C,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC;IAC3B,MAAM,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,SAAiB;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,GAAG,GAAyB,EAAE,CAAC;IACrC,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAAE,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACrF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,SAAS,CAAC,CAAU,EAAE,CAAU;IACvC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC7D,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAA4B,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAA4B,CAAC,CAAC;QACrD,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1C,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAC7B,CAA6B,CAAC,CAAC,CAAC,EAChC,CAA6B,CAAC,CAAC,CAAC,CAClC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
package/dist/dotenv.js ADDED
@@ -0,0 +1,112 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ // Minimal POSIX-shell-friendly .env reader/writer. Just enough to support
4
+ // the secrets-only use case (SESSION_SECRET, PATREON_CLIENT_SECRET); not a
5
+ // full dotenv replacement. We avoid pulling in `dotenv` as a dep to keep
6
+ // the CLI's transitive surface small.
7
+ //
8
+ // Supported on read:
9
+ // - blank lines and `# comment` lines skipped
10
+ // - `KEY=value` (no spaces around =), unquoted, single, or double quoted
11
+ // - quoted values may contain `\n` (single-line; we don't try multiline)
12
+ // Not supported (silently ignored, like most parsers):
13
+ // - shell expansion, `$VAR` substitution, `export KEY=...`, multiline
14
+ //
15
+ // On write we preserve order, comments, and unrelated lines; only the keys
16
+ // we manage get rewritten. New keys are appended.
17
+ const ENV_FILE = ".env";
18
+ export async function readDotEnv(vaultPath) {
19
+ let raw;
20
+ try {
21
+ raw = await readFile(join(vaultPath, ENV_FILE), "utf8");
22
+ }
23
+ catch {
24
+ return {};
25
+ }
26
+ const out = {};
27
+ for (const line of raw.split(/\r?\n/)) {
28
+ const parsed = parseEnvLine(line);
29
+ if (parsed)
30
+ out[parsed.key] = parsed.value;
31
+ }
32
+ return out;
33
+ }
34
+ function parseEnvLine(line) {
35
+ const trimmed = line.trim();
36
+ if (!trimmed || trimmed.startsWith("#"))
37
+ return null;
38
+ // Allow `export KEY=...` for users who source .env in their shell.
39
+ const stripped = trimmed.startsWith("export ") ? trimmed.slice(7).trim() : trimmed;
40
+ const eq = stripped.indexOf("=");
41
+ if (eq <= 0)
42
+ return null;
43
+ const key = stripped.slice(0, eq).trim();
44
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key))
45
+ return null;
46
+ let value = stripped.slice(eq + 1).trim();
47
+ if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
48
+ value = value.slice(1, -1);
49
+ }
50
+ return { key, value };
51
+ }
52
+ /**
53
+ * Update one or more keys in the vault's .env. Pass `null` for a value to
54
+ * remove that key. Preserves the file's existing layout (comments, line
55
+ * order, unrelated keys) so a hand-edited .env stays readable.
56
+ */
57
+ export async function writeDotEnv(vaultPath, updates) {
58
+ const path = join(vaultPath, ENV_FILE);
59
+ let lines = [];
60
+ let exists = true;
61
+ try {
62
+ lines = (await readFile(path, "utf8")).split(/\r?\n/);
63
+ }
64
+ catch {
65
+ exists = false;
66
+ }
67
+ const handled = new Set();
68
+ const out = [];
69
+ for (const line of lines) {
70
+ const parsed = parseEnvLine(line);
71
+ if (!parsed || !(parsed.key in updates)) {
72
+ out.push(line);
73
+ continue;
74
+ }
75
+ handled.add(parsed.key);
76
+ const next = updates[parsed.key];
77
+ if (next == null)
78
+ continue; // delete the line
79
+ out.push(`${parsed.key}=${quoteEnvValue(next)}`);
80
+ }
81
+ // Append new keys not seen in the existing file.
82
+ const appended = [];
83
+ for (const [key, val] of Object.entries(updates)) {
84
+ if (val == null || handled.has(key))
85
+ continue;
86
+ appended.push(`${key}=${quoteEnvValue(val)}`);
87
+ }
88
+ if (appended.length > 0) {
89
+ if (out.length > 0 && out[out.length - 1] !== "")
90
+ out.push("");
91
+ out.push(...appended);
92
+ }
93
+ // Trim trailing blank lines but keep one, so concatenation stays clean.
94
+ while (out.length > 1 && out[out.length - 1] === "" && out[out.length - 2] === "")
95
+ out.pop();
96
+ if (out.length === 0 || out[out.length - 1] !== "")
97
+ out.push("");
98
+ // Don't write an empty .env if the file didn't already exist and we
99
+ // had nothing to add.
100
+ if (!exists && out.every((l) => l === ""))
101
+ return;
102
+ await writeFile(path, out.join("\n"));
103
+ }
104
+ function quoteEnvValue(value) {
105
+ // Bare-token chars that don't need quoting — letters, digits, and a few
106
+ // safe punctuation. Anything else (including spaces or shell glob chars)
107
+ // gets double-quoted with backslash-escapes.
108
+ if (/^[A-Za-z0-9._\-+@%~:/]*$/.test(value))
109
+ return value;
110
+ return `"${value.replace(/[\\"$`]/g, (c) => "\\" + c)}"`;
111
+ }
112
+ //# sourceMappingURL=dotenv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dotenv.js","sourceRoot":"","sources":["../src/dotenv.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ import { preview } from "./commands/preview.js";
6
6
  import { init } from "./commands/init.js";
7
7
  import { password } from "./commands/password.js";
8
8
  import { roleAdd, roleDemote, roleList, rolePromote, roleRemove } from "./commands/role.js";
9
+ import { patreonClear, patreonConfigure, patreonLink, patreonStatus, patreonUnlink } from "./commands/patreon.js";
9
10
  const program = new Command();
10
11
  // Default vault path: honour $VAULT_PATH first so users can drop
11
12
  // `export VAULT_PATH=~/Documents/MyVault` in their shell rc and not pass it
@@ -101,6 +102,77 @@ program
101
102
  process.exit(1);
102
103
  }
103
104
  });
105
+ const patreon = program
106
+ .command("patreon")
107
+ .description("Configure optional Patreon OAuth login for paying-tier roles");
108
+ patreon
109
+ .command("configure")
110
+ .description("Set Patreon OAuth client_id / client_secret / campaign_id")
111
+ .argument("[vault-path]", "Path to the Obsidian vault", VAULT_PATH_DEFAULT)
112
+ .action(async (vaultPath) => {
113
+ try {
114
+ await patreonConfigure(vaultPath);
115
+ }
116
+ catch (err) {
117
+ console.error(err instanceof Error ? err.message : err);
118
+ process.exit(1);
119
+ }
120
+ });
121
+ patreon
122
+ .command("link")
123
+ .description("Map a role to a Patreon tier ID (find tier IDs on patreon.com under your tier list)")
124
+ .argument("<role>", "Role name (must already exist)")
125
+ .argument("<tier-id>", "Patreon tier ID (numeric)")
126
+ .argument("[vault-path]", "Path to the Obsidian vault", VAULT_PATH_DEFAULT)
127
+ .action(async (role, tierId, vaultPath) => {
128
+ try {
129
+ await patreonLink(role, tierId, vaultPath);
130
+ }
131
+ catch (err) {
132
+ console.error(err instanceof Error ? err.message : err);
133
+ process.exit(1);
134
+ }
135
+ });
136
+ patreon
137
+ .command("unlink")
138
+ .description("Remove a role's Patreon tier mapping (password access stays)")
139
+ .argument("<role>", "Role name")
140
+ .argument("[vault-path]", "Path to the Obsidian vault", VAULT_PATH_DEFAULT)
141
+ .action(async (role, vaultPath) => {
142
+ try {
143
+ await patreonUnlink(role, vaultPath);
144
+ }
145
+ catch (err) {
146
+ console.error(err instanceof Error ? err.message : err);
147
+ process.exit(1);
148
+ }
149
+ });
150
+ patreon
151
+ .command("clear")
152
+ .description("Remove the entire Patreon configuration")
153
+ .argument("[vault-path]", "Path to the Obsidian vault", VAULT_PATH_DEFAULT)
154
+ .action(async (vaultPath) => {
155
+ try {
156
+ await patreonClear(vaultPath);
157
+ }
158
+ catch (err) {
159
+ console.error(err instanceof Error ? err.message : err);
160
+ process.exit(1);
161
+ }
162
+ });
163
+ patreon
164
+ .command("status")
165
+ .description("Show current Patreon configuration + tier mappings")
166
+ .argument("[vault-path]", "Path to the Obsidian vault", VAULT_PATH_DEFAULT)
167
+ .action(async (vaultPath) => {
168
+ try {
169
+ await patreonStatus(vaultPath);
170
+ }
171
+ catch (err) {
172
+ console.error(err instanceof Error ? err.message : err);
173
+ process.exit(1);
174
+ }
175
+ });
104
176
  program
105
177
  .command("init")
106
178
  .description("Initialise a vault with a settings.md file")
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE5F,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,iEAAiE;AACjE,4EAA4E;AAC5E,uCAAuC;AACvC,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AAEnE,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,oDAAoD,CAAC;KACjE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,MAAM,IAAI,GAAG,OAAO;KACjB,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0CAA0C,CAAC,CAAC;AAE3D,IAAI;KACD,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,yDAAyD,CAAC;KACtE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC/B,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE;IAChD,IAAI,CAAC;QAAC,MAAM,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAAC,CAAC;IACvC,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,IAAI;KACD,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC/B,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE;IAChD,IAAI,CAAC;QAAC,MAAM,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAAC,CAAC;IAC1C,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,IAAI;KACD,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,sCAAsC,CAAC;KACnD,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,EAAE;IAClC,IAAI,CAAC;QAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;IAAC,CAAC;IAClC,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,IAAI;KACD,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,8DAA8D,CAAC;KAC3E,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC/B,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE;IAChD,IAAI,CAAC;QAAC,MAAM,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAAC,CAAC;IAC3C,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,IAAI;KACD,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yDAAyD,CAAC;KACtE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC/B,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE;IAChD,IAAI,CAAC;QAAC,MAAM,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAAC,CAAC;IAC1C,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,yCAAyC,CAAC;KACtD,QAAQ,CAAC,QAAQ,EAAE,gCAAgC,CAAC;KACpD,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE;IAChD,IAAI,CAAC;QAAC,MAAM,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAAC,CAAC;IAC5C,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4CAA4C,CAAC;KACzD,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,aAAa,EAAE,mCAAmC,CAAC;KAC1D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAEtB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,oBAAoB,EAAE,2DAA2D,CAAC;KACzF,MAAM,CAAC,yBAAyB,EAAE,yCAAyC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KACpG,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,EAAE,OAAO,CAAC;KACxE,MAAM,CAAC,gBAAgB,EAAE,4DAA4D,CAAC;KACtF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,gFAAgF,CAAC;KAC7F,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,oBAAoB,EAAE,2DAA2D,CAAC;KACzF,MAAM,CAAC,gBAAgB,EAAE,6BAA6B,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;KACrF,MAAM,CAAC,yBAAyB,EAAE,yCAAyC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KACpG,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,EAAE,OAAO,CAAC;KACxE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,iDAAiD,CAAC;KAC9D,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,2BAA2B,EAAE,+BAA+B,CAAC;KACpE,MAAM,CAAC,yBAAyB,EAAE,yCAAyC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KACpG,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,EAAE,OAAO,CAAC;KACxE,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;KAC/C,MAAM,CAAC,iBAAiB,EAAE,iEAAiE,CAAC;KAC5F,MAAM,CAAC,gBAAgB,EAAE,4DAA4D,CAAC;KACtF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAEtB,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,SAAS,IAAI,CAAgD,EAAK;IAChE,OAAO,KAAK,EAAE,GAAG,IAAmB,EAAE,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAElH,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,iEAAiE;AACjE,4EAA4E;AAC5E,uCAAuC;AACvC,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AAEnE,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,oDAAoD,CAAC;KACjE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,MAAM,IAAI,GAAG,OAAO;KACjB,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0CAA0C,CAAC,CAAC;AAE3D,IAAI;KACD,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,yDAAyD,CAAC;KACtE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC/B,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE;IAChD,IAAI,CAAC;QAAC,MAAM,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAAC,CAAC;IACvC,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,IAAI;KACD,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC/B,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE;IAChD,IAAI,CAAC;QAAC,MAAM,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAAC,CAAC;IAC1C,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,IAAI;KACD,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,sCAAsC,CAAC;KACnD,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,EAAE;IAClC,IAAI,CAAC;QAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;IAAC,CAAC;IAClC,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,IAAI;KACD,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,8DAA8D,CAAC;KAC3E,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC/B,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE;IAChD,IAAI,CAAC;QAAC,MAAM,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAAC,CAAC;IAC3C,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,IAAI;KACD,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yDAAyD,CAAC;KACtE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC/B,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE;IAChD,IAAI,CAAC;QAAC,MAAM,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAAC,CAAC;IAC1C,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,yCAAyC,CAAC;KACtD,QAAQ,CAAC,QAAQ,EAAE,gCAAgC,CAAC;KACpD,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE;IAChD,IAAI,CAAC;QAAC,MAAM,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAAC,CAAC;IAC5C,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,MAAM,OAAO,GAAG,OAAO;KACpB,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,8DAA8D,CAAC,CAAC;AAE/E,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,2DAA2D,CAAC;KACxE,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,EAAE;IAClC,IAAI,CAAC;QAAC,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAAC,CAAC;IAC1C,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qFAAqF,CAAC;KAClG,QAAQ,CAAC,QAAQ,EAAE,gCAAgC,CAAC;KACpD,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC;KAClD,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,MAAc,EAAE,SAAiB,EAAE,EAAE;IAChE,IAAI,CAAC;QAAC,MAAM,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAAC,CAAC;IACnD,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,8DAA8D,CAAC;KAC3E,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC/B,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE;IAChD,IAAI,CAAC;QAAC,MAAM,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAAC,CAAC;IAC7C,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,yCAAyC,CAAC;KACtD,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,EAAE;IAClC,IAAI,CAAC;QAAC,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;IAAC,CAAC;IACtC,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,oDAAoD,CAAC;KACjE,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,EAAE;IAClC,IAAI,CAAC;QAAC,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;IAAC,CAAC;IACvC,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4CAA4C,CAAC;KACzD,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,aAAa,EAAE,mCAAmC,CAAC;KAC1D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAEtB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,oBAAoB,EAAE,2DAA2D,CAAC;KACzF,MAAM,CAAC,yBAAyB,EAAE,yCAAyC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KACpG,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,EAAE,OAAO,CAAC;KACxE,MAAM,CAAC,gBAAgB,EAAE,4DAA4D,CAAC;KACtF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,gFAAgF,CAAC;KAC7F,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,oBAAoB,EAAE,2DAA2D,CAAC;KACzF,MAAM,CAAC,gBAAgB,EAAE,6BAA6B,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;KACrF,MAAM,CAAC,yBAAyB,EAAE,yCAAyC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KACpG,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,EAAE,OAAO,CAAC;KACxE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,iDAAiD,CAAC;KAC9D,QAAQ,CAAC,cAAc,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,2BAA2B,EAAE,+BAA+B,CAAC;KACpE,MAAM,CAAC,yBAAyB,EAAE,yCAAyC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KACpG,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,EAAE,OAAO,CAAC;KACxE,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;KAC/C,MAAM,CAAC,iBAAiB,EAAE,iEAAiE,CAAC;KAC5F,MAAM,CAAC,gBAAgB,EAAE,4DAA4D,CAAC;KACtF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAEtB,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,SAAS,IAAI,CAAgD,EAAK;IAChE,OAAO,KAAK,EAAE,GAAG,IAAmB,EAAE,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}