@layr-labs/ecloud-cli 0.2.0-dev → 0.2.0-dev.1

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 (71) hide show
  1. package/VERSION +2 -2
  2. package/dist/commands/auth/generate.js +4 -4
  3. package/dist/commands/auth/generate.js.map +1 -1
  4. package/dist/commands/auth/login.js +2 -2
  5. package/dist/commands/auth/login.js.map +1 -1
  6. package/dist/commands/auth/logout.js +2 -2
  7. package/dist/commands/auth/logout.js.map +1 -1
  8. package/dist/commands/auth/migrate.js +2 -2
  9. package/dist/commands/auth/migrate.js.map +1 -1
  10. package/dist/commands/auth/whoami.js +7 -5
  11. package/dist/commands/auth/whoami.js.map +1 -1
  12. package/dist/commands/billing/cancel.js +9 -7
  13. package/dist/commands/billing/cancel.js.map +1 -1
  14. package/dist/commands/billing/status.js +8 -5
  15. package/dist/commands/billing/status.js.map +1 -1
  16. package/dist/commands/billing/subscribe.js +14 -10
  17. package/dist/commands/billing/subscribe.js.map +1 -1
  18. package/dist/commands/compute/app/create.js +2 -2
  19. package/dist/commands/compute/app/create.js.map +1 -1
  20. package/dist/commands/compute/app/deploy.js +105 -105
  21. package/dist/commands/compute/app/deploy.js.map +1 -1
  22. package/dist/commands/compute/app/info.js +55 -8
  23. package/dist/commands/compute/app/info.js.map +1 -1
  24. package/dist/commands/compute/app/list.js +8 -9
  25. package/dist/commands/compute/app/list.js.map +1 -1
  26. package/dist/commands/compute/app/logs.js +58 -11
  27. package/dist/commands/compute/app/logs.js.map +1 -1
  28. package/dist/commands/compute/app/profile/set.js +147 -22
  29. package/dist/commands/compute/app/profile/set.js.map +1 -1
  30. package/dist/commands/compute/app/releases.js +110 -143
  31. package/dist/commands/compute/app/releases.js.map +1 -1
  32. package/dist/commands/compute/app/start.js +58 -11
  33. package/dist/commands/compute/app/start.js.map +1 -1
  34. package/dist/commands/compute/app/stop.js +58 -11
  35. package/dist/commands/compute/app/stop.js.map +1 -1
  36. package/dist/commands/compute/app/terminate.js +58 -11
  37. package/dist/commands/compute/app/terminate.js.map +1 -1
  38. package/dist/commands/compute/app/upgrade.js +121 -67
  39. package/dist/commands/compute/app/upgrade.js.map +1 -1
  40. package/dist/commands/compute/build/info.js +8 -9
  41. package/dist/commands/compute/build/info.js.map +1 -1
  42. package/dist/commands/compute/build/list.js +50 -131
  43. package/dist/commands/compute/build/list.js.map +1 -1
  44. package/dist/commands/compute/build/logs.js +9 -10
  45. package/dist/commands/compute/build/logs.js.map +1 -1
  46. package/dist/commands/compute/build/status.js +9 -10
  47. package/dist/commands/compute/build/status.js.map +1 -1
  48. package/dist/commands/compute/build/submit.js +8 -9
  49. package/dist/commands/compute/build/submit.js.map +1 -1
  50. package/dist/commands/compute/build/verify.js +59 -12
  51. package/dist/commands/compute/build/verify.js.map +1 -1
  52. package/dist/commands/compute/environment/list.js +2 -2
  53. package/dist/commands/compute/environment/list.js.map +1 -1
  54. package/dist/commands/compute/environment/set.js +2 -2
  55. package/dist/commands/compute/environment/set.js.map +1 -1
  56. package/dist/commands/compute/environment/show.js +2 -2
  57. package/dist/commands/compute/environment/show.js.map +1 -1
  58. package/dist/commands/compute/undelegate.js +8 -9
  59. package/dist/commands/compute/undelegate.js.map +1 -1
  60. package/dist/commands/{telemetry.js → telemetry/disable.js} +15 -64
  61. package/dist/commands/telemetry/disable.js.map +1 -0
  62. package/dist/commands/telemetry/enable.js +164 -0
  63. package/dist/commands/telemetry/enable.js.map +1 -0
  64. package/dist/commands/telemetry/status.js +159 -0
  65. package/dist/commands/telemetry/status.js.map +1 -0
  66. package/dist/commands/upgrade.js +2 -2
  67. package/dist/commands/upgrade.js.map +1 -1
  68. package/dist/commands/version.js +2 -2
  69. package/dist/commands/version.js.map +1 -1
  70. package/package.json +4 -2
  71. package/dist/commands/telemetry.js.map +0 -1
