@getbrevo/cli 2.0.1 → 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.
Files changed (213) hide show
  1. package/CHANGELOG.md +221 -0
  2. package/README.md +8 -5
  3. package/agent-context/AGENTS.md +59 -15
  4. package/agent-context/SKILL.md +70 -14
  5. package/dist/{templates → bin}/files/AGENTS.md.tmpl +11 -1
  6. package/dist/{templates → bin}/files/CLAUDE.md.tmpl +8 -0
  7. package/dist/{templates → bin}/files/README.md.tmpl +11 -14
  8. package/dist/bin/files/app-config.json.tmpl +16 -0
  9. package/dist/{templates → bin}/files/src/oauth/.env.example.tmpl +8 -0
  10. package/dist/{templates → bin}/files/src/oauth/.env.local.tmpl +2 -0
  11. package/dist/{templates → bin}/files/src/oauth/handler.js.tmpl +49 -7
  12. package/dist/{templates → bin}/files/src/oauth/server.js.tmpl +20 -14
  13. package/dist/{templates → bin}/files/src/oauth/token-store.js.tmpl +19 -0
  14. package/dist/bin/index.js +660 -221
  15. package/dist/bin/index.js.map +7 -1
  16. package/package.json +6 -4
  17. package/dist/api/client.d.ts +0 -25
  18. package/dist/api/client.d.ts.map +0 -1
  19. package/dist/api/client.js +0 -205
  20. package/dist/api/client.js.map +0 -1
  21. package/dist/bin/index.d.ts +0 -3
  22. package/dist/bin/index.d.ts.map +0 -1
  23. package/dist/commands/app/create.d.ts +0 -8
  24. package/dist/commands/app/create.d.ts.map +0 -1
  25. package/dist/commands/app/create.js +0 -325
  26. package/dist/commands/app/create.js.map +0 -1
  27. package/dist/commands/app/credentials.d.ts +0 -6
  28. package/dist/commands/app/credentials.d.ts.map +0 -1
  29. package/dist/commands/app/credentials.js +0 -114
  30. package/dist/commands/app/credentials.js.map +0 -1
  31. package/dist/commands/app/delete.d.ts +0 -6
  32. package/dist/commands/app/delete.d.ts.map +0 -1
  33. package/dist/commands/app/delete.js +0 -167
  34. package/dist/commands/app/delete.js.map +0 -1
  35. package/dist/commands/app/list.d.ts +0 -4
  36. package/dist/commands/app/list.d.ts.map +0 -1
  37. package/dist/commands/app/list.js +0 -71
  38. package/dist/commands/app/list.js.map +0 -1
  39. package/dist/commands/app/scaffold.d.ts +0 -5
  40. package/dist/commands/app/scaffold.d.ts.map +0 -1
  41. package/dist/commands/app/scaffold.js +0 -213
  42. package/dist/commands/app/scaffold.js.map +0 -1
  43. package/dist/commands/app/scopes.d.ts +0 -2
  44. package/dist/commands/app/scopes.d.ts.map +0 -1
  45. package/dist/commands/app/scopes.js +0 -81
  46. package/dist/commands/app/scopes.js.map +0 -1
  47. package/dist/commands/app/start.d.ts +0 -5
  48. package/dist/commands/app/start.d.ts.map +0 -1
  49. package/dist/commands/app/start.js +0 -220
  50. package/dist/commands/app/start.js.map +0 -1
  51. package/dist/commands/app/update.d.ts +0 -2
  52. package/dist/commands/app/update.d.ts.map +0 -1
  53. package/dist/commands/app/update.js +0 -444
  54. package/dist/commands/app/update.js.map +0 -1
  55. package/dist/commands/definitions.d.ts +0 -5
  56. package/dist/commands/definitions.d.ts.map +0 -1
  57. package/dist/commands/definitions.js +0 -262
  58. package/dist/commands/definitions.js.map +0 -1
  59. package/dist/commands/init.d.ts +0 -2
  60. package/dist/commands/init.d.ts.map +0 -1
  61. package/dist/commands/init.js +0 -106
  62. package/dist/commands/init.js.map +0 -1
  63. package/dist/commands/login.d.ts +0 -6
  64. package/dist/commands/login.d.ts.map +0 -1
  65. package/dist/commands/login.js +0 -251
  66. package/dist/commands/login.js.map +0 -1
  67. package/dist/commands/logout.d.ts +0 -5
  68. package/dist/commands/logout.d.ts.map +0 -1
  69. package/dist/commands/logout.js +0 -54
  70. package/dist/commands/logout.js.map +0 -1
  71. package/dist/commands/skill/install.d.ts +0 -4
  72. package/dist/commands/skill/install.d.ts.map +0 -1
  73. package/dist/commands/skill/install.js +0 -29
  74. package/dist/commands/skill/install.js.map +0 -1
  75. package/dist/commands/skill/uninstall.d.ts +0 -4
  76. package/dist/commands/skill/uninstall.d.ts.map +0 -1
  77. package/dist/commands/skill/uninstall.js +0 -23
  78. package/dist/commands/skill/uninstall.js.map +0 -1
  79. package/dist/commands/whoami.d.ts +0 -4
  80. package/dist/commands/whoami.d.ts.map +0 -1
  81. package/dist/commands/whoami.js +0 -85
  82. package/dist/commands/whoami.js.map +0 -1
  83. package/dist/container.d.ts +0 -7
  84. package/dist/container.d.ts.map +0 -1
  85. package/dist/container.js +0 -28
  86. package/dist/container.js.map +0 -1
  87. package/dist/lang/en.d.ts +0 -161
  88. package/dist/lang/en.d.ts.map +0 -1
  89. package/dist/lang/en.js +0 -188
  90. package/dist/lang/en.js.map +0 -1
  91. package/dist/lib/abort.d.ts +0 -3
  92. package/dist/lib/abort.d.ts.map +0 -1
  93. package/dist/lib/abort.js +0 -30
  94. package/dist/lib/abort.js.map +0 -1
  95. package/dist/lib/auth-guard.d.ts +0 -3
  96. package/dist/lib/auth-guard.d.ts.map +0 -1
  97. package/dist/lib/auth-guard.js +0 -47
  98. package/dist/lib/auth-guard.js.map +0 -1
  99. package/dist/lib/browser.d.ts +0 -2
  100. package/dist/lib/browser.d.ts.map +0 -1
  101. package/dist/lib/browser.js +0 -16
  102. package/dist/lib/browser.js.map +0 -1
  103. package/dist/lib/cli-version.d.ts +0 -2
  104. package/dist/lib/cli-version.d.ts.map +0 -1
  105. package/dist/lib/cli-version.js +0 -59
  106. package/dist/lib/cli-version.js.map +0 -1
  107. package/dist/lib/command-handler.d.ts +0 -10
  108. package/dist/lib/command-handler.d.ts.map +0 -1
  109. package/dist/lib/command-handler.js +0 -16
  110. package/dist/lib/command-handler.js.map +0 -1
  111. package/dist/lib/command-registry.d.ts +0 -28
  112. package/dist/lib/command-registry.d.ts.map +0 -1
  113. package/dist/lib/command-registry.js +0 -54
  114. package/dist/lib/command-registry.js.map +0 -1
  115. package/dist/lib/config.d.ts +0 -83
  116. package/dist/lib/config.d.ts.map +0 -1
  117. package/dist/lib/config.js +0 -430
  118. package/dist/lib/config.js.map +0 -1
  119. package/dist/lib/constants.d.ts +0 -48
  120. package/dist/lib/constants.d.ts.map +0 -1
  121. package/dist/lib/constants.js +0 -121
  122. package/dist/lib/constants.js.map +0 -1
  123. package/dist/lib/errors.d.ts +0 -30
  124. package/dist/lib/errors.d.ts.map +0 -1
  125. package/dist/lib/errors.js +0 -66
  126. package/dist/lib/errors.js.map +0 -1
  127. package/dist/lib/exit-codes.d.ts +0 -9
  128. package/dist/lib/exit-codes.d.ts.map +0 -1
  129. package/dist/lib/exit-codes.js +0 -12
  130. package/dist/lib/exit-codes.js.map +0 -1
  131. package/dist/lib/hidden-input.d.ts +0 -2
  132. package/dist/lib/hidden-input.d.ts.map +0 -1
  133. package/dist/lib/hidden-input.js +0 -78
  134. package/dist/lib/hidden-input.js.map +0 -1
  135. package/dist/lib/json-output.d.ts +0 -6
  136. package/dist/lib/json-output.d.ts.map +0 -1
  137. package/dist/lib/json-output.js +0 -11
  138. package/dist/lib/json-output.js.map +0 -1
  139. package/dist/lib/logger.d.ts +0 -11
  140. package/dist/lib/logger.d.ts.map +0 -1
  141. package/dist/lib/logger.js +0 -110
  142. package/dist/lib/logger.js.map +0 -1
  143. package/dist/lib/port.d.ts +0 -25
  144. package/dist/lib/port.d.ts.map +0 -1
  145. package/dist/lib/port.js +0 -103
  146. package/dist/lib/port.js.map +0 -1
  147. package/dist/lib/telemetry.d.ts +0 -9
  148. package/dist/lib/telemetry.d.ts.map +0 -1
  149. package/dist/lib/telemetry.js +0 -57
  150. package/dist/lib/telemetry.js.map +0 -1
  151. package/dist/lib/ui.d.ts +0 -14
  152. package/dist/lib/ui.d.ts.map +0 -1
  153. package/dist/lib/ui.js +0 -75
  154. package/dist/lib/ui.js.map +0 -1
  155. package/dist/lib/update-notifier.d.ts +0 -37
  156. package/dist/lib/update-notifier.d.ts.map +0 -1
  157. package/dist/lib/update-notifier.js +0 -298
  158. package/dist/lib/update-notifier.js.map +0 -1
  159. package/dist/lib/validators.d.ts +0 -55
  160. package/dist/lib/validators.d.ts.map +0 -1
  161. package/dist/lib/validators.js +0 -166
  162. package/dist/lib/validators.js.map +0 -1
  163. package/dist/services/account.d.ts +0 -8
  164. package/dist/services/account.d.ts.map +0 -1
  165. package/dist/services/account.js +0 -15
  166. package/dist/services/account.js.map +0 -1
  167. package/dist/services/app.d.ts +0 -38
  168. package/dist/services/app.d.ts.map +0 -1
  169. package/dist/services/app.js +0 -145
  170. package/dist/services/app.js.map +0 -1
  171. package/dist/services/browser-auth.d.ts +0 -15
  172. package/dist/services/browser-auth.d.ts.map +0 -1
  173. package/dist/services/browser-auth.js +0 -188
  174. package/dist/services/browser-auth.js.map +0 -1
  175. package/dist/services/normalize-app-id.d.ts +0 -12
  176. package/dist/services/normalize-app-id.d.ts.map +0 -1
  177. package/dist/services/normalize-app-id.js +0 -38
  178. package/dist/services/normalize-app-id.js.map +0 -1
  179. package/dist/services/oauth-metadata.d.ts +0 -7
  180. package/dist/services/oauth-metadata.d.ts.map +0 -1
  181. package/dist/services/oauth-metadata.js +0 -43
  182. package/dist/services/oauth-metadata.js.map +0 -1
  183. package/dist/services/oauth-refresh.d.ts +0 -14
  184. package/dist/services/oauth-refresh.d.ts.map +0 -1
  185. package/dist/services/oauth-refresh.js +0 -70
  186. package/dist/services/oauth-refresh.js.map +0 -1
  187. package/dist/services/scopes-html.d.ts +0 -3
  188. package/dist/services/scopes-html.d.ts.map +0 -1
  189. package/dist/services/scopes-html.js +0 -516
  190. package/dist/services/scopes-html.js.map +0 -1
  191. package/dist/services/scopes-web.d.ts +0 -12
  192. package/dist/services/scopes-web.d.ts.map +0 -1
  193. package/dist/services/scopes-web.js +0 -95
  194. package/dist/services/scopes-web.js.map +0 -1
  195. package/dist/services/skill.d.ts +0 -48
  196. package/dist/services/skill.d.ts.map +0 -1
  197. package/dist/services/skill.js +0 -223
  198. package/dist/services/skill.js.map +0 -1
  199. package/dist/skills/index.d.ts +0 -47
  200. package/dist/skills/index.d.ts.map +0 -1
  201. package/dist/skills/index.js +0 -61
  202. package/dist/skills/index.js.map +0 -1
  203. package/dist/templates/files/app-config.json.tmpl +0 -25
  204. package/dist/templates/index.d.ts +0 -36
  205. package/dist/templates/index.d.ts.map +0 -1
  206. package/dist/templates/index.js +0 -105
  207. package/dist/templates/index.js.map +0 -1
  208. package/dist/types.d.ts +0 -32
  209. package/dist/types.d.ts.map +0 -1
  210. package/dist/types.js +0 -3
  211. package/dist/types.js.map +0 -1
  212. /package/dist/{templates → bin}/files/gitignore.tmpl +0 -0
  213. /package/dist/{templates → bin}/files/src/oauth/package.json.tmpl +0 -0
