@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,600 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { basename, join, resolve } from 'node:path';
3
+ import { Command } from 'commander';
4
+ import chalk from 'chalk';
5
+ import { isCliStructuredError, raiseCliError, raiseNeedsUserAction, } from '../lib/agent-contract.js';
6
+ import { isJson, isNonInteractive } from '../lib/cli-context.js';
7
+ import { loadConfigSafe } from '../lib/load-config.js';
8
+ import { extractDatabases } from '../lib/deploy-shared.js';
9
+ import { getDefaultPostgresEnvKey, listNeonDatabases, listNeonBranches, listNeonOrganizations, listNeonProjects, listNeonRoles, parseNeonProject, parseNeonConnectionString, runNeonctl, runNeonctlInteractive, writeProjectEnvValue, } from '../lib/neon.js';
10
+ import { promptSelect } from '../lib/prompts.js';
11
+ const FULL_CONFIG_EVAL = { allowRegexFallback: false };
12
+ function normalizeProjectName(value) {
13
+ const normalized = value
14
+ .toLowerCase()
15
+ .replace(/[^a-z0-9-]+/g, '-')
16
+ .replace(/^-+|-+$/g, '')
17
+ .replace(/-{2,}/g, '-');
18
+ return normalized || 'edgebase-neon';
19
+ }
20
+ function normalizePgIdentifier(value, fallback = 'edgebase_db') {
21
+ const normalized = value
22
+ .toLowerCase()
23
+ .replace(/[^a-z0-9_]+/g, '_')
24
+ .replace(/^_+|_+$/g, '')
25
+ .replace(/_+/g, '_');
26
+ const candidate = normalized || fallback;
27
+ return /^[a-z_]/.test(candidate) ? candidate : `eb_${candidate}`;
28
+ }
29
+ function listNeonDatabaseTargets(config) {
30
+ const databases = config
31
+ ? extractDatabases(config)
32
+ : null;
33
+ if (!databases)
34
+ return [];
35
+ return Object.entries(databases)
36
+ .filter(([, dbBlock]) => dbBlock?.provider === 'neon' || dbBlock?.provider === 'postgres')
37
+ .map(([namespace, dbBlock]) => ({
38
+ kind: 'database',
39
+ label: namespace,
40
+ namespace,
41
+ envKey: dbBlock.connectionString ?? getDefaultPostgresEnvKey(namespace),
42
+ }));
43
+ }
44
+ export function listNeonSetupTargets(config) {
45
+ const targets = [];
46
+ const auth = config?.auth;
47
+ if (auth?.provider === 'neon' || auth?.provider === 'postgres') {
48
+ targets.push({
49
+ kind: 'auth',
50
+ label: 'auth',
51
+ envKey: auth.connectionString ?? 'AUTH_POSTGRES_URL',
52
+ });
53
+ }
54
+ targets.push(...listNeonDatabaseTargets(config));
55
+ return targets;
56
+ }
57
+ export function resolveNeonSetupTarget(options, config) {
58
+ if (options.auth && options.namespace) {
59
+ throw new Error('Use either `--auth` or `--namespace <name>`, not both.');
60
+ }
61
+ const databases = config
62
+ ? extractDatabases(config)
63
+ : null;
64
+ const auth = config?.auth;
65
+ if (options.auth) {
66
+ if (auth?.provider !== 'neon' && auth?.provider !== 'postgres') {
67
+ throw new Error("auth.provider is not set to 'postgres' (legacy 'neon' also works) in edgebase.config.ts.");
68
+ }
69
+ return {
70
+ kind: 'auth',
71
+ label: 'auth',
72
+ envKey: auth.connectionString ?? 'AUTH_POSTGRES_URL',
73
+ };
74
+ }
75
+ if (options.namespace) {
76
+ const dbBlock = databases?.[options.namespace];
77
+ if (!dbBlock) {
78
+ throw new Error(`DB block '${options.namespace}' was not found in edgebase.config.ts.`);
79
+ }
80
+ if (dbBlock.provider !== 'neon' && dbBlock.provider !== 'postgres') {
81
+ throw new Error(`DB block '${options.namespace}' is not configured with provider: 'postgres' (legacy 'neon' also works).`);
82
+ }
83
+ return {
84
+ kind: 'database',
85
+ label: options.namespace,
86
+ namespace: options.namespace,
87
+ envKey: dbBlock.connectionString ?? getDefaultPostgresEnvKey(options.namespace),
88
+ };
89
+ }
90
+ const targets = listNeonSetupTargets(config);
91
+ return targets.length === 1 ? targets[0] : null;
92
+ }
93
+ export const _internals = {
94
+ listNeonSetupTargets,
95
+ normalizePgIdentifier,
96
+ normalizeProjectName,
97
+ resolveNeonSetupTarget,
98
+ };
99
+ function formatProjectMatchLabel(match) {
100
+ return `${match.projectName} (${match.orgName})`;
101
+ }
102
+ function normalizeProviderForNeon(value) {
103
+ return value === 'neon' || value === 'postgres' ? value : undefined;
104
+ }
105
+ function buildExplicitTarget(input) {
106
+ const { auth, namespace, configJson, envKeyOverride, targetLabelOverride } = input;
107
+ if (!auth && !namespace && !envKeyOverride && !targetLabelOverride) {
108
+ return null;
109
+ }
110
+ if (auth && namespace) {
111
+ throw new Error('Use either auth mode or a namespace target, not both.');
112
+ }
113
+ if (auth) {
114
+ const authConfig = configJson?.auth;
115
+ const provider = normalizeProviderForNeon(authConfig?.provider);
116
+ if (!provider && !envKeyOverride) {
117
+ throw new Error("auth.provider is not set to 'postgres' (legacy 'neon' also works) in edgebase.config.ts.");
118
+ }
119
+ return {
120
+ kind: 'auth',
121
+ label: targetLabelOverride ?? 'auth',
122
+ envKey: envKeyOverride ?? authConfig?.connectionString ?? 'AUTH_POSTGRES_URL',
123
+ };
124
+ }
125
+ const dbBlock = namespace
126
+ ? extractDatabases(configJson ?? {})?.[namespace]
127
+ : undefined;
128
+ const provider = normalizeProviderForNeon(dbBlock?.provider);
129
+ if (!provider && !envKeyOverride && namespace) {
130
+ throw new Error(`DB block '${namespace}' is not configured with provider: 'postgres' (legacy 'neon' also works).`);
131
+ }
132
+ const resolvedNamespace = namespace ?? targetLabelOverride ?? 'shared';
133
+ return {
134
+ kind: 'database',
135
+ label: targetLabelOverride ?? resolvedNamespace,
136
+ namespace: resolvedNamespace,
137
+ envKey: envKeyOverride ?? dbBlock?.connectionString ?? getDefaultPostgresEnvKey(resolvedNamespace),
138
+ };
139
+ }
140
+ function buildProjectDefaults(projectDir, target) {
141
+ const appSlug = normalizeProjectName(basename(projectDir));
142
+ const defaultProjectName = target.kind === 'auth'
143
+ ? `${appSlug}-auth`
144
+ : `${appSlug}-${normalizeProjectName(target.label)}`;
145
+ const defaultDatabaseName = normalizePgIdentifier(`${appSlug}_${target.label}`);
146
+ const defaultRoleName = normalizePgIdentifier(`${defaultDatabaseName}_owner`, 'edgebase_owner');
147
+ return {
148
+ appSlug,
149
+ defaultProjectName,
150
+ defaultDatabaseName,
151
+ defaultRoleName,
152
+ };
153
+ }
154
+ async function chooseOrganization(organizations, requestedOrgId) {
155
+ if (requestedOrgId) {
156
+ const match = organizations.find((entry) => entry.id === requestedOrgId);
157
+ if (!match) {
158
+ throw new Error(`Neon organization '${requestedOrgId}' was not found for the authenticated account.`);
159
+ }
160
+ return match;
161
+ }
162
+ if (organizations.length === 0) {
163
+ throw new Error('No Neon organizations are available for the authenticated account.');
164
+ }
165
+ if (organizations.length === 1) {
166
+ return organizations[0];
167
+ }
168
+ const labels = organizations.map((entry) => `${entry.name} (${entry.id})`);
169
+ const selected = await promptSelect('Which Neon organization should own the new project?', labels, {
170
+ field: 'orgId',
171
+ message: 'Multiple Neon organizations are available.',
172
+ hint: 'Rerun with --org-id <id>.',
173
+ choices: organizations.map((entry) => ({
174
+ label: `${entry.name} (${entry.id})`,
175
+ value: entry.id,
176
+ args: ['--org-id', entry.id],
177
+ })),
178
+ });
179
+ const selectedIndex = labels.indexOf(selected);
180
+ return organizations[selectedIndex] ?? organizations[0];
181
+ }
182
+ async function findProjectMatches(desiredProjectName, organizations, neonOptions) {
183
+ const matches = [];
184
+ for (const organization of organizations) {
185
+ const projects = listNeonProjects(organization.id, neonOptions);
186
+ for (const project of projects) {
187
+ if (project.name === desiredProjectName) {
188
+ matches.push({
189
+ projectId: project.id,
190
+ projectName: project.name,
191
+ orgId: organization.id,
192
+ orgName: organization.name,
193
+ });
194
+ }
195
+ }
196
+ }
197
+ return matches;
198
+ }
199
+ function listAllProjectMatches(organizations, neonOptions) {
200
+ const matches = [];
201
+ for (const organization of organizations) {
202
+ const projects = listNeonProjects(organization.id, neonOptions);
203
+ for (const project of projects) {
204
+ matches.push({
205
+ projectId: project.id,
206
+ projectName: project.name,
207
+ orgId: organization.id,
208
+ orgName: organization.name,
209
+ });
210
+ }
211
+ }
212
+ return matches;
213
+ }
214
+ function getNeonProject(projectId, neonOptions) {
215
+ const output = runNeonctl(['project', 'get', projectId], { ...neonOptions, output: 'json' });
216
+ return parseNeonProject(output);
217
+ }
218
+ async function resolveProjectForMode(input) {
219
+ const { mode, desiredProjectName, orgId, explicitProjectId, databaseName, roleName, neonOptions, } = input;
220
+ if (explicitProjectId) {
221
+ const existingProject = getNeonProject(explicitProjectId, neonOptions);
222
+ return {
223
+ projectId: explicitProjectId,
224
+ orgId: orgId ?? existingProject?.orgId ?? '',
225
+ projectName: existingProject?.name ?? desiredProjectName,
226
+ };
227
+ }
228
+ const organizations = listNeonOrganizations(neonOptions);
229
+ const searchableOrganizations = orgId
230
+ ? organizations.filter((entry) => entry.id === orgId)
231
+ : organizations;
232
+ if (searchableOrganizations.length === 0) {
233
+ throw new Error(orgId
234
+ ? `Neon organization '${orgId}' was not found for the authenticated account.`
235
+ : 'No Neon organizations are available for the authenticated account.');
236
+ }
237
+ const matches = await findProjectMatches(desiredProjectName, searchableOrganizations, neonOptions);
238
+ if (mode === 'reuse') {
239
+ if (matches.length === 0) {
240
+ const allProjects = listAllProjectMatches(searchableOrganizations, neonOptions);
241
+ if (allProjects.length === 0) {
242
+ throw new Error('No existing Neon projects are available for the authenticated account.');
243
+ }
244
+ if (allProjects.length === 1) {
245
+ return {
246
+ projectId: allProjects[0].projectId,
247
+ orgId: allProjects[0].orgId,
248
+ projectName: allProjects[0].projectName,
249
+ };
250
+ }
251
+ const labels = allProjects.map(formatProjectMatchLabel);
252
+ const selected = await promptSelect(`No Neon project named '${desiredProjectName}' was found. Which existing Neon project should EdgeBase connect?`, labels, {
253
+ field: 'projectId',
254
+ message: `No existing Neon project named '${desiredProjectName}' was found.`,
255
+ hint: 'Rerun with --project-id <id>.',
256
+ choices: allProjects.map((project) => ({
257
+ label: formatProjectMatchLabel(project),
258
+ value: project.projectId,
259
+ args: ['--project-id', project.projectId],
260
+ })),
261
+ });
262
+ const selectedIndex = labels.indexOf(selected);
263
+ const match = allProjects[selectedIndex] ?? allProjects[0];
264
+ return {
265
+ projectId: match.projectId,
266
+ orgId: match.orgId,
267
+ projectName: match.projectName,
268
+ };
269
+ }
270
+ if (matches.length === 1) {
271
+ return {
272
+ projectId: matches[0].projectId,
273
+ orgId: matches[0].orgId,
274
+ projectName: matches[0].projectName,
275
+ };
276
+ }
277
+ const labels = matches.map(formatProjectMatchLabel);
278
+ const selected = await promptSelect(`Multiple Neon projects named '${desiredProjectName}' were found. Which one should EdgeBase use?`, labels, {
279
+ field: 'projectId',
280
+ message: `Multiple Neon projects named '${desiredProjectName}' were found.`,
281
+ hint: 'Rerun with --project-id <id> or narrow the search with --org-id.',
282
+ choices: matches.map((match) => ({
283
+ label: formatProjectMatchLabel(match),
284
+ value: match.projectId,
285
+ args: ['--project-id', match.projectId],
286
+ })),
287
+ });
288
+ const selectedIndex = labels.indexOf(selected);
289
+ const match = matches[selectedIndex] ?? matches[0];
290
+ return {
291
+ projectId: match.projectId,
292
+ orgId: match.orgId,
293
+ projectName: match.projectName,
294
+ };
295
+ }
296
+ if (mode === 'auto' && matches.length > 0) {
297
+ if (matches.length === 1) {
298
+ return {
299
+ projectId: matches[0].projectId,
300
+ orgId: matches[0].orgId,
301
+ projectName: matches[0].projectName,
302
+ };
303
+ }
304
+ const labels = matches.map(formatProjectMatchLabel);
305
+ const selected = await promptSelect(`Multiple Neon projects named '${desiredProjectName}' were found. Which one should EdgeBase use?`, labels, {
306
+ field: 'projectId',
307
+ message: `Multiple Neon projects named '${desiredProjectName}' were found.`,
308
+ hint: 'Rerun with --project-id <id> or narrow the search with --org-id.',
309
+ choices: matches.map((match) => ({
310
+ label: formatProjectMatchLabel(match),
311
+ value: match.projectId,
312
+ args: ['--project-id', match.projectId],
313
+ })),
314
+ });
315
+ const selectedIndex = labels.indexOf(selected);
316
+ const match = matches[selectedIndex] ?? matches[0];
317
+ return {
318
+ projectId: match.projectId,
319
+ orgId: match.orgId,
320
+ projectName: match.projectName,
321
+ };
322
+ }
323
+ const owner = await chooseOrganization(searchableOrganizations, orgId);
324
+ let projectName = desiredProjectName;
325
+ if (mode === 'create') {
326
+ const taken = new Set(listNeonProjects(owner.id, neonOptions)
327
+ .map((project) => project.name));
328
+ if (taken.has(projectName)) {
329
+ let suffix = 2;
330
+ while (taken.has(`${projectName}-${suffix}`))
331
+ suffix++;
332
+ projectName = `${projectName}-${suffix}`;
333
+ }
334
+ }
335
+ const createdOutput = runNeonctl([
336
+ 'project',
337
+ 'create',
338
+ '--org-id',
339
+ owner.id,
340
+ '--name',
341
+ projectName,
342
+ '--database',
343
+ databaseName,
344
+ '--role',
345
+ roleName,
346
+ '--set-context',
347
+ ], {
348
+ ...neonOptions,
349
+ output: 'json',
350
+ });
351
+ const createdProject = parseNeonProject(createdOutput);
352
+ if (!createdProject?.id) {
353
+ throw new Error('Neon project creation succeeded but EdgeBase could not determine the new project ID.');
354
+ }
355
+ return {
356
+ projectId: createdProject.id,
357
+ orgId: createdProject.orgId ?? owner.id,
358
+ projectName: createdProject.name,
359
+ };
360
+ }
361
+ export async function listAvailableNeonProjects(options = {}) {
362
+ const projectDir = options.projectDir ? resolve(options.projectDir) : resolve('.');
363
+ const neonOptions = {
364
+ apiKey: options.apiKey ?? process.env.NEON_API_KEY,
365
+ configDir: options.configDir,
366
+ cwd: projectDir,
367
+ };
368
+ const organizations = listNeonOrganizations(neonOptions);
369
+ const searchableOrganizations = options.orgId
370
+ ? organizations.filter((entry) => entry.id === options.orgId)
371
+ : organizations;
372
+ if (searchableOrganizations.length === 0) {
373
+ throw new Error(options.orgId
374
+ ? `Neon organization '${options.orgId}' was not found for the authenticated account.`
375
+ : 'No Neon organizations are available for the authenticated account.');
376
+ }
377
+ return listAllProjectMatches(searchableOrganizations, neonOptions)
378
+ .sort((a, b) => `${a.projectName}:${a.orgName}`.localeCompare(`${b.projectName}:${b.orgName}`));
379
+ }
380
+ async function ensureNeonAuth(projectDir, apiKey, configDir) {
381
+ try {
382
+ runNeonctl(['me'], {
383
+ apiKey,
384
+ configDir,
385
+ cwd: projectDir,
386
+ output: 'json',
387
+ });
388
+ return;
389
+ }
390
+ catch {
391
+ if (!process.stdin.isTTY || isNonInteractive()) {
392
+ raiseNeedsUserAction({
393
+ code: 'neon_auth_required',
394
+ message: 'Neon authentication is required before setup can continue.',
395
+ hint: 'Set NEON_API_KEY/--api-key for automation, or complete a one-time neonctl auth flow.',
396
+ action: {
397
+ type: 'open_browser',
398
+ title: 'Neon Login',
399
+ message: 'This step opens the official neonctl browser flow and requires the user to finish sign-in.',
400
+ command: 'neonctl auth',
401
+ instructions: [
402
+ 'Run the login command in an interactive terminal, or provide --api-key/NEON_API_KEY.',
403
+ 'After authentication succeeds, rerun the original EdgeBase command.',
404
+ ],
405
+ },
406
+ });
407
+ }
408
+ }
409
+ console.log(chalk.blue('🌅 Authenticating with Neon...'));
410
+ console.log(chalk.dim(' EdgeBase will open the official neonctl auth flow if needed.'));
411
+ runNeonctlInteractive(['auth'], {
412
+ apiKey,
413
+ configDir,
414
+ cwd: projectDir,
415
+ });
416
+ }
417
+ export async function runNeonSetup(options) {
418
+ const projectDir = options.projectDir ? resolve(options.projectDir) : resolve('.');
419
+ const configPath = join(projectDir, 'edgebase.config.ts');
420
+ const configJson = options.configJson ?? (existsSync(configPath)
421
+ ? loadConfigSafe(configPath, projectDir, FULL_CONFIG_EVAL)
422
+ : null);
423
+ const target = buildExplicitTarget({
424
+ auth: options.auth,
425
+ namespace: options.namespace,
426
+ configJson,
427
+ envKeyOverride: options.envKeyOverride,
428
+ targetLabelOverride: options.targetLabelOverride,
429
+ }) ?? resolveNeonSetupTarget({ auth: options.auth, namespace: options.namespace }, configJson);
430
+ if (!target) {
431
+ const targets = listNeonSetupTargets(configJson);
432
+ if (targets.length === 0) {
433
+ throw new Error("No PostgreSQL-backed targets found. Set provider: 'postgres' (legacy 'neon' also works) first.");
434
+ }
435
+ const selection = await promptSelect('Which Neon target do you want to configure?', targets.map((entry) => entry.label), {
436
+ field: 'target',
437
+ message: 'Multiple PostgreSQL-backed targets were found.',
438
+ hint: 'Rerun with --auth or --namespace <name> explicitly.',
439
+ choices: targets.map((entry) => ({
440
+ label: entry.label,
441
+ value: entry.kind === 'auth' ? 'auth' : entry.namespace ?? entry.label,
442
+ args: entry.kind === 'auth' ? ['--auth'] : ['--namespace', entry.namespace ?? entry.label],
443
+ })),
444
+ });
445
+ const resolved = targets.find((entry) => entry.label === selection) ?? null;
446
+ if (!resolved) {
447
+ throw new Error('Failed to resolve the selected Neon target.');
448
+ }
449
+ return runNeonSetup({
450
+ ...options,
451
+ auth: resolved.kind === 'auth',
452
+ namespace: resolved.namespace,
453
+ envKeyOverride: resolved.envKey,
454
+ targetLabelOverride: resolved.label,
455
+ configJson,
456
+ });
457
+ }
458
+ const defaults = buildProjectDefaults(projectDir, target);
459
+ const desiredProjectName = options.projectName ?? defaults.defaultProjectName;
460
+ const databaseName = options.database ?? defaults.defaultDatabaseName;
461
+ const roleName = options.role ?? defaults.defaultRoleName;
462
+ const apiKey = options.apiKey ?? process.env.NEON_API_KEY;
463
+ const neonOptions = {
464
+ apiKey,
465
+ configDir: options.configDir,
466
+ cwd: projectDir,
467
+ };
468
+ await ensureNeonAuth(projectDir, apiKey, options.configDir);
469
+ const { projectId, projectName } = await resolveProjectForMode({
470
+ mode: options.projectMode ?? 'auto',
471
+ desiredProjectName,
472
+ orgId: options.orgId,
473
+ explicitProjectId: options.projectId,
474
+ databaseName,
475
+ roleName,
476
+ neonOptions,
477
+ });
478
+ let branch = options.branch;
479
+ if (!branch && projectId && process.stdin.isTTY && !isNonInteractive()) {
480
+ try {
481
+ const branches = listNeonBranches(projectId, neonOptions);
482
+ if (branches.length > 1) {
483
+ const defaultBranch = branches.find((entry) => entry.default || entry.primary);
484
+ const labels = branches.map((entry) => (entry.default || entry.primary ? `${entry.name} (default)` : entry.name));
485
+ const selected = await promptSelect('Which Neon branch do you want to use?', labels);
486
+ const selectedIndex = labels.indexOf(selected);
487
+ branch = branches[selectedIndex]?.name ?? defaultBranch?.name;
488
+ }
489
+ }
490
+ catch {
491
+ // Fall back to Neon default branch.
492
+ }
493
+ }
494
+ const roleNames = listNeonRoles(projectId, branch, neonOptions);
495
+ if (!roleNames.includes(roleName)) {
496
+ const args = ['role', 'create', '--project-id', projectId, '--name', roleName];
497
+ if (branch)
498
+ args.push('--branch', branch);
499
+ runNeonctl(args, { ...neonOptions, output: 'json' });
500
+ }
501
+ const databaseNames = listNeonDatabases(projectId, branch, neonOptions);
502
+ if (!databaseNames.includes(databaseName)) {
503
+ const args = [
504
+ 'database',
505
+ 'create',
506
+ '--project-id',
507
+ projectId,
508
+ '--name',
509
+ databaseName,
510
+ '--owner-name',
511
+ roleName,
512
+ ];
513
+ if (branch)
514
+ args.push('--branch', branch);
515
+ runNeonctl(args, { ...neonOptions, output: 'json' });
516
+ }
517
+ const connectionArgs = ['connection-string'];
518
+ if (branch)
519
+ connectionArgs.push(branch);
520
+ if (projectId)
521
+ connectionArgs.push('--project-id', projectId);
522
+ if (databaseName)
523
+ connectionArgs.push('--database-name', databaseName);
524
+ if (roleName)
525
+ connectionArgs.push('--role-name', roleName);
526
+ if (options.pooled)
527
+ connectionArgs.push('--pooled');
528
+ const output = runNeonctl(connectionArgs, {
529
+ apiKey,
530
+ configDir: options.configDir,
531
+ cwd: projectDir,
532
+ output: 'json',
533
+ });
534
+ const connectionString = parseNeonConnectionString(output);
535
+ const envDevPath = writeProjectEnvValue(projectDir, '.env.development', target.envKey, connectionString);
536
+ const envReleasePath = writeProjectEnvValue(projectDir, '.env.release', target.envKey, connectionString);
537
+ return {
538
+ target,
539
+ connectionString,
540
+ envDevPath,
541
+ envReleasePath,
542
+ projectId,
543
+ projectName,
544
+ databaseName,
545
+ roleName,
546
+ branch,
547
+ };
548
+ }
549
+ export const neonCommand = new Command('neon')
550
+ .description('Manage Neon PostgreSQL setup');
551
+ neonCommand
552
+ .command('setup')
553
+ .description('Authenticate with Neon and write postgres connection-string env keys')
554
+ .option('--namespace <ns>', "DB block namespace configured with provider: 'postgres' (legacy 'neon' also works)")
555
+ .option('--auth', "Configure auth.provider = 'postgres' (legacy 'neon' also works)")
556
+ .option('--project-id <id>', 'Existing Neon project ID (omit to use current neonctl context)')
557
+ .option('--project-name <name>', 'Neon project name (defaults to the EdgeBase app name)')
558
+ .option('--org-id <id>', 'Neon organization ID for project lookup/creation')
559
+ .option('--database <name>', 'Database name to use')
560
+ .option('--role <name>', 'Database role to use')
561
+ .option('--branch <branch>', 'Neon branch name or ID (defaults to Neon default branch)')
562
+ .option('--api-key <key>', 'Neon API key (default: NEON_API_KEY or neonctl auth)')
563
+ .option('--config-dir <dir>', 'Custom neonctl config directory')
564
+ .option('--pooled', 'Use Neon pooled connection string')
565
+ .action(async (options) => {
566
+ try {
567
+ const result = await runNeonSetup({
568
+ projectDir: resolve('.'),
569
+ ...options,
570
+ });
571
+ if (isJson()) {
572
+ console.log(JSON.stringify({
573
+ status: 'success',
574
+ target: result.target,
575
+ envDevPath: result.envDevPath,
576
+ envReleasePath: result.envReleasePath,
577
+ }));
578
+ return;
579
+ }
580
+ console.log(chalk.green('✓'), `Configured Neon target '${result.target.label}'.`);
581
+ console.log(chalk.dim(` Env key: ${result.target.envKey}`));
582
+ console.log(chalk.dim(` Updated: ${result.envDevPath}`));
583
+ console.log(chalk.dim(` Updated: ${result.envReleasePath}`));
584
+ if (result.target.kind === 'database') {
585
+ console.log(chalk.dim(` Deploy will now provision Hyperdrive for '${result.target.namespace}' using ${result.target.envKey}.`));
586
+ }
587
+ else {
588
+ console.log(chalk.dim(` Deploy will now provision auth Hyperdrive using ${result.target.envKey}.`));
589
+ }
590
+ }
591
+ catch (error) {
592
+ if (isCliStructuredError(error))
593
+ throw error;
594
+ raiseCliError({
595
+ code: 'neon_setup_failed',
596
+ message: error.message,
597
+ });
598
+ }
599
+ });
600
+ //# sourceMappingURL=neon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neon.js","sourceRoot":"","sources":["../../src/commands/neon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
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
+ export declare const pluginsCommand: Command;
9
+ //# sourceMappingURL=plugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/commands/plugins.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmCpC,eAAO,MAAM,cAAc,SAA0D,CAAC"}