@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.
- package/.github/workflows/publish.yml +28 -0
- package/.nvmrc +1 -0
- package/README.md +166 -0
- package/db_727aa8c7-dev_xYhn06gTRFNmPbW3uOVKlQ.sql.gz +0 -0
- package/db_faef57dd-dev_3wnRGEk6KwkI_wgvygWf4g.sql.gz +0 -0
- package/dist/bin/flexsite.d.ts +7 -0
- package/dist/bin/flexsite.d.ts.map +1 -0
- package/dist/bin/flexsite.js +31 -0
- package/dist/bin/flexsite.js.map +1 -0
- package/dist/commands/auth.d.ts +6 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +325 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config.d.ts +6 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +56 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/db.d.ts +6 -0
- package/dist/commands/db.d.ts.map +1 -0
- package/dist/commands/db.js +274 -0
- package/dist/commands/db.js.map +1 -0
- package/dist/commands/files.d.ts +6 -0
- package/dist/commands/files.d.ts.map +1 -0
- package/dist/commands/files.js +272 -0
- package/dist/commands/files.js.map +1 -0
- package/dist/commands/sync.d.ts +7 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +202 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +47 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +203 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +54 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +150 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/detector.d.ts +26 -0
- package/dist/lib/detector.d.ts.map +1 -0
- package/dist/lib/detector.js +305 -0
- package/dist/lib/detector.js.map +1 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Publish to npm
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [created]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
build:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v4
|
|
12
|
+
|
|
13
|
+
- name: Setup Node.js
|
|
14
|
+
uses: actions/setup-node@v4
|
|
15
|
+
with:
|
|
16
|
+
node-version: '20'
|
|
17
|
+
registry-url: 'https://registry.npmjs.org'
|
|
18
|
+
|
|
19
|
+
- name: Install dependencies
|
|
20
|
+
run: npm ci
|
|
21
|
+
|
|
22
|
+
- name: Build
|
|
23
|
+
run: npm run build
|
|
24
|
+
|
|
25
|
+
- name: Publish to npm
|
|
26
|
+
run: npm publish --access public
|
|
27
|
+
env:
|
|
28
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
package/.nvmrc
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
22
|
package/README.md
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# FlexSite CLI
|
|
2
|
+
|
|
3
|
+
Command-line tool for managing FlexSite projects. Download and import database and files backups to your local Lando or DDEV environment.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @flexsiteio/cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
1. **Get an access token** from your FlexSite dashboard under Profile > Access Tokens
|
|
14
|
+
|
|
15
|
+
2. **Login with your token:**
|
|
16
|
+
```bash
|
|
17
|
+
flexsite auth login
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
3. **Sync your local environment:**
|
|
21
|
+
```bash
|
|
22
|
+
flexsite sync
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Commands
|
|
26
|
+
|
|
27
|
+
### Authentication
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# Login with a personal access token
|
|
31
|
+
flexsite auth login
|
|
32
|
+
|
|
33
|
+
# Login with token directly (non-interactive)
|
|
34
|
+
flexsite auth login --token fst_xxx_...
|
|
35
|
+
|
|
36
|
+
# Check authentication status
|
|
37
|
+
flexsite auth status
|
|
38
|
+
|
|
39
|
+
# Logout
|
|
40
|
+
flexsite auth logout
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Database Operations
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Download and import latest database backup
|
|
47
|
+
flexsite db pull
|
|
48
|
+
|
|
49
|
+
# Download to specific environment
|
|
50
|
+
flexsite db pull --env <environmentId>
|
|
51
|
+
|
|
52
|
+
# List available backups
|
|
53
|
+
flexsite db list
|
|
54
|
+
|
|
55
|
+
# Download without importing
|
|
56
|
+
flexsite db pull --no-import
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Files Operations
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Download and extract latest files backup
|
|
63
|
+
flexsite files pull
|
|
64
|
+
|
|
65
|
+
# Download to specific environment
|
|
66
|
+
flexsite files pull --env <environmentId>
|
|
67
|
+
|
|
68
|
+
# List available backups
|
|
69
|
+
flexsite files list
|
|
70
|
+
|
|
71
|
+
# Download without extracting
|
|
72
|
+
flexsite files pull --no-import
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Sync (Database + Files)
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# Sync both database and files
|
|
79
|
+
flexsite sync
|
|
80
|
+
|
|
81
|
+
# Sync only database
|
|
82
|
+
flexsite sync --db-only
|
|
83
|
+
|
|
84
|
+
# Sync only files
|
|
85
|
+
flexsite sync --files-only
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Configuration
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Show current configuration
|
|
92
|
+
flexsite config show
|
|
93
|
+
|
|
94
|
+
# Set default organization
|
|
95
|
+
flexsite config set org <orgId>
|
|
96
|
+
|
|
97
|
+
# Set default project
|
|
98
|
+
flexsite config set project <projectId>
|
|
99
|
+
|
|
100
|
+
# Set default environment
|
|
101
|
+
flexsite config set env <envId>
|
|
102
|
+
|
|
103
|
+
# Show config file path
|
|
104
|
+
flexsite config path
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Local Environment Support
|
|
108
|
+
|
|
109
|
+
The CLI automatically detects Lando and DDEV environments and uses the appropriate commands for importing databases and files.
|
|
110
|
+
|
|
111
|
+
### Lando
|
|
112
|
+
|
|
113
|
+
When a `.lando.yml` file is present or the `LANDO` environment variable is set to `ON`, the CLI will use:
|
|
114
|
+
- `lando db-import` for database imports
|
|
115
|
+
- Standard `tar` extraction for files, with permission fixes via `lando ssh`
|
|
116
|
+
|
|
117
|
+
### DDEV
|
|
118
|
+
|
|
119
|
+
When a `.ddev/config.yaml` file is present or the `IS_DDEV_PROJECT` environment variable is set to `true`, the CLI will use:
|
|
120
|
+
- `ddev import-db` for database imports
|
|
121
|
+
- Standard `tar` extraction for files, with permission fixes via `ddev exec`
|
|
122
|
+
|
|
123
|
+
## Configuration File
|
|
124
|
+
|
|
125
|
+
The CLI stores configuration in `~/.flexsite/config.json`:
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
{
|
|
129
|
+
"version": 1,
|
|
130
|
+
"tokens": {
|
|
131
|
+
"d112c061": {
|
|
132
|
+
"token": "fst_d112c061_...",
|
|
133
|
+
"userId": "110bc5d0-...",
|
|
134
|
+
"organizationId": "d112c061-...",
|
|
135
|
+
"organizationName": "My Company"
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"defaults": {
|
|
139
|
+
"organizationId": "d112c061-...",
|
|
140
|
+
"projectId": "727aa8c7-...",
|
|
141
|
+
"environmentId": "f9b72cdd-..."
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Environment Variables
|
|
147
|
+
|
|
148
|
+
- `FLEXSITE_API_URL` - Override the API base URL (default: `https://cli-api.flexsite.io/v1`)
|
|
149
|
+
|
|
150
|
+
## Token Scopes
|
|
151
|
+
|
|
152
|
+
When creating a personal access token, you can limit its permissions:
|
|
153
|
+
|
|
154
|
+
| Scope | Description |
|
|
155
|
+
|-------|-------------|
|
|
156
|
+
| `backup:read` | Download database backups |
|
|
157
|
+
| `backup:create` | Create new database backups |
|
|
158
|
+
| `files:read` | Download files backups |
|
|
159
|
+
| `files:create` | Create new files backups |
|
|
160
|
+
| `drush:execute` | Execute Drush commands remotely |
|
|
161
|
+
| `projects:read` | List projects |
|
|
162
|
+
| `environments:read` | List environments |
|
|
163
|
+
|
|
164
|
+
## License
|
|
165
|
+
|
|
166
|
+
MIT
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flexsite.d.ts","sourceRoot":"","sources":["../../src/bin/flexsite.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* FlexSite CLI
|
|
5
|
+
* Command-line tool for managing FlexSite projects.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
const commander_1 = require("commander");
|
|
9
|
+
const auth_js_1 = require("../commands/auth.js");
|
|
10
|
+
const db_js_1 = require("../commands/db.js");
|
|
11
|
+
const files_js_1 = require("../commands/files.js");
|
|
12
|
+
const sync_js_1 = require("../commands/sync.js");
|
|
13
|
+
const config_js_1 = require("../commands/config.js");
|
|
14
|
+
const program = new commander_1.Command();
|
|
15
|
+
program
|
|
16
|
+
.name('flexsite')
|
|
17
|
+
.description('FlexSite CLI - Manage your FlexSite projects from the command line')
|
|
18
|
+
.version('1.0.0');
|
|
19
|
+
// Register commands
|
|
20
|
+
program.addCommand(auth_js_1.authCommand);
|
|
21
|
+
program.addCommand(db_js_1.dbCommand);
|
|
22
|
+
program.addCommand(files_js_1.filesCommand);
|
|
23
|
+
program.addCommand(sync_js_1.syncCommand);
|
|
24
|
+
program.addCommand(config_js_1.configCommand);
|
|
25
|
+
// Parse arguments
|
|
26
|
+
program.parse(process.argv);
|
|
27
|
+
// Show help if no command provided
|
|
28
|
+
if (!process.argv.slice(2).length) {
|
|
29
|
+
program.outputHelp();
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=flexsite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flexsite.js","sourceRoot":"","sources":["../../src/bin/flexsite.ts"],"names":[],"mappings":";;AAEA;;;GAGG;;AAEH,yCAAoC;AACpC,iDAAkD;AAClD,6CAA8C;AAC9C,mDAAoD;AACpD,iDAAkD;AAClD,qDAAsD;AAEtD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,oEAAoE,CAAC;KACjF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,qBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,iBAAS,CAAC,CAAC;AAC9B,OAAO,CAAC,UAAU,CAAC,uBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,qBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,yBAAa,CAAC,CAAC;AAElC,kBAAkB;AAClB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,mCAAmC;AACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,eAAO,MAAM,WAAW,SACe,CAAC"}
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Authentication commands for FlexSite CLI.
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.authCommand = void 0;
|
|
10
|
+
const commander_1 = require("commander");
|
|
11
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
13
|
+
const ora_1 = __importDefault(require("ora"));
|
|
14
|
+
const config_js_1 = require("../lib/config.js");
|
|
15
|
+
const api_js_1 = require("../lib/api.js");
|
|
16
|
+
exports.authCommand = new commander_1.Command('auth')
|
|
17
|
+
.description('Manage authentication');
|
|
18
|
+
/**
|
|
19
|
+
* Login with a personal access token
|
|
20
|
+
*/
|
|
21
|
+
exports.authCommand
|
|
22
|
+
.command('login')
|
|
23
|
+
.description('Authenticate with a personal access token')
|
|
24
|
+
.option('-t, --token <token>', 'Personal access token')
|
|
25
|
+
.action(async (options) => {
|
|
26
|
+
try {
|
|
27
|
+
let token = options.token;
|
|
28
|
+
// Prompt for token if not provided
|
|
29
|
+
if (!token) {
|
|
30
|
+
console.log(chalk_1.default.cyan('\nTo get a personal access token:'));
|
|
31
|
+
console.log('1. Go to https://flexsite.io/dashboard/profile/tokens');
|
|
32
|
+
console.log('2. Click "Create Token"');
|
|
33
|
+
console.log('3. Copy the generated token\n');
|
|
34
|
+
const answers = await inquirer_1.default.prompt([
|
|
35
|
+
{
|
|
36
|
+
type: 'password',
|
|
37
|
+
name: 'token',
|
|
38
|
+
message: 'Enter your personal access token:',
|
|
39
|
+
mask: '*',
|
|
40
|
+
validate: (input) => {
|
|
41
|
+
if (!input)
|
|
42
|
+
return 'Token is required';
|
|
43
|
+
if (!input.startsWith('fst_'))
|
|
44
|
+
return 'Invalid token format (should start with fst_)';
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
]);
|
|
49
|
+
token = answers.token;
|
|
50
|
+
}
|
|
51
|
+
// Validate token format
|
|
52
|
+
if (!token.startsWith('fst_')) {
|
|
53
|
+
console.error(chalk_1.default.red('Invalid token format. Token should start with "fst_"'));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
// Verify the token with the API
|
|
57
|
+
const spinner = (0, ora_1.default)('Verifying token...').start();
|
|
58
|
+
try {
|
|
59
|
+
const authInfo = await (0, api_js_1.verifyAuth)(token);
|
|
60
|
+
spinner.succeed('Token verified successfully!');
|
|
61
|
+
// Extract organization prefix from token
|
|
62
|
+
const orgPrefix = token.split('_')[1];
|
|
63
|
+
// Save the token
|
|
64
|
+
const orgName = authInfo.organizationName || 'Unknown Organization';
|
|
65
|
+
(0, config_js_1.saveToken)(orgPrefix, {
|
|
66
|
+
token,
|
|
67
|
+
userId: authInfo.userId,
|
|
68
|
+
organizationId: authInfo.organizationId,
|
|
69
|
+
organizationName: orgName
|
|
70
|
+
});
|
|
71
|
+
console.log(chalk_1.default.green('\n✓ Authentication successful!'));
|
|
72
|
+
console.log(` Organization: ${orgName} (${authInfo.organizationId.substring(0, 8)}...)`);
|
|
73
|
+
console.log(` Scopes: ${authInfo.scopes.join(', ')}`);
|
|
74
|
+
console.log(`\nConfiguration saved to: ${(0, config_js_1.getConfigPath)()}`);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
spinner.fail('Token verification failed');
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
if (error instanceof Error) {
|
|
83
|
+
console.error(chalk_1.default.red(`\nError: ${error.message}`));
|
|
84
|
+
}
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
/**
|
|
89
|
+
* Show current authentication status
|
|
90
|
+
*/
|
|
91
|
+
exports.authCommand
|
|
92
|
+
.command('status')
|
|
93
|
+
.alias('token')
|
|
94
|
+
.description('Show current authentication status')
|
|
95
|
+
.action(async () => {
|
|
96
|
+
try {
|
|
97
|
+
const tokens = (0, config_js_1.getAllTokens)();
|
|
98
|
+
const defaults = (0, config_js_1.getDefaults)();
|
|
99
|
+
if (Object.keys(tokens).length === 0) {
|
|
100
|
+
console.log(chalk_1.default.yellow('Not authenticated. Run "flexsite auth login" to authenticate.'));
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
console.log(chalk_1.default.cyan('\nAuthenticated accounts:\n'));
|
|
104
|
+
const invalidTokens = [];
|
|
105
|
+
for (const [prefix, config] of Object.entries(tokens)) {
|
|
106
|
+
const isDefault = defaults.organizationId === config.organizationId;
|
|
107
|
+
const spinner = (0, ora_1.default)(`Checking ${prefix}...`).start();
|
|
108
|
+
try {
|
|
109
|
+
const authInfo = await (0, api_js_1.verifyAuth)(config.token);
|
|
110
|
+
spinner.stop();
|
|
111
|
+
const orgName = authInfo.organizationName || config.organizationName || 'Unknown';
|
|
112
|
+
const defaultBadge = isDefault ? chalk_1.default.cyan(' [default]') : '';
|
|
113
|
+
console.log(chalk_1.default.green(`✓ ${prefix}`) + defaultBadge);
|
|
114
|
+
console.log(` Organization: ${orgName}`);
|
|
115
|
+
console.log(` User ID: ${authInfo.userId}`);
|
|
116
|
+
console.log(` Scopes: ${authInfo.scopes.join(', ')}`);
|
|
117
|
+
console.log();
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
spinner.stop();
|
|
121
|
+
invalidTokens.push(prefix);
|
|
122
|
+
const defaultBadge = isDefault ? chalk_1.default.cyan(' [default]') : '';
|
|
123
|
+
console.log(chalk_1.default.red(`✗ ${prefix} (invalid or revoked)`) + defaultBadge);
|
|
124
|
+
console.log(` Organization: ${config.organizationName || config.organizationId}`);
|
|
125
|
+
console.log();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
console.log(`Configuration file: ${(0, config_js_1.getConfigPath)()}`);
|
|
129
|
+
// Offer to remove invalid tokens
|
|
130
|
+
if (invalidTokens.length > 0) {
|
|
131
|
+
console.log();
|
|
132
|
+
const { removeInvalid } = await inquirer_1.default.prompt([
|
|
133
|
+
{
|
|
134
|
+
type: 'confirm',
|
|
135
|
+
name: 'removeInvalid',
|
|
136
|
+
message: `Remove ${invalidTokens.length} invalid/revoked token(s)?`,
|
|
137
|
+
default: true
|
|
138
|
+
}
|
|
139
|
+
]);
|
|
140
|
+
if (removeInvalid) {
|
|
141
|
+
for (const prefix of invalidTokens) {
|
|
142
|
+
const config = tokens[prefix];
|
|
143
|
+
(0, config_js_1.removeToken)(prefix);
|
|
144
|
+
// Clear default org if we're removing its token
|
|
145
|
+
if (defaults.organizationId === config.organizationId) {
|
|
146
|
+
const remainingTokens = (0, config_js_1.getAllTokens)();
|
|
147
|
+
const firstRemaining = Object.values(remainingTokens)[0];
|
|
148
|
+
if (firstRemaining) {
|
|
149
|
+
(0, config_js_1.setDefaultOrganization)(firstRemaining.organizationId);
|
|
150
|
+
console.log(chalk_1.default.cyan(` Default organization changed to: ${firstRemaining.organizationName || firstRemaining.organizationId}`));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
console.log(chalk_1.default.green(`Removed ${invalidTokens.length} invalid token(s).`));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
if (error instanceof Error) {
|
|
160
|
+
console.error(chalk_1.default.red(`Error: ${error.message}`));
|
|
161
|
+
}
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
/**
|
|
166
|
+
* Logout / remove authentication
|
|
167
|
+
*/
|
|
168
|
+
exports.authCommand
|
|
169
|
+
.command('logout')
|
|
170
|
+
.description('Remove stored authentication tokens')
|
|
171
|
+
.option('-a, --all', 'Remove all tokens')
|
|
172
|
+
.option('-o, --org <orgId>', 'Remove token for specific organization')
|
|
173
|
+
.action(async (options) => {
|
|
174
|
+
try {
|
|
175
|
+
const tokens = (0, config_js_1.getAllTokens)();
|
|
176
|
+
const defaults = (0, config_js_1.getDefaults)();
|
|
177
|
+
if (Object.keys(tokens).length === 0) {
|
|
178
|
+
console.log(chalk_1.default.yellow('No tokens to remove.'));
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const removeAndUpdateDefault = (prefix) => {
|
|
182
|
+
const config = tokens[prefix];
|
|
183
|
+
(0, config_js_1.removeToken)(prefix);
|
|
184
|
+
// If we removed the default org's token, update default
|
|
185
|
+
if (config && defaults.organizationId === config.organizationId) {
|
|
186
|
+
const remainingTokens = (0, config_js_1.getAllTokens)();
|
|
187
|
+
const firstRemaining = Object.values(remainingTokens)[0];
|
|
188
|
+
if (firstRemaining) {
|
|
189
|
+
(0, config_js_1.setDefaultOrganization)(firstRemaining.organizationId);
|
|
190
|
+
console.log(chalk_1.default.cyan(` Default organization changed to: ${firstRemaining.organizationName || firstRemaining.organizationId}`));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
if (options.all) {
|
|
195
|
+
const { confirm } = await inquirer_1.default.prompt([
|
|
196
|
+
{
|
|
197
|
+
type: 'confirm',
|
|
198
|
+
name: 'confirm',
|
|
199
|
+
message: 'Remove all stored tokens?',
|
|
200
|
+
default: false
|
|
201
|
+
}
|
|
202
|
+
]);
|
|
203
|
+
if (confirm) {
|
|
204
|
+
for (const prefix of Object.keys(tokens)) {
|
|
205
|
+
(0, config_js_1.removeToken)(prefix);
|
|
206
|
+
}
|
|
207
|
+
console.log(chalk_1.default.green('All tokens removed.'));
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
else if (options.org) {
|
|
211
|
+
if ((0, config_js_1.removeToken)(options.org)) {
|
|
212
|
+
console.log(chalk_1.default.green(`Token for ${options.org} removed.`));
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
console.log(chalk_1.default.yellow(`No token found for ${options.org}`));
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
// Interactive selection with organization names
|
|
220
|
+
const choices = Object.entries(tokens).map(([prefix, config]) => {
|
|
221
|
+
const isDefault = defaults.organizationId === config.organizationId;
|
|
222
|
+
const displayName = config.organizationName || config.organizationId;
|
|
223
|
+
const defaultBadge = isDefault ? ' [default]' : '';
|
|
224
|
+
return {
|
|
225
|
+
name: `${prefix}: ${displayName}${defaultBadge}`,
|
|
226
|
+
value: prefix
|
|
227
|
+
};
|
|
228
|
+
});
|
|
229
|
+
const { selected } = await inquirer_1.default.prompt([
|
|
230
|
+
{
|
|
231
|
+
type: 'list',
|
|
232
|
+
name: 'selected',
|
|
233
|
+
message: 'Select token to remove:',
|
|
234
|
+
choices: [...choices, { name: 'Cancel', value: null }]
|
|
235
|
+
}
|
|
236
|
+
]);
|
|
237
|
+
if (selected) {
|
|
238
|
+
removeAndUpdateDefault(selected);
|
|
239
|
+
console.log(chalk_1.default.green(`Token removed.`));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
if (error instanceof Error) {
|
|
245
|
+
console.error(chalk_1.default.red(`Error: ${error.message}`));
|
|
246
|
+
}
|
|
247
|
+
process.exit(1);
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
/**
|
|
251
|
+
* Switch default organization
|
|
252
|
+
*/
|
|
253
|
+
exports.authCommand
|
|
254
|
+
.command('use')
|
|
255
|
+
.description('Switch default organization')
|
|
256
|
+
.argument('[org]', 'Organization prefix or ID')
|
|
257
|
+
.action(async (org) => {
|
|
258
|
+
try {
|
|
259
|
+
const tokens = (0, config_js_1.getAllTokens)();
|
|
260
|
+
const defaults = (0, config_js_1.getDefaults)();
|
|
261
|
+
if (Object.keys(tokens).length === 0) {
|
|
262
|
+
console.log(chalk_1.default.yellow('No tokens available. Run "flexsite auth login" to authenticate.'));
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
if (Object.keys(tokens).length === 1) {
|
|
266
|
+
const onlyToken = Object.values(tokens)[0];
|
|
267
|
+
console.log(chalk_1.default.yellow(`Only one organization available: ${onlyToken.organizationName || onlyToken.organizationId}`));
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
let selectedPrefix = null;
|
|
271
|
+
if (org) {
|
|
272
|
+
// Find by prefix or full ID
|
|
273
|
+
const orgPrefix = org.substring(0, 8);
|
|
274
|
+
if (tokens[orgPrefix]) {
|
|
275
|
+
selectedPrefix = orgPrefix;
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
// Search by full ID
|
|
279
|
+
for (const [prefix, config] of Object.entries(tokens)) {
|
|
280
|
+
if (config.organizationId === org) {
|
|
281
|
+
selectedPrefix = prefix;
|
|
282
|
+
break;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (!selectedPrefix) {
|
|
287
|
+
console.log(chalk_1.default.yellow(`No token found for organization: ${org}`));
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
// Interactive selection
|
|
293
|
+
const choices = Object.entries(tokens).map(([prefix, config]) => {
|
|
294
|
+
const isDefault = defaults.organizationId === config.organizationId;
|
|
295
|
+
const displayName = config.organizationName || config.organizationId;
|
|
296
|
+
const defaultBadge = isDefault ? chalk_1.default.cyan(' (current)') : '';
|
|
297
|
+
return {
|
|
298
|
+
name: `${displayName}${defaultBadge}`,
|
|
299
|
+
value: prefix
|
|
300
|
+
};
|
|
301
|
+
});
|
|
302
|
+
const { selected } = await inquirer_1.default.prompt([
|
|
303
|
+
{
|
|
304
|
+
type: 'list',
|
|
305
|
+
name: 'selected',
|
|
306
|
+
message: 'Select organization to use:',
|
|
307
|
+
choices
|
|
308
|
+
}
|
|
309
|
+
]);
|
|
310
|
+
selectedPrefix = selected;
|
|
311
|
+
}
|
|
312
|
+
if (selectedPrefix) {
|
|
313
|
+
const config = tokens[selectedPrefix];
|
|
314
|
+
(0, config_js_1.setDefaultOrganization)(config.organizationId);
|
|
315
|
+
console.log(chalk_1.default.green(`✓ Now using: ${config.organizationName || config.organizationId}`));
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
if (error instanceof Error) {
|
|
320
|
+
console.error(chalk_1.default.red(`Error: ${error.message}`));
|
|
321
|
+
}
|
|
322
|
+
process.exit(1);
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,aAAa,SACgB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration commands for FlexSite CLI.
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.configCommand = void 0;
|
|
10
|
+
const commander_1 = require("commander");
|
|
11
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
const config_js_1 = require("../lib/config.js");
|
|
13
|
+
exports.configCommand = new commander_1.Command('config')
|
|
14
|
+
.description('Manage CLI configuration');
|
|
15
|
+
/**
|
|
16
|
+
* Show current configuration
|
|
17
|
+
*/
|
|
18
|
+
exports.configCommand
|
|
19
|
+
.command('show')
|
|
20
|
+
.description('Display current configuration')
|
|
21
|
+
.action(() => {
|
|
22
|
+
const config = (0, config_js_1.getConfig)();
|
|
23
|
+
const defaults = (0, config_js_1.getDefaults)();
|
|
24
|
+
console.log(chalk_1.default.cyan('\nFlexSite CLI Configuration\n'));
|
|
25
|
+
console.log(`Config file: ${(0, config_js_1.getConfigPath)()}\n`);
|
|
26
|
+
const tokenCount = Object.keys(config.tokens).length;
|
|
27
|
+
console.log(chalk_1.default.gray(`Stored tokens: ${tokenCount}`));
|
|
28
|
+
for (const [prefix, token] of Object.entries(config.tokens)) {
|
|
29
|
+
const isDefault = defaults.organizationId === token.organizationId;
|
|
30
|
+
const defaultBadge = isDefault ? chalk_1.default.cyan(' [default]') : '';
|
|
31
|
+
console.log(` ${prefix}: ${token.organizationName || token.organizationId}${defaultBadge}`);
|
|
32
|
+
}
|
|
33
|
+
if (tokenCount === 0) {
|
|
34
|
+
console.log(chalk_1.default.yellow(' No tokens stored. Run "flexsite auth login" to authenticate.'));
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* Clear configuration
|
|
39
|
+
*/
|
|
40
|
+
exports.configCommand
|
|
41
|
+
.command('clear')
|
|
42
|
+
.description('Clear all configuration (including tokens)')
|
|
43
|
+
.action(() => {
|
|
44
|
+
(0, config_js_1.clearConfig)();
|
|
45
|
+
console.log(chalk_1.default.green('Configuration cleared.'));
|
|
46
|
+
});
|
|
47
|
+
/**
|
|
48
|
+
* Show config path
|
|
49
|
+
*/
|
|
50
|
+
exports.configCommand
|
|
51
|
+
.command('path')
|
|
52
|
+
.description('Show the configuration file path')
|
|
53
|
+
.action(() => {
|
|
54
|
+
console.log((0, config_js_1.getConfigPath)());
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=config.js.map
|