@strapi/cloud-cli 0.0.0-next.daa3d4c4db6322f58233f0ccb757d80dbd1b48e9 → 0.0.0-next.df0d99415fc543d9747f3946fd7d1a4c39052b95
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/create-growth-sso-trial/action.d.ts +9 -0
- package/dist/create-growth-sso-trial/action.d.ts.map +1 -0
- package/dist/create-growth-sso-trial/action.js +52 -0
- package/dist/create-growth-sso-trial/action.js.map +1 -0
- package/dist/create-growth-sso-trial/action.mjs +50 -0
- package/dist/create-growth-sso-trial/action.mjs.map +1 -0
- package/dist/create-growth-sso-trial/index.d.ts +4 -0
- package/dist/create-growth-sso-trial/index.d.ts.map +1 -0
- package/dist/create-project/action.d.ts +2 -2
- package/dist/create-project/action.d.ts.map +1 -1
- package/dist/create-project/action.js +38 -11
- package/dist/create-project/action.js.map +1 -1
- package/dist/create-project/action.mjs +39 -12
- package/dist/create-project/action.mjs.map +1 -1
- package/dist/deploy-project/action.d.ts.map +1 -1
- package/dist/deploy-project/action.js +54 -17
- package/dist/deploy-project/action.js.map +1 -1
- package/dist/deploy-project/action.mjs +55 -18
- package/dist/deploy-project/action.mjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -1
- package/dist/login/action.d.ts +3 -1
- package/dist/login/action.d.ts.map +1 -1
- package/dist/login/action.js +11 -7
- package/dist/login/action.js.map +1 -1
- package/dist/login/action.mjs +11 -7
- package/dist/login/action.mjs.map +1 -1
- package/dist/package.json.js +4 -4
- package/dist/package.json.mjs +4 -4
- package/dist/services/build-logs.d.ts.map +1 -1
- package/dist/services/build-logs.js +7 -7
- package/dist/services/build-logs.js.map +1 -1
- package/dist/services/build-logs.mjs +7 -7
- package/dist/services/build-logs.mjs.map +1 -1
- package/dist/services/cli-api.d.ts +13 -2
- package/dist/services/cli-api.d.ts.map +1 -1
- package/dist/services/cli-api.js +16 -3
- package/dist/services/cli-api.js.map +1 -1
- package/dist/services/cli-api.mjs +16 -3
- package/dist/services/cli-api.mjs.map +1 -1
- package/dist/services/notification.d.ts +4 -1
- package/dist/services/notification.d.ts.map +1 -1
- package/dist/services/notification.js +44 -2
- package/dist/services/notification.js.map +1 -1
- package/dist/services/notification.mjs +44 -2
- package/dist/services/notification.mjs.map +1 -1
- package/dist/types.d.ts +16 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/compress-files.d.ts.map +1 -1
- package/dist/utils/compress-files.js +2 -0
- package/dist/utils/compress-files.js.map +1 -1
- package/dist/utils/compress-files.mjs +2 -0
- package/dist/utils/compress-files.mjs.map +1 -1
- package/dist/utils/error-message-factories.d.ts +9 -0
- package/dist/utils/error-message-factories.d.ts.map +1 -0
- package/dist/utils/error-message-factories.js +25 -0
- package/dist/utils/error-message-factories.js.map +1 -0
- package/dist/utils/error-message-factories.mjs +22 -0
- package/dist/utils/error-message-factories.mjs.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface CreateGrowthSsoTrialInput {
|
|
2
|
+
strapiVersion: string | undefined;
|
|
3
|
+
}
|
|
4
|
+
interface CreateGrowthSsoTrialResponse {
|
|
5
|
+
license: string;
|
|
6
|
+
}
|
|
7
|
+
declare const _default: ({ strapiVersion, }: CreateGrowthSsoTrialInput) => Promise<CreateGrowthSsoTrialResponse | undefined>;
|
|
8
|
+
export default _default;
|
|
9
|
+
//# sourceMappingURL=action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/create-growth-sso-trial/action.ts"],"names":[],"mappings":"AAIA,UAAU,yBAAyB;IACjC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,UAAU,4BAA4B;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB;6CAIE,yBAAyB,KAAG,QAAQ,4BAA4B,GAAG,SAAS,CAAC;AAFhF,wBAqCE"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var cliApi = require('../services/cli-api.js');
|
|
4
|
+
require('fs-extra');
|
|
5
|
+
require('path');
|
|
6
|
+
require('lodash');
|
|
7
|
+
var token = require('../services/token.js');
|
|
8
|
+
var logger = require('../services/logger.js');
|
|
9
|
+
var analytics = require('../utils/analytics.js');
|
|
10
|
+
|
|
11
|
+
var action = (async ({ strapiVersion })=>{
|
|
12
|
+
const logger$1 = logger.createLogger();
|
|
13
|
+
const { retrieveToken } = await token.tokenServiceFactory({
|
|
14
|
+
logger: logger$1
|
|
15
|
+
});
|
|
16
|
+
const token$1 = await retrieveToken();
|
|
17
|
+
if (!token$1) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const cloudApiService = await cliApi.cloudApiFactory({
|
|
21
|
+
logger: logger$1
|
|
22
|
+
}, token$1);
|
|
23
|
+
try {
|
|
24
|
+
const { data: config } = await cloudApiService.config();
|
|
25
|
+
if (!config?.featureFlags?.growthSsoTrialEnabled) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
} catch (e) {
|
|
29
|
+
logger$1.debug('Failed to get cli config', e);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const response = await cloudApiService.createTrial({
|
|
34
|
+
strapiVersion: strapiVersion || ''
|
|
35
|
+
});
|
|
36
|
+
await analytics.trackEvent({
|
|
37
|
+
logger: logger$1,
|
|
38
|
+
cwd: process.cwd()
|
|
39
|
+
}, cloudApiService, 'didCreateGrowthSsoTrial', {
|
|
40
|
+
strapiVersion: strapiVersion || ''
|
|
41
|
+
});
|
|
42
|
+
return {
|
|
43
|
+
license: response.data?.licenseKey
|
|
44
|
+
};
|
|
45
|
+
} catch (e) {
|
|
46
|
+
logger$1.debug(e);
|
|
47
|
+
logger$1.error('We encountered an issue while creating your trial. Please try again in a moment. If the problem persists, contact support for assistance.');
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
module.exports = action;
|
|
52
|
+
//# sourceMappingURL=action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","sources":["../../src/create-growth-sso-trial/action.ts"],"sourcesContent":["import { cloudApiFactory, tokenServiceFactory } from '../services';\nimport { createLogger } from '../services/logger';\nimport { trackEvent } from '../utils/analytics';\n\ninterface CreateGrowthSsoTrialInput {\n strapiVersion: string | undefined;\n}\n\ninterface CreateGrowthSsoTrialResponse {\n license: string;\n}\n\nexport default async ({\n strapiVersion,\n}: CreateGrowthSsoTrialInput): Promise<CreateGrowthSsoTrialResponse | undefined> => {\n const logger = createLogger();\n const { retrieveToken } = await tokenServiceFactory({ logger });\n\n const token = await retrieveToken();\n if (!token) {\n return;\n }\n\n const cloudApiService = await cloudApiFactory({ logger }, token);\n\n try {\n const { data: config } = await cloudApiService.config();\n if (!config?.featureFlags?.growthSsoTrialEnabled) {\n return;\n }\n } catch (e: unknown) {\n logger.debug('Failed to get cli config', e);\n return;\n }\n\n try {\n const response = await cloudApiService.createTrial({ strapiVersion: strapiVersion || '' });\n\n await trackEvent({ logger, cwd: process.cwd() }, cloudApiService, 'didCreateGrowthSsoTrial', {\n strapiVersion: strapiVersion || '',\n });\n\n return { license: response.data?.licenseKey };\n } catch (e: Error | unknown) {\n logger.debug(e);\n logger.error(\n 'We encountered an issue while creating your trial. Please try again in a moment. If the problem persists, contact support for assistance.'\n );\n }\n};\n"],"names":["strapiVersion","logger","createLogger","retrieveToken","tokenServiceFactory","token","cloudApiService","cloudApiFactory","data","config","featureFlags","growthSsoTrialEnabled","e","debug","response","createTrial","trackEvent","cwd","process","license","licenseKey","error"],"mappings":";;;;;;;;;;AAYA,aAAe,CAAA,OAAO,EACpBA,aAAa,EACa,GAAA;AAC1B,IAAA,MAAMC,QAASC,GAAAA,mBAAAA,EAAAA;AACf,IAAA,MAAM,EAAEC,aAAa,EAAE,GAAG,MAAMC,yBAAoB,CAAA;AAAEH,gBAAAA;AAAO,KAAA,CAAA;AAE7D,IAAA,MAAMI,UAAQ,MAAMF,aAAAA,EAAAA;AACpB,IAAA,IAAI,CAACE,OAAO,EAAA;AACV,QAAA;AACF;IAEA,MAAMC,eAAAA,GAAkB,MAAMC,sBAAgB,CAAA;AAAEN,gBAAAA;KAAUI,EAAAA,OAAAA,CAAAA;IAE1D,IAAI;AACF,QAAA,MAAM,EAAEG,IAAMC,EAAAA,MAAM,EAAE,GAAG,MAAMH,gBAAgBG,MAAM,EAAA;QACrD,IAAI,CAACA,MAAQC,EAAAA,YAAAA,EAAcC,qBAAuB,EAAA;AAChD,YAAA;AACF;AACF,KAAA,CAAE,OAAOC,CAAY,EAAA;QACnBX,QAAOY,CAAAA,KAAK,CAAC,0BAA4BD,EAAAA,CAAAA,CAAAA;AACzC,QAAA;AACF;IAEA,IAAI;AACF,QAAA,MAAME,QAAW,GAAA,MAAMR,eAAgBS,CAAAA,WAAW,CAAC;AAAEf,YAAAA,aAAAA,EAAeA,aAAiB,IAAA;AAAG,SAAA,CAAA;AAExF,QAAA,MAAMgB,oBAAW,CAAA;AAAEf,oBAAAA,QAAAA;AAAQgB,YAAAA,GAAAA,EAAKC,QAAQD,GAAG;AAAG,SAAA,EAAGX,iBAAiB,yBAA2B,EAAA;AAC3FN,YAAAA,aAAAA,EAAeA,aAAiB,IAAA;AAClC,SAAA,CAAA;QAEA,OAAO;YAAEmB,OAASL,EAAAA,QAAAA,CAASN,IAAI,EAAEY;AAAW,SAAA;AAC9C,KAAA,CAAE,OAAOR,CAAoB,EAAA;AAC3BX,QAAAA,QAAAA,CAAOY,KAAK,CAACD,CAAAA,CAAAA;AACbX,QAAAA,QAAAA,CAAOoB,KAAK,CACV,2IAAA,CAAA;AAEJ;AACF,CAAA;;;;"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { cloudApiFactory } from '../services/cli-api.mjs';
|
|
2
|
+
import 'fs-extra';
|
|
3
|
+
import 'path';
|
|
4
|
+
import 'lodash';
|
|
5
|
+
import { tokenServiceFactory } from '../services/token.mjs';
|
|
6
|
+
import { createLogger } from '../services/logger.mjs';
|
|
7
|
+
import { trackEvent } from '../utils/analytics.mjs';
|
|
8
|
+
|
|
9
|
+
var action = (async ({ strapiVersion })=>{
|
|
10
|
+
const logger = createLogger();
|
|
11
|
+
const { retrieveToken } = await tokenServiceFactory({
|
|
12
|
+
logger
|
|
13
|
+
});
|
|
14
|
+
const token = await retrieveToken();
|
|
15
|
+
if (!token) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const cloudApiService = await cloudApiFactory({
|
|
19
|
+
logger
|
|
20
|
+
}, token);
|
|
21
|
+
try {
|
|
22
|
+
const { data: config } = await cloudApiService.config();
|
|
23
|
+
if (!config?.featureFlags?.growthSsoTrialEnabled) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
} catch (e) {
|
|
27
|
+
logger.debug('Failed to get cli config', e);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
const response = await cloudApiService.createTrial({
|
|
32
|
+
strapiVersion: strapiVersion || ''
|
|
33
|
+
});
|
|
34
|
+
await trackEvent({
|
|
35
|
+
logger,
|
|
36
|
+
cwd: process.cwd()
|
|
37
|
+
}, cloudApiService, 'didCreateGrowthSsoTrial', {
|
|
38
|
+
strapiVersion: strapiVersion || ''
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
license: response.data?.licenseKey
|
|
42
|
+
};
|
|
43
|
+
} catch (e) {
|
|
44
|
+
logger.debug(e);
|
|
45
|
+
logger.error('We encountered an issue while creating your trial. Please try again in a moment. If the problem persists, contact support for assistance.');
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
export { action as default };
|
|
50
|
+
//# sourceMappingURL=action.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.mjs","sources":["../../src/create-growth-sso-trial/action.ts"],"sourcesContent":["import { cloudApiFactory, tokenServiceFactory } from '../services';\nimport { createLogger } from '../services/logger';\nimport { trackEvent } from '../utils/analytics';\n\ninterface CreateGrowthSsoTrialInput {\n strapiVersion: string | undefined;\n}\n\ninterface CreateGrowthSsoTrialResponse {\n license: string;\n}\n\nexport default async ({\n strapiVersion,\n}: CreateGrowthSsoTrialInput): Promise<CreateGrowthSsoTrialResponse | undefined> => {\n const logger = createLogger();\n const { retrieveToken } = await tokenServiceFactory({ logger });\n\n const token = await retrieveToken();\n if (!token) {\n return;\n }\n\n const cloudApiService = await cloudApiFactory({ logger }, token);\n\n try {\n const { data: config } = await cloudApiService.config();\n if (!config?.featureFlags?.growthSsoTrialEnabled) {\n return;\n }\n } catch (e: unknown) {\n logger.debug('Failed to get cli config', e);\n return;\n }\n\n try {\n const response = await cloudApiService.createTrial({ strapiVersion: strapiVersion || '' });\n\n await trackEvent({ logger, cwd: process.cwd() }, cloudApiService, 'didCreateGrowthSsoTrial', {\n strapiVersion: strapiVersion || '',\n });\n\n return { license: response.data?.licenseKey };\n } catch (e: Error | unknown) {\n logger.debug(e);\n logger.error(\n 'We encountered an issue while creating your trial. Please try again in a moment. If the problem persists, contact support for assistance.'\n );\n }\n};\n"],"names":["strapiVersion","logger","createLogger","retrieveToken","tokenServiceFactory","token","cloudApiService","cloudApiFactory","data","config","featureFlags","growthSsoTrialEnabled","e","debug","response","createTrial","trackEvent","cwd","process","license","licenseKey","error"],"mappings":";;;;;;;;AAYA,aAAe,CAAA,OAAO,EACpBA,aAAa,EACa,GAAA;AAC1B,IAAA,MAAMC,MAASC,GAAAA,YAAAA,EAAAA;AACf,IAAA,MAAM,EAAEC,aAAa,EAAE,GAAG,MAAMC,mBAAoB,CAAA;AAAEH,QAAAA;AAAO,KAAA,CAAA;AAE7D,IAAA,MAAMI,QAAQ,MAAMF,aAAAA,EAAAA;AACpB,IAAA,IAAI,CAACE,KAAO,EAAA;AACV,QAAA;AACF;IAEA,MAAMC,eAAAA,GAAkB,MAAMC,eAAgB,CAAA;AAAEN,QAAAA;KAAUI,EAAAA,KAAAA,CAAAA;IAE1D,IAAI;AACF,QAAA,MAAM,EAAEG,IAAMC,EAAAA,MAAM,EAAE,GAAG,MAAMH,gBAAgBG,MAAM,EAAA;QACrD,IAAI,CAACA,MAAQC,EAAAA,YAAAA,EAAcC,qBAAuB,EAAA;AAChD,YAAA;AACF;AACF,KAAA,CAAE,OAAOC,CAAY,EAAA;QACnBX,MAAOY,CAAAA,KAAK,CAAC,0BAA4BD,EAAAA,CAAAA,CAAAA;AACzC,QAAA;AACF;IAEA,IAAI;AACF,QAAA,MAAME,QAAW,GAAA,MAAMR,eAAgBS,CAAAA,WAAW,CAAC;AAAEf,YAAAA,aAAAA,EAAeA,aAAiB,IAAA;AAAG,SAAA,CAAA;AAExF,QAAA,MAAMgB,UAAW,CAAA;AAAEf,YAAAA,MAAAA;AAAQgB,YAAAA,GAAAA,EAAKC,QAAQD,GAAG;AAAG,SAAA,EAAGX,iBAAiB,yBAA2B,EAAA;AAC3FN,YAAAA,aAAAA,EAAeA,aAAiB,IAAA;AAClC,SAAA,CAAA;QAEA,OAAO;YAAEmB,OAASL,EAAAA,QAAAA,CAASN,IAAI,EAAEY;AAAW,SAAA;AAC9C,KAAA,CAAE,OAAOR,CAAoB,EAAA;AAC3BX,QAAAA,MAAAA,CAAOY,KAAK,CAACD,CAAAA,CAAAA;AACbX,QAAAA,MAAAA,CAAOoB,KAAK,CACV,2IAAA,CAAA;AAEJ;AACF,CAAA;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/create-growth-sso-trial/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,UAAU,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAE,CAAC;AAElB,OAAO,EAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
declare const _default: (ctx: CLIContext) => Promise<
|
|
1
|
+
import { CLIContext, CreateProjectResponse } from '../types';
|
|
2
|
+
declare const _default: (ctx: CLIContext) => Promise<CreateProjectResponse | undefined>;
|
|
3
3
|
export default _default;
|
|
4
4
|
//# sourceMappingURL=action.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/create-project/action.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/create-project/action.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,UAAU,EAGV,qBAAqB,EAGtB,MAAM,UAAU,CAAC;8BAsGS,UAAU;AAArC,wBAyCE"}
|
|
@@ -13,6 +13,9 @@ require('cli-progress');
|
|
|
13
13
|
var getProjectNameFromPkg = require('./utils/get-project-name-from-pkg.js');
|
|
14
14
|
var action$1 = require('../login/action.js');
|
|
15
15
|
var projectQuestions_utils = require('./utils/project-questions.utils.js');
|
|
16
|
+
var api = require('../config/api.js');
|
|
17
|
+
var notification = require('../services/notification.js');
|
|
18
|
+
var errorMessageFactories = require('../utils/error-message-factories.js');
|
|
16
19
|
|
|
17
20
|
async function handleError(ctx, error) {
|
|
18
21
|
const { logger } = ctx;
|
|
@@ -20,39 +23,63 @@ async function handleError(ctx, error) {
|
|
|
20
23
|
if (error instanceof axios.AxiosError) {
|
|
21
24
|
const errorMessage = typeof error.response?.data === 'string' ? error.response.data : null;
|
|
22
25
|
switch(error.response?.status){
|
|
23
|
-
case 403:
|
|
24
|
-
logger.error(errorMessage || 'You do not have permission to create a project. Please contact support for assistance.');
|
|
25
|
-
return;
|
|
26
26
|
case 400:
|
|
27
27
|
logger.error(errorMessage || 'Invalid input. Please check your inputs and try again.');
|
|
28
28
|
return;
|
|
29
|
+
case 403:
|
|
30
|
+
logger.error(errorMessage || 'You do not have permission to create a project. Please contact support for assistance.');
|
|
31
|
+
return;
|
|
29
32
|
case 503:
|
|
30
33
|
logger.error('Strapi Cloud project creation is currently unavailable. Please try again later.');
|
|
31
34
|
return;
|
|
32
35
|
default:
|
|
33
36
|
if (errorMessage) {
|
|
34
37
|
logger.error(errorMessage);
|
|
35
|
-
|
|
38
|
+
throw error;
|
|
36
39
|
}
|
|
37
40
|
break;
|
|
38
41
|
}
|
|
39
42
|
}
|
|
40
43
|
logger.error('We encountered an issue while creating your project. Please try again in a moment. If the problem persists, contact support for assistance.');
|
|
41
44
|
}
|
|
42
|
-
async function createProject(ctx, cloudApi, projectInput) {
|
|
45
|
+
async function createProject(ctx, cloudApi, projectInput, token, config) {
|
|
43
46
|
const { logger } = ctx;
|
|
44
|
-
const
|
|
47
|
+
const projectSpinner = logger.spinner('Setting up your project...').start();
|
|
48
|
+
projectSpinner.indent = 1;
|
|
49
|
+
const notificationService = notification.notificationServiceFactory(ctx);
|
|
50
|
+
const { waitForEnvironmentCreation, close } = notificationService(`${api.apiConfig.apiBaseUrl}/${cliApi.VERSION}/notifications`, token, config);
|
|
51
|
+
let projectData;
|
|
45
52
|
try {
|
|
46
53
|
const { data } = await cloudApi.createProject(projectInput);
|
|
54
|
+
projectData = data;
|
|
47
55
|
await strapiInfoSave.save({
|
|
48
56
|
project: data
|
|
49
57
|
});
|
|
50
|
-
|
|
51
|
-
return data;
|
|
58
|
+
projectSpinner.succeed('Project created successfully!');
|
|
52
59
|
} catch (e) {
|
|
53
|
-
|
|
60
|
+
projectSpinner.fail(`An error occurred while creating the project on Strapi Cloud.`);
|
|
61
|
+
close();
|
|
54
62
|
throw e;
|
|
55
63
|
}
|
|
64
|
+
if (config.featureFlags.asyncProjectCreationEnabled) {
|
|
65
|
+
const environmentSpinner = logger.spinner('Setting up your environment... This may take a minute...').start();
|
|
66
|
+
environmentSpinner.indent = 1;
|
|
67
|
+
try {
|
|
68
|
+
await waitForEnvironmentCreation(projectData.environmentInternalName);
|
|
69
|
+
environmentSpinner.succeed('Environment created successfully!\n');
|
|
70
|
+
} catch (e) {
|
|
71
|
+
environmentSpinner.fail(`An error occurred while creating the environment on Strapi Cloud.\n`);
|
|
72
|
+
const environmentErrorMessage = errorMessageFactories.environmentErrorMessageFactory({
|
|
73
|
+
projectName: projectData.name,
|
|
74
|
+
firstLine: config.projectCreation.errors.environmentCreationFailed.firstLine,
|
|
75
|
+
secondLine: config.projectCreation.errors.environmentCreationFailed.secondLine
|
|
76
|
+
});
|
|
77
|
+
logger.log(errorMessageFactories.environmentCreationErrorFactory(environmentErrorMessage));
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
close();
|
|
82
|
+
return projectData;
|
|
56
83
|
}
|
|
57
84
|
var action = (async (ctx)=>{
|
|
58
85
|
const { logger } = ctx;
|
|
@@ -77,13 +104,13 @@ var action = (async (ctx)=>{
|
|
|
77
104
|
const projectAnswers = await inquirer.prompt(questions);
|
|
78
105
|
const projectInput = projectAnswersDefaulted(projectAnswers);
|
|
79
106
|
try {
|
|
80
|
-
return await createProject(ctx, cloudApi, projectInput);
|
|
107
|
+
return await createProject(ctx, cloudApi, projectInput, token$1, config);
|
|
81
108
|
} catch (e) {
|
|
82
109
|
if (e instanceof axios.AxiosError && e.response?.status === 401) {
|
|
83
110
|
logger.warn('Oops! Your session has expired. Please log in again to retry.');
|
|
84
111
|
await eraseToken();
|
|
85
112
|
if (await action$1.promptLogin(ctx)) {
|
|
86
|
-
return await createProject(ctx, cloudApi, projectInput);
|
|
113
|
+
return await createProject(ctx, cloudApi, projectInput, token$1, config);
|
|
87
114
|
}
|
|
88
115
|
} else {
|
|
89
116
|
await handleError(ctx, e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sources":["../../src/create-project/action.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport { AxiosError } from 'axios';\nimport { defaults } from 'lodash/fp';\nimport type { CLIContext, ProjectAnswers, ProjectInput } from '../types';\nimport { cloudApiFactory, local, tokenServiceFactory } from '../services';\nimport { getProjectNameFromPackageJson } from './utils/get-project-name-from-pkg';\nimport { promptLogin } from '../login/action';\nimport {\n getDefaultsFromQuestions,\n getProjectNodeVersionDefault,\n questionDefaultValuesMapper,\n} from './utils/project-questions.utils';\n\nasync function handleError(ctx: CLIContext, error: Error) {\n const { logger } = ctx;\n logger.debug(error);\n if (error instanceof AxiosError) {\n const errorMessage = typeof error.response?.data === 'string' ? error.response.data : null;\n switch (error.response?.status) {\n case 403:\n logger.error(\n errorMessage ||\n 'You do not have permission to create a project. Please contact support for assistance.'\n );\n return;\n case 400:\n logger.error(errorMessage || 'Invalid input. Please check your inputs and try again.');\n return;\n case 503:\n logger.error(\n 'Strapi Cloud project creation is currently unavailable. Please try again later.'\n );\n return;\n default:\n if (errorMessage) {\n logger.error(errorMessage);\n return;\n }\n break;\n }\n }\n logger.error(\n 'We encountered an issue while creating your project. Please try again in a moment. If the problem persists, contact support for assistance.'\n );\n}\n\nasync function createProject(ctx: CLIContext, cloudApi: any, projectInput: ProjectInput) {\n const { logger } = ctx;\n const spinner = logger.spinner('Setting up your project...').start();\n try {\n const { data } = await cloudApi.createProject(projectInput);\n await local.save({ project: data });\n spinner.succeed('Project created successfully!');\n return data;\n } catch (e: Error | unknown) {\n spinner.fail('An error occurred while creating the project on Strapi Cloud.');\n throw e;\n }\n}\n\nexport default async (ctx: CLIContext) => {\n const { logger } = ctx;\n const { getValidToken, eraseToken } = await tokenServiceFactory(ctx);\n\n const token = await getValidToken(ctx, promptLogin);\n if (!token) {\n return;\n }\n\n const cloudApi = await cloudApiFactory(ctx, token);\n const { data: config } = await cloudApi.config();\n const projectName = await getProjectNameFromPackageJson(ctx);\n\n const defaultAnswersMapper = questionDefaultValuesMapper({\n name: projectName,\n nodeVersion: getProjectNodeVersionDefault,\n });\n const questions = defaultAnswersMapper(config.projectCreation.questions);\n const defaultValues = {\n ...config.projectCreation.defaults,\n ...getDefaultsFromQuestions(questions),\n };\n\n const projectAnswersDefaulted = defaults(defaultValues);\n const projectAnswers = await inquirer.prompt<ProjectAnswers>(questions);\n\n const projectInput: ProjectInput = projectAnswersDefaulted(projectAnswers);\n\n try {\n return await createProject(ctx, cloudApi, projectInput);\n } catch (e: Error | unknown) {\n if (e instanceof AxiosError && e.response?.status === 401) {\n logger.warn('Oops! Your session has expired. Please log in again to retry.');\n await eraseToken();\n if (await promptLogin(ctx)) {\n return await createProject(ctx, cloudApi, projectInput);\n }\n } else {\n await handleError(ctx, e as Error);\n }\n }\n};\n"],"names":["handleError","ctx","error","logger","debug","AxiosError","errorMessage","response","data","status","createProject","cloudApi","projectInput","spinner","start","local","project","succeed","e","fail","getValidToken","eraseToken","tokenServiceFactory","token","promptLogin","cloudApiFactory","config","projectName","getProjectNameFromPackageJson","defaultAnswersMapper","questionDefaultValuesMapper","name","nodeVersion","getProjectNodeVersionDefault","questions","projectCreation","defaultValues","defaults","getDefaultsFromQuestions","projectAnswersDefaulted","projectAnswers","inquirer","prompt","warn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"action.js","sources":["../../src/create-project/action.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport { AxiosError } from 'axios';\nimport { defaults } from 'lodash/fp';\nimport {\n CLIContext,\n CloudApiService,\n CloudCliConfig,\n CreateProjectResponse,\n ProjectAnswers,\n ProjectInput,\n} from '../types';\nimport { cloudApiFactory, local, tokenServiceFactory } from '../services';\nimport { VERSION } from '../services/cli-api';\nimport { getProjectNameFromPackageJson } from './utils/get-project-name-from-pkg';\nimport { promptLogin } from '../login/action';\nimport {\n getDefaultsFromQuestions,\n getProjectNodeVersionDefault,\n questionDefaultValuesMapper,\n} from './utils/project-questions.utils';\nimport { apiConfig } from '../config/api';\nimport { notificationServiceFactory } from '../services/notification';\nimport {\n environmentCreationErrorFactory,\n environmentErrorMessageFactory,\n} from '../utils/error-message-factories';\n\nasync function handleError(ctx: CLIContext, error: Error) {\n const { logger } = ctx;\n logger.debug(error);\n if (error instanceof AxiosError) {\n const errorMessage = typeof error.response?.data === 'string' ? error.response.data : null;\n switch (error.response?.status) {\n case 400:\n logger.error(errorMessage || 'Invalid input. Please check your inputs and try again.');\n return;\n case 403:\n logger.error(\n errorMessage ||\n 'You do not have permission to create a project. Please contact support for assistance.'\n );\n return;\n case 503:\n logger.error(\n 'Strapi Cloud project creation is currently unavailable. Please try again later.'\n );\n return;\n default:\n if (errorMessage) {\n logger.error(errorMessage);\n throw error;\n }\n break;\n }\n }\n logger.error(\n 'We encountered an issue while creating your project. Please try again in a moment. If the problem persists, contact support for assistance.'\n );\n}\n\nasync function createProject(\n ctx: CLIContext,\n cloudApi: CloudApiService,\n projectInput: ProjectInput,\n token: string,\n config: CloudCliConfig\n) {\n const { logger } = ctx;\n const projectSpinner = logger.spinner('Setting up your project...').start();\n projectSpinner.indent = 1;\n const notificationService = notificationServiceFactory(ctx);\n const { waitForEnvironmentCreation, close } = notificationService(\n `${apiConfig.apiBaseUrl}/${VERSION}/notifications`,\n token,\n config\n );\n let projectData: CreateProjectResponse;\n try {\n const { data } = await cloudApi.createProject(projectInput);\n projectData = data;\n await local.save({ project: data });\n projectSpinner.succeed('Project created successfully!');\n } catch (e: Error | unknown) {\n projectSpinner.fail(`An error occurred while creating the project on Strapi Cloud.`);\n close();\n throw e;\n }\n if (config.featureFlags.asyncProjectCreationEnabled) {\n const environmentSpinner = logger\n .spinner('Setting up your environment... This may take a minute...')\n .start();\n environmentSpinner.indent = 1;\n try {\n await waitForEnvironmentCreation(projectData.environmentInternalName);\n environmentSpinner.succeed('Environment created successfully!\\n');\n } catch (e: Error | unknown) {\n environmentSpinner.fail(\n `An error occurred while creating the environment on Strapi Cloud.\\n`\n );\n const environmentErrorMessage = environmentErrorMessageFactory({\n projectName: projectData.name,\n firstLine: config.projectCreation.errors.environmentCreationFailed.firstLine,\n secondLine: config.projectCreation.errors.environmentCreationFailed.secondLine,\n });\n logger.log(environmentCreationErrorFactory(environmentErrorMessage));\n return;\n }\n }\n close();\n return projectData;\n}\n\nexport default async (ctx: CLIContext) => {\n const { logger } = ctx;\n const { getValidToken, eraseToken } = await tokenServiceFactory(ctx);\n\n const token = await getValidToken(ctx, promptLogin);\n if (!token) {\n return;\n }\n\n const cloudApi = await cloudApiFactory(ctx, token);\n const { data: config } = await cloudApi.config();\n const projectName = await getProjectNameFromPackageJson(ctx);\n\n const defaultAnswersMapper = questionDefaultValuesMapper({\n name: projectName,\n nodeVersion: getProjectNodeVersionDefault,\n });\n const questions = defaultAnswersMapper(config.projectCreation.questions);\n const defaultValues = {\n ...config.projectCreation.defaults,\n ...getDefaultsFromQuestions(questions),\n };\n\n const projectAnswersDefaulted = defaults(defaultValues);\n const projectAnswers = await inquirer.prompt<ProjectAnswers>(questions);\n\n const projectInput: ProjectInput = projectAnswersDefaulted(projectAnswers);\n\n try {\n return await createProject(ctx, cloudApi, projectInput, token, config);\n } catch (e: Error | unknown) {\n if (e instanceof AxiosError && e.response?.status === 401) {\n logger.warn('Oops! Your session has expired. Please log in again to retry.');\n await eraseToken();\n if (await promptLogin(ctx)) {\n return await createProject(ctx, cloudApi, projectInput, token, config);\n }\n } else {\n await handleError(ctx, e as Error);\n }\n }\n};\n"],"names":["handleError","ctx","error","logger","debug","AxiosError","errorMessage","response","data","status","createProject","cloudApi","projectInput","token","config","projectSpinner","spinner","start","indent","notificationService","notificationServiceFactory","waitForEnvironmentCreation","close","apiConfig","apiBaseUrl","VERSION","projectData","local","project","succeed","e","fail","featureFlags","asyncProjectCreationEnabled","environmentSpinner","environmentInternalName","environmentErrorMessage","environmentErrorMessageFactory","projectName","name","firstLine","projectCreation","errors","environmentCreationFailed","secondLine","log","environmentCreationErrorFactory","getValidToken","eraseToken","tokenServiceFactory","promptLogin","cloudApiFactory","getProjectNameFromPackageJson","defaultAnswersMapper","questionDefaultValuesMapper","nodeVersion","getProjectNodeVersionDefault","questions","defaultValues","defaults","getDefaultsFromQuestions","projectAnswersDefaulted","projectAnswers","inquirer","prompt","warn"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import inquirer from 'inquirer';
|
|
2
2
|
import { AxiosError } from 'axios';
|
|
3
3
|
import { defaults } from 'lodash/fp';
|
|
4
|
-
import { cloudApiFactory } from '../services/cli-api.mjs';
|
|
4
|
+
import { cloudApiFactory, VERSION } from '../services/cli-api.mjs';
|
|
5
5
|
import { save } from '../services/strapi-info-save.mjs';
|
|
6
6
|
import { tokenServiceFactory } from '../services/token.mjs';
|
|
7
7
|
import 'chalk';
|
|
@@ -11,6 +11,9 @@ import 'cli-progress';
|
|
|
11
11
|
import { getProjectNameFromPackageJson } from './utils/get-project-name-from-pkg.mjs';
|
|
12
12
|
import { promptLogin } from '../login/action.mjs';
|
|
13
13
|
import { getDefaultsFromQuestions, questionDefaultValuesMapper, getProjectNodeVersionDefault } from './utils/project-questions.utils.mjs';
|
|
14
|
+
import { apiConfig } from '../config/api.mjs';
|
|
15
|
+
import { notificationServiceFactory } from '../services/notification.mjs';
|
|
16
|
+
import { environmentErrorMessageFactory, environmentCreationErrorFactory } from '../utils/error-message-factories.mjs';
|
|
14
17
|
|
|
15
18
|
async function handleError(ctx, error) {
|
|
16
19
|
const { logger } = ctx;
|
|
@@ -18,39 +21,63 @@ async function handleError(ctx, error) {
|
|
|
18
21
|
if (error instanceof AxiosError) {
|
|
19
22
|
const errorMessage = typeof error.response?.data === 'string' ? error.response.data : null;
|
|
20
23
|
switch(error.response?.status){
|
|
21
|
-
case 403:
|
|
22
|
-
logger.error(errorMessage || 'You do not have permission to create a project. Please contact support for assistance.');
|
|
23
|
-
return;
|
|
24
24
|
case 400:
|
|
25
25
|
logger.error(errorMessage || 'Invalid input. Please check your inputs and try again.');
|
|
26
26
|
return;
|
|
27
|
+
case 403:
|
|
28
|
+
logger.error(errorMessage || 'You do not have permission to create a project. Please contact support for assistance.');
|
|
29
|
+
return;
|
|
27
30
|
case 503:
|
|
28
31
|
logger.error('Strapi Cloud project creation is currently unavailable. Please try again later.');
|
|
29
32
|
return;
|
|
30
33
|
default:
|
|
31
34
|
if (errorMessage) {
|
|
32
35
|
logger.error(errorMessage);
|
|
33
|
-
|
|
36
|
+
throw error;
|
|
34
37
|
}
|
|
35
38
|
break;
|
|
36
39
|
}
|
|
37
40
|
}
|
|
38
41
|
logger.error('We encountered an issue while creating your project. Please try again in a moment. If the problem persists, contact support for assistance.');
|
|
39
42
|
}
|
|
40
|
-
async function createProject(ctx, cloudApi, projectInput) {
|
|
43
|
+
async function createProject(ctx, cloudApi, projectInput, token, config) {
|
|
41
44
|
const { logger } = ctx;
|
|
42
|
-
const
|
|
45
|
+
const projectSpinner = logger.spinner('Setting up your project...').start();
|
|
46
|
+
projectSpinner.indent = 1;
|
|
47
|
+
const notificationService = notificationServiceFactory(ctx);
|
|
48
|
+
const { waitForEnvironmentCreation, close } = notificationService(`${apiConfig.apiBaseUrl}/${VERSION}/notifications`, token, config);
|
|
49
|
+
let projectData;
|
|
43
50
|
try {
|
|
44
51
|
const { data } = await cloudApi.createProject(projectInput);
|
|
52
|
+
projectData = data;
|
|
45
53
|
await save({
|
|
46
54
|
project: data
|
|
47
55
|
});
|
|
48
|
-
|
|
49
|
-
return data;
|
|
56
|
+
projectSpinner.succeed('Project created successfully!');
|
|
50
57
|
} catch (e) {
|
|
51
|
-
|
|
58
|
+
projectSpinner.fail(`An error occurred while creating the project on Strapi Cloud.`);
|
|
59
|
+
close();
|
|
52
60
|
throw e;
|
|
53
61
|
}
|
|
62
|
+
if (config.featureFlags.asyncProjectCreationEnabled) {
|
|
63
|
+
const environmentSpinner = logger.spinner('Setting up your environment... This may take a minute...').start();
|
|
64
|
+
environmentSpinner.indent = 1;
|
|
65
|
+
try {
|
|
66
|
+
await waitForEnvironmentCreation(projectData.environmentInternalName);
|
|
67
|
+
environmentSpinner.succeed('Environment created successfully!\n');
|
|
68
|
+
} catch (e) {
|
|
69
|
+
environmentSpinner.fail(`An error occurred while creating the environment on Strapi Cloud.\n`);
|
|
70
|
+
const environmentErrorMessage = environmentErrorMessageFactory({
|
|
71
|
+
projectName: projectData.name,
|
|
72
|
+
firstLine: config.projectCreation.errors.environmentCreationFailed.firstLine,
|
|
73
|
+
secondLine: config.projectCreation.errors.environmentCreationFailed.secondLine
|
|
74
|
+
});
|
|
75
|
+
logger.log(environmentCreationErrorFactory(environmentErrorMessage));
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
close();
|
|
80
|
+
return projectData;
|
|
54
81
|
}
|
|
55
82
|
var action = (async (ctx)=>{
|
|
56
83
|
const { logger } = ctx;
|
|
@@ -75,13 +102,13 @@ var action = (async (ctx)=>{
|
|
|
75
102
|
const projectAnswers = await inquirer.prompt(questions);
|
|
76
103
|
const projectInput = projectAnswersDefaulted(projectAnswers);
|
|
77
104
|
try {
|
|
78
|
-
return await createProject(ctx, cloudApi, projectInput);
|
|
105
|
+
return await createProject(ctx, cloudApi, projectInput, token, config);
|
|
79
106
|
} catch (e) {
|
|
80
107
|
if (e instanceof AxiosError && e.response?.status === 401) {
|
|
81
108
|
logger.warn('Oops! Your session has expired. Please log in again to retry.');
|
|
82
109
|
await eraseToken();
|
|
83
110
|
if (await promptLogin(ctx)) {
|
|
84
|
-
return await createProject(ctx, cloudApi, projectInput);
|
|
111
|
+
return await createProject(ctx, cloudApi, projectInput, token, config);
|
|
85
112
|
}
|
|
86
113
|
} else {
|
|
87
114
|
await handleError(ctx, e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.mjs","sources":["../../src/create-project/action.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport { AxiosError } from 'axios';\nimport { defaults } from 'lodash/fp';\nimport type { CLIContext, ProjectAnswers, ProjectInput } from '../types';\nimport { cloudApiFactory, local, tokenServiceFactory } from '../services';\nimport { getProjectNameFromPackageJson } from './utils/get-project-name-from-pkg';\nimport { promptLogin } from '../login/action';\nimport {\n getDefaultsFromQuestions,\n getProjectNodeVersionDefault,\n questionDefaultValuesMapper,\n} from './utils/project-questions.utils';\n\nasync function handleError(ctx: CLIContext, error: Error) {\n const { logger } = ctx;\n logger.debug(error);\n if (error instanceof AxiosError) {\n const errorMessage = typeof error.response?.data === 'string' ? error.response.data : null;\n switch (error.response?.status) {\n case 403:\n logger.error(\n errorMessage ||\n 'You do not have permission to create a project. Please contact support for assistance.'\n );\n return;\n case 400:\n logger.error(errorMessage || 'Invalid input. Please check your inputs and try again.');\n return;\n case 503:\n logger.error(\n 'Strapi Cloud project creation is currently unavailable. Please try again later.'\n );\n return;\n default:\n if (errorMessage) {\n logger.error(errorMessage);\n return;\n }\n break;\n }\n }\n logger.error(\n 'We encountered an issue while creating your project. Please try again in a moment. If the problem persists, contact support for assistance.'\n );\n}\n\nasync function createProject(ctx: CLIContext, cloudApi: any, projectInput: ProjectInput) {\n const { logger } = ctx;\n const spinner = logger.spinner('Setting up your project...').start();\n try {\n const { data } = await cloudApi.createProject(projectInput);\n await local.save({ project: data });\n spinner.succeed('Project created successfully!');\n return data;\n } catch (e: Error | unknown) {\n spinner.fail('An error occurred while creating the project on Strapi Cloud.');\n throw e;\n }\n}\n\nexport default async (ctx: CLIContext) => {\n const { logger } = ctx;\n const { getValidToken, eraseToken } = await tokenServiceFactory(ctx);\n\n const token = await getValidToken(ctx, promptLogin);\n if (!token) {\n return;\n }\n\n const cloudApi = await cloudApiFactory(ctx, token);\n const { data: config } = await cloudApi.config();\n const projectName = await getProjectNameFromPackageJson(ctx);\n\n const defaultAnswersMapper = questionDefaultValuesMapper({\n name: projectName,\n nodeVersion: getProjectNodeVersionDefault,\n });\n const questions = defaultAnswersMapper(config.projectCreation.questions);\n const defaultValues = {\n ...config.projectCreation.defaults,\n ...getDefaultsFromQuestions(questions),\n };\n\n const projectAnswersDefaulted = defaults(defaultValues);\n const projectAnswers = await inquirer.prompt<ProjectAnswers>(questions);\n\n const projectInput: ProjectInput = projectAnswersDefaulted(projectAnswers);\n\n try {\n return await createProject(ctx, cloudApi, projectInput);\n } catch (e: Error | unknown) {\n if (e instanceof AxiosError && e.response?.status === 401) {\n logger.warn('Oops! Your session has expired. Please log in again to retry.');\n await eraseToken();\n if (await promptLogin(ctx)) {\n return await createProject(ctx, cloudApi, projectInput);\n }\n } else {\n await handleError(ctx, e as Error);\n }\n }\n};\n"],"names":["handleError","ctx","error","logger","debug","AxiosError","errorMessage","response","data","status","createProject","cloudApi","projectInput","spinner","start","local","project","succeed","e","fail","getValidToken","eraseToken","tokenServiceFactory","token","promptLogin","cloudApiFactory","config","projectName","getProjectNameFromPackageJson","defaultAnswersMapper","questionDefaultValuesMapper","name","nodeVersion","getProjectNodeVersionDefault","questions","projectCreation","defaultValues","defaults","getDefaultsFromQuestions","projectAnswersDefaulted","projectAnswers","inquirer","prompt","warn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"action.mjs","sources":["../../src/create-project/action.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport { AxiosError } from 'axios';\nimport { defaults } from 'lodash/fp';\nimport {\n CLIContext,\n CloudApiService,\n CloudCliConfig,\n CreateProjectResponse,\n ProjectAnswers,\n ProjectInput,\n} from '../types';\nimport { cloudApiFactory, local, tokenServiceFactory } from '../services';\nimport { VERSION } from '../services/cli-api';\nimport { getProjectNameFromPackageJson } from './utils/get-project-name-from-pkg';\nimport { promptLogin } from '../login/action';\nimport {\n getDefaultsFromQuestions,\n getProjectNodeVersionDefault,\n questionDefaultValuesMapper,\n} from './utils/project-questions.utils';\nimport { apiConfig } from '../config/api';\nimport { notificationServiceFactory } from '../services/notification';\nimport {\n environmentCreationErrorFactory,\n environmentErrorMessageFactory,\n} from '../utils/error-message-factories';\n\nasync function handleError(ctx: CLIContext, error: Error) {\n const { logger } = ctx;\n logger.debug(error);\n if (error instanceof AxiosError) {\n const errorMessage = typeof error.response?.data === 'string' ? error.response.data : null;\n switch (error.response?.status) {\n case 400:\n logger.error(errorMessage || 'Invalid input. Please check your inputs and try again.');\n return;\n case 403:\n logger.error(\n errorMessage ||\n 'You do not have permission to create a project. Please contact support for assistance.'\n );\n return;\n case 503:\n logger.error(\n 'Strapi Cloud project creation is currently unavailable. Please try again later.'\n );\n return;\n default:\n if (errorMessage) {\n logger.error(errorMessage);\n throw error;\n }\n break;\n }\n }\n logger.error(\n 'We encountered an issue while creating your project. Please try again in a moment. If the problem persists, contact support for assistance.'\n );\n}\n\nasync function createProject(\n ctx: CLIContext,\n cloudApi: CloudApiService,\n projectInput: ProjectInput,\n token: string,\n config: CloudCliConfig\n) {\n const { logger } = ctx;\n const projectSpinner = logger.spinner('Setting up your project...').start();\n projectSpinner.indent = 1;\n const notificationService = notificationServiceFactory(ctx);\n const { waitForEnvironmentCreation, close } = notificationService(\n `${apiConfig.apiBaseUrl}/${VERSION}/notifications`,\n token,\n config\n );\n let projectData: CreateProjectResponse;\n try {\n const { data } = await cloudApi.createProject(projectInput);\n projectData = data;\n await local.save({ project: data });\n projectSpinner.succeed('Project created successfully!');\n } catch (e: Error | unknown) {\n projectSpinner.fail(`An error occurred while creating the project on Strapi Cloud.`);\n close();\n throw e;\n }\n if (config.featureFlags.asyncProjectCreationEnabled) {\n const environmentSpinner = logger\n .spinner('Setting up your environment... This may take a minute...')\n .start();\n environmentSpinner.indent = 1;\n try {\n await waitForEnvironmentCreation(projectData.environmentInternalName);\n environmentSpinner.succeed('Environment created successfully!\\n');\n } catch (e: Error | unknown) {\n environmentSpinner.fail(\n `An error occurred while creating the environment on Strapi Cloud.\\n`\n );\n const environmentErrorMessage = environmentErrorMessageFactory({\n projectName: projectData.name,\n firstLine: config.projectCreation.errors.environmentCreationFailed.firstLine,\n secondLine: config.projectCreation.errors.environmentCreationFailed.secondLine,\n });\n logger.log(environmentCreationErrorFactory(environmentErrorMessage));\n return;\n }\n }\n close();\n return projectData;\n}\n\nexport default async (ctx: CLIContext) => {\n const { logger } = ctx;\n const { getValidToken, eraseToken } = await tokenServiceFactory(ctx);\n\n const token = await getValidToken(ctx, promptLogin);\n if (!token) {\n return;\n }\n\n const cloudApi = await cloudApiFactory(ctx, token);\n const { data: config } = await cloudApi.config();\n const projectName = await getProjectNameFromPackageJson(ctx);\n\n const defaultAnswersMapper = questionDefaultValuesMapper({\n name: projectName,\n nodeVersion: getProjectNodeVersionDefault,\n });\n const questions = defaultAnswersMapper(config.projectCreation.questions);\n const defaultValues = {\n ...config.projectCreation.defaults,\n ...getDefaultsFromQuestions(questions),\n };\n\n const projectAnswersDefaulted = defaults(defaultValues);\n const projectAnswers = await inquirer.prompt<ProjectAnswers>(questions);\n\n const projectInput: ProjectInput = projectAnswersDefaulted(projectAnswers);\n\n try {\n return await createProject(ctx, cloudApi, projectInput, token, config);\n } catch (e: Error | unknown) {\n if (e instanceof AxiosError && e.response?.status === 401) {\n logger.warn('Oops! Your session has expired. Please log in again to retry.');\n await eraseToken();\n if (await promptLogin(ctx)) {\n return await createProject(ctx, cloudApi, projectInput, token, config);\n }\n } else {\n await handleError(ctx, e as Error);\n }\n }\n};\n"],"names":["handleError","ctx","error","logger","debug","AxiosError","errorMessage","response","data","status","createProject","cloudApi","projectInput","token","config","projectSpinner","spinner","start","indent","notificationService","notificationServiceFactory","waitForEnvironmentCreation","close","apiConfig","apiBaseUrl","VERSION","projectData","local","project","succeed","e","fail","featureFlags","asyncProjectCreationEnabled","environmentSpinner","environmentInternalName","environmentErrorMessage","environmentErrorMessageFactory","projectName","name","firstLine","projectCreation","errors","environmentCreationFailed","secondLine","log","environmentCreationErrorFactory","getValidToken","eraseToken","tokenServiceFactory","promptLogin","cloudApiFactory","getProjectNameFromPackageJson","defaultAnswersMapper","questionDefaultValuesMapper","nodeVersion","getProjectNodeVersionDefault","questions","defaultValues","defaults","getDefaultsFromQuestions","projectAnswersDefaulted","projectAnswers","inquirer","prompt","warn"],"mappings":";;;;;;;;;;;;;;;;;AA2BA,eAAeA,WAAAA,CAAYC,GAAe,EAAEC,KAAY,EAAA;IACtD,MAAM,EAAEC,MAAM,EAAE,GAAGF,GAAAA;AACnBE,IAAAA,MAAAA,CAAOC,KAAK,CAACF,KAAAA,CAAAA;AACb,IAAA,IAAIA,iBAAiBG,UAAY,EAAA;QAC/B,MAAMC,YAAAA,GAAe,OAAOJ,KAAAA,CAAMK,QAAQ,EAAEC,IAAS,KAAA,QAAA,GAAWN,KAAMK,CAAAA,QAAQ,CAACC,IAAI,GAAG,IAAA;QACtF,OAAQN,KAAAA,CAAMK,QAAQ,EAAEE,MAAAA;YACtB,KAAK,GAAA;gBACHN,MAAOD,CAAAA,KAAK,CAACI,YAAgB,IAAA,wDAAA,CAAA;AAC7B,gBAAA;YACF,KAAK,GAAA;gBACHH,MAAOD,CAAAA,KAAK,CACVI,YACE,IAAA,wFAAA,CAAA;AAEJ,gBAAA;YACF,KAAK,GAAA;AACHH,gBAAAA,MAAAA,CAAOD,KAAK,CACV,iFAAA,CAAA;AAEF,gBAAA;AACF,YAAA;AACE,gBAAA,IAAII,YAAc,EAAA;AAChBH,oBAAAA,MAAAA,CAAOD,KAAK,CAACI,YAAAA,CAAAA;oBACb,MAAMJ,KAAAA;AACR;AACA,gBAAA;AACJ;AACF;AACAC,IAAAA,MAAAA,CAAOD,KAAK,CACV,6IAAA,CAAA;AAEJ;AAEA,eAAeQ,aAAAA,CACbT,GAAe,EACfU,QAAyB,EACzBC,YAA0B,EAC1BC,KAAa,EACbC,MAAsB,EAAA;IAEtB,MAAM,EAAEX,MAAM,EAAE,GAAGF,GAAAA;AACnB,IAAA,MAAMc,cAAiBZ,GAAAA,MAAAA,CAAOa,OAAO,CAAC,8BAA8BC,KAAK,EAAA;AACzEF,IAAAA,cAAAA,CAAeG,MAAM,GAAG,CAAA;AACxB,IAAA,MAAMC,sBAAsBC,0BAA2BnB,CAAAA,GAAAA,CAAAA;AACvD,IAAA,MAAM,EAAEoB,0BAA0B,EAAEC,KAAK,EAAE,GAAGH,oBAC5C,CAAC,EAAEI,SAAUC,CAAAA,UAAU,CAAC,CAAC,EAAEC,QAAQ,cAAc,CAAC,EAClDZ,KACAC,EAAAA,MAAAA,CAAAA;IAEF,IAAIY,WAAAA;IACJ,IAAI;AACF,QAAA,MAAM,EAAElB,IAAI,EAAE,GAAG,MAAMG,QAAAA,CAASD,aAAa,CAACE,YAAAA,CAAAA;QAC9Cc,WAAclB,GAAAA,IAAAA;QACd,MAAMmB,IAAU,CAAC;YAAEC,OAASpB,EAAAA;AAAK,SAAA,CAAA;AACjCO,QAAAA,cAAAA,CAAec,OAAO,CAAC,+BAAA,CAAA;AACzB,KAAA,CAAE,OAAOC,CAAoB,EAAA;AAC3Bf,QAAAA,cAAAA,CAAegB,IAAI,CAAC,CAAC,6DAA6D,CAAC,CAAA;AACnFT,QAAAA,KAAAA,EAAAA;QACA,MAAMQ,CAAAA;AACR;AACA,IAAA,IAAIhB,MAAOkB,CAAAA,YAAY,CAACC,2BAA2B,EAAE;AACnD,QAAA,MAAMC,kBAAqB/B,GAAAA,MAAAA,CACxBa,OAAO,CAAC,4DACRC,KAAK,EAAA;AACRiB,QAAAA,kBAAAA,CAAmBhB,MAAM,GAAG,CAAA;QAC5B,IAAI;YACF,MAAMG,0BAAAA,CAA2BK,YAAYS,uBAAuB,CAAA;AACpED,YAAAA,kBAAAA,CAAmBL,OAAO,CAAC,qCAAA,CAAA;AAC7B,SAAA,CAAE,OAAOC,CAAoB,EAAA;AAC3BI,YAAAA,kBAAAA,CAAmBH,IAAI,CACrB,CAAC,mEAAmE,CAAC,CAAA;AAEvE,YAAA,MAAMK,0BAA0BC,8BAA+B,CAAA;AAC7DC,gBAAAA,WAAAA,EAAaZ,YAAYa,IAAI;AAC7BC,gBAAAA,SAAAA,EAAW1B,OAAO2B,eAAe,CAACC,MAAM,CAACC,yBAAyB,CAACH,SAAS;AAC5EI,gBAAAA,UAAAA,EAAY9B,OAAO2B,eAAe,CAACC,MAAM,CAACC,yBAAyB,CAACC;AACtE,aAAA,CAAA;YACAzC,MAAO0C,CAAAA,GAAG,CAACC,+BAAgCV,CAAAA,uBAAAA,CAAAA,CAAAA;AAC3C,YAAA;AACF;AACF;AACAd,IAAAA,KAAAA,EAAAA;IACA,OAAOI,WAAAA;AACT;AAEA,aAAe,CAAA,OAAOzB,GAAAA,GAAAA;IACpB,MAAM,EAAEE,MAAM,EAAE,GAAGF,GAAAA;AACnB,IAAA,MAAM,EAAE8C,aAAa,EAAEC,UAAU,EAAE,GAAG,MAAMC,mBAAoBhD,CAAAA,GAAAA,CAAAA;IAEhE,MAAMY,KAAAA,GAAQ,MAAMkC,aAAAA,CAAc9C,GAAKiD,EAAAA,WAAAA,CAAAA;AACvC,IAAA,IAAI,CAACrC,KAAO,EAAA;AACV,QAAA;AACF;IAEA,MAAMF,QAAAA,GAAW,MAAMwC,eAAAA,CAAgBlD,GAAKY,EAAAA,KAAAA,CAAAA;AAC5C,IAAA,MAAM,EAAEL,IAAMM,EAAAA,MAAM,EAAE,GAAG,MAAMH,SAASG,MAAM,EAAA;IAC9C,MAAMwB,WAAAA,GAAc,MAAMc,6BAA8BnD,CAAAA,GAAAA,CAAAA;AAExD,IAAA,MAAMoD,uBAAuBC,2BAA4B,CAAA;QACvDf,IAAMD,EAAAA,WAAAA;QACNiB,WAAaC,EAAAA;AACf,KAAA,CAAA;AACA,IAAA,MAAMC,SAAYJ,GAAAA,oBAAAA,CAAqBvC,MAAO2B,CAAAA,eAAe,CAACgB,SAAS,CAAA;AACvE,IAAA,MAAMC,aAAgB,GAAA;QACpB,GAAG5C,MAAAA,CAAO2B,eAAe,CAACkB,QAAQ;AAClC,QAAA,GAAGC,yBAAyBH,SAAU;AACxC,KAAA;AAEA,IAAA,MAAMI,0BAA0BF,QAASD,CAAAA,aAAAA,CAAAA;AACzC,IAAA,MAAMI,cAAiB,GAAA,MAAMC,QAASC,CAAAA,MAAM,CAAiBP,SAAAA,CAAAA;AAE7D,IAAA,MAAM7C,eAA6BiD,uBAAwBC,CAAAA,cAAAA,CAAAA;IAE3D,IAAI;AACF,QAAA,OAAO,MAAMpD,aAAAA,CAAcT,GAAKU,EAAAA,QAAAA,EAAUC,cAAcC,KAAOC,EAAAA,MAAAA,CAAAA;AACjE,KAAA,CAAE,OAAOgB,CAAoB,EAAA;AAC3B,QAAA,IAAIA,aAAazB,UAAcyB,IAAAA,CAAAA,CAAEvB,QAAQ,EAAEE,WAAW,GAAK,EAAA;AACzDN,YAAAA,MAAAA,CAAO8D,IAAI,CAAC,+DAAA,CAAA;YACZ,MAAMjB,UAAAA,EAAAA;YACN,IAAI,MAAME,YAAYjD,GAAM,CAAA,EAAA;AAC1B,gBAAA,OAAO,MAAMS,aAAAA,CAAcT,GAAKU,EAAAA,QAAAA,EAAUC,cAAcC,KAAOC,EAAAA,MAAAA,CAAAA;AACjE;SACK,MAAA;AACL,YAAA,MAAMd,YAAYC,GAAK6B,EAAAA,CAAAA,CAAAA;AACzB;AACF;AACF,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/deploy-project/action.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,UAAU,EAKX,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/deploy-project/action.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,UAAU,EAKX,MAAM,UAAU,CAAC;AAqBlB,UAAU,UAAU;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;8BAiO0B,UAAU,QAAQ,UAAU;AAAvD,wBA8IE"}
|
|
@@ -22,6 +22,7 @@ var pkg = require('../utils/pkg.js');
|
|
|
22
22
|
var buildLogs = require('../services/build-logs.js');
|
|
23
23
|
var action$1 = require('../login/action.js');
|
|
24
24
|
var analytics = require('../utils/analytics.js');
|
|
25
|
+
var errorMessageFactories = require('../utils/error-message-factories.js');
|
|
25
26
|
|
|
26
27
|
function _interopNamespaceDefault(e) {
|
|
27
28
|
var n = Object.create(null);
|
|
@@ -74,7 +75,7 @@ async function promptForEnvironment(environments) {
|
|
|
74
75
|
}
|
|
75
76
|
return selectedEnvironment;
|
|
76
77
|
}
|
|
77
|
-
async function upload(ctx, project, token, maxProjectFileSize) {
|
|
78
|
+
async function upload(ctx, project, cliConfig, token, maxProjectFileSize) {
|
|
78
79
|
const cloudApi = await cliApi.cloudApiFactory(ctx, token);
|
|
79
80
|
try {
|
|
80
81
|
const storagePath = await local.getTmpStoragePath();
|
|
@@ -84,16 +85,17 @@ async function upload(ctx, project, token, maxProjectFileSize) {
|
|
|
84
85
|
ctx.logger.error('Unable to deploy the project. Please make sure the package.json file is correctly formatted.');
|
|
85
86
|
return;
|
|
86
87
|
}
|
|
87
|
-
ctx.logger.
|
|
88
|
+
const compressSpinner = ctx.logger.spinner('Compressing project...').start();
|
|
89
|
+
compressSpinner.indent = 1;
|
|
88
90
|
// hash packageJson.name to avoid conflicts
|
|
89
91
|
const hashname = crypto__namespace.createHash('sha512').update(packageJson.name).digest('hex');
|
|
90
92
|
const compressedFilename = `${hashname}.tar.gz`;
|
|
91
93
|
try {
|
|
92
94
|
ctx.logger.debug('Compression parameters\n', `Storage path: ${storagePath}\n`, `Project folder: ${projectFolder}\n`, `Compressed filename: ${compressedFilename}`);
|
|
93
95
|
await compressFiles.compressFilesToTar(storagePath, projectFolder, compressedFilename);
|
|
94
|
-
|
|
96
|
+
compressSpinner.succeed(`Project compressed successfully!`);
|
|
95
97
|
} catch (e) {
|
|
96
|
-
|
|
98
|
+
compressSpinner.fail('Project compression failed. Try again later or check for large/incompatible files.');
|
|
97
99
|
ctx.logger.debug(e);
|
|
98
100
|
process.exit(1);
|
|
99
101
|
}
|
|
@@ -109,8 +111,7 @@ async function upload(ctx, project, token, maxProjectFileSize) {
|
|
|
109
111
|
}
|
|
110
112
|
return;
|
|
111
113
|
}
|
|
112
|
-
ctx.logger.
|
|
113
|
-
const progressBar = ctx.logger.progressBar(100, 'Upload Progress');
|
|
114
|
+
const progressBar = ctx.logger.progressBar(100, ' ∷ Uploading project');
|
|
114
115
|
try {
|
|
115
116
|
const { data } = await cloudApi.deploy({
|
|
116
117
|
filePath: tarFilePath,
|
|
@@ -124,12 +125,11 @@ async function upload(ctx, project, token, maxProjectFileSize) {
|
|
|
124
125
|
});
|
|
125
126
|
progressBar.update(100);
|
|
126
127
|
progressBar.stop();
|
|
127
|
-
ctx.logger.
|
|
128
|
+
ctx.logger.log(`${chalk.green.bold('✔')} Upload finished!\n`);
|
|
128
129
|
return data.build_id;
|
|
129
130
|
} catch (e) {
|
|
130
131
|
progressBar.stop();
|
|
131
|
-
ctx
|
|
132
|
-
ctx.logger.debug(e);
|
|
132
|
+
await handleUploadError(ctx, e, project, cliConfig);
|
|
133
133
|
} finally{
|
|
134
134
|
await fse.remove(tarFilePath);
|
|
135
135
|
}
|
|
@@ -140,11 +140,37 @@ async function upload(ctx, project, token, maxProjectFileSize) {
|
|
|
140
140
|
process.exit(1);
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
|
+
async function handleUploadError(ctx, error, project, cliConfig) {
|
|
144
|
+
const { logger } = ctx;
|
|
145
|
+
logger.debug(error);
|
|
146
|
+
if (error.response?.status) {
|
|
147
|
+
switch(error.response.status){
|
|
148
|
+
case 405:
|
|
149
|
+
{
|
|
150
|
+
const environmentErrorMessage = errorMessageFactories.environmentErrorMessageFactory({
|
|
151
|
+
projectName: project.name,
|
|
152
|
+
firstLine: cliConfig.projectDeployment.errors.environmentNotReady.firstLine,
|
|
153
|
+
secondLine: cliConfig.projectDeployment.errors.environmentNotReady.secondLine
|
|
154
|
+
});
|
|
155
|
+
logger.log(errorMessageFactories.environmentCreationErrorFactory(environmentErrorMessage));
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
case 413:
|
|
159
|
+
logger.error('The project you are trying to upload is too big. Please remove unnecessary files and try again.');
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
logger.error('An error occurred while deploying the project. Please try again later.');
|
|
164
|
+
}
|
|
143
165
|
async function getProject(ctx) {
|
|
144
166
|
const { project } = await strapiInfoSave.retrieve();
|
|
145
167
|
if (!project) {
|
|
146
168
|
try {
|
|
147
|
-
|
|
169
|
+
const projectResponse = await action$2(ctx);
|
|
170
|
+
if (projectResponse) {
|
|
171
|
+
const { project: projectSaved } = await strapiInfoSave.retrieve();
|
|
172
|
+
return projectSaved;
|
|
173
|
+
}
|
|
148
174
|
} catch (e) {
|
|
149
175
|
ctx.logger.error('An error occurred while deploying the project. Please try again later.');
|
|
150
176
|
ctx.logger.debug(e);
|
|
@@ -196,7 +222,7 @@ var action = (async (ctx, opts)=>{
|
|
|
196
222
|
}
|
|
197
223
|
const project = await getProject(ctx);
|
|
198
224
|
if (!project) {
|
|
199
|
-
|
|
225
|
+
process.exit(1);
|
|
200
226
|
}
|
|
201
227
|
const cloudApiService = await cliApi.cloudApiFactory(ctx, token$1);
|
|
202
228
|
let projectData;
|
|
@@ -263,16 +289,23 @@ var action = (async (ctx, opts)=>{
|
|
|
263
289
|
}
|
|
264
290
|
}
|
|
265
291
|
}
|
|
266
|
-
const buildId = await upload(ctx, project, token$1, maxSize);
|
|
292
|
+
const buildId = await upload(ctx, project, cliConfig, token$1, maxSize);
|
|
267
293
|
if (!buildId) {
|
|
268
294
|
return;
|
|
269
295
|
}
|
|
296
|
+
let notifications = null;
|
|
270
297
|
try {
|
|
271
|
-
ctx.logger.log(
|
|
272
|
-
notificationService(`${api.apiConfig.apiBaseUrl}/notifications`, token$1, cliConfig);
|
|
273
|
-
await buildLogsService(`${api.apiConfig.apiBaseUrl}/
|
|
274
|
-
|
|
275
|
-
ctx.logger.log(
|
|
298
|
+
ctx.logger.log(`∷ Deploying project to ${chalk.cyan(project.targetEnvironment ?? `production`)} environment...`);
|
|
299
|
+
notifications = notificationService(`${api.apiConfig.apiBaseUrl}/${cliApi.VERSION}/notifications`, token$1, cliConfig);
|
|
300
|
+
await buildLogsService(`${api.apiConfig.apiBaseUrl}/${cliApi.VERSION}/logs/${buildId}`, token$1, cliConfig);
|
|
301
|
+
const dashboardUrlLine = chalk.cyan(' → ') + chalk.cyan.underline(`${api.apiConfig.dashboardBaseUrl}/projects/${project.name}/deployments`);
|
|
302
|
+
ctx.logger.log(boxen(`Project and deployment logs ready at:\n${dashboardUrlLine}`, {
|
|
303
|
+
padding: 1,
|
|
304
|
+
margin: 1,
|
|
305
|
+
borderStyle: 'round',
|
|
306
|
+
borderColor: 'white',
|
|
307
|
+
titleAlignment: 'left'
|
|
308
|
+
}));
|
|
276
309
|
} catch (e) {
|
|
277
310
|
ctx.logger.debug(e);
|
|
278
311
|
if (e instanceof Error) {
|
|
@@ -280,6 +313,10 @@ var action = (async (ctx, opts)=>{
|
|
|
280
313
|
} else {
|
|
281
314
|
ctx.logger.error('An error occurred while deploying the project. Please try again later.');
|
|
282
315
|
}
|
|
316
|
+
} finally{
|
|
317
|
+
if (notifications) {
|
|
318
|
+
notifications.close();
|
|
319
|
+
}
|
|
283
320
|
}
|
|
284
321
|
});
|
|
285
322
|
|