@contentstack/cli 1.60.0-beta.3 → 1.60.0-beta.6
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/README.md +1 -1
- package/lib/config/index.d.ts +8 -0
- package/lib/config/index.js +9 -0
- package/lib/help.d.ts +7 -0
- package/lib/help.js +57 -0
- package/lib/hooks/init/context-init.d.ts +4 -0
- package/lib/hooks/init/context-init.js +15 -0
- package/lib/hooks/init/utils-init.d.ts +4 -0
- package/lib/hooks/init/utils-init.js +14 -0
- package/lib/hooks/prerun/auth-guard.d.ts +1 -0
- package/lib/hooks/prerun/auth-guard.js +39 -0
- package/lib/hooks/prerun/command-deprecation-check.d.ts +1 -0
- package/lib/hooks/prerun/command-deprecation-check.js +10 -0
- package/lib/hooks/prerun/default-rate-limit-check.d.ts +1 -0
- package/lib/hooks/prerun/default-rate-limit-check.js +16 -0
- package/lib/hooks/prerun/latest-version-warning.d.ts +1 -0
- package/lib/hooks/prerun/latest-version-warning.js +53 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -0
- package/lib/interfaces/index.d.ts +39 -0
- package/lib/interfaces/index.js +2 -0
- package/lib/utils/context-handler.d.ts +17 -0
- package/lib/utils/context-handler.js +56 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.js +8 -0
- package/oclif.manifest.json +4 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ $ npm install -g @contentstack/cli
|
|
|
18
18
|
$ csdx COMMAND
|
|
19
19
|
running command...
|
|
20
20
|
$ csdx (--version|-v)
|
|
21
|
-
@contentstack/cli/1.60.0-beta.
|
|
21
|
+
@contentstack/cli/1.60.0-beta.6 linux-x64 node-v22.22.1
|
|
22
22
|
$ csdx --help [COMMAND]
|
|
23
23
|
USAGE
|
|
24
24
|
$ csdx COMMAND
|
package/lib/help.d.ts
ADDED
package/lib/help.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const figlet = tslib_1.__importStar(require("figlet"));
|
|
5
|
+
const cli_utilities_1 = require("@contentstack/cli-utilities");
|
|
6
|
+
class MyHelpClass extends cli_utilities_1.Help {
|
|
7
|
+
constructor(config, opts) {
|
|
8
|
+
super(config, opts);
|
|
9
|
+
}
|
|
10
|
+
showRootHelp() {
|
|
11
|
+
// Shows Contentstack graphics
|
|
12
|
+
cli_utilities_1.cliux.print(figlet.textSync('Contentstack', {
|
|
13
|
+
horizontalLayout: 'default',
|
|
14
|
+
verticalLayout: 'default',
|
|
15
|
+
}));
|
|
16
|
+
super.showRootHelp();
|
|
17
|
+
}
|
|
18
|
+
showCommandHelp(command) {
|
|
19
|
+
if (command.id === 'cm:bulk-publish') {
|
|
20
|
+
let { context: { plugin: { commands = [] } = {} } = {} } = this.config;
|
|
21
|
+
commands = commands.map((c) => {
|
|
22
|
+
return Object.assign(Object.assign({}, c), { name: c.id });
|
|
23
|
+
});
|
|
24
|
+
const title = command.description && this.render(command.description).split('\n')[0];
|
|
25
|
+
if (title)
|
|
26
|
+
console.log(title + '\n');
|
|
27
|
+
console.log(this.formatCommand(command));
|
|
28
|
+
console.log('');
|
|
29
|
+
if (commands.length > 0) {
|
|
30
|
+
console.log(this.formatCommands(commands));
|
|
31
|
+
console.log('');
|
|
32
|
+
}
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
super.showCommandHelp(command);
|
|
36
|
+
}
|
|
37
|
+
formatCommands(commands) {
|
|
38
|
+
if (commands.length === 0)
|
|
39
|
+
return '';
|
|
40
|
+
const body = this.renderList(commands
|
|
41
|
+
// if aliases do not contain the current command's id it is the main command
|
|
42
|
+
.filter(c => !c.aliases.some(a => a === c.id))
|
|
43
|
+
.map(c => {
|
|
44
|
+
if (this.config.topicSeparator !== ':')
|
|
45
|
+
c.id = c.id.replace(/:/g, this.config.topicSeparator);
|
|
46
|
+
// Add aliases at the end of summary
|
|
47
|
+
const summary = c.aliases.length > 0 ? `${this.summary(c)} (ALIASES: ${c.aliases.join(', ')})` : this.summary(c);
|
|
48
|
+
return [c.id, summary];
|
|
49
|
+
}), {
|
|
50
|
+
spacer: '\n',
|
|
51
|
+
stripAnsi: this.opts.stripAnsi,
|
|
52
|
+
indentation: 2
|
|
53
|
+
});
|
|
54
|
+
return this.section('COMMANDS', body);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.default = MyHelpClass;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("../../utils");
|
|
4
|
+
const cli_utilities_1 = require("@contentstack/cli-utilities");
|
|
5
|
+
/**
|
|
6
|
+
* Set the cli context
|
|
7
|
+
*/
|
|
8
|
+
function default_1(opts) {
|
|
9
|
+
// Store command ID for session-based log organization
|
|
10
|
+
if (opts.id) {
|
|
11
|
+
cli_utilities_1.configHandler.set('currentCommandId', opts.id);
|
|
12
|
+
}
|
|
13
|
+
this.config.context = new utils_1.CsdxContext(opts, this.config);
|
|
14
|
+
}
|
|
15
|
+
exports.default = default_1;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const cli_utilities_1 = require("@contentstack/cli-utilities");
|
|
4
|
+
/**
|
|
5
|
+
* Initialize the utilities
|
|
6
|
+
*/
|
|
7
|
+
function default_1(_opts) {
|
|
8
|
+
const { context } = this.config;
|
|
9
|
+
cli_utilities_1.messageHandler.init(context);
|
|
10
|
+
cli_utilities_1.cliux.init(context);
|
|
11
|
+
cli_utilities_1.managementSDKInitiator.init(context);
|
|
12
|
+
cli_utilities_1.marketplaceSDKInitiator.init(context);
|
|
13
|
+
}
|
|
14
|
+
exports.default = default_1;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (opts: any): Promise<void>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const cli_utilities_1 = require("@contentstack/cli-utilities");
|
|
4
|
+
// TBD: run region command if region is not there
|
|
5
|
+
async function default_1(opts) {
|
|
6
|
+
const { context: { plugin: { config: { protectedCommands = {} } = {} } = {}, region = null } = {} } = this.config;
|
|
7
|
+
if (opts.Command.id !== 'config:set:region') {
|
|
8
|
+
if (!region) {
|
|
9
|
+
cli_utilities_1.cliux.error('No region found, please set a region $config:set:region');
|
|
10
|
+
this.exit();
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
cli_utilities_1.cliux.print(`Currently using region: ${region.name}`, { color: 'grey' });
|
|
14
|
+
}
|
|
15
|
+
// Auth guard
|
|
16
|
+
if (protectedCommands[opts.Command.id]) {
|
|
17
|
+
if (!(0, cli_utilities_1.isAuthenticated)()) {
|
|
18
|
+
(0, cli_utilities_1.handleAndLogError)(new Error('Authentication required for this command'), { module: 'auth-guard', commandId: opts.Command.id });
|
|
19
|
+
cli_utilities_1.cliux.error('Please log in to execute the command');
|
|
20
|
+
this.exit();
|
|
21
|
+
}
|
|
22
|
+
const client = await (0, cli_utilities_1.managementSDKClient)({ host: region.cma });
|
|
23
|
+
try {
|
|
24
|
+
const result = await client.getUser();
|
|
25
|
+
if (!result) {
|
|
26
|
+
(0, cli_utilities_1.handleAndLogError)(new Error('Error in auth validation'), { module: 'auth-guard' });
|
|
27
|
+
cli_utilities_1.cliux.error('Please log in to execute the command');
|
|
28
|
+
this.exit();
|
|
29
|
+
}
|
|
30
|
+
cli_utilities_1.log.debug('Logged-in user', { module: 'auth-guard', userData: result.data });
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
(0, cli_utilities_1.handleAndLogError)(error, { module: 'auth-guard' }, 'Error in auth validation');
|
|
34
|
+
cli_utilities_1.cliux.error('Please log in to execute the command');
|
|
35
|
+
process.exit();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.default = default_1;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (_opts: any): Promise<void>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const cli_utilities_1 = require("@contentstack/cli-utilities");
|
|
4
|
+
async function default_1(_opts) {
|
|
5
|
+
const { context: { plugin: { config: { expiredCommands = {} } = {} } = {}, info: { command = null } = {} } = {} } = this.config;
|
|
6
|
+
if (expiredCommands.hasOwnProperty(command)) {
|
|
7
|
+
cli_utilities_1.cliux.print(`WARNING!!! You're using the old (soon to be deprecated) Contentstack CLI command. We recommend you to use the latest ${expiredCommands[command]} command.`, { color: 'yellow' });
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.default = default_1;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (): void;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const cli_utilities_1 = require("@contentstack/cli-utilities");
|
|
4
|
+
function default_1() {
|
|
5
|
+
const rateLimit = cli_utilities_1.configHandler.get('rateLimit');
|
|
6
|
+
if (!(rateLimit === null || rateLimit === void 0 ? void 0 : rateLimit.default)) {
|
|
7
|
+
const defaultPlan = {
|
|
8
|
+
getLimit: { value: 10, utilize: 50 },
|
|
9
|
+
limit: { value: 10, utilize: 50 },
|
|
10
|
+
bulkLimit: { value: 1, utilize: 50 },
|
|
11
|
+
};
|
|
12
|
+
cli_utilities_1.configHandler.set('rateLimit', { default: defaultPlan });
|
|
13
|
+
cli_utilities_1.cliux.print(`Default rate limit configuration is set to ${JSON.stringify(defaultPlan)}. Please use this command csdx config:set:rate-limit to set the custom rate limit config.`, { color: 'blue' });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.default = default_1;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (_opts: any): Promise<void>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const cli_utilities_1 = require("@contentstack/cli-utilities");
|
|
5
|
+
const semver = tslib_1.__importStar(require("semver"));
|
|
6
|
+
const versionUpgradeWarningFrequency = {
|
|
7
|
+
versionSyncDuration: 3 * 24 * 60 * 60 * 1000, // 3 days
|
|
8
|
+
};
|
|
9
|
+
async function default_1(_opts) {
|
|
10
|
+
var _a, _b;
|
|
11
|
+
const now = Date.now();
|
|
12
|
+
const today = new Date().toISOString().split('T')[0];
|
|
13
|
+
let cache = { lastChecked: 0, lastWarnedDate: '', latestVersion: '' };
|
|
14
|
+
// if CLI_VERSION is not set or is not the same as the current version, set it
|
|
15
|
+
if (!cli_utilities_1.configHandler.get('CLI_VERSION') || cli_utilities_1.configHandler.get('CLI_VERSION') !== this.config.version) {
|
|
16
|
+
cli_utilities_1.configHandler.set('CLI_VERSION', this.config.version); // set current version in configHandler
|
|
17
|
+
}
|
|
18
|
+
if (!cli_utilities_1.configHandler.get('versionUpgradeWarningFrequency')) {
|
|
19
|
+
cli_utilities_1.configHandler.set('versionUpgradeWarningFrequency', versionUpgradeWarningFrequency);
|
|
20
|
+
}
|
|
21
|
+
const versionUpgradeWarningFrequencyConfig = cli_utilities_1.configHandler.get('versionUpgradeWarningFrequency');
|
|
22
|
+
// Load cache if it exists
|
|
23
|
+
if (cli_utilities_1.configHandler.get('versionUpgradeWarningCache')) {
|
|
24
|
+
cache = cli_utilities_1.configHandler.get('versionUpgradeWarningCache');
|
|
25
|
+
}
|
|
26
|
+
// Perform update check if needed
|
|
27
|
+
const httpClient = new cli_utilities_1.HttpClient();
|
|
28
|
+
if (now - cache.lastChecked > versionUpgradeWarningFrequencyConfig.versionSyncDuration) {
|
|
29
|
+
try {
|
|
30
|
+
const latestVersion = (_b = (_a = (await httpClient.get(`https://registry.npmjs.org/@contentstack/cli/latest`))) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.version;
|
|
31
|
+
if (!latestVersion) {
|
|
32
|
+
(0, cli_utilities_1.handleAndLogError)(new Error('Failed to retrieve the latest version from the registry.'), { module: 'latest-version-warning' });
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
cache.latestVersion = latestVersion;
|
|
36
|
+
cache.lastChecked = now;
|
|
37
|
+
// Save updated cache
|
|
38
|
+
cli_utilities_1.configHandler.set('versionUpgradeWarningCache', cache);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
(0, cli_utilities_1.handleAndLogError)(error, { module: 'latest-version-warning' }, 'Failed to check the latest version');
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Show warning if an update is available and last warning was yesterday
|
|
46
|
+
if (semver.gt(cache.latestVersion, this.config.version) && cache.lastWarnedDate !== today) {
|
|
47
|
+
cli_utilities_1.cliux.print(`You are not using the most recent CLI release. Please update to the latest version for an improved experience.`, { color: 'yellow' });
|
|
48
|
+
// Update the last warned timestamp
|
|
49
|
+
cache.lastWarnedDate = today;
|
|
50
|
+
cli_utilities_1.configHandler.set('versionUpgradeWarningCache', cache);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.default = default_1;
|
package/lib/index.d.ts
ADDED
package/lib/index.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Config, Plugin } from '@contentstack/cli-utilities';
|
|
2
|
+
export interface PrintOptions {
|
|
3
|
+
color?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface InquirePayload {
|
|
6
|
+
type: string;
|
|
7
|
+
name: string;
|
|
8
|
+
message: string;
|
|
9
|
+
choices?: Array<any>;
|
|
10
|
+
transformer?: Function;
|
|
11
|
+
}
|
|
12
|
+
export interface Region {
|
|
13
|
+
name: string;
|
|
14
|
+
cma: string;
|
|
15
|
+
cda: string;
|
|
16
|
+
}
|
|
17
|
+
export interface Context {
|
|
18
|
+
id: string;
|
|
19
|
+
user: {
|
|
20
|
+
authtoken: string;
|
|
21
|
+
email: string;
|
|
22
|
+
};
|
|
23
|
+
region: any;
|
|
24
|
+
plugin: Plugin;
|
|
25
|
+
config: any;
|
|
26
|
+
info: any;
|
|
27
|
+
messageFilePath: any;
|
|
28
|
+
}
|
|
29
|
+
export interface CLIConfig extends Config {
|
|
30
|
+
context: Context;
|
|
31
|
+
}
|
|
32
|
+
export interface IVersionUpgradeCache {
|
|
33
|
+
lastChecked: number;
|
|
34
|
+
lastWarnedDate: string;
|
|
35
|
+
latestVersion: string;
|
|
36
|
+
}
|
|
37
|
+
export interface IVersionUpgradeWarningFrequency {
|
|
38
|
+
versionSyncDuration: number;
|
|
39
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export default class CsdxContext {
|
|
2
|
+
readonly sessionId: string;
|
|
3
|
+
readonly clientId: string;
|
|
4
|
+
readonly user?: object;
|
|
5
|
+
readonly region?: object;
|
|
6
|
+
readonly config: object;
|
|
7
|
+
readonly info: any;
|
|
8
|
+
readonly plugin: any;
|
|
9
|
+
readonly pluginConfig: any;
|
|
10
|
+
readonly messageFilePath: string;
|
|
11
|
+
readonly analyticsInfo: string;
|
|
12
|
+
flagWarningPrintState: any;
|
|
13
|
+
flags: any;
|
|
14
|
+
cliVersion: string;
|
|
15
|
+
constructor(cliOpts: any, cliConfig: any);
|
|
16
|
+
getToken(alias: string): any;
|
|
17
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const shortUUID = tslib_1.__importStar(require("short-uuid"));
|
|
5
|
+
const path = tslib_1.__importStar(require("path"));
|
|
6
|
+
const cli_utilities_1 = require("@contentstack/cli-utilities");
|
|
7
|
+
const node_machine_id_1 = require("node-machine-id");
|
|
8
|
+
class CsdxContext {
|
|
9
|
+
constructor(cliOpts, cliConfig) {
|
|
10
|
+
var _a, _b, _c;
|
|
11
|
+
const analyticsInfo = [];
|
|
12
|
+
const command = cliConfig.findCommand(cliOpts.id) || {};
|
|
13
|
+
const config = cli_utilities_1.configHandler;
|
|
14
|
+
const platform = cliConfig.platform && cliConfig.arch ? `${cliConfig.platform}-${cliConfig.arch}` : 'none';
|
|
15
|
+
analyticsInfo.push(platform);
|
|
16
|
+
const nodeVersion = process.versions.node ? `v${process.versions.node}` : process.version;
|
|
17
|
+
analyticsInfo.push(nodeVersion || 'none');
|
|
18
|
+
analyticsInfo.push(cliConfig.version || 'none');
|
|
19
|
+
this.clientId = cli_utilities_1.configHandler.get('clientId');
|
|
20
|
+
if (!this.clientId) {
|
|
21
|
+
this.clientId = (0, node_machine_id_1.machineIdSync)(true);
|
|
22
|
+
cli_utilities_1.configHandler.set('clientId', this.clientId);
|
|
23
|
+
}
|
|
24
|
+
analyticsInfo.push(this.clientId);
|
|
25
|
+
const sessionId = shortUUID.generate();
|
|
26
|
+
cli_utilities_1.configHandler.set('sessionId', sessionId);
|
|
27
|
+
this.sessionId = sessionId;
|
|
28
|
+
analyticsInfo.push(this.sessionId);
|
|
29
|
+
this.user = {
|
|
30
|
+
authtoken: cli_utilities_1.configHandler.get('authtoken'),
|
|
31
|
+
email: cli_utilities_1.configHandler.get('email'),
|
|
32
|
+
};
|
|
33
|
+
this.config = Object.assign({}, config);
|
|
34
|
+
this.cliVersion = cliConfig.version;
|
|
35
|
+
this.region = cli_utilities_1.configHandler.get('region');
|
|
36
|
+
this.info = { command: cliOpts.id };
|
|
37
|
+
if (command.pluginName) {
|
|
38
|
+
this.plugin = (cliConfig.plugins || new Map()).get(command.pluginName) || {};
|
|
39
|
+
this.plugin.name = command.pluginName;
|
|
40
|
+
this.plugin.config = Object.assign({}, ((this.plugin.pjson && this.plugin.pjson.csdxConfig) || {}));
|
|
41
|
+
this.messageFilePath = (0, cli_utilities_1.pathValidator)(path.resolve((0, cli_utilities_1.sanitizePath)(this.plugin.root), (0, cli_utilities_1.sanitizePath)(this.plugin.config.messageFilePath) || './messages/index.json'));
|
|
42
|
+
this.info.shortCommandName = (_c = (_b = (_a = this.plugin) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b.shortCommandName) === null || _c === void 0 ? void 0 : _c[cliOpts.id];
|
|
43
|
+
analyticsInfo.push(this.info.shortCommandName || cliOpts.id);
|
|
44
|
+
}
|
|
45
|
+
this.flagWarningPrintState = {};
|
|
46
|
+
this.analyticsInfo = analyticsInfo.join(';');
|
|
47
|
+
}
|
|
48
|
+
getToken(alias) {
|
|
49
|
+
if (alias) {
|
|
50
|
+
const token = cli_utilities_1.configHandler.get(`tokens.${alias}`);
|
|
51
|
+
if (token)
|
|
52
|
+
return token;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.default = CsdxContext;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as CsdxContext } from './context-handler';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CsdxContext = void 0;
|
|
7
|
+
var context_handler_1 = require("./context-handler");
|
|
8
|
+
Object.defineProperty(exports, "CsdxContext", { enumerable: true, get: function () { return __importDefault(context_handler_1).default; } });
|
package/package.json
CHANGED