@authrim/setup 0.1.63 → 0.1.64

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 (60) hide show
  1. package/dist/__tests__/migrate.test.d.ts +5 -0
  2. package/dist/__tests__/migrate.test.d.ts.map +1 -0
  3. package/dist/__tests__/migrate.test.js +273 -0
  4. package/dist/__tests__/migrate.test.js.map +1 -0
  5. package/dist/__tests__/paths.test.d.ts +2 -0
  6. package/dist/__tests__/paths.test.d.ts.map +1 -0
  7. package/dist/__tests__/paths.test.js +257 -0
  8. package/dist/__tests__/paths.test.js.map +1 -0
  9. package/dist/cli/commands/config.d.ts +1 -0
  10. package/dist/cli/commands/config.d.ts.map +1 -1
  11. package/dist/cli/commands/config.js +41 -7
  12. package/dist/cli/commands/config.js.map +1 -1
  13. package/dist/cli/commands/deploy.d.ts +1 -0
  14. package/dist/cli/commands/deploy.d.ts.map +1 -1
  15. package/dist/cli/commands/deploy.js +181 -19
  16. package/dist/cli/commands/deploy.js.map +1 -1
  17. package/dist/cli/commands/init.d.ts.map +1 -1
  18. package/dist/cli/commands/init.js +267 -82
  19. package/dist/cli/commands/init.js.map +1 -1
  20. package/dist/cli/commands/migrate.d.ts +21 -0
  21. package/dist/cli/commands/migrate.d.ts.map +1 -0
  22. package/dist/cli/commands/migrate.js +166 -0
  23. package/dist/cli/commands/migrate.js.map +1 -0
  24. package/dist/core/admin.d.ts +18 -1
  25. package/dist/core/admin.d.ts.map +1 -1
  26. package/dist/core/admin.js +36 -7
  27. package/dist/core/admin.js.map +1 -1
  28. package/dist/core/config.d.ts +10 -2
  29. package/dist/core/config.d.ts.map +1 -1
  30. package/dist/core/config.js +6 -2
  31. package/dist/core/config.js.map +1 -1
  32. package/dist/core/keys.d.ts +55 -4
  33. package/dist/core/keys.d.ts.map +1 -1
  34. package/dist/core/keys.js +104 -12
  35. package/dist/core/keys.js.map +1 -1
  36. package/dist/core/lock.d.ts +60 -3
  37. package/dist/core/lock.d.ts.map +1 -1
  38. package/dist/core/lock.js +108 -4
  39. package/dist/core/lock.js.map +1 -1
  40. package/dist/core/migrate.d.ts +95 -0
  41. package/dist/core/migrate.d.ts.map +1 -0
  42. package/dist/core/migrate.js +549 -0
  43. package/dist/core/migrate.js.map +1 -0
  44. package/dist/core/paths.d.ts +171 -0
  45. package/dist/core/paths.d.ts.map +1 -0
  46. package/dist/core/paths.js +319 -0
  47. package/dist/core/paths.js.map +1 -0
  48. package/dist/core/wrangler-sync.d.ts +88 -0
  49. package/dist/core/wrangler-sync.d.ts.map +1 -0
  50. package/dist/core/wrangler-sync.js +242 -0
  51. package/dist/core/wrangler-sync.js.map +1 -0
  52. package/dist/index.js +16 -1
  53. package/dist/index.js.map +1 -1
  54. package/dist/web/api.d.ts.map +1 -1
  55. package/dist/web/api.js +102 -28
  56. package/dist/web/api.js.map +1 -1
  57. package/dist/web/ui.d.ts.map +1 -1
  58. package/dist/web/ui.js +831 -273
  59. package/dist/web/ui.js.map +1 -1
  60. package/package.json +1 -1
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Wrangler Configuration Sync Utility
3
+ *
4
+ * Manages synchronization between master wrangler.toml files in .authrim/{env}/wrangler/
5
+ * and the deployment copies in packages/ar-star/wrangler.{env}.toml.
6
+ *
7
+ * Features:
8
+ * - Detects manual modifications to deployment configs
9
+ * - Protects user edits from being overwritten
10
+ * - Maintains portable master copies in environment directory
11
+ */
12
+ import { existsSync } from 'node:fs';
13
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
14
+ import { join, basename } from 'node:path';
15
+ import { getEnvironmentPaths } from './paths.js';
16
+ import { generateWranglerConfig, toToml } from './wrangler.js';
17
+ import { CORE_WORKER_COMPONENTS } from './naming.js';
18
+ // =============================================================================
19
+ // Utility Functions
20
+ // =============================================================================
21
+ /**
22
+ * Normalize TOML content for comparison (remove comments, whitespace variations)
23
+ */
24
+ function normalizeToml(content) {
25
+ return content
26
+ .split('\n')
27
+ .map(line => line.trim())
28
+ .filter(line => line && !line.startsWith('#'))
29
+ .join('\n');
30
+ }
31
+ /**
32
+ * Get the master wrangler.toml path for a component
33
+ */
34
+ export function getMasterWranglerPath(envPaths, component) {
35
+ return join(envPaths.wrangler, `${component}.toml`);
36
+ }
37
+ /**
38
+ * Get the deploy wrangler.toml path for a component
39
+ */
40
+ export function getDeployWranglerPath(packagesDir, component, env) {
41
+ return join(packagesDir, component, `wrangler.${env}.toml`);
42
+ }
43
+ // =============================================================================
44
+ // Status Check
45
+ // =============================================================================
46
+ /**
47
+ * Check the sync status of all wrangler configs
48
+ */
49
+ export async function checkWranglerStatus(options) {
50
+ const { baseDir, env, packagesDir } = options;
51
+ const envPaths = getEnvironmentPaths({ baseDir, env });
52
+ const results = [];
53
+ for (const component of CORE_WORKER_COMPONENTS) {
54
+ const masterPath = getMasterWranglerPath(envPaths, component);
55
+ const deployPath = getDeployWranglerPath(packagesDir, component, env);
56
+ const masterExists = existsSync(masterPath);
57
+ const deployExists = existsSync(deployPath);
58
+ let inSync = true;
59
+ if (masterExists && deployExists) {
60
+ const masterContent = await readFile(masterPath, 'utf-8');
61
+ const deployContent = await readFile(deployPath, 'utf-8');
62
+ inSync = normalizeToml(masterContent) === normalizeToml(deployContent);
63
+ }
64
+ else if (masterExists !== deployExists) {
65
+ inSync = false;
66
+ }
67
+ results.push({
68
+ component,
69
+ masterExists,
70
+ deployExists,
71
+ inSync,
72
+ masterPath,
73
+ deployPath,
74
+ });
75
+ }
76
+ return results;
77
+ }
78
+ // =============================================================================
79
+ // Generate and Save Master Configs
80
+ // =============================================================================
81
+ /**
82
+ * Generate and save master wrangler.toml files to .authrim/{env}/wrangler/
83
+ */
84
+ export async function saveMasterWranglerConfigs(config, resourceIds, options) {
85
+ const { baseDir, env, dryRun, onProgress } = options;
86
+ const envPaths = getEnvironmentPaths({ baseDir, env });
87
+ const files = [];
88
+ const errors = [];
89
+ // Create wrangler directory
90
+ if (!dryRun) {
91
+ await mkdir(envPaths.wrangler, { recursive: true });
92
+ }
93
+ for (const component of CORE_WORKER_COMPONENTS) {
94
+ try {
95
+ const wranglerConfig = generateWranglerConfig(component, config, resourceIds);
96
+ const tomlContent = toToml(wranglerConfig);
97
+ const masterPath = getMasterWranglerPath(envPaths, component);
98
+ if (!dryRun) {
99
+ await writeFile(masterPath, tomlContent, 'utf-8');
100
+ onProgress?.(` Saved ${component}.toml`);
101
+ }
102
+ else {
103
+ onProgress?.(` Would save ${component}.toml`);
104
+ }
105
+ files.push(masterPath);
106
+ }
107
+ catch (error) {
108
+ errors.push(`${component}: ${error instanceof Error ? error.message : String(error)}`);
109
+ }
110
+ }
111
+ return { success: errors.length === 0, files, errors };
112
+ }
113
+ // =============================================================================
114
+ // Sync to Deploy Location
115
+ // =============================================================================
116
+ /**
117
+ * Sync master wrangler configs to deployment locations
118
+ *
119
+ * This copies from .authrim/{env}/wrangler/ to packages/ar-star/wrangler.{env}.toml
120
+ * while detecting and protecting manual edits.
121
+ */
122
+ export async function syncWranglerConfigs(options, onManualEdit) {
123
+ const { baseDir, env, packagesDir, force, dryRun, onProgress } = options;
124
+ const envPaths = getEnvironmentPaths({ baseDir, env });
125
+ const result = {
126
+ success: true,
127
+ synced: [],
128
+ manualEdits: [],
129
+ skipped: [],
130
+ errors: [],
131
+ };
132
+ // Check if master wrangler directory exists
133
+ if (!existsSync(envPaths.wrangler)) {
134
+ result.errors.push('Master wrangler directory not found. Run init first.');
135
+ result.success = false;
136
+ return result;
137
+ }
138
+ for (const component of CORE_WORKER_COMPONENTS) {
139
+ const masterPath = getMasterWranglerPath(envPaths, component);
140
+ const deployPath = getDeployWranglerPath(packagesDir, component, env);
141
+ const componentDir = join(packagesDir, component);
142
+ // Skip if component directory doesn't exist
143
+ if (!existsSync(componentDir)) {
144
+ result.skipped.push(component);
145
+ continue;
146
+ }
147
+ // Skip if master doesn't exist
148
+ if (!existsSync(masterPath)) {
149
+ result.skipped.push(component);
150
+ continue;
151
+ }
152
+ try {
153
+ const masterContent = await readFile(masterPath, 'utf-8');
154
+ // Check if deploy file exists and is different
155
+ if (existsSync(deployPath)) {
156
+ const deployContent = await readFile(deployPath, 'utf-8');
157
+ const masterNormalized = normalizeToml(masterContent);
158
+ const deployNormalized = normalizeToml(deployContent);
159
+ if (masterNormalized === deployNormalized) {
160
+ // Already in sync
161
+ result.synced.push(component);
162
+ continue;
163
+ }
164
+ // Manual edit detected
165
+ result.manualEdits.push(component);
166
+ if (!force && onManualEdit) {
167
+ const action = await onManualEdit(component, masterPath, deployPath);
168
+ switch (action) {
169
+ case 'keep':
170
+ onProgress?.(` ${component}: Keeping manual changes`);
171
+ continue;
172
+ case 'backup':
173
+ if (!dryRun) {
174
+ const backupPath = deployPath + '.backup';
175
+ await writeFile(backupPath, deployContent, 'utf-8');
176
+ onProgress?.(` ${component}: Backed up to ${basename(backupPath)}`);
177
+ }
178
+ // Fall through to overwrite
179
+ break;
180
+ case 'overwrite':
181
+ // Continue to overwrite
182
+ break;
183
+ }
184
+ }
185
+ }
186
+ // Write master content to deploy location
187
+ if (!dryRun) {
188
+ await writeFile(deployPath, masterContent, 'utf-8');
189
+ onProgress?.(` ${component}: Synced`);
190
+ }
191
+ else {
192
+ onProgress?.(` ${component}: Would sync`);
193
+ }
194
+ result.synced.push(component);
195
+ }
196
+ catch (error) {
197
+ result.errors.push(`${component}: ${error instanceof Error ? error.message : String(error)}`);
198
+ result.success = false;
199
+ }
200
+ }
201
+ return result;
202
+ }
203
+ // =============================================================================
204
+ // Backup and Restore
205
+ // =============================================================================
206
+ /**
207
+ * Backup deploy wrangler configs before sync
208
+ */
209
+ export async function backupDeployConfigs(options) {
210
+ const { env, packagesDir, onProgress } = options;
211
+ const backedUp = [];
212
+ for (const component of CORE_WORKER_COMPONENTS) {
213
+ const deployPath = getDeployWranglerPath(packagesDir, component, env);
214
+ if (existsSync(deployPath)) {
215
+ const content = await readFile(deployPath, 'utf-8');
216
+ const backupPath = deployPath + '.backup';
217
+ await writeFile(backupPath, content, 'utf-8');
218
+ backedUp.push(component);
219
+ onProgress?.(` Backed up ${component}/wrangler.${env}.toml`);
220
+ }
221
+ }
222
+ return backedUp;
223
+ }
224
+ /**
225
+ * Restore deploy wrangler configs from backup
226
+ */
227
+ export async function restoreDeployConfigs(options) {
228
+ const { env, packagesDir, onProgress } = options;
229
+ const restored = [];
230
+ for (const component of CORE_WORKER_COMPONENTS) {
231
+ const deployPath = getDeployWranglerPath(packagesDir, component, env);
232
+ const backupPath = deployPath + '.backup';
233
+ if (existsSync(backupPath)) {
234
+ const content = await readFile(backupPath, 'utf-8');
235
+ await writeFile(deployPath, content, 'utf-8');
236
+ restored.push(component);
237
+ onProgress?.(` Restored ${component}/wrangler.${env}.toml`);
238
+ }
239
+ }
240
+ return restored;
241
+ }
242
+ //# sourceMappingURL=wrangler-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrangler-sync.js","sourceRoot":"","sources":["../../src/core/wrangler-sync.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -14,6 +14,7 @@ import { deployCommand, statusCommand } from './cli/commands/deploy.js';
14
14
  import { configCommand } from './cli/commands/config.js';
