@strapi/cloud-cli 5.48.1 → 5.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/local.js +17 -10
- package/dist/config/local.js.map +1 -1
- package/dist/deploy-project/action.js +23 -16
- package/dist/deploy-project/action.js.map +1 -1
- package/dist/environment/link/action.js +7 -3
- package/dist/environment/link/action.js.map +1 -1
- package/dist/environment/list/action.js +5 -1
- package/dist/environment/list/action.js.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/link/action.js +7 -3
- package/dist/link/action.js.map +1 -1
- package/dist/login/action.js +9 -4
- package/dist/login/action.js.map +1 -1
- package/dist/package.json.js +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/services/build-logs.js +5 -1
- package/dist/services/build-logs.js.map +1 -1
- package/dist/services/cli-api.js +10 -4
- package/dist/services/cli-api.js.map +1 -1
- package/dist/services/logger.js +17 -11
- package/dist/services/logger.js.map +1 -1
- package/dist/services/notification.js +7 -2
- package/dist/services/notification.js.map +1 -1
- package/dist/services/strapi-info-save.js +13 -8
- package/dist/services/strapi-info-save.js.map +1 -1
- package/dist/services/token.js +8 -3
- package/dist/services/token.js.map +1 -1
- package/dist/utils/compress-files.js +5 -4
- package/dist/utils/compress-files.js.map +1 -1
- package/dist/utils/error-message-factories.js +9 -4
- package/dist/utils/error-message-factories.js.map +1 -1
- package/dist/utils/get-local-config.js +5 -1
- package/dist/utils/get-local-config.js.map +1 -1
- package/dist/utils/helpers.js +5 -1
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/pkg.js +10 -5
- package/dist/utils/pkg.js.map +1 -1
- package/package.json +5 -5
package/dist/config/local.js
CHANGED
|
@@ -5,11 +5,18 @@ var os = require('os');
|
|
|
5
5
|
var fse = require('fs-extra');
|
|
6
6
|
var XDGAppPaths = require('xdg-app-paths');
|
|
7
7
|
|
|
8
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
|
|
10
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
11
|
+
var os__default = /*#__PURE__*/_interopDefault(os);
|
|
12
|
+
var fse__default = /*#__PURE__*/_interopDefault(fse);
|
|
13
|
+
var XDGAppPaths__default = /*#__PURE__*/_interopDefault(XDGAppPaths);
|
|
14
|
+
|
|
8
15
|
const APP_FOLDER_NAME = 'com.strapi.cli';
|
|
9
16
|
const CONFIG_FILENAME = 'config.json';
|
|
10
17
|
async function checkDirectoryExists(directoryPath) {
|
|
11
18
|
try {
|
|
12
|
-
const fsStat = await
|
|
19
|
+
const fsStat = await fse__default.default.lstat(directoryPath);
|
|
13
20
|
return fsStat.isDirectory();
|
|
14
21
|
} catch (e) {
|
|
15
22
|
return false;
|
|
@@ -17,25 +24,25 @@ async function checkDirectoryExists(directoryPath) {
|
|
|
17
24
|
}
|
|
18
25
|
// Determine storage path based on the operating system
|
|
19
26
|
async function getTmpStoragePath() {
|
|
20
|
-
const storagePath =
|
|
21
|
-
await
|
|
27
|
+
const storagePath = path__default.default.join(os__default.default.tmpdir(), APP_FOLDER_NAME);
|
|
28
|
+
await fse__default.default.ensureDir(storagePath);
|
|
22
29
|
return storagePath;
|
|
23
30
|
}
|
|
24
31
|
async function getConfigPath() {
|
|
25
|
-
const configDirs =
|
|
32
|
+
const configDirs = XDGAppPaths__default.default(APP_FOLDER_NAME).configDirs();
|
|
26
33
|
const configPath = configDirs.find(checkDirectoryExists);
|
|
27
34
|
if (!configPath) {
|
|
28
|
-
await
|
|
35
|
+
await fse__default.default.ensureDir(configDirs[0]);
|
|
29
36
|
return configDirs[0];
|
|
30
37
|
}
|
|
31
38
|
return configPath;
|
|
32
39
|
}
|
|
33
40
|
async function getLocalConfig() {
|
|
34
41
|
const configPath = await getConfigPath();
|
|
35
|
-
const configFilePath =
|
|
36
|
-
await
|
|
42
|
+
const configFilePath = path__default.default.join(configPath, CONFIG_FILENAME);
|
|
43
|
+
await fse__default.default.ensureFile(configFilePath);
|
|
37
44
|
try {
|
|
38
|
-
return await
|
|
45
|
+
return await fse__default.default.readJSON(configFilePath, {
|
|
39
46
|
encoding: 'utf8',
|
|
40
47
|
throws: true
|
|
41
48
|
});
|
|
@@ -45,8 +52,8 @@ async function getLocalConfig() {
|
|
|
45
52
|
}
|
|
46
53
|
async function saveLocalConfig(data) {
|
|
47
54
|
const configPath = await getConfigPath();
|
|
48
|
-
const configFilePath =
|
|
49
|
-
await
|
|
55
|
+
const configFilePath = path__default.default.join(configPath, CONFIG_FILENAME);
|
|
56
|
+
await fse__default.default.writeJson(configFilePath, data, {
|
|
50
57
|
encoding: 'utf8',
|
|
51
58
|
spaces: 2,
|
|
52
59
|
mode: 0o600
|
package/dist/config/local.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.js","sources":["../../src/config/local.ts"],"sourcesContent":["import path from 'path';\nimport os from 'os';\nimport fse from 'fs-extra';\nimport XDGAppPaths from 'xdg-app-paths';\n\nconst APP_FOLDER_NAME = 'com.strapi.cli';\n\nexport const CONFIG_FILENAME = 'config.json';\n\nexport type LocalConfig = {\n token?: string;\n installId?: string;\n};\n\nasync function checkDirectoryExists(directoryPath: string) {\n try {\n const fsStat = await fse.lstat(directoryPath);\n return fsStat.isDirectory();\n } catch (e) {\n return false;\n }\n}\n\n// Determine storage path based on the operating system\nexport async function getTmpStoragePath() {\n const storagePath = path.join(os.tmpdir(), APP_FOLDER_NAME);\n await fse.ensureDir(storagePath);\n return storagePath;\n}\n\nasync function getConfigPath() {\n const configDirs = XDGAppPaths(APP_FOLDER_NAME).configDirs();\n const configPath = configDirs.find(checkDirectoryExists);\n\n if (!configPath) {\n await fse.ensureDir(configDirs[0]);\n return configDirs[0];\n }\n return configPath;\n}\n\nexport async function getLocalConfig(): Promise<LocalConfig> {\n const configPath = await getConfigPath();\n const configFilePath = path.join(configPath, CONFIG_FILENAME);\n await fse.ensureFile(configFilePath);\n try {\n return await fse.readJSON(configFilePath, { encoding: 'utf8', throws: true });\n } catch (e) {\n return {};\n }\n}\n\nexport async function saveLocalConfig(data: LocalConfig) {\n const configPath = await getConfigPath();\n const configFilePath = path.join(configPath, CONFIG_FILENAME);\n await fse.writeJson(configFilePath, data, { encoding: 'utf8', spaces: 2, mode: 0o600 });\n}\n"],"names":["APP_FOLDER_NAME","CONFIG_FILENAME","checkDirectoryExists","directoryPath","fsStat","fse","lstat","isDirectory","e","getTmpStoragePath","storagePath","path","join","os","tmpdir","ensureDir","getConfigPath","configDirs","XDGAppPaths","configPath","find","getLocalConfig","configFilePath","ensureFile","readJSON","encoding","throws","saveLocalConfig","data","writeJson","spaces","mode"],"mappings":"
|
|
1
|
+
{"version":3,"file":"local.js","sources":["../../src/config/local.ts"],"sourcesContent":["import path from 'path';\nimport os from 'os';\nimport fse from 'fs-extra';\nimport XDGAppPaths from 'xdg-app-paths';\n\nconst APP_FOLDER_NAME = 'com.strapi.cli';\n\nexport const CONFIG_FILENAME = 'config.json';\n\nexport type LocalConfig = {\n token?: string;\n installId?: string;\n};\n\nasync function checkDirectoryExists(directoryPath: string) {\n try {\n const fsStat = await fse.lstat(directoryPath);\n return fsStat.isDirectory();\n } catch (e) {\n return false;\n }\n}\n\n// Determine storage path based on the operating system\nexport async function getTmpStoragePath() {\n const storagePath = path.join(os.tmpdir(), APP_FOLDER_NAME);\n await fse.ensureDir(storagePath);\n return storagePath;\n}\n\nasync function getConfigPath() {\n const configDirs = XDGAppPaths(APP_FOLDER_NAME).configDirs();\n const configPath = configDirs.find(checkDirectoryExists);\n\n if (!configPath) {\n await fse.ensureDir(configDirs[0]);\n return configDirs[0];\n }\n return configPath;\n}\n\nexport async function getLocalConfig(): Promise<LocalConfig> {\n const configPath = await getConfigPath();\n const configFilePath = path.join(configPath, CONFIG_FILENAME);\n await fse.ensureFile(configFilePath);\n try {\n return await fse.readJSON(configFilePath, { encoding: 'utf8', throws: true });\n } catch (e) {\n return {};\n }\n}\n\nexport async function saveLocalConfig(data: LocalConfig) {\n const configPath = await getConfigPath();\n const configFilePath = path.join(configPath, CONFIG_FILENAME);\n await fse.writeJson(configFilePath, data, { encoding: 'utf8', spaces: 2, mode: 0o600 });\n}\n"],"names":["APP_FOLDER_NAME","CONFIG_FILENAME","checkDirectoryExists","directoryPath","fsStat","fse","lstat","isDirectory","e","getTmpStoragePath","storagePath","path","join","os","tmpdir","ensureDir","getConfigPath","configDirs","XDGAppPaths","configPath","find","getLocalConfig","configFilePath","ensureFile","readJSON","encoding","throws","saveLocalConfig","data","writeJson","spaces","mode"],"mappings":";;;;;;;;;;;;;;AAKA,MAAMA,eAAAA,GAAkB,gBAAA;AAEjB,MAAMC,kBAAkB;AAO/B,eAAeC,qBAAqBC,aAAqB,EAAA;IACvD,IAAI;AACF,QAAA,MAAMC,MAAAA,GAAS,MAAMC,oBAAAA,CAAIC,KAAK,CAACH,aAAAA,CAAAA;AAC/B,QAAA,OAAOC,OAAOG,WAAW,EAAA;AAC3B,IAAA,CAAA,CAAE,OAAOC,CAAAA,EAAG;QACV,OAAO,KAAA;AACT,IAAA;AACF;AAEA;AACO,eAAeC,iBAAAA,GAAAA;AACpB,IAAA,MAAMC,cAAcC,qBAAAA,CAAKC,IAAI,CAACC,mBAAAA,CAAGC,MAAM,EAAA,EAAId,eAAAA,CAAAA;IAC3C,MAAMK,oBAAAA,CAAIU,SAAS,CAACL,WAAAA,CAAAA;IACpB,OAAOA,WAAAA;AACT;AAEA,eAAeM,aAAAA,GAAAA;IACb,MAAMC,UAAAA,GAAaC,4BAAAA,CAAYlB,eAAAA,CAAAA,CAAiBiB,UAAU,EAAA;IAC1D,MAAME,UAAAA,GAAaF,UAAAA,CAAWG,IAAI,CAAClB,oBAAAA,CAAAA;AAEnC,IAAA,IAAI,CAACiB,UAAAA,EAAY;AACf,QAAA,MAAMd,oBAAAA,CAAIU,SAAS,CAACE,UAAU,CAAC,CAAA,CAAE,CAAA;QACjC,OAAOA,UAAU,CAAC,CAAA,CAAE;AACtB,IAAA;IACA,OAAOE,UAAAA;AACT;AAEO,eAAeE,cAAAA,GAAAA;AACpB,IAAA,MAAMF,aAAa,MAAMH,aAAAA,EAAAA;AACzB,IAAA,MAAMM,cAAAA,GAAiBX,qBAAAA,CAAKC,IAAI,CAACO,UAAAA,EAAYlB,eAAAA,CAAAA;IAC7C,MAAMI,oBAAAA,CAAIkB,UAAU,CAACD,cAAAA,CAAAA;IACrB,IAAI;AACF,QAAA,OAAO,MAAMjB,oBAAAA,CAAImB,QAAQ,CAACF,cAAAA,EAAgB;YAAEG,QAAAA,EAAU,MAAA;YAAQC,MAAAA,EAAQ;AAAK,SAAA,CAAA;AAC7E,IAAA,CAAA,CAAE,OAAOlB,CAAAA,EAAG;AACV,QAAA,OAAO,EAAC;AACV,IAAA;AACF;AAEO,eAAemB,gBAAgBC,IAAiB,EAAA;AACrD,IAAA,MAAMT,aAAa,MAAMH,aAAAA,EAAAA;AACzB,IAAA,MAAMM,cAAAA,GAAiBX,qBAAAA,CAAKC,IAAI,CAACO,UAAAA,EAAYlB,eAAAA,CAAAA;AAC7C,IAAA,MAAMI,oBAAAA,CAAIwB,SAAS,CAACP,cAAAA,EAAgBM,IAAAA,EAAM;QAAEH,QAAAA,EAAU,MAAA;QAAQK,MAAAA,EAAQ,CAAA;QAAGC,IAAAA,EAAM;AAAM,KAAA,CAAA;AACvF;;;;;;;"}
|
|
@@ -23,7 +23,10 @@ var action$1 = require('../login/action.js');
|
|
|
23
23
|
var analytics = require('../utils/analytics.js');
|
|
24
24
|
var errorMessageFactories = require('../utils/error-message-factories.js');
|
|
25
25
|
|
|
26
|
-
function
|
|
26
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
27
|
+
|
|
28
|
+
function _interopNamespace(e) {
|
|
29
|
+
if (e && e.__esModule) return e;
|
|
27
30
|
var n = Object.create(null);
|
|
28
31
|
if (e) {
|
|
29
32
|
Object.keys(e).forEach(function (k) {
|
|
@@ -40,7 +43,11 @@ function _interopNamespaceDefault(e) {
|
|
|
40
43
|
return Object.freeze(n);
|
|
41
44
|
}
|
|
42
45
|
|
|
43
|
-
var
|
|
46
|
+
var fse__default = /*#__PURE__*/_interopDefault(fse);
|
|
47
|
+
var boxen__default = /*#__PURE__*/_interopDefault(boxen);
|
|
48
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
49
|
+
var chalk__default = /*#__PURE__*/_interopDefault(chalk);
|
|
50
|
+
var crypto__namespace = /*#__PURE__*/_interopNamespace(crypto);
|
|
44
51
|
|
|
45
52
|
const boxenOptions = {
|
|
46
53
|
padding: 1,
|
|
@@ -64,7 +71,7 @@ async function promptForEnvironment(environments) {
|
|
|
64
71
|
choices: [
|
|
65
72
|
...choices,
|
|
66
73
|
{
|
|
67
|
-
name:
|
|
74
|
+
name: chalk__default.default.grey(`(${QUIT_OPTION})`),
|
|
68
75
|
value: null
|
|
69
76
|
}
|
|
70
77
|
]
|
|
@@ -79,7 +86,7 @@ async function upload(ctx, project, cliConfig, token, maxProjectFileSize) {
|
|
|
79
86
|
const cloudApi = await cliApi.cloudApiFactory(ctx, token);
|
|
80
87
|
try {
|
|
81
88
|
const storagePath = await local.getTmpStoragePath();
|
|
82
|
-
const projectFolder =
|
|
89
|
+
const projectFolder = path__default.default.resolve(process.cwd());
|
|
83
90
|
const packageJson = await pkg.loadPkg(ctx);
|
|
84
91
|
if (!packageJson) {
|
|
85
92
|
ctx.logger.error('Unable to deploy the project. Please make sure the package.json file is correctly formatted.');
|
|
@@ -99,12 +106,12 @@ async function upload(ctx, project, cliConfig, token, maxProjectFileSize) {
|
|
|
99
106
|
ctx.logger.debug(e);
|
|
100
107
|
process.exit(1);
|
|
101
108
|
}
|
|
102
|
-
const tarFilePath =
|
|
103
|
-
const fileStats = await
|
|
109
|
+
const tarFilePath = path__default.default.resolve(storagePath, compressedFilename);
|
|
110
|
+
const fileStats = await fse__default.default.stat(tarFilePath);
|
|
104
111
|
if (fileStats.size > maxProjectFileSize) {
|
|
105
112
|
ctx.logger.log('Unable to proceed: Your project is too big to be transferred, please use a git repo instead.');
|
|
106
113
|
try {
|
|
107
|
-
await
|
|
114
|
+
await fse__default.default.remove(tarFilePath);
|
|
108
115
|
} catch (e) {
|
|
109
116
|
ctx.logger.log('Unable to remove file: ', tarFilePath);
|
|
110
117
|
ctx.logger.debug(e);
|
|
@@ -125,13 +132,13 @@ async function upload(ctx, project, cliConfig, token, maxProjectFileSize) {
|
|
|
125
132
|
});
|
|
126
133
|
progressBar.update(100);
|
|
127
134
|
progressBar.stop();
|
|
128
|
-
ctx.logger.log(`${
|
|
135
|
+
ctx.logger.log(`${chalk__default.default.green.bold('✔')} Upload finished!\n`);
|
|
129
136
|
return data.build_id;
|
|
130
137
|
} catch (e) {
|
|
131
138
|
progressBar.stop();
|
|
132
139
|
await handleUploadError(ctx, e, project, cliConfig);
|
|
133
140
|
} finally{
|
|
134
|
-
await
|
|
141
|
+
await fse__default.default.remove(tarFilePath);
|
|
135
142
|
}
|
|
136
143
|
process.exit(0);
|
|
137
144
|
} catch (e) {
|
|
@@ -238,13 +245,13 @@ var action = (async (ctx, opts)=>{
|
|
|
238
245
|
const isProjectSuspended = projectData.suspendedAt;
|
|
239
246
|
if (isProjectSuspended) {
|
|
240
247
|
ctx.logger.log('\n Oops! This project has been suspended. \n\n Please reactivate it from the dashboard to continue deploying: ');
|
|
241
|
-
ctx.logger.log(
|
|
248
|
+
ctx.logger.log(chalk__default.default.underline(`${metadata.dashboardUrls.project}`));
|
|
242
249
|
return;
|
|
243
250
|
}
|
|
244
251
|
} catch (e) {
|
|
245
252
|
if (e instanceof axios.AxiosError && e.response?.data) {
|
|
246
253
|
if (e.response.status === 404) {
|
|
247
|
-
ctx.logger.warn(`The project associated with this folder does not exist in Strapi Cloud. \nPlease link your local project to an existing Strapi Cloud project using the ${
|
|
254
|
+
ctx.logger.warn(`The project associated with this folder does not exist in Strapi Cloud. \nPlease link your local project to an existing Strapi Cloud project using the ${chalk__default.default.cyan('link')} command before deploying.`);
|
|
248
255
|
} else {
|
|
249
256
|
ctx.logger.error(e.response.data);
|
|
250
257
|
}
|
|
@@ -276,13 +283,13 @@ var action = (async (ctx, opts)=>{
|
|
|
276
283
|
if (!opts.force) {
|
|
277
284
|
const shouldDisplayWarning = hasPendingOrLiveDeployment(environmentsDetails, project.targetEnvironment);
|
|
278
285
|
if (shouldDisplayWarning) {
|
|
279
|
-
ctx.logger.log(
|
|
286
|
+
ctx.logger.log(boxen__default.default(cliConfig.projectDeployment.confirmationText, boxenOptions));
|
|
280
287
|
const { default: inquirer } = await import('inquirer');
|
|
281
288
|
const { confirm } = await inquirer.prompt([
|
|
282
289
|
{
|
|
283
290
|
type: 'confirm',
|
|
284
291
|
name: 'confirm',
|
|
285
|
-
message: `Do you want to proceed with deployment to ${
|
|
292
|
+
message: `Do you want to proceed with deployment to ${chalk__default.default.cyan(projectData.displayName)} on ${chalk__default.default.cyan(project.targetEnvironment)} environment?`
|
|
286
293
|
}
|
|
287
294
|
]);
|
|
288
295
|
if (!confirm) {
|
|
@@ -296,11 +303,11 @@ var action = (async (ctx, opts)=>{
|
|
|
296
303
|
}
|
|
297
304
|
let notifications = null;
|
|
298
305
|
try {
|
|
299
|
-
ctx.logger.log(`∷ Deploying project to ${
|
|
306
|
+
ctx.logger.log(`∷ Deploying project to ${chalk__default.default.cyan(project.targetEnvironment ?? `production`)} environment...`);
|
|
300
307
|
notifications = notificationService(`${api.apiConfig.apiBaseUrl}/${cliApi.VERSION}/notifications`, token$1, cliConfig);
|
|
301
308
|
await buildLogsService(`${api.apiConfig.apiBaseUrl}/${cliApi.VERSION}/logs/${buildId}`, token$1, cliConfig);
|
|
302
|
-
const dashboardUrlLine =
|
|
303
|
-
ctx.logger.log(
|
|
309
|
+
const dashboardUrlLine = chalk__default.default.cyan(' → ') + chalk__default.default.cyan.underline(`${api.apiConfig.dashboardBaseUrl}/projects/${project.name}/deployments`);
|
|
310
|
+
ctx.logger.log(boxen__default.default(`Project and deployment logs ready at:\n${dashboardUrlLine}`, {
|
|
304
311
|
padding: 1,
|
|
305
312
|
margin: 1,
|
|
306
313
|
borderStyle: 'round',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sources":["../../src/deploy-project/action.ts"],"sourcesContent":["import fse from 'fs-extra';\nimport boxen from 'boxen';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { AxiosError } from 'axios';\nimport * as crypto from 'node:crypto';\nimport { apiConfig } from '../config/api';\nimport { compressFilesToTar } from '../utils/compress-files';\nimport createProjectAction from '../create-project/action';\nimport type {\n CLIContext,\n CloudApiService,\n CloudCliConfig,\n EnvironmentDetails,\n ProjectInfo,\n} from '../types';\nimport { getTmpStoragePath } from '../config/local';\nimport { cloudApiFactory, tokenServiceFactory, local } from '../services';\nimport { VERSION } from '../services/cli-api';\nimport { notificationServiceFactory } from '../services/notification';\nimport { loadPkg } from '../utils/pkg';\nimport { buildLogsServiceFactory } from '../services/build-logs';\nimport { promptLogin } from '../login/action';\nimport { trackEvent } from '../utils/analytics';\nimport {\n environmentCreationErrorFactory,\n environmentErrorMessageFactory,\n} from '../utils/error-message-factories';\n\ntype PackageJson = {\n name: string;\n strapi?: {\n uuid: string;\n };\n};\n\ninterface CmdOptions {\n env?: string;\n force?: boolean;\n}\n\nconst boxenOptions: boxen.Options = {\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'round',\n};\n\nconst QUIT_OPTION = 'Quit';\n\nasync function promptForEnvironment(environments: string[]): Promise<string> {\n const { default: inquirer } = await import('inquirer');\n const choices = environments.map((env) => ({ name: env, value: env }));\n const { selectedEnvironment } = await inquirer.prompt([\n {\n type: 'list',\n name: 'selectedEnvironment',\n message: 'Select the environment to deploy:',\n choices: [...choices, { name: chalk.grey(`(${QUIT_OPTION})`), value: null }],\n },\n ]);\n if (selectedEnvironment === null) {\n process.exit(1);\n }\n\n return selectedEnvironment;\n}\n\nasync function upload(\n ctx: CLIContext,\n project: Omit<ProjectInfo, 'id'>,\n cliConfig: CloudCliConfig,\n token: string,\n maxProjectFileSize: number\n) {\n const cloudApi = await cloudApiFactory(ctx, token);\n try {\n const storagePath = await getTmpStoragePath();\n const projectFolder = path.resolve(process.cwd());\n const packageJson = (await loadPkg(ctx)) as PackageJson;\n\n if (!packageJson) {\n ctx.logger.error(\n 'Unable to deploy the project. Please make sure the package.json file is correctly formatted.'\n );\n return;\n }\n\n const compressSpinner = ctx.logger.spinner('Compressing project...').start();\n compressSpinner.indent = 1;\n // hash packageJson.name to avoid conflicts\n const hashname = crypto.createHash('sha512').update(packageJson.name).digest('hex');\n const compressedFilename = `${hashname}.tar.gz`;\n try {\n ctx.logger.debug(\n 'Compression parameters\\n',\n `Storage path: ${storagePath}\\n`,\n `Project folder: ${projectFolder}\\n`,\n `Compressed filename: ${compressedFilename}`\n );\n await compressFilesToTar(storagePath, projectFolder, compressedFilename);\n compressSpinner.succeed(`Project compressed successfully!`);\n } catch (e: unknown) {\n compressSpinner.fail(\n 'Project compression failed. Try again later or check for large/incompatible files.'\n );\n ctx.logger.debug(e);\n process.exit(1);\n }\n\n const tarFilePath = path.resolve(storagePath, compressedFilename);\n const fileStats = await fse.stat(tarFilePath);\n\n if (fileStats.size > maxProjectFileSize) {\n ctx.logger.log(\n 'Unable to proceed: Your project is too big to be transferred, please use a git repo instead.'\n );\n try {\n await fse.remove(tarFilePath);\n } catch (e: any) {\n ctx.logger.log('Unable to remove file: ', tarFilePath);\n ctx.logger.debug(e);\n }\n return;\n }\n\n const progressBar = ctx.logger.progressBar(100, ' ∷ Uploading project');\n\n try {\n const { data } = await cloudApi.deploy(\n { filePath: tarFilePath, project },\n {\n onUploadProgress(progressEvent) {\n const total = progressEvent.total || fileStats.size;\n const percentage = Math.round((progressEvent.loaded * 100) / total);\n progressBar.update(percentage);\n },\n }\n );\n\n progressBar.update(100);\n progressBar.stop();\n ctx.logger.log(`${chalk.green.bold('✔')} Upload finished!\\n`);\n return data.build_id;\n } catch (e: any) {\n progressBar.stop();\n await handleUploadError(ctx, e, project, cliConfig);\n } finally {\n await fse.remove(tarFilePath);\n }\n process.exit(0);\n } catch (e: any) {\n ctx.logger.error('An error occurred while deploying the project. Please try again later.');\n ctx.logger.debug(e);\n process.exit(1);\n }\n}\n\nasync function handleUploadError(\n ctx: CLIContext,\n error: any,\n project: any,\n cliConfig: CloudCliConfig\n) {\n const { logger } = ctx;\n logger.debug(error);\n\n if (error.response?.status) {\n switch (error.response.status) {\n case 405: {\n const environmentErrorMessage = environmentErrorMessageFactory({\n projectName: project.name,\n firstLine: cliConfig.projectDeployment.errors.environmentNotReady.firstLine,\n secondLine: cliConfig.projectDeployment.errors.environmentNotReady.secondLine,\n });\n logger.log(environmentCreationErrorFactory(environmentErrorMessage));\n return;\n }\n case 413:\n logger.error(\n 'The project you are trying to upload is too big. Please remove unnecessary files and try again.'\n );\n return;\n default:\n break;\n }\n }\n logger.error('An error occurred while deploying the project. Please try again later.');\n}\n\nasync function getProject(ctx: CLIContext) {\n const { project } = await local.retrieve();\n if (!project) {\n try {\n const projectResponse = await createProjectAction(ctx);\n if (projectResponse) {\n const { project: projectSaved } = await local.retrieve();\n return projectSaved;\n }\n } catch (e: any) {\n ctx.logger.error('An error occurred while deploying the project. Please try again later.');\n ctx.logger.debug(e);\n process.exit(1);\n }\n }\n return project;\n}\n\nasync function getConfig({\n ctx,\n cloudApiService,\n}: {\n ctx: CLIContext;\n cloudApiService: CloudApiService;\n}): Promise<CloudCliConfig | null> {\n try {\n const { data: cliConfig } = await cloudApiService.config();\n return cliConfig;\n } catch (e) {\n ctx.logger.debug('Failed to get cli config', e);\n return null;\n }\n}\n\nfunction validateEnvironment(ctx: CLIContext, environment: string, environments: string[]): void {\n if (!environments.includes(environment)) {\n ctx.logger.error(`Environment ${environment} does not exist.`);\n process.exit(1);\n }\n}\n\nasync function getTargetEnvironment(\n ctx: CLIContext,\n opts: CmdOptions,\n project: Omit<ProjectInfo, 'id'>,\n environments: string[]\n): Promise<string> {\n if (opts.env) {\n validateEnvironment(ctx, opts.env, environments);\n return opts.env;\n }\n\n if (project.targetEnvironment) {\n return project.targetEnvironment;\n }\n\n if (environments.length > 1) {\n return promptForEnvironment(environments);\n }\n\n return environments[0];\n}\n\nfunction hasPendingOrLiveDeployment(\n environments: EnvironmentDetails[],\n targetEnvironment: string\n): boolean {\n const environment = environments.find((env) => env.name === targetEnvironment);\n if (!environment) {\n throw new Error(`Environment details ${targetEnvironment} not found.`);\n }\n return environment.hasPendingDeployment || environment.hasLiveDeployment || false;\n}\n\nexport default async (ctx: CLIContext, opts: CmdOptions) => {\n const { getValidToken } = await tokenServiceFactory(ctx);\n const token = await getValidToken(ctx, promptLogin);\n if (!token) {\n return;\n }\n\n const project = await getProject(ctx);\n if (!project) {\n process.exit(1);\n }\n\n const cloudApiService = await cloudApiFactory(ctx, token);\n let projectData;\n let environments: string[];\n let environmentsDetails: EnvironmentDetails[];\n\n try {\n const {\n data: { data, metadata },\n } = await cloudApiService.getProject({ name: project.name });\n projectData = data;\n environments = projectData.environments;\n environmentsDetails = projectData.environmentsDetails;\n const isProjectSuspended = projectData.suspendedAt;\n\n if (isProjectSuspended) {\n ctx.logger.log(\n '\\n Oops! This project has been suspended. \\n\\n Please reactivate it from the dashboard to continue deploying: '\n );\n ctx.logger.log(chalk.underline(`${metadata.dashboardUrls.project}`));\n return;\n }\n } catch (e: Error | unknown) {\n if (e instanceof AxiosError && e.response?.data) {\n if (e.response.status === 404) {\n ctx.logger.warn(\n `The project associated with this folder does not exist in Strapi Cloud. \\nPlease link your local project to an existing Strapi Cloud project using the ${chalk.cyan(\n 'link'\n )} command before deploying.`\n );\n } else {\n ctx.logger.error(e.response.data);\n }\n } else {\n ctx.logger.error(\n \"An error occurred while retrieving the project's information. Please try again later.\"\n );\n }\n ctx.logger.debug(e);\n return;\n }\n\n await trackEvent(ctx, cloudApiService, 'willDeployWithCLI', {\n projectInternalName: project.name,\n });\n\n const notificationService = notificationServiceFactory(ctx);\n const buildLogsService = buildLogsServiceFactory(ctx);\n\n const cliConfig = await getConfig({ ctx, cloudApiService });\n if (!cliConfig) {\n ctx.logger.error(\n 'An error occurred while retrieving data from Strapi Cloud. Please check your network or try again later.'\n );\n return;\n }\n\n let maxSize: number = parseInt(cliConfig.maxProjectFileSize, 10);\n if (Number.isNaN(maxSize)) {\n ctx.logger.debug(\n 'An error occurred while parsing the maxProjectFileSize. Using default value.'\n );\n maxSize = 100000000;\n }\n\n project.targetEnvironment = await getTargetEnvironment(ctx, opts, project, environments);\n\n if (!opts.force) {\n const shouldDisplayWarning = hasPendingOrLiveDeployment(\n environmentsDetails,\n project.targetEnvironment\n );\n if (shouldDisplayWarning) {\n ctx.logger.log(boxen(cliConfig.projectDeployment.confirmationText, boxenOptions));\n const { default: inquirer } = await import('inquirer');\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: `Do you want to proceed with deployment to ${chalk.cyan(projectData.displayName)} on ${chalk.cyan(project.targetEnvironment)} environment?`,\n },\n ]);\n if (!confirm) {\n process.exit(1);\n }\n }\n }\n\n const buildId = await upload(ctx, project, cliConfig, token, maxSize);\n\n if (!buildId) {\n return;\n }\n\n let notifications: ReturnType<typeof notificationService> | null = null;\n\n try {\n ctx.logger.log(\n `∷ Deploying project to ${chalk.cyan(project.targetEnvironment ?? `production`)} environment...`\n );\n\n notifications = notificationService(\n `${apiConfig.apiBaseUrl}/${VERSION}/notifications`,\n token,\n cliConfig\n );\n\n await buildLogsService(`${apiConfig.apiBaseUrl}/${VERSION}/logs/${buildId}`, token, cliConfig);\n const dashboardUrlLine =\n chalk.cyan(' → ') +\n chalk.cyan.underline(`${apiConfig.dashboardBaseUrl}/projects/${project.name}/deployments`);\n ctx.logger.log(\n boxen(`Project and deployment logs ready at:\\n${dashboardUrlLine}`, {\n padding: 1,\n margin: 1,\n borderStyle: 'round',\n borderColor: 'white',\n titleAlignment: 'left',\n })\n );\n } catch (e: Error | unknown) {\n ctx.logger.debug(e);\n if (e instanceof Error) {\n ctx.logger.error(e.message);\n } else {\n ctx.logger.error('An error occurred while deploying the project. Please try again later.');\n }\n } finally {\n if (notifications) {\n notifications.close();\n }\n }\n};\n"],"names":["boxenOptions","padding","margin","align","borderColor","borderStyle","QUIT_OPTION","promptForEnvironment","environments","default","inquirer","choices","map","env","name","value","selectedEnvironment","prompt","type","message","chalk","grey","process","exit","upload","ctx","project","cliConfig","token","maxProjectFileSize","cloudApi","cloudApiFactory","storagePath","getTmpStoragePath","projectFolder","path","resolve","cwd","packageJson","loadPkg","logger","error","compressSpinner","spinner","start","indent","hashname","crypto","createHash","update","digest","compressedFilename","debug","compressFilesToTar","succeed","e","fail","tarFilePath","fileStats","fse","stat","size","log","remove","progressBar","data","deploy","filePath","onUploadProgress","progressEvent","total","percentage","Math","round","loaded","stop","green","bold","build_id","handleUploadError","response","status","environmentErrorMessage","environmentErrorMessageFactory","projectName","firstLine","projectDeployment","errors","environmentNotReady","secondLine","environmentCreationErrorFactory","getProject","local","projectResponse","createProjectAction","projectSaved","getConfig","cloudApiService","config","validateEnvironment","environment","includes","getTargetEnvironment","opts","targetEnvironment","length","hasPendingOrLiveDeployment","find","Error","hasPendingDeployment","hasLiveDeployment","getValidToken","tokenServiceFactory","promptLogin","projectData","environmentsDetails","metadata","isProjectSuspended","suspendedAt","underline","dashboardUrls","AxiosError","warn","cyan","trackEvent","projectInternalName","notificationService","notificationServiceFactory","buildLogsService","buildLogsServiceFactory","maxSize","parseInt","Number","isNaN","force","shouldDisplayWarning","boxen","confirmationText","confirm","displayName","buildId","notifications","apiConfig","apiBaseUrl","VERSION","dashboardUrlLine","dashboardBaseUrl","titleAlignment","close"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,MAAMA,YAAAA,GAA8B;IAClCC,OAAAA,EAAS,CAAA;IACTC,MAAAA,EAAQ,CAAA;IACRC,KAAAA,EAAO,QAAA;IACPC,WAAAA,EAAa,QAAA;IACbC,WAAAA,EAAa;AACf,CAAA;AAEA,MAAMC,WAAAA,GAAc,MAAA;AAEpB,eAAeC,qBAAqBC,YAAsB,EAAA;AACxD,IAAA,MAAM,EAAEC,OAAAA,EAASC,QAAQ,EAAE,GAAG,MAAM,OAAO,UAAA,CAAA;AAC3C,IAAA,MAAMC,UAAUH,YAAAA,CAAaI,GAAG,CAAC,CAACC,OAAS;YAAEC,IAAAA,EAAMD,GAAAA;YAAKE,KAAAA,EAAOF;SAAI,CAAA,CAAA;AACnE,IAAA,MAAM,EAAEG,mBAAmB,EAAE,GAAG,MAAMN,QAAAA,CAASO,MAAM,CAAC;AACpD,QAAA;YACEC,IAAAA,EAAM,MAAA;YACNJ,IAAAA,EAAM,qBAAA;YACNK,OAAAA,EAAS,mCAAA;YACTR,OAAAA,EAAS;AAAIA,gBAAAA,GAAAA,OAAAA;AAAS,gBAAA;oBAAEG,IAAAA,EAAMM,KAAAA,CAAMC,IAAI,CAAC,CAAC,CAAC,EAAEf,WAAAA,CAAY,CAAC,CAAC,CAAA;oBAAGS,KAAAA,EAAO;AAAK;AAAE;AAC9E;AACD,KAAA,CAAA;AACD,IAAA,IAAIC,wBAAwB,IAAA,EAAM;AAChCM,QAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,IAAA;IAEA,OAAOP,mBAAAA;AACT;AAEA,eAAeQ,MAAAA,CACbC,GAAe,EACfC,OAAgC,EAChCC,SAAyB,EACzBC,KAAa,EACbC,kBAA0B,EAAA;IAE1B,MAAMC,QAAAA,GAAW,MAAMC,sBAAAA,CAAgBN,GAAAA,EAAKG,KAAAA,CAAAA;IAC5C,IAAI;AACF,QAAA,MAAMI,cAAc,MAAMC,uBAAAA,EAAAA;AAC1B,QAAA,MAAMC,aAAAA,GAAgBC,IAAAA,CAAKC,OAAO,CAACd,QAAQe,GAAG,EAAA,CAAA;QAC9C,MAAMC,WAAAA,GAAe,MAAMC,WAAAA,CAAQd,GAAAA,CAAAA;AAEnC,QAAA,IAAI,CAACa,WAAAA,EAAa;YAChBb,GAAAA,CAAIe,MAAM,CAACC,KAAK,CACd,8FAAA,CAAA;AAEF,YAAA;AACF,QAAA;AAEA,QAAA,MAAMC,kBAAkBjB,GAAAA,CAAIe,MAAM,CAACG,OAAO,CAAC,0BAA0BC,KAAK,EAAA;AAC1EF,QAAAA,eAAAA,CAAgBG,MAAM,GAAG,CAAA;;QAEzB,MAAMC,QAAAA,GAAWC,iBAAAA,CAAOC,UAAU,CAAC,QAAA,CAAA,CAAUC,MAAM,CAACX,WAAAA,CAAYxB,IAAI,CAAA,CAAEoC,MAAM,CAAC,KAAA,CAAA;AAC7E,QAAA,MAAMC,kBAAAA,GAAqB,CAAA,EAAGL,QAAAA,CAAS,OAAO,CAAC;QAC/C,IAAI;YACFrB,GAAAA,CAAIe,MAAM,CAACY,KAAK,CACd,4BACA,CAAC,cAAc,EAAEpB,WAAAA,CAAY,EAAE,CAAC,EAChC,CAAC,gBAAgB,EAAEE,aAAAA,CAAc,EAAE,CAAC,EACpC,CAAC,qBAAqB,EAAEiB,kBAAAA,CAAAA,CAAoB,CAAA;YAE9C,MAAME,gCAAAA,CAAmBrB,aAAaE,aAAAA,EAAeiB,kBAAAA,CAAAA;AACrDT,YAAAA,eAAAA,CAAgBY,OAAO,CAAC,CAAC,gCAAgC,CAAC,CAAA;AAC5D,QAAA,CAAA,CAAE,OAAOC,CAAAA,EAAY;AACnBb,YAAAA,eAAAA,CAAgBc,IAAI,CAClB,oFAAA,CAAA;YAEF/B,GAAAA,CAAIe,MAAM,CAACY,KAAK,CAACG,CAAAA,CAAAA;AACjBjC,YAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,QAAA;AAEA,QAAA,MAAMkC,WAAAA,GAActB,IAAAA,CAAKC,OAAO,CAACJ,WAAAA,EAAamB,kBAAAA,CAAAA;AAC9C,QAAA,MAAMO,SAAAA,GAAY,MAAMC,GAAAA,CAAIC,IAAI,CAACH,WAAAA,CAAAA;QAEjC,IAAIC,SAAAA,CAAUG,IAAI,GAAGhC,kBAAAA,EAAoB;YACvCJ,GAAAA,CAAIe,MAAM,CAACsB,GAAG,CACZ,8FAAA,CAAA;YAEF,IAAI;gBACF,MAAMH,GAAAA,CAAII,MAAM,CAACN,WAAAA,CAAAA;AACnB,YAAA,CAAA,CAAE,OAAOF,CAAAA,EAAQ;AACf9B,gBAAAA,GAAAA,CAAIe,MAAM,CAACsB,GAAG,CAAC,yBAAA,EAA2BL,WAAAA,CAAAA;gBAC1ChC,GAAAA,CAAIe,MAAM,CAACY,KAAK,CAACG,CAAAA,CAAAA;AACnB,YAAA;AACA,YAAA;AACF,QAAA;AAEA,QAAA,MAAMS,cAAcvC,GAAAA,CAAIe,MAAM,CAACwB,WAAW,CAAC,GAAA,EAAK,sBAAA,CAAA;QAEhD,IAAI;AACF,YAAA,MAAM,EAAEC,IAAI,EAAE,GAAG,MAAMnC,QAAAA,CAASoC,MAAM,CACpC;gBAAEC,QAAAA,EAAUV,WAAAA;AAAa/B,gBAAAA;aAAQ,EACjC;AACE0C,gBAAAA,gBAAAA,CAAAA,CAAiBC,aAAa,EAAA;AAC5B,oBAAA,MAAMC,KAAAA,GAAQD,aAAAA,CAAcC,KAAK,IAAIZ,UAAUG,IAAI;oBACnD,MAAMU,UAAAA,GAAaC,KAAKC,KAAK,CAAC,aAACJ,CAAcK,MAAM,GAAG,GAAA,GAAOJ,KAAAA,CAAAA;AAC7DN,oBAAAA,WAAAA,CAAYf,MAAM,CAACsB,UAAAA,CAAAA;AACrB,gBAAA;AACF,aAAA,CAAA;AAGFP,YAAAA,WAAAA,CAAYf,MAAM,CAAC,GAAA,CAAA;AACnBe,YAAAA,WAAAA,CAAYW,IAAI,EAAA;AAChBlD,YAAAA,GAAAA,CAAIe,MAAM,CAACsB,GAAG,CAAC,CAAA,EAAG1C,KAAAA,CAAMwD,KAAK,CAACC,IAAI,CAAC,GAAA,CAAA,CAAK,mBAAmB,CAAC,CAAA;AAC5D,YAAA,OAAOZ,KAAKa,QAAQ;AACtB,QAAA,CAAA,CAAE,OAAOvB,CAAAA,EAAQ;AACfS,YAAAA,WAAAA,CAAYW,IAAI,EAAA;YAChB,MAAMI,iBAAAA,CAAkBtD,GAAAA,EAAK8B,CAAAA,EAAG7B,OAAAA,EAASC,SAAAA,CAAAA;QAC3C,CAAA,QAAU;YACR,MAAMgC,GAAAA,CAAII,MAAM,CAACN,WAAAA,CAAAA;AACnB,QAAA;AACAnC,QAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,IAAA,CAAA,CAAE,OAAOgC,CAAAA,EAAQ;QACf9B,GAAAA,CAAIe,MAAM,CAACC,KAAK,CAAC,wEAAA,CAAA;QACjBhB,GAAAA,CAAIe,MAAM,CAACY,KAAK,CAACG,CAAAA,CAAAA;AACjBjC,QAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,IAAA;AACF;AAEA,eAAewD,kBACbtD,GAAe,EACfgB,KAAU,EACVf,OAAY,EACZC,SAAyB,EAAA;IAEzB,MAAM,EAAEa,MAAM,EAAE,GAAGf,GAAAA;AACnBe,IAAAA,MAAAA,CAAOY,KAAK,CAACX,KAAAA,CAAAA;IAEb,IAAIA,KAAAA,CAAMuC,QAAQ,EAAEC,MAAAA,EAAQ;QAC1B,OAAQxC,KAAAA,CAAMuC,QAAQ,CAACC,MAAM;YAC3B,KAAK,GAAA;AAAK,gBAAA;AACR,oBAAA,MAAMC,0BAA0BC,oDAAAA,CAA+B;AAC7DC,wBAAAA,WAAAA,EAAa1D,QAAQZ,IAAI;AACzBuE,wBAAAA,SAAAA,EAAW1D,UAAU2D,iBAAiB,CAACC,MAAM,CAACC,mBAAmB,CAACH,SAAS;AAC3EI,wBAAAA,UAAAA,EAAY9D,UAAU2D,iBAAiB,CAACC,MAAM,CAACC,mBAAmB,CAACC;AACrE,qBAAA,CAAA;oBACAjD,MAAAA,CAAOsB,GAAG,CAAC4B,qDAAAA,CAAgCR,uBAAAA,CAAAA,CAAAA;AAC3C,oBAAA;AACF,gBAAA;YACA,KAAK,GAAA;AACH1C,gBAAAA,MAAAA,CAAOC,KAAK,CACV,iGAAA,CAAA;AAEF,gBAAA;AAGJ;AACF,IAAA;AACAD,IAAAA,MAAAA,CAAOC,KAAK,CAAC,wEAAA,CAAA;AACf;AAEA,eAAekD,WAAWlE,GAAe,EAAA;AACvC,IAAA,MAAM,EAAEC,OAAO,EAAE,GAAG,MAAMkE,uBAAc,EAAA;AACxC,IAAA,IAAI,CAAClE,OAAAA,EAAS;QACZ,IAAI;YACF,MAAMmE,eAAAA,GAAkB,MAAMC,QAAAA,CAAoBrE,GAAAA,CAAAA;AAClD,YAAA,IAAIoE,eAAAA,EAAiB;AACnB,gBAAA,MAAM,EAAEnE,OAAAA,EAASqE,YAAY,EAAE,GAAG,MAAMH,uBAAc,EAAA;gBACtD,OAAOG,YAAAA;AACT,YAAA;AACF,QAAA,CAAA,CAAE,OAAOxC,CAAAA,EAAQ;YACf9B,GAAAA,CAAIe,MAAM,CAACC,KAAK,CAAC,wEAAA,CAAA;YACjBhB,GAAAA,CAAIe,MAAM,CAACY,KAAK,CAACG,CAAAA,CAAAA;AACjBjC,YAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,QAAA;AACF,IAAA;IACA,OAAOG,OAAAA;AACT;AAEA,eAAesE,SAAAA,CAAU,EACvBvE,GAAG,EACHwE,eAAe,EAIhB,EAAA;IACC,IAAI;AACF,QAAA,MAAM,EAAEhC,IAAAA,EAAMtC,SAAS,EAAE,GAAG,MAAMsE,gBAAgBC,MAAM,EAAA;QACxD,OAAOvE,SAAAA;AACT,IAAA,CAAA,CAAE,OAAO4B,CAAAA,EAAG;AACV9B,QAAAA,GAAAA,CAAIe,MAAM,CAACY,KAAK,CAAC,0BAAA,EAA4BG,CAAAA,CAAAA;QAC7C,OAAO,IAAA;AACT,IAAA;AACF;AAEA,SAAS4C,mBAAAA,CAAoB1E,GAAe,EAAE2E,WAAmB,EAAE5F,YAAsB,EAAA;AACvF,IAAA,IAAI,CAACA,YAAAA,CAAa6F,QAAQ,CAACD,WAAAA,CAAAA,EAAc;QACvC3E,GAAAA,CAAIe,MAAM,CAACC,KAAK,CAAC,CAAC,YAAY,EAAE2D,WAAAA,CAAY,gBAAgB,CAAC,CAAA;AAC7D9E,QAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,IAAA;AACF;AAEA,eAAe+E,qBACb7E,GAAe,EACf8E,IAAgB,EAChB7E,OAAgC,EAChClB,YAAsB,EAAA;IAEtB,IAAI+F,IAAAA,CAAK1F,GAAG,EAAE;QACZsF,mBAAAA,CAAoB1E,GAAAA,EAAK8E,IAAAA,CAAK1F,GAAG,EAAEL,YAAAA,CAAAA;AACnC,QAAA,OAAO+F,KAAK1F,GAAG;AACjB,IAAA;IAEA,IAAIa,OAAAA,CAAQ8E,iBAAiB,EAAE;AAC7B,QAAA,OAAO9E,QAAQ8E,iBAAiB;AAClC,IAAA;IAEA,IAAIhG,YAAAA,CAAaiG,MAAM,GAAG,CAAA,EAAG;AAC3B,QAAA,OAAOlG,oBAAAA,CAAqBC,YAAAA,CAAAA;AAC9B,IAAA;IAEA,OAAOA,YAAY,CAAC,CAAA,CAAE;AACxB;AAEA,SAASkG,0BAAAA,CACPlG,YAAkC,EAClCgG,iBAAyB,EAAA;IAEzB,MAAMJ,WAAAA,GAAc5F,aAAamG,IAAI,CAAC,CAAC9F,GAAAA,GAAQA,GAAAA,CAAIC,IAAI,KAAK0F,iBAAAA,CAAAA;AAC5D,IAAA,IAAI,CAACJ,WAAAA,EAAa;AAChB,QAAA,MAAM,IAAIQ,KAAAA,CAAM,CAAC,oBAAoB,EAAEJ,iBAAAA,CAAkB,WAAW,CAAC,CAAA;AACvE,IAAA;AACA,IAAA,OAAOJ,WAAAA,CAAYS,oBAAoB,IAAIT,WAAAA,CAAYU,iBAAiB,IAAI,KAAA;AAC9E;AAEA,aAAe,CAAA,OAAOrF,GAAAA,EAAiB8E,IAAAA,GAAAA;AACrC,IAAA,MAAM,EAAEQ,aAAa,EAAE,GAAG,MAAMC,yBAAAA,CAAoBvF,GAAAA,CAAAA;IACpD,MAAMG,OAAAA,GAAQ,MAAMmF,aAAAA,CAActF,GAAAA,EAAKwF,oBAAAA,CAAAA;AACvC,IAAA,IAAI,CAACrF,OAAAA,EAAO;AACV,QAAA;AACF,IAAA;IAEA,MAAMF,OAAAA,GAAU,MAAMiE,UAAAA,CAAWlE,GAAAA,CAAAA;AACjC,IAAA,IAAI,CAACC,OAAAA,EAAS;AACZJ,QAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,IAAA;IAEA,MAAM0E,eAAAA,GAAkB,MAAMlE,sBAAAA,CAAgBN,GAAAA,EAAKG,OAAAA,CAAAA;IACnD,IAAIsF,WAAAA;IACJ,IAAI1G,YAAAA;IACJ,IAAI2G,mBAAAA;IAEJ,IAAI;AACF,QAAA,MAAM,EACJlD,IAAAA,EAAM,EAAEA,IAAI,EAAEmD,QAAQ,EAAE,EACzB,GAAG,MAAMnB,eAAAA,CAAgBN,UAAU,CAAC;AAAE7E,YAAAA,IAAAA,EAAMY,QAAQZ;AAAK,SAAA,CAAA;QAC1DoG,WAAAA,GAAcjD,IAAAA;AACdzD,QAAAA,YAAAA,GAAe0G,YAAY1G,YAAY;AACvC2G,QAAAA,mBAAAA,GAAsBD,YAAYC,mBAAmB;QACrD,MAAME,kBAAAA,GAAqBH,YAAYI,WAAW;AAElD,QAAA,IAAID,kBAAAA,EAAoB;YACtB5F,GAAAA,CAAIe,MAAM,CAACsB,GAAG,CACZ,gHAAA,CAAA;AAEFrC,YAAAA,GAAAA,CAAIe,MAAM,CAACsB,GAAG,CAAC1C,KAAAA,CAAMmG,SAAS,CAAC,CAAA,EAAGH,QAAAA,CAASI,aAAa,CAAC9F,OAAO,CAAA,CAAE,CAAA,CAAA;AAClE,YAAA;AACF,QAAA;AACF,IAAA,CAAA,CAAE,OAAO6B,CAAAA,EAAoB;AAC3B,QAAA,IAAIA,CAAAA,YAAakE,gBAAAA,IAAclE,CAAAA,CAAEyB,QAAQ,EAAEf,IAAAA,EAAM;AAC/C,YAAA,IAAIV,CAAAA,CAAEyB,QAAQ,CAACC,MAAM,KAAK,GAAA,EAAK;AAC7BxD,gBAAAA,GAAAA,CAAIe,MAAM,CAACkF,IAAI,CACb,CAAC,uJAAuJ,EAAEtG,KAAAA,CAAMuG,IAAI,CAClK,MAAA,CAAA,CACA,0BAA0B,CAAC,CAAA;YAEjC,CAAA,MAAO;AACLlG,gBAAAA,GAAAA,CAAIe,MAAM,CAACC,KAAK,CAACc,CAAAA,CAAEyB,QAAQ,CAACf,IAAI,CAAA;AAClC,YAAA;QACF,CAAA,MAAO;YACLxC,GAAAA,CAAIe,MAAM,CAACC,KAAK,CACd,uFAAA,CAAA;AAEJ,QAAA;QACAhB,GAAAA,CAAIe,MAAM,CAACY,KAAK,CAACG,CAAAA,CAAAA;AACjB,QAAA;AACF,IAAA;IAEA,MAAMqE,oBAAAA,CAAWnG,GAAAA,EAAKwE,eAAAA,EAAiB,mBAAA,EAAqB;AAC1D4B,QAAAA,mBAAAA,EAAqBnG,QAAQZ;AAC/B,KAAA,CAAA;AAEA,IAAA,MAAMgH,sBAAsBC,uCAAAA,CAA2BtG,GAAAA,CAAAA;AACvD,IAAA,MAAMuG,mBAAmBC,iCAAAA,CAAwBxG,GAAAA,CAAAA;IAEjD,MAAME,SAAAA,GAAY,MAAMqE,SAAAA,CAAU;AAAEvE,QAAAA,GAAAA;AAAKwE,QAAAA;AAAgB,KAAA,CAAA;AACzD,IAAA,IAAI,CAACtE,SAAAA,EAAW;QACdF,GAAAA,CAAIe,MAAM,CAACC,KAAK,CACd,0GAAA,CAAA;AAEF,QAAA;AACF,IAAA;AAEA,IAAA,IAAIyF,OAAAA,GAAkBC,QAAAA,CAASxG,SAAAA,CAAUE,kBAAkB,EAAE,EAAA,CAAA;IAC7D,IAAIuG,MAAAA,CAAOC,KAAK,CAACH,OAAAA,CAAAA,EAAU;QACzBzG,GAAAA,CAAIe,MAAM,CAACY,KAAK,CACd,8EAAA,CAAA;QAEF8E,OAAAA,GAAU,SAAA;AACZ,IAAA;AAEAxG,IAAAA,OAAAA,CAAQ8E,iBAAiB,GAAG,MAAMF,oBAAAA,CAAqB7E,GAAAA,EAAK8E,MAAM7E,OAAAA,EAASlB,YAAAA,CAAAA;IAE3E,IAAI,CAAC+F,IAAAA,CAAK+B,KAAK,EAAE;AACf,QAAA,MAAMC,oBAAAA,GAAuB7B,0BAAAA,CAC3BS,mBAAAA,EACAzF,OAAAA,CAAQ8E,iBAAiB,CAAA;AAE3B,QAAA,IAAI+B,oBAAAA,EAAsB;YACxB9G,GAAAA,CAAIe,MAAM,CAACsB,GAAG,CAAC0E,MAAM7G,SAAAA,CAAU2D,iBAAiB,CAACmD,gBAAgB,EAAEzI,YAAAA,CAAAA,CAAAA;AACnE,YAAA,MAAM,EAAES,OAAAA,EAASC,QAAQ,EAAE,GAAG,MAAM,OAAO,UAAA,CAAA;AAC3C,YAAA,MAAM,EAAEgI,OAAO,EAAE,GAAG,MAAMhI,QAAAA,CAASO,MAAM,CAAC;AACxC,gBAAA;oBACEC,IAAAA,EAAM,SAAA;oBACNJ,IAAAA,EAAM,SAAA;AACNK,oBAAAA,OAAAA,EAAS,CAAC,0CAA0C,EAAEC,MAAMuG,IAAI,CAACT,YAAYyB,WAAW,CAAA,CAAE,IAAI,EAAEvH,MAAMuG,IAAI,CAACjG,QAAQ8E,iBAAiB,CAAA,CAAE,aAAa;AACrJ;AACD,aAAA,CAAA;AACD,YAAA,IAAI,CAACkC,OAAAA,EAAS;AACZpH,gBAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,YAAA;AACF,QAAA;AACF,IAAA;AAEA,IAAA,MAAMqH,UAAU,MAAMpH,MAAAA,CAAOC,GAAAA,EAAKC,OAAAA,EAASC,WAAWC,OAAAA,EAAOsG,OAAAA,CAAAA;AAE7D,IAAA,IAAI,CAACU,OAAAA,EAAS;AACZ,QAAA;AACF,IAAA;AAEA,IAAA,IAAIC,aAAAA,GAA+D,IAAA;IAEnE,IAAI;AACFpH,QAAAA,GAAAA,CAAIe,MAAM,CAACsB,GAAG,CACZ,CAAC,uBAAuB,EAAE1C,KAAAA,CAAMuG,IAAI,CAACjG,OAAAA,CAAQ8E,iBAAiB,IAAI,CAAC,UAAU,CAAC,CAAA,CAAE,eAAe,CAAC,CAAA;QAGlGqC,aAAAA,GAAgBf,mBAAAA,CACd,CAAA,EAAGgB,aAAAA,CAAUC,UAAU,CAAC,CAAC,EAAEC,cAAAA,CAAQ,cAAc,CAAC,EAClDpH,OAAAA,EACAD,SAAAA,CAAAA;AAGF,QAAA,MAAMqG,gBAAAA,CAAiB,CAAA,EAAGc,aAAAA,CAAUC,UAAU,CAAC,CAAC,EAAEC,cAAAA,CAAQ,MAAM,EAAEJ,OAAAA,CAAAA,CAAS,EAAEhH,OAAAA,EAAOD,SAAAA,CAAAA;QACpF,MAAMsH,gBAAAA,GACJ7H,MAAMuG,IAAI,CAAC,UACXvG,KAAAA,CAAMuG,IAAI,CAACJ,SAAS,CAAC,GAAGuB,aAAAA,CAAUI,gBAAgB,CAAC,UAAU,EAAExH,QAAQZ,IAAI,CAAC,YAAY,CAAC,CAAA;QAC3FW,GAAAA,CAAIe,MAAM,CAACsB,GAAG,CACZ0E,MAAM,CAAC,uCAAuC,EAAES,gBAAAA,CAAAA,CAAkB,EAAE;YAClEhJ,OAAAA,EAAS,CAAA;YACTC,MAAAA,EAAQ,CAAA;YACRG,WAAAA,EAAa,OAAA;YACbD,WAAAA,EAAa,OAAA;YACb+I,cAAAA,EAAgB;AAClB,SAAA,CAAA,CAAA;AAEJ,IAAA,CAAA,CAAE,OAAO5F,CAAAA,EAAoB;QAC3B9B,GAAAA,CAAIe,MAAM,CAACY,KAAK,CAACG,CAAAA,CAAAA;AACjB,QAAA,IAAIA,aAAaqD,KAAAA,EAAO;AACtBnF,YAAAA,GAAAA,CAAIe,MAAM,CAACC,KAAK,CAACc,EAAEpC,OAAO,CAAA;QAC5B,CAAA,MAAO;YACLM,GAAAA,CAAIe,MAAM,CAACC,KAAK,CAAC,wEAAA,CAAA;AACnB,QAAA;IACF,CAAA,QAAU;AACR,QAAA,IAAIoG,aAAAA,EAAe;AACjBA,YAAAA,aAAAA,CAAcO,KAAK,EAAA;AACrB,QAAA;AACF,IAAA;AACF,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"action.js","sources":["../../src/deploy-project/action.ts"],"sourcesContent":["import fse from 'fs-extra';\nimport boxen from 'boxen';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { AxiosError } from 'axios';\nimport * as crypto from 'node:crypto';\nimport { apiConfig } from '../config/api';\nimport { compressFilesToTar } from '../utils/compress-files';\nimport createProjectAction from '../create-project/action';\nimport type {\n CLIContext,\n CloudApiService,\n CloudCliConfig,\n EnvironmentDetails,\n ProjectInfo,\n} from '../types';\nimport { getTmpStoragePath } from '../config/local';\nimport { cloudApiFactory, tokenServiceFactory, local } from '../services';\nimport { VERSION } from '../services/cli-api';\nimport { notificationServiceFactory } from '../services/notification';\nimport { loadPkg } from '../utils/pkg';\nimport { buildLogsServiceFactory } from '../services/build-logs';\nimport { promptLogin } from '../login/action';\nimport { trackEvent } from '../utils/analytics';\nimport {\n environmentCreationErrorFactory,\n environmentErrorMessageFactory,\n} from '../utils/error-message-factories';\n\ntype PackageJson = {\n name: string;\n strapi?: {\n uuid: string;\n };\n};\n\ninterface CmdOptions {\n env?: string;\n force?: boolean;\n}\n\nconst boxenOptions: boxen.Options = {\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'round',\n};\n\nconst QUIT_OPTION = 'Quit';\n\nasync function promptForEnvironment(environments: string[]): Promise<string> {\n const { default: inquirer } = await import('inquirer');\n const choices = environments.map((env) => ({ name: env, value: env }));\n const { selectedEnvironment } = await inquirer.prompt([\n {\n type: 'list',\n name: 'selectedEnvironment',\n message: 'Select the environment to deploy:',\n choices: [...choices, { name: chalk.grey(`(${QUIT_OPTION})`), value: null }],\n },\n ]);\n if (selectedEnvironment === null) {\n process.exit(1);\n }\n\n return selectedEnvironment;\n}\n\nasync function upload(\n ctx: CLIContext,\n project: Omit<ProjectInfo, 'id'>,\n cliConfig: CloudCliConfig,\n token: string,\n maxProjectFileSize: number\n) {\n const cloudApi = await cloudApiFactory(ctx, token);\n try {\n const storagePath = await getTmpStoragePath();\n const projectFolder = path.resolve(process.cwd());\n const packageJson = (await loadPkg(ctx)) as PackageJson;\n\n if (!packageJson) {\n ctx.logger.error(\n 'Unable to deploy the project. Please make sure the package.json file is correctly formatted.'\n );\n return;\n }\n\n const compressSpinner = ctx.logger.spinner('Compressing project...').start();\n compressSpinner.indent = 1;\n // hash packageJson.name to avoid conflicts\n const hashname = crypto.createHash('sha512').update(packageJson.name).digest('hex');\n const compressedFilename = `${hashname}.tar.gz`;\n try {\n ctx.logger.debug(\n 'Compression parameters\\n',\n `Storage path: ${storagePath}\\n`,\n `Project folder: ${projectFolder}\\n`,\n `Compressed filename: ${compressedFilename}`\n );\n await compressFilesToTar(storagePath, projectFolder, compressedFilename);\n compressSpinner.succeed(`Project compressed successfully!`);\n } catch (e: unknown) {\n compressSpinner.fail(\n 'Project compression failed. Try again later or check for large/incompatible files.'\n );\n ctx.logger.debug(e);\n process.exit(1);\n }\n\n const tarFilePath = path.resolve(storagePath, compressedFilename);\n const fileStats = await fse.stat(tarFilePath);\n\n if (fileStats.size > maxProjectFileSize) {\n ctx.logger.log(\n 'Unable to proceed: Your project is too big to be transferred, please use a git repo instead.'\n );\n try {\n await fse.remove(tarFilePath);\n } catch (e: any) {\n ctx.logger.log('Unable to remove file: ', tarFilePath);\n ctx.logger.debug(e);\n }\n return;\n }\n\n const progressBar = ctx.logger.progressBar(100, ' ∷ Uploading project');\n\n try {\n const { data } = await cloudApi.deploy(\n { filePath: tarFilePath, project },\n {\n onUploadProgress(progressEvent) {\n const total = progressEvent.total || fileStats.size;\n const percentage = Math.round((progressEvent.loaded * 100) / total);\n progressBar.update(percentage);\n },\n }\n );\n\n progressBar.update(100);\n progressBar.stop();\n ctx.logger.log(`${chalk.green.bold('✔')} Upload finished!\\n`);\n return data.build_id;\n } catch (e: any) {\n progressBar.stop();\n await handleUploadError(ctx, e, project, cliConfig);\n } finally {\n await fse.remove(tarFilePath);\n }\n process.exit(0);\n } catch (e: any) {\n ctx.logger.error('An error occurred while deploying the project. Please try again later.');\n ctx.logger.debug(e);\n process.exit(1);\n }\n}\n\nasync function handleUploadError(\n ctx: CLIContext,\n error: any,\n project: any,\n cliConfig: CloudCliConfig\n) {\n const { logger } = ctx;\n logger.debug(error);\n\n if (error.response?.status) {\n switch (error.response.status) {\n case 405: {\n const environmentErrorMessage = environmentErrorMessageFactory({\n projectName: project.name,\n firstLine: cliConfig.projectDeployment.errors.environmentNotReady.firstLine,\n secondLine: cliConfig.projectDeployment.errors.environmentNotReady.secondLine,\n });\n logger.log(environmentCreationErrorFactory(environmentErrorMessage));\n return;\n }\n case 413:\n logger.error(\n 'The project you are trying to upload is too big. Please remove unnecessary files and try again.'\n );\n return;\n default:\n break;\n }\n }\n logger.error('An error occurred while deploying the project. Please try again later.');\n}\n\nasync function getProject(ctx: CLIContext) {\n const { project } = await local.retrieve();\n if (!project) {\n try {\n const projectResponse = await createProjectAction(ctx);\n if (projectResponse) {\n const { project: projectSaved } = await local.retrieve();\n return projectSaved;\n }\n } catch (e: any) {\n ctx.logger.error('An error occurred while deploying the project. Please try again later.');\n ctx.logger.debug(e);\n process.exit(1);\n }\n }\n return project;\n}\n\nasync function getConfig({\n ctx,\n cloudApiService,\n}: {\n ctx: CLIContext;\n cloudApiService: CloudApiService;\n}): Promise<CloudCliConfig | null> {\n try {\n const { data: cliConfig } = await cloudApiService.config();\n return cliConfig;\n } catch (e) {\n ctx.logger.debug('Failed to get cli config', e);\n return null;\n }\n}\n\nfunction validateEnvironment(ctx: CLIContext, environment: string, environments: string[]): void {\n if (!environments.includes(environment)) {\n ctx.logger.error(`Environment ${environment} does not exist.`);\n process.exit(1);\n }\n}\n\nasync function getTargetEnvironment(\n ctx: CLIContext,\n opts: CmdOptions,\n project: Omit<ProjectInfo, 'id'>,\n environments: string[]\n): Promise<string> {\n if (opts.env) {\n validateEnvironment(ctx, opts.env, environments);\n return opts.env;\n }\n\n if (project.targetEnvironment) {\n return project.targetEnvironment;\n }\n\n if (environments.length > 1) {\n return promptForEnvironment(environments);\n }\n\n return environments[0];\n}\n\nfunction hasPendingOrLiveDeployment(\n environments: EnvironmentDetails[],\n targetEnvironment: string\n): boolean {\n const environment = environments.find((env) => env.name === targetEnvironment);\n if (!environment) {\n throw new Error(`Environment details ${targetEnvironment} not found.`);\n }\n return environment.hasPendingDeployment || environment.hasLiveDeployment || false;\n}\n\nexport default async (ctx: CLIContext, opts: CmdOptions) => {\n const { getValidToken } = await tokenServiceFactory(ctx);\n const token = await getValidToken(ctx, promptLogin);\n if (!token) {\n return;\n }\n\n const project = await getProject(ctx);\n if (!project) {\n process.exit(1);\n }\n\n const cloudApiService = await cloudApiFactory(ctx, token);\n let projectData;\n let environments: string[];\n let environmentsDetails: EnvironmentDetails[];\n\n try {\n const {\n data: { data, metadata },\n } = await cloudApiService.getProject({ name: project.name });\n projectData = data;\n environments = projectData.environments;\n environmentsDetails = projectData.environmentsDetails;\n const isProjectSuspended = projectData.suspendedAt;\n\n if (isProjectSuspended) {\n ctx.logger.log(\n '\\n Oops! This project has been suspended. \\n\\n Please reactivate it from the dashboard to continue deploying: '\n );\n ctx.logger.log(chalk.underline(`${metadata.dashboardUrls.project}`));\n return;\n }\n } catch (e: Error | unknown) {\n if (e instanceof AxiosError && e.response?.data) {\n if (e.response.status === 404) {\n ctx.logger.warn(\n `The project associated with this folder does not exist in Strapi Cloud. \\nPlease link your local project to an existing Strapi Cloud project using the ${chalk.cyan(\n 'link'\n )} command before deploying.`\n );\n } else {\n ctx.logger.error(e.response.data);\n }\n } else {\n ctx.logger.error(\n \"An error occurred while retrieving the project's information. Please try again later.\"\n );\n }\n ctx.logger.debug(e);\n return;\n }\n\n await trackEvent(ctx, cloudApiService, 'willDeployWithCLI', {\n projectInternalName: project.name,\n });\n\n const notificationService = notificationServiceFactory(ctx);\n const buildLogsService = buildLogsServiceFactory(ctx);\n\n const cliConfig = await getConfig({ ctx, cloudApiService });\n if (!cliConfig) {\n ctx.logger.error(\n 'An error occurred while retrieving data from Strapi Cloud. Please check your network or try again later.'\n );\n return;\n }\n\n let maxSize: number = parseInt(cliConfig.maxProjectFileSize, 10);\n if (Number.isNaN(maxSize)) {\n ctx.logger.debug(\n 'An error occurred while parsing the maxProjectFileSize. Using default value.'\n );\n maxSize = 100000000;\n }\n\n project.targetEnvironment = await getTargetEnvironment(ctx, opts, project, environments);\n\n if (!opts.force) {\n const shouldDisplayWarning = hasPendingOrLiveDeployment(\n environmentsDetails,\n project.targetEnvironment\n );\n if (shouldDisplayWarning) {\n ctx.logger.log(boxen(cliConfig.projectDeployment.confirmationText, boxenOptions));\n const { default: inquirer } = await import('inquirer');\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: `Do you want to proceed with deployment to ${chalk.cyan(projectData.displayName)} on ${chalk.cyan(project.targetEnvironment)} environment?`,\n },\n ]);\n if (!confirm) {\n process.exit(1);\n }\n }\n }\n\n const buildId = await upload(ctx, project, cliConfig, token, maxSize);\n\n if (!buildId) {\n return;\n }\n\n let notifications: ReturnType<typeof notificationService> | null = null;\n\n try {\n ctx.logger.log(\n `∷ Deploying project to ${chalk.cyan(project.targetEnvironment ?? `production`)} environment...`\n );\n\n notifications = notificationService(\n `${apiConfig.apiBaseUrl}/${VERSION}/notifications`,\n token,\n cliConfig\n );\n\n await buildLogsService(`${apiConfig.apiBaseUrl}/${VERSION}/logs/${buildId}`, token, cliConfig);\n const dashboardUrlLine =\n chalk.cyan(' → ') +\n chalk.cyan.underline(`${apiConfig.dashboardBaseUrl}/projects/${project.name}/deployments`);\n ctx.logger.log(\n boxen(`Project and deployment logs ready at:\\n${dashboardUrlLine}`, {\n padding: 1,\n margin: 1,\n borderStyle: 'round',\n borderColor: 'white',\n titleAlignment: 'left',\n })\n );\n } catch (e: Error | unknown) {\n ctx.logger.debug(e);\n if (e instanceof Error) {\n ctx.logger.error(e.message);\n } else {\n ctx.logger.error('An error occurred while deploying the project. Please try again later.');\n }\n } finally {\n if (notifications) {\n notifications.close();\n }\n }\n};\n"],"names":["boxenOptions","padding","margin","align","borderColor","borderStyle","QUIT_OPTION","promptForEnvironment","environments","default","inquirer","choices","map","env","name","value","selectedEnvironment","prompt","type","message","chalk","grey","process","exit","upload","ctx","project","cliConfig","token","maxProjectFileSize","cloudApi","cloudApiFactory","storagePath","getTmpStoragePath","projectFolder","path","resolve","cwd","packageJson","loadPkg","logger","error","compressSpinner","spinner","start","indent","hashname","crypto","createHash","update","digest","compressedFilename","debug","compressFilesToTar","succeed","e","fail","tarFilePath","fileStats","fse","stat","size","log","remove","progressBar","data","deploy","filePath","onUploadProgress","progressEvent","total","percentage","Math","round","loaded","stop","green","bold","build_id","handleUploadError","response","status","environmentErrorMessage","environmentErrorMessageFactory","projectName","firstLine","projectDeployment","errors","environmentNotReady","secondLine","environmentCreationErrorFactory","getProject","local","projectResponse","createProjectAction","projectSaved","getConfig","cloudApiService","config","validateEnvironment","environment","includes","getTargetEnvironment","opts","targetEnvironment","length","hasPendingOrLiveDeployment","find","Error","hasPendingDeployment","hasLiveDeployment","getValidToken","tokenServiceFactory","promptLogin","projectData","environmentsDetails","metadata","isProjectSuspended","suspendedAt","underline","dashboardUrls","AxiosError","warn","cyan","trackEvent","projectInternalName","notificationService","notificationServiceFactory","buildLogsService","buildLogsServiceFactory","maxSize","parseInt","Number","isNaN","force","shouldDisplayWarning","boxen","confirmationText","confirm","displayName","buildId","notifications","apiConfig","apiBaseUrl","VERSION","dashboardUrlLine","dashboardBaseUrl","titleAlignment","close"],"mappings":"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"}
|
|
@@ -11,6 +11,10 @@ var action$1 = require('../../login/action.js');
|
|
|
11
11
|
var analytics = require('../../utils/analytics.js');
|
|
12
12
|
var getLocalConfig = require('../../utils/get-local-config.js');
|
|
13
13
|
|
|
14
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
|
+
|
|
16
|
+
var chalk__default = /*#__PURE__*/_interopDefault(chalk);
|
|
17
|
+
|
|
14
18
|
const QUIT_OPTION = 'Quit';
|
|
15
19
|
var action = (async (ctx)=>{
|
|
16
20
|
const { getValidToken } = await token.tokenServiceFactory(ctx);
|
|
@@ -57,7 +61,7 @@ var action = (async (ctx)=>{
|
|
|
57
61
|
logger.error('Failed to link the environment. If this issue persists, try re-linking your project or contact support.');
|
|
58
62
|
process.exit(1);
|
|
59
63
|
}
|
|
60
|
-
logger.log(` You have successfully linked your project to ${
|
|
64
|
+
logger.log(` You have successfully linked your project to ${chalk__default.default.cyan(answer.targetEnvironment)}, on ${chalk__default.default.cyan(project.displayName)}. You are now able to deploy your project.`);
|
|
61
65
|
await analytics.trackEvent(ctx, cloudApiService, 'didLinkEnvironment', {
|
|
62
66
|
projectName: project.name,
|
|
63
67
|
environmentName: answer.targetEnvironment
|
|
@@ -75,7 +79,7 @@ async function promptUserForEnvironment(ctx, environments) {
|
|
|
75
79
|
choices: [
|
|
76
80
|
...environments,
|
|
77
81
|
{
|
|
78
|
-
name:
|
|
82
|
+
name: chalk__default.default.grey(`(${QUIT_OPTION})`),
|
|
79
83
|
value: null
|
|
80
84
|
}
|
|
81
85
|
]
|
|
@@ -105,7 +109,7 @@ async function getEnvironmentsList(ctx, cloudApiService, project) {
|
|
|
105
109
|
} catch (e) {
|
|
106
110
|
if (e.response && e.response.status === 404) {
|
|
107
111
|
spinner.succeed();
|
|
108
|
-
ctx.logger.warn(`\nThe project associated with this folder does not exist in Strapi Cloud. \nPlease link your local project to an existing Strapi Cloud project using the ${
|
|
112
|
+
ctx.logger.warn(`\nThe project associated with this folder does not exist in Strapi Cloud. \nPlease link your local project to an existing Strapi Cloud project using the ${chalk__default.default.cyan('link')} command.`);
|
|
109
113
|
} else {
|
|
110
114
|
spinner.fail('An error occurred while fetching environments data from Strapi Cloud.');
|
|
111
115
|
ctx.logger.debug('Failed to list environments', e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sources":["../../../src/environment/link/action.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { Answers } from 'inquirer';\nimport { EnvironmentDetails, ProjectInput } from '../../services/cli-api';\nimport type { CLIContext, CloudApiService } from '../../types';\nimport { cloudApiFactory, tokenServiceFactory, local } from '../../services';\nimport { promptLogin } from '../../login/action';\nimport { trackEvent } from '../../utils/analytics';\nimport { getLocalProject } from '../../utils/get-local-config';\n\nconst QUIT_OPTION = 'Quit';\n\ninterface LinkEnvironmentAnswer extends Answers {\n targetEnvironment: string;\n}\n\ninterface LinkEnvironmentInput extends Answers {\n targetEnvironment: string;\n}\n\ntype EnvironmentsList = EnvironmentDetails[];\n\nexport default async (ctx: CLIContext) => {\n const { getValidToken } = await tokenServiceFactory(ctx);\n const token = await getValidToken(ctx, promptLogin);\n const { logger } = ctx;\n\n if (!token) {\n return;\n }\n\n const project = await getLocalProject(ctx);\n\n if (!project) {\n logger.debug(`No valid local project configuration was found.`);\n return;\n }\n\n const cloudApiService = await cloudApiFactory(ctx, token);\n const environments = await getEnvironmentsList(ctx, cloudApiService, project);\n\n if (!environments) {\n logger.debug(`Fetching environments failed.`);\n return;\n }\n\n if (environments.length === 0) {\n logger.log(\n `The only available environment is already linked. You can add a new one from your project settings on the Strapi Cloud dashboard.`\n );\n return;\n }\n\n const answer: LinkEnvironmentAnswer | null = await promptUserForEnvironment(ctx, environments);\n\n if (!answer) {\n return;\n }\n\n await trackEvent(ctx, cloudApiService, 'willLinkEnvironment', {\n projectName: project.name,\n environmentName: answer.targetEnvironment,\n });\n\n try {\n await local.patch({ project: { targetEnvironment: answer.targetEnvironment } });\n } catch (e) {\n await trackEvent(ctx, cloudApiService, 'didNotLinkEnvironment', {\n projectName: project.name,\n environmentName: answer.targetEnvironment,\n });\n logger.debug('Failed to link environment', e);\n logger.error(\n 'Failed to link the environment. If this issue persists, try re-linking your project or contact support.'\n );\n process.exit(1);\n }\n\n logger.log(\n ` You have successfully linked your project to ${chalk.cyan(answer.targetEnvironment)}, on ${chalk.cyan(project.displayName)}. You are now able to deploy your project.`\n );\n await trackEvent(ctx, cloudApiService, 'didLinkEnvironment', {\n projectName: project.name,\n environmentName: answer.targetEnvironment,\n });\n};\n\nasync function promptUserForEnvironment(\n ctx: CLIContext,\n environments: EnvironmentsList\n): Promise<LinkEnvironmentAnswer | null> {\n const { logger } = ctx;\n\n try {\n const { default: inquirer } = await import('inquirer');\n const answer: LinkEnvironmentInput = await inquirer.prompt([\n {\n type: 'list',\n name: 'targetEnvironment',\n message: 'Which environment do you want to link?',\n choices: [...environments, { name: chalk.grey(`(${QUIT_OPTION})`), value: null }],\n },\n ]);\n\n if (!answer.targetEnvironment) {\n return null;\n }\n\n return answer;\n } catch (e) {\n logger.debug('Failed to get user input', e);\n logger.error('An error occurred while trying to get your environment selection.');\n return null;\n }\n}\n\nasync function getEnvironmentsList(\n ctx: CLIContext,\n cloudApiService: CloudApiService,\n project: ProjectInput\n) {\n const spinner = ctx.logger.spinner('Fetching environments...\\n').start();\n\n try {\n const {\n data: { data: environmentsList },\n } = await cloudApiService.listLinkEnvironments({ name: project.name });\n\n if (!Array.isArray(environmentsList) || environmentsList.length === 0) {\n throw new Error('Environments not found in server response');\n }\n spinner.succeed();\n return environmentsList.filter(\n (environment: EnvironmentDetails) => environment.name !== project.targetEnvironment\n );\n } catch (e: any) {\n if (e.response && e.response.status === 404) {\n spinner.succeed();\n ctx.logger.warn(\n `\\nThe project associated with this folder does not exist in Strapi Cloud. \\nPlease link your local project to an existing Strapi Cloud project using the ${chalk.cyan(\n 'link'\n )} command.`\n );\n } else {\n spinner.fail('An error occurred while fetching environments data from Strapi Cloud.');\n ctx.logger.debug('Failed to list environments', e);\n }\n }\n}\n"],"names":["QUIT_OPTION","ctx","getValidToken","tokenServiceFactory","token","promptLogin","logger","project","getLocalProject","debug","cloudApiService","cloudApiFactory","environments","getEnvironmentsList","length","log","answer","promptUserForEnvironment","trackEvent","projectName","name","environmentName","targetEnvironment","local","e","error","process","exit","chalk","cyan","displayName","default","inquirer","prompt","type","message","choices","grey","value","spinner","start","data","environmentsList","listLinkEnvironments","Array","isArray","Error","succeed","filter","environment","response","status","warn","fail"],"mappings":"
|
|
1
|
+
{"version":3,"file":"action.js","sources":["../../../src/environment/link/action.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { Answers } from 'inquirer';\nimport { EnvironmentDetails, ProjectInput } from '../../services/cli-api';\nimport type { CLIContext, CloudApiService } from '../../types';\nimport { cloudApiFactory, tokenServiceFactory, local } from '../../services';\nimport { promptLogin } from '../../login/action';\nimport { trackEvent } from '../../utils/analytics';\nimport { getLocalProject } from '../../utils/get-local-config';\n\nconst QUIT_OPTION = 'Quit';\n\ninterface LinkEnvironmentAnswer extends Answers {\n targetEnvironment: string;\n}\n\ninterface LinkEnvironmentInput extends Answers {\n targetEnvironment: string;\n}\n\ntype EnvironmentsList = EnvironmentDetails[];\n\nexport default async (ctx: CLIContext) => {\n const { getValidToken } = await tokenServiceFactory(ctx);\n const token = await getValidToken(ctx, promptLogin);\n const { logger } = ctx;\n\n if (!token) {\n return;\n }\n\n const project = await getLocalProject(ctx);\n\n if (!project) {\n logger.debug(`No valid local project configuration was found.`);\n return;\n }\n\n const cloudApiService = await cloudApiFactory(ctx, token);\n const environments = await getEnvironmentsList(ctx, cloudApiService, project);\n\n if (!environments) {\n logger.debug(`Fetching environments failed.`);\n return;\n }\n\n if (environments.length === 0) {\n logger.log(\n `The only available environment is already linked. You can add a new one from your project settings on the Strapi Cloud dashboard.`\n );\n return;\n }\n\n const answer: LinkEnvironmentAnswer | null = await promptUserForEnvironment(ctx, environments);\n\n if (!answer) {\n return;\n }\n\n await trackEvent(ctx, cloudApiService, 'willLinkEnvironment', {\n projectName: project.name,\n environmentName: answer.targetEnvironment,\n });\n\n try {\n await local.patch({ project: { targetEnvironment: answer.targetEnvironment } });\n } catch (e) {\n await trackEvent(ctx, cloudApiService, 'didNotLinkEnvironment', {\n projectName: project.name,\n environmentName: answer.targetEnvironment,\n });\n logger.debug('Failed to link environment', e);\n logger.error(\n 'Failed to link the environment. If this issue persists, try re-linking your project or contact support.'\n );\n process.exit(1);\n }\n\n logger.log(\n ` You have successfully linked your project to ${chalk.cyan(answer.targetEnvironment)}, on ${chalk.cyan(project.displayName)}. You are now able to deploy your project.`\n );\n await trackEvent(ctx, cloudApiService, 'didLinkEnvironment', {\n projectName: project.name,\n environmentName: answer.targetEnvironment,\n });\n};\n\nasync function promptUserForEnvironment(\n ctx: CLIContext,\n environments: EnvironmentsList\n): Promise<LinkEnvironmentAnswer | null> {\n const { logger } = ctx;\n\n try {\n const { default: inquirer } = await import('inquirer');\n const answer: LinkEnvironmentInput = await inquirer.prompt([\n {\n type: 'list',\n name: 'targetEnvironment',\n message: 'Which environment do you want to link?',\n choices: [...environments, { name: chalk.grey(`(${QUIT_OPTION})`), value: null }],\n },\n ]);\n\n if (!answer.targetEnvironment) {\n return null;\n }\n\n return answer;\n } catch (e) {\n logger.debug('Failed to get user input', e);\n logger.error('An error occurred while trying to get your environment selection.');\n return null;\n }\n}\n\nasync function getEnvironmentsList(\n ctx: CLIContext,\n cloudApiService: CloudApiService,\n project: ProjectInput\n) {\n const spinner = ctx.logger.spinner('Fetching environments...\\n').start();\n\n try {\n const {\n data: { data: environmentsList },\n } = await cloudApiService.listLinkEnvironments({ name: project.name });\n\n if (!Array.isArray(environmentsList) || environmentsList.length === 0) {\n throw new Error('Environments not found in server response');\n }\n spinner.succeed();\n return environmentsList.filter(\n (environment: EnvironmentDetails) => environment.name !== project.targetEnvironment\n );\n } catch (e: any) {\n if (e.response && e.response.status === 404) {\n spinner.succeed();\n ctx.logger.warn(\n `\\nThe project associated with this folder does not exist in Strapi Cloud. \\nPlease link your local project to an existing Strapi Cloud project using the ${chalk.cyan(\n 'link'\n )} command.`\n );\n } else {\n spinner.fail('An error occurred while fetching environments data from Strapi Cloud.');\n ctx.logger.debug('Failed to list environments', e);\n }\n }\n}\n"],"names":["QUIT_OPTION","ctx","getValidToken","tokenServiceFactory","token","promptLogin","logger","project","getLocalProject","debug","cloudApiService","cloudApiFactory","environments","getEnvironmentsList","length","log","answer","promptUserForEnvironment","trackEvent","projectName","name","environmentName","targetEnvironment","local","e","error","process","exit","chalk","cyan","displayName","default","inquirer","prompt","type","message","choices","grey","value","spinner","start","data","environmentsList","listLinkEnvironments","Array","isArray","Error","succeed","filter","environment","response","status","warn","fail"],"mappings":"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"}
|
|
@@ -13,6 +13,10 @@ var action$1 = require('../../login/action.js');
|
|
|
13
13
|
var analytics = require('../../utils/analytics.js');
|
|
14
14
|
var getLocalConfig = require('../../utils/get-local-config.js');
|
|
15
15
|
|
|
16
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
|
+
|
|
18
|
+
var chalk__default = /*#__PURE__*/_interopDefault(chalk);
|
|
19
|
+
|
|
16
20
|
var action = (async (ctx)=>{
|
|
17
21
|
const { getValidToken } = await token.tokenServiceFactory(ctx);
|
|
18
22
|
const token$1 = await getValidToken(ctx, action$1.promptLogin);
|
|
@@ -42,7 +46,7 @@ var action = (async (ctx)=>{
|
|
|
42
46
|
} catch (e) {
|
|
43
47
|
if (e.response && e.response.status === 404) {
|
|
44
48
|
spinner.succeed();
|
|
45
|
-
logger.warn(`\nThe project associated with this folder does not exist in Strapi Cloud. \nPlease link your local project to an existing Strapi Cloud project using the ${
|
|
49
|
+
logger.warn(`\nThe project associated with this folder does not exist in Strapi Cloud. \nPlease link your local project to an existing Strapi Cloud project using the ${chalk__default.default.cyan('link')} command`);
|
|
46
50
|
} else {
|
|
47
51
|
spinner.fail('An error occurred while fetching environments data from Strapi Cloud.');
|
|
48
52
|
logger.debug('Failed to list environments', e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sources":["../../../src/environment/list/action.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { CLIContext } from '../../types';\nimport { cloudApiFactory, tokenServiceFactory } from '../../services';\nimport { promptLogin } from '../../login/action';\nimport { trackEvent } from '../../utils/analytics';\nimport { getLocalProject } from '../../utils/get-local-config';\n\nexport default async (ctx: CLIContext) => {\n const { getValidToken } = await tokenServiceFactory(ctx);\n const token = await getValidToken(ctx, promptLogin);\n const { logger } = ctx;\n\n if (!token) {\n return;\n }\n\n const project = await getLocalProject(ctx);\n if (!project) {\n ctx.logger.debug(`No valid local project configuration was found.`);\n return;\n }\n\n const cloudApiService = await cloudApiFactory(ctx, token);\n const spinner = logger.spinner('Fetching environments...').start();\n await trackEvent(ctx, cloudApiService, 'willListEnvironment', {\n projectInternalName: project.name,\n });\n\n try {\n const {\n data: { data: environmentsList },\n } = await cloudApiService.listEnvironments({ name: project.name });\n spinner.succeed();\n logger.log(environmentsList);\n await trackEvent(ctx, cloudApiService, 'didListEnvironment', {\n projectInternalName: project.name,\n });\n } catch (e: any) {\n if (e.response && e.response.status === 404) {\n spinner.succeed();\n logger.warn(\n `\\nThe project associated with this folder does not exist in Strapi Cloud. \\nPlease link your local project to an existing Strapi Cloud project using the ${chalk.cyan(\n 'link'\n )} command`\n );\n } else {\n spinner.fail('An error occurred while fetching environments data from Strapi Cloud.');\n logger.debug('Failed to list environments', e);\n }\n await trackEvent(ctx, cloudApiService, 'didNotListEnvironment', {\n projectInternalName: project.name,\n });\n }\n};\n"],"names":["ctx","getValidToken","tokenServiceFactory","token","promptLogin","logger","project","getLocalProject","debug","cloudApiService","cloudApiFactory","spinner","start","trackEvent","projectInternalName","name","data","environmentsList","listEnvironments","succeed","log","e","response","status","warn","chalk","cyan","fail"],"mappings":"
|
|
1
|
+
{"version":3,"file":"action.js","sources":["../../../src/environment/list/action.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { CLIContext } from '../../types';\nimport { cloudApiFactory, tokenServiceFactory } from '../../services';\nimport { promptLogin } from '../../login/action';\nimport { trackEvent } from '../../utils/analytics';\nimport { getLocalProject } from '../../utils/get-local-config';\n\nexport default async (ctx: CLIContext) => {\n const { getValidToken } = await tokenServiceFactory(ctx);\n const token = await getValidToken(ctx, promptLogin);\n const { logger } = ctx;\n\n if (!token) {\n return;\n }\n\n const project = await getLocalProject(ctx);\n if (!project) {\n ctx.logger.debug(`No valid local project configuration was found.`);\n return;\n }\n\n const cloudApiService = await cloudApiFactory(ctx, token);\n const spinner = logger.spinner('Fetching environments...').start();\n await trackEvent(ctx, cloudApiService, 'willListEnvironment', {\n projectInternalName: project.name,\n });\n\n try {\n const {\n data: { data: environmentsList },\n } = await cloudApiService.listEnvironments({ name: project.name });\n spinner.succeed();\n logger.log(environmentsList);\n await trackEvent(ctx, cloudApiService, 'didListEnvironment', {\n projectInternalName: project.name,\n });\n } catch (e: any) {\n if (e.response && e.response.status === 404) {\n spinner.succeed();\n logger.warn(\n `\\nThe project associated with this folder does not exist in Strapi Cloud. \\nPlease link your local project to an existing Strapi Cloud project using the ${chalk.cyan(\n 'link'\n )} command`\n );\n } else {\n spinner.fail('An error occurred while fetching environments data from Strapi Cloud.');\n logger.debug('Failed to list environments', e);\n }\n await trackEvent(ctx, cloudApiService, 'didNotListEnvironment', {\n projectInternalName: project.name,\n });\n }\n};\n"],"names":["ctx","getValidToken","tokenServiceFactory","token","promptLogin","logger","project","getLocalProject","debug","cloudApiService","cloudApiFactory","spinner","start","trackEvent","projectInternalName","name","data","environmentsList","listEnvironments","succeed","log","e","response","status","warn","chalk","cyan","fail"],"mappings":";;;;;;;;;;;;;;;;;;;AAOA,aAAe,CAAA,OAAOA,GAAAA,GAAAA;AACpB,IAAA,MAAM,EAAEC,aAAa,EAAE,GAAG,MAAMC,yBAAAA,CAAoBF,GAAAA,CAAAA;IACpD,MAAMG,OAAAA,GAAQ,MAAMF,aAAAA,CAAcD,GAAAA,EAAKI,oBAAAA,CAAAA;IACvC,MAAM,EAAEC,MAAM,EAAE,GAAGL,GAAAA;AAEnB,IAAA,IAAI,CAACG,OAAAA,EAAO;AACV,QAAA;AACF,IAAA;IAEA,MAAMG,OAAAA,GAAU,MAAMC,8BAAAA,CAAgBP,GAAAA,CAAAA;AACtC,IAAA,IAAI,CAACM,OAAAA,EAAS;AACZN,QAAAA,GAAAA,CAAIK,MAAM,CAACG,KAAK,CAAC,CAAC,+CAA+C,CAAC,CAAA;AAClE,QAAA;AACF,IAAA;IAEA,MAAMC,eAAAA,GAAkB,MAAMC,sBAAAA,CAAgBV,GAAAA,EAAKG,OAAAA,CAAAA;AACnD,IAAA,MAAMQ,OAAAA,GAAUN,MAAAA,CAAOM,OAAO,CAAC,4BAA4BC,KAAK,EAAA;IAChE,MAAMC,oBAAAA,CAAWb,GAAAA,EAAKS,eAAAA,EAAiB,qBAAA,EAAuB;AAC5DK,QAAAA,mBAAAA,EAAqBR,QAAQS;AAC/B,KAAA,CAAA;IAEA,IAAI;QACF,MAAM,EACJC,IAAAA,EAAM,EAAEA,IAAAA,EAAMC,gBAAgB,EAAE,EACjC,GAAG,MAAMR,eAAAA,CAAgBS,gBAAgB,CAAC;AAAEH,YAAAA,IAAAA,EAAMT,QAAQS;AAAK,SAAA,CAAA;AAChEJ,QAAAA,OAAAA,CAAQQ,OAAO,EAAA;AACfd,QAAAA,MAAAA,CAAOe,GAAG,CAACH,gBAAAA,CAAAA;QACX,MAAMJ,oBAAAA,CAAWb,GAAAA,EAAKS,eAAAA,EAAiB,oBAAA,EAAsB;AAC3DK,YAAAA,mBAAAA,EAAqBR,QAAQS;AAC/B,SAAA,CAAA;AACF,IAAA,CAAA,CAAE,OAAOM,CAAAA,EAAQ;QACf,IAAIA,CAAAA,CAAEC,QAAQ,IAAID,CAAAA,CAAEC,QAAQ,CAACC,MAAM,KAAK,GAAA,EAAK;AAC3CZ,YAAAA,OAAAA,CAAQQ,OAAO,EAAA;YACfd,MAAAA,CAAOmB,IAAI,CACT,CAAC,yJAAyJ,EAAEC,uBAAMC,IAAI,CACpK,MAAA,CAAA,CACA,QAAQ,CAAC,CAAA;QAEf,CAAA,MAAO;AACLf,YAAAA,OAAAA,CAAQgB,IAAI,CAAC,uEAAA,CAAA;YACbtB,MAAAA,CAAOG,KAAK,CAAC,6BAAA,EAA+Ba,CAAAA,CAAAA;AAC9C,QAAA;QACA,MAAMR,oBAAAA,CAAWb,GAAAA,EAAKS,eAAAA,EAAiB,uBAAA,EAAyB;AAC9DK,YAAAA,mBAAAA,EAAqBR,QAAQS;AAC/B,SAAA,CAAA;AACF,IAAA;AACF,CAAA;;;;"}
|
package/dist/index.js
CHANGED
|
@@ -13,6 +13,10 @@ var index$3 = require('./environment/link/index.js');
|
|
|
13
13
|
var local = require('./config/local.js');
|
|
14
14
|
var index = require('./services/index.js');
|
|
15
15
|
|
|
16
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
|
+
|
|
18
|
+
var crypto__default = /*#__PURE__*/_interopDefault(crypto);
|
|
19
|
+
|
|
16
20
|
const cli = {
|
|
17
21
|
deployProject: index$8.default,
|
|
18
22
|
link: index$7.default,
|
|
@@ -35,7 +39,7 @@ const cloudCommands = [
|
|
|
35
39
|
async function initCloudCLIConfig() {
|
|
36
40
|
const localConfig = await local.getLocalConfig();
|
|
37
41
|
if (!localConfig.installId) {
|
|
38
|
-
localConfig.installId =
|
|
42
|
+
localConfig.installId = crypto__default.default.randomUUID();
|
|
39
43
|
}
|
|
40
44
|
await local.saveLocalConfig(localConfig);
|
|
41
45
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { Command } from 'commander';\nimport crypto from 'crypto';\nimport deployProject from './deploy-project';\nimport link from './link';\nimport login from './login';\nimport logout from './logout';\nimport createProject from './create-project';\nimport { createGrowthSsoTrial } from './create-growth-sso-trial';\nimport listProjects from './list-projects';\nimport listEnvironments from './environment/list';\nimport linkEnvironment from './environment/link';\nimport { CLIContext } from './types';\nimport { getLocalConfig, saveLocalConfig } from './config/local';\n\nexport const cli = {\n deployProject,\n link,\n login,\n logout,\n createProject,\n linkEnvironment,\n listProjects,\n listEnvironments,\n};\n\nexport { createGrowthSsoTrial };\n\nconst cloudCommands = [\n deployProject,\n link,\n login,\n logout,\n linkEnvironment,\n listProjects,\n listEnvironments,\n];\n\nasync function initCloudCLIConfig() {\n const localConfig = await getLocalConfig();\n\n if (!localConfig.installId) {\n localConfig.installId = crypto.randomUUID();\n }\n\n await saveLocalConfig(localConfig);\n}\n\nexport async function buildStrapiCloudCommands({\n command,\n ctx,\n argv,\n}: {\n command: Command;\n ctx: CLIContext;\n argv: string[];\n}) {\n await initCloudCLIConfig();\n // Load all commands\n for (const cloudCommand of cloudCommands) {\n try {\n // Add this command to the Commander command object\n const subCommand = await cloudCommand.command({ command, ctx, argv });\n\n if (subCommand) {\n command.addCommand(subCommand);\n }\n } catch (e) {\n console.error(`Failed to load command ${cloudCommand.name}`, e);\n }\n }\n}\n\nexport * as services from './services';\n\nexport * from './types';\n"],"names":["cli","deployProject","link","login","logout","createProject","linkEnvironment","listProjects","listEnvironments","cloudCommands","initCloudCLIConfig","localConfig","getLocalConfig","installId","crypto","randomUUID","saveLocalConfig","buildStrapiCloudCommands","command","ctx","argv","cloudCommand","subCommand","addCommand","e","console","error","name"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { Command } from 'commander';\nimport crypto from 'crypto';\nimport deployProject from './deploy-project';\nimport link from './link';\nimport login from './login';\nimport logout from './logout';\nimport createProject from './create-project';\nimport { createGrowthSsoTrial } from './create-growth-sso-trial';\nimport listProjects from './list-projects';\nimport listEnvironments from './environment/list';\nimport linkEnvironment from './environment/link';\nimport { CLIContext } from './types';\nimport { getLocalConfig, saveLocalConfig } from './config/local';\n\nexport const cli = {\n deployProject,\n link,\n login,\n logout,\n createProject,\n linkEnvironment,\n listProjects,\n listEnvironments,\n};\n\nexport { createGrowthSsoTrial };\n\nconst cloudCommands = [\n deployProject,\n link,\n login,\n logout,\n linkEnvironment,\n listProjects,\n listEnvironments,\n];\n\nasync function initCloudCLIConfig() {\n const localConfig = await getLocalConfig();\n\n if (!localConfig.installId) {\n localConfig.installId = crypto.randomUUID();\n }\n\n await saveLocalConfig(localConfig);\n}\n\nexport async function buildStrapiCloudCommands({\n command,\n ctx,\n argv,\n}: {\n command: Command;\n ctx: CLIContext;\n argv: string[];\n}) {\n await initCloudCLIConfig();\n // Load all commands\n for (const cloudCommand of cloudCommands) {\n try {\n // Add this command to the Commander command object\n const subCommand = await cloudCommand.command({ command, ctx, argv });\n\n if (subCommand) {\n command.addCommand(subCommand);\n }\n } catch (e) {\n console.error(`Failed to load command ${cloudCommand.name}`, e);\n }\n }\n}\n\nexport * as services from './services';\n\nexport * from './types';\n"],"names":["cli","deployProject","link","login","logout","createProject","linkEnvironment","listProjects","listEnvironments","cloudCommands","initCloudCLIConfig","localConfig","getLocalConfig","installId","crypto","randomUUID","saveLocalConfig","buildStrapiCloudCommands","command","ctx","argv","cloudCommand","subCommand","addCommand","e","console","error","name"],"mappings":";;;;;;;;;;;;;;;;;;;MAcaA,GAAAA,GAAM;AACjBC,mBAAAA,eAAAA;AACAC,UAAAA,eAAAA;AACAC,WAAAA,eAAAA;AACAC,YAAAA,eAAAA;AACAC,mBAAAA,eAAAA;AACAC,qBAAAA,eAAAA;AACAC,kBAAAA,eAAAA;AACAC,sBAAAA;AACF;AAIA,MAAMC,aAAAA,GAAgB;AACpBR,IAAAA,eAAAA;AACAC,IAAAA,eAAAA;AACAC,IAAAA,eAAAA;AACAC,IAAAA,eAAAA;AACAE,IAAAA,eAAAA;AACAC,IAAAA,eAAAA;AACAC,IAAAA;AACD,CAAA;AAED,eAAeE,kBAAAA,GAAAA;AACb,IAAA,MAAMC,cAAc,MAAMC,oBAAAA,EAAAA;IAE1B,IAAI,CAACD,WAAAA,CAAYE,SAAS,EAAE;QAC1BF,WAAAA,CAAYE,SAAS,GAAGC,uBAAAA,CAAOC,UAAU,EAAA;AAC3C,IAAA;AAEA,IAAA,MAAMC,qBAAAA,CAAgBL,WAAAA,CAAAA;AACxB;AAEO,eAAeM,yBAAyB,EAC7CC,OAAO,EACPC,GAAG,EACHC,IAAI,EAKL,EAAA;IACC,MAAMV,kBAAAA,EAAAA;;IAEN,KAAK,MAAMW,gBAAgBZ,aAAAA,CAAe;QACxC,IAAI;;AAEF,YAAA,MAAMa,UAAAA,GAAa,MAAMD,YAAAA,CAAaH,OAAO,CAAC;AAAEA,gBAAAA,OAAAA;AAASC,gBAAAA,GAAAA;AAAKC,gBAAAA;AAAK,aAAA,CAAA;AAEnE,YAAA,IAAIE,UAAAA,EAAY;AACdJ,gBAAAA,OAAAA,CAAQK,UAAU,CAACD,UAAAA,CAAAA;AACrB,YAAA;AACF,QAAA,CAAA,CAAE,OAAOE,CAAAA,EAAG;YACVC,OAAAA,CAAQC,KAAK,CAAC,CAAC,uBAAuB,EAAEL,YAAAA,CAAaM,IAAI,EAAE,EAAEH,CAAAA,CAAAA;AAC/D,QAAA;AACF,IAAA;AACF;;;;;;;"}
|
package/dist/link/action.js
CHANGED
|
@@ -11,6 +11,10 @@ var action$1 = require('../login/action.js');
|
|
|
11
11
|
var analytics = require('../utils/analytics.js');
|
|
12
12
|
var getLocalConfig = require('../utils/get-local-config.js');
|
|
13
13
|
|
|
14
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
|
+
|
|
16
|
+
var chalk__default = /*#__PURE__*/_interopDefault(chalk);
|
|
17
|
+
|
|
14
18
|
const QUIT_OPTION = 'Quit';
|
|
15
19
|
async function promptForRelink(ctx, cloudApiService, existingConfig) {
|
|
16
20
|
if (existingConfig && existingConfig.project) {
|
|
@@ -19,7 +23,7 @@ async function promptForRelink(ctx, cloudApiService, existingConfig) {
|
|
|
19
23
|
{
|
|
20
24
|
type: 'confirm',
|
|
21
25
|
name: 'shouldRelink',
|
|
22
|
-
message: `A project named ${
|
|
26
|
+
message: `A project named ${chalk__default.default.cyan(existingConfig.project.displayName ? existingConfig.project.displayName : existingConfig.project.name)} is already linked to this local folder. Do you want to update the link?`,
|
|
23
27
|
default: false
|
|
24
28
|
}
|
|
25
29
|
]);
|
|
@@ -73,7 +77,7 @@ async function getUserSelection(ctx, projects) {
|
|
|
73
77
|
choices: [
|
|
74
78
|
...projects,
|
|
75
79
|
{
|
|
76
|
-
name:
|
|
80
|
+
name: chalk__default.default.grey(`(${QUIT_OPTION})`),
|
|
77
81
|
value: null
|
|
78
82
|
}
|
|
79
83
|
]
|
|
@@ -131,7 +135,7 @@ var action = (async (ctx)=>{
|
|
|
131
135
|
await strapiInfoSave.save({
|
|
132
136
|
project: answer.linkProject
|
|
133
137
|
});
|
|
134
|
-
logger.log(` You have successfully linked your project to ${
|
|
138
|
+
logger.log(` You have successfully linked your project to ${chalk__default.default.cyan(answer.linkProject.displayName)}. You are now able to deploy your project.`);
|
|
135
139
|
await analytics.trackEvent(ctx, cloudApiService, 'didLinkProject', {
|
|
136
140
|
projectInternalName: answer.linkProject
|
|
137
141
|
});
|
package/dist/link/action.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sources":["../../src/link/action.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport type { Answers } from 'inquirer';\nimport type { CLIContext } from '../types';\nimport type { CloudApiService } from '../services/cli-api';\n\nimport { LocalSave } from '../services/strapi-info-save';\nimport { cloudApiFactory, tokenServiceFactory, local } from '../services';\nimport { promptLogin } from '../login/action';\nimport { trackEvent } from '../utils/analytics';\nimport { getLocalConfig } from '../utils/get-local-config';\n\nconst QUIT_OPTION = 'Quit';\n\ninterface LinkProjectValue {\n name: string;\n displayName: string;\n}\n\ninterface LinkProjectAnswer extends Answers {\n linkProject: LinkProjectValue;\n}\n\ninterface LinkProjectInput extends Answers {\n linkProject: LinkProjectValue | string;\n}\n\ntype ProjectsList = {\n name: string;\n value: {\n name: string;\n displayName: string;\n };\n}[];\n\ntype Project = {\n name: string;\n displayName: string;\n isMaintainer: boolean;\n};\n\nasync function promptForRelink(\n ctx: CLIContext,\n cloudApiService: CloudApiService,\n existingConfig: LocalSave | null\n) {\n if (existingConfig && existingConfig.project) {\n const { default: inquirer } = await import('inquirer');\n const { shouldRelink } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'shouldRelink',\n message: `A project named ${chalk.cyan(\n existingConfig.project.displayName\n ? existingConfig.project.displayName\n : existingConfig.project.name\n )} is already linked to this local folder. Do you want to update the link?`,\n default: false,\n },\n ]);\n\n if (!shouldRelink) {\n await trackEvent(ctx, cloudApiService, 'didNotLinkProject', {\n currentProjectName: existingConfig.project?.name,\n });\n return false;\n }\n }\n\n return true;\n}\n\nasync function getProjectsList(\n ctx: CLIContext,\n cloudApiService: CloudApiService,\n existingConfig: LocalSave | null\n) {\n const spinner = ctx.logger.spinner('Fetching your projects...\\n').start();\n\n try {\n const {\n data: { data: projectList },\n } = await cloudApiService.listLinkProjects();\n spinner.succeed();\n\n if (!Array.isArray(projectList)) {\n ctx.logger.log(\"We couldn't find any projects available for linking in Strapi Cloud.\");\n return null;\n }\n const projects: ProjectsList = (projectList as unknown as Project[])\n .filter(\n (project: Project) =>\n !(project.isMaintainer || project.name === existingConfig?.project?.name)\n )\n .map((project: Project) => {\n return {\n name: project.displayName,\n value: { name: project.name, displayName: project.displayName },\n };\n });\n if (projects.length === 0) {\n ctx.logger.log(\"We couldn't find any projects available for linking in Strapi Cloud.\");\n return null;\n }\n return projects;\n } catch (e) {\n spinner.fail('An error occurred while fetching your projects from Strapi Cloud.');\n ctx.logger.debug('Failed to list projects', e);\n return null;\n }\n}\n\nasync function getUserSelection(\n ctx: CLIContext,\n projects: ProjectsList\n): Promise<LinkProjectAnswer | null> {\n const { logger } = ctx;\n try {\n const { default: inquirer } = await import('inquirer');\n const answer: LinkProjectInput = await inquirer.prompt([\n {\n type: 'list',\n name: 'linkProject',\n message: 'Which project do you want to link?',\n choices: [...projects, { name: chalk.grey(`(${QUIT_OPTION})`), value: null }],\n },\n ]);\n\n if (!answer.linkProject) {\n return null;\n }\n\n return answer as LinkProjectAnswer;\n } catch (e) {\n logger.debug('Failed to get user input', e);\n logger.error('An error occurred while trying to get your input.');\n return null;\n }\n}\n\nexport default async (ctx: CLIContext) => {\n const { getValidToken } = await tokenServiceFactory(ctx);\n const token = await getValidToken(ctx, promptLogin);\n const { logger } = ctx;\n\n if (!token) {\n return;\n }\n\n const cloudApiService = await cloudApiFactory(ctx, token);\n\n const existingConfig: LocalSave | null = await getLocalConfig(ctx);\n const shouldRelink = await promptForRelink(ctx, cloudApiService, existingConfig);\n\n if (!shouldRelink) {\n return;\n }\n await trackEvent(ctx, cloudApiService, 'willLinkProject', {});\n\n const projects: ProjectsList | null | undefined = await getProjectsList(\n ctx,\n cloudApiService,\n existingConfig\n );\n\n if (!projects) {\n return;\n }\n\n const answer: LinkProjectAnswer | null = await getUserSelection(ctx, projects);\n\n if (!answer) {\n return;\n }\n\n try {\n const { default: inquirer } = await import('inquirer');\n const { confirmAction } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirmAction',\n message:\n 'Warning: Once linked, deploying from CLI will replace the existing project and its data. Confirm to proceed:',\n default: false,\n },\n ]);\n\n if (!confirmAction) {\n await trackEvent(ctx, cloudApiService, 'didNotLinkProject', {\n cancelledProjectName: answer.linkProject.name,\n currentProjectName: existingConfig ? existingConfig.project?.name : null,\n });\n return;\n }\n\n await local.save({ project: answer.linkProject });\n logger.log(\n ` You have successfully linked your project to ${chalk.cyan(answer.linkProject.displayName)}. You are now able to deploy your project.`\n );\n await trackEvent(ctx, cloudApiService, 'didLinkProject', {\n projectInternalName: answer.linkProject,\n });\n } catch (e) {\n logger.debug('Failed to link project', e);\n logger.error('An error occurred while linking the project.');\n await trackEvent(ctx, cloudApiService, 'didNotLinkProject', {\n projectInternalName: answer.linkProject,\n });\n }\n};\n"],"names":["QUIT_OPTION","promptForRelink","ctx","cloudApiService","existingConfig","project","default","inquirer","shouldRelink","prompt","type","name","message","chalk","cyan","displayName","trackEvent","currentProjectName","getProjectsList","spinner","logger","start","data","projectList","listLinkProjects","succeed","Array","isArray","log","projects","filter","isMaintainer","map","value","length","e","fail","debug","getUserSelection","answer","choices","grey","linkProject","error","getValidToken","tokenServiceFactory","token","promptLogin","cloudApiFactory","getLocalConfig","confirmAction","cancelledProjectName","local","projectInternalName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"action.js","sources":["../../src/link/action.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport type { Answers } from 'inquirer';\nimport type { CLIContext } from '../types';\nimport type { CloudApiService } from '../services/cli-api';\n\nimport { LocalSave } from '../services/strapi-info-save';\nimport { cloudApiFactory, tokenServiceFactory, local } from '../services';\nimport { promptLogin } from '../login/action';\nimport { trackEvent } from '../utils/analytics';\nimport { getLocalConfig } from '../utils/get-local-config';\n\nconst QUIT_OPTION = 'Quit';\n\ninterface LinkProjectValue {\n name: string;\n displayName: string;\n}\n\ninterface LinkProjectAnswer extends Answers {\n linkProject: LinkProjectValue;\n}\n\ninterface LinkProjectInput extends Answers {\n linkProject: LinkProjectValue | string;\n}\n\ntype ProjectsList = {\n name: string;\n value: {\n name: string;\n displayName: string;\n };\n}[];\n\ntype Project = {\n name: string;\n displayName: string;\n isMaintainer: boolean;\n};\n\nasync function promptForRelink(\n ctx: CLIContext,\n cloudApiService: CloudApiService,\n existingConfig: LocalSave | null\n) {\n if (existingConfig && existingConfig.project) {\n const { default: inquirer } = await import('inquirer');\n const { shouldRelink } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'shouldRelink',\n message: `A project named ${chalk.cyan(\n existingConfig.project.displayName\n ? existingConfig.project.displayName\n : existingConfig.project.name\n )} is already linked to this local folder. Do you want to update the link?`,\n default: false,\n },\n ]);\n\n if (!shouldRelink) {\n await trackEvent(ctx, cloudApiService, 'didNotLinkProject', {\n currentProjectName: existingConfig.project?.name,\n });\n return false;\n }\n }\n\n return true;\n}\n\nasync function getProjectsList(\n ctx: CLIContext,\n cloudApiService: CloudApiService,\n existingConfig: LocalSave | null\n) {\n const spinner = ctx.logger.spinner('Fetching your projects...\\n').start();\n\n try {\n const {\n data: { data: projectList },\n } = await cloudApiService.listLinkProjects();\n spinner.succeed();\n\n if (!Array.isArray(projectList)) {\n ctx.logger.log(\"We couldn't find any projects available for linking in Strapi Cloud.\");\n return null;\n }\n const projects: ProjectsList = (projectList as unknown as Project[])\n .filter(\n (project: Project) =>\n !(project.isMaintainer || project.name === existingConfig?.project?.name)\n )\n .map((project: Project) => {\n return {\n name: project.displayName,\n value: { name: project.name, displayName: project.displayName },\n };\n });\n if (projects.length === 0) {\n ctx.logger.log(\"We couldn't find any projects available for linking in Strapi Cloud.\");\n return null;\n }\n return projects;\n } catch (e) {\n spinner.fail('An error occurred while fetching your projects from Strapi Cloud.');\n ctx.logger.debug('Failed to list projects', e);\n return null;\n }\n}\n\nasync function getUserSelection(\n ctx: CLIContext,\n projects: ProjectsList\n): Promise<LinkProjectAnswer | null> {\n const { logger } = ctx;\n try {\n const { default: inquirer } = await import('inquirer');\n const answer: LinkProjectInput = await inquirer.prompt([\n {\n type: 'list',\n name: 'linkProject',\n message: 'Which project do you want to link?',\n choices: [...projects, { name: chalk.grey(`(${QUIT_OPTION})`), value: null }],\n },\n ]);\n\n if (!answer.linkProject) {\n return null;\n }\n\n return answer as LinkProjectAnswer;\n } catch (e) {\n logger.debug('Failed to get user input', e);\n logger.error('An error occurred while trying to get your input.');\n return null;\n }\n}\n\nexport default async (ctx: CLIContext) => {\n const { getValidToken } = await tokenServiceFactory(ctx);\n const token = await getValidToken(ctx, promptLogin);\n const { logger } = ctx;\n\n if (!token) {\n return;\n }\n\n const cloudApiService = await cloudApiFactory(ctx, token);\n\n const existingConfig: LocalSave | null = await getLocalConfig(ctx);\n const shouldRelink = await promptForRelink(ctx, cloudApiService, existingConfig);\n\n if (!shouldRelink) {\n return;\n }\n await trackEvent(ctx, cloudApiService, 'willLinkProject', {});\n\n const projects: ProjectsList | null | undefined = await getProjectsList(\n ctx,\n cloudApiService,\n existingConfig\n );\n\n if (!projects) {\n return;\n }\n\n const answer: LinkProjectAnswer | null = await getUserSelection(ctx, projects);\n\n if (!answer) {\n return;\n }\n\n try {\n const { default: inquirer } = await import('inquirer');\n const { confirmAction } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirmAction',\n message:\n 'Warning: Once linked, deploying from CLI will replace the existing project and its data. Confirm to proceed:',\n default: false,\n },\n ]);\n\n if (!confirmAction) {\n await trackEvent(ctx, cloudApiService, 'didNotLinkProject', {\n cancelledProjectName: answer.linkProject.name,\n currentProjectName: existingConfig ? existingConfig.project?.name : null,\n });\n return;\n }\n\n await local.save({ project: answer.linkProject });\n logger.log(\n ` You have successfully linked your project to ${chalk.cyan(answer.linkProject.displayName)}. You are now able to deploy your project.`\n );\n await trackEvent(ctx, cloudApiService, 'didLinkProject', {\n projectInternalName: answer.linkProject,\n });\n } catch (e) {\n logger.debug('Failed to link project', e);\n logger.error('An error occurred while linking the project.');\n await trackEvent(ctx, cloudApiService, 'didNotLinkProject', {\n projectInternalName: answer.linkProject,\n });\n }\n};\n"],"names":["QUIT_OPTION","promptForRelink","ctx","cloudApiService","existingConfig","project","default","inquirer","shouldRelink","prompt","type","name","message","chalk","cyan","displayName","trackEvent","currentProjectName","getProjectsList","spinner","logger","start","data","projectList","listLinkProjects","succeed","Array","isArray","log","projects","filter","isMaintainer","map","value","length","e","fail","debug","getUserSelection","answer","choices","grey","linkProject","error","getValidToken","tokenServiceFactory","token","promptLogin","cloudApiFactory","getLocalConfig","confirmAction","cancelledProjectName","local","projectInternalName"],"mappings":"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"}
|