@lumerahq/cli 0.19.17 → 0.19.18

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.
@@ -25,6 +25,12 @@ while (__pkgDir !== "/") {
25
25
  }
26
26
  var pkg = JSON.parse(readFileSync(resolve(__pkgDir, "package.json"), "utf-8"));
27
27
  var CLI_USER_AGENT = `lumera-cli/${pkg.version}`;
28
+ var USER_CONTEXT_ENV = "LUMERA_USER_ID";
29
+ var USER_CONTEXT_HEADER = "X-Lumera-User-Id";
30
+ function userContextHeaders() {
31
+ const userID = process.env[USER_CONTEXT_ENV]?.trim();
32
+ return userID ? { [USER_CONTEXT_HEADER]: userID } : {};
33
+ }
28
34
  var ApiError = class extends Error {
29
35
  status;
30
36
  body;
@@ -67,6 +73,7 @@ var ApiClient = class {
67
73
  "User-Agent": CLI_USER_AGENT,
68
74
  "X-Lumera-Client": "lumera-cli",
69
75
  ...this.projectExternalId ? { "X-Lumera-Project": this.projectExternalId } : {},
76
+ ...userContextHeaders(),
70
77
  ...options.headers
71
78
  };
72
79
  const method = (options.method || "GET").toUpperCase();
@@ -357,6 +364,7 @@ function createApiClient(token, baseUrl, projectExternalId) {
357
364
  }
358
365
 
359
366
  export {
367
+ userContextHeaders,
360
368
  ApiError,
361
369
  isApiErrorStatus,
362
370
  createApiClient
@@ -1,3 +1,6 @@
1
+ import {
2
+ userContextHeaders
3
+ } from "./chunk-ML7XB7Z2.js";
1
4
  import {
2
5
  fetchWithRetry
3
6
  } from "./chunk-FJFIWC7G.js";
@@ -38,6 +41,16 @@ function resolveVersion(cwd) {
38
41
  }
39
42
  return formatTimestampVersion();
40
43
  }
44
+ function resolveGitSha(cwd) {
45
+ try {
46
+ return execSync("git rev-parse HEAD", {
47
+ cwd,
48
+ stdio: ["ignore", "pipe", "ignore"]
49
+ }).toString().trim();
50
+ } catch {
51
+ return "";
52
+ }
53
+ }
41
54
  async function createTarball(distDir) {
42
55
  return new Promise((resolve2, reject) => {
43
56
  const chunks = [];
@@ -56,7 +69,8 @@ async function ensureAppRecord(apiBase, token, appName, appTitle) {
56
69
  {
57
70
  headers: {
58
71
  Authorization: `Bearer ${token}`,
59
- "X-Lumera-Client": "lumera-cli"
72
+ "X-Lumera-Client": "lumera-cli",
73
+ ...userContextHeaders()
60
74
  }
61
75
  }
62
76
  );
@@ -75,7 +89,8 @@ async function ensureAppRecord(apiBase, token, appName, appTitle) {
75
89
  headers: {
76
90
  Authorization: `Bearer ${token}`,
77
91
  "Content-Type": "application/json",
78
- "X-Lumera-Client": "lumera-cli"
92
+ "X-Lumera-Client": "lumera-cli",
93
+ ...userContextHeaders()
79
94
  },
80
95
  body: JSON.stringify(appData)
81
96
  });
@@ -104,11 +119,14 @@ async function deploy(options) {
104
119
  const formData = new FormData();
105
120
  formData.append("tarball", new Blob([new Uint8Array(tarball)]), "dist.tar.gz");
106
121
  formData.append("version", version);
122
+ const gitSha = resolveGitSha(dirname(distDir));
123
+ if (gitSha) formData.append("git_sha", gitSha);
107
124
  const res = await fetchWithRetry(`${apiUrl}/custom-apps/${appName}/deploy`, {
108
125
  method: "POST",
109
126
  headers: {
110
127
  Authorization: `Bearer ${token}`,
111
- "X-Lumera-Client": "lumera-cli"
128
+ "X-Lumera-Client": "lumera-cli",
129
+ ...userContextHeaders()
112
130
  },
113
131
  body: formData
114
132
  });
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  createApiClient,
6
6
  isApiErrorStatus
7
- } from "./chunk-MDCAEFUH.js";
7
+ } from "./chunk-ML7XB7Z2.js";
8
8
  import {
9
9
  findProjectRoot,
10
10
  getAppName
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  deps,
3
3
  syncDeps
4
- } from "./chunk-4WZMUFC7.js";
4
+ } from "./chunk-S7FJU4GM.js";
5
5
  import "./chunk-2CR762KB.js";
6
- import "./chunk-MDCAEFUH.js";
6
+ import "./chunk-ML7XB7Z2.js";
7
7
  import "./chunk-ZH3NVYEQ.js";
8
8
  import "./chunk-FJFIWC7G.js";
9
9
  import "./chunk-PNKVD2UK.js";
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  dev
3
- } from "./chunk-VOIZWYZD.js";
3
+ } from "./chunk-PY4J2U2M.js";
4
4
  import {
5
5
  syncDeps
6
- } from "./chunk-4WZMUFC7.js";
6
+ } from "./chunk-S7FJU4GM.js";
7
7
  import {
8
8
  loadEnv
9
9
  } from "./chunk-2CR762KB.js";
