@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.
- package/CHANGELOG.md +209 -0
- package/README.md +8 -5
- package/agent-context/AGENTS.md +59 -15
- package/agent-context/SKILL.md +70 -14
- package/dist/{templates → bin}/files/AGENTS.md.tmpl +11 -1
- package/dist/{templates → bin}/files/CLAUDE.md.tmpl +8 -0
- package/dist/{templates → bin}/files/README.md.tmpl +11 -14
- package/dist/bin/files/app-config.json.tmpl +16 -0
- package/dist/{templates → bin}/files/src/oauth/.env.example.tmpl +8 -0
- package/dist/{templates → bin}/files/src/oauth/.env.local.tmpl +2 -0
- package/dist/{templates → bin}/files/src/oauth/handler.js.tmpl +49 -7
- package/dist/{templates → bin}/files/src/oauth/server.js.tmpl +20 -14
- package/dist/{templates → bin}/files/src/oauth/token-store.js.tmpl +19 -0
- package/dist/bin/index.js +660 -235
- package/dist/bin/index.js.map +7 -1
- package/package.json +6 -4
- package/dist/api/client.d.ts +0 -25
- package/dist/api/client.d.ts.map +0 -1
- package/dist/api/client.js +0 -205
- package/dist/api/client.js.map +0 -1
- package/dist/bin/index.d.ts +0 -3
- package/dist/bin/index.d.ts.map +0 -1
- package/dist/commands/app/create.d.ts +0 -8
- package/dist/commands/app/create.d.ts.map +0 -1
- package/dist/commands/app/create.js +0 -325
- package/dist/commands/app/create.js.map +0 -1
- package/dist/commands/app/credentials.d.ts +0 -6
- package/dist/commands/app/credentials.d.ts.map +0 -1
- package/dist/commands/app/credentials.js +0 -114
- package/dist/commands/app/credentials.js.map +0 -1
- package/dist/commands/app/delete.d.ts +0 -6
- package/dist/commands/app/delete.d.ts.map +0 -1
- package/dist/commands/app/delete.js +0 -167
- package/dist/commands/app/delete.js.map +0 -1
- package/dist/commands/app/list.d.ts +0 -4
- package/dist/commands/app/list.d.ts.map +0 -1
- package/dist/commands/app/list.js +0 -71
- package/dist/commands/app/list.js.map +0 -1
- package/dist/commands/app/scaffold.d.ts +0 -5
- package/dist/commands/app/scaffold.d.ts.map +0 -1
- package/dist/commands/app/scaffold.js +0 -213
- package/dist/commands/app/scaffold.js.map +0 -1
- package/dist/commands/app/scopes.d.ts +0 -2
- package/dist/commands/app/scopes.d.ts.map +0 -1
- package/dist/commands/app/scopes.js +0 -81
- package/dist/commands/app/scopes.js.map +0 -1
- package/dist/commands/app/start.d.ts +0 -5
- package/dist/commands/app/start.d.ts.map +0 -1
- package/dist/commands/app/start.js +0 -220
- package/dist/commands/app/start.js.map +0 -1
- package/dist/commands/app/update.d.ts +0 -2
- package/dist/commands/app/update.d.ts.map +0 -1
- package/dist/commands/app/update.js +0 -444
- package/dist/commands/app/update.js.map +0 -1
- package/dist/commands/definitions.d.ts +0 -5
- package/dist/commands/definitions.d.ts.map +0 -1
- package/dist/commands/definitions.js +0 -262
- package/dist/commands/definitions.js.map +0 -1
- package/dist/commands/init.d.ts +0 -2
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -138
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/login.d.ts +0 -6
- package/dist/commands/login.d.ts.map +0 -1
- package/dist/commands/login.js +0 -251
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/logout.d.ts +0 -5
- package/dist/commands/logout.d.ts.map +0 -1
- package/dist/commands/logout.js +0 -54
- package/dist/commands/logout.js.map +0 -1
- package/dist/commands/skill/install.d.ts +0 -4
- package/dist/commands/skill/install.d.ts.map +0 -1
- package/dist/commands/skill/install.js +0 -29
- package/dist/commands/skill/install.js.map +0 -1
- package/dist/commands/skill/uninstall.d.ts +0 -4
- package/dist/commands/skill/uninstall.d.ts.map +0 -1
- package/dist/commands/skill/uninstall.js +0 -23
- package/dist/commands/skill/uninstall.js.map +0 -1
- package/dist/commands/whoami.d.ts +0 -4
- package/dist/commands/whoami.d.ts.map +0 -1
- package/dist/commands/whoami.js +0 -85
- package/dist/commands/whoami.js.map +0 -1
- package/dist/container.d.ts +0 -7
- package/dist/container.d.ts.map +0 -1
- package/dist/container.js +0 -28
- package/dist/container.js.map +0 -1
- package/dist/lang/en.d.ts +0 -162
- package/dist/lang/en.d.ts.map +0 -1
- package/dist/lang/en.js +0 -189
- package/dist/lang/en.js.map +0 -1
- package/dist/lib/abort.d.ts +0 -3
- package/dist/lib/abort.d.ts.map +0 -1
- package/dist/lib/abort.js +0 -30
- package/dist/lib/abort.js.map +0 -1
- package/dist/lib/auth-guard.d.ts +0 -13
- package/dist/lib/auth-guard.d.ts.map +0 -1
- package/dist/lib/auth-guard.js +0 -60
- package/dist/lib/auth-guard.js.map +0 -1
- package/dist/lib/browser.d.ts +0 -2
- package/dist/lib/browser.d.ts.map +0 -1
- package/dist/lib/browser.js +0 -16
- package/dist/lib/browser.js.map +0 -1
- package/dist/lib/cli-version.d.ts +0 -2
- package/dist/lib/cli-version.d.ts.map +0 -1
- package/dist/lib/cli-version.js +0 -59
- package/dist/lib/cli-version.js.map +0 -1
- package/dist/lib/command-handler.d.ts +0 -10
- package/dist/lib/command-handler.d.ts.map +0 -1
- package/dist/lib/command-handler.js +0 -16
- package/dist/lib/command-handler.js.map +0 -1
- package/dist/lib/command-registry.d.ts +0 -28
- package/dist/lib/command-registry.d.ts.map +0 -1
- package/dist/lib/command-registry.js +0 -54
- package/dist/lib/command-registry.js.map +0 -1
- package/dist/lib/config.d.ts +0 -83
- package/dist/lib/config.d.ts.map +0 -1
- package/dist/lib/config.js +0 -430
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/constants.d.ts +0 -48
- package/dist/lib/constants.d.ts.map +0 -1
- package/dist/lib/constants.js +0 -121
- package/dist/lib/constants.js.map +0 -1
- package/dist/lib/errors.d.ts +0 -30
- package/dist/lib/errors.d.ts.map +0 -1
- package/dist/lib/errors.js +0 -66
- package/dist/lib/errors.js.map +0 -1
- package/dist/lib/exit-codes.d.ts +0 -9
- package/dist/lib/exit-codes.d.ts.map +0 -1
- package/dist/lib/exit-codes.js +0 -12
- package/dist/lib/exit-codes.js.map +0 -1
- package/dist/lib/hidden-input.d.ts +0 -2
- package/dist/lib/hidden-input.d.ts.map +0 -1
- package/dist/lib/hidden-input.js +0 -78
- package/dist/lib/hidden-input.js.map +0 -1
- package/dist/lib/json-output.d.ts +0 -6
- package/dist/lib/json-output.d.ts.map +0 -1
- package/dist/lib/json-output.js +0 -11
- package/dist/lib/json-output.js.map +0 -1
- package/dist/lib/logger.d.ts +0 -11
- package/dist/lib/logger.d.ts.map +0 -1
- package/dist/lib/logger.js +0 -110
- package/dist/lib/logger.js.map +0 -1
- package/dist/lib/oauth-freshness.d.ts +0 -30
- package/dist/lib/oauth-freshness.d.ts.map +0 -1
- package/dist/lib/oauth-freshness.js +0 -61
- package/dist/lib/oauth-freshness.js.map +0 -1
- package/dist/lib/port.d.ts +0 -25
- package/dist/lib/port.d.ts.map +0 -1
- package/dist/lib/port.js +0 -103
- package/dist/lib/port.js.map +0 -1
- package/dist/lib/telemetry.d.ts +0 -9
- package/dist/lib/telemetry.d.ts.map +0 -1
- package/dist/lib/telemetry.js +0 -57
- package/dist/lib/telemetry.js.map +0 -1
- package/dist/lib/ui.d.ts +0 -14
- package/dist/lib/ui.d.ts.map +0 -1
- package/dist/lib/ui.js +0 -75
- package/dist/lib/ui.js.map +0 -1
- package/dist/lib/update-notifier.d.ts +0 -37
- package/dist/lib/update-notifier.d.ts.map +0 -1
- package/dist/lib/update-notifier.js +0 -298
- package/dist/lib/update-notifier.js.map +0 -1
- package/dist/lib/validators.d.ts +0 -55
- package/dist/lib/validators.d.ts.map +0 -1
- package/dist/lib/validators.js +0 -166
- package/dist/lib/validators.js.map +0 -1
- package/dist/services/account.d.ts +0 -8
- package/dist/services/account.d.ts.map +0 -1
- package/dist/services/account.js +0 -15
- package/dist/services/account.js.map +0 -1
- package/dist/services/app.d.ts +0 -38
- package/dist/services/app.d.ts.map +0 -1
- package/dist/services/app.js +0 -145
- package/dist/services/app.js.map +0 -1
- package/dist/services/browser-auth.d.ts +0 -15
- package/dist/services/browser-auth.d.ts.map +0 -1
- package/dist/services/browser-auth.js +0 -188
- package/dist/services/browser-auth.js.map +0 -1
- package/dist/services/normalize-app-id.d.ts +0 -12
- package/dist/services/normalize-app-id.d.ts.map +0 -1
- package/dist/services/normalize-app-id.js +0 -38
- package/dist/services/normalize-app-id.js.map +0 -1
- package/dist/services/oauth-metadata.d.ts +0 -7
- package/dist/services/oauth-metadata.d.ts.map +0 -1
- package/dist/services/oauth-metadata.js +0 -43
- package/dist/services/oauth-metadata.js.map +0 -1
- package/dist/services/oauth-refresh.d.ts +0 -14
- package/dist/services/oauth-refresh.d.ts.map +0 -1
- package/dist/services/oauth-refresh.js +0 -70
- package/dist/services/oauth-refresh.js.map +0 -1
- package/dist/services/scopes-html.d.ts +0 -3
- package/dist/services/scopes-html.d.ts.map +0 -1
- package/dist/services/scopes-html.js +0 -516
- package/dist/services/scopes-html.js.map +0 -1
- package/dist/services/scopes-web.d.ts +0 -12
- package/dist/services/scopes-web.d.ts.map +0 -1
- package/dist/services/scopes-web.js +0 -95
- package/dist/services/scopes-web.js.map +0 -1
- package/dist/services/skill.d.ts +0 -48
- package/dist/services/skill.d.ts.map +0 -1
- package/dist/services/skill.js +0 -223
- package/dist/services/skill.js.map +0 -1
- package/dist/skills/index.d.ts +0 -47
- package/dist/skills/index.d.ts.map +0 -1
- package/dist/skills/index.js +0 -61
- package/dist/skills/index.js.map +0 -1
- package/dist/templates/files/app-config.json.tmpl +0 -25
- package/dist/templates/index.d.ts +0 -36
- package/dist/templates/index.d.ts.map +0 -1
- package/dist/templates/index.js +0 -105
- package/dist/templates/index.js.map +0 -1
- package/dist/types.d.ts +0 -32
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
- /package/dist/{templates → bin}/files/gitignore.tmpl +0 -0
- /package/dist/{templates → bin}/files/src/oauth/package.json.tmpl +0 -0
|
@@ -1,444 +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
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.updateCommand = void 0;
|
|
40
|
-
const fs = __importStar(require("node:fs"));
|
|
41
|
-
const path = __importStar(require("node:path"));
|
|
42
|
-
const logger_1 = require("../../lib/logger");
|
|
43
|
-
const en_1 = require("../../lang/en");
|
|
44
|
-
const command_handler_1 = require("../../lib/command-handler");
|
|
45
|
-
const json_output_1 = require("../../lib/json-output");
|
|
46
|
-
const errors_1 = require("../../lib/errors");
|
|
47
|
-
const container_1 = require("../../container");
|
|
48
|
-
const ui_1 = require("../../lib/ui");
|
|
49
|
-
const config_1 = require("../../lib/config");
|
|
50
|
-
const validators_1 = require("../../lib/validators");
|
|
51
|
-
const constants_1 = require("../../lib/constants");
|
|
52
|
-
const inquirer_1 = __importDefault(require("inquirer"));
|
|
53
|
-
const NON_INTERACTIVE_CONFIRM_ERROR = 'Cannot prompt for confirmation in non-interactive mode. Use --yes or --json to skip.';
|
|
54
|
-
// File exists but readProjectConfig returned null — invalid JSON or missing appId
|
|
55
|
-
function assertConfigFileUsable() {
|
|
56
|
-
const configPath = path.resolve(process.cwd(), 'app-config.json');
|
|
57
|
-
if (!fs.existsSync(configPath))
|
|
58
|
-
return;
|
|
59
|
-
let raw;
|
|
60
|
-
try {
|
|
61
|
-
raw = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
throw new errors_1.CliError(en_1.messages.APP_UPDATE_INVALID_JSON);
|
|
65
|
-
}
|
|
66
|
-
if (!raw ||
|
|
67
|
-
typeof raw !== 'object' ||
|
|
68
|
-
!('appId' in raw) ||
|
|
69
|
-
!raw.appId) {
|
|
70
|
-
throw new errors_1.CliError(en_1.messages.APP_UPDATE_MISSING_APP_ID);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
// No flags and no usable config: emit a specific error.
|
|
74
|
-
function throwNoUpdateSource(config, configAppIdValid, configAppId, flagAppId) {
|
|
75
|
-
// File exists but appId is empty/invalid — surface that over a
|
|
76
|
-
// mismatch error, which would otherwise quote a garbage configAppId.
|
|
77
|
-
if (config != null && !configAppIdValid) {
|
|
78
|
-
throw new errors_1.CliError(en_1.messages.APP_UPDATE_INVALID_APP_ID);
|
|
79
|
-
}
|
|
80
|
-
if (config != null && flagAppId && flagAppId !== configAppId) {
|
|
81
|
-
throw new errors_1.CliError(en_1.messages.APP_UPDATE_APP_ID_MISMATCH(flagAppId, configAppId));
|
|
82
|
-
}
|
|
83
|
-
assertConfigFileUsable();
|
|
84
|
-
throw new errors_1.CliError(en_1.messages.APP_UPDATE_NOTHING_TO_UPDATE);
|
|
85
|
-
}
|
|
86
|
-
// Resolve appId: flag > config
|
|
87
|
-
function resolveAppId(flagAppId, configAppId, config) {
|
|
88
|
-
if (flagAppId)
|
|
89
|
-
return flagAppId;
|
|
90
|
-
if (configAppId)
|
|
91
|
-
return configAppId;
|
|
92
|
-
if (config)
|
|
93
|
-
throw new errors_1.CliError(en_1.messages.APP_UPDATE_INVALID_APP_ID);
|
|
94
|
-
throw new errors_1.CliError(en_1.messages.APP_UPDATE_NO_APP_RESOLVED);
|
|
95
|
-
}
|
|
96
|
-
async function confirmUpdate() {
|
|
97
|
-
const { confirmed } = await inquirer_1.default.prompt([
|
|
98
|
-
{
|
|
99
|
-
type: 'confirm',
|
|
100
|
-
name: 'confirmed',
|
|
101
|
-
message: en_1.messages.APP_UPDATE_CONFIRM,
|
|
102
|
-
default: true,
|
|
103
|
-
},
|
|
104
|
-
]);
|
|
105
|
-
if (!confirmed) {
|
|
106
|
-
(0, logger_1.logInfo)(`\n ${en_1.messages.APP_UPDATE_CANCELLED}\n`);
|
|
107
|
-
return false;
|
|
108
|
-
}
|
|
109
|
-
return true;
|
|
110
|
-
}
|
|
111
|
-
function reportUpdateResult(params, jsonMode) {
|
|
112
|
-
if (jsonMode) {
|
|
113
|
-
(0, json_output_1.jsonOutput)({
|
|
114
|
-
app_id: params.appId,
|
|
115
|
-
name: params.name,
|
|
116
|
-
redirect_uris: params.redirectUris,
|
|
117
|
-
scopes: params.scopes,
|
|
118
|
-
...(params.logoUri ? { logo_uri: params.logoUri } : {}),
|
|
119
|
-
});
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
(0, logger_1.logSuccess)(en_1.messages.APP_UPDATE_SUCCESS);
|
|
123
|
-
if (params.name) {
|
|
124
|
-
(0, logger_1.logInfo)(` Name: ${params.name}`);
|
|
125
|
-
}
|
|
126
|
-
(0, logger_1.logInfo)(` Redirect URLs: ${params.redirectUris.length > 0 ? params.redirectUris.join(', ') : '(none)'}`);
|
|
127
|
-
(0, logger_1.logInfo)(` Scopes: ${params.scopes.length > 0 ? params.scopes.join(', ') : '(none)'}`);
|
|
128
|
-
if (params.logoUri) {
|
|
129
|
-
(0, logger_1.logInfo)(` Logo URL: ${params.logoUri}`);
|
|
130
|
-
}
|
|
131
|
-
if (params.configWrittenBack) {
|
|
132
|
-
(0, logger_1.logInfo)(' app-config.json updated.');
|
|
133
|
-
}
|
|
134
|
-
process.stdout.write('\n');
|
|
135
|
-
}
|
|
136
|
-
// No flags provided: push full config from app-config.json.
|
|
137
|
-
async function pushFullConfig(appId, config, options) {
|
|
138
|
-
const redirectUrls = config.auth?.redirectUrls;
|
|
139
|
-
if (!redirectUrls || redirectUrls.length === 0) {
|
|
140
|
-
throw new errors_1.CliError(en_1.messages.APP_UPDATE_NO_REDIRECT_URLS);
|
|
141
|
-
}
|
|
142
|
-
validateRedirectUrls(redirectUrls);
|
|
143
|
-
const nextScopes = config.auth?.scopes ?? [];
|
|
144
|
-
(0, validators_1.validateScopes)(nextScopes);
|
|
145
|
-
// The legacy 'all' scope is deprecated — block the push and point at the
|
|
146
|
-
// migration path (--scope). No silent rewrite, no escape hatch (BEX-214).
|
|
147
|
-
if ((0, validators_1.containsLegacyAllScope)(nextScopes)) {
|
|
148
|
-
throw new errors_1.CliError(en_1.messages.LEGACY_ALL_SCOPE_DEPRECATED_BLOCK);
|
|
149
|
-
}
|
|
150
|
-
if (!options.json) {
|
|
151
|
-
// Fail fast before the network fetch when we'd have nowhere to show the diff.
|
|
152
|
-
if (!options.yes && !process.stdin.isTTY) {
|
|
153
|
-
throw new errors_1.CliError(NON_INTERACTIVE_CONFIRM_ERROR);
|
|
154
|
-
}
|
|
155
|
-
// Fetch current remote state so the summary can show deltas vs. what the
|
|
156
|
-
// push will apply. Hard-fail on fetch error — the user asked for a diff.
|
|
157
|
-
const remote = await fetchExistingApp(appId, options.json);
|
|
158
|
-
renderUpdateSummary({
|
|
159
|
-
appId,
|
|
160
|
-
currentName: remote.name,
|
|
161
|
-
nextName: config.appName,
|
|
162
|
-
currentUrls: remote.redirect_uris ?? [],
|
|
163
|
-
nextUrls: redirectUrls,
|
|
164
|
-
currentLogoUri: remote.logo_uri,
|
|
165
|
-
nextLogoUri: config.logoUri,
|
|
166
|
-
currentScopes: remote.scopes ?? [],
|
|
167
|
-
nextScopes,
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
if (!options.json && !options.yes && !(await confirmUpdate())) {
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
const spinner = (0, ui_1.createSpinner)('Updating app...', { silent: options.json });
|
|
174
|
-
await container_1.appService.updateApp(appId, {
|
|
175
|
-
name: config.appName,
|
|
176
|
-
redirect_uris: redirectUrls,
|
|
177
|
-
scopes: nextScopes,
|
|
178
|
-
...(config.logoUri ? { logo_uri: config.logoUri } : {}),
|
|
179
|
-
});
|
|
180
|
-
spinner.stop();
|
|
181
|
-
if (config.appName)
|
|
182
|
-
(0, config_1.saveAppName)(appId, config.appName);
|
|
183
|
-
reportUpdateResult({
|
|
184
|
-
appId,
|
|
185
|
-
name: config.appName,
|
|
186
|
-
redirectUris: redirectUrls,
|
|
187
|
-
scopes: nextScopes,
|
|
188
|
-
logoUri: config.logoUri,
|
|
189
|
-
}, options.json);
|
|
190
|
-
}
|
|
191
|
-
async function resolveExistingState(appId, config, shouldWriteBack, silent) {
|
|
192
|
-
const configRedirectUrls = config?.auth?.redirectUrls;
|
|
193
|
-
const hasUsableConfigRedirectUrls = Array.isArray(configRedirectUrls) && configRedirectUrls.length > 0;
|
|
194
|
-
if (config && shouldWriteBack && hasUsableConfigRedirectUrls) {
|
|
195
|
-
// Use config as baseline only when it can safely preserve redirect URLs
|
|
196
|
-
return {
|
|
197
|
-
name: config.appName,
|
|
198
|
-
redirectUrls: configRedirectUrls,
|
|
199
|
-
logoUri: config.logoUri,
|
|
200
|
-
scopes: config.auth?.scopes ?? [],
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
if (config && shouldWriteBack) {
|
|
204
|
-
// Config matches the app, but missing/empty redirect URLs would otherwise clear
|
|
205
|
-
// remote redirect URIs on a name-only update. Fall back to the API for preservation.
|
|
206
|
-
const app = await fetchExistingApp(appId, silent);
|
|
207
|
-
return {
|
|
208
|
-
name: config.appName ?? app.name,
|
|
209
|
-
redirectUrls: app.redirect_uris ?? [],
|
|
210
|
-
logoUri: config.logoUri ?? app.logo_uri,
|
|
211
|
-
scopes: config.auth?.scopes ?? app.scopes ?? [],
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
const app = await fetchExistingApp(appId, silent);
|
|
215
|
-
return {
|
|
216
|
-
name: app.name,
|
|
217
|
-
redirectUrls: app.redirect_uris ?? [],
|
|
218
|
-
logoUri: app.logo_uri,
|
|
219
|
-
scopes: app.scopes ?? [],
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
function appendUnique(existing, additions) {
|
|
223
|
-
const merged = [...existing];
|
|
224
|
-
for (const item of additions) {
|
|
225
|
-
if (!merged.includes(item)) {
|
|
226
|
-
merged.push(item);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return merged;
|
|
230
|
-
}
|
|
231
|
-
// Passing --scope signals migration intent: drop the deprecated legacy 'all'
|
|
232
|
-
// scope from the merge baseline so the outgoing payload is clean (BEX-214).
|
|
233
|
-
function mergeScopes(existingScopes, appendedScopes) {
|
|
234
|
-
const hasScopeFlag = appendedScopes.length > 0;
|
|
235
|
-
const migratingLegacyScopes = hasScopeFlag && (0, validators_1.containsLegacyAllScope)(existingScopes);
|
|
236
|
-
const baseline = migratingLegacyScopes
|
|
237
|
-
? existingScopes.filter((s) => s !== constants_1.LEGACY_ALL_SCOPE)
|
|
238
|
-
: existingScopes;
|
|
239
|
-
const mergedScopes = appendUnique(baseline, appendedScopes);
|
|
240
|
-
// Block any outgoing payload that still carries 'all' — either no --scope
|
|
241
|
-
// was passed (no migration intent), or 'all' was explicitly re-added.
|
|
242
|
-
if ((0, validators_1.containsLegacyAllScope)(mergedScopes)) {
|
|
243
|
-
throw new errors_1.CliError(en_1.messages.LEGACY_ALL_SCOPE_DEPRECATED_BLOCK);
|
|
244
|
-
}
|
|
245
|
-
return { mergedScopes, migratingLegacyScopes };
|
|
246
|
-
}
|
|
247
|
-
// Write back to app-config.json if appropriate
|
|
248
|
-
function writeBackProjectConfig(config, shouldWriteBack, options, mergedUrls, mergedScopes) {
|
|
249
|
-
if (!shouldWriteBack || !config) {
|
|
250
|
-
return false;
|
|
251
|
-
}
|
|
252
|
-
const updatedConfig = { ...config };
|
|
253
|
-
if (options.name) {
|
|
254
|
-
updatedConfig.appName = options.name;
|
|
255
|
-
}
|
|
256
|
-
if (options.logoUri) {
|
|
257
|
-
updatedConfig.logoUri = options.logoUri;
|
|
258
|
-
}
|
|
259
|
-
updatedConfig.auth = {
|
|
260
|
-
...updatedConfig.auth,
|
|
261
|
-
redirectUrls: mergedUrls,
|
|
262
|
-
scopes: mergedScopes,
|
|
263
|
-
};
|
|
264
|
-
(0, config_1.writeProjectConfig)(updatedConfig);
|
|
265
|
-
return true;
|
|
266
|
-
}
|
|
267
|
-
// Flags provided: merge with existing values
|
|
268
|
-
async function updateWithFlags(appId, config, shouldWriteBack, options) {
|
|
269
|
-
const existing = await resolveExistingState(appId, config, shouldWriteBack, options.json);
|
|
270
|
-
// Merge: --name wins, --redirect-uri appends (deduplicated), --logo-uri wins
|
|
271
|
-
const finalName = options.name ?? existing.name;
|
|
272
|
-
const mergedUrls = appendUnique(existing.redirectUrls, options.redirectUri ?? []);
|
|
273
|
-
const finalLogoUri = options.logoUri ?? existing.logoUri;
|
|
274
|
-
const { mergedScopes, migratingLegacyScopes } = mergeScopes(existing.scopes, options.scope ?? []);
|
|
275
|
-
const hasRedirectUriFlag = options.redirectUri !== undefined;
|
|
276
|
-
if (hasRedirectUriFlag && mergedUrls.length === 0) {
|
|
277
|
-
throw new errors_1.CliError(en_1.messages.APP_UPDATE_NO_REDIRECT_URLS);
|
|
278
|
-
}
|
|
279
|
-
if (mergedUrls.length > 0) {
|
|
280
|
-
validateRedirectUrls(mergedUrls);
|
|
281
|
-
}
|
|
282
|
-
(0, validators_1.validateScopes)(mergedScopes);
|
|
283
|
-
if (!options.json) {
|
|
284
|
-
renderUpdateSummary({
|
|
285
|
-
appId,
|
|
286
|
-
currentName: existing.name,
|
|
287
|
-
nextName: finalName,
|
|
288
|
-
currentUrls: existing.redirectUrls,
|
|
289
|
-
nextUrls: mergedUrls,
|
|
290
|
-
currentLogoUri: existing.logoUri,
|
|
291
|
-
nextLogoUri: finalLogoUri,
|
|
292
|
-
currentScopes: existing.scopes,
|
|
293
|
-
nextScopes: mergedScopes,
|
|
294
|
-
migratingLegacyScopes,
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
if (!options.json && !options.yes) {
|
|
298
|
-
if (!process.stdin.isTTY) {
|
|
299
|
-
throw new errors_1.CliError(NON_INTERACTIVE_CONFIRM_ERROR);
|
|
300
|
-
}
|
|
301
|
-
if (!(await confirmUpdate())) {
|
|
302
|
-
return;
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
const spinner = (0, ui_1.createSpinner)('Updating app...', { silent: options.json });
|
|
306
|
-
await container_1.appService.updateApp(appId, {
|
|
307
|
-
name: finalName,
|
|
308
|
-
redirect_uris: mergedUrls,
|
|
309
|
-
scopes: mergedScopes,
|
|
310
|
-
...(finalLogoUri ? { logo_uri: finalLogoUri } : {}),
|
|
311
|
-
});
|
|
312
|
-
spinner.stop();
|
|
313
|
-
if (finalName)
|
|
314
|
-
(0, config_1.saveAppName)(appId, finalName);
|
|
315
|
-
const configWrittenBack = writeBackProjectConfig(config, shouldWriteBack, options, mergedUrls, mergedScopes);
|
|
316
|
-
reportUpdateResult({
|
|
317
|
-
appId,
|
|
318
|
-
name: finalName,
|
|
319
|
-
redirectUris: mergedUrls,
|
|
320
|
-
scopes: mergedScopes,
|
|
321
|
-
logoUri: finalLogoUri,
|
|
322
|
-
configWrittenBack,
|
|
323
|
-
}, options.json);
|
|
324
|
-
}
|
|
325
|
-
exports.updateCommand = (0, command_handler_1.withCommandHandler)(async (options) => {
|
|
326
|
-
const config = (0, config_1.readProjectConfig)();
|
|
327
|
-
const hasFlags = !!(options.name !== undefined ||
|
|
328
|
-
(options.redirectUri && options.redirectUri.length > 0) ||
|
|
329
|
-
options.logoUri !== undefined ||
|
|
330
|
-
(options.scope && options.scope.length > 0));
|
|
331
|
-
// Validate --name if provided (even empty strings)
|
|
332
|
-
if (options.name !== undefined) {
|
|
333
|
-
const nameCheck = (0, validators_1.validateAppName)(options.name);
|
|
334
|
-
if (nameCheck !== true)
|
|
335
|
-
throw new errors_1.CliError(nameCheck);
|
|
336
|
-
}
|
|
337
|
-
// readProjectConfig normalizes appId (trim + coerce finite numbers, reject
|
|
338
|
-
// empty) so `config.appId` is a guaranteed non-empty string whenever `config`
|
|
339
|
-
// is non-null.
|
|
340
|
-
const configAppId = config?.appId;
|
|
341
|
-
const configAppIdValid = !!configAppId;
|
|
342
|
-
// app-config.json is only usable when it describes the app being updated.
|
|
343
|
-
// When --app-id differs from config.appId, the local file belongs to a
|
|
344
|
-
// different app and must not be used as the update payload or merge base.
|
|
345
|
-
const configMatches = configAppIdValid && (!options.appId || options.appId === configAppId);
|
|
346
|
-
if (!hasFlags && !configMatches) {
|
|
347
|
-
throwNoUpdateSource(config, configAppIdValid, configAppId, options.appId);
|
|
348
|
-
}
|
|
349
|
-
const appId = resolveAppId(options.appId, configAppId, config);
|
|
350
|
-
// Write back only when config describes the app being updated.
|
|
351
|
-
const shouldWriteBack = configMatches;
|
|
352
|
-
if (!hasFlags) {
|
|
353
|
-
// config is guaranteed non-null here — the !hasFlags && !configMatches case throws above
|
|
354
|
-
await pushFullConfig(appId, config, options);
|
|
355
|
-
return;
|
|
356
|
-
}
|
|
357
|
-
await updateWithFlags(appId, config, shouldWriteBack, options);
|
|
358
|
-
});
|
|
359
|
-
async function fetchExistingApp(appId, silent) {
|
|
360
|
-
const spinner = (0, ui_1.createSpinner)('Fetching app...', { silent });
|
|
361
|
-
let app;
|
|
362
|
-
try {
|
|
363
|
-
app = await container_1.appService.fetchApp(appId);
|
|
364
|
-
}
|
|
365
|
-
finally {
|
|
366
|
-
spinner.stop();
|
|
367
|
-
}
|
|
368
|
-
if (!app) {
|
|
369
|
-
throw new errors_1.CliError(`App ${appId} not found.`);
|
|
370
|
-
}
|
|
371
|
-
return app;
|
|
372
|
-
}
|
|
373
|
-
// Diff `current` vs `next`: next values keep their order (tagged `(new)` when
|
|
374
|
-
// absent from current), values dropped from current trail with `(removed)`.
|
|
375
|
-
function diffLines(current, next) {
|
|
376
|
-
const currentSet = new Set(current);
|
|
377
|
-
const nextSet = new Set(next);
|
|
378
|
-
return [
|
|
379
|
-
...next.map((v) => (currentSet.has(v) ? v : `${v} (new)`)),
|
|
380
|
-
...current.filter((v) => !nextSet.has(v)).map((v) => `${v} (removed)`),
|
|
381
|
-
];
|
|
382
|
-
}
|
|
383
|
-
// Print a labelled block; continuation lines are indented to align under the
|
|
384
|
-
// first value.
|
|
385
|
-
function logAligned(label, lines) {
|
|
386
|
-
lines.forEach((line, i) => {
|
|
387
|
-
(0, logger_1.logInfo)(`${i === 0 ? label : ' '}${line}`);
|
|
388
|
-
});
|
|
389
|
-
}
|
|
390
|
-
function renderNameLine(currentName, nextName) {
|
|
391
|
-
if (!nextName) {
|
|
392
|
-
return;
|
|
393
|
-
}
|
|
394
|
-
const renamePrefix = currentName && currentName !== nextName ? `${currentName} → ` : '';
|
|
395
|
-
(0, logger_1.logInfo)(` Name: ${renamePrefix}${nextName}`);
|
|
396
|
-
}
|
|
397
|
-
function renderScopeLines(currentScopes, nextScopes) {
|
|
398
|
-
if (nextScopes === undefined) {
|
|
399
|
-
return;
|
|
400
|
-
}
|
|
401
|
-
const lines = diffLines(currentScopes ?? [], nextScopes);
|
|
402
|
-
logAligned(' Scopes: ', lines.length > 0 ? lines : ['(none)']);
|
|
403
|
-
}
|
|
404
|
-
function renderLogoLine(currentLogoUri, nextLogoUri) {
|
|
405
|
-
const label = ' Logo URL: ';
|
|
406
|
-
if (currentLogoUri && nextLogoUri && currentLogoUri !== nextLogoUri) {
|
|
407
|
-
(0, logger_1.logInfo)(`${label}${currentLogoUri} → ${nextLogoUri}`);
|
|
408
|
-
}
|
|
409
|
-
else if (nextLogoUri) {
|
|
410
|
-
(0, logger_1.logInfo)(`${label}${nextLogoUri}`);
|
|
411
|
-
}
|
|
412
|
-
else if (currentLogoUri) {
|
|
413
|
-
(0, logger_1.logInfo)(`${label}${currentLogoUri} (unchanged)`);
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
function renderUpdateSummary(params) {
|
|
417
|
-
(0, logger_1.logInfo)('');
|
|
418
|
-
(0, logger_1.logInfo)(` ${en_1.messages.APP_UPDATE_SUMMARY}`);
|
|
419
|
-
(0, logger_1.logInfo)(` App ID: ${params.appId}`);
|
|
420
|
-
renderNameLine(params.currentName, params.nextName);
|
|
421
|
-
logAligned(' Redirect URLs: ', diffLines(params.currentUrls, params.nextUrls));
|
|
422
|
-
if (params.migratingLegacyScopes) {
|
|
423
|
-
(0, logger_1.logInfo)(` ${en_1.messages.LEGACY_ALL_SCOPE_UPDATE_MIGRATING}`);
|
|
424
|
-
}
|
|
425
|
-
renderScopeLines(params.currentScopes, params.nextScopes);
|
|
426
|
-
renderLogoLine(params.currentLogoUri, params.nextLogoUri);
|
|
427
|
-
(0, logger_1.logInfo)('');
|
|
428
|
-
}
|
|
429
|
-
function validateRedirectUrls(urls) {
|
|
430
|
-
for (const url of urls) {
|
|
431
|
-
try {
|
|
432
|
-
const parsed = new URL(url);
|
|
433
|
-
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
|
|
434
|
-
throw new errors_1.CliError(en_1.messages.APP_UPDATE_INVALID_REDIRECT_PROTOCOL(url));
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
catch (err) {
|
|
438
|
-
if (err instanceof errors_1.CliError)
|
|
439
|
-
throw err;
|
|
440
|
-
throw new errors_1.CliError(en_1.messages.APP_UPDATE_INVALID_REDIRECT_URL(url));
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
//# sourceMappingURL=update.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/app/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { CommandDefinition, SubcommandGroupDefinition } from '../lib/command-registry';
|
|
2
|
-
export declare const topLevelCommands: CommandDefinition[];
|
|
3
|
-
export declare const appCommandGroup: SubcommandGroupDefinition;
|
|
4
|
-
export declare const skillCommandGroup: SubcommandGroupDefinition;
|
|
5
|
-
//# sourceMappingURL=definitions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/commands/definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAwBvF,eAAO,MAAM,gBAAgB,EAAE,iBAAiB,EA8B/C,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,yBAuM7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,yBAoB/B,CAAC"}
|