contensis-cli 1.0.0-beta.78 → 1.0.0-beta.79
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/dist/commands/get.js +9 -0
- package/dist/commands/get.js.map +2 -2
- package/dist/services/ContensisCliService.js +19 -0
- package/dist/services/ContensisCliService.js.map +2 -2
- package/dist/shell.js +1 -0
- package/dist/shell.js.map +2 -2
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/get.ts +14 -0
- package/src/services/ContensisCliService.ts +24 -1
- package/src/shell.ts +1 -0
- package/src/version.ts +1 -1
package/dist/commands/get.js
CHANGED
|
@@ -38,6 +38,15 @@ Example call:
|
|
|
38
38
|
).action(async (opts) => {
|
|
39
39
|
await (0, import_ContensisCliService.cliCommand)(["get", "version"], opts).PrintContensisVersion();
|
|
40
40
|
});
|
|
41
|
+
program.command("token").description("show a bearer token for the currently logged in user").addHelpText(
|
|
42
|
+
"after",
|
|
43
|
+
`
|
|
44
|
+
Example call:
|
|
45
|
+
> get token
|
|
46
|
+
`
|
|
47
|
+
).action(async (opts) => {
|
|
48
|
+
await (0, import_ContensisCliService.cliCommand)(["get", "token"], opts).PrintBearerToken();
|
|
49
|
+
});
|
|
41
50
|
program.command("project").description("get a project").argument("[projectId]", "id of the project to get (default: current)").addHelpText(
|
|
42
51
|
"after",
|
|
43
52
|
`
|
package/dist/commands/get.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/commands/get.ts"],
|
|
4
|
-
"sourcesContent": ["import { Argument, Command } from 'commander';\nimport { merge } from 'lodash';\nimport { cliCommand } from '~/services/ContensisCliService';\nimport { addGlobalOptions, mapContensisOpts } from './globalOptions';\n\nexport const makeGetCommand = () => {\n const program = new Command()\n .command('get')\n .description('get command')\n .addHelpText('after', `\\n`)\n .showHelpAfterError(true)\n .exitOverride();\n\n program\n .command('version')\n .description('get current Contensis version')\n .addHelpText(\n 'after',\n `\nExample call:\n > version\n`\n )\n .action(async opts => {\n await cliCommand(['get', 'version'], opts).PrintContensisVersion();\n });\n\n program\n .command('project')\n .description('get a project')\n .argument('[projectId]', 'id of the project to get (default: current)')\n .addHelpText(\n 'after',\n `\nExample call:\n > get project website\n`\n )\n .action(async (projectId: string, opts) => {\n await cliCommand(['get', 'project', projectId], opts).PrintProject(\n projectId\n );\n });\n\n program\n .command('role')\n .description('get a role')\n .argument('<roleNameOrId>', 'id or name of the role to get')\n .addHelpText(\n 'after',\n `\nExample call:\n > get role \"entry admin\"\n`\n )\n .action(async (roleNameOrId: string, opts) => {\n await cliCommand(['get', 'role', roleNameOrId], opts).PrintRole(\n roleNameOrId\n );\n });\n\n program\n .command('webhook')\n .description('get a webhook')\n .argument('<webhookNameOrId...>', 'id or name of the webhook(s) to get')\n .addHelpText(\n 'after',\n `\nExample call:\n > get webhook \"Slack notification\"\n`\n )\n .action(async (webhookNameOrId: string[], opts) => {\n await cliCommand(\n ['get', 'webhook', webhookNameOrId.join(' ')],\n opts\n ).PrintWebhookSubscriptions(webhookNameOrId);\n });\n\n program\n .command('model')\n .description('get a content model')\n .argument('<contentTypeId...>', 'ids of the content models to get')\n .addHelpText(\n 'after',\n `\nExample call:\n > get model podcast podcastLinks\n`\n )\n .action(async (modelIds: string[], opts) => {\n await cliCommand(\n ['get', 'model', modelIds.join(' ')],\n opts\n ).PrintContentModels(modelIds);\n });\n\n program\n .command('contenttype')\n .description('get a content type')\n .argument('<contentTypeId>', 'the API id of the content type to get')\n .addHelpText(\n 'after',\n `\nExample call:\n > get contenttype {contentTypeId} -o content-type-backup.json\n`\n )\n .action(async (contentTypeId: string, opts) => {\n await cliCommand(\n ['get', 'contenttype', contentTypeId],\n opts\n ).PrintContentType(contentTypeId);\n });\n\n program\n .command('component')\n .description('get a component')\n .argument('<componentId>', 'the API id of the component to get')\n .addHelpText(\n 'after',\n `\nExample call:\n > get component {componentId} -o component-backup.json\n`\n )\n .action(async (componentId: string, opts) => {\n await cliCommand(['get', 'component', componentId], opts).PrintComponent(\n componentId\n );\n });\n\n program\n .command('entries')\n .description('get entries')\n .argument(\n '[search phrase]',\n 'get entries with the search phrase, use quotes for multiple words'\n )\n .option('-i --id <id...>', 'the entry id(s) to get')\n .option(\n '-d, --dependents',\n 'find and return any dependencies of all found entries'\n )\n .option(\n '-fi, --fields <fields...>',\n 'limit the output fields on returned entries'\n )\n .option(\n '-q, --zenql <zenql>',\n 'get entries with a supplied ZenQL statement'\n )\n .addHelpText(\n 'after',\n `\nExample call:\n > get entries --zenql \"sys.contentTypeId = blog\" --fields entryTitle entryDescription sys.id --output ./blog-posts.csv --format csv\n`\n )\n .action(async (phrase: string, opts, cmd) => {\n // console.log('phrase: ', phrase, '\\nopts:', JSON.stringify(opts, null, 2));\n // console.log('opts:', JSON.stringify(opts, null, 2));\n await cliCommand(\n ['get', 'entries'],\n opts,\n mapContensisOpts({ phrase, ...opts })\n ).GetEntries({\n withDependents: opts.dependents,\n });\n });\n\n const block = program\n .command('block')\n .description('get a block or block version')\n .argument('[blockId]', 'the block to get version details for')\n .argument(\n '[branch]',\n 'the branch of the block to get version details for',\n 'default'\n )\n .argument(\n '[version]',\n 'get a specific version of the block pushed to the specified branch'\n )\n .addHelpText(\n 'after',\n `\nExample call:\n > get block contensis-website\n > get block contensis-website develop latest\n`\n )\n .action(async (blockId: string, branch: string, version: string, opts) => {\n await cliCommand(['get', 'block', blockId], opts).PrintBlockVersions(\n blockId,\n branch,\n version\n );\n });\n\n const dataCenter = new Argument(\n '[dataCenter]',\n 'the datacentre of the block to get logs for'\n )\n .choices(['hq', 'london', 'manchester'])\n .default('hq');\n\n block\n .command('logs')\n .description('get logs for a block')\n .argument('[blockId]', 'the block to get version logs for')\n .argument(\n '[branch]',\n 'the branch of the block to get version details for',\n 'default'\n )\n .argument(\n '[version]',\n 'the version of the block pushed to the branch to get logs for',\n 'latest'\n )\n .addArgument(dataCenter)\n .option('-t, --follow', 'follow block logs in near realtime', false)\n .usage('get block logs [blockId] [branch] [version] [dataCenter]')\n .addHelpText(\n 'after',\n `\nExample call:\n > get block logs contensis-website default\n > get block logs contensis-website master latest london --follow\n`\n )\n .action(\n async (\n blockId: string,\n branch: string,\n version: string,\n dataCenter: 'hq' | 'manchester' | 'london',\n opts\n ) => {\n const parentOpts = block.opts() || {};\n await cliCommand(\n ['get', 'block', 'logs'],\n merge(opts, parentOpts)\n ).PrintBlockLogs(\n blockId,\n branch,\n version,\n dataCenter,\n opts.follow as boolean\n );\n }\n );\n\n // Add global opts for inner sub-commands\n addGlobalOptions(block);\n\n return program;\n};\n\nexport const get = makeGetCommand();\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { Argument, Command } from 'commander';\nimport { merge } from 'lodash';\nimport { cliCommand } from '~/services/ContensisCliService';\nimport { addGlobalOptions, mapContensisOpts } from './globalOptions';\n\nexport const makeGetCommand = () => {\n const program = new Command()\n .command('get')\n .description('get command')\n .addHelpText('after', `\\n`)\n .showHelpAfterError(true)\n .exitOverride();\n\n program\n .command('version')\n .description('get current Contensis version')\n .addHelpText(\n 'after',\n `\nExample call:\n > version\n`\n )\n .action(async opts => {\n await cliCommand(['get', 'version'], opts).PrintContensisVersion();\n });\n\n program\n .command('token')\n .description('show a bearer token for the currently logged in user')\n .addHelpText(\n 'after',\n `\nExample call:\n > get token\n`\n )\n .action(async opts => {\n await cliCommand(['get', 'token'], opts).PrintBearerToken();\n });\n\n program\n .command('project')\n .description('get a project')\n .argument('[projectId]', 'id of the project to get (default: current)')\n .addHelpText(\n 'after',\n `\nExample call:\n > get project website\n`\n )\n .action(async (projectId: string, opts) => {\n await cliCommand(['get', 'project', projectId], opts).PrintProject(\n projectId\n );\n });\n\n program\n .command('role')\n .description('get a role')\n .argument('<roleNameOrId>', 'id or name of the role to get')\n .addHelpText(\n 'after',\n `\nExample call:\n > get role \"entry admin\"\n`\n )\n .action(async (roleNameOrId: string, opts) => {\n await cliCommand(['get', 'role', roleNameOrId], opts).PrintRole(\n roleNameOrId\n );\n });\n\n program\n .command('webhook')\n .description('get a webhook')\n .argument('<webhookNameOrId...>', 'id or name of the webhook(s) to get')\n .addHelpText(\n 'after',\n `\nExample call:\n > get webhook \"Slack notification\"\n`\n )\n .action(async (webhookNameOrId: string[], opts) => {\n await cliCommand(\n ['get', 'webhook', webhookNameOrId.join(' ')],\n opts\n ).PrintWebhookSubscriptions(webhookNameOrId);\n });\n\n program\n .command('model')\n .description('get a content model')\n .argument('<contentTypeId...>', 'ids of the content models to get')\n .addHelpText(\n 'after',\n `\nExample call:\n > get model podcast podcastLinks\n`\n )\n .action(async (modelIds: string[], opts) => {\n await cliCommand(\n ['get', 'model', modelIds.join(' ')],\n opts\n ).PrintContentModels(modelIds);\n });\n\n program\n .command('contenttype')\n .description('get a content type')\n .argument('<contentTypeId>', 'the API id of the content type to get')\n .addHelpText(\n 'after',\n `\nExample call:\n > get contenttype {contentTypeId} -o content-type-backup.json\n`\n )\n .action(async (contentTypeId: string, opts) => {\n await cliCommand(\n ['get', 'contenttype', contentTypeId],\n opts\n ).PrintContentType(contentTypeId);\n });\n\n program\n .command('component')\n .description('get a component')\n .argument('<componentId>', 'the API id of the component to get')\n .addHelpText(\n 'after',\n `\nExample call:\n > get component {componentId} -o component-backup.json\n`\n )\n .action(async (componentId: string, opts) => {\n await cliCommand(['get', 'component', componentId], opts).PrintComponent(\n componentId\n );\n });\n\n program\n .command('entries')\n .description('get entries')\n .argument(\n '[search phrase]',\n 'get entries with the search phrase, use quotes for multiple words'\n )\n .option('-i --id <id...>', 'the entry id(s) to get')\n .option(\n '-d, --dependents',\n 'find and return any dependencies of all found entries'\n )\n .option(\n '-fi, --fields <fields...>',\n 'limit the output fields on returned entries'\n )\n .option(\n '-q, --zenql <zenql>',\n 'get entries with a supplied ZenQL statement'\n )\n .addHelpText(\n 'after',\n `\nExample call:\n > get entries --zenql \"sys.contentTypeId = blog\" --fields entryTitle entryDescription sys.id --output ./blog-posts.csv --format csv\n`\n )\n .action(async (phrase: string, opts, cmd) => {\n // console.log('phrase: ', phrase, '\\nopts:', JSON.stringify(opts, null, 2));\n // console.log('opts:', JSON.stringify(opts, null, 2));\n await cliCommand(\n ['get', 'entries'],\n opts,\n mapContensisOpts({ phrase, ...opts })\n ).GetEntries({\n withDependents: opts.dependents,\n });\n });\n\n const block = program\n .command('block')\n .description('get a block or block version')\n .argument('[blockId]', 'the block to get version details for')\n .argument(\n '[branch]',\n 'the branch of the block to get version details for',\n 'default'\n )\n .argument(\n '[version]',\n 'get a specific version of the block pushed to the specified branch'\n )\n .addHelpText(\n 'after',\n `\nExample call:\n > get block contensis-website\n > get block contensis-website develop latest\n`\n )\n .action(async (blockId: string, branch: string, version: string, opts) => {\n await cliCommand(['get', 'block', blockId], opts).PrintBlockVersions(\n blockId,\n branch,\n version\n );\n });\n\n const dataCenter = new Argument(\n '[dataCenter]',\n 'the datacentre of the block to get logs for'\n )\n .choices(['hq', 'london', 'manchester'])\n .default('hq');\n\n block\n .command('logs')\n .description('get logs for a block')\n .argument('[blockId]', 'the block to get version logs for')\n .argument(\n '[branch]',\n 'the branch of the block to get version details for',\n 'default'\n )\n .argument(\n '[version]',\n 'the version of the block pushed to the branch to get logs for',\n 'latest'\n )\n .addArgument(dataCenter)\n .option('-t, --follow', 'follow block logs in near realtime', false)\n .usage('get block logs [blockId] [branch] [version] [dataCenter]')\n .addHelpText(\n 'after',\n `\nExample call:\n > get block logs contensis-website default\n > get block logs contensis-website master latest london --follow\n`\n )\n .action(\n async (\n blockId: string,\n branch: string,\n version: string,\n dataCenter: 'hq' | 'manchester' | 'london',\n opts\n ) => {\n const parentOpts = block.opts() || {};\n await cliCommand(\n ['get', 'block', 'logs'],\n merge(opts, parentOpts)\n ).PrintBlockLogs(\n blockId,\n branch,\n version,\n dataCenter,\n opts.follow as boolean\n );\n }\n );\n\n // Add global opts for inner sub-commands\n addGlobalOptions(block);\n\n return program;\n};\n\nexport const get = makeGetCommand();\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["dataCenter"]
|
|
7
7
|
}
|
|
@@ -434,6 +434,25 @@ class ContensisCli {
|
|
|
434
434
|
}
|
|
435
435
|
}
|
|
436
436
|
};
|
|
437
|
+
PrintBearerToken = async () => {
|
|
438
|
+
const { log, messages } = this;
|
|
439
|
+
const contensis = await this.ConnectContensis();
|
|
440
|
+
if (contensis) {
|
|
441
|
+
const [error, token] = await (0, import_await_to_js.default)(
|
|
442
|
+
contensis.content.sourceRepo.repo.BearerToken()
|
|
443
|
+
);
|
|
444
|
+
if (token) {
|
|
445
|
+
this.HandleFormattingAndOutput(
|
|
446
|
+
token,
|
|
447
|
+
() => log.raw(log.highlightText(token))
|
|
448
|
+
);
|
|
449
|
+
}
|
|
450
|
+
if (error) {
|
|
451
|
+
log.error(messages.projects.noList());
|
|
452
|
+
log.error(error.message);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
};
|
|
437
456
|
PrintProjects = async () => {
|
|
438
457
|
const { currentProject, log, messages, session } = this;
|
|
439
458
|
const contensis = await this.ConnectContensis();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/services/ContensisCliService.ts"],
|
|
4
|
-
"sourcesContent": ["import fs from 'fs';\nimport path from 'path';\nimport fetch from 'node-fetch';\nimport inquirer from 'inquirer';\nimport to from 'await-to-js';\nimport chalk from 'chalk';\nimport { Component, ContentType, Project } from 'contensis-core-api';\nimport {\n isPassword,\n isSharedSecret,\n isUuid,\n tryParse,\n tryStringify,\n url,\n} from '~/util';\nimport SessionCacheProvider from '../providers/SessionCacheProvider';\nimport ContensisAuthService from './ContensisAuthService';\nimport CredentialProvider from '~/providers/CredentialProvider';\nimport { logError, Logger } from '~/util/logger';\nimport { LogMessages } from '~/localisation/en-GB';\nimport {\n ContensisMigrationService,\n MigrateRequest,\n PushBlockParams,\n SourceCms,\n logEntriesTable,\n ContentTypesResult,\n Model,\n MigrateModelsResult,\n BlockActionType,\n} from 'migratortron';\nimport { Entry, Role } from 'contensis-management-api/lib/models';\n\nimport { csvFormatter } from '~/util/csv.formatter';\nimport { xmlFormatter } from '~/util/xml.formatter';\nimport { jsonFormatter } from '~/util/json.formatter';\nimport { diffLogStrings } from '~/util/diff';\nimport { promiseDelay } from '~/util/timers';\nimport {\n printBlockVersion,\n printMigrateResult,\n printModelMigrationAnalysis,\n printModelMigrationResult,\n} from '~/util/console.printer';\nimport { readJsonFile } from '~/providers/file-provider';\n\ntype OutputFormat = 'json' | 'csv' | 'xml';\n\ntype OutputOptions = {\n format?: OutputFormat;\n output?: string;\n};\n\ninterface IConnectOptions extends IAuthOptions {\n alias?: string;\n projectId?: string;\n}\n\ninterface IAuthOptions {\n user?: string;\n password?: string;\n clientId?: string;\n sharedSecret?: string;\n}\n\ninterface IImportOptions {\n sourceAlias?: string;\n sourceProjectId?: string;\n}\n\nlet insecurePasswordWarningShown = false;\n\nclass ContensisCli {\n static quit = (error?: Error) => {\n process.removeAllListeners('exit');\n const exitCode = error ? 1 : 0;\n\n // console.info(`\\nExiting contensis-cli with exit code: ${exitCode}\\n`);\n process.exit(exitCode);\n };\n\n private command: CliCommand;\n private format?: OutputFormat;\n private output?: string;\n private session: SessionCacheProvider;\n\n contensis?: ContensisMigrationService;\n contensisOpts: Partial<MigrateRequest>;\n currentProject: string;\n\n sourceAlias?: string;\n targetEnv?: string;\n urls:\n | {\n api: string;\n cms: string;\n liveWeb: string;\n previewWeb: string;\n iisWeb: string;\n iisPreviewWeb: string;\n }\n | undefined;\n log = Logger;\n messages = LogMessages;\n\n verb: string;\n noun: string;\n thirdArg: string;\n\n get cache() {\n return this.session.Get();\n }\n\n get currentEnv() {\n return this.cache.currentEnvironment || '';\n }\n\n set currentEnv(currentEnvironment: string) {\n this.session.Update({ currentEnvironment });\n }\n\n get env() {\n const currentEnvironment = this.currentEnv;\n const environments = this.cache.environments || {};\n\n if (!currentEnvironment) return {} as EnvironmentCache;\n else if (!!environments[currentEnvironment])\n return environments[currentEnvironment];\n else {\n return {\n history: [],\n lastUserId: '',\n projects: [],\n versionStatus: 'latest',\n } as EnvironmentCache;\n }\n }\n\n constructor(\n args: string[],\n outputOpts?: OutputOptions & IConnectOptions & IImportOptions,\n contensisOpts: Partial<MigrateRequest> = {}\n ) {\n // console.log('args: ', JSON.stringify(args, null, 2));\n\n const [exe, script, verb = '', noun = '', ...restArgs] = args;\n this.verb = verb?.toLowerCase();\n this.noun = noun?.toLowerCase();\n this.thirdArg = restArgs?.[0];\n\n const commandText = `${this.verb} ${this.noun} ${\n restArgs ? restArgs.join(' ') : ''\n }`.trim();\n\n this.session = new SessionCacheProvider();\n\n this.contensisOpts = contensisOpts;\n this.format = outputOpts?.format;\n this.output =\n outputOpts?.output && path.join(process.cwd(), outputOpts.output);\n\n const currentEnvironment = outputOpts?.alias || this.currentEnv;\n const environments = this.cache.environments || {};\n this.currentEnv = currentEnvironment;\n\n const env = this.env;\n\n if (outputOpts?.projectId) env.currentProject = outputOpts.projectId;\n if (outputOpts?.user) env.lastUserId = outputOpts.user;\n // setting this in env means passwordFallback is written to environments.json\n if (outputOpts?.password) env.passwordFallback = outputOpts.password;\n if (outputOpts?.clientId) env.lastUserId = outputOpts.clientId;\n if (outputOpts?.sharedSecret)\n env.passwordFallback = outputOpts.sharedSecret;\n\n this.currentProject = env?.currentProject || 'null';\n this.sourceAlias = outputOpts?.sourceAlias || currentEnvironment;\n\n if (currentEnvironment) {\n this.urls = url(currentEnvironment, env?.currentProject || 'website');\n }\n\n this.command = {\n commandText,\n createdDate: new Date().toISOString(),\n createdUserId: env?.lastUserId,\n };\n\n if (currentEnvironment) {\n env.history = [this.command];\n if (commandText) {\n environments[currentEnvironment] = env;\n this.session.Update({\n currentEnvironment,\n environments,\n history: [commandText],\n });\n }\n }\n }\n\n PrintEnvironments = () => {\n const { log, messages } = this;\n const { currentEnvironment, environments = {} } = this.cache;\n const envKeys = Object.keys(environments);\n log.success(messages.envs.found(envKeys.length));\n this.HandleFormattingAndOutput(envKeys, () => {\n // print the envKeys to console\n for (const env of envKeys) {\n console.log(` - ${currentEnvironment === env ? '* ' : ''}${env}`);\n }\n });\n if (envKeys.length === 0 || !currentEnvironment) {\n log.help(messages.envs.tip());\n }\n };\n\n Connect = async (environment: string) => {\n const { log, messages, session } = this;\n\n if (environment) {\n this.currentEnv = environment;\n this.urls = url(environment, 'website');\n\n const [fetchErr, response] = await to(fetch(this.urls.cms));\n if (response && response?.status < 400) {\n log.success(messages.connect.connected(environment));\n session.UpdateEnv(this.env, environment);\n\n if (this.env?.lastUserId) {\n // await this.ConnectContensis();\n await this.PrintProjects();\n } else {\n log.warning(messages.projects.noList());\n log.help(messages.connect.tip());\n }\n } else {\n // Cannot reach environment - status X\n log.error(\n messages.connect.unreachable(this.urls.cms, response?.status || 0)\n );\n }\n } else {\n // No environment alias specified\n log.error(messages.connect.noEnv());\n }\n };\n\n ConnectContensis = async ({ commit = false } = {}) => {\n if (!this.contensis) {\n const { contensisOpts, currentEnv, env, log, messages } = this;\n const userId = env?.lastUserId;\n const isGuidId = userId && isUuid(userId);\n\n if (currentEnv && userId) {\n const credentials = await this.GetCredentials(\n userId,\n env.passwordFallback\n );\n\n const cachedPassword = credentials?.current?.password;\n\n if (cachedPassword) {\n this.contensis = new ContensisMigrationService(\n {\n ...contensisOpts,\n source: {\n url: this.urls?.cms || '',\n username: !isGuidId ? userId : undefined,\n password: !isGuidId ? cachedPassword : undefined,\n clientId: isGuidId ? userId : undefined,\n sharedSecret: isGuidId ? cachedPassword : undefined,\n project: env?.currentProject || '',\n assetHostname: this.urls?.previewWeb,\n },\n concurrency:\n typeof contensisOpts.concurrency !== 'undefined'\n ? contensisOpts.concurrency\n : 3,\n outputProgress: true,\n },\n !commit\n );\n }\n } else {\n if (!currentEnv) log.help(messages.connect.help());\n if (!userId) log.help(messages.connect.tip());\n }\n }\n return this.contensis;\n };\n\n ConnectContensisImport = async ({\n commit = false,\n fromFile,\n importDataType,\n }: {\n commit?: boolean;\n fromFile?: string;\n importDataType?:\n | 'entries'\n | 'contentTypes'\n | 'components'\n | 'models'\n | 'user-input';\n }) => {\n const source: 'contensis' | 'file' = fromFile ? 'file' : 'contensis';\n\n const fileData = fromFile\n ? readJsonFile<(Entry | ContentType | Component)[]>(fromFile) || []\n : [];\n\n if (typeof fileData === 'string')\n throw new Error(`Import file format must be of type JSON`);\n\n const { contensisOpts, currentEnv, env, log, messages, sourceAlias } = this;\n const environments = this.cache.environments || {};\n const sourceEnvironment = environments[sourceAlias || ''] || {};\n const sourceCms =\n ('source' in contensisOpts && contensisOpts.source) ||\n ({} as Partial<SourceCms>);\n const sourceUserId =\n sourceCms.clientId || sourceCms.username || sourceEnvironment.lastUserId;\n const sourceProjectId =\n sourceCms.project || sourceEnvironment.currentProject || 'website';\n const isSourceGuidId = sourceUserId && isUuid(sourceUserId);\n const sourceUrls = url(sourceAlias || '', sourceProjectId);\n\n const sourcePassword =\n sourceCms.sharedSecret ||\n sourceCms.password ||\n sourceEnvironment.passwordFallback;\n\n const targetUserId = env?.lastUserId;\n const isTargetGuidId = targetUserId && isUuid(targetUserId);\n\n if (sourceUserId && currentEnv && targetUserId) {\n const sourceCredentials = await this.GetCredentials(\n sourceUserId,\n sourcePassword,\n sourceAlias,\n false\n );\n\n const cachedSourcePassword = sourceCredentials?.current?.password;\n\n const targetCredentials = await this.GetCredentials(\n targetUserId,\n env.passwordFallback\n );\n\n const cachedTargetPassword = targetCredentials?.current?.password;\n\n if (cachedSourcePassword && cachedTargetPassword) {\n if (source === 'file' || importDataType === 'user-input') {\n this.contensis = new ContensisMigrationService(\n {\n concurrency: 3,\n outputProgress: true,\n ...contensisOpts,\n target: {\n url: this.urls?.cms || '',\n username: !isTargetGuidId ? targetUserId : undefined,\n password: !isTargetGuidId ? cachedTargetPassword : undefined,\n clientId: isTargetGuidId ? targetUserId : undefined,\n sharedSecret: isTargetGuidId ? cachedTargetPassword : undefined,\n targetProjects: [env.currentProject || ''],\n assetHostname: this.urls?.previewWeb,\n },\n ...(importDataType ? { [importDataType]: fileData } : {}),\n },\n !commit\n );\n } else if (source === 'contensis') {\n this.contensis = new ContensisMigrationService(\n {\n concurrency: 3,\n outputProgress: true,\n ...contensisOpts,\n source: {\n url: sourceUrls.cms || '',\n username: !isSourceGuidId ? sourceUserId : undefined,\n password: !isSourceGuidId ? cachedSourcePassword : undefined,\n clientId: isSourceGuidId ? sourceUserId : undefined,\n sharedSecret: isSourceGuidId ? cachedSourcePassword : undefined,\n project: sourceProjectId,\n assetHostname: sourceUrls.previewWeb,\n },\n target: {\n url: this.urls?.cms || '',\n username: !isTargetGuidId ? targetUserId : undefined,\n password: !isTargetGuidId ? cachedTargetPassword : undefined,\n clientId: isTargetGuidId ? targetUserId : undefined,\n sharedSecret: isTargetGuidId ? cachedTargetPassword : undefined,\n targetProjects: [env.currentProject || ''],\n assetHostname: this.urls?.previewWeb,\n },\n },\n !commit\n );\n }\n }\n } else {\n if (!currentEnv) log.help(messages.connect.help());\n if (!targetUserId) log.help(messages.connect.tip());\n }\n return this.contensis;\n };\n\n GetCredentials = async (\n userId: string,\n password?: string,\n currentEnv = this.currentEnv,\n saveCurrentEnv = true\n ): Promise<CredentialProvider | undefined> => {\n const { log, messages } = this;\n if (userId) {\n const [credentialError, credentials] = await new CredentialProvider(\n { userId, alias: currentEnv },\n password\n ).Init();\n\n if (credentialError && !credentials.current) {\n // Log problem with Credential Provider\n log.error(credentialError as any);\n return;\n }\n\n if (credentials.remarks.secure !== true) {\n if (!insecurePasswordWarningShown) {\n log.warning(messages.login.insecurePassword());\n insecurePasswordWarningShown = true;\n }\n } else {\n const env = this.cache.environments[currentEnv];\n env.passwordFallback = undefined;\n this.session.UpdateEnv(env, currentEnv, saveCurrentEnv);\n }\n return credentials;\n }\n };\n\n Login = async (\n userId: string,\n {\n password = isPassword(this.env.passwordFallback),\n promptPassword = true,\n sharedSecret = isSharedSecret(this.env.passwordFallback),\n silent = false,\n attempt = 1,\n }: {\n password?: string;\n promptPassword?: boolean;\n sharedSecret?: string;\n silent?: boolean;\n attempt?: number;\n } = {}\n ): Promise<string | undefined> => {\n let inputPassword = password || sharedSecret;\n const { log, messages } = this;\n\n if (userId) {\n const { currentEnv, env } = this;\n\n if (currentEnv) {\n const credentials = await this.GetCredentials(userId, inputPassword);\n\n if (credentials) {\n const cachedPassword = isPassword(credentials.current?.password);\n const cachedSecret = isSharedSecret(credentials.current?.password);\n\n if (!cachedPassword && !cachedSecret && promptPassword) {\n // Password prompt\n ({ inputPassword } = await inquirer.prompt([\n {\n type: 'password',\n message: messages.login.passwordPrompt(currentEnv, userId),\n name: 'inputPassword',\n mask: '*',\n prefix: undefined,\n },\n ]));\n }\n\n if (inputPassword || cachedPassword || cachedSecret) {\n const authService = new ContensisAuthService({\n username: userId,\n password: inputPassword || cachedPassword,\n projectId: env?.currentProject || 'website',\n rootUrl: this.urls?.cms || '',\n clientId: userId,\n clientSecret: sharedSecret || cachedSecret,\n });\n\n const [authError, bearerToken] = await to(\n authService.BearerToken()\n );\n\n // Login successful\n if (bearerToken) {\n // Set env vars\n env.authToken = bearerToken;\n env.lastUserId = userId;\n env.passwordFallback =\n credentials.remarks.secure !== true\n ? credentials.current?.password\n : undefined;\n\n // Persist env before finding projects or doing anything else\n this.session.UpdateEnv(env);\n if (inputPassword) await credentials.Save(inputPassword);\n if (sharedSecret) await credentials.Save(sharedSecret);\n\n if (!silent) {\n Logger.success(messages.login.success(currentEnv, userId));\n await this.PrintProjects();\n }\n } else if (authError) {\n Logger.error(authError.toString());\n // Clear env vars\n env.authToken = '';\n env.lastUserId = '';\n env.passwordFallback = undefined;\n // Persist env to remove cleared values\n this.session.UpdateEnv(env);\n\n // If the auth error was raised using a cached password\n if (\n (cachedPassword || cachedSecret) &&\n credentials.remarks.secure\n ) {\n // Remove any bad stored credential and trigger login prompt again\n await credentials.Delete();\n return await this.Login(userId, { password, sharedSecret });\n } else {\n throw new Error(messages.login.failed(currentEnv, userId));\n }\n }\n\n return env.authToken;\n } else {\n Logger.error(messages.login.passwordPrompt());\n if (attempt < 2)\n return await this.Login(userId, { attempt: attempt + 1 });\n }\n }\n } else {\n // No environment set, use `contensis connect {alias}` first\n Logger.error(messages.login.noEnv());\n }\n } else {\n // No user id specified\n Logger.error(messages.login.noUserId());\n }\n };\n\n PrintContensisVersion = async () => {\n const { log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve projects list for env\n const [projectsErr, projects] = await to(\n contensis.projects.GetSourceProjects()\n );\n\n if (Array.isArray(projects)) {\n // Print contensis version to console\n this.HandleFormattingAndOutput(contensis.contensisVersion, () =>\n log.raw(log.highlightText(contensis.contensisVersion))\n );\n }\n\n if (projectsErr) {\n log.error(messages.projects.noList());\n log.error(projectsErr.message);\n }\n }\n };\n\n PrintProjects = async () => {\n const { currentProject, log, messages, session } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve projects list for env\n const [projectsErr, projects] = await to(\n contensis.projects.GetSourceProjects()\n );\n\n if (Array.isArray(projects)) {\n // save these projects in cache\n const nextCurrentProject =\n currentProject && currentProject !== 'null'\n ? currentProject\n : projects.some(p => p.id === 'website')\n ? 'website'\n : undefined;\n\n session.UpdateEnv({\n projects: projects.map(p => p.id),\n currentProject: nextCurrentProject,\n });\n\n log.success(messages.projects.list());\n log.raw('');\n\n this.HandleFormattingAndOutput(projects, () => {\n // print the projects to console\n for (const project of projects.sort((a, b) =>\n a.id.localeCompare(b.id)\n )) {\n let color;\n try {\n color = chalk.keyword((project as any).color);\n } catch (ex) {\n color = chalk.white;\n }\n console.log(\n `${\n nextCurrentProject === project.id\n ? `>> ${log.boldText(color(project.id))}`\n : ` ${color(project.id)}`\n } ${log.infoText(\n `[${project.supportedLanguages\n .map(l =>\n l === project.primaryLanguage ? `*${log.boldText(l)}` : l\n )\n .join(' ')}]`\n )}`\n );\n }\n });\n\n if (!this.SetProject(nextCurrentProject))\n log.warning(messages.projects.tip());\n }\n\n if (projectsErr) {\n log.error(messages.projects.noList());\n log.error(projectsErr.message);\n }\n }\n };\n\n PrintProject = async (projectId = this.currentProject) => {\n const { log, messages, session } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve projects list for env\n const [projectsErr, projects] = await to(\n contensis.projects.GetSourceProjects()\n );\n\n const foundProject = projects?.find(\n p => p.id.toLowerCase() === projectId.toLowerCase()\n );\n\n if (foundProject) {\n log.raw('');\n this.HandleFormattingAndOutput(foundProject, log.object);\n }\n\n if (projectsErr) {\n log.error(messages.projects.noList());\n log.error(projectsErr.message);\n }\n }\n };\n\n SetProject = (projectId = 'website') => {\n const { env, log, messages, session } = this;\n let nextProjectId: string | undefined;\n if (env?.projects.length > 0 && env?.lastUserId) {\n nextProjectId = env.projects.find(\n p => p.toLowerCase() === projectId.toLowerCase()\n );\n if (nextProjectId) {\n env.currentProject = nextProjectId;\n session.UpdateEnv(env);\n log.success(messages.projects.set(projectId));\n log.raw('');\n } else {\n log.error(messages.projects.failedSet(projectId));\n }\n } else {\n // No projects for currentEnv, try logging in\n log.warning(messages.projects.noList());\n log.help(messages.connect.tip());\n }\n return nextProjectId;\n };\n\n SetVersion = (versionStatus: 'latest' | 'published') => {\n const { env, log, messages, session } = this;\n if (!['latest', 'published'].includes(versionStatus)) {\n log.error(messages.version.invalid(versionStatus));\n return false;\n }\n if (!env) {\n log.help(messages.version.noEnv());\n return false;\n }\n if (env?.projects.length > 0 && env?.lastUserId) {\n session.UpdateEnv({ versionStatus });\n log.success(messages.version.set(this.currentEnv, versionStatus));\n return true;\n } else {\n // No projects for currentEnv, try logging in\n log.warning(messages.projects.noList());\n log.help(messages.connect.tip());\n return false;\n }\n };\n\n PrintApiKeys = async () => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve keys list for env\n const [keysErr, apiKeys] = await contensis.apiKeys.GetKeys();\n\n if (Array.isArray(apiKeys)) {\n log.success(messages.keys.list(currentEnv));\n this.HandleFormattingAndOutput(apiKeys, () => {\n // print the keys to console\n for (const {\n id,\n sharedSecret,\n name,\n description,\n dateModified,\n modifiedBy,\n } of apiKeys) {\n console.log(\n ` - ${name}${\n description ? ` (${description})` : ''\n } [${dateModified.toString().substring(0, 10)} ${modifiedBy}]`\n );\n console.log(` ${id}`);\n console.log(` ${sharedSecret}`);\n }\n });\n }\n\n if (keysErr) {\n log.error(messages.keys.noList(currentEnv));\n log.error(jsonFormatter(keysErr));\n }\n }\n };\n\n CreateApiKey = async (name: string, description?: string) => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n const [err, key] = await contensis.apiKeys.CreateKey(name, description);\n\n if (key) {\n log.success(messages.keys.created(currentEnv, name));\n\n // print the key details to console\n console.log(\n ` - ${chalk.bold(key.name)} [${key.dateModified\n .toString()\n .substring(0, 10)} ${key.modifiedBy}]`\n );\n if (key.description)\n console.log(` ${log.infoText(key.description)}`);\n console.log(` ${chalk.bold.grey`id`}: ${key.id}`);\n console.log(\n ` ${chalk.bold.grey`sharedSecret`}: ${key.sharedSecret}`\n );\n console.log('');\n log.help(messages.keys.tip());\n }\n\n if (err) {\n log.error(messages.keys.failedCreate(currentEnv, name), err);\n }\n }\n };\n\n RemoveApiKey = async (id: string) => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis({ commit: true });\n\n if (contensis) {\n const [err, key] = await contensis.apiKeys.RemoveKey(id);\n\n if (!err) {\n log.success(messages.keys.removed(currentEnv, id));\n console.log('');\n } else {\n log.error(messages.keys.failedRemove(currentEnv, id), err);\n }\n }\n };\n\n PrintRoles = async () => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve roles list for env\n const [rolesErr, roles] = await to(contensis.roles.GetRoles());\n\n if (Array.isArray(roles)) {\n log.success(messages.roles.list(currentEnv));\n\n if (!roles.length) log.help(messages.roles.noneExist());\n\n this.HandleFormattingAndOutput(roles, () => {\n // print the roles to console\n for (const {\n id,\n name,\n description,\n enabled,\n assignments,\n permissions,\n } of roles) {\n const color = enabled ? (s: string) => s : log.infoText;\n\n console.log(color(` - ${chalk.bold(name)} ${log.infoText(id)}`));\n if (description) console.log(log.infoText(` ${description}`));\n if (enabled === false)\n console.log(` ${chalk.bold.grey('enabled')}: false`);\n if (assignments.groups?.length)\n console.log(\n ` ${chalk.bold.grey('groups')}: ${assignments.groups.join(\n ', '\n )}`\n );\n if (assignments.users?.length)\n console.log(\n ` ${chalk.bold.grey('users')}: ${assignments.users.join(\n ', '\n )}`\n );\n if (assignments.apiKeys?.length)\n console.log(\n ` ${chalk.bold.grey('keys')}: ${assignments.apiKeys.join(\n ', '\n )}`\n );\n\n if (permissions.entries?.length) {\n console.log(` ${chalk.bold.grey('entries')}:`);\n for (const p of permissions.entries)\n console.log(\n ` ${p.id}: ${log.infoText(\n p.actions.length > 2\n ? p.actions.length\n : p.actions.join(', ')\n )}`\n );\n }\n if (permissions.contentTypes?.length)\n console.log(\n ` ${chalk.bold.grey(\n 'contentTypes'\n )}: ${permissions.contentTypes\n .map(\n p =>\n `${p.id} [${p.actions.join(',')}] ${p.languages.join(\n ' '\n )}`\n )\n .join(', ')}`\n );\n }\n });\n }\n\n if (rolesErr) {\n log.error(messages.roles.noList(currentEnv));\n log.error(jsonFormatter(rolesErr));\n }\n }\n };\n\n PrintRole = async (roleNameOrId: string) => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve roles list for env\n const [rolesErr, roles] = await to(contensis.roles.GetRoles());\n\n if (Array.isArray(roles)) {\n log.success(messages.roles.list(currentEnv));\n\n const role =\n roles.find(\n r =>\n r.id === roleNameOrId ||\n r.name.toLowerCase() === roleNameOrId.toLowerCase()\n ) ||\n roles.find(r =>\n r.name.toLowerCase().includes(roleNameOrId.toLowerCase())\n );\n\n if (role) this.HandleFormattingAndOutput(role, log.object);\n else log.error(messages.roles.failedGet(currentEnv, roleNameOrId));\n }\n\n if (rolesErr) {\n log.error(messages.roles.noList(currentEnv));\n log.error(jsonFormatter(rolesErr));\n }\n }\n };\n\n CreateRole = async (role: Partial<Role>) => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n const [err, created] = await contensis.roles.CreateRole(role as Role);\n\n if (created) {\n log.success(\n messages.roles.created(currentEnv, role.id || role.name || '')\n );\n\n this.HandleFormattingAndOutput(created, log.object);\n\n log.help(messages.roles.tip());\n return role.id;\n }\n\n if (err) {\n log.error(\n messages.roles.failedCreate(currentEnv, role.id || role.name || ''),\n err\n );\n }\n }\n };\n\n UpdateRole = async (roleNameOrId: string, role: Partial<Role>) => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve roles list for env\n const [rolesErr, roles] = await to(contensis.roles.GetRoles());\n\n if (Array.isArray(roles)) {\n log.success(messages.roles.list(currentEnv));\n\n const existingRole = roles.find(\n r =>\n r.id === roleNameOrId ||\n r.name.toLowerCase() === roleNameOrId.toLowerCase()\n );\n if (existingRole) {\n log.info(messages.roles.setPayload());\n log.object(role);\n log.raw(``);\n const [updateErr, updated] = await contensis.roles.UpdateRole(\n existingRole.id,\n role\n );\n if (updateErr)\n log.error(messages.roles.failedSet(currentEnv, roleNameOrId));\n else {\n log.success(messages.roles.set());\n\n this.HandleFormattingAndOutput(updated, log.object);\n }\n } else {\n // Role does not exist\n log.error(messages.roles.failedGet(currentEnv, roleNameOrId));\n }\n }\n\n if (rolesErr) {\n log.error(messages.roles.noList(currentEnv));\n log.error(jsonFormatter(rolesErr));\n }\n }\n };\n\n RemoveRole = async (roleNameOrId: string) => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve roles list for env\n const [rolesErr, roles] = await to(contensis.roles.GetRoles());\n\n if (Array.isArray(roles)) {\n log.success(messages.roles.list(currentEnv));\n\n const existingRole = roles.find(\n r =>\n r.id === roleNameOrId ||\n r.name.toLowerCase() === roleNameOrId.toLowerCase()\n );\n if (existingRole) {\n const [deleteErr] = await contensis.roles.RemoveRole(existingRole.id);\n\n if (deleteErr)\n log.error(messages.roles.failedRemove(currentEnv, roleNameOrId));\n else log.success(messages.roles.removed(currentEnv, roleNameOrId));\n } else {\n // Role does not exist\n log.error(messages.roles.failedGet(currentEnv, roleNameOrId));\n }\n }\n\n if (rolesErr) {\n log.error(messages.roles.noList(currentEnv));\n log.error(jsonFormatter(rolesErr));\n }\n }\n };\n\n CreateProject = async (project: Project) => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n const [err, created] = await contensis.projects.CreateProject(project);\n\n if (created) {\n log.success(messages.projects.created(currentEnv, project.id));\n\n this.HandleFormattingAndOutput(created, () => {\n // set the CLI project to the newly created project\n this.SetProject(project.id);\n // print all the projects to console\n this.PrintProjects();\n });\n return project.id;\n }\n\n if (err) {\n log.error(messages.projects.failedCreate(currentEnv, project.id), err);\n }\n }\n };\n\n UpdateProject = async (project: Partial<Project>) => {\n const { currentEnv, currentProject, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n const [err, updated] = await contensis.projects.UpdateProject({\n id: currentProject,\n ...project,\n });\n\n if (updated) {\n log.success(messages.projects.updated(currentEnv, currentProject));\n\n this.HandleFormattingAndOutput(updated, log.object);\n return updated.id;\n }\n\n if (err) {\n log.error(\n messages.projects.failedUpdate(currentEnv, currentProject),\n err\n );\n }\n }\n };\n\n PrintContentModels = async (modelIds: string[] = []) => {\n const { currentProject, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve models list for env\n const models = await contensis.models.contentModels();\n const contentTypes = await contensis.models.contentTypes();\n const components = await contensis.models.components();\n\n // Models to output to console\n const returnModels = modelIds?.length\n ? models?.filter((m: Model) =>\n modelIds.some(id => id.toLowerCase() === m.id.toLowerCase())\n )\n : undefined;\n\n // Generate a list of contentTypeIds and componentIds from all models\n // and dependencies\n const contentTypeIds = Array.from(\n new Set([\n ...(returnModels || models || []).map(m => m.id),\n ...(returnModels || models || [])\n .map(m => m.dependencies?.contentTypes?.map(c => c[0]) || [])\n .flat(),\n ])\n );\n const componentIds = Array.from(\n new Set(\n (returnModels || models || [])\n .map(m => m.dependencies?.components?.map(c => c[0]) || [])\n .flat()\n )\n );\n\n // Create an array of all the content types and component definitions\n // we will use this when outputting to a file\n const contentModelBackup = [\n ...contentTypes.filter(c =>\n contentTypeIds.map(i => i.toLowerCase()).includes(c.id.toLowerCase())\n ),\n ...components.filter(c =>\n componentIds.map(i => i.toLowerCase()).includes(c.id.toLowerCase())\n ),\n ];\n\n if (Array.isArray(returnModels)) {\n log.success(messages.models.list(currentProject));\n this.HandleFormattingAndOutput(contentModelBackup, () => {\n // print the content models to console\n for (const model of returnModels) {\n log.raw('');\n log.object(model);\n }\n log.raw('');\n });\n } else {\n log.success(\n messages.models.get(currentProject, models?.length.toString() || '0')\n );\n log.raw('');\n if (models?.length) {\n this.HandleFormattingAndOutput(contentModelBackup, () => {\n // print the content models to console\n for (const model of models) {\n const components = model.components?.length || 0;\n const contentTypes = model.contentTypes?.length || 0;\n const dependencies =\n (model.dependencies?.components?.length || 0) +\n (model.dependencies?.contentTypes?.length || 0);\n const dependencyOf =\n (model.dependencyOf?.components?.length || 0) +\n (model.dependencyOf?.contentTypes?.length || 0);\n\n const hasAny =\n components + contentTypes + dependencies + dependencyOf;\n log.raw(\n ` - ${log.highlightText(log.boldText(model.id))} ${\n hasAny\n ? log.infoText(\n `{ ${components ? `components: ${components}, ` : ''}${\n contentTypes ? `contentTypes: ${contentTypes}, ` : ''\n }${\n dependencies ? `references: ${dependencies}, ` : ''\n }${\n dependencyOf ? `required by: ${dependencyOf}` : ''\n } }`\n )\n : ''\n }`\n );\n }\n log.raw('');\n });\n }\n }\n }\n };\n\n ImportContentModels = async ({\n commit,\n fromFile,\n }: {\n commit: boolean;\n fromFile: string;\n }) => {\n const { currentProject, log, messages } = this;\n\n const fileData = fromFile\n ? readJsonFile<(ContentType | Component)[]>(fromFile) || []\n : [];\n if (typeof fileData === 'string')\n throw new Error(`Import file format must be of type JSON`);\n\n const contensis = await this.ConnectContensisImport({\n commit,\n fromFile,\n importDataType: 'models',\n });\n\n if (contensis) {\n log.line();\n if (contensis.isPreview) {\n console.log(log.successText(` -- IMPORT PREVIEW -- `));\n } else {\n console.log(log.warningText(` *** COMMITTING IMPORT *** `));\n }\n\n const [migrateErr, result] = await contensis.MigrateContentModels();\n\n if (migrateErr) logError(migrateErr);\n else\n this.HandleFormattingAndOutput(result, () => {\n // print the results to console\n if (!commit) {\n log.raw(log.boldText(`\\nContent types:`));\n if (!result.contentTypes) log.info(`- None returned\\n`);\n else printModelMigrationAnalysis(this, result.contentTypes);\n\n log.raw(log.boldText(`\\nComponents:`));\n if (!result.components) log.info(`- None returned\\n`);\n else printModelMigrationAnalysis(this, result.components);\n } else {\n const migrateResult = result as MigrateModelsResult;\n log.raw(log.boldText(`\\nContent types:`));\n printModelMigrationResult(\n this,\n migrateResult[currentProject].contentTypes\n );\n\n log.raw(log.boldText(`\\nComponents:`));\n printModelMigrationResult(\n this,\n migrateResult[currentProject].components\n );\n }\n });\n } else {\n log.warning(messages.models.noList(currentProject));\n log.help(messages.connect.tip());\n }\n };\n\n PrintContentTypes = async () => {\n const { currentProject, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve content types list for env\n const contentTypes = await contensis.models.contentTypes();\n\n if (Array.isArray(contentTypes)) {\n log.success(messages.contenttypes.list(currentProject));\n this.HandleFormattingAndOutput(contentTypes, () => {\n // print the content types to console\n for (const contentType of contentTypes) {\n const fieldsLength = contentType.fields?.length || 0;\n console.log(\n ` - ${contentType.id} [${fieldsLength} field${\n fieldsLength !== 1 ? 's' : ''\n }]`\n );\n }\n });\n }\n }\n };\n\n PrintContentType = async (contentTypeId: string) => {\n const { currentProject, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve content types list for env\n const contentTypes = await contensis.models.contentTypes();\n\n if (Array.isArray(contentTypes)) {\n const contentType = contentTypes.find(\n c => c.id.toLowerCase() === contentTypeId.toLowerCase()\n );\n if (contentType) {\n log.success(\n messages.contenttypes.get(currentProject, contentType.id)\n );\n // print the content type to console\n this.HandleFormattingAndOutput(contentType, log.object);\n } else {\n log.error(\n messages.contenttypes.failedGet(currentProject, contentTypeId)\n );\n }\n }\n }\n };\n\n RemoveContentTypes = async (contentTypeIds: string[], commit = false) => {\n const { currentProject, log, messages } = this;\n const contensis = await this.ConnectContensisImport({\n commit,\n importDataType: 'user-input',\n });\n if (contensis) {\n const [err, result] = await contensis.DeleteContentTypes(contentTypeIds);\n\n if (err) {\n log.error(\n messages.contenttypes.failedRemove(\n currentProject,\n contentTypeIds.join('\", \"')\n ),\n err\n );\n } else {\n log.success(\n messages.contenttypes.removed(\n currentProject,\n contentTypeIds.join('\", \"'),\n !contensis.isPreview\n )\n );\n // print the results to console\n this.HandleFormattingAndOutput(result, () =>\n log.object(jsonFormatter(result))\n );\n }\n }\n };\n\n ImportContentTypes = async (\n {\n commit,\n fromFile,\n }: {\n commit: boolean;\n fromFile: string;\n },\n contentTypeIds: string[] = []\n ) => {\n const { currentProject, log, messages } = this;\n\n let fileData = fromFile ? readJsonFile<ContentType[]>(fromFile) || [] : [];\n if (typeof fileData === 'string')\n throw new Error(`Import file format must be of type JSON`);\n\n if (!Array.isArray(fileData)) fileData = [fileData];\n\n const contensis = await this.ConnectContensisImport({\n commit,\n importDataType: fromFile ? 'user-input' : undefined,\n });\n\n if (contensis) {\n // Pass each content type to the target repo\n for (const contentType of fileData) {\n // Fix invalid data\n contentType.projectId = currentProject;\n delete contentType.uuid;\n\n const [err, created, createStatus] = await contensis.models.targetRepos[\n currentProject\n ].repo.UpsertContentType(false, contentType);\n\n if (err) log.error(err.message, err);\n if (createStatus) {\n log.success(\n messages.contenttypes.created(\n currentProject,\n contentType.id,\n createStatus\n )\n );\n // print the content type to console\n this.HandleFormattingAndOutput(contentType, () => {});\n }\n }\n }\n };\n\n DiffModels = async (\n {\n fromFile,\n }: {\n fromFile: string;\n },\n modelIds: string[] = []\n ) => {\n const { log } = this;\n\n let fileData = fromFile ? readJsonFile<ContentType[]>(fromFile) || [] : [];\n if (typeof fileData === 'string')\n throw new Error(`Import file format must be of type JSON`);\n\n if (!Array.isArray(fileData)) fileData = [fileData];\n\n const contensis = await this.ConnectContensisImport({\n fromFile,\n importDataType: 'models',\n });\n\n if (contensis) {\n const [err, result] = (await to(\n contensis.models.Diff(fileData.length ? fileData : modelIds)\n )) as [Error | null, ContentTypesResult | undefined];\n\n if (err) log.error(err.message, err);\n if (result)\n // print the content type to console\n this.HandleFormattingAndOutput(result, () => {\n log.success(\n `Queried models ${log.infoText(\n `\"${result.query.modelIds?.join(', ')}\"`\n )}\\n`\n );\n\n log.raw(log.boldText(`Content types:`));\n if (!result.contentTypes) log.info(`- None returned\\n`);\n else printModelMigrationAnalysis(this, result.contentTypes);\n\n log.raw(log.boldText(`Components:`));\n if (!result.components) log.info(`- None returned\\n`);\n else printModelMigrationAnalysis(this, result.components);\n });\n }\n };\n\n PrintComponents = async () => {\n const { currentProject, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve components list for env\n const components = await contensis.models.components();\n\n if (Array.isArray(components)) {\n log.success(messages.components.list(currentProject));\n\n this.HandleFormattingAndOutput(components, () => {\n // print the components to console\n for (const component of components) {\n const fieldsLength = component.fields?.length || 0;\n console.log(\n ` - ${component.id} [${fieldsLength} field${\n fieldsLength !== 1 ? 's' : ''\n }]`\n );\n }\n });\n }\n }\n };\n\n PrintComponent = async (componentId: string) => {\n const { currentProject, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve content types list for env\n const components = await contensis.models.components();\n\n if (Array.isArray(components)) {\n const component = components.find(\n c => c.id.toLowerCase() === componentId.toLowerCase()\n );\n if (component) {\n log.success(messages.components.get(currentProject, component.id));\n // print the component to console\n this.HandleFormattingAndOutput(component, log.object);\n } else {\n log.error(messages.components.failedGet(currentProject, componentId));\n }\n }\n }\n };\n\n RemoveComponents = async (componentIds: string[], commit = false) => {\n const { currentProject, log, messages } = this;\n const contensis = await this.ConnectContensisImport({\n commit,\n importDataType: 'user-input',\n });\n if (contensis) {\n const [err, result] = await contensis.DeleteContentTypes(\n undefined,\n componentIds\n );\n\n if (err) {\n log.error(\n messages.components.failedRemove(\n currentProject,\n componentIds.join('\", \"')\n ),\n err\n );\n } else {\n log.success(\n messages.components.removed(\n currentProject,\n componentIds.join('\", \"'),\n !contensis.isPreview\n )\n );\n // print the results to console\n this.HandleFormattingAndOutput(result, () =>\n log.info(jsonFormatter(result))\n );\n }\n }\n };\n\n ImportComponents = async (\n {\n commit,\n fromFile,\n }: {\n commit: boolean;\n fromFile: string;\n },\n componentIds: string[] = []\n ) => {\n const { currentProject, log, messages } = this;\n\n let fileData = fromFile ? readJsonFile<Component[]>(fromFile) || [] : [];\n if (typeof fileData === 'string')\n throw new Error(`Import file format must be of type JSON`);\n\n if (!Array.isArray(fileData)) fileData = [fileData];\n\n const contensis = await this.ConnectContensisImport({\n commit,\n importDataType: fromFile ? 'user-input' : undefined,\n });\n\n if (contensis) {\n // Pass each component to the target repo\n for (const component of fileData) {\n // Fix invalid data\n component.projectId = currentProject;\n delete component.uuid;\n\n const [err, created, createStatus] = await contensis.models.targetRepos[\n currentProject\n ].repo.UpsertComponent(false, component);\n\n if (err) log.error(err.message, err);\n if (createStatus) {\n log.success(\n messages.components.created(\n currentProject,\n component.id,\n createStatus\n )\n );\n // print the component to console\n this.HandleFormattingAndOutput(component, () => {});\n }\n }\n }\n };\n\n RemoveEntries = async (commit = false) => {\n const { currentEnv, currentProject, log, messages } = this;\n const contensis = await this.ConnectContensisImport({\n commit,\n importDataType: 'user-input',\n });\n\n if (contensis) {\n if (contensis.isPreview) {\n console.log(log.successText(` -- PREVIEW -- `));\n } else {\n console.log(log.warningText(` *** COMMITTING DELETE *** `));\n }\n const [err, result] = await contensis.DeleteEntries();\n if (result)\n this.HandleFormattingAndOutput(result, () => {\n // print the migrateResult to console\n printMigrateResult(this, result, {\n action: 'delete',\n showAllEntries: true,\n });\n });\n if (\n !err &&\n ((!commit && result.entriesToMigrate[currentProject].totalCount) ||\n (commit && result.migrateResult?.deleted))\n ) {\n log.success(messages.entries.removed(currentEnv, commit));\n if (!commit) {\n log.raw(``);\n log.help(messages.entries.commitTip());\n }\n } else {\n log.error(messages.entries.failedRemove(currentEnv), err);\n if (!result.entriesToMigrate[currentProject].totalCount)\n log.help(messages.entries.notFound(currentEnv));\n }\n }\n };\n\n GetEntries = async ({\n withDependents = false,\n }: {\n withDependents?: boolean;\n }) => {\n const { currentProject, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n log.line();\n const entries = await contensis.GetEntries({ withDependents });\n this.HandleFormattingAndOutput(entries, () =>\n // print the entries to console\n logEntriesTable(\n entries,\n currentProject,\n contensis.payload.query?.fields\n )\n );\n } else {\n log.warning(messages.models.noList(currentProject));\n log.help(messages.connect.tip());\n }\n };\n\n ImportEntries = async ({\n commit,\n fromFile,\n logOutput,\n }: {\n commit: boolean;\n fromFile: string;\n logOutput: string;\n }) => {\n const { currentEnv, currentProject, log, messages } = this;\n\n const contensis = await this.ConnectContensisImport({\n commit,\n fromFile,\n importDataType: 'entries',\n });\n\n if (contensis) {\n log.line();\n if (contensis.isPreview) {\n console.log(log.successText(` -- IMPORT PREVIEW -- `));\n } else {\n console.log(log.warningText(` *** COMMITTING IMPORT *** `));\n }\n\n const [err, result] = await contensis.MigrateEntries();\n\n if (err) logError(err);\n else\n this.HandleFormattingAndOutput(result, () => {\n // print the migrateResult to console\n printMigrateResult(this, result, {\n showAllEntries: logOutput === 'all',\n showChangedEntries: logOutput === 'changes',\n });\n });\n\n if (\n !err &&\n !result.errors?.length &&\n ((!commit && result.entriesToMigrate[currentProject].totalCount) ||\n (commit &&\n (result.migrateResult?.created || result.migrateResult?.updated)))\n ) {\n log.success(\n messages.entries.imported(\n currentEnv,\n commit,\n commit\n ? (result.migrateResult?.created || 0) +\n (result.migrateResult?.updated || 0)\n : result.entriesToMigrate[currentProject].totalCount\n )\n );\n if (!commit) {\n log.raw(``);\n log.help(messages.entries.commitTip());\n }\n } else {\n log.error(messages.entries.failedImport(currentEnv), err);\n if (!result.entriesToMigrate[currentProject].totalCount)\n log.help(messages.entries.notFound(currentEnv));\n }\n } else {\n log.warning(messages.models.noList(currentProject));\n log.help(messages.connect.tip());\n }\n };\n\n PrintWebhookSubscriptions = async (subscriptionIdsOrNames?: string[]) => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve webhooks list for env\n const [webhooksErr, webhooks] =\n await contensis.subscriptions.webhooks.GetSubscriptions();\n\n const filteredResults = subscriptionIdsOrNames?.length\n ? webhooks?.filter(\n w =>\n subscriptionIdsOrNames?.some(idname =>\n w.name?.toLowerCase().includes(idname.toLowerCase())\n ) ||\n subscriptionIdsOrNames?.some(\n id => id.toLowerCase() === w.id.toLowerCase()\n )\n )\n : webhooks;\n\n if (Array.isArray(filteredResults)) {\n log.success(messages.webhooks.list(currentEnv));\n if (!webhooks?.length) log.warning(messages.webhooks.noneExist());\n else {\n this.HandleFormattingAndOutput(filteredResults, () => {\n // print the keys to console\n for (const {\n id,\n description,\n method,\n name,\n version,\n url,\n enabled,\n topics,\n templates,\n headers,\n } of filteredResults) {\n console.log(\n log.infoText(\n ` ${chalk.bold.white`- ${name}`} ${id} [${(\n version.modified || version.created\n )\n .toString()\n .substring(0, 10)} ${\n version.modifiedBy || version.createdBy\n }]`\n )\n );\n if (description) console.log(log.infoText` ${description}`);\n console.log(` ${log.infoText`[${method}]`} ${url}`);\n if (headers && Object.keys(headers).length) {\n console.log(` ${log.infoText`headers`}:`);\n\n for (const [key, { value, secret }] of Object.entries(headers))\n console.log(\n ` ${chalk.bold.gray(key)}: ${secret ? '\uD83E\uDD10' : value}`\n );\n }\n if (topics?.length)\n if (topics?.length === 1)\n console.log(\n ` ${log.infoText`topics`}: ${topics\n .map(t => JSON.stringify(t))\n .join(' ')\n .replaceAll('\"', '')\n .replaceAll(',', ' ')\n .replaceAll('{', '')\n .replaceAll('}', '')}`\n );\n else {\n console.log(` ${log.infoText`topics`}:`);\n log.objectRecurse(topics, 1, ' ');\n }\n if (templates && Object.keys(templates).length)\n console.log(\n ` ${log.infoText`templates`}: ${Object.keys(\n templates\n ).join(' ')}`\n );\n if (enabled === false)\n console.log(` ${log.infoText`enabled`}: ${enabled}`);\n }\n });\n }\n }\n\n if (webhooksErr) {\n log.error(messages.webhooks.noList(currentEnv));\n log.error(jsonFormatter(webhooksErr));\n }\n }\n };\n\n PrintBlocks = async () => {\n const { currentEnv, env, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve blocks list for env\n const [err, blocks] = await contensis.blocks.GetBlocks();\n\n if (Array.isArray(blocks)) {\n this.HandleFormattingAndOutput(blocks, () => {\n // print the blocks to console\n log.success(messages.blocks.list(currentEnv, env.currentProject));\n for (const {\n id,\n description,\n branches,\n liveVersion,\n madeLive,\n versionsSinceLive,\n } of blocks) {\n console.log(\n ` - ${id}${description ? ` (${description})` : ''}${\n madeLive\n ? ` [${madeLive.toString().substring(0, 10)} v${liveVersion}]`\n : ''\n }${\n versionsSinceLive\n ? log.warningText(` +${versionsSinceLive}`)\n : ''\n }`\n );\n for (const branch of branches)\n console.log(\n log.infoText(` [${branch.id}]: ${branch.status}`)\n );\n }\n });\n }\n\n if (err) {\n log.error(messages.blocks.noList(currentEnv));\n log.error(jsonFormatter(err));\n }\n }\n };\n\n PrintBlockVersions = async (\n blockId: string,\n branch: string,\n version: string\n ) => {\n const { currentEnv, env, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve block version\n const [err, blocks] = await contensis.blocks.GetBlockVersions(\n blockId,\n branch,\n version\n );\n\n if (blocks) {\n this.HandleFormattingAndOutput(blocks, () => {\n // print the version detail to console\n log.success(\n messages.blocks.get(blockId, currentEnv, env.currentProject)\n );\n for (const block of blocks)\n printBlockVersion(\n this,\n block,\n !version\n ? {\n showImage: false,\n showSource: true,\n showStaticPaths: false,\n showStatus: false,\n }\n : undefined\n );\n });\n }\n\n if (err) {\n log.error(messages.blocks.noList(currentEnv, env.currentProject));\n log.error(jsonFormatter(err));\n }\n }\n };\n\n PushBlock = async (block: PushBlockParams) => {\n const { currentEnv, env, log, messages } = this;\n\n // Output request to console\n log.info(\n messages.blocks.tryPush(\n block.id,\n block.source.branch,\n currentEnv,\n env.currentProject\n )\n );\n console.log(jsonFormatter(block));\n\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Push new block version\n const [err, blockVersion] = await contensis.blocks.PushBlockVersion(\n block\n );\n if (!err) {\n log.success(\n messages.blocks.pushed(\n block.id,\n block.source.branch,\n currentEnv,\n env.currentProject\n )\n );\n }\n if (blockVersion) {\n this.HandleFormattingAndOutput(blockVersion, () => {\n // print the version detail to console\n printBlockVersion(this, blockVersion);\n });\n }\n if (err)\n throw new Error(\n messages.blocks.failedPush(block.id, currentEnv, env.currentProject)\n );\n } else {\n throw new Error(\n messages.blocks.failedPush(block.id, currentEnv, env.currentProject)\n );\n }\n };\n\n GetLatestBlockVersion = async (\n blockId: string,\n branch = 'default'\n ): Promise<[AppError | null, string | undefined]> => {\n const { contensis, log, messages } = this;\n\n // Look for block versions pushed to \"default\" branch\n const [getErr, blockVersions] =\n (await contensis?.blocks.GetBlockVersions(blockId, branch)) || [];\n\n if (getErr) {\n return [getErr, undefined];\n }\n\n // Parse versionNo from response\n let blockVersionNo = 'latest';\n // The first blockVersion should be the latest one\n try {\n blockVersionNo = `${blockVersions?.[0]?.version.versionNo}`;\n\n if (!Number.isNaN(blockVersionNo) && Number(blockVersionNo) > 0)\n // Is a valid versionNo\n return [null, blockVersionNo];\n else throw new Error(`'${blockVersionNo}' is not a valid version number`);\n } catch (parseVersionEx: any) {\n // Catch parsing errors in case of an unexpected response\n log.info(\n `Request for blockId: ${blockId}, branch: ${branch}, version: latest`\n );\n log.info(\n `Get block versions response was: ${tryStringify(blockVersions)}`\n );\n log.error(messages.blocks.failedParsingVersion());\n return [parseVersionEx, undefined];\n }\n };\n\n ExecuteBlockAction = async (\n action: BlockActionType,\n blockId: string,\n version = 'latest'\n ) => {\n const { currentEnv, env, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n let actionOnBlockVersion = version;\n\n // If action is release and version is latest, find the latest version number\n if (action === 'release' && version === 'latest') {\n const [getErr, blockVersion] = await this.GetLatestBlockVersion(\n blockId\n );\n\n if (getErr) {\n // Log error getting latest block version no\n // and throw the error message so the process can exit with a failure\n throw new Error(\n `${messages.blocks.noList(\n currentEnv,\n env.currentProject\n )} (${getErr})`\n );\n } else if (blockVersion) {\n actionOnBlockVersion = blockVersion;\n }\n }\n\n // Execute block action\n const [err, blockVersion] = await contensis.blocks.BlockAction(\n blockId,\n action,\n actionOnBlockVersion\n );\n\n if (blockVersion) {\n this.HandleFormattingAndOutput(blockVersion, () => {\n // print the version detail to console\n log.success(\n messages.blocks.actionComplete(\n action,\n blockId,\n currentEnv,\n env.currentProject\n )\n );\n printBlockVersion(this, blockVersion);\n });\n }\n\n if (err) {\n log.error(jsonFormatter(err));\n throw new Error(\n messages.blocks.actionFailed(\n action,\n blockId,\n currentEnv,\n env.currentProject\n )\n );\n }\n }\n };\n\n PrintBlockLogs = async (\n blockId: string,\n branch: string,\n version: string,\n dataCenter: 'hq' | 'manchester' | 'london',\n follow = false\n ) => {\n const { currentEnv, env, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve block logs\n log.success(\n messages.blocks.getLogs(blockId, branch, currentEnv, env.currentProject)\n );\n\n const [err, blockLogs] = await contensis.blocks.GetBlockLogs({\n blockId,\n branchId: branch,\n version,\n dataCenter,\n });\n\n if (err) {\n log.error(\n messages.blocks.failedGetLogs(blockId, currentEnv, env.currentProject)\n );\n log.error(jsonFormatter(err));\n } else if (blockLogs) {\n const removeTrailingNewline = (logs: string) =>\n logs.endsWith('\\n') ? logs.slice(0, logs.length - 1) : logs;\n const renderLogs = removeTrailingNewline(blockLogs);\n\n this.HandleFormattingAndOutput(renderLogs, () => {\n // print the logs to console\n console.log(\n ` - ${blockId} ${branch} ${\n Number(version) ? `v${version}` : version\n } [${dataCenter}]`\n );\n log.line();\n console.log(log.infoText(renderLogs));\n });\n\n // Code for the `--follow` options\n let following = follow;\n let alreadyShown = blockLogs;\n let needsNewLine = false;\n let counter = 0;\n\n // remove existing listeners and add them back afterwards\n const listeners = process.listeners('SIGINT');\n\n process.removeAllListeners('SIGINT');\n // add listener to update following to false and break out\n process.on('SIGINT', () => {\n Logger.warning(\n messages.blocks.stopFollow(blockId, currentEnv, env.currentProject)\n );\n stopFollowing();\n });\n\n let delay = promiseDelay(5 * 1000, null);\n const stopFollowing = () => {\n following = false;\n delay.cancel();\n\n // Add back the listeners we removed previously\n process.removeAllListeners('SIGINT');\n for (const listener of listeners)\n process.addListener('SIGINT', listener);\n };\n\n while (following) {\n if (counter++ > 300) {\n Logger.warning(\n messages.blocks.timeoutFollow(\n blockId,\n currentEnv,\n env.currentProject\n )\n );\n stopFollowing();\n }\n\n // wait n. seconds then poll for logs again\n await delay.wait();\n\n const [lastErr, lastLogs] = following\n ? await contensis.blocks.GetBlockLogs({\n blockId,\n branchId: branch,\n version,\n dataCenter,\n })\n : [null, null];\n\n if (lastLogs) {\n // Find the difference and output it next\n const difference = diffLogStrings(lastLogs, alreadyShown);\n if (difference) {\n if (needsNewLine) {\n console.log('');\n }\n // Take the trailing newline off of the logged output to\n // avoid blank lines inbetween logs fetched sequentially\n const render = removeTrailingNewline(difference);\n console.log(log.infoText(render));\n\n // Add what we've just rendered to already shown \"cache\"\n alreadyShown += `${render}\\n`;\n needsNewLine = false;\n } else {\n // If no difference output a dot\n process.stdout.write('.');\n needsNewLine = true;\n }\n } else if (lastErr) {\n // If error output an x\n process.stdout.write('x');\n needsNewLine = true;\n }\n }\n }\n }\n };\n\n PrintProxies = async (proxyId?: string) => {\n const { currentEnv, env, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve proxies list for env\n const [err, proxies] = await contensis.proxies.GetProxies(proxyId);\n\n if (Array.isArray(proxies)) {\n this.HandleFormattingAndOutput(proxies, () => {\n // print the proxies to console\n log.success(messages.proxies.list(currentEnv, env.currentProject));\n for (const { id, name, description, endpoints, version } of proxies) {\n console.log(\n ` - ${name} [${\n version.versionNo\n }] ${id} ${log.infoText`${description}`}`\n );\n for (const [language, endpoint] of Object.entries(endpoints))\n console.log(\n ` - ${log.infoText`language: ${language}\n server: ${endpoint.server}\n headers.host: ${endpoint.headers.host}\n ssl: ${endpoint.ssl}`}`\n );\n }\n });\n }\n\n if (err) {\n log.error(messages.proxies.noList(currentEnv, env.currentProject));\n log.error(jsonFormatter(err));\n }\n }\n };\n\n PrintRenderers = async (rendererId?: string) => {\n const { currentEnv, env, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve renderers list for env\n const [err, renderers] = await contensis.renderers.GetRenderers(\n rendererId\n );\n\n if (Array.isArray(renderers)) {\n this.HandleFormattingAndOutput(renderers, () => {\n // print the renderers to console\n log.success(messages.renderers.list(currentEnv, env.currentProject));\n for (const {\n id,\n description,\n assignedContentTypes,\n rules,\n version,\n } of renderers) {\n console.log(\n ` - ${id} [${version.versionNo}] ${log.infoText`${description}`}`\n );\n if (assignedContentTypes?.length)\n console.log(\n log.infoText` assignedContentTypes: ${assignedContentTypes.join(\n ', '\n )}`\n );\n for (const rule of rules)\n if (rule.return)\n console.log(\n log.infoText` ${\n rule.return.endpointId ? 'endpointId' : 'blockId'\n }: ${rule.return.endpointId || rule.return.blockId}`\n );\n }\n });\n }\n\n if (err) {\n log.error(messages.renderers.noList(currentEnv, env.currentProject));\n log.error(jsonFormatter(err));\n }\n }\n };\n HandleFormattingAndOutput = <T>(obj: T, logFn: (obj: T) => void) => {\n const { format, log, messages, output } = this;\n if (!format) {\n // print the object to console\n logFn(obj);\n } else if (format === 'csv') {\n log.raw('');\n log.raw(log.infoText(csvFormatter(obj)));\n } else if (format === 'xml') {\n log.raw('');\n log.raw(log.infoText(xmlFormatter(obj)));\n } else if (format === 'json') {\n log.raw('');\n log.raw(log.infoText(jsonFormatter(obj)));\n }\n log.raw('');\n\n if (output) {\n let writeString = '';\n const isText = !tryParse(obj) && typeof obj === 'string';\n if (format === 'csv') {\n writeString = csvFormatter(obj as any);\n } else if (format === 'xml') {\n writeString = xmlFormatter(obj as any);\n } else writeString = isText ? (obj as string) : jsonFormatter(obj);\n // write output to file\n if (writeString) {\n fs.writeFileSync(output, writeString);\n log.success(messages.app.fileOutput(isText ? 'text' : format, output));\n } else {\n log.info(messages.app.noFileOutput());\n }\n }\n };\n}\n\nexport const cliCommand = (\n commandArgs: string[],\n outputOpts: OutputOptions & IConnectOptions = {},\n contensisOpts: Partial<MigrateRequest> = {}\n) => {\n return new ContensisCli(['', '', ...commandArgs], outputOpts, contensisOpts);\n};\nexport default ContensisCli;\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import fs from 'fs';\nimport path from 'path';\nimport fetch from 'node-fetch';\nimport inquirer from 'inquirer';\nimport to from 'await-to-js';\nimport chalk from 'chalk';\nimport { Component, ContentType, Project } from 'contensis-core-api';\nimport {\n isPassword,\n isSharedSecret,\n isUuid,\n tryParse,\n tryStringify,\n url,\n} from '~/util';\nimport SessionCacheProvider from '../providers/SessionCacheProvider';\nimport ContensisAuthService from './ContensisAuthService';\nimport CredentialProvider from '~/providers/CredentialProvider';\nimport { logError, Logger } from '~/util/logger';\nimport { LogMessages } from '~/localisation/en-GB';\nimport {\n ContensisMigrationService,\n MigrateRequest,\n PushBlockParams,\n SourceCms,\n logEntriesTable,\n ContentTypesResult,\n Model,\n MigrateModelsResult,\n BlockActionType,\n} from 'migratortron';\nimport { Entry, Role } from 'contensis-management-api/lib/models';\n\nimport { csvFormatter } from '~/util/csv.formatter';\nimport { xmlFormatter } from '~/util/xml.formatter';\nimport { jsonFormatter } from '~/util/json.formatter';\nimport { diffLogStrings } from '~/util/diff';\nimport { promiseDelay } from '~/util/timers';\nimport {\n printBlockVersion,\n printMigrateResult,\n printModelMigrationAnalysis,\n printModelMigrationResult,\n} from '~/util/console.printer';\nimport { readJsonFile } from '~/providers/file-provider';\n\ntype OutputFormat = 'json' | 'csv' | 'xml';\n\ntype OutputOptions = {\n format?: OutputFormat;\n output?: string;\n};\n\ninterface IConnectOptions extends IAuthOptions {\n alias?: string;\n projectId?: string;\n}\n\ninterface IAuthOptions {\n user?: string;\n password?: string;\n clientId?: string;\n sharedSecret?: string;\n}\n\ninterface IImportOptions {\n sourceAlias?: string;\n sourceProjectId?: string;\n}\n\nlet insecurePasswordWarningShown = false;\n\nclass ContensisCli {\n static quit = (error?: Error) => {\n process.removeAllListeners('exit');\n const exitCode = error ? 1 : 0;\n\n // console.info(`\\nExiting contensis-cli with exit code: ${exitCode}\\n`);\n process.exit(exitCode);\n };\n\n private command: CliCommand;\n private format?: OutputFormat;\n private output?: string;\n private session: SessionCacheProvider;\n\n contensis?: ContensisMigrationService;\n contensisOpts: Partial<MigrateRequest>;\n currentProject: string;\n\n sourceAlias?: string;\n targetEnv?: string;\n urls:\n | {\n api: string;\n cms: string;\n liveWeb: string;\n previewWeb: string;\n iisWeb: string;\n iisPreviewWeb: string;\n }\n | undefined;\n log = Logger;\n messages = LogMessages;\n\n verb: string;\n noun: string;\n thirdArg: string;\n\n get cache() {\n return this.session.Get();\n }\n\n get currentEnv() {\n return this.cache.currentEnvironment || '';\n }\n\n set currentEnv(currentEnvironment: string) {\n this.session.Update({ currentEnvironment });\n }\n\n get env() {\n const currentEnvironment = this.currentEnv;\n const environments = this.cache.environments || {};\n\n if (!currentEnvironment) return {} as EnvironmentCache;\n else if (!!environments[currentEnvironment])\n return environments[currentEnvironment];\n else {\n return {\n history: [],\n lastUserId: '',\n projects: [],\n versionStatus: 'latest',\n } as EnvironmentCache;\n }\n }\n\n constructor(\n args: string[],\n outputOpts?: OutputOptions & IConnectOptions & IImportOptions,\n contensisOpts: Partial<MigrateRequest> = {}\n ) {\n // console.log('args: ', JSON.stringify(args, null, 2));\n\n const [exe, script, verb = '', noun = '', ...restArgs] = args;\n this.verb = verb?.toLowerCase();\n this.noun = noun?.toLowerCase();\n this.thirdArg = restArgs?.[0];\n\n const commandText = `${this.verb} ${this.noun} ${\n restArgs ? restArgs.join(' ') : ''\n }`.trim();\n\n this.session = new SessionCacheProvider();\n\n this.contensisOpts = contensisOpts;\n this.format = outputOpts?.format;\n this.output =\n outputOpts?.output && path.join(process.cwd(), outputOpts.output);\n\n const currentEnvironment = outputOpts?.alias || this.currentEnv;\n const environments = this.cache.environments || {};\n this.currentEnv = currentEnvironment;\n\n const env = this.env;\n\n if (outputOpts?.projectId) env.currentProject = outputOpts.projectId;\n if (outputOpts?.user) env.lastUserId = outputOpts.user;\n // setting this in env means passwordFallback is written to environments.json\n if (outputOpts?.password) env.passwordFallback = outputOpts.password;\n if (outputOpts?.clientId) env.lastUserId = outputOpts.clientId;\n if (outputOpts?.sharedSecret)\n env.passwordFallback = outputOpts.sharedSecret;\n\n this.currentProject = env?.currentProject || 'null';\n this.sourceAlias = outputOpts?.sourceAlias || currentEnvironment;\n\n if (currentEnvironment) {\n this.urls = url(currentEnvironment, env?.currentProject || 'website');\n }\n\n this.command = {\n commandText,\n createdDate: new Date().toISOString(),\n createdUserId: env?.lastUserId,\n };\n\n if (currentEnvironment) {\n env.history = [this.command];\n if (commandText) {\n environments[currentEnvironment] = env;\n this.session.Update({\n currentEnvironment,\n environments,\n history: [commandText],\n });\n }\n }\n }\n\n PrintEnvironments = () => {\n const { log, messages } = this;\n const { currentEnvironment, environments = {} } = this.cache;\n const envKeys = Object.keys(environments);\n log.success(messages.envs.found(envKeys.length));\n this.HandleFormattingAndOutput(envKeys, () => {\n // print the envKeys to console\n for (const env of envKeys) {\n console.log(` - ${currentEnvironment === env ? '* ' : ''}${env}`);\n }\n });\n if (envKeys.length === 0 || !currentEnvironment) {\n log.help(messages.envs.tip());\n }\n };\n\n Connect = async (environment: string) => {\n const { log, messages, session } = this;\n\n if (environment) {\n this.currentEnv = environment;\n this.urls = url(environment, 'website');\n\n const [fetchErr, response] = await to(fetch(this.urls.cms));\n if (response && response?.status < 400) {\n log.success(messages.connect.connected(environment));\n session.UpdateEnv(this.env, environment);\n\n if (this.env?.lastUserId) {\n // await this.ConnectContensis();\n await this.PrintProjects();\n } else {\n log.warning(messages.projects.noList());\n log.help(messages.connect.tip());\n }\n } else {\n // Cannot reach environment - status X\n log.error(\n messages.connect.unreachable(this.urls.cms, response?.status || 0)\n );\n }\n } else {\n // No environment alias specified\n log.error(messages.connect.noEnv());\n }\n };\n\n ConnectContensis = async ({ commit = false } = {}) => {\n if (!this.contensis) {\n const { contensisOpts, currentEnv, env, log, messages } = this;\n const userId = env?.lastUserId;\n const isGuidId = userId && isUuid(userId);\n\n if (currentEnv && userId) {\n const credentials = await this.GetCredentials(\n userId,\n env.passwordFallback\n );\n\n const cachedPassword = credentials?.current?.password;\n\n if (cachedPassword) {\n this.contensis = new ContensisMigrationService(\n {\n ...contensisOpts,\n source: {\n url: this.urls?.cms || '',\n username: !isGuidId ? userId : undefined,\n password: !isGuidId ? cachedPassword : undefined,\n clientId: isGuidId ? userId : undefined,\n sharedSecret: isGuidId ? cachedPassword : undefined,\n project: env?.currentProject || '',\n assetHostname: this.urls?.previewWeb,\n },\n concurrency:\n typeof contensisOpts.concurrency !== 'undefined'\n ? contensisOpts.concurrency\n : 3,\n outputProgress: true,\n },\n !commit\n );\n }\n } else {\n if (!currentEnv) log.help(messages.connect.help());\n if (!userId) log.help(messages.connect.tip());\n }\n }\n return this.contensis;\n };\n\n ConnectContensisImport = async ({\n commit = false,\n fromFile,\n importDataType,\n }: {\n commit?: boolean;\n fromFile?: string;\n importDataType?:\n | 'entries'\n | 'contentTypes'\n | 'components'\n | 'models'\n | 'user-input';\n }) => {\n const source: 'contensis' | 'file' = fromFile ? 'file' : 'contensis';\n\n const fileData = fromFile\n ? readJsonFile<(Entry | ContentType | Component)[]>(fromFile) || []\n : [];\n\n if (typeof fileData === 'string')\n throw new Error(`Import file format must be of type JSON`);\n\n const { contensisOpts, currentEnv, env, log, messages, sourceAlias } = this;\n const environments = this.cache.environments || {};\n const sourceEnvironment = environments[sourceAlias || ''] || {};\n const sourceCms =\n ('source' in contensisOpts && contensisOpts.source) ||\n ({} as Partial<SourceCms>);\n const sourceUserId =\n sourceCms.clientId || sourceCms.username || sourceEnvironment.lastUserId;\n const sourceProjectId =\n sourceCms.project || sourceEnvironment.currentProject || 'website';\n const isSourceGuidId = sourceUserId && isUuid(sourceUserId);\n const sourceUrls = url(sourceAlias || '', sourceProjectId);\n\n const sourcePassword =\n sourceCms.sharedSecret ||\n sourceCms.password ||\n sourceEnvironment.passwordFallback;\n\n const targetUserId = env?.lastUserId;\n const isTargetGuidId = targetUserId && isUuid(targetUserId);\n\n if (sourceUserId && currentEnv && targetUserId) {\n const sourceCredentials = await this.GetCredentials(\n sourceUserId,\n sourcePassword,\n sourceAlias,\n false\n );\n\n const cachedSourcePassword = sourceCredentials?.current?.password;\n\n const targetCredentials = await this.GetCredentials(\n targetUserId,\n env.passwordFallback\n );\n\n const cachedTargetPassword = targetCredentials?.current?.password;\n\n if (cachedSourcePassword && cachedTargetPassword) {\n if (source === 'file' || importDataType === 'user-input') {\n this.contensis = new ContensisMigrationService(\n {\n concurrency: 3,\n outputProgress: true,\n ...contensisOpts,\n target: {\n url: this.urls?.cms || '',\n username: !isTargetGuidId ? targetUserId : undefined,\n password: !isTargetGuidId ? cachedTargetPassword : undefined,\n clientId: isTargetGuidId ? targetUserId : undefined,\n sharedSecret: isTargetGuidId ? cachedTargetPassword : undefined,\n targetProjects: [env.currentProject || ''],\n assetHostname: this.urls?.previewWeb,\n },\n ...(importDataType ? { [importDataType]: fileData } : {}),\n },\n !commit\n );\n } else if (source === 'contensis') {\n this.contensis = new ContensisMigrationService(\n {\n concurrency: 3,\n outputProgress: true,\n ...contensisOpts,\n source: {\n url: sourceUrls.cms || '',\n username: !isSourceGuidId ? sourceUserId : undefined,\n password: !isSourceGuidId ? cachedSourcePassword : undefined,\n clientId: isSourceGuidId ? sourceUserId : undefined,\n sharedSecret: isSourceGuidId ? cachedSourcePassword : undefined,\n project: sourceProjectId,\n assetHostname: sourceUrls.previewWeb,\n },\n target: {\n url: this.urls?.cms || '',\n username: !isTargetGuidId ? targetUserId : undefined,\n password: !isTargetGuidId ? cachedTargetPassword : undefined,\n clientId: isTargetGuidId ? targetUserId : undefined,\n sharedSecret: isTargetGuidId ? cachedTargetPassword : undefined,\n targetProjects: [env.currentProject || ''],\n assetHostname: this.urls?.previewWeb,\n },\n },\n !commit\n );\n }\n }\n } else {\n if (!currentEnv) log.help(messages.connect.help());\n if (!targetUserId) log.help(messages.connect.tip());\n }\n return this.contensis;\n };\n\n GetCredentials = async (\n userId: string,\n password?: string,\n currentEnv = this.currentEnv,\n saveCurrentEnv = true\n ): Promise<CredentialProvider | undefined> => {\n const { log, messages } = this;\n if (userId) {\n const [credentialError, credentials] = await new CredentialProvider(\n { userId, alias: currentEnv },\n password\n ).Init();\n\n if (credentialError && !credentials.current) {\n // Log problem with Credential Provider\n log.error(credentialError as any);\n return;\n }\n\n if (credentials.remarks.secure !== true) {\n if (!insecurePasswordWarningShown) {\n log.warning(messages.login.insecurePassword());\n insecurePasswordWarningShown = true;\n }\n } else {\n const env = this.cache.environments[currentEnv];\n env.passwordFallback = undefined;\n this.session.UpdateEnv(env, currentEnv, saveCurrentEnv);\n }\n return credentials;\n }\n };\n\n Login = async (\n userId: string,\n {\n password = isPassword(this.env.passwordFallback),\n promptPassword = true,\n sharedSecret = isSharedSecret(this.env.passwordFallback),\n silent = false,\n attempt = 1,\n }: {\n password?: string;\n promptPassword?: boolean;\n sharedSecret?: string;\n silent?: boolean;\n attempt?: number;\n } = {}\n ): Promise<string | undefined> => {\n let inputPassword = password || sharedSecret;\n const { log, messages } = this;\n\n if (userId) {\n const { currentEnv, env } = this;\n\n if (currentEnv) {\n const credentials = await this.GetCredentials(userId, inputPassword);\n\n if (credentials) {\n const cachedPassword = isPassword(credentials.current?.password);\n const cachedSecret = isSharedSecret(credentials.current?.password);\n\n if (!cachedPassword && !cachedSecret && promptPassword) {\n // Password prompt\n ({ inputPassword } = await inquirer.prompt([\n {\n type: 'password',\n message: messages.login.passwordPrompt(currentEnv, userId),\n name: 'inputPassword',\n mask: '*',\n prefix: undefined,\n },\n ]));\n }\n\n if (inputPassword || cachedPassword || cachedSecret) {\n const authService = new ContensisAuthService({\n username: userId,\n password: inputPassword || cachedPassword,\n projectId: env?.currentProject || 'website',\n rootUrl: this.urls?.cms || '',\n clientId: userId,\n clientSecret: sharedSecret || cachedSecret,\n });\n\n const [authError, bearerToken] = await to(\n authService.BearerToken()\n );\n\n // Login successful\n if (bearerToken) {\n // Set env vars\n env.authToken = bearerToken;\n env.lastUserId = userId;\n env.passwordFallback =\n credentials.remarks.secure !== true\n ? credentials.current?.password\n : undefined;\n\n // Persist env before finding projects or doing anything else\n this.session.UpdateEnv(env);\n if (inputPassword) await credentials.Save(inputPassword);\n if (sharedSecret) await credentials.Save(sharedSecret);\n\n if (!silent) {\n Logger.success(messages.login.success(currentEnv, userId));\n await this.PrintProjects();\n }\n } else if (authError) {\n Logger.error(authError.toString());\n // Clear env vars\n env.authToken = '';\n env.lastUserId = '';\n env.passwordFallback = undefined;\n // Persist env to remove cleared values\n this.session.UpdateEnv(env);\n\n // If the auth error was raised using a cached password\n if (\n (cachedPassword || cachedSecret) &&\n credentials.remarks.secure\n ) {\n // Remove any bad stored credential and trigger login prompt again\n await credentials.Delete();\n return await this.Login(userId, { password, sharedSecret });\n } else {\n throw new Error(messages.login.failed(currentEnv, userId));\n }\n }\n\n return env.authToken;\n } else {\n Logger.error(messages.login.passwordPrompt());\n if (attempt < 2)\n return await this.Login(userId, { attempt: attempt + 1 });\n }\n }\n } else {\n // No environment set, use `contensis connect {alias}` first\n Logger.error(messages.login.noEnv());\n }\n } else {\n // No user id specified\n Logger.error(messages.login.noUserId());\n }\n };\n\n PrintContensisVersion = async () => {\n const { log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve projects list for env\n const [projectsErr, projects] = await to(\n contensis.projects.GetSourceProjects()\n );\n \n if (Array.isArray(projects)) {\n // Print contensis version to console\n this.HandleFormattingAndOutput(contensis.contensisVersion, () =>\n log.raw(log.highlightText(contensis.contensisVersion))\n );\n }\n\n if (projectsErr) {\n log.error(messages.projects.noList());\n log.error(projectsErr.message);\n }\n }\n };\n\n PrintBearerToken = async () => {\n const { log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve token for env\n const [error, token] = await to(\n contensis.content.sourceRepo.repo.BearerToken()\n );\n if (token) {\n // Print bearer token to console\n this.HandleFormattingAndOutput(token, () =>\n log.raw(log.highlightText(token))\n );\n }\n\n if (error) {\n log.error(messages.projects.noList());\n log.error(error.message);\n }\n }\n };\n\n PrintProjects = async () => {\n const { currentProject, log, messages, session } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve projects list for env\n const [projectsErr, projects] = await to(\n contensis.projects.GetSourceProjects()\n );\n\n if (Array.isArray(projects)) {\n // save these projects in cache\n const nextCurrentProject =\n currentProject && currentProject !== 'null'\n ? currentProject\n : projects.some(p => p.id === 'website')\n ? 'website'\n : undefined;\n\n session.UpdateEnv({\n projects: projects.map(p => p.id),\n currentProject: nextCurrentProject,\n });\n\n log.success(messages.projects.list());\n log.raw('');\n\n this.HandleFormattingAndOutput(projects, () => {\n // print the projects to console\n for (const project of projects.sort((a, b) =>\n a.id.localeCompare(b.id)\n )) {\n let color;\n try {\n color = chalk.keyword((project as any).color);\n } catch (ex) {\n color = chalk.white;\n }\n console.log(\n `${\n nextCurrentProject === project.id\n ? `>> ${log.boldText(color(project.id))}`\n : ` ${color(project.id)}`\n } ${log.infoText(\n `[${project.supportedLanguages\n .map(l =>\n l === project.primaryLanguage ? `*${log.boldText(l)}` : l\n )\n .join(' ')}]`\n )}`\n );\n }\n });\n\n if (!this.SetProject(nextCurrentProject))\n log.warning(messages.projects.tip());\n }\n\n if (projectsErr) {\n log.error(messages.projects.noList());\n log.error(projectsErr.message);\n }\n }\n };\n\n PrintProject = async (projectId = this.currentProject) => {\n const { log, messages, session } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve projects list for env\n const [projectsErr, projects] = await to(\n contensis.projects.GetSourceProjects()\n );\n\n const foundProject = projects?.find(\n p => p.id.toLowerCase() === projectId.toLowerCase()\n );\n\n if (foundProject) {\n log.raw('');\n this.HandleFormattingAndOutput(foundProject, log.object);\n }\n\n if (projectsErr) {\n log.error(messages.projects.noList());\n log.error(projectsErr.message);\n }\n }\n };\n\n SetProject = (projectId = 'website') => {\n const { env, log, messages, session } = this;\n let nextProjectId: string | undefined;\n if (env?.projects.length > 0 && env?.lastUserId) {\n nextProjectId = env.projects.find(\n p => p.toLowerCase() === projectId.toLowerCase()\n );\n if (nextProjectId) {\n env.currentProject = nextProjectId;\n session.UpdateEnv(env);\n log.success(messages.projects.set(projectId));\n log.raw('');\n } else {\n log.error(messages.projects.failedSet(projectId));\n }\n } else {\n // No projects for currentEnv, try logging in\n log.warning(messages.projects.noList());\n log.help(messages.connect.tip());\n }\n return nextProjectId;\n };\n\n SetVersion = (versionStatus: 'latest' | 'published') => {\n const { env, log, messages, session } = this;\n if (!['latest', 'published'].includes(versionStatus)) {\n log.error(messages.version.invalid(versionStatus));\n return false;\n }\n if (!env) {\n log.help(messages.version.noEnv());\n return false;\n }\n if (env?.projects.length > 0 && env?.lastUserId) {\n session.UpdateEnv({ versionStatus });\n log.success(messages.version.set(this.currentEnv, versionStatus));\n return true;\n } else {\n // No projects for currentEnv, try logging in\n log.warning(messages.projects.noList());\n log.help(messages.connect.tip());\n return false;\n }\n };\n\n PrintApiKeys = async () => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve keys list for env\n const [keysErr, apiKeys] = await contensis.apiKeys.GetKeys();\n\n if (Array.isArray(apiKeys)) {\n log.success(messages.keys.list(currentEnv));\n this.HandleFormattingAndOutput(apiKeys, () => {\n // print the keys to console\n for (const {\n id,\n sharedSecret,\n name,\n description,\n dateModified,\n modifiedBy,\n } of apiKeys) {\n console.log(\n ` - ${name}${\n description ? ` (${description})` : ''\n } [${dateModified.toString().substring(0, 10)} ${modifiedBy}]`\n );\n console.log(` ${id}`);\n console.log(` ${sharedSecret}`);\n }\n });\n }\n\n if (keysErr) {\n log.error(messages.keys.noList(currentEnv));\n log.error(jsonFormatter(keysErr));\n }\n }\n };\n\n CreateApiKey = async (name: string, description?: string) => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n const [err, key] = await contensis.apiKeys.CreateKey(name, description);\n\n if (key) {\n log.success(messages.keys.created(currentEnv, name));\n\n // print the key details to console\n console.log(\n ` - ${chalk.bold(key.name)} [${key.dateModified\n .toString()\n .substring(0, 10)} ${key.modifiedBy}]`\n );\n if (key.description)\n console.log(` ${log.infoText(key.description)}`);\n console.log(` ${chalk.bold.grey`id`}: ${key.id}`);\n console.log(\n ` ${chalk.bold.grey`sharedSecret`}: ${key.sharedSecret}`\n );\n console.log('');\n log.help(messages.keys.tip());\n }\n\n if (err) {\n log.error(messages.keys.failedCreate(currentEnv, name), err);\n }\n }\n };\n\n RemoveApiKey = async (id: string) => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis({ commit: true });\n\n if (contensis) {\n const [err, key] = await contensis.apiKeys.RemoveKey(id);\n\n if (!err) {\n log.success(messages.keys.removed(currentEnv, id));\n console.log('');\n } else {\n log.error(messages.keys.failedRemove(currentEnv, id), err);\n }\n }\n };\n\n PrintRoles = async () => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve roles list for env\n const [rolesErr, roles] = await to(contensis.roles.GetRoles());\n\n if (Array.isArray(roles)) {\n log.success(messages.roles.list(currentEnv));\n\n if (!roles.length) log.help(messages.roles.noneExist());\n\n this.HandleFormattingAndOutput(roles, () => {\n // print the roles to console\n for (const {\n id,\n name,\n description,\n enabled,\n assignments,\n permissions,\n } of roles) {\n const color = enabled ? (s: string) => s : log.infoText;\n\n console.log(color(` - ${chalk.bold(name)} ${log.infoText(id)}`));\n if (description) console.log(log.infoText(` ${description}`));\n if (enabled === false)\n console.log(` ${chalk.bold.grey('enabled')}: false`);\n if (assignments.groups?.length)\n console.log(\n ` ${chalk.bold.grey('groups')}: ${assignments.groups.join(\n ', '\n )}`\n );\n if (assignments.users?.length)\n console.log(\n ` ${chalk.bold.grey('users')}: ${assignments.users.join(\n ', '\n )}`\n );\n if (assignments.apiKeys?.length)\n console.log(\n ` ${chalk.bold.grey('keys')}: ${assignments.apiKeys.join(\n ', '\n )}`\n );\n\n if (permissions.entries?.length) {\n console.log(` ${chalk.bold.grey('entries')}:`);\n for (const p of permissions.entries)\n console.log(\n ` ${p.id}: ${log.infoText(\n p.actions.length > 2\n ? p.actions.length\n : p.actions.join(', ')\n )}`\n );\n }\n if (permissions.contentTypes?.length)\n console.log(\n ` ${chalk.bold.grey(\n 'contentTypes'\n )}: ${permissions.contentTypes\n .map(\n p =>\n `${p.id} [${p.actions.join(',')}] ${p.languages.join(\n ' '\n )}`\n )\n .join(', ')}`\n );\n }\n });\n }\n\n if (rolesErr) {\n log.error(messages.roles.noList(currentEnv));\n log.error(jsonFormatter(rolesErr));\n }\n }\n };\n\n PrintRole = async (roleNameOrId: string) => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve roles list for env\n const [rolesErr, roles] = await to(contensis.roles.GetRoles());\n\n if (Array.isArray(roles)) {\n log.success(messages.roles.list(currentEnv));\n\n const role =\n roles.find(\n r =>\n r.id === roleNameOrId ||\n r.name.toLowerCase() === roleNameOrId.toLowerCase()\n ) ||\n roles.find(r =>\n r.name.toLowerCase().includes(roleNameOrId.toLowerCase())\n );\n\n if (role) this.HandleFormattingAndOutput(role, log.object);\n else log.error(messages.roles.failedGet(currentEnv, roleNameOrId));\n }\n\n if (rolesErr) {\n log.error(messages.roles.noList(currentEnv));\n log.error(jsonFormatter(rolesErr));\n }\n }\n };\n\n CreateRole = async (role: Partial<Role>) => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n const [err, created] = await contensis.roles.CreateRole(role as Role);\n\n if (created) {\n log.success(\n messages.roles.created(currentEnv, role.id || role.name || '')\n );\n\n this.HandleFormattingAndOutput(created, log.object);\n\n log.help(messages.roles.tip());\n return role.id;\n }\n\n if (err) {\n log.error(\n messages.roles.failedCreate(currentEnv, role.id || role.name || ''),\n err\n );\n }\n }\n };\n\n UpdateRole = async (roleNameOrId: string, role: Partial<Role>) => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve roles list for env\n const [rolesErr, roles] = await to(contensis.roles.GetRoles());\n\n if (Array.isArray(roles)) {\n log.success(messages.roles.list(currentEnv));\n\n const existingRole = roles.find(\n r =>\n r.id === roleNameOrId ||\n r.name.toLowerCase() === roleNameOrId.toLowerCase()\n );\n if (existingRole) {\n log.info(messages.roles.setPayload());\n log.object(role);\n log.raw(``);\n const [updateErr, updated] = await contensis.roles.UpdateRole(\n existingRole.id,\n role\n );\n if (updateErr)\n log.error(messages.roles.failedSet(currentEnv, roleNameOrId));\n else {\n log.success(messages.roles.set());\n\n this.HandleFormattingAndOutput(updated, log.object);\n }\n } else {\n // Role does not exist\n log.error(messages.roles.failedGet(currentEnv, roleNameOrId));\n }\n }\n\n if (rolesErr) {\n log.error(messages.roles.noList(currentEnv));\n log.error(jsonFormatter(rolesErr));\n }\n }\n };\n\n RemoveRole = async (roleNameOrId: string) => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve roles list for env\n const [rolesErr, roles] = await to(contensis.roles.GetRoles());\n\n if (Array.isArray(roles)) {\n log.success(messages.roles.list(currentEnv));\n\n const existingRole = roles.find(\n r =>\n r.id === roleNameOrId ||\n r.name.toLowerCase() === roleNameOrId.toLowerCase()\n );\n if (existingRole) {\n const [deleteErr] = await contensis.roles.RemoveRole(existingRole.id);\n\n if (deleteErr)\n log.error(messages.roles.failedRemove(currentEnv, roleNameOrId));\n else log.success(messages.roles.removed(currentEnv, roleNameOrId));\n } else {\n // Role does not exist\n log.error(messages.roles.failedGet(currentEnv, roleNameOrId));\n }\n }\n\n if (rolesErr) {\n log.error(messages.roles.noList(currentEnv));\n log.error(jsonFormatter(rolesErr));\n }\n }\n };\n\n CreateProject = async (project: Project) => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n const [err, created] = await contensis.projects.CreateProject(project);\n\n if (created) {\n log.success(messages.projects.created(currentEnv, project.id));\n\n this.HandleFormattingAndOutput(created, () => {\n // set the CLI project to the newly created project\n this.SetProject(project.id);\n // print all the projects to console\n this.PrintProjects();\n });\n return project.id;\n }\n\n if (err) {\n log.error(messages.projects.failedCreate(currentEnv, project.id), err);\n }\n }\n };\n\n UpdateProject = async (project: Partial<Project>) => {\n const { currentEnv, currentProject, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n const [err, updated] = await contensis.projects.UpdateProject({\n id: currentProject,\n ...project,\n });\n\n if (updated) {\n log.success(messages.projects.updated(currentEnv, currentProject));\n\n this.HandleFormattingAndOutput(updated, log.object);\n return updated.id;\n }\n\n if (err) {\n log.error(\n messages.projects.failedUpdate(currentEnv, currentProject),\n err\n );\n }\n }\n };\n\n PrintContentModels = async (modelIds: string[] = []) => {\n const { currentProject, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve models list for env\n const models = await contensis.models.contentModels();\n const contentTypes = await contensis.models.contentTypes();\n const components = await contensis.models.components();\n\n // Models to output to console\n const returnModels = modelIds?.length\n ? models?.filter((m: Model) =>\n modelIds.some(id => id.toLowerCase() === m.id.toLowerCase())\n )\n : undefined;\n\n // Generate a list of contentTypeIds and componentIds from all models\n // and dependencies\n const contentTypeIds = Array.from(\n new Set([\n ...(returnModels || models || []).map(m => m.id),\n ...(returnModels || models || [])\n .map(m => m.dependencies?.contentTypes?.map(c => c[0]) || [])\n .flat(),\n ])\n );\n const componentIds = Array.from(\n new Set(\n (returnModels || models || [])\n .map(m => m.dependencies?.components?.map(c => c[0]) || [])\n .flat()\n )\n );\n\n // Create an array of all the content types and component definitions\n // we will use this when outputting to a file\n const contentModelBackup = [\n ...contentTypes.filter(c =>\n contentTypeIds.map(i => i.toLowerCase()).includes(c.id.toLowerCase())\n ),\n ...components.filter(c =>\n componentIds.map(i => i.toLowerCase()).includes(c.id.toLowerCase())\n ),\n ];\n\n if (Array.isArray(returnModels)) {\n log.success(messages.models.list(currentProject));\n this.HandleFormattingAndOutput(contentModelBackup, () => {\n // print the content models to console\n for (const model of returnModels) {\n log.raw('');\n log.object(model);\n }\n log.raw('');\n });\n } else {\n log.success(\n messages.models.get(currentProject, models?.length.toString() || '0')\n );\n log.raw('');\n if (models?.length) {\n this.HandleFormattingAndOutput(contentModelBackup, () => {\n // print the content models to console\n for (const model of models) {\n const components = model.components?.length || 0;\n const contentTypes = model.contentTypes?.length || 0;\n const dependencies =\n (model.dependencies?.components?.length || 0) +\n (model.dependencies?.contentTypes?.length || 0);\n const dependencyOf =\n (model.dependencyOf?.components?.length || 0) +\n (model.dependencyOf?.contentTypes?.length || 0);\n\n const hasAny =\n components + contentTypes + dependencies + dependencyOf;\n log.raw(\n ` - ${log.highlightText(log.boldText(model.id))} ${\n hasAny\n ? log.infoText(\n `{ ${components ? `components: ${components}, ` : ''}${\n contentTypes ? `contentTypes: ${contentTypes}, ` : ''\n }${\n dependencies ? `references: ${dependencies}, ` : ''\n }${\n dependencyOf ? `required by: ${dependencyOf}` : ''\n } }`\n )\n : ''\n }`\n );\n }\n log.raw('');\n });\n }\n }\n }\n };\n\n ImportContentModels = async ({\n commit,\n fromFile,\n }: {\n commit: boolean;\n fromFile: string;\n }) => {\n const { currentProject, log, messages } = this;\n\n const fileData = fromFile\n ? readJsonFile<(ContentType | Component)[]>(fromFile) || []\n : [];\n if (typeof fileData === 'string')\n throw new Error(`Import file format must be of type JSON`);\n\n const contensis = await this.ConnectContensisImport({\n commit,\n fromFile,\n importDataType: 'models',\n });\n\n if (contensis) {\n log.line();\n if (contensis.isPreview) {\n console.log(log.successText(` -- IMPORT PREVIEW -- `));\n } else {\n console.log(log.warningText(` *** COMMITTING IMPORT *** `));\n }\n\n const [migrateErr, result] = await contensis.MigrateContentModels();\n\n if (migrateErr) logError(migrateErr);\n else\n this.HandleFormattingAndOutput(result, () => {\n // print the results to console\n if (!commit) {\n log.raw(log.boldText(`\\nContent types:`));\n if (!result.contentTypes) log.info(`- None returned\\n`);\n else printModelMigrationAnalysis(this, result.contentTypes);\n\n log.raw(log.boldText(`\\nComponents:`));\n if (!result.components) log.info(`- None returned\\n`);\n else printModelMigrationAnalysis(this, result.components);\n } else {\n const migrateResult = result as MigrateModelsResult;\n log.raw(log.boldText(`\\nContent types:`));\n printModelMigrationResult(\n this,\n migrateResult[currentProject].contentTypes\n );\n\n log.raw(log.boldText(`\\nComponents:`));\n printModelMigrationResult(\n this,\n migrateResult[currentProject].components\n );\n }\n });\n } else {\n log.warning(messages.models.noList(currentProject));\n log.help(messages.connect.tip());\n }\n };\n\n PrintContentTypes = async () => {\n const { currentProject, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve content types list for env\n const contentTypes = await contensis.models.contentTypes();\n\n if (Array.isArray(contentTypes)) {\n log.success(messages.contenttypes.list(currentProject));\n this.HandleFormattingAndOutput(contentTypes, () => {\n // print the content types to console\n for (const contentType of contentTypes) {\n const fieldsLength = contentType.fields?.length || 0;\n console.log(\n ` - ${contentType.id} [${fieldsLength} field${\n fieldsLength !== 1 ? 's' : ''\n }]`\n );\n }\n });\n }\n }\n };\n\n PrintContentType = async (contentTypeId: string) => {\n const { currentProject, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve content types list for env\n const contentTypes = await contensis.models.contentTypes();\n\n if (Array.isArray(contentTypes)) {\n const contentType = contentTypes.find(\n c => c.id.toLowerCase() === contentTypeId.toLowerCase()\n );\n if (contentType) {\n log.success(\n messages.contenttypes.get(currentProject, contentType.id)\n );\n // print the content type to console\n this.HandleFormattingAndOutput(contentType, log.object);\n } else {\n log.error(\n messages.contenttypes.failedGet(currentProject, contentTypeId)\n );\n }\n }\n }\n };\n\n RemoveContentTypes = async (contentTypeIds: string[], commit = false) => {\n const { currentProject, log, messages } = this;\n const contensis = await this.ConnectContensisImport({\n commit,\n importDataType: 'user-input',\n });\n if (contensis) {\n const [err, result] = await contensis.DeleteContentTypes(contentTypeIds);\n\n if (err) {\n log.error(\n messages.contenttypes.failedRemove(\n currentProject,\n contentTypeIds.join('\", \"')\n ),\n err\n );\n } else {\n log.success(\n messages.contenttypes.removed(\n currentProject,\n contentTypeIds.join('\", \"'),\n !contensis.isPreview\n )\n );\n // print the results to console\n this.HandleFormattingAndOutput(result, () =>\n log.object(jsonFormatter(result))\n );\n }\n }\n };\n\n ImportContentTypes = async (\n {\n commit,\n fromFile,\n }: {\n commit: boolean;\n fromFile: string;\n },\n contentTypeIds: string[] = []\n ) => {\n const { currentProject, log, messages } = this;\n\n let fileData = fromFile ? readJsonFile<ContentType[]>(fromFile) || [] : [];\n if (typeof fileData === 'string')\n throw new Error(`Import file format must be of type JSON`);\n\n if (!Array.isArray(fileData)) fileData = [fileData];\n\n const contensis = await this.ConnectContensisImport({\n commit,\n importDataType: fromFile ? 'user-input' : undefined,\n });\n\n if (contensis) {\n // Pass each content type to the target repo\n for (const contentType of fileData) {\n // Fix invalid data\n contentType.projectId = currentProject;\n delete contentType.uuid;\n\n const [err, created, createStatus] = await contensis.models.targetRepos[\n currentProject\n ].repo.UpsertContentType(false, contentType);\n\n if (err) log.error(err.message, err);\n if (createStatus) {\n log.success(\n messages.contenttypes.created(\n currentProject,\n contentType.id,\n createStatus\n )\n );\n // print the content type to console\n this.HandleFormattingAndOutput(contentType, () => {});\n }\n }\n }\n };\n\n DiffModels = async (\n {\n fromFile,\n }: {\n fromFile: string;\n },\n modelIds: string[] = []\n ) => {\n const { log } = this;\n\n let fileData = fromFile ? readJsonFile<ContentType[]>(fromFile) || [] : [];\n if (typeof fileData === 'string')\n throw new Error(`Import file format must be of type JSON`);\n\n if (!Array.isArray(fileData)) fileData = [fileData];\n\n const contensis = await this.ConnectContensisImport({\n fromFile,\n importDataType: 'models',\n });\n\n if (contensis) {\n const [err, result] = (await to(\n contensis.models.Diff(fileData.length ? fileData : modelIds)\n )) as [Error | null, ContentTypesResult | undefined];\n\n if (err) log.error(err.message, err);\n if (result)\n // print the content type to console\n this.HandleFormattingAndOutput(result, () => {\n log.success(\n `Queried models ${log.infoText(\n `\"${result.query.modelIds?.join(', ')}\"`\n )}\\n`\n );\n\n log.raw(log.boldText(`Content types:`));\n if (!result.contentTypes) log.info(`- None returned\\n`);\n else printModelMigrationAnalysis(this, result.contentTypes);\n\n log.raw(log.boldText(`Components:`));\n if (!result.components) log.info(`- None returned\\n`);\n else printModelMigrationAnalysis(this, result.components);\n });\n }\n };\n\n PrintComponents = async () => {\n const { currentProject, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve components list for env\n const components = await contensis.models.components();\n\n if (Array.isArray(components)) {\n log.success(messages.components.list(currentProject));\n\n this.HandleFormattingAndOutput(components, () => {\n // print the components to console\n for (const component of components) {\n const fieldsLength = component.fields?.length || 0;\n console.log(\n ` - ${component.id} [${fieldsLength} field${\n fieldsLength !== 1 ? 's' : ''\n }]`\n );\n }\n });\n }\n }\n };\n\n PrintComponent = async (componentId: string) => {\n const { currentProject, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve content types list for env\n const components = await contensis.models.components();\n\n if (Array.isArray(components)) {\n const component = components.find(\n c => c.id.toLowerCase() === componentId.toLowerCase()\n );\n if (component) {\n log.success(messages.components.get(currentProject, component.id));\n // print the component to console\n this.HandleFormattingAndOutput(component, log.object);\n } else {\n log.error(messages.components.failedGet(currentProject, componentId));\n }\n }\n }\n };\n\n RemoveComponents = async (componentIds: string[], commit = false) => {\n const { currentProject, log, messages } = this;\n const contensis = await this.ConnectContensisImport({\n commit,\n importDataType: 'user-input',\n });\n if (contensis) {\n const [err, result] = await contensis.DeleteContentTypes(\n undefined,\n componentIds\n );\n\n if (err) {\n log.error(\n messages.components.failedRemove(\n currentProject,\n componentIds.join('\", \"')\n ),\n err\n );\n } else {\n log.success(\n messages.components.removed(\n currentProject,\n componentIds.join('\", \"'),\n !contensis.isPreview\n )\n );\n // print the results to console\n this.HandleFormattingAndOutput(result, () =>\n log.info(jsonFormatter(result))\n );\n }\n }\n };\n\n ImportComponents = async (\n {\n commit,\n fromFile,\n }: {\n commit: boolean;\n fromFile: string;\n },\n componentIds: string[] = []\n ) => {\n const { currentProject, log, messages } = this;\n\n let fileData = fromFile ? readJsonFile<Component[]>(fromFile) || [] : [];\n if (typeof fileData === 'string')\n throw new Error(`Import file format must be of type JSON`);\n\n if (!Array.isArray(fileData)) fileData = [fileData];\n\n const contensis = await this.ConnectContensisImport({\n commit,\n importDataType: fromFile ? 'user-input' : undefined,\n });\n\n if (contensis) {\n // Pass each component to the target repo\n for (const component of fileData) {\n // Fix invalid data\n component.projectId = currentProject;\n delete component.uuid;\n\n const [err, created, createStatus] = await contensis.models.targetRepos[\n currentProject\n ].repo.UpsertComponent(false, component);\n\n if (err) log.error(err.message, err);\n if (createStatus) {\n log.success(\n messages.components.created(\n currentProject,\n component.id,\n createStatus\n )\n );\n // print the component to console\n this.HandleFormattingAndOutput(component, () => {});\n }\n }\n }\n };\n\n RemoveEntries = async (commit = false) => {\n const { currentEnv, currentProject, log, messages } = this;\n const contensis = await this.ConnectContensisImport({\n commit,\n importDataType: 'user-input',\n });\n\n if (contensis) {\n if (contensis.isPreview) {\n console.log(log.successText(` -- PREVIEW -- `));\n } else {\n console.log(log.warningText(` *** COMMITTING DELETE *** `));\n }\n const [err, result] = await contensis.DeleteEntries();\n if (result)\n this.HandleFormattingAndOutput(result, () => {\n // print the migrateResult to console\n printMigrateResult(this, result, {\n action: 'delete',\n showAllEntries: true,\n });\n });\n if (\n !err &&\n ((!commit && result.entriesToMigrate[currentProject].totalCount) ||\n (commit && result.migrateResult?.deleted))\n ) {\n log.success(messages.entries.removed(currentEnv, commit));\n if (!commit) {\n log.raw(``);\n log.help(messages.entries.commitTip());\n }\n } else {\n log.error(messages.entries.failedRemove(currentEnv), err);\n if (!result.entriesToMigrate[currentProject].totalCount)\n log.help(messages.entries.notFound(currentEnv));\n }\n }\n };\n\n GetEntries = async ({\n withDependents = false,\n }: {\n withDependents?: boolean;\n }) => {\n const { currentProject, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n log.line();\n const entries = await contensis.GetEntries({ withDependents });\n this.HandleFormattingAndOutput(entries, () =>\n // print the entries to console\n logEntriesTable(\n entries,\n currentProject,\n contensis.payload.query?.fields\n )\n );\n } else {\n log.warning(messages.models.noList(currentProject));\n log.help(messages.connect.tip());\n }\n };\n\n ImportEntries = async ({\n commit,\n fromFile,\n logOutput,\n }: {\n commit: boolean;\n fromFile: string;\n logOutput: string;\n }) => {\n const { currentEnv, currentProject, log, messages } = this;\n\n const contensis = await this.ConnectContensisImport({\n commit,\n fromFile,\n importDataType: 'entries',\n });\n\n if (contensis) {\n log.line();\n if (contensis.isPreview) {\n console.log(log.successText(` -- IMPORT PREVIEW -- `));\n } else {\n console.log(log.warningText(` *** COMMITTING IMPORT *** `));\n }\n\n const [err, result] = await contensis.MigrateEntries();\n\n if (err) logError(err);\n else\n this.HandleFormattingAndOutput(result, () => {\n // print the migrateResult to console\n printMigrateResult(this, result, {\n showAllEntries: logOutput === 'all',\n showChangedEntries: logOutput === 'changes',\n });\n });\n\n if (\n !err &&\n !result.errors?.length &&\n ((!commit && result.entriesToMigrate[currentProject].totalCount) ||\n (commit &&\n (result.migrateResult?.created || result.migrateResult?.updated)))\n ) {\n log.success(\n messages.entries.imported(\n currentEnv,\n commit,\n commit\n ? (result.migrateResult?.created || 0) +\n (result.migrateResult?.updated || 0)\n : result.entriesToMigrate[currentProject].totalCount\n )\n );\n if (!commit) {\n log.raw(``);\n log.help(messages.entries.commitTip());\n }\n } else {\n log.error(messages.entries.failedImport(currentEnv), err);\n if (!result.entriesToMigrate[currentProject].totalCount)\n log.help(messages.entries.notFound(currentEnv));\n }\n } else {\n log.warning(messages.models.noList(currentProject));\n log.help(messages.connect.tip());\n }\n };\n\n PrintWebhookSubscriptions = async (subscriptionIdsOrNames?: string[]) => {\n const { currentEnv, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve webhooks list for env\n const [webhooksErr, webhooks] =\n await contensis.subscriptions.webhooks.GetSubscriptions();\n\n const filteredResults = subscriptionIdsOrNames?.length\n ? webhooks?.filter(\n w =>\n subscriptionIdsOrNames?.some(idname =>\n w.name?.toLowerCase().includes(idname.toLowerCase())\n ) ||\n subscriptionIdsOrNames?.some(\n id => id.toLowerCase() === w.id.toLowerCase()\n )\n )\n : webhooks;\n\n if (Array.isArray(filteredResults)) {\n log.success(messages.webhooks.list(currentEnv));\n if (!webhooks?.length) log.warning(messages.webhooks.noneExist());\n else {\n this.HandleFormattingAndOutput(filteredResults, () => {\n // print the keys to console\n for (const {\n id,\n description,\n method,\n name,\n version,\n url,\n enabled,\n topics,\n templates,\n headers,\n } of filteredResults) {\n console.log(\n log.infoText(\n ` ${chalk.bold.white`- ${name}`} ${id} [${(\n version.modified || version.created\n )\n .toString()\n .substring(0, 10)} ${\n version.modifiedBy || version.createdBy\n }]`\n )\n );\n if (description) console.log(log.infoText` ${description}`);\n console.log(` ${log.infoText`[${method}]`} ${url}`);\n if (headers && Object.keys(headers).length) {\n console.log(` ${log.infoText`headers`}:`);\n\n for (const [key, { value, secret }] of Object.entries(headers))\n console.log(\n ` ${chalk.bold.gray(key)}: ${secret ? '\uD83E\uDD10' : value}`\n );\n }\n if (topics?.length)\n if (topics?.length === 1)\n console.log(\n ` ${log.infoText`topics`}: ${topics\n .map(t => JSON.stringify(t))\n .join(' ')\n .replaceAll('\"', '')\n .replaceAll(',', ' ')\n .replaceAll('{', '')\n .replaceAll('}', '')}`\n );\n else {\n console.log(` ${log.infoText`topics`}:`);\n log.objectRecurse(topics, 1, ' ');\n }\n if (templates && Object.keys(templates).length)\n console.log(\n ` ${log.infoText`templates`}: ${Object.keys(\n templates\n ).join(' ')}`\n );\n if (enabled === false)\n console.log(` ${log.infoText`enabled`}: ${enabled}`);\n }\n });\n }\n }\n\n if (webhooksErr) {\n log.error(messages.webhooks.noList(currentEnv));\n log.error(jsonFormatter(webhooksErr));\n }\n }\n };\n\n PrintBlocks = async () => {\n const { currentEnv, env, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve blocks list for env\n const [err, blocks] = await contensis.blocks.GetBlocks();\n\n if (Array.isArray(blocks)) {\n this.HandleFormattingAndOutput(blocks, () => {\n // print the blocks to console\n log.success(messages.blocks.list(currentEnv, env.currentProject));\n for (const {\n id,\n description,\n branches,\n liveVersion,\n madeLive,\n versionsSinceLive,\n } of blocks) {\n console.log(\n ` - ${id}${description ? ` (${description})` : ''}${\n madeLive\n ? ` [${madeLive.toString().substring(0, 10)} v${liveVersion}]`\n : ''\n }${\n versionsSinceLive\n ? log.warningText(` +${versionsSinceLive}`)\n : ''\n }`\n );\n for (const branch of branches)\n console.log(\n log.infoText(` [${branch.id}]: ${branch.status}`)\n );\n }\n });\n }\n\n if (err) {\n log.error(messages.blocks.noList(currentEnv));\n log.error(jsonFormatter(err));\n }\n }\n };\n\n PrintBlockVersions = async (\n blockId: string,\n branch: string,\n version: string\n ) => {\n const { currentEnv, env, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve block version\n const [err, blocks] = await contensis.blocks.GetBlockVersions(\n blockId,\n branch,\n version\n );\n\n if (blocks) {\n this.HandleFormattingAndOutput(blocks, () => {\n // print the version detail to console\n log.success(\n messages.blocks.get(blockId, currentEnv, env.currentProject)\n );\n for (const block of blocks)\n printBlockVersion(\n this,\n block,\n !version\n ? {\n showImage: false,\n showSource: true,\n showStaticPaths: false,\n showStatus: false,\n }\n : undefined\n );\n });\n }\n\n if (err) {\n log.error(messages.blocks.noList(currentEnv, env.currentProject));\n log.error(jsonFormatter(err));\n }\n }\n };\n\n PushBlock = async (block: PushBlockParams) => {\n const { currentEnv, env, log, messages } = this;\n\n // Output request to console\n log.info(\n messages.blocks.tryPush(\n block.id,\n block.source.branch,\n currentEnv,\n env.currentProject\n )\n );\n console.log(jsonFormatter(block));\n\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Push new block version\n const [err, blockVersion] = await contensis.blocks.PushBlockVersion(\n block\n );\n if (!err) {\n log.success(\n messages.blocks.pushed(\n block.id,\n block.source.branch,\n currentEnv,\n env.currentProject\n )\n );\n }\n if (blockVersion) {\n this.HandleFormattingAndOutput(blockVersion, () => {\n // print the version detail to console\n printBlockVersion(this, blockVersion);\n });\n }\n if (err)\n throw new Error(\n messages.blocks.failedPush(block.id, currentEnv, env.currentProject)\n );\n } else {\n throw new Error(\n messages.blocks.failedPush(block.id, currentEnv, env.currentProject)\n );\n }\n };\n\n GetLatestBlockVersion = async (\n blockId: string,\n branch = 'default'\n ): Promise<[AppError | null, string | undefined]> => {\n const { contensis, log, messages } = this;\n\n // Look for block versions pushed to \"default\" branch\n const [getErr, blockVersions] =\n (await contensis?.blocks.GetBlockVersions(blockId, branch)) || [];\n\n if (getErr) {\n return [getErr, undefined];\n }\n\n // Parse versionNo from response\n let blockVersionNo = 'latest';\n // The first blockVersion should be the latest one\n try {\n blockVersionNo = `${blockVersions?.[0]?.version.versionNo}`;\n\n if (!Number.isNaN(blockVersionNo) && Number(blockVersionNo) > 0)\n // Is a valid versionNo\n return [null, blockVersionNo];\n else throw new Error(`'${blockVersionNo}' is not a valid version number`);\n } catch (parseVersionEx: any) {\n // Catch parsing errors in case of an unexpected response\n log.info(\n `Request for blockId: ${blockId}, branch: ${branch}, version: latest`\n );\n log.info(\n `Get block versions response was: ${tryStringify(blockVersions)}`\n );\n log.error(messages.blocks.failedParsingVersion());\n return [parseVersionEx, undefined];\n }\n };\n\n ExecuteBlockAction = async (\n action: BlockActionType,\n blockId: string,\n version = 'latest'\n ) => {\n const { currentEnv, env, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n let actionOnBlockVersion = version;\n\n // If action is release and version is latest, find the latest version number\n if (action === 'release' && version === 'latest') {\n const [getErr, blockVersion] = await this.GetLatestBlockVersion(\n blockId\n );\n\n if (getErr) {\n // Log error getting latest block version no\n // and throw the error message so the process can exit with a failure\n throw new Error(\n `${messages.blocks.noList(\n currentEnv,\n env.currentProject\n )} (${getErr})`\n );\n } else if (blockVersion) {\n actionOnBlockVersion = blockVersion;\n }\n }\n\n // Execute block action\n const [err, blockVersion] = await contensis.blocks.BlockAction(\n blockId,\n action,\n actionOnBlockVersion\n );\n\n if (blockVersion) {\n this.HandleFormattingAndOutput(blockVersion, () => {\n // print the version detail to console\n log.success(\n messages.blocks.actionComplete(\n action,\n blockId,\n currentEnv,\n env.currentProject\n )\n );\n printBlockVersion(this, blockVersion);\n });\n }\n\n if (err) {\n log.error(jsonFormatter(err));\n throw new Error(\n messages.blocks.actionFailed(\n action,\n blockId,\n currentEnv,\n env.currentProject\n )\n );\n }\n }\n };\n\n PrintBlockLogs = async (\n blockId: string,\n branch: string,\n version: string,\n dataCenter: 'hq' | 'manchester' | 'london',\n follow = false\n ) => {\n const { currentEnv, env, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve block logs\n log.success(\n messages.blocks.getLogs(blockId, branch, currentEnv, env.currentProject)\n );\n\n const [err, blockLogs] = await contensis.blocks.GetBlockLogs({\n blockId,\n branchId: branch,\n version,\n dataCenter,\n });\n\n if (err) {\n log.error(\n messages.blocks.failedGetLogs(blockId, currentEnv, env.currentProject)\n );\n log.error(jsonFormatter(err));\n } else if (blockLogs) {\n const removeTrailingNewline = (logs: string) =>\n logs.endsWith('\\n') ? logs.slice(0, logs.length - 1) : logs;\n const renderLogs = removeTrailingNewline(blockLogs);\n\n this.HandleFormattingAndOutput(renderLogs, () => {\n // print the logs to console\n console.log(\n ` - ${blockId} ${branch} ${\n Number(version) ? `v${version}` : version\n } [${dataCenter}]`\n );\n log.line();\n console.log(log.infoText(renderLogs));\n });\n\n // Code for the `--follow` options\n let following = follow;\n let alreadyShown = blockLogs;\n let needsNewLine = false;\n let counter = 0;\n\n // remove existing listeners and add them back afterwards\n const listeners = process.listeners('SIGINT');\n\n process.removeAllListeners('SIGINT');\n // add listener to update following to false and break out\n process.on('SIGINT', () => {\n Logger.warning(\n messages.blocks.stopFollow(blockId, currentEnv, env.currentProject)\n );\n stopFollowing();\n });\n\n let delay = promiseDelay(5 * 1000, null);\n const stopFollowing = () => {\n following = false;\n delay.cancel();\n\n // Add back the listeners we removed previously\n process.removeAllListeners('SIGINT');\n for (const listener of listeners)\n process.addListener('SIGINT', listener);\n };\n\n while (following) {\n if (counter++ > 300) {\n Logger.warning(\n messages.blocks.timeoutFollow(\n blockId,\n currentEnv,\n env.currentProject\n )\n );\n stopFollowing();\n }\n\n // wait n. seconds then poll for logs again\n await delay.wait();\n\n const [lastErr, lastLogs] = following\n ? await contensis.blocks.GetBlockLogs({\n blockId,\n branchId: branch,\n version,\n dataCenter,\n })\n : [null, null];\n\n if (lastLogs) {\n // Find the difference and output it next\n const difference = diffLogStrings(lastLogs, alreadyShown);\n if (difference) {\n if (needsNewLine) {\n console.log('');\n }\n // Take the trailing newline off of the logged output to\n // avoid blank lines inbetween logs fetched sequentially\n const render = removeTrailingNewline(difference);\n console.log(log.infoText(render));\n\n // Add what we've just rendered to already shown \"cache\"\n alreadyShown += `${render}\\n`;\n needsNewLine = false;\n } else {\n // If no difference output a dot\n process.stdout.write('.');\n needsNewLine = true;\n }\n } else if (lastErr) {\n // If error output an x\n process.stdout.write('x');\n needsNewLine = true;\n }\n }\n }\n }\n };\n\n PrintProxies = async (proxyId?: string) => {\n const { currentEnv, env, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve proxies list for env\n const [err, proxies] = await contensis.proxies.GetProxies(proxyId);\n\n if (Array.isArray(proxies)) {\n this.HandleFormattingAndOutput(proxies, () => {\n // print the proxies to console\n log.success(messages.proxies.list(currentEnv, env.currentProject));\n for (const { id, name, description, endpoints, version } of proxies) {\n console.log(\n ` - ${name} [${\n version.versionNo\n }] ${id} ${log.infoText`${description}`}`\n );\n for (const [language, endpoint] of Object.entries(endpoints))\n console.log(\n ` - ${log.infoText`language: ${language}\n server: ${endpoint.server}\n headers.host: ${endpoint.headers.host}\n ssl: ${endpoint.ssl}`}`\n );\n }\n });\n }\n\n if (err) {\n log.error(messages.proxies.noList(currentEnv, env.currentProject));\n log.error(jsonFormatter(err));\n }\n }\n };\n\n PrintRenderers = async (rendererId?: string) => {\n const { currentEnv, env, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Retrieve renderers list for env\n const [err, renderers] = await contensis.renderers.GetRenderers(\n rendererId\n );\n\n if (Array.isArray(renderers)) {\n this.HandleFormattingAndOutput(renderers, () => {\n // print the renderers to console\n log.success(messages.renderers.list(currentEnv, env.currentProject));\n for (const {\n id,\n description,\n assignedContentTypes,\n rules,\n version,\n } of renderers) {\n console.log(\n ` - ${id} [${version.versionNo}] ${log.infoText`${description}`}`\n );\n if (assignedContentTypes?.length)\n console.log(\n log.infoText` assignedContentTypes: ${assignedContentTypes.join(\n ', '\n )}`\n );\n for (const rule of rules)\n if (rule.return)\n console.log(\n log.infoText` ${\n rule.return.endpointId ? 'endpointId' : 'blockId'\n }: ${rule.return.endpointId || rule.return.blockId}`\n );\n }\n });\n }\n\n if (err) {\n log.error(messages.renderers.noList(currentEnv, env.currentProject));\n log.error(jsonFormatter(err));\n }\n }\n };\n HandleFormattingAndOutput = <T>(obj: T, logFn: (obj: T) => void) => {\n const { format, log, messages, output } = this;\n if (!format) {\n // print the object to console\n logFn(obj);\n } else if (format === 'csv') {\n log.raw('');\n log.raw(log.infoText(csvFormatter(obj)));\n } else if (format === 'xml') {\n log.raw('');\n log.raw(log.infoText(xmlFormatter(obj)));\n } else if (format === 'json') {\n log.raw('');\n log.raw(log.infoText(jsonFormatter(obj)));\n }\n log.raw('');\n\n if (output) {\n let writeString = '';\n const isText = !tryParse(obj) && typeof obj === 'string';\n if (format === 'csv') {\n writeString = csvFormatter(obj as any);\n } else if (format === 'xml') {\n writeString = xmlFormatter(obj as any);\n } else writeString = isText ? (obj as string) : jsonFormatter(obj);\n // write output to file\n if (writeString) {\n fs.writeFileSync(output, writeString);\n log.success(messages.app.fileOutput(isText ? 'text' : format, output));\n } else {\n log.info(messages.app.noFileOutput());\n }\n }\n };\n}\n\nexport const cliCommand = (\n commandArgs: string[],\n outputOpts: OutputOptions & IConnectOptions = {},\n contensisOpts: Partial<MigrateRequest> = {}\n) => {\n return new ContensisCli(['', '', ...commandArgs], outputOpts, contensisOpts);\n};\nexport default ContensisCli;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["SessionCacheProvider", "path", "to", "fetch", "CredentialProvider", "inquirer", "ContensisAuthService", "chalk", "components", "contentTypes", "url", "blockVersion", "fs"]
|
|
7
7
|
}
|
package/dist/shell.js
CHANGED
package/dist/shell.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/shell.ts"],
|
|
4
|
-
"sourcesContent": ["import figlet from 'figlet';\nimport inquirer from 'inquirer';\nimport inquirerPrompt from 'inquirer-command-prompt';\nimport commands from './commands';\nimport { LogMessages } from './localisation/en-GB';\nimport CredentialProvider from './providers/CredentialProvider';\nimport { appRootDir } from './providers/file-provider';\nimport ContensisCli, { cliCommand } from './services/ContensisCliService';\nimport { Logging } from './util';\nimport { logError, Logger } from './util/logger';\nimport { LIB_VERSION } from './version';\n\nclass ContensisShell {\n private currentEnvironment!: string;\n private emptyInputCounter: number = 0;\n private env!: EnvironmentCache;\n private firstStart = true;\n private userId: string = '';\n private log = Logger;\n private messages = LogMessages;\n\n private refreshEnvironment = () => {\n // Reload any persisted changes from the disk cache\n const {\n cache: { currentEnvironment = '', environments = {} },\n } = new ContensisCli([]);\n // console.log(`refreshing env w/${currentEnvironment}`);\n this.currentEnvironment = currentEnvironment;\n this.env = environments[currentEnvironment];\n\n // Reload logging here to support changing language\n Logging('en-GB').then(({ messages, Log }) => {\n this.log = Log;\n this.messages = messages;\n });\n };\n\n constructor() {\n this.refreshEnvironment();\n inquirerPrompt.setConfig({\n history: {\n save: true,\n folder: appRootDir,\n limit: 100,\n blacklist: ['quit'],\n },\n });\n\n const { log, messages } = this;\n\n figlet.text(\n messages.app.contensis(),\n {\n font: 'Block',\n horizontalLayout: 'default',\n verticalLayout: 'default',\n width: process.stdout.columns,\n whitespaceBreak: true,\n },\n (err, data) => {\n if (err) {\n log.error(messages.app.unknownError());\n console.dir(err);\n return;\n }\n console.log(log.successText(data));\n console.log(log.infoText(messages.app.startup(LIB_VERSION)));\n console.log(log.helpText(messages.app.help()));\n\n this.start().catch(ex => log.error(ex));\n }\n );\n }\n\n restart = async () => {\n this.firstStart = false;\n this.log.line(); // add a line so we can see where the shell has been restarted\n await this.start();\n };\n\n start = async () => {\n this.refreshEnvironment();\n this.userId = '';\n const { currentEnvironment, env, log, messages } = this;\n\n if (env?.lastUserId) {\n const [credsErr, credentials] = await new CredentialProvider(\n {\n userId: env.lastUserId,\n alias: currentEnvironment,\n },\n env.passwordFallback\n ).Init();\n if (credsErr && !credentials.current) {\n log.error(credsErr.message);\n }\n if (credentials.current) {\n if (this.firstStart) {\n const token = await cliCommand(['login', env.lastUserId]).Login(\n env.lastUserId,\n {\n promptPassword: false,\n silent: true,\n }\n );\n if (token) {\n this.userId = env.lastUserId;\n if (!env.currentProject) log.warning(messages.projects.tip());\n }\n this.firstStart = false;\n this.refreshEnvironment();\n } else {\n this.userId = env.lastUserId;\n }\n }\n }\n await this.contensisPrompt();\n };\n\n contensisPrompt = async (): Promise<any> => {\n const { currentEnvironment, env, log, messages, userId } = this;\n\n const availableCommands = [\n {\n filter: (str: string) => {\n return str.replace(/ \\[.*$/, '');\n },\n },\n 'connect',\n 'list envs',\n 'quit',\n ];\n\n if (currentEnvironment)\n availableCommands.push('login', 'list projects', 'set project');\n if (userId)\n availableCommands.push(\n 'create key',\n 'create project',\n 'create role',\n 'diff models',\n 'execute block action release',\n 'execute block action makelive',\n 'execute block action rollback',\n 'execute block action markasbroken',\n 'get block',\n 'get block logs',\n 'get contenttype',\n 'get component',\n 'get entries',\n 'get model',\n 'get project',\n 'get role',\n 'get version',\n 'get webhook',\n 'import contenttypes',\n 'import components',\n 'import entries',\n 'import models',\n 'list blocks',\n 'list contenttypes',\n 'list components',\n 'list keys',\n 'list models',\n 'list proxies',\n 'list renderers',\n 'list roles',\n 'list webhooks',\n 'push block',\n 'remove components',\n 'remove contenttypes',\n 'remove key',\n 'remove entries',\n 'remove role',\n 'set project name',\n 'set project description',\n 'set role name',\n 'set role description',\n 'set role assignments',\n 'set role enabled',\n 'set role permissions'\n );\n\n const prompt = inquirer.createPromptModule();\n prompt.registerPrompt('command', inquirerPrompt);\n return prompt([\n {\n type: 'command',\n name: 'cmd',\n autoCompletion: availableCommands.sort(),\n autocompletePrompt: log.infoText(messages.app.autocomplete()),\n message: `${userId ? `${userId}@` : ''}${currentEnvironment || ''}>`,\n context: 0,\n validate: (val: string) => {\n if (!val) this.emptyInputCounter++;\n if (this.emptyInputCounter > 1)\n console.log(this.log.infoText(this.messages.app.suggestions()));\n if (val) {\n this.emptyInputCounter = 0;\n return true;\n }\n },\n prefix: `${env?.currentProject || log.infoText('contensis')}`,\n short: true,\n },\n ])\n .then(async (answers: { cmd: string }) => {\n if (answers.cmd === 'quit') {\n this.quit();\n } else {\n try {\n if (answers.cmd) {\n const program = commands();\n await program.parseAsync(\n answers.cmd\n .match(/\"[^\"]+\"|[^\\s]+/g)\n ?.map(e => e.replace(/\"(.+)\"/, '$1')),\n {\n from: 'user',\n }\n );\n }\n } catch (ex: any) {\n const str = ex.toString();\n if (!str.includes('CommanderError'))\n logError(ex, `Shell ${ex.toString()}`);\n } finally {\n return this.contensisPrompt();\n }\n }\n })\n .catch((err: Error) => {\n log.error(err.message);\n this.quit();\n });\n };\n\n quit = (error?: Error) => {\n const { log, messages } = this;\n process.removeAllListeners('exit');\n\n if (error) {\n log.error(error.message);\n process.exit(1);\n } else {\n log.success(messages.app.quit());\n process.exitCode = 0;\n process.exit(0);\n }\n };\n}\n\nlet globalShell: ContensisShell;\n\nexport const shell = () => {\n // Return a benign function for shell().restart() when used in cli context\n // as some commands need to restart the shell to show an updated prompt\n // after successful connect / login / set project\n if (typeof process.argv?.[2] !== 'undefined')\n return { quit() {}, restart() {} } as any;\n if (!globalShell) globalShell = new ContensisShell();\n return globalShell;\n};\n\nprocess.on('uncaughtException', function (err) {\n // Handle the error safely\n console.log(err);\n});\n\nprocess.on('SIGINT', () => {\n console.log('catching SIGINT');\n shell().quit();\n});\n\nprocess.on('SIGTERM', () => {\n console.log('catching SIGTERM');\n shell().quit();\n});\n\nprocess.stdin.on('data', key => {\n if ((key as any) == '\\u0003') {\n console.log('');\n Logger.info(`[CTRL]+[C] detected, exiting shell...`);\n shell().quit();\n }\n});\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import figlet from 'figlet';\nimport inquirer from 'inquirer';\nimport inquirerPrompt from 'inquirer-command-prompt';\nimport commands from './commands';\nimport { LogMessages } from './localisation/en-GB';\nimport CredentialProvider from './providers/CredentialProvider';\nimport { appRootDir } from './providers/file-provider';\nimport ContensisCli, { cliCommand } from './services/ContensisCliService';\nimport { Logging } from './util';\nimport { logError, Logger } from './util/logger';\nimport { LIB_VERSION } from './version';\n\nclass ContensisShell {\n private currentEnvironment!: string;\n private emptyInputCounter: number = 0;\n private env!: EnvironmentCache;\n private firstStart = true;\n private userId: string = '';\n private log = Logger;\n private messages = LogMessages;\n\n private refreshEnvironment = () => {\n // Reload any persisted changes from the disk cache\n const {\n cache: { currentEnvironment = '', environments = {} },\n } = new ContensisCli([]);\n // console.log(`refreshing env w/${currentEnvironment}`);\n this.currentEnvironment = currentEnvironment;\n this.env = environments[currentEnvironment];\n\n // Reload logging here to support changing language\n Logging('en-GB').then(({ messages, Log }) => {\n this.log = Log;\n this.messages = messages;\n });\n };\n\n constructor() {\n this.refreshEnvironment();\n inquirerPrompt.setConfig({\n history: {\n save: true,\n folder: appRootDir,\n limit: 100,\n blacklist: ['quit'],\n },\n });\n\n const { log, messages } = this;\n\n figlet.text(\n messages.app.contensis(),\n {\n font: 'Block',\n horizontalLayout: 'default',\n verticalLayout: 'default',\n width: process.stdout.columns,\n whitespaceBreak: true,\n },\n (err, data) => {\n if (err) {\n log.error(messages.app.unknownError());\n console.dir(err);\n return;\n }\n console.log(log.successText(data));\n console.log(log.infoText(messages.app.startup(LIB_VERSION)));\n console.log(log.helpText(messages.app.help()));\n\n this.start().catch(ex => log.error(ex));\n }\n );\n }\n\n restart = async () => {\n this.firstStart = false;\n this.log.line(); // add a line so we can see where the shell has been restarted\n await this.start();\n };\n\n start = async () => {\n this.refreshEnvironment();\n this.userId = '';\n const { currentEnvironment, env, log, messages } = this;\n\n if (env?.lastUserId) {\n const [credsErr, credentials] = await new CredentialProvider(\n {\n userId: env.lastUserId,\n alias: currentEnvironment,\n },\n env.passwordFallback\n ).Init();\n if (credsErr && !credentials.current) {\n log.error(credsErr.message);\n }\n if (credentials.current) {\n if (this.firstStart) {\n const token = await cliCommand(['login', env.lastUserId]).Login(\n env.lastUserId,\n {\n promptPassword: false,\n silent: true,\n }\n );\n if (token) {\n this.userId = env.lastUserId;\n if (!env.currentProject) log.warning(messages.projects.tip());\n }\n this.firstStart = false;\n this.refreshEnvironment();\n } else {\n this.userId = env.lastUserId;\n }\n }\n }\n await this.contensisPrompt();\n };\n\n contensisPrompt = async (): Promise<any> => {\n const { currentEnvironment, env, log, messages, userId } = this;\n\n const availableCommands = [\n {\n filter: (str: string) => {\n return str.replace(/ \\[.*$/, '');\n },\n },\n 'connect',\n 'list envs',\n 'quit',\n ];\n\n if (currentEnvironment)\n availableCommands.push('login', 'list projects', 'set project');\n if (userId)\n availableCommands.push(\n 'create key',\n 'create project',\n 'create role',\n 'diff models',\n 'execute block action release',\n 'execute block action makelive',\n 'execute block action rollback',\n 'execute block action markasbroken',\n 'get block',\n 'get block logs',\n 'get contenttype',\n 'get component',\n 'get entries',\n 'get model',\n 'get project',\n 'get role',\n 'get token',\n 'get version',\n 'get webhook',\n 'import contenttypes',\n 'import components',\n 'import entries',\n 'import models',\n 'list blocks',\n 'list contenttypes',\n 'list components',\n 'list keys',\n 'list models',\n 'list proxies',\n 'list renderers',\n 'list roles',\n 'list webhooks',\n 'push block',\n 'remove components',\n 'remove contenttypes',\n 'remove key',\n 'remove entries',\n 'remove role',\n 'set project name',\n 'set project description',\n 'set role name',\n 'set role description',\n 'set role assignments',\n 'set role enabled',\n 'set role permissions'\n );\n\n const prompt = inquirer.createPromptModule();\n prompt.registerPrompt('command', inquirerPrompt);\n return prompt([\n {\n type: 'command',\n name: 'cmd',\n autoCompletion: availableCommands.sort(),\n autocompletePrompt: log.infoText(messages.app.autocomplete()),\n message: `${userId ? `${userId}@` : ''}${currentEnvironment || ''}>`,\n context: 0,\n validate: (val: string) => {\n if (!val) this.emptyInputCounter++;\n if (this.emptyInputCounter > 1)\n console.log(this.log.infoText(this.messages.app.suggestions()));\n if (val) {\n this.emptyInputCounter = 0;\n return true;\n }\n },\n prefix: `${env?.currentProject || log.infoText('contensis')}`,\n short: true,\n },\n ])\n .then(async (answers: { cmd: string }) => {\n if (answers.cmd === 'quit') {\n this.quit();\n } else {\n try {\n if (answers.cmd) {\n const program = commands();\n await program.parseAsync(\n answers.cmd\n .match(/\"[^\"]+\"|[^\\s]+/g)\n ?.map(e => e.replace(/\"(.+)\"/, '$1')),\n {\n from: 'user',\n }\n );\n }\n } catch (ex: any) {\n const str = ex.toString();\n if (!str.includes('CommanderError'))\n logError(ex, `Shell ${ex.toString()}`);\n } finally {\n return this.contensisPrompt();\n }\n }\n })\n .catch((err: Error) => {\n log.error(err.message);\n this.quit();\n });\n };\n\n quit = (error?: Error) => {\n const { log, messages } = this;\n process.removeAllListeners('exit');\n\n if (error) {\n log.error(error.message);\n process.exit(1);\n } else {\n log.success(messages.app.quit());\n process.exitCode = 0;\n process.exit(0);\n }\n };\n}\n\nlet globalShell: ContensisShell;\n\nexport const shell = () => {\n // Return a benign function for shell().restart() when used in cli context\n // as some commands need to restart the shell to show an updated prompt\n // after successful connect / login / set project\n if (typeof process.argv?.[2] !== 'undefined')\n return { quit() {}, restart() {} } as any;\n if (!globalShell) globalShell = new ContensisShell();\n return globalShell;\n};\n\nprocess.on('uncaughtException', function (err) {\n // Handle the error safely\n console.log(err);\n});\n\nprocess.on('SIGINT', () => {\n console.log('catching SIGINT');\n shell().quit();\n});\n\nprocess.on('SIGTERM', () => {\n console.log('catching SIGTERM');\n shell().quit();\n});\n\nprocess.stdin.on('data', key => {\n if ((key as any) == '\\u0003') {\n console.log('');\n Logger.info(`[CTRL]+[C] detected, exiting shell...`);\n shell().quit();\n }\n});\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;AACnB,sBAAqB;AACrB,qCAA2B;AAC3B,sBAAqB;AACrB,mBAA4B;AAC5B,gCAA+B;AAC/B,2BAA2B;AAC3B,iCAAyC;AACzC,kBAAwB;AACxB,oBAAiC;AACjC,qBAA4B;AAE5B,MAAM,eAAe;AAAA,EACX;AAAA,EACA,oBAA4B;AAAA,EAC5B;AAAA,EACA,aAAa;AAAA,EACb,SAAiB;AAAA,EACjB,MAAM;AAAA,EACN,WAAW;AAAA,EAEX,qBAAqB,MAAM;AAEjC,UAAM;AAAA,MACJ,OAAO,EAAE,qBAAqB,IAAI,eAAe,CAAC,EAAE;AAAA,IACtD,IAAI,IAAI,2BAAAA,QAAa,CAAC,CAAC;AAEvB,SAAK,qBAAqB;AAC1B,SAAK,MAAM,aAAa;AAGxB,6BAAQ,OAAO,EAAE,KAAK,CAAC,EAAE,UAAU,IAAI,MAAM;AAC3C,WAAK,MAAM;AACX,WAAK,WAAW;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,cAAc;AACZ,SAAK,mBAAmB;AACxB,mCAAAC,QAAe,UAAU;AAAA,MACvB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,WAAW,CAAC,MAAM;AAAA,MACpB;AAAA,IACF,CAAC;AAED,UAAM,EAAE,KAAK,SAAS,IAAI;AAE1B,kBAAAC,QAAO;AAAA,MACL,SAAS,IAAI,UAAU;AAAA,MACvB;AAAA,QACE,MAAM;AAAA,QACN,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,QAChB,OAAO,QAAQ,OAAO;AAAA,QACtB,iBAAiB;AAAA,MACnB;AAAA,MACA,CAAC,KAAK,SAAS;AACb,YAAI,KAAK;AACP,cAAI,MAAM,SAAS,IAAI,aAAa,CAAC;AACrC,kBAAQ,IAAI,GAAG;AACf;AAAA,QACF;AACA,gBAAQ,IAAI,IAAI,YAAY,IAAI,CAAC;AACjC,gBAAQ,IAAI,IAAI,SAAS,SAAS,IAAI,QAAQ,0BAAW,CAAC,CAAC;AAC3D,gBAAQ,IAAI,IAAI,SAAS,SAAS,IAAI,KAAK,CAAC,CAAC;AAE7C,aAAK,MAAM,EAAE,MAAM,QAAM,IAAI,MAAM,EAAE,CAAC;AAAA,MACxC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAAU,YAAY;AACpB,SAAK,aAAa;AAClB,SAAK,IAAI,KAAK;AACd,UAAM,KAAK,MAAM;AAAA,EACnB;AAAA,EAEA,QAAQ,YAAY;AAClB,SAAK,mBAAmB;AACxB,SAAK,SAAS;AACd,UAAM,EAAE,oBAAoB,KAAK,KAAK,SAAS,IAAI;AAEnD,QAAI,2BAAK,YAAY;AACnB,YAAM,CAAC,UAAU,WAAW,IAAI,MAAM,IAAI,0BAAAC;AAAA,QACxC;AAAA,UACE,QAAQ,IAAI;AAAA,UACZ,OAAO;AAAA,QACT;AAAA,QACA,IAAI;AAAA,MACN,EAAE,KAAK;AACP,UAAI,YAAY,CAAC,YAAY,SAAS;AACpC,YAAI,MAAM,SAAS,OAAO;AAAA,MAC5B;AACA,UAAI,YAAY,SAAS;AACvB,YAAI,KAAK,YAAY;AACnB,gBAAM,QAAQ,UAAM,uCAAW,CAAC,SAAS,IAAI,UAAU,CAAC,EAAE;AAAA,YACxD,IAAI;AAAA,YACJ;AAAA,cACE,gBAAgB;AAAA,cAChB,QAAQ;AAAA,YACV;AAAA,UACF;AACA,cAAI,OAAO;AACT,iBAAK,SAAS,IAAI;AAClB,gBAAI,CAAC,IAAI;AAAgB,kBAAI,QAAQ,SAAS,SAAS,IAAI,CAAC;AAAA,UAC9D;AACA,eAAK,aAAa;AAClB,eAAK,mBAAmB;AAAA,QAC1B,OAAO;AACL,eAAK,SAAS,IAAI;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AACA,UAAM,KAAK,gBAAgB;AAAA,EAC7B;AAAA,EAEA,kBAAkB,YAA0B;AAC1C,UAAM,EAAE,oBAAoB,KAAK,KAAK,UAAU,OAAO,IAAI;AAE3D,UAAM,oBAAoB;AAAA,MACxB;AAAA,QACE,QAAQ,CAAC,QAAgB;AACvB,iBAAO,IAAI,QAAQ,UAAU,EAAE;AAAA,QACjC;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,QAAI;AACF,wBAAkB,KAAK,SAAS,iBAAiB,aAAa;AAChE,QAAI;AACF,wBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEF,UAAM,SAAS,gBAAAC,QAAS,mBAAmB;AAC3C,WAAO,eAAe,WAAW,+BAAAH,OAAc;AAC/C,WAAO,OAAO;AAAA,MACZ;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,gBAAgB,kBAAkB,KAAK;AAAA,QACvC,oBAAoB,IAAI,SAAS,SAAS,IAAI,aAAa,CAAC;AAAA,QAC5D,SAAS,GAAG,SAAS,GAAG,YAAY,KAAK,sBAAsB;AAAA,QAC/D,SAAS;AAAA,QACT,UAAU,CAAC,QAAgB;AACzB,cAAI,CAAC;AAAK,iBAAK;AACf,cAAI,KAAK,oBAAoB;AAC3B,oBAAQ,IAAI,KAAK,IAAI,SAAS,KAAK,SAAS,IAAI,YAAY,CAAC,CAAC;AAChE,cAAI,KAAK;AACP,iBAAK,oBAAoB;AACzB,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA,QAAQ,IAAG,2BAAK,mBAAkB,IAAI,SAAS,WAAW;AAAA,QAC1D,OAAO;AAAA,MACT;AAAA,IACF,CAAC,EACE,KAAK,OAAO,YAA6B;AA/MhD;AAgNQ,UAAI,QAAQ,QAAQ,QAAQ;AAC1B,aAAK,KAAK;AAAA,MACZ,OAAO;AACL,YAAI;AACF,cAAI,QAAQ,KAAK;AACf,kBAAM,cAAU,gBAAAI,SAAS;AACzB,kBAAM,QAAQ;AAAA,eACZ,aAAQ,IACL,MAAM,iBAAiB,MAD1B,mBAEI,IAAI,OAAK,EAAE,QAAQ,UAAU,IAAI;AAAA,cACrC;AAAA,gBACE,MAAM;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAAA,QACF,SAAS,IAAP;AACA,gBAAM,MAAM,GAAG,SAAS;AACxB,cAAI,CAAC,IAAI,SAAS,gBAAgB;AAChC,wCAAS,IAAI,SAAS,GAAG,SAAS,GAAG;AAAA,QACzC,UAAE;AACA,iBAAO,KAAK,gBAAgB;AAAA,QAC9B;AAAA,MACF;AAAA,IACF,CAAC,EACA,MAAM,CAAC,QAAe;AACrB,UAAI,MAAM,IAAI,OAAO;AACrB,WAAK,KAAK;AAAA,IACZ,CAAC;AAAA,EACL;AAAA,EAEA,OAAO,CAAC,UAAkB;AACxB,UAAM,EAAE,KAAK,SAAS,IAAI;AAC1B,YAAQ,mBAAmB,MAAM;AAEjC,QAAI,OAAO;AACT,UAAI,MAAM,MAAM,OAAO;AACvB,cAAQ,KAAK,CAAC;AAAA,IAChB,OAAO;AACL,UAAI,QAAQ,SAAS,IAAI,KAAK,CAAC;AAC/B,cAAQ,WAAW;AACnB,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF;AAEA,IAAI;AAEG,MAAM,QAAQ,MAAM;AA/P3B;AAmQE,MAAI,SAAO,aAAQ,SAAR,mBAAe,QAAO;AAC/B,WAAO,EAAE,OAAO;AAAA,IAAC,GAAG,UAAU;AAAA,IAAC,EAAE;AACnC,MAAI,CAAC;AAAa,kBAAc,IAAI,eAAe;AACnD,SAAO;AACT;AAEA,QAAQ,GAAG,qBAAqB,SAAU,KAAK;AAE7C,UAAQ,IAAI,GAAG;AACjB,CAAC;AAED,QAAQ,GAAG,UAAU,MAAM;AACzB,UAAQ,IAAI,iBAAiB;AAC7B,QAAM,EAAE,KAAK;AACf,CAAC;AAED,QAAQ,GAAG,WAAW,MAAM;AAC1B,UAAQ,IAAI,kBAAkB;AAC9B,QAAM,EAAE,KAAK;AACf,CAAC;AAED,QAAQ,MAAM,GAAG,QAAQ,SAAO;AAC9B,MAAK,OAAe,KAAU;AAC5B,YAAQ,IAAI,EAAE;AACd,yBAAO,KAAK,uCAAuC;AACnD,UAAM,EAAE,KAAK;AAAA,EACf;AACF,CAAC;",
|
|
6
6
|
"names": ["ContensisCli", "inquirerPrompt", "figlet", "CredentialProvider", "inquirer", "commands"]
|
|
7
7
|
}
|
package/dist/version.js
CHANGED
|
@@ -21,7 +21,7 @@ __export(version_exports, {
|
|
|
21
21
|
LIB_VERSION: () => LIB_VERSION
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(version_exports);
|
|
24
|
-
const LIB_VERSION = "1.0.0-beta.
|
|
24
|
+
const LIB_VERSION = "1.0.0-beta.79";
|
|
25
25
|
// Annotate the CommonJS export names for ESM import in node:
|
|
26
26
|
0 && (module.exports = {
|
|
27
27
|
LIB_VERSION
|
package/dist/version.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/version.ts"],
|
|
4
|
-
"sourcesContent": ["export const LIB_VERSION = \"1.0.0-beta.
|
|
4
|
+
"sourcesContent": ["export const LIB_VERSION = \"1.0.0-beta.79\";\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,cAAc;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "contensis-cli",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.79",
|
|
4
4
|
"description": "A fully featured Contensis command line interface with a shell UI provides simple and intuitive ways to manage or profile your content in any NodeJS terminal.",
|
|
5
5
|
"repository": "https://github.com/contensis/node-cli",
|
|
6
6
|
"homepage": "https://github.com/contensis/node-cli/tree/main/packages/contensis-cli#readme",
|
package/src/commands/get.ts
CHANGED
|
@@ -25,6 +25,20 @@ Example call:
|
|
|
25
25
|
await cliCommand(['get', 'version'], opts).PrintContensisVersion();
|
|
26
26
|
});
|
|
27
27
|
|
|
28
|
+
program
|
|
29
|
+
.command('token')
|
|
30
|
+
.description('show a bearer token for the currently logged in user')
|
|
31
|
+
.addHelpText(
|
|
32
|
+
'after',
|
|
33
|
+
`
|
|
34
|
+
Example call:
|
|
35
|
+
> get token
|
|
36
|
+
`
|
|
37
|
+
)
|
|
38
|
+
.action(async opts => {
|
|
39
|
+
await cliCommand(['get', 'token'], opts).PrintBearerToken();
|
|
40
|
+
});
|
|
41
|
+
|
|
28
42
|
program
|
|
29
43
|
.command('project')
|
|
30
44
|
.description('get a project')
|
|
@@ -563,7 +563,7 @@ class ContensisCli {
|
|
|
563
563
|
const [projectsErr, projects] = await to(
|
|
564
564
|
contensis.projects.GetSourceProjects()
|
|
565
565
|
);
|
|
566
|
-
|
|
566
|
+
|
|
567
567
|
if (Array.isArray(projects)) {
|
|
568
568
|
// Print contensis version to console
|
|
569
569
|
this.HandleFormattingAndOutput(contensis.contensisVersion, () =>
|
|
@@ -578,6 +578,29 @@ class ContensisCli {
|
|
|
578
578
|
}
|
|
579
579
|
};
|
|
580
580
|
|
|
581
|
+
PrintBearerToken = async () => {
|
|
582
|
+
const { log, messages } = this;
|
|
583
|
+
const contensis = await this.ConnectContensis();
|
|
584
|
+
|
|
585
|
+
if (contensis) {
|
|
586
|
+
// Retrieve token for env
|
|
587
|
+
const [error, token] = await to(
|
|
588
|
+
contensis.content.sourceRepo.repo.BearerToken()
|
|
589
|
+
);
|
|
590
|
+
if (token) {
|
|
591
|
+
// Print bearer token to console
|
|
592
|
+
this.HandleFormattingAndOutput(token, () =>
|
|
593
|
+
log.raw(log.highlightText(token))
|
|
594
|
+
);
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
if (error) {
|
|
598
|
+
log.error(messages.projects.noList());
|
|
599
|
+
log.error(error.message);
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
};
|
|
603
|
+
|
|
581
604
|
PrintProjects = async () => {
|
|
582
605
|
const { currentProject, log, messages, session } = this;
|
|
583
606
|
const contensis = await this.ConnectContensis();
|
package/src/shell.ts
CHANGED
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const LIB_VERSION = "1.0.0-beta.
|
|
1
|
+
export const LIB_VERSION = "1.0.0-beta.79";
|