@eudiplo/cli 8.0.2 → 8.1.0-main.05183ed

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 (85) hide show
  1. package/README.md +7 -3
  2. package/dist/commands/config/portability/migrations.spec.js +5 -3
  3. package/dist/commands/config/portability/migrations.spec.js.map +1 -1
  4. package/dist/commands/deployment/action.d.ts +1 -1
  5. package/dist/commands/deployment/action.d.ts.map +1 -1
  6. package/dist/commands/deployment/action.js.map +1 -1
  7. package/dist/commands/deployment/index.d.ts.map +1 -1
  8. package/dist/commands/deployment/index.js +7 -4
  9. package/dist/commands/deployment/index.js.map +1 -1
  10. package/dist/commands/doctor/action.d.ts +2 -1
  11. package/dist/commands/doctor/action.d.ts.map +1 -1
  12. package/dist/commands/doctor/action.js +25 -7
  13. package/dist/commands/doctor/action.js.map +1 -1
  14. package/dist/commands/doctor/index.d.ts.map +1 -1
  15. package/dist/commands/doctor/index.js +2 -0
  16. package/dist/commands/doctor/index.js.map +1 -1
  17. package/dist/commands/open/action.d.ts +9 -0
  18. package/dist/commands/open/action.d.ts.map +1 -0
  19. package/dist/commands/open/action.js +41 -0
  20. package/dist/commands/open/action.js.map +1 -0
  21. package/dist/commands/open/index.d.ts +5 -0
  22. package/dist/commands/open/index.d.ts.map +1 -0
  23. package/dist/commands/open/index.js +15 -0
  24. package/dist/commands/open/index.js.map +1 -0
  25. package/dist/commands/upgrade/action.d.ts +3 -0
  26. package/dist/commands/upgrade/action.d.ts.map +1 -0
  27. package/dist/commands/upgrade/action.js +95 -0
  28. package/dist/commands/upgrade/action.js.map +1 -0
  29. package/dist/commands/upgrade/index.d.ts +5 -0
  30. package/dist/commands/upgrade/index.d.ts.map +1 -0
  31. package/dist/commands/upgrade/index.js +15 -0
  32. package/dist/commands/upgrade/index.js.map +1 -0
  33. package/dist/index.js +3139 -550
  34. package/dist/runtime.d.ts.map +1 -1
  35. package/dist/runtime.js +5 -1
  36. package/dist/runtime.js.map +1 -1
  37. package/dist/services/api-auth.d.ts +31 -0
  38. package/dist/services/api-auth.d.ts.map +1 -0
  39. package/dist/services/api-auth.js +78 -0
  40. package/dist/services/api-auth.js.map +1 -0
  41. package/dist/services/backend-checks.d.ts +24 -0
  42. package/dist/services/backend-checks.d.ts.map +1 -0
  43. package/dist/services/backend-checks.js +105 -0
  44. package/dist/services/backend-checks.js.map +1 -0
  45. package/dist/services/browser.d.ts +30 -0
  46. package/dist/services/browser.d.ts.map +1 -0
  47. package/dist/services/browser.js +102 -0
  48. package/dist/services/browser.js.map +1 -0
  49. package/dist/services/compose-args.d.ts +28 -0
  50. package/dist/services/compose-args.d.ts.map +1 -0
  51. package/dist/services/compose-args.js +117 -0
  52. package/dist/services/compose-args.js.map +1 -0
  53. package/dist/services/compose-project.js +6 -6
  54. package/dist/services/compose-project.js.map +1 -1
  55. package/dist/services/compose-upgrade.d.ts +40 -0
  56. package/dist/services/compose-upgrade.d.ts.map +1 -0
  57. package/dist/services/compose-upgrade.js +102 -0
  58. package/dist/services/compose-upgrade.js.map +1 -0
  59. package/dist/services/container-state.d.ts +14 -0
  60. package/dist/services/container-state.d.ts.map +1 -0
  61. package/dist/services/container-state.js +70 -0
  62. package/dist/services/container-state.js.map +1 -0
  63. package/dist/services/deployment-drivers.d.ts +8 -1
  64. package/dist/services/deployment-drivers.d.ts.map +1 -1
  65. package/dist/services/deployment-drivers.js +162 -19
  66. package/dist/services/deployment-drivers.js.map +1 -1
  67. package/dist/services/diagnostics.d.ts +19 -2
  68. package/dist/services/diagnostics.d.ts.map +1 -1
  69. package/dist/services/diagnostics.js +219 -50
  70. package/dist/services/diagnostics.js.map +1 -1
  71. package/dist/services/tls-expiry.d.ts +16 -0
  72. package/dist/services/tls-expiry.d.ts.map +1 -0
  73. package/dist/services/tls-expiry.js +80 -0
  74. package/dist/services/tls-expiry.js.map +1 -0
  75. package/dist/types.d.ts +5 -1
  76. package/dist/types.d.ts.map +1 -1
  77. package/package.json +4 -4
  78. package/templates/demo-config/trust-lists/trustlist-580831bc-ef11-43f4-a3be-a2b6bf1b29a3-config.json +1 -97
  79. package/templates/docker-compose.yml +35 -28
  80. package/templates/schemas/IssuanceConfig.schema.json +13 -0
  81. package/templates/schemas/IssuanceConfigFile.schema.json +663 -1
  82. package/templates/schemas/KeyChainConfigFile.schema.json +7 -3
  83. package/templates/schemas/KeyChainImportDto.schema.json +7 -3
  84. package/templates/schemas/PresentationConfigCreateDto.schema.json +3 -6
  85. package/templates/schemas/PresentationConfigFile.schema.json +723 -1
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAC;AAcpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAsB,MAAM,CACxB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,cAAiC,GAC3C,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED,wBAAgB,aAAa,CACzB,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACxC,OAAO,CAsCT"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAC;AAgBpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAsB,MAAM,CACxB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,cAAiC,GAC3C,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED,wBAAgB,aAAa,CACzB,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACxC,OAAO,CAwCT"}
package/dist/runtime.js CHANGED
@@ -8,7 +8,9 @@ import { createDeploymentCommands } from "./commands/deployment/index.js";
8
8
  import { createDoctorCommand } from "./commands/doctor/index.js";
