@getbrevo/cli 2.0.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/CHANGELOG.md +209 -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 -235
  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 -138
  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 -162
  88. package/dist/lang/en.d.ts.map +0 -1
  89. package/dist/lang/en.js +0 -189
  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 -13
  96. package/dist/lib/auth-guard.d.ts.map +0 -1
  97. package/dist/lib/auth-guard.js +0 -60
  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/oauth-freshness.d.ts +0 -30
  144. package/dist/lib/oauth-freshness.d.ts.map +0 -1
  145. package/dist/lib/oauth-freshness.js +0 -61
  146. package/dist/lib/oauth-freshness.js.map +0 -1
  147. package/dist/lib/port.d.ts +0 -25
  148. package/dist/lib/port.d.ts.map +0 -1
  149. package/dist/lib/port.js +0 -103
  150. package/dist/lib/port.js.map +0 -1
  151. package/dist/lib/telemetry.d.ts +0 -9
  152. package/dist/lib/telemetry.d.ts.map +0 -1
  153. package/dist/lib/telemetry.js +0 -57
  154. package/dist/lib/telemetry.js.map +0 -1
  155. package/dist/lib/ui.d.ts +0 -14
  156. package/dist/lib/ui.d.ts.map +0 -1
  157. package/dist/lib/ui.js +0 -75
  158. package/dist/lib/ui.js.map +0 -1
  159. package/dist/lib/update-notifier.d.ts +0 -37
  160. package/dist/lib/update-notifier.d.ts.map +0 -1
  161. package/dist/lib/update-notifier.js +0 -298
  162. package/dist/lib/update-notifier.js.map +0 -1
  163. package/dist/lib/validators.d.ts +0 -55
  164. package/dist/lib/validators.d.ts.map +0 -1
  165. package/dist/lib/validators.js +0 -166
  166. package/dist/lib/validators.js.map +0 -1
  167. package/dist/services/account.d.ts +0 -8
  168. package/dist/services/account.d.ts.map +0 -1
  169. package/dist/services/account.js +0 -15
  170. package/dist/services/account.js.map +0 -1
  171. package/dist/services/app.d.ts +0 -38
  172. package/dist/services/app.d.ts.map +0 -1
  173. package/dist/services/app.js +0 -145
  174. package/dist/services/app.js.map +0 -1
  175. package/dist/services/browser-auth.d.ts +0 -15
  176. package/dist/services/browser-auth.d.ts.map +0 -1
  177. package/dist/services/browser-auth.js +0 -188
  178. package/dist/services/browser-auth.js.map +0 -1
  179. package/dist/services/normalize-app-id.d.ts +0 -12
  180. package/dist/services/normalize-app-id.d.ts.map +0 -1
  181. package/dist/services/normalize-app-id.js +0 -38
  182. package/dist/services/normalize-app-id.js.map +0 -1
  183. package/dist/services/oauth-metadata.d.ts +0 -7
  184. package/dist/services/oauth-metadata.d.ts.map +0 -1
  185. package/dist/services/oauth-metadata.js +0 -43
  186. package/dist/services/oauth-metadata.js.map +0 -1
  187. package/dist/services/oauth-refresh.d.ts +0 -14
  188. package/dist/services/oauth-refresh.d.ts.map +0 -1
  189. package/dist/services/oauth-refresh.js +0 -70
  190. package/dist/services/oauth-refresh.js.map +0 -1
  191. package/dist/services/scopes-html.d.ts +0 -3
  192. package/dist/services/scopes-html.d.ts.map +0 -1
  193. package/dist/services/scopes-html.js +0 -516
  194. package/dist/services/scopes-html.js.map +0 -1
  195. package/dist/services/scopes-web.d.ts +0 -12
  196. package/dist/services/scopes-web.d.ts.map +0 -1
  197. package/dist/services/scopes-web.js +0 -95
  198. package/dist/services/scopes-web.js.map +0 -1
  199. package/dist/services/skill.d.ts +0 -48
  200. package/dist/services/skill.d.ts.map +0 -1
  201. package/dist/services/skill.js +0 -223
  202. package/dist/services/skill.js.map +0 -1
  203. package/dist/skills/index.d.ts +0 -47
  204. package/dist/skills/index.d.ts.map +0 -1
  205. package/dist/skills/index.js +0 -61
  206. package/dist/skills/index.js.map +0 -1
  207. package/dist/templates/files/app-config.json.tmpl +0 -25
  208. package/dist/templates/index.d.ts +0 -36
  209. package/dist/templates/index.d.ts.map +0 -1
  210. package/dist/templates/index.js +0 -105
  211. package/dist/templates/index.js.map +0 -1
  212. package/dist/types.d.ts +0 -32
  213. package/dist/types.d.ts.map +0 -1
  214. package/dist/types.js +0 -3
  215. package/dist/types.js.map +0 -1
  216. /package/dist/{templates → bin}/files/gitignore.tmpl +0 -0
  217. /package/dist/{templates → bin}/files/src/oauth/package.json.tmpl +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-handler.d.ts","sourceRoot":"","sources":["../../src/lib/command-handler.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAC7B,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAE5B"}
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.withCommandHandler = withCommandHandler;
4
- const abort_1 = require("./abort");
5
- /**
6
- * Wraps a command handler with abort handling (Ctrl+C during inquirer prompts).
7
- *
8
- * Usage:
9
- * export const myCommand = withCommandHandler(async (opts) => {
10
- * // command logic
11
- * });
12
- */
13
- function withCommandHandler(fn) {
14
- return (opts) => (0, abort_1.withAbortHandler)(() => fn(opts));
15
- }
16
- //# sourceMappingURL=command-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-handler.js","sourceRoot":"","sources":["../../src/lib/command-handler.ts"],"names":[],"mappings":";;AAUA,gDAIC;AAdD,mCAA2C;AAE3C;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAChC,EAA8B;IAE9B,OAAO,CAAC,IAAO,EAAE,EAAE,CAAC,IAAA,wBAAgB,EAAC,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,CAAC"}
@@ -1,28 +0,0 @@
1
- import { Command } from 'commander';
2
- export interface CommandOption {
3
- flags: string;
4
- description: string;
5
- parser?: (value: string) => unknown;
6
- }
7
- export interface CommandArgument {
8
- name: string;
9
- description: string;
10
- }
11
- export interface CommandDefinition {
12
- name: string;
13
- description: string;
14
- arguments?: CommandArgument[];
15
- options?: CommandOption[];
16
- examples?: string[];
17
- handler: (opts: Record<string, unknown>, ...args: unknown[]) => void | Promise<void>;
18
- }
19
- export interface SubcommandGroupDefinition {
20
- name: string;
21
- description: string;
22
- commands: CommandDefinition[];
23
- }
24
- /**
25
- * Register all commands and subcommand groups onto the program.
26
- */
27
- export declare function registerAll(program: Command, commands: CommandDefinition[], groups: SubcommandGroupDefinition[]): void;
28
- //# sourceMappingURL=command-registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-registry.d.ts","sourceRoot":"","sources":["../../src/lib/command-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,eAAe,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtF;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAiDD;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,MAAM,EAAE,yBAAyB,EAAE,GAClC,IAAI,CAON"}
@@ -1,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerAll = registerAll;
4
- /**
5
- * Register a flat command on the program.
6
- */
7
- function registerCommand(parent, def) {
8
- const cmd = parent.command(def.name).description(def.description);
9
- if (def.arguments) {
10
- for (const arg of def.arguments) {
11
- cmd.argument(arg.name, arg.description);
12
- }
13
- }
14
- if (def.options) {
15
- for (const opt of def.options) {
16
- if (opt.parser) {
17
- cmd.option(opt.flags, opt.description, opt.parser);
18
- }
19
- else {
20
- cmd.option(opt.flags, opt.description);
21
- }
22
- }
23
- }
24
- if (def.examples?.length) {
25
- cmd.addHelpText('after', '\nExamples:\n' + def.examples.map((e) => ` $ ${e}`).join('\n') + '\n');
26
- }
27
- cmd.action((...actionArgs) => {
28
- // Commander passes positional args first, then options object, then Command
29
- const opts = actionArgs.at(-2);
30
- const positionalArgs = actionArgs.slice(0, -2);
31
- return def.handler(opts, ...positionalArgs);
32
- });
33
- }
34
- /**
35
- * Register a group of subcommands (e.g. `app create`, `app list`).
36
- */
37
- function registerSubcommandGroup(parent, group) {
38
- const groupCmd = parent.command(group.name).description(group.description);
39
- for (const def of group.commands) {
40
- registerCommand(groupCmd, def);
41
- }
42
- }
43
- /**
44
- * Register all commands and subcommand groups onto the program.
45
- */
46
- function registerAll(program, commands, groups) {
47
- for (const cmd of commands) {
48
- registerCommand(program, cmd);
49
- }
50
- for (const group of groups) {
51
- registerSubcommandGroup(program, group);
52
- }
53
- }
54
- //# sourceMappingURL=command-registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-registry.js","sourceRoot":"","sources":["../../src/lib/command-registry.ts"],"names":[],"mappings":";;AA8EA,kCAWC;AA7DD;;GAEG;AACH,SAAS,eAAe,CAAC,MAAe,EAAE,GAAsB;IAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAElE,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAChC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACzB,GAAG,CAAC,WAAW,CACb,OAAO,EACP,eAAe,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CACxE,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,EAAE,EAAE;QAC3B,4EAA4E;QAC5E,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAA4B,CAAC;QAC1D,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,cAAc,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,MAAe,EAAE,KAAgC;IAChF,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3E,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CACzB,OAAgB,EAChB,QAA6B,EAC7B,MAAmC;IAEnC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}
@@ -1,83 +0,0 @@
1
- export declare function getCredentialsPath(): string;
2
- export interface AppCredential {
3
- clientId: string;
4
- clientSecret: string;
5
- }
6
- export type AuthCred = {
7
- kind: 'api-key';
8
- apiKey: string;
9
- } | {
10
- kind: 'oauth';
11
- accessToken: string;
12
- refreshToken: string;
13
- expiresAt: number;
14
- tokenType: string;
15
- scope?: string;
16
- };
17
- export declare function getApiKey(): string | undefined;
18
- export declare function getAccessToken(): string | undefined;
19
- export declare function getAuthCred(): AuthCred | undefined;
20
- export declare function getEmail(): string | undefined;
21
- export declare function getOrganizationId(): string | undefined;
22
- export declare function getUserId(): number | undefined;
23
- export declare function saveCredentials(apiKey: string, account: {
24
- email: string;
25
- organizationId: string;
26
- userId: number;
27
- }): void;
28
- export interface OauthTokensToStore {
29
- accessToken: string;
30
- refreshToken: string;
31
- expiresIn: number;
32
- tokenType: string;
33
- scope?: string;
34
- }
35
- export declare function saveOauthCredentials(tokens: OauthTokensToStore, account?: {
36
- email: string;
37
- organizationId: string;
38
- userId: number;
39
- }): void;
40
- export declare function updateOauthTokens(tokens: OauthTokensToStore): void;
41
- export declare function clearCredentials(): void;
42
- export declare function deleteCredentialsFile(): void;
43
- export declare function hasAppCredentials(): boolean;
44
- export declare function countAppCredentials(): number;
45
- export declare function isAuthenticated(): boolean;
46
- export declare function saveAppCredentials(appId: string, cred: AppCredential): void;
47
- export declare function clearAppsCache(): void;
48
- export declare function getAppCredentials(appId: string): AppCredential | undefined;
49
- export declare function deleteAppCredentials(appId: string): void;
50
- export declare function saveAppName(appId: string, name: string): void;
51
- export declare function getAppNames(): Record<string, string>;
52
- export declare function deleteAppName(appId: string): void;
53
- export interface ProjectConfig {
54
- appId: string;
55
- appName: string;
56
- logoUri?: string;
57
- cliVersion?: string;
58
- createdAt?: string;
59
- updatedAt?: string;
60
- auth: {
61
- type: string;
62
- scopes: string[];
63
- redirectUrls?: string[];
64
- };
65
- distribution: string;
66
- permittedUrls: {
67
- fetch: string[];
68
- img: string[];
69
- iframe: string[];
70
- js: string[];
71
- css: string[];
72
- };
73
- support: {
74
- supportEmail: string;
75
- documentationUrl: string;
76
- supportUrl: string;
77
- supportPhone: string;
78
- };
79
- }
80
- export declare function readProjectConfig(): ProjectConfig | null;
81
- export declare function hasLocalApp(): boolean;
82
- export declare function writeProjectConfig(config: ProjectConfig): void;
83
- //# sourceMappingURL=config.d.ts.map
@@ -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":"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"}