15
15
  import { deleteCommand } from './cli/commands/delete.js';
16
16
  import { infoCommand } from './cli/commands/info.js';
17
+ import { migrateCommand, migrateStatusCommand } from './cli/commands/migrate.js';
17
18
  // Read version from package.json
18
19
  const require = createRequire(import.meta.url);
19
20
  const pkg = require('../package.json');
@@ -62,7 +63,8 @@ program
62
63
  .option('--show', 'Show current configuration')
63
64
  .option('--validate', 'Validate configuration file')
64
65
  .option('--json', 'Output in JSON format for scripting')
65
- .option('--config <path>', 'Configuration file path', 'authrim-config.json')
66
+ .option('--config <path>', 'Configuration file path')
67
+ .option('--env <name>', 'Environment name (auto-detects config path)')
66
68
  .action(configCommand);
67
69
  program
68
70
  .command('manage')
@@ -181,5 +183,18 @@ program
181
183
  .option('--d1', 'Show only D1 database information')
182
184
  .option('--workers', 'Show only Worker information')
183
185
  .action(infoCommand);
186
+ program
187
+ .command('migrate')
188
+ .description('Migrate from legacy flat file structure to new .authrim/{env}/ structure')
189
+ .option('--env <name>', 'Migrate specific environment only')
190
+ .option('--dry-run', 'Show what would be done without making changes')
191
+ .option('--no-backup', 'Skip backup creation')
192
+ .option('--delete-legacy', 'Delete legacy files after successful migration')
193
+ .option('-y, --yes', 'Skip confirmation prompts')
194
+ .action(migrateCommand);
195
+ program
196
+ .command('migrate-status')
197
+ .description('Show current directory structure status and migration recommendation')
198
+ .action(migrateStatusCommand);
184
199
  program.parse();
