contensis-cli 1.0.0-beta.67 → 1.0.0-beta.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1181,11 +1181,9 @@ website t.durden@example-dev>
1181
1181
 
1182
1182
  ### Execute block actions
1183
1183
 
1184
- We can perform certain actions on a specific version of a block with the `execute block action` command
1184
+ We can perform certain actions on a specific version of a block with the `execute block action {type}` command
1185
1185
 
1186
- #### Release a block version
1187
-
1188
- To mark a block version as "released", first get the latest block version number
1186
+ To execute an action on a specific block version, first you can find the the latest block version number with `get block {block-id} {branch} latest` or leave out the `latest` argument to see a short list of recent versions.
1189
1187
 
1190
1188
  ```shell
1191
1189
  website t.durden@example-dev>get block contensis-website master latest
@@ -1215,12 +1213,16 @@ website t.durden@example-dev>get block contensis-website master latest
1215
1213
  website t.durden@example-dev>
1216
1214
  ```
1217
1215
 
1218
- Add the block version number to the `execute block action release {block-id} {version}` command
1216
+ Add the block version number to the `execute block action {type} {block-id} {version}` command - further examples are below
1217
+
1218
+ #### Release a block version
1219
+
1220
+ To mark a block version as "released"
1219
1221
 
1220
1222
  ```shell
1221
1223
 
1222
1224
  website t.durden@example-dev> execute block action release contensis-website 78
1223
- [cli] ✅ [example-dev] Released block contensis-website in project website
1225
+ [cli] ✅ [example-dev] Action release on contensis-website in project website requested successfully
1224
1226
  v78 contensis-website
1225
1227
  state: available
1226
1228
  released: [23/11/2022 01:42] n.flatley
@@ -1246,6 +1248,9 @@ website t.durden@example-dev> execute block action release contensis-website 78
1246
1248
  website t.durden@example-dev>
1247
1249
  ```
1248
1250
 
1251
+ > **Note**
1252
+ > you can leave out the `version` argument to release the last pushed version of the block
1253
+
1249
1254
  #### Make a block version live
1250
1255
 
