@getbrevo/cli 0.0.1-alpha.2 → 1.0.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 (60) hide show
  1. package/CHANGELOG.md +24 -38
  2. package/README.md +66 -6
  3. package/agent-context/AGENTS.md +59 -0
  4. package/agent-context/SKILL.md +44 -0
  5. package/dist/api/client.d.ts.map +1 -1
  6. package/dist/api/client.js +8 -5
  7. package/dist/api/client.js.map +1 -1
  8. package/dist/bin/index.js +13 -1
  9. package/dist/bin/index.js.map +1 -1
  10. package/dist/commands/app/create.d.ts.map +1 -1
  11. package/dist/commands/app/create.js +8 -3
  12. package/dist/commands/app/create.js.map +1 -1
  13. package/dist/commands/app/credentials.d.ts.map +1 -1
  14. package/dist/commands/app/credentials.js +9 -3
  15. package/dist/commands/app/credentials.js.map +1 -1
  16. package/dist/commands/app/delete.d.ts.map +1 -1
  17. package/dist/commands/app/delete.js +1 -0
  18. package/dist/commands/app/delete.js.map +1 -1
  19. package/dist/commands/app/list.d.ts.map +1 -1
  20. package/dist/commands/app/list.js +18 -1
  21. package/dist/commands/app/list.js.map +1 -1
  22. package/dist/commands/app/start.d.ts.map +1 -1
  23. package/dist/commands/app/start.js +24 -11
  24. package/dist/commands/app/start.js.map +1 -1
  25. package/dist/commands/app/update.d.ts.map +1 -1
  26. package/dist/commands/app/update.js +9 -5
  27. package/dist/commands/app/update.js.map +1 -1
  28. package/dist/commands/definitions.js +8 -8
  29. package/dist/commands/definitions.js.map +1 -1
  30. package/dist/commands/login.d.ts.map +1 -1
  31. package/dist/commands/login.js +4 -0
  32. package/dist/commands/login.js.map +1 -1
  33. package/dist/lang/en.d.ts +4 -15
  34. package/dist/lang/en.d.ts.map +1 -1
  35. package/dist/lang/en.js +10 -22
  36. package/dist/lang/en.js.map +1 -1
  37. package/dist/lib/auth-guard.d.ts.map +1 -1
  38. package/dist/lib/auth-guard.js +7 -0
  39. package/dist/lib/auth-guard.js.map +1 -1
  40. package/dist/lib/config.d.ts +3 -0
  41. package/dist/lib/config.d.ts.map +1 -1
  42. package/dist/lib/config.js +82 -0
  43. package/dist/lib/config.js.map +1 -1
  44. package/dist/lib/validators.d.ts +1 -1
  45. package/dist/lib/validators.d.ts.map +1 -1
  46. package/dist/lib/validators.js +8 -13
  47. package/dist/lib/validators.js.map +1 -1
  48. package/dist/services/app.d.ts.map +1 -1
  49. package/dist/services/app.js +26 -3
  50. package/dist/services/app.js.map +1 -1
  51. package/dist/templates/files/AGENTS.md.tmpl +18 -12
  52. package/dist/templates/files/CLAUDE.md.tmpl +22 -13
  53. package/dist/templates/files/README.md.tmpl +10 -4
  54. package/dist/templates/files/src/oauth/handler.js.tmpl +3 -0
  55. package/dist/templates/files/src/oauth/server.js.tmpl +1 -1
  56. package/package.json +10 -3
  57. package/dist/commands/app/test.d.ts +0 -6
  58. package/dist/commands/app/test.d.ts.map +0 -1
  59. package/dist/commands/app/test.js +0 -496
  60. package/dist/commands/app/test.js.map +0 -1
@@ -50,6 +50,9 @@ exports.countAppCredentials = countAppCredentials;
50
50
  exports.isAuthenticated = isAuthenticated;
51
51
  exports.saveAppCredentials = saveAppCredentials;
