@lumerahq/cli 0.36.5 → 0.36.6

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.
@@ -3,7 +3,7 @@ import {
3
3
  getCredentials,
4
4
  getTokenSource,
5
5
  init_auth
6
- } from "./chunk-JLVVHTBY.js";
6
+ } from "./chunk-3JL2E65P.js";
7
7
  import {
8
8
  fetchWithRetry
9
9
  } from "./chunk-FJFIWC7G.js";
@@ -139,10 +139,6 @@ function getAppName(projectRoot) {
139
139
  const pkg = readPackageJson(projectRoot);
140
140
  return pkg.name;
141
141
  }
142
- function getAppTitle(projectRoot) {
143
- const pkg = readPackageJson(projectRoot);
144
- return pkg.lumera?.name || pkg.name;
145
- }
146
142
  function detectProjectVersion(projectRoot) {
147
143
  const pkg = readPackageJson(projectRoot);
148
144
  if (pkg.lumera?.version !== void 0) {
@@ -195,7 +191,6 @@ export {
195
191
  findProjectRoot,
196
192
  readPackageJson,
197
193
  getAppName,
198
- getAppTitle,
199
194
  detectProjectVersion,
200
195
  getProjectId,
201
196
  setProjectId,
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-CHUCWVFV.js";
9
9
  import {
10
10
  userContextHeaders
11
- } from "./chunk-RV7WQAK3.js";
11
+ } from "./chunk-T5SFSXJ4.js";
12
12
  import {
13
13
  fetchWithRetry
14
14
  } from "./chunk-FJFIWC7G.js";
@@ -168,9 +168,8 @@ async function deployAppAPI(options) {
168
168
  });
169
169
  return version;
170
170
  }