9
9
  import { createInitCommand } from "./commands/init/index.js";
10
10
  import { createInstanceCommand } from "./commands/instance/index.js";
11
+ import { createOpenCommand } from "./commands/open/index.js";
11
12
  import { createStatusCommand } from "./commands/status/index.js";
13
+ import { createUpgradeCommand } from "./commands/upgrade/index.js";
12
14
  import { createVersionCommand, versionText } from "./commands/version/index.js";
13
15
  export async function runCli(args, context = defaultContext()) {
14
16
  let actionExitCode = 0;
@@ -34,12 +36,14 @@ export function createProgram(context, setExitCode) {
34
36
  .description("Deployment-aware command line tools for EUDIPLO")
35
37
  .version(versionText(), "-v, --version", "Print the installed CLI version")
36
38
  .helpCommand(true)
37
- .addHelpText("afterAll", "\nFor more information, see https://docs.eudiplo.dev/getting-started/quick-start");
39
+ .addHelpText("afterAll", "\nFor more information, see https://docs.eudiplo.dev/cookbooks/foundation");
38
40
  program.addCommand(createDemoCommand(context, setExitCode));
39
41
  program.addCommand(createInitCommand(context, setExitCode));
40
42
  for (const command of createDeploymentCommands(context, setExitCode)) {
41
43
  program.addCommand(command);
42
44
  }
45
+ program.addCommand(createUpgradeCommand(context, setExitCode));
46
+ program.addCommand(createOpenCommand(context, setExitCode));
43
47
  program.addCommand(createInstanceCommand(context, setExitCode));
44
48
  program.addCommand(createConfigCommand(context, setExitCode));
45
49
  program.addCommand(createDoctorCommand(context, setExitCode));
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { CommandContext } from "../types.js";
2
+ /**
3
+ * Minimal client-credentials token fetch for the checks that need an
4
+ * authenticated API call. The CLI has no shared auth helper yet; when one
5
+ * lands, only this module should need replacing.
6
+ */
7
+ export type TokenResult = {
8
+ kind: "token";
9
+ accessToken: string;
10
+ } | {
11
+ kind: "unavailable";
12
+ reason: string;
13
+ } | {
14
+ kind: "error";
15
+ reason: string;
16
+ };
17
+ export declare function requestAccessToken(baseUrl: URL, context: CommandContext): Promise<TokenResult>;
18
+ /**
19
+ * Fetches an authenticated endpoint. Returns the status code and parsed
20
+ * body; error bodies are never returned, so nothing sensitive is printed.
21
+ */
22
+ export declare function fetchAuthenticated(url: URL, accessToken: string, context: CommandContext): Promise<{
23
+ ok: true;
24
+ body: unknown;
25
+ } | {
26
+ ok: false;
27
+ status?: number;
28
+ reason: string;
29
+ }>;
30
+ export declare function withTrailingSlash(url: URL): URL;
31
+ //# sourceMappingURL=api-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-auth.d.ts","sourceRoot":"","sources":["../../src/services/api-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;GAIG;AACH,MAAM,MAAM,WAAW,GACjB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,wBAAsB,kBAAkB,CACpC,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC,WAAW,CAAC,CAgDtB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACpC,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,GACxB,OAAO,CACN;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAC/E,CAoBA;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAE/C"}
@@ -0,0 +1,78 @@
1
+ export async function requestAccessToken(baseUrl, context) {
2
+ const clientId = context.env.EUDIPLO_CLIENT_ID;
3
+ const clientSecret = context.env.EUDIPLO_CLIENT_SECRET;
4
+ if (!clientId || !clientSecret) {
5
+ return {
6
+ kind: "unavailable",
7
+ reason: "EUDIPLO_CLIENT_ID and EUDIPLO_CLIENT_SECRET are not set",
8
+ };
9
+ }
10
+ const tokenUrl = new URL("api/oauth2/token", withTrailingSlash(baseUrl));
11
+ try {
12
+ const response = await context.fetch(tokenUrl, {
13
+ method: "POST",
14
+ headers: { "content-type": "application/x-www-form-urlencoded" },
15
+ body: new URLSearchParams({
16
+ grant_type: "client_credentials",
17
+ client_id: clientId,
18
+ client_secret: clientSecret,
19
+ }).toString(),
20
+ });
21
+ if (!response.ok) {
22
+ // Never echo the response body: it can contain credentials.
23
+ return {
24
+ kind: "error",
25
+ reason: `the token endpoint returned HTTP ${response.status}`,
26
+ };
27
+ }
28
+ const payload = await response.json();
29
+ const accessToken = typeof payload === "object" &&
30
+ payload !== null &&
31
+ "access_token" in payload
32
+ ? String(payload.access_token)
33
+ : "";
34
+ if (!accessToken) {
35
+ return {
36
+ kind: "error",
37
+ reason: "the token response did not contain an access token",
38
+ };
39
+ }
40
+ return { kind: "token", accessToken };
41
+ }
42
+ catch (error) {
43
+ return {
44
+ kind: "error",
45
+ reason: `the token endpoint could not be reached: ${error instanceof Error ? error.message : String(error)}`,
46
+ };
47
+ }
48
+ }
49
+ /**
50
+ * Fetches an authenticated endpoint. Returns the status code and parsed
51
+ * body; error bodies are never returned, so nothing sensitive is printed.
52
+ */
53
+ export async function fetchAuthenticated(url, accessToken, context) {
54
+ try {
55
+ const response = await context.fetch(url, {
56
+ method: "GET",
57
+ headers: { authorization: `Bearer ${accessToken}` },
58
+ });
59
+ if (!response.ok) {
60
+ return {
61
+ ok: false,
62
+ status: response.status,
63
+ reason: `${url.pathname} returned HTTP ${response.status}`,
64
+ };
65
+ }
66
+ return { ok: true, body: await response.json() };
67
+ }
68
+ catch (error) {
69
+ return {
70
+ ok: false,
71
+ reason: `${url.pathname} could not be reached: ${error instanceof Error ? error.message : String(error)}`,
72
+ };
73
+ }
74
+ }
75
+ export function withTrailingSlash(url) {
76
+ return url.href.endsWith("/") ? url : new URL(`${url.href}/`);
77
+ }
78
+ //# sourceMappingURL=api-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-auth.js","sourceRoot":"","sources":["../../src/services/api-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { DoctorCheck } from "../types.js";
2
+ export interface ProviderHealth {
3
+ providerId: string;
4
+ type: string;
5
+ ok: boolean;
6
+ latencyMs?: number;
7
+ error?: string;
8
+ }
9
+ /**
10
+ * Compares the CLI version with the backend version. A different major
11
+ * version is a failure, a different minor version a warning; patch
12
+ * differences are fine. Unparsable versions (e.g. "main" from a dev build)
13
+ * cannot be judged, so they warn rather than fail.
14
+ */
15
+ export declare function compareVersions(cliVersion: string, backendVersion: string): DoctorCheck;
16
+ export declare function readBackendVersion(body: unknown): string | undefined;
17
+ export declare function readProviderHealth(body: unknown): ProviderHealth[];
18
+ /**
19
+ * Summarizes KMS provider health. Provider errors are reported by provider
20
+ * id and type only; the raw error text is not echoed, since it can contain
21
+ * endpoint details or credentials.
22
+ */
23
+ export declare function summarizeProviderHealth(providers: ProviderHealth[]): DoctorCheck;
24
+ //# sourceMappingURL=backend-checks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-checks.d.ts","sourceRoot":"","sources":["../../src/services/backend-checks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC3B,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACvB,WAAW,CA+Bb;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMpE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,EAAE,CAiBlE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACnC,SAAS,EAAE,cAAc,EAAE,GAC5B,WAAW,CAkCb"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Compares the CLI version with the backend version. A different major
3
+ * version is a failure, a different minor version a warning; patch
4
+ * differences are fine. Unparsable versions (e.g. "main" from a dev build)
5
+ * cannot be judged, so they warn rather than fail.
6
+ */
7
+ export function compareVersions(cliVersion, backendVersion) {
8
+ const name = "version compatibility";
9
+ const cli = parse(cliVersion);
10
+ const backend = parse(backendVersion);
11
+ if (!cli || !backend) {
12
+ return {
13
+ name,
14
+ status: "warn",
15
+ message: `CLI ${cliVersion} and backend ${backendVersion} cannot be compared as versions.`,
16
+ };
17
+ }
18
+ if (cli.major !== backend.major) {
19
+ return {
20
+ name,
21
+ status: "fail",
22
+ message: `CLI ${cliVersion} and backend ${backendVersion} are different major versions. Install a matching CLI with npm install -g @eudiplo/cli@${backend.major}.`,
23
+ };
24
+ }
25
+ if (cli.minor !== backend.minor) {
26
+ return {
27
+ name,
28
+ status: "warn",
29
+ message: `CLI ${cliVersion} and backend ${backendVersion} differ in minor version; some commands may not be supported.`,
30
+ };
31
+ }
32
+ return {
33
+ name,
34
+ status: "pass",
35
+ message: `CLI ${cliVersion} matches backend ${backendVersion}.`,
36
+ };
37
+ }
38
+ export function readBackendVersion(body) {
39
+ if (typeof body === "object" && body !== null && "version" in body) {
40
+ const version = body.version;
41
+ return typeof version === "string" && version ? version : undefined;
42
+ }
43
+ return undefined;
44
+ }
45
+ export function readProviderHealth(body) {
46
+ if (!Array.isArray(body)) {
47
+ throw new Error("the provider health response was not a list");
48
+ }
49
+ return body.map((entry) => {
50
+ const record = entry;
51
+ return {
52
+ providerId: String(record.providerId ?? "unknown"),
53
+ type: String(record.type ?? "unknown"),
54
+ ok: record.ok === true,
55
+ latencyMs: typeof record.latencyMs === "number"
56
+ ? record.latencyMs
57
+ : undefined,
58
+ error: typeof record.error === "string" ? record.error : undefined,
59
+ };
60
+ });
61
+ }
62
+ /**
63
+ * Summarizes KMS provider health. Provider errors are reported by provider
64
+ * id and type only; the raw error text is not echoed, since it can contain
65
+ * endpoint details or credentials.
66
+ */
67
+ export function summarizeProviderHealth(providers) {
68
+ const name = "KMS providers";
69
+ if (providers.length === 0) {
70
+ return {
71
+ name,
72
+ status: "warn",
73
+ message: "No KMS providers are registered for this tenant.",
74
+ };
75
+ }
76
+ const failing = providers.filter((provider) => !provider.ok);
77
+ if (failing.length > 0) {
78
+ return {
79
+ name,
80
+ status: "fail",
81
+ message: `${failing.length}/${providers.length} provider(s) unhealthy: ${failing
82
+ .map((provider) => `${provider.providerId} (${provider.type})${provider.error ? ", health check reported an error" : ""}`)
83
+ .join(", ")}`,
84
+ };
85
+ }
86
+ return {
87
+ name,
88
+ status: "pass",
89
+ message: `${providers.length} provider(s) healthy: ${providers
90
+ .map((provider) => `${provider.providerId} (${provider.type}${provider.latencyMs === undefined ? "" : `, ${provider.latencyMs}ms`})`)
91
+ .join(", ")}`,
92
+ };
93
+ }
94
+ function parse(version) {
95
+ const match = /^v?(\d+)\.(\d+)\.(\d+)/.exec(version.trim());
96
+ if (!match) {
97
+ return undefined;
98
+ }
99
+ return {
100
+ major: Number(match[1]),
101
+ minor: Number(match[2]),
102
+ patch: Number(match[3]),
103
+ };
104
+ }
105
+ //# sourceMappingURL=backend-checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-checks.js","sourceRoot":"","sources":["../../src/services/backend-checks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface BrowserLauncher {
2
+ command: string;
3
+ args: string[];
4
+ }
5
+ export interface LauncherEnvironment {
6
+ platform: NodeJS.Platform;
7
+ env: NodeJS.ProcessEnv;
8
+ /** Resolves an executable name on PATH, or undefined when absent. */
9
+ which: (name: string) => Promise<string | undefined>;
10
+ }
11
+ /**
12
+ * Only web URLs are ever handed to a launcher. Instance URLs are validated
13
+ * when they are registered, but a hand-edited config must not be able to turn
14
+ * `open` into "run whatever this file:// or custom-scheme URL points at".
15
+ */
16
+ export declare function assertWebUrl(value: string): URL;
17
+ /**
18
+ * Picks how to open a URL in a browser, or returns undefined when this
19
+ * environment has no usable browser (SSH sessions, containers, CI). Every
20
+ * launcher receives the URL as a single argv entry; no shell ever parses it.
21
+ */
22
+ export declare function chooseLauncher(url: string, { platform, env, which }: LauncherEnvironment): Promise<BrowserLauncher | undefined>;
23
+ /**
24
+ * Starts the launcher detached. Resolves true once it has been spawned and
25
+ * false when it could not be started, so the caller can fall back to
26
+ * printing the URL.
27
+ */
28
+ export declare function launchBrowser(launcher: BrowserLauncher): Promise<boolean>;
29
+ export declare function pathLookup(env: NodeJS.ProcessEnv, platform?: NodeJS.Platform): (name: string) => Promise<string | undefined>;
30
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/services/browser.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,qEAAqE;IACrE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACxD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAa/C;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAChC,GAAG,EAAE,MAAM,EACX,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,mBAAmB,GAC9C,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAwCtC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAYzE;AAED,wBAAgB,UAAU,CACtB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC7C,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoB/C"}
@@ -0,0 +1,102 @@
1
+ import { spawn } from "node:child_process";
2
+ import { access } from "node:fs/promises";
3
+ import { delimiter, join } from "node:path";
4
+ /**
5
+ * Only web URLs are ever handed to a launcher. Instance URLs are validated
6
+ * when they are registered, but a hand-edited config must not be able to turn
7
+ * `open` into "run whatever this file:// or custom-scheme URL points at".
8
+ */
9
+ export function assertWebUrl(value) {
10
+ let url;
11
+ try {
12
+ url = new URL(value);
13
+ }
14
+ catch {
15
+ throw new Error(`${value} is not a valid absolute URL.`);
16
+ }
17
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
18
+ throw new Error(`Refusing to open ${value}: only http and https URLs are supported.`);
19
+ }
20
+ return url;
21
+ }
22
+ /**
23
+ * Picks how to open a URL in a browser, or returns undefined when this
24
+ * environment has no usable browser (SSH sessions, containers, CI). Every
25
+ * launcher receives the URL as a single argv entry; no shell ever parses it.
26
+ */
27
+ export async function chooseLauncher(url, { platform, env, which }) {
28
+ // $BROWSER is the conventional user override. Only a bare command is
29
+ // honoured; anything with arguments or placeholders is ignored rather
30
+ // than split, so the value is never interpreted by a shell.
31
+ const browser = env.BROWSER?.trim();
32
+ if (browser && !/\s|%s/.test(browser)) {
33
+ const command = await which(browser);
34
+ if (command) {
35
+ return { command, args: [url] };
36
+ }
37
+ }
38
+ if (platform === "darwin") {
39
+ return { command: "open", args: [url] };
40
+ }
41
+ if (platform === "win32") {
42
+ // Avoids `cmd /c start`, where "&" in a query string would be parsed.
43
+ return {
44
+ command: "rundll32.exe",
45
+ args: ["url.dll,FileProtocolHandler", url],
46
+ };
47
+ }
48
+ // WSL: open the Windows browser when wslu is installed.
49
+ if (env.WSL_DISTRO_NAME) {
50
+ const wslview = await which("wslview");
51
+ if (wslview) {
52
+ return { command: wslview, args: [url] };
53
+ }
54
+ }
55
+ if (env.DISPLAY || env.WAYLAND_DISPLAY) {
56
+ const xdgOpen = await which("xdg-open");
57
+ if (xdgOpen) {
58
+ return { command: xdgOpen, args: [url] };
59
+ }
60
+ }
61
+ return undefined;
62
+ }
63
+ /**
64
+ * Starts the launcher detached. Resolves true once it has been spawned and
65
+ * false when it could not be started, so the caller can fall back to
66
+ * printing the URL.
67
+ */
68
+ export function launchBrowser(launcher) {
69
+ return new Promise((resolveLaunch) => {
70
+ const child = spawn(launcher.command, launcher.args, {
71
+ detached: true,
72
+ stdio: "ignore",
73
+ });
74
+ child.once("error", () => resolveLaunch(false));
75
+ child.once("spawn", () => {
76
+ child.unref();
77
+ resolveLaunch(true);
78
+ });
79
+ });
80
+ }
81
+ export function pathLookup(env, platform = process.platform) {
82
+ const extensions = platform === "win32"
83
+ ? ["", ...(env.PATHEXT ?? ".EXE;.CMD;.BAT;.COM").split(";")]
84
+ : [""];
85
+ return async (name) => {
86
+ const entries = (env.PATH ?? "").split(delimiter).filter(Boolean);
87
+ for (const entry of entries) {
88
+ for (const extension of extensions) {
89
+ const candidate = join(entry, `${name}${extension}`);
90
+ try {
91
+ await access(candidate);
92
+ return candidate;
93
+ }
94
+ catch {
95
+ // keep looking
96
+ }
97
+ }
98
+ }
99
+ return undefined;
100
+ };
101
+ }
102
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/services/browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { InstanceConfig } from "../types.js";
2
+ export interface ComposeLogOptions {
3
+ follow?: boolean;
4
+ tail?: number;
5
+ since?: string;
6
+ }
7
+ export declare function assertServiceName(service: string): void;
8
+ export declare function assertSince(since: string): void;
9
+ /**
10
+ * Options shared by every Compose invocation for an instance: env file,
11
+ * compose files, profiles and project name, all resolved against the
12
+ * project directory.
13
+ */
14
+ export declare function buildComposeBaseArgs(instance: InstanceConfig, projectDirectory: string, composeFiles: string[]): string[];
15
+ export declare function buildComposePsArgs(): string[];
16
+ export declare function buildComposeListServicesArgs(): string[];
17
+ export declare function buildComposeLogsArgs(service: string | undefined, options?: ComposeLogOptions): string[];
18
+ export declare function buildComposePullArgs(service: string | undefined): string[];
19
+ export declare function buildComposeUpArgs(): string[];
20
+ export declare function buildComposeRestartArgs(service: string | undefined): string[];
21
+ /**
22
+ * Parses `compose config --services` output. `podman compose` can print a
23
+ * provider notice before delegating, so anything that is not a valid service
24
+ * name is dropped rather than trusted.
25
+ */
26
+ export declare function parseServiceList(stdout: string): string[];
27
+ export declare function assertKnownService(service: string, known: string[]): void;
28
+ //# sourceMappingURL=compose-args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-args.d.ts","sourceRoot":"","sources":["../../src/services/compose-args.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAuBlD,MAAM,WAAW,iBAAiB;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMvD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAS/C;AAQD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,cAAc,EACxB,gBAAgB,EAAE,MAAM,EACxB,YAAY,EAAE,MAAM,EAAE,GACvB,MAAM,EAAE,CAeV;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED,wBAAgB,4BAA4B,IAAI,MAAM,EAAE,CAEvD;AAED,wBAAgB,oBAAoB,CAChC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,GAAE,iBAAsB,GAChC,MAAM,EAAE,CAkBV;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAO1E;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAO7E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAMzD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAMzE"}
@@ -0,0 +1,117 @@
1
+ import { resolve } from "node:path";
2
+ /**
3
+ * Argument construction for `docker compose` and `podman compose`.
4
+ *
5
+ * Both runtimes accept the same subcommands and flags used here, so the
6
+ * builders are runtime-agnostic: the runtime only decides which executable
7
+ * receives the argv. Every value that comes from the user is validated before
8
+ * it is placed in the argv, so it can never be read as an extra option.
9
+ */
10
+ // Compose service names: must start with a letter or digit, then letters,
11
+ // digits, dots, underscores or dashes. Rejecting a leading "-" is what keeps
12
+ // a service name from being parsed as a flag.
13
+ const SERVICE_NAME = /^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/;
14
+ // Go-style durations as accepted by `compose logs --since`, e.g. 10m, 1h30m.
15
+ const DURATION = /^(\d+(\.\d+)?(ns|us|µs|ms|s|m|h))+$/;
16
+ // RFC 3339 / ISO 8601 timestamps, e.g. 2026-09-01 or 2026-09-01T12:00:00Z.
17
+ const TIMESTAMP = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2})?)?$/;
18
+ export function assertServiceName(service) {
19
+ if (!SERVICE_NAME.test(service)) {
20
+ throw new Error(`Invalid service name ${JSON.stringify(service)}. Service names start with a letter or digit and contain only letters, digits, ".", "_" and "-".`);
21
+ }
22
+ }
23
+ export function assertSince(since) {
24
+ const isDuration = DURATION.test(since);
25
+ const isTimestamp = TIMESTAMP.test(since) && !Number.isNaN(Date.parse(since));
26
+ if (!isDuration && !isTimestamp) {
27
+ throw new Error(`Invalid --since value ${JSON.stringify(since)}. Use a duration such as 10m or 2h30m, or a timestamp such as 2026-09-01T12:00:00Z.`);
28
+ }
29
+ }
30
+ function assertTail(tail) {
31
+ if (!Number.isInteger(tail) || tail < 0) {
32
+ throw new Error("--tail must be a whole number of lines, 0 or more.");
33
+ }
34
+ }
35
+ /**
36
+ * Options shared by every Compose invocation for an instance: env file,
37
+ * compose files, profiles and project name, all resolved against the
38
+ * project directory.
39
+ */
40
+ export function buildComposeBaseArgs(instance, projectDirectory, composeFiles) {
41
+ const args = ["compose"];
42
+ if (instance.envFile) {
43
+ args.push("--env-file", resolve(projectDirectory, instance.envFile));
44
+ }
45
+ for (const composeFile of composeFiles) {
46
+ args.push("-f", resolve(projectDirectory, composeFile));
47
+ }
48
+ for (const profile of instance.composeProfiles ?? []) {
49
+ args.push("--profile", profile);
50
+ }
51
+ if (instance.projectName) {
52
+ args.push("--project-name", instance.projectName);
53
+ }
54
+ return args;
55
+ }
56
+ export function buildComposePsArgs() {
57
+ return ["ps"];
58
+ }
59
+ export function buildComposeListServicesArgs() {
60
+ return ["config", "--services"];
61
+ }
62
+ export function buildComposeLogsArgs(service, options = {}) {
63
+ const args = ["logs"];
64
+ if (options.follow === true) {
65
+ args.push("--follow");
66
+ }
67
+ if (options.tail !== undefined) {
68
+ assertTail(options.tail);
69
+ args.push("--tail", String(options.tail));
70
+ }
71
+ if (options.since !== undefined) {
72
+ assertSince(options.since);
73
+ args.push("--since", options.since);
74
+ }
75
+ if (service !== undefined) {
76
+ assertServiceName(service);
77
+ args.push(service);
78
+ }
79
+ return args;
80
+ }
81
+ export function buildComposePullArgs(service) {
82
+ const args = ["pull"];
83
+ if (service !== undefined) {
84
+ assertServiceName(service);
85
+ args.push(service);
86
+ }
87
+ return args;
88
+ }
89
+ export function buildComposeUpArgs() {
90
+ return ["up", "-d"];
91
+ }
92
+ export function buildComposeRestartArgs(service) {
93
+ const args = ["restart"];
94
+ if (service !== undefined) {
95
+ assertServiceName(service);
96
+ args.push(service);
97
+ }
98
+ return args;
99
+ }
100
+ /**
101
+ * Parses `compose config --services` output. `podman compose` can print a
102
+ * provider notice before delegating, so anything that is not a valid service
103
+ * name is dropped rather than trusted.
104
+ */
105
+ export function parseServiceList(stdout) {
106
+ return stdout
107
+ .split(/\r?\n/)
108
+ .map((line) => line.trim())
109
+ .filter((line) => SERVICE_NAME.test(line))
110
+ .sort();
111
+ }
112
+ export function assertKnownService(service, known) {
113
+ if (!known.includes(service)) {
114
+ throw new Error(`Unknown service ${service}. Services in this project: ${known.join(", ") || "none"}.`);
115
+ }
116
+ }
117
+ //# sourceMappingURL=compose-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-args.js","sourceRoot":"","sources":["../../src/services/compose-args.ts"],"names":[],"mappings":"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"}
@@ -75,17 +75,17 @@ function storageEnv(storage) {
75
75
  if (storage === "local") {
76
76
  return ["STORAGE_DRIVER=local", "LOCAL_STORAGE_DIR=/app/uploads"];
77
77
  }
78
- const minioPassword = randomSecret();
78
+ const rustfsPassword = randomSecret();
79
79
  return [
80
80
  "STORAGE_DRIVER=s3",
81
- "S3_ENDPOINT=http://minio:9000",
81
+ "S3_ENDPOINT=http://rustfs:9000",
82
82
  "S3_REGION=us-east-1",
83
- "S3_ACCESS_KEY_ID=minioadmin",
84
- `S3_SECRET_ACCESS_KEY=${minioPassword}`,
83
+ "S3_ACCESS_KEY_ID=rustfsadmin",
84
+ `S3_SECRET_ACCESS_KEY=${rustfsPassword}`,
85
85
  "S3_BUCKET=uploads",
86
86
  "S3_FORCE_PATH_STYLE=true",
87
- "MINIO_ROOT_USER=minioadmin",
88
- `MINIO_ROOT_PASSWORD=${minioPassword}`,
87
+ "RUSTFS_ACCESS_KEY=rustfsadmin",
88
+ `RUSTFS_SECRET_KEY=${rustfsPassword}`,
89
89
  ];
90
90
  }
91
91
  function kmsEnv(kms) {