52
52
  exports.getAppCredentials = getAppCredentials;
53
+ exports.saveAppName = saveAppName;
54
+ exports.getAppNames = getAppNames;
55
+ exports.deleteAppName = deleteAppName;
53
56
  exports.readProjectConfig = readProjectConfig;
54
57
  exports.hasLocalApp = hasLocalApp;
55
58
  exports.writeProjectConfig = writeProjectConfig;
@@ -66,6 +69,32 @@ function getCredentialsPath() {
66
69
  function ensureDir() {
67
70
  fs.mkdirSync(getConfigDir(), { recursive: true, mode: 0o700 });
68
71
  }
72
+ // Cached names patch the eventually-consistent `app list` response. Beyond this
73
+ // window we trust the server, so any out-of-band rename (e.g. dashboard) becomes
74
+ // visible without forcing the user to run `app credentials`.
75
+ const APP_NAME_CACHE_TTL_MS = 10 * 60 * 1000;
76
+ function sanitizeAppNames(value) {
77
+ if (!value || typeof value !== 'object')
78
+ return undefined;
79
+ const out = {};
80
+ for (const [key, raw] of Object.entries(value)) {
81
+ if (typeof raw === 'string' && raw.trim()) {
82
+ // Legacy plain-string entry from earlier alphas — treat as expired so the
83
+ // server response wins on the next list call.
84
+ out[key] = { name: raw, savedAt: 0 };
85
+ }
86
+ else if (raw && typeof raw === 'object') {
87
+ const entry = raw;
88
+ if (typeof entry.name === 'string' &&
89
+ entry.name.trim() &&
90
+ typeof entry.savedAt === 'number' &&
91
+ Number.isFinite(entry.savedAt)) {
92
+ out[key] = { name: entry.name, savedAt: entry.savedAt };
93
+ }
94
+ }
95
+ }
96
+ return Object.keys(out).length > 0 ? out : undefined;
97
+ }
69
98
  function sanitizeApps(apps) {
70
99
  const sanitized = {};
71
100
  for (const [key, value] of Object.entries(apps)) {
@@ -126,6 +155,7 @@ function readCredentials() {
126
155
  organizationId: parsed.organizationId,
127
156
  userId: parsed.userId,
128
157
  apps: sanitizeApps(parsed.apps ?? {}),
158
+ appNames: sanitizeAppNames(parsed.appNames),
129
159
  };
130
160
  }
131
161
  catch {
@@ -276,6 +306,58 @@ function saveAppCredentials(appId, cred) {
276
306
  function getAppCredentials(appId) {
277
307
  return readCredentials().apps[appId];
278
308
  }
309
+ // Locally cached app names mirror values from `app update` and `app credentials`.
310
+ // Server-side, the PUT endpoint and the GET-list endpoint are eventually consistent,
311
+ // so `app list` can return a stale name immediately after an update. Merging this
312
+ // cache on top of the list response masks the lag. Entries expire after
313
+ // APP_NAME_CACHE_TTL_MS so they cannot indefinitely hide an out-of-band rename.
314
+ function saveAppName(appId, name) {
315
+ if (!appId || !name)
316
+ return;
317
+ const creds = readCredentials();
318
+ creds.appNames = {
319
+ ...(creds.appNames ?? {}),
320
+ [appId]: { name, savedAt: Date.now() },
321
+ };
322
+ writeCredentials(creds);
323
+ }
324
+ function getAppNames() {
325
+ const creds = readCredentials();
326
+ const cache = creds.appNames ?? {};
327
+ const now = Date.now();
328
+ const fresh = {};
329
+ const result = {};
330
+ let pruned = false;
331
+ for (const [id, entry] of Object.entries(cache)) {
332
+ if (now - entry.savedAt < APP_NAME_CACHE_TTL_MS) {
333
+ fresh[id] = entry;
334
+ result[id] = entry.name;
335
+ }
336
+ else {
337
+ pruned = true;
338
+ }
339
+ }
340
+ if (pruned) {
341
+ creds.appNames = Object.keys(fresh).length > 0 ? fresh : undefined;
342
+ try {
343
+ writeCredentials(creds);
344
+ }
345
+ catch {
346
+ // non-fatal — we've already returned the fresh subset to the caller
347
+ }
348
+ }
349
+ return result;
350
+ }
351
+ function deleteAppName(appId) {
352
+ if (!appId)
353
+ return;
354
+ const creds = readCredentials();
355
+ if (!creds.appNames || !(appId in creds.appNames))
356
+ return;
357
+ const { [appId]: _removed, ...rest } = creds.appNames;
358
+ creds.appNames = Object.keys(rest).length > 0 ? rest : undefined;
359
+ writeCredentials(creds);
360
+ }
279
361
  const PROJECT_CONFIG_FILE = 'app-config.json';
280
362
  function readProjectConfig() {
281
363
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@ export declare function validateEnum(value: string | undefined, allowed: readonl
15
15
  */
16
16
  export declare function validateUrl(value: string | undefined, fieldName: string): void;
17
17
  /**
18
- * Commander.js collect function for repeatable --redirect-url flags.
18
+ * Commander.js collect function for repeatable --redirect-uri flags.
19
19
  * Validates each URL and accumulates into an array.
20
20
  */
21
21
  export declare function collectUrls(value: string, previous?: string[]): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/lib/validators.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAQ3D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,QAAQ,EAAE,MAAM,GACf,IAAI,CAMN;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAoB9E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAG5E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMxE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMhD"}
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/lib/validators.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAU3D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,QAAQ,EAAE,MAAM,GACf,IAAI,CAIN;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAkB9E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAG5E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMxE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMhD"}
@@ -7,7 +7,6 @@ exports.collectUrls = collectUrls;
7
7
  exports.parsePositiveInt = parsePositiveInt;
8
8
  exports.parseAppId = parseAppId;
9
9
  const errors_1 = require("./errors");
10
- const logger_1 = require("./logger");
11
10
  const APP_NAME_MAX_LENGTH = 48;
12
11
  const APP_NAME_REGEX = /^[a-zA-Z0-9 ._\-\u00C0-\u024F]+$/;
13
12
  /**
@@ -19,10 +18,12 @@ function validateAppName(name) {
19
18
  const trimmed = name.trim();
20
19
  if (trimmed.length === 0)
21
20
  return 'App name cannot be empty.';
22
- if (trimmed.length > APP_NAME_MAX_LENGTH)
21
+ if (trimmed.length > APP_NAME_MAX_LENGTH) {
23
22
  return `App name must be at most ${APP_NAME_MAX_LENGTH} characters (got ${trimmed.length}).`;
24
- if (!APP_NAME_REGEX.test(trimmed))
23
+ }
24
+ if (!APP_NAME_REGEX.test(trimmed)) {
25
25
  return 'App name can only contain letters, numbers, spaces, hyphens, dots, underscores, and accented characters.';
26
+ }
26
27
  return true;
27
28
  }
28
29
  /**
@@ -31,9 +32,7 @@ function validateAppName(name) {
31
32
  */
32
33
  function validateEnum(value, allowed, flagName) {
33
34
  if (value && !allowed.includes(value)) {
34
- const msg = `Invalid ${flagName} "${value}". Must be one of: ${allowed.join(', ')}.`;
35
- (0, logger_1.logInfo)(` ${msg}`);
36
- throw new errors_1.CliError(msg);
35
+ throw new errors_1.CliError(`Invalid ${flagName} "${value}". Must be one of: ${allowed.join(', ')}.`);
37
36
  }
38
37
  }
39
38
  /**
@@ -47,9 +46,7 @@ function validateUrl(value, fieldName) {
47
46
  // spaces, so "http://a/cb, http://b/cb" parses as a single valid URL. That has let
48
47
  // comma-separated values sneak into redirect_uris as one corrupted entry.
49
48
  if (/[\s,]/.test(value)) {
50
- const msg = `Invalid ${fieldName}: "${value}" contains whitespace or a comma. Pass each URL with a separate --redirect-url flag.`;
51
- (0, logger_1.logInfo)(` ${msg}`);
52
- throw new errors_1.CliError(msg);
49
+ throw new errors_1.CliError(`Invalid ${fieldName}: "${value}" contains whitespace or a comma. Pass each URL with a separate --redirect-uri flag.`);
53
50
  }
54
51
  try {
55
52
  const parsed = new URL(value);
@@ -58,13 +55,11 @@ function validateUrl(value, fieldName) {
58
55
  }
59
56
  }
60
57
  catch {
61
- const msg = `Invalid ${fieldName}: "${value}" is not a valid HTTP/HTTPS URL.`;
62
- (0, logger_1.logInfo)(` ${msg}`);
63
- throw new errors_1.CliError(msg);
58
+ throw new errors_1.CliError(`Invalid ${fieldName}: "${value}" is not a valid HTTP/HTTPS URL.`);
64
59
  }
65
60
  }
66
61
  /**
67
- * Commander.js collect function for repeatable --redirect-url flags.
62
+ * Commander.js collect function for repeatable --redirect-uri flags.
68
63
  * Validates each URL and accumulates into an array.
69
64
  */
70
65
  function collectUrls(value, previous = []) {
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/lib/validators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/lib/validators.ts"],"names":[],"mappings":";;AAUA,0CAUC;AAMD,oCAQC;AAMD,kCAkBC;AAMD,kCAGC;AAMD,4CAMC;AAMD,gCAMC;AA3FD,qCAAoC;AAEpC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,cAAc,GAAG,kCAAkC,CAAC;AAE1D;;;;GAIG;AACH,SAAgB,eAAe,CAAC,IAAY;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,2BAA2B,CAAC;IAC7D,IAAI,OAAO,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACzC,OAAO,4BAA4B,mBAAmB,oBAAoB,OAAO,CAAC,MAAM,IAAI,CAAC;IAC/F,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,0GAA0G,CAAC;IACpH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAC1B,KAAyB,EACzB,OAA0B,EAC1B,QAAgB;IAEhB,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,iBAAQ,CAAC,WAAW,QAAQ,KAAK,KAAK,sBAAsB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CAAC,KAAyB,EAAE,SAAiB;IACtE,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,kFAAkF;IAClF,mFAAmF;IACnF,0EAA0E;IAC1E,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,iBAAQ,CAChB,WAAW,SAAS,MAAM,KAAK,sFAAsF,CACtH,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,iBAAQ,CAAC,WAAW,SAAS,MAAM,KAAK,kCAAkC,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CAAC,KAAa,EAAE,WAAqB,EAAE;IAChE,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,KAAa,EAAE,QAAgB;IAC9D,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,iBAAQ,CAAC,WAAW,QAAQ,MAAM,KAAK,8BAA8B,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,SAAgB,UAAU,CAAC,KAAa;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,iBAAQ,CAAC,0CAA0C,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/services/app.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAO1C,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAYvD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS;yBAChB,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAQ3B,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;2BAMtC,MAAM,iBACN,CAAC,GAAG,EAAE,QAAQ,KAAK,MAAM,GACvC,OAAO,CAAC,MAAM,CAAC;IA2BlB;;;;OAIG;iCACgC,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAyB9F;;;;OAIG;8BACuB,MAAM,OAAO,QAAQ,GAAG,IAAI;uBAU7B;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,GAAG,OAAO,CAAC,iBAAiB,CAAC;qBASrB,MAAM,QACP;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE,GAC/C,OAAO,CAAC,IAAI,CAAC;qBAIO,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EAIhD;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/services/app.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAO1C,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAmBvD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS;yBAChB,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAQ3B,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;2BAWtC,MAAM,iBACN,CAAC,GAAG,EAAE,QAAQ,KAAK,MAAM,GACvC,OAAO,CAAC,MAAM,CAAC;IA2BlB;;;;OAIG;iCACgC,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IA8B9F;;;;OAIG;8BACuB,MAAM,OAAO,QAAQ,GAAG,IAAI;uBAU7B;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,GAAG,OAAO,CAAC,iBAAiB,CAAC;qBASrB,MAAM,QACP;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE,GAC/C,OAAO,CAAC,IAAI,CAAC;qBAIO,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EAQhD;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -13,6 +13,12 @@ const ui_1 = require("../lib/ui");
13
13
  const en_1 = require("../lang/en");
14
14
  const config_1 = require("../lib/config");
15
15
  const normalize_app_id_1 = require("./normalize-app-id");
16
+ function rethrowNotFound(err, appId) {
17
+ if (err instanceof errors_1.ApiError && err.statusCode === 404) {
18
+ throw new errors_1.CliError(`App ${appId} not found.`, err.exitCode);
19
+ }
20
+ throw err;
21
+ }
16
22
  /**
17
23
  * Check apps exist and throw with user-facing message if empty.
18
24
  */
@@ -28,7 +34,13 @@ function createAppService(client) {
28
34
  return {
29
35
  fetchAppsList,
30
36
  async fetchApp(appId) {
31
- const app = await client.get(constants_1.ENDPOINTS.OAUTH_APP(appId));
37
+ let app;
38
+ try {
39
+ app = await client.get(constants_1.ENDPOINTS.OAUTH_APP(appId));
40
+ }
41
+ catch (err) {
42
+ rethrowNotFound(err, appId);
43
+ }
32
44
  return app ? (0, normalize_app_id_1.normalizeAppId)(app) : null;
33
45
  },
34
46
  async pickApp(promptMessage, formatChoice) {
@@ -62,7 +74,13 @@ function createAppService(client) {
62
74
  * so we fall back to the locally cached value.
63
75
  */
64
76
  async resolveAppCredentials(appId) {
65
- const raw = await client.get(constants_1.ENDPOINTS.OAUTH_APP(appId));
77
+ let raw;
78
+ try {
79
+ raw = await client.get(constants_1.ENDPOINTS.OAUTH_APP(appId));
80
+ }
81
+ catch (err) {
82
+ rethrowNotFound(err, appId);
83
+ }
66
84
  if (!raw)
67
85
  return null;
68
86
  const app = (0, normalize_app_id_1.normalizeAppId)(raw);
@@ -110,7 +128,12 @@ function createAppService(client) {
110
128
  await client.put(constants_1.ENDPOINTS.APP_STORE_APP_UPDATE(appId), body);
111
129
  },
112
130
  async deleteApp(appId) {
113
- await client.delete(constants_1.ENDPOINTS.OAUTH_APP(appId));
131
+ try {
132
+ await client.delete(constants_1.ENDPOINTS.OAUTH_APP(appId));
133
+ }
134
+ catch (err) {
135
+ rethrowNotFound(err, appId);
136
+ }
114
137
  },
115
138
  };
116
139
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/services/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/services/app.ts"],"names":[],"mappings":"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"}
@@ -9,22 +9,28 @@ Implements the authorization code flow to obtain access tokens for the Brevo API
9
9
 
10
10
  ## Project structure
11
11
  ```
12
- src/
13
- oauth/ Self-contained OAuth test feature
14
- package.json Dependencies and scripts
15
- server.js Test server Express app + dotenv + routes
16
- handler.js OAuth routes (/auth/login, /auth/callback)
17
- token-store.js In-memory token management (swap for DB in production)
18
- .env.example Credential template (safe to commit)
19
- .env.local Local credentials (gitignored never commit)
20
- app-config.json App metadata (app ID, redirect URIs, permissions)
12
+ .
13
+ ├── app-config.json App metadata (app ID, redirect URIs, scopes)
14
+ ├── .gitignore Ignores .env.local and build artifacts
15
+ ├── AGENTS.md AI agent guidance (this file)
16
+ ├── CLAUDE.md Claude Code guidance
17
+ ├── README.md Human-facing setup guide
18
+ └── src/
19
+ └── oauth/ Self-contained OAuth test feature
20
+ ├── package.json Dependencies and scripts
21
+ ├── server.js Test server — Express app + dotenv + routes
22
+ ├── handler.js OAuth routes (/auth/login, /auth/callback, /auth/refresh)
23
+ ├── token-store.js In-memory token management (swap for DB in production)
24
+ ├── .env.example Credential template (safe to commit)
25
+ └── .env.local Local credentials (gitignored — never commit)
21
26
  ```
22
27
 
23
28
  ## OAuth server
24
29
  - OAuth uses realm-based paths: `/realms/{realm}/oauth/...`
25
30
  - Default realm: `partner`
26
31
  - Token endpoint expects `application/x-www-form-urlencoded` body (not query params)
27
- - Supported grant types: `authorization_code`, `refresh_token`, `client_credentials`
32
+ - Grant types used by this scaffold: `authorization_code` (callback) and `refresh_token` (`/auth/refresh`)
33
+ - Other grant types supported by the Brevo OAuth server but not wired into this scaffold: `client_credentials`
28
34
 
29
35
  ## OAuth flow
30
36
  1. `/auth/login` — generates CSRF state, redirects user to `{OAUTH_BASE}/realms/{realm}/oauth/authorize`
@@ -35,7 +41,7 @@ app-config.json App metadata (app ID, redirect URIs, permissions)
35
41
 
36
42
  ## Development
37
43
  ```bash
38
- yarn --cwd src/oauth
44
+ yarn --cwd src/oauth install
39
45
  # or: npm --prefix src/oauth install
40
- brevo app start oauth # http://localhost:3009
46
+ brevo app start oauth # port is read from app-config.json; override with --port
41
47
  ```
@@ -1,29 +1,34 @@
1
1
  # CLAUDE.md — {{APP_NAME}}
2
2
 
3
3
  ## Project
4
- Brevo OAuth integration for app `{{CLIENT_ID}}`.
4
+ Brevo OAuth integration for app `{{APP_ID}}`.
5
5
  Scaffolded with the [Brevo CLI](https://github.com/getbrevo/brevo-cli).
6
6
 
7
7
  > **This is a test app** scaffolded by the Brevo CLI to help you test your OAuth integration locally.
8
8
 
9
9
  ## Run
10
10
  ```bash
11
- yarn --cwd src/oauth
11
+ yarn --cwd src/oauth install
12
12
  # or: npm --prefix src/oauth install
13
- brevo app start oauth # starts OAuth test server on http://localhost:3009
13
+ brevo app start oauth # port is read from app-config.json; override with --port
14
14
  ```
15
15
 
16
16
  ## Structure
17
17
  ```
18
- src/
19
- oauth/ Self-contained OAuth test feature
20
- package.json Dependencies and scripts
21
- server.js Test server entry point
22
- handler.js OAuth routes (/auth/login, /auth/callback)
23
- token-store.js In-memory token store
24
- .env.example Credential template (committed)
25
- .env.local Local credentials (gitignored never commit)
26
- app-config.json App metadata
18
+ .
19
+ ├── app-config.json App metadata (ID, scopes, redirect URLs)
20
+ ├── .gitignore Ignores .env.local and build artifacts
21
+ ├── AGENTS.md AI agent guidance
22
+ ├── CLAUDE.md Claude Code guidance (this file)
23
+ ├── README.md Human-facing setup guide
24
+ └── src/
25
+ └── oauth/ Self-contained OAuth test feature
26
+ ├── package.json Dependencies and scripts
27
+ ├── server.js Test server entry point
28
+ ├── handler.js OAuth routes (/auth/login, /auth/callback, /auth/refresh)
29
+ ├── token-store.js In-memory token store
30
+ ├── .env.example Credential template (committed)
31
+ └── .env.local Local credentials (gitignored — never commit)
27
32
  ```
28
33
 
29
34
  ## OAuth server
@@ -47,4 +52,8 @@ app-config.json App metadata
47
52
  - `/auth/refresh` — refreshes tokens using `refresh_token` grant
48
53
 
49
54
  ## Next steps
50
- - Replace in-memory token store with a real database
55
+ - Replace the in-memory token store in `src/oauth/token-store.js` with a real database (the global singleton is process-local so data is lost on restart, and it is not session-isolated, so multiple users/sessions/tabs can read or overwrite the same in-memory tokens)
56
+ - Handle token-refresh failures — `/auth/refresh` currently returns a 500 on any error; surface 401 vs 5xx distinctly so callers can re-trigger `/auth/login` when the refresh token has expired
57
+ - Add `/auth/logout` that calls `POST /realms/{realm}/oauth/revoke` and clears the token store (the endpoint is supported by the OAuth server but the scaffold doesn't use it yet)
58
+ - Add automated tests around the callback and refresh routes (e.g. with `supertest` + axios mocks) before extending the flow
59
+ - Persist (or rotate) the CSRF `state` per session — the scaffold stores a single global state, which is fine for solo localhost testing but not for anything else
@@ -1,6 +1,6 @@
1
1
  # {{APP_NAME}}
2
2
 
3
- Brevo OAuth integration scaffolded with the Brevo CLI.
3
+ Brevo OAuth integration for testing and implementing app authorization flows, scaffolded with the Brevo CLI.
4
4
 
5
5
  > **This is a starter / test app** to help you exercise the OAuth flow locally. Treat it as a reference — it is not intended for production use.
6
6
 
@@ -27,7 +27,7 @@ Brevo OAuth integration scaffolded with the Brevo CLI.
27
27
  ```
28
28
  .
29
29
  ├── app-config.json App config — ID, scopes, redirect URLs
30
- ├── .gitignore Ignores .env.local and build artefacts
30
+ ├── .gitignore Ignores .env.local and build artifacts
31
31
  ├── AGENTS.md AI agent guidance
32
32
  ├── CLAUDE.md Claude Code guidance
33
33
  ├── README.md (this file)
@@ -35,7 +35,7 @@ Brevo OAuth integration scaffolded with the Brevo CLI.
35
35
  └── oauth/ Self-contained OAuth test feature
36
36
  ├── package.json Dependencies & `yarn start` script
37
37
  ├── server.js Test server entry point
38
- ├── handler.js OAuth routes (/auth/login, /auth/callback)
38
+ ├── handler.js OAuth routes (/auth/login, /auth/callback, /auth/refresh)
39
39
  ├── token-store.js In-memory token management
40
40
  ├── .env.example Credential template (committed)
41
41
  └── .env.local Local credentials (gitignored, chmod 600)
@@ -63,7 +63,13 @@ brevo app update --redirect-url https://myapp.com/callback
63
63
  brevo app update --name "New Name" --redirect-url https://myapp.com/callback
64
64
  ```
65
65
 
66
- `--redirect-url` is repeatable and **appends** to existing URLs. Running `brevo app update` without flags pushes the full `app-config.json`. When flags are provided, the local `app-config.json` is updated automatically after a successful API call.
66
+ `--redirect-url` is repeatable and **appends** to existing URLs.
67
+
68
+ To avoid unintentionally accumulating stale redirect URLs over time:
69
+
70
+ - Periodically review your redirect list and remove obsolete entries in `app-config.json`.
71
+ - Run `brevo app update` **without flags** to replace the remote configuration with the local file.
72
+ - When flags are provided, the local `app-config.json` is updated automatically after a successful API call.
67
73
 
68
74
  Outside this project directory, target an app by ID:
69
75
 
@@ -42,6 +42,7 @@ const CLIENT_SECRET = process.env.CLIENT_SECRET;
42
42
  const REDIRECT_URI = process.env.REDIRECT_URI || '{{REDIRECT_URI}}';
43
43
  const OAUTH_BASE = process.env.OAUTH_BASE || '{{OAUTH_BASE}}';
44
44
  const OAUTH_REALM = process.env.OAUTH_REALM || '{{OAUTH_REALM}}';
45
+ const PORT = process.env.PORT || 3009;
45
46
 
46
47
  const realmPath = `${OAUTH_BASE}/realms/${OAUTH_REALM}/oauth`;
47
48
 
@@ -112,6 +113,8 @@ router.get('/callback', async (req, res) => {
112
113
  console.log(`\nAccess token received (expires in ${expires_in}s)`);
113
114
  console.log('Refresh token received');
114
115
  console.log('View tokens in your browser (masked — click to reveal).');
116
+ console.log(`Token refresh: http://localhost:${PORT}/auth/refresh`);
117
+ console.log('Next: use the access token to call the Brevo API, or open src/oauth/handler.js to see how the flow is wired.');
115
118
 
116
119
  // Set no-cache headers — tokens are sensitive (local development only)
117
120
  res.set('Cache-Control', 'no-store, no-cache, must-revalidate');
@@ -49,7 +49,7 @@ const AUTH_URL = `${process.env.OAUTH_BASE}/realms/${process.env.OAUTH_REALM}/oa
49
49
  + `?response_type=code`
50
50
  + `&client_id=${encodeURIComponent(process.env.CLIENT_ID)}`
51
51
  + `&redirect_uri=${encodeURIComponent(REDIRECT_URI)}`
52
- + `&state=<random>`
52
+ + `&state=[random]`
53
53
  + `&scope=${encodeURIComponent(SCOPES)}`;
54
54
 
55
55
  app.use('/auth', authRouter);
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@getbrevo/cli",
3
- "version": "0.0.1-alpha.2",
4
- "author": "Piyush Sarin",
3
+ "version": "1.0.0",
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
8
  "files": [
9
9
  "dist",
10
+ "agent-context",
10
11
  "README.md",
11
12
  "CHANGELOG.md"
12
13
  ],
@@ -30,6 +31,7 @@
30
31
  "format": "prettier --write 'src/**/*.ts'",
31
32
  "format:check": "prettier --check 'src/**/*.ts'",
32
33
  "mock": "npx @stoplight/prism-cli mock mock/openapi.yaml --port 3112",
34
+ "smoke": "tsx scripts/smoke-test.ts",
33
35
  "clean": "rm -rf dist",
34
36
  "prepare": "husky",
35
37
  "prepublishOnly": "npm run clean && npm run build && npm test",
@@ -54,6 +56,7 @@
54
56
  "lint-staged": "^15.2.0",
55
57
  "prettier": "^3.2.0",
56
58
  "ts-jest": "^29.2.0",
59
+ "tsx": "^4.19.0",
57
60
  "typescript": "^5.7.0"
58
61
  },
59
62
  "lint-staged": {
@@ -71,7 +74,11 @@
71
74
  "license": "MIT",
72
75
  "repository": {
73
76
  "type": "git",
74
- "url": "https://github.com/getbrevo/brevo-cli.git"
77
+ "url": "git+https://github.com/getbrevo/brevo-cli.git"
78
+ },
79
+ "homepage": "https://github.com/getbrevo/brevo-cli#readme",
80
+ "bugs": {
81
+ "url": "https://github.com/getbrevo/brevo-cli/issues"
75
82
  },
76
83
  "publishConfig": {
77
84
  "access": "public",
@@ -1,6 +0,0 @@
1
- export declare const testCommand: (opts: {
2
- port?: number;
3
- appId?: string;
4
- json?: boolean;
5
- }) => Promise<void>;
6
- //# sourceMappingURL=test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/commands/app/test.ts"],"names":[],"mappings":"AAoSA,eAAO,MAAM,WAAW;WACG,MAAM;YAAU,MAAM;WAAS,OAAO;mBAgShE,CAAC"}