171
- async function ensureAppRecord(apiBase, token, appName, appTitle, accessLevel) {
171
+ async function ensureAppRecord(apiBase, token, appName, accessLevel) {
172
172
  const appData = {
173
- name: appTitle,
174
173
  hosting_type: "s3"
175
174
  };
176
175
  if (accessLevel) {
@@ -189,12 +188,13 @@ async function ensureAppRecord(apiBase, token, appName, appTitle, accessLevel) {
189
188
  if (!res.ok) {
190
189
  throw new Error(`Failed to register app: ${await res.text()}`);
191
190
  }
191
+ const payload = await res.json();
192
+ return payload.app?.name || appName;
192
193
  }
193
194
  async function deploy(options) {
194
195
  const {
195
196
  token,
196
197
  appName,
197
- appTitle,
198
198
  distDir,
199
199
  apiUrl,
200
200
  accessLevel,
@@ -208,7 +208,7 @@ async function deploy(options) {
208
208
  assertDeployableGitRelease(gitRelease);
209
209
  const projectRuntime = skipAppAPI ? { kind: "none" } : resolveConfiguredProjectRuntime(projectDir);
210
210
  console.log(pc.dim("Ensuring app record..."));
211
- await ensureAppRecord(apiUrl, token, appName, appTitle, accessLevel);
211
+ const appTitle = await ensureAppRecord(apiUrl, token, appName, accessLevel);
212
212
  console.log(pc.cyan(`Preparing ${appTitle}...`));
213
213
  const version = options.reuseFrontend ? options.version || process.env.LUMERA_APP_VERSION?.trim() || gitRelease.sha.slice(0, 7) : resolveDeploymentVersion(projectDir, gitRelease, options.version);
214
214
  if (options.reuseFrontend && !gitRelease.sha) {
@@ -258,9 +258,8 @@ Deployed! ${launchUrl}`));
258
258
  }
259
259
  return { launchUrl, appUrl, version };
260
260
  }
261
- async function registerDevApp(apiBase, token, appName, appTitle, appUrl) {
261
+ async function registerDevApp(apiBase, token, appName, appUrl) {
262
262
  const appData = {
263
- name: appTitle,
264
263
  dev_iframe_url: appUrl
265
264
  };
266
265
  const res = await fetchWithRetry(`${apiBase}/custom-apps/${encodeURIComponent(appName)}/registration`, {
@@ -276,6 +275,8 @@ async function registerDevApp(apiBase, token, appName, appTitle, appUrl) {
276
275
  if (!res.ok) {
277
276
  throw new Error(`Failed to register app: ${await res.text()}`);
278
277
  }
278
+ const payload = await res.json();
279
+ return payload.app?.name || appName;
279
280
  }
280
281
  function isPortInUse(port, host = "127.0.0.1") {
281
282
  return new Promise((resolve2) => {
@@ -355,7 +356,6 @@ async function dev(options) {
355
356
  const {
356
357
  token,
357
358
  appName,
358
- appTitle,
359
359
  port,
360
360
  host,
361
361
  appUrl = `http://localhost:${port}`,
@@ -369,7 +369,7 @@ async function dev(options) {
369
369
  return;
370
370
  }
371
371
  console.log(pc.dim(" Registering dev preview URL..."));
372
- await registerDevApp(apiUrl, token, appName, appTitle, appUrl);
372
+ const appTitle = await registerDevApp(apiUrl, token, appName, appUrl);
373
373
  console.log();
374
374
  console.log(pc.cyan(pc.bold(` ${appTitle} - Dev Server`)));
375
375
  console.log();
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getBaseUrl
3
- } from "./chunk-JLVVHTBY.js";
3
+ } from "./chunk-3JL2E65P.js";
4
4
  import {
5
5
  fetchWithRetry
6
6
  } from "./chunk-FJFIWC7G.js";
@@ -4,11 +4,11 @@ import {
4
4
  import {
5
5
  createApiClient,
6
6
  isApiErrorStatus
7
- } from "./chunk-RV7WQAK3.js";
7
+ } from "./chunk-T5SFSXJ4.js";
8
8
  import {
9
9
  findProjectRoot,
10
10
  getAppName
11
- } from "./chunk-JLVVHTBY.js";
11
+ } from "./chunk-3JL2E65P.js";
12
12
 
13
13
  // src/commands/deps.ts
14
14
  import pc from "picocolors";
@@ -2,7 +2,7 @@ import {
2
2
  getCredentials,
3
3
  getToken,
4
4
  init_auth
5
- } from "./chunk-JLVVHTBY.js";
5
+ } from "./chunk-3JL2E65P.js";
6
6
  import {
7
7
  fetchWithRetry
8
8
  } from "./chunk-FJFIWC7G.js";
@@ -2,10 +2,10 @@ import {
2
2
  deps,
3
3
  syncDeps,
4
4
  syncResourceShareDeps
5
- } from "./chunk-Z7GPNMK5.js";
5
+ } from "./chunk-NNTGBSRL.js";
6
6
  import "./chunk-2CR762KB.js";
7
- import "./chunk-RV7WQAK3.js";
8
- import "./chunk-JLVVHTBY.js";
7
+ import "./chunk-T5SFSXJ4.js";
8
+ import "./chunk-3JL2E65P.js";
9
9
  import "./chunk-FJFIWC7G.js";
10
10
  import "./chunk-PNKVD2UK.js";
11
11
  export {
@@ -1,27 +1,26 @@
1
1
  import {
2
2
  dev
3
- } from "./chunk-LPKJZUG2.js";
3
+ } from "./chunk-6AKVB3FO.js";
4
4
  import "./chunk-UGAIWMQV.js";
5
5
  import "./chunk-CHUCWVFV.js";
6
6
  import "./chunk-PIY3XXJI.js";
7
7
  import "./chunk-KI57NBGA.js";
8
8
  import {
9
9
  syncDeps
10
- } from "./chunk-Z7GPNMK5.js";
10
+ } from "./chunk-NNTGBSRL.js";
11
11
  import {
12
12
  loadEnv
13
13
  } from "./chunk-2CR762KB.js";
14
14
  import {
15
15
  createApiClient
16
- } from "./chunk-RV7WQAK3.js";
16
+ } from "./chunk-T5SFSXJ4.js";
17
17
  import {
18
18
  findProjectRoot,
19
19
  getApiUrl,
20
20
  getAppName,
21
- getAppTitle,
22
21
  getToken,
23
22
  init_auth
24
- } from "./chunk-JLVVHTBY.js";
23
+ } from "./chunk-3JL2E65P.js";
25
24
  import "./chunk-FJFIWC7G.js";
