@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.
- package/dist/__tests__/migrate.test.d.ts +5 -0
- package/dist/__tests__/migrate.test.d.ts.map +1 -0
- package/dist/__tests__/migrate.test.js +273 -0
- package/dist/__tests__/migrate.test.js.map +1 -0
- package/dist/__tests__/paths.test.d.ts +2 -0
- package/dist/__tests__/paths.test.d.ts.map +1 -0
- package/dist/__tests__/paths.test.js +257 -0
- package/dist/__tests__/paths.test.js.map +1 -0
- package/dist/cli/commands/config.d.ts +1 -0
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +41 -7
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/deploy.d.ts +1 -0
- package/dist/cli/commands/deploy.d.ts.map +1 -1
- package/dist/cli/commands/deploy.js +181 -19
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +267 -82
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/migrate.d.ts +21 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +166 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/core/admin.d.ts +18 -1
- package/dist/core/admin.d.ts.map +1 -1
- package/dist/core/admin.js +36 -7
- package/dist/core/admin.js.map +1 -1
- package/dist/core/config.d.ts +10 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +6 -2
- package/dist/core/config.js.map +1 -1
- package/dist/core/keys.d.ts +55 -4
- package/dist/core/keys.d.ts.map +1 -1
- package/dist/core/keys.js +104 -12
- package/dist/core/keys.js.map +1 -1
- package/dist/core/lock.d.ts +60 -3
- package/dist/core/lock.d.ts.map +1 -1
- package/dist/core/lock.js +108 -4
- package/dist/core/lock.js.map +1 -1
- package/dist/core/migrate.d.ts +95 -0
- package/dist/core/migrate.d.ts.map +1 -0
- package/dist/core/migrate.js +549 -0
- package/dist/core/migrate.js.map +1 -0
- package/dist/core/paths.d.ts +171 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +319 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/wrangler-sync.d.ts +88 -0
- package/dist/core/wrangler-sync.d.ts.map +1 -0
- package/dist/core/wrangler-sync.js +242 -0
- package/dist/core/wrangler-sync.js.map +1 -0
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/web/api.d.ts.map +1 -1
- package/dist/web/api.js +102 -28
- package/dist/web/api.js.map +1 -1
- package/dist/web/ui.d.ts.map +1 -1
- package/dist/web/ui.js +831 -273
- package/dist/web/ui.js.map +1 -1
- 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'
|
|
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":";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;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/web/api.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
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({
|
|
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
|
-
|
|
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,
|
|
322
|
+
const { keyId, env } = body;
|
|
323
|
+
const baseDir = process.cwd();
|
|
270
324
|
addProgress('Generating cryptographic keys...');
|
|
271
325
|
const secrets = generateAllSecrets(keyId);
|
|
272
|
-
|
|
273
|
-
|
|
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
|
|
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
|
-
|
|
321
|
-
|
|
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
|
-
|
|
325
|
-
|
|
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
|
-
//
|
|
504
|
-
const
|
|
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:
|
|
510
|
-
{ file:
|
|
511
|
-
{ file:
|
|
512
|
-
{ file:
|
|
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:
|
|
515
|
-
{ file:
|
|
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
|
|
644
|
-
|
|
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: ${
|
|
723
|
+
addProgress(`Looking for setup token at: ${tokenPath}`);
|
|
651
724
|
const result = await completeInitialSetup({
|
|
652
725
|
env,
|
|
653
726
|
baseUrl,
|
|
654
|
-
|
|
727
|
+
baseDir,
|
|
728
|
+
legacy: isLegacy,
|
|
655
729
|
onProgress: addProgress,
|
|
656
730
|
});
|
|
657
731
|
addProgress(`completeInitialSetup result: ${JSON.stringify(result)}`);
|