@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 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -1,430 +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
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.getCredentialsPath = getCredentialsPath;
37
- exports.getApiKey = getApiKey;
38
- exports.getAccessToken = getAccessToken;
39
- exports.getAuthCred = getAuthCred;
40
- exports.getEmail = getEmail;
41
- exports.getOrganizationId = getOrganizationId;
42
- exports.getUserId = getUserId;
43
- exports.saveCredentials = saveCredentials;
44
- exports.saveOauthCredentials = saveOauthCredentials;
45
- exports.updateOauthTokens = updateOauthTokens;
46
- exports.clearCredentials = clearCredentials;
47
- exports.deleteCredentialsFile = deleteCredentialsFile;
48
- exports.hasAppCredentials = hasAppCredentials;
49
- exports.countAppCredentials = countAppCredentials;
50
- exports.isAuthenticated = isAuthenticated;
51
- exports.saveAppCredentials = saveAppCredentials;
52
- exports.clearAppsCache = clearAppsCache;
53
- exports.getAppCredentials = getAppCredentials;
54
- exports.deleteAppCredentials = deleteAppCredentials;
55
- exports.saveAppName = saveAppName;
56
- exports.getAppNames = getAppNames;
57
- exports.deleteAppName = deleteAppName;
58
- exports.readProjectConfig = readProjectConfig;
59
- exports.hasLocalApp = hasLocalApp;
60
- exports.writeProjectConfig = writeProjectConfig;
61
- const fs = __importStar(require("node:fs"));
62
- const path = __importStar(require("node:path"));
63
- const os = __importStar(require("node:os"));
64
- const validators_1 = require("./validators");
65
- // ──────────────── Directory ────────────────
66
- function getConfigDir() {
67
- return process.env.BREVO_CONFIG_HOME || path.join(os.homedir(), '.brevo');
68
- }
69
- function getCredentialsPath() {
70
- return path.join(getConfigDir(), 'credentials.json');
71
- }
72
- function ensureDir() {
73
- fs.mkdirSync(getConfigDir(), { recursive: true, mode: 0o700 });
74
- }
75
- // Cached names patch the eventually-consistent `app list` response. Beyond this
76
- // window we trust the server, so any out-of-band rename (e.g. dashboard) becomes
77
- // visible without forcing the user to run `app credentials`.
78
- const APP_NAME_CACHE_TTL_MS = 10 * 60 * 1000;
79
- function sanitizeAppNames(value) {
80
- if (!value || typeof value !== 'object')
81
- return undefined;
82
- const out = {};
83
- for (const [key, raw] of Object.entries(value)) {
84
- if (typeof raw === 'string' && raw.trim()) {
85
- // Legacy plain-string entry from earlier alphas — treat as expired so the
86
- // server response wins on the next list call.
87
- out[key] = { name: raw, savedAt: 0 };
88
- }
89
- else if (raw && typeof raw === 'object') {
90
- const entry = raw;
91
- if (typeof entry.name === 'string' &&
92
- entry.name.trim() &&
93
- typeof entry.savedAt === 'number' &&
94
- Number.isFinite(entry.savedAt)) {
95
- out[key] = { name: entry.name, savedAt: entry.savedAt };
96
- }
97
- }
98
- }
99
- return Object.keys(out).length > 0 ? out : undefined;
100
- }
101
- function sanitizeApps(apps) {
102
- const sanitized = {};
103
- for (const [key, value] of Object.entries(apps)) {
104
- if (value && typeof value === 'object') {
105
- const entry = value;
106
- if (typeof entry.clientId === 'string' && typeof entry.clientSecret === 'string') {
107
- sanitized[key] = { clientId: entry.clientId, clientSecret: entry.clientSecret };
108
- }
109
- }
110
- }
111
- return sanitized;
112
- }
113
- function readCredentials() {
114
- try {
115
- const parsed = JSON.parse(fs.readFileSync(getCredentialsPath(), 'utf-8'));
116
- // Migrate old multi-profile format
117
- if (parsed.profiles) {
118
- const profileName = (typeof parsed.activeProfile === 'string' && parsed.activeProfile) || 'default';
119
- const firstKey = Object.keys(parsed.profiles)[0];
120
- const profile = parsed.profiles[profileName] ?? (firstKey ? parsed.profiles[firstKey] : undefined);
121
- const migrated = {
122
- auth: typeof profile?.apiKey === 'string' && profile.apiKey
123
- ? { kind: 'api-key', apiKey: profile.apiKey }
124
- : undefined,
125
- accountEmail: profile?.accountEmail,
126
- organizationId: profile?.organizationId,
127
- userId: profile?.userId,
128
- apps: sanitizeApps(parsed.apps ?? {}),
129
- };
130
- try {
131
- writeCredentials(migrated);
132
- }
133
- catch {
134
- // non-fatal
135
- }
136
- return migrated;
137
- }
138
- // Migrate legacy flat { apiKey } shape → { auth: { kind: 'api-key' } }
139
- if (!parsed.auth && typeof parsed.apiKey === 'string' && parsed.apiKey) {
140
- const migrated = {
141
- auth: { kind: 'api-key', apiKey: parsed.apiKey },
142
- accountEmail: parsed.accountEmail,
143
- organizationId: parsed.organizationId,
144
- userId: parsed.userId,
145
- apps: sanitizeApps(parsed.apps ?? {}),
146
- };
147
- try {
148
- writeCredentials(migrated);
149
- }
150
- catch {
151
- // non-fatal
152
- }
153
- return migrated;
154
- }
155
- return {
156
- auth: sanitizeAuth(parsed.auth),
157
- accountEmail: parsed.accountEmail,
158
- organizationId: parsed.organizationId,
159
- userId: parsed.userId,
160
- apps: sanitizeApps(parsed.apps ?? {}),
161
- appNames: sanitizeAppNames(parsed.appNames),
162
- };
163
- }
164
- catch {
165
- return { apps: {} };
166
- }
167
- }
168
- function sanitizeAuth(raw) {
169
- if (!raw || typeof raw !== 'object')
170
- return undefined;
171
- const v = raw;
172
- if (v.kind === 'api-key' && typeof v.apiKey === 'string' && v.apiKey) {
173
- return { kind: 'api-key', apiKey: v.apiKey };
174
- }
175
- if (v.kind === 'oauth' &&
176
- typeof v.accessToken === 'string' &&
177
- v.accessToken &&
178
- typeof v.refreshToken === 'string' &&
179
- v.refreshToken &&
180
- typeof v.tokenType === 'string' &&
181
- v.tokenType &&
182
- typeof v.expiresAt === 'number' &&
183
- Number.isFinite(v.expiresAt)) {
184
- return {
185
- kind: 'oauth',
186
- accessToken: v.accessToken,
187
- refreshToken: v.refreshToken,
188
- expiresAt: v.expiresAt,
189
- tokenType: v.tokenType,
190
- scope: typeof v.scope === 'string' ? v.scope : undefined,
191
- };
192
- }
193
- return undefined;
194
- }
195
- function writeCredentials(creds) {
196
- ensureDir();
197
- const filePath = getCredentialsPath();
198
- fs.writeFileSync(filePath, JSON.stringify(creds, null, 2), { mode: 0o600 });
199
- try {
200
- fs.chmodSync(filePath, 0o600);
201
- }
202
- catch {
203
- // chmod may not work on all platforms (e.g. Windows) — ignore
204
- }
205
- }
206
- function getApiKey() {
207
- if (process.env.BREVO_API_KEY) {
208
- return process.env.BREVO_API_KEY;
209
- }
210
- const auth = readCredentials().auth;
211
- return auth?.kind === 'api-key' ? auth.apiKey : undefined;
212
- }
213
- function getAccessToken() {
214
- const auth = readCredentials().auth;
215
- return auth?.kind === 'oauth' ? auth.accessToken : undefined;
216
- }
217
- function getAuthCred() {
218
- if (process.env.BREVO_API_KEY) {
219
- return { kind: 'api-key', apiKey: process.env.BREVO_API_KEY };
220
- }
221
- return readCredentials().auth;
222
- }
223
- function getEmail() {
224
- return readCredentials().accountEmail;
225
- }
226
- function getOrganizationId() {
227
- return readCredentials().organizationId;
228
- }
229
- function getUserId() {
230
- return readCredentials().userId;
231
- }
232
- function saveCredentials(apiKey, account) {
233
- const creds = readCredentials();
234
- creds.auth = { kind: 'api-key', apiKey };
235
- creds.accountEmail = account.email;
236
- creds.organizationId = account.organizationId;
237
- creds.userId = account.userId;
238
- writeCredentials(creds);
239
- }
240
- function saveOauthCredentials(tokens, account) {
241
- const creds = readCredentials();
242
- creds.auth = {
243
- kind: 'oauth',
244
- accessToken: tokens.accessToken,
245
- refreshToken: tokens.refreshToken,
246
- expiresAt: Date.now() + tokens.expiresIn * 1000,
247
- tokenType: tokens.tokenType,
248
- scope: tokens.scope,
249
- };
250
- // Account omitted = fresh token write before validation. Clear any stale
251
- // account info from a previous login so whoami doesn't surface mismatched data.
252
- if (account) {
253
- creds.accountEmail = account.email;
254
- creds.organizationId = account.organizationId;
255
- creds.userId = account.userId;
256
- }
257
- else {
258
- delete creds.accountEmail;
259
- delete creds.organizationId;
260
- delete creds.userId;
261
- }
262
- writeCredentials(creds);
263
- }
264
- function updateOauthTokens(tokens) {
265
- const creds = readCredentials();
266
- creds.auth = {
267
- kind: 'oauth',
268
- accessToken: tokens.accessToken,
269
- refreshToken: tokens.refreshToken,
270
- expiresAt: Date.now() + tokens.expiresIn * 1000,
271
- tokenType: tokens.tokenType,
272
- scope: tokens.scope,
273
- };
274
- writeCredentials(creds);
275
- }
276
- function clearCredentials() {
277
- const creds = readCredentials();
278
- delete creds.auth;
279
- delete creds.accountEmail;
280
- delete creds.organizationId;
281
- delete creds.userId;
282
- writeCredentials(creds);
283
- }
284
- function deleteCredentialsFile() {
285
- try {
286
- fs.unlinkSync(getCredentialsPath());
287
- }
288
- catch (error) {
289
- if (typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT') {
290
- return;
291
- }
292
- throw error;
293
- }
294
- }
295
- function hasAppCredentials() {
296
- return Object.keys(readCredentials().apps).length > 0;
297
- }
298
- function countAppCredentials() {
299
- return Object.keys(readCredentials().apps).length;
300
- }
301
- function isAuthenticated() {
302
- return !!getAuthCred();
303
- }
304
- function saveAppCredentials(appId, cred) {
305
- const creds = readCredentials();
306
- creds.apps[appId] = cred;
307
- writeCredentials(creds);
308
- }
309
- // Wipe the per-app credential and name caches without touching auth/account
310
- // fields. Used when re-login detects a different account — the cached
311
- // clientId/clientSecret values belong to apps the new account cannot see.
312
- function clearAppsCache() {
313
- const creds = readCredentials();
314
- creds.apps = {};
315
- delete creds.appNames;
316
- writeCredentials(creds);
317
- }
318
- function getAppCredentials(appId) {
319
- return readCredentials().apps[appId];
320
- }
321
- function deleteAppCredentials(appId) {
322
- if (!appId)
323
- return;
324
- const creds = readCredentials();
325
- if (!(appId in creds.apps))
326
- return;
327
- delete creds.apps[appId];
328
- writeCredentials(creds);
329
- }
330
- // Locally cached app names mirror values from `app update` and `app credentials`.
331
- // Server-side, the PUT endpoint and the GET-list endpoint are eventually consistent,
332
- // so `app list` can return a stale name immediately after an update. Merging this
333
- // cache on top of the list response masks the lag. Entries expire after
334
- // APP_NAME_CACHE_TTL_MS so they cannot indefinitely hide an out-of-band rename.
335
- function saveAppName(appId, name) {
336
- if (!appId || !name)
337
- return;
338
- const creds = readCredentials();
339
- creds.appNames = {
340
- ...creds.appNames,
341
- [appId]: { name, savedAt: Date.now() },
342
- };
343
- writeCredentials(creds);
344
- }
345
- function getAppNames() {
346
- const creds = readCredentials();
347
- const cache = creds.appNames ?? {};
348
- const now = Date.now();
349
- const fresh = {};
350
- const result = {};
351
- let pruned = false;
352
- for (const [id, entry] of Object.entries(cache)) {
353
- if (now - entry.savedAt < APP_NAME_CACHE_TTL_MS) {
354
- fresh[id] = entry;
355
- result[id] = entry.name;
356
- }
357
- else {
358
- pruned = true;
359
- }
360
- }
361
- if (pruned) {
362
- creds.appNames = Object.keys(fresh).length > 0 ? fresh : undefined;
363
- try {
364
- writeCredentials(creds);
365
- }
366
- catch {
367
- // non-fatal — we've already returned the fresh subset to the caller
368
- }
369
- }
370
- return result;
371
- }
372
- function deleteAppName(appId) {
373
- if (!appId)
374
- return;
375
- const creds = readCredentials();
376
- if (!creds.appNames || !(appId in creds.appNames))
377
- return;
378
- const { [appId]: _removed, ...rest } = creds.appNames;
379
- creds.appNames = Object.keys(rest).length > 0 ? rest : undefined;
380
- writeCredentials(creds);
381
- }
382
- const PROJECT_CONFIG_FILE = 'app-config.json';
383
- function readProjectConfig() {
384
- try {
385
- const raw = JSON.parse(fs.readFileSync(path.resolve(process.cwd(), PROJECT_CONFIG_FILE), 'utf-8'));
386
- if (!raw || typeof raw !== 'object')
387
- return null;
388
- // Normalize appId at the boundary: accept strings (trimmed) and finite
389
- // numeric IDs from legacy configs, reject anything else. Downstream
390
- // callers can treat `config.appId` as a guaranteed non-empty string.
391
- const rawAppId = raw.appId;
392
- let appId;
393
- if (typeof rawAppId === 'string') {
394
- const trimmed = rawAppId.trim();
395
- if (trimmed)
396
- appId = trimmed;
397
- }
398
- else if (typeof rawAppId === 'number' && Number.isFinite(rawAppId)) {
399
- appId = String(rawAppId);
400
- }
401
- if (!appId)
402
- return null;
403
- // Normalize auth.scopes silently — split on commas/whitespace so an entry
404
- // like "crm:read, campaigns:read" written by a user editing the JSON by
405
- // hand becomes two scopes. Strict charset validation is enforced later,
406
- // in the update command, so unrelated commands that just happen to read
407
- // config aren't broken by a malformed scope.
408
- const rawAuth = raw.auth;
409
- let authOverride;
410
- if (rawAuth && typeof rawAuth === 'object') {
411
- const scopes = rawAuth.scopes;
412
- if (Array.isArray(scopes)) {
413
- authOverride = { ...rawAuth, scopes: (0, validators_1.splitScopes)(scopes) };
414
- }
415
- }
416
- return { ...raw, appId, ...(authOverride ? { auth: authOverride } : {}) };
417
- }
418
- catch {
419
- return null;
420
- }
421
- }
422
- function hasLocalApp() {
423
- const cfg = readProjectConfig();
424
- return cfg?.appId != null && cfg.appId !== '';
425
- }
426
- function writeProjectConfig(config) {
427
- const configPath = path.resolve(process.cwd(), PROJECT_CONFIG_FILE);
428
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
429
- }
430
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,gDAEC;AAsLD,8BAMC;AAED,wCAGC;AAED,kCAKC;AAED,4BAEC;AAED,8CAEC;AAED,8BAEC;AAED,0CAUC;AAUD,oDAyBC;AAED,8CAWC;AAED,4CAOC;AAED,sDASC;AAED,8CAEC;AAED,kDAEC;AAED,0CAEC;AAED,gDAIC;AAKD,wCAKC;AAED,8CAEC;AAED,oDAMC;AAOD,kCAQC;AAED,kCAwBC;AAED,sCAOC;AAoCD,8CAmCC;AAED,kCAGC;AAED,gDAGC;AA5dD,4CAA8B;AAC9B,gDAAkC;AAClC,4CAA8B;AAC9B,6CAA2C;AAE3C,8CAA8C;AAE9C,SAAS,YAAY;IACnB,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC5E,CAAC;AAED,SAAgB,kBAAkB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,kBAAkB,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,SAAS;IAChB,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACjE,CAAC;AA6BD,gFAAgF;AAChF,iFAAiF;AACjF,6DAA6D;AAC7D,MAAM,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAW7C,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,GAAG,GAAkC,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QAC1E,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1C,0EAA0E;YAC1E,8CAA8C;YAC9C,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACvC,CAAC;aAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,GAA8B,CAAC;YAC7C,IACE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;gBACjB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;gBACjC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAC9B,CAAC;gBACD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,YAAY,CAAC,IAA6B;IACjD,MAAM,SAAS,GAAkC,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,KAAgC,CAAC;YAC/C,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;gBACjF,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;YAClF,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QAE1E,mCAAmC;QACnC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,WAAW,GACf,CAAC,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC;YAClF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,OAAO,GACX,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACrF,MAAM,QAAQ,GAAqB;gBACjC,IAAI,EACF,OAAO,OAAO,EAAE,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM;oBACnD,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;oBAC7C,CAAC,CAAC,SAAS;gBACf,YAAY,EAAE,OAAO,EAAE,YAAY;gBACnC,cAAc,EAAE,OAAO,EAAE,cAAc;gBACvC,MAAM,EAAE,OAAO,EAAE,MAAM;gBACvB,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;aACtC,CAAC;YACF,IAAI,CAAC;gBACH,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,uEAAuE;QACvE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACvE,MAAM,QAAQ,GAAqB;gBACjC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;gBAChD,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;aACtC,CAAC;YACF,IAAI,CAAC;gBACH,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,OAAO;YACL,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;YAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC;SAC5C,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACtD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACrE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/C,CAAC;IACD,IACE,CAAC,CAAC,IAAI,KAAK,OAAO;QAClB,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;QACjC,CAAC,CAAC,WAAW;QACb,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ;QAClC,CAAC,CAAC,YAAY;QACd,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;QAC/B,CAAC,CAAC,SAAS;QACX,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;QAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAC5B,CAAC;QACD,OAAO;YACL,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;SACzD,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAuB;IAC/C,SAAS,EAAE,CAAC;IACZ,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5E,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,8DAA8D;IAChE,CAAC;AACH,CAAC;AAED,SAAgB,SAAS;IACvB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACnC,CAAC;IACD,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC,IAAI,CAAC;IACpC,OAAO,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5D,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC,IAAI,CAAC;IACpC,OAAO,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/D,CAAC;AAED,SAAgB,WAAW;IACzB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,eAAe,EAAE,CAAC,IAAI,CAAC;AAChC,CAAC;AAED,SAAgB,QAAQ;IACtB,OAAO,eAAe,EAAE,CAAC,YAAY,CAAC;AACxC,CAAC;AAED,SAAgB,iBAAiB;IAC/B,OAAO,eAAe,EAAE,CAAC,cAAc,CAAC;AAC1C,CAAC;AAED,SAAgB,SAAS;IACvB,OAAO,eAAe,EAAE,CAAC,MAAM,CAAC;AAClC,CAAC;AAED,SAAgB,eAAe,CAC7B,MAAc,EACd,OAAkE;IAElE,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,KAAK,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IACzC,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;IACnC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC9C,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAUD,SAAgB,oBAAoB,CAClC,MAA0B,EAC1B,OAAmE;IAEnE,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,KAAK,CAAC,IAAI,GAAG;QACX,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI;QAC/C,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;IACF,yEAAyE;IACzE,gFAAgF;IAChF,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;QACnC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC9C,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAC,YAAY,CAAC;QAC1B,OAAO,KAAK,CAAC,cAAc,CAAC;QAC5B,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IACD,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,iBAAiB,CAAC,MAA0B;IAC1D,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,KAAK,CAAC,IAAI,GAAG;QACX,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI;QAC/C,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;IACF,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,gBAAgB;IAC9B,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC;IAClB,OAAO,KAAK,CAAC,YAAY,CAAC;IAC1B,OAAO,KAAK,CAAC,cAAc,CAAC;IAC5B,OAAO,KAAK,CAAC,MAAM,CAAC;IACpB,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,qBAAqB;IACnC,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9F,OAAO;QACT,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB;IAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACxD,CAAC;AAED,SAAgB,mBAAmB;IACjC,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;AACpD,CAAC;AAED,SAAgB,eAAe;IAC7B,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AACzB,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAAa,EAAE,IAAmB;IACnE,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACzB,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,4EAA4E;AAC5E,sEAAsE;AACtE,0EAA0E;AAC1E,SAAgB,cAAc;IAC5B,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;IAChB,OAAO,KAAK,CAAC,QAAQ,CAAC;IACtB,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,OAAO,eAAe,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,SAAgB,oBAAoB,CAAC,KAAa;IAChD,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,kFAAkF;AAClF,qFAAqF;AACrF,kFAAkF;AAClF,wEAAwE;AACxE,gFAAgF;AAChF,SAAgB,WAAW,CAAC,KAAa,EAAE,IAAY;IACrD,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO;IAC5B,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,KAAK,CAAC,QAAQ,GAAG;QACf,GAAG,KAAK,CAAC,QAAQ;QACjB,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE;KACvC,CAAC;IACF,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,WAAW;IACzB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAkC,EAAE,CAAC;IAChD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,qBAAqB,EAAE,CAAC;YAChD,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;YAClB,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,IAAI,CAAC;YACH,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,oEAAoE;QACtE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,aAAa,CAAC,KAAa;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO;IAC1D,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;IACtD,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAkCD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAE9C,SAAgB,iBAAiB;IAC/B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,mBAAmB,CAAC,EAAE,OAAO,CAAC,CAC3E,CAAC;QACF,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACjD,uEAAuE;QACvE,oEAAoE;QACpE,qEAAqE;QACrE,MAAM,QAAQ,GAAI,GAA+B,CAAC,KAAK,CAAC;QACxD,IAAI,KAAyB,CAAC;QAC9B,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,OAAO;gBAAE,KAAK,GAAG,OAAO,CAAC;QAC/B,CAAC;aAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrE,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,0EAA0E;QAC1E,wEAAwE;QACxE,wEAAwE;QACxE,wEAAwE;QACxE,6CAA6C;QAC7C,MAAM,OAAO,GAAI,GAA+B,CAAC,IAAI,CAAC;QACtD,IAAI,YAAgC,CAAC;QACrC,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAI,OAAmC,CAAC,MAAM,CAAC;YAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,YAAY,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,IAAA,wBAAW,EAAC,MAAkB,CAAC,EAAE,CAAC;YACzE,CAAC;QACH,CAAC;QACD,OAAO,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,WAAW;IACzB,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,OAAO,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;AAChD,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAqB;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,mBAAmB,CAAC,CAAC;IACpE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAChF,CAAC"}
@@ -1,48 +0,0 @@
1
- export declare function warnIfPathStripped(): void;
2
- export declare const API_BASE: string;
3
- export declare const OAUTH_PROXY_URL: string;
4
- export declare const USER_AGENT_HEADER = "User-Agent";
5
- export declare const CLI_AUTH_METHODS: {
6
- readonly API_KEY: "api_key";
7
- readonly OAUTH: "oauth";
8
- };
9
- export declare const ENDPOINTS: {
10
- readonly ACCOUNT: "/v3/account/info";
11
- readonly APP_STORE_APPS: "/v3/app-store/apps";
12
- readonly APP_STORE_APP: (appId: string) => string;
13
- readonly OAUTH_AUTHORIZE: "/oauth/authorize";
14
- readonly OAUTH_TOKEN: "/oauth/token";
15
- };
16
- export declare const CLI: {
17
- readonly LOGIN: "brevo login";
18
- readonly INIT: "brevo app init";
19
- readonly HELP: "brevo --help";
20
- readonly APP_CREATE: "brevo app create";
21
- readonly APP_LIST: "brevo app list";
22
- readonly APP_SCAFFOLD: (appId?: string) => string;
23
- readonly APP_CREDENTIALS: (appId?: string) => string;
24
- readonly APP_CREDENTIALS_REVEAL: (appId?: string) => string;
25
- readonly APP_UPDATE: "brevo app update";
26
- readonly APP_DELETE: "brevo app delete";
27
- readonly APP_START: (feature?: string) => string;
28
- readonly APP_SCOPES: "brevo app available-scopes";
29
- readonly APP_UPDATE_SCOPE: "brevo app update --scope";
30
- readonly SKILL_INSTALL: "brevo skill:cli install";
31
- readonly SKILL_UNINSTALL: "brevo skill:cli uninstall";
32
- };
33
- export declare const DEFAULT_APP_FOLDER = "my-app";
34
- export declare const DEFAULT_PORT = 3009;
35
- export declare const DEFAULT_REDIRECT_URI = "http://localhost:3009/auth/callback";
36
- export declare const PLACEHOLDER_CLIENT_ID = "YOUR_CLIENT_ID";
37
- export declare const OAUTH_BASE = "https://oauth.brevo.com";
38
- export declare const OAUTH_REALM = "partner";
39
- export declare const OAUTH_SCOPES_URL = "https://oauth.brevo.com/realms/partner/scopes";
40
- export declare const LEGACY_ALL_SCOPE = "all";
41
- export declare const DEFAULT_SCOPES: readonly string[];
42
- export declare const BREVO_DASHBOARD_API_KEYS_URL = "https://app.brevo.com/settings/keys/api";
43
- export declare const BREVO_API_KEY_DOCS_URL = "https://developers.brevo.com/docs/api-key-authentication";
44
- export declare const BREVO_STATUS_URL = "https://status.brevo.com";
45
- export declare const BREVO_DOCS_URL = "https://developers.brevo.com";
46
- export declare const BREVO_CLI_REFERENCE_URL = "https://developers.brevo.com/docs/cli-reference";
47
- export declare const BREVO_OAUTH_SCOPES_DOCS_URL = "https://developers.brevo.com/docs/oauth-scopes#scope-catalog";
48
- //# sourceMappingURL=constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAkBA,wBAAgB,kBAAkB,IAAI,IAAI,CAOzC;AA0BD,eAAO,MAAM,QAAQ,QAAmB,CAAC;AAkBzC,eAAO,MAAM,eAAe,QAAyB,CAAC;AAKtD,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAI9C,eAAO,MAAM,gBAAgB;;;CAGnB,CAAC;AAEX,eAAO,MAAM,SAAS;;;oCAGG,MAAM;;;CAGrB,CAAC;AAEX,eAAO,MAAM,GAAG;;;;;;oCAMS,MAAM;uCAEH,MAAM;8CAEC,MAAM;;;mCAMjB,MAAM;;;;;CAMpB,CAAC;AAEX,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAC3C,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,oBAAoB,wCAAmD,CAAC;AACrF,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AACtD,eAAO,MAAM,UAAU,4BAA4B,CAAC;AACpD,eAAO,MAAM,WAAW,YAAY,CAAC;AACrC,eAAO,MAAM,gBAAgB,kDAA+C,CAAC;AAK7E,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAEtC,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAKlC,CAAC;AAEX,eAAO,MAAM,4BAA4B,4CAA4C,CAAC;AACtF,eAAO,MAAM,sBAAsB,6DAA6D,CAAC;AACjG,eAAO,MAAM,gBAAgB,6BAA6B,CAAC;AAC3D,eAAO,MAAM,cAAc,iCAAiC,CAAC;AAC7D,eAAO,MAAM,uBAAuB,oDAAoD,CAAC;AACzF,eAAO,MAAM,2BAA2B,iEACwB,CAAC"}
@@ -1,121 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BREVO_OAUTH_SCOPES_DOCS_URL = exports.BREVO_CLI_REFERENCE_URL = exports.BREVO_DOCS_URL = exports.BREVO_STATUS_URL = exports.BREVO_API_KEY_DOCS_URL = exports.BREVO_DASHBOARD_API_KEYS_URL = exports.DEFAULT_SCOPES = exports.LEGACY_ALL_SCOPE = exports.OAUTH_SCOPES_URL = exports.OAUTH_REALM = exports.OAUTH_BASE = exports.PLACEHOLDER_CLIENT_ID = exports.DEFAULT_REDIRECT_URI = exports.DEFAULT_PORT = exports.DEFAULT_APP_FOLDER = exports.CLI = exports.ENDPOINTS = exports.CLI_AUTH_METHODS = exports.USER_AGENT_HEADER = exports.OAUTH_PROXY_URL = exports.API_BASE = void 0;
4
- exports.warnIfPathStripped = warnIfPathStripped;
5
- const errors_1 = require("./errors");
6
- // Track whether URL suffix parts were stripped for deferred warning (avoid side effects at import time)
7
- let strippedUrlSuffix;
8
- function getStrippedUrlSuffix(parsed) {
9
- const pathname = parsed.pathname === '/' ? '' : parsed.pathname;
10
- const suffix = `${pathname}${parsed.search}${parsed.hash}`;
11
- return suffix || undefined;
12
- }
13
- function stripPath(parsed) {
14
- // Use origin only — endpoints already include full paths (e.g. /v3/account).
15
- // Prevents double-path issues when BREVO_API_URL includes a path like /v3.
16
- strippedUrlSuffix = getStrippedUrlSuffix(parsed);
17
- return parsed.origin;
18
- }
19
- function warnIfPathStripped() {
20
- if (strippedUrlSuffix) {
21
- process.stderr.write(` Warning: BREVO_API_URL path "${strippedUrlSuffix}" was stripped. Endpoints already include paths.\n`);
22
- strippedUrlSuffix = undefined;
23
- }
24
- }
25
- function isLocalHttpAllowed(parsed) {
26
- return (parsed.protocol === 'http:' &&
27
- (parsed.hostname === 'localhost' ||
28
- parsed.hostname === '127.0.0.1' ||
29
- parsed.hostname === '::1'));
30
- }
31
- function resolveApiBase() {
32
- const raw = process.env.BREVO_API_URL || 'https://api.brevo.com';
33
- let parsed;
34
- try {
35
- parsed = new URL(raw);
36
- }
37
- catch {
38
- throw new errors_1.CliError(`Invalid BREVO_API_URL: "${raw}" is not a valid URL.`);
39
- }
40
- if (parsed.protocol === 'https:')
41
- return stripPath(parsed);
42
- if (isLocalHttpAllowed(parsed))
43
- return stripPath(parsed);
44
- throw new errors_1.CliError(`BREVO_API_URL must use HTTPS. Got: ${raw}\n HTTP is only allowed for localhost/127.0.0.1.`);
45
- }
46
- exports.API_BASE = resolveApiBase();
47
- function resolveOauthProxyUrl() {
48
- const raw = process.env.BREVO_OAUTH_PROXY_URL || 'https://oauth-cli.brevo.com';
49
- let parsed;
50
- try {
51
- parsed = new URL(raw);
52
- }
53
- catch {
54
- throw new errors_1.CliError(`Invalid BREVO_OAUTH_PROXY_URL: "${raw}" is not a valid URL.`);
55
- }
56
- if (parsed.protocol !== 'https:' && !isLocalHttpAllowed(parsed)) {
57
- throw new errors_1.CliError(`BREVO_OAUTH_PROXY_URL must use HTTPS. Got: ${raw}\n HTTP is only allowed for localhost/127.0.0.1.`);
58
- }
59
- return parsed.origin;
60
- }
61
- exports.OAUTH_PROXY_URL = resolveOauthProxyUrl();
62
- // Header identifying the CLI on every API request. The backend parses it to
63
- // emit product-tracking events (e.g. "CLI installed") on the `cli` Kafka topic.
64
- // Format: `brevo-cli/<version> (<os>[; auth=<method>])` — see lib/telemetry.ts.
65
- exports.USER_AGENT_HEADER = 'User-Agent';
66
- // Auth-method markers carried in the User-Agent comment — part of the same
67
- // backend contract as USER_AGENT_HEADER, so they live here rather than inline.
68
- exports.CLI_AUTH_METHODS = {
69
- API_KEY: 'api_key',
70
- OAUTH: 'oauth',
71
- };
72
- exports.ENDPOINTS = {
73
- ACCOUNT: '/v3/account/info',
74
- APP_STORE_APPS: '/v3/app-store/apps',
75
- APP_STORE_APP: (appId) => `/v3/app-store/apps/${encodeURIComponent(appId)}`,
76
- OAUTH_AUTHORIZE: '/oauth/authorize',
77
- OAUTH_TOKEN: '/oauth/token',
78
- };
79
- exports.CLI = {
80
- LOGIN: 'brevo login',
81
- INIT: 'brevo app init',
82
- HELP: 'brevo --help',
83
- APP_CREATE: 'brevo app create',
84
- APP_LIST: 'brevo app list',
85
- APP_SCAFFOLD: (appId) => appId ? `brevo app scaffold --app-id ${appId}` : 'brevo app scaffold --app-id <id>',
86
- APP_CREDENTIALS: (appId) => appId ? `brevo app credentials --app-id ${appId}` : 'brevo app credentials --app-id <id>',
87
- APP_CREDENTIALS_REVEAL: (appId) => appId
88
- ? `brevo app credentials --reveal-secret --app-id ${appId}`
89
- : 'brevo app credentials --reveal-secret',
90
- APP_UPDATE: 'brevo app update',
91
- APP_DELETE: 'brevo app delete',
92
- APP_START: (feature) => feature ? `brevo app start ${feature}` : 'brevo app start <feature>',
93
- APP_SCOPES: 'brevo app available-scopes',
94
- APP_UPDATE_SCOPE: 'brevo app update --scope',
95
- SKILL_INSTALL: 'brevo skill:cli install',
96
- SKILL_UNINSTALL: 'brevo skill:cli uninstall',
97
- };
98
- exports.DEFAULT_APP_FOLDER = 'my-app';
99
- exports.DEFAULT_PORT = 3009;
100
- exports.DEFAULT_REDIRECT_URI = `http://localhost:${exports.DEFAULT_PORT}/auth/callback`;
101
- exports.PLACEHOLDER_CLIENT_ID = 'YOUR_CLIENT_ID';
102
- exports.OAUTH_BASE = 'https://oauth.brevo.com';
103
- exports.OAUTH_REALM = 'partner';
104
- exports.OAUTH_SCOPES_URL = `${exports.OAUTH_BASE}/realms/${exports.OAUTH_REALM}/scopes`;
105
- // Legacy catch-all OAuth scope being deprecated (BEX-214). Single source of
106
- // truth for the spelling — every detection path goes through
107
- // `containsLegacyAllScope` in lib/validators.
108
- exports.LEGACY_ALL_SCOPE = 'all';
109
- exports.DEFAULT_SCOPES = [
110
- 'contacts:read',
111
- 'contacts:write',
112
- 'crm:read',
113
- 'crm:write',
114
- ];
115
- exports.BREVO_DASHBOARD_API_KEYS_URL = 'https://app.brevo.com/settings/keys/api';
116
- exports.BREVO_API_KEY_DOCS_URL = 'https://developers.brevo.com/docs/api-key-authentication';
117
- exports.BREVO_STATUS_URL = 'https://status.brevo.com';
118
- exports.BREVO_DOCS_URL = 'https://developers.brevo.com';
119
- exports.BREVO_CLI_REFERENCE_URL = 'https://developers.brevo.com/docs/cli-reference';
120
- exports.BREVO_OAUTH_SCOPES_DOCS_URL = 'https://developers.brevo.com/docs/oauth-scopes#scope-catalog';
121
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"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"}