@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.
- package/CHANGELOG.md +30 -0
- package/README.md +19 -2
- package/agent-context/AGENTS.md +16 -5
- package/agent-context/SKILL.md +17 -3
- package/dist/api/client.d.ts +2 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +50 -36
- package/dist/api/client.js.map +1 -1
- package/dist/bin/index.js +19 -4
- package/dist/bin/index.js.map +1 -1
- package/dist/commands/app/create.d.ts.map +1 -1
- package/dist/commands/app/create.js +240 -221
- package/dist/commands/app/create.js.map +1 -1
- package/dist/commands/app/delete.d.ts.map +1 -1
- package/dist/commands/app/delete.js +81 -62
- package/dist/commands/app/delete.js.map +1 -1
- package/dist/commands/app/list.d.ts.map +1 -1
- package/dist/commands/app/list.js +10 -3
- package/dist/commands/app/list.js.map +1 -1
- package/dist/commands/app/scaffold.d.ts.map +1 -1
- package/dist/commands/app/scaffold.js +12 -2
- package/dist/commands/app/scaffold.js.map +1 -1
- package/dist/commands/app/scopes.d.ts.map +1 -1
- package/dist/commands/app/scopes.js +2 -0
- package/dist/commands/app/scopes.js.map +1 -1
- package/dist/commands/app/start.d.ts.map +1 -1
- package/dist/commands/app/start.js +7 -0
- package/dist/commands/app/start.js.map +1 -1
- package/dist/commands/app/update.d.ts.map +1 -1
- package/dist/commands/app/update.js +297 -266
- package/dist/commands/app/update.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +154 -138
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +27 -20
- package/dist/commands/whoami.js.map +1 -1
- package/dist/lang/en.d.ts +23 -1
- package/dist/lang/en.d.ts.map +1 -1
- package/dist/lang/en.js +25 -1
- package/dist/lang/en.js.map +1 -1
- package/dist/lib/auth-guard.d.ts.map +1 -1
- package/dist/lib/auth-guard.js +10 -1
- package/dist/lib/auth-guard.js.map +1 -1
- package/dist/lib/constants.d.ts +10 -3
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +19 -4
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +16 -3
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/telemetry.d.ts +9 -0
- package/dist/lib/telemetry.d.ts.map +1 -0
- package/dist/lib/telemetry.js +57 -0
- package/dist/lib/telemetry.js.map +1 -0
- package/dist/lib/update-notifier.d.ts +3 -0
- package/dist/lib/update-notifier.d.ts.map +1 -1
- package/dist/lib/update-notifier.js +77 -34
- package/dist/lib/update-notifier.js.map +1 -1
- package/dist/lib/validators.d.ts +6 -0
- package/dist/lib/validators.d.ts.map +1 -1
- package/dist/lib/validators.js +10 -0
- package/dist/lib/validators.js.map +1 -1
- package/dist/services/app.d.ts +1 -1
- package/dist/services/app.d.ts.map +1 -1
- package/dist/services/app.js +6 -6
- package/dist/services/app.js.map +1 -1
- package/dist/services/scopes-html.d.ts.map +1 -1
- package/dist/services/scopes-html.js +208 -29
- package/dist/services/scopes-html.js.map +1 -1
- package/dist/services/skill.js +1 -1
- package/dist/services/skill.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- 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
|
|
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
|
package/dist/lang/en.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/lang/en.ts"],"names":[],"mappings":";;;AAAA,
|
|
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;
|
|
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"}
|
package/dist/lib/auth-guard.js
CHANGED
|
@@ -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
|
-
|
|
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":";;
|
|
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"}
|
package/dist/lib/constants.d.ts
CHANGED
|
@@ -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
|
|
7
|
-
readonly
|
|
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;
|
|
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"}
|
package/dist/lib/constants.js
CHANGED
|
@@ -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
|
-
|
|
65
|
-
|
|
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":";;;AAkBA,gDAOC;AAzBD,qCAAoC;AAEpC,wGAAwG;AACxG,IAAI,iBAAqC,CAAC;AAE1C,SAAS,oBAAoB,CAAC,MAAW;IACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;IAChE,MAAM,MAAM,GAAG,GAAG,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3D,OAAO,MAAM,IAAI,SAAS,CAAC;AAC7B,CAAC;AAED,SAAS,SAAS,CAAC,MAAW;IAC5B,6EAA6E;IAC7E,2EAA2E;IAC3E,iBAAiB,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAED,SAAgB,kBAAkB;IAChC,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kCAAkC,iBAAiB,oDAAoD,CACxG,CAAC;QACF,iBAAiB,GAAG,SAAS,CAAC;IAChC,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAW;IACrC,OAAO,CACL,MAAM,CAAC,QAAQ,KAAK,OAAO;QAC3B,CAAC,MAAM,CAAC,QAAQ,KAAK,WAAW;YAC9B,MAAM,CAAC,QAAQ,KAAK,WAAW;YAC/B,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,CAC7B,CAAC;AACJ,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,uBAAuB,CAAC;IACjE,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,iBAAQ,CAAC,2BAA2B,GAAG,uBAAuB,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,kBAAkB,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,IAAI,iBAAQ,CAChB,sCAAsC,GAAG,mDAAmD,CAC7F,CAAC;AACJ,CAAC;AAEY,QAAA,QAAQ,GAAG,cAAc,EAAE,CAAC;AAEzC,SAAS,oBAAoB;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,6BAA6B,CAAC;IAC/E,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,iBAAQ,CAAC,mCAAmC,GAAG,uBAAuB,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,iBAAQ,CAChB,8CAA8C,GAAG,mDAAmD,CACrG,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAEY,QAAA,eAAe,GAAG,oBAAoB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/logger.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/lib/logger.js
CHANGED
|
@@ -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 === '
|
|
76
|
-
return
|
|
77
|
-
|
|
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`);
|
package/dist/lib/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":";;;AA0CA,0BAKC;AAED,0CAMC;AAED,4BAMC;
|
|
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;
|
|
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
|
-
//
|
|
103
|
-
//
|
|
104
|
-
|
|
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
|
|
113
|
-
|
|
114
|
-
|
|
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
|
-
|
|
202
|
-
|
|
203
|
-
const
|
|
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
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
]
|
|
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
|