185
200
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjF,iCAAiC;AACjC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,qEAAqE,CAAC;KAClF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACpC,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,OAAO,EAAE,gCAAgC,CAAC;KACjD,MAAM,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;KAC7D,MAAM,CAAC,eAAe,EAAE,qCAAqC,CAAC;KAC9D,MAAM,CAAC,cAAc,EAAE,uCAAuC,EAAE,MAAM,CAAC;KACvE,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC;KAC1C,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,EAAE,qBAAqB,CAAC;KAC3E,MAAM,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;KACzD,MAAM,CAAC,WAAW,EAAE,wDAAwD,CAAC;KAC7E,MAAM,CAAC,gBAAgB,EAAE,wBAAwB,CAAC;KAClD,MAAM,CAAC,WAAW,EAAE,wCAAwC,CAAC;KAC7D,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;KAChD,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,EAAE,qBAAqB,CAAC;KAC3E,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC;KAC1C,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,EAAE,qBAAqB,CAAC;KAC3E,MAAM,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,OAAO,CAAC;KACtD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAC3E,MAAM,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KAC9C,MAAM,CAAC,YAAY,EAAE,6BAA6B,CAAC;KACnD,MAAM,CAAC,QAAQ,EAAE,qCAAqC,CAAC;KACvD,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;KACpD,MAAM,CAAC,cAAc,EAAE,6CAA6C,CAAC;KACrE,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,iBAAiB,EAAE,aAAa,EAAE,MAAM,CAAC;KAChD,MAAM,CAAC,cAAc,EAAE,mCAAmC,CAAC;KAC3D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,EAAE,mBAAmB,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAChF,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAE9D,sBAAsB;IACtB,MAAM,UAAU,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC;IAC/B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,mCAAmC;IACnC,MAAM,cAAc,CAAC;QACnB,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAChC,WAAW,EAAE,OAAO,CAAC,OAAO,KAAK,KAAK;QACtC,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,WAAW,CAAC;KAC9D,MAAM,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,kBAAkB,CAAC;KACtE,MAAM,CAAC,gBAAgB,EAAE,6CAA6C,CAAC;KACvE,MAAM,CAAC,SAAS,EAAE,8BAA8B,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,EAAE,cAAc,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAEnF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAE1D,MAAM,OAAO,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;YAClC,SAAS,EAAE,OAAO,CAAC,MAAM;YACzB,UAAU,EAAE,OAAO,CAAC,IAAI;YACxB,MAAM,EAAE,OAAO,CAAC,GAAG;YACnB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;gBAClB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;YACrB,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAElD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAE3D,mBAAmB;QACnB,MAAM,YAAY,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC,CAAC;YACjE,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,cAAc,EAAE,4BAA4B,CAAC;KACpD,MAAM,CAAC,WAAW,EAAE,oCAAoC,CAAC;KACzD,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC;KACtC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC;KACtC,MAAM,CAAC,SAAS,EAAE,oBAAoB,CAAC;KACvC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC;KACpC,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC;KACpC,MAAM,CAAC,OAAO,EAAE,qCAAqC,CAAC;KACtD,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC;KAC1C,MAAM,CAAC,QAAQ,EAAE,0CAA0C,CAAC;KAC5D,MAAM,CAAC,MAAM,EAAE,mCAAmC,CAAC;KACnD,MAAM,CAAC,WAAW,EAAE,8BAA8B,CAAC;KACnD,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,0EAA0E,CAAC;KACvF,MAAM,CAAC,cAAc,EAAE,mCAAmC,CAAC;KAC3D,MAAM,CAAC,WAAW,EAAE,gDAAgD,CAAC;KACrE,MAAM,CAAC,aAAa,EAAE,sBAAsB,CAAC;KAC7C,MAAM,CAAC,iBAAiB,EAAE,gDAAgD,CAAC;KAC3E,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;KAChD,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,sEAAsE,CAAC;KACnF,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/web/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAiD5B;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AA0ED,wBAAgB,eAAe,IAAI,IAAI,CA00BtC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/web/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAwD5B;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AA0ED,wBAAgB,eAAe,IAAI,IAAI,CAs5BtC"}
package/dist/web/api.js CHANGED
@@ -18,6 +18,7 @@ import { isWranglerInstalled, checkAuth, provisionResources, detectEnvironments,
18
18
  import { AuthrimConfigSchema, createDefaultConfig, D1LocationSchema, D1JurisdictionSchema, } from '../core/config.js';
19
19
  import { generateAllSecrets, saveKeysToDirectory, keysExistForEnvironment } from '../core/keys.js';
20
20
  import { createLockFile, saveLockFile, loadLockFile } from '../core/lock.js';
21
+ import { getEnvironmentPaths, resolvePaths, listEnvironments, } from '../core/paths.js';
21
22
  import { generateWranglerConfig, toToml } from '../core/wrangler.js';
22
23
  import { deployAll, uploadSecrets, buildApiPackages, deployPages, } from '../core/deploy.js';
23
24
  import { getEnabledComponents } from '../core/naming.js';
@@ -132,10 +133,42 @@ export function createApiRoutes() {
132
133
  });
