@lizard-build/cli 0.1.0 → 0.3.30

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 (184) hide show
  1. package/.github/workflows/release.yml +90 -0
  2. package/AGENTS.md +113 -0
  3. package/README.md +41 -0
  4. package/dist/commands/add.js +318 -45
  5. package/dist/commands/add.js.map +1 -1
  6. package/dist/commands/config.d.ts +2 -0
  7. package/dist/commands/config.js +68 -0
  8. package/dist/commands/config.js.map +1 -0
  9. package/dist/commands/docs.d.ts +2 -0
  10. package/dist/commands/docs.js +13 -0
  11. package/dist/commands/docs.js.map +1 -0
  12. package/dist/commands/domain.d.ts +9 -0
  13. package/dist/commands/domain.js +195 -0
  14. package/dist/commands/domain.js.map +1 -0
  15. package/dist/commands/git.js +175 -36
  16. package/dist/commands/git.js.map +1 -1
  17. package/dist/commands/init.d.ts +24 -0
  18. package/dist/commands/init.js +128 -86
  19. package/dist/commands/init.js.map +1 -1
  20. package/dist/commands/link.d.ts +7 -0
  21. package/dist/commands/link.js +104 -33
  22. package/dist/commands/link.js.map +1 -1
  23. package/dist/commands/login.js +4 -3
  24. package/dist/commands/login.js.map +1 -1
  25. package/dist/commands/logs.js +223 -30
  26. package/dist/commands/logs.js.map +1 -1
  27. package/dist/commands/open.js +3 -2
  28. package/dist/commands/open.js.map +1 -1
  29. package/dist/commands/port.d.ts +7 -0
  30. package/dist/commands/port.js +49 -0
  31. package/dist/commands/port.js.map +1 -0
  32. package/dist/commands/projects.js +36 -6
  33. package/dist/commands/projects.js.map +1 -1
  34. package/dist/commands/ps.js +32 -39
  35. package/dist/commands/ps.js.map +1 -1
  36. package/dist/commands/redeploy.js +48 -8
  37. package/dist/commands/redeploy.js.map +1 -1
  38. package/dist/commands/regions.js +2 -5
  39. package/dist/commands/regions.js.map +1 -1
  40. package/dist/commands/restart.js +84 -10
  41. package/dist/commands/restart.js.map +1 -1
  42. package/dist/commands/run.d.ts +9 -0
  43. package/dist/commands/run.js +61 -22
  44. package/dist/commands/run.js.map +1 -1
  45. package/dist/commands/scale.d.ts +10 -0
  46. package/dist/commands/scale.js +166 -0
  47. package/dist/commands/scale.js.map +1 -0
  48. package/dist/commands/secrets.js +200 -89
  49. package/dist/commands/secrets.js.map +1 -1
  50. package/dist/commands/service-set.d.ts +49 -0
  51. package/dist/commands/service-set.js +552 -0
  52. package/dist/commands/service-set.js.map +1 -0
  53. package/dist/commands/service-show.d.ts +11 -0
  54. package/dist/commands/service-show.js +44 -0
  55. package/dist/commands/service-show.js.map +1 -0
  56. package/dist/commands/service.d.ts +8 -0
  57. package/dist/commands/service.js +262 -0
  58. package/dist/commands/service.js.map +1 -0
  59. package/dist/commands/skill.d.ts +2 -0
  60. package/dist/commands/skill.js +146 -0
  61. package/dist/commands/skill.js.map +1 -0
  62. package/dist/commands/ssh.d.ts +2 -0
  63. package/dist/commands/ssh.js +161 -0
  64. package/dist/commands/ssh.js.map +1 -0
  65. package/dist/commands/status.d.ts +7 -0
  66. package/dist/commands/status.js +49 -38
  67. package/dist/commands/status.js.map +1 -1
  68. package/dist/commands/unlink.d.ts +5 -0
  69. package/dist/commands/unlink.js +18 -0
  70. package/dist/commands/unlink.js.map +1 -0
  71. package/dist/commands/up.d.ts +9 -0
  72. package/dist/commands/up.js +417 -0
  73. package/dist/commands/up.js.map +1 -0
  74. package/dist/commands/upgrade.d.ts +2 -0
  75. package/dist/commands/upgrade.js +79 -0
  76. package/dist/commands/upgrade.js.map +1 -0
  77. package/dist/commands/whoami.js +26 -6
  78. package/dist/commands/whoami.js.map +1 -1
  79. package/dist/commands/workspace.d.ts +8 -0
  80. package/dist/commands/workspace.js +36 -0
  81. package/dist/commands/workspace.js.map +1 -0
  82. package/dist/index.js +209 -82
  83. package/dist/index.js.map +1 -1
  84. package/dist/lib/api.d.ts +17 -2
  85. package/dist/lib/api.js +85 -51
  86. package/dist/lib/api.js.map +1 -1
  87. package/dist/lib/auth.d.ts +3 -11
  88. package/dist/lib/auth.js +16 -36
  89. package/dist/lib/auth.js.map +1 -1
  90. package/dist/lib/config.d.ts +36 -15
  91. package/dist/lib/config.js +71 -58
  92. package/dist/lib/config.js.map +1 -1
  93. package/dist/lib/format.d.ts +1 -0
  94. package/dist/lib/format.js +17 -4
  95. package/dist/lib/format.js.map +1 -1
  96. package/dist/lib/name.d.ts +11 -0
  97. package/dist/lib/name.js +26 -0
  98. package/dist/lib/name.js.map +1 -0
  99. package/dist/lib/picker.d.ts +32 -0
  100. package/dist/lib/picker.js +91 -0
  101. package/dist/lib/picker.js.map +1 -0
  102. package/dist/lib/resolve.d.ts +85 -0
  103. package/dist/lib/resolve.js +203 -0
  104. package/dist/lib/resolve.js.map +1 -0
  105. package/dist/lib/updater.d.ts +16 -0
  106. package/dist/lib/updater.js +102 -0
  107. package/dist/lib/updater.js.map +1 -0
  108. package/lizard-wrapper.sh +2 -0
  109. package/package.json +11 -3
  110. package/skill-data/core/SKILL.md +239 -0
  111. package/src/commands/add.ts +388 -56
  112. package/src/commands/config.ts +80 -0
  113. package/src/commands/docs.ts +15 -0
  114. package/src/commands/domain.ts +248 -0
  115. package/src/commands/git.ts +201 -40
  116. package/src/commands/init.ts +149 -100
  117. package/src/commands/link.ts +127 -35
  118. package/src/commands/login.ts +4 -3
  119. package/src/commands/logs.ts +283 -27
  120. package/src/commands/open.ts +3 -2
  121. package/src/commands/port.ts +57 -0
  122. package/src/commands/projects.ts +43 -6
  123. package/src/commands/ps.ts +39 -60
  124. package/src/commands/redeploy.ts +51 -10
  125. package/src/commands/regions.ts +2 -6
  126. package/src/commands/restart.ts +84 -10
  127. package/src/commands/run.ts +68 -24
  128. package/src/commands/scale.ts +216 -0
  129. package/src/commands/secrets.ts +277 -100
  130. package/src/commands/service-set.ts +669 -0
  131. package/src/commands/service-show.ts +52 -0
  132. package/src/commands/service.ts +298 -0
  133. package/src/commands/skill.ts +157 -0
  134. package/src/commands/ssh.ts +176 -0
  135. package/src/commands/status.ts +51 -46
  136. package/src/commands/unlink.ts +17 -0
  137. package/src/commands/up.ts +461 -0
  138. package/src/commands/upgrade.ts +87 -0
  139. package/src/commands/whoami.ts +34 -6
  140. package/src/commands/workspace.ts +44 -0
  141. package/src/index.ts +219 -85
  142. package/src/lib/api.ts +114 -51
  143. package/src/lib/auth.ts +22 -46
  144. package/src/lib/config.ts +100 -65
  145. package/src/lib/format.ts +18 -4
  146. package/src/lib/name.ts +27 -0
  147. package/src/lib/picker.ts +133 -0
  148. package/src/lib/resolve.ts +285 -0
  149. package/src/lib/updater.ts +106 -0
  150. package/test/cli.test.ts +491 -0
  151. package/test/fixtures/hello-app/Dockerfile +5 -0
  152. package/test/fixtures/hello-app/index.js +5 -0
  153. package/test/unit/api.test.ts +66 -0
  154. package/test/unit/config.test.ts +94 -0
  155. package/test/unit/init.test.ts +211 -0
  156. package/test/unit/json.test.ts +208 -0
  157. package/test/unit/picker.test.ts +161 -0
  158. package/test/unit/resolve.test.ts +124 -0
  159. package/test/unit/service-set.test.ts +355 -0
  160. package/vitest.config.ts +10 -0
  161. package/dist/commands/connect.d.ts +0 -2
  162. package/dist/commands/connect.js +0 -117
  163. package/dist/commands/connect.js.map +0 -1
  164. package/dist/commands/context.d.ts +0 -2
  165. package/dist/commands/context.js +0 -71
  166. package/dist/commands/context.js.map +0 -1
  167. package/dist/commands/deploy.d.ts +0 -2
  168. package/dist/commands/deploy.js +0 -120
  169. package/dist/commands/deploy.js.map +0 -1
  170. package/dist/commands/destroy.d.ts +0 -2
  171. package/dist/commands/destroy.js +0 -51
  172. package/dist/commands/destroy.js.map +0 -1
  173. package/dist/commands/update.d.ts +0 -2
  174. package/dist/commands/update.js +0 -41
  175. package/dist/commands/update.js.map +0 -1
  176. package/dist/commands/version.d.ts +0 -2
  177. package/dist/commands/version.js +0 -37
  178. package/dist/commands/version.js.map +0 -1
  179. package/src/commands/connect.ts +0 -145
  180. package/src/commands/context.ts +0 -93
  181. package/src/commands/deploy.ts +0 -153
  182. package/src/commands/destroy.ts +0 -51
  183. package/src/commands/update.ts +0 -44
  184. package/src/commands/version.ts +0 -37
