@getbrevo/cli 1.0.1 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -0
- package/README.md +16 -4
- package/agent-context/AGENTS.md +23 -5
- package/agent-context/SKILL.md +23 -3
- package/dist/api/client.d.ts +2 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +50 -36
- package/dist/api/client.js.map +1 -1
- package/dist/bin/index.js +9 -5
- package/dist/bin/index.js.map +1 -1
- package/dist/commands/app/create.d.ts +1 -0
- package/dist/commands/app/create.d.ts.map +1 -1
- package/dist/commands/app/create.js +257 -201
- package/dist/commands/app/create.js.map +1 -1
- package/dist/commands/app/delete.d.ts.map +1 -1
- package/dist/commands/app/delete.js +81 -62
- package/dist/commands/app/delete.js.map +1 -1
- package/dist/commands/app/list.d.ts.map +1 -1
- package/dist/commands/app/list.js +10 -2
- package/dist/commands/app/list.js.map +1 -1
- package/dist/commands/app/scaffold.d.ts.map +1 -1
- package/dist/commands/app/scaffold.js +14 -3
- package/dist/commands/app/scaffold.js.map +1 -1
- package/dist/commands/app/scopes.d.ts +2 -0
- package/dist/commands/app/scopes.d.ts.map +1 -0
- package/dist/commands/app/scopes.js +81 -0
- package/dist/commands/app/scopes.js.map +1 -0
- package/dist/commands/app/start.d.ts.map +1 -1
- package/dist/commands/app/start.js +7 -0
- package/dist/commands/app/start.js.map +1 -1
- package/dist/commands/app/update.d.ts.map +1 -1
- package/dist/commands/app/update.js +305 -189
- package/dist/commands/app/update.js.map +1 -1
- package/dist/commands/definitions.d.ts.map +1 -1
- package/dist/commands/definitions.js +44 -1
- package/dist/commands/definitions.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +15 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +154 -138
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +27 -20
- package/dist/commands/whoami.js.map +1 -1
- package/dist/lang/en.d.ts +43 -3
- package/dist/lang/en.d.ts.map +1 -1
- package/dist/lang/en.js +44 -3
- package/dist/lang/en.js.map +1 -1
- package/dist/lib/auth-guard.d.ts.map +1 -1
- package/dist/lib/auth-guard.js +10 -1
- package/dist/lib/auth-guard.js.map +1 -1
- package/dist/lib/cli-version.d.ts +2 -0
- package/dist/lib/cli-version.d.ts.map +1 -0
- package/dist/lib/cli-version.js +59 -0
- package/dist/lib/cli-version.js.map +1 -0
- package/dist/lib/config.d.ts +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +15 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/constants.d.ts +12 -1
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +26 -2
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +16 -3
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/telemetry.d.ts +9 -0
- package/dist/lib/telemetry.d.ts.map +1 -0
- package/dist/lib/telemetry.js +57 -0
- package/dist/lib/telemetry.js.map +1 -0
- package/dist/lib/update-notifier.d.ts.map +1 -1
- package/dist/lib/update-notifier.js +24 -20
- package/dist/lib/update-notifier.js.map +1 -1
- package/dist/lib/validators.d.ts +23 -0
- package/dist/lib/validators.d.ts.map +1 -1
- package/dist/lib/validators.js +75 -0
- package/dist/lib/validators.js.map +1 -1
- package/dist/services/app.d.ts +3 -0
- package/dist/services/app.d.ts.map +1 -1
- package/dist/services/app.js +6 -1
- package/dist/services/app.js.map +1 -1
- package/dist/services/oauth-metadata.d.ts +7 -0
- package/dist/services/oauth-metadata.d.ts.map +1 -0
- package/dist/services/oauth-metadata.js +43 -0
- package/dist/services/oauth-metadata.js.map +1 -0
- package/dist/services/scopes-html.d.ts +3 -0
- package/dist/services/scopes-html.d.ts.map +1 -0
- package/dist/services/scopes-html.js +516 -0
- package/dist/services/scopes-html.js.map +1 -0
- package/dist/services/scopes-web.d.ts +12 -0
- package/dist/services/scopes-web.d.ts.map +1 -0
- package/dist/services/scopes-web.js +95 -0
- package/dist/services/scopes-web.js.map +1 -0
- package/dist/services/skill.js +1 -1
- package/dist/services/skill.js.map +1 -1
- package/dist/skills/index.d.ts +2 -1
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +3 -22
- package/dist/skills/index.js.map +1 -1
- package/dist/templates/files/AGENTS.md.tmpl +1 -1
- package/dist/templates/files/CLAUDE.md.tmpl +1 -1
- package/dist/templates/files/README.md.tmpl +2 -1
- package/dist/templates/files/app-config.json.tmpl +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -2
- package/dist/lib/min-version-check.d.ts +0 -15
- package/dist/lib/min-version-check.d.ts.map +0 -1
- package/dist/lib/min-version-check.js +0 -33
- package/dist/lib/min-version-check.js.map +0 -1
|
@@ -17,235 +17,258 @@ const ui_1 = require("../../lib/ui");
|
|
|
17
17
|
const config_1 = require("../../lib/config");
|
|
18
18
|
const scaffold_1 = require("./scaffold");
|
|
19
19
|
const container_1 = require("../../container");
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if (
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
const projectConfig = (0, config_1.readProjectConfig)();
|
|
27
|
-
const linkedName = projectConfig?.appName || String(projectConfig?.appId);
|
|
28
|
-
(0, logger_1.logInfo)(` App "${linkedName}" is already linked in this directory (app-config.json).`);
|
|
29
|
-
const { proceed } = await inquirer_1.default.prompt([
|
|
30
|
-
{
|
|
31
|
-
type: 'confirm',
|
|
32
|
-
name: 'proceed',
|
|
33
|
-
message: 'Create a new app anyway?',
|
|
34
|
-
default: false,
|
|
35
|
-
},
|
|
36
|
-
]);
|
|
37
|
-
if (!proceed) {
|
|
38
|
-
(0, logger_1.logInfo)(`\n Use \`${constants_1.CLI.APP_UPDATE}\` to modify the existing app.\n`);
|
|
39
|
-
return;
|
|
20
|
+
function validateHttpUrl(trimmed, invalidMessage) {
|
|
21
|
+
try {
|
|
22
|
+
const parsed = new URL(trimmed);
|
|
23
|
+
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
|
|
24
|
+
return invalidMessage;
|
|
40
25
|
}
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return invalidMessage;
|
|
41
30
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
31
|
+
}
|
|
32
|
+
const validateRedirectUrl = (input) => {
|
|
33
|
+
const trimmed = input.trim();
|
|
34
|
+
if (!trimmed)
|
|
35
|
+
return en_1.messages.APP_CREATE_REDIRECT_EMPTY;
|
|
36
|
+
return validateHttpUrl(trimmed, en_1.messages.APP_CREATE_REDIRECT_INVALID);
|
|
37
|
+
};
|
|
38
|
+
const validateLogoUrl = (input) => {
|
|
39
|
+
const trimmed = input.trim();
|
|
40
|
+
if (!trimmed)
|
|
41
|
+
return true;
|
|
42
|
+
return validateHttpUrl(trimmed, en_1.messages.APP_CREATE_LOGO_INVALID);
|
|
43
|
+
};
|
|
44
|
+
// 0. Check for existing app-config.json in current directory.
|
|
45
|
+
// Returns true when it is OK to proceed with creation.
|
|
46
|
+
async function confirmCreateOverLinkedApp() {
|
|
47
|
+
if (!(0, config_1.hasLocalApp)())
|
|
48
|
+
return true;
|
|
49
|
+
if (!process.stdin.isTTY) {
|
|
50
|
+
throw new errors_1.CliError('An app is already linked in this directory (app-config.json). Use --force or run interactively.');
|
|
51
|
+
}
|
|
52
|
+
const projectConfig = (0, config_1.readProjectConfig)();
|
|
53
|
+
const linkedName = projectConfig?.appName || String(projectConfig?.appId);
|
|
54
|
+
(0, logger_1.logInfo)(` App "${linkedName}" is already linked in this directory (app-config.json).`);
|
|
55
|
+
const { proceed } = await inquirer_1.default.prompt([
|
|
56
|
+
{
|
|
57
|
+
type: 'confirm',
|
|
58
|
+
name: 'proceed',
|
|
59
|
+
message: 'Create a new app anyway?',
|
|
60
|
+
default: false,
|
|
61
|
+
},
|
|
62
|
+
]);
|
|
63
|
+
if (!proceed) {
|
|
64
|
+
(0, logger_1.logInfo)(`\n Use \`${constants_1.CLI.APP_UPDATE}\` to modify the existing app.\n`);
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
// 1. App name
|
|
70
|
+
async function resolveAppName(nameFlag) {
|
|
71
|
+
if (nameFlag) {
|
|
72
|
+
const nameCheck = (0, validators_1.validateAppName)(nameFlag);
|
|
46
73
|
if (nameCheck !== true)
|
|
47
74
|
throw new errors_1.CliError(nameCheck);
|
|
75
|
+
return nameFlag;
|
|
48
76
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
77
|
+
const answer = await inquirer_1.default.prompt([
|
|
78
|
+
{
|
|
79
|
+
type: 'input',
|
|
80
|
+
name: 'name',
|
|
81
|
+
message: en_1.messages.APP_CREATE_NAME_PROMPT,
|
|
82
|
+
validate: validators_1.validateAppName,
|
|
83
|
+
},
|
|
84
|
+
]);
|
|
85
|
+
return answer.name;
|
|
86
|
+
}
|
|
87
|
+
// 2. Distribution type
|
|
88
|
+
async function resolveDistribution(distributionFlag) {
|
|
61
89
|
const VALID_DISTRIBUTIONS = ['private', 'public'];
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
if (distribution === 'public') {
|
|
90
|
+
(0, validators_1.validateEnum)(distributionFlag, VALID_DISTRIBUTIONS, '--distribution');
|
|
91
|
+
if (distributionFlag === 'public') {
|
|
65
92
|
throw new errors_1.CliError(en_1.messages.APP_CREATE_PUBLIC_UNAVAILABLE);
|
|
66
93
|
}
|
|
67
|
-
if (
|
|
68
|
-
|
|
69
|
-
{
|
|
70
|
-
type: 'list',
|
|
71
|
-
name: 'distribution',
|
|
72
|
-
message: en_1.messages.APP_CREATE_TYPE_PROMPT,
|
|
73
|
-
choices: [
|
|
74
|
-
{
|
|
75
|
-
name: 'Private (Used exclusively by your organisation)',
|
|
76
|
-
value: 'private',
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
name: 'Public (Distributed to end users or marketplace listings)',
|
|
80
|
-
value: 'public',
|
|
81
|
-
disabled: 'coming soon',
|
|
82
|
-
},
|
|
83
|
-
],
|
|
84
|
-
},
|
|
85
|
-
]);
|
|
86
|
-
distribution = answer.distribution;
|
|
94
|
+
if (distributionFlag) {
|
|
95
|
+
return distributionFlag;
|
|
87
96
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
const defaultRedirect = availablePort == null || availablePort === constants_1.DEFAULT_PORT
|
|
95
|
-
? constants_1.DEFAULT_REDIRECT_URI
|
|
96
|
-
: `http://localhost:${availablePort}/auth/callback`;
|
|
97
|
-
if (!options.json) {
|
|
98
|
-
if (availablePort == null) {
|
|
99
|
-
(0, logger_1.logInfo)(en_1.messages.APP_CREATE_PORT_SCAN_FAILED(constants_1.DEFAULT_PORT));
|
|
100
|
-
}
|
|
101
|
-
else if (availablePort !== constants_1.DEFAULT_PORT) {
|
|
102
|
-
(0, logger_1.logInfo)(en_1.messages.APP_CREATE_PORT_IN_USE(constants_1.DEFAULT_PORT, availablePort));
|
|
103
|
-
}
|
|
104
|
-
(0, logger_1.logInfo)(en_1.messages.APP_CREATE_REDIRECT_HINT(constants_1.CLI.APP_START('oauth')));
|
|
105
|
-
}
|
|
106
|
-
const validateRedirectUrl = (input) => {
|
|
107
|
-
const trimmed = input.trim();
|
|
108
|
-
if (!trimmed)
|
|
109
|
-
return en_1.messages.APP_CREATE_REDIRECT_EMPTY;
|
|
110
|
-
try {
|
|
111
|
-
const parsed = new URL(trimmed);
|
|
112
|
-
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
|
|
113
|
-
return en_1.messages.APP_CREATE_REDIRECT_INVALID;
|
|
114
|
-
}
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
117
|
-
catch {
|
|
118
|
-
return en_1.messages.APP_CREATE_REDIRECT_INVALID;
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
const { redirectUrl: firstUrl } = await inquirer_1.default.prompt([
|
|
97
|
+
const answer = await inquirer_1.default.prompt([
|
|
98
|
+
{
|
|
99
|
+
type: 'list',
|
|
100
|
+
name: 'distribution',
|
|
101
|
+
message: en_1.messages.APP_CREATE_TYPE_PROMPT,
|
|
102
|
+
choices: [
|
|
122
103
|
{
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
message: en_1.messages.APP_CREATE_REDIRECT_PROMPT,
|
|
126
|
-
default: defaultRedirect,
|
|
127
|
-
validate: validateRedirectUrl,
|
|
104
|
+
name: 'Private (Used exclusively by your organisation)',
|
|
105
|
+
value: 'private',
|
|
128
106
|
},
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
107
|
+
{
|
|
108
|
+
name: 'Public (Distributed to end users or marketplace listings)',
|
|
109
|
+
value: 'public',
|
|
110
|
+
disabled: 'coming soon',
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
},
|
|
114
|
+
]);
|
|
115
|
+
return answer.distribution;
|
|
116
|
+
}
|
|
117
|
+
const validateYesNo = (input) => {
|
|
118
|
+
const val = String(input).toLowerCase().trim();
|
|
119
|
+
if (val === 'y' || val === 'yes' || val === 'n' || val === 'no' || val === '') {
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
return 'Please enter y or n';
|
|
123
|
+
};
|
|
124
|
+
async function promptAddAnotherRedirect() {
|
|
125
|
+
const { anotherRaw } = await inquirer_1.default.prompt([
|
|
126
|
+
{
|
|
127
|
+
type: 'input',
|
|
128
|
+
name: 'anotherRaw',
|
|
129
|
+
message: en_1.messages.APP_CREATE_REDIRECT_ANOTHER + ' (y/N)',
|
|
130
|
+
default: 'n',
|
|
131
|
+
validate: validateYesNo,
|
|
132
|
+
},
|
|
133
|
+
]);
|
|
134
|
+
return String(anotherRaw).toLowerCase().trim().startsWith('y');
|
|
135
|
+
}
|
|
136
|
+
async function promptRedirectUrls(quiet) {
|
|
137
|
+
// Find an available port for the default redirect URL
|
|
138
|
+
const availablePort = await (0, port_1.findAvailablePort)(constants_1.DEFAULT_PORT);
|
|
139
|
+
const defaultRedirect = availablePort == null || availablePort === constants_1.DEFAULT_PORT
|
|
140
|
+
? constants_1.DEFAULT_REDIRECT_URI
|
|
141
|
+
: `http://localhost:${availablePort}/auth/callback`;
|
|
142
|
+
if (!quiet) {
|
|
143
|
+
if (availablePort == null) {
|
|
144
|
+
(0, logger_1.logInfo)(en_1.messages.APP_CREATE_PORT_SCAN_FAILED(constants_1.DEFAULT_PORT));
|
|
164
145
|
}
|
|
165
|
-
else {
|
|
166
|
-
|
|
146
|
+
else if (availablePort !== constants_1.DEFAULT_PORT) {
|
|
147
|
+
(0, logger_1.logInfo)(en_1.messages.APP_CREATE_PORT_IN_USE(constants_1.DEFAULT_PORT, availablePort));
|
|
167
148
|
}
|
|
149
|
+
(0, logger_1.logInfo)(en_1.messages.APP_CREATE_REDIRECT_HINT(constants_1.CLI.APP_START('oauth')));
|
|
150
|
+
}
|
|
151
|
+
const redirectUrls = [];
|
|
152
|
+
const { redirectUrl: firstUrl } = await inquirer_1.default.prompt([
|
|
153
|
+
{
|
|
154
|
+
type: 'input',
|
|
155
|
+
name: 'redirectUrl',
|
|
156
|
+
message: en_1.messages.APP_CREATE_REDIRECT_PROMPT,
|
|
157
|
+
default: defaultRedirect,
|
|
158
|
+
validate: validateRedirectUrl,
|
|
159
|
+
},
|
|
160
|
+
]);
|
|
161
|
+
redirectUrls.push(firstUrl.trim());
|
|
162
|
+
while (await promptAddAnotherRedirect()) {
|
|
163
|
+
const { nextUrl } = await inquirer_1.default.prompt([
|
|
164
|
+
{
|
|
165
|
+
type: 'input',
|
|
166
|
+
name: 'nextUrl',
|
|
167
|
+
message: en_1.messages.APP_CREATE_REDIRECT_PROMPT,
|
|
168
|
+
validate: validateRedirectUrl,
|
|
169
|
+
},
|
|
170
|
+
]);
|
|
171
|
+
redirectUrls.push(nextUrl.trim());
|
|
172
|
+
}
|
|
173
|
+
return redirectUrls;
|
|
174
|
+
}
|
|
175
|
+
// 3. Redirect URI(s) — already validated by collectUrls parser when passed via flag
|
|
176
|
+
async function resolveRedirectUrls(redirectUriFlag, quiet) {
|
|
177
|
+
const flagUrls = redirectUriFlag ?? [];
|
|
178
|
+
if (flagUrls.length > 0) {
|
|
179
|
+
return flagUrls;
|
|
180
|
+
}
|
|
181
|
+
if (process.stdin.isTTY) {
|
|
182
|
+
return promptRedirectUrls(quiet);
|
|
183
|
+
}
|
|
184
|
+
return [constants_1.DEFAULT_REDIRECT_URI];
|
|
185
|
+
}
|
|
186
|
+
// 4. Logo URL (optional) — prompt interactively when no --logo-uri flag.
|
|
187
|
+
// Skipped under --json since the field is optional and --json implies scripting.
|
|
188
|
+
async function resolveLogoUri(logoUriFlag, jsonMode) {
|
|
189
|
+
if (logoUriFlag || !process.stdin.isTTY || jsonMode) {
|
|
190
|
+
return logoUriFlag;
|
|
168
191
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
192
|
+
const { logoUrl } = await inquirer_1.default.prompt([
|
|
193
|
+
{
|
|
194
|
+
type: 'input',
|
|
195
|
+
name: 'logoUrl',
|
|
196
|
+
message: en_1.messages.APP_CREATE_LOGO_PROMPT,
|
|
197
|
+
validate: validateLogoUrl,
|
|
198
|
+
},
|
|
199
|
+
]);
|
|
200
|
+
const trimmed = String(logoUrl ?? '').trim();
|
|
201
|
+
return trimmed || undefined;
|
|
202
|
+
}
|
|
203
|
+
function buildCreatePayload(inputs) {
|
|
204
|
+
return {
|
|
205
|
+
name: inputs.appName,
|
|
206
|
+
public: inputs.distribution === 'public',
|
|
207
|
+
redirect_uris: inputs.redirectUrls,
|
|
208
|
+
scopes: [...constants_1.DEFAULT_SCOPES],
|
|
209
|
+
...(inputs.logoUri ? { logo_uri: inputs.logoUri } : {}),
|
|
175
210
|
};
|
|
176
|
-
|
|
177
|
-
|
|
211
|
+
}
|
|
212
|
+
async function retryCreateWithNewName(inputs) {
|
|
213
|
+
(0, logger_1.logError)(en_1.messages.APP_CREATE_NAME_TAKEN);
|
|
214
|
+
const retry = await inquirer_1.default.prompt([
|
|
215
|
+
{
|
|
216
|
+
type: 'input',
|
|
217
|
+
name: 'name',
|
|
218
|
+
message: en_1.messages.APP_CREATE_NAME_PROMPT,
|
|
219
|
+
validate: validators_1.validateAppName,
|
|
220
|
+
},
|
|
221
|
+
]);
|
|
222
|
+
const retrySpinner = (0, ui_1.createSpinner)('Creating app...');
|
|
178
223
|
try {
|
|
179
|
-
result = await container_1.appService.createApp(
|
|
224
|
+
const result = await container_1.appService.createApp(buildCreatePayload({ ...inputs, appName: retry.name }));
|
|
225
|
+
retrySpinner.stop();
|
|
226
|
+
// Use the retried name for cache, JSON output, display, and scaffold prompt
|
|
227
|
+
return { result, appName: retry.name };
|
|
228
|
+
}
|
|
229
|
+
catch (retryErr) {
|
|
230
|
+
retrySpinner.stop();
|
|
231
|
+
throw retryErr;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// 5. Create the app
|
|
235
|
+
async function createAppWithRetry(inputs, jsonMode) {
|
|
236
|
+
const spinner = (0, ui_1.createSpinner)('Creating app...', { silent: jsonMode });
|
|
237
|
+
try {
|
|
238
|
+
const result = await container_1.appService.createApp(buildCreatePayload(inputs));
|
|
180
239
|
spinner.stop();
|
|
240
|
+
return { result, appName: inputs.appName };
|
|
181
241
|
}
|
|
182
242
|
catch (err) {
|
|
183
243
|
spinner.stop();
|
|
184
244
|
if (err instanceof errors_1.ApiError && err.errorCode === errors_1.ErrorCode.APP_LIMIT_REACHED) {
|
|
185
|
-
if (
|
|
245
|
+
if (jsonMode) {
|
|
186
246
|
(0, json_output_1.jsonOutput)({ error: 'APP_LIMIT_REACHED', message: en_1.messages.APP_CREATE_LIMIT_REACHED });
|
|
187
247
|
}
|
|
188
248
|
throw new errors_1.CliError(en_1.messages.APP_CREATE_LIMIT_REACHED);
|
|
189
249
|
}
|
|
190
250
|
if (err instanceof errors_1.ApiError && err.statusCode === 409) {
|
|
191
|
-
|
|
192
|
-
const retry = await inquirer_1.default.prompt([
|
|
193
|
-
{
|
|
194
|
-
type: 'input',
|
|
195
|
-
name: 'name',
|
|
196
|
-
message: en_1.messages.APP_CREATE_NAME_PROMPT,
|
|
197
|
-
validate: validators_1.validateAppName,
|
|
198
|
-
},
|
|
199
|
-
]);
|
|
200
|
-
const retrySpinner = (0, ui_1.createSpinner)('Creating app...');
|
|
201
|
-
try {
|
|
202
|
-
result = await container_1.appService.createApp({
|
|
203
|
-
name: retry.name,
|
|
204
|
-
public: distribution === 'public',
|
|
205
|
-
redirect_uris: redirectUrls,
|
|
206
|
-
scopes: ['all'],
|
|
207
|
-
});
|
|
208
|
-
retrySpinner.stop();
|
|
209
|
-
// Use the retried name for cache, JSON output, display, and scaffold prompt
|
|
210
|
-
appName = retry.name;
|
|
211
|
-
}
|
|
212
|
-
catch (retryErr) {
|
|
213
|
-
retrySpinner.stop();
|
|
214
|
-
throw retryErr;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
throw err;
|
|
251
|
+
return retryCreateWithNewName(inputs);
|
|
219
252
|
}
|
|
253
|
+
throw err;
|
|
220
254
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
(
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
}
|
|
239
|
-
(0, logger_1.logSuccess)(en_1.messages.APP_CREATE_SUCCESS);
|
|
240
|
-
(0, logger_1.logInfo)(` App name: ${appName}`);
|
|
241
|
-
(0, logger_1.logInfo)(` App ID: ${result.app_id}`);
|
|
242
|
-
(0, logger_1.logInfo)(` Client ID: ${result.client_id}`);
|
|
243
|
-
(0, logger_1.logInfo)(` Client secret: ${en_1.messages.CLIENT_SECRET_HIDDEN_HUMAN}`);
|
|
244
|
-
resultRedirectUris.forEach((uri, i) => {
|
|
245
|
-
(0, logger_1.logInfo)(` Redirect URL ${i + 1}: ${uri}`);
|
|
246
|
-
});
|
|
247
|
-
process.stdout.write('\n');
|
|
248
|
-
// 4. Smart hand-off → scaffold
|
|
255
|
+
}
|
|
256
|
+
function renderCreatedApp(result, appName, logoUri) {
|
|
257
|
+
const boxLines = [
|
|
258
|
+
`App name: ${appName}`,
|
|
259
|
+
`App ID: ${result.app_id}`,
|
|
260
|
+
`Client ID: ${result.client_id}`,
|
|
261
|
+
`Client secret: ${en_1.messages.CLIENT_SECRET_HIDDEN_HUMAN}`,
|
|
262
|
+
...result.redirect_uris.map((uri, i) => `Redirect URL ${i + 1}: ${uri}`),
|
|
263
|
+
...(logoUri ? [`Logo URL: ${logoUri}`] : []),
|
|
264
|
+
`${en_1.messages.APP_CREATE_BOX_SCOPES_LABEL} ${[...constants_1.DEFAULT_SCOPES].join(', ')}`,
|
|
265
|
+
'',
|
|
266
|
+
en_1.messages.APP_CREATE_BOX_SCOPE_HINT,
|
|
267
|
+
];
|
|
268
|
+
(0, ui_1.printBox)(en_1.messages.APP_CREATE_BOX_TITLE, boxLines);
|
|
269
|
+
}
|
|
270
|
+
// Smart hand-off → scaffold
|
|
271
|
+
async function offerScaffoldHandoff(result, appName) {
|
|
249
272
|
const { shouldScaffold } = await inquirer_1.default.prompt([
|
|
250
273
|
{
|
|
251
274
|
type: 'confirm',
|
|
@@ -265,5 +288,38 @@ exports.createCommand = (0, command_handler_1.withCommandHandler)(async (options
|
|
|
265
288
|
constants_1.CLI.APP_LIST,
|
|
266
289
|
]);
|
|
267
290
|
}
|
|
291
|
+
}
|
|
292
|
+
exports.createCommand = (0, command_handler_1.withCommandHandler)(async (options) => {
|
|
293
|
+
const jsonMode = !!options.json;
|
|
294
|
+
if (!(await confirmCreateOverLinkedApp())) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
const inputs = {
|
|
298
|
+
appName: await resolveAppName(options.name),
|
|
299
|
+
distribution: await resolveDistribution(options.distribution),
|
|
300
|
+
redirectUrls: await resolveRedirectUrls(options.redirectUri, jsonMode),
|
|
301
|
+
logoUri: await resolveLogoUri(options.logoUri, jsonMode),
|
|
302
|
+
};
|
|
303
|
+
const { result, appName } = await createAppWithRetry(inputs, jsonMode);
|
|
304
|
+
// Store app credentials locally — client_secret may not be retrievable again
|
|
305
|
+
(0, config_1.saveAppCredentials)(result.app_id, {
|
|
306
|
+
clientId: result.client_id,
|
|
307
|
+
clientSecret: result.client_secret,
|
|
308
|
+
});
|
|
309
|
+
if (appName)
|
|
310
|
+
(0, config_1.saveAppName)(result.app_id, appName);
|
|
311
|
+
if (jsonMode) {
|
|
312
|
+
(0, json_output_1.jsonOutput)({
|
|
313
|
+
appId: result.app_id,
|
|
314
|
+
appName,
|
|
315
|
+
clientId: result.client_id,
|
|
316
|
+
clientSecret: en_1.messages.CLIENT_SECRET_HIDDEN_JSON,
|
|
317
|
+
redirectUri: result.redirect_uris,
|
|
318
|
+
...(inputs.logoUri ? { logoUri: inputs.logoUri } : {}),
|
|
319
|
+
});
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
renderCreatedApp(result, appName, inputs.logoUri);
|
|
323
|
+
await offerScaffoldHandoff(result, appName);
|
|
268
324
|
});
|
|
269
325
|
//# sourceMappingURL=create.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/app/create.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAChC,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/app/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/app/delete.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/app/delete.ts"],"names":[],"mappings":"AA0GA,eAAO,MAAM,aAAa;YACE,MAAM;YAAU,OAAO;WAAS,OAAO;mBAgClE,CAAC"}
|