@@ -1,114 +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.credentialsCommand = void 0;
7
- const inquirer_1 = __importDefault(require("inquirer"));
8
- const logger_1 = require("../../lib/logger");
9
- const en_1 = require("../../lang/en");
10
- const errors_1 = require("../../lib/errors");
11
- const command_handler_1 = require("../../lib/command-handler");
12
- const json_output_1 = require("../../lib/json-output");
13
- const container_1 = require("../../container");
14
- const ui_1 = require("../../lib/ui");
15
- const config_1 = require("../../lib/config");
16
- async function resolveSecretReveal(revealRequested, app) {
17
- if (!revealRequested) {
18
- return { display: en_1.messages.CLIENT_SECRET_HIDDEN_HUMAN, revealed: false };
19
- }
20
- if (!process.stdin.isTTY) {
21
- (0, logger_1.logInfo)(' Secret not revealed in non-interactive mode. Use --reveal-secret in a terminal.');
22
- return { display: en_1.messages.CLIENT_SECRET_HIDDEN_HUMAN, revealed: false };
23
- }
24
- const { confirmed } = await inquirer_1.default.prompt([
25
- {
26
- type: 'confirm',
27
- name: 'confirmed',
28
- message: en_1.messages.APP_CREDENTIALS_REVEAL_CONFIRM,
29
- default: false,
30
- },
31
- ]);
32
- if (confirmed) {
33
- return {
34
- display: app.client_secret || en_1.messages.CLIENT_SECRET_NOT_AVAILABLE,
35
- revealed: true,
36
- };
37
- }
38
- return { display: en_1.messages.CLIENT_SECRET_HIDDEN_HUMAN, revealed: false };
39
- }
40
- function printCredentialsHuman(app, appId, secretDisplay) {
41
- (0, logger_1.logInfo)(`\n App name: ${app.name || '—'}`);
42
- (0, logger_1.logInfo)(` App ID: ${appId}`);
43
- (0, logger_1.logInfo)(` Client ID: ${app.client_id}`);
44
- (0, logger_1.logInfo)(` Client secret: ${secretDisplay}`);
45
- if (app.scopes && app.scopes.length > 0) {
46
- (0, logger_1.logInfo)(` Scopes: ${app.scopes.join(', ')}`);
47
- }
48
- else {
49
- (0, logger_1.logInfo)(` Scopes: (none)`);
50
- }
51
- if (app.redirect_uris.length > 0) {
52
- app.redirect_uris.forEach((uri, i) => {
53
- (0, logger_1.logInfo)(` Redirect URL ${i + 1}: ${uri}`);
54
- });
55
- }
56
- else {
57
- (0, logger_1.logInfo)(` Redirect URLs: (none)`);
58
- }
59
- process.stdout.write('\n');
60
- }
61
- async function reconcileLocalCache(appId, app, diffs, jsonMode) {
62
- if (diffs.length === 0) {
63
- // First-time save (no local cache yet) is silent
64
- container_1.appService.syncAppCredentials(appId, app);
65
- return;
66
- }
67
- (0, logger_1.logWarn)(`Local credentials for app ${appId} differ from server (${diffs.join(', ')}).`);
68
- if (!process.stdin.isTTY || jsonMode) {
69
- container_1.appService.syncAppCredentials(appId, app);
70
- return;
71
- }
72
- const { shouldUpdate } = await inquirer_1.default.prompt([
73
- {
74
- type: 'confirm',
75
- name: 'shouldUpdate',
76
- message: 'Update local credentials to match the server?',
77
- default: true,
78
- },
79
- ]);
80
- if (shouldUpdate) {
81
- container_1.appService.syncAppCredentials(appId, app);
82
- (0, logger_1.logInfo)(' Local credentials updated.\n');
83
- }
84
- }
85
- exports.credentialsCommand = (0, command_handler_1.withCommandHandler)(async (options) => {
86
- const appId = options.appId ?? (await container_1.appService.pickApp(en_1.messages.APP_CREDENTIALS_SELECT));
87
- const spinner = (0, ui_1.createSpinner)('Fetching credentials...', { silent: options.json });
88
- const result = await container_1.appService.resolveAppCredentials(appId);
89
- spinner.stop();
90
- if (!result) {
91
- throw new errors_1.CliError(`App ${appId} not found.`);
92
- }
93
- const { app, diffs } = result;
94
- if (app.name)
95
- (0, config_1.saveAppName)(appId, app.name);
96
- const { display: secretDisplay, revealed: revealConfirmed } = await resolveSecretReveal(options.revealSecret, app);
97
- if (options.json) {
98
- (0, json_output_1.jsonOutput)({
99
- appName: app.name || null,
100
- appId,
101
- clientId: app.client_id,
102
- clientSecret: revealConfirmed
103
- ? (app.client_secret ?? en_1.messages.CLIENT_SECRET_NOT_AVAILABLE)
104
- : en_1.messages.CLIENT_SECRET_HIDDEN_JSON,
105
- scopes: app.scopes || [],
106
- redirectUris: app.redirect_uris ?? [],
107
- });
108
- }
109
- else {
110
- printCredentialsHuman(app, appId, secretDisplay);
111
- }
112
- await reconcileLocalCache(appId, app, diffs, options.json);
113
- });
114
- //# sourceMappingURL=credentials.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/commands/app/credentials.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- export declare const deleteCommand: (opts: {
2
- appId?: string;
3
- force?: boolean;
4
- json?: boolean;
5
- }) => Promise<void>;
6
- //# sourceMappingURL=delete.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,167 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.deleteCommand = void 0;
40
- const fs = __importStar(require("node:fs"));
41
- const path = __importStar(require("node:path"));
42
- const os = __importStar(require("node:os"));
43
- const inquirer_1 = __importDefault(require("inquirer"));
44
- const logger_1 = require("../../lib/logger");
45
- const en_1 = require("../../lang/en");
46
- const errors_1 = require("../../lib/errors");
47
- const command_handler_1 = require("../../lib/command-handler");
48
- const json_output_1 = require("../../lib/json-output");
49
- const container_1 = require("../../container");
50
- const ui_1 = require("../../lib/ui");
51
- const config_1 = require("../../lib/config");
52
- function isSafeToDelete(dir) {
53
- const resolved = path.resolve(dir);
54
- const home = os.homedir();
55
- const { root } = path.parse(resolved);
56
- // Never delete filesystem root or home directory
57
- if (resolved === root || resolved === home)
58
- return false;
59
- // Never delete direct children of root (e.g. /usr, /etc, C:\Windows)
60
- if (path.dirname(resolved) === root)
61
- return false;
62
- // Must contain app-config.json (scaffold marker)
63
- if (!fs.existsSync(path.join(resolved, 'app-config.json')))
64
- return false;
65
- return true;
66
- }
67
- // We need the full apps list to get appLabel for the confirmation prompt
68
- async function promptAppSelection() {
69
- const listSpinner = (0, ui_1.createSpinner)('Fetching apps...');
70
- let apps;
71
- try {
72
- apps = await container_1.appService.fetchAppsList();
73
- }
74
- finally {
75
- listSpinner.stop();
76
- }
77
- if (apps.length === 0) {
78
- (0, logger_1.logInfo)(`\n ${en_1.messages.APP_LIST_EMPTY}\n`);
79
- throw new errors_1.CliError(en_1.messages.APP_LIST_EMPTY);
80
- }
81
- const { selectedApp } = await inquirer_1.default.prompt([
82
- {
83
- type: 'rawlist',
84
- name: 'selectedApp',
85
- message: 'Select an app to delete:',
86
- choices: apps.map((a) => ({
87
- name: `${a.name || 'App ' + a.app_id} (App ID: ${a.app_id}, Client ID: ${a.client_id})`,
88
- value: a.app_id,
89
- })),
90
- },
91
- ]);
92
- const appId = selectedApp;
93
- const matched = apps.find((a) => a.app_id === appId);
94
- return { appId, appLabel: matched?.name || matched?.client_id || appId };
95
- }
96
- async function confirmDeletion(appLabel, appId) {
97
- const { confirmed } = await inquirer_1.default.prompt([
98
- {
99
- type: 'confirm',
100
- name: 'confirmed',
101
- message: en_1.messages.APP_DELETE_CONFIRM(appLabel, appId),
102
- default: false,
103
- },
104
- ]);
105
- if (!confirmed) {
106
- (0, logger_1.logInfo)(`\n ${en_1.messages.APP_DELETE_CANCELLED}\n`);
107
- return false;
108
- }
109
- return true;
110
- }
111
- function removeProjectFolder(cwd) {
112
- if (!isSafeToDelete(cwd)) {
113
- (0, logger_1.logWarn)(en_1.messages.APP_DELETE_FOLDER_FAILED(cwd));
114
- return;
115
- }
116
- try {
117
- fs.rmSync(cwd, { recursive: true, force: true });
118
- (0, logger_1.logSuccess)(en_1.messages.APP_DELETE_FOLDER_SUCCESS(cwd));
119
- }
120
- catch {
121
- (0, logger_1.logWarn)(en_1.messages.APP_DELETE_FOLDER_FAILED(cwd));
122
- }
123
- }
124
- // Offer to delete the local scaffolded project folder if it matches the deleted app
125
- async function offerLocalFolderCleanup(appId) {
126
- const projectConfig = (0, config_1.readProjectConfig)();
127
- if (projectConfig?.appId !== appId)
128
- return;
129
- const cwd = process.cwd();
130
- const { deleteFolder } = await inquirer_1.default.prompt([
131
- {
132
- type: 'confirm',
133
- name: 'deleteFolder',
134
- message: en_1.messages.APP_DELETE_FOLDER_CONFIRM(cwd),
135
- default: false,
136
- },
137
- ]);
138
- if (deleteFolder) {
139
- removeProjectFolder(cwd);
140
- }
141
- }
142
- exports.deleteCommand = (0, command_handler_1.withCommandHandler)(async (options) => {
143
- let appId = options.appId;
144
- let appLabel = '';
145
- if (!appId) {
146
- const selection = await promptAppSelection();
147
- appId = selection.appId;
148
- appLabel = selection.appLabel;
149
- }
150
- if (!options.force && !(await confirmDeletion(appLabel || appId, appId))) {
151
- return;
152
- }
153
- const deleteSpinner = (0, ui_1.createSpinner)('Deleting app...', { silent: options.json });
154
- await container_1.appService.deleteApp(appId);
155
- deleteSpinner.stop();
156
- (0, config_1.deleteAppName)(appId);
157
- (0, config_1.deleteAppCredentials)(appId);
158
- if (options.json) {
159
- (0, json_output_1.jsonOutput)({ deleted: true, appId });
160
- return;
161
- }
162
- (0, logger_1.logSuccess)(en_1.messages.APP_DELETE_SUCCESS(appId));
163
- if (!options.force) {
164
- await offerLocalFolderCleanup(appId);
165
- }
166
- });
167
- //# sourceMappingURL=delete.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/app/delete.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA8B;AAC9B,gDAAkC;AAClC,4CAA8B;AAC9B,wDAAgC;AAChC,6CAAgE;AAChE,sCAAyC;AACzC,6CAA4C;AAC5C,+DAA+D;AAC/D,uDAAmD;AACnD,+CAA6C;AAC7C,qCAA6C;AAC7C,6CAA0F;AAE1F,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtC,iDAAiD;IACjD,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACzD,qEAAqE;IACrE,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAClD,iDAAiD;IACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACzE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yEAAyE;AACzE,KAAK,UAAU,kBAAkB;IAC/B,MAAM,WAAW,GAAG,IAAA,kBAAa,EAAC,kBAAkB,CAAC,CAAC;IACtD,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,sBAAU,CAAC,aAAa,EAAE,CAAC;IAC1C,CAAC;YAAS,CAAC;QACT,WAAW,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,IAAA,gBAAO,EAAC,OAAO,aAAQ,CAAC,cAAc,IAAI,CAAC,CAAC;QAC5C,MAAM,IAAI,iBAAQ,CAAC,aAAQ,CAAC,cAAc,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QAC5C;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,0BAA0B;YACnC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxB,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,cAAc,CAAC,CAAC,MAAM,gBAAgB,CAAC,CAAC,SAAS,GAAG;gBACxF,KAAK,EAAE,CAAC,CAAC,MAAM;aAChB,CAAC,CAAC;SACJ;KACF,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,WAAqB,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;IACrD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,SAAS,IAAI,KAAK,EAAE,CAAC;AAC3E,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,KAAa;IAC5D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QAC1C;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,aAAQ,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC;YACrD,OAAO,EAAE,KAAK;SACf;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAA,gBAAO,EAAC,OAAO,aAAQ,CAAC,oBAAoB,IAAI,CAAC,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW;IACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,IAAA,gBAAO,EAAC,aAAQ,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,IAAA,mBAAU,EAAC,aAAQ,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,IAAA,gBAAO,EAAC,aAAQ,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,KAAK,UAAU,uBAAuB,CAAC,KAAa;IAClD,MAAM,aAAa,GAAG,IAAA,0BAAiB,GAAE,CAAC;IAC1C,IAAI,aAAa,EAAE,KAAK,KAAK,KAAK;QAAE,OAAO;IAE3C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QAC7C;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,aAAQ,CAAC,yBAAyB,CAAC,GAAG,CAAC;YAChD,OAAO,EAAE,KAAK;SACf;KACF,CAAC,CAAC;IAEH,IAAI,YAAY,EAAE,CAAC;QACjB,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAEY,QAAA,aAAa,GAAG,IAAA,oCAAkB,EAC7C,KAAK,EAAE,OAA4D,EAAiB,EAAE;IACpF,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC1B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,SAAS,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAC7C,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QACxB,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,QAAQ,IAAI,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QACzE,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,IAAA,kBAAa,EAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACjF,MAAM,sBAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClC,aAAa,CAAC,IAAI,EAAE,CAAC;IAErB,IAAA,sBAAa,EAAC,KAAK,CAAC,CAAC;IACrB,IAAA,6BAAoB,EAAC,KAAK,CAAC,CAAC;IAE5B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,IAAA,wBAAU,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IAED,IAAA,mBAAU,EAAC,aAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAE/C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;AACH,CAAC,CACF,CAAC"}
@@ -1,4 +0,0 @@
1
- export declare const listCommand: (opts: {
2
- json?: boolean;
3
- }) => Promise<void>;
4
- //# sourceMappingURL=list.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/app/list.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,WAAW;WACG,OAAO;mBA+DjC,CAAC"}
@@ -1,71 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.listCommand = void 0;
4
- const logger_1 = require("../../lib/logger");
5
- const en_1 = require("../../lang/en");
6
- const container_1 = require("../../container");
7
- const command_handler_1 = require("../../lib/command-handler");
8
- const json_output_1 = require("../../lib/json-output");
9
- const ui_1 = require("../../lib/ui");
10
- const config_1 = require("../../lib/config");
11
- const validators_1 = require("../../lib/validators");
12
- exports.listCommand = (0, command_handler_1.withCommandHandler)(async (options) => {
13
- const spinner = (0, ui_1.createSpinner)('Fetching apps...', { silent: options.json });
14
- let apps;
15
- try {
16
- apps = await container_1.appService.fetchAppsList();
17
- }
18
- finally {
19
- spinner.stop();
20
- }
21
- // The app-store list endpoint can lag behind writes (eventual consistency),
22
- // so a name set via `brevo app update` may not appear here for a while.
23
- // Merge locally cached names to mask the propagation delay. Once the server
24
- // catches up (cache equals server), drop the entry so any subsequent
25
- // out-of-band rename (e.g. dashboard) is visible on the next list.
26
- const cachedNames = (0, config_1.getAppNames)();
27
- apps = (apps || []).map((app) => {
28
- const cached = cachedNames[app.app_id];
29
- if (!cached)
30
- return app;
31
- if (cached === app.name) {
32
- (0, config_1.deleteAppName)(app.app_id);
33
- return app;
34
- }
35
- return { ...app, name: cached };
36
- });
37
- if (options.json) {
38
- // `legacy_all_scope: true` is the machine-readable deprecation signal
39
- // for scripts/agents — only present on affected apps (BEX-214).
40
- const safeApps = apps.map(({ client_secret: _secret, ...rest }) => ({
41
- ...rest,
42
- ...((0, validators_1.containsLegacyAllScope)(rest.scopes) ? { legacy_all_scope: true } : {}),
43
- }));
44
- (0, json_output_1.jsonOutput)(safeApps);
45
- return;
46
- }
47
- if (!apps || apps.length === 0) {
48
- (0, logger_1.logInfo)(`\n ${en_1.messages.APP_LIST_EMPTY}\n`);
49
- return;
50
- }
51
- (0, logger_1.logInfo)(`\n ${en_1.messages.APP_LIST_HEADER}\n`);
52
- for (const app of apps) {
53
- const name = app.name || '—';
54
- process.stdout.write(` ${name} (App ID: ${app.app_id})\n`);
55
- process.stdout.write(` Client ID: ${app.client_id}\n`);
56
- if (app.redirect_uris.length > 0) {
57
- app.redirect_uris.forEach((uri, i) => {
58
- process.stdout.write(` Redirect URL ${i + 1}: ${uri}\n`);
59
- });
60
- }
61
- else {
62
- process.stdout.write(` Redirect URLs: (none)\n`);
63
- }
64
- process.stdout.write(` Logo URL: ${app.logo_uri || '(none)'}\n`);
65
- const scopes = app.scopes ?? [];
66
- const legacyTag = (0, validators_1.containsLegacyAllScope)(scopes) ? en_1.messages.LEGACY_ALL_SCOPE_LIST_TAG : '';
67
- process.stdout.write(` Scopes: ${scopes.length > 0 ? scopes.join(', ') : '(none)'}${legacyTag}\n`);
68
- process.stdout.write('\n');
69
- }
70
- });
71
- //# sourceMappingURL=list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/app/list.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export declare const scaffoldCommand: (opts: {
2
- appId?: string;
3
- json?: boolean;
4
- }) => Promise<void>;
5
- //# sourceMappingURL=scaffold.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../../src/commands/app/scaffold.ts"],"names":[],"mappings":"AA2JA,eAAO,MAAM,eAAe;YACA,MAAM;WAAS,OAAO;mBA0EjD,CAAC"}
@@ -1,213 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.scaffoldCommand = void 0;
40
- const fs = __importStar(require("node:fs"));
41
- const path = __importStar(require("node:path"));
42
- const inquirer_1 = __importDefault(require("inquirer"));
43
- const constants_1 = require("../../lib/constants");
44
- const logger_1 = require("../../lib/logger");
45
- const ui_1 = require("../../lib/ui");
46
- const en_1 = require("../../lang/en");
47
- const command_handler_1 = require("../../lib/command-handler");
48
- const errors_1 = require("../../lib/errors");
49
- const json_output_1 = require("../../lib/json-output");
50
- const container_1 = require("../../container");
51
- const templates_1 = require("../../templates");
52
- const validators_1 = require("../../lib/validators");
53
- function formatFileTree(filePaths) {
54
- // Build tree structure
55
- const tree = {};
56
- for (const fp of filePaths) {
57
- const parts = fp.split('/');
58
- let node = tree;
59
- for (const part of parts) {
60
- node[part] = node[part] || {};
61
- node = node[part];
62
- }
63
- }
64
- const lines = [];
65
- function render(node, prefix) {
66
- const entries = Object.keys(node).sort((a, b) => {
67
- // Directories (non-empty children) first, then files
68
- const aIsDir = Object.keys(node[a] ?? {}).length > 0;
69
- const bIsDir = Object.keys(node[b] ?? {}).length > 0;
70
- if (aIsDir !== bIsDir)
71
- return aIsDir ? -1 : 1;
72
- return a.localeCompare(b);
73
- });
74
- entries.forEach((name, i) => {
75
- const isLast = i === entries.length - 1;
76
- const connector = isLast ? '└── ' : '├── ';
77
- const children = node[name] ?? {};
78
- const isDir = Object.keys(children).length > 0;
79
- lines.push(`${prefix}${connector}${name}${isDir ? '/' : ''}`);
80
- if (isDir) {
81
- render(children, prefix + (isLast ? ' ' : '│ '));
82
- }
83
- });
84
- }
85
- render(tree, ' ');
86
- return lines.join('\n');
87
- }
88
- async function fetchAppContext(appId, silent) {
89
- const spinner = (0, ui_1.createSpinner)('Fetching app details...', { silent });
90
- const result = await container_1.appService.resolveAppCredentials(appId);
91
- spinner.stop();
92
- const appDetails = result?.app ?? null;
93
- if (result) {
94
- if (result.diffs.length > 0) {
95
- (0, logger_1.logWarn)(`Local credentials for app ${appId} differ from server (${result.diffs.join(', ')}). Updating local cache.`);
96
- }
97
- container_1.appService.syncAppCredentials(appId, result.app);
98
- }
99
- const serverRedirectUrls = appDetails?.redirect_uris ?? [];
100
- const redirectUrls = serverRedirectUrls.length > 0 ? serverRedirectUrls : [constants_1.DEFAULT_REDIRECT_URI];
101
- const localhostUri = redirectUrls.find((url) => url.startsWith('http://localhost') || url.startsWith('http://127.0.0.1'));
102
- return {
103
- appDetails,
104
- clientId: appDetails?.client_id || constants_1.PLACEHOLDER_CLIENT_ID,
105
- clientSecret: appDetails?.client_secret || 'YOUR_CLIENT_SECRET',
106
- redirectUrls,
107
- redirectUri: localhostUri || constants_1.DEFAULT_REDIRECT_URI,
108
- };
109
- }
110
- async function resolveTargetDir(defaultDir) {
111
- const { outputDir } = await inquirer_1.default.prompt([
112
- {
113
- type: 'input',
114
- name: 'outputDir',
115
- message: en_1.messages.APP_SCAFFOLD_DIR_PROMPT,
116
- default: defaultDir,
117
- },
118
- ]);
119
- const targetDir = path.resolve(outputDir);
120
- if (!fs.existsSync(targetDir)) {
121
- return { targetDir, mergeOnly: false, chooseAgain: false };
122
- }
123
- const { action } = await inquirer_1.default.prompt([
124
- {
125
- type: 'list',
126
- name: 'action',
127
- message: en_1.messages.APP_SCAFFOLD_DIR_EXISTS,
128
- choices: [
129
- { name: 'Overwrite existing files', value: 'overwrite' },
130
- { name: 'Merge (keep existing, add missing)', value: 'merge' },
131
- { name: 'Choose a different path', value: 'new' },
132
- ],
133
- },
134
- ]);
135
- return {
136
- targetDir,
137
- mergeOnly: action === 'merge',
138
- chooseAgain: action === 'new',
139
- };
140
- }
141
- function writeScaffoldFiles(files, targetDir, mergeOnly) {
142
- let written = 0;
143
- for (const file of files) {
144
- const filePath = path.join(targetDir, file.name);
145
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
146
- if (mergeOnly && fs.existsSync(filePath))
147
- continue;
148
- // Write .env.local with restricted permissions to protect secrets
149
- const writeOptions = file.name.endsWith('.env.local') ? { mode: 0o600 } : {};
150
- fs.writeFileSync(filePath, file.content, { encoding: 'utf-8', ...writeOptions });
151
- written++;
152
- }
153
- return written;
154
- }
155
- exports.scaffoldCommand = (0, command_handler_1.withCommandHandler)(async (options) => {
156
- // Refuse to scaffold inside an existing project — app-config.json in cwd
157
- // means the user is already in a scaffolded project and likely meant to
158
- // run `brevo app update` instead.
159
- if (fs.existsSync(path.join(process.cwd(), 'app-config.json'))) {
160
- throw new errors_1.CliError(en_1.messages.APP_SCAFFOLD_ALREADY_IN_PROJECT);
161
- }
162
- const appId = options.appId ?? (await container_1.appService.pickApp('Select an app:'));
163
- const ctx = await fetchAppContext(appId, options.json);
164
- const slug = (ctx.appDetails?.name || 'my-app')
165
- .toLowerCase()
166
- .replaceAll(/[^a-z0-9]+/g, '-')
167
- .replace(/^-|-$/g, '') || 'my-app';
168
- const { targetDir, mergeOnly, chooseAgain } = await resolveTargetDir(`./${slug}`);
169
- if (chooseAgain) {
170
- return (0, exports.scaffoldCommand)({ ...options, appId });
171
- }
172
- const rawAppName = ctx.appDetails?.name || path.basename(targetDir);
173
- const appName = rawAppName.replaceAll(/["\\\n\r\t]/g, '').trim() || 'my-app';
174
- // Never propagate the deprecated legacy 'all' scope into a fresh
175
- // app-config.json — keep the app's granular scopes, fall back to
176
- // DEFAULT_SCOPES when 'all' was the only scope, and tell the user (BEX-214).
177
- const remoteScopes = ctx.appDetails?.scopes;
178
- const legacyAllSubstituted = (0, validators_1.containsLegacyAllScope)(remoteScopes);
179
- const granularScopes = (remoteScopes ?? []).filter((s) => s !== constants_1.LEGACY_ALL_SCOPE);
180
- const scopes = granularScopes.length > 0 ? granularScopes : [...constants_1.DEFAULT_SCOPES];
181
- const pkg = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../../package.json'), 'utf-8'));
182
- const cliVersion = pkg.version;
183
- const vars = {
184
- '{{APP_NAME}}': appName,
185
- '{{APP_SLUG}}': slug,
186
- '{{APP_ID}}': String(appId),
187
- '{{CLIENT_ID}}': ctx.clientId,
188
- '{{CLIENT_SECRET}}': ctx.clientSecret,
189
- '{{REDIRECT_URI}}': ctx.redirectUri,
190
- '{{REDIRECT_URLS_JSON}}': JSON.stringify(ctx.redirectUrls),
191
- '{{SCOPES_JSON}}': JSON.stringify(scopes),
192
- '{{LOGO_URI}}': ctx.appDetails?.logo_uri ?? '',
193
- '{{OAUTH_BASE}}': constants_1.OAUTH_BASE,
194
- '{{OAUTH_REALM}}': constants_1.OAUTH_REALM,
195
- '{{CLI_VERSION}}': cliVersion,
196
- };
197
- fs.mkdirSync(path.join(targetDir, 'src', 'oauth'), { recursive: true });
198
- const files = (0, templates_1.loadAllTemplates)(vars);
199
- const written = writeScaffoldFiles(files, targetDir, mergeOnly);
200
- if (options.json) {
201
- (0, json_output_1.jsonOutput)({ scaffolded: written, directory: targetDir });
202
- return;
203
- }
204
- (0, logger_1.logSuccess)(en_1.messages.APP_SCAFFOLD_SUCCESS(written));
205
- if (legacyAllSubstituted) {
206
- (0, logger_1.logWarn)(en_1.messages.LEGACY_ALL_SCOPE_SCAFFOLD_SUBSTITUTED(scopes.join(', ')));
207
- }
208
- (0, logger_1.logInfo)(formatFileTree(files.map((f) => f.name)));
209
- const relativeDir = path.relative(process.cwd(), targetDir) || '.';
210
- (0, ui_1.printBox)(en_1.messages.APP_SCAFFOLD_NEXT_STEPS_TITLE, en_1.messages.APP_SCAFFOLD_NEXT_STEPS_LINES(relativeDir));
211
- (0, logger_1.logInfo)(en_1.messages.APP_SCAFFOLD_SCOPES_TIP);
212
- });
213
- //# sourceMappingURL=scaffold.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../../src/commands/app/scaffold.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare const scopesCommand: (opts: Record<string, unknown>) => Promise<void>;
2
- //# sourceMappingURL=scopes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scopes.d.ts","sourceRoot":"","sources":["../../../src/commands/app/scopes.ts"],"names":[],"mappings":"AAsEA,eAAO,MAAM,aAAa,kDAiBxB,CAAC"}