@yannelli/zoomies 0.0.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/LICENSE +21 -0
- package/README.md +97 -0
- package/dist/cli/client.d.ts +77 -0
- package/dist/cli/client.d.ts.map +1 -0
- package/dist/cli/client.js +300 -0
- package/dist/cli/client.js.map +1 -0
- package/dist/cli/commands/certs.d.ts +11 -0
- package/dist/cli/commands/certs.d.ts.map +1 -0
- package/dist/cli/commands/certs.js +110 -0
- package/dist/cli/commands/certs.js.map +1 -0
- package/dist/cli/commands/flags.d.ts +29 -0
- package/dist/cli/commands/flags.d.ts.map +1 -0
- package/dist/cli/commands/flags.js +104 -0
- package/dist/cli/commands/flags.js.map +1 -0
- package/dist/cli/commands/reload.d.ts +11 -0
- package/dist/cli/commands/reload.d.ts.map +1 -0
- package/dist/cli/commands/reload.js +35 -0
- package/dist/cli/commands/reload.js.map +1 -0
- package/dist/cli/commands/sites.d.ts +11 -0
- package/dist/cli/commands/sites.d.ts.map +1 -0
- package/dist/cli/commands/sites.js +221 -0
- package/dist/cli/commands/sites.js.map +1 -0
- package/dist/cli/commands/status.d.ts +10 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +41 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/upstreams.d.ts +21 -0
- package/dist/cli/commands/upstreams.d.ts.map +1 -0
- package/dist/cli/commands/upstreams.js +248 -0
- package/dist/cli/commands/upstreams.js.map +1 -0
- package/dist/cli/dispatcher.d.ts +45 -0
- package/dist/cli/dispatcher.d.ts.map +1 -0
- package/dist/cli/dispatcher.js +192 -0
- package/dist/cli/dispatcher.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/server/api/db-context.d.ts +50 -0
- package/dist/server/api/db-context.d.ts.map +1 -0
- package/dist/server/api/db-context.js +76 -0
- package/dist/server/api/db-context.js.map +1 -0
- package/dist/server/api/error-mapping.d.ts +19 -0
- package/dist/server/api/error-mapping.d.ts.map +1 -0
- package/dist/server/api/error-mapping.js +56 -0
- package/dist/server/api/error-mapping.js.map +1 -0
- package/dist/server/api/handlers/site-cert.d.ts +49 -0
- package/dist/server/api/handlers/site-cert.d.ts.map +1 -0
- package/dist/server/api/handlers/site-cert.js +54 -0
- package/dist/server/api/handlers/site-cert.js.map +1 -0
- package/dist/server/api/handlers/sites.d.ts +67 -0
- package/dist/server/api/handlers/sites.d.ts.map +1 -0
- package/dist/server/api/handlers/sites.js +78 -0
- package/dist/server/api/handlers/sites.js.map +1 -0
- package/dist/server/api/handlers/upstreams.d.ts +64 -0
- package/dist/server/api/handlers/upstreams.d.ts.map +1 -0
- package/dist/server/api/handlers/upstreams.js +97 -0
- package/dist/server/api/handlers/upstreams.js.map +1 -0
- package/dist/server/auth/require-token.d.ts +24 -0
- package/dist/server/auth/require-token.d.ts.map +1 -0
- package/dist/server/auth/require-token.js +98 -0
- package/dist/server/auth/require-token.js.map +1 -0
- package/dist/server/certs/acme-account.d.ts +37 -0
- package/dist/server/certs/acme-account.d.ts.map +1 -0
- package/dist/server/certs/acme-account.js +49 -0
- package/dist/server/certs/acme-account.js.map +1 -0
- package/dist/server/certs/challenge-store.d.ts +53 -0
- package/dist/server/certs/challenge-store.d.ts.map +1 -0
- package/dist/server/certs/challenge-store.js +66 -0
- package/dist/server/certs/challenge-store.js.map +1 -0
- package/dist/server/certs/issue.d.ts +106 -0
- package/dist/server/certs/issue.d.ts.map +1 -0
- package/dist/server/certs/issue.js +107 -0
- package/dist/server/certs/issue.js.map +1 -0
- package/dist/server/certs/renew.d.ts +34 -0
- package/dist/server/certs/renew.d.ts.map +1 -0
- package/dist/server/certs/renew.js +36 -0
- package/dist/server/certs/renew.js.map +1 -0
- package/dist/server/certs/scheduler.d.ts +68 -0
- package/dist/server/certs/scheduler.d.ts.map +1 -0
- package/dist/server/certs/scheduler.js +76 -0
- package/dist/server/certs/scheduler.js.map +1 -0
- package/dist/server/db/connection.d.ts +10 -0
- package/dist/server/db/connection.d.ts.map +1 -0
- package/dist/server/db/connection.js +16 -0
- package/dist/server/db/connection.js.map +1 -0
- package/dist/server/db/migrate.d.ts +12 -0
- package/dist/server/db/migrate.d.ts.map +1 -0
- package/dist/server/db/migrate.js +37 -0
- package/dist/server/db/migrate.js.map +1 -0
- package/dist/server/db/migrations/0001_init.sql +42 -0
- package/dist/server/domain/cert.d.ts +17 -0
- package/dist/server/domain/cert.d.ts.map +1 -0
- package/dist/server/domain/cert.js +22 -0
- package/dist/server/domain/cert.js.map +1 -0
- package/dist/server/domain/errors.d.ts +36 -0
- package/dist/server/domain/errors.d.ts.map +1 -0
- package/dist/server/domain/errors.js +37 -0
- package/dist/server/domain/errors.js.map +1 -0
- package/dist/server/domain/site.d.ts +15 -0
- package/dist/server/domain/site.d.ts.map +1 -0
- package/dist/server/domain/site.js +25 -0
- package/dist/server/domain/site.js.map +1 -0
- package/dist/server/domain/upstream.d.ts +25 -0
- package/dist/server/domain/upstream.d.ts.map +1 -0
- package/dist/server/domain/upstream.js +24 -0
- package/dist/server/domain/upstream.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +4 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/reload/atomic-write.d.ts +44 -0
- package/dist/server/reload/atomic-write.d.ts.map +1 -0
- package/dist/server/reload/atomic-write.js +151 -0
- package/dist/server/reload/atomic-write.js.map +1 -0
- package/dist/server/reload/health-probe.d.ts +62 -0
- package/dist/server/reload/health-probe.d.ts.map +1 -0
- package/dist/server/reload/health-probe.js +105 -0
- package/dist/server/reload/health-probe.js.map +1 -0
- package/dist/server/reload/reload.d.ts +118 -0
- package/dist/server/reload/reload.d.ts.map +1 -0
- package/dist/server/reload/reload.js +232 -0
- package/dist/server/reload/reload.js.map +1 -0
- package/dist/server/renderer/render-bundle.d.ts +18 -0
- package/dist/server/renderer/render-bundle.d.ts.map +1 -0
- package/dist/server/renderer/render-bundle.js +32 -0
- package/dist/server/renderer/render-bundle.js.map +1 -0
- package/dist/server/renderer/render-site.d.ts +5 -0
- package/dist/server/renderer/render-site.d.ts.map +1 -0
- package/dist/server/renderer/render-site.js +144 -0
- package/dist/server/renderer/render-site.js.map +1 -0
- package/dist/server/repositories/cert-repository.d.ts +19 -0
- package/dist/server/repositories/cert-repository.d.ts.map +1 -0
- package/dist/server/repositories/cert-repository.js +112 -0
- package/dist/server/repositories/cert-repository.js.map +1 -0
- package/dist/server/repositories/site-repository.d.ts +17 -0
- package/dist/server/repositories/site-repository.d.ts.map +1 -0
- package/dist/server/repositories/site-repository.js +122 -0
- package/dist/server/repositories/site-repository.js.map +1 -0
- package/dist/server/repositories/upstream-repository.d.ts +22 -0
- package/dist/server/repositories/upstream-repository.d.ts.map +1 -0
- package/dist/server/repositories/upstream-repository.js +142 -0
- package/dist/server/repositories/upstream-repository.js.map +1 -0
- package/dist/server/validator/nginx-binary.d.ts +9 -0
- package/dist/server/validator/nginx-binary.d.ts.map +1 -0
- package/dist/server/validator/nginx-binary.js +11 -0
- package/dist/server/validator/nginx-binary.js.map +1 -0
- package/dist/server/validator/validate.d.ts +29 -0
- package/dist/server/validator/validate.d.ts.map +1 -0
- package/dist/server/validator/validate.js +69 -0
- package/dist/server/validator/validate.js.map +1 -0
- package/dist/server/worker/main.d.ts +43 -0
- package/dist/server/worker/main.d.ts.map +1 -0
- package/dist/server/worker/main.js +181 -0
- package/dist/server/worker/main.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny argv-flag parser shared by command modules.
|
|
3
|
+
*
|
|
4
|
+
* Supports `--name value`, `--name=value`, and repeated flags (returned as
|
|
5
|
+
* `string[]`). Positionals — anything not consumed by a known flag — are
|
|
6
|
+
* returned in `positional` in the order they appeared.
|
|
7
|
+
*
|
|
8
|
+
* Boolean flags (`--yes`, `--help`) live in `flags` but their value is the
|
|
9
|
+
* literal string `'true'` so callers don't have to worry about a tri-state
|
|
10
|
+
* `boolean | string`.
|
|
11
|
+
*/
|
|
12
|
+
export interface ParsedFlags {
|
|
13
|
+
flags: Record<string, string>;
|
|
14
|
+
repeated: Record<string, string[]>;
|
|
15
|
+
positional: string[];
|
|
16
|
+
}
|
|
17
|
+
export interface FlagSpec {
|
|
18
|
+
/** Flags that always take a value (`--hostname X` or `--hostname=X`). */
|
|
19
|
+
valueFlags: ReadonlySet<string>;
|
|
20
|
+
/** Flags that can be repeated; values accumulate into `repeated[name]`. */
|
|
21
|
+
repeatedFlags?: ReadonlySet<string>;
|
|
22
|
+
/** Flags that are pure booleans (no value). */
|
|
23
|
+
boolFlags?: ReadonlySet<string>;
|
|
24
|
+
}
|
|
25
|
+
export declare class FlagParseError extends Error {
|
|
26
|
+
constructor(message: string);
|
|
27
|
+
}
|
|
28
|
+
export declare function parseFlags(args: readonly string[], spec: FlagSpec): ParsedFlags;
|
|
29
|
+
//# sourceMappingURL=flags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/flags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,yEAAyE;IACzE,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,2EAA2E;IAC3E,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,+CAA+C;IAC/C,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACjC;AAED,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,WAAW,CAyF/E"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny argv-flag parser shared by command modules.
|
|
3
|
+
*
|
|
4
|
+
* Supports `--name value`, `--name=value`, and repeated flags (returned as
|
|
5
|
+
* `string[]`). Positionals — anything not consumed by a known flag — are
|
|
6
|
+
* returned in `positional` in the order they appeared.
|
|
7
|
+
*
|
|
8
|
+
* Boolean flags (`--yes`, `--help`) live in `flags` but their value is the
|
|
9
|
+
* literal string `'true'` so callers don't have to worry about a tri-state
|
|
10
|
+
* `boolean | string`.
|
|
11
|
+
*/
|
|
12
|
+
export class FlagParseError extends Error {
|
|
13
|
+
constructor(message) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.name = 'FlagParseError';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function parseFlags(args, spec) {
|
|
19
|
+
const flags = {};
|
|
20
|
+
const repeated = {};
|
|
21
|
+
const positional = [];
|
|
22
|
+
const boolFlags = spec.boolFlags ?? new Set();
|
|
23
|
+
const repeatedFlags = spec.repeatedFlags ?? new Set();
|
|
24
|
+
let i = 0;
|
|
25
|
+
while (i < args.length) {
|
|
26
|
+
const arg = args[i];
|
|
27
|
+
if (arg === undefined) {
|
|
28
|
+
i += 1;
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (!arg.startsWith('--')) {
|
|
32
|
+
positional.push(arg);
|
|
33
|
+
i += 1;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
let name;
|
|
37
|
+
let value;
|
|
38
|
+
const eq = arg.indexOf('=');
|
|
39
|
+
if (eq >= 0) {
|
|
40
|
+
name = arg.slice(2, eq);
|
|
41
|
+
value = arg.slice(eq + 1);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
name = arg.slice(2);
|
|
45
|
+
value = undefined;
|
|
46
|
+
}
|
|
47
|
+
if (boolFlags.has(name)) {
|
|
48
|
+
if (value !== undefined) {
|
|
49
|
+
throw new FlagParseError(`flag --${name} does not take a value`);
|
|
50
|
+
}
|
|
51
|
+
flags[name] = 'true';
|
|
52
|
+
i += 1;
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (repeatedFlags.has(name)) {
|
|
56
|
+
const consumed = value;
|
|
57
|
+
if (consumed === undefined) {
|
|
58
|
+
const next = args[i + 1];
|
|
59
|
+
if (next === undefined) {
|
|
60
|
+
throw new FlagParseError(`flag --${name} requires a value`);
|
|
61
|
+
}
|
|
62
|
+
if (!Array.isArray(repeated[name])) {
|
|
63
|
+
repeated[name] = [];
|
|
64
|
+
}
|
|
65
|
+
repeated[name].push(next);
|
|
66
|
+
i += 2;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
if (!Array.isArray(repeated[name])) {
|
|
70
|
+
repeated[name] = [];
|
|
71
|
+
}
|
|
72
|
+
repeated[name].push(consumed);
|
|
73
|
+
i += 1;
|
|
74
|
+
}
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (spec.valueFlags.has(name)) {
|
|
78
|
+
if (value !== undefined) {
|
|
79
|
+
flags[name] = value;
|
|
80
|
+
i += 1;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const next = args[i + 1];
|
|
84
|
+
if (next === undefined) {
|
|
85
|
+
throw new FlagParseError(`flag --${name} requires a value`);
|
|
86
|
+
}
|
|
87
|
+
flags[name] = next;
|
|
88
|
+
i += 2;
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
// Unknown flag — surface to the caller. (Help is the only convention
|
|
92
|
+
// every command shares; let the command itself decide whether to bail
|
|
93
|
+
// or to allow stragglers.)
|
|
94
|
+
if (value !== undefined) {
|
|
95
|
+
flags[name] = value;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
flags[name] = 'true';
|
|
99
|
+
}
|
|
100
|
+
i += 1;
|
|
101
|
+
}
|
|
102
|
+
return { flags, repeated, positional };
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=flags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../../../src/cli/commands/flags.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `zoomies reload` — render the current bundle and trigger an NGINX reload.
|
|
3
|
+
*
|
|
4
|
+
* Local-only operation. The HTTP API does not yet expose a reload endpoint
|
|
5
|
+
* (Phase 10 territory) — over HTTP this returns a structured "unsupported"
|
|
6
|
+
* message and exits non-zero.
|
|
7
|
+
*/
|
|
8
|
+
import type { Command } from '../dispatcher.js';
|
|
9
|
+
export declare const RELOAD_USAGE = "Usage: zoomies reload\n\nRender the current desired state and reload NGINX.\n\nLocal mode requires the following env vars to be set:\n ZOOMIES_NGINX_SITES_DIR Directory Zoomies owns under /etc/nginx\n ZOOMIES_HEALTH_CHECK_URL Post-reload smoke-test URL\n\nHTTP mode is not yet supported and will exit non-zero with a hint.\n";
|
|
10
|
+
export declare const reloadCommand: Command;
|
|
11
|
+
//# sourceMappingURL=reload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reload.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/reload.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,eAAO,MAAM,YAAY,8UASxB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,OAiB3B,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `zoomies reload` — render the current bundle and trigger an NGINX reload.
|
|
3
|
+
*
|
|
4
|
+
* Local-only operation. The HTTP API does not yet expose a reload endpoint
|
|
5
|
+
* (Phase 10 territory) — over HTTP this returns a structured "unsupported"
|
|
6
|
+
* message and exits non-zero.
|
|
7
|
+
*/
|
|
8
|
+
export const RELOAD_USAGE = `Usage: zoomies reload
|
|
9
|
+
|
|
10
|
+
Render the current desired state and reload NGINX.
|
|
11
|
+
|
|
12
|
+
Local mode requires the following env vars to be set:
|
|
13
|
+
ZOOMIES_NGINX_SITES_DIR Directory Zoomies owns under /etc/nginx
|
|
14
|
+
ZOOMIES_HEALTH_CHECK_URL Post-reload smoke-test URL
|
|
15
|
+
|
|
16
|
+
HTTP mode is not yet supported and will exit non-zero with a hint.
|
|
17
|
+
`;
|
|
18
|
+
export const reloadCommand = {
|
|
19
|
+
name: 'reload',
|
|
20
|
+
describe: 'Trigger an NGINX reload of the current desired state',
|
|
21
|
+
usage: RELOAD_USAGE,
|
|
22
|
+
async run(args, ctx) {
|
|
23
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
24
|
+
ctx.stdout.write(RELOAD_USAGE);
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
const result = await ctx.client.reload.apply();
|
|
28
|
+
const stream = result.ok ? ctx.stdout : ctx.stderr;
|
|
29
|
+
const status = result.ok ? 'ok' : 'failed';
|
|
30
|
+
const detail = result.message !== undefined && result.message !== '' ? `: ${result.message}` : '';
|
|
31
|
+
stream.write(`${status} (step=${result.step})${detail}\n`);
|
|
32
|
+
return result.ok ? 0 : 1;
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=reload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reload.js","sourceRoot":"","sources":["../../../src/cli/commands/reload.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;CAS3B,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAY;IACpC,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,sDAAsD;IAChE,KAAK,EAAE,YAAY;IACnB,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG;QACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC/B,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC/C,MAAM,MAAM,GAA0B,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;QAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC3C,MAAM,MAAM,GACV,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,UAAU,MAAM,CAAC,IAAI,IAAI,MAAM,IAAI,CAAC,CAAC;QAC3D,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `zoomies sites <subcommand>` — CRUD over sites.
|
|
3
|
+
*
|
|
4
|
+
* `list` renders a compact table; `get` dumps JSON; the mutating subcommands
|
|
5
|
+
* print the new id or `ok` so scripts can chain (`zoomies sites create ... |
|
|
6
|
+
* xargs zoomies sites get`).
|
|
7
|
+
*/
|
|
8
|
+
import type { Command } from '../dispatcher.js';
|
|
9
|
+
export declare const SITES_USAGE = "Usage: zoomies sites <subcommand> [args]\n\nSubcommands:\n list Tabular listing of all sites\n get <id> JSON dump of one site\n create --hostname <h> --upstream-id <id> --tls-mode <off|acme|manual>\n Create a new site\n update <id> [--hostname X] [--upstream-id X] [--tls-mode X]\n Patch an existing site\n delete <id> --yes Delete a site (--yes is required)\n";
|
|
10
|
+
export declare const sitesCommand: Command;
|
|
11
|
+
//# sourceMappingURL=sites.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sites.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/sites.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,kBAAkB,CAAC;AAMhE,eAAO,MAAM,WAAW,2iBAUvB,CAAC;AAqLF,eAAO,MAAM,YAAY,EAAE,OA0B1B,CAAC"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `zoomies sites <subcommand>` — CRUD over sites.
|
|
3
|
+
*
|
|
4
|
+
* `list` renders a compact table; `get` dumps JSON; the mutating subcommands
|
|
5
|
+
* print the new id or `ok` so scripts can chain (`zoomies sites create ... |
|
|
6
|
+
* xargs zoomies sites get`).
|
|
7
|
+
*/
|
|
8
|
+
import { CliClientError } from '../client.js';
|
|
9
|
+
import { FlagParseError, parseFlags } from './flags.js';
|
|
10
|
+
const VALID_TLS_MODES = ['off', 'acme', 'manual'];
|
|
11
|
+
export const SITES_USAGE = `Usage: zoomies sites <subcommand> [args]
|
|
12
|
+
|
|
13
|
+
Subcommands:
|
|
14
|
+
list Tabular listing of all sites
|
|
15
|
+
get <id> JSON dump of one site
|
|
16
|
+
create --hostname <h> --upstream-id <id> --tls-mode <off|acme|manual>
|
|
17
|
+
Create a new site
|
|
18
|
+
update <id> [--hostname X] [--upstream-id X] [--tls-mode X]
|
|
19
|
+
Patch an existing site
|
|
20
|
+
delete <id> --yes Delete a site (--yes is required)
|
|
21
|
+
`;
|
|
22
|
+
function shortId(id) {
|
|
23
|
+
return id.slice(0, 8);
|
|
24
|
+
}
|
|
25
|
+
function isTlsMode(value) {
|
|
26
|
+
return VALID_TLS_MODES.includes(value);
|
|
27
|
+
}
|
|
28
|
+
function printUsage(ctx) {
|
|
29
|
+
ctx.stdout.write(SITES_USAGE);
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
function writeUsageErr(ctx, msg) {
|
|
33
|
+
ctx.stderr.write(`zoomies sites: ${msg}\n`);
|
|
34
|
+
ctx.stderr.write(SITES_USAGE);
|
|
35
|
+
return 2;
|
|
36
|
+
}
|
|
37
|
+
function handleClientError(ctx, err) {
|
|
38
|
+
if (err instanceof CliClientError) {
|
|
39
|
+
ctx.stderr.write(`zoomies sites: ${err.message} (${err.code})\n`);
|
|
40
|
+
return 1;
|
|
41
|
+
}
|
|
42
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
43
|
+
ctx.stderr.write(`zoomies sites: ${message}\n`);
|
|
44
|
+
return 1;
|
|
45
|
+
}
|
|
46
|
+
async function runList(ctx) {
|
|
47
|
+
try {
|
|
48
|
+
const sites = await ctx.client.sites.list();
|
|
49
|
+
if (sites.length === 0) {
|
|
50
|
+
ctx.stdout.write('(no sites)\n');
|
|
51
|
+
return 0;
|
|
52
|
+
}
|
|
53
|
+
const header = ['id', 'hostname', 'upstream_id', 'tls_mode', 'created_at'];
|
|
54
|
+
const rows = sites.map((s) => [
|
|
55
|
+
shortId(s.id),
|
|
56
|
+
s.hostname,
|
|
57
|
+
shortId(s.upstreamId),
|
|
58
|
+
s.tlsMode,
|
|
59
|
+
s.createdAt,
|
|
60
|
+
]);
|
|
61
|
+
const widths = header.map((h, i) => Math.max(h.length, ...rows.map((r) => (r[i] ?? '').length)));
|
|
62
|
+
const fmt = (cols) => cols.map((c, i) => c.padEnd(widths[i] ?? 0)).join(' ');
|
|
63
|
+
ctx.stdout.write(fmt(header) + '\n');
|
|
64
|
+
for (const row of rows) {
|
|
65
|
+
ctx.stdout.write(fmt(row) + '\n');
|
|
66
|
+
}
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
return handleClientError(ctx, err);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async function runGet(args, ctx) {
|
|
74
|
+
const [id] = args;
|
|
75
|
+
if (id === undefined) {
|
|
76
|
+
return writeUsageErr(ctx, 'get requires a site id');
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
const site = await ctx.client.sites.get(id);
|
|
80
|
+
ctx.stdout.write(JSON.stringify(site, null, 2) + '\n');
|
|
81
|
+
return 0;
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
return handleClientError(ctx, err);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async function runCreate(args, ctx) {
|
|
88
|
+
let parsed;
|
|
89
|
+
try {
|
|
90
|
+
parsed = parseFlags(args, {
|
|
91
|
+
valueFlags: new Set(['hostname', 'upstream-id', 'tls-mode']),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
if (err instanceof FlagParseError) {
|
|
96
|
+
return writeUsageErr(ctx, err.message);
|
|
97
|
+
}
|
|
98
|
+
throw err;
|
|
99
|
+
}
|
|
100
|
+
const hostname = parsed.flags['hostname'];
|
|
101
|
+
const upstreamId = parsed.flags['upstream-id'];
|
|
102
|
+
const tlsMode = parsed.flags['tls-mode'];
|
|
103
|
+
if (hostname === undefined || upstreamId === undefined || tlsMode === undefined) {
|
|
104
|
+
return writeUsageErr(ctx, 'create requires --hostname, --upstream-id, and --tls-mode');
|
|
105
|
+
}
|
|
106
|
+
if (!isTlsMode(tlsMode)) {
|
|
107
|
+
return writeUsageErr(ctx, `--tls-mode must be one of ${VALID_TLS_MODES.join('|')}`);
|
|
108
|
+
}
|
|
109
|
+
const input = {
|
|
110
|
+
hostname,
|
|
111
|
+
upstreamId,
|
|
112
|
+
tlsMode,
|
|
113
|
+
};
|
|
114
|
+
try {
|
|
115
|
+
const site = await ctx.client.sites.create(input);
|
|
116
|
+
ctx.stdout.write(site.id + '\n');
|
|
117
|
+
return 0;
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
return handleClientError(ctx, err);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
async function runUpdate(args, ctx) {
|
|
124
|
+
let parsed;
|
|
125
|
+
try {
|
|
126
|
+
parsed = parseFlags(args, {
|
|
127
|
+
valueFlags: new Set(['hostname', 'upstream-id', 'tls-mode']),
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
if (err instanceof FlagParseError) {
|
|
132
|
+
return writeUsageErr(ctx, err.message);
|
|
133
|
+
}
|
|
134
|
+
throw err;
|
|
135
|
+
}
|
|
136
|
+
const [id] = parsed.positional;
|
|
137
|
+
if (id === undefined) {
|
|
138
|
+
return writeUsageErr(ctx, 'update requires a site id');
|
|
139
|
+
}
|
|
140
|
+
const patch = {};
|
|
141
|
+
if (parsed.flags['hostname'] !== undefined) {
|
|
142
|
+
patch.hostname = parsed.flags['hostname'];
|
|
143
|
+
}
|
|
144
|
+
if (parsed.flags['upstream-id'] !== undefined) {
|
|
145
|
+
patch.upstreamId = parsed.flags['upstream-id'];
|
|
146
|
+
}
|
|
147
|
+
if (parsed.flags['tls-mode'] !== undefined) {
|
|
148
|
+
const tlsMode = parsed.flags['tls-mode'];
|
|
149
|
+
if (!isTlsMode(tlsMode)) {
|
|
150
|
+
return writeUsageErr(ctx, `--tls-mode must be one of ${VALID_TLS_MODES.join('|')}`);
|
|
151
|
+
}
|
|
152
|
+
patch.tlsMode = tlsMode;
|
|
153
|
+
}
|
|
154
|
+
try {
|
|
155
|
+
await ctx.client.sites.update(id, patch);
|
|
156
|
+
ctx.stdout.write('ok\n');
|
|
157
|
+
return 0;
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
return handleClientError(ctx, err);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async function runDelete(args, ctx) {
|
|
164
|
+
let parsed;
|
|
165
|
+
try {
|
|
166
|
+
parsed = parseFlags(args, {
|
|
167
|
+
valueFlags: new Set(),
|
|
168
|
+
boolFlags: new Set(['yes']),
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
if (err instanceof FlagParseError) {
|
|
173
|
+
return writeUsageErr(ctx, err.message);
|
|
174
|
+
}
|
|
175
|
+
throw err;
|
|
176
|
+
}
|
|
177
|
+
const [id] = parsed.positional;
|
|
178
|
+
if (id === undefined) {
|
|
179
|
+
return writeUsageErr(ctx, 'delete requires a site id');
|
|
180
|
+
}
|
|
181
|
+
if (parsed.flags['yes'] !== 'true') {
|
|
182
|
+
ctx.stderr.write('zoomies sites: refusing to delete without --yes (this is a destructive op)\n');
|
|
183
|
+
return 2;
|
|
184
|
+
}
|
|
185
|
+
try {
|
|
186
|
+
await ctx.client.sites.delete(id);
|
|
187
|
+
ctx.stdout.write('ok\n');
|
|
188
|
+
return 0;
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
return handleClientError(ctx, err);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
export const sitesCommand = {
|
|
195
|
+
name: 'sites',
|
|
196
|
+
describe: 'List / create / update / delete sites',
|
|
197
|
+
usage: SITES_USAGE,
|
|
198
|
+
async run(args, ctx) {
|
|
199
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
200
|
+
return printUsage(ctx);
|
|
201
|
+
}
|
|
202
|
+
const [sub, ...rest] = args;
|
|
203
|
+
switch (sub) {
|
|
204
|
+
case undefined:
|
|
205
|
+
return printUsage(ctx);
|
|
206
|
+
case 'list':
|
|
207
|
+
return runList(ctx);
|
|
208
|
+
case 'get':
|
|
209
|
+
return runGet(rest, ctx);
|
|
210
|
+
case 'create':
|
|
211
|
+
return runCreate(rest, ctx);
|
|
212
|
+
case 'update':
|
|
213
|
+
return runUpdate(rest, ctx);
|
|
214
|
+
case 'delete':
|
|
215
|
+
return runDelete(rest, ctx);
|
|
216
|
+
default:
|
|
217
|
+
return writeUsageErr(ctx, `unknown subcommand '${sub}'`);
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
//# sourceMappingURL=sites.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sites.js","sourceRoot":"","sources":["../../../src/cli/commands/sites.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `zoomies status` — print version + connectivity info.
|
|
3
|
+
*
|
|
4
|
+
* In `--local` mode this is a SELECT 1 against the SQLite control-plane DB:
|
|
5
|
+
* we have no Next.js server to ping. In HTTP mode it hits `/api/healthz`.
|
|
6
|
+
*/
|
|
7
|
+
import type { Command } from '../dispatcher.js';
|
|
8
|
+
export declare const STATUS_USAGE = "Usage: zoomies status\n\nPrint version and a quick health summary.\n\n --local mode: opens the SQLite DB and runs SELECT 1.\n HTTP mode: GETs /api/healthz against --api-url.\n";
|
|
9
|
+
export declare const statusCommand: Command;
|
|
10
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,eAAO,MAAM,YAAY,yLAMxB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,OA0B3B,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `zoomies status` — print version + connectivity info.
|
|
3
|
+
*
|
|
4
|
+
* In `--local` mode this is a SELECT 1 against the SQLite control-plane DB:
|
|
5
|
+
* we have no Next.js server to ping. In HTTP mode it hits `/api/healthz`.
|
|
6
|
+
*/
|
|
7
|
+
import { version } from '../../version.js';
|
|
8
|
+
export const STATUS_USAGE = `Usage: zoomies status
|
|
9
|
+
|
|
10
|
+
Print version and a quick health summary.
|
|
11
|
+
|
|
12
|
+
--local mode: opens the SQLite DB and runs SELECT 1.
|
|
13
|
+
HTTP mode: GETs /api/healthz against --api-url.
|
|
14
|
+
`;
|
|
15
|
+
export const statusCommand = {
|
|
16
|
+
name: 'status',
|
|
17
|
+
describe: 'Print version + control-plane connectivity',
|
|
18
|
+
usage: STATUS_USAGE,
|
|
19
|
+
async run(args, ctx) {
|
|
20
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
21
|
+
ctx.stdout.write(STATUS_USAGE);
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
const result = await ctx.client.status.health();
|
|
25
|
+
const lines = [
|
|
26
|
+
`version: ${version}`,
|
|
27
|
+
`mode: ${ctx.mode}`,
|
|
28
|
+
`ok: ${result.ok ? 'yes' : 'no'}`,
|
|
29
|
+
];
|
|
30
|
+
if (ctx.mode === 'http') {
|
|
31
|
+
lines.push(`url: ${ctx.httpUrl}`);
|
|
32
|
+
lines.push(`status: ${result.status ?? 'n/a'}`);
|
|
33
|
+
}
|
|
34
|
+
if (result.body !== undefined) {
|
|
35
|
+
lines.push(`body: ${JSON.stringify(result.body)}`);
|
|
36
|
+
}
|
|
37
|
+
ctx.stdout.write(lines.join('\n') + '\n');
|
|
38
|
+
return result.ok ? 0 : 1;
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAG3C,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;CAM3B,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAY;IACpC,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,4CAA4C;IACtD,KAAK,EAAE,YAAY;IACnB,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG;QACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC/B,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAChD,MAAM,KAAK,GAAa;YACtB,YAAY,OAAO,EAAE;YACrB,YAAY,GAAG,CAAC,IAAI,EAAE;YACtB,YAAY,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;SACvC,CAAC;QACF,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `zoomies upstreams <subcommand>` — CRUD over upstreams.
|
|
3
|
+
*
|
|
4
|
+
* `create` collects targets via a repeated `--target host:port:weight` flag.
|
|
5
|
+
* `update` accepts `--targets-json` so callers can replace the whole targets
|
|
6
|
+
* list atomically — partial mutations of a single target row would race the
|
|
7
|
+
* other targets in the same upstream and are out of scope.
|
|
8
|
+
*/
|
|
9
|
+
import type { Command } from '../dispatcher.js';
|
|
10
|
+
import type { UpstreamTarget } from '../../server/domain/upstream.js';
|
|
11
|
+
export declare const UPSTREAMS_USAGE = "Usage: zoomies upstreams <subcommand> [args]\n\nSubcommands:\n list Tabular listing of all upstreams\n get <id> JSON dump of one upstream\n create --name <n> --load-balancer <round_robin|least_conn|ip_hash>\n --target host:port:weight ... Create upstream (repeat --target)\n update <id> [--name X] [--load-balancer X] [--targets-json '<json>']\n Patch an existing upstream\n\nThe --target value is host:port:weight (e.g. 10.0.0.1:8080:1). Pass --target\nmultiple times to add multiple backends.\n\nThe --targets-json contract: a JSON array of objects\n [{\"host\":\"10.0.0.1\",\"port\":8080,\"weight\":1}, ...]\nReplaces the full targets list. Use only when scripting; --target on create\nis friendlier for ad-hoc use.\n";
|
|
12
|
+
/**
|
|
13
|
+
* Parse a single `--target host:port:weight` value.
|
|
14
|
+
*
|
|
15
|
+
* Splits on `:` from the right so an IPv6 literal (e.g. `[::1]:8080:1`)
|
|
16
|
+
* still parses cleanly: the last two segments are always port + weight,
|
|
17
|
+
* and the remainder is host.
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseTargetFlag(value: string): UpstreamTarget;
|
|
20
|
+
export declare const upstreamsCommand: Command;
|
|
21
|
+
//# sourceMappingURL=upstreams.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upstreams.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/upstreams.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAMtE,eAAO,MAAM,eAAe,41BAiB3B,CAAC;AA+BF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAoB7D;AA+ID,eAAO,MAAM,gBAAgB,EAAE,OAwB9B,CAAC"}
|