@edge-base/cli 0.1.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 (234) hide show
  1. package/README.md +182 -0
  2. package/dist/commands/admin.d.ts +10 -0
  3. package/dist/commands/admin.d.ts.map +1 -0
  4. package/dist/commands/admin.js +307 -0
  5. package/dist/commands/admin.js.map +1 -0
  6. package/dist/commands/backup.d.ts +148 -0
  7. package/dist/commands/backup.d.ts.map +1 -0
  8. package/dist/commands/backup.js +1247 -0
  9. package/dist/commands/backup.js.map +1 -0
  10. package/dist/commands/completion.d.ts +3 -0
  11. package/dist/commands/completion.d.ts.map +1 -0
  12. package/dist/commands/completion.js +168 -0
  13. package/dist/commands/completion.js.map +1 -0
  14. package/dist/commands/create-plugin.d.ts +3 -0
  15. package/dist/commands/create-plugin.d.ts.map +1 -0
  16. package/dist/commands/create-plugin.js +208 -0
  17. package/dist/commands/create-plugin.js.map +1 -0
  18. package/dist/commands/deploy.d.ts +146 -0
  19. package/dist/commands/deploy.d.ts.map +1 -0
  20. package/dist/commands/deploy.js +1823 -0
  21. package/dist/commands/deploy.js.map +1 -0
  22. package/dist/commands/describe.d.ts +45 -0
  23. package/dist/commands/describe.d.ts.map +1 -0
  24. package/dist/commands/describe.js +114 -0
  25. package/dist/commands/describe.js.map +1 -0
  26. package/dist/commands/destroy.d.ts +13 -0
  27. package/dist/commands/destroy.d.ts.map +1 -0
  28. package/dist/commands/destroy.js +642 -0
  29. package/dist/commands/destroy.js.map +1 -0
  30. package/dist/commands/dev.d.ts +80 -0
  31. package/dist/commands/dev.d.ts.map +1 -0
  32. package/dist/commands/dev.js +1131 -0
  33. package/dist/commands/dev.js.map +1 -0
  34. package/dist/commands/docker.d.ts +22 -0
  35. package/dist/commands/docker.d.ts.map +1 -0
  36. package/dist/commands/docker.js +373 -0
  37. package/dist/commands/docker.js.map +1 -0
  38. package/dist/commands/export.d.ts +15 -0
  39. package/dist/commands/export.d.ts.map +1 -0
  40. package/dist/commands/export.js +142 -0
  41. package/dist/commands/export.js.map +1 -0
  42. package/dist/commands/init.d.ts +7 -0
  43. package/dist/commands/init.d.ts.map +1 -0
  44. package/dist/commands/init.js +506 -0
  45. package/dist/commands/init.js.map +1 -0
  46. package/dist/commands/keys.d.ts +23 -0
  47. package/dist/commands/keys.d.ts.map +1 -0
  48. package/dist/commands/keys.js +347 -0
  49. package/dist/commands/keys.js.map +1 -0
  50. package/dist/commands/logs.d.ts +17 -0
  51. package/dist/commands/logs.d.ts.map +1 -0
  52. package/dist/commands/logs.js +104 -0
  53. package/dist/commands/logs.js.map +1 -0
  54. package/dist/commands/migrate.d.ts +29 -0
  55. package/dist/commands/migrate.d.ts.map +1 -0
  56. package/dist/commands/migrate.js +302 -0
  57. package/dist/commands/migrate.js.map +1 -0
  58. package/dist/commands/migration.d.ts +18 -0
  59. package/dist/commands/migration.d.ts.map +1 -0
  60. package/dist/commands/migration.js +114 -0
  61. package/dist/commands/migration.js.map +1 -0
  62. package/dist/commands/neon.d.ts +66 -0
  63. package/dist/commands/neon.d.ts.map +1 -0
  64. package/dist/commands/neon.js +600 -0
  65. package/dist/commands/neon.js.map +1 -0
  66. package/dist/commands/plugins.d.ts +9 -0
  67. package/dist/commands/plugins.d.ts.map +1 -0
  68. package/dist/commands/plugins.js +295 -0
  69. package/dist/commands/plugins.js.map +1 -0
  70. package/dist/commands/realtime.d.ts +3 -0
  71. package/dist/commands/realtime.d.ts.map +1 -0
  72. package/dist/commands/realtime.js +71 -0
  73. package/dist/commands/realtime.js.map +1 -0
  74. package/dist/commands/secret.d.ts +7 -0
  75. package/dist/commands/secret.d.ts.map +1 -0
  76. package/dist/commands/secret.js +180 -0
  77. package/dist/commands/secret.js.map +1 -0
  78. package/dist/commands/seed.d.ts +21 -0
  79. package/dist/commands/seed.d.ts.map +1 -0
  80. package/dist/commands/seed.js +325 -0
  81. package/dist/commands/seed.js.map +1 -0
  82. package/dist/commands/telemetry.d.ts +12 -0
  83. package/dist/commands/telemetry.d.ts.map +1 -0
  84. package/dist/commands/telemetry.js +57 -0
  85. package/dist/commands/telemetry.js.map +1 -0
  86. package/dist/commands/typegen.d.ts +26 -0
  87. package/dist/commands/typegen.d.ts.map +1 -0
  88. package/dist/commands/typegen.js +212 -0
  89. package/dist/commands/typegen.js.map +1 -0
  90. package/dist/commands/upgrade.d.ts +29 -0
  91. package/dist/commands/upgrade.d.ts.map +1 -0
  92. package/dist/commands/upgrade.js +265 -0
  93. package/dist/commands/upgrade.js.map +1 -0
  94. package/dist/commands/webhook-test.d.ts +3 -0
  95. package/dist/commands/webhook-test.d.ts.map +1 -0
  96. package/dist/commands/webhook-test.js +133 -0
  97. package/dist/commands/webhook-test.js.map +1 -0
  98. package/dist/index.d.ts +3 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +183 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/lib/agent-contract.d.ts +36 -0
  103. package/dist/lib/agent-contract.d.ts.map +1 -0
  104. package/dist/lib/agent-contract.js +78 -0
  105. package/dist/lib/agent-contract.js.map +1 -0
  106. package/dist/lib/cf-auth.d.ts +76 -0
  107. package/dist/lib/cf-auth.d.ts.map +1 -0
  108. package/dist/lib/cf-auth.js +321 -0
  109. package/dist/lib/cf-auth.js.map +1 -0
  110. package/dist/lib/cli-context.d.ts +23 -0
  111. package/dist/lib/cli-context.d.ts.map +1 -0
  112. package/dist/lib/cli-context.js +40 -0
  113. package/dist/lib/cli-context.js.map +1 -0
  114. package/dist/lib/cloudflare-deploy-manifest.d.ts +26 -0
  115. package/dist/lib/cloudflare-deploy-manifest.d.ts.map +1 -0
  116. package/dist/lib/cloudflare-deploy-manifest.js +107 -0
  117. package/dist/lib/cloudflare-deploy-manifest.js.map +1 -0
  118. package/dist/lib/cloudflare-wrangler-resources.d.ts +32 -0
  119. package/dist/lib/cloudflare-wrangler-resources.d.ts.map +1 -0
  120. package/dist/lib/cloudflare-wrangler-resources.js +59 -0
  121. package/dist/lib/cloudflare-wrangler-resources.js.map +1 -0
  122. package/dist/lib/config-editor.d.ts +139 -0
  123. package/dist/lib/config-editor.d.ts.map +1 -0
  124. package/dist/lib/config-editor.js +1188 -0
  125. package/dist/lib/config-editor.js.map +1 -0
  126. package/dist/lib/deploy-shared.d.ts +55 -0
  127. package/dist/lib/deploy-shared.d.ts.map +1 -0
  128. package/dist/lib/deploy-shared.js +183 -0
  129. package/dist/lib/deploy-shared.js.map +1 -0
  130. package/dist/lib/dev-sidecar.d.ts +31 -0
  131. package/dist/lib/dev-sidecar.d.ts.map +1 -0
  132. package/dist/lib/dev-sidecar.js +1058 -0
  133. package/dist/lib/dev-sidecar.js.map +1 -0
  134. package/dist/lib/fetch-with-timeout.d.ts +14 -0
  135. package/dist/lib/fetch-with-timeout.d.ts.map +1 -0
  136. package/dist/lib/fetch-with-timeout.js +29 -0
  137. package/dist/lib/fetch-with-timeout.js.map +1 -0
  138. package/dist/lib/function-registry.d.ts +56 -0
  139. package/dist/lib/function-registry.d.ts.map +1 -0
  140. package/dist/lib/function-registry.js +210 -0
  141. package/dist/lib/function-registry.js.map +1 -0
  142. package/dist/lib/load-config.d.ts +24 -0
  143. package/dist/lib/load-config.d.ts.map +1 -0
  144. package/dist/lib/load-config.js +263 -0
  145. package/dist/lib/load-config.js.map +1 -0
  146. package/dist/lib/local-secrets.d.ts +2 -0
  147. package/dist/lib/local-secrets.d.ts.map +1 -0
  148. package/dist/lib/local-secrets.js +60 -0
  149. package/dist/lib/local-secrets.js.map +1 -0
  150. package/dist/lib/managed-resource-names.d.ts +4 -0
  151. package/dist/lib/managed-resource-names.d.ts.map +1 -0
  152. package/dist/lib/managed-resource-names.js +19 -0
  153. package/dist/lib/managed-resource-names.js.map +1 -0
  154. package/dist/lib/migrator.d.ts +57 -0
  155. package/dist/lib/migrator.d.ts.map +1 -0
  156. package/dist/lib/migrator.js +321 -0
  157. package/dist/lib/migrator.js.map +1 -0
  158. package/dist/lib/neon.d.ts +41 -0
  159. package/dist/lib/neon.d.ts.map +1 -0
  160. package/dist/lib/neon.js +325 -0
  161. package/dist/lib/neon.js.map +1 -0
  162. package/dist/lib/node-tools.d.ts +10 -0
  163. package/dist/lib/node-tools.d.ts.map +1 -0
  164. package/dist/lib/node-tools.js +32 -0
  165. package/dist/lib/node-tools.js.map +1 -0
  166. package/dist/lib/npm.d.ts +8 -0
  167. package/dist/lib/npm.d.ts.map +1 -0
  168. package/dist/lib/npm.js +10 -0
  169. package/dist/lib/npm.js.map +1 -0
  170. package/dist/lib/npx.d.ts +9 -0
  171. package/dist/lib/npx.d.ts.map +1 -0
  172. package/dist/lib/npx.js +11 -0
  173. package/dist/lib/npx.js.map +1 -0
  174. package/dist/lib/project-runtime.d.ts +38 -0
  175. package/dist/lib/project-runtime.d.ts.map +1 -0
  176. package/dist/lib/project-runtime.js +122 -0
  177. package/dist/lib/project-runtime.js.map +1 -0
  178. package/dist/lib/prompts.d.ts +28 -0
  179. package/dist/lib/prompts.d.ts.map +1 -0
  180. package/dist/lib/prompts.js +85 -0
  181. package/dist/lib/prompts.js.map +1 -0
  182. package/dist/lib/rate-limit-bindings.d.ts +11 -0
  183. package/dist/lib/rate-limit-bindings.d.ts.map +1 -0
  184. package/dist/lib/rate-limit-bindings.js +52 -0
  185. package/dist/lib/rate-limit-bindings.js.map +1 -0
  186. package/dist/lib/realtime-provision.d.ts +22 -0
  187. package/dist/lib/realtime-provision.d.ts.map +1 -0
  188. package/dist/lib/realtime-provision.js +246 -0
  189. package/dist/lib/realtime-provision.js.map +1 -0
  190. package/dist/lib/resolve-options.d.ts +42 -0
  191. package/dist/lib/resolve-options.d.ts.map +1 -0
  192. package/dist/lib/resolve-options.js +98 -0
  193. package/dist/lib/resolve-options.js.map +1 -0
  194. package/dist/lib/runtime-scaffold.d.ts +17 -0
  195. package/dist/lib/runtime-scaffold.d.ts.map +1 -0
  196. package/dist/lib/runtime-scaffold.js +366 -0
  197. package/dist/lib/runtime-scaffold.js.map +1 -0
  198. package/dist/lib/schema-check.d.ts +79 -0
  199. package/dist/lib/schema-check.d.ts.map +1 -0
  200. package/dist/lib/schema-check.js +347 -0
  201. package/dist/lib/schema-check.js.map +1 -0
  202. package/dist/lib/spinner.d.ts +20 -0
  203. package/dist/lib/spinner.d.ts.map +1 -0
  204. package/dist/lib/spinner.js +42 -0
  205. package/dist/lib/spinner.js.map +1 -0
  206. package/dist/lib/telemetry.d.ts +37 -0
  207. package/dist/lib/telemetry.d.ts.map +1 -0
  208. package/dist/lib/telemetry.js +98 -0
  209. package/dist/lib/telemetry.js.map +1 -0
  210. package/dist/lib/turnstile-provision.d.ts +27 -0
  211. package/dist/lib/turnstile-provision.d.ts.map +1 -0
  212. package/dist/lib/turnstile-provision.js +144 -0
  213. package/dist/lib/turnstile-provision.js.map +1 -0
  214. package/dist/lib/update-check.d.ts +13 -0
  215. package/dist/lib/update-check.d.ts.map +1 -0
  216. package/dist/lib/update-check.js +110 -0
  217. package/dist/lib/update-check.js.map +1 -0
  218. package/dist/lib/wrangler-secrets.d.ts +3 -0
  219. package/dist/lib/wrangler-secrets.d.ts.map +1 -0
  220. package/dist/lib/wrangler-secrets.js +32 -0
  221. package/dist/lib/wrangler-secrets.js.map +1 -0
  222. package/dist/lib/wrangler.d.ts +9 -0
  223. package/dist/lib/wrangler.d.ts.map +1 -0
  224. package/dist/lib/wrangler.js +84 -0
  225. package/dist/lib/wrangler.js.map +1 -0
  226. package/dist/templates/plugin/README.md.tmpl +91 -0
  227. package/dist/templates/plugin/client/js/package.json.tmpl +23 -0
  228. package/dist/templates/plugin/client/js/src/index.ts.tmpl +68 -0
  229. package/dist/templates/plugin/client/js/tsconfig.json.tmpl +14 -0
  230. package/dist/templates/plugin/server/package.json.tmpl +19 -0
  231. package/dist/templates/plugin/server/src/index.ts.tmpl +59 -0
  232. package/dist/templates/plugin/server/tsconfig.json.tmpl +14 -0
  233. package/llms.txt +94 -0
  234. package/package.json +60 -0
