@layr-labs/ecloud-cli 0.0.1-dev → 0.0.1-rfc.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 (75) hide show
  1. package/README.md +2 -6
  2. package/dist/commands/app/create.js +29 -0
  3. package/dist/commands/app/create.js.map +1 -0
  4. package/dist/commands/app/deploy.js +142 -0
  5. package/dist/commands/app/deploy.js.map +1 -0
  6. package/dist/commands/app/logs.js +108 -0
  7. package/dist/commands/app/logs.js.map +1 -0
  8. package/dist/commands/app/start.js +121 -0
  9. package/dist/commands/app/start.js.map +1 -0
  10. package/dist/commands/app/stop.js +121 -0
  11. package/dist/commands/app/stop.js.map +1 -0
  12. package/dist/commands/app/terminate.js +128 -0
  13. package/dist/commands/app/terminate.js.map +1 -0
  14. package/dist/commands/app/upgrade.js +142 -0
  15. package/dist/commands/app/upgrade.js.map +1 -0
  16. package/dist/commands/auth/generate.js +10 -116
  17. package/dist/commands/auth/generate.js.map +1 -1
  18. package/dist/commands/auth/login.js +35 -37
  19. package/dist/commands/auth/login.js.map +1 -1
  20. package/dist/commands/auth/logout.js +8 -2
  21. package/dist/commands/auth/logout.js.map +1 -1
  22. package/dist/commands/auth/migrate.js +37 -32
  23. package/dist/commands/auth/migrate.js.map +1 -1
  24. package/dist/commands/auth/whoami.js +21 -53
  25. package/dist/commands/auth/whoami.js.map +1 -1
  26. package/dist/commands/billing/cancel.js +22 -83
  27. package/dist/commands/billing/cancel.js.map +1 -1
  28. package/dist/commands/billing/status.js +29 -92
  29. package/dist/commands/billing/status.js.map +1 -1
  30. package/dist/commands/billing/subscribe.js +31 -86
  31. package/dist/commands/billing/subscribe.js.map +1 -1
  32. package/dist/keys/mainnet-alpha/prod/kms-encryption-public-key.pem +14 -0
  33. package/dist/keys/mainnet-alpha/prod/kms-signing-public-key.pem +4 -0
  34. package/dist/keys/sepolia/dev/kms-encryption-public-key.pem +14 -0
  35. package/dist/keys/sepolia/dev/kms-signing-public-key.pem +4 -0
  36. package/dist/keys/sepolia/prod/kms-encryption-public-key.pem +14 -0
  37. package/dist/keys/sepolia/prod/kms-signing-public-key.pem +4 -0
  38. package/dist/templates/Dockerfile.layered.tmpl +58 -0
  39. package/dist/templates/compute-source-env.sh.tmpl +110 -0
  40. package/package.json +4 -29
  41. package/VERSION +0 -2
  42. package/dist/commands/compute/app/configure/tls.js +0 -150
  43. package/dist/commands/compute/app/configure/tls.js.map +0 -1
  44. package/dist/commands/compute/app/create.js +0 -134
  45. package/dist/commands/compute/app/create.js.map +0 -1
  46. package/dist/commands/compute/app/deploy.js +0 -1081
  47. package/dist/commands/compute/app/deploy.js.map +0 -1
  48. package/dist/commands/compute/app/info.js +0 -809
  49. package/dist/commands/compute/app/info.js.map +0 -1
  50. package/dist/commands/compute/app/list.js +0 -570
  51. package/dist/commands/compute/app/list.js.map +0 -1
  52. package/dist/commands/compute/app/logs.js +0 -629
  53. package/dist/commands/compute/app/logs.js.map +0 -1
  54. package/dist/commands/compute/app/profile/set.js +0 -1072
  55. package/dist/commands/compute/app/profile/set.js.map +0 -1
  56. package/dist/commands/compute/app/start.js +0 -665
  57. package/dist/commands/compute/app/start.js.map +0 -1
  58. package/dist/commands/compute/app/stop.js +0 -665
  59. package/dist/commands/compute/app/stop.js.map +0 -1
  60. package/dist/commands/compute/app/terminate.js +0 -671
  61. package/dist/commands/compute/app/terminate.js.map +0 -1
  62. package/dist/commands/compute/app/upgrade.js +0 -1063
  63. package/dist/commands/compute/app/upgrade.js.map +0 -1
  64. package/dist/commands/compute/environment/list.js +0 -89
  65. package/dist/commands/compute/environment/list.js.map +0 -1
  66. package/dist/commands/compute/environment/set.js +0 -215
  67. package/dist/commands/compute/environment/set.js.map +0 -1
  68. package/dist/commands/compute/environment/show.js +0 -96
  69. package/dist/commands/compute/environment/show.js.map +0 -1
  70. package/dist/commands/compute/undelegate.js +0 -250
  71. package/dist/commands/compute/undelegate.js.map +0 -1
  72. package/dist/commands/upgrade.js +0 -91
  73. package/dist/commands/upgrade.js.map +0 -1
  74. package/dist/commands/version.js +0 -65
  75. package/dist/commands/version.js.map +0 -1