10
10
  import {
11
11
  createApiClient
12
- } from "./chunk-MDCAEFUH.js";
12
+ } from "./chunk-ML7XB7Z2.js";
13
13
  import {
14
14
  findProjectRoot,
15
15
  getApiUrl,
package/dist/index.js CHANGED
@@ -219,39 +219,39 @@ async function main() {
219
219
  switch (command) {
220
220
  // Resource commands
221
221
  case "plan":
222
- await import("./resources-M6R2RFSW.js").then((m) => m.plan(args.slice(1)));
222
+ await import("./resources-CVVG2XLD.js").then((m) => m.plan(args.slice(1)));
223
223
  break;
224
224
  case "apply":
225
- await import("./resources-M6R2RFSW.js").then((m) => m.apply(args.slice(1)));
225
+ await import("./resources-CVVG2XLD.js").then((m) => m.apply(args.slice(1)));
226
226
  break;
227
227
  case "pull":
228
- await import("./resources-M6R2RFSW.js").then((m) => m.pull(args.slice(1)));
228
+ await import("./resources-CVVG2XLD.js").then((m) => m.pull(args.slice(1)));
229
229
  break;
230
230
  case "destroy":
231
- await import("./resources-M6R2RFSW.js").then((m) => m.destroy(args.slice(1)));
231
+ await import("./resources-CVVG2XLD.js").then((m) => m.destroy(args.slice(1)));
232
232
  break;
233
233
  case "list":
234
- await import("./resources-M6R2RFSW.js").then((m) => m.list(args.slice(1)));
234
+ await import("./resources-CVVG2XLD.js").then((m) => m.list(args.slice(1)));
235
235
  break;
236
236
  case "show":
237
- await import("./resources-M6R2RFSW.js").then((m) => m.show(args.slice(1)));
237
+ await import("./resources-CVVG2XLD.js").then((m) => m.show(args.slice(1)));
238
238
  break;
239
239
  case "diff":
240
- await import("./resources-M6R2RFSW.js").then((m) => m.diff(args.slice(1)));
240
+ await import("./resources-CVVG2XLD.js").then((m) => m.diff(args.slice(1)));
241
241
  break;
242
242
  // Development
243
243
  case "dev":
244
- await import("./dev-PONRO7VN.js").then((m) => m.dev(args.slice(1)));
244
+ await import("./dev-O6TXHGAK.js").then((m) => m.dev(args.slice(1)));
245
245
  break;
246
246
  case "run":
247
- await import("./run-R6MO23U7.js").then((m) => m.run(args.slice(1)));
247
+ await import("./run-NR3725J2.js").then((m) => m.run(args.slice(1)));
248
248
  break;
249
249
  // Project
250
250
  case "init":
251
- await import("./init-KJOWD2KQ.js").then((m) => m.init(args.slice(1)));
251
+ await import("./init-HUV5ZJAE.js").then((m) => m.init(args.slice(1)));
252
252
  break;
253
253
  case "register":
254
- await import("./register-QBRKXWNX.js").then((m) => m.register(args.slice(1)));
254
+ await import("./register-OZDOFUPF.js").then((m) => m.register(args.slice(1)));
255
255
  break;
256
256
  case "templates":
257
257
  await import("./templates-LNUOTNLN.js").then((m) => m.templates(subcommand, args.slice(2)));
@@ -268,7 +268,7 @@ async function main() {
268
268
  break;
269
269
  // Dependencies
270
270
  case "deps":
271
- await import("./deps-KVHWZARX.js").then((m) => m.deps(args.slice(1)));
271
+ await import("./deps-H4QYLGM7.js").then((m) => m.deps(args.slice(1)));
272
272
  break;
273
273
  // Auth
274
274
  case "login":
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-BHYDYR75.js";
8
8
  import {
9
9
  createApiClient
10
- } from "./chunk-MDCAEFUH.js";
10
+ } from "./chunk-ML7XB7Z2.js";
11
11
  import {
12
12
  getToken,
13
13
  init_auth,
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-BHYDYR75.js";
7
7
  import {
8
8
  createApiClient
9
- } from "./chunk-MDCAEFUH.js";
9
+ } from "./chunk-ML7XB7Z2.js";
10
10
  import {
11
11
  findProjectRoot,
12
12
  getAppName,
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  deploy
3
- } from "./chunk-VOIZWYZD.js";
3
+ } from "./chunk-PY4J2U2M.js";
4
4
  import {
5
5
  syncDeps
6
- } from "./chunk-4WZMUFC7.js";
6
+ } from "./chunk-S7FJU4GM.js";
7
7
  import {
8
8
  loadEnv
9
9
  } from "./chunk-2CR762KB.js";
10
10
  import {
11
11
  ApiError,
12
12
  createApiClient
13
- } from "./chunk-MDCAEFUH.js";
13
+ } from "./chunk-ML7XB7Z2.js";
14
14
  import {
15
15
  findProjectRoot,
16
16
  getApiUrl,
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-2CR762KB.js";
4
4
  import {
5
5
  createApiClient
6
- } from "./chunk-MDCAEFUH.js";
6
+ } from "./chunk-ML7XB7Z2.js";
7
7
  import {
8
8
  findProjectRoot,
9
9
  getApiUrl,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumerahq/cli",
3
- "version": "0.19.17",
3
+ "version": "0.19.18",
4
4
  "description": "CLI for building and deploying Lumera apps",
5
5
  "type": "module",
6
6
  "engines": {