@@ -1,18 +1,84 @@
1
1
  import chalk from "chalk";
2
- import { api } from "../lib/api.js";
3
- import { resolveProjectId } from "../lib/config.js";
4
- import { success, isJSONMode, printJSON, table } from "../lib/format.js";
2
+ import * as p from "@clack/prompts";
3
+ import { Option } from "commander";
4
+ import { api, withScope } from "../lib/api.js";
5
+ import { getProjectLink } from "../lib/config.js";
6
+ import { getActiveService, resolveProjectScope } from "../lib/resolve.js";
7
+ import { success, isJSONMode, printJSON, table, isTTY } from "../lib/format.js";
8
+ async function resolveScope(projectFlag, serviceFlag, global) {
9
+ const { projectId, scope: rs } = await resolveProjectScope(projectFlag);
10
+ if (global) {
11
+ return {
12
+ path: withScope(`/api/projects/${projectId}/secrets`, rs),
13
+ label: "project",
14
+ projectId,
15
+ scope: rs,
16
+ };
17
+ }
18
+ if (serviceFlag) {
19
+ const svc = await getActiveService(serviceFlag, projectId);
20
+ return {
21
+ path: withScope(`/api/apps/${svc.id}/secrets`, rs),
22
+ label: "service",
23
+ projectId,
24
+ serviceId: svc.id,
25
+ serviceName: svc.name,
26
+ scope: rs,
27
+ };
28
+ }
29
+ const link = getProjectLink();
30
+ if (!link?.serviceId) {
31
+ throw new Error("No service linked. Pass --service <name>, run `lizard service link <name>`, or use --global.");
32
+ }
33
+ return {
34
+ path: withScope(`/api/apps/${link.serviceId}/secrets`, rs),
35
+ label: "service",
36
+ projectId,
37
+ serviceId: link.serviceId,
38
+ serviceName: link.serviceName || link.serviceId,
39
+ scope: rs,
40
+ };
41
+ }
42
+ async function configApplySecrets(scope, secrets) {
43
+ const payload = scope.label === "project"
44
+ ? { secrets: { shared: secrets } }
45
+ : { secrets: { services: { [scope.serviceName]: secrets } } };
46
+ await api.post(withScope(`/api/projects/${scope.projectId}/config:apply`, scope.scope), payload);
47
+ }
48
+ function parsePairs(pairs) {
49
+ const out = {};
50
+ for (const pair of pairs) {
51
+ const eq = pair.indexOf("=");
52
+ if (eq < 1) {
53
+ throw new Error(`Invalid format: "${pair}". Use KEY=value (e.g. \`lizard secrets set DATABASE_URL=postgres://...\`).`);
54
+ }
55
+ out[pair.slice(0, eq)] = pair.slice(eq + 1);
56
+ }
57
+ return out;
58
+ }
5
59
  export function registerSecrets(program) {
6
- const secret = program
7
- .command("secret")
8
- .description("Manage project secrets");
9
- secret
10
- .command("list")
11
- .description("List project secrets")
12
- .option("--show", "Reveal secret values")
60
+ const cmd = program
61
+ .command("secrets")
62
+ .alias("secret")
63
+ .description("Manage secrets (default scope: service; --global for project)")
64
+ .option("--global", "Target the whole project")
65
+ .option("--show", "Reveal values")
66
+ .option("--ref", "List reference templates available in this scope")
67
+ .addOption(new Option("--refs").hideHelp().implies({ ref: true }))
68
+ .option("-s, --service <name>", "Service to scope to (overrides linked)")
69
+ .option("-p, --project <id>", "Project to scope to")
70
+ .addHelpText("after", `
71
+ Notes:
72
+ Secrets apply live to running VMs. Keys prefixed with NEXT_PUBLIC_* or VITE_*
73
+ trigger a redeploy because they're baked into the client bundle at build time.`)
13
74
  .action(async (opts) => {
14
- const projectId = resolveProjectId(program.opts().project);
15
- const secrets = await api.get(`/api/projects/${projectId}/secrets`);
75
+ const scope = await resolveScope(opts.project, opts.service, opts.global);
76
+ // --ref list reference templates exposed by the platform
77
+ if (opts.ref) {
78
+ await printRefs(scope);
79
+ return;
80
+ }
81
+ const secrets = await api.get(scope.path);
16
82
  if (isJSONMode()) {
17
83
  printJSON(opts.show
18
84
  ? secrets
@@ -20,119 +86,164 @@ export function registerSecrets(program) {
20
86
  return;
21
87
  }
22
88
  if (secrets.length === 0) {
23
- console.log("No secrets. Use `lizard secret set KEY=value`.");
89
+ console.log(`No ${scope.label} secrets. Use \`lizard secrets set KEY=value${opts.global ? " --global" : ""}\`.`);
24
90
  return;
25
91
  }
26
92
  table(["Key", "Value"], secrets.map((s) => [
27
93
  s.key,
28
- opts.show ? s.value : chalk.dim("•".repeat(Math.min(s.value.length, 20))),
94
+ opts.show
95
+ ? s.value
96
+ : chalk.dim("•".repeat(Math.min(s.value.length, 20))),
29
97
  ]));
30
98
  });
31
- secret
99
+ cmd
100
+ .command("list")
101
+ .description("List secrets")
102
+ .option("--global", "Target the whole project")
103
+ .option("--show", "Reveal values")
104
+ .option("--ref", "List reference templates available in this scope")
105
+ .addOption(new Option("--refs").hideHelp().implies({ ref: true }))
106
+ .option("-s, --service <name>", "Service to scope to (overrides linked)")
107
+ .option("-p, --project <id>", "Project to scope to")
108
+ .action(async (opts, sub) => {
109
+ const inherited = sub.parent?.opts() || {};
110
+ const scope = await resolveScope(opts.project ?? inherited.project, opts.service ?? inherited.service, opts.global || inherited.global);
111
+ if (opts.ref) {
112
+ await printRefs(scope);
113
+ return;
114
+ }
115
+ const secrets = await api.get(scope.path);
116
+ if (isJSONMode()) {
117
+ printJSON(opts.show
118
+ ? secrets
119
+ : secrets.map((s) => ({ key: s.key, value: "***" })));
120
+ return;
121
+ }
122
+ if (secrets.length === 0) {
123
+ console.log(`No ${scope.label} secrets.`);
124
+ return;
125
+ }
126
+ table(["Key", "Value"], secrets.map((s) => [
127
+ s.key,
128
+ opts.show
129
+ ? s.value
130
+ : chalk.dim("•".repeat(Math.min(s.value.length, 20))),
131
+ ]));
132
+ });
133
+ cmd
32
134
  .command("set")
33
135
  .argument("<pairs...>", "KEY=value pairs")
34
136
  .description("Set one or more secrets")
35
- .option("--no-redeploy", "Don't trigger redeploy")
36
- .action(async (pairs, opts) => {
37
- const projectId = resolveProjectId(program.opts().project);
38
- // Parse KEY=value pairs
39
- const newSecrets = {};
40
- for (const pair of pairs) {
41
- const eqIdx = pair.indexOf("=");
42
- if (eqIdx < 1) {
43
- throw new Error(`Invalid format: "${pair}". Use KEY=value`);
44
- }
45
- newSecrets[pair.slice(0, eqIdx)] = pair.slice(eqIdx + 1);
46
- }
47
- // Get existing secrets, merge, update
48
- const existing = await api.get(`/api/projects/${projectId}/secrets`);
49
- const merged = [];
50
- const existingKeys = new Set();
51
- for (const s of existing) {
52
- if (newSecrets[s.key] !== undefined) {
53
- merged.push({ key: s.key, value: newSecrets[s.key] });
54
- existingKeys.add(s.key);
55
- }
56
- else {
57
- merged.push(s);
58
- }
59
- }
60
- // Add new keys
61
- for (const [key, value] of Object.entries(newSecrets)) {
62
- if (!existingKeys.has(key)) {
63
- merged.push({ key, value });
64
- }
65
- }
66
- await api.put(`/api/projects/${projectId}/secrets`, merged);
137
+ .option("--global", "Target the whole project")
138
+ .option("-s, --service <name>", "Service to scope to (overrides linked)")
139
+ .option("-p, --project <id>", "Project to scope to")
140
+ .action(async (pairs, opts, sub) => {
141
+ const inherited = sub.parent?.opts() || {};
142
+ const scope = await resolveScope(opts.project ?? inherited.project, opts.service ?? inherited.service, opts.global || inherited.global);
143
+ const newSecrets = parsePairs(pairs);
144
+ await configApplySecrets(scope, newSecrets);
67
145
  if (isJSONMode()) {
68
- printJSON({ updated: Object.keys(newSecrets) });
146
+ printJSON({ updated: Object.keys(newSecrets), scope: scope.label });
69
147
  }
70
148
  else {
71
- success(`${Object.keys(newSecrets).length} secret(s) updated`);
149
+ success(`${Object.keys(newSecrets).length} ${scope.label} secret(s) updated`);
72
150
  }
73
151
  });
74
- secret
152
+ cmd
75
153
  .command("delete")
154
+ .alias("rm")
76
155
  .argument("<keys...>", "Secret keys to delete")
77
156
  .description("Delete one or more secrets")
78
- .action(async (keys) => {
79
- const projectId = resolveProjectId(program.opts().project);
80
- const existing = await api.get(`/api/projects/${projectId}/secrets`);
81
- const keysSet = new Set(keys);
82
- const filtered = existing.filter((s) => !keysSet.has(s.key));
83
- if (filtered.length === existing.length) {
84
- throw new Error(`Secret(s) not found: ${keys.join(", ")}`);
85
- }
86
- await api.put(`/api/projects/${projectId}/secrets`, filtered);
157
+ .option("--global", "Target the whole project")
158
+ .option("-y, --yes", "Skip confirmation")
159
+ .option("-s, --service <name>", "Service to scope to (overrides linked)")
160
+ .option("-p, --project <id>", "Project to scope to")
161
+ .action(async (keys, opts, sub) => {
162
+ const inherited = sub.parent?.opts() || {};
163
+ const scope = await resolveScope(opts.project ?? inherited.project, opts.service ?? inherited.service, opts.global || inherited.global);
164
+ const existing = await api.get(scope.path);
165
+ const existingKeys = new Set(existing.map((s) => s.key));
166
+ const notFound = keys.filter((k) => !existingKeys.has(k));
167
+ if (notFound.length > 0) {
168
+ throw new Error(`Secret(s) not found: ${notFound.join(", ")}`);
169
+ }
170
+ if (!opts.yes) {
171
+ if (!isTTY())
172
+ throw new Error("Use -y to confirm in non-interactive mode");
173
+ const summary = keys.length === 1 ? chalk.bold(keys[0]) : `${keys.length} keys`;
174
+ const confirm = await p.confirm({
175
+ message: `Delete ${summary} from ${chalk.bold(scope.label)} scope?`,
176
+ });
177
+ if (p.isCancel(confirm) || !confirm)
178
+ process.exit(5);
179
+ }
180
+ const deletePayload = {};
181
+ keys.forEach((k) => { deletePayload[k] = null; });
182
+ await configApplySecrets(scope, deletePayload);
87
183
  if (isJSONMode()) {
88
- printJSON({ deleted: keys });
184
+ printJSON({ deleted: keys, scope: scope.label });
89
185
  }
90
186
  else {
91
- success(`${keys.length} secret(s) deleted`);
187
+ success(`${keys.length} ${scope.label} secret(s) deleted`);
92
188
  }
93
189
  });
94
- secret
190
+ cmd
95
191
  .command("import")
96
- .description("Import secrets from stdin (KEY=value format, one per line)")
97
- .option("--no-redeploy", "Don't trigger redeploy")
98
- .action(async () => {
99
- const projectId = resolveProjectId(program.opts().project);
100
- // Read stdin
192
+ .description("Import secrets from stdin (KEY=value, one per line)")
193
+ .option("--global", "Target the whole project")
194
+ .option("-s, --service <name>", "Service to scope to (overrides linked)")
195
+ .option("-p, --project <id>", "Project to scope to")
196
+ .action(async (opts, sub) => {
197
+ const inherited = sub.parent?.opts() || {};
198
+ const scope = await resolveScope(opts.project ?? inherited.project, opts.service ?? inherited.service, opts.global || inherited.global);
101
199
  const chunks = [];
102
- for await (const chunk of process.stdin) {
200
+ for await (const chunk of process.stdin)
103
201
  chunks.push(chunk);
104
- }
105
202
  const input = Buffer.concat(chunks).toString("utf-8");
106
203
  const newSecrets = {};
107
204
  for (const line of input.split("\n")) {
108
205
  const trimmed = line.trim();
109
206
  if (!trimmed || trimmed.startsWith("#"))
110
207
  continue;
111
- const eqIdx = trimmed.indexOf("=");
112
- if (eqIdx < 1)
208
+ const eq = trimmed.indexOf("=");
209
+ if (eq < 1)
113
210
  continue;
114
- newSecrets[trimmed.slice(0, eqIdx)] = trimmed.slice(eqIdx + 1);
115
- }
116
- if (Object.keys(newSecrets).length === 0) {
117
- throw new Error("No valid KEY=value pairs found in input");
118
- }
119
- // Merge with existing
120
- const existing = await api.get(`/api/projects/${projectId}/secrets`);
121
- const existingMap = new Map(existing.map((s) => [s.key, s.value]));
122
- for (const [k, v] of Object.entries(newSecrets)) {
123
- existingMap.set(k, v);
124
- }
125
- const merged = Array.from(existingMap.entries()).map(([key, value]) => ({
126
- key,
127
- value,
128
- }));
129
- await api.put(`/api/projects/${projectId}/secrets`, merged);
211
+ newSecrets[trimmed.slice(0, eq)] = trimmed.slice(eq + 1);
212
+ }
213
+ if (!Object.keys(newSecrets).length) {
214
+ throw new Error("No valid KEY=value pairs in input");
215
+ }
216
+ await configApplySecrets(scope, newSecrets);
130
217
  if (isJSONMode()) {
131
- printJSON({ imported: Object.keys(newSecrets) });
218
+ printJSON({ imported: Object.keys(newSecrets), scope: scope.label });
132
219
  }
133
220
  else {
134
- success(`${Object.keys(newSecrets).length} secret(s) imported`);
221
+ success(`${Object.keys(newSecrets).length} ${scope.label} secret(s) imported`);
135
222
  }
136
223
  });
137
224
  }
225
+ /**
226
+ * Fetch the reference manifest from the backend so users know which
227
+ * `${{...}}` templates are valid (e.g. `${{Postgres.DATABASE_URL}}`,
228
+ * `${{api.LIZARD_PUBLIC_DOMAIN}}`). Backend endpoint:
229
+ * GET /api/projects/<id>/variables:refs
230
+ * GET /api/apps/<id>/variables:refs (for service-scope)
231
+ *
232
+ * Returns a flat list of templates ready to copy-paste into secret values.
233
+ */
234
+ async function printRefs(scope) {
235
+ const endpoint = scope.label === "service" && scope.serviceId
236
+ ? withScope(`/api/apps/${scope.serviceId}/variables:refs`, scope.scope)
237
+ : withScope(`/api/projects/${scope.projectId}/variables:refs`, scope.scope);
238
+ const refs = await api.get(endpoint);
239
+ if (isJSONMode()) {
240
+ printJSON(refs);
241
+ return;
242
+ }
243
+ if (!refs.length) {
244
+ console.log("No reference variables exposed in this scope.");
245
+ return;
246
+ }
247
+ table(["Template", "Source", "Description"], refs.map((r) => [chalk.cyan(r.template), r.source || "—", r.description || ""]));
248
+ }
138
249
  //# sourceMappingURL=secrets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/commands/secrets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/commands/secrets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * `lizard service set` — atomic patch of per-service configuration.
4
+ *
5
+ * Input modes (priority):
6
+ * 1. <service> --set <path>=<value> — positional service + repeatable --set pairs
7
+ * 2. -f <file> — read JSON from file (multi-service)
8
+ * 3. piped stdin JSON — auto-detected when stdin has data
9
+ * 4. interactive — TTY prompts when nothing else is given
10
+ *
11
+ * Field names are flat and match the wire schema of `POST /config:apply`
12
+ * exactly. There is no nested {build,deploy,source} grouping anywhere in the
13
+ * system — DB columns, REST schemas, node-agent payloads, and `service show`
14
+ * output are all flat. See SERVICE_FIELDS below for the full list.
15
+ *
16
+ * Namespaces (variables.*, secrets.*, sharedVariables) are kept because they
17
+ * really are separate stores (per-service / project-wide env), not flat
18
+ * service-config fields.
19
+ */
20
+ /**
21
+ * Canonical service-config fields accepted by `--set` and as keys in a `-f`
22
+ * file's cfg blob. Mirrors `configApplySchema.serviceConfigSchema` in
23
+ * dragonlabs-platform/server/src/routes/projects.ts.
24
+ */
25
+ export declare const SERVICE_FIELDS: readonly ["name", "sourceType", "repoUrl", "branch", "rootDirectory", "buildCommand", "watchPatterns", "dockerfilePath", "startCommand", "preDeployCommand", "healthcheckPath", "healthcheckTimeoutMs"];
26
+ export declare function validateName(name: string): string | null;
27
+ export declare function registerServiceSet(svc: Command): void;
28
+ /**
29
+ * Convert a normalised patch (services keyed by id, flat cfg blobs) into the
30
+ * wire body for `POST /api/projects/:id/config:apply`:
31
+ *
32
+ * { services: [{ id, name?, buildCommand?, startCommand?, ... }],
33
+ * secrets?: { shared?, services? } }
34
+ *
35
+ * `nameById` provides the current display name for each service id. Rename
36
+ * fires only when cfg.name is set AND differs from current — equal names
37
+ * are silently dropped so non-rename calls don't bloat the audit log.
38
+ *
39
+ * Unknown fields in cfg throw before any network call.
40
+ */
41
+ export declare function flattenPatch(patch: any, nameById: Map<string, string>): {
42
+ services: any[];
43
+ secrets?: any;
44
+ };
45
+ /** Validate a `--set` dot-path against the canonical (flat) field list and
46
+ * the `variables.*` namespace. Throws on anything else. */
47
+ export declare function validateSetPath(dotPath: string): void;
48
+ export declare function parseValue(dotPath: string, raw: string): unknown;
49
+ export declare function setDeep(obj: Record<string, any>, dotPath: string, value: unknown): void;