diff --git a/.github/workflows/sca-scan.yml b/.github/workflows/sca-scan.yml index 2307d48902..79b6557546 100644 --- a/.github/workflows/sca-scan.yml +++ b/.github/workflows/sca-scan.yml @@ -5,6 +5,9 @@ on: jobs: security-sca: runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write steps: - uses: actions/checkout@master - name: Run Snyk to check for vulnerabilities diff --git a/.talismanrc b/.talismanrc index b8de34c106..94865baee1 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,4 +1,6 @@ fileignoreconfig: - filename: pnpm-lock.yaml - checksum: 763c12b0555cbd63ca4015664e08de315f0e675125a34de2d9c8d1a73a3723e8 + checksum: ad8af6ca67f20585ba2e3478cb6119a50508da89492119eabb7d96ec2b56545f + - filename: packages/contentstack/README.md + checksum: df0892cbcf3f04972161b30a1a0ef8844a2682ce8a3270f2911909e7789ad8d7 version: '1.0' diff --git a/packages/contentstack-auth/README.md b/packages/contentstack-auth/README.md index c2ee3ad478..446078303a 100644 --- a/packages/contentstack-auth/README.md +++ b/packages/contentstack-auth/README.md @@ -18,7 +18,7 @@ $ npm install -g @contentstack/cli-auth $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-auth/1.8.4 darwin-arm64 node-v22.13.1 +@contentstack/cli-auth/1.8.6 darwin-arm64 node-v24.18.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-auth/package.json b/packages/contentstack-auth/package.json index a35f5fb61d..bb55667fb9 100644 --- a/packages/contentstack-auth/package.json +++ b/packages/contentstack-auth/package.json @@ -1,7 +1,7 @@ { "name": "@contentstack/cli-auth", "description": "Contentstack CLI plugin for authentication activities", - "version": "1.8.5", + "version": "1.8.6", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli/issues", "scripts": { @@ -16,7 +16,7 @@ }, "dependencies": { "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-utilities": "~1.19.0", + "@contentstack/cli-utilities": "~1.19.1", "@oclif/core": "^4.11.4", "otplib": "^12.0.1" }, diff --git a/packages/contentstack-command/package.json b/packages/contentstack-command/package.json index bcdb420940..6c49a9c3cf 100644 --- a/packages/contentstack-command/package.json +++ b/packages/contentstack-command/package.json @@ -1,7 +1,7 @@ { "name": "@contentstack/cli-command", "description": "Contentstack CLI plugin for configuration", - "version": "1.8.5", + "version": "1.8.6", "author": "Contentstack", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -14,7 +14,7 @@ "lint": "eslint src/**/*.ts" }, "dependencies": { - "@contentstack/cli-utilities": "~1.19.0", + "@contentstack/cli-utilities": "~1.19.1", "contentstack": "^3.27.0", "@oclif/core": "^4.11.4" }, diff --git a/packages/contentstack-config/README.md b/packages/contentstack-config/README.md index c6b0c438bd..8a1361e1c6 100644 --- a/packages/contentstack-config/README.md +++ b/packages/contentstack-config/README.md @@ -18,7 +18,7 @@ $ npm install -g @contentstack/cli-config $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-config/1.20.5 darwin-arm64 node-v22.13.1 +@contentstack/cli-config/1.21.1 darwin-arm64 node-v24.18.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND @@ -316,8 +316,8 @@ USAGE $ csdx config:set:ea-header [--header-alias ] [--header ] FLAGS - --header= (optional) Provide the Early Access header alias name. - --header-alias= (optional) Provide the Early Access header value. + --header= (optional) Provide the Early Access header value. + --header-alias= (optional) Provide a name (alias) for this Early Access header. DESCRIPTION Set Early Access header @@ -340,8 +340,8 @@ USAGE $ csdx config:set:early-access-header [--header-alias ] [--header ] FLAGS - --header= (optional) Provide the Early Access header alias name. - --header-alias= (optional) Provide the Early Access header value. + --header= (optional) Provide the Early Access header value. + --header-alias= (optional) Provide a name (alias) for this Early Access header. DESCRIPTION Set Early Access header diff --git a/packages/contentstack-config/package.json b/packages/contentstack-config/package.json index 042e95315f..14b25fb670 100644 --- a/packages/contentstack-config/package.json +++ b/packages/contentstack-config/package.json @@ -1,7 +1,7 @@ { "name": "@contentstack/cli-config", "description": "Contentstack CLI plugin for configuration", - "version": "1.21.0", + "version": "1.21.1", "author": "Contentstack", "scripts": { "build": "pnpm compile && oclif manifest && oclif readme", @@ -15,7 +15,7 @@ }, "dependencies": { "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-utilities": "~1.19.0", + "@contentstack/cli-utilities": "~1.19.1", "@contentstack/utils": "~1.9.1", "@oclif/core": "^4.11.4" }, diff --git a/packages/contentstack-config/src/commands/config/set/early-access-header.ts b/packages/contentstack-config/src/commands/config/set/early-access-header.ts index 6205e0c99f..e44a0f55c7 100644 --- a/packages/contentstack-config/src/commands/config/set/early-access-header.ts +++ b/packages/contentstack-config/src/commands/config/set/early-access-header.ts @@ -6,8 +6,8 @@ export default class SetEarlyAccessHeaderCommand extends Command { static description = 'Set Early Access header'; static aliases: string[] = ['config:set:ea-header']; static flags: FlagInput = { - 'header-alias': flags.string({ description: '(optional) Provide the Early Access header value.' }), - header: flags.string({ description: '(optional) Provide the Early Access header alias name.' }), + 'header-alias': flags.string({ description: '(optional) Provide a name (alias) for this Early Access header.' }), + header: flags.string({ description: '(optional) Provide the Early Access header value.' }), }; static examples: string[] = [ '$ <%= config.bin %> <%= command.id %>', diff --git a/packages/contentstack-utilities/package.json b/packages/contentstack-utilities/package.json index 88051977e6..e53d581955 100644 --- a/packages/contentstack-utilities/package.json +++ b/packages/contentstack-utilities/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/cli-utilities", - "version": "1.19.0", + "version": "1.19.1", "description": "Utilities for contentstack projects", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/packages/contentstack-utilities/src/logger/logger.ts b/packages/contentstack-utilities/src/logger/logger.ts index ebdb8fe21a..846f41c64f 100644 --- a/packages/contentstack-utilities/src/logger/logger.ts +++ b/packages/contentstack-utilities/src/logger/logger.ts @@ -65,7 +65,7 @@ export default class Logger { winston.format.printf((info) => { // Apply minimal redaction for files (debugging info preserved) const redactedInfo = this.redact(info, false); - return JSON.stringify(redactedInfo); + return this.safeStringify(redactedInfo); }), ), }), @@ -117,6 +117,26 @@ export default class Logger { } } + /** + * Stringifies a log entry without throwing on circular references. + * `redact()` can fall back to the original (still-circular) object when + * cloning fails, so this must never assume the input is cycle-free. + */ + private safeStringify(value: any): string { + const seen = new WeakSet(); + try { + return JSON.stringify(value, (_key, val) => { + if (typeof val === 'object' && val !== null) { + if (seen.has(val)) return '[Circular]'; + seen.add(val); + } + return val; + }); + } catch { + return JSON.stringify({ level: value?.level, message: value?.message ?? '[Unserializable log entry]' }); + } + } + private shouldLog(level: LogType, target: 'console' | 'file'): boolean { // If console logging is disabled, don't log to console if (target === 'console' && this.config.consoleLoggingEnabled === false) { @@ -186,9 +206,12 @@ export default class Logger { this.loggers.error.error(logPayload); } - // For console, use debug level if hidden, otherwise error level + // For console, use debug level if hidden, otherwise error level. Each level's + // winston logger instance bundles both the file and console transports, so only + // write again here when the target differs from the one already written above — + // otherwise this would duplicate both the console line and the file entry. const consoleLevel: LogType = params.hidden ? 'debug' : 'error'; - if (this.shouldLog(consoleLevel, 'console')) { + if (consoleLevel !== 'error' && this.shouldLog(consoleLevel, 'console')) { this.loggers[consoleLevel].error(logPayload); } } diff --git a/packages/contentstack/README.md b/packages/contentstack/README.md index 761ff3663b..972be03913 100644 --- a/packages/contentstack/README.md +++ b/packages/contentstack/README.md @@ -1,4493 +1,66 @@ # @contentstack/cli -Use Contentstack Command-line Interface to command Contentstack for executing a set of operations from the terminal. To get started with CLI, refer to the [CLI’s documentation](https://www.contentstack.com/docs/developers/cli) +Use Contentstack Command-line Interface (CLI) to interact with Contentstack directly from your terminal. [![License](https://img.shields.io/npm/l/@contentstack/cli)](https://github.com/contentstack/cli/blob/main/LICENSE) +[![npm](https://img.shields.io/npm/v/@contentstack/cli)](https://www.npmjs.com/package/@contentstack/cli) - -* [@contentstack/cli](#contentstackcli) -* [Requirements](#requirements) -* [Usage](#usage) -* [Commands](#commands) - +## Requirements -# Requirements +Node.js v22 or higher — download from [nodejs.org](https://nodejs.org/). -- **Node.js v22 or higher** is required. Download it from [nodejs.org](https://nodejs.org/). +## Installation -> **Note:** Starting from this version, Contentstack CLI requires Node.js 22+. Node.js 22 is the current LTS release and includes important compatibility improvements for modern JavaScript modules. - -# Usage - - -```sh-session -$ npm install -g @contentstack/cli -$ csdx COMMAND -running command... -$ csdx (--version|-v) -@contentstack/cli/1.65.0 darwin-arm64 node-v22.13.1 -$ csdx --help [COMMAND] -USAGE - $ csdx COMMAND -... -``` - - -# Commands - - -* [`csdx audit`](#csdx-audit) -* [`csdx audit:fix`](#csdx-auditfix) -* [`csdx auth:login`](#csdx-authlogin) -* [`csdx auth:logout`](#csdx-authlogout) -* [`csdx auth:tokens`](#csdx-authtokens) -* [`csdx auth:tokens:add [-a ] [--delivery] [--management] [-e ] [-k ] [-y] [--token ]`](#csdx-authtokensadd--a-value---delivery---management--e-value--k-value--y---token-value) -* [`csdx auth:tokens:remove`](#csdx-authtokensremove) -* [`csdx auth:whoami`](#csdx-authwhoami) -* [`csdx cm:assets:publish [-a ] [--retry-failed ] [-e ] [--folder-uid ] [--backup-dir ] [--bulk-publish ] [-c ] [-y] [--locales ] [--branch ] [--delivery-token ] [--source-env ]`](#csdx-cmassetspublish--a-value---retry-failed-value--e-value---folder-uid-value---backup-dir-value---bulk-publish-value--c-value--y---locales-value---branch-value---delivery-token-value---source-env-value) -* [`csdx cm:assets:unpublish`](#csdx-cmassetsunpublish) -* [`csdx cm:bootstrap`](#csdx-cmbootstrap) -* [`csdx cm:branches`](#csdx-cmbranches) -* [`csdx cm:branches:create`](#csdx-cmbranchescreate) -* [`csdx cm:branches:delete [-uid ] [-k ]`](#csdx-cmbranchesdelete--uid-value--k-value) -* [`csdx cm:branches:diff [--base-branch ] [--compare-branch ] [-k ][--module ] [--format ] [--csv-path ]`](#csdx-cmbranchesdiff---base-branch-value---compare-branch-value--k-value--module-value---format-value---csv-path-value) -* [`csdx cm:branches:merge [-k ][--compare-branch ] [--no-revert] [--export-summary-path ] [--use-merge-summary ] [--comment ] [--base-branch ]`](#csdx-cmbranchesmerge--k-value--compare-branch-value---no-revert---export-summary-path-value---use-merge-summary-value---comment-value---base-branch-value) -* [`csdx cm:branches:merge-status -k --merge-uid `](#csdx-cmbranchesmerge-status--k-value---merge-uid-value) -* [`csdx cm:bulk-publish`](#csdx-cmbulk-publish) -* [`csdx cm:entries:update-and-publish [-a ] [--retry-failed ] [--bulk-publish ] [--content-types ] [-t ] [-e ] [-c ] [-y] [--locales ] [--branch ]`](#csdx-cmentriesupdate-and-publish--a-value---retry-failed-value---bulk-publish-value---content-types-value--t-value--e-value--c-value--y---locales-value---branch-value) -* [`csdx cm:assets:publish [-a ] [--retry-failed ] [-e ] [--folder-uid ] [--backup-dir ] [--bulk-publish ] [-c ] [-y] [--locales ] [--branch ] [--delivery-token ] [--source-env ]`](#csdx-cmassetspublish--a-value---retry-failed-value--e-value---folder-uid-value---backup-dir-value---bulk-publish-value--c-value--y---locales-value---branch-value---delivery-token-value---source-env-value) -* [`csdx cm:bulk-publish:clear`](#csdx-cmbulk-publishclear) -* [`csdx cm:bulk-publish:configure`](#csdx-cmbulk-publishconfigure) -* [`csdx cm:bulk-publish:cross-publish [-a ] [--retry-failed ] [--bulk-publish ] [--content-type ] [--locales ] [--source-env ] [--environments ] [--delivery-token ] [-c ] [-y] [--branch ] [--onlyAssets] [--onlyEntries] [--include-variants]`](#csdx-cmbulk-publishcross-publish--a-value---retry-failed-value---bulk-publish-value---content-type-value---locales-value---source-env-value---environments-value---delivery-token-value--c-value--y---branch-value---onlyassets---onlyentries---include-variants) -* [`csdx cm:entries:publish [-a ] [--retry-failed ] [--bulk-publish ] [--publish-all-content-types] [--content-types ] [--locales ] [-e ] [-c ] [-y] [--branch ] [--delivery-token ] [--source-env ] [--entry-uid ] [--include-variants]`](#csdx-cmentriespublish--a-value---retry-failed-value---bulk-publish-value---publish-all-content-types---content-types-value---locales-value--e-value--c-value--y---branch-value---delivery-token-value---source-env-value---entry-uid-value---include-variants) -* [`csdx cm:entries:publish-modified [-a ] [--retry-failed ] [--bulk-publish ] [--source-env ] [--content-types ] [--locales ] [-e ] [-c ] [-y] [--branch ]`](#csdx-cmentriespublish-modified--a-value---retry-failed-value---bulk-publish-value---source-env-value---content-types-value---locales-value--e-value--c-value--y---branch-value) -* [`csdx cm:entries:publish-non-localized-fields [-a ] [--retry-failed ] [--bulk-publish ] [--source-env ] [--content-types ] [-e ] [-c ] [-y] [--branch ]`](#csdx-cmentriespublish-non-localized-fields--a-value---retry-failed-value---bulk-publish-value---source-env-value---content-types-value--e-value--c-value--y---branch-value) -* [`csdx cm:bulk-publish:revert`](#csdx-cmbulk-publishrevert) -* [`csdx csdx cm:stacks:unpublish [-a ] [-e ] [-c ] [-y] [--locale ] [--branch ] [--retry-failed ] [--bulk-unpublish ] [--content-type ] [--delivery-token ] [--only-assets] [--only-entries]`](#csdx-csdx-cmstacksunpublish--a-value--e-value--c-value--y---locale-value---branch-value---retry-failed-value---bulk-unpublish-value---content-type-value---delivery-token-value---only-assets---only-entries) -* [`csdx cm:entries:publish-only-unpublished [-a ] [--retry-failed ] [--bulk-publish ] [--source-env ] [--content-types ] [--locales ] [-e ] [-c ] [-y] [--branch ]`](#csdx-cmentriespublish-only-unpublished--a-value---retry-failed-value---bulk-publish-value---source-env-value---content-types-value---locales-value--e-value--c-value--y---branch-value) -* [`csdx cm:entries:migrate-html-rte`](#csdx-cmentriesmigrate-html-rte) -* [`csdx cm:entries:publish [-a ] [--retry-failed ] [--bulk-publish ] [--publish-all-content-types] [--content-types ] [--locales ] [-e ] [-c ] [-y] [--branch ] [--delivery-token ] [--source-env ] [--entry-uid ] [--include-variants]`](#csdx-cmentriespublish--a-value---retry-failed-value---bulk-publish-value---publish-all-content-types---content-types-value---locales-value--e-value--c-value--y---branch-value---delivery-token-value---source-env-value---entry-uid-value---include-variants) -* [`csdx cm:entries:publish-modified [-a ] [--retry-failed ] [--bulk-publish ] [--source-env ] [--content-types ] [--locales ] [-e ] [-c ] [-y] [--branch ]`](#csdx-cmentriespublish-modified--a-value---retry-failed-value---bulk-publish-value---source-env-value---content-types-value---locales-value--e-value--c-value--y---branch-value) -* [`csdx cm:entries:publish-non-localized-fields [-a ] [--retry-failed ] [--bulk-publish ] [--source-env ] [--content-types ] [-e ] [-c ] [-y] [--branch ]`](#csdx-cmentriespublish-non-localized-fields--a-value---retry-failed-value---bulk-publish-value---source-env-value---content-types-value--e-value--c-value--y---branch-value) -* [`csdx cm:entries:publish-only-unpublished [-a ] [--retry-failed ] [--bulk-publish ] [--source-env ] [--content-types ] [--locales ] [-e ] [-c ] [-y] [--branch ]`](#csdx-cmentriespublish-only-unpublished--a-value---retry-failed-value---bulk-publish-value---source-env-value---content-types-value---locales-value--e-value--c-value--y---branch-value) -* [`csdx cm:entries:unpublish`](#csdx-cmentriesunpublish) -* [`csdx cm:entries:update-and-publish [-a ] [--retry-failed ] [--bulk-publish ] [--content-types ] [-t ] [-e ] [-c ] [-y] [--locales ] [--branch ]`](#csdx-cmentriesupdate-and-publish--a-value---retry-failed-value---bulk-publish-value---content-types-value--t-value--e-value--c-value--y---locales-value---branch-value) -* [`csdx cm:stacks:export [-c ] [-k ] [-d ] [-a ] [--module ] [--content-types ] [--branch ] [--secured-assets]`](#csdx-cmstacksexport--c-value--k-value--d-value--a-value---module-value---content-types-value---branch-value---secured-assets) -* [`csdx cm:export-to-csv`](#csdx-cmexport-to-csv) -* [`csdx cm:stacks:import [-c ] [-k ] [-d ] [-a ] [--module ] [--backup-dir ] [--branch ] [--import-webhook-status disable|current]`](#csdx-cmstacksimport--c-value--k-value--d-value--a-value---module-value---backup-dir-value---branch-value---import-webhook-status-disablecurrent) -* [`csdx cm:stacks:import-setup [-k ] [-d ] [-a ] [--modules ]`](#csdx-cmstacksimport-setup--k-value--d-value--a-value---modules-valuevalue) -* [`csdx cm:stacks:migration [-k ] [-a ] [--file-path ] [--branch ] [--config-file ] [--config ] [--multiple]`](#csdx-cmstacksmigration--k-value--a-value---file-path-value---branch-value---config-file-value---config-value---multiple) -* [`csdx cm:stacks:seed [--repo ] [--org ] [-k ] [-n ] [-y] [-s ] [--locale ]`](#csdx-cmstacksseed---repo-value---org-value--k-value--n-value--y--s-value---locale-value) -* [`csdx cm:stacks:clone [--source-branch ] [--target-branch ] [--source-management-token-alias ] [--destination-management-token-alias ] [-n ] [--type a|b] [--source-stack-api-key ] [--destination-stack-api-key ] [--import-webhook-status disable|current]`](#csdx-cmstacksclone---source-branch-value---target-branch-value---source-management-token-alias-value---destination-management-token-alias-value--n-value---type-ab---source-stack-api-key-value---destination-stack-api-key-value---import-webhook-status-disablecurrent) -* [`csdx cm:stacks:audit`](#csdx-cmstacksaudit) -* [`csdx cm:stacks:audit:fix`](#csdx-cmstacksauditfix) -* [`csdx cm:stacks:clone [--source-branch ] [--target-branch ] [--source-management-token-alias ] [--destination-management-token-alias ] [-n ] [--type a|b] [--source-stack-api-key ] [--destination-stack-api-key ] [--import-webhook-status disable|current]`](#csdx-cmstacksclone---source-branch-value---target-branch-value---source-management-token-alias-value---destination-management-token-alias-value--n-value---type-ab---source-stack-api-key-value---destination-stack-api-key-value---import-webhook-status-disablecurrent) -* [`csdx cm:stacks:export [-c ] [-k ] [-d ] [-a ] [--module ] [--content-types ] [--branch ] [--secured-assets]`](#csdx-cmstacksexport--c-value--k-value--d-value--a-value---module-value---content-types-value---branch-value---secured-assets) -* [`csdx cm:stacks:import [-c ] [-k ] [-d ] [-a ] [--module ] [--backup-dir ] [--branch ] [--import-webhook-status disable|current]`](#csdx-cmstacksimport--c-value--k-value--d-value--a-value---module-value---backup-dir-value---branch-value---import-webhook-status-disablecurrent) -* [`csdx cm:stacks:import-setup [-k ] [-d ] [-a ] [--modules ]`](#csdx-cmstacksimport-setup--k-value--d-value--a-value---modules-valuevalue) -* [`csdx cm:stacks:migration [-k ] [-a ] [--file-path ] [--branch ] [--config-file ] [--config ] [--multiple]`](#csdx-cmstacksmigration--k-value--a-value---file-path-value---branch-value---config-file-value---config-value---multiple) -* [`csdx cm:stacks:publish`](#csdx-cmstackspublish) -* [`csdx cm:stacks:publish-clear-logs`](#csdx-cmstackspublish-clear-logs) -* [`csdx cm:stacks:publish-configure`](#csdx-cmstackspublish-configure) -* [`csdx cm:stacks:publish-revert`](#csdx-cmstackspublish-revert) -* [`csdx cm:stacks:seed [--repo ] [--org ] [-k ] [-n ] [-y] [-s ] [--locale ]`](#csdx-cmstacksseed---repo-value---org-value--k-value--n-value--y--s-value---locale-value) -* [`csdx csdx cm:stacks:unpublish [-a ] [-e ] [-c ] [-y] [--locale ] [--branch ] [--retry-failed ] [--bulk-unpublish ] [--content-type ] [--delivery-token ] [--only-assets] [--only-entries]`](#csdx-csdx-cmstacksunpublish--a-value--e-value--c-value--y---locale-value---branch-value---retry-failed-value---bulk-unpublish-value---content-type-value---delivery-token-value---only-assets---only-entries) -* [`csdx config:get:base-branch`](#csdx-configgetbase-branch) -* [`csdx config:get:ea-header`](#csdx-configgetea-header) -* [`csdx config:get:early-access-header`](#csdx-configgetearly-access-header) -* [`csdx config:get:log`](#csdx-configgetlog) -* [`csdx config:get:proxy`](#csdx-configgetproxy) -* [`csdx config:get:rate-limit`](#csdx-configgetrate-limit) -* [`csdx config:get:region`](#csdx-configgetregion) -* [`csdx config:remove:base-branch`](#csdx-configremovebase-branch) -* [`csdx config:remove:ea-header`](#csdx-configremoveea-header) -* [`csdx config:remove:early-access-header`](#csdx-configremoveearly-access-header) -* [`csdx config:remove:proxy`](#csdx-configremoveproxy) -* [`csdx config:remove:rate-limit`](#csdx-configremoverate-limit) -* [`csdx config:set:base-branch`](#csdx-configsetbase-branch) -* [`csdx config:set:ea-header`](#csdx-configsetea-header) -* [`csdx config:set:early-access-header`](#csdx-configsetearly-access-header) -* [`csdx config:set:log`](#csdx-configsetlog) -* [`csdx config:set:proxy`](#csdx-configsetproxy) -* [`csdx config:set:rate-limit`](#csdx-configsetrate-limit) -* [`csdx config:set:region [REGION]`](#csdx-configsetregion-region) -* [`csdx help [COMMAND]`](#csdx-help-command) -* [`csdx launch`](#csdx-launch) -* [`csdx launch:deployments`](#csdx-launchdeployments) -* [`csdx launch:environments`](#csdx-launchenvironments) -* [`csdx launch:functions`](#csdx-launchfunctions) -* [`csdx launch:logs`](#csdx-launchlogs) -* [`csdx launch:open`](#csdx-launchopen) -* [`csdx launch:rollback`](#csdx-launchrollback) -* [`csdx login`](#csdx-login) -* [`csdx logout`](#csdx-logout) -* [`csdx plugins`](#csdx-plugins) -* [`csdx plugins:add PLUGIN`](#csdx-pluginsadd-plugin) -* [`csdx plugins:inspect PLUGIN...`](#csdx-pluginsinspect-plugin) -* [`csdx plugins:install PLUGIN`](#csdx-pluginsinstall-plugin) -* [`csdx plugins:link PATH`](#csdx-pluginslink-path) -* [`csdx plugins:remove [PLUGIN]`](#csdx-pluginsremove-plugin) -* [`csdx plugins:reset`](#csdx-pluginsreset) -* [`csdx plugins:uninstall [PLUGIN]`](#csdx-pluginsuninstall-plugin) -* [`csdx plugins:unlink [PLUGIN]`](#csdx-pluginsunlink-plugin) -* [`csdx plugins:update`](#csdx-pluginsupdate) -* [`csdx tokens`](#csdx-tokens) -* [`csdx whoami`](#csdx-whoami) - -## `csdx audit` - -Perform audits and find possible errors in the exported Contentstack data - -``` -USAGE - $ csdx audit [-c ] [-d ] [--show-console-output] [--report-path ] [--modules - content-types|global-fields|entries|extensions|workflows|custom-roles|assets|field-rules|composable-studio...] - [--columns ] [--sort ] [--filter ] [--csv] [--no-truncate] [--no-header] [--output - csv|json|yaml] - -FLAGS - --modules=