{"version":3,"file":"action.mjs","sources":["../../src/create-project/action.ts"],"sourcesContent":["import { AxiosError } from 'axios';\nimport { defaults } from 'lodash/fp';\nimport {\n  CLIContext,\n  CloudApiService,\n  CloudCliConfig,\n  CreateProjectResponse,\n  ProjectAnswers,\n  ProjectInput,\n} from '../types';\nimport { cloudApiFactory, local, tokenServiceFactory } from '../services';\nimport { VERSION } from '../services/cli-api';\nimport { getProjectNameFromPackageJson } from './utils/get-project-name-from-pkg';\nimport { promptLogin } from '../login/action';\nimport {\n  getDefaultsFromQuestions,\n  getProjectNodeVersionDefault,\n  questionDefaultValuesMapper,\n} from './utils/project-questions.utils';\nimport { apiConfig } from '../config/api';\nimport { notificationServiceFactory } from '../services/notification';\nimport {\n  environmentCreationErrorFactory,\n  environmentErrorMessageFactory,\n} from '../utils/error-message-factories';\n\nasync function handleError(ctx: CLIContext, error: Error) {\n  const { logger } = ctx;\n  logger.debug(error);\n  if (error instanceof AxiosError) {\n    const errorMessage = typeof error.response?.data === 'string' ? error.response.data : null;\n    switch (error.response?.status) {\n      case 400:\n        logger.error(errorMessage || 'Invalid input. Please check your inputs and try again.');\n        return;\n      case 403:\n        logger.error(\n          errorMessage ||\n            'You do not have permission to create a project. Please contact support for assistance.'\n        );\n        return;\n      case 503:\n        logger.error(\n          'Strapi Cloud project creation is currently unavailable. Please try again later.'\n        );\n        return;\n      default:\n        if (errorMessage) {\n          logger.error(errorMessage);\n          throw error;\n        }\n        break;\n    }\n  }\n  logger.error(\n    'We encountered an issue while creating your project. Please try again in a moment. If the problem persists, contact support for assistance.'\n  );\n}\n\nasync function createProject(\n  ctx: CLIContext,\n  cloudApi: CloudApiService,\n  projectInput: ProjectInput,\n  token: string,\n  config: CloudCliConfig\n) {\n  const { logger } = ctx;\n  const projectSpinner = logger.spinner('Setting up your project...').start();\n  projectSpinner.indent = 1;\n  const notificationService = notificationServiceFactory(ctx);\n  const { waitForEnvironmentCreation, close } = notificationService(\n    `${apiConfig.apiBaseUrl}/${VERSION}/notifications`,\n    token,\n    config\n  );\n  let projectData: CreateProjectResponse;\n  try {\n    const { data } = await cloudApi.createProject(projectInput);\n    projectData = data;\n    await local.save({ project: data });\n    projectSpinner.succeed('Project created successfully!');\n  } catch (e: Error | unknown) {\n    projectSpinner.fail(`An error occurred while creating the project on Strapi Cloud.`);\n    close();\n    throw e;\n  }\n  if (config.featureFlags.asyncProjectCreationEnabled) {\n    const environmentSpinner = logger\n      .spinner('Setting up your environment... This may take a minute...')\n      .start();\n    environmentSpinner.indent = 1;\n    try {\n      await waitForEnvironmentCreation(projectData.environmentInternalName);\n      environmentSpinner.succeed('Environment created successfully!\\n');\n    } catch (e: Error | unknown) {\n      environmentSpinner.fail(\n        `An error occurred while creating the environment on Strapi Cloud.\\n`\n      );\n      const environmentErrorMessage = environmentErrorMessageFactory({\n        projectName: projectData.name,\n        firstLine: config.projectCreation.errors.environmentCreationFailed.firstLine,\n        secondLine: config.projectCreation.errors.environmentCreationFailed.secondLine,\n      });\n      logger.log(environmentCreationErrorFactory(environmentErrorMessage));\n      return;\n    }\n  }\n  close();\n  return projectData;\n}\n\nexport default async (ctx: CLIContext) => {\n  const { logger } = ctx;\n  const { getValidToken, eraseToken } = await tokenServiceFactory(ctx);\n\n  const token = await getValidToken(ctx, promptLogin);\n  if (!token) {\n    return;\n  }\n\n  const cloudApi = await cloudApiFactory(ctx, token);\n  const { data: config } = await cloudApi.config();\n  const projectName = await getProjectNameFromPackageJson(ctx);\n\n  const defaultAnswersMapper = questionDefaultValuesMapper({\n    name: projectName,\n    nodeVersion: getProjectNodeVersionDefault,\n  });\n  const questions = defaultAnswersMapper(config.projectCreation.questions);\n  const defaultValues = {\n    ...config.projectCreation.defaults,\n    ...getDefaultsFromQuestions(questions),\n  };\n\n  const projectAnswersDefaulted = defaults(defaultValues);\n  const { default: inquirer } = await import('inquirer');\n  const projectAnswers = await inquirer.prompt<ProjectAnswers>(questions);\n\n  const projectInput: ProjectInput = projectAnswersDefaulted(projectAnswers);\n\n  try {\n    return await createProject(ctx, cloudApi, projectInput, token, config);\n  } catch (e: Error | unknown) {\n    if (e instanceof AxiosError && e.response?.status === 401) {\n      logger.warn('Oops! Your session has expired. Please log in again to retry.');\n      await eraseToken();\n      if (await promptLogin(ctx)) {\n        return await createProject(ctx, cloudApi, projectInput, token, config);\n      }\n    } else {\n      await handleError(ctx, e as Error);\n    }\n  }\n};\n"],"names":["handleError","ctx","error","logger","debug","AxiosError","errorMessage","response","data","status","createProject","cloudApi","projectInput","token","config","projectSpinner","spinner","start","indent","notificationService","notificationServiceFactory","waitForEnvironmentCreation","close","apiConfig","apiBaseUrl","VERSION","projectData","local","project","succeed","e","fail","featureFlags","asyncProjectCreationEnabled","environmentSpinner","environmentInternalName","environmentErrorMessage","environmentErrorMessageFactory","projectName","name","firstLine","projectCreation","errors","environmentCreationFailed","secondLine","log","environmentCreationErrorFactory","getValidToken","eraseToken","tokenServiceFactory","promptLogin","cloudApiFactory","getProjectNameFromPackageJson","defaultAnswersMapper","questionDefaultValuesMapper","nodeVersion","getProjectNodeVersionDefault","questions","defaultValues","defaults","getDefaultsFromQuestions","projectAnswersDefaulted","default","inquirer","projectAnswers","prompt","warn"],"mappings":";;;;;;;;;;;;;;;;AA0BA,eAAeA,WAAAA,CAAYC,GAAe,EAAEC,KAAY,EAAA;IACtD,MAAM,EAAEC,MAAM,EAAE,GAAGF,GAAAA;AACnBE,IAAAA,MAAAA,CAAOC,KAAK,CAACF,KAAAA,CAAAA;AACb,IAAA,IAAIA,iBAAiBG,UAAAA,EAAY;QAC/B,MAAMC,YAAAA,GAAe,OAAOJ,KAAAA,CAAMK,QAAQ,EAAEC,IAAAA,KAAS,QAAA,GAAWN,KAAAA,CAAMK,QAAQ,CAACC,IAAI,GAAG,IAAA;QACtF,OAAQN,KAAAA,CAAMK,QAAQ,EAAEE,MAAAA;YACtB,KAAK,GAAA;gBACHN,MAAAA,CAAOD,KAAK,CAACI,YAAAA,IAAgB,wDAAA,CAAA;AAC7B,gBAAA;YACF,KAAK,GAAA;gBACHH,MAAAA,CAAOD,KAAK,CACVI,YAAAA,IACE,wFAAA,CAAA;AAEJ,gBAAA;YACF,KAAK,GAAA;AACHH,gBAAAA,MAAAA,CAAOD,KAAK,CACV,iFAAA,CAAA;AAEF,gBAAA;AACF,YAAA;AACE,gBAAA,IAAII,YAAAA,EAAc;AAChBH,oBAAAA,MAAAA,CAAOD,KAAK,CAACI,YAAAA,CAAAA;oBACb,MAAMJ,KAAAA;AACR,gBAAA;AACA,gBAAA;AACJ;AACF,IAAA;AACAC,IAAAA,MAAAA,CAAOD,KAAK,CACV,6IAAA,CAAA;AAEJ;AAEA,eAAeQ,aAAAA,CACbT,GAAe,EACfU,QAAyB,EACzBC,YAA0B,EAC1BC,KAAa,EACbC,MAAsB,EAAA;IAEtB,MAAM,EAAEX,MAAM,EAAE,GAAGF,GAAAA;AACnB,IAAA,MAAMc,cAAAA,GAAiBZ,MAAAA,CAAOa,OAAO,CAAC,8BAA8BC,KAAK,EAAA;AACzEF,IAAAA,cAAAA,CAAeG,MAAM,GAAG,CAAA;AACxB,IAAA,MAAMC,sBAAsBC,0BAAAA,CAA2BnB,GAAAA,CAAAA;AACvD,IAAA,MAAM,EAAEoB,0BAA0B,EAAEC,KAAK,EAAE,GAAGH,mBAAAA,CAC5C,CAAA,EAAGI,SAAAA,CAAUC,UAAU,CAAC,CAAC,EAAEC,QAAQ,cAAc,CAAC,EAClDZ,KAAAA,EACAC,MAAAA,CAAAA;IAEF,IAAIY,WAAAA;IACJ,IAAI;AACF,QAAA,MAAM,EAAElB,IAAI,EAAE,GAAG,MAAMG,QAAAA,CAASD,aAAa,CAACE,YAAAA,CAAAA;QAC9Cc,WAAAA,GAAclB,IAAAA;QACd,MAAMmB,IAAU,CAAC;YAAEC,OAAAA,EAASpB;AAAK,SAAA,CAAA;AACjCO,QAAAA,cAAAA,CAAec,OAAO,CAAC,+BAAA,CAAA;AACzB,IAAA,CAAA,CAAE,OAAOC,CAAAA,EAAoB;AAC3Bf,QAAAA,cAAAA,CAAegB,IAAI,CAAC,CAAC,6DAA6D,CAAC,CAAA;AACnFT,QAAAA,KAAAA,EAAAA;QACA,MAAMQ,CAAAA;AACR,IAAA;AACA,IAAA,IAAIhB,MAAAA,CAAOkB,YAAY,CAACC,2BAA2B,EAAE;AACnD,QAAA,MAAMC,kBAAAA,GAAqB/B,MAAAA,CACxBa,OAAO,CAAC,4DACRC,KAAK,EAAA;AACRiB,QAAAA,kBAAAA,CAAmBhB,MAAM,GAAG,CAAA;QAC5B,IAAI;YACF,MAAMG,0BAAAA,CAA2BK,YAAYS,uBAAuB,CAAA;AACpED,YAAAA,kBAAAA,CAAmBL,OAAO,CAAC,qCAAA,CAAA;AAC7B,QAAA,CAAA,CAAE,OAAOC,CAAAA,EAAoB;AAC3BI,YAAAA,kBAAAA,CAAmBH,IAAI,CACrB,CAAC,mEAAmE,CAAC,CAAA;AAEvE,YAAA,MAAMK,0BAA0BC,8BAAAA,CAA+B;AAC7DC,gBAAAA,WAAAA,EAAaZ,YAAYa,IAAI;AAC7BC,gBAAAA,SAAAA,EAAW1B,OAAO2B,eAAe,CAACC,MAAM,CAACC,yBAAyB,CAACH,SAAS;AAC5EI,gBAAAA,UAAAA,EAAY9B,OAAO2B,eAAe,CAACC,MAAM,CAACC,yBAAyB,CAACC;AACtE,aAAA,CAAA;YACAzC,MAAAA,CAAO0C,GAAG,CAACC,+BAAAA,CAAgCV,uBAAAA,CAAAA,CAAAA;AAC3C,YAAA;AACF,QAAA;AACF,IAAA;AACAd,IAAAA,KAAAA,EAAAA;IACA,OAAOI,WAAAA;AACT;AAEA,aAAe,CAAA,OAAOzB,GAAAA,GAAAA;IACpB,MAAM,EAAEE,MAAM,EAAE,GAAGF,GAAAA;AACnB,IAAA,MAAM,EAAE8C,aAAa,EAAEC,UAAU,EAAE,GAAG,MAAMC,mBAAAA,CAAoBhD,GAAAA,CAAAA;IAEhE,MAAMY,KAAAA,GAAQ,MAAMkC,aAAAA,CAAc9C,GAAAA,EAAKiD,WAAAA,CAAAA;AACvC,IAAA,IAAI,CAACrC,KAAAA,EAAO;AACV,QAAA;AACF,IAAA;IAEA,MAAMF,QAAAA,GAAW,MAAMwC,eAAAA,CAAgBlD,GAAAA,EAAKY,KAAAA,CAAAA;AAC5C,IAAA,MAAM,EAAEL,IAAAA,EAAMM,MAAM,EAAE,GAAG,MAAMH,SAASG,MAAM,EAAA;IAC9C,MAAMwB,WAAAA,GAAc,MAAMc,6BAAAA,CAA8BnD,GAAAA,CAAAA;AAExD,IAAA,MAAMoD,uBAAuBC,2BAAAA,CAA4B;QACvDf,IAAAA,EAAMD,WAAAA;QACNiB,WAAAA,EAAaC;AACf,KAAA,CAAA;AACA,IAAA,MAAMC,SAAAA,GAAYJ,oBAAAA,CAAqBvC,MAAAA,CAAO2B,eAAe,CAACgB,SAAS,CAAA;AACvE,IAAA,MAAMC,aAAAA,GAAgB;QACpB,GAAG5C,MAAAA,CAAO2B,eAAe,CAACkB,QAAQ;AAClC,QAAA,GAAGC,yBAAyBH,SAAAA;AAC9B,KAAA;AAEA,IAAA,MAAMI,0BAA0BF,QAAAA,CAASD,aAAAA,CAAAA;AACzC,IAAA,MAAM,EAAEI,OAAAA,EAASC,QAAQ,EAAE,GAAG,MAAM,OAAO,UAAA,CAAA;AAC3C,IAAA,MAAMC,cAAAA,GAAiB,MAAMD,QAAAA,CAASE,MAAM,CAAiBR,SAAAA,CAAAA;AAE7D,IAAA,MAAM7C,eAA6BiD,uBAAAA,CAAwBG,cAAAA,CAAAA;IAE3D,IAAI;AACF,QAAA,OAAO,MAAMtD,aAAAA,CAAcT,GAAAA,EAAKU,QAAAA,EAAUC,cAAcC,KAAAA,EAAOC,MAAAA,CAAAA;AACjE,IAAA,CAAA,CAAE,OAAOgB,CAAAA,EAAoB;AAC3B,QAAA,IAAIA,aAAazB,UAAAA,IAAcyB,CAAAA,CAAEvB,QAAQ,EAAEE,WAAW,GAAA,EAAK;AACzDN,YAAAA,MAAAA,CAAO+D,IAAI,CAAC,+DAAA,CAAA;YACZ,MAAMlB,UAAAA,EAAAA;YACN,IAAI,MAAME,YAAYjD,GAAAA,CAAAA,EAAM;AAC1B,gBAAA,OAAO,MAAMS,aAAAA,CAAcT,GAAAA,EAAKU,QAAAA,EAAUC,cAAcC,KAAAA,EAAOC,MAAAA,CAAAA;AACjE,YAAA;QACF,CAAA,MAAO;AACL,YAAA,MAAMd,YAAYC,GAAAA,EAAK6B,CAAAA,CAAAA;AACzB,QAAA;AACF,IAAA;AACF,CAAA;;;;"}