@getbrevo/cli 2.0.2 → 2.1.0
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 +209 -0
- package/README.md +8 -5
- package/agent-context/AGENTS.md +59 -15
- package/agent-context/SKILL.md +70 -14
- package/dist/{templates → bin}/files/AGENTS.md.tmpl +11 -1
- package/dist/{templates → bin}/files/CLAUDE.md.tmpl +8 -0
- package/dist/{templates → bin}/files/README.md.tmpl +11 -14
- package/dist/bin/files/app-config.json.tmpl +16 -0
- package/dist/{templates → bin}/files/src/oauth/.env.example.tmpl +8 -0
- package/dist/{templates → bin}/files/src/oauth/.env.local.tmpl +2 -0
- package/dist/{templates → bin}/files/src/oauth/handler.js.tmpl +49 -7
- package/dist/{templates → bin}/files/src/oauth/server.js.tmpl +20 -14
- package/dist/{templates → bin}/files/src/oauth/token-store.js.tmpl +19 -0
- package/dist/bin/index.js +660 -235
- package/dist/bin/index.js.map +7 -1
- package/package.json +6 -4
- package/dist/api/client.d.ts +0 -25
- package/dist/api/client.d.ts.map +0 -1
- package/dist/api/client.js +0 -205
- package/dist/api/client.js.map +0 -1
- package/dist/bin/index.d.ts +0 -3
- package/dist/bin/index.d.ts.map +0 -1
- package/dist/commands/app/create.d.ts +0 -8
- package/dist/commands/app/create.d.ts.map +0 -1
- package/dist/commands/app/create.js +0 -325
- package/dist/commands/app/create.js.map +0 -1
- package/dist/commands/app/credentials.d.ts +0 -6
- package/dist/commands/app/credentials.d.ts.map +0 -1
- package/dist/commands/app/credentials.js +0 -114
- package/dist/commands/app/credentials.js.map +0 -1
- package/dist/commands/app/delete.d.ts +0 -6
- package/dist/commands/app/delete.d.ts.map +0 -1
- package/dist/commands/app/delete.js +0 -167
- package/dist/commands/app/delete.js.map +0 -1
- package/dist/commands/app/list.d.ts +0 -4
- package/dist/commands/app/list.d.ts.map +0 -1
- package/dist/commands/app/list.js +0 -71
- package/dist/commands/app/list.js.map +0 -1
- package/dist/commands/app/scaffold.d.ts +0 -5
- package/dist/commands/app/scaffold.d.ts.map +0 -1
- package/dist/commands/app/scaffold.js +0 -213
- package/dist/commands/app/scaffold.js.map +0 -1
- package/dist/commands/app/scopes.d.ts +0 -2
- package/dist/commands/app/scopes.d.ts.map +0 -1
- package/dist/commands/app/scopes.js +0 -81
- package/dist/commands/app/scopes.js.map +0 -1
- package/dist/commands/app/start.d.ts +0 -5
- package/dist/commands/app/start.d.ts.map +0 -1
- package/dist/commands/app/start.js +0 -220
- package/dist/commands/app/start.js.map +0 -1
- package/dist/commands/app/update.d.ts +0 -2
- package/dist/commands/app/update.d.ts.map +0 -1
- package/dist/commands/app/update.js +0 -444
- package/dist/commands/app/update.js.map +0 -1
- package/dist/commands/definitions.d.ts +0 -5
- package/dist/commands/definitions.d.ts.map +0 -1
- package/dist/commands/definitions.js +0 -262
- package/dist/commands/definitions.js.map +0 -1
- package/dist/commands/init.d.ts +0 -2
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -138
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/login.d.ts +0 -6
- package/dist/commands/login.d.ts.map +0 -1
- package/dist/commands/login.js +0 -251
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/logout.d.ts +0 -5
- package/dist/commands/logout.d.ts.map +0 -1
- package/dist/commands/logout.js +0 -54
- package/dist/commands/logout.js.map +0 -1
- package/dist/commands/skill/install.d.ts +0 -4
- package/dist/commands/skill/install.d.ts.map +0 -1
- package/dist/commands/skill/install.js +0 -29
- package/dist/commands/skill/install.js.map +0 -1
- package/dist/commands/skill/uninstall.d.ts +0 -4
- package/dist/commands/skill/uninstall.d.ts.map +0 -1
- package/dist/commands/skill/uninstall.js +0 -23
- package/dist/commands/skill/uninstall.js.map +0 -1
- package/dist/commands/whoami.d.ts +0 -4
- package/dist/commands/whoami.d.ts.map +0 -1
- package/dist/commands/whoami.js +0 -85
- package/dist/commands/whoami.js.map +0 -1
- package/dist/container.d.ts +0 -7
- package/dist/container.d.ts.map +0 -1
- package/dist/container.js +0 -28
- package/dist/container.js.map +0 -1
- package/dist/lang/en.d.ts +0 -162
- package/dist/lang/en.d.ts.map +0 -1
- package/dist/lang/en.js +0 -189
- package/dist/lang/en.js.map +0 -1
- package/dist/lib/abort.d.ts +0 -3
- package/dist/lib/abort.d.ts.map +0 -1
- package/dist/lib/abort.js +0 -30
- package/dist/lib/abort.js.map +0 -1
- package/dist/lib/auth-guard.d.ts +0 -13
- package/dist/lib/auth-guard.d.ts.map +0 -1
- package/dist/lib/auth-guard.js +0 -60
- package/dist/lib/auth-guard.js.map +0 -1
- package/dist/lib/browser.d.ts +0 -2
- package/dist/lib/browser.d.ts.map +0 -1
- package/dist/lib/browser.js +0 -16
- package/dist/lib/browser.js.map +0 -1
- package/dist/lib/cli-version.d.ts +0 -2
- package/dist/lib/cli-version.d.ts.map +0 -1
- package/dist/lib/cli-version.js +0 -59
- package/dist/lib/cli-version.js.map +0 -1
- package/dist/lib/command-handler.d.ts +0 -10
- package/dist/lib/command-handler.d.ts.map +0 -1
- package/dist/lib/command-handler.js +0 -16
- package/dist/lib/command-handler.js.map +0 -1
- package/dist/lib/command-registry.d.ts +0 -28
- package/dist/lib/command-registry.d.ts.map +0 -1
- package/dist/lib/command-registry.js +0 -54
- package/dist/lib/command-registry.js.map +0 -1
- package/dist/lib/config.d.ts +0 -83
- package/dist/lib/config.d.ts.map +0 -1
- package/dist/lib/config.js +0 -430
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/constants.d.ts +0 -48
- package/dist/lib/constants.d.ts.map +0 -1
- package/dist/lib/constants.js +0 -121
- package/dist/lib/constants.js.map +0 -1
- package/dist/lib/errors.d.ts +0 -30
- package/dist/lib/errors.d.ts.map +0 -1
- package/dist/lib/errors.js +0 -66
- package/dist/lib/errors.js.map +0 -1
- package/dist/lib/exit-codes.d.ts +0 -9
- package/dist/lib/exit-codes.d.ts.map +0 -1
- package/dist/lib/exit-codes.js +0 -12
- package/dist/lib/exit-codes.js.map +0 -1
- package/dist/lib/hidden-input.d.ts +0 -2
- package/dist/lib/hidden-input.d.ts.map +0 -1
- package/dist/lib/hidden-input.js +0 -78
- package/dist/lib/hidden-input.js.map +0 -1
- package/dist/lib/json-output.d.ts +0 -6
- package/dist/lib/json-output.d.ts.map +0 -1
- package/dist/lib/json-output.js +0 -11
- package/dist/lib/json-output.js.map +0 -1
- package/dist/lib/logger.d.ts +0 -11
- package/dist/lib/logger.d.ts.map +0 -1
- package/dist/lib/logger.js +0 -110
- package/dist/lib/logger.js.map +0 -1
- package/dist/lib/oauth-freshness.d.ts +0 -30
- package/dist/lib/oauth-freshness.d.ts.map +0 -1
- package/dist/lib/oauth-freshness.js +0 -61
- package/dist/lib/oauth-freshness.js.map +0 -1
- package/dist/lib/port.d.ts +0 -25
- package/dist/lib/port.d.ts.map +0 -1
- package/dist/lib/port.js +0 -103
- package/dist/lib/port.js.map +0 -1
- package/dist/lib/telemetry.d.ts +0 -9
- package/dist/lib/telemetry.d.ts.map +0 -1
- package/dist/lib/telemetry.js +0 -57
- package/dist/lib/telemetry.js.map +0 -1
- package/dist/lib/ui.d.ts +0 -14
- package/dist/lib/ui.d.ts.map +0 -1
- package/dist/lib/ui.js +0 -75
- package/dist/lib/ui.js.map +0 -1
- package/dist/lib/update-notifier.d.ts +0 -37
- package/dist/lib/update-notifier.d.ts.map +0 -1
- package/dist/lib/update-notifier.js +0 -298
- package/dist/lib/update-notifier.js.map +0 -1
- package/dist/lib/validators.d.ts +0 -55
- package/dist/lib/validators.d.ts.map +0 -1
- package/dist/lib/validators.js +0 -166
- package/dist/lib/validators.js.map +0 -1
- package/dist/services/account.d.ts +0 -8
- package/dist/services/account.d.ts.map +0 -1
- package/dist/services/account.js +0 -15
- package/dist/services/account.js.map +0 -1
- package/dist/services/app.d.ts +0 -38
- package/dist/services/app.d.ts.map +0 -1
- package/dist/services/app.js +0 -145
- package/dist/services/app.js.map +0 -1
- package/dist/services/browser-auth.d.ts +0 -15
- package/dist/services/browser-auth.d.ts.map +0 -1
- package/dist/services/browser-auth.js +0 -188
- package/dist/services/browser-auth.js.map +0 -1
- package/dist/services/normalize-app-id.d.ts +0 -12
- package/dist/services/normalize-app-id.d.ts.map +0 -1
- package/dist/services/normalize-app-id.js +0 -38
- package/dist/services/normalize-app-id.js.map +0 -1
- package/dist/services/oauth-metadata.d.ts +0 -7
- package/dist/services/oauth-metadata.d.ts.map +0 -1
- package/dist/services/oauth-metadata.js +0 -43
- package/dist/services/oauth-metadata.js.map +0 -1
- package/dist/services/oauth-refresh.d.ts +0 -14
- package/dist/services/oauth-refresh.d.ts.map +0 -1
- package/dist/services/oauth-refresh.js +0 -70
- package/dist/services/oauth-refresh.js.map +0 -1
- package/dist/services/scopes-html.d.ts +0 -3
- package/dist/services/scopes-html.d.ts.map +0 -1
- package/dist/services/scopes-html.js +0 -516
- package/dist/services/scopes-html.js.map +0 -1
- package/dist/services/scopes-web.d.ts +0 -12
- package/dist/services/scopes-web.d.ts.map +0 -1
- package/dist/services/scopes-web.js +0 -95
- package/dist/services/scopes-web.js.map +0 -1
- package/dist/services/skill.d.ts +0 -48
- package/dist/services/skill.d.ts.map +0 -1
- package/dist/services/skill.js +0 -223
- package/dist/services/skill.js.map +0 -1
- package/dist/skills/index.d.ts +0 -47
- package/dist/skills/index.d.ts.map +0 -1
- package/dist/skills/index.js +0 -61
- package/dist/skills/index.js.map +0 -1
- package/dist/templates/files/app-config.json.tmpl +0 -25
- package/dist/templates/index.d.ts +0 -36
- package/dist/templates/index.d.ts.map +0 -1
- package/dist/templates/index.js +0 -105
- package/dist/templates/index.js.map +0 -1
- package/dist/types.d.ts +0 -32
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
- /package/dist/{templates → bin}/files/gitignore.tmpl +0 -0
- /package/dist/{templates → bin}/files/src/oauth/package.json.tmpl +0 -0
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getbrevo/cli",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"author": "Brevo",
|
|
5
5
|
"description": "Brevo Developer CLI — create, manage apps and OAuth integrations",
|
|
6
6
|
"type": "commonjs",
|
|
7
7
|
"main": "dist/bin/index.js",
|
|
8
|
+
"sideEffects": false,
|
|
8
9
|
"files": [
|
|
9
10
|
"dist",
|
|
10
11
|
"agent-context",
|
|
@@ -19,9 +20,9 @@
|
|
|
19
20
|
"yarn": ">=1.19.1"
|
|
20
21
|
},
|
|
21
22
|
"scripts": {
|
|
22
|
-
"build": "tsc && node
|
|
23
|
-
"
|
|
24
|
-
"dev": "tsc --watch",
|
|
23
|
+
"build": "tsc --noEmit && node scripts/build.mjs",
|
|
24
|
+
"build:preview": "PREVIEW=1 yarn build",
|
|
25
|
+
"dev": "tsc --noEmit --watch",
|
|
25
26
|
"unlink": "yarn unlink",
|
|
26
27
|
"link:dev": "yarn build && yarn link",
|
|
27
28
|
"test": "jest --passWithNoTests",
|
|
@@ -49,6 +50,7 @@
|
|
|
49
50
|
"@types/node": "^20.0.0",
|
|
50
51
|
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
|
51
52
|
"@typescript-eslint/parser": "^7.0.0",
|
|
53
|
+
"esbuild": "~0.28.0",
|
|
52
54
|
"eslint": "^8.57.0",
|
|
53
55
|
"husky": "^9.1.0",
|
|
54
56
|
"jest": "^29.7.0",
|
package/dist/api/client.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
type AuthFailureHandler = () => Promise<void>;
|
|
2
|
-
export interface ApiClientDeps {
|
|
3
|
-
baseUrl: string;
|
|
4
|
-
getAuthHeader: () => Record<string, string> | undefined;
|
|
5
|
-
}
|
|
6
|
-
export declare function parseRetryAfter(header: string | null): number;
|
|
7
|
-
export declare function sanitizeErrorMessage(msg: string): string;
|
|
8
|
-
export declare class ApiClient {
|
|
9
|
-
private readonly deps;
|
|
10
|
-
private onAuthFailure?;
|
|
11
|
-
constructor(deps: ApiClientDeps);
|
|
12
|
-
setOnAuthFailure(handler: AuthFailureHandler): void;
|
|
13
|
-
get<T>(path: string): Promise<T>;
|
|
14
|
-
post<T>(path: string, body?: unknown): Promise<T>;
|
|
15
|
-
patch<T>(path: string, body?: unknown): Promise<T>;
|
|
16
|
-
put<T>(path: string, body?: unknown): Promise<T>;
|
|
17
|
-
delete<T>(path: string): Promise<T>;
|
|
18
|
-
getWithKey<T>(path: string, apiKey: string): Promise<T>;
|
|
19
|
-
getWithBearer<T>(path: string, accessToken: string, tokenType?: string): Promise<T>;
|
|
20
|
-
private buildHeaders;
|
|
21
|
-
private performFetch;
|
|
22
|
-
private request;
|
|
23
|
-
}
|
|
24
|
-
export {};
|
|
25
|
-
//# sourceMappingURL=client.d.ts.map
|
package/dist/api/client.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAcA,KAAK,kBAAkB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CACzD;AAqBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAK7D;AAKD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAcxD;AA2DD,qBAAa,SAAS;IAGR,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,aAAa,CAAC,CAAqB;gBAEd,IAAI,EAAE,aAAa;IAEhD,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAInD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIjD,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhD,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAInC,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IASvD,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,SAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IASrF,OAAO,CAAC,YAAY;YAaN,YAAY;YAmBZ,OAAO;CA0CtB"}
|
package/dist/api/client.js
DELETED
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ApiClient = void 0;
|
|
4
|
-
exports.parseRetryAfter = parseRetryAfter;
|
|
5
|
-
exports.sanitizeErrorMessage = sanitizeErrorMessage;
|
|
6
|
-
const errors_1 = require("../lib/errors");
|
|
7
|
-
const logger_1 = require("../lib/logger");
|
|
8
|
-
const telemetry_1 = require("../lib/telemetry");
|
|
9
|
-
const en_1 = require("../lang/en");
|
|
10
|
-
const MAX_RETRIES = 3;
|
|
11
|
-
const DEFAULT_RETRY_AFTER_SECONDS = 5;
|
|
12
|
-
const MAX_RETRY_AFTER_SECONDS = 300;
|
|
13
|
-
const apiCodeMessages = {
|
|
14
|
-
APP_LIMIT_REACHED: en_1.messages.APP_CREATE_LIMIT_REACHED,
|
|
15
|
-
REGISTRY_ERROR: en_1.messages.ERR_REGISTRY,
|
|
16
|
-
};
|
|
17
|
-
function resolveErrorMessage(apiCode, fallback) {
|
|
18
|
-
if (apiCode && apiCode in apiCodeMessages) {
|
|
19
|
-
return apiCodeMessages[apiCode];
|
|
20
|
-
}
|
|
21
|
-
return fallback;
|
|
22
|
-
}
|
|
23
|
-
// Server-provided `retry-after` is untrusted input. Cap it to avoid indefinite
|
|
24
|
-
// waits from a malicious or misconfigured server, and reject NaN/negatives
|
|
25
|
-
// which would otherwise turn into a 0ms tight retry loop.
|
|
26
|
-
function parseRetryAfter(header) {
|
|
27
|
-
if (!header)
|
|
28
|
-
return DEFAULT_RETRY_AFTER_SECONDS;
|
|
29
|
-
const parsed = Number.parseInt(header, 10);
|
|
30
|
-
if (!Number.isFinite(parsed) || parsed <= 0)
|
|
31
|
-
return DEFAULT_RETRY_AFTER_SECONDS;
|
|
32
|
-
return Math.min(parsed, MAX_RETRY_AFTER_SECONDS);
|
|
33
|
-
}
|
|
34
|
-
// Sanitize untrusted server-provided error strings before they reach the terminal:
|
|
35
|
-
// strip ANSI escape sequences and non-printable control characters that could
|
|
36
|
-
// reposition the cursor, clear the screen, or inject fake prompts.
|
|
37
|
-
function sanitizeErrorMessage(msg) {
|
|
38
|
-
return (msg
|
|
39
|
-
// ANSI CSI/OSC escape sequences
|
|
40
|
-
// eslint-disable-next-line no-control-regex
|
|
41
|
-
.replace(/\x1B\[[0-?]*[ -/]*[@-~]/g, '')
|
|
42
|
-
// eslint-disable-next-line no-control-regex
|
|
43
|
-
.replace(/\x1B\][^\x07]*(?:\x07|\x1B\\)/g, '')
|
|
44
|
-
// C0 + DEL + C1 control chars, keeping \t \n \r.
|
|
45
|
-
// Includes 0x80–0x9F so 8-bit CSI (0x9B) / OSC (0x9D) introducers
|
|
46
|
-
// are stripped alongside their 7-bit ESC-prefixed equivalents.
|
|
47
|
-
// eslint-disable-next-line no-control-regex
|
|
48
|
-
.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]/g, ''));
|
|
49
|
-
}
|
|
50
|
-
// Detect HTML bodies returned by auth gateways (Cloudflare Access, SSO proxies).
|
|
51
|
-
// Matches case-insensitively and runs regardless of response status, since
|
|
52
|
-
// gateways frequently return HTML on 401/403 as well as 2xx.
|
|
53
|
-
function looksLikeHtml(s) {
|
|
54
|
-
const lower = s.toLowerCase();
|
|
55
|
-
return lower.includes('<!doctype html') || lower.includes('<html');
|
|
56
|
-
}
|
|
57
|
-
function parseResponseData(text, status) {
|
|
58
|
-
let data = {};
|
|
59
|
-
try {
|
|
60
|
-
const parsed = text ? JSON.parse(text) : {};
|
|
61
|
-
if (parsed !== null && typeof parsed === 'object') {
|
|
62
|
-
data = parsed;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
catch {
|
|
66
|
-
if (looksLikeHtml(text)) {
|
|
67
|
-
throw new errors_1.ApiError(en_1.messages.ERR_AUTH_GATEWAY, status, errors_1.ErrorCode.AUTH_GATEWAY);
|
|
68
|
-
}
|
|
69
|
-
data = { message: text };
|
|
70
|
-
}
|
|
71
|
-
if (typeof data.message === 'string' && looksLikeHtml(data.message)) {
|
|
72
|
-
throw new errors_1.ApiError(en_1.messages.ERR_AUTH_GATEWAY, status, errors_1.ErrorCode.AUTH_GATEWAY);
|
|
73
|
-
}
|
|
74
|
-
return data;
|
|
75
|
-
}
|
|
76
|
-
function throwResponseError(data, status) {
|
|
77
|
-
const apiCode = typeof data.code === 'string' ? data.code : undefined;
|
|
78
|
-
const rawFallback = typeof data.message === 'string' && data.message
|
|
79
|
-
? data.message
|
|
80
|
-
: `Request failed with status ${status}`;
|
|
81
|
-
const fallback = sanitizeErrorMessage(rawFallback);
|
|
82
|
-
const message = resolveErrorMessage(apiCode, fallback);
|
|
83
|
-
throw new errors_1.ApiError(message, status, mapErrorCode(status, apiCode), apiCode);
|
|
84
|
-
}
|
|
85
|
-
function mapErrorCode(status, apiCode) {
|
|
86
|
-
if (apiCode === 'APP_LIMIT_REACHED')
|
|
87
|
-
return errors_1.ErrorCode.APP_LIMIT_REACHED;
|
|
88
|
-
if (apiCode === 'REGISTRY_ERROR')
|
|
89
|
-
return errors_1.ErrorCode.REGISTRY_ERROR;
|
|
90
|
-
switch (status) {
|
|
91
|
-
case 401:
|
|
92
|
-
return errors_1.ErrorCode.AUTH_INVALID;
|
|
93
|
-
case 403:
|
|
94
|
-
return errors_1.ErrorCode.ACCESS_DENIED;
|
|
95
|
-
case 404:
|
|
96
|
-
return errors_1.ErrorCode.APP_NOT_FOUND;
|
|
97
|
-
case 429:
|
|
98
|
-
return errors_1.ErrorCode.RATE_LIMITED;
|
|
99
|
-
default:
|
|
100
|
-
return undefined;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
class ApiClient {
|
|
104
|
-
deps;
|
|
105
|
-
onAuthFailure;
|
|
106
|
-
constructor(deps) {
|
|
107
|
-
this.deps = deps;
|
|
108
|
-
}
|
|
109
|
-
setOnAuthFailure(handler) {
|
|
110
|
-
this.onAuthFailure = handler;
|
|
111
|
-
}
|
|
112
|
-
get(path) {
|
|
113
|
-
return this.request({ method: 'GET', path });
|
|
114
|
-
}
|
|
115
|
-
post(path, body) {
|
|
116
|
-
return this.request({ method: 'POST', path, body });
|
|
117
|
-
}
|
|
118
|
-
patch(path, body) {
|
|
119
|
-
return this.request({ method: 'PATCH', path, body });
|
|
120
|
-
}
|
|
121
|
-
put(path, body) {
|
|
122
|
-
return this.request({ method: 'PUT', path, body });
|
|
123
|
-
}
|
|
124
|
-
delete(path) {
|
|
125
|
-
return this.request({ method: 'DELETE', path });
|
|
126
|
-
}
|
|
127
|
-
getWithKey(path, apiKey) {
|
|
128
|
-
return this.request({
|
|
129
|
-
method: 'GET',
|
|
130
|
-
path,
|
|
131
|
-
skipAuth: true,
|
|
132
|
-
authHeader: { 'api-key': apiKey },
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
getWithBearer(path, accessToken, tokenType = 'Bearer') {
|
|
136
|
-
return this.request({
|
|
137
|
-
method: 'GET',
|
|
138
|
-
path,
|
|
139
|
-
skipAuth: true,
|
|
140
|
-
authHeader: { Authorization: `${tokenType} ${accessToken}` },
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
buildHeaders(opts) {
|
|
144
|
-
const explicitAuth = opts.authHeader;
|
|
145
|
-
const authHeader = explicitAuth ?? (opts.skipAuth ? undefined : this.deps.getAuthHeader());
|
|
146
|
-
return {
|
|
147
|
-
'Content-Type': 'application/json',
|
|
148
|
-
Accept: 'application/json',
|
|
149
|
-
...(0, telemetry_1.buildCliHeaders)(authHeader),
|
|
150
|
-
...opts.headers,
|
|
151
|
-
...authHeader,
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
async performFetch(url, opts, headers) {
|
|
155
|
-
try {
|
|
156
|
-
return await fetch(url, {
|
|
157
|
-
method: opts.method,
|
|
158
|
-
headers,
|
|
159
|
-
body: opts.body ? JSON.stringify(opts.body) : undefined,
|
|
160
|
-
signal: AbortSignal.timeout(30_000),
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
catch (err) {
|
|
164
|
-
const apiErr = new errors_1.ApiError(en_1.messages.ERR_NETWORK, 0, errors_1.ErrorCode.NETWORK_ERROR);
|
|
165
|
-
apiErr.cause = err;
|
|
166
|
-
throw apiErr;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
async request(opts, isRetry = false, retryCount = 0) {
|
|
170
|
-
const url = `${this.deps.baseUrl}${opts.path}`;
|
|
171
|
-
const headers = this.buildHeaders(opts);
|
|
172
|
-
(0, logger_1.logHttp)(opts.method, opts.path);
|
|
173
|
-
const response = await this.performFetch(url, opts, headers);
|
|
174
|
-
(0, logger_1.logHttpResponse)(response.status, opts.path);
|
|
175
|
-
if (response.status === 401 && !isRetry && !opts.skipAuth) {
|
|
176
|
-
if (this.onAuthFailure) {
|
|
177
|
-
await this.onAuthFailure();
|
|
178
|
-
return this.request(opts, true, retryCount);
|
|
179
|
-
}
|
|
180
|
-
throw new errors_1.ApiError(en_1.messages.AUTH_EXPIRED, 401, errors_1.ErrorCode.AUTH_EXPIRED);
|
|
181
|
-
}
|
|
182
|
-
if (response.status === 429) {
|
|
183
|
-
if (retryCount >= MAX_RETRIES) {
|
|
184
|
-
throw new errors_1.ApiError('Rate limited — max retries exceeded.', 429, errors_1.ErrorCode.RATE_LIMITED);
|
|
185
|
-
}
|
|
186
|
-
const retryAfter = parseRetryAfter(response.headers.get('retry-after'));
|
|
187
|
-
process.stderr.write(` ${en_1.messages.ERR_RATE_LIMITED(retryAfter)}\n`);
|
|
188
|
-
await new Promise((r) => setTimeout(r, retryAfter * 1000));
|
|
189
|
-
return this.request(opts, isRetry, retryCount + 1);
|
|
190
|
-
}
|
|
191
|
-
if (response.status === 502 && retryCount < 1) {
|
|
192
|
-
await new Promise((r) => setTimeout(r, 2000));
|
|
193
|
-
return this.request(opts, isRetry, retryCount + 1);
|
|
194
|
-
}
|
|
195
|
-
const text = await response.text();
|
|
196
|
-
const data = parseResponseData(text, response.status);
|
|
197
|
-
(0, logger_1.logDebug)(`response ${opts.path}`, data);
|
|
198
|
-
if (!response.ok) {
|
|
199
|
-
throwResponseError(data, response.status);
|
|
200
|
-
}
|
|
201
|
-
return data;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
exports.ApiClient = ApiClient;
|
|
205
|
-
//# sourceMappingURL=client.js.map
|
package/dist/api/client.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/index.d.ts
DELETED
package/dist/bin/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/app/create.ts"],"names":[],"mappings":"AAkUA,eAAO,MAAM,aAAa;WAEf,MAAM;mBACE,MAAM;kBACP,MAAM,EAAE;cACZ,MAAM;WACT,OAAO;mBAuCjB,CAAC"}
|
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.createCommand = void 0;
|
|
7
|
-
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
-
const constants_1 = require("../../lib/constants");
|
|
9
|
-
const port_1 = require("../../lib/port");
|
|
10
|
-
const logger_1 = require("../../lib/logger");
|
|
11
|
-
const en_1 = require("../../lang/en");
|
|
12
|
-
const errors_1 = require("../../lib/errors");
|
|
13
|
-
const command_handler_1 = require("../../lib/command-handler");
|
|
14
|
-
const json_output_1 = require("../../lib/json-output");
|
|
15
|
-
const validators_1 = require("../../lib/validators");
|
|
16
|
-
const ui_1 = require("../../lib/ui");
|
|
17
|
-
const config_1 = require("../../lib/config");
|
|
18
|
-
const scaffold_1 = require("./scaffold");
|
|
19
|
-
const container_1 = require("../../container");
|
|
20
|
-
function validateHttpUrl(trimmed, invalidMessage) {
|
|
21
|
-
try {
|
|
22
|
-
const parsed = new URL(trimmed);
|
|
23
|
-
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
|
|
24
|
-
return invalidMessage;
|
|
25
|
-
}
|
|
26
|
-
return true;
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
return invalidMessage;
|
|
30
|
-
}
|
|
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);
|
|
73
|
-
if (nameCheck !== true)
|
|
74
|
-
throw new errors_1.CliError(nameCheck);
|
|
75
|
-
return nameFlag;
|
|
76
|
-
}
|
|
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) {
|
|
89
|
-
const VALID_DISTRIBUTIONS = ['private', 'public'];
|
|
90
|
-
(0, validators_1.validateEnum)(distributionFlag, VALID_DISTRIBUTIONS, '--distribution');
|
|
91
|
-
if (distributionFlag === 'public') {
|
|
92
|
-
throw new errors_1.CliError(en_1.messages.APP_CREATE_PUBLIC_UNAVAILABLE);
|
|
93
|
-
}
|
|
94
|
-
if (distributionFlag) {
|
|
95
|
-
return distributionFlag;
|
|
96
|
-
}
|
|
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: [
|
|
103
|
-
{
|
|
104
|
-
name: 'Private (Used exclusively by your organisation)',
|
|
105
|
-
value: 'private',
|
|
106
|
-
},
|
|
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));
|
|
145
|
-
}
|
|
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));
|
|
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;
|
|
191
|
-
}
|
|
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
|
-
distribution_type: inputs.distribution,
|
|
207
|
-
redirect_uris: inputs.redirectUrls,
|
|
208
|
-
scopes: [...constants_1.DEFAULT_SCOPES],
|
|
209
|
-
...(inputs.logoUri ? { logo_uri: inputs.logoUri } : {}),
|
|
210
|
-
};
|
|
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...');
|
|
223
|
-
try {
|
|
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));
|
|
239
|
-
spinner.stop();
|
|
240
|
-
return { result, appName: inputs.appName };
|
|
241
|
-
}
|
|
242
|
-
catch (err) {
|
|
243
|
-
spinner.stop();
|
|
244
|
-
if (err instanceof errors_1.ApiError && err.errorCode === errors_1.ErrorCode.APP_LIMIT_REACHED) {
|
|
245
|
-
if (jsonMode) {
|
|
246
|
-
(0, json_output_1.jsonOutput)({ error: 'APP_LIMIT_REACHED', message: en_1.messages.APP_CREATE_LIMIT_REACHED });
|
|
247
|
-
}
|
|
248
|
-
throw new errors_1.CliError(en_1.messages.APP_CREATE_LIMIT_REACHED);
|
|
249
|
-
}
|
|
250
|
-
if (err instanceof errors_1.ApiError && err.statusCode === 409) {
|
|
251
|
-
return retryCreateWithNewName(inputs);
|
|
252
|
-
}
|
|
253
|
-
throw err;
|
|
254
|
-
}
|
|
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) {
|
|
272
|
-
const { shouldScaffold } = await inquirer_1.default.prompt([
|
|
273
|
-
{
|
|
274
|
-
type: 'confirm',
|
|
275
|
-
name: 'shouldScaffold',
|
|
276
|
-
message: en_1.messages.APP_CREATE_SCAFFOLD_PROMPT,
|
|
277
|
-
default: true,
|
|
278
|
-
},
|
|
279
|
-
]);
|
|
280
|
-
if (shouldScaffold) {
|
|
281
|
-
(0, logger_1.logInfo)(` ↳ Scaffolding "${appName}"...\n`);
|
|
282
|
-
await (0, scaffold_1.scaffoldCommand)({ appId: result.app_id });
|
|
283
|
-
}
|
|
284
|
-
else {
|
|
285
|
-
(0, ui_1.printBox)("What's next?", [
|
|
286
|
-
constants_1.CLI.APP_SCAFFOLD(result.app_id),
|
|
287
|
-
constants_1.CLI.APP_CREDENTIALS(result.app_id),
|
|
288
|
-
constants_1.CLI.APP_LIST,
|
|
289
|
-
]);
|
|
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);
|
|
324
|
-
});
|
|
325
|
-
//# sourceMappingURL=create.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/app/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/commands/app/credentials.ts"],"names":[],"mappings":"AAiGA,eAAO,MAAM,kBAAkB;YACH,MAAM;mBAAiB,OAAO;WAAS,OAAO;mBAmCzE,CAAC"}
|