@flexsiteio/cli 1.0.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 (50) hide show
  1. package/.github/workflows/publish.yml +28 -0
  2. package/.nvmrc +1 -0
  3. package/README.md +166 -0
  4. package/db_727aa8c7-dev_xYhn06gTRFNmPbW3uOVKlQ.sql.gz +0 -0
  5. package/db_faef57dd-dev_3wnRGEk6KwkI_wgvygWf4g.sql.gz +0 -0
  6. package/dist/bin/flexsite.d.ts +7 -0
  7. package/dist/bin/flexsite.d.ts.map +1 -0
  8. package/dist/bin/flexsite.js +31 -0
  9. package/dist/bin/flexsite.js.map +1 -0
  10. package/dist/commands/auth.d.ts +6 -0
  11. package/dist/commands/auth.d.ts.map +1 -0
  12. package/dist/commands/auth.js +325 -0
  13. package/dist/commands/auth.js.map +1 -0
  14. package/dist/commands/config.d.ts +6 -0
  15. package/dist/commands/config.d.ts.map +1 -0
  16. package/dist/commands/config.js +56 -0
  17. package/dist/commands/config.js.map +1 -0
  18. package/dist/commands/db.d.ts +6 -0
  19. package/dist/commands/db.d.ts.map +1 -0
  20. package/dist/commands/db.js +274 -0
  21. package/dist/commands/db.js.map +1 -0
  22. package/dist/commands/files.d.ts +6 -0
  23. package/dist/commands/files.d.ts.map +1 -0
  24. package/dist/commands/files.js +272 -0
  25. package/dist/commands/files.js.map +1 -0
  26. package/dist/commands/sync.d.ts +7 -0
  27. package/dist/commands/sync.d.ts.map +1 -0
  28. package/dist/commands/sync.js +202 -0
  29. package/dist/commands/sync.js.map +1 -0
  30. package/dist/index.d.ts +11 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +27 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/lib/api.d.ts +47 -0
  35. package/dist/lib/api.d.ts.map +1 -0
  36. package/dist/lib/api.js +203 -0
  37. package/dist/lib/api.js.map +1 -0
  38. package/dist/lib/config.d.ts +54 -0
  39. package/dist/lib/config.d.ts.map +1 -0
  40. package/dist/lib/config.js +150 -0
  41. package/dist/lib/config.js.map +1 -0
  42. package/dist/lib/detector.d.ts +26 -0
  43. package/dist/lib/detector.d.ts.map +1 -0
  44. package/dist/lib/detector.js +305 -0
  45. package/dist/lib/detector.js.map +1 -0
  46. package/dist/types.d.ts +58 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +6 -0
  49. package/dist/types.js.map +1 -0
  50. package/package.json +50 -0
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ /**
3
+ * Sync command for FlexSite CLI.
4
+ * Combines database and files sync in one operation.
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.syncCommand = void 0;
11
+ const commander_1 = require("commander");
12
+ const chalk_1 = __importDefault(require("chalk"));
13
+ const inquirer_1 = __importDefault(require("inquirer"));
14
+ const ora_1 = __importDefault(require("ora"));
15
+ const fs_1 = __importDefault(require("fs"));
16
+ const path_1 = __importDefault(require("path"));
17
+ const api_js_1 = require("../lib/api.js");
18
+ const config_js_1 = require("../lib/config.js");
19
+ const detector_js_1 = require("../lib/detector.js");
20
+ exports.syncCommand = new commander_1.Command('sync')
21
+ .description('Sync database and files from remote environment')
22
+ .option('-e, --env <envId>', 'Environment ID')
23
+ .option('-p, --project <projectId>', 'Project ID')
24
+ .option('--db-only', 'Only sync database')
25
+ .option('--files-only', 'Only sync files')
26
+ .option('--no-import', 'Download only, do not import')
27
+ .action(async (options) => {
28
+ try {
29
+ let environmentId = options.env;
30
+ let projectId = options.project;
31
+ // Show which organization we're using
32
+ const tokenConfig = (0, config_js_1.getToken)();
33
+ if (tokenConfig) {
34
+ console.log(chalk_1.default.dim(`Organization: ${tokenConfig.organizationName || tokenConfig.organizationId}`));
35
+ }
36
+ // Detect local environment first
37
+ const localEnv = (0, detector_js_1.detectLocalEnvironment)();
38
+ if (!localEnv) {
39
+ console.log(chalk_1.default.yellow('No local environment detected (Lando/DDEV).'));
40
+ console.log('Please run this command from a project directory with Lando or DDEV configured.');
41
+ console.log('\nAlternatively, use:');
42
+ console.log(chalk_1.default.cyan(' flexsite db pull --no-import'));
43
+ console.log(chalk_1.default.cyan(' flexsite files pull --no-import'));
44
+ process.exit(1);
45
+ }
46
+ console.log(chalk_1.default.cyan(`\nDetected ${localEnv.toUpperCase()} environment.\n`));
47
+ // If no environment specified, prompt for selection
48
+ if (!environmentId) {
49
+ // Always prompt for project selection (don't use cached values)
50
+ if (!projectId) {
51
+ const projects = await (0, api_js_1.listProjects)();
52
+ if (projects.length === 0) {
53
+ console.error(chalk_1.default.red('No projects found.'));
54
+ process.exit(1);
55
+ }
56
+ if (projects.length === 1) {
57
+ // Only one project, use it automatically
58
+ projectId = projects[0].id;
59
+ console.log(chalk_1.default.dim(`Project: ${projects[0].title}`));
60
+ }
61
+ else {
62
+ const { selectedProject } = await inquirer_1.default.prompt([
63
+ {
64
+ type: 'list',
65
+ name: 'selectedProject',
66
+ message: 'Select project:',
67
+ choices: projects.map(p => ({
68
+ name: `${p.title} (${p.container || 'unknown'})`,
69
+ value: p.id
70
+ }))
71
+ }
72
+ ]);
73
+ projectId = selectedProject;
74
+ }
75
+ }
76
+ // Get environment - always prompt
77
+ const environments = await (0, api_js_1.listEnvironments)(projectId);
78
+ if (environments.length === 0) {
79
+ console.error(chalk_1.default.red('No environments found for this project.'));
80
+ process.exit(1);
81
+ }
82
+ if (environments.length === 1) {
83
+ // Only one environment, use it automatically
84
+ environmentId = environments[0].id;
85
+ console.log(chalk_1.default.dim(`Environment: ${environments[0].title}`));
86
+ }
87
+ else {
88
+ const { selectedEnv } = await inquirer_1.default.prompt([
89
+ {
90
+ type: 'list',
91
+ name: 'selectedEnv',
92
+ message: 'Select environment to sync from:',
93
+ choices: environments.map(e => ({
94
+ name: `${e.title} (${e.branch || 'main'}) - ${e.status || 'unknown'}`,
95
+ value: e.id
96
+ }))
97
+ }
98
+ ]);
99
+ environmentId = selectedEnv;
100
+ }
101
+ }
102
+ const syncDb = !options.filesOnly;
103
+ const syncFiles = !options.dbOnly;
104
+ // Sync database
105
+ if (syncDb) {
106
+ console.log(chalk_1.default.cyan('\n--- Database Sync ---'));
107
+ const dbSpinner = (0, ora_1.default)('Fetching latest database backup...').start();
108
+ try {
109
+ const backup = await (0, api_js_1.getLatestDatabaseBackup)(environmentId);
110
+ if (!backup || !backup.url) {
111
+ dbSpinner.fail('No database backup found');
112
+ console.log(chalk_1.default.yellow(' No database backups available for this environment.'));
113
+ console.log(chalk_1.default.cyan(' Create a backup in the FlexSite dashboard:'));
114
+ console.log(` https://flexsite.io/dashboard/project/${projectId}/environment/${environmentId}/backups`);
115
+ }
116
+ else {
117
+ dbSpinner.succeed(`Found backup: ${backup.fileName}`);
118
+ // Download
119
+ const downloadSpinner = (0, ora_1.default)('Downloading database...').start();
120
+ const dbPath = path_1.default.join(process.cwd(), backup.fileName);
121
+ const data = await (0, api_js_1.downloadFile)(backup.url, (progress) => {
122
+ downloadSpinner.text = `Downloading database... ${progress}%`;
123
+ });
124
+ fs_1.default.writeFileSync(dbPath, data);
125
+ downloadSpinner.succeed(`Downloaded to: ${dbPath}`);
126
+ // Import
127
+ if (options.import !== false) {
128
+ const importSpinner = (0, ora_1.default)('Importing database...').start();
129
+ await (0, detector_js_1.importDatabase)(dbPath, localEnv);
130
+ importSpinner.succeed('Database imported successfully!');
131
+ // Clean up downloaded file
132
+ fs_1.default.unlinkSync(dbPath);
133
+ }
134
+ }
135
+ }
136
+ catch (error) {
137
+ dbSpinner.fail('Database sync failed');
138
+ if (error.message?.includes('No backup') || error.message?.includes('not found')) {
139
+ console.log(chalk_1.default.yellow(' No database backups available for this environment.'));
140
+ console.log(chalk_1.default.cyan(' Create a backup in the FlexSite dashboard:'));
141
+ console.log(` https://flexsite.io/dashboard/project/${projectId}/environment/${environmentId}/backups`);
142
+ }
143
+ else if (error instanceof Error) {
144
+ console.error(chalk_1.default.red(` Error: ${error.message}`));
145
+ }
146
+ // Continue with files sync
147
+ }
148
+ }
149
+ // Sync files
150
+ if (syncFiles) {
151
+ console.log(chalk_1.default.cyan('\n--- Files Sync ---'));
152
+ const filesSpinner = (0, ora_1.default)('Fetching latest files backup...').start();
153
+ try {
154
+ const backup = await (0, api_js_1.getLatestFilesBackup)(environmentId);
155
+ if (!backup || !backup.url) {
156
+ filesSpinner.fail('No files backup found');
157
+ console.log(chalk_1.default.yellow(' No files backups available for this environment.'));
158
+ console.log(chalk_1.default.cyan(' Create a backup in the FlexSite dashboard:'));
159
+ console.log(` https://flexsite.io/dashboard/project/${projectId}/environment/${environmentId}/backups`);
160
+ }
161
+ else {
162
+ filesSpinner.succeed(`Found backup: ${backup.fileName}`);
163
+ // Download
164
+ const downloadSpinner = (0, ora_1.default)('Downloading files...').start();
165
+ const filesPath = path_1.default.join(process.cwd(), backup.fileName);
166
+ const data = await (0, api_js_1.downloadFile)(backup.url, (progress) => {
167
+ downloadSpinner.text = `Downloading files... ${progress}%`;
168
+ });
169
+ fs_1.default.writeFileSync(filesPath, data);
170
+ downloadSpinner.succeed(`Downloaded to: ${filesPath}`);
171
+ // Import
172
+ if (options.import !== false) {
173
+ const importSpinner = (0, ora_1.default)('Extracting files...').start();
174
+ await (0, detector_js_1.importFiles)(filesPath, localEnv);
175
+ importSpinner.succeed('Files extracted successfully!');
176
+ // Clean up downloaded file
177
+ fs_1.default.unlinkSync(filesPath);
178
+ }
179
+ }
180
+ }
181
+ catch (error) {
182
+ filesSpinner.fail('Files sync failed');
183
+ if (error.message?.includes('No backup') || error.message?.includes('not found')) {
184
+ console.log(chalk_1.default.yellow(' No files backups available for this environment.'));
185
+ console.log(chalk_1.default.cyan(' Create a backup in the FlexSite dashboard:'));
186
+ console.log(` https://flexsite.io/dashboard/project/${projectId}/environment/${environmentId}/backups`);
187
+ }
188
+ else if (error instanceof Error) {
189
+ console.error(chalk_1.default.red(` Error: ${error.message}`));
190
+ }
191
+ }
192
+ }
193
+ console.log(chalk_1.default.green('\n✓ Sync complete!'));
194
+ }
195
+ catch (error) {
196
+ if (error instanceof Error) {
197
+ console.error(chalk_1.default.red(`\nError: ${error.message}`));
198
+ }
199
+ process.exit(1);
200
+ }
201
+ });
202
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * FlexSite CLI
3
+ *
4
+ * Command-line tool for managing FlexSite projects.
5
+ * Supports database and files sync with Lando and DDEV local environments.
6
+ */
7
+ export * from './types.js';
8
+ export * from './lib/api.js';
9
+ export * from './lib/config.js';
10
+ export * from './lib/detector.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ /**
3
+ * FlexSite CLI
4
+ *
5
+ * Command-line tool for managing FlexSite projects.
6
+ * Supports database and files sync with Lando and DDEV local environments.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
20
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ __exportStar(require("./types.js"), exports);
24
+ __exportStar(require("./lib/api.js"), exports);
25
+ __exportStar(require("./lib/config.js"), exports);
26
+ __exportStar(require("./lib/detector.js"), exports);
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;AAEH,6CAA2B;AAC3B,+CAA6B;AAC7B,kDAAgC;AAChC,oDAAkC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * API client for FlexSite CLI.
3
+ * Handles all HTTP requests to the FlexSite API.
4
+ */
5
+ import { type AxiosInstance } from 'axios';
6
+ import type { AuthVerifyResponse, Project, Environment, Backup, BackupDownload, TokenConfig } from '../types.js';
7
+ /**
8
+ * Get current token info being used
9
+ */
10
+ export declare function getCurrentTokenInfo(): TokenConfig | null;
11
+ /**
12
+ * Create an authenticated API client
13
+ */
14
+ export declare function createApiClient(token?: string): AxiosInstance;
15
+ /**
16
+ * Verify authentication token
17
+ */
18
+ export declare function verifyAuth(token?: string): Promise<AuthVerifyResponse>;
19
+ /**
20
+ * List projects for the authenticated organization
21
+ */
22
+ export declare function listProjects(): Promise<Project[]>;
23
+ /**
24
+ * List environments for a project
25
+ */
26
+ export declare function listEnvironments(projectId: string): Promise<Environment[]>;
27
+ /**
28
+ * Get latest database backup download URL
29
+ */
30
+ export declare function getLatestDatabaseBackup(environmentId: string): Promise<BackupDownload>;
31
+ /**
32
+ * List database backups for an environment
33
+ */
34
+ export declare function listDatabaseBackups(environmentId: string): Promise<Backup[]>;
35
+ /**
36
+ * Get latest files backup download URL
37
+ */
38
+ export declare function getLatestFilesBackup(environmentId: string): Promise<BackupDownload>;
39
+ /**
40
+ * List files backups for an environment
41
+ */
42
+ export declare function listFilesBackups(environmentId: string): Promise<Backup[]>;
43
+ /**
44
+ * Download a file from a presigned URL
45
+ */
46
+ export declare function downloadFile(url: string, onProgress?: (progress: number) => void): Promise<Buffer>;
47
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAc,EAAc,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE9D,OAAO,KAAK,EACV,kBAAkB,EAClB,OAAO,EACP,WAAW,EACX,MAAM,EACN,cAAc,EACd,WAAW,EACZ,MAAM,aAAa,CAAC;AASrB;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,WAAW,GAAG,IAAI,CAExD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAoB7D;AA6CD;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAQ5E;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAQvD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAUhF;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAQ5F;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQlF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAQzF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQ/E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACtC,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ /**
3
+ * API client for FlexSite CLI.
4
+ * Handles all HTTP requests to the FlexSite API.
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.getCurrentTokenInfo = getCurrentTokenInfo;
11
+ exports.createApiClient = createApiClient;
12
+ exports.verifyAuth = verifyAuth;
13
+ exports.listProjects = listProjects;
14
+ exports.listEnvironments = listEnvironments;
15
+ exports.getLatestDatabaseBackup = getLatestDatabaseBackup;
16
+ exports.listDatabaseBackups = listDatabaseBackups;
17
+ exports.getLatestFilesBackup = getLatestFilesBackup;
18
+ exports.listFilesBackups = listFilesBackups;
19
+ exports.downloadFile = downloadFile;
20
+ const axios_1 = __importDefault(require("axios"));
21
+ const config_js_1 = require("./config.js");
22
+ // API base URL
23
+ // Note: The custom domain maps root to v1 stage, so no /v1 suffix needed
24
+ const API_BASE_URL = process.env.FLEXSITE_API_URL || 'https://cli-api.flexsite.io';
25
+ // Store current token info for error messages
26
+ let currentTokenInfo = null;
27
+ /**
28
+ * Get current token info being used
29
+ */
30
+ function getCurrentTokenInfo() {
31
+ return currentTokenInfo;
32
+ }
33
+ /**
34
+ * Create an authenticated API client
35
+ */
36
+ function createApiClient(token) {
37
+ const tokenConfig = token ? null : (0, config_js_1.getToken)();
38
+ const authToken = token || tokenConfig?.token;
39
+ // Store for error messages
40
+ currentTokenInfo = tokenConfig;
41
+ if (!authToken) {
42
+ throw new Error('No authentication token found. Run "flexsite auth login" first.');
43
+ }
44
+ return axios_1.default.create({
45
+ baseURL: API_BASE_URL,
46
+ timeout: 30000,
47
+ headers: {
48
+ 'Authorization': `Bearer ${authToken}`,
49
+ 'Content-Type': 'application/json',
50
+ 'User-Agent': 'flexsite-cli/1.0.0'
51
+ }
52
+ });
53
+ }
54
+ /**
55
+ * Handle API errors consistently
56
+ */
57
+ function handleError(error) {
58
+ if (axios_1.default.isAxiosError(error)) {
59
+ const axiosError = error;
60
+ if (axiosError.response) {
61
+ const status = axiosError.response.status;
62
+ const data = axiosError.response.data;
63
+ const message = data?.error || data?.message || axiosError.message;
64
+ // Get organization info for better error messages
65
+ const orgInfo = currentTokenInfo
66
+ ? `(using token for: ${currentTokenInfo.organizationName || currentTokenInfo.organizationId})`
67
+ : '';
68
+ switch (status) {
69
+ case 401:
70
+ throw new Error(`Authentication failed ${orgInfo}.\n` +
71
+ `Your token may have expired or been revoked.\n` +
72
+ `Run "flexsite auth status" to check your tokens, or "flexsite auth login" to add a new one.`);
73
+ case 403:
74
+ throw new Error(`Access denied ${orgInfo}.\n` +
75
+ `Your token may have been revoked or lacks the required permissions.\n` +
76
+ `Run "flexsite auth status" to verify your token is valid.`);
77
+ case 404:
78
+ throw new Error(`Not found: ${message}`);
79
+ default:
80
+ throw new Error(`API error (${status}): ${message}`);
81
+ }
82
+ }
83
+ else if (axiosError.request) {
84
+ throw new Error('Network error: Unable to reach the FlexSite API. Check your internet connection.');
85
+ }
86
+ }
87
+ throw error;
88
+ }
89
+ /**
90
+ * Verify authentication token
91
+ */
92
+ async function verifyAuth(token) {
93
+ try {
94
+ const client = createApiClient(token);
95
+ const response = await client.get('/cli/auth/verify');
96
+ return response.data;
97
+ }
98
+ catch (error) {
99
+ handleError(error);
100
+ }
101
+ }
102
+ /**
103
+ * List projects for the authenticated organization
104
+ */
105
+ async function listProjects() {
106
+ try {
107
+ const client = createApiClient();
108
+ const response = await client.get('/cli/projects');
109
+ return response.data.projects;
110
+ }
111
+ catch (error) {
112
+ handleError(error);
113
+ }
114
+ }
115
+ /**
116
+ * List environments for a project
117
+ */
118
+ async function listEnvironments(projectId) {
119
+ try {
120
+ const client = createApiClient();
121
+ const response = await client.get('/cli/environments', {
122
+ params: { projectId }
123
+ });
124
+ return response.data.environments;
125
+ }
126
+ catch (error) {
127
+ handleError(error);
128
+ }
129
+ }
130
+ /**
131
+ * Get latest database backup download URL
132
+ */
133
+ async function getLatestDatabaseBackup(environmentId) {
134
+ try {
135
+ const client = createApiClient();
136
+ const response = await client.get(`/cli/environments/${environmentId}/database/latest`);
137
+ return response.data;
138
+ }
139
+ catch (error) {
140
+ handleError(error);
141
+ }
142
+ }
143
+ /**
144
+ * List database backups for an environment
145
+ */
146
+ async function listDatabaseBackups(environmentId) {
147
+ try {
148
+ const client = createApiClient();
149
+ const response = await client.get(`/cli/environments/${environmentId}/database`);
150
+ return response.data.backups;
151
+ }
152
+ catch (error) {
153
+ handleError(error);
154
+ }
155
+ }
156
+ /**
157
+ * Get latest files backup download URL
158
+ */
159
+ async function getLatestFilesBackup(environmentId) {
160
+ try {
161
+ const client = createApiClient();
162
+ const response = await client.get(`/cli/environments/${environmentId}/files/latest`);
163
+ return response.data;
164
+ }
165
+ catch (error) {
166
+ handleError(error);
167
+ }
168
+ }
169
+ /**
170
+ * List files backups for an environment
171
+ */
172
+ async function listFilesBackups(environmentId) {
173
+ try {
174
+ const client = createApiClient();
175
+ const response = await client.get(`/cli/environments/${environmentId}/files`);
176
+ return response.data.backups;
177
+ }
178
+ catch (error) {
179
+ handleError(error);
180
+ }
181
+ }
182
+ /**
183
+ * Download a file from a presigned URL
184
+ */
185
+ async function downloadFile(url, onProgress) {
186
+ try {
187
+ const response = await axios_1.default.get(url, {
188
+ responseType: 'arraybuffer',
189
+ timeout: 300000, // 5 minutes for large files
190
+ onDownloadProgress: (progressEvent) => {
191
+ if (onProgress && progressEvent.total) {
192
+ const progress = Math.round((progressEvent.loaded * 100) / progressEvent.total);
193
+ onProgress(progress);
194
+ }
195
+ }
196
+ });
197
+ return Buffer.from(response.data);
198
+ }
199
+ catch (error) {
200
+ handleError(error);
201
+ }
202
+ }
203
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAuBH,kDAEC;AAKD,0CAoBC;AAgDD,gCAQC;AAKD,oCAQC;AAKD,4CAUC;AAKD,0DAQC;AAKD,kDAQC;AAKD,oDAQC;AAKD,4CAQC;AAKD,oCAoBC;AAjND,kDAA8D;AAC9D,2CAAoD;AAUpD,eAAe;AACf,yEAAyE;AACzE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,6BAA6B,CAAC;AAEnF,8CAA8C;AAC9C,IAAI,gBAAgB,GAAuB,IAAI,CAAC;AAEhD;;GAEG;AACH,SAAgB,mBAAmB;IACjC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,KAAc;IAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,oBAAQ,GAAE,CAAC;IAC9C,MAAM,SAAS,GAAG,KAAK,IAAI,WAAW,EAAE,KAAK,CAAC;IAE9C,2BAA2B;IAC3B,gBAAgB,GAAG,WAAW,CAAC;IAE/B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IAED,OAAO,eAAK,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,SAAS,EAAE;YACtC,cAAc,EAAE,kBAAkB;YAClC,YAAY,EAAE,oBAAoB;SACnC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,KAAyD,CAAC;QAE7E,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC;YAEnE,kDAAkD;YAClD,MAAM,OAAO,GAAG,gBAAgB;gBAC9B,CAAC,CAAC,qBAAqB,gBAAgB,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,cAAc,GAAG;gBAC9F,CAAC,CAAC,EAAE,CAAC;YAEP,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,GAAG;oBACN,MAAM,IAAI,KAAK,CACb,yBAAyB,OAAO,KAAK;wBACrC,gDAAgD;wBAChD,6FAA6F,CAC9F,CAAC;gBACJ,KAAK,GAAG;oBACN,MAAM,IAAI,KAAK,CACb,iBAAiB,OAAO,KAAK;wBAC7B,uEAAuE;wBACvE,2DAA2D,CAC5D,CAAC;gBACJ,KAAK,GAAG;oBACN,MAAM,IAAI,KAAK,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;gBAC3C;oBACE,MAAM,IAAI,KAAK,CAAC,cAAc,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;aAAM,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;IAED,MAAM,KAAK,CAAC;AACd,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,KAAc;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAqB,kBAAkB,CAAC,CAAC;QAC1E,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAA0B,eAAe,CAAC,CAAC;QAC5E,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IACtD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAkC,mBAAmB,EAAE;YACtF,MAAM,EAAE,EAAE,SAAS,EAAE;SACtB,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,uBAAuB,CAAC,aAAqB;IACjE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAiB,qBAAqB,aAAa,kBAAkB,CAAC,CAAC;QACxG,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,mBAAmB,CAAC,aAAqB;IAC7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAwB,qBAAqB,aAAa,WAAW,CAAC,CAAC;QACxG,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,oBAAoB,CAAC,aAAqB;IAC9D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAiB,qBAAqB,aAAa,eAAe,CAAC,CAAC;QACrG,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CAAC,aAAqB;IAC1D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAwB,qBAAqB,aAAa,QAAQ,CAAC,CAAC;QACrG,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,YAAY,CAChC,GAAW,EACX,UAAuC;IAEvC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YACpC,YAAY,EAAE,aAAa;YAC3B,OAAO,EAAE,MAAM,EAAE,4BAA4B;YAC7C,kBAAkB,EAAE,CAAC,aAAa,EAAE,EAAE;gBACpC,IAAI,UAAU,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;oBACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;oBAChF,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Configuration management for FlexSite CLI.
3
+ * Stores tokens and preferences in ~/.flexsite/config.json
4
+ */
5
+ import type { Config, TokenConfig } from '../types.js';
6
+ /**
7
+ * Get the entire configuration
8
+ */
9
+ export declare function getConfig(): Config;
10
+ /**
11
+ * Save a token for an organization
12
+ */
13
+ export declare function saveToken(orgPrefix: string, tokenConfig: TokenConfig): void;
14
+ /**
15
+ * Get token for an organization (by prefix or full ID)
16
+ */
17
+ export declare function getToken(orgId?: string): TokenConfig | null;
18
+ /**
19
+ * Remove a token
20
+ */
21
+ export declare function removeToken(orgId: string): boolean;
22
+ /**
23
+ * Get all stored tokens
24
+ */
25
+ export declare function getAllTokens(): Record<string, TokenConfig>;
26
+ /**
27
+ * Set default organization
28
+ */
29
+ export declare function setDefaultOrganization(orgId: string): void;
30
+ /**
31
+ * Set default project
32
+ */
33
+ export declare function setDefaultProject(projectId: string): void;
34
+ /**
35
+ * Set default environment
36
+ */
37
+ export declare function setDefaultEnvironment(envId: string): void;
38
+ /**
39
+ * Get defaults
40
+ */
41
+ export declare function getDefaults(): Config['defaults'];
42
+ /**
43
+ * Clear all configuration
44
+ */
45
+ export declare function clearConfig(): void;
46
+ /**
47
+ * Clear only defaults (keep tokens)
48
+ */
49
+ export declare function clearDefaults(): void;
50
+ /**
51
+ * Get the config file path
52
+ */
53
+ export declare function getConfigPath(): string;
54
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAevD;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,CAS3E;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CA+B3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAoBlD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAE1D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC,CAEhD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}