@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
@@ -0,0 +1,295 @@
1
+ /**
2
+ * `npx edgebase plugins` — Plugin management commands.
3
+ *
4
+ * With explicit import pattern, plugin info comes from edgebase.config.ts
5
+ * rather than node_modules scanning.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { createInterface } from 'node:readline';
9
+ import { resolve, join } from 'node:path';
10
+ import { existsSync } from 'node:fs';
11
+ import chalk from 'chalk';
12
+ import { raiseCliError, raiseNeedsInput } from '../lib/agent-contract.js';
13
+ import { isJson, isNonInteractive } from '../lib/cli-context.js';
14
+ import { loadConfigSafe } from '../lib/load-config.js';
15
+ import { fetchWithTimeout } from '../lib/fetch-with-timeout.js';
16
+ import { resolveServiceKey, resolveServerUrl } from '../lib/resolve-options.js';
17
+ import { enumerateDOsViaCFAPI, getCFNamespaces } from './backup.js';
18
+ const FULL_CONFIG_EVAL = { allowRegexFallback: false };
19
+ export const pluginsCommand = new Command('plugins').description('Plugin management');
20
+ function formatTemplate(template) {
21
+ return JSON.stringify(template, null, 2)
22
+ .split('\n')
23
+ .map((line) => chalk.dim(` ${line}`));
24
+ }
25
+ function resolveOptions(options) {
26
+ return {
27
+ url: resolveServerUrl(options),
28
+ serviceKey: resolveServiceKey(options),
29
+ };
30
+ }
31
+ async function apiCall(opts, path, body) {
32
+ const url = `${opts.url.replace(/\/$/, '')}/admin/api/backup${path}`;
33
+ const resp = await fetchWithTimeout(url, {
34
+ method: 'POST',
35
+ headers: {
36
+ 'Content-Type': 'application/json',
37
+ 'X-EdgeBase-Service-Key': opts.serviceKey,
38
+ },
39
+ body: JSON.stringify(body ?? {}),
40
+ });
41
+ if (!resp.ok) {
42
+ throw new Error(`API error (${resp.status}): ${await resp.text()}`);
43
+ }
44
+ return resp.json();
45
+ }
46
+ async function confirmCleanup(prefix) {
47
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
48
+ return new Promise((resolve) => {
49
+ rl.question(`This will permanently delete data for '${prefix}'. Continue? (y/N): `, (answer) => {
50
+ rl.close();
51
+ resolve(['y', 'yes'].includes(answer.trim().toLowerCase()));
52
+ });
53
+ });
54
+ }
55
+ function readProjectConfig(projectDir) {
56
+ const configPath = join(projectDir, 'edgebase.config.ts');
57
+ if (!existsSync(configPath)) {
58
+ return { namespaces: [], configuredPluginNames: [] };
59
+ }
60
+ const config = loadConfigSafe(configPath, projectDir, FULL_CONFIG_EVAL);
61
+ const databases = (config.databases ?? {});
62
+ const plugins = Array.isArray(config.plugins) ? config.plugins : [];
63
+ return {
64
+ namespaces: Array.from(new Set(['shared', ...Object.keys(databases)])).sort(),
65
+ configuredPluginNames: plugins
66
+ .map((plugin) => plugin.name)
67
+ .filter((name) => typeof name === 'string'),
68
+ };
69
+ }
70
+ async function resolveDatabaseDOs(api, cf) {
71
+ const namespaces = await getCFNamespaces(cf);
72
+ const hexIds = [];
73
+ for (const namespace of namespaces) {
74
+ const ids = await enumerateDOsViaCFAPI(cf, namespace.id);
75
+ hexIds.push(...ids);
76
+ }
77
+ const result = await apiCall(api, '/list-dos', { hexIds });
78
+ return result.dos.filter((item) => item.type === 'database');
79
+ }
80
+ // ─── edgebase plugins list ───
81
+ pluginsCommand
82
+ .command('list')
83
+ .description('List installed EdgeBase plugins')
84
+ .action(async () => {
85
+ const projectDir = resolve('.');
86
+ const configPath = join(projectDir, 'edgebase.config.ts');
87
+ if (!existsSync(configPath)) {
88
+ console.error(chalk.red('✗'), 'edgebase.config.ts not found.');
89
+ return;
90
+ }
91
+ try {
92
+ const config = loadConfigSafe(configPath, projectDir, FULL_CONFIG_EVAL);
93
+ const plugins = config.plugins;
94
+ if (!plugins || !Array.isArray(plugins) || plugins.length === 0) {
95
+ console.log(chalk.dim('No EdgeBase plugins configured.'));
96
+ console.log();
97
+ console.log(chalk.dim('Add plugins to edgebase.config.ts:'));
98
+ console.log(chalk.dim(" import { myPlugin } from 'my-plugin';"));
99
+ console.log(chalk.dim(' export default defineConfig({'));
100
+ console.log(chalk.dim(' plugins: [ myPlugin({ ... }) ],'));
101
+ console.log(chalk.dim(' });'));
102
+ return;
103
+ }
104
+ console.log(chalk.blue(`📦 ${plugins.length} plugin(s) configured:\n`));
105
+ for (const plugin of plugins) {
106
+ const versionStr = plugin.version ? chalk.dim(` v${plugin.version}`) : '';
107
+ const apiVersionStr = plugin.pluginApiVersion
108
+ ? chalk.dim(` api v${plugin.pluginApiVersion}`)
109
+ : '';
110
+ console.log(` ${chalk.green('•')} ${chalk.bold(plugin.name)}${versionStr}${apiVersionStr}`);
111
+ if (plugin.manifest?.description) {
112
+ console.log(` ${chalk.dim(plugin.manifest.description)}`);
113
+ }
114
+ if (plugin.tables) {
115
+ const tableNames = Object.keys(plugin.tables);
116
+ console.log(` Tables: ${tableNames.map((t) => chalk.cyan(t)).join(', ')}`);
117
+ }
118
+ if (plugin.functions) {
119
+ const funcNames = Object.keys(plugin.functions);
120
+ console.log(` Functions: ${funcNames.map((f) => chalk.cyan(f)).join(', ')}`);
121
+ }
122
+ if (plugin.hooks) {
123
+ const hookEvents = Object.keys(plugin.hooks);
124
+ console.log(` Hooks: ${hookEvents.map((h) => chalk.dim(h)).join(', ')}`);
125
+ }
126
+ const lifecycle = [];
127
+ if (plugin.onInstall)
128
+ lifecycle.push('onInstall');
129
+ if (plugin.migrations) {
130
+ lifecycle.push(`migrations(${Object.keys(plugin.migrations).length})`);
131
+ }
132
+ if (lifecycle.length > 0) {
133
+ console.log(` Lifecycle: ${lifecycle.map((l) => chalk.magenta(l)).join(', ')}`);
134
+ }
135
+ if (plugin.manifest?.configTemplate) {
136
+ console.log(' Config Template:');
137
+ for (const line of formatTemplate(plugin.manifest.configTemplate)) {
138
+ console.log(line);
139
+ }
140
+ }
141
+ if (plugin.manifest?.docsUrl) {
142
+ console.log(` Docs: ${chalk.blue(plugin.manifest.docsUrl)}`);
143
+ }
144
+ console.log();
145
+ }
146
+ }
147
+ catch {
148
+ console.error(chalk.red('✗'), 'Failed to read edgebase.config.ts.');
149
+ console.log(chalk.dim(' Check for syntax errors or missing dependencies.'));
150
+ }
151
+ });
152
+ // ─── edgebase plugins cleanup ───
153
+ pluginsCommand
154
+ .command('cleanup <prefix>')
155
+ .description('Remove namespaced data for a removed plugin')
156
+ .option('--url <url>', 'Worker URL (or EDGEBASE_URL env)')
157
+ .option('--service-key <key>', 'Service Key (or EDGEBASE_SERVICE_KEY env)')
158
+ .option('--account-id <id>', 'Cloudflare Account ID for Edge Durable Object enumeration (or CLOUDFLARE_ACCOUNT_ID env)')
159
+ .option('--api-token <token>', 'Cloudflare API Token for Edge Durable Object enumeration (or CLOUDFLARE_API_TOKEN env)')
160
+ .option('-y, --yes', 'Skip confirmation prompt')
161
+ .action(async (rawPrefix, options) => {
162
+ const prefix = rawPrefix.trim().replace(/\/+$/, '');
163
+ if (!prefix) {
164
+ raiseCliError({
165
+ code: 'plugin_prefix_required',
166
+ field: 'prefix',
167
+ message: 'Plugin prefix is required.',
168
+ });
169
+ }
170
+ const projectDir = resolve('.');
171
+ let namespaces = [];
172
+ let configuredPluginNames = [];
173
+ try {
174
+ const projectConfig = readProjectConfig(projectDir);
175
+ namespaces = projectConfig.namespaces;
176
+ configuredPluginNames = projectConfig.configuredPluginNames;
177
+ }
178
+ catch (err) {
179
+ console.log(chalk.yellow('⚠'), `Failed to read edgebase.config.ts: ${err.message}`);
180
+ console.log(chalk.dim(' Continuing with API-only cleanup.'));
181
+ }
182
+ if (configuredPluginNames.includes(prefix)) {
183
+ raiseCliError({
184
+ code: 'plugin_still_configured',
185
+ message: `Plugin '${prefix}' is still configured in edgebase.config.ts. Remove it from config before running cleanup.`,
186
+ });
187
+ }
188
+ if (!options.yes) {
189
+ if (!process.stdin.isTTY || isNonInteractive()) {
190
+ raiseNeedsInput({
191
+ code: 'plugin_cleanup_confirmation_required',
192
+ field: 'yes',
193
+ message: `Plugin cleanup for '${prefix}' requires explicit confirmation before deleting data.`,
194
+ hint: 'Review the cleanup target, then rerun with --yes.',
195
+ choices: [{
196
+ label: 'Approve plugin cleanup',
197
+ value: 'yes',
198
+ args: ['--yes'],
199
+ hint: 'Use only after confirming the prefix and namespaces.',
200
+ }],
201
+ });
202
+ }
203
+ if (!isJson()) {
204
+ console.log(chalk.yellow('⚠'), 'This permanently deletes plugin-managed data.');
205
+ console.log(chalk.dim(` Target prefix: ${prefix}`));
206
+ if (namespaces.length > 0) {
207
+ console.log(chalk.dim(` Current namespaces: ${namespaces.join(', ')}`));
208
+ }
209
+ console.log();
210
+ }
211
+ const confirmed = await confirmCleanup(prefix);
212
+ if (!confirmed) {
213
+ console.log(chalk.dim('Cleanup cancelled.'));
214
+ return;
215
+ }
216
+ }
217
+ const api = resolveOptions(options);
218
+ const accountId = options.accountId || process.env.CLOUDFLARE_ACCOUNT_ID;
219
+ const apiToken = options.apiToken || process.env.CLOUDFLARE_API_TOKEN;
220
+ const hasEdgeEnumeration = !!(accountId && apiToken);
221
+ const cleanupResults = [];
222
+ const failures = [];
223
+ const seenTargets = new Set();
224
+ async function cleanupTarget(label, body) {
225
+ if (seenTargets.has(label))
226
+ return;
227
+ seenTargets.add(label);
228
+ try {
229
+ const result = await apiCall(api, '/cleanup-plugin', body);
230
+ cleanupResults.push(result);
231
+ const removedTables = result.removed.tables.length;
232
+ console.log(`${chalk.green('✓')} ${label} — removed ${removedTables} table${removedTables === 1 ? '' : 's'}`);
233
+ }
234
+ catch (err) {
235
+ failures.push({ target: label, error: err.message });
236
+ console.log(chalk.red('✗'), `${label} — ${err.message}`);
237
+ }
238
+ }
239
+ console.log(chalk.blue(`🧹 Cleaning plugin data for ${prefix}...`));
240
+ for (const namespace of namespaces) {
241
+ await cleanupTarget(`namespace:${namespace}`, { prefix, namespace });
242
+ }
243
+ if (hasEdgeEnumeration) {
244
+ console.log(chalk.dim(' Discovering Durable Objects via Cloudflare API...'));
245
+ try {
246
+ const cf = { accountId: accountId, apiToken: apiToken };
247
+ const dos = await resolveDatabaseDOs(api, cf);
248
+ for (const doInfo of dos) {
249
+ await cleanupTarget(`do:${doInfo.doName}`, { prefix, doName: doInfo.doName });
250
+ }
251
+ }
252
+ catch (err) {
253
+ failures.push({
254
+ target: 'edge-do-enumeration',
255
+ error: err.message,
256
+ });
257
+ console.log(chalk.yellow('⚠'), `Edge DO enumeration failed: ${err.message}`);
258
+ }
259
+ }
260
+ else {
261
+ console.log(chalk.dim(' Cloudflare account credentials not provided; dynamic Durable Object instances cannot be discovered automatically.'));
262
+ }
263
+ if (cleanupResults.length === 0) {
264
+ await cleanupTarget('plugin-version-meta', { prefix });
265
+ }
266
+ const removedTables = new Set(cleanupResults.flatMap((result) => result.removed.tables));
267
+ const removedMetaKeys = new Set(cleanupResults.flatMap((result) => result.removed.metaKeys));
268
+ console.log();
269
+ console.log(chalk.green('Cleanup summary:'), `${removedTables.size} table${removedTables.size === 1 ? '' : 's'}, ${removedMetaKeys.size} metadata key${removedMetaKeys.size === 1 ? '' : 's'}`);
270
+ if (!hasEdgeEnumeration) {
271
+ console.log(chalk.dim('Dynamic DO-backed namespaces require --account-id and --api-token for complete cleanup on Cloudflare Edge.'));
272
+ }
273
+ if (failures.length > 0) {
274
+ raiseCliError({
275
+ code: 'plugin_cleanup_partial_failure',
276
+ message: `Plugin cleanup completed with ${failures.length} failure(s).`,
277
+ details: {
278
+ prefix,
279
+ failures,
280
+ removedTables: Array.from(removedTables),
281
+ removedMetaKeys: Array.from(removedMetaKeys),
282
+ },
283
+ });
284
+ }
285
+ if (isJson()) {
286
+ console.log(JSON.stringify({
287
+ status: 'success',
288
+ prefix,
289
+ removedTables: Array.from(removedTables),
290
+ removedMetaKeys: Array.from(removedMetaKeys),
291
+ edgeEnumerationUsed: hasEdgeEnumeration,
292
+ }));
293
+ }
294
+ });
295
+ //# sourceMappingURL=plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/commands/plugins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const realtimeCommand: Command;
3
+ //# sourceMappingURL=realtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../src/commands/realtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,eAAe,SACqC,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { isCliStructuredError, raiseCliError } from '../lib/agent-contract.js';
4
+ import { isJson, isQuiet } from '../lib/cli-context.js';
5
+ import { provisionRealtime } from '../lib/realtime-provision.js';
6
+ export const realtimeCommand = new Command('realtime')
7
+ .description('Manage Cloudflare Realtime SFU/TURN integration');
8
+ realtimeCommand
9
+ .command('provision')
10
+ .description('Create or reuse Cloudflare Realtime app and TURN key, then store local/Workers secrets')
11
+ .option('--app-name <name>', 'Override the managed Cloudflare Realtime app name')
12
+ .option('--turn-name <name>', 'Override the managed Cloudflare TURN key name')
13
+ .option('--force-create-app', 'Mint a new Cloudflare Realtime app even if local secrets exist')
14
+ .option('--force-create-turn', 'Mint a new Cloudflare TURN key even if local secrets exist')
15
+ .option('--skip-workers-secrets', 'Only write local secrets; do not sync Wrangler Workers secrets')
16
+ .action(async (options) => {
17
+ const projectDir = process.cwd();
18
+ if (!isQuiet()) {
19
+ console.log(chalk.blue('🎥 Provisioning Cloudflare Realtime...'));
20
+ console.log();
21
+ }
22
+ try {
23
+ const result = await provisionRealtime({
24
+ projectDir,
25
+ appName: options.appName,
26
+ turnName: options.turnName,
27
+ forceCreateApp: options.forceCreateApp,
28
+ forceCreateTurn: options.forceCreateTurn,
29
+ syncWorkersSecrets: !options.skipWorkersSecrets,
30
+ });
31
+ if (isJson()) {
32
+ console.log(JSON.stringify({
33
+ status: 'success',
34
+ projectDir,
35
+ app: {
36
+ id: result.appId,
37
+ name: result.appName,
38
+ source: result.appSource,
39
+ },
40
+ turn: {
41
+ keyId: result.turnKeyId,
42
+ name: result.turnName,
43
+ source: result.turnSource,
44
+ },
45
+ workersSecretsSynced: !options.skipWorkersSecrets && !(result.warnings?.length),
46
+ warnings: result.warnings ?? [],
47
+ }));
48
+ return;
49
+ }
50
+ console.log(chalk.green('✓'), `Realtime app (${result.appSource}) → ${result.appName}`);
51
+ console.log(chalk.dim(` CF_REALTIME_APP_ID=${result.appId}`));
52
+ console.log(chalk.green('✓'), `TURN key (${result.turnSource}) → ${result.turnName}`);
53
+ console.log(chalk.dim(` CF_REALTIME_TURN_KEY_ID=${result.turnKeyId}`));
54
+ console.log();
55
+ console.log(chalk.green('✅ Cloudflare Realtime secrets are ready.'));
56
+ console.log(chalk.dim(' Local: .env.development / .dev.vars / .edgebase/secrets.json'));
57
+ if (!options.skipWorkersSecrets) {
58
+ console.log(chalk.dim(' Workers: synced via `wrangler secret put`'));
59
+ }
60
+ }
61
+ catch (error) {
62
+ if (isCliStructuredError(error))
63
+ throw error;
64
+ raiseCliError({
65
+ code: 'realtime_provision_failed',
66
+ message: error instanceof Error ? error.message : 'Realtime provisioning failed.',
67
+ hint: 'Check your Cloudflare authentication, API token permissions, and project wrangler configuration.',
68
+ });
69
+ }
70
+ });
71
+ //# sourceMappingURL=realtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime.js","sourceRoot":"","sources":["../../src/commands/realtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * `npx edgebase secret` — Manage Cloudflare Workers Secrets.
4
+ * Wraps wrangler secret commands for consistent DX.
5
+ */
6
+ export declare const secretCommand: Command;
7
+ //# sourceMappingURL=secret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret.d.ts","sourceRoot":"","sources":["../../src/commands/secret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwEpC;;;GAGG;AACH,eAAO,MAAM,aAAa,SACwB,CAAC"}
@@ -0,0 +1,180 @@
1
+ import { Command } from 'commander';
2
+ import { execFileSync, spawn } from 'node:child_process';
3
+ import chalk from 'chalk';
4
+ import { raiseCliError, raiseNeedsInput } from '../lib/agent-contract.js';
5
+ import { isJson, isNonInteractive, isQuiet } from '../lib/cli-context.js';
6
+ import { wranglerArgs, wranglerCommand } from '../lib/wrangler.js';
7
+ import { parseWranglerSecretNames } from '../lib/wrangler-secrets.js';
8
+ function extractCommandFailure(error) {
9
+ if (!(error instanceof Error)) {
10
+ return { message: 'Command failed for an unknown reason.' };
11
+ }
12
+ const execError = error;
13
+ const stderr = typeof execError.stderr === 'string'
14
+ ? execError.stderr.trim()
15
+ : Buffer.isBuffer(execError.stderr)
16
+ ? execError.stderr.toString('utf-8').trim()
17
+ : undefined;
18
+ const stdout = typeof execError.stdout === 'string'
19
+ ? execError.stdout.trim()
20
+ : Buffer.isBuffer(execError.stdout)
21
+ ? execError.stdout.toString('utf-8').trim()
22
+ : undefined;
23
+ return {
24
+ message: stderr || stdout || error.message,
25
+ ...(stderr ? { stderr } : {}),
26
+ ...(stdout ? { stdout } : {}),
27
+ };
28
+ }
29
+ function runWranglerSecretCommand(args, options) {
30
+ try {
31
+ const stdout = execFileSync(wranglerCommand(), wranglerArgs(args), {
32
+ encoding: 'utf-8',
33
+ input: options?.input ?? options?.confirmationInput,
34
+ stdio: ['pipe', 'pipe', 'pipe'],
35
+ });
36
+ return { stdout, stderr: '' };
37
+ }
38
+ catch (error) {
39
+ const details = extractCommandFailure(error);
40
+ raiseCliError({
41
+ code: 'secret_command_failed',
42
+ message: details.message,
43
+ hint: 'Check your Wrangler login and current project configuration, then retry.',
44
+ details: {
45
+ args,
46
+ ...(details.stderr ? { stderr: details.stderr } : {}),
47
+ ...(details.stdout ? { stdout: details.stdout } : {}),
48
+ },
49
+ });
50
+ }
51
+ }
52
+ /**
53
+ * `npx edgebase secret` — Manage Cloudflare Workers Secrets.
54
+ * Wraps wrangler secret commands for consistent DX.
55
+ */
56
+ export const secretCommand = new Command('secret')
57
+ .description('Manage secrets (Workers Secrets)');
58
+ secretCommand
59
+ .command('set <key>')
60
+ .description('Set a secret value')
61
+ .option('--value <value>', 'Secret value (skip interactive wrangler prompt)')
62
+ .action(async (key, options) => {
63
+ if (!options.value && (!process.stdin.isTTY || isNonInteractive() || isJson())) {
64
+ raiseNeedsInput({
65
+ code: 'secret_value_required',
66
+ field: 'value',
67
+ message: `A value is required before secret '${key}' can be set non-interactively.`,
68
+ hint: 'Rerun with --value <secret>.',
69
+ });
70
+ }
71
+ if (!isQuiet()) {
72
+ console.log(chalk.blue(`🔑 Setting secret: ${key}`));
73
+ if (options.value) {
74
+ console.log(chalk.dim(' Using value provided via --value.'));
75
+ }
76
+ else {
77
+ console.log(chalk.dim(' Enter the secret value when prompted by wrangler.'));
78
+ }
79
+ console.log();
80
+ }
81
+ if (!options.value) {
82
+ await new Promise((resolve, reject) => {
83
+ const proc = spawn(wranglerCommand(), wranglerArgs(['wrangler', 'secret', 'put', key]), {
84
+ stdio: 'inherit',
85
+ });
86
+ proc.on('error', reject);
87
+ proc.on('exit', (code) => {
88
+ if (code === 0) {
89
+ resolve();
90
+ return;
91
+ }
92
+ reject(new Error(`Wrangler exited with code ${code ?? 1}.`));
93
+ });
94
+ }).catch((error) => {
95
+ raiseCliError({
96
+ code: 'secret_set_failed',
97
+ message: error instanceof Error ? error.message : `Failed to set secret '${key}'.`,
98
+ hint: 'Check your Wrangler login and secret permissions, then retry.',
99
+ });
100
+ });
101
+ }
102
+ else {
103
+ runWranglerSecretCommand(['wrangler', 'secret', 'put', key], { input: options.value });
104
+ }
105
+ if (isJson()) {
106
+ console.log(JSON.stringify({
107
+ status: 'success',
108
+ operation: 'set',
109
+ key,
110
+ }));
111
+ return;
112
+ }
113
+ console.log(chalk.green(`✅ Secret '${key}' set successfully.`));
114
+ });
115
+ secretCommand
116
+ .command('list')
117
+ .description('List all secrets')
118
+ .action(async () => {
119
+ const { stdout } = runWranglerSecretCommand(['wrangler', 'secret', 'list', '--format', 'json']);
120
+ const secrets = Array.from(parseWranglerSecretNames(stdout)).sort();
121
+ if (isJson()) {
122
+ console.log(JSON.stringify({
123
+ status: 'success',
124
+ operation: 'list',
125
+ secrets,
126
+ }));
127
+ return;
128
+ }
129
+ console.log(chalk.blue('🔑 Listing secrets...'));
130
+ console.log();
131
+ if (secrets.length === 0) {
132
+ console.log(chalk.dim(' No Workers secrets found.'));
133
+ return;
134
+ }
135
+ for (const name of secrets) {
136
+ console.log(chalk.green('✓'), name);
137
+ }
138
+ });
139
+ secretCommand
140
+ .command('delete <key>')
141
+ .description('Delete a secret')
142
+ .action(async (key) => {
143
+ if (!isQuiet()) {
144
+ console.log(chalk.blue(`🗑️ Deleting secret: ${key}`));
145
+ }
146
+ if (isJson() || isNonInteractive() || !process.stdin.isTTY) {
147
+ runWranglerSecretCommand(['wrangler', 'secret', 'delete', key], { confirmationInput: 'y\n' });
148
+ }
149
+ else {
150
+ await new Promise((resolve, reject) => {
151
+ const proc = spawn(wranglerCommand(), wranglerArgs(['wrangler', 'secret', 'delete', key]), {
152
+ stdio: 'inherit',
153
+ });
154
+ proc.on('error', reject);
155
+ proc.on('exit', (code) => {
156
+ if (code === 0) {
157
+ resolve();
158
+ return;
159
+ }
160
+ reject(new Error(`Wrangler exited with code ${code ?? 1}.`));
161
+ });
162
+ }).catch((error) => {
163
+ raiseCliError({
164
+ code: 'secret_delete_failed',
165
+ message: error instanceof Error ? error.message : `Failed to delete secret '${key}'.`,
166
+ hint: 'Check your Wrangler login, then retry the deletion.',
167
+ });
168
+ });
169
+ }
170
+ if (isJson()) {
171
+ console.log(JSON.stringify({
172
+ status: 'success',
173
+ operation: 'delete',
174
+ key,
175
+ }));
176
+ return;
177
+ }
178
+ console.log(chalk.green(`✅ Secret '${key}' deleted.`));
179
+ });
180
+ //# sourceMappingURL=secret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret.js","sourceRoot":"","sources":["../../src/commands/secret.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { Command } from 'commander';
2
+ export interface ResolvedSeedTarget {
3
+ namespace: string;
4
+ instanceId?: string;
5
+ }
6
+ export declare function listSeedNamespaces(config?: Record<string, unknown> | null): string[];
7
+ export declare function inferDefaultSeedNamespace(config?: Record<string, unknown> | null): string | null;
8
+ export declare function buildSeedTableBasePath(namespace: string, instanceId?: string): string;
9
+ declare function resolveSeedTarget(options: {
10
+ namespace?: string;
11
+ id?: string;
12
+ }, config?: Record<string, unknown> | null): ResolvedSeedTarget;
13
+ export declare const _internals: {
14
+ buildSeedTableBasePath: typeof buildSeedTableBasePath;
15
+ inferDefaultSeedNamespace: typeof inferDefaultSeedNamespace;
16
+ listSeedNamespaces: typeof listSeedNamespaces;
17
+ resolveSeedTarget: typeof resolveSeedTarget;
18
+ };
19
+ export declare const seedCommand: Command;
20
+ export {};
21
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAuDD,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,MAAM,EAAE,CAEpF;AAED,wBAAgB,yBAAyB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAMhG;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAMrF;AAED,iBAAS,iBAAiB,CACxB,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACtC,kBAAkB,CA6CpB;AAsCD,eAAO,MAAM,UAAU;;;;;CAKtB,CAAC;AAEF,eAAO,MAAM,WAAW,SAiNrB,CAAC"}