package/dist/index.js ADDED
@@ -0,0 +1,183 @@
1
+ #!/usr/bin/env node
2
+ import { Command, CommanderError } from 'commander';
3
+ import { readFileSync } from 'node:fs';
4
+ import { dirname, join } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { initCommand } from './commands/init.js';
7
+ import { devCommand } from './commands/dev.js';
8
+ import { deployCommand } from './commands/deploy.js';
9
+ import { destroyCommand } from './commands/destroy.js';
10
+ import { secretCommand } from './commands/secret.js';
11
+ import { keysCommand } from './commands/keys.js';
12
+ import { backupCommand } from './commands/backup.js';
13
+ import { exportCommand } from './commands/export.js';
14
+ import { typegenCommand } from './commands/typegen.js';
15
+ import { logsCommand } from './commands/logs.js';
16
+ import { migrationCommand } from './commands/migration.js';
17
+ import { migrateCommand } from './commands/migrate.js';
18
+ import { upgradeCommand } from './commands/upgrade.js';
19
+ import { seedCommand } from './commands/seed.js';
20
+ import { adminCommand } from './commands/admin.js';
21
+ import { neonCommand } from './commands/neon.js';
22
+ import { dockerCommand } from './commands/docker.js';
23
+ import { pluginsCommand } from './commands/plugins.js';
24
+ import { createPluginCommand } from './commands/create-plugin.js';
25
+ import { webhookTestCommand } from './commands/webhook-test.js';
26
+ import { completionCommand } from './commands/completion.js';
27
+ import { telemetryCommand } from './commands/telemetry.js';
28
+ import { realtimeCommand } from './commands/realtime.js';
29
+ import { describeCommand } from './commands/describe.js';
30
+ import { setContext } from './lib/cli-context.js';
31
+ import { isCliStructuredError, renderStructuredIssue } from './lib/agent-contract.js';
32
+ import { checkForUpdates } from './lib/update-check.js';
33
+ import { recordEvent, showTelemetryNoticeOnce } from './lib/telemetry.js';
34
+ // ─── Dynamic version from package.json ───
35
+ const __dirname = dirname(fileURLToPath(import.meta.url));
36
+ const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
37
+ const program = new Command();
38
+ function hasRawFlag(rawArgs, longFlag, shortFlag) {
39
+ return rawArgs.some((arg) => {
40
+ if (arg === longFlag)
41
+ return true;
42
+ if (!shortFlag || !arg.startsWith('-') || arg.startsWith('--'))
43
+ return false;
44
+ return arg.slice(1).includes(shortFlag.slice(1));
45
+ });
46
+ }
47
+ program
48
+ .name('edgebase')
49
+ .description('EdgeBase CLI — Serverless BaaS on Cloudflare Edge')
50
+ .version(pkg.version)
51
+ .option('-v, --verbose', 'Show detailed output')
52
+ .option('-q, --quiet', 'Suppress non-essential output')
53
+ .option('--json', 'Output results as JSON')
54
+ .option('--non-interactive', 'Disable prompts and return structured input/user-action requirements');
55
+ // ─── First-run telemetry notice ───
56
+ const rawArgs = process.argv.slice(2);
57
+ setContext({
58
+ verbose: hasRawFlag(rawArgs, '--verbose', '-v'),
59
+ quiet: hasRawFlag(rawArgs, '--quiet', '-q'),
60
+ json: hasRawFlag(rawArgs, '--json'),
61
+ nonInteractive: hasRawFlag(rawArgs, '--non-interactive'),
62
+ });
63
+ showTelemetryNoticeOnce({
64
+ suppressOutput: hasRawFlag(rawArgs, '--json')
65
+ || hasRawFlag(rawArgs, '--quiet', '-q'),
66
+ });
67
+ // ─── Global hooks ───
68
+ let _startTime = Date.now();
69
+ let _telemetryCommandPath = null;
70
+ function buildCommandPath(command) {
71
+ const names = [];
72
+ let current = command;
73
+ while (current) {
74
+ names.push(current.name());
75
+ current = current.parent;
76
+ }
77
+ return names.reverse().join(' ');
78
+ }
79
+ function resolveCommandPath(actionCommand, rawArgs = process.argv.slice(2)) {
80
+ if (actionCommand) {
81
+ return buildCommandPath(actionCommand);
82
+ }
83
+ const path = [program.name()];
84
+ let current = program;
85
+ for (const token of rawArgs) {
86
+ if (!token || token === '--')
87
+ break;
88
+ if (token.startsWith('-'))
89
+ continue;
90
+ const next = current.commands.find((candidate) => candidate.name() === token || candidate.aliases().includes(token));
91
+ if (!next) {
92
+ path.push(token);
93
+ break;
94
+ }
95
+ path.push(next.name());
96
+ current = next;
97
+ }
98
+ return path.join(' ');
99
+ }
100
+ program.exitOverride();
101
+ program.hook('preAction', (thisCommand, actionCommand) => {
102
+ const opts = thisCommand.opts();
103
+ setContext({
104
+ verbose: !!opts.verbose,
105
+ quiet: !!opts.quiet,
106
+ json: !!opts.json,
107
+ nonInteractive: !!opts.nonInteractive,
108
+ });
109
+ _startTime = Date.now();
110
+ _telemetryCommandPath = resolveCommandPath(actionCommand);
111
+ });
112
+ program.hook('postAction', (_thisCommand, actionCommand) => {
113
+ _telemetryCommandPath = resolveCommandPath(actionCommand);
114
+ recordEvent(_telemetryCommandPath, true, Date.now() - _startTime);
115
+ });
116
+ // ─── Core ───
117
+ program.addCommand(initCommand);
118
+ program.addCommand(devCommand);
119
+ program.addCommand(deployCommand);
120
+ program.addCommand(destroyCommand);
121
+ program.addCommand(logsCommand);
122
+ program.addCommand(upgradeCommand);
123
+ // ─── Database ───
124
+ program.addCommand(migrationCommand);
125
+ program.addCommand(migrateCommand);
126
+ program.addCommand(seedCommand);
127
+ program.addCommand(backupCommand);
128
+ program.addCommand(exportCommand);
129
+ program.addCommand(typegenCommand);
130
+ program.addCommand(neonCommand);
131
+ // ─── Security ───
132
+ program.addCommand(secretCommand);
133
+ program.addCommand(keysCommand);
134
+ program.addCommand(adminCommand);
135
+ // ─── Plugins & Tools ───
136
+ program.addCommand(pluginsCommand);
137
+ program.addCommand(createPluginCommand);
138
+ program.addCommand(dockerCommand);
139
+ program.addCommand(webhookTestCommand);
140
+ program.addCommand(completionCommand);
141
+ program.addCommand(describeCommand);
142
+ program.addCommand(telemetryCommand);
143
+ program.addCommand(realtimeCommand);
144
+ // ─── Help Text Grouping ───
145
+ program.addHelpText('after', `
146
+ Commands by category:
147
+ Core: init, dev (dv), deploy (dp), destroy, logs (l), upgrade (up)
148
+ Database: migration (mg), migrate, seed, backup (bk), export, typegen (tg), neon
149
+ Security: secret, keys, admin
150
+ Plugins: plugins, create-plugin, docker, webhook-test
151
+ Utilities: completion, describe, telemetry, realtime
152
+
153
+ Environment variables:
154
+ NO_COLOR=1 Disable colored output
155
+ EDGEBASE_SERVICE_KEY Service Key for backup/export/admin commands
156
+ EDGEBASE_URL Default server URL for remote commands
157
+ `);
158
+ let parseFailed = false;
159
+ try {
160
+ await program.parseAsync(process.argv);
161
+ }
162
+ catch (error) {
163
+ const commandPath = _telemetryCommandPath ?? resolveCommandPath(undefined, process.argv.slice(2));
164
+ recordEvent(commandPath, false, Date.now() - _startTime);
165
+ if (error instanceof CommanderError) {
166
+ parseFailed = true;
167
+ process.exitCode = error.exitCode;
168
+ }
169
+ else if (isCliStructuredError(error)) {
170
+ parseFailed = true;
171
+ process.exitCode = error.exitCode;
172
+ renderStructuredIssue(error.payload);
173
+ }
174
+ else {
175
+ throw error;
176
+ }
177
+ }
178
+ // ─── Post-run update check (non-blocking) ───
179
+ const currentCommand = process.argv[2];
180
+ if (!parseFailed && !['init', 'dev', 'dv'].includes(currentCommand ?? '')) {
181
+ checkForUpdates(pkg.version);
182
+ }
183
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export interface CliChoice {
2
+ label: string;
3
+ value: string;
4
+ hint?: string;
5
+ args?: string[];
6
+ }
7
+ export interface CliUserAction {
8
+ type: 'open_browser' | 'confirm' | 'rerun_with_flags';
9
+ title?: string;
10
+ message: string;
11
+ command?: string;
12
+ args?: string[];
13
+ instructions?: string[];
14
+ }
15
+ export interface CliStructuredIssue {
16
+ status: 'needs_input' | 'needs_user_action' | 'error';
17
+ code: string;
18
+ message: string;
19
+ field?: string;
20
+ hint?: string;
21
+ retryable?: boolean;
22
+ details?: Record<string, unknown> | unknown[];
23
+ choices?: CliChoice[];
24
+ action?: CliUserAction;
25
+ }
26
+ export declare class CliStructuredError extends Error {
27
+ readonly payload: CliStructuredIssue;
28
+ readonly exitCode: number;
29
+ constructor(payload: CliStructuredIssue, exitCode?: number);
30
+ }
31
+ export declare function isCliStructuredError(error: unknown): error is CliStructuredError;
32
+ export declare function raiseNeedsInput(payload: Omit<CliStructuredIssue, 'status'>): never;
33
+ export declare function raiseNeedsUserAction(payload: Omit<CliStructuredIssue, 'status'>): never;
34
+ export declare function raiseCliError(payload: Omit<CliStructuredIssue, 'status'>, exitCode?: number): never;
35
+ export declare function renderStructuredIssue(issue: CliStructuredIssue): void;
36
+ //# sourceMappingURL=agent-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-contract.d.ts","sourceRoot":"","sources":["../../src/lib/agent-contract.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,GAAG,SAAS,GAAG,kBAAkB,CAAC;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,aAAa,GAAG,mBAAmB,GAAG,OAAO,CAAC;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;IAC9C,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,kBAAkB,EAAE,QAAQ,SAAI;CAMtD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB,CAEhF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,GAAG,KAAK,CAMlF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,GAAG,KAAK,CAMvF;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,EAC3C,QAAQ,SAAI,GACX,KAAK,CAMP;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CA+CrE"}
@@ -0,0 +1,78 @@
1
+ import chalk from 'chalk';
2
+ import { isJson } from './cli-context.js';
3
+ export class CliStructuredError extends Error {
4
+ payload;
5
+ exitCode;
6
+ constructor(payload, exitCode = 2) {
7
+ super(payload.message);
8
+ this.name = 'CliStructuredError';
9
+ this.payload = payload;
10
+ this.exitCode = exitCode;
11
+ }
12
+ }
13
+ export function isCliStructuredError(error) {
14
+ return error instanceof CliStructuredError;
15
+ }
16
+ export function raiseNeedsInput(payload) {
17
+ throw new CliStructuredError({
18
+ retryable: true,
19
+ ...payload,
20
+ status: 'needs_input',
21
+ });
22
+ }
23
+ export function raiseNeedsUserAction(payload) {
24
+ throw new CliStructuredError({
25
+ retryable: true,
26
+ ...payload,
27
+ status: 'needs_user_action',
28
+ });
29
+ }
30
+ export function raiseCliError(payload, exitCode = 1) {
31
+ throw new CliStructuredError({
32
+ retryable: false,
33
+ ...payload,
34
+ status: 'error',
35
+ }, exitCode);
36
+ }
37
+ export function renderStructuredIssue(issue) {
38
+ if (isJson()) {
39
+ console.log(JSON.stringify(issue));
40
+ return;
41
+ }
42
+ const icon = issue.status === 'error'
43
+ ? chalk.red('✗')
44
+ : chalk.yellow('⚠');
45
+ console.error(icon, issue.message);
46
+ if (issue.field) {
47
+ console.error(chalk.dim(` Field: ${issue.field}`));
48
+ }
49
+ if (issue.hint) {
50
+ console.error(chalk.dim(` Hint: ${issue.hint}`));
51
+ }
52
+ if (issue.details && !Array.isArray(issue.details) && Object.keys(issue.details).length > 0) {
53
+ console.error(chalk.dim(` Details: ${JSON.stringify(issue.details)}`));
54
+ }
55
+ if (issue.choices && issue.choices.length > 0) {
56
+ console.error(chalk.dim(' Choices:'));
57
+ for (const choice of issue.choices) {
58
+ const argsText = choice.args && choice.args.length > 0
59
+ ? ` (${choice.args.join(' ')})`
60
+ : '';
61
+ const hintText = choice.hint ? ` — ${choice.hint}` : '';
62
+ console.error(chalk.dim(` • ${choice.label}${argsText}${hintText}`));
63
+ }
64
+ }
65
+ if (issue.action) {
66
+ if (issue.action.title) {
67
+ console.error(chalk.dim(` Action: ${issue.action.title}`));
68
+ }
69
+ console.error(chalk.dim(` ${issue.action.message}`));
70
+ if (issue.action.command) {
71
+ console.error(chalk.dim(` Command: ${issue.action.command}`));
72
+ }
73
+ for (const line of issue.action.instructions ?? []) {
74
+ console.error(chalk.dim(` ${line}`));
75
+ }
76
+ }
77
+ }
78
+ //# sourceMappingURL=agent-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-contract.js","sourceRoot":"","sources":["../../src/lib/agent-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ export interface CloudflareAuth {
2
+ accountId: string;
3
+ accountName: string;
4
+ authMethod: 'oauth' | 'api_token';
5
+ }
6
+ export interface CloudflareAccount {
7
+ name: string;
8
+ id: string;
9
+ }
10
+ /**
11
+ * Full Auth Gate: check auth → login if needed → extract account_id.
12
+ * Returns CloudflareAuth or exits the process on failure.
13
+ *
14
+ * Resolution order for account_id:
15
+ * 1. CLOUDFLARE_ACCOUNT_ID env var
16
+ * 2. .edgebase/cloudflare.json cache
17
+ * 3. wrangler.toml account_id field
18
+ * 4. wrangler whoami output
19
+ */
20
+ export declare function ensureCloudflareAuth(projectDir: string, isTTY: boolean): Promise<CloudflareAuth>;
21
+ /**
22
+ * Check if user is authenticated via `wrangler whoami`.
23
+ * Returns parsed account info or null if not authenticated.
24
+ *
25
+ * Checks in order:
26
+ * 1. CLOUDFLARE_ACCOUNT_ID env (+ verify via whoami if possible)
27
+ * 2. Cached .edgebase/cloudflare.json
28
+ * 3. wrangler.toml account_id
29
+ * 4. wrangler whoami output
30
+ */
31
+ export declare function checkWranglerAuth(projectDir: string): CloudflareAuth | null;
32
+ /**
33
+ * Parse `wrangler whoami` table output to extract account names and IDs.
34
+ *
35
+ * Wrangler outputs a pipe-delimited table like:
36
+ * ┌──────────────────┬──────────────────────────────────┐
37
+ * │ Account Name │ Account ID │
38
+ * ├──────────────────┼──────────────────────────────────┤
39
+ * │ John's Account │ abcdef1234567890abcdef1234567890 │
40
+ * └──────────────────┴──────────────────────────────────┘
41
+ */
42
+ export declare function parseWhoamiOutput(output: string): CloudflareAccount[];
43
+ /**
44
+ * Trigger `wrangler login` (browser OAuth flow).
45
+ * Only works in interactive terminals. Blocks until complete.
46
+ */
47
+ export declare function triggerWranglerLogin(projectDir: string): boolean;
48
+ /**
49
+ * Ensure wrangler.toml exists at project root with account_id.
50
+ * - If exists: inject/update account_id
51
+ * - If missing: create minimal template
52
+ *
53
+ * Returns the path to wrangler.toml.
54
+ */
55
+ export declare function ensureWranglerToml(projectDir: string, accountId: string): string;
56
+ /**
57
+ * Load cached account_id from .edgebase/cloudflare.json.
58
+ */
59
+ export declare function loadCachedAccountId(projectDir: string): string | null;
60
+ /**
61
+ * Save account_id to .edgebase/cloudflare.json.
62
+ */
63
+ export declare function saveCachedAccountId(projectDir: string, accountId: string, accountName: string): void;
64
+ /**
65
+ * Read the OAuth token from wrangler's local config file.
66
+ */
67
+ export declare function readWranglerOauthToken(): string | null;
68
+ /**
69
+ * Resolve a Cloudflare API token from env var or wrangler OAuth login.
70
+ * Used by deploy (to store as Worker secret) and realtime provisioning.
71
+ */
72
+ export declare function resolveApiToken(): {
73
+ token: string;
74
+ source: 'env' | 'wrangler_oauth';
75
+ };
76
+ //# sourceMappingURL=cf-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cf-auth.d.ts","sourceRoot":"","sources":["../../src/lib/cf-auth.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,GAAG,WAAW,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAID;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,cAAc,CAAC,CAiEzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA+E3E;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAiBrE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAiBhE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAuChF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUrE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,IAAI,CAcN;AAkBD;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAUtD;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,KAAK,GAAG,gBAAgB,CAAA;CAAE,CAarF"}