26
25
  import "./chunk-PNKVD2UK.js";
27
26
 
@@ -126,7 +125,6 @@ async function dev2(args) {
126
125
  loadEnv(projectRoot);
127
126
  const token = getToken(projectRoot);
128
127
  const appName = getAppName(projectRoot);
129
- const appTitle = getAppTitle(projectRoot);
130
128
  const apiUrl = getApiUrl();
131
129
  await syncDeps(projectRoot, {
132
130
  write: true,
@@ -162,7 +160,6 @@ async function dev2(args) {
162
160
  await dev({
163
161
  token,
164
162
  appName,
165
- appTitle,
166
163
  port,
167
164
  host,
168
165
  appUrl,
package/dist/index.js CHANGED
@@ -243,32 +243,32 @@ async function main() {
243
243
  switch (command) {
244
244
  // Resource commands
245
245
  case "plan":
246
- await import("./resources-S7IGFX2W.js").then((m) => m.plan(args.slice(1)));
246
+ await import("./resources-N6ELCQGN.js").then((m) => m.plan(args.slice(1)));
247
247
  break;
248
248
  case "apply":
249
- await import("./resources-S7IGFX2W.js").then((m) => m.apply(args.slice(1)));
249
+ await import("./resources-N6ELCQGN.js").then((m) => m.apply(args.slice(1)));
250
250
  break;
251
251
  case "pull":
252
- await import("./resources-S7IGFX2W.js").then((m) => m.pull(args.slice(1)));
252
+ await import("./resources-N6ELCQGN.js").then((m) => m.pull(args.slice(1)));
253
253
  break;
254
254
  case "destroy":
255
- await import("./resources-S7IGFX2W.js").then((m) => m.destroy(args.slice(1)));
255
+ await import("./resources-N6ELCQGN.js").then((m) => m.destroy(args.slice(1)));
256
256
  break;
257
257
  case "list":
258
- await import("./resources-S7IGFX2W.js").then((m) => m.list(args.slice(1)));
258
+ await import("./resources-N6ELCQGN.js").then((m) => m.list(args.slice(1)));
259
259
  break;
260
260
  case "show":
261
- await import("./resources-S7IGFX2W.js").then((m) => m.show(args.slice(1)));
261
+ await import("./resources-N6ELCQGN.js").then((m) => m.show(args.slice(1)));
262
262
  break;
263
263
  case "diff":
264
- await import("./resources-S7IGFX2W.js").then((m) => m.diff(args.slice(1)));
264
+ await import("./resources-N6ELCQGN.js").then((m) => m.diff(args.slice(1)));
265
265
  break;
266
266
  // Development
267
267
  case "dev":
268
- await import("./dev-PDBCCR3L.js").then((m) => m.dev(args.slice(1)));
268
+ await import("./dev-EEYY7XPP.js").then((m) => m.dev(args.slice(1)));
269
269
  break;
270
270
  case "run":
271
- await import("./run-TMJPC4PK.js").then((m) => m.run(args.slice(1)));
271
+ await import("./run-VM434JES.js").then((m) => m.run(args.slice(1)));
272
272
  break;
273
273
  case "functions":
274
274
  await import("./functions-C5SGYMZK.js").then(
@@ -282,27 +282,27 @@ async function main() {
282
282
  break;
283
283
  // Project
284
284
  case "init":
285
- await import("./init-LZAXKILN.js").then((m) => m.init(args.slice(1)));
285
+ await import("./init-SOBX62TC.js").then((m) => m.init(args.slice(1)));
286
286
  break;
287
287
  case "register":
288
- await import("./register-MOO266NL.js").then((m) => m.register(args.slice(1)));
288
+ await import("./register-Y7SLDXLU.js").then((m) => m.register(args.slice(1)));
289
289
  break;
290
290
  case "templates":
291
291
  await import("./templates-LNUOTNLN.js").then((m) => m.templates(subcommand, args.slice(2)));
292
292
  break;
293
293
  case "status":
294
- await import("./status-NPNIY3QP.js").then((m) => m.status(args.slice(1)));
294
+ await import("./status-ZRJ46LXB.js").then((m) => m.status(args.slice(1)));
295
295
  break;
296
296
  case "migrate":
297
- await import("./migrate-NWTNC2V3.js").then((m) => m.migrate(args.slice(1)));
297
+ await import("./migrate-YLKMCION.js").then((m) => m.migrate(args.slice(1)));
298
298
  break;
299
299
  // Skills
300
300
  case "skills":
301
- await import("./skills-LWOZFY5X.js").then((m) => m.skills(subcommand, args.slice(2)));
301
+ await import("./skills-4IBZ43OD.js").then((m) => m.skills(subcommand, args.slice(2)));
302
302
  break;
303
303
  // Dependencies
304
304
  case "deps":
305
- await import("./deps-SIKW7IW2.js").then((m) => m.deps(args.slice(1)));
305
+ await import("./deps-4HMRDTU7.js").then((m) => m.deps(args.slice(1)));
306
306
  break;
307
307
  // Feature flags (read the in-sandbox snapshot)
308
308
  case "flags":
@@ -310,13 +310,13 @@ async function main() {
310
310
  break;
311
311
  // Auth
312
312
  case "login":
313
- await import("./auth-MJO5DFOF.js").then((m) => m.login(args.slice(1)));
313
+ await import("./auth-OHPKPSWX.js").then((m) => m.login(args.slice(1)));
314
314
  break;
315
315
  case "logout":
316
- await import("./auth-MJO5DFOF.js").then((m) => m.logout(args.slice(1)));
316
+ await import("./auth-OHPKPSWX.js").then((m) => m.logout(args.slice(1)));
317
317
  break;
318
318
  case "whoami":
319
- await import("./auth-MJO5DFOF.js").then((m) => m.whoami());
319
+ await import("./auth-OHPKPSWX.js").then((m) => m.whoami());
320
320
  break;
321
321
  // Convenience aliases
322
322
  case "help":
@@ -8,16 +8,16 @@ import {
8
8
  import {
9
9
  installAllSkills,
10
10
  syncSkillDescriptions
11
- } from "./chunk-XT3G4EDM.js";
11
+ } from "./chunk-BE4FBC34.js";
12
12
  import {
13
13
  createApiClient,
14
14
  validateProjectNameLength
15
- } from "./chunk-RV7WQAK3.js";
15
+ } from "./chunk-T5SFSXJ4.js";
16
16
  import {
17
17
  getToken,
18
18
  init_auth,
19
19
  setProjectId
20
- } from "./chunk-JLVVHTBY.js";
20
+ } from "./chunk-3JL2E65P.js";
21
21
  import "./chunk-FJFIWC7G.js";
22
22
  import "./chunk-PNKVD2UK.js";
23
23
 
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  detectProjectVersion,
10
10
  findProjectRoot
11
- } from "./chunk-JLVVHTBY.js";
11
+ } from "./chunk-3JL2E65P.js";
12
12
  import "./chunk-PNKVD2UK.js";
13
13
 
14
14
  // src/commands/migrate.ts
@@ -7,13 +7,13 @@ import {
7
7
  import {
8
8
  createApiClient,
9
9
  validateProjectExternalId
10
- } from "./chunk-RV7WQAK3.js";
10
+ } from "./chunk-T5SFSXJ4.js";
11
11
  import {
12
12
  findProjectRoot,
13
13
  getAppName,
14
14
  getProjectId,
15
15
  setProjectId
16
- } from "./chunk-JLVVHTBY.js";
16
+ } from "./chunk-3JL2E65P.js";
17
17
  import "./chunk-FJFIWC7G.js";
18
18
  import "./chunk-PNKVD2UK.js";
19
19
 
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  deploy,
3
3
  deployAppAPI
4
- } from "./chunk-LPKJZUG2.js";
4
+ } from "./chunk-6AKVB3FO.js";
5
5
  import "./chunk-UGAIWMQV.js";
6
6
  import "./chunk-CHUCWVFV.js";
7
7
  import "./chunk-PIY3XXJI.js";
8
8
  import "./chunk-KI57NBGA.js";
9
9
  import {
10
10
  syncDeps
11
- } from "./chunk-Z7GPNMK5.js";
11
+ } from "./chunk-NNTGBSRL.js";
12
12
  import {
13
13
  loadEnv
14
14
  } from "./chunk-2CR762KB.js";
@@ -17,16 +17,15 @@ import {
17
17
  createApiClient,
18
18
  isApiErrorStatus,
19
19
  validateCollectionNameLength
20
- } from "./chunk-RV7WQAK3.js";
20
+ } from "./chunk-T5SFSXJ4.js";
21
21
  import {
22
22
  findProjectRoot,
23
23
  getApiUrl,
24
24
  getAppName,
25
- getAppTitle,
26
25
  getProjectId,
27
26
  getToken,
28
27
  init_auth
29
- } from "./chunk-JLVVHTBY.js";
28
+ } from "./chunk-3JL2E65P.js";
30
29
  import {
31
30
  fetchWithRetry
32
31
  } from "./chunk-FJFIWC7G.js";
@@ -2806,7 +2805,6 @@ async function applyApp(args) {
2806
2805
  loadEnv(projectRoot);
2807
2806
  const token = getToken(projectRoot);
2808
2807
  const appName = getAppName(projectRoot);
2809
- const appTitle = getAppTitle(projectRoot);
2810
2808
  const apiUrl = getApiUrl();
2811
2809
  if (!skipBuild) {
2812
2810
  console.log(pc2.dim(" Building..."));
@@ -2832,7 +2830,7 @@ async function applyApp(args) {
2832
2830
  `Invalid --access-level "${accessLevel}". Valid values: ${validAccessLevels.join(", ")}`
2833
2831
  );
2834
2832
  }
2835
- await deploy({ token, appName, appTitle, distDir, apiUrl, accessLevel, skipAppAPI, reuseFrontend });
2833
+ await deploy({ token, appName, distDir, apiUrl, accessLevel, skipAppAPI, reuseFrontend });
2836
2834
  }
2837
2835
  async function applyAppAPI(projectRoot) {
2838
2836
  await deployAppAPI({
@@ -4257,13 +4255,15 @@ async function destroyApp(skipConfirm) {
4257
4255
  console.log(pc2.yellow(` App "${appName}" not found in Lumera.`));
4258
4256
  return;
4259
4257
  }
4260
- console.log(pc2.dim(` App to delete: ${appRecord.name} (${appRecord.external_id})`));
4258
+ const project = await createApiClient(token, void 0, appName).getProjectByExternalId(appName).catch(() => null);
4259
+ const projectName = project?.name || appRecord.external_id;
4260
+ console.log(pc2.dim(` App to delete: ${projectName} (${appRecord.external_id})`));
4261
4261
  console.log();
4262
4262
  if (!skipConfirm) {
4263
4263
  const { confirmed } = await prompts({
4264
4264
  type: "confirm",
4265
4265
  name: "confirmed",
4266
- message: `Delete app "${appRecord.name}" from Lumera?`,
4266
+ message: `Delete app "${projectName}" from Lumera?`,
4267
4267
  initial: false
4268
4268
  });
4269
4269
  if (!confirmed) {
@@ -4284,7 +4284,7 @@ async function destroyApp(skipConfirm) {
4284
4284
  if (!deleteRes.ok) {
4285
4285
  throw new Error(`Failed to delete app: ${await deleteRes.text()}`);
4286
4286
  }
4287
- console.log(pc2.green(" \u2713"), `App "${appRecord.name}" deleted from Lumera.`);
4287
+ console.log(pc2.green(" \u2713"), `App "${projectName}" deleted from Lumera.`);
4288
4288
  }
4289
4289
  async function showResource(api, platformDir, resourceType, resourceName, appName, projectId) {
4290
4290
  if (resourceType === "views") {
@@ -4493,10 +4493,10 @@ async function showResource(api, platformDir, resourceType, resourceName, appNam
4493
4493
  loadEnv(projectRoot);
4494
4494
  const token = getToken(projectRoot);
4495
4495
  const appName2 = getAppName(projectRoot);
4496
- const appTitle = getAppTitle(projectRoot);
4496
+ const project = await api.getProjectByExternalId(appName2).catch(() => null);
4497
4497
  let apiUrl = getApiUrl().replace(/\/+$/, "").replace(/\/api$/, "");
4498
4498
  console.log();
4499
- console.log(pc2.bold(` App: ${appTitle || appName2}`));
4499
+ console.log(pc2.bold(` App: ${project?.name || appName2}`));
4500
4500
  console.log();
4501
4501
  console.log(` External ID: ${appName2}`);
4502
4502
  const filterParam = encodeURIComponent(JSON.stringify({ external_id: appName2 }));
@@ -3,14 +3,14 @@ import {
3
3
  } from "./chunk-2CR762KB.js";
4
4
  import {
5
5
  createApiClient
6
- } from "./chunk-RV7WQAK3.js";
6
+ } from "./chunk-T5SFSXJ4.js";
7
7
  import {
8
8
  findProjectRoot,
9
9
  getApiUrl,
10
10
  getAppName,
11
11
  getToken,
12
12
  init_auth
13
- } from "./chunk-JLVVHTBY.js";
13
+ } from "./chunk-3JL2E65P.js";
14
14
  import {
15
15
  fetchWithRetry
16
16
  } from "./chunk-FJFIWC7G.js";
@@ -8,8 +8,8 @@ import {
8
8
  slugToDirName,
9
9
  slugToFilename,
10
10
  syncSkillDescriptions
11
- } from "./chunk-XT3G4EDM.js";
12
- import "./chunk-JLVVHTBY.js";
11
+ } from "./chunk-BE4FBC34.js";
12
+ import "./chunk-3JL2E65P.js";
13
13
  import "./chunk-FJFIWC7G.js";
14
14
  import "./chunk-PNKVD2UK.js";
15
15
 
@@ -1,14 +1,16 @@
1
+ import {
2
+ createApiClient
3
+ } from "./chunk-T5SFSXJ4.js";
1
4
  import {
2
5
  detectProjectVersion,
3
6
  findProjectRoot,
4
7
  getAppName,
5
- getAppTitle,
6
8
  getBaseUrl,
7
9
  getToken,
8
10
  getTokenSource,
9
11
  init_auth,
10
12
  readPackageJson
11
- } from "./chunk-JLVVHTBY.js";
13
+ } from "./chunk-3JL2E65P.js";
12
14
  import {
13
15
  fetchWithRetry
14
16
  } from "./chunk-FJFIWC7G.js";
@@ -67,7 +69,6 @@ ${pc.dim("Description:")}
67
69
  const pkg = readPackageJson(projectRoot);
68
70
  const version = detectProjectVersion(projectRoot);
69
71
  const appName = getAppName(projectRoot);
70
- const appTitle = getAppTitle(projectRoot);
71
72
  const tokenSource = getTokenSource(projectRoot);
72
73
  let userEmail;
73
74
  let companyName;
@@ -91,7 +92,8 @@ ${pc.dim("Description:")}
91
92
  console.log(pc.bold(` ${identity}`));
92
93
  console.log();
93
94
  }
94
- console.log(pc.bold(`Project: ${appTitle}`));
95
+ const project = tokenValid && token ? await createApiClient(token, void 0, appName).getProjectByExternalId(appName).catch(() => null) : null;
96
+ console.log(pc.bold(`Project: ${project?.name || appName}`));
95
97
  console.log(pc.dim(` Name: ${appName}`));
96
98
  console.log(pc.dim(` Version: ${pkg.version || "0.0.0"}`));
97
99
  console.log(pc.dim(` Structure: v${version}${version === 0 ? " (legacy)" : ""}`));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumerahq/cli",
3
- "version": "0.36.5",
3
+ "version": "0.36.6",
4
4
  "description": "CLI for building and deploying Lumera apps",
5
5
  "type": "module",
6
6
  "engines": {