133
134
  });
134
135
  // Load existing config (no auth required - read-only)
136
+ // Supports both new (.authrim/{env}/config.json) and legacy (authrim-config.json) structures
135
137
  api.get('/config', async (c) => {
136
- const configPath = 'authrim-config.json';
138
+ const envParam = c.req.query('env');
139
+ const baseDir = process.cwd();
140
+ // Find config file
141
+ let configPath = null;
142
+ let structureType = 'legacy';
143
+ if (envParam) {
144
+ // Specific environment requested
145
+ const resolved = resolvePaths({ baseDir, env: envParam });
146
+ if (resolved.type === 'new') {
147
+ configPath = resolved.paths.config;
148
+ structureType = 'new';
149
+ }
150
+ else {
151
+ configPath = resolved.paths.config;
152
+ structureType = 'legacy';
153
+ }
154
+ }
155
+ else {
156
+ // Auto-detect: try new structure first, then legacy
157
+ const environments = listEnvironments(baseDir);
158
+ if (environments.length > 0) {
159
+ const envPaths = getEnvironmentPaths({ baseDir, env: environments[0] });
160
+ if (existsSync(envPaths.config)) {
161
+ configPath = envPaths.config;
162
+ structureType = 'new';
163
+ }
164
+ }
165
+ if (!configPath || !existsSync(configPath)) {
166
+ configPath = 'authrim-config.json';
167
+ structureType = 'legacy';
168
+ }
169
+ }
137
170
  if (!existsSync(configPath)) {
138
- return c.json({ exists: false, config: null });
171
+ return c.json({ exists: false, config: null, structure: structureType, environments: listEnvironments(baseDir) });
139
172
  }
140
173
  try {
141
174
  const content = await readFile(configPath, 'utf-8');
@@ -147,6 +180,9 @@ export function createApiRoutes() {
147
180
  exists: true,
148
181
  config: rawConfig,
149
182
  valid: false,
183
+ structure: structureType,
184
+ configPath,
185
+ environments: listEnvironments(baseDir),
150
186
  errors: parseResult.error.errors.map((e) => ({
151
187
  path: e.path.join('.'),
152
188
  message: e.message,
@@ -154,7 +190,14 @@ export function createApiRoutes() {
154
190
  });
155
191
  }
156
192
  state.config = parseResult.data;
157
- return c.json({ exists: true, config: parseResult.data, valid: true });
193
+ return c.json({
194
+ exists: true,
195
+ config: parseResult.data,
196
+ valid: true,
197
+ structure: structureType,
198
+ configPath,
199
+ environments: listEnvironments(baseDir),
200
+ });
158
201
  }
159
202
  catch (error) {
160
203
  if (error instanceof SyntaxError) {
@@ -187,14 +230,23 @@ export function createApiRoutes() {
187
230
  }
188
231
  });
189
232
  // Save config (with lock to prevent race conditions)
233
+ // Saves to new structure: .authrim/{env}/config.json
190
234
  api.post('/config', async (c) => {
191
235
  return withLock(async () => {
192
236
  try {
193
237
  const body = await c.req.json();
194
238
  const config = AuthrimConfigSchema.parse(body);
195
- await writeFile('authrim-config.json', JSON.stringify(config, null, 2));
239
+ const baseDir = process.cwd();
240
+ const env = config.environment.prefix;
241
+ // Use new structure for saving
242
+ const envPaths = getEnvironmentPaths({ baseDir, env });
243
+ // Ensure directory exists
244
+ const { mkdir } = await import('node:fs/promises');
245
+ await mkdir(envPaths.root, { recursive: true });
246
+ // Save config
247
+ await writeFile(envPaths.config, JSON.stringify(config, null, 2));
196
248
  state.config = config;
197
- return c.json({ success: true });
249
+ return c.json({ success: true, configPath: envPaths.config, structure: 'new' });
198
250
  }
199
251
  catch (error) {
200
252
  if (error instanceof z.ZodError) {
@@ -262,21 +314,26 @@ export function createApiRoutes() {
262
314
  }
263
315
  });
264
316
  // Generate keys (with lock)
317
+ // Saves to new structure: .authrim/{env}/keys/
265
318
  api.post('/keys/generate', async (c) => {
266
319
  return withLock(async () => {
267
320
  try {
268
321
  const body = await c.req.json();
269
- const { keyId, keysDir = '.keys', env } = body;
322
+ const { keyId, env } = body;
323
+ const baseDir = process.cwd();
270
324
  addProgress('Generating cryptographic keys...');
271
325
  const secrets = generateAllSecrets(keyId);
272
- addProgress(`Saving keys to directory: .keys/${env || 'default'}/`);
273
- await saveKeysToDirectory(secrets, keysDir, env);
326
+ // Use new structure for saving keys
327
+ const envPaths = getEnvironmentPaths({ baseDir, env: env || 'default' });
328
+ addProgress(`Saving keys to directory: ${envPaths.keys}/`);
329
+ await saveKeysToDirectory(secrets, { baseDir, env: env || 'default' });
274
330
  addProgress('Keys generated successfully');
275
331
  // Only return public information
276
332
  return c.json({
277
333
  success: true,
278
334
  keyId: secrets.keyPair.keyId,
279
335
  publicKeyJwk: secrets.keyPair.publicKeyJwk,
336
+ keysPath: envPaths.keys,
280
337
  });
281
338
  }
282
339
  catch (error) {
@@ -311,19 +368,19 @@ export function createApiRoutes() {
311
368
  // Warning but not an error - just log it
312
369
  addProgress('Warning: Resend API key should start with "re_"');
313
370
  }
314
- // Save secrets to keys directory
315
- const keysDir = `.keys/${env}`;
371
+ // Save secrets to keys directory (use new structure)
372
+ const baseDir = process.cwd();
373
+ const envPaths = getEnvironmentPaths({ baseDir, env });
374
+ const keysDir = envPaths.keys;
316
375
  // Ensure directory exists
317
376
  const { mkdir } = await import('node:fs/promises');
318
377
  await mkdir(keysDir, { recursive: true });
319
378
  // Save API key
320
- const apiKeyFile = join(keysDir, 'resend_api_key.txt');
321
- await writeFile(apiKeyFile, apiKey.trim());
322
- addProgress(`Saved ${provider} API key to ${apiKeyFile}`);
379
+ await writeFile(envPaths.keyFiles.resendApiKey, apiKey.trim());
380
+ addProgress(`Saved ${provider} API key to ${envPaths.keyFiles.resendApiKey}`);
323
381
  // Save from address
324
- const fromAddressFile = join(keysDir, 'email_from.txt');
325
- await writeFile(fromAddressFile, fromAddress.trim());
326
- addProgress(`Saved email from address to ${fromAddressFile}`);
382
+ await writeFile(envPaths.keyFiles.emailFrom, fromAddress.trim());
383
+ addProgress(`Saved email from address to ${envPaths.keyFiles.emailFrom}`);
327
384
  // Save from name if provided
328
385
  if (fromName) {
329
386
  const fromNameFile = join(keysDir, 'email_from_name.txt');
@@ -500,19 +557,27 @@ export function createApiRoutes() {
500
557
  addProgress('Packages built successfully');
501
558
  }
502
559
  // Upload secrets first (secrets are read but not stored in state)
503
- // Keys are stored in .keys/{env}/ directory
504
- const keysDir = `.keys/${env}`;
560
+ // Check both new (.authrim/{env}/keys/) and legacy (.keys/{env}/) structures
561
+ const baseDir = process.cwd();
562
+ const resolved = resolvePaths({ baseDir, env });
563
+ let keysDir;
564
+ if (resolved.type === 'new') {
565
+ keysDir = resolved.paths.keys;
566
+ }
567
+ else {
568
+ keysDir = resolved.paths.keys;
569
+ }
505
570
  if (!dryRun && existsSync(keysDir)) {
506
571
  addProgress(`Uploading secrets from ${keysDir}...`);
507
572
  const secrets = {};
508
573
  const secretFiles = [
509
- { file: `${keysDir}/private.pem`, name: 'PRIVATE_KEY_PEM' },
510
- { file: `${keysDir}/rp_token_encryption_key.txt`, name: 'RP_TOKEN_ENCRYPTION_KEY' },
511
- { file: `${keysDir}/admin_api_secret.txt`, name: 'ADMIN_API_SECRET' },
512
- { file: `${keysDir}/key_manager_secret.txt`, name: 'KEY_MANAGER_SECRET' },
574
+ { file: join(keysDir, 'private.pem'), name: 'PRIVATE_KEY_PEM' },
575
+ { file: join(keysDir, 'rp_token_encryption_key.txt'), name: 'RP_TOKEN_ENCRYPTION_KEY' },
576
+ { file: join(keysDir, 'admin_api_secret.txt'), name: 'ADMIN_API_SECRET' },
577
+ { file: join(keysDir, 'key_manager_secret.txt'), name: 'KEY_MANAGER_SECRET' },
513
578
  // Email provider secrets (optional)
514
- { file: `${keysDir}/resend_api_key.txt`, name: 'RESEND_API_KEY' },
515
- { file: `${keysDir}/email_from.txt`, name: 'EMAIL_FROM' },
579
+ { file: join(keysDir, 'resend_api_key.txt'), name: 'RESEND_API_KEY' },
580
+ { file: join(keysDir, 'email_from.txt'), name: 'EMAIL_FROM' },
516
581
  ];
517
582
  for (const { file, name } of secretFiles) {
518
583
  if (existsSync(file)) {
@@ -636,22 +701,31 @@ export function createApiRoutes() {
636
701
  });
637
702
  });
638
703
  // Complete initial admin setup (store setup token in KV)
704
+ // Supports both new (.authrim/{env}/keys/) and legacy (.keys/{env}/) structures
639
705
  api.post('/admin/setup', async (c) => {
640
706
  return withLock(async () => {
641
707
  try {
642
708
  const body = await c.req.json();
643
- const { env, baseUrl, keysDir = '.keys' } = body;
644
- addProgress(`Admin setup request: env=${env}, baseUrl=${baseUrl}, keysDir=${keysDir}`);
709
+ const { env, baseUrl } = body;
710
+ const baseDir = process.cwd();
711
+ // Determine structure type
712
+ const resolved = resolvePaths({ baseDir, env });
713
+ const isLegacy = resolved.type === 'legacy';
714
+ const tokenPath = isLegacy
715
+ ? resolved.paths.keyFiles.setupToken
716
+ : resolved.paths.keyFiles.setupToken;
717
+ addProgress(`Admin setup request: env=${env}, baseUrl=${baseUrl}, structure=${resolved.type}`);
645
718
  if (!env || !baseUrl) {
646
719
  addProgress('Error: env and baseUrl are required');
647
720
  return c.json({ success: false, error: 'env and baseUrl are required' }, 400);
648
721
  }
649
722
  addProgress('Setting up initial admin...');
650
- addProgress(`Looking for setup token at: ${keysDir}/${env}/setup_token.txt`);
723
+ addProgress(`Looking for setup token at: ${tokenPath}`);
651
724
  const result = await completeInitialSetup({
652
725
  env,
653
726
  baseUrl,
654
- keysDir,
727
+ baseDir,
728
+ legacy: isLegacy,
655
729
  onProgress: addProgress,
656
730
  });
657
731
  addProgress(`completeInitialSetup result: ${JSON.stringify(result)}`);