1251
1256
  Follow the examples for [releasing a block version](#release-a-block-version) except target your command to this action
@@ -36,11 +36,13 @@ const makeExecuteCommand = () => {
36
36
  "<version>",
37
37
  "the block version to perform action with"
38
38
  );
39
- action.command("release").description("release a block version").addArgument(blockIdArg).addArgument(blockVersionArg).usage("<block-id> <version>").addHelpText(
39
+ action.command("release").description("release a block version").addArgument(blockIdArg).argument("[version]", blockVersionArg.description, "latest").usage("[block-id> <version]").addHelpText(
40
40
  "after",
41
41
  `
42
42
  Example call:
43
- > execute block action release contensis-app 3
43
+ > execute block action release contensis-app
44
+
45
+ Note: block actions are executed on blocks deployed from a "main" or "master" branch
44
46
  `
45
47
  ).action(async (blockId, version, opts) => {
46
48
  await (0, import_ContensisCliService.cliCommand)(
@@ -53,6 +55,8 @@ Example call:
53
55
  `
54
56
  Example call:
55
57
  > execute block action makelive contensis-app 3
58
+
59
+ Note: block actions are executed on blocks deployed from a "main" or "master" branch
56
60
  `
57
61
  ).action(async (blockId, version, opts) => {
58
62
  await (0, import_ContensisCliService.cliCommand)(
@@ -65,6 +69,8 @@ Example call:
65
69
  `
66
70
  Example call:
67
71
  > execute block action rollback contensis-app 3
72
+
73
+ Note: block actions are executed on blocks deployed from a "main" or "master" branch
68
74
  `
69
75
  ).action(async (blockId, version, opts) => {
70
76
  await (0, import_ContensisCliService.cliCommand)(
@@ -77,6 +83,8 @@ Example call:
77
83
  `
78
84
  Example call:
79
85
  > execute block action markasbroken contensis-app 3
86
+
87
+ Note: block actions are executed on blocks deployed from a "main" or "master" branch
80
88
  `
81
89
  ).action(async (blockId, version, opts) => {
82
90
  await (0, import_ContensisCliService.cliCommand)(
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/commands/execute.ts"],
4
- "sourcesContent": ["import { Argument, Command } from 'commander';\nimport { cliCommand } from '~/services/ContensisCliService';\n\nexport const makeExecuteCommand = () => {\n const execute = new Command()\n .command('execute')\n .description('execute block actions')\n .addHelpText('after', `\\n`)\n .showHelpAfterError(true)\n .exitOverride();\n\n const block = execute\n .command('block')\n .description('execute block command to invoke block actions');\n\n const action = block\n .command('action')\n .description('execute block action command to invoke block actions');\n\n const blockIdArg = new Argument(\n '<block-id>',\n 'the name of the block to perform action with'\n );\n const blockVersionArg = new Argument(\n '<version>',\n 'the block version to perform action with'\n );\n\n action\n .command('release')\n .description('release a block version')\n .addArgument(blockIdArg)\n .addArgument(blockVersionArg)\n .usage('<block-id> <version>')\n .addHelpText(\n 'after',\n `\nExample call:\n > execute block action release contensis-app 3\\n`\n )\n .action(async (blockId: string, version: string, opts) => {\n await cliCommand(\n ['execute', 'block', 'action', 'release', blockId],\n opts\n ).ExecuteBlockAction('release', blockId, version);\n });\n\n action\n .command('makelive')\n .description('make a block version live')\n .addArgument(blockIdArg)\n .addArgument(blockVersionArg)\n .usage('<block-id> <version>')\n .addHelpText(\n 'after',\n `\nExample call:\n > execute block action makelive contensis-app 3\\n`\n )\n .action(async (blockId: string, version: string, opts) => {\n await cliCommand(\n ['execute', 'block', 'action', 'makelive', blockId],\n opts\n ).ExecuteBlockAction('makeLive', blockId, version);\n });\n\n action\n .command('rollback')\n .description('rollback a live block version to last live version')\n .addArgument(blockIdArg)\n .addArgument(blockVersionArg)\n .usage('<block-id> <version>')\n .addHelpText(\n 'after',\n `\nExample call:\n > execute block action rollback contensis-app 3\\n`\n )\n .action(async (blockId: string, version: string, opts) => {\n await cliCommand(\n ['execute', 'block', 'action', 'rollback', blockId],\n opts\n ).ExecuteBlockAction('rollback', blockId, version);\n });\n\n action\n .command('markasbroken')\n .description('mark a block version as broken')\n .addArgument(blockIdArg)\n .addArgument(blockVersionArg)\n .usage('<block-id> <version>')\n .addHelpText(\n 'after',\n `\nExample call:\n > execute block action markasbroken contensis-app 3\\n`\n )\n .action(async (blockId: string, version: string, opts) => {\n await cliCommand(\n ['execute', 'block', 'action', 'markasbroken', blockId],\n opts\n ).ExecuteBlockAction('markAsBroken', blockId, version);\n });\n\n return execute;\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAkC;AAClC,iCAA2B;AAEpB,MAAM,qBAAqB,MAAM;AACtC,QAAM,UAAU,IAAI,yBAAQ,EACzB,QAAQ,SAAS,EACjB,YAAY,uBAAuB,EACnC,YAAY,SAAS;AAAA,CAAI,EACzB,mBAAmB,IAAI,EACvB,aAAa;AAEhB,QAAM,QAAQ,QACX,QAAQ,OAAO,EACf,YAAY,+CAA+C;AAE9D,QAAM,SAAS,MACZ,QAAQ,QAAQ,EAChB,YAAY,sDAAsD;AAErE,QAAM,aAAa,IAAI;AAAA,IACrB;AAAA,IACA;AAAA,EACF;AACA,QAAM,kBAAkB,IAAI;AAAA,IAC1B;AAAA,IACA;AAAA,EACF;AAEA,SACG,QAAQ,SAAS,EACjB,YAAY,yBAAyB,EACrC,YAAY,UAAU,EACtB,YAAY,eAAe,EAC3B,MAAM,sBAAsB,EAC5B;AAAA,IACC;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,EAGF,EACC,OAAO,OAAO,SAAiB,SAAiB,SAAS;AACxD,cAAM;AAAA,MACJ,CAAC,WAAW,SAAS,UAAU,WAAW,OAAO;AAAA,MACjD;AAAA,IACF,EAAE,mBAAmB,WAAW,SAAS,OAAO;AAAA,EAClD,CAAC;AAEH,SACG,QAAQ,UAAU,EAClB,YAAY,2BAA2B,EACvC,YAAY,UAAU,EACtB,YAAY,eAAe,EAC3B,MAAM,sBAAsB,EAC5B;AAAA,IACC;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,EAGF,EACC,OAAO,OAAO,SAAiB,SAAiB,SAAS;AACxD,cAAM;AAAA,MACJ,CAAC,WAAW,SAAS,UAAU,YAAY,OAAO;AAAA,MAClD;AAAA,IACF,EAAE,mBAAmB,YAAY,SAAS,OAAO;AAAA,EACnD,CAAC;AAEH,SACG,QAAQ,UAAU,EAClB,YAAY,oDAAoD,EAChE,YAAY,UAAU,EACtB,YAAY,eAAe,EAC3B,MAAM,sBAAsB,EAC5B;AAAA,IACC;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,EAGF,EACC,OAAO,OAAO,SAAiB,SAAiB,SAAS;AACxD,cAAM;AAAA,MACJ,CAAC,WAAW,SAAS,UAAU,YAAY,OAAO;AAAA,MAClD;AAAA,IACF,EAAE,mBAAmB,YAAY,SAAS,OAAO;AAAA,EACnD,CAAC;AAEH,SACG,QAAQ,cAAc,EACtB,YAAY,gCAAgC,EAC5C,YAAY,UAAU,EACtB,YAAY,eAAe,EAC3B,MAAM,sBAAsB,EAC5B;AAAA,IACC;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,EAGF,EACC,OAAO,OAAO,SAAiB,SAAiB,SAAS;AACxD,cAAM;AAAA,MACJ,CAAC,WAAW,SAAS,UAAU,gBAAgB,OAAO;AAAA,MACtD;AAAA,IACF,EAAE,mBAAmB,gBAAgB,SAAS,OAAO;AAAA,EACvD,CAAC;AAEH,SAAO;AACT;",
4
+ "sourcesContent": ["import { Argument, Command } from 'commander';\nimport { cliCommand } from '~/services/ContensisCliService';\n\nexport const makeExecuteCommand = () => {\n const execute = new Command()\n .command('execute')\n .description('execute block actions')\n .addHelpText('after', `\\n`)\n .showHelpAfterError(true)\n .exitOverride();\n\n const block = execute\n .command('block')\n .description('execute block command to invoke block actions');\n\n const action = block\n .command('action')\n .description('execute block action command to invoke block actions');\n\n const blockIdArg = new Argument(\n '<block-id>',\n 'the name of the block to perform action with'\n );\n const blockVersionArg = new Argument(\n '<version>',\n 'the block version to perform action with'\n );\n\n action\n .command('release')\n .description('release a block version')\n .addArgument(blockIdArg)\n .argument('[version]', blockVersionArg.description, 'latest')\n .usage('[block-id> <version]')\n .addHelpText(\n 'after',\n `\nExample call:\n > execute block action release contensis-app\n\nNote: block actions are executed on blocks deployed from a \"main\" or \"master\" branch\\n`\n )\n .action(async (blockId: string, version: string, opts) => {\n await cliCommand(\n ['execute', 'block', 'action', 'release', blockId],\n opts\n ).ExecuteBlockAction('release', blockId, version);\n });\n\n action\n .command('makelive')\n .description('make a block version live')\n .addArgument(blockIdArg)\n .addArgument(blockVersionArg)\n .usage('<block-id> <version>')\n .addHelpText(\n 'after',\n `\nExample call:\n > execute block action makelive contensis-app 3\n\nNote: block actions are executed on blocks deployed from a \"main\" or \"master\" branch\\n`\n )\n .action(async (blockId: string, version: string, opts) => {\n await cliCommand(\n ['execute', 'block', 'action', 'makelive', blockId],\n opts\n ).ExecuteBlockAction('makeLive', blockId, version);\n });\n\n action\n .command('rollback')\n .description('rollback a live block version to last live version')\n .addArgument(blockIdArg)\n .addArgument(blockVersionArg)\n .usage('<block-id> <version>')\n .addHelpText(\n 'after',\n `\nExample call:\n > execute block action rollback contensis-app 3\n\nNote: block actions are executed on blocks deployed from a \"main\" or \"master\" branch\\n`\n )\n .action(async (blockId: string, version: string, opts) => {\n await cliCommand(\n ['execute', 'block', 'action', 'rollback', blockId],\n opts\n ).ExecuteBlockAction('rollback', blockId, version);\n });\n\n action\n .command('markasbroken')\n .description('mark a block version as broken')\n .addArgument(blockIdArg)\n .addArgument(blockVersionArg)\n .usage('<block-id> <version>')\n .addHelpText(\n 'after',\n `\nExample call:\n > execute block action markasbroken contensis-app 3\n\nNote: block actions are executed on blocks deployed from a \"main\" or \"master\" branch\\n`\n )\n .action(async (blockId: string, version: string, opts) => {\n await cliCommand(\n ['execute', 'block', 'action', 'markasbroken', blockId],\n opts\n ).ExecuteBlockAction('markAsBroken', blockId, version);\n });\n\n return execute;\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAkC;AAClC,iCAA2B;AAEpB,MAAM,qBAAqB,MAAM;AACtC,QAAM,UAAU,IAAI,yBAAQ,EACzB,QAAQ,SAAS,EACjB,YAAY,uBAAuB,EACnC,YAAY,SAAS;AAAA,CAAI,EACzB,mBAAmB,IAAI,EACvB,aAAa;AAEhB,QAAM,QAAQ,QACX,QAAQ,OAAO,EACf,YAAY,+CAA+C;AAE9D,QAAM,SAAS,MACZ,QAAQ,QAAQ,EAChB,YAAY,sDAAsD;AAErE,QAAM,aAAa,IAAI;AAAA,IACrB;AAAA,IACA;AAAA,EACF;AACA,QAAM,kBAAkB,IAAI;AAAA,IAC1B;AAAA,IACA;AAAA,EACF;AAEA,SACG,QAAQ,SAAS,EACjB,YAAY,yBAAyB,EACrC,YAAY,UAAU,EACtB,SAAS,aAAa,gBAAgB,aAAa,QAAQ,EAC3D,MAAM,sBAAsB,EAC5B;AAAA,IACC;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKF,EACC,OAAO,OAAO,SAAiB,SAAiB,SAAS;AACxD,cAAM;AAAA,MACJ,CAAC,WAAW,SAAS,UAAU,WAAW,OAAO;AAAA,MACjD;AAAA,IACF,EAAE,mBAAmB,WAAW,SAAS,OAAO;AAAA,EAClD,CAAC;AAEH,SACG,QAAQ,UAAU,EAClB,YAAY,2BAA2B,EACvC,YAAY,UAAU,EACtB,YAAY,eAAe,EAC3B,MAAM,sBAAsB,EAC5B;AAAA,IACC;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKF,EACC,OAAO,OAAO,SAAiB,SAAiB,SAAS;AACxD,cAAM;AAAA,MACJ,CAAC,WAAW,SAAS,UAAU,YAAY,OAAO;AAAA,MAClD;AAAA,IACF,EAAE,mBAAmB,YAAY,SAAS,OAAO;AAAA,EACnD,CAAC;AAEH,SACG,QAAQ,UAAU,EAClB,YAAY,oDAAoD,EAChE,YAAY,UAAU,EACtB,YAAY,eAAe,EAC3B,MAAM,sBAAsB,EAC5B;AAAA,IACC;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKF,EACC,OAAO,OAAO,SAAiB,SAAiB,SAAS;AACxD,cAAM;AAAA,MACJ,CAAC,WAAW,SAAS,UAAU,YAAY,OAAO;AAAA,MAClD;AAAA,IACF,EAAE,mBAAmB,YAAY,SAAS,OAAO;AAAA,EACnD,CAAC;AAEH,SACG,QAAQ,cAAc,EACtB,YAAY,gCAAgC,EAC5C,YAAY,UAAU,EACtB,YAAY,eAAe,EAC3B,MAAM,sBAAsB,EAC5B;AAAA,IACC;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKF,EACC,OAAO,OAAO,SAAiB,SAAiB,SAAS;AACxD,cAAM;AAAA,MACJ,CAAC,WAAW,SAAS,UAAU,gBAAgB,OAAO;AAAA,MACtD;AAAA,IACF,EAAE,mBAAmB,gBAAgB,SAAS,OAAO;AAAA,EACvD,CAAC;AAEH,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -147,7 +147,7 @@ Example call:
147
147
  > get block contensis-website master latest
148
148
  `
149
149
  ).action(async (blockId, branch, version, opts) => {
150
- await (0, import_ContensisCliService.cliCommand)(["get", "block"], opts).PrintBlockVersions(
150
+ await (0, import_ContensisCliService.cliCommand)(["get", "block", blockId], opts).PrintBlockVersions(
151
151
  blockId,
152
152
  branch,
153
153
  version
@@ -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 { cliCommand } from '~/services/ContensisCliService';\nimport { 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 'main'\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 master latest\n`\n )\n .action(async (blockId: string, branch: string, version: string, opts) => {\n await cliCommand(['get', 'block'], 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 'main'\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 .usage('get block logs [blockId] [branch] [version] [dataCenter]')\n .addHelpText(\n 'after',\n `\nExample call:\n > get block logs contensis-website master\n > get block logs contensis-website master latest london\n`\n )\n .action(\n async (\n blockId: string,\n branch: string,\n version: string,\n dataCenter: 'hq' | 'manchester' | 'london',\n opts\n ) => {\n await cliCommand(['get', 'block', 'logs'], opts).PrintBlockLogs(\n blockId,\n branch,\n version,\n dataCenter\n );\n }\n );\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 { cliCommand } from '~/services/ContensisCliService';\nimport { 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 'main'\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 master 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 'main'\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 .usage('get block logs [blockId] [branch] [version] [dataCenter]')\n .addHelpText(\n 'after',\n `\nExample call:\n > get block logs contensis-website master\n > get block logs contensis-website master latest london\n`\n )\n .action(\n async (\n blockId: string,\n branch: string,\n version: string,\n dataCenter: 'hq' | 'manchester' | 'london',\n opts\n ) => {\n await cliCommand(['get', 'block', 'logs'], opts).PrintBlockLogs(\n blockId,\n branch,\n version,\n dataCenter\n );\n }\n );\n\n return program;\n};\n\nexport const get = makeGetCommand();\n"],
5
+ "mappings": "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",
6
6
  "names": ["dataCenter"]
7
7
  }
@@ -77,7 +77,7 @@ Example call:
77
77
  ...process.env
78
78
  };
79
79
  const blockRequest = (0, import_jsonpath_mapper.default)(mapSourceVars, {
80
- autoRelease: { $path: "release", $default: () => false },
80
+ release: { $path: "release", $default: () => false },
81
81
  id: ["blockId"],
82
82
  image: () => {
83
83
  const lastIndexOfColon = imageUri.lastIndexOf(":");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/commands/push.ts"],
4
- "sourcesContent": ["import { Command } from 'commander';\nimport mapJson from 'jsonpath-mapper';\nimport { PushBlockParams } from 'migratortron';\nimport { cliCommand } from '~/services/ContensisCliService';\n\nexport const makePushCommand = () => {\n const push = new Command()\n .command('push')\n .description('push command')\n .addHelpText('after', `\\n`)\n .showHelpAfterError(true)\n .exitOverride();\n\n push\n .command('block')\n .description('push a block')\n .argument('<block-id>', 'the name of the block to push to')\n .argument(\n '<image uri:tag>',\n 'the uri and tag of the container image to push as a block (tag default: latest)'\n )\n .argument('[branch]', 'the branch we are pushing to')\n .option(\n '-r, --release',\n 'whether to release the pushed block version',\n false\n )\n .option(\n '-cid, --commit-id <commitId>',\n 'the id of the source git commit for the supplied image uri'\n )\n .option(\n '-cmsg, --commit-message <commitMessage>',\n 'the git commit message for the supplied commit id'\n )\n .option(\n '-cdt, --commit-datetime <commitDateTime>',\n 'the timestamp of the source git commit for the supplied image uri'\n )\n .option(\n '-author, --author-email <authorEmail>',\n 'the git email address of the author of the source git commit'\n )\n .option(\n '-committer, --committer-email <committerEmail>',\n 'the git email address of the commiter of the source git commit'\n )\n .option(\n '-repo, --repository-url <repositoryUrl>',\n 'the url of the source repository for the supplied image uri'\n )\n .option(\n '-pr, --provider <sourceProvider>',\n 'the url of the source repository for the supplied image uri'\n )\n .usage('<block-id> <image uri> [branch] [options]')\n .addHelpText(\n 'after',\n `\nExample call:\n > push block contensis-app ghcr.io/contensis/contensis-app/app:build-4359 master --release\\n`\n )\n .action(async (blockId: string, imageUri: string, branch: string, opts) => {\n const cli = cliCommand(['push', 'block', blockId], opts);\n const mapSourceVars = {\n blockId,\n imageUri,\n branch,\n ...opts,\n ...process.env,\n };\n\n const blockRequest = mapJson(mapSourceVars, {\n autoRelease: { $path: 'release', $default: () => false },\n id: ['blockId'],\n image: () => {\n const lastIndexOfColon = imageUri.lastIndexOf(':');\n return {\n uri: imageUri.slice(0, lastIndexOfColon),\n tag: imageUri.slice(lastIndexOfColon + 1) || 'latest',\n };\n },\n projectId: () => cli.env.currentProject || '',\n source: {\n provider: {\n $path: ['provider'],\n $return: (provider: string, { GITHUB_ACTIONS, GITLAB_CI }) => {\n if (provider) return provider;\n if (GITHUB_ACTIONS) return 'Github';\n else if (GITLAB_CI) return 'GitlabSelfHosted';\n },\n },\n repositoryUrl: {\n $path: ['repositoryUrl', 'CI_PROJECT_URL', 'GITHUB_REPOSITORY'],\n $formatting: (url: string, { GITHUB_ACTIONS }) => {\n if (GITHUB_ACTIONS) url = `https://github.com/${url}`;\n\n if (url && !url.endsWith('.git')) return `${url}.git`;\n return url;\n },\n },\n branch: ['branch', 'CI_COMMIT_REF_NAME', 'GITHUB_REF_NAME'],\n commit: {\n id: ['commitId', 'CI_COMMIT_SHORT_SHA', 'GITHUB_SHA'],\n message: {\n $path: ['commitMessage', 'CI_COMMIT_MESSAGE'], // ${{ github.event.head_commit.message }}\n $formatting: (msg?: string) =>\n msg?.replace(/\\\\n/g, ' ').replace(/\\\\n/g, ' ').trim(),\n },\n dateTime: ['commitDatetime', 'CI_COMMIT_TIMESTAMP'], // ${{ github.event.head_commit.timestamp }}\n authorEmail: ['authorEmail', 'GITLAB_USER_EMAIL', 'GITHUB_ACTOR'], // ${{ github.event.head_commit.author.email }}\n committerEmail: [\n 'committerEmail',\n 'GITLAB_USER_EMAIL',\n 'GITHUB_TRIGGERING_ACTOR',\n ], // ${{ github.event.head_commit.committer.email }}\n },\n },\n }) as PushBlockParams;\n\n await cli.PushBlock(blockRequest);\n\n // console.log(process.env);\n });\n\n return push;\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Command } from 'commander';\nimport mapJson from 'jsonpath-mapper';\nimport { PushBlockParams } from 'migratortron';\nimport { cliCommand } from '~/services/ContensisCliService';\n\nexport const makePushCommand = () => {\n const push = new Command()\n .command('push')\n .description('push command')\n .addHelpText('after', `\\n`)\n .showHelpAfterError(true)\n .exitOverride();\n\n push\n .command('block')\n .description('push a block')\n .argument('<block-id>', 'the name of the block to push to')\n .argument(\n '<image uri:tag>',\n 'the uri and tag of the container image to push as a block (tag default: latest)'\n )\n .argument('[branch]', 'the branch we are pushing to')\n .option(\n '-r, --release',\n 'whether to release the pushed block version',\n false\n )\n .option(\n '-cid, --commit-id <commitId>',\n 'the id of the source git commit for the supplied image uri'\n )\n .option(\n '-cmsg, --commit-message <commitMessage>',\n 'the git commit message for the supplied commit id'\n )\n .option(\n '-cdt, --commit-datetime <commitDateTime>',\n 'the timestamp of the source git commit for the supplied image uri'\n )\n .option(\n '-author, --author-email <authorEmail>',\n 'the git email address of the author of the source git commit'\n )\n .option(\n '-committer, --committer-email <committerEmail>',\n 'the git email address of the commiter of the source git commit'\n )\n .option(\n '-repo, --repository-url <repositoryUrl>',\n 'the url of the source repository for the supplied image uri'\n )\n .option(\n '-pr, --provider <sourceProvider>',\n 'the url of the source repository for the supplied image uri'\n )\n .usage('<block-id> <image uri> [branch] [options]')\n .addHelpText(\n 'after',\n `\nExample call:\n > push block contensis-app ghcr.io/contensis/contensis-app/app:build-4359 master --release\\n`\n )\n .action(async (blockId: string, imageUri: string, branch: string, opts) => {\n const cli = cliCommand(['push', 'block', blockId], opts);\n const mapSourceVars = {\n blockId,\n imageUri,\n branch,\n ...opts,\n ...process.env,\n };\n\n const blockRequest = mapJson(mapSourceVars, {\n release: { $path: 'release', $default: () => false },\n id: ['blockId'],\n image: () => {\n const lastIndexOfColon = imageUri.lastIndexOf(':');\n return {\n uri: imageUri.slice(0, lastIndexOfColon),\n tag: imageUri.slice(lastIndexOfColon + 1) || 'latest',\n };\n },\n projectId: () => cli.env.currentProject || '',\n source: {\n provider: {\n $path: ['provider'],\n $return: (provider: string, { GITHUB_ACTIONS, GITLAB_CI }) => {\n if (provider) return provider;\n if (GITHUB_ACTIONS) return 'Github';\n else if (GITLAB_CI) return 'GitlabSelfHosted';\n },\n },\n repositoryUrl: {\n $path: ['repositoryUrl', 'CI_PROJECT_URL', 'GITHUB_REPOSITORY'],\n $formatting: (url: string, { GITHUB_ACTIONS }) => {\n if (GITHUB_ACTIONS) url = `https://github.com/${url}`;\n\n if (url && !url.endsWith('.git')) return `${url}.git`;\n return url;\n },\n },\n branch: ['branch', 'CI_COMMIT_REF_NAME', 'GITHUB_REF_NAME'],\n commit: {\n id: ['commitId', 'CI_COMMIT_SHORT_SHA', 'GITHUB_SHA'],\n message: {\n $path: ['commitMessage', 'CI_COMMIT_MESSAGE'], // ${{ github.event.head_commit.message }}\n $formatting: (msg?: string) =>\n msg?.replace(/\\\\n/g, ' ').replace(/\\\\n/g, ' ').trim(),\n },\n dateTime: ['commitDatetime', 'CI_COMMIT_TIMESTAMP'], // ${{ github.event.head_commit.timestamp }}\n authorEmail: ['authorEmail', 'GITLAB_USER_EMAIL', 'GITHUB_ACTOR'], // ${{ github.event.head_commit.author.email }}\n committerEmail: [\n 'committerEmail',\n 'GITLAB_USER_EMAIL',\n 'GITHUB_TRIGGERING_ACTOR',\n ], // ${{ github.event.head_commit.committer.email }}\n },\n },\n }) as PushBlockParams;\n\n await cli.PushBlock(blockRequest);\n\n // console.log(process.env);\n });\n\n return push;\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["mapJson"]
7
7
  }
@@ -241,14 +241,18 @@ ${import_logger.Logger.errorText(">>")} Available commands:`,
241
241
  failedPush: (id, env, projectId) => `[${env}] Unable to push block ${import_logger.Logger.highlightText(
242
242
  id
243
243
  )} in project ${projectId}`,
244
- actionComplete: (action, id, env, projectId) => `[${env}] Block action ${import_logger.Logger.highlightText(
244
+ latestVersion: (version, id, env, projectId) => `[${env}] Found latest block version ${import_logger.Logger.highlightText(
245
+ id
246
+ )} in project ${projectId} ${import_logger.Logger.highlightText(version)}`,
247
+ failedParsingVersion: () => `Could not parse ".[0].version.versionNo" from response`,
248
+ actionComplete: (action, id, env, projectId) => `[${env}] Action ${import_logger.Logger.highlightText(
245
249
  action
246
250
  )} on ${import_logger.Logger.highlightText(
247
251
  id
248
252
  )} in project ${projectId} requested successfully`,
249
- actionFailed: (action, id, env, projectId) => `[${env}] Problem executing action ${import_logger.Logger.highlightText(
250
- action
251
- )} on block ${import_logger.Logger.highlightText(id)} in project ${projectId}`,
253
+ actionFailed: (action, id, env, projectId) => `[${env}] Problem executing ${action} on block ${import_logger.Logger.highlightText(
254
+ id
255
+ )} in project ${projectId}`,
252
256
  deleted: (id, env, projectId) => `[${env}] Deleted block ${import_logger.Logger.highlightText(
253
257
  id
254
258
  )} in project ${projectId}`,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/localisation/en-GB.ts"],
4
- "sourcesContent": ["import {\n BlockActionType,\n BlockRunningStatus,\n MigrateModelsResult,\n MigrateStatus,\n} from 'migratortron';\nimport { Logger } from '~/util/logger';\n\nexport const LogMessages = {\n app: {\n contensis: () => 'Contensis',\n quit: () => `Goodbye \uD83D\uDC4B\\n`,\n startup: (version: string) =>\n `v${version} \u00A9 2001-${new Date().getFullYear()} Zengenti \uD83C\uDDEC\uD83C\uDDE7. \\n - Creators of Contensis and purveyors of other fine software\\n\\n\uD83D\uDC4B Welcome to the contensis-cli\\n`,\n help: () =>\n 'Press [CTRL]+[C] or type \"quit\" to return to your system shell\\nPress [TAB] for suggestions\\n',\n suggestions: () =>\n `\\n${Logger.errorText('>>')} Press [TAB] for suggestions\\n`,\n autocomplete: () => `\\n${Logger.errorText('>>')} Available commands:`,\n unknownError: () => `Something went wrong...`,\n fileOutput: (format = 'json', path?: string) =>\n `Output ${format} file: ${Logger.infoText(path)}\\n`,\n noFileOutput: () => `No output written\\n`,\n },\n command: {\n notKnown: (command: string) => `${command} is not known`,\n },\n envs: {\n found: (num: number) =>\n `environments store found containing ${num} environment${\n num === 1 ? '' : 's'\n }`,\n tip: () =>\n `Connect to a Contensis cloud instance using \"contensis connect {cms alias}\"`,\n },\n connect: {\n command: {\n name: () => 'connect',\n example: () => `Example call:\\n > connect example-dev`,\n },\n args: {\n alias: {\n name: () => '<alias>',\n description: () => 'the Contensis Cloud alias to connect with',\n },\n },\n noEnv: () => `Cannot connect - no environment alias specified`,\n unreachable: (url: string, status: number) =>\n `Cannot reach ${url}${status ? ` - status ${status}` : ''}`,\n connected: (env: string) => `Current environment set to \"${env}\"`,\n help: () =>\n `Connect to a Contensis cloud instance using \"contensis connect {cms alias}\"`,\n projects: () => `Available projects:`,\n noProjects: () => `Cannot retrieve projects list`,\n tip: () =>\n `Introduce yourself with \"login {username}\" or \"login {clientId} -s {secret}\" or by passing credentials as options with your command`,\n },\n login: {\n command: {\n name: () => 'login',\n usage: () => `<user/clientId> [password] [-s <sharedSecret>]`,\n example: () =>\n `Example call:\\n > login myuserid\\n -- or --\\n > login {clientId} -s {sharedSecret}`,\n },\n args: {\n user: {\n name: () => '<user/clientId>',\n description: () => 'the username to login with',\n },\n password: {\n name: () => '[password]',\n description: () =>\n 'the password to use to login with (optional/insecure)',\n },\n secret: {\n name: () => '-s --sharedSecret <sharedSecret>',\n description: () =>\n 'the shared secret to use when logging in with a client id',\n },\n },\n passwordPrompt: (env?: string, userId?: string) =>\n userId\n ? `Enter password for ${userId}@${env}:`\n : `Please enter a password`,\n failed: (env: string, userId: string) =>\n `Unable to login to ${env} as ${userId}`,\n success: (env: string, userId: string) =>\n `User ${userId} connected to ${env} successfully\\n`,\n insecurePassword: () =>\n `Could not connect to local keystore - your password could be stored unencrypted!`,\n noEnv: () => `No environment set, use \"contensis connect {alias}\" first`,\n noUserId: () => `No user id specified`,\n },\n projects: {\n list: () => `Available projects:`,\n noList: () => `Cannot retrieve projects list`,\n set: (projectId: string) =>\n `Current project is set to ${Logger.highlightText(projectId)}`,\n failedSet: (projectId: string) =>\n `Project ${Logger.highlightText(projectId)} not found`,\n tip: () =>\n `You need to set your current working project with \"set project {projectId}\"`,\n created: (env: string, id: string) =>\n `[${env}] Created project ${Logger.highlightText(id)}`,\n failedCreate: (env: string, id: string) =>\n `[${env}] Unable to create project ${Logger.highlightText(id)}`,\n updated: (env: string, id: string) =>\n `[${env}] Updated project ${Logger.highlightText(id)}`,\n failedUpdate: (env: string, id: string) =>\n `[${env}] Unable to update project ${Logger.highlightText(id)}`,\n },\n migrate: {\n models: {\n result: (\n status: keyof MigrateModelsResult['project']['contentTypes']\n ) => {\n switch (status) {\n case 'created':\n case 'updated':\n return Logger.successText;\n case 'errors':\n return Logger.errorText;\n default:\n return Logger.infoText;\n }\n },\n },\n status: (status: MigrateStatus) => {\n switch (status) {\n case 'no change':\n return Logger.successText;\n case 'create':\n case 'two-pass':\n case 'update':\n case 'delete':\n return Logger.warningText;\n case 'error':\n case 'not found':\n return Logger.errorText;\n default:\n return Logger.infoText;\n }\n },\n },\n models: {\n list: (projectId: string) =>\n `Content models in ${Logger.highlightText(projectId)}:`,\n noList: (projectId: string) =>\n `[${projectId}] Cannot retrieve content models`,\n get: (projectId: string, id: string) =>\n `[${projectId}] Content models ${Logger.infoText(`[ ${id} ]`)}`,\n failedGet: (projectId: string, id: string) =>\n `[${projectId}] Unable to get content models ${Logger.highlightText(id)}`,\n },\n contenttypes: {\n list: (projectId: string) =>\n `Content types in ${Logger.highlightText(projectId)}:`,\n get: (projectId: string, id: string) =>\n `[${projectId}] Content type ${Logger.highlightText(id)}`,\n failedGet: (projectId: string, id: string) =>\n `[${projectId}] Unable to get content type ${Logger.highlightText(id)}`,\n created: (projectId: string, id: string, status?: string) =>\n `[${projectId}] Content type ${status}d ${Logger.highlightText(id)}`,\n removed: (env: string, id: string, commit: boolean) =>\n `[${env}] ${\n commit ? `Deleted` : `Will delete`\n } content type ${Logger.highlightText(id)}`,\n failedRemove: (env: string, id: string) =>\n `[${env}] Unable to delete content type ${Logger.highlightText(id)}`,\n },\n components: {\n list: (projectId: string) =>\n `Components in ${Logger.highlightText(projectId)}:`,\n get: (projectId: string, id: string) =>\n `[${projectId}] Component ${Logger.highlightText(id)}`,\n failedGet: (projectId: string, id: string) =>\n `[${projectId}] Unable to get component ${Logger.highlightText(id)}`,\n created: (projectId: string, id: string, status?: string) =>\n `[${projectId}] Component ${status}d ${Logger.highlightText(id)}`,\n removed: (env: string, id: string, commit: boolean) =>\n `[${env}] ${\n commit ? `Deleted` : `Will delete`\n } component ${Logger.highlightText(id)}`,\n failedRemove: (env: string, id: string) =>\n `[${env}] Unable to delete component ${Logger.highlightText(id)}`,\n },\n version: {\n set: (env: string, versionStatus: string) =>\n `[${env}] Content version status set to \"${versionStatus}\"`,\n invalid: (versionStatus: string) =>\n `Content version status \"${versionStatus}\" is not valid, allowed values are \"published\" or \"latest\".`,\n noEnv: () =>\n `No Contensis environment set, connect to your Contensis cloud instance using \"contensis connect {cms alias}\"`,\n },\n entries: {\n imported: (env: string, commit: boolean, count: number) =>\n `[${env}] ${commit ? `Imported` : `Will import`} ${count} entries`,\n failedImport: (env: string) => `[${env}] Unable to import entries`,\n removed: (env: string, commit: boolean) =>\n `[${env}] ${commit ? `Deleted` : `Will delete`} entries`,\n failedRemove: (env: string) => `[${env}] Unable to delete entries`,\n notFound: (env: string) => `[${env}] Entries were not found`,\n commitTip: () => `Add --commit flag to commit the previewed changes`,\n },\n keys: {\n list: (env: string) => `[${env}] API keys:`,\n noList: (env: string) => `[${env}] Cannot retrieve API keys`,\n created: (env: string, name: string) =>\n `[${env}] Created API key ${Logger.highlightText(name)}`,\n tip: () =>\n `Assign your new key to a role with \"set role assignments\", or create a new role with \"create role\"`,\n failedCreate: (env: string, name: string) =>\n `[${env}] Unable to create API key ${Logger.highlightText(name)}`,\n removed: (env: string, id: string) =>\n `[${env}] Deleted API key ${Logger.highlightText(id)}`,\n failedRemove: (env: string, id: string) =>\n `[${env}] Unable to delete API key ${Logger.highlightText(id)}`,\n },\n roles: {\n list: (env: string) => `[${env}] Retrieved roles`,\n noList: (env: string) => `[${env}] Cannot retrieve roles`,\n noneExist: () => `Create a role with \"create role\"`,\n failedGet: (env: string, name: string) =>\n `[${env}] Unable to find role ${Logger.highlightText(name)}`,\n created: (env: string, name: string) =>\n `[${env}] Created role ${Logger.highlightText(name)}\\n`,\n tip: () =>\n `Give access to your role with \"set role assignments\", allow your role to do things with \"set role permissions\"`,\n failedCreate: (env: string, name: string) =>\n `[${env}] Unable to create role ${Logger.highlightText(name)}`,\n setPayload: () => `Updating role with details\\n`,\n set: () => `Succesfully updated role\\n`,\n failedSet: (env: string, name: string) =>\n `[${env}] Unable to update role ${Logger.highlightText(name)}`,\n removed: (env: string, id: string) =>\n `[${env}] Deleted role ${Logger.highlightText(id)}\\n`,\n failedRemove: (env: string, id: string) =>\n `[${env}] Unable to delete role ${Logger.highlightText(id)}`,\n },\n blocks: {\n runningStatus: (status: BlockRunningStatus | 'broken') => {\n switch (status) {\n case 'available':\n return Logger.successText(status);\n case 'pending':\n case 'starting':\n case 'stopped':\n return Logger.warningText(status);\n case 'degraded':\n case 'faulted':\n case 'broken':\n return Logger.errorText(status);\n default:\n return Logger.infoText(status);\n }\n },\n get: (id: string, env: string, projectId?: string) =>\n `[${env}] Block ${id} in project ${projectId}:`,\n list: (env: string, projectId?: string) =>\n `[${env}] Blocks in project ${projectId}:`,\n noList: (env: string, projectId?: string) =>\n `[${env}] Cannot retrieve blocks in project ${projectId}`,\n getLogs: (id: string, branch: string, env: string, projectId?: string) =>\n `[${env}] Requesting logs from block ${Logger.highlightText(\n id\n )} in branch ${branch} in project ${projectId}`,\n failedGetLogs: (id: string, env: string, projectId?: string) =>\n `[${env}] Unable to fetch block logs for ${Logger.highlightText(\n id\n )} in project ${projectId}`,\n tryPush: (id: string, branch: string, env: string, projectId?: string) =>\n `[${env}] Request to push block ${Logger.highlightText(\n id\n )} in branch ${branch} in project ${projectId}`,\n pushed: (id: string, branch: string, env: string, projectId?: string) =>\n `[${env}] Pushed block ${Logger.highlightText(\n id\n )} in branch ${branch} in project ${projectId}`,\n failedPush: (id: string, env: string, projectId?: string) =>\n `[${env}] Unable to push block ${Logger.highlightText(\n id\n )} in project ${projectId}`,\n actionComplete: (\n action: BlockActionType,\n id: string,\n env: string,\n projectId?: string\n ) =>\n `[${env}] Block action ${Logger.highlightText(\n action\n )} on ${Logger.highlightText(\n id\n )} in project ${projectId} requested successfully`,\n actionFailed: (\n action: BlockActionType,\n id: string,\n env: string,\n projectId?: string\n ) =>\n `[${env}] Problem executing action ${Logger.highlightText(\n action\n )} on block ${Logger.highlightText(id)} in project ${projectId}`,\n deleted: (id: string, env: string, projectId?: string) =>\n `[${env}] Deleted block ${Logger.highlightText(\n id\n )} in project ${projectId}`,\n failedDelete: (id: string, env: string, projectId?: string) =>\n `[${env}] Unable to delete block ${Logger.highlightText(\n id\n )} in project ${projectId}`,\n },\n webhooks: {\n list: (env: string) => `[${env}] Webhook subscriptions:`,\n noList: (env: string) => `[${env}] Cannot retrieve webhook subscriptions`,\n noneExist: () => `No webhook subscriptions exist`,\n created: (env: string, name: string) =>\n `[${env}] Created Webhook subscription ${Logger.highlightText(name)}`,\n failedCreate: (env: string, name: string) =>\n `[${env}] Unable to create Webhook subscription ${Logger.highlightText(\n name\n )}`,\n deleted: (env: string, id: string) =>\n `[${env}] Deleted Webhook subscription ${Logger.highlightText(id)}`,\n failedDelete: (env: string, id: string) =>\n `[${env}] Unable to delete Webhook subscription ${Logger.highlightText(\n id\n )}`,\n },\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n BlockActionType,\n BlockRunningStatus,\n MigrateModelsResult,\n MigrateStatus,\n} from 'migratortron';\nimport { Logger } from '~/util/logger';\n\nexport const LogMessages = {\n app: {\n contensis: () => 'Contensis',\n quit: () => `Goodbye \uD83D\uDC4B\\n`,\n startup: (version: string) =>\n `v${version} \u00A9 2001-${new Date().getFullYear()} Zengenti \uD83C\uDDEC\uD83C\uDDE7. \\n - Creators of Contensis and purveyors of other fine software\\n\\n\uD83D\uDC4B Welcome to the contensis-cli\\n`,\n help: () =>\n 'Press [CTRL]+[C] or type \"quit\" to return to your system shell\\nPress [TAB] for suggestions\\n',\n suggestions: () =>\n `\\n${Logger.errorText('>>')} Press [TAB] for suggestions\\n`,\n autocomplete: () => `\\n${Logger.errorText('>>')} Available commands:`,\n unknownError: () => `Something went wrong...`,\n fileOutput: (format = 'json', path?: string) =>\n `Output ${format} file: ${Logger.infoText(path)}\\n`,\n noFileOutput: () => `No output written\\n`,\n },\n command: {\n notKnown: (command: string) => `${command} is not known`,\n },\n envs: {\n found: (num: number) =>\n `environments store found containing ${num} environment${\n num === 1 ? '' : 's'\n }`,\n tip: () =>\n `Connect to a Contensis cloud instance using \"contensis connect {cms alias}\"`,\n },\n connect: {\n command: {\n name: () => 'connect',\n example: () => `Example call:\\n > connect example-dev`,\n },\n args: {\n alias: {\n name: () => '<alias>',\n description: () => 'the Contensis Cloud alias to connect with',\n },\n },\n noEnv: () => `Cannot connect - no environment alias specified`,\n unreachable: (url: string, status: number) =>\n `Cannot reach ${url}${status ? ` - status ${status}` : ''}`,\n connected: (env: string) => `Current environment set to \"${env}\"`,\n help: () =>\n `Connect to a Contensis cloud instance using \"contensis connect {cms alias}\"`,\n projects: () => `Available projects:`,\n noProjects: () => `Cannot retrieve projects list`,\n tip: () =>\n `Introduce yourself with \"login {username}\" or \"login {clientId} -s {secret}\" or by passing credentials as options with your command`,\n },\n login: {\n command: {\n name: () => 'login',\n usage: () => `<user/clientId> [password] [-s <sharedSecret>]`,\n example: () =>\n `Example call:\\n > login myuserid\\n -- or --\\n > login {clientId} -s {sharedSecret}`,\n },\n args: {\n user: {\n name: () => '<user/clientId>',\n description: () => 'the username to login with',\n },\n password: {\n name: () => '[password]',\n description: () =>\n 'the password to use to login with (optional/insecure)',\n },\n secret: {\n name: () => '-s --sharedSecret <sharedSecret>',\n description: () =>\n 'the shared secret to use when logging in with a client id',\n },\n },\n passwordPrompt: (env?: string, userId?: string) =>\n userId\n ? `Enter password for ${userId}@${env}:`\n : `Please enter a password`,\n failed: (env: string, userId: string) =>\n `Unable to login to ${env} as ${userId}`,\n success: (env: string, userId: string) =>\n `User ${userId} connected to ${env} successfully\\n`,\n insecurePassword: () =>\n `Could not connect to local keystore - your password could be stored unencrypted!`,\n noEnv: () => `No environment set, use \"contensis connect {alias}\" first`,\n noUserId: () => `No user id specified`,\n },\n projects: {\n list: () => `Available projects:`,\n noList: () => `Cannot retrieve projects list`,\n set: (projectId: string) =>\n `Current project is set to ${Logger.highlightText(projectId)}`,\n failedSet: (projectId: string) =>\n `Project ${Logger.highlightText(projectId)} not found`,\n tip: () =>\n `You need to set your current working project with \"set project {projectId}\"`,\n created: (env: string, id: string) =>\n `[${env}] Created project ${Logger.highlightText(id)}`,\n failedCreate: (env: string, id: string) =>\n `[${env}] Unable to create project ${Logger.highlightText(id)}`,\n updated: (env: string, id: string) =>\n `[${env}] Updated project ${Logger.highlightText(id)}`,\n failedUpdate: (env: string, id: string) =>\n `[${env}] Unable to update project ${Logger.highlightText(id)}`,\n },\n migrate: {\n models: {\n result: (\n status: keyof MigrateModelsResult['project']['contentTypes']\n ) => {\n switch (status) {\n case 'created':\n case 'updated':\n return Logger.successText;\n case 'errors':\n return Logger.errorText;\n default:\n return Logger.infoText;\n }\n },\n },\n status: (status: MigrateStatus) => {\n switch (status) {\n case 'no change':\n return Logger.successText;\n case 'create':\n case 'two-pass':\n case 'update':\n case 'delete':\n return Logger.warningText;\n case 'error':\n case 'not found':\n return Logger.errorText;\n default:\n return Logger.infoText;\n }\n },\n },\n models: {\n list: (projectId: string) =>\n `Content models in ${Logger.highlightText(projectId)}:`,\n noList: (projectId: string) =>\n `[${projectId}] Cannot retrieve content models`,\n get: (projectId: string, id: string) =>\n `[${projectId}] Content models ${Logger.infoText(`[ ${id} ]`)}`,\n failedGet: (projectId: string, id: string) =>\n `[${projectId}] Unable to get content models ${Logger.highlightText(id)}`,\n },\n contenttypes: {\n list: (projectId: string) =>\n `Content types in ${Logger.highlightText(projectId)}:`,\n get: (projectId: string, id: string) =>\n `[${projectId}] Content type ${Logger.highlightText(id)}`,\n failedGet: (projectId: string, id: string) =>\n `[${projectId}] Unable to get content type ${Logger.highlightText(id)}`,\n created: (projectId: string, id: string, status?: string) =>\n `[${projectId}] Content type ${status}d ${Logger.highlightText(id)}`,\n removed: (env: string, id: string, commit: boolean) =>\n `[${env}] ${\n commit ? `Deleted` : `Will delete`\n } content type ${Logger.highlightText(id)}`,\n failedRemove: (env: string, id: string) =>\n `[${env}] Unable to delete content type ${Logger.highlightText(id)}`,\n },\n components: {\n list: (projectId: string) =>\n `Components in ${Logger.highlightText(projectId)}:`,\n get: (projectId: string, id: string) =>\n `[${projectId}] Component ${Logger.highlightText(id)}`,\n failedGet: (projectId: string, id: string) =>\n `[${projectId}] Unable to get component ${Logger.highlightText(id)}`,\n created: (projectId: string, id: string, status?: string) =>\n `[${projectId}] Component ${status}d ${Logger.highlightText(id)}`,\n removed: (env: string, id: string, commit: boolean) =>\n `[${env}] ${\n commit ? `Deleted` : `Will delete`\n } component ${Logger.highlightText(id)}`,\n failedRemove: (env: string, id: string) =>\n `[${env}] Unable to delete component ${Logger.highlightText(id)}`,\n },\n version: {\n set: (env: string, versionStatus: string) =>\n `[${env}] Content version status set to \"${versionStatus}\"`,\n invalid: (versionStatus: string) =>\n `Content version status \"${versionStatus}\" is not valid, allowed values are \"published\" or \"latest\".`,\n noEnv: () =>\n `No Contensis environment set, connect to your Contensis cloud instance using \"contensis connect {cms alias}\"`,\n },\n entries: {\n imported: (env: string, commit: boolean, count: number) =>\n `[${env}] ${commit ? `Imported` : `Will import`} ${count} entries`,\n failedImport: (env: string) => `[${env}] Unable to import entries`,\n removed: (env: string, commit: boolean) =>\n `[${env}] ${commit ? `Deleted` : `Will delete`} entries`,\n failedRemove: (env: string) => `[${env}] Unable to delete entries`,\n notFound: (env: string) => `[${env}] Entries were not found`,\n commitTip: () => `Add --commit flag to commit the previewed changes`,\n },\n keys: {\n list: (env: string) => `[${env}] API keys:`,\n noList: (env: string) => `[${env}] Cannot retrieve API keys`,\n created: (env: string, name: string) =>\n `[${env}] Created API key ${Logger.highlightText(name)}`,\n tip: () =>\n `Assign your new key to a role with \"set role assignments\", or create a new role with \"create role\"`,\n failedCreate: (env: string, name: string) =>\n `[${env}] Unable to create API key ${Logger.highlightText(name)}`,\n removed: (env: string, id: string) =>\n `[${env}] Deleted API key ${Logger.highlightText(id)}`,\n failedRemove: (env: string, id: string) =>\n `[${env}] Unable to delete API key ${Logger.highlightText(id)}`,\n },\n roles: {\n list: (env: string) => `[${env}] Retrieved roles`,\n noList: (env: string) => `[${env}] Cannot retrieve roles`,\n noneExist: () => `Create a role with \"create role\"`,\n failedGet: (env: string, name: string) =>\n `[${env}] Unable to find role ${Logger.highlightText(name)}`,\n created: (env: string, name: string) =>\n `[${env}] Created role ${Logger.highlightText(name)}\\n`,\n tip: () =>\n `Give access to your role with \"set role assignments\", allow your role to do things with \"set role permissions\"`,\n failedCreate: (env: string, name: string) =>\n `[${env}] Unable to create role ${Logger.highlightText(name)}`,\n setPayload: () => `Updating role with details\\n`,\n set: () => `Succesfully updated role\\n`,\n failedSet: (env: string, name: string) =>\n `[${env}] Unable to update role ${Logger.highlightText(name)}`,\n removed: (env: string, id: string) =>\n `[${env}] Deleted role ${Logger.highlightText(id)}\\n`,\n failedRemove: (env: string, id: string) =>\n `[${env}] Unable to delete role ${Logger.highlightText(id)}`,\n },\n blocks: {\n runningStatus: (status: BlockRunningStatus | 'broken') => {\n switch (status) {\n case 'available':\n return Logger.successText(status);\n case 'pending':\n case 'starting':\n case 'stopped':\n return Logger.warningText(status);\n case 'degraded':\n case 'faulted':\n case 'broken':\n return Logger.errorText(status);\n default:\n return Logger.infoText(status);\n }\n },\n get: (id: string, env: string, projectId?: string) =>\n `[${env}] Block ${id} in project ${projectId}:`,\n list: (env: string, projectId?: string) =>\n `[${env}] Blocks in project ${projectId}:`,\n noList: (env: string, projectId?: string) =>\n `[${env}] Cannot retrieve blocks in project ${projectId}`,\n getLogs: (id: string, branch: string, env: string, projectId?: string) =>\n `[${env}] Requesting logs from block ${Logger.highlightText(\n id\n )} in branch ${branch} in project ${projectId}`,\n failedGetLogs: (id: string, env: string, projectId?: string) =>\n `[${env}] Unable to fetch block logs for ${Logger.highlightText(\n id\n )} in project ${projectId}`,\n tryPush: (id: string, branch: string, env: string, projectId?: string) =>\n `[${env}] Request to push block ${Logger.highlightText(\n id\n )} in branch ${branch} in project ${projectId}`,\n pushed: (id: string, branch: string, env: string, projectId?: string) =>\n `[${env}] Pushed block ${Logger.highlightText(\n id\n )} in branch ${branch} in project ${projectId}`,\n failedPush: (id: string, env: string, projectId?: string) =>\n `[${env}] Unable to push block ${Logger.highlightText(\n id\n )} in project ${projectId}`,\n latestVersion: (\n version: string,\n id: string,\n env: string,\n projectId?: string\n ) =>\n `[${env}] Found latest block version ${Logger.highlightText(\n id\n )} in project ${projectId} ${Logger.highlightText(version)}`,\n failedParsingVersion: () =>\n `Could not parse \".[0].version.versionNo\" from response`,\n actionComplete: (\n action: BlockActionType,\n id: string,\n env: string,\n projectId?: string\n ) =>\n `[${env}] Action ${Logger.highlightText(\n action\n )} on ${Logger.highlightText(\n id\n )} in project ${projectId} requested successfully`,\n actionFailed: (\n action: BlockActionType,\n id: string,\n env: string,\n projectId?: string\n ) =>\n `[${env}] Problem executing ${action} on block ${Logger.highlightText(\n id\n )} in project ${projectId}`,\n deleted: (id: string, env: string, projectId?: string) =>\n `[${env}] Deleted block ${Logger.highlightText(\n id\n )} in project ${projectId}`,\n failedDelete: (id: string, env: string, projectId?: string) =>\n `[${env}] Unable to delete block ${Logger.highlightText(\n id\n )} in project ${projectId}`,\n },\n webhooks: {\n list: (env: string) => `[${env}] Webhook subscriptions:`,\n noList: (env: string) => `[${env}] Cannot retrieve webhook subscriptions`,\n noneExist: () => `No webhook subscriptions exist`,\n created: (env: string, name: string) =>\n `[${env}] Created Webhook subscription ${Logger.highlightText(name)}`,\n failedCreate: (env: string, name: string) =>\n `[${env}] Unable to create Webhook subscription ${Logger.highlightText(\n name\n )}`,\n deleted: (env: string, id: string) =>\n `[${env}] Deleted Webhook subscription ${Logger.highlightText(id)}`,\n failedDelete: (env: string, id: string) =>\n `[${env}] Unable to delete Webhook subscription ${Logger.highlightText(\n id\n )}`,\n },\n};\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1494,14 +1494,56 @@ Components:`));
1494
1494
  );
1495
1495
  }
1496
1496
  };
1497
- ExecuteBlockAction = async (action, blockId, version) => {
1497
+ GetLastBlockVersionInMainOrMaster = async (blockId) => {
1498
+ var _a;
1499
+ const { contensis, log, messages } = this;
1500
+ const [getErrMain, blockVersionMain] = await (contensis == null ? void 0 : contensis.blocks.GetBlockVersions(blockId, "main")) || [];
1501
+ let blockVersionResponse = [];
1502
+ if ((getErrMain == null ? void 0 : getErrMain.code) === "404") {
1503
+ const [getErrMaster, blockVersionMaster] = await (contensis == null ? void 0 : contensis.blocks.GetBlockVersions(blockId, "master")) || [];
1504
+ if (getErrMaster) {
1505
+ return [getErrMaster, void 0];
1506
+ } else if (blockVersionMaster)
1507
+ blockVersionResponse = blockVersionMaster;
1508
+ } else if (getErrMain) {
1509
+ return [getErrMain, void 0];
1510
+ } else if (blockVersionMain)
1511
+ blockVersionResponse = blockVersionMain;
1512
+ let blockVersionNo = "latest";
1513
+ try {
1514
+ blockVersionNo = `${(_a = blockVersionResponse == null ? void 0 : blockVersionResponse[0]) == null ? void 0 : _a.version.versionNo}`;
1515
+ if (!Number.isNaN(blockVersionNo) && Number(blockVersionNo) > 0)
1516
+ return [null, blockVersionNo];
1517
+ else
1518
+ throw new Error(
1519
+ `Value cannot be parsed as a number: ${blockVersionNo}`
1520
+ );
1521
+ } catch (parseVersionEx) {
1522
+ log.error(messages.blocks.failedParsingVersion(), parseVersionEx);
1523
+ log.info(`${blockVersionResponse}`);
1524
+ return [parseVersionEx, void 0];
1525
+ }
1526
+ };
1527
+ ExecuteBlockAction = async (action, blockId, version = "latest") => {
1498
1528
  const { currentEnv, env, log, messages } = this;
1499
1529
  const contensis = await this.ConnectContensis();
1500
1530
  if (contensis) {
1531
+ let actionOnBlockVersion = version;
1532
+ if (action === "release" && version === "latest") {
1533
+ const [getErr, blockVersion2] = await this.GetLastBlockVersionInMainOrMaster(blockId);
1534
+ if (getErr) {
1535
+ log.error((0, import_json.jsonFormatter)(getErr));
1536
+ throw new Error(
1537
+ messages.blocks.noList(currentEnv, env.currentProject)
1538
+ );
1539
+ } else if (blockVersion2) {
1540
+ actionOnBlockVersion = blockVersion2;
1541
+ }
1542
+ }
1501
1543
  const [err, blockVersion] = await contensis.blocks.BlockAction(
1502
1544
  blockId,
1503
1545
  action,
1504
- version
1546
+ actionOnBlockVersion
1505
1547
  );
1506
1548
  if (blockVersion) {
1507
1549
  this.HandleFormattingAndOutput(blockVersion, () => {
@@ -1517,7 +1559,8 @@ Components:`));
1517
1559
  });
1518
1560
  }
1519
1561
  if (err) {
1520
- log.error(
1562
+ log.error((0, import_json.jsonFormatter)(err));
1563
+ throw new Error(
1521
1564
  messages.blocks.actionFailed(
1522
1565
  action,
1523
1566
  blockId,
@@ -1525,7 +1568,6 @@ Components:`));
1525
1568
  env.currentProject
1526
1569
  )
1527
1570
  );
1528
- log.error((0, import_json.jsonFormatter)(err));
1529
1571
  }
1530
1572
  }
1531
1573
  };
@@ -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 { isPassword, isSharedSecret, isUuid, url } 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 {\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 ExecuteBlockAction = async (\n action: BlockActionType,\n blockId: string,\n version: string\n ) => {\n const { currentEnv, env, log, messages } = this;\n const contensis = await this.ConnectContensis();\n if (contensis) {\n // Execute block action\n const [err, blockVersion] = await contensis.blocks.BlockAction(\n blockId,\n action,\n version\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(\n messages.blocks.actionFailed(\n action,\n blockId,\n currentEnv,\n env.currentProject\n )\n );\n log.error(jsonFormatter(err));\n }\n }\n };\n\n PrintBlockLogs = async (\n blockId: string,\n branch: string,\n version: string,\n dataCenter: 'hq' | 'manchester' | 'london'\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 (blockLogs) {\n this.HandleFormattingAndOutput(blockLogs, () => {\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(blockLogs));\n log.line();\n });\n }\n\n if (err) {\n log.error(\n messages.blocks.failedGetLogs(blockId, currentEnv, env.currentProject)\n );\n log.error(jsonFormatter(err));\n }\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 if (format === 'csv') {\n writeString = csvFormatter(obj as any);\n } else if (format === 'xml') {\n writeString = xmlFormatter(obj as any);\n } else writeString = jsonFormatter(obj);\n // write output to file\n if (writeString) {\n fs.writeFileSync(output, writeString);\n log.success(messages.app.fileOutput(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
- "names": ["SessionCacheProvider", "path", "to", "fetch", "CredentialProvider", "inquirer", "ContensisAuthService", "chalk", "components", "contentTypes", "url", "fs"]
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 { isPassword, isSharedSecret, isUuid, url } 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 BlockVersion,\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 {\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 GetLastBlockVersionInMainOrMaster = async (\n blockId: string\n ): Promise<[AppError | null, string | undefined]> => {\n const { contensis, log, messages } = this;\n\n // Look for block versions pushed to main branch first\n const [getErrMain, blockVersionMain] =\n (await contensis?.blocks.GetBlockVersions(blockId, 'main')) || [];\n\n let blockVersionResponse = [] as BlockVersion[];\n\n if (getErrMain?.code === '404') {\n // Try looking in master\n const [getErrMaster, blockVersionMaster] =\n (await contensis?.blocks.GetBlockVersions(blockId, 'master')) || [];\n if (getErrMaster) {\n return [getErrMaster, undefined];\n } else if (blockVersionMaster) blockVersionResponse = blockVersionMaster;\n } else if (getErrMain) {\n return [getErrMain, undefined];\n } else if (blockVersionMain) blockVersionResponse = blockVersionMain;\n\n // Parse versionNo from response\n let blockVersionNo = 'latest';\n // The first blockVersion should be the latest one\n try {\n blockVersionNo = `${blockVersionResponse?.[0]?.version.versionNo}`;\n\n if (!Number.isNaN(blockVersionNo) && Number(blockVersionNo) > 0)\n // Is a valid versionNo\n return [null, blockVersionNo];\n else\n throw new Error(\n `Value cannot be parsed as a number: ${blockVersionNo}`\n );\n } catch (parseVersionEx: any) {\n // Catch parsing errors in case of an unexpected response\n log.error(messages.blocks.failedParsingVersion(), parseVersionEx);\n log.info(`${blockVersionResponse}`);\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] =\n await this.GetLastBlockVersionInMainOrMaster(blockId);\n\n if (getErr) {\n // Log error getting latest block version no\n log.error(jsonFormatter(getErr));\n // and throw the error message so the process can exit with a failure\n throw new Error(\n messages.blocks.noList(currentEnv, env.currentProject)\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 ) => {\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 (blockLogs) {\n this.HandleFormattingAndOutput(blockLogs, () => {\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(blockLogs));\n log.line();\n });\n }\n\n if (err) {\n log.error(\n messages.blocks.failedGetLogs(blockId, currentEnv, env.currentProject)\n );\n log.error(jsonFormatter(err));\n }\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 if (format === 'csv') {\n writeString = csvFormatter(obj as any);\n } else if (format === 'xml') {\n writeString = xmlFormatter(obj as any);\n } else writeString = jsonFormatter(obj);\n // write output to file\n if (writeString) {\n fs.writeFileSync(output, writeString);\n log.success(messages.app.fileOutput(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
+ "names": ["SessionCacheProvider", "path", "to", "fetch", "CredentialProvider", "inquirer", "ContensisAuthService", "chalk", "components", "contentTypes", "url", "blockVersion", "fs"]
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.67";
24
+ const LIB_VERSION = "1.0.0-beta.69";
25
25
  // Annotate the CommonJS export names for ESM import in node:
26
26
  0 && (module.exports = {
27
27
  LIB_VERSION
@@ -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.67\";\n"],
4
+ "sourcesContent": ["export const LIB_VERSION = \"1.0.0-beta.69\";\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.67",
3
+ "version": "1.0.0-beta.69",
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",
@@ -35,7 +35,7 @@
35
35
  "jsonpath-mapper": "^1.1.0",
36
36
  "keytar": "^7.9.0",
37
37
  "lodash": "^4.17.21",
38
- "migratortron": "^1.0.0-beta.26",
38
+ "migratortron": "^1.0.0-beta.27",
39
39
  "node-fetch": "^2.6.7",
40
40
  "patch-package": "^6.4.7",
41
41
  "xml2js": "^0.4.23"
@@ -30,13 +30,15 @@ export const makeExecuteCommand = () => {
30
30
  .command('release')
31
31
  .description('release a block version')
32
32
  .addArgument(blockIdArg)
33
- .addArgument(blockVersionArg)
34
- .usage('<block-id> <version>')
33
+ .argument('[version]', blockVersionArg.description, 'latest')
34
+ .usage('[block-id> <version]')
35
35
  .addHelpText(
36
36
  'after',
37
37
  `
38
38
  Example call:
39
- > execute block action release contensis-app 3\n`
39
+ > execute block action release contensis-app
40
+
41
+ Note: block actions are executed on blocks deployed from a "main" or "master" branch\n`
40
42
  )
41
43
  .action(async (blockId: string, version: string, opts) => {
42
44
  await cliCommand(
@@ -55,7 +57,9 @@ Example call:
55
57
  'after',
56
58
  `
57
59
  Example call:
58
- > execute block action makelive contensis-app 3\n`
60
+ > execute block action makelive contensis-app 3
61
+
62
+ Note: block actions are executed on blocks deployed from a "main" or "master" branch\n`
59
63
  )
60
64
  .action(async (blockId: string, version: string, opts) => {
61
65
  await cliCommand(
@@ -74,7 +78,9 @@ Example call:
74
78
  'after',
75
79
  `
76
80
  Example call:
77
- > execute block action rollback contensis-app 3\n`
81
+ > execute block action rollback contensis-app 3
82
+
83
+ Note: block actions are executed on blocks deployed from a "main" or "master" branch\n`
78
84
  )
79
85
  .action(async (blockId: string, version: string, opts) => {
80
86
  await cliCommand(
@@ -93,7 +99,9 @@ Example call:
93
99
  'after',
94
100
  `
95
101
  Example call:
96
- > execute block action markasbroken contensis-app 3\n`
102
+ > execute block action markasbroken contensis-app 3
103
+
104
+ Note: block actions are executed on blocks deployed from a "main" or "master" branch\n`
97
105
  )
98
106
  .action(async (blockId: string, version: string, opts) => {
99
107
  await cliCommand(
@@ -189,7 +189,7 @@ Example call:
189
189
  `
190
190
  )
191
191
  .action(async (blockId: string, branch: string, version: string, opts) => {
192
- await cliCommand(['get', 'block'], opts).PrintBlockVersions(
192
+ await cliCommand(['get', 'block', blockId], opts).PrintBlockVersions(
193
193
  blockId,
194
194
  branch,
195
195
  version
@@ -71,7 +71,7 @@ Example call:
71
71
  };
72
72
 
73
73
  const blockRequest = mapJson(mapSourceVars, {
74
- autoRelease: { $path: 'release', $default: () => false },
74
+ release: { $path: 'release', $default: () => false },
75
75
  id: ['blockId'],
76
76
  image: () => {
77
77
  const lastIndexOfColon = imageUri.lastIndexOf(':');
@@ -280,13 +280,24 @@ export const LogMessages = {
280
280
  `[${env}] Unable to push block ${Logger.highlightText(
281
281
  id
282
282
  )} in project ${projectId}`,
283
+ latestVersion: (
284
+ version: string,
285
+ id: string,
286
+ env: string,
287
+ projectId?: string
288
+ ) =>
289
+ `[${env}] Found latest block version ${Logger.highlightText(
290
+ id
291
+ )} in project ${projectId} ${Logger.highlightText(version)}`,
292
+ failedParsingVersion: () =>
293
+ `Could not parse ".[0].version.versionNo" from response`,
283
294
  actionComplete: (
284
295
  action: BlockActionType,
285
296
  id: string,
286
297
  env: string,
287
298
  projectId?: string
288
299
  ) =>
289
- `[${env}] Block action ${Logger.highlightText(
300
+ `[${env}] Action ${Logger.highlightText(
290
301
  action
291
302
  )} on ${Logger.highlightText(
292
303
  id
@@ -297,9 +308,9 @@ export const LogMessages = {
297
308
  env: string,
298
309
  projectId?: string
299
310
  ) =>
300
- `[${env}] Problem executing action ${Logger.highlightText(
301
- action
302
- )} on block ${Logger.highlightText(id)} in project ${projectId}`,
311
+ `[${env}] Problem executing ${action} on block ${Logger.highlightText(
312
+ id
313
+ )} in project ${projectId}`,
303
314
  deleted: (id: string, env: string, projectId?: string) =>
304
315
  `[${env}] Deleted block ${Logger.highlightText(
305
316
  id
@@ -21,6 +21,7 @@ import {
21
21
  Model,
22
22
  MigrateModelsResult,
23
23
  BlockActionType,
24
+ BlockVersion,
24
25
  } from 'migratortron';
25
26
  import { Entry, Role } from 'contensis-management-api/lib/models';
26
27
 
@@ -1902,19 +1903,81 @@ class ContensisCli {
1902
1903
  }
1903
1904
  };
1904
1905
 
1906
+ GetLastBlockVersionInMainOrMaster = async (
1907
+ blockId: string
1908
+ ): Promise<[AppError | null, string | undefined]> => {
1909
+ const { contensis, log, messages } = this;
1910
+
1911
+ // Look for block versions pushed to main branch first
1912
+ const [getErrMain, blockVersionMain] =
1913
+ (await contensis?.blocks.GetBlockVersions(blockId, 'main')) || [];
1914
+
1915
+ let blockVersionResponse = [] as BlockVersion[];
1916
+
1917
+ if (getErrMain?.code === '404') {
1918
+ // Try looking in master
1919
+ const [getErrMaster, blockVersionMaster] =
1920
+ (await contensis?.blocks.GetBlockVersions(blockId, 'master')) || [];
1921
+ if (getErrMaster) {
1922
+ return [getErrMaster, undefined];
1923
+ } else if (blockVersionMaster) blockVersionResponse = blockVersionMaster;
1924
+ } else if (getErrMain) {
1925
+ return [getErrMain, undefined];
1926
+ } else if (blockVersionMain) blockVersionResponse = blockVersionMain;
1927
+
1928
+ // Parse versionNo from response
1929
+ let blockVersionNo = 'latest';
1930
+ // The first blockVersion should be the latest one
1931
+ try {
1932
+ blockVersionNo = `${blockVersionResponse?.[0]?.version.versionNo}`;
1933
+
1934
+ if (!Number.isNaN(blockVersionNo) && Number(blockVersionNo) > 0)
1935
+ // Is a valid versionNo
1936
+ return [null, blockVersionNo];
1937
+ else
1938
+ throw new Error(
1939
+ `Value cannot be parsed as a number: ${blockVersionNo}`
1940
+ );
1941
+ } catch (parseVersionEx: any) {
1942
+ // Catch parsing errors in case of an unexpected response
1943
+ log.error(messages.blocks.failedParsingVersion(), parseVersionEx);
1944
+ log.info(`${blockVersionResponse}`);
1945
+ return [parseVersionEx, undefined];
1946
+ }
1947
+ };
1948
+
1905
1949
  ExecuteBlockAction = async (
1906
1950
  action: BlockActionType,
1907
1951
  blockId: string,
1908
- version: string
1952
+ version = 'latest'
1909
1953
  ) => {
1910
1954
  const { currentEnv, env, log, messages } = this;
1911
1955
  const contensis = await this.ConnectContensis();
1912
1956
  if (contensis) {
1957
+ let actionOnBlockVersion = version;
1958
+
1959
+ // If action is release and version is latest, find the latest version number
1960
+ if (action === 'release' && version === 'latest') {
1961
+ const [getErr, blockVersion] =
1962
+ await this.GetLastBlockVersionInMainOrMaster(blockId);
1963
+
1964
+ if (getErr) {
1965
+ // Log error getting latest block version no
1966
+ log.error(jsonFormatter(getErr));
1967
+ // and throw the error message so the process can exit with a failure
1968
+ throw new Error(
1969
+ messages.blocks.noList(currentEnv, env.currentProject)
1970
+ );
1971
+ } else if (blockVersion) {
1972
+ actionOnBlockVersion = blockVersion;
1973
+ }
1974
+ }
1975
+
1913
1976
  // Execute block action
1914
1977
  const [err, blockVersion] = await contensis.blocks.BlockAction(
1915
1978
  blockId,
1916
1979
  action,
1917
- version
1980
+ actionOnBlockVersion
1918
1981
  );
1919
1982
 
1920
1983
  if (blockVersion) {
@@ -1933,7 +1996,8 @@ class ContensisCli {
1933
1996
  }
1934
1997
 
1935
1998
  if (err) {
1936
- log.error(
1999
+ log.error(jsonFormatter(err));
2000
+ throw new Error(
1937
2001
  messages.blocks.actionFailed(
1938
2002
  action,
1939
2003
  blockId,
@@ -1941,7 +2005,6 @@ class ContensisCli {
1941
2005
  env.currentProject
1942
2006
  )
1943
2007
  );
1944
- log.error(jsonFormatter(err));
1945
2008
  }
1946
2009
  }
1947
2010
  };
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const LIB_VERSION = "1.0.0-beta.67";
1
+ export const LIB_VERSION = "1.0.0-beta.69";