@strapi/cloud-cli 0.0.0-next.e5d4b412da0d932b61b2fa5012d16513fda6de04 → 0.0.0-next.e7ae51b01f78ddeaa09c4aa3e3882f466a5b3188
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/bin.d.ts.map +1 -1
- package/dist/bin.js +7 -2
- package/dist/bin.js.map +1 -1
- package/dist/bin.mjs +7 -2
- package/dist/bin.mjs.map +1 -1
- package/dist/create-growth-sso-trial/action.d.ts.map +1 -1
- package/dist/create-growth-sso-trial/action.js +3 -4
- package/dist/create-growth-sso-trial/action.js.map +1 -1
- package/dist/create-growth-sso-trial/action.mjs +3 -4
- package/dist/create-growth-sso-trial/action.mjs.map +1 -1
- package/dist/create-project/action.js.map +1 -1
- package/dist/create-project/action.mjs.map +1 -1
- package/dist/deploy-project/action.js.map +1 -1
- package/dist/deploy-project/action.mjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/login/action.d.ts.map +1 -1
- package/dist/login/action.js +5 -0
- package/dist/login/action.js.map +1 -1
- package/dist/login/action.mjs +5 -0
- package/dist/login/action.mjs.map +1 -1
- package/dist/logout/action.js.map +1 -1
- package/dist/logout/action.mjs.map +1 -1
- package/dist/package.json.js +6 -6
- package/dist/package.json.mjs +6 -6
- package/dist/services/build-logs.js.map +1 -1
- package/dist/services/build-logs.mjs.map +1 -1
- package/dist/services/cli-api.d.ts.map +1 -1
- package/dist/services/cli-api.js +5 -0
- package/dist/services/cli-api.js.map +1 -1
- package/dist/services/cli-api.mjs +5 -0
- package/dist/services/cli-api.mjs.map +1 -1
- package/dist/services/context.d.ts +4 -0
- package/dist/services/context.d.ts.map +1 -0
- package/dist/services/context.js +14 -0
- package/dist/services/context.js.map +1 -0
- package/dist/services/context.mjs +11 -0
- package/dist/services/context.mjs.map +1 -0
- package/dist/services/logger.js.map +1 -1
- package/dist/services/logger.mjs.map +1 -1
- package/dist/services/notification.js.map +1 -1
- package/dist/services/notification.mjs.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/analytics.js.map +1 -1
- package/dist/utils/analytics.mjs.map +1 -1
- package/dist/utils/error-message-factories.js.map +1 -1
- package/dist/utils/error-message-factories.mjs.map +1 -1
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/helpers.mjs.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/login/action.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAkB,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/login/action.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAkB,UAAU,EAAE,MAAM,UAAU,CAAC;AAO3D,wBAAsB,WAAW,CAAC,GAAG,EAAE,UAAU,oBAchD;AAED,wBAA8B,WAAW,CACvC,GAAG,EAAE,UAAU,EACf,EAAE,iBAAwB,EAAE,GAAE;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAO,GACjE,OAAO,CAAC,OAAO,CAAC,CAgLlB"}
|
package/dist/login/action.js
CHANGED
|
@@ -15,6 +15,7 @@ require('ora');
|
|
|
15
15
|
require('cli-progress');
|
|
16
16
|
var api = require('../config/api.js');
|
|
17
17
|
var analytics = require('../utils/analytics.js');
|
|
18
|
+
var context = require('../services/context.js');
|
|
18
19
|
|
|
19
20
|
const openModule = import('open');
|
|
20
21
|
async function promptLogin(ctx) {
|
|
@@ -42,6 +43,10 @@ async function loginAction(ctx, { showDashboardLink = true } = {}) {
|
|
|
42
43
|
try {
|
|
43
44
|
const userInfo = await cloudApiService.getUserInfo();
|
|
44
45
|
const { email } = userInfo.data.data;
|
|
46
|
+
context.setContext({
|
|
47
|
+
...ctx,
|
|
48
|
+
user: userInfo.data.data
|
|
49
|
+
});
|
|
45
50
|
if (email) {
|
|
46
51
|
logger.log(`You are already logged into your account (${email}).`);
|
|
47
52
|
} else {
|
package/dist/login/action.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sources":["../../src/login/action.ts"],"sourcesContent":["import axios, { AxiosResponse, AxiosError } from 'axios';\nimport chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport { tokenServiceFactory, cloudApiFactory } from '../services';\nimport type { CloudCliConfig, CLIContext } from '../types';\nimport { apiConfig } from '../config/api';\nimport { trackEvent } from '../utils/analytics';\n\nconst openModule = import('open');\n\nexport async function promptLogin(ctx: CLIContext) {\n const response = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'login',\n message: 'Would you like to login?',\n },\n ]);\n\n if (response.login) {\n const loginSuccessful = await loginAction(ctx);\n return loginSuccessful;\n }\n return false;\n}\n\nexport default async function loginAction(\n ctx: CLIContext,\n { showDashboardLink = true }: { showDashboardLink?: boolean } = {}\n): Promise<boolean> {\n const { logger, promptExperiment } = ctx;\n const tokenService = await tokenServiceFactory(ctx);\n const existingToken = await tokenService.retrieveToken();\n const cloudApiService = await cloudApiFactory(ctx, existingToken || undefined);\n\n if (existingToken) {\n const isTokenValid = await tokenService.isTokenValid(existingToken);\n if (isTokenValid) {\n try {\n const userInfo = await cloudApiService.getUserInfo();\n const { email } = userInfo.data.data;\n if (email) {\n logger.log(`You are already logged into your account (${email}).`);\n } else {\n logger.log('You are already logged in.');\n }\n if (showDashboardLink) {\n logger.log(\n 'To access your dashboard, please copy and paste the following URL into your web browser:'\n );\n logger.log(chalk.underline(`${apiConfig.dashboardBaseUrl}/projects`));\n }\n return true;\n } catch (e) {\n logger.debug('Failed to fetch user info', e);\n }\n }\n }\n\n let cliConfig: CloudCliConfig;\n try {\n logger.info('🔌 Connecting...');\n const config = await cloudApiService.config();\n cliConfig = config.data;\n } catch (e: unknown) {\n logger.error('🥲 Oops! Something went wrong while logging you in. Please try again.');\n logger.debug(e);\n return false;\n }\n await trackEvent(ctx, cloudApiService, 'willLoginAttempt', {\n ...(promptExperiment && { promptExperiment }),\n });\n\n logger.debug('🔐 Creating device authentication request...', {\n client_id: cliConfig.clientId,\n scope: cliConfig.scope,\n audience: cliConfig.audience,\n });\n const deviceAuthResponse = (await axios\n .post(cliConfig.deviceCodeAuthUrl, {\n client_id: cliConfig.clientId,\n scope: cliConfig.scope,\n audience: cliConfig.audience,\n })\n .catch((e: AxiosError) => {\n logger.error('There was an issue with the authentication process. Please try again.');\n if (e.message) {\n logger.debug(e.message, e);\n } else {\n logger.debug(e);\n }\n })) as AxiosResponse;\n\n openModule.then((open) => {\n open.default(deviceAuthResponse.data.verification_uri_complete).catch((e: Error) => {\n logger.error('We encountered an issue opening the browser. Please try again later.');\n logger.debug(e.message, e);\n });\n });\n\n logger.log('If a browser tab does not open automatically, please follow the next steps:');\n logger.log(\n `1. Open this url in your device: ${deviceAuthResponse.data.verification_uri_complete}`\n );\n logger.log(\n `2. Enter the following code: ${deviceAuthResponse.data.user_code} and confirm to login.\\n`\n );\n\n const tokenPayload = {\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n device_code: deviceAuthResponse.data.device_code,\n client_id: cliConfig.clientId,\n };\n\n let isAuthenticated = false;\n\n const authenticate = async () => {\n const spinner = logger.spinner('Waiting for authentication');\n spinner.start();\n const spinnerFail = () => spinner.fail('Authentication failed!');\n\n while (!isAuthenticated) {\n try {\n const tokenResponse = await axios.post(cliConfig.tokenUrl, tokenPayload);\n const authTokenData = tokenResponse.data;\n\n if (tokenResponse.status === 200) {\n // Token validation\n try {\n logger.debug('🔐 Validating token...');\n await tokenService.validateToken(authTokenData.id_token, cliConfig.jwksUrl);\n logger.debug('🔐 Token validation successful!');\n } catch (e: any) {\n logger.debug(e);\n spinnerFail();\n throw new Error('Unable to proceed: Token validation failed');\n }\n\n logger.debug('🔍 Fetching user information...');\n const cloudApiServiceWithToken = await cloudApiFactory(ctx, authTokenData.access_token);\n // Call to get user info to create the user in DB if not exists\n await cloudApiServiceWithToken.getUserInfo();\n logger.debug('🔍 User information fetched successfully!');\n\n try {\n logger.debug('📝 Saving login information...');\n await tokenService.saveToken(authTokenData.access_token);\n logger.debug('📝 Login information saved successfully!');\n isAuthenticated = true;\n } catch (e) {\n logger.error(\n 'There was a problem saving your login information. Please try logging in again.'\n );\n logger.debug(e);\n spinnerFail();\n return false;\n }\n }\n } catch (e: any) {\n if (e.message === 'Unable to proceed: Token validation failed') {\n logger.error(\n 'There seems to be a problem with your login information. Please try logging in again.'\n );\n spinnerFail();\n await trackEvent(ctx, cloudApiService, 'didNotLogin', {\n loginMethod: 'cli',\n ...(promptExperiment && { promptExperiment }),\n });\n return false;\n }\n if (\n e.response?.data.error &&\n !['authorization_pending', 'slow_down'].includes(e!.response.data.error)\n ) {\n logger.debug(e);\n spinnerFail();\n await trackEvent(ctx, cloudApiService, 'didNotLogin', {\n loginMethod: 'cli',\n ...(promptExperiment && { promptExperiment }),\n });\n return false;\n }\n // Await interval before retrying\n await new Promise((resolve) => {\n setTimeout(resolve, deviceAuthResponse.data.interval * 1000);\n });\n }\n }\n spinner.succeed('Authentication successful!');\n if (showDashboardLink) {\n logger.log('You are now logged into Strapi Cloud.');\n logger.log(\n 'To access your dashboard, please copy and paste the following URL into your web browser:'\n );\n logger.log(chalk.underline(`${apiConfig.dashboardBaseUrl}/projects`));\n }\n await trackEvent(ctx, cloudApiService, 'didLogin', {\n loginMethod: 'cli',\n ...(promptExperiment && { promptExperiment }),\n });\n };\n\n await authenticate();\n return isAuthenticated;\n}\n"],"names":["openModule","promptLogin","ctx","response","inquirer","prompt","type","name","message","login","loginSuccessful","loginAction","showDashboardLink","logger","promptExperiment","tokenService","tokenServiceFactory","existingToken","retrieveToken","cloudApiService","cloudApiFactory","undefined","isTokenValid","userInfo","getUserInfo","email","data","log","chalk","underline","apiConfig","dashboardBaseUrl","e","debug","cliConfig","info","config","error","trackEvent","client_id","clientId","scope","audience","deviceAuthResponse","axios","post","deviceCodeAuthUrl","catch","then","open","default","verification_uri_complete","user_code","tokenPayload","grant_type","device_code","isAuthenticated","authenticate","spinner","start","spinnerFail","fail","tokenResponse","tokenUrl","authTokenData","status","validateToken","id_token","jwksUrl","Error","cloudApiServiceWithToken","access_token","saveToken","loginMethod","includes","Promise","resolve","setTimeout","interval","succeed"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"action.js","sources":["../../src/login/action.ts"],"sourcesContent":["import axios, { AxiosResponse, AxiosError } from 'axios';\nimport chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport { tokenServiceFactory, cloudApiFactory } from '../services';\nimport type { CloudCliConfig, CLIContext } from '../types';\nimport { apiConfig } from '../config/api';\nimport { trackEvent } from '../utils/analytics';\nimport { setContext } from '../services/context';\n\nconst openModule = import('open');\n\nexport async function promptLogin(ctx: CLIContext) {\n const response = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'login',\n message: 'Would you like to login?',\n },\n ]);\n\n if (response.login) {\n const loginSuccessful = await loginAction(ctx);\n return loginSuccessful;\n }\n return false;\n}\n\nexport default async function loginAction(\n ctx: CLIContext,\n { showDashboardLink = true }: { showDashboardLink?: boolean } = {}\n): Promise<boolean> {\n const { logger, promptExperiment } = ctx;\n const tokenService = await tokenServiceFactory(ctx);\n const existingToken = await tokenService.retrieveToken();\n const cloudApiService = await cloudApiFactory(ctx, existingToken || undefined);\n\n if (existingToken) {\n const isTokenValid = await tokenService.isTokenValid(existingToken);\n if (isTokenValid) {\n try {\n const userInfo = await cloudApiService.getUserInfo();\n const { email } = userInfo.data.data;\n setContext({ ...ctx, user: userInfo.data.data });\n if (email) {\n logger.log(`You are already logged into your account (${email}).`);\n } else {\n logger.log('You are already logged in.');\n }\n if (showDashboardLink) {\n logger.log(\n 'To access your dashboard, please copy and paste the following URL into your web browser:'\n );\n logger.log(chalk.underline(`${apiConfig.dashboardBaseUrl}/projects`));\n }\n return true;\n } catch (e) {\n logger.debug('Failed to fetch user info', e);\n }\n }\n }\n\n let cliConfig: CloudCliConfig;\n try {\n logger.info('🔌 Connecting...');\n const config = await cloudApiService.config();\n cliConfig = config.data;\n } catch (e: unknown) {\n logger.error('🥲 Oops! Something went wrong while logging you in. Please try again.');\n logger.debug(e);\n return false;\n }\n await trackEvent(ctx, cloudApiService, 'willLoginAttempt', {\n ...(promptExperiment && { promptExperiment }),\n });\n\n logger.debug('🔐 Creating device authentication request...', {\n client_id: cliConfig.clientId,\n scope: cliConfig.scope,\n audience: cliConfig.audience,\n });\n const deviceAuthResponse = (await axios\n .post(cliConfig.deviceCodeAuthUrl, {\n client_id: cliConfig.clientId,\n scope: cliConfig.scope,\n audience: cliConfig.audience,\n })\n .catch((e: AxiosError) => {\n logger.error('There was an issue with the authentication process. Please try again.');\n if (e.message) {\n logger.debug(e.message, e);\n } else {\n logger.debug(e);\n }\n })) as AxiosResponse;\n\n openModule.then((open) => {\n open.default(deviceAuthResponse.data.verification_uri_complete).catch((e: Error) => {\n logger.error('We encountered an issue opening the browser. Please try again later.');\n logger.debug(e.message, e);\n });\n });\n\n logger.log('If a browser tab does not open automatically, please follow the next steps:');\n logger.log(\n `1. Open this url in your device: ${deviceAuthResponse.data.verification_uri_complete}`\n );\n logger.log(\n `2. Enter the following code: ${deviceAuthResponse.data.user_code} and confirm to login.\\n`\n );\n\n const tokenPayload = {\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n device_code: deviceAuthResponse.data.device_code,\n client_id: cliConfig.clientId,\n };\n\n let isAuthenticated = false;\n\n const authenticate = async () => {\n const spinner = logger.spinner('Waiting for authentication');\n spinner.start();\n const spinnerFail = () => spinner.fail('Authentication failed!');\n\n while (!isAuthenticated) {\n try {\n const tokenResponse = await axios.post(cliConfig.tokenUrl, tokenPayload);\n const authTokenData = tokenResponse.data;\n\n if (tokenResponse.status === 200) {\n // Token validation\n try {\n logger.debug('🔐 Validating token...');\n await tokenService.validateToken(authTokenData.id_token, cliConfig.jwksUrl);\n logger.debug('🔐 Token validation successful!');\n } catch (e: any) {\n logger.debug(e);\n spinnerFail();\n throw new Error('Unable to proceed: Token validation failed');\n }\n\n logger.debug('🔍 Fetching user information...');\n const cloudApiServiceWithToken = await cloudApiFactory(ctx, authTokenData.access_token);\n // Call to get user info to create the user in DB if not exists\n await cloudApiServiceWithToken.getUserInfo();\n logger.debug('🔍 User information fetched successfully!');\n\n try {\n logger.debug('📝 Saving login information...');\n await tokenService.saveToken(authTokenData.access_token);\n logger.debug('📝 Login information saved successfully!');\n isAuthenticated = true;\n } catch (e) {\n logger.error(\n 'There was a problem saving your login information. Please try logging in again.'\n );\n logger.debug(e);\n spinnerFail();\n return false;\n }\n }\n } catch (e: any) {\n if (e.message === 'Unable to proceed: Token validation failed') {\n logger.error(\n 'There seems to be a problem with your login information. Please try logging in again.'\n );\n spinnerFail();\n await trackEvent(ctx, cloudApiService, 'didNotLogin', {\n loginMethod: 'cli',\n ...(promptExperiment && { promptExperiment }),\n });\n return false;\n }\n if (\n e.response?.data.error &&\n !['authorization_pending', 'slow_down'].includes(e!.response.data.error)\n ) {\n logger.debug(e);\n spinnerFail();\n await trackEvent(ctx, cloudApiService, 'didNotLogin', {\n loginMethod: 'cli',\n ...(promptExperiment && { promptExperiment }),\n });\n return false;\n }\n // Await interval before retrying\n await new Promise((resolve) => {\n setTimeout(resolve, deviceAuthResponse.data.interval * 1000);\n });\n }\n }\n spinner.succeed('Authentication successful!');\n if (showDashboardLink) {\n logger.log('You are now logged into Strapi Cloud.');\n logger.log(\n 'To access your dashboard, please copy and paste the following URL into your web browser:'\n );\n logger.log(chalk.underline(`${apiConfig.dashboardBaseUrl}/projects`));\n }\n await trackEvent(ctx, cloudApiService, 'didLogin', {\n loginMethod: 'cli',\n ...(promptExperiment && { promptExperiment }),\n });\n };\n\n await authenticate();\n return isAuthenticated;\n}\n"],"names":["openModule","promptLogin","ctx","response","inquirer","prompt","type","name","message","login","loginSuccessful","loginAction","showDashboardLink","logger","promptExperiment","tokenService","tokenServiceFactory","existingToken","retrieveToken","cloudApiService","cloudApiFactory","undefined","isTokenValid","userInfo","getUserInfo","email","data","setContext","user","log","chalk","underline","apiConfig","dashboardBaseUrl","e","debug","cliConfig","info","config","error","trackEvent","client_id","clientId","scope","audience","deviceAuthResponse","axios","post","deviceCodeAuthUrl","catch","then","open","default","verification_uri_complete","user_code","tokenPayload","grant_type","device_code","isAuthenticated","authenticate","spinner","start","spinnerFail","fail","tokenResponse","tokenUrl","authTokenData","status","validateToken","id_token","jwksUrl","Error","cloudApiServiceWithToken","access_token","saveToken","loginMethod","includes","Promise","resolve","setTimeout","interval","succeed"],"mappings":"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"}
|
package/dist/login/action.mjs
CHANGED
|
@@ -11,6 +11,7 @@ import 'ora';
|
|
|
11
11
|
import 'cli-progress';
|
|
12
12
|
import { apiConfig } from '../config/api.mjs';
|
|
13
13
|
import { trackEvent } from '../utils/analytics.mjs';
|
|
14
|
+
import { setContext } from '../services/context.mjs';
|
|
14
15
|
|
|
15
16
|
const openModule = import('open');
|
|
16
17
|
async function promptLogin(ctx) {
|
|
@@ -38,6 +39,10 @@ async function loginAction(ctx, { showDashboardLink = true } = {}) {
|
|
|
38
39
|
try {
|
|
39
40
|
const userInfo = await cloudApiService.getUserInfo();
|
|
40
41
|
const { email } = userInfo.data.data;
|
|
42
|
+
setContext({
|
|
43
|
+
...ctx,
|
|
44
|
+
user: userInfo.data.data
|
|
45
|
+
});
|
|
41
46
|
if (email) {
|
|
42
47
|
logger.log(`You are already logged into your account (${email}).`);
|
|
43
48
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.mjs","sources":["../../src/login/action.ts"],"sourcesContent":["import axios, { AxiosResponse, AxiosError } from 'axios';\nimport chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport { tokenServiceFactory, cloudApiFactory } from '../services';\nimport type { CloudCliConfig, CLIContext } from '../types';\nimport { apiConfig } from '../config/api';\nimport { trackEvent } from '../utils/analytics';\n\nconst openModule = import('open');\n\nexport async function promptLogin(ctx: CLIContext) {\n const response = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'login',\n message: 'Would you like to login?',\n },\n ]);\n\n if (response.login) {\n const loginSuccessful = await loginAction(ctx);\n return loginSuccessful;\n }\n return false;\n}\n\nexport default async function loginAction(\n ctx: CLIContext,\n { showDashboardLink = true }: { showDashboardLink?: boolean } = {}\n): Promise<boolean> {\n const { logger, promptExperiment } = ctx;\n const tokenService = await tokenServiceFactory(ctx);\n const existingToken = await tokenService.retrieveToken();\n const cloudApiService = await cloudApiFactory(ctx, existingToken || undefined);\n\n if (existingToken) {\n const isTokenValid = await tokenService.isTokenValid(existingToken);\n if (isTokenValid) {\n try {\n const userInfo = await cloudApiService.getUserInfo();\n const { email } = userInfo.data.data;\n if (email) {\n logger.log(`You are already logged into your account (${email}).`);\n } else {\n logger.log('You are already logged in.');\n }\n if (showDashboardLink) {\n logger.log(\n 'To access your dashboard, please copy and paste the following URL into your web browser:'\n );\n logger.log(chalk.underline(`${apiConfig.dashboardBaseUrl}/projects`));\n }\n return true;\n } catch (e) {\n logger.debug('Failed to fetch user info', e);\n }\n }\n }\n\n let cliConfig: CloudCliConfig;\n try {\n logger.info('🔌 Connecting...');\n const config = await cloudApiService.config();\n cliConfig = config.data;\n } catch (e: unknown) {\n logger.error('🥲 Oops! Something went wrong while logging you in. Please try again.');\n logger.debug(e);\n return false;\n }\n await trackEvent(ctx, cloudApiService, 'willLoginAttempt', {\n ...(promptExperiment && { promptExperiment }),\n });\n\n logger.debug('🔐 Creating device authentication request...', {\n client_id: cliConfig.clientId,\n scope: cliConfig.scope,\n audience: cliConfig.audience,\n });\n const deviceAuthResponse = (await axios\n .post(cliConfig.deviceCodeAuthUrl, {\n client_id: cliConfig.clientId,\n scope: cliConfig.scope,\n audience: cliConfig.audience,\n })\n .catch((e: AxiosError) => {\n logger.error('There was an issue with the authentication process. Please try again.');\n if (e.message) {\n logger.debug(e.message, e);\n } else {\n logger.debug(e);\n }\n })) as AxiosResponse;\n\n openModule.then((open) => {\n open.default(deviceAuthResponse.data.verification_uri_complete).catch((e: Error) => {\n logger.error('We encountered an issue opening the browser. Please try again later.');\n logger.debug(e.message, e);\n });\n });\n\n logger.log('If a browser tab does not open automatically, please follow the next steps:');\n logger.log(\n `1. Open this url in your device: ${deviceAuthResponse.data.verification_uri_complete}`\n );\n logger.log(\n `2. Enter the following code: ${deviceAuthResponse.data.user_code} and confirm to login.\\n`\n );\n\n const tokenPayload = {\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n device_code: deviceAuthResponse.data.device_code,\n client_id: cliConfig.clientId,\n };\n\n let isAuthenticated = false;\n\n const authenticate = async () => {\n const spinner = logger.spinner('Waiting for authentication');\n spinner.start();\n const spinnerFail = () => spinner.fail('Authentication failed!');\n\n while (!isAuthenticated) {\n try {\n const tokenResponse = await axios.post(cliConfig.tokenUrl, tokenPayload);\n const authTokenData = tokenResponse.data;\n\n if (tokenResponse.status === 200) {\n // Token validation\n try {\n logger.debug('🔐 Validating token...');\n await tokenService.validateToken(authTokenData.id_token, cliConfig.jwksUrl);\n logger.debug('🔐 Token validation successful!');\n } catch (e: any) {\n logger.debug(e);\n spinnerFail();\n throw new Error('Unable to proceed: Token validation failed');\n }\n\n logger.debug('🔍 Fetching user information...');\n const cloudApiServiceWithToken = await cloudApiFactory(ctx, authTokenData.access_token);\n // Call to get user info to create the user in DB if not exists\n await cloudApiServiceWithToken.getUserInfo();\n logger.debug('🔍 User information fetched successfully!');\n\n try {\n logger.debug('📝 Saving login information...');\n await tokenService.saveToken(authTokenData.access_token);\n logger.debug('📝 Login information saved successfully!');\n isAuthenticated = true;\n } catch (e) {\n logger.error(\n 'There was a problem saving your login information. Please try logging in again.'\n );\n logger.debug(e);\n spinnerFail();\n return false;\n }\n }\n } catch (e: any) {\n if (e.message === 'Unable to proceed: Token validation failed') {\n logger.error(\n 'There seems to be a problem with your login information. Please try logging in again.'\n );\n spinnerFail();\n await trackEvent(ctx, cloudApiService, 'didNotLogin', {\n loginMethod: 'cli',\n ...(promptExperiment && { promptExperiment }),\n });\n return false;\n }\n if (\n e.response?.data.error &&\n !['authorization_pending', 'slow_down'].includes(e!.response.data.error)\n ) {\n logger.debug(e);\n spinnerFail();\n await trackEvent(ctx, cloudApiService, 'didNotLogin', {\n loginMethod: 'cli',\n ...(promptExperiment && { promptExperiment }),\n });\n return false;\n }\n // Await interval before retrying\n await new Promise((resolve) => {\n setTimeout(resolve, deviceAuthResponse.data.interval * 1000);\n });\n }\n }\n spinner.succeed('Authentication successful!');\n if (showDashboardLink) {\n logger.log('You are now logged into Strapi Cloud.');\n logger.log(\n 'To access your dashboard, please copy and paste the following URL into your web browser:'\n );\n logger.log(chalk.underline(`${apiConfig.dashboardBaseUrl}/projects`));\n }\n await trackEvent(ctx, cloudApiService, 'didLogin', {\n loginMethod: 'cli',\n ...(promptExperiment && { promptExperiment }),\n });\n };\n\n await authenticate();\n return isAuthenticated;\n}\n"],"names":["openModule","promptLogin","ctx","response","inquirer","prompt","type","name","message","login","loginSuccessful","loginAction","showDashboardLink","logger","promptExperiment","tokenService","tokenServiceFactory","existingToken","retrieveToken","cloudApiService","cloudApiFactory","undefined","isTokenValid","userInfo","getUserInfo","email","data","log","chalk","underline","apiConfig","dashboardBaseUrl","e","debug","cliConfig","info","config","error","trackEvent","client_id","clientId","scope","audience","deviceAuthResponse","axios","post","deviceCodeAuthUrl","catch","then","open","default","verification_uri_complete","user_code","tokenPayload","grant_type","device_code","isAuthenticated","authenticate","spinner","start","spinnerFail","fail","tokenResponse","tokenUrl","authTokenData","status","validateToken","id_token","jwksUrl","Error","cloudApiServiceWithToken","access_token","saveToken","loginMethod","includes","Promise","resolve","setTimeout","interval","succeed"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"action.mjs","sources":["../../src/login/action.ts"],"sourcesContent":["import axios, { AxiosResponse, AxiosError } from 'axios';\nimport chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport { tokenServiceFactory, cloudApiFactory } from '../services';\nimport type { CloudCliConfig, CLIContext } from '../types';\nimport { apiConfig } from '../config/api';\nimport { trackEvent } from '../utils/analytics';\nimport { setContext } from '../services/context';\n\nconst openModule = import('open');\n\nexport async function promptLogin(ctx: CLIContext) {\n const response = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'login',\n message: 'Would you like to login?',\n },\n ]);\n\n if (response.login) {\n const loginSuccessful = await loginAction(ctx);\n return loginSuccessful;\n }\n return false;\n}\n\nexport default async function loginAction(\n ctx: CLIContext,\n { showDashboardLink = true }: { showDashboardLink?: boolean } = {}\n): Promise<boolean> {\n const { logger, promptExperiment } = ctx;\n const tokenService = await tokenServiceFactory(ctx);\n const existingToken = await tokenService.retrieveToken();\n const cloudApiService = await cloudApiFactory(ctx, existingToken || undefined);\n\n if (existingToken) {\n const isTokenValid = await tokenService.isTokenValid(existingToken);\n if (isTokenValid) {\n try {\n const userInfo = await cloudApiService.getUserInfo();\n const { email } = userInfo.data.data;\n setContext({ ...ctx, user: userInfo.data.data });\n if (email) {\n logger.log(`You are already logged into your account (${email}).`);\n } else {\n logger.log('You are already logged in.');\n }\n if (showDashboardLink) {\n logger.log(\n 'To access your dashboard, please copy and paste the following URL into your web browser:'\n );\n logger.log(chalk.underline(`${apiConfig.dashboardBaseUrl}/projects`));\n }\n return true;\n } catch (e) {\n logger.debug('Failed to fetch user info', e);\n }\n }\n }\n\n let cliConfig: CloudCliConfig;\n try {\n logger.info('🔌 Connecting...');\n const config = await cloudApiService.config();\n cliConfig = config.data;\n } catch (e: unknown) {\n logger.error('🥲 Oops! Something went wrong while logging you in. Please try again.');\n logger.debug(e);\n return false;\n }\n await trackEvent(ctx, cloudApiService, 'willLoginAttempt', {\n ...(promptExperiment && { promptExperiment }),\n });\n\n logger.debug('🔐 Creating device authentication request...', {\n client_id: cliConfig.clientId,\n scope: cliConfig.scope,\n audience: cliConfig.audience,\n });\n const deviceAuthResponse = (await axios\n .post(cliConfig.deviceCodeAuthUrl, {\n client_id: cliConfig.clientId,\n scope: cliConfig.scope,\n audience: cliConfig.audience,\n })\n .catch((e: AxiosError) => {\n logger.error('There was an issue with the authentication process. Please try again.');\n if (e.message) {\n logger.debug(e.message, e);\n } else {\n logger.debug(e);\n }\n })) as AxiosResponse;\n\n openModule.then((open) => {\n open.default(deviceAuthResponse.data.verification_uri_complete).catch((e: Error) => {\n logger.error('We encountered an issue opening the browser. Please try again later.');\n logger.debug(e.message, e);\n });\n });\n\n logger.log('If a browser tab does not open automatically, please follow the next steps:');\n logger.log(\n `1. Open this url in your device: ${deviceAuthResponse.data.verification_uri_complete}`\n );\n logger.log(\n `2. Enter the following code: ${deviceAuthResponse.data.user_code} and confirm to login.\\n`\n );\n\n const tokenPayload = {\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n device_code: deviceAuthResponse.data.device_code,\n client_id: cliConfig.clientId,\n };\n\n let isAuthenticated = false;\n\n const authenticate = async () => {\n const spinner = logger.spinner('Waiting for authentication');\n spinner.start();\n const spinnerFail = () => spinner.fail('Authentication failed!');\n\n while (!isAuthenticated) {\n try {\n const tokenResponse = await axios.post(cliConfig.tokenUrl, tokenPayload);\n const authTokenData = tokenResponse.data;\n\n if (tokenResponse.status === 200) {\n // Token validation\n try {\n logger.debug('🔐 Validating token...');\n await tokenService.validateToken(authTokenData.id_token, cliConfig.jwksUrl);\n logger.debug('🔐 Token validation successful!');\n } catch (e: any) {\n logger.debug(e);\n spinnerFail();\n throw new Error('Unable to proceed: Token validation failed');\n }\n\n logger.debug('🔍 Fetching user information...');\n const cloudApiServiceWithToken = await cloudApiFactory(ctx, authTokenData.access_token);\n // Call to get user info to create the user in DB if not exists\n await cloudApiServiceWithToken.getUserInfo();\n logger.debug('🔍 User information fetched successfully!');\n\n try {\n logger.debug('📝 Saving login information...');\n await tokenService.saveToken(authTokenData.access_token);\n logger.debug('📝 Login information saved successfully!');\n isAuthenticated = true;\n } catch (e) {\n logger.error(\n 'There was a problem saving your login information. Please try logging in again.'\n );\n logger.debug(e);\n spinnerFail();\n return false;\n }\n }\n } catch (e: any) {\n if (e.message === 'Unable to proceed: Token validation failed') {\n logger.error(\n 'There seems to be a problem with your login information. Please try logging in again.'\n );\n spinnerFail();\n await trackEvent(ctx, cloudApiService, 'didNotLogin', {\n loginMethod: 'cli',\n ...(promptExperiment && { promptExperiment }),\n });\n return false;\n }\n if (\n e.response?.data.error &&\n !['authorization_pending', 'slow_down'].includes(e!.response.data.error)\n ) {\n logger.debug(e);\n spinnerFail();\n await trackEvent(ctx, cloudApiService, 'didNotLogin', {\n loginMethod: 'cli',\n ...(promptExperiment && { promptExperiment }),\n });\n return false;\n }\n // Await interval before retrying\n await new Promise((resolve) => {\n setTimeout(resolve, deviceAuthResponse.data.interval * 1000);\n });\n }\n }\n spinner.succeed('Authentication successful!');\n if (showDashboardLink) {\n logger.log('You are now logged into Strapi Cloud.');\n logger.log(\n 'To access your dashboard, please copy and paste the following URL into your web browser:'\n );\n logger.log(chalk.underline(`${apiConfig.dashboardBaseUrl}/projects`));\n }\n await trackEvent(ctx, cloudApiService, 'didLogin', {\n loginMethod: 'cli',\n ...(promptExperiment && { promptExperiment }),\n });\n };\n\n await authenticate();\n return isAuthenticated;\n}\n"],"names":["openModule","promptLogin","ctx","response","inquirer","prompt","type","name","message","login","loginSuccessful","loginAction","showDashboardLink","logger","promptExperiment","tokenService","tokenServiceFactory","existingToken","retrieveToken","cloudApiService","cloudApiFactory","undefined","isTokenValid","userInfo","getUserInfo","email","data","setContext","user","log","chalk","underline","apiConfig","dashboardBaseUrl","e","debug","cliConfig","info","config","error","trackEvent","client_id","clientId","scope","audience","deviceAuthResponse","axios","post","deviceCodeAuthUrl","catch","then","open","default","verification_uri_complete","user_code","tokenPayload","grant_type","device_code","isAuthenticated","authenticate","spinner","start","spinnerFail","fail","tokenResponse","tokenUrl","authTokenData","status","validateToken","id_token","jwksUrl","Error","cloudApiServiceWithToken","access_token","saveToken","loginMethod","includes","Promise","resolve","setTimeout","interval","succeed"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sources":["../../src/logout/action.ts"],"sourcesContent":["import type { CLIContext } from '../types';\nimport { tokenServiceFactory, cloudApiFactory } from '../services';\nimport { trackEvent } from '../utils/analytics';\n\nconst openModule = import('open');\n\nexport default async (ctx: CLIContext) => {\n const { logger } = ctx;\n const { retrieveToken, eraseToken } = await tokenServiceFactory(ctx);\n\n const token = await retrieveToken();\n if (!token) {\n logger.log(\"You're already logged out.\");\n return;\n }\n const cloudApiService = await cloudApiFactory(ctx, token);\n const config = await cloudApiService.config();\n const cliConfig = config.data;\n\n try {\n await eraseToken();\n\n openModule.then((open) => {\n open\n .default(\n `${cliConfig.baseUrl}/oidc/logout?client_id=${encodeURIComponent(\n cliConfig.clientId\n )}&logout_hint=${encodeURIComponent(token)}\n `\n )\n .catch((e: Error) => {\n // Failing to open the logout URL is not a critical error, so we just log it\n logger.debug(e.message, e);\n });\n });\n\n logger.log(\n '🔌 You have been logged out from the CLI. If you are on a shared computer, please make sure to log out from the Strapi Cloud Dashboard as well.'\n );\n } catch (e) {\n logger.error('🥲 Oops! Something went wrong while logging you out. Please try again.');\n logger.debug(e);\n }\n await trackEvent(ctx, cloudApiService, 'didLogout', { loginMethod: 'cli' });\n};\n"],"names":["openModule","ctx","logger","retrieveToken","eraseToken","tokenServiceFactory","token","log","cloudApiService","cloudApiFactory","config","cliConfig","data","then","open","default","baseUrl","encodeURIComponent","clientId","catch","e","debug","message","error","trackEvent","loginMethod"],"mappings":";;;;;;;;;;;;;AAIA,MAAMA,UAAAA,GAAa,OAAO,MAAA,CAAA;AAE1B,aAAe,CAAA,OAAOC,GAAAA,GAAAA;IACpB,MAAM,EAAEC,MAAM,EAAE,GAAGD,GAAAA;AACnB,IAAA,MAAM,EAAEE,aAAa,EAAEC,UAAU,EAAE,GAAG,MAAMC,yBAAoBJ,CAAAA,GAAAA,CAAAA;AAEhE,IAAA,MAAMK,UAAQ,MAAMH,aAAAA,EAAAA;AACpB,IAAA,IAAI,CAACG,OAAO,EAAA;AACVJ,QAAAA,MAAAA,CAAOK,GAAG,CAAC,4BAAA,CAAA;AACX,QAAA;AACF;IACA,MAAMC,eAAAA,GAAkB,MAAMC,sBAAAA,CAAgBR,GAAKK,EAAAA,OAAAA,CAAAA;IACnD,MAAMI,MAAAA,GAAS,MAAMF,eAAAA,CAAgBE,MAAM,EAAA;IAC3C,MAAMC,SAAAA,GAAYD,OAAOE,IAAI;IAE7B,IAAI;QACF,MAAMR,UAAAA,EAAAA;QAENJ,UAAWa,CAAAA,IAAI,CAAC,CAACC,IAAAA,GAAAA;AACfA,YAAAA,IAAAA,CACGC,OAAO,CACN,
|
|
1
|
+
{"version":3,"file":"action.js","sources":["../../src/logout/action.ts"],"sourcesContent":["import type { CLIContext } from '../types';\nimport { tokenServiceFactory, cloudApiFactory } from '../services';\nimport { trackEvent } from '../utils/analytics';\n\nconst openModule = import('open');\n\nexport default async (ctx: CLIContext) => {\n const { logger } = ctx;\n const { retrieveToken, eraseToken } = await tokenServiceFactory(ctx);\n\n const token = await retrieveToken();\n if (!token) {\n logger.log(\"You're already logged out.\");\n return;\n }\n const cloudApiService = await cloudApiFactory(ctx, token);\n const config = await cloudApiService.config();\n const cliConfig = config.data;\n\n try {\n await eraseToken();\n\n openModule.then((open) => {\n open\n .default(\n `${cliConfig.baseUrl}/oidc/logout?client_id=${encodeURIComponent(\n cliConfig.clientId\n )}&logout_hint=${encodeURIComponent(token)}\n `\n )\n .catch((e: Error) => {\n // Failing to open the logout URL is not a critical error, so we just log it\n logger.debug(e.message, e);\n });\n });\n\n logger.log(\n '🔌 You have been logged out from the CLI. If you are on a shared computer, please make sure to log out from the Strapi Cloud Dashboard as well.'\n );\n } catch (e) {\n logger.error('🥲 Oops! Something went wrong while logging you out. Please try again.');\n logger.debug(e);\n }\n await trackEvent(ctx, cloudApiService, 'didLogout', { loginMethod: 'cli' });\n};\n"],"names":["openModule","ctx","logger","retrieveToken","eraseToken","tokenServiceFactory","token","log","cloudApiService","cloudApiFactory","config","cliConfig","data","then","open","default","baseUrl","encodeURIComponent","clientId","catch","e","debug","message","error","trackEvent","loginMethod"],"mappings":";;;;;;;;;;;;;AAIA,MAAMA,UAAAA,GAAa,OAAO,MAAA,CAAA;AAE1B,aAAe,CAAA,OAAOC,GAAAA,GAAAA;IACpB,MAAM,EAAEC,MAAM,EAAE,GAAGD,GAAAA;AACnB,IAAA,MAAM,EAAEE,aAAa,EAAEC,UAAU,EAAE,GAAG,MAAMC,yBAAoBJ,CAAAA,GAAAA,CAAAA;AAEhE,IAAA,MAAMK,UAAQ,MAAMH,aAAAA,EAAAA;AACpB,IAAA,IAAI,CAACG,OAAO,EAAA;AACVJ,QAAAA,MAAAA,CAAOK,GAAG,CAAC,4BAAA,CAAA;AACX,QAAA;AACF;IACA,MAAMC,eAAAA,GAAkB,MAAMC,sBAAAA,CAAgBR,GAAKK,EAAAA,OAAAA,CAAAA;IACnD,MAAMI,MAAAA,GAAS,MAAMF,eAAAA,CAAgBE,MAAM,EAAA;IAC3C,MAAMC,SAAAA,GAAYD,OAAOE,IAAI;IAE7B,IAAI;QACF,MAAMR,UAAAA,EAAAA;QAENJ,UAAWa,CAAAA,IAAI,CAAC,CAACC,IAAAA,GAAAA;AACfA,YAAAA,IAAAA,CACGC,OAAO,CACN,CAAGJ,EAAAA,SAAAA,CAAUK,OAAO,CAAC,uBAAuB,EAAEC,kBAAAA,CAC5CN,UAAUO,QAAQ,CAAA,CAClB,aAAa,EAAED,mBAAmBX,OAAO,CAAA;UAC3C,CAAC,CAAA,CAEFa,KAAK,CAAC,CAACC,CAAAA,GAAAA;;AAENlB,gBAAAA,MAAAA,CAAOmB,KAAK,CAACD,CAAEE,CAAAA,OAAO,EAAEF,CAAAA,CAAAA;AAC1B,aAAA,CAAA;AACJ,SAAA,CAAA;AAEAlB,QAAAA,MAAAA,CAAOK,GAAG,CACR,iJAAA,CAAA;AAEJ,KAAA,CAAE,OAAOa,CAAG,EAAA;AACVlB,QAAAA,MAAAA,CAAOqB,KAAK,CAAC,wEAAA,CAAA;AACbrB,QAAAA,MAAAA,CAAOmB,KAAK,CAACD,CAAAA,CAAAA;AACf;IACA,MAAMI,oBAAAA,CAAWvB,GAAKO,EAAAA,eAAAA,EAAiB,WAAa,EAAA;QAAEiB,WAAa,EAAA;AAAM,KAAA,CAAA;AAC3E,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.mjs","sources":["../../src/logout/action.ts"],"sourcesContent":["import type { CLIContext } from '../types';\nimport { tokenServiceFactory, cloudApiFactory } from '../services';\nimport { trackEvent } from '../utils/analytics';\n\nconst openModule = import('open');\n\nexport default async (ctx: CLIContext) => {\n const { logger } = ctx;\n const { retrieveToken, eraseToken } = await tokenServiceFactory(ctx);\n\n const token = await retrieveToken();\n if (!token) {\n logger.log(\"You're already logged out.\");\n return;\n }\n const cloudApiService = await cloudApiFactory(ctx, token);\n const config = await cloudApiService.config();\n const cliConfig = config.data;\n\n try {\n await eraseToken();\n\n openModule.then((open) => {\n open\n .default(\n `${cliConfig.baseUrl}/oidc/logout?client_id=${encodeURIComponent(\n cliConfig.clientId\n )}&logout_hint=${encodeURIComponent(token)}\n `\n )\n .catch((e: Error) => {\n // Failing to open the logout URL is not a critical error, so we just log it\n logger.debug(e.message, e);\n });\n });\n\n logger.log(\n '🔌 You have been logged out from the CLI. If you are on a shared computer, please make sure to log out from the Strapi Cloud Dashboard as well.'\n );\n } catch (e) {\n logger.error('🥲 Oops! Something went wrong while logging you out. Please try again.');\n logger.debug(e);\n }\n await trackEvent(ctx, cloudApiService, 'didLogout', { loginMethod: 'cli' });\n};\n"],"names":["openModule","ctx","logger","retrieveToken","eraseToken","tokenServiceFactory","token","log","cloudApiService","cloudApiFactory","config","cliConfig","data","then","open","default","baseUrl","encodeURIComponent","clientId","catch","e","debug","message","error","trackEvent","loginMethod"],"mappings":";;;;;;;;;;;AAIA,MAAMA,UAAAA,GAAa,OAAO,MAAA,CAAA;AAE1B,aAAe,CAAA,OAAOC,GAAAA,GAAAA;IACpB,MAAM,EAAEC,MAAM,EAAE,GAAGD,GAAAA;AACnB,IAAA,MAAM,EAAEE,aAAa,EAAEC,UAAU,EAAE,GAAG,MAAMC,mBAAoBJ,CAAAA,GAAAA,CAAAA;AAEhE,IAAA,MAAMK,QAAQ,MAAMH,aAAAA,EAAAA;AACpB,IAAA,IAAI,CAACG,KAAO,EAAA;AACVJ,QAAAA,MAAAA,CAAOK,GAAG,CAAC,4BAAA,CAAA;AACX,QAAA;AACF;IACA,MAAMC,eAAAA,GAAkB,MAAMC,eAAAA,CAAgBR,GAAKK,EAAAA,KAAAA,CAAAA;IACnD,MAAMI,MAAAA,GAAS,MAAMF,eAAAA,CAAgBE,MAAM,EAAA;IAC3C,MAAMC,SAAAA,GAAYD,OAAOE,IAAI;IAE7B,IAAI;QACF,MAAMR,UAAAA,EAAAA;QAENJ,UAAWa,CAAAA,IAAI,CAAC,CAACC,IAAAA,GAAAA;AACfA,YAAAA,IAAAA,CACGC,OAAO,CACN,
|
|
1
|
+
{"version":3,"file":"action.mjs","sources":["../../src/logout/action.ts"],"sourcesContent":["import type { CLIContext } from '../types';\nimport { tokenServiceFactory, cloudApiFactory } from '../services';\nimport { trackEvent } from '../utils/analytics';\n\nconst openModule = import('open');\n\nexport default async (ctx: CLIContext) => {\n const { logger } = ctx;\n const { retrieveToken, eraseToken } = await tokenServiceFactory(ctx);\n\n const token = await retrieveToken();\n if (!token) {\n logger.log(\"You're already logged out.\");\n return;\n }\n const cloudApiService = await cloudApiFactory(ctx, token);\n const config = await cloudApiService.config();\n const cliConfig = config.data;\n\n try {\n await eraseToken();\n\n openModule.then((open) => {\n open\n .default(\n `${cliConfig.baseUrl}/oidc/logout?client_id=${encodeURIComponent(\n cliConfig.clientId\n )}&logout_hint=${encodeURIComponent(token)}\n `\n )\n .catch((e: Error) => {\n // Failing to open the logout URL is not a critical error, so we just log it\n logger.debug(e.message, e);\n });\n });\n\n logger.log(\n '🔌 You have been logged out from the CLI. If you are on a shared computer, please make sure to log out from the Strapi Cloud Dashboard as well.'\n );\n } catch (e) {\n logger.error('🥲 Oops! Something went wrong while logging you out. Please try again.');\n logger.debug(e);\n }\n await trackEvent(ctx, cloudApiService, 'didLogout', { loginMethod: 'cli' });\n};\n"],"names":["openModule","ctx","logger","retrieveToken","eraseToken","tokenServiceFactory","token","log","cloudApiService","cloudApiFactory","config","cliConfig","data","then","open","default","baseUrl","encodeURIComponent","clientId","catch","e","debug","message","error","trackEvent","loginMethod"],"mappings":";;;;;;;;;;;AAIA,MAAMA,UAAAA,GAAa,OAAO,MAAA,CAAA;AAE1B,aAAe,CAAA,OAAOC,GAAAA,GAAAA;IACpB,MAAM,EAAEC,MAAM,EAAE,GAAGD,GAAAA;AACnB,IAAA,MAAM,EAAEE,aAAa,EAAEC,UAAU,EAAE,GAAG,MAAMC,mBAAoBJ,CAAAA,GAAAA,CAAAA;AAEhE,IAAA,MAAMK,QAAQ,MAAMH,aAAAA,EAAAA;AACpB,IAAA,IAAI,CAACG,KAAO,EAAA;AACVJ,QAAAA,MAAAA,CAAOK,GAAG,CAAC,4BAAA,CAAA;AACX,QAAA;AACF;IACA,MAAMC,eAAAA,GAAkB,MAAMC,eAAAA,CAAgBR,GAAKK,EAAAA,KAAAA,CAAAA;IACnD,MAAMI,MAAAA,GAAS,MAAMF,eAAAA,CAAgBE,MAAM,EAAA;IAC3C,MAAMC,SAAAA,GAAYD,OAAOE,IAAI;IAE7B,IAAI;QACF,MAAMR,UAAAA,EAAAA;QAENJ,UAAWa,CAAAA,IAAI,CAAC,CAACC,IAAAA,GAAAA;AACfA,YAAAA,IAAAA,CACGC,OAAO,CACN,CAAGJ,EAAAA,SAAAA,CAAUK,OAAO,CAAC,uBAAuB,EAAEC,kBAAAA,CAC5CN,UAAUO,QAAQ,CAAA,CAClB,aAAa,EAAED,mBAAmBX,KAAO,CAAA;UAC3C,CAAC,CAAA,CAEFa,KAAK,CAAC,CAACC,CAAAA,GAAAA;;AAENlB,gBAAAA,MAAAA,CAAOmB,KAAK,CAACD,CAAEE,CAAAA,OAAO,EAAEF,CAAAA,CAAAA;AAC1B,aAAA,CAAA;AACJ,SAAA,CAAA;AAEAlB,QAAAA,MAAAA,CAAOK,GAAG,CACR,iJAAA,CAAA;AAEJ,KAAA,CAAE,OAAOa,CAAG,EAAA;AACVlB,QAAAA,MAAAA,CAAOqB,KAAK,CAAC,wEAAA,CAAA;AACbrB,QAAAA,MAAAA,CAAOmB,KAAK,CAACD,CAAAA,CAAAA;AACf;IACA,MAAMI,UAAAA,CAAWvB,GAAKO,EAAAA,eAAAA,EAAiB,WAAa,EAAA;QAAEiB,WAAa,EAAA;AAAM,KAAA,CAAA;AAC3E,CAAA;;;;"}
|
package/dist/package.json.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var name = "@strapi/cloud-cli";
|
|
6
|
-
var version = "0.0.0-next.
|
|
6
|
+
var version = "0.0.0-next.e7ae51b01f78ddeaa09c4aa3e3882f466a5b3188";
|
|
7
7
|
var description = "Commands to interact with the Strapi Cloud";
|
|
8
8
|
var keywords = [
|
|
9
9
|
"strapi",
|
|
@@ -50,8 +50,8 @@ var scripts = {
|
|
|
50
50
|
watch: "run -T rollup -c -w"
|
|
51
51
|
};
|
|
52
52
|
var dependencies = {
|
|
53
|
-
"@strapi/utils": "0.0.0-next.
|
|
54
|
-
axios: "1.
|
|
53
|
+
"@strapi/utils": "0.0.0-next.e7ae51b01f78ddeaa09c4aa3e3882f466a5b3188",
|
|
54
|
+
axios: "1.12.2",
|
|
55
55
|
boxen: "5.1.2",
|
|
56
56
|
chalk: "4.1.2",
|
|
57
57
|
"cli-progress": "3.12.0",
|
|
@@ -75,11 +75,11 @@ var devDependencies = {
|
|
|
75
75
|
"@types/cli-progress": "3.11.5",
|
|
76
76
|
"@types/eventsource": "1.1.15",
|
|
77
77
|
"@types/lodash": "^4.14.191",
|
|
78
|
-
"eslint-config-custom": "0.0.0-next.
|
|
79
|
-
tsconfig: "0.0.0-next.
|
|
78
|
+
"eslint-config-custom": "0.0.0-next.e7ae51b01f78ddeaa09c4aa3e3882f466a5b3188",
|
|
79
|
+
tsconfig: "0.0.0-next.e7ae51b01f78ddeaa09c4aa3e3882f466a5b3188"
|
|
80
80
|
};
|
|
81
81
|
var engines = {
|
|
82
|
-
node: ">=
|
|
82
|
+
node: ">=20.0.0 <=24.x.x",
|
|
83
83
|
npm: ">=6.0.0"
|
|
84
84
|
};
|
|
85
85
|
var packageJson = {
|
package/dist/package.json.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var name = "@strapi/cloud-cli";
|
|
2
|
-
var version = "0.0.0-next.
|
|
2
|
+
var version = "0.0.0-next.e7ae51b01f78ddeaa09c4aa3e3882f466a5b3188";
|
|
3
3
|
var description = "Commands to interact with the Strapi Cloud";
|
|
4
4
|
var keywords = [
|
|
5
5
|
"strapi",
|
|
@@ -46,8 +46,8 @@ var scripts = {
|
|
|
46
46
|
watch: "run -T rollup -c -w"
|
|
47
47
|
};
|
|
48
48
|
var dependencies = {
|
|
49
|
-
"@strapi/utils": "0.0.0-next.
|
|
50
|
-
axios: "1.
|
|
49
|
+
"@strapi/utils": "0.0.0-next.e7ae51b01f78ddeaa09c4aa3e3882f466a5b3188",
|
|
50
|
+
axios: "1.12.2",
|
|
51
51
|
boxen: "5.1.2",
|
|
52
52
|
chalk: "4.1.2",
|
|
53
53
|
"cli-progress": "3.12.0",
|
|
@@ -71,11 +71,11 @@ var devDependencies = {
|
|
|
71
71
|
"@types/cli-progress": "3.11.5",
|
|
72
72
|
"@types/eventsource": "1.1.15",
|
|
73
73
|
"@types/lodash": "^4.14.191",
|
|
74
|
-
"eslint-config-custom": "0.0.0-next.
|
|
75
|
-
tsconfig: "0.0.0-next.
|
|
74
|
+
"eslint-config-custom": "0.0.0-next.e7ae51b01f78ddeaa09c4aa3e3882f466a5b3188",
|
|
75
|
+
tsconfig: "0.0.0-next.e7ae51b01f78ddeaa09c4aa3e3882f466a5b3188"
|
|
76
76
|
};
|
|
77
77
|
var engines = {
|
|
78
|
-
node: ">=
|
|
78
|
+
node: ">=20.0.0 <=24.x.x",
|
|
79
79
|
npm: ">=6.0.0"
|
|
80
80
|
};
|
|
81
81
|
var packageJson = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-logs.js","sources":["../../src/services/build-logs.ts"],"sourcesContent":["import EventSource from 'eventsource';\nimport { CLIContext, type CloudCliConfig } from '../types';\n\nconst buildLogsServiceFactory = ({ logger }: CLIContext) => {\n return async (url: string, token: string, cliConfig: CloudCliConfig) => {\n const CONN_TIMEOUT = Number(cliConfig.buildLogsConnectionTimeout);\n const MAX_RETRIES = Number(cliConfig.buildLogsMaxRetries);\n\n return new Promise((resolve, reject) => {\n let timeoutId: NodeJS.Timeout | null = null;\n let retries = 0;\n\n const connect = (url: string) => {\n const logsSpinner = logger.spinner('Connecting to the server to get build logs\\n').start();\n logsSpinner.indent = 1;\n const es = new EventSource(`${url}`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n const clearExistingTimeout = () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n\n const resetTimeout = () => {\n clearExistingTimeout();\n timeoutId = setTimeout(() => {\n if (logsSpinner.isSpinning) {\n logsSpinner.fail(\n 'We were unable to connect to the server to get build logs at this time. This could be due to a temporary issue.'\n );\n }\n es.close();\n reject(new Error('Connection timed out'));\n }, CONN_TIMEOUT);\n };\n\n es.onopen = resetTimeout;\n\n es.addEventListener('finished', (event) => {\n const data = JSON.parse(event.data);\n logger.log(data.msg);\n es.close();\n clearExistingTimeout();\n resolve(null);\n });\n\n es.addEventListener('log', (event) => {\n if (logsSpinner.isSpinning) {\n logsSpinner.succeed();\n }\n resetTimeout();\n const data = JSON.parse(event.data);\n logger.log(data.msg);\n });\n\n es.onerror = async () => {\n retries += 1;\n if (retries > MAX_RETRIES) {\n logsSpinner.fail(\n 'We were unable to connect to the server to get build logs at this time.'\n );\n es.close();\n clearExistingTimeout(); // Important to clear the event loop from remaining timeout - avoid to wait for nothing while the timeout is running\n reject(new Error('Max retries reached'));\n }\n };\n };\n\n connect(url);\n });\n };\n};\n\nexport { buildLogsServiceFactory };\n"],"names":["buildLogsServiceFactory","logger","url","token","cliConfig","CONN_TIMEOUT","Number","buildLogsConnectionTimeout","MAX_RETRIES","buildLogsMaxRetries","Promise","resolve","reject","timeoutId","retries","connect","logsSpinner","spinner","start","indent","es","EventSource","headers","Authorization","clearExistingTimeout","clearTimeout","resetTimeout","setTimeout","isSpinning","fail","close","Error","onopen","addEventListener","event","data","JSON","parse","log","msg","succeed","onerror"],"mappings":";;;;AAGA,MAAMA,uBAA0B,GAAA,CAAC,EAAEC,MAAM,EAAc,GAAA;IACrD,OAAO,OAAOC,KAAaC,KAAeC,EAAAA,SAAAA,GAAAA;QACxC,MAAMC,YAAAA,GAAeC,MAAOF,CAAAA,SAAAA,CAAUG,0BAA0B,CAAA;QAChE,MAAMC,WAAAA,GAAcF,MAAOF,CAAAA,SAAAA,CAAUK,mBAAmB,CAAA;QAExD,OAAO,IAAIC,OAAQ,CAAA,CAACC,OAASC,EAAAA,MAAAA,GAAAA;AAC3B,YAAA,IAAIC,SAAmC,GAAA,IAAA;AACvC,YAAA,IAAIC,OAAU,GAAA,CAAA;AAEd,YAAA,MAAMC,UAAU,CAACb,GAAAA,GAAAA;AACf,gBAAA,MAAMc,WAAcf,GAAAA,MAAAA,CAAOgB,OAAO,CAAC,gDAAgDC,KAAK,EAAA;AACxFF,gBAAAA,WAAAA,CAAYG,MAAM,GAAG,CAAA;AACrB,gBAAA,MAAMC,
|
|
1
|
+
{"version":3,"file":"build-logs.js","sources":["../../src/services/build-logs.ts"],"sourcesContent":["import EventSource from 'eventsource';\nimport { CLIContext, type CloudCliConfig } from '../types';\n\nconst buildLogsServiceFactory = ({ logger }: CLIContext) => {\n return async (url: string, token: string, cliConfig: CloudCliConfig) => {\n const CONN_TIMEOUT = Number(cliConfig.buildLogsConnectionTimeout);\n const MAX_RETRIES = Number(cliConfig.buildLogsMaxRetries);\n\n return new Promise((resolve, reject) => {\n let timeoutId: NodeJS.Timeout | null = null;\n let retries = 0;\n\n const connect = (url: string) => {\n const logsSpinner = logger.spinner('Connecting to the server to get build logs\\n').start();\n logsSpinner.indent = 1;\n const es = new EventSource(`${url}`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n const clearExistingTimeout = () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n\n const resetTimeout = () => {\n clearExistingTimeout();\n timeoutId = setTimeout(() => {\n if (logsSpinner.isSpinning) {\n logsSpinner.fail(\n 'We were unable to connect to the server to get build logs at this time. This could be due to a temporary issue.'\n );\n }\n es.close();\n reject(new Error('Connection timed out'));\n }, CONN_TIMEOUT);\n };\n\n es.onopen = resetTimeout;\n\n es.addEventListener('finished', (event) => {\n const data = JSON.parse(event.data);\n logger.log(data.msg);\n es.close();\n clearExistingTimeout();\n resolve(null);\n });\n\n es.addEventListener('log', (event) => {\n if (logsSpinner.isSpinning) {\n logsSpinner.succeed();\n }\n resetTimeout();\n const data = JSON.parse(event.data);\n logger.log(data.msg);\n });\n\n es.onerror = async () => {\n retries += 1;\n if (retries > MAX_RETRIES) {\n logsSpinner.fail(\n 'We were unable to connect to the server to get build logs at this time.'\n );\n es.close();\n clearExistingTimeout(); // Important to clear the event loop from remaining timeout - avoid to wait for nothing while the timeout is running\n reject(new Error('Max retries reached'));\n }\n };\n };\n\n connect(url);\n });\n };\n};\n\nexport { buildLogsServiceFactory };\n"],"names":["buildLogsServiceFactory","logger","url","token","cliConfig","CONN_TIMEOUT","Number","buildLogsConnectionTimeout","MAX_RETRIES","buildLogsMaxRetries","Promise","resolve","reject","timeoutId","retries","connect","logsSpinner","spinner","start","indent","es","EventSource","headers","Authorization","clearExistingTimeout","clearTimeout","resetTimeout","setTimeout","isSpinning","fail","close","Error","onopen","addEventListener","event","data","JSON","parse","log","msg","succeed","onerror"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-logs.mjs","sources":["../../src/services/build-logs.ts"],"sourcesContent":["import EventSource from 'eventsource';\nimport { CLIContext, type CloudCliConfig } from '../types';\n\nconst buildLogsServiceFactory = ({ logger }: CLIContext) => {\n return async (url: string, token: string, cliConfig: CloudCliConfig) => {\n const CONN_TIMEOUT = Number(cliConfig.buildLogsConnectionTimeout);\n const MAX_RETRIES = Number(cliConfig.buildLogsMaxRetries);\n\n return new Promise((resolve, reject) => {\n let timeoutId: NodeJS.Timeout | null = null;\n let retries = 0;\n\n const connect = (url: string) => {\n const logsSpinner = logger.spinner('Connecting to the server to get build logs\\n').start();\n logsSpinner.indent = 1;\n const es = new EventSource(`${url}`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n const clearExistingTimeout = () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n\n const resetTimeout = () => {\n clearExistingTimeout();\n timeoutId = setTimeout(() => {\n if (logsSpinner.isSpinning) {\n logsSpinner.fail(\n 'We were unable to connect to the server to get build logs at this time. This could be due to a temporary issue.'\n );\n }\n es.close();\n reject(new Error('Connection timed out'));\n }, CONN_TIMEOUT);\n };\n\n es.onopen = resetTimeout;\n\n es.addEventListener('finished', (event) => {\n const data = JSON.parse(event.data);\n logger.log(data.msg);\n es.close();\n clearExistingTimeout();\n resolve(null);\n });\n\n es.addEventListener('log', (event) => {\n if (logsSpinner.isSpinning) {\n logsSpinner.succeed();\n }\n resetTimeout();\n const data = JSON.parse(event.data);\n logger.log(data.msg);\n });\n\n es.onerror = async () => {\n retries += 1;\n if (retries > MAX_RETRIES) {\n logsSpinner.fail(\n 'We were unable to connect to the server to get build logs at this time.'\n );\n es.close();\n clearExistingTimeout(); // Important to clear the event loop from remaining timeout - avoid to wait for nothing while the timeout is running\n reject(new Error('Max retries reached'));\n }\n };\n };\n\n connect(url);\n });\n };\n};\n\nexport { buildLogsServiceFactory };\n"],"names":["buildLogsServiceFactory","logger","url","token","cliConfig","CONN_TIMEOUT","Number","buildLogsConnectionTimeout","MAX_RETRIES","buildLogsMaxRetries","Promise","resolve","reject","timeoutId","retries","connect","logsSpinner","spinner","start","indent","es","EventSource","headers","Authorization","clearExistingTimeout","clearTimeout","resetTimeout","setTimeout","isSpinning","fail","close","Error","onopen","addEventListener","event","data","JSON","parse","log","msg","succeed","onerror"],"mappings":";;AAGA,MAAMA,uBAA0B,GAAA,CAAC,EAAEC,MAAM,EAAc,GAAA;IACrD,OAAO,OAAOC,KAAaC,KAAeC,EAAAA,SAAAA,GAAAA;QACxC,MAAMC,YAAAA,GAAeC,MAAOF,CAAAA,SAAAA,CAAUG,0BAA0B,CAAA;QAChE,MAAMC,WAAAA,GAAcF,MAAOF,CAAAA,SAAAA,CAAUK,mBAAmB,CAAA;QAExD,OAAO,IAAIC,OAAQ,CAAA,CAACC,OAASC,EAAAA,MAAAA,GAAAA;AAC3B,YAAA,IAAIC,SAAmC,GAAA,IAAA;AACvC,YAAA,IAAIC,OAAU,GAAA,CAAA;AAEd,YAAA,MAAMC,UAAU,CAACb,GAAAA,GAAAA;AACf,gBAAA,MAAMc,WAAcf,GAAAA,MAAAA,CAAOgB,OAAO,CAAC,gDAAgDC,KAAK,EAAA;AACxFF,gBAAAA,WAAAA,CAAYG,MAAM,GAAG,CAAA;AACrB,gBAAA,MAAMC,
|
|
1
|
+
{"version":3,"file":"build-logs.mjs","sources":["../../src/services/build-logs.ts"],"sourcesContent":["import EventSource from 'eventsource';\nimport { CLIContext, type CloudCliConfig } from '../types';\n\nconst buildLogsServiceFactory = ({ logger }: CLIContext) => {\n return async (url: string, token: string, cliConfig: CloudCliConfig) => {\n const CONN_TIMEOUT = Number(cliConfig.buildLogsConnectionTimeout);\n const MAX_RETRIES = Number(cliConfig.buildLogsMaxRetries);\n\n return new Promise((resolve, reject) => {\n let timeoutId: NodeJS.Timeout | null = null;\n let retries = 0;\n\n const connect = (url: string) => {\n const logsSpinner = logger.spinner('Connecting to the server to get build logs\\n').start();\n logsSpinner.indent = 1;\n const es = new EventSource(`${url}`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n const clearExistingTimeout = () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n\n const resetTimeout = () => {\n clearExistingTimeout();\n timeoutId = setTimeout(() => {\n if (logsSpinner.isSpinning) {\n logsSpinner.fail(\n 'We were unable to connect to the server to get build logs at this time. This could be due to a temporary issue.'\n );\n }\n es.close();\n reject(new Error('Connection timed out'));\n }, CONN_TIMEOUT);\n };\n\n es.onopen = resetTimeout;\n\n es.addEventListener('finished', (event) => {\n const data = JSON.parse(event.data);\n logger.log(data.msg);\n es.close();\n clearExistingTimeout();\n resolve(null);\n });\n\n es.addEventListener('log', (event) => {\n if (logsSpinner.isSpinning) {\n logsSpinner.succeed();\n }\n resetTimeout();\n const data = JSON.parse(event.data);\n logger.log(data.msg);\n });\n\n es.onerror = async () => {\n retries += 1;\n if (retries > MAX_RETRIES) {\n logsSpinner.fail(\n 'We were unable to connect to the server to get build logs at this time.'\n );\n es.close();\n clearExistingTimeout(); // Important to clear the event loop from remaining timeout - avoid to wait for nothing while the timeout is running\n reject(new Error('Max retries reached'));\n }\n };\n };\n\n connect(url);\n });\n };\n};\n\nexport { buildLogsServiceFactory };\n"],"names":["buildLogsServiceFactory","logger","url","token","cliConfig","CONN_TIMEOUT","Number","buildLogsConnectionTimeout","MAX_RETRIES","buildLogsMaxRetries","Promise","resolve","reject","timeoutId","retries","connect","logsSpinner","spinner","start","indent","es","EventSource","headers","Authorization","clearExistingTimeout","clearTimeout","resetTimeout","setTimeout","isSpinning","fail","close","Error","onopen","addEventListener","event","data","JSON","parse","log","msg","succeed","onerror"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-api.d.ts","sourceRoot":"","sources":["../../src/services/cli-api.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAIlD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-api.d.ts","sourceRoot":"","sources":["../../src/services/cli-api.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAIlD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAMzE,eAAO,MAAM,OAAO,OAAO,CAAC;AAE5B,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAEnD,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE;QACJ,IAAI,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KACjD,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE;QACJ,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAC7C,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE;QACJ,IAAI,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KACpD,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;KAC3C,CAAC;IACF,QAAQ,EAAE;QACR,aAAa,EAAE;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC;KACH,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB,EAAE,MAAM,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,MAAM,CACJ,WAAW,EAAE;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACvD,EACD,EACE,gBAAgB,GACjB,EAAE;QACD,gBAAgB,EAAE,CAAC,aAAa,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAC;KAC/E,GACA,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;IAE1C,aAAa,CAAC,kBAAkB,EAAE,YAAY,GAAG,OAAO,CAAC;QACvD,IAAI,EAAE,qBAAqB,CAAC;QAC5B,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IAEH,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAEtC,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;IAEjD,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAE7D,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAErE,gBAAgB,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAE9F,oBAAoB,CAAC,OAAO,EAAE;QAC5B,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAEzD,UAAU,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAElF,WAAW,CAAC,gBAAgB,EAAE;QAC5B,aAAa,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAEhD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;CAC5E;AAED,wBAAsB,eAAe,CACnC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;CAAE,EAC5C,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,CAAC,CA2L1B"}
|
package/dist/services/cli-api.js
CHANGED
|
@@ -6,6 +6,7 @@ var os = require('os');
|
|
|
6
6
|
var api = require('../config/api.js');
|
|
7
7
|
var local = require('../config/local.js');
|
|
8
8
|
var _package = require('../package.json.js');
|
|
9
|
+
var context = require('./context.js');
|
|
9
10
|
|
|
10
11
|
const VERSION = 'v3';
|
|
11
12
|
async function cloudApiFactory({ logger }, token) {
|
|
@@ -146,6 +147,10 @@ async function cloudApiFactory({ logger }, token) {
|
|
|
146
147
|
}
|
|
147
148
|
},
|
|
148
149
|
track (event, payload = {}) {
|
|
150
|
+
const ctx = context.getContext();
|
|
151
|
+
if (ctx?.user?.id) {
|
|
152
|
+
axiosCloudAPI.defaults.headers['x-user-id'] = ctx.user.id;
|
|
153
|
+
}
|
|
149
154
|
return axiosCloudAPI.post('/track', {
|
|
150
155
|
event,
|
|
151
156
|
payload
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-api.js","sources":["../../src/services/cli-api.ts"],"sourcesContent":["import axios, { type AxiosResponse } from 'axios';\nimport fse from 'fs-extra';\nimport os from 'os';\nimport { apiConfig } from '../config/api';\nimport type { CLIContext, CloudCliConfig, TrackPayload } from '../types';\nimport { getLocalConfig } from '../config/local';\n\nimport packageJson from '../../package.json';\n\nexport const VERSION = 'v3';\n\nexport type ProjectInfo = {\n id: string;\n name: string;\n targetEnvironment?: string;\n displayName?: string;\n nodeVersion?: string;\n region?: string;\n plan?: string;\n url?: string;\n};\n\nexport type EnvironmentInfo = Record<string, unknown>;\n\nexport type EnvironmentDetails = {\n name: string;\n hasLiveDeployment: boolean;\n hasPendingDeployment: boolean;\n};\n\nexport type ProjectInput = Omit<ProjectInfo, 'id'>;\n\nexport type DeployResponse = {\n build_id: string;\n image: string;\n};\n\nexport type ListProjectsResponse = {\n data: {\n data: string;\n };\n};\n\nexport type ListEnvironmentsResponse = {\n data: {\n data: EnvironmentInfo[] | Record<string, never>;\n };\n};\n\nexport type ListLinkProjectsResponse = {\n data: {\n data: ProjectInfo[] | Record<string, never>;\n };\n};\n\nexport type ListLinkEnvironmentsResponse = {\n data: {\n data: EnvironmentDetails[] | Record<string, never>;\n };\n};\n\nexport type GetProjectResponse = {\n data: {\n displayName: string;\n updatedAt: string;\n suspendedAt?: string;\n isTrial: boolean;\n environments: string[];\n environmentsDetails: EnvironmentDetails[];\n };\n metadata: {\n dashboardUrls: {\n project: string;\n deployments: string;\n };\n };\n};\n\nexport type CreateTrialResponse = {\n licenseKey: string;\n};\n\nexport type CreateProjectResponse = {\n name: string;\n environmentInternalName: string;\n url?: string;\n};\n\nexport interface CloudApiService {\n deploy(\n deployInput: {\n filePath: string;\n project: { name: string; targetEnvironment?: string };\n },\n {\n onUploadProgress,\n }: {\n onUploadProgress: (progressEvent: { loaded: number; total?: number }) => void;\n }\n ): Promise<AxiosResponse<DeployResponse>>;\n\n createProject(createProjectInput: ProjectInput): Promise<{\n data: CreateProjectResponse;\n status: number;\n }>;\n\n getUserInfo(): Promise<AxiosResponse>;\n\n config(): Promise<AxiosResponse<CloudCliConfig>>;\n\n listProjects(): Promise<AxiosResponse<ListProjectsResponse>>;\n\n listLinkProjects(): Promise<AxiosResponse<ListLinkProjectsResponse>>;\n\n listEnvironments(project: { name: string }): Promise<AxiosResponse<ListEnvironmentsResponse>>;\n\n listLinkEnvironments(project: {\n name: string;\n }): Promise<AxiosResponse<ListLinkEnvironmentsResponse>>;\n\n getProject(project: { name: string }): Promise<AxiosResponse<GetProjectResponse>>;\n\n createTrial(createTrialInput: {\n strapiVersion: string;\n }): Promise<AxiosResponse<CreateTrialResponse>>;\n\n track(event: string, payload?: TrackPayload): Promise<AxiosResponse<void>>;\n}\n\nexport async function cloudApiFactory(\n { logger }: { logger: CLIContext['logger'] },\n token?: string\n): Promise<CloudApiService> {\n const localConfig = await getLocalConfig();\n const customHeaders = {\n 'x-device-id': localConfig.installId,\n 'x-app-version': packageJson.version,\n 'x-os-name': os.type(),\n 'x-os-version': os.version(),\n 'x-language': Intl.DateTimeFormat().resolvedOptions().locale,\n 'x-node-version': process.versions.node,\n };\n const axiosCloudAPI = axios.create({\n baseURL: `${apiConfig.apiBaseUrl}/${VERSION}`,\n headers: {\n 'Content-Type': 'application/json',\n ...customHeaders,\n },\n });\n\n if (token) {\n axiosCloudAPI.defaults.headers.Authorization = `Bearer ${token}`;\n }\n\n return {\n deploy({ filePath, project }, { onUploadProgress }) {\n return axiosCloudAPI.post(\n `/deploy/${project.name}`,\n { file: fse.createReadStream(filePath), targetEnvironment: project.targetEnvironment },\n {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n onUploadProgress,\n }\n );\n },\n\n async createProject({ name, nodeVersion, region, plan }) {\n const response = await axiosCloudAPI.post('/project', {\n projectName: name,\n region,\n nodeVersion,\n plan,\n });\n\n return {\n data: {\n id: response.data.id,\n name: response.data.name,\n environmentInternalName: response.data.environmentInternalName,\n },\n status: response.status,\n };\n },\n\n getUserInfo() {\n return axiosCloudAPI.get('/user');\n },\n\n async config(): Promise<AxiosResponse<CloudCliConfig>> {\n try {\n const response = await axiosCloudAPI.get('/config');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud CLI config from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve the cloud CLI config from the server. Please try again.\"\n );\n\n throw error;\n }\n },\n\n async listProjects(): Promise<AxiosResponse<ListProjectsResponse>> {\n try {\n const response = await axiosCloudAPI.get('/projects');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud projects from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's list from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listLinkProjects(): Promise<AxiosResponse<ListLinkProjectsResponse, unknown>> {\n try {\n const response = await axiosCloudAPI.get('/projects-linkable');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud projects from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's list from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listEnvironments({ name }): Promise<AxiosResponse<ListEnvironmentsResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}/environments`);\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud environments from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's environments from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listLinkEnvironments({ name }): Promise<AxiosResponse<ListLinkEnvironmentsResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}/environments-linkable`);\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud environments from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's environments from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async getProject({ name }): Promise<AxiosResponse<GetProjectResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}`);\n\n if (response.status !== 200) {\n throw new Error(\"Error fetching project's details.\");\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! There was a problem retrieving your project's details. Please try again.\"\n );\n throw error;\n }\n },\n\n async createTrial({ strapiVersion }): Promise<AxiosResponse<CreateTrialResponse>> {\n try {\n const response = await axiosCloudAPI.post(`/cms-trial-request`, { strapiVersion });\n\n if (response.status !== 200) {\n throw new Error('Error creating trial.');\n }\n\n return response;\n } catch (error) {\n logger.debug('🥲 Oops! There was a problem creating your trial. Please try again.');\n throw error;\n }\n },\n\n track(event, payload = {}) {\n return axiosCloudAPI.post<void>('/track', {\n event,\n payload,\n });\n },\n };\n}\n"],"names":["VERSION","cloudApiFactory","logger","token","localConfig","getLocalConfig","customHeaders","installId","packageJson","version","os","type","Intl","DateTimeFormat","resolvedOptions","locale","process","versions","node","axiosCloudAPI","axios","create","baseURL","apiConfig","apiBaseUrl","headers","defaults","Authorization","deploy","filePath","project","onUploadProgress","post","name","file","fse","createReadStream","targetEnvironment","createProject","nodeVersion","region","plan","response","projectName","data","id","environmentInternalName","status","getUserInfo","get","config","Error","error","debug","listProjects","listLinkProjects","listEnvironments","listLinkEnvironments","getProject","createTrial","strapiVersion","track","event","payload"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli-api.js","sources":["../../src/services/cli-api.ts"],"sourcesContent":["import axios, { type AxiosResponse } from 'axios';\nimport fse from 'fs-extra';\nimport os from 'os';\nimport { apiConfig } from '../config/api';\nimport type { CLIContext, CloudCliConfig, TrackPayload } from '../types';\nimport { getLocalConfig } from '../config/local';\n\nimport packageJson from '../../package.json';\nimport { getContext } from './context';\n\nexport const VERSION = 'v3';\n\nexport type ProjectInfo = {\n id: string;\n name: string;\n targetEnvironment?: string;\n displayName?: string;\n nodeVersion?: string;\n region?: string;\n plan?: string;\n url?: string;\n};\n\nexport type EnvironmentInfo = Record<string, unknown>;\n\nexport type EnvironmentDetails = {\n name: string;\n hasLiveDeployment: boolean;\n hasPendingDeployment: boolean;\n};\n\nexport type ProjectInput = Omit<ProjectInfo, 'id'>;\n\nexport type DeployResponse = {\n build_id: string;\n image: string;\n};\n\nexport type ListProjectsResponse = {\n data: {\n data: string;\n };\n};\n\nexport type ListEnvironmentsResponse = {\n data: {\n data: EnvironmentInfo[] | Record<string, never>;\n };\n};\n\nexport type ListLinkProjectsResponse = {\n data: {\n data: ProjectInfo[] | Record<string, never>;\n };\n};\n\nexport type ListLinkEnvironmentsResponse = {\n data: {\n data: EnvironmentDetails[] | Record<string, never>;\n };\n};\n\nexport type GetProjectResponse = {\n data: {\n displayName: string;\n updatedAt: string;\n suspendedAt?: string;\n isTrial: boolean;\n environments: string[];\n environmentsDetails: EnvironmentDetails[];\n };\n metadata: {\n dashboardUrls: {\n project: string;\n deployments: string;\n };\n };\n};\n\nexport type CreateTrialResponse = {\n licenseKey: string;\n};\n\nexport type CreateProjectResponse = {\n name: string;\n environmentInternalName: string;\n url?: string;\n};\n\nexport interface CloudApiService {\n deploy(\n deployInput: {\n filePath: string;\n project: { name: string; targetEnvironment?: string };\n },\n {\n onUploadProgress,\n }: {\n onUploadProgress: (progressEvent: { loaded: number; total?: number }) => void;\n }\n ): Promise<AxiosResponse<DeployResponse>>;\n\n createProject(createProjectInput: ProjectInput): Promise<{\n data: CreateProjectResponse;\n status: number;\n }>;\n\n getUserInfo(): Promise<AxiosResponse>;\n\n config(): Promise<AxiosResponse<CloudCliConfig>>;\n\n listProjects(): Promise<AxiosResponse<ListProjectsResponse>>;\n\n listLinkProjects(): Promise<AxiosResponse<ListLinkProjectsResponse>>;\n\n listEnvironments(project: { name: string }): Promise<AxiosResponse<ListEnvironmentsResponse>>;\n\n listLinkEnvironments(project: {\n name: string;\n }): Promise<AxiosResponse<ListLinkEnvironmentsResponse>>;\n\n getProject(project: { name: string }): Promise<AxiosResponse<GetProjectResponse>>;\n\n createTrial(createTrialInput: {\n strapiVersion: string;\n }): Promise<AxiosResponse<CreateTrialResponse>>;\n\n track(event: string, payload?: TrackPayload): Promise<AxiosResponse<void>>;\n}\n\nexport async function cloudApiFactory(\n { logger }: { logger: CLIContext['logger'] },\n token?: string\n): Promise<CloudApiService> {\n const localConfig = await getLocalConfig();\n const customHeaders = {\n 'x-device-id': localConfig.installId,\n 'x-app-version': packageJson.version,\n 'x-os-name': os.type(),\n 'x-os-version': os.version(),\n 'x-language': Intl.DateTimeFormat().resolvedOptions().locale,\n 'x-node-version': process.versions.node,\n };\n const axiosCloudAPI = axios.create({\n baseURL: `${apiConfig.apiBaseUrl}/${VERSION}`,\n headers: {\n 'Content-Type': 'application/json',\n ...customHeaders,\n },\n });\n\n if (token) {\n axiosCloudAPI.defaults.headers.Authorization = `Bearer ${token}`;\n }\n\n return {\n deploy({ filePath, project }, { onUploadProgress }) {\n return axiosCloudAPI.post(\n `/deploy/${project.name}`,\n { file: fse.createReadStream(filePath), targetEnvironment: project.targetEnvironment },\n {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n onUploadProgress,\n }\n );\n },\n\n async createProject({ name, nodeVersion, region, plan }) {\n const response = await axiosCloudAPI.post('/project', {\n projectName: name,\n region,\n nodeVersion,\n plan,\n });\n\n return {\n data: {\n id: response.data.id,\n name: response.data.name,\n environmentInternalName: response.data.environmentInternalName,\n },\n status: response.status,\n };\n },\n\n getUserInfo() {\n return axiosCloudAPI.get('/user');\n },\n\n async config(): Promise<AxiosResponse<CloudCliConfig>> {\n try {\n const response = await axiosCloudAPI.get('/config');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud CLI config from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve the cloud CLI config from the server. Please try again.\"\n );\n\n throw error;\n }\n },\n\n async listProjects(): Promise<AxiosResponse<ListProjectsResponse>> {\n try {\n const response = await axiosCloudAPI.get('/projects');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud projects from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's list from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listLinkProjects(): Promise<AxiosResponse<ListLinkProjectsResponse, unknown>> {\n try {\n const response = await axiosCloudAPI.get('/projects-linkable');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud projects from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's list from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listEnvironments({ name }): Promise<AxiosResponse<ListEnvironmentsResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}/environments`);\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud environments from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's environments from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listLinkEnvironments({ name }): Promise<AxiosResponse<ListLinkEnvironmentsResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}/environments-linkable`);\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud environments from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's environments from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async getProject({ name }): Promise<AxiosResponse<GetProjectResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}`);\n\n if (response.status !== 200) {\n throw new Error(\"Error fetching project's details.\");\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! There was a problem retrieving your project's details. Please try again.\"\n );\n throw error;\n }\n },\n\n async createTrial({ strapiVersion }): Promise<AxiosResponse<CreateTrialResponse>> {\n try {\n const response = await axiosCloudAPI.post(`/cms-trial-request`, { strapiVersion });\n\n if (response.status !== 200) {\n throw new Error('Error creating trial.');\n }\n\n return response;\n } catch (error) {\n logger.debug('🥲 Oops! There was a problem creating your trial. Please try again.');\n throw error;\n }\n },\n\n track(event, payload = {}) {\n const ctx = getContext();\n if (ctx?.user?.id) {\n axiosCloudAPI.defaults.headers['x-user-id'] = ctx.user.id;\n }\n return axiosCloudAPI.post<void>('/track', {\n event,\n payload,\n });\n },\n };\n}\n"],"names":["VERSION","cloudApiFactory","logger","token","localConfig","getLocalConfig","customHeaders","installId","packageJson","version","os","type","Intl","DateTimeFormat","resolvedOptions","locale","process","versions","node","axiosCloudAPI","axios","create","baseURL","apiConfig","apiBaseUrl","headers","defaults","Authorization","deploy","filePath","project","onUploadProgress","post","name","file","fse","createReadStream","targetEnvironment","createProject","nodeVersion","region","plan","response","projectName","data","id","environmentInternalName","status","getUserInfo","get","config","Error","error","debug","listProjects","listLinkProjects","listEnvironments","listLinkEnvironments","getProject","createTrial","strapiVersion","track","event","payload","ctx","getContext","user"],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import os from 'os';
|
|
|
4
4
|
import { apiConfig } from '../config/api.mjs';
|
|
5
5
|
import { getLocalConfig } from '../config/local.mjs';
|
|
6
6
|
import packageJson from '../package.json.mjs';
|
|
7
|
+
import { getContext } from './context.mjs';
|
|
7
8
|
|
|
8
9
|
const VERSION = 'v3';
|
|
9
10
|
async function cloudApiFactory({ logger }, token) {
|
|
@@ -144,6 +145,10 @@ async function cloudApiFactory({ logger }, token) {
|
|
|
144
145
|
}
|
|
145
146
|
},
|
|
146
147
|
track (event, payload = {}) {
|
|
148
|
+
const ctx = getContext();
|
|
149
|
+
if (ctx?.user?.id) {
|
|
150
|
+
axiosCloudAPI.defaults.headers['x-user-id'] = ctx.user.id;
|
|
151
|
+
}
|
|
147
152
|
return axiosCloudAPI.post('/track', {
|
|
148
153
|
event,
|
|
149
154
|
payload
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-api.mjs","sources":["../../src/services/cli-api.ts"],"sourcesContent":["import axios, { type AxiosResponse } from 'axios';\nimport fse from 'fs-extra';\nimport os from 'os';\nimport { apiConfig } from '../config/api';\nimport type { CLIContext, CloudCliConfig, TrackPayload } from '../types';\nimport { getLocalConfig } from '../config/local';\n\nimport packageJson from '../../package.json';\n\nexport const VERSION = 'v3';\n\nexport type ProjectInfo = {\n id: string;\n name: string;\n targetEnvironment?: string;\n displayName?: string;\n nodeVersion?: string;\n region?: string;\n plan?: string;\n url?: string;\n};\n\nexport type EnvironmentInfo = Record<string, unknown>;\n\nexport type EnvironmentDetails = {\n name: string;\n hasLiveDeployment: boolean;\n hasPendingDeployment: boolean;\n};\n\nexport type ProjectInput = Omit<ProjectInfo, 'id'>;\n\nexport type DeployResponse = {\n build_id: string;\n image: string;\n};\n\nexport type ListProjectsResponse = {\n data: {\n data: string;\n };\n};\n\nexport type ListEnvironmentsResponse = {\n data: {\n data: EnvironmentInfo[] | Record<string, never>;\n };\n};\n\nexport type ListLinkProjectsResponse = {\n data: {\n data: ProjectInfo[] | Record<string, never>;\n };\n};\n\nexport type ListLinkEnvironmentsResponse = {\n data: {\n data: EnvironmentDetails[] | Record<string, never>;\n };\n};\n\nexport type GetProjectResponse = {\n data: {\n displayName: string;\n updatedAt: string;\n suspendedAt?: string;\n isTrial: boolean;\n environments: string[];\n environmentsDetails: EnvironmentDetails[];\n };\n metadata: {\n dashboardUrls: {\n project: string;\n deployments: string;\n };\n };\n};\n\nexport type CreateTrialResponse = {\n licenseKey: string;\n};\n\nexport type CreateProjectResponse = {\n name: string;\n environmentInternalName: string;\n url?: string;\n};\n\nexport interface CloudApiService {\n deploy(\n deployInput: {\n filePath: string;\n project: { name: string; targetEnvironment?: string };\n },\n {\n onUploadProgress,\n }: {\n onUploadProgress: (progressEvent: { loaded: number; total?: number }) => void;\n }\n ): Promise<AxiosResponse<DeployResponse>>;\n\n createProject(createProjectInput: ProjectInput): Promise<{\n data: CreateProjectResponse;\n status: number;\n }>;\n\n getUserInfo(): Promise<AxiosResponse>;\n\n config(): Promise<AxiosResponse<CloudCliConfig>>;\n\n listProjects(): Promise<AxiosResponse<ListProjectsResponse>>;\n\n listLinkProjects(): Promise<AxiosResponse<ListLinkProjectsResponse>>;\n\n listEnvironments(project: { name: string }): Promise<AxiosResponse<ListEnvironmentsResponse>>;\n\n listLinkEnvironments(project: {\n name: string;\n }): Promise<AxiosResponse<ListLinkEnvironmentsResponse>>;\n\n getProject(project: { name: string }): Promise<AxiosResponse<GetProjectResponse>>;\n\n createTrial(createTrialInput: {\n strapiVersion: string;\n }): Promise<AxiosResponse<CreateTrialResponse>>;\n\n track(event: string, payload?: TrackPayload): Promise<AxiosResponse<void>>;\n}\n\nexport async function cloudApiFactory(\n { logger }: { logger: CLIContext['logger'] },\n token?: string\n): Promise<CloudApiService> {\n const localConfig = await getLocalConfig();\n const customHeaders = {\n 'x-device-id': localConfig.installId,\n 'x-app-version': packageJson.version,\n 'x-os-name': os.type(),\n 'x-os-version': os.version(),\n 'x-language': Intl.DateTimeFormat().resolvedOptions().locale,\n 'x-node-version': process.versions.node,\n };\n const axiosCloudAPI = axios.create({\n baseURL: `${apiConfig.apiBaseUrl}/${VERSION}`,\n headers: {\n 'Content-Type': 'application/json',\n ...customHeaders,\n },\n });\n\n if (token) {\n axiosCloudAPI.defaults.headers.Authorization = `Bearer ${token}`;\n }\n\n return {\n deploy({ filePath, project }, { onUploadProgress }) {\n return axiosCloudAPI.post(\n `/deploy/${project.name}`,\n { file: fse.createReadStream(filePath), targetEnvironment: project.targetEnvironment },\n {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n onUploadProgress,\n }\n );\n },\n\n async createProject({ name, nodeVersion, region, plan }) {\n const response = await axiosCloudAPI.post('/project', {\n projectName: name,\n region,\n nodeVersion,\n plan,\n });\n\n return {\n data: {\n id: response.data.id,\n name: response.data.name,\n environmentInternalName: response.data.environmentInternalName,\n },\n status: response.status,\n };\n },\n\n getUserInfo() {\n return axiosCloudAPI.get('/user');\n },\n\n async config(): Promise<AxiosResponse<CloudCliConfig>> {\n try {\n const response = await axiosCloudAPI.get('/config');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud CLI config from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve the cloud CLI config from the server. Please try again.\"\n );\n\n throw error;\n }\n },\n\n async listProjects(): Promise<AxiosResponse<ListProjectsResponse>> {\n try {\n const response = await axiosCloudAPI.get('/projects');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud projects from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's list from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listLinkProjects(): Promise<AxiosResponse<ListLinkProjectsResponse, unknown>> {\n try {\n const response = await axiosCloudAPI.get('/projects-linkable');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud projects from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's list from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listEnvironments({ name }): Promise<AxiosResponse<ListEnvironmentsResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}/environments`);\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud environments from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's environments from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listLinkEnvironments({ name }): Promise<AxiosResponse<ListLinkEnvironmentsResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}/environments-linkable`);\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud environments from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's environments from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async getProject({ name }): Promise<AxiosResponse<GetProjectResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}`);\n\n if (response.status !== 200) {\n throw new Error(\"Error fetching project's details.\");\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! There was a problem retrieving your project's details. Please try again.\"\n );\n throw error;\n }\n },\n\n async createTrial({ strapiVersion }): Promise<AxiosResponse<CreateTrialResponse>> {\n try {\n const response = await axiosCloudAPI.post(`/cms-trial-request`, { strapiVersion });\n\n if (response.status !== 200) {\n throw new Error('Error creating trial.');\n }\n\n return response;\n } catch (error) {\n logger.debug('🥲 Oops! There was a problem creating your trial. Please try again.');\n throw error;\n }\n },\n\n track(event, payload = {}) {\n return axiosCloudAPI.post<void>('/track', {\n event,\n payload,\n });\n },\n };\n}\n"],"names":["VERSION","cloudApiFactory","logger","token","localConfig","getLocalConfig","customHeaders","installId","packageJson","version","os","type","Intl","DateTimeFormat","resolvedOptions","locale","process","versions","node","axiosCloudAPI","axios","create","baseURL","apiConfig","apiBaseUrl","headers","defaults","Authorization","deploy","filePath","project","onUploadProgress","post","name","file","fse","createReadStream","targetEnvironment","createProject","nodeVersion","region","plan","response","projectName","data","id","environmentInternalName","status","getUserInfo","get","config","Error","error","debug","listProjects","listLinkProjects","listEnvironments","listLinkEnvironments","getProject","createTrial","strapiVersion","track","event","payload"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli-api.mjs","sources":["../../src/services/cli-api.ts"],"sourcesContent":["import axios, { type AxiosResponse } from 'axios';\nimport fse from 'fs-extra';\nimport os from 'os';\nimport { apiConfig } from '../config/api';\nimport type { CLIContext, CloudCliConfig, TrackPayload } from '../types';\nimport { getLocalConfig } from '../config/local';\n\nimport packageJson from '../../package.json';\nimport { getContext } from './context';\n\nexport const VERSION = 'v3';\n\nexport type ProjectInfo = {\n id: string;\n name: string;\n targetEnvironment?: string;\n displayName?: string;\n nodeVersion?: string;\n region?: string;\n plan?: string;\n url?: string;\n};\n\nexport type EnvironmentInfo = Record<string, unknown>;\n\nexport type EnvironmentDetails = {\n name: string;\n hasLiveDeployment: boolean;\n hasPendingDeployment: boolean;\n};\n\nexport type ProjectInput = Omit<ProjectInfo, 'id'>;\n\nexport type DeployResponse = {\n build_id: string;\n image: string;\n};\n\nexport type ListProjectsResponse = {\n data: {\n data: string;\n };\n};\n\nexport type ListEnvironmentsResponse = {\n data: {\n data: EnvironmentInfo[] | Record<string, never>;\n };\n};\n\nexport type ListLinkProjectsResponse = {\n data: {\n data: ProjectInfo[] | Record<string, never>;\n };\n};\n\nexport type ListLinkEnvironmentsResponse = {\n data: {\n data: EnvironmentDetails[] | Record<string, never>;\n };\n};\n\nexport type GetProjectResponse = {\n data: {\n displayName: string;\n updatedAt: string;\n suspendedAt?: string;\n isTrial: boolean;\n environments: string[];\n environmentsDetails: EnvironmentDetails[];\n };\n metadata: {\n dashboardUrls: {\n project: string;\n deployments: string;\n };\n };\n};\n\nexport type CreateTrialResponse = {\n licenseKey: string;\n};\n\nexport type CreateProjectResponse = {\n name: string;\n environmentInternalName: string;\n url?: string;\n};\n\nexport interface CloudApiService {\n deploy(\n deployInput: {\n filePath: string;\n project: { name: string; targetEnvironment?: string };\n },\n {\n onUploadProgress,\n }: {\n onUploadProgress: (progressEvent: { loaded: number; total?: number }) => void;\n }\n ): Promise<AxiosResponse<DeployResponse>>;\n\n createProject(createProjectInput: ProjectInput): Promise<{\n data: CreateProjectResponse;\n status: number;\n }>;\n\n getUserInfo(): Promise<AxiosResponse>;\n\n config(): Promise<AxiosResponse<CloudCliConfig>>;\n\n listProjects(): Promise<AxiosResponse<ListProjectsResponse>>;\n\n listLinkProjects(): Promise<AxiosResponse<ListLinkProjectsResponse>>;\n\n listEnvironments(project: { name: string }): Promise<AxiosResponse<ListEnvironmentsResponse>>;\n\n listLinkEnvironments(project: {\n name: string;\n }): Promise<AxiosResponse<ListLinkEnvironmentsResponse>>;\n\n getProject(project: { name: string }): Promise<AxiosResponse<GetProjectResponse>>;\n\n createTrial(createTrialInput: {\n strapiVersion: string;\n }): Promise<AxiosResponse<CreateTrialResponse>>;\n\n track(event: string, payload?: TrackPayload): Promise<AxiosResponse<void>>;\n}\n\nexport async function cloudApiFactory(\n { logger }: { logger: CLIContext['logger'] },\n token?: string\n): Promise<CloudApiService> {\n const localConfig = await getLocalConfig();\n const customHeaders = {\n 'x-device-id': localConfig.installId,\n 'x-app-version': packageJson.version,\n 'x-os-name': os.type(),\n 'x-os-version': os.version(),\n 'x-language': Intl.DateTimeFormat().resolvedOptions().locale,\n 'x-node-version': process.versions.node,\n };\n const axiosCloudAPI = axios.create({\n baseURL: `${apiConfig.apiBaseUrl}/${VERSION}`,\n headers: {\n 'Content-Type': 'application/json',\n ...customHeaders,\n },\n });\n\n if (token) {\n axiosCloudAPI.defaults.headers.Authorization = `Bearer ${token}`;\n }\n\n return {\n deploy({ filePath, project }, { onUploadProgress }) {\n return axiosCloudAPI.post(\n `/deploy/${project.name}`,\n { file: fse.createReadStream(filePath), targetEnvironment: project.targetEnvironment },\n {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n onUploadProgress,\n }\n );\n },\n\n async createProject({ name, nodeVersion, region, plan }) {\n const response = await axiosCloudAPI.post('/project', {\n projectName: name,\n region,\n nodeVersion,\n plan,\n });\n\n return {\n data: {\n id: response.data.id,\n name: response.data.name,\n environmentInternalName: response.data.environmentInternalName,\n },\n status: response.status,\n };\n },\n\n getUserInfo() {\n return axiosCloudAPI.get('/user');\n },\n\n async config(): Promise<AxiosResponse<CloudCliConfig>> {\n try {\n const response = await axiosCloudAPI.get('/config');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud CLI config from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve the cloud CLI config from the server. Please try again.\"\n );\n\n throw error;\n }\n },\n\n async listProjects(): Promise<AxiosResponse<ListProjectsResponse>> {\n try {\n const response = await axiosCloudAPI.get('/projects');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud projects from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's list from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listLinkProjects(): Promise<AxiosResponse<ListLinkProjectsResponse, unknown>> {\n try {\n const response = await axiosCloudAPI.get('/projects-linkable');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud projects from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's list from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listEnvironments({ name }): Promise<AxiosResponse<ListEnvironmentsResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}/environments`);\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud environments from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's environments from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listLinkEnvironments({ name }): Promise<AxiosResponse<ListLinkEnvironmentsResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}/environments-linkable`);\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud environments from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's environments from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async getProject({ name }): Promise<AxiosResponse<GetProjectResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}`);\n\n if (response.status !== 200) {\n throw new Error(\"Error fetching project's details.\");\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! There was a problem retrieving your project's details. Please try again.\"\n );\n throw error;\n }\n },\n\n async createTrial({ strapiVersion }): Promise<AxiosResponse<CreateTrialResponse>> {\n try {\n const response = await axiosCloudAPI.post(`/cms-trial-request`, { strapiVersion });\n\n if (response.status !== 200) {\n throw new Error('Error creating trial.');\n }\n\n return response;\n } catch (error) {\n logger.debug('🥲 Oops! There was a problem creating your trial. Please try again.');\n throw error;\n }\n },\n\n track(event, payload = {}) {\n const ctx = getContext();\n if (ctx?.user?.id) {\n axiosCloudAPI.defaults.headers['x-user-id'] = ctx.user.id;\n }\n return axiosCloudAPI.post<void>('/track', {\n event,\n payload,\n });\n },\n };\n}\n"],"names":["VERSION","cloudApiFactory","logger","token","localConfig","getLocalConfig","customHeaders","installId","packageJson","version","os","type","Intl","DateTimeFormat","resolvedOptions","locale","process","versions","node","axiosCloudAPI","axios","create","baseURL","apiConfig","apiBaseUrl","headers","defaults","Authorization","deploy","filePath","project","onUploadProgress","post","name","file","fse","createReadStream","targetEnvironment","createProject","nodeVersion","region","plan","response","projectName","data","id","environmentInternalName","status","getUserInfo","get","config","Error","error","debug","listProjects","listLinkProjects","listEnvironments","listLinkEnvironments","getProject","createTrial","strapiVersion","track","event","payload","ctx","getContext","user"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/services/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAItC,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAEnD;AAED,wBAAgB,UAAU,IAAI,UAAU,CAEvC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// This file will manage the CLI context state.
|
|
4
|
+
let ctx;
|
|
5
|
+
function setContext(newCtx) {
|
|
6
|
+
ctx = newCtx;
|
|
7
|
+
}
|
|
8
|
+
function getContext() {
|
|
9
|
+
return ctx;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
exports.getContext = getContext;
|
|
13
|
+
exports.setContext = setContext;
|
|
14
|
+
//# sourceMappingURL=context.js.map
|