package/README.md CHANGED
@@ -5,7 +5,6 @@ A TypeScript SDK and CLI for deploying and managing applications on eigenx TEE (
5
5
  ## Overview
6
6
 
7
7
  ECloud SDK enables developers to:
8
-
9
8
  - Deploy containerized applications to ecloud TEE
10
9
  - Manage application lifecycle (start, stop, terminate)
11
10
  - Build and push Docker images with encryption
@@ -21,7 +20,6 @@ This monorepo contains two main packages:
21
20
  The core TypeScript SDK for programmatic access to ecloud services.
22
21
 
23
22
  **Features:**
24
-
25
23
  - Type-safe client for ecloud operations
26
24
  - Docker image building and pushing
27
25
  - KMS encryption for secure deployments
@@ -33,7 +31,6 @@ The core TypeScript SDK for programmatic access to ecloud services.
33
31
  Command-line interface built with oclif for deploying and managing applications.
34
32
 
35
33
  **Features:**
36
-
37
34
  - Deploy applications from Docker images
38
35
  - Manage application lifecycle
39
36
  - Environment-aware configuration
@@ -43,7 +40,7 @@ Command-line interface built with oclif for deploying and managing applications.
43
40
 
44
41
  ### Prerequisites
45
42
 
46
- - Node.js 18+
43
+ - Node.js 18+
47
44
  - pnpm (recommended) or npm
48
45
  - Docker (for building and pushing images)
49
46
 
@@ -74,13 +71,11 @@ npx ecloud app deploy \
74
71
  ```
75
72
 
76
73
  **Common Flags:**
77
-
78
74
  - `--private-key`: Your Ethereum private key (or set `ECLOUD_PRIVATE_KEY` env var)
79
75
  - `--environment`: Target environment (`sepolia` or `mainnet-alpha`)
80
76
  - `--rpc-url`: Custom RPC URL (optional, or set `ECLOUD_RPC_URL` env var)
81
77
 
82
78
  **Example:**
83
-
84
79
  ```bash
85
80
  npx ecloud app deploy \
86
81
  --private-key 0x... \
@@ -197,3 +192,4 @@ The deployment process involves several steps:
197
192
  ## Support
198
193
 
199
194
  For issues and questions, please open an issue on GitHub.
195
+
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/commands/app/create.ts
4
+ import { Command, Flags } from "@oclif/core";
5
+ import { createApp } from "@layr-labs/ecloud-sdk";
6
+ var AppCreate = class _AppCreate extends Command {
7
+ static description = "Create a new app";
8
+ // CreateApp flags
9
+ static flags = {
10
+ name: Flags.string(),
11
+ language: Flags.string(),
12
+ template: Flags.string(),
13
+ templateVersion: Flags.string(),
14
+ verbose: Flags.boolean()
15
+ };
16
+ async run() {
17
+ const { flags } = await this.parse(_AppCreate);
18
+ return createApp(flags, {
19
+ info: (msg, ...args) => console.log(msg, ...args),
20
+ warn: (msg, ...args) => console.warn(msg, ...args),
21
+ error: (msg, ...args) => console.error(msg, ...args),
22
+ debug: (msg, ...args) => flags.verbose && console.debug(msg, ...args)
23
+ });
24
+ }
25
+ };
26
+ export {
27
+ AppCreate as default
28
+ };
29
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/commands/app/create.ts"],"sourcesContent":["import { Command, Flags } from \"@oclif/core\";\nimport { createApp } from \"@layr-labs/ecloud-sdk\";\n\nexport default class AppCreate extends Command {\n static description = \"Create a new app\";\n\n // CreateApp flags\n static flags = {\n name: Flags.string(),\n language: Flags.string(),\n template: Flags.string(),\n templateVersion: Flags.string(),\n verbose: Flags.boolean(),\n };\n\n async run() {\n const { flags } = await this.parse(AppCreate);\n\n // Skip creating client and call createApp directly\n return createApp(flags, {\n info: (msg: string, ...args: any[]) => console.log(msg, ...args),\n warn: (msg: string, ...args: any[]) => console.warn(msg, ...args),\n error: (msg: string, ...args: any[]) => console.error(msg, ...args),\n debug: (msg: string, ...args: any[]) =>\n flags.verbose && console.debug(msg, ...args),\n });\n }\n}\n"],"mappings":";;;AAAA,SAAS,SAAS,aAAa;AAC/B,SAAS,iBAAiB;AAE1B,IAAqB,YAArB,MAAqB,mBAAkB,QAAQ;AAAA,EAC7C,OAAO,cAAc;AAAA;AAAA,EAGrB,OAAO,QAAQ;AAAA,IACb,MAAM,MAAM,OAAO;AAAA,IACnB,UAAU,MAAM,OAAO;AAAA,IACvB,UAAU,MAAM,OAAO;AAAA,IACvB,iBAAiB,MAAM,OAAO;AAAA,IAC9B,SAAS,MAAM,QAAQ;AAAA,EACzB;AAAA,EAEA,MAAM,MAAM;AACV,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,MAAM,UAAS;AAG5C,WAAO,UAAU,OAAO;AAAA,MACtB,MAAM,CAAC,QAAgB,SAAgB,QAAQ,IAAI,KAAK,GAAG,IAAI;AAAA,MAC/D,MAAM,CAAC,QAAgB,SAAgB,QAAQ,KAAK,KAAK,GAAG,IAAI;AAAA,MAChE,OAAO,CAAC,QAAgB,SAAgB,QAAQ,MAAM,KAAK,GAAG,IAAI;AAAA,MAClE,OAAO,CAAC,QAAgB,SACtB,MAAM,WAAW,QAAQ,MAAM,KAAK,GAAG,IAAI;AAAA,IAC/C,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/commands/app/deploy.ts
4
+ import { Command, Flags as Flags2 } from "@oclif/core";
5
+
6
+ // src/client.ts
7
+ import {
8
+ createAppModule,
9
+ createBillingModule,
10
+ getPrivateKeyInteractive as getPrivateKeyInteractive2,
11
+ getEnvironmentConfig,
12
+ requirePrivateKey,
13
+ getPrivateKeyWithSource
14
+ } from "@layr-labs/ecloud-sdk";
15
+
16
+ // src/flags.ts
17
+ import {
18
+ getEnvironmentInteractive,
19
+ getPrivateKeyInteractive,
20
+ getAvailableEnvironments
21
+ } from "@layr-labs/ecloud-sdk";
22
+ import { Flags } from "@oclif/core";
23
+ var getEnvironmentOptions = () => {
24
+ try {
25
+ return getAvailableEnvironments();
26
+ } catch {
27
+ return ["sepolia", "sepolia-dev", "mainnet-alpha"];
28
+ }
29
+ };
30
+ var commonFlags = {
31
+ environment: Flags.string({
32
+ required: false,
33
+ description: "Deployment environment to use",
34
+ options: getEnvironmentOptions(),
35
+ env: "ECLOUD_ENV"
36
+ }),
37
+ "private-key": Flags.string({
38
+ required: false,
39
+ description: "Private key for signing transactions",
40
+ env: "ECLOUD_PRIVATE_KEY"
41
+ }),
42
+ "rpc-url": Flags.string({
43
+ required: false,
44
+ description: "RPC URL to connect to blockchain",
45
+ env: "ECLOUD_RPC_URL"
46
+ }),
47
+ verbose: Flags.boolean({
48
+ required: false,
49
+ description: "Enable verbose logging (default: false)",
50
+ default: false
51
+ })
52
+ };
53
+ async function validateCommonFlags(flags) {
54
+ flags["environment"] = await getEnvironmentInteractive(flags["environment"]);
55
+ flags["private-key"] = await getPrivateKeyInteractive(flags["private-key"]);
56
+ return flags;
57
+ }
58
+
59
+ // src/client.ts
60
+ async function createAppClient(flags) {
61
+ flags = await validateCommonFlags(flags);
62
+ const environment = flags.environment;
63
+ const environmentConfig = getEnvironmentConfig(environment);
64
+ const rpcUrl = flags["rpc-url"] || environmentConfig.defaultRPCURL;
65
+ const { key: privateKey, source } = await requirePrivateKey({
66
+ privateKey: flags["private-key"]
67
+ });
68
+ if (flags.verbose) {
69
+ console.log(`Using private key from: ${source}`);
70
+ }
71
+ return createAppModule({
72
+ verbose: flags.verbose,
73
+ privateKey,
74
+ rpcUrl,
75
+ environment
76
+ });
77
+ }
78
+
79
+ // src/commands/app/deploy.ts
80
+ import chalk from "chalk";
81
+ var AppDeploy = class _AppDeploy extends Command {
82
+ static description = "Deploy new app";
83
+ static flags = {
84
+ ...commonFlags,
85
+ name: Flags2.string({
86
+ required: false,
87
+ description: "Friendly name for the app",
88
+ env: "ECLOUD_NAME"
89
+ }),
90
+ dockerfile: Flags2.string({
91
+ required: false,
92
+ description: "Path to Dockerfile",
93
+ env: "ECLOUD_DOCKERFILE_PATH"
94
+ }),
95
+ "image-ref": Flags2.string({
96
+ required: false,
97
+ description: "Image reference pointing to registry",
98
+ env: "ECLOUD_IMAGE_REF"
99
+ }),
100
+ "env-file": Flags2.string({
101
+ required: false,
102
+ description: 'Environment file to use (default: ".env")',
103
+ default: ".env",
104
+ env: "ECLOUD_ENVFILE_PATH"
105
+ }),
106
+ "log-visibility": Flags2.string({
107
+ required: false,
108
+ description: "Log visibility setting: public, private, or off",
109
+ options: ["public", "private", "off"],
110
+ env: "ECLOUD_LOG_VISIBILITY"
111
+ }),
112
+ "instance-type": Flags2.string({
113
+ required: false,
114
+ description: "Machine instance type to use e.g. g1-standard-4t, g1-standard-8t",
115
+ options: ["g1-standard-4t", "g1-standard-8t"],
116
+ env: "ECLOUD_INSTANCE_TYPE"
117
+ })
118
+ };
119
+ async run() {
120
+ const { flags } = await this.parse(_AppDeploy);
121
+ const app = await createAppClient(flags);
122
+ const res = await app.deploy({
123
+ name: flags.name,
124
+ dockerfile: flags.dockerfile,
125
+ envFile: flags["env-file"],
126
+ imageRef: flags["image-ref"],
127
+ logVisibility: flags["log-visibility"],
128
+ instanceType: flags["instance-type"]
129
+ });
130
+ if (!res.tx || !res.ipAddress) {
131
+ this.log(`
132
+ ${chalk.gray(`Deploy ${res.ipAddress ? "failed" : "aborted"}`)}`);
133
+ } else {
134
+ this.log(`
135
+ \u2705 ${chalk.green(`App deployed successfully ${chalk.bold(`(id: ${res.appID}, ip: ${res.ipAddress})`)}`)}`);
136
+ }
137
+ }
138
+ };
139
+ export {
140
+ AppDeploy as default
141
+ };
142
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/commands/app/deploy.ts","../../../src/client.ts","../../../src/flags.ts"],"sourcesContent":["import { Command, Flags } from \"@oclif/core\";\nimport { logVisibility } from \"@layr-labs/ecloud-sdk\";\nimport { createAppClient } from \"../../client\";\nimport { commonFlags } from \"../../flags\";\nimport chalk from \"chalk\";\n\nexport default class AppDeploy extends Command {\n static description = \"Deploy new app\";\n\n static flags = {\n ...commonFlags,\n name: Flags.string({\n required: false,\n description: \"Friendly name for the app\",\n env: \"ECLOUD_NAME\",\n }),\n dockerfile: Flags.string({\n required: false,\n description: \"Path to Dockerfile\",\n env: \"ECLOUD_DOCKERFILE_PATH\",\n }),\n \"image-ref\": Flags.string({\n required: false,\n description: \"Image reference pointing to registry\",\n env: \"ECLOUD_IMAGE_REF\",\n }),\n \"env-file\": Flags.string({\n required: false,\n description: 'Environment file to use (default: \".env\")',\n default: \".env\",\n env: \"ECLOUD_ENVFILE_PATH\",\n }),\n \"log-visibility\": Flags.string({\n required: false,\n description: \"Log visibility setting: public, private, or off\",\n options: [\"public\", \"private\", \"off\"],\n env: \"ECLOUD_LOG_VISIBILITY\",\n }),\n \"instance-type\": Flags.string({\n required: false,\n description:\n \"Machine instance type to use e.g. g1-standard-4t, g1-standard-8t\",\n options: [\"g1-standard-4t\", \"g1-standard-8t\"],\n env: \"ECLOUD_INSTANCE_TYPE\",\n }),\n };\n\n async run() {\n const { flags } = await this.parse(AppDeploy);\n const app = await createAppClient(flags);\n\n const res = await app.deploy({\n name: flags.name,\n dockerfile: flags.dockerfile,\n envFile: flags[\"env-file\"],\n imageRef: flags[\"image-ref\"],\n logVisibility: flags[\"log-visibility\"] as logVisibility,\n instanceType: flags[\"instance-type\"],\n });\n\n if (!res.tx || !res.ipAddress) {\n this.log(`\\n${chalk.gray(`Deploy ${res.ipAddress ? \"failed\" : \"aborted\"}`)}`);\n } else {\n this.log(`\\n✅ ${chalk.green(`App deployed successfully ${chalk.bold(`(id: ${res.appID}, ip: ${res.ipAddress})`)}`)}`);\n }\n }\n}\n","import {\n createAppModule,\n createBillingModule,\n getPrivateKeyInteractive,\n getEnvironmentConfig,\n requirePrivateKey,\n getPrivateKeyWithSource,\n} from \"@layr-labs/ecloud-sdk\";\nimport { CommonFlags, validateCommonFlags } from \"./flags\";\nimport { Hex } from \"viem\";\n\nexport async function createAppClient(flags: CommonFlags) {\n flags = await validateCommonFlags(flags);\n\n const environment = flags.environment!;\n const environmentConfig = getEnvironmentConfig(environment);\n const rpcUrl = flags[\"rpc-url\"] || environmentConfig.defaultRPCURL;\n const { key: privateKey, source } = await requirePrivateKey({\n privateKey: flags[\"private-key\"],\n });\n\n if (flags.verbose) {\n console.log(`Using private key from: ${source}`);\n }\n\n return createAppModule({\n verbose: flags.verbose,\n privateKey,\n rpcUrl,\n environment,\n });\n}\n\nexport async function createBillingClient(flags: {\n \"private-key\"?: string;\n verbose?: boolean;\n}) {\n const result = await getPrivateKeyWithSource({\n privateKey: flags[\"private-key\"],\n });\n const privateKey = await getPrivateKeyInteractive(result?.key);\n\n return createBillingModule({\n verbose: flags.verbose ?? false,\n privateKey: privateKey as Hex,\n });\n}\n","import {\n getEnvironmentInteractive,\n getPrivateKeyInteractive,\n getAvailableEnvironments,\n} from \"@layr-labs/ecloud-sdk\";\nimport { Flags } from \"@oclif/core\";\n\nexport type CommonFlags = {\n verbose: boolean;\n environment?: string;\n \"private-key\"?: string;\n \"rpc-url\"?: string;\n};\n\n// Get available environments dynamically from SDK based on build type\nconst getEnvironmentOptions = (): string[] => {\n try {\n return getAvailableEnvironments();\n } catch {\n // Fallback to all environments if SDK not available\n return [\"sepolia\", \"sepolia-dev\", \"mainnet-alpha\"];\n }\n};\n\nexport const commonFlags = {\n environment: Flags.string({\n required: false,\n description: \"Deployment environment to use\",\n options: getEnvironmentOptions(),\n env: \"ECLOUD_ENV\",\n }),\n \"private-key\": Flags.string({\n required: false,\n description: \"Private key for signing transactions\",\n env: \"ECLOUD_PRIVATE_KEY\",\n }),\n \"rpc-url\": Flags.string({\n required: false,\n description: \"RPC URL to connect to blockchain\",\n env: \"ECLOUD_RPC_URL\",\n }),\n verbose: Flags.boolean({\n required: false,\n description: \"Enable verbose logging (default: false)\",\n default: false,\n }),\n};\n\n// Validate or prompt for required common flags\nexport async function validateCommonFlags(flags: CommonFlags) {\n flags[\"environment\"] = await getEnvironmentInteractive(flags[\"environment\"]);\n flags[\"private-key\"] = await getPrivateKeyInteractive(flags[\"private-key\"]);\n\n return flags;\n}\n"],"mappings":"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","names":["Flags","getPrivateKeyInteractive","Flags"]}
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/commands/app/logs.ts
4
+ import { Command, Args, Flags as Flags2 } from "@oclif/core";
5
+
6
+ // src/client.ts
7
+ import {
8
+ createAppModule,
9
+ createBillingModule,
10
+ getPrivateKeyInteractive as getPrivateKeyInteractive2,
11
+ getEnvironmentConfig,
12
+ requirePrivateKey,
13
+ getPrivateKeyWithSource
14
+ } from "@layr-labs/ecloud-sdk";
15
+
16
+ // src/flags.ts
17
+ import {
18
+ getEnvironmentInteractive,
19
+ getPrivateKeyInteractive,
20
+ getAvailableEnvironments
21
+ } from "@layr-labs/ecloud-sdk";
22
+ import { Flags } from "@oclif/core";
23
+ var getEnvironmentOptions = () => {
24
+ try {
25
+ return getAvailableEnvironments();
26
+ } catch {
27
+ return ["sepolia", "sepolia-dev", "mainnet-alpha"];
28
+ }
29
+ };
30
+ var commonFlags = {
31
+ environment: Flags.string({
32
+ required: false,
33
+ description: "Deployment environment to use",
34
+ options: getEnvironmentOptions(),
35
+ env: "ECLOUD_ENV"
36
+ }),
37
+ "private-key": Flags.string({
38
+ required: false,
39
+ description: "Private key for signing transactions",
40
+ env: "ECLOUD_PRIVATE_KEY"
41
+ }),
42
+ "rpc-url": Flags.string({
43
+ required: false,
44
+ description: "RPC URL to connect to blockchain",
45
+ env: "ECLOUD_RPC_URL"
46
+ }),
47
+ verbose: Flags.boolean({
48
+ required: false,
49
+ description: "Enable verbose logging (default: false)",
50
+ default: false
51
+ })
52
+ };
53
+ async function validateCommonFlags(flags) {
54
+ flags["environment"] = await getEnvironmentInteractive(flags["environment"]);
55
+ flags["private-key"] = await getPrivateKeyInteractive(flags["private-key"]);
56
+ return flags;
57
+ }
58
+
59
+ // src/client.ts
60
+ async function createAppClient(flags) {
61
+ flags = await validateCommonFlags(flags);
62
+ const environment = flags.environment;
63
+ const environmentConfig = getEnvironmentConfig(environment);
64
+ const rpcUrl = flags["rpc-url"] || environmentConfig.defaultRPCURL;
65
+ const { key: privateKey, source } = await requirePrivateKey({
66
+ privateKey: flags["private-key"]
67
+ });
68
+ if (flags.verbose) {
69
+ console.log(`Using private key from: ${source}`);
70
+ }
71
+ return createAppModule({
72
+ verbose: flags.verbose,
73
+ privateKey,
74
+ rpcUrl,
75
+ environment
76
+ });
77
+ }
78
+
79
+ // src/commands/app/logs.ts
80
+ var AppLogs = class _AppLogs extends Command {
81
+ static description = "View app logs";
82
+ static args = {
83
+ "app-id": Args.string({
84
+ description: "App ID or name",
85
+ required: false
86
+ })
87
+ };
88
+ static flags = {
89
+ ...commonFlags,
90
+ watch: Flags2.boolean({
91
+ description: "Watch logs continuously",
92
+ char: "w",
93
+ default: false
94
+ })
95
+ };
96
+ async run() {
97
+ const { args, flags } = await this.parse(_AppLogs);
98
+ const app = await createAppClient(flags);
99
+ await app.logs({
100
+ appID: args["app-id"],
101
+ watch: flags.watch
102
+ });
103
+ }
104
+ };
105
+ export {
106
+ AppLogs as default
107
+ };
108
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/commands/app/logs.ts","../../../src/client.ts","../../../src/flags.ts"],"sourcesContent":["import { Command, Args, Flags } from \"@oclif/core\";\nimport { createAppClient } from \"../../client\";\nimport { commonFlags } from \"../../flags\";\n\nexport default class AppLogs extends Command {\n static description = \"View app logs\";\n\n static args = {\n \"app-id\": Args.string({\n description: \"App ID or name\",\n required: false,\n }),\n };\n\n static flags = {\n ...commonFlags,\n watch: Flags.boolean({\n description: \"Watch logs continuously\",\n char: \"w\",\n default: false,\n }),\n };\n\n async run() {\n const { args, flags } = await this.parse(AppLogs);\n const app = await createAppClient(flags);\n\n await app.logs({\n appID: args[\"app-id\"],\n watch: flags.watch,\n });\n }\n}\n\n","import {\n createAppModule,\n createBillingModule,\n getPrivateKeyInteractive,\n getEnvironmentConfig,\n requirePrivateKey,\n getPrivateKeyWithSource,\n} from \"@layr-labs/ecloud-sdk\";\nimport { CommonFlags, validateCommonFlags } from \"./flags\";\nimport { Hex } from \"viem\";\n\nexport async function createAppClient(flags: CommonFlags) {\n flags = await validateCommonFlags(flags);\n\n const environment = flags.environment!;\n const environmentConfig = getEnvironmentConfig(environment);\n const rpcUrl = flags[\"rpc-url\"] || environmentConfig.defaultRPCURL;\n const { key: privateKey, source } = await requirePrivateKey({\n privateKey: flags[\"private-key\"],\n });\n\n if (flags.verbose) {\n console.log(`Using private key from: ${source}`);\n }\n\n return createAppModule({\n verbose: flags.verbose,\n privateKey,\n rpcUrl,\n environment,\n });\n}\n\nexport async function createBillingClient(flags: {\n \"private-key\"?: string;\n verbose?: boolean;\n}) {\n const result = await getPrivateKeyWithSource({\n privateKey: flags[\"private-key\"],\n });\n const privateKey = await getPrivateKeyInteractive(result?.key);\n\n return createBillingModule({\n verbose: flags.verbose ?? false,\n privateKey: privateKey as Hex,\n });\n}\n","import {\n getEnvironmentInteractive,\n getPrivateKeyInteractive,\n getAvailableEnvironments,\n} from \"@layr-labs/ecloud-sdk\";\nimport { Flags } from \"@oclif/core\";\n\nexport type CommonFlags = {\n verbose: boolean;\n environment?: string;\n \"private-key\"?: string;\n \"rpc-url\"?: string;\n};\n\n// Get available environments dynamically from SDK based on build type\nconst getEnvironmentOptions = (): string[] => {\n try {\n return getAvailableEnvironments();\n } catch {\n // Fallback to all environments if SDK not available\n return [\"sepolia\", \"sepolia-dev\", \"mainnet-alpha\"];\n }\n};\n\nexport const commonFlags = {\n environment: Flags.string({\n required: false,\n description: \"Deployment environment to use\",\n options: getEnvironmentOptions(),\n env: \"ECLOUD_ENV\",\n }),\n \"private-key\": Flags.string({\n required: false,\n description: \"Private key for signing transactions\",\n env: \"ECLOUD_PRIVATE_KEY\",\n }),\n \"rpc-url\": Flags.string({\n required: false,\n description: \"RPC URL to connect to blockchain\",\n env: \"ECLOUD_RPC_URL\",\n }),\n verbose: Flags.boolean({\n required: false,\n description: \"Enable verbose logging (default: false)\",\n default: false,\n }),\n};\n\n// Validate or prompt for required common flags\nexport async function validateCommonFlags(flags: CommonFlags) {\n flags[\"environment\"] = await getEnvironmentInteractive(flags[\"environment\"]);\n flags[\"private-key\"] = await getPrivateKeyInteractive(flags[\"private-key\"]);\n\n return flags;\n}\n"],"mappings":";;;AAAA,SAAS,SAAS,MAAM,SAAAA,cAAa;;;ACArC;AAAA,EACE;AAAA,EACA;AAAA,EACA,4BAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACPP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,aAAa;AAUtB,IAAM,wBAAwB,MAAgB;AAC5C,MAAI;AACF,WAAO,yBAAyB;AAAA,EAClC,QAAQ;AAEN,WAAO,CAAC,WAAW,eAAe,eAAe;AAAA,EACnD;AACF;AAEO,IAAM,cAAc;AAAA,EACzB,aAAa,MAAM,OAAO;AAAA,IACxB,UAAU;AAAA,IACV,aAAa;AAAA,IACb,SAAS,sBAAsB;AAAA,IAC/B,KAAK;AAAA,EACP,CAAC;AAAA,EACD,eAAe,MAAM,OAAO;AAAA,IAC1B,UAAU;AAAA,IACV,aAAa;AAAA,IACb,KAAK;AAAA,EACP,CAAC;AAAA,EACD,WAAW,MAAM,OAAO;AAAA,IACtB,UAAU;AAAA,IACV,aAAa;AAAA,IACb,KAAK;AAAA,EACP,CAAC;AAAA,EACD,SAAS,MAAM,QAAQ;AAAA,IACrB,UAAU;AAAA,IACV,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC;AACH;AAGA,eAAsB,oBAAoB,OAAoB;AAC5D,QAAM,aAAa,IAAI,MAAM,0BAA0B,MAAM,aAAa,CAAC;AAC3E,QAAM,aAAa,IAAI,MAAM,yBAAyB,MAAM,aAAa,CAAC;AAE1E,SAAO;AACT;;;AD3CA,eAAsB,gBAAgB,OAAoB;AACxD,UAAQ,MAAM,oBAAoB,KAAK;AAEvC,QAAM,cAAc,MAAM;AAC1B,QAAM,oBAAoB,qBAAqB,WAAW;AAC1D,QAAM,SAAS,MAAM,SAAS,KAAK,kBAAkB;AACrD,QAAM,EAAE,KAAK,YAAY,OAAO,IAAI,MAAM,kBAAkB;AAAA,IAC1D,YAAY,MAAM,aAAa;AAAA,EACjC,CAAC;AAED,MAAI,MAAM,SAAS;AACjB,YAAQ,IAAI,2BAA2B,MAAM,EAAE;AAAA,EACjD;AAEA,SAAO,gBAAgB;AAAA,IACrB,SAAS,MAAM;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;;;AD3BA,IAAqB,UAArB,MAAqB,iBAAgB,QAAQ;AAAA,EAC3C,OAAO,cAAc;AAAA,EAErB,OAAO,OAAO;AAAA,IACZ,UAAU,KAAK,OAAO;AAAA,MACpB,aAAa;AAAA,MACb,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,QAAQ;AAAA,IACb,GAAG;AAAA,IACH,OAAOC,OAAM,QAAQ;AAAA,MACnB,aAAa;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM;AACV,UAAM,EAAE,MAAM,MAAM,IAAI,MAAM,KAAK,MAAM,QAAO;AAChD,UAAM,MAAM,MAAM,gBAAgB,KAAK;AAEvC,UAAM,IAAI,KAAK;AAAA,MACb,OAAO,KAAK,QAAQ;AAAA,MACpB,OAAO,MAAM;AAAA,IACf,CAAC;AAAA,EACH;AACF;","names":["Flags","getPrivateKeyInteractive","Flags"]}
@@ -0,0 +1,121 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/commands/app/start.ts
4
+ import { Command, Args } from "@oclif/core";
5
+
6
+ // src/client.ts
7
+ import {
8
+ createAppModule,
9
+ createBillingModule,
10
+ getPrivateKeyInteractive as getPrivateKeyInteractive2,
11
+ getEnvironmentConfig,
12
+ requirePrivateKey,
13
+ getPrivateKeyWithSource
14
+ } from "@layr-labs/ecloud-sdk";
15
+
16
+ // src/flags.ts
17
+ import {
18
+ getEnvironmentInteractive,
19
+ getPrivateKeyInteractive,
20
+ getAvailableEnvironments
21
+ } from "@layr-labs/ecloud-sdk";
22
+ import { Flags } from "@oclif/core";
23
+ var getEnvironmentOptions = () => {
24
+ try {
25
+ return getAvailableEnvironments();
26
+ } catch {
27
+ return ["sepolia", "sepolia-dev", "mainnet-alpha"];
28
+ }
29
+ };
30
+ var commonFlags = {
31
+ environment: Flags.string({
32
+ required: false,
33
+ description: "Deployment environment to use",
34
+ options: getEnvironmentOptions(),
35
+ env: "ECLOUD_ENV"
36
+ }),
37
+ "private-key": Flags.string({
38
+ required: false,
39
+ description: "Private key for signing transactions",
40
+ env: "ECLOUD_PRIVATE_KEY"
41
+ }),
42
+ "rpc-url": Flags.string({
43
+ required: false,
44
+ description: "RPC URL to connect to blockchain",
45
+ env: "ECLOUD_RPC_URL"
46
+ }),
47
+ verbose: Flags.boolean({
48
+ required: false,
49
+ description: "Enable verbose logging (default: false)",
50
+ default: false
51
+ })
52
+ };
53
+ async function validateCommonFlags(flags) {
54
+ flags["environment"] = await getEnvironmentInteractive(flags["environment"]);
55
+ flags["private-key"] = await getPrivateKeyInteractive(flags["private-key"]);
56
+ return flags;
57
+ }
58
+
59
+ // src/client.ts
60
+ async function createAppClient(flags) {
61
+ flags = await validateCommonFlags(flags);
62
+ const environment = flags.environment;
63
+ const environmentConfig = getEnvironmentConfig(environment);
64
+ const rpcUrl = flags["rpc-url"] || environmentConfig.defaultRPCURL;
65
+ const { key: privateKey, source } = await requirePrivateKey({
66
+ privateKey: flags["private-key"]
67
+ });
68
+ if (flags.verbose) {
69
+ console.log(`Using private key from: ${source}`);
70
+ }
71
+ return createAppModule({
72
+ verbose: flags.verbose,
73
+ privateKey,
74
+ rpcUrl,
75
+ environment
76
+ });
77
+ }
78
+
79
+ // src/commands/app/start.ts
80
+ import { getEnvironmentConfig as getEnvironmentConfig2, getOrPromptAppID } from "@layr-labs/ecloud-sdk";
81
+ import chalk from "chalk";
82
+ var AppLifecycleStart = class _AppLifecycleStart extends Command {
83
+ static description = "Start stopped app (start GCP instance)";
84
+ static args = {
85
+ "app-id": Args.string({
86
+ description: "App ID or name to start",
87
+ required: false
88
+ })
89
+ };
90
+ static flags = {
91
+ ...commonFlags
92
+ };
93
+ async run() {
94
+ const { args, flags } = await this.parse(_AppLifecycleStart);
95
+ const app = await createAppClient(flags);
96
+ const environment = flags.environment || "sepolia";
97
+ const environmentConfig = getEnvironmentConfig2(environment);
98
+ const rpcUrl = flags.rpcUrl || environmentConfig.defaultRPCURL;
99
+ const appId = await getOrPromptAppID(
100
+ {
101
+ appID: args["app-id"],
102
+ environment: flags["environment"],
103
+ privateKey: flags["private-key"],
104
+ rpcUrl,
105
+ action: "start"
106
+ }
107
+ );
108
+ const res = await app.start(appId);
109
+ if (!res.tx) {
110
+ this.log(`
111
+ ${chalk.gray(`Start aborted`)}`);
112
+ } else {
113
+ this.log(`
114
+ \u2705 ${chalk.green(`App started successfully`)}`);
115
+ }
116
+ }
117
+ };
118
+ export {
119
+ AppLifecycleStart as default
120
+ };
121
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/commands/app/start.ts","../../../src/client.ts","../../../src/flags.ts"],"sourcesContent":["import { Command, Args } from \"@oclif/core\";\nimport { createAppClient } from \"../../client\";\nimport { commonFlags } from \"../../flags\";\nimport { getEnvironmentConfig, getOrPromptAppID } from \"@layr-labs/ecloud-sdk\";\nimport chalk from \"chalk\";\n\nexport default class AppLifecycleStart extends Command {\n static description = \"Start stopped app (start GCP instance)\";\n\n static args = {\n \"app-id\": Args.string({\n description: \"App ID or name to start\",\n required: false,\n }),\n };\n\n static flags = {\n ...commonFlags,\n };\n\n async run() {\n const { args, flags } = await this.parse(AppLifecycleStart);\n const app = await createAppClient(flags);\n\n\n // Get environment config\n const environment = flags.environment || \"sepolia\";\n const environmentConfig = getEnvironmentConfig(environment);\n \n // Get RPC URL (needed for contract queries and authentication)\n const rpcUrl = flags.rpcUrl || environmentConfig.defaultRPCURL;\n \n // Resolve app ID (prompt if not provided)\n const appId = await getOrPromptAppID(\n {\n appID: args[\"app-id\"],\n environment: flags[\"environment\"]!,\n privateKey: flags[\"private-key\"],\n rpcUrl,\n action: \"start\",\n }\n );\n\n const res = await app.start(appId);\n\n if (!res.tx) {\n this.log(`\\n${chalk.gray(`Start aborted`)}`);\n } else {\n this.log(`\\n✅ ${chalk.green(`App started successfully`)}`);\n }\n }\n}\n\n","import {\n createAppModule,\n createBillingModule,\n getPrivateKeyInteractive,\n getEnvironmentConfig,\n requirePrivateKey,\n getPrivateKeyWithSource,\n} from \"@layr-labs/ecloud-sdk\";\nimport { CommonFlags, validateCommonFlags } from \"./flags\";\nimport { Hex } from \"viem\";\n\nexport async function createAppClient(flags: CommonFlags) {\n flags = await validateCommonFlags(flags);\n\n const environment = flags.environment!;\n const environmentConfig = getEnvironmentConfig(environment);\n const rpcUrl = flags[\"rpc-url\"] || environmentConfig.defaultRPCURL;\n const { key: privateKey, source } = await requirePrivateKey({\n privateKey: flags[\"private-key\"],\n });\n\n if (flags.verbose) {\n console.log(`Using private key from: ${source}`);\n }\n\n return createAppModule({\n verbose: flags.verbose,\n privateKey,\n rpcUrl,\n environment,\n });\n}\n\nexport async function createBillingClient(flags: {\n \"private-key\"?: string;\n verbose?: boolean;\n}) {\n const result = await getPrivateKeyWithSource({\n privateKey: flags[\"private-key\"],\n });\n const privateKey = await getPrivateKeyInteractive(result?.key);\n\n return createBillingModule({\n verbose: flags.verbose ?? false,\n privateKey: privateKey as Hex,\n });\n}\n","import {\n getEnvironmentInteractive,\n getPrivateKeyInteractive,\n getAvailableEnvironments,\n} from \"@layr-labs/ecloud-sdk\";\nimport { Flags } from \"@oclif/core\";\n\nexport type CommonFlags = {\n verbose: boolean;\n environment?: string;\n \"private-key\"?: string;\n \"rpc-url\"?: string;\n};\n\n// Get available environments dynamically from SDK based on build type\nconst getEnvironmentOptions = (): string[] => {\n try {\n return getAvailableEnvironments();\n } catch {\n // Fallback to all environments if SDK not available\n return [\"sepolia\", \"sepolia-dev\", \"mainnet-alpha\"];\n }\n};\n\nexport const commonFlags = {\n environment: Flags.string({\n required: false,\n description: \"Deployment environment to use\",\n options: getEnvironmentOptions(),\n env: \"ECLOUD_ENV\",\n }),\n \"private-key\": Flags.string({\n required: false,\n description: \"Private key for signing transactions\",\n env: \"ECLOUD_PRIVATE_KEY\",\n }),\n \"rpc-url\": Flags.string({\n required: false,\n description: \"RPC URL to connect to blockchain\",\n env: \"ECLOUD_RPC_URL\",\n }),\n verbose: Flags.boolean({\n required: false,\n description: \"Enable verbose logging (default: false)\",\n default: false,\n }),\n};\n\n// Validate or prompt for required common flags\nexport async function validateCommonFlags(flags: CommonFlags) {\n flags[\"environment\"] = await getEnvironmentInteractive(flags[\"environment\"]);\n flags[\"private-key\"] = await getPrivateKeyInteractive(flags[\"private-key\"]);\n\n return flags;\n}\n"],"mappings":"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","names":["getPrivateKeyInteractive","getEnvironmentConfig"]}
@@ -0,0 +1,121 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/commands/app/stop.ts
4
+ import { Command, Args } from "@oclif/core";
5
+
6
+ // src/client.ts
7
+ import {
8
+ createAppModule,
9
+ createBillingModule,
10
+ getPrivateKeyInteractive as getPrivateKeyInteractive2,
11
+ getEnvironmentConfig,
12
+ requirePrivateKey,
13
+ getPrivateKeyWithSource
14
+ } from "@layr-labs/ecloud-sdk";
15
+
16
+ // src/flags.ts
17
+ import {
18
+ getEnvironmentInteractive,
19
+ getPrivateKeyInteractive,
20
+ getAvailableEnvironments
21
+ } from "@layr-labs/ecloud-sdk";
22
+ import { Flags } from "@oclif/core";
23
+ var getEnvironmentOptions = () => {
24
+ try {
25
+ return getAvailableEnvironments();
26
+ } catch {
27
+ return ["sepolia", "sepolia-dev", "mainnet-alpha"];
28
+ }
29
+ };
30
+ var commonFlags = {
31
+ environment: Flags.string({
32
+ required: false,
33
+ description: "Deployment environment to use",
34
+ options: getEnvironmentOptions(),
35
+ env: "ECLOUD_ENV"
36
+ }),
37
+ "private-key": Flags.string({
38
+ required: false,
39
+ description: "Private key for signing transactions",
40
+ env: "ECLOUD_PRIVATE_KEY"
41
+ }),
42
+ "rpc-url": Flags.string({
43
+ required: false,
44
+ description: "RPC URL to connect to blockchain",
45
+ env: "ECLOUD_RPC_URL"
46
+ }),
47
+ verbose: Flags.boolean({
48
+ required: false,
49
+ description: "Enable verbose logging (default: false)",
50
+ default: false
51
+ })
52
+ };
53
+ async function validateCommonFlags(flags) {
54
+ flags["environment"] = await getEnvironmentInteractive(flags["environment"]);
55
+ flags["private-key"] = await getPrivateKeyInteractive(flags["private-key"]);
56
+ return flags;
57
+ }
58
+
59
+ // src/client.ts
60
+ async function createAppClient(flags) {
61
+ flags = await validateCommonFlags(flags);
62
+ const environment = flags.environment;
63
+ const environmentConfig = getEnvironmentConfig(environment);
64
+ const rpcUrl = flags["rpc-url"] || environmentConfig.defaultRPCURL;
65
+ const { key: privateKey, source } = await requirePrivateKey({
66
+ privateKey: flags["private-key"]
67
+ });
68
+ if (flags.verbose) {
69
+ console.log(`Using private key from: ${source}`);
70
+ }
71
+ return createAppModule({
72
+ verbose: flags.verbose,
73
+ privateKey,
74
+ rpcUrl,
75
+ environment
76
+ });
77
+ }
78
+
79
+ // src/commands/app/stop.ts
80
+ import { getEnvironmentConfig as getEnvironmentConfig2, getOrPromptAppID } from "@layr-labs/ecloud-sdk";
81
+ import chalk from "chalk";
82
+ var AppLifecycleStop = class _AppLifecycleStop extends Command {
83
+ static description = "Stop running app (stop GCP instance)";
84
+ static args = {
85
+ "app-id": Args.string({
86
+ description: "App ID or name to stop",
87
+ required: false
88
+ })
89
+ };
90
+ static flags = {
91
+ ...commonFlags
92
+ };
93
+ async run() {
94
+ const { args, flags } = await this.parse(_AppLifecycleStop);
95
+ const app = await createAppClient(flags);
96
+ const environment = flags.environment || "sepolia";
97
+ const environmentConfig = getEnvironmentConfig2(environment);
98
+ const rpcUrl = flags.rpcUrl || environmentConfig.defaultRPCURL;
99
+ const appId = await getOrPromptAppID(
100
+ {
101
+ appID: args["app-id"],
102
+ environment: flags["environment"],
103
+ privateKey: flags["private-key"],
104
+ rpcUrl,
105
+ action: "stop"
106
+ }
107
+ );
108
+ const res = await app.stop(appId);
109
+ if (!res.tx) {
110
+ this.log(`
111
+ ${chalk.gray(`Stop aborted`)}`);
112
+ } else {
113
+ this.log(`
114
+ \u2705 ${chalk.green(`App stopped successfully`)}`);
115
+ }
116
+ }
117
+ };
118
+ export {
119
+ AppLifecycleStop as default
120
+ };
121
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/commands/app/stop.ts","../../../src/client.ts","../../../src/flags.ts"],"sourcesContent":["import { Command, Args } from \"@oclif/core\";\nimport { createAppClient } from \"../../client\";\nimport { commonFlags } from \"../../flags\";\nimport { getEnvironmentConfig, getOrPromptAppID } from \"@layr-labs/ecloud-sdk\";\nimport chalk from \"chalk\";\n\nexport default class AppLifecycleStop extends Command {\n static description = \"Stop running app (stop GCP instance)\";\n\n static args = {\n \"app-id\": Args.string({\n description: \"App ID or name to stop\",\n required: false,\n }),\n };\n\n static flags = {\n ...commonFlags,\n };\n\n async run() {\n const { args, flags } = await this.parse(AppLifecycleStop);\n const app = await createAppClient(flags);\n\n // Get environment config\n const environment = flags.environment || \"sepolia\";\n const environmentConfig = getEnvironmentConfig(environment);\n \n // Get RPC URL (needed for contract queries and authentication)\n const rpcUrl = flags.rpcUrl || environmentConfig.defaultRPCURL;\n \n // Resolve app ID (prompt if not provided)\n const appId = await getOrPromptAppID(\n {\n appID: args[\"app-id\"],\n environment: flags[\"environment\"]!,\n privateKey: flags[\"private-key\"],\n rpcUrl,\n action: \"stop\",\n }\n );\n\n const res = await app.stop(appId);\n\n if (!res.tx) {\n this.log(`\\n${chalk.gray(`Stop aborted`)}`);\n } else {\n this.log(`\\n✅ ${chalk.green(`App stopped successfully`)}`);\n }\n }\n}\n\n","import {\n createAppModule,\n createBillingModule,\n getPrivateKeyInteractive,\n getEnvironmentConfig,\n requirePrivateKey,\n getPrivateKeyWithSource,\n} from \"@layr-labs/ecloud-sdk\";\nimport { CommonFlags, validateCommonFlags } from \"./flags\";\nimport { Hex } from \"viem\";\n\nexport async function createAppClient(flags: CommonFlags) {\n flags = await validateCommonFlags(flags);\n\n const environment = flags.environment!;\n const environmentConfig = getEnvironmentConfig(environment);\n const rpcUrl = flags[\"rpc-url\"] || environmentConfig.defaultRPCURL;\n const { key: privateKey, source } = await requirePrivateKey({\n privateKey: flags[\"private-key\"],\n });\n\n if (flags.verbose) {\n console.log(`Using private key from: ${source}`);\n }\n\n return createAppModule({\n verbose: flags.verbose,\n privateKey,\n rpcUrl,\n environment,\n });\n}\n\nexport async function createBillingClient(flags: {\n \"private-key\"?: string;\n verbose?: boolean;\n}) {\n const result = await getPrivateKeyWithSource({\n privateKey: flags[\"private-key\"],\n });\n const privateKey = await getPrivateKeyInteractive(result?.key);\n\n return createBillingModule({\n verbose: flags.verbose ?? false,\n privateKey: privateKey as Hex,\n });\n}\n","import {\n getEnvironmentInteractive,\n getPrivateKeyInteractive,\n getAvailableEnvironments,\n} from \"@layr-labs/ecloud-sdk\";\nimport { Flags } from \"@oclif/core\";\n\nexport type CommonFlags = {\n verbose: boolean;\n environment?: string;\n \"private-key\"?: string;\n \"rpc-url\"?: string;\n};\n\n// Get available environments dynamically from SDK based on build type\nconst getEnvironmentOptions = (): string[] => {\n try {\n return getAvailableEnvironments();\n } catch {\n // Fallback to all environments if SDK not available\n return [\"sepolia\", \"sepolia-dev\", \"mainnet-alpha\"];\n }\n};\n\nexport const commonFlags = {\n environment: Flags.string({\n required: false,\n description: \"Deployment environment to use\",\n options: getEnvironmentOptions(),\n env: \"ECLOUD_ENV\",\n }),\n \"private-key\": Flags.string({\n required: false,\n description: \"Private key for signing transactions\",\n env: \"ECLOUD_PRIVATE_KEY\",\n }),\n \"rpc-url\": Flags.string({\n required: false,\n description: \"RPC URL to connect to blockchain\",\n env: \"ECLOUD_RPC_URL\",\n }),\n verbose: Flags.boolean({\n required: false,\n description: \"Enable verbose logging (default: false)\",\n default: false,\n }),\n};\n\n// Validate or prompt for required common flags\nexport async function validateCommonFlags(flags: CommonFlags) {\n flags[\"environment\"] = await getEnvironmentInteractive(flags[\"environment\"]);\n flags[\"private-key\"] = await getPrivateKeyInteractive(flags[\"private-key\"]);\n\n return flags;\n}\n"],"mappings":"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","names":["getPrivateKeyInteractive","getEnvironmentConfig"]}