@@ -6,6 +6,7 @@ import chalk from "chalk";
6
6
 
7
7
  // src/flags.ts
8
8
  import { Flags } from "@oclif/core";
9
+ import { getBuildType as getBuildType2 } from "@layr-labs/ecloud-sdk";
9
10
 
10
11
  // src/utils/prompts.ts
11
12
  import { input, select, password, confirm as inquirerConfirm } from "@inquirer/prompts";
@@ -124,13 +125,50 @@ var APPS_DIR = path2.join(CONFIG_DIR, "apps");
124
125
 
125
126
  // src/utils/version.ts
126
127
  function getCliVersion() {
127
- return true ? "0.2.0-dev" : "0.0.0";
128
+ return true ? "0.2.0-dev.1" : "0.0.0";
128
129
  }
129
130
  function getClientId() {
130
131
  return `ecloud-cli/v${getCliVersion()}`;
131
132
  }
132
133
 
133
134
  // src/utils/prompts.ts
135
+ function formatBuildChoice(build) {
136
+ const repoUrl = String(build.repoUrl || "").replace(/\.git$/i, "").replace(/\/+$/, "");
137
+ const repoName = (() => {
138
+ try {
139
+ const url = new URL(repoUrl);
140
+ const parts = url.pathname.split("/").filter(Boolean);
141
+ return parts.length ? parts[parts.length - 1] : repoUrl;
142
+ } catch {
143
+ const m = repoUrl.match(/[:/]+([^/:]+)$/);
144
+ return m?.[1] || repoUrl || "unknown";
145
+ }
146
+ })();
147
+ const shortSha = build.gitRef ? String(build.gitRef).slice(0, 10) : "unknown";
148
+ const shortId = build.buildId ? String(build.buildId).slice(0, 8) : "unknown";
149
+ const created = build.createdAt ? new Date(build.createdAt).toLocaleString() : "";
150
+ const status = String(build.status || "unknown");
151
+ return `${status} ${repoName}@${shortSha} ${shortId} ${created}`;
152
+ }
153
+ async function promptBuildIdFromRecentBuilds(options) {
154
+ const limit = Math.max(1, Math.min(100, options.limit ?? 20));
155
+ const builds = await options.client.list({
156
+ billingAddress: options.billingAddress,
157
+ limit,
158
+ offset: 0
159
+ });
160
+ if (!builds || builds.length === 0) {
161
+ throw new Error(`No builds found for billing address ${options.billingAddress}`);
162
+ }
163
+ const choice = await select({
164
+ message: "Select a build:",
165
+ choices: builds.map((b) => ({
166
+ name: formatBuildChoice(b),
167
+ value: b.buildId
168
+ }))
169
+ });
170
+ return choice;
171
+ }
134
172
  async function getPrivateKeyInteractive(privateKey) {
135
173
  if (privateKey) {
136
174
  if (!validatePrivateKeyFormat(privateKey)) {
@@ -209,7 +247,8 @@ var commonFlags = {
209
247
  environment: Flags.string({
210
248
  required: false,
211
249
  description: "Deployment environment to use",
212
- env: "ECLOUD_ENV"
250
+ env: "ECLOUD_ENV",
251
+ default: async () => getDefaultEnvironment() || (getBuildType2() === "dev" ? "sepolia-dev" : "sepolia")
213
252
  }),
214
253
  "private-key": Flags.string({
215
254
  required: false,
@@ -228,9 +267,6 @@ var commonFlags = {
228
267
  })
229
268
  };
230
269
  async function validateCommonFlags(flags, options) {
231
- if (!flags["environment"]) {
232
- flags["environment"] = getDefaultEnvironment();
233
- }
234
270
  flags["environment"] = await getEnvironmentInteractive(flags["environment"]);
235
271
  if (options?.requirePrivateKey !== false) {
236
272
  flags["private-key"] = await getPrivateKeyInteractive(flags["private-key"]);
@@ -267,15 +303,15 @@ import {
267
303
  addMetric,
268
304
  addMetricWithDimensions,
269
305
  emitMetrics,
270
- getBuildType as getBuildType2
306
+ getBuildType as getBuildType3
271
307
  } from "@layr-labs/ecloud-sdk";
272
308
  function createCLITelemetryClient() {
273
309
  const userUUID = getOrCreateUserUUID();
274
310
  const environment = createAppEnvironment(userUUID);
275
311
  const telemetryEnabled = getGlobalTelemetryPreference();
276
312
  return createTelemetryClient(environment, "ecloud-cli", {
277
- telemetryEnabled: telemetryEnabled === true
278
- // Only enabled if explicitly set to true
313
+ telemetryEnabled: telemetryEnabled !== false
314
+ // Enabled by default, disabled only if explicitly set to false
279
315
  });
280
316
  }
281
317
  async function withTelemetry(command, action) {
@@ -285,7 +321,7 @@ async function withTelemetry(command, action) {
285
321
  metrics.properties["command"] = command.id || command.constructor.name;
286
322
  const environment = getDefaultEnvironment() || "sepolia";
287
323
  metrics.properties["environment"] = environment;
288
- const buildType = getBuildType2() || "prod";
324
+ const buildType = getBuildType3() || "prod";
289
325
  metrics.properties["build_type"] = buildType;
290
326
  const cliVersion = command.config.version;
291
327
  if (cliVersion) {
@@ -335,6 +371,8 @@ function formatSourceLink(repoUrl, gitRef) {
335
371
  }
336
372
 
337
373
  // src/commands/compute/build/verify.ts
374
+ import { privateKeyToAccount as privateKeyToAccount3 } from "viem/accounts";
375
+ import { addHexPrefix } from "@layr-labs/ecloud-sdk";
338
376
  var BuildVerify = class _BuildVerify extends Command {
339
377
  static description = "Verify provenance for a build or image";
340
378
  static examples = [
@@ -344,7 +382,7 @@ var BuildVerify = class _BuildVerify extends Command {
344
382
  static args = {
345
383
  identifier: Args.string({
346
384
  description: "Build ID, image digest (sha256:...), or git commit SHA",
347
- required: true
385
+ required: false
348
386
  })
349
387
  };
350
388
  static flags = {
@@ -357,11 +395,20 @@ var BuildVerify = class _BuildVerify extends Command {
357
395
  async run() {
358
396
  return withTelemetry(this, async () => {
359
397
  const { args, flags } = await this.parse(_BuildVerify);
360
- const validatedFlags = await validateCommonFlags(flags, { requirePrivateKey: false });
398
+ const validatedFlags = await validateCommonFlags(flags, {
399
+ requirePrivateKey: !args.identifier
400
+ });
361
401
  const client = await createBuildClient(validatedFlags);
362
402
  this.log(chalk.gray("Fetching provenance..."));
363
403
  try {
364
- const result = await client.verify(args.identifier);
404
+ let identifier = args.identifier;
405
+ if (!identifier) {
406
+ const billingAddress = privateKeyToAccount3(
407
+ addHexPrefix(validatedFlags["private-key"])
408
+ ).address;
409
+ identifier = await promptBuildIdFromRecentBuilds({ client, billingAddress, limit: 20 });
410
+ }
411
+ const result = await client.verify(identifier);
365
412
  if (flags.json) {
366
413
  this.log(JSON.stringify(result, null, 2));
367
414
  return;