@getbrevo/cli 1.1.0 → 2.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 (75) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +19 -2
  3. package/agent-context/AGENTS.md +16 -5
  4. package/agent-context/SKILL.md +17 -3
  5. package/dist/api/client.d.ts +2 -0
  6. package/dist/api/client.d.ts.map +1 -1
  7. package/dist/api/client.js +50 -36
  8. package/dist/api/client.js.map +1 -1
  9. package/dist/bin/index.js +19 -4
  10. package/dist/bin/index.js.map +1 -1
  11. package/dist/commands/app/create.d.ts.map +1 -1
  12. package/dist/commands/app/create.js +240 -221
  13. package/dist/commands/app/create.js.map +1 -1
  14. package/dist/commands/app/delete.d.ts.map +1 -1
  15. package/dist/commands/app/delete.js +81 -62
  16. package/dist/commands/app/delete.js.map +1 -1
  17. package/dist/commands/app/list.d.ts.map +1 -1
  18. package/dist/commands/app/list.js +10 -3
  19. package/dist/commands/app/list.js.map +1 -1
  20. package/dist/commands/app/scaffold.d.ts.map +1 -1
  21. package/dist/commands/app/scaffold.js +12 -2
  22. package/dist/commands/app/scaffold.js.map +1 -1
  23. package/dist/commands/app/scopes.d.ts.map +1 -1
  24. package/dist/commands/app/scopes.js +2 -0
  25. package/dist/commands/app/scopes.js.map +1 -1
  26. package/dist/commands/app/start.d.ts.map +1 -1
  27. package/dist/commands/app/start.js +7 -0
  28. package/dist/commands/app/start.js.map +1 -1
  29. package/dist/commands/app/update.d.ts.map +1 -1
  30. package/dist/commands/app/update.js +297 -266
  31. package/dist/commands/app/update.js.map +1 -1
  32. package/dist/commands/login.d.ts.map +1 -1
  33. package/dist/commands/login.js +154 -138
  34. package/dist/commands/login.js.map +1 -1
  35. package/dist/commands/whoami.d.ts.map +1 -1
  36. package/dist/commands/whoami.js +27 -20
  37. package/dist/commands/whoami.js.map +1 -1
  38. package/dist/lang/en.d.ts +23 -1
  39. package/dist/lang/en.d.ts.map +1 -1
  40. package/dist/lang/en.js +25 -1
  41. package/dist/lang/en.js.map +1 -1
  42. package/dist/lib/auth-guard.d.ts.map +1 -1
  43. package/dist/lib/auth-guard.js +10 -1
  44. package/dist/lib/auth-guard.js.map +1 -1
  45. package/dist/lib/constants.d.ts +10 -3
  46. package/dist/lib/constants.d.ts.map +1 -1
  47. package/dist/lib/constants.js +19 -4
  48. package/dist/lib/constants.js.map +1 -1
  49. package/dist/lib/logger.d.ts.map +1 -1
  50. package/dist/lib/logger.js +16 -3
  51. package/dist/lib/logger.js.map +1 -1
  52. package/dist/lib/telemetry.d.ts +9 -0
  53. package/dist/lib/telemetry.d.ts.map +1 -0
  54. package/dist/lib/telemetry.js +57 -0
  55. package/dist/lib/telemetry.js.map +1 -0
  56. package/dist/lib/update-notifier.d.ts +3 -0
  57. package/dist/lib/update-notifier.d.ts.map +1 -1
  58. package/dist/lib/update-notifier.js +77 -34
  59. package/dist/lib/update-notifier.js.map +1 -1
  60. package/dist/lib/validators.d.ts +6 -0
  61. package/dist/lib/validators.d.ts.map +1 -1
  62. package/dist/lib/validators.js +10 -0
  63. package/dist/lib/validators.js.map +1 -1
  64. package/dist/services/app.d.ts +1 -1
  65. package/dist/services/app.d.ts.map +1 -1
  66. package/dist/services/app.js +6 -6
  67. package/dist/services/app.js.map +1 -1
  68. package/dist/services/scopes-html.d.ts.map +1 -1
  69. package/dist/services/scopes-html.js +208 -29
  70. package/dist/services/scopes-html.js.map +1 -1
  71. package/dist/services/skill.js +1 -1
  72. package/dist/services/skill.js.map +1 -1
  73. package/dist/types.d.ts +2 -2
  74. package/dist/types.d.ts.map +1 -1
  75. package/package.json +1 -2
package/dist/lang/en.js CHANGED
@@ -7,6 +7,11 @@ exports.messages = {
7
7
  UPDATE_AVAILABLE: (current, latest) => `Update available: ${current} → ${latest}`,
8
8
  UPDATE_RUN: (name) => `Run: npm install -g ${name}`,
9
9
  UPDATE_RUN_YARN: (name) => `Or: yarn global add ${name}`,
10
+ // Homebrew formula is `brevo` (tap getbrevo/tap), not the npm package name.
11
+ UPDATE_RUN_BREW: 'Or: brew upgrade brevo',
12
+ // Force update (major-version behind — blocks the command)
13
+ FORCE_UPDATE_REQUIRED: (current, latest) => `Update required: v${current} is no longer supported (latest v${latest}).`,
14
+ FORCE_UPDATE_HINT: 'Update to continue using the Brevo CLI:',
10
15
  // Auth
11
16
  AUTH_WELCOME: 'Welcome to Brevo CLI',
12
17
  AUTH_PROMPT_METHOD: 'How would you like to authenticate?',
@@ -81,6 +86,12 @@ exports.messages = {
81
86
  APP_UPDATE_NO_APP_RESOLVED: 'Cannot determine which app to update. Provide --app-id or run from a directory with app-config.json.',
82
87
  APP_UPDATE_APP_ID_MISMATCH: (flagId, configId) => `--app-id ${flagId} does not match app-config.json (${configId}). Pass --name or --redirect-uri to update app ${flagId}, or remove --app-id to update app ${configId}.`,
83
88
  APP_UPDATE_SCOPES_APPENDED: (scopes) => `Scopes appended: ${scopes.join(', ')}`,
89
+ // Legacy 'all' scope deprecation (BEX-214)
90
+ LEGACY_ALL_SCOPE_DEPRECATED_BLOCK: `This app currently has the legacy 'all' OAuth scope, which is being deprecated.\n Replace 'all' with the specific scopes your integration uses (if you keep an app-config.json, edit auth.scopes there too).\n Run \`${constants_1.CLI.APP_SCOPES}\` to see the catalog, then re-run \`${constants_1.CLI.APP_UPDATE_SCOPE} <scope>\` (repeatable) to migrate.`,
91
+ LEGACY_ALL_SCOPE_START_BLOCK: `This app's auth.scopes in app-config.json still contains the legacy 'all' OAuth scope, which is being deprecated.\n Replace 'all' with the specific scopes your integration uses (run \`${constants_1.CLI.APP_SCOPES}\` to see the catalog),\n migrate with \`${constants_1.CLI.APP_UPDATE_SCOPE} <scope>\` (repeatable), then re-run \`${constants_1.CLI.APP_START('oauth')}\`.`,
92
+ LEGACY_ALL_SCOPE_LIST_TAG: ` (legacy 'all' — deprecated)`,
93
+ LEGACY_ALL_SCOPE_SCAFFOLD_SUBSTITUTED: (writtenScopes) => `This app still has the legacy 'all' OAuth scope (deprecated). Wrote ${writtenScopes} to app-config.json instead of 'all'. Migrate the app with \`${constants_1.CLI.APP_UPDATE_SCOPE} <scope>\`.`,
94
+ LEGACY_ALL_SCOPE_UPDATE_MIGRATING: `Migrating from legacy 'all' scope — 'all' will be removed.`,
84
95
  // App delete
85
96
  APP_DELETE_CONFIRM: (name, id) => `Delete app "${name}" (${id})? This cannot be undone.`,
86
97
  APP_DELETE_SUCCESS: (id) => `App ${id} deleted.`,
@@ -136,7 +147,7 @@ exports.messages = {
136
147
  INIT_DONE: `All set! Run \`${constants_1.CLI.APP_START('oauth')}\` to test your OAuth flow, or \`${constants_1.CLI.HELP}\` to see all commands.`,
137
148
  // Skill
138
149
  SKILL_INSTALL_SUCCESS: (name, version, dir) => `Installed ${name}@${version} → ${dir}`,
139
- SKILL_INSTALL_CLAUDE_ONLY: 'This skill is consumed by Claude (Claude Code, Claude Desktop). Other AI tools (Cursor, Copilot CLI, Gemini, etc.) should reference agent-context/AGENTS.md from the @getbrevo/cli npm package instead.',
150
+ SKILL_INSTALL_CLAUDE_ONLY: 'This skill is consumed by Claude Code. Other AI tools (Claude Desktop chat, Cursor, Copilot CLI, Gemini, etc.) should reference agent-context/AGENTS.md from the @getbrevo/cli npm package instead.',
140
151
  SKILL_INSTALL_ALREADY: (name, version) => `${name}@${version} is already up to date.`,
141
152
  SKILL_UNINSTALL_SUCCESS: (name, dir) => `Uninstalled ${name} from ${dir}`,
142
153
  SKILL_UNINSTALL_NONE: 'No Brevo skills installed.',
@@ -145,6 +156,8 @@ exports.messages = {
145
156
  // App scopes
146
157
  APP_SCOPES_EMPTY: 'The IdP returned an empty scope list.',
147
158
  APP_SCOPES_USAGE_HINT: `Add a scope to an app with \`${constants_1.CLI.APP_UPDATE_SCOPE} <scope> --app-id <id>\`.`,
159
+ APP_SCOPES_DOCS_HINT: `Full CLI reference: ${constants_1.BREVO_CLI_REFERENCE_URL}`,
160
+ APP_SCOPES_CATALOG_DOCS_HINT: `Scope catalog docs: ${constants_1.BREVO_OAUTH_SCOPES_DOCS_URL}`,
148
161
  APP_SCOPES_WEB_LISTENING: (url) => `Open in browser: ${url} (Ctrl+C to stop)`,
149
162
  APP_SCOPES_WEB_TITLE: 'Brevo OAuth scopes',
150
163
  APP_SCOPES_WEB_INTRO: (count, sourceUrl) => `${count} scope${count === 1 ? '' : 's'} from ${sourceUrl}`,
@@ -156,6 +169,17 @@ exports.messages = {
156
169
  APP_SCOPES_WEB_REFRESH_FAILED: `Refresh failed. Please restart \`${constants_1.CLI.APP_SCOPES} --web\` to retry.`,
157
170
  APP_SCOPES_WEB_ENDPOINTS_LABEL: 'API endpoints',
158
171
  APP_SCOPES_WEB_NO_ENDPOINTS: 'No API endpoints listed for this scope.',
172
+ APP_SCOPES_WEB_COPY: 'Copy',
173
+ APP_SCOPES_WEB_COPIED: 'Copied!',
174
+ // {category} / {scope} are replaced client-side in the web page script.
175
+ APP_SCOPES_WEB_COPY_CATEGORY_ARIA: 'Copy {category} scopes',
176
+ APP_SCOPES_WEB_SELECT_SCOPE_ARIA: 'Select {scope}',
177
+ APP_SCOPES_WEB_COPY_SELECTED: 'Copy selected',
178
+ APP_SCOPES_WEB_SELECTED_PLACEHOLDER: `Tick scopes to build a comma-separated list for \`${constants_1.CLI.APP_UPDATE_SCOPE}\` or app-config.json`,
179
+ APP_SCOPES_WEB_LEGACY_BADGE: 'deprecated',
180
+ APP_SCOPES_WEB_LEGACY_TITLE: `Legacy 'all' scope — replace with the granular scopes your integration uses.`,
181
+ APP_SCOPES_WEB_DOCS_LINK: 'Full CLI reference',
182
+ APP_SCOPES_WEB_CATALOG_DOCS_CTA: 'Read the scope catalog docs',
159
183
  OAUTH_METADATA_MISSING_SCOPES: 'IdP scopes response did not include a scopes array.',
160
184
  OAUTH_METADATA_FETCH_FAILED: (url, status) => `Failed to fetch OAuth scopes from ${url} (HTTP ${status}).`,
161
185
  // General
@@ -1 +1 @@
1
- {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/lang/en.ts"],"names":[],"mappings":";;;AAAA,gDAAuC;AAE1B,QAAA,QAAQ,GAAG;IACtB,kBAAkB;IAClB,gBAAgB,EAAE,CAAC,OAAe,EAAE,MAAc,EAAU,EAAE,CAC5D,qBAAqB,OAAO,MAAM,MAAM,EAAE;IAC5C,UAAU,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,uBAAuB,IAAI,EAAE;IACnE,eAAe,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,wBAAwB,IAAI,EAAE;IAEzE,OAAO;IACP,YAAY,EAAE,sBAAsB;IACpC,kBAAkB,EAAE,qCAAqC;IACzD,mBAAmB,EAAE,qBAAqB;IAC1C,YAAY,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,oBAAoB,KAAK,EAAE;IAC5D,gBAAgB,EAAE,8CAA8C;IAChE,SAAS,EAAE,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE,CAC9C,oEAAoE,OAAO,aAAa,OAAO,IAAI;IACrG,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,wBAAwB,IAAI,EAAE;IAC5D,SAAS,EAAE,SAAS,eAAG,CAAC,UAAU,EAAE;IACpC,sBAAsB,EAAE,kCAAkC;IAC1D,kBAAkB,EAAE,8BAA8B;IAClD,eAAe,EAAE,sBAAsB;IACvC,yBAAyB,EAAE,CAAC,KAAa,EAAE,EAAE,CAC3C,yDAAyD,KAAK,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;IAChG,uBAAuB,EACrB,iLAAiL;IACnL,mBAAmB,EAAE,sBAAsB;IAC3C,YAAY,EAAE,qCAAqC;IACnD,mBAAmB,EAAE,sBAAsB;IAC3C,gBAAgB,EAAE,+DAA+D;IACjF,oBAAoB,EAAE,uCAAuC;IAC7D,yBAAyB,EAAE,CAAC,GAAW,EAAE,EAAE,CACzC,0EAA0E,GAAG,EAAE;IACjF,oBAAoB,EAAE,qDAAqD;IAC3E,4BAA4B,EAAE,CAAC,IAAY,EAAE,EAAE,CAC7C,wCAAwC,IAAI,wBAAwB;IACtE,oBAAoB,EAClB,0MAA0M;IAC5M,sBAAsB,EAAE,kBAAkB;IAC1C,wBAAwB,EAAE,+DAA+D;IACzF,4BAA4B,EAC1B,mGAAmG;IAErG,SAAS;IACT,oBAAoB,EAAE,CAAC,KAAa,EAAE,OAAe,EAAE,EAAE,CACvD,oBAAoB,KAAK,KAAK,OAAO,GAAG;IAC1C,wBAAwB,EAAE,2BAA2B,eAAG,CAAC,KAAK,EAAE;IAChE,0BAA0B,EAAE,CAAC,MAAgB,EAAE,EAAE,CAC/C,4CAA4C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,eAAG,CAAC,KAAK,wBAAwB;IAE3G,aAAa;IACb,sBAAsB,EAAE,WAAW;IACnC,sBAAsB,EAAE,oBAAoB;IAC5C,kBAAkB,EAAE,cAAc;IAClC,0BAA0B,EAAE,4BAA4B;IACxD,qBAAqB,EAAE,mDAAmD;IAC1E,0BAA0B,EACxB,uEAAuE;IACzE,wBAAwB,EAAE,CAAC,GAAW,EAAE,EAAE,CACxC,sGAAsG,GAAG,KAAK;IAChH,2BAA2B,EAAE,2BAA2B;IACxD,yBAAyB,EAAE,8BAA8B;IACzD,2BAA2B,EAAE,qDAAqD;IAClF,sBAAsB,EACpB,mFAAmF;IACrF,uBAAuB,EACrB,mFAAmF;IACrF,sBAAsB,EAAE,CAAC,IAAY,EAAE,SAAiB,EAAE,EAAE,CAC1D,QAAQ,IAAI,kCAAkC,SAAS,GAAG;IAC5D,2BAA2B,EAAE,CAAC,IAAY,EAAE,EAAE,CAC5C,4CAA4C,IAAI,mBAAmB,IAAI,4CAA4C;IACrH,wBAAwB,EACtB,oIAAoI;IACtI,6BAA6B,EAC3B,+FAA+F;IACjG,oBAAoB,EAAE,aAAa;IACnC,2BAA2B,EAAE,iBAAiB;IAC9C,yBAAyB,EAAE,uCAAuC,eAAG,CAAC,gBAAgB,UAAU;IAEhG,WAAW;IACX,cAAc,EAAE,mCAAmC,eAAG,CAAC,UAAU,EAAE;IACnE,eAAe,EAAE,kBAAkB;IAEnC,kBAAkB;IAClB,8BAA8B,EAAE,oDAAoD;IACpF,sBAAsB,EAAE,gBAAgB;IACxC,0BAA0B,EAAE,mBAAmB,eAAG,CAAC,sBAAsB,EAAE,KAAK;IAChF,yBAAyB,EAAE,UAAU;IACrC,2BAA2B,EAAE,iBAAiB;IAE9C,aAAa;IACb,uBAAuB,EACrB,6EAA6E;IAC/E,yBAAyB,EAAE,qCAAqC;IAChE,2BAA2B,EAAE,kDAAkD;IAC/E,yBAAyB,EAAE,sEAAsE;IACjG,+BAA+B,EAAE,CAAC,GAAW,EAAE,EAAE,CAC/C,yBAAyB,GAAG,6CAA6C;IAC3E,oCAAoC,EAAE,CAAC,GAAW,EAAE,EAAE,CACpD,yBAAyB,GAAG,kCAAkC;IAChE,kBAAkB,EAAE,iBAAiB;IACrC,kBAAkB,EAAE,sBAAsB;IAC1C,oBAAoB,EAAE,mBAAmB;IACzC,kBAAkB,EAAE,cAAc;IAClC,4BAA4B,EAC1B,sIAAsI;IACxI,0BAA0B,EACxB,sGAAsG;IACxG,0BAA0B,EAAE,CAAC,MAAc,EAAE,QAAgB,EAAE,EAAE,CAC/D,YAAY,MAAM,oCAAoC,QAAQ,kDAAkD,MAAM,sCAAsC,QAAQ,GAAG;IACzK,0BAA0B,EAAE,CAAC,MAAgB,EAAU,EAAE,CAAC,oBAAoB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;IAEjG,aAAa;IACb,kBAAkB,EAAE,CAAC,IAAY,EAAE,EAAU,EAAE,EAAE,CAC/C,eAAe,IAAI,MAAM,EAAE,2BAA2B;IACxD,kBAAkB,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,OAAO,EAAE,WAAW;IACxD,oBAAoB,EAAE,mBAAmB;IACzC,yBAAyB,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,sCAAsC,GAAG,GAAG;IACxF,yBAAyB,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,2BAA2B,GAAG,EAAE;IAC5E,wBAAwB,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,2BAA2B,GAAG,uBAAuB;IAEhG,eAAe;IACf,uBAAuB,EAAE,mBAAmB;IAC5C,uBAAuB,EAAE,sDAAsD;IAC/E,+BAA+B,EAAE,kHAAkH,eAAG,CAAC,UAAU,4BAA4B;IAC7L,oBAAoB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,wBAAwB,KAAK,SAAS;IAC/E,6BAA6B,EAAE,YAAY;IAC3C,6BAA6B,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC;QAC9C,SAAS,GAAG,EAAE;QACd,yBAAyB;QACzB,yCAAyC;QACzC,MAAM,eAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;KAC/B;IACD,uBAAuB,EAAE,qCAAqC,eAAG,CAAC,UAAU,2BAA2B,eAAG,CAAC,gBAAgB,0FAA0F,eAAG,CAAC,UAAU,KAAK;IAExO,YAAY;IACZ,2BAA2B,EAAE,CAAC,SAAiB,EAAE,EAAE,CACjD,gDAAgD,SAAS,0BAA0B,OAAO,CAAC,GAAG,EAAE,sHAAsH;IACxN,iBAAiB,EAAE,CAAC,UAAkB,EAAE,EAAE,CACxC,gDAAgD,UAAU,yBAAyB,UAAU,oBAAoB;IACnH,iBAAiB,EAAE,kBAAkB;IACrC,yBAAyB,EAAE,CAAC,SAAiB,EAAE,EAAE,CAC/C,iDAAiD,SAAS,cAAc,eAAG,CAAC,SAAS,EAAE,EAAE;IAC3F,yBAAyB,EAAE,CAAC,OAAe,EAAE,SAAiB,EAAE,EAAE,CAChE,oBAAoB,OAAO,0BAA0B,SAAS,EAAE;IAClE,qBAAqB,EAAE,CAAC,IAAY,EAAE,EAAE,CACtC,QAAQ,IAAI,+DAA+D,IAAI,wFAAwF,eAAG,CAAC,UAAU,0DAA0D;IACjP,4BAA4B,EAAE,CAAC,IAAY,EAAE,EAAE,CAC7C,QAAQ,IAAI,wDAAwD,IAAI,wFAAwF,eAAG,CAAC,UAAU,0DAA0D;IAC1O,gBAAgB,EAAE,CAAC,OAAe,EAAE,IAAY,EAAE,EAAE,CAAC,GAAG,OAAO,qBAAqB,IAAI,EAAE;IAC1F,gBAAgB,EAAE,CAAC,OAAe,EAAE,KAAa,EAAE,EAAE,CAAC,mBAAmB,OAAO,KAAK,KAAK,EAAE;IAC5F,iCAAiC,EAAE,CAAC,IAAY,EAAE,EAAE,CAClD,QAAQ,IAAI,mDAAmD;IACjE,kCAAkC,EAAE,CAAC,GAAW,EAAE,EAAE,CAClD,YAAY,GAAG,wCAAwC;IACzD,8BAA8B,EAAE,6BAA6B;IAC7D,6BAA6B,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,cAAc,GAAG,GAAG;IACpE,2BAA2B,EAAE,CAAC,GAAW,EAAE,EAAE,CAC3C,yDAAyD,GAAG,2CAA2C,eAAG,CAAC,UAAU,mBAAmB,GAAG,uBAAuB;IACpK,kCAAkC,EAAE,CAAC,IAAY,EAAE,GAAW,EAAE,EAAE,CAChE,QAAQ,IAAI,yGAAyG,eAAG,CAAC,UAAU,mBAAmB,GAAG,oCAAoC;IAE/L,2BAA2B,EACzB,8EAA8E;IAEhF,SAAS;IACT,WAAW,EAAE,yBAAyB;IACtC,gBAAgB,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,6BAA6B,UAAU,aAAa;IAC9F,YAAY,EAAE,6DAA6D;IAC3E,gBAAgB,EACd,+HAA+H;IAEjI,oBAAoB;IACpB,yBAAyB,EACvB,sJAAsJ;IAExJ,OAAO;IACP,YAAY,EAAE,yBAAyB;IACvC,sBAAsB,EAAE,wBAAwB;IAChD,eAAe,EAAE,gDAAgD;IACjE,gBAAgB,EAAE,uCAAuC;IACzD,eAAe,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,YAAY,KAAK,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,WAAW;IAC7F,eAAe,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,IAAI,gDAAgD;IAC/F,eAAe,EAAE,4BAA4B;IAC7C,SAAS,EAAE,kBAAkB,eAAG,CAAC,SAAS,CAAC,OAAO,CAAC,oCAAoC,eAAG,CAAC,IAAI,yBAAyB;IAExH,QAAQ;IACR,qBAAqB,EAAE,CAAC,IAAY,EAAE,OAAe,EAAE,GAAW,EAAE,EAAE,CACpE,aAAa,IAAI,IAAI,OAAO,MAAM,GAAG,EAAE;IACzC,yBAAyB,EACvB,yMAAyM;IAC3M,qBAAqB,EAAE,CAAC,IAAY,EAAE,OAAe,EAAE,EAAE,CACvD,GAAG,IAAI,IAAI,OAAO,yBAAyB;IAC7C,uBAAuB,EAAE,CAAC,IAAY,EAAE,GAAW,EAAE,EAAE,CAAC,eAAe,IAAI,SAAS,GAAG,EAAE;IACzF,oBAAoB,EAAE,4BAA4B;IAClD,mBAAmB,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,MAAc,EAAE,EAAE,CACpE,eAAe,IAAI,YAAY,MAAM,OAAO,MAAM,GAAG;IACvD,wBAAwB,EAAE,CAAC,IAAY,EAAE,GAAW,EAAE,EAAE,CACtD,uBAAuB,IAAI,WAAW,GAAG,EAAE;IAE7C,aAAa;IACb,gBAAgB,EAAE,uCAAuC;IACzD,qBAAqB,EAAE,gCAAgC,eAAG,CAAC,gBAAgB,2BAA2B;IACtG,wBAAwB,EAAE,CAAC,GAAW,EAAU,EAAE,CAAC,oBAAoB,GAAG,mBAAmB;IAC7F,oBAAoB,EAAE,oBAAoB;IAC1C,oBAAoB,EAAE,CAAC,KAAa,EAAE,SAAiB,EAAU,EAAE,CACjE,GAAG,KAAK,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,SAAS,EAAE;IAC7D,iCAAiC,EAAE,gBAAgB;IACnD,oBAAoB,EAAE,uCAAuC;IAC7D,qBAAqB,EAAE,wEAAwE;IAC/F,sBAAsB,EAAE,SAAS;IACjC,yBAAyB,EAAE,aAAa;IACxC,6BAA6B,EAAE,oCAAoC,eAAG,CAAC,UAAU,oBAAoB;IACrG,8BAA8B,EAAE,eAAe;IAC/C,2BAA2B,EAAE,yCAAyC;IACtE,6BAA6B,EAAE,qDAAqD;IACpF,2BAA2B,EAAE,CAAC,GAAW,EAAE,MAAc,EAAU,EAAE,CACnE,qCAAqC,GAAG,UAAU,MAAM,IAAI;IAE9D,UAAU;IACV,OAAO,EAAE,UAAU;CACX,CAAC"}
1
+ {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/lang/en.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-guard.d.ts","sourceRoot":"","sources":["../../src/lib/auth-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8BvD"}
1
+ {"version":3,"file":"auth-guard.d.ts","sourceRoot":"","sources":["../../src/lib/auth-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8BvD"}
@@ -4,7 +4,16 @@ exports.installAuthGuard = installAuthGuard;
4
4
  const config_1 = require("./config");
5
5
  const constants_1 = require("./constants");
6
6
  const errors_1 = require("./errors");
7
- const UNAUTHENTICATED_COMMANDS = new Set(['login', 'help', 'init', 'whoami', 'logout']);
7
+ // `available-scopes` only fetches the public IdP scope catalog (no Brevo API
8
+ // key involved), so it works before `brevo login`.
9
+ const UNAUTHENTICATED_COMMANDS = new Set([
10
+ 'login',
11
+ 'help',
12
+ 'init',
13
+ 'whoami',
14
+ 'logout',
15
+ 'available-scopes',
16
+ ]);
8
17
  // Subcommand groups whose entire subtree is local-only and never needs auth.
9
18
  // Skill management touches files under ~/.claude/ — there is nothing to call
10
19
  // against the Brevo API.
@@ -1 +1 @@
1
- {"version":3,"file":"auth-guard.js","sourceRoot":"","sources":["../../src/lib/auth-guard.ts"],"names":[],"mappings":";;AAWA,4CA8BC;AAxCD,qCAA2C;AAC3C,2CAAkC;AAClC,qCAAoC;AAEpC,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxF,6EAA6E;AAC7E,6EAA6E;AAC7E,yBAAyB;AACzB,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAEtD,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,aAAa,EAAE,EAAE;QACvD,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QAEhD,iEAAiE;QACjE,mEAAmE;QACnE,iEAAiE;QACjE,yCAAyC;QACzC,IAAI,aAAa,KAAK,WAAW,IAAI,WAAW,KAAK,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACpE,OAAO;QACT,CAAC;QAED,sDAAsD;QACtD,IACE,wBAAwB,CAAC,GAAG,CAAC,WAAW,CAAC;YACzC,CAAC,UAAU,IAAI,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EACxB,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAA,wBAAe,GAAE,EAAE,CAAC;YACvB,MAAM,IAAI,iBAAQ,CAAC,2BAA2B,eAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"auth-guard.js","sourceRoot":"","sources":["../../src/lib/auth-guard.ts"],"names":[],"mappings":";;AAoBA,4CA8BC;AAjDD,qCAA2C;AAC3C,2CAAkC;AAClC,qCAAoC;AAEpC,6EAA6E;AAC7E,mDAAmD;AACnD,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IACvC,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,kBAAkB;CACnB,CAAC,CAAC;AACH,6EAA6E;AAC7E,6EAA6E;AAC7E,yBAAyB;AACzB,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAEtD,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,aAAa,EAAE,EAAE;QACvD,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QAEhD,iEAAiE;QACjE,mEAAmE;QACnE,iEAAiE;QACjE,yCAAyC;QACzC,IAAI,aAAa,KAAK,WAAW,IAAI,WAAW,KAAK,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACpE,OAAO;QACT,CAAC;QAED,sDAAsD;QACtD,IACE,wBAAwB,CAAC,GAAG,CAAC,WAAW,CAAC;YACzC,CAAC,UAAU,IAAI,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EACxB,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAA,wBAAe,GAAE,EAAE,CAAC;YACvB,MAAM,IAAI,iBAAQ,CAAC,2BAA2B,eAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,11 +1,15 @@
1
1
  export declare function warnIfPathStripped(): void;
2
2
  export declare const API_BASE: string;
3
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
+ };
4
9
  export declare const ENDPOINTS: {
5
10
  readonly ACCOUNT: "/v3/account";
6
- readonly OAUTH_APPS: "/v3/oauth/apps";
7
- readonly OAUTH_APP: (appId: string) => string;
8
- readonly APP_STORE_APP_UPDATE: (appId: string) => string;
11
+ readonly APP_STORE_APPS: "/v3/app-store/apps";
12
+ readonly APP_STORE_APP: (appId: string) => string;
9
13
  readonly OAUTH_AUTHORIZE: "/oauth/authorize";
10
14
  readonly OAUTH_TOKEN: "/oauth/token";
11
15
  };
@@ -33,9 +37,12 @@ export declare const PLACEHOLDER_CLIENT_ID = "YOUR_CLIENT_ID";
33
37
  export declare const OAUTH_BASE = "https://oauth.brevo.com";
34
38
  export declare const OAUTH_REALM = "partner";
35
39
  export declare const OAUTH_SCOPES_URL = "https://oauth.brevo.com/realms/partner/scopes";
40
+ export declare const LEGACY_ALL_SCOPE = "all";
36
41
  export declare const DEFAULT_SCOPES: readonly string[];
37
42
  export declare const BREVO_DASHBOARD_API_KEYS_URL = "https://app.brevo.com/settings/keys/api";
38
43
  export declare const BREVO_API_KEY_DOCS_URL = "https://developers.brevo.com/docs/api-key-authentication";
39
44
  export declare const BREVO_STATUS_URL = "https://status.brevo.com";
40
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";
41
48
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
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;AAEtD,eAAO,MAAM,SAAS;;;gCAGD,MAAM;2CACK,MAAM;;;CAG5B,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;AAE7E,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"}
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,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BREVO_DOCS_URL = exports.BREVO_STATUS_URL = exports.BREVO_API_KEY_DOCS_URL = exports.BREVO_DASHBOARD_API_KEYS_URL = exports.DEFAULT_SCOPES = 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.OAUTH_PROXY_URL = exports.API_BASE = void 0;
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
4
  exports.warnIfPathStripped = warnIfPathStripped;
5
5
  const errors_1 = require("./errors");
6
6
  // Track whether URL suffix parts were stripped for deferred warning (avoid side effects at import time)
@@ -59,11 +59,20 @@ function resolveOauthProxyUrl() {
59
59
  return parsed.origin;
60
60
  }
61
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
+ };
62
72
  exports.ENDPOINTS = {
63
73
  ACCOUNT: '/v3/account',
64
- OAUTH_APPS: '/v3/oauth/apps',
65
- OAUTH_APP: (appId) => `/v3/oauth/apps/${encodeURIComponent(appId)}`,
66
- APP_STORE_APP_UPDATE: (appId) => `/v3/app-store/apps/${encodeURIComponent(appId)}`,
74
+ APP_STORE_APPS: '/v3/app-store/apps',
75
+ APP_STORE_APP: (appId) => `/v3/app-store/apps/${encodeURIComponent(appId)}`,
67
76
  OAUTH_AUTHORIZE: '/oauth/authorize',
68
77
  OAUTH_TOKEN: '/oauth/token',
69
78
  };
@@ -93,6 +102,10 @@ exports.PLACEHOLDER_CLIENT_ID = 'YOUR_CLIENT_ID';
93
102
  exports.OAUTH_BASE = 'https://oauth.brevo.com';
94
103
  exports.OAUTH_REALM = 'partner';
95
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';
96
109
  exports.DEFAULT_SCOPES = [
97
110
  'contacts:read',
98
111
  'contacts:write',
@@ -103,4 +116,6 @@ exports.BREVO_DASHBOARD_API_KEYS_URL = 'https://app.brevo.com/settings/keys/api'
103
116
  exports.BREVO_API_KEY_DOCS_URL = 'https://developers.brevo.com/docs/api-key-authentication';
104
117
  exports.BREVO_STATUS_URL = 'https://status.brevo.com';
105
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';
106
121
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,OAAO,QAAO,OAA8E,CAAC;AAEnG,QAAA,MAAM,KAAK,QAAO,OAAwC,CAAC;AAwC3D,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAK1D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAMlE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAM7D;AAQD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAO/D;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,OAAO,QAAO,OAA8E,CAAC;AAEnG,QAAA,MAAM,KAAK,QAAO,OAAwC,CAAC;AAwC3D,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAK1D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAMlE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAM7D;AAsBD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAO/D;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -72,9 +72,22 @@ function logDebug(context, data) {
72
72
  function formatError(error) {
73
73
  if (error instanceof Error)
74
74
  return error.stack ?? error.message;
75
- if (typeof error === 'object')
76
- return JSON.stringify(error);
77
- return String(error);
75
+ if (typeof error === 'string')
76
+ return error;
77
+ if (typeof error === 'number' ||
78
+ typeof error === 'boolean' ||
79
+ typeof error === 'bigint' ||
80
+ typeof error === 'symbol') {
81
+ return String(error);
82
+ }
83
+ try {
84
+ // JSON.stringify returns undefined for bare `undefined` and functions.
85
+ return JSON.stringify(error) ?? 'undefined';
86
+ }
87
+ catch {
88
+ // Circular structures make JSON.stringify throw.
89
+ return '[unserializable error]';
90
+ }
78
91
  }
79
92
  function logError(message, error) {
80
93
  process.stderr.write(`\n ${color('31', '✗')} ${message}\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { CLI_AUTH_METHODS } from './constants';
2
+ export declare function getCliOs(): string;
3
+ export declare function sanitizeHeaderValue(value: string, fallback: string): string;
4
+ type CliAuthMethod = (typeof CLI_AUTH_METHODS)[keyof typeof CLI_AUTH_METHODS];
5
+ export declare function getAuthMethod(authHeader: Record<string, string> | undefined): CliAuthMethod | undefined;
6
+ export declare function getCliUserAgent(authHeader?: Record<string, string>): string;
7
+ export declare function buildCliHeaders(authHeader?: Record<string, string>): Record<string, string>;
8
+ export {};
9
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/lib/telemetry.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAuBlE,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG3E;AAMD,KAAK,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAK9E,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC7C,aAAa,GAAG,SAAS,CAI3B;AAED,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAI3E;AAED,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE3F"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCliOs = getCliOs;
4
+ exports.sanitizeHeaderValue = sanitizeHeaderValue;
5
+ exports.getAuthMethod = getAuthMethod;
6
+ exports.getCliUserAgent = getCliUserAgent;
7
+ exports.buildCliHeaders = buildCliHeaders;
8
+ const cli_version_1 = require("./cli-version");
9
+ const constants_1 = require("./constants");
10
+ /**
11
+ * CLI identification sent as a single `User-Agent` header on every API
12
+ * request so the backend can emit product-tracking events (taxonomy card
13
+ * "CLI installed", Kafka topic `cli`) without a dedicated telemetry endpoint.
14
+ *
15
+ * Format: `brevo-cli/<version> (<os>)`, extended with `; auth=<method>` when
16
+ * the request carries credentials — e.g. `brevo-cli/1.2.0 (macos; auth=oauth)`.
17
+ *
18
+ * Values are sanitized to printable ASCII: undici throws a TypeError on
19
+ * header values containing control characters, which would fail every
20
+ * request — sanitizing here removes that failure mode entirely.
21
+ */
22
+ const OS_BY_PLATFORM = {
23
+ darwin: 'macos',
24
+ win32: 'windows',
25
+ linux: 'linux',
26
+ };
27
+ // The taxonomy card only allows known values to reach Amplitude, so anything
28
+ // outside the mapped platforms is reported as `other` rather than passed raw.
29
+ function getCliOs() {
30
+ return OS_BY_PLATFORM[process.platform] ?? 'other';
31
+ }
32
+ function sanitizeHeaderValue(value, fallback) {
33
+ const sanitized = value.replace(/[^\x20-\x7E]/g, '');
34
+ return sanitized || fallback;
35
+ }
36
+ // CLI_VERSION is fixed at module init, so sanitize it once rather than on
37
+ // every request. Falls back to the same default as cli-version.ts.
38
+ const SAFE_CLI_VERSION = sanitizeHeaderValue(cli_version_1.CLI_VERSION, '0.0.0');
39
+ // Derived from the auth header about to be sent rather than from stored
40
+ // credentials, so login-time validation calls (explicit key/bearer) report
41
+ // the right method without coupling telemetry to credential storage.
42
+ function getAuthMethod(authHeader) {
43
+ if (authHeader && 'api-key' in authHeader)
44
+ return constants_1.CLI_AUTH_METHODS.API_KEY;
45
+ if (authHeader && 'Authorization' in authHeader)
46
+ return constants_1.CLI_AUTH_METHODS.OAUTH;
47
+ return undefined;
48
+ }
49
+ function getCliUserAgent(authHeader) {
50
+ const method = getAuthMethod(authHeader);
51
+ const comment = method ? `${getCliOs()}; auth=${method}` : getCliOs();
52
+ return `brevo-cli/${SAFE_CLI_VERSION} (${comment})`;
53
+ }
54
+ function buildCliHeaders(authHeader) {
55
+ return { [constants_1.USER_AGENT_HEADER]: getCliUserAgent(authHeader) };
56
+ }
57
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/lib/telemetry.ts"],"names":[],"mappings":";;AAwBA,4BAEC;AAED,kDAGC;AAWD,sCAMC;AAED,0CAIC;AAED,0CAEC;AA1DD,+CAA4C;AAC5C,2CAAkE;AAElE;;;;;;;;;;;GAWG;AAEH,MAAM,cAAc,GAA2B;IAC7C,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,6EAA6E;AAC7E,8EAA8E;AAC9E,SAAgB,QAAQ;IACtB,OAAO,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC;AACrD,CAAC;AAED,SAAgB,mBAAmB,CAAC,KAAa,EAAE,QAAgB;IACjE,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,SAAS,IAAI,QAAQ,CAAC;AAC/B,CAAC;AAED,0EAA0E;AAC1E,mEAAmE;AACnE,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,yBAAW,EAAE,OAAO,CAAC,CAAC;AAInE,wEAAwE;AACxE,2EAA2E;AAC3E,qEAAqE;AACrE,SAAgB,aAAa,CAC3B,UAA8C;IAE9C,IAAI,UAAU,IAAI,SAAS,IAAI,UAAU;QAAE,OAAO,4BAAgB,CAAC,OAAO,CAAC;IAC3E,IAAI,UAAU,IAAI,eAAe,IAAI,UAAU;QAAE,OAAO,4BAAgB,CAAC,KAAK,CAAC;IAC/E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,eAAe,CAAC,UAAmC;IACjE,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtE,OAAO,aAAa,gBAAgB,KAAK,OAAO,GAAG,CAAC;AACtD,CAAC;AAED,SAAgB,eAAe,CAAC,UAAmC;IACjE,OAAO,EAAE,CAAC,6BAAiB,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;AAC9D,CAAC"}
@@ -21,14 +21,17 @@ export declare function shouldShowBannerBefore(argv: readonly string[]): boolean
21
21
  export declare function shouldSkipCheck(opts: UpdateNotifierOptions): boolean;
22
22
  export declare function compareVersions(current: string, latest: string): number;
23
23
  export declare function isNewer(current: string, latest: string): boolean;
24
+ export declare function isMajorBehind(current: string, latest: string): boolean;
24
25
  export declare function readCache(cachePath: string): UpdateCheckCache | undefined;
25
26
  export declare function writeCache(cachePath: string, cache: UpdateCheckCache): void;
26
27
  export declare function fetchLatestVersion(name: string, opts?: UpdateNotifierOptions): Promise<string | undefined>;
27
28
  export declare function formatBanner(current: string, latest: string, name: string): string;
29
+ export declare function formatForceUpdateBanner(current: string, latest: string, name: string): string;
28
30
  export interface UpdateCheckHandle {
29
31
  cachedLatest?: string;
30
32
  pending: Promise<void>;
31
33
  }
32
34
  export declare function startUpdateCheck(opts: UpdateNotifierOptions): UpdateCheckHandle;
33
35
  export declare function notifyUpdate(handle: UpdateCheckHandle, pkg: PkgInfo, output?: NodeJS.WriteStream, waitMs?: number): Promise<void>;
36
+ export declare function enforceMinVersion(handle: UpdateCheckHandle, pkg: PkgInfo, output?: NodeJS.WriteStream, waitMs?: number): Promise<boolean>;
34
37
  //# sourceMappingURL=update-notifier.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-notifier.d.ts","sourceRoot":"","sources":["../../src/lib/update-notifier.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAYD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAMvE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAYpE;AA+CD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAUvE;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAgBzE;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAO3E;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,qBAAqB,GAC3B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkB7B;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBlF;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,qBAAqB,GAAG,iBAAiB,CA8B/E;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,iBAAiB,EACzB,GAAG,EAAE,OAAO,EACZ,MAAM,GAAE,MAAM,CAAC,WAA4B,EAC3C,MAAM,GAAE,MAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CASf"}
1
+ {"version":3,"file":"update-notifier.d.ts","sourceRoot":"","sources":["../../src/lib/update-notifier.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAYD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAMvE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAYpE;AAmDD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAUvE;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEhE;AAKD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAKtE;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAgBzE;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAO3E;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,qBAAqB,GAC3B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkB7B;AAWD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAOlF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ7F;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,qBAAqB,GAAG,iBAAiB,CA8B/E;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,iBAAiB,EACzB,GAAG,EAAE,OAAO,EACZ,MAAM,GAAE,MAAM,CAAC,WAA4B,EAC3C,MAAM,GAAE,MAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CASf;AAUD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,iBAAiB,EACzB,GAAG,EAAE,OAAO,EACZ,MAAM,GAAE,MAAM,CAAC,WAA4B,EAC3C,MAAM,GAAE,MAAuB,GAC9B,OAAO,CAAC,OAAO,CAAC,CAWlB"}
@@ -37,12 +37,15 @@ exports.shouldShowBannerBefore = shouldShowBannerBefore;
37
37
  exports.shouldSkipCheck = shouldSkipCheck;
38
38
  exports.compareVersions = compareVersions;
39
39
  exports.isNewer = isNewer;
40
+ exports.isMajorBehind = isMajorBehind;
40
41
  exports.readCache = readCache;
41
42
  exports.writeCache = writeCache;
42
43
  exports.fetchLatestVersion = fetchLatestVersion;
43
44
  exports.formatBanner = formatBanner;
45
+ exports.formatForceUpdateBanner = formatForceUpdateBanner;
44
46
  exports.startUpdateCheck = startUpdateCheck;
45
47
  exports.notifyUpdate = notifyUpdate;
48
+ exports.enforceMinVersion = enforceMinVersion;
46
49
  const fs = __importStar(require("node:fs"));
47
50
  const os = __importStar(require("node:os"));
48
51
  const path = __importStar(require("node:path"));
@@ -99,9 +102,27 @@ function parseVersion(v) {
99
102
  prerelease: match[4] ?? '',
100
103
  };
101
104
  }
102
- // Per semver §11.4: split on '.', compare identifiers; numeric identifiers
103
- // are compared numerically and always rank below non-numeric ones; a longer
104
- // prerelease set outranks a shorter one when the leading identifiers match.
105
+ // Numeric identifiers are compared numerically and always rank below
106
+ // non-numeric ones (semver §11.4).
107
+ function comparePrereleaseIdentifiers(ai, bi) {
108
+ if (ai === bi)
109
+ return 0;
110
+ const aNum = /^\d+$/.test(ai);
111
+ const bNum = /^\d+$/.test(bi);
112
+ if (aNum && bNum) {
113
+ const diff = Number.parseInt(ai, 10) - Number.parseInt(bi, 10);
114
+ if (diff === 0)
115
+ return 0;
116
+ return diff > 0 ? 1 : -1;
117
+ }
118
+ if (aNum)
119
+ return -1;
120
+ if (bNum)
121
+ return 1;
122
+ return ai > bi ? 1 : -1;
123
+ }
124
+ // Per semver §11.4: split on '.', compare identifiers; a longer prerelease
125
+ // set outranks a shorter one when the leading identifiers match.
105
126
  function comparePrerelease(a, b) {
106
127
  if (a === b)
107
128
  return 0;
@@ -109,23 +130,9 @@ function comparePrerelease(a, b) {
109
130
  const bParts = b.split('.');
110
131
  const len = Math.min(aParts.length, bParts.length);
111
132
  for (let i = 0; i < len; i++) {
112
- const ai = aParts[i] ?? '';
113
- const bi = bParts[i] ?? '';
114
- if (ai === bi)
115
- continue;
116
- const aNum = /^\d+$/.test(ai);
117
- const bNum = /^\d+$/.test(bi);
118
- if (aNum && bNum) {
119
- const diff = Number.parseInt(ai, 10) - Number.parseInt(bi, 10);
120
- if (diff !== 0)
121
- return diff > 0 ? 1 : -1;
122
- continue;
123
- }
124
- if (aNum)
125
- return -1;
126
- if (bNum)
127
- return 1;
128
- return ai > bi ? 1 : -1;
133
+ const cmp = comparePrereleaseIdentifiers(aParts[i] ?? '', bParts[i] ?? '');
134
+ if (cmp !== 0)
135
+ return cmp;
129
136
  }
130
137
  if (aParts.length === bParts.length)
131
138
  return 0;
@@ -151,6 +158,16 @@ function compareVersions(current, latest) {
151
158
  function isNewer(current, latest) {
152
159
  return compareVersions(current, latest) > 0;
153
160
  }
161
+ // True when `latest` is at least one full major version ahead of `current`.
162
+ // Used to gate the blocking force-update banner — a new major release is the
163
+ // signal that the installed CLI may no longer be supported by the backend.
164
+ function isMajorBehind(current, latest) {
165
+ const c = parseVersion(current);
166
+ const l = parseVersion(latest);
167
+ if (!c || !l)
168
+ return false;
169
+ return l.major > c.major;
170
+ }
154
171
  function readCache(cachePath) {
155
172
  try {
156
173
  const raw = JSON.parse(fs.readFileSync(cachePath, 'utf-8'));
@@ -198,23 +215,30 @@ async function fetchLatestVersion(name, opts) {
198
215
  clearTimeout(timer);
199
216
  }
200
217
  }
201
- function formatBanner(current, latest, name) {
202
- const line1 = en_1.messages.UPDATE_AVAILABLE(current, latest);
203
- const line2 = en_1.messages.UPDATE_RUN(name);
204
- const line3 = en_1.messages.UPDATE_RUN_YARN(name);
205
- const inner = Math.max(line1.length, line2.length, line3.length) + 4;
218
+ // Renders the lines into a bordered box, auto-sized to the longest line.
219
+ function renderBox(lines) {
220
+ const inner = Math.max(...lines.map((l) => l.length)) + 4;
206
221
  const top = '╭' + '─'.repeat(inner) + '╮';
207
222
  const bot = '╰' + '─'.repeat(inner) + '╯';
208
223
  const pad = (s) => ' ' + s + ' '.repeat(inner - s.length - 2);
209
- return [
210
- '',
211
- ` ${top}`,
212
- ` │${pad(line1)}│`,
213
- ` │${pad(line2)}│`,
214
- ` │${pad(line3)}│`,
215
- ` ${bot}`,
216
- '',
217
- ].join('\n');
224
+ return ['', ` ${top}`, ...lines.map((l) => ` │${pad(l)}│`), ` ${bot}`, ''].join('\n');
225
+ }
226
+ function formatBanner(current, latest, name) {
227
+ return renderBox([
228
+ en_1.messages.UPDATE_AVAILABLE(current, latest),
229
+ en_1.messages.UPDATE_RUN(name),
230
+ en_1.messages.UPDATE_RUN_YARN(name),
231
+ en_1.messages.UPDATE_RUN_BREW,
232
+ ]);
233
+ }
234
+ function formatForceUpdateBanner(current, latest, name) {
235
+ return renderBox([
236
+ en_1.messages.FORCE_UPDATE_REQUIRED(current, latest),
237
+ en_1.messages.FORCE_UPDATE_HINT,
238
+ en_1.messages.UPDATE_RUN(name),
239
+ en_1.messages.UPDATE_RUN_YARN(name),
240
+ en_1.messages.UPDATE_RUN_BREW,
241
+ ]);
218
242
  }
219
243
  function startUpdateCheck(opts) {
220
244
  if (shouldSkipCheck(opts)) {
@@ -252,4 +276,23 @@ async function notifyUpdate(handle, pkg, output = process.stderr, waitMs = NOTIF
252
276
  output.write(formatBanner(pkg.version, handle.cachedLatest, pkg.name) + '\n');
253
277
  }
254
278
  }
279
+ // Blocking force-update gate. When the latest npm version is a full major
280
+ // version ahead of the installed one, writes the force-update banner and
281
+ // returns true so the caller can stop before running the command.
282
+ //
283
+ // Fails open: if the version check was skipped (CI / non-TTY / opt-out, in
284
+ // which case the handle has no cachedLatest) or the fetch hasn't resolved
285
+ // within waitMs, returns false so a slow or unreachable npm registry never
286
+ // blocks the user.
287
+ async function enforceMinVersion(handle, pkg, output = process.stderr, waitMs = NOTIFY_WAIT_MS) {
288
+ await Promise.race([
289
+ handle.pending,
290
+ new Promise((resolve) => setTimeout(resolve, waitMs).unref?.()),
291
+ ]);
292
+ if (handle.cachedLatest && isMajorBehind(pkg.version, handle.cachedLatest)) {
293
+ output.write(formatForceUpdateBanner(pkg.version, handle.cachedLatest, pkg.name) + '\n');
294
+ return true;
295
+ }
296
+ return false;
297
+ }
255
298
  //# sourceMappingURL=update-notifier.js.map