@strapi/cloud-cli 0.0.0-next.f6dca5adf05ef6bed9605a1535999ab0bbbf063e → 0.0.0-next.fb92031f3d90f3d2a2d191ba65725b6c8e329a5d

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.
Files changed (319) hide show
  1. package/dist/bin.d.ts.map +1 -0
  2. package/dist/bin.js +40 -171
  3. package/dist/bin.js.map +1 -1
  4. package/dist/bin.mjs +44 -0
  5. package/dist/bin.mjs.map +1 -0
  6. package/dist/cloud/command.d.ts +3 -0
  7. package/dist/cloud/command.d.ts.map +1 -0
  8. package/dist/cloud/command.js +14 -0
  9. package/dist/cloud/command.js.map +1 -0
  10. package/dist/cloud/command.mjs +12 -0
  11. package/dist/cloud/command.mjs.map +1 -0
  12. package/dist/config/api.d.ts.map +1 -0
  13. package/dist/config/api.js +11 -0
  14. package/dist/config/api.js.map +1 -0
  15. package/dist/config/api.mjs +9 -0
  16. package/dist/config/api.mjs.map +1 -0
  17. package/dist/{src/config → config}/local.d.ts +1 -1
  18. package/dist/config/local.d.ts.map +1 -0
  19. package/dist/config/local.js +60 -0
  20. package/dist/config/local.js.map +1 -0
  21. package/dist/config/local.mjs +55 -0
  22. package/dist/config/local.mjs.map +1 -0
  23. package/dist/create-project/action.d.ts.map +1 -0
  24. package/dist/create-project/action.js +95 -0
  25. package/dist/create-project/action.js.map +1 -0
  26. package/dist/create-project/action.mjs +93 -0
  27. package/dist/create-project/action.mjs.map +1 -0
  28. package/dist/create-project/command.d.ts.map +1 -0
  29. package/dist/create-project/command.js +14 -0
  30. package/dist/create-project/command.js.map +1 -0
  31. package/dist/create-project/command.mjs +12 -0
  32. package/dist/create-project/command.mjs.map +1 -0
  33. package/dist/create-project/index.d.ts.map +1 -0
  34. package/dist/create-project/index.js +18 -0
  35. package/dist/create-project/index.js.map +1 -0
  36. package/dist/create-project/index.mjs +12 -0
  37. package/dist/create-project/index.mjs.map +1 -0
  38. package/dist/create-project/utils/get-project-name-from-pkg.d.ts.map +1 -0
  39. package/dist/create-project/utils/get-project-name-from-pkg.js +15 -0
  40. package/dist/create-project/utils/get-project-name-from-pkg.js.map +1 -0
  41. package/dist/create-project/utils/get-project-name-from-pkg.mjs +13 -0
  42. package/dist/create-project/utils/get-project-name-from-pkg.mjs.map +1 -0
  43. package/dist/create-project/utils/project-questions.utils.d.ts.map +1 -0
  44. package/dist/create-project/utils/project-questions.utils.js +63 -0
  45. package/dist/create-project/utils/project-questions.utils.js.map +1 -0
  46. package/dist/create-project/utils/project-questions.utils.mjs +59 -0
  47. package/dist/create-project/utils/project-questions.utils.mjs.map +1 -0
  48. package/dist/deploy-project/action.d.ts +8 -0
  49. package/dist/deploy-project/action.d.ts.map +1 -0
  50. package/dist/deploy-project/action.js +287 -0
  51. package/dist/deploy-project/action.js.map +1 -0
  52. package/dist/deploy-project/action.mjs +266 -0
  53. package/dist/deploy-project/action.mjs.map +1 -0
  54. package/dist/deploy-project/command.d.ts.map +1 -0
  55. package/dist/deploy-project/command.js +14 -0
  56. package/dist/deploy-project/command.js.map +1 -0
  57. package/dist/deploy-project/command.mjs +12 -0
  58. package/dist/deploy-project/command.mjs.map +1 -0
  59. package/dist/deploy-project/index.d.ts.map +1 -0
  60. package/dist/deploy-project/index.js +18 -0
  61. package/dist/deploy-project/index.js.map +1 -0
  62. package/dist/deploy-project/index.mjs +12 -0
  63. package/dist/deploy-project/index.mjs.map +1 -0
  64. package/dist/environment/command.d.ts +3 -0
  65. package/dist/environment/command.d.ts.map +1 -0
  66. package/dist/environment/command.js +15 -0
  67. package/dist/environment/command.js.map +1 -0
  68. package/dist/environment/command.mjs +13 -0
  69. package/dist/environment/command.mjs.map +1 -0
  70. package/dist/environment/link/action.d.ts.map +1 -0
  71. package/dist/environment/link/action.js +117 -0
  72. package/dist/environment/link/action.js.map +1 -0
  73. package/dist/environment/link/action.mjs +115 -0
  74. package/dist/environment/link/action.mjs.map +1 -0
  75. package/dist/environment/link/command.d.ts.map +1 -0
  76. package/dist/environment/link/command.js +13 -0
  77. package/dist/environment/link/command.js.map +1 -0
  78. package/dist/environment/link/command.mjs +11 -0
  79. package/dist/environment/link/command.mjs.map +1 -0
  80. package/dist/environment/link/index.d.ts.map +1 -0
  81. package/dist/environment/link/index.js +18 -0
  82. package/dist/environment/link/index.js.map +1 -0
  83. package/dist/environment/link/index.mjs +12 -0
  84. package/dist/environment/link/index.mjs.map +1 -0
  85. package/dist/environment/list/action.d.ts +4 -0
  86. package/dist/environment/list/action.d.ts.map +1 -0
  87. package/dist/environment/list/action.js +57 -0
  88. package/dist/environment/list/action.js.map +1 -0
  89. package/dist/environment/list/action.mjs +55 -0
  90. package/dist/environment/list/action.mjs.map +1 -0
  91. package/dist/environment/list/command.d.ts +4 -0
  92. package/dist/environment/list/command.d.ts.map +1 -0
  93. package/dist/environment/list/command.js +13 -0
  94. package/dist/environment/list/command.js.map +1 -0
  95. package/dist/environment/list/command.mjs +11 -0
  96. package/dist/environment/list/command.mjs.map +1 -0
  97. package/dist/environment/list/index.d.ts +7 -0
  98. package/dist/environment/list/index.d.ts.map +1 -0
  99. package/dist/environment/list/index.js +18 -0
  100. package/dist/environment/list/index.js.map +1 -0
  101. package/dist/environment/list/index.mjs +12 -0
  102. package/dist/environment/list/index.mjs.map +1 -0
  103. package/dist/{src/index.d.ts → index.d.ts} +1 -0
  104. package/dist/index.d.ts.map +1 -0
  105. package/dist/index.js +56 -1670
  106. package/dist/index.js.map +1 -1
  107. package/dist/index.mjs +55 -1615
  108. package/dist/index.mjs.map +1 -1
  109. package/dist/link/action.d.ts.map +1 -0
  110. package/dist/link/action.js +146 -0
  111. package/dist/link/action.js.map +1 -0
  112. package/dist/link/action.mjs +144 -0
  113. package/dist/link/action.mjs.map +1 -0
  114. package/dist/link/command.d.ts.map +1 -0
  115. package/dist/link/command.js +13 -0
  116. package/dist/link/command.js.map +1 -0
  117. package/dist/link/command.mjs +11 -0
  118. package/dist/link/command.mjs.map +1 -0
  119. package/dist/link/index.d.ts.map +1 -0
  120. package/dist/link/index.js +18 -0
  121. package/dist/link/index.js.map +1 -0
  122. package/dist/link/index.mjs +12 -0
  123. package/dist/link/index.mjs.map +1 -0
  124. package/dist/list-projects/action.d.ts.map +1 -0
  125. package/dist/list-projects/action.js +34 -0
  126. package/dist/list-projects/action.js.map +1 -0
  127. package/dist/list-projects/action.mjs +32 -0
  128. package/dist/list-projects/action.mjs.map +1 -0
  129. package/dist/list-projects/command.d.ts.map +1 -0
  130. package/dist/list-projects/command.js +13 -0
  131. package/dist/list-projects/command.js.map +1 -0
  132. package/dist/list-projects/command.mjs +11 -0
  133. package/dist/list-projects/command.mjs.map +1 -0
  134. package/dist/list-projects/index.d.ts.map +1 -0
  135. package/dist/list-projects/index.js +18 -0
  136. package/dist/list-projects/index.js.map +1 -0
  137. package/dist/list-projects/index.mjs +12 -0
  138. package/dist/list-projects/index.mjs.map +1 -0
  139. package/dist/login/action.d.ts.map +1 -0
  140. package/dist/login/action.js +177 -0
  141. package/dist/login/action.js.map +1 -0
  142. package/dist/login/action.mjs +172 -0
  143. package/dist/login/action.mjs.map +1 -0
  144. package/dist/login/command.d.ts.map +1 -0
  145. package/dist/login/command.js +14 -0
  146. package/dist/login/command.js.map +1 -0
  147. package/dist/login/command.mjs +12 -0
  148. package/dist/login/command.mjs.map +1 -0
  149. package/dist/login/index.d.ts.map +1 -0
  150. package/dist/login/index.js +18 -0
  151. package/dist/login/index.js.map +1 -0
  152. package/dist/login/index.mjs +12 -0
  153. package/dist/login/index.mjs.map +1 -0
  154. package/dist/logout/action.d.ts.map +1 -0
  155. package/dist/logout/action.js +46 -0
  156. package/dist/logout/action.js.map +1 -0
  157. package/dist/logout/action.mjs +44 -0
  158. package/dist/logout/action.mjs.map +1 -0
  159. package/dist/logout/command.d.ts.map +1 -0
  160. package/dist/logout/command.js +14 -0
  161. package/dist/logout/command.js.map +1 -0
  162. package/dist/logout/command.mjs +12 -0
  163. package/dist/logout/command.mjs.map +1 -0
  164. package/dist/logout/index.d.ts.map +1 -0
  165. package/dist/logout/index.js +18 -0
  166. package/dist/logout/index.js.map +1 -0
  167. package/dist/logout/index.mjs +12 -0
  168. package/dist/logout/index.mjs.map +1 -0
  169. package/dist/package.json.js +129 -0
  170. package/dist/package.json.js.map +1 -0
  171. package/dist/package.json.mjs +105 -0
  172. package/dist/package.json.mjs.map +1 -0
  173. package/dist/services/build-logs.d.ts.map +1 -0
  174. package/dist/services/build-logs.js +67 -0
  175. package/dist/services/build-logs.js.map +1 -0
  176. package/dist/services/build-logs.mjs +65 -0
  177. package/dist/services/build-logs.mjs.map +1 -0
  178. package/dist/{src/services → services}/cli-api.d.ts +21 -3
  179. package/dist/services/cli-api.d.ts.map +1 -0
  180. package/dist/services/cli-api.js +146 -0
  181. package/dist/services/cli-api.js.map +1 -0
  182. package/dist/services/cli-api.mjs +143 -0
  183. package/dist/services/cli-api.mjs.map +1 -0
  184. package/dist/services/index.d.ts.map +1 -0
  185. package/dist/services/index.js +14 -0
  186. package/dist/services/index.js.map +1 -0
  187. package/dist/services/index.mjs +6 -0
  188. package/dist/services/index.mjs.map +1 -0
  189. package/dist/services/logger.d.ts.map +1 -0
  190. package/dist/services/logger.js +128 -0
  191. package/dist/services/logger.js.map +1 -0
  192. package/dist/services/logger.mjs +107 -0
  193. package/dist/services/logger.mjs.map +1 -0
  194. package/dist/services/notification.d.ts.map +1 -0
  195. package/dist/services/notification.js +37 -0
  196. package/dist/services/notification.js.map +1 -0
  197. package/dist/services/notification.mjs +35 -0
  198. package/dist/services/notification.mjs.map +1 -0
  199. package/dist/services/strapi-info-save.d.ts +25 -0
  200. package/dist/services/strapi-info-save.d.ts.map +1 -0
  201. package/dist/services/strapi-info-save.js +53 -0
  202. package/dist/services/strapi-info-save.js.map +1 -0
  203. package/dist/services/strapi-info-save.mjs +47 -0
  204. package/dist/services/strapi-info-save.mjs.map +1 -0
  205. package/dist/services/token.d.ts.map +1 -0
  206. package/dist/services/token.js +126 -0
  207. package/dist/services/token.js.map +1 -0
  208. package/dist/services/token.mjs +124 -0
  209. package/dist/services/token.mjs.map +1 -0
  210. package/dist/{src/types.d.ts → types.d.ts} +3 -0
  211. package/dist/types.d.ts.map +1 -0
  212. package/dist/utils/analytics.d.ts.map +1 -0
  213. package/dist/utils/analytics.js +12 -0
  214. package/dist/utils/analytics.js.map +1 -0
  215. package/dist/utils/analytics.mjs +10 -0
  216. package/dist/utils/analytics.mjs.map +1 -0
  217. package/dist/utils/compress-files.d.ts.map +1 -0
  218. package/dist/utils/compress-files.js +102 -0
  219. package/dist/utils/compress-files.js.map +1 -0
  220. package/dist/utils/compress-files.mjs +78 -0
  221. package/dist/utils/compress-files.mjs.map +1 -0
  222. package/dist/utils/get-local-config.d.ts +6 -0
  223. package/dist/utils/get-local-config.d.ts.map +1 -0
  224. package/dist/utils/get-local-config.js +37 -0
  225. package/dist/utils/get-local-config.js.map +1 -0
  226. package/dist/utils/get-local-config.mjs +34 -0
  227. package/dist/utils/get-local-config.mjs.map +1 -0
  228. package/dist/utils/helpers.d.ts.map +1 -0
  229. package/dist/utils/helpers.js +33 -0
  230. package/dist/utils/helpers.js.map +1 -0
  231. package/dist/utils/helpers.mjs +31 -0
  232. package/dist/utils/helpers.mjs.map +1 -0
  233. package/dist/utils/pkg.d.ts.map +1 -0
  234. package/dist/utils/pkg.js +65 -0
  235. package/dist/utils/pkg.js.map +1 -0
  236. package/dist/utils/pkg.mjs +43 -0
  237. package/dist/utils/pkg.mjs.map +1 -0
  238. package/dist/utils/tests/compress-files.test.d.ts.map +1 -0
  239. package/package.json +12 -11
  240. package/dist/src/bin.d.ts.map +0 -1
  241. package/dist/src/cloud/command.d.ts +0 -3
  242. package/dist/src/cloud/command.d.ts.map +0 -1
  243. package/dist/src/config/api.d.ts.map +0 -1
  244. package/dist/src/config/local.d.ts.map +0 -1
  245. package/dist/src/create-project/action.d.ts.map +0 -1
  246. package/dist/src/create-project/command.d.ts.map +0 -1
  247. package/dist/src/create-project/index.d.ts.map +0 -1
  248. package/dist/src/create-project/utils/get-project-name-from-pkg.d.ts.map +0 -1
  249. package/dist/src/create-project/utils/project-questions.utils.d.ts.map +0 -1
  250. package/dist/src/deploy-project/action.d.ts.map +0 -1
  251. package/dist/src/deploy-project/command.d.ts.map +0 -1
  252. package/dist/src/deploy-project/index.d.ts.map +0 -1
  253. package/dist/src/environment/command.d.ts +0 -3
  254. package/dist/src/environment/command.d.ts.map +0 -1
  255. package/dist/src/environment/list/action.d.ts.map +0 -1
  256. package/dist/src/environment/list/command.d.ts.map +0 -1
  257. package/dist/src/environment/list/index.d.ts.map +0 -1
  258. package/dist/src/index.d.ts.map +0 -1
  259. package/dist/src/link/action.d.ts.map +0 -1
  260. package/dist/src/link/command.d.ts.map +0 -1
  261. package/dist/src/link/index.d.ts.map +0 -1
  262. package/dist/src/list-projects/action.d.ts.map +0 -1
  263. package/dist/src/list-projects/command.d.ts.map +0 -1
  264. package/dist/src/list-projects/index.d.ts.map +0 -1
  265. package/dist/src/login/action.d.ts.map +0 -1
  266. package/dist/src/login/command.d.ts.map +0 -1
  267. package/dist/src/login/index.d.ts.map +0 -1
  268. package/dist/src/logout/action.d.ts +0 -4
  269. package/dist/src/logout/action.d.ts.map +0 -1
  270. package/dist/src/logout/command.d.ts.map +0 -1
  271. package/dist/src/logout/index.d.ts.map +0 -1
  272. package/dist/src/services/build-logs.d.ts.map +0 -1
  273. package/dist/src/services/cli-api.d.ts.map +0 -1
  274. package/dist/src/services/index.d.ts.map +0 -1
  275. package/dist/src/services/logger.d.ts.map +0 -1
  276. package/dist/src/services/notification.d.ts.map +0 -1
  277. package/dist/src/services/strapi-info-save.d.ts +0 -12
  278. package/dist/src/services/strapi-info-save.d.ts.map +0 -1
  279. package/dist/src/services/token.d.ts.map +0 -1
  280. package/dist/src/types.d.ts.map +0 -1
  281. package/dist/src/utils/analytics.d.ts.map +0 -1
  282. package/dist/src/utils/compress-files.d.ts.map +0 -1
  283. package/dist/src/utils/helpers.d.ts.map +0 -1
  284. package/dist/src/utils/pkg.d.ts.map +0 -1
  285. package/dist/src/utils/tests/compress-files.test.d.ts.map +0 -1
  286. /package/dist/{src/bin.d.ts → bin.d.ts} +0 -0
  287. /package/dist/{src/config → config}/api.d.ts +0 -0
  288. /package/dist/{src/create-project → create-project}/action.d.ts +0 -0
  289. /package/dist/{src/create-project → create-project}/command.d.ts +0 -0
  290. /package/dist/{src/create-project → create-project}/index.d.ts +0 -0
  291. /package/dist/{src/create-project → create-project}/utils/get-project-name-from-pkg.d.ts +0 -0
  292. /package/dist/{src/create-project → create-project}/utils/project-questions.utils.d.ts +0 -0
  293. /package/dist/{src/deploy-project → deploy-project}/command.d.ts +0 -0
  294. /package/dist/{src/deploy-project → deploy-project}/index.d.ts +0 -0
  295. /package/dist/{src/environment/list → environment/link}/action.d.ts +0 -0
  296. /package/dist/{src/environment/list → environment/link}/command.d.ts +0 -0
  297. /package/dist/{src/environment/list → environment/link}/index.d.ts +0 -0
  298. /package/dist/{src/deploy-project → link}/action.d.ts +0 -0
  299. /package/dist/{src/link → link}/command.d.ts +0 -0
  300. /package/dist/{src/link → link}/index.d.ts +0 -0
  301. /package/dist/{src/link → list-projects}/action.d.ts +0 -0
  302. /package/dist/{src/list-projects → list-projects}/command.d.ts +0 -0
  303. /package/dist/{src/list-projects → list-projects}/index.d.ts +0 -0
  304. /package/dist/{src/login → login}/action.d.ts +0 -0
  305. /package/dist/{src/login → login}/command.d.ts +0 -0
  306. /package/dist/{src/login → login}/index.d.ts +0 -0
  307. /package/dist/{src/list-projects → logout}/action.d.ts +0 -0
  308. /package/dist/{src/logout → logout}/command.d.ts +0 -0
  309. /package/dist/{src/logout → logout}/index.d.ts +0 -0
  310. /package/dist/{src/services → services}/build-logs.d.ts +0 -0
  311. /package/dist/{src/services → services}/index.d.ts +0 -0
  312. /package/dist/{src/services → services}/logger.d.ts +0 -0
  313. /package/dist/{src/services → services}/notification.d.ts +0 -0
  314. /package/dist/{src/services → services}/token.d.ts +0 -0
  315. /package/dist/{src/utils → utils}/analytics.d.ts +0 -0
  316. /package/dist/{src/utils → utils}/compress-files.d.ts +0 -0
  317. /package/dist/{src/utils → utils}/helpers.d.ts +0 -0
  318. /package/dist/{src/utils → utils}/pkg.d.ts +0 -0
  319. /package/dist/{src/utils → utils}/tests/compress-files.test.d.ts +0 -0
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var helpers = require('../utils/helpers.js');
4
+ var action = require('./action.js');
5
+
6
+ /**
7
+ * `$ link local directory to project of the cloud`
8
+ */ const command = ({ command, ctx })=>{
9
+ command.command('cloud:link').alias('link').description('Link a local directory to a Strapi Cloud project').option('-d, --debug', 'Enable debugging mode with verbose logs').option('-s, --silent', "Don't log anything").action(()=>helpers.runAction('link', action)(ctx));
10
+ };
11
+
12
+ module.exports = command;
13
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sources":["../../src/link/command.ts"],"sourcesContent":["import { type StrapiCloudCommand } from '../types';\nimport { runAction } from '../utils/helpers';\nimport action from './action';\n\n/**\n * `$ link local directory to project of the cloud`\n */\nconst command: StrapiCloudCommand = ({ command, ctx }) => {\n command\n .command('cloud:link')\n .alias('link')\n .description('Link a local directory to a Strapi Cloud project')\n .option('-d, --debug', 'Enable debugging mode with verbose logs')\n .option('-s, --silent', \"Don't log anything\")\n .action(() => runAction('link', action)(ctx));\n};\n\nexport default command;\n"],"names":["command","ctx","alias","description","option","action","runAction"],"mappings":";;;;;AAIA;;AAEC,UACKA,OAA8B,GAAA,CAAC,EAAEA,OAAO,EAAEC,GAAG,EAAE,GAAA;IACnDD,OACGA,CAAAA,OAAO,CAAC,YACRE,CAAAA,CAAAA,KAAK,CAAC,MACNC,CAAAA,CAAAA,WAAW,CAAC,kDAAA,CAAA,CACZC,MAAM,CAAC,eAAe,yCACtBA,CAAAA,CAAAA,MAAM,CAAC,cAAgB,EAAA,oBAAA,CAAA,CACvBC,MAAM,CAAC,IAAMC,iBAAU,CAAA,MAAA,EAAQD,MAAQJ,CAAAA,CAAAA,GAAAA,CAAAA,CAAAA;AAC5C;;;;"}
@@ -0,0 +1,11 @@
1
+ import { runAction } from '../utils/helpers.mjs';
2
+ import action from './action.mjs';
3
+
4
+ /**
5
+ * `$ link local directory to project of the cloud`
6
+ */ const command = ({ command, ctx })=>{
7
+ command.command('cloud:link').alias('link').description('Link a local directory to a Strapi Cloud project').option('-d, --debug', 'Enable debugging mode with verbose logs').option('-s, --silent', "Don't log anything").action(()=>runAction('link', action)(ctx));
8
+ };
9
+
10
+ export { command as default };
11
+ //# sourceMappingURL=command.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.mjs","sources":["../../src/link/command.ts"],"sourcesContent":["import { type StrapiCloudCommand } from '../types';\nimport { runAction } from '../utils/helpers';\nimport action from './action';\n\n/**\n * `$ link local directory to project of the cloud`\n */\nconst command: StrapiCloudCommand = ({ command, ctx }) => {\n command\n .command('cloud:link')\n .alias('link')\n .description('Link a local directory to a Strapi Cloud project')\n .option('-d, --debug', 'Enable debugging mode with verbose logs')\n .option('-s, --silent', \"Don't log anything\")\n .action(() => runAction('link', action)(ctx));\n};\n\nexport default command;\n"],"names":["command","ctx","alias","description","option","action","runAction"],"mappings":";;;AAIA;;AAEC,UACKA,OAA8B,GAAA,CAAC,EAAEA,OAAO,EAAEC,GAAG,EAAE,GAAA;IACnDD,OACGA,CAAAA,OAAO,CAAC,YACRE,CAAAA,CAAAA,KAAK,CAAC,MACNC,CAAAA,CAAAA,WAAW,CAAC,kDAAA,CAAA,CACZC,MAAM,CAAC,eAAe,yCACtBA,CAAAA,CAAAA,MAAM,CAAC,cAAgB,EAAA,oBAAA,CAAA,CACvBC,MAAM,CAAC,IAAMC,SAAU,CAAA,MAAA,EAAQD,MAAQJ,CAAAA,CAAAA,GAAAA,CAAAA,CAAAA;AAC5C;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/link/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;;AAE3B,wBAK4B"}
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var action = require('./action.js');
6
+ var command = require('./command.js');
7
+
8
+ var link = {
9
+ name: 'link-project',
10
+ description: 'Link a local directory to a Strapi Cloud project',
11
+ action,
12
+ command
13
+ };
14
+
15
+ exports.action = action;
16
+ exports.command = command;
17
+ exports.default = link;
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/link/index.ts"],"sourcesContent":["import action from './action';\nimport command from './command';\nimport type { StrapiCloudCommandInfo } from '../types';\n\nexport { action, command };\n\nexport default {\n name: 'link-project',\n description: 'Link a local directory to a Strapi Cloud project',\n action,\n command,\n} as StrapiCloudCommandInfo;\n"],"names":["name","description","action","command"],"mappings":";;;;;;;AAMA,WAAe;IACbA,IAAM,EAAA,cAAA;IACNC,WAAa,EAAA,kDAAA;AACbC,IAAAA,MAAAA;AACAC,IAAAA;AACF,CAA4B;;;;;;"}
@@ -0,0 +1,12 @@
1
+ import action from './action.mjs';
2
+ import command from './command.mjs';
3
+
4
+ var link = {
5
+ name: 'link-project',
6
+ description: 'Link a local directory to a Strapi Cloud project',
7
+ action,
8
+ command
9
+ };
10
+
11
+ export { action, command, link as default };
12
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../src/link/index.ts"],"sourcesContent":["import action from './action';\nimport command from './command';\nimport type { StrapiCloudCommandInfo } from '../types';\n\nexport { action, command };\n\nexport default {\n name: 'link-project',\n description: 'Link a local directory to a Strapi Cloud project',\n action,\n command,\n} as StrapiCloudCommandInfo;\n"],"names":["name","description","action","command"],"mappings":";;;AAMA,WAAe;IACbA,IAAM,EAAA,cAAA;IACNC,WAAa,EAAA,kDAAA;AACbC,IAAAA,MAAAA;AACAC,IAAAA;AACF,CAA4B;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/list-projects/action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;8BAIhB,UAAU;AAArC,wBAsBE"}
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ var cliApi = require('../services/cli-api.js');
4
+ require('fs-extra');
5
+ require('path');
6
+ require('lodash');
7
+ var token = require('../services/token.js');
8
+ require('chalk');
9
+ require('fast-safe-stringify');
10
+ require('ora');
11
+ require('cli-progress');
12
+ var action$1 = require('../login/action.js');
13
+
14
+ var action = (async (ctx)=>{
15
+ const { getValidToken } = await token.tokenServiceFactory(ctx);
16
+ const token$1 = await getValidToken(ctx, action$1.promptLogin);
17
+ const { logger } = ctx;
18
+ if (!token$1) {
19
+ return;
20
+ }
21
+ const cloudApiService = await cliApi.cloudApiFactory(ctx, token$1);
22
+ const spinner = logger.spinner('Fetching your projects...').start();
23
+ try {
24
+ const { data: { data: projectList } } = await cloudApiService.listProjects();
25
+ spinner.succeed();
26
+ logger.log(projectList);
27
+ } catch (e) {
28
+ ctx.logger.debug('Failed to list projects', e);
29
+ spinner.fail('An error occurred while fetching your projects from Strapi Cloud.');
30
+ }
31
+ });
32
+
33
+ module.exports = action;
34
+ //# sourceMappingURL=action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.js","sources":["../../src/list-projects/action.ts"],"sourcesContent":["import type { CLIContext } from '../types';\nimport { cloudApiFactory, tokenServiceFactory } from '../services';\nimport { promptLogin } from '../login/action';\n\nexport default async (ctx: CLIContext) => {\n const { getValidToken } = await tokenServiceFactory(ctx);\n const token = await getValidToken(ctx, promptLogin);\n const { logger } = ctx;\n\n if (!token) {\n return;\n }\n\n const cloudApiService = await cloudApiFactory(ctx, token);\n const spinner = logger.spinner('Fetching your projects...').start();\n\n try {\n const {\n data: { data: projectList },\n } = await cloudApiService.listProjects();\n spinner.succeed();\n logger.log(projectList);\n } catch (e) {\n ctx.logger.debug('Failed to list projects', e);\n spinner.fail('An error occurred while fetching your projects from Strapi Cloud.');\n }\n};\n"],"names":["ctx","getValidToken","tokenServiceFactory","token","promptLogin","logger","cloudApiService","cloudApiFactory","spinner","start","data","projectList","listProjects","succeed","log","e","debug","fail"],"mappings":";;;;;;;;;;;;;AAIA,aAAe,CAAA,OAAOA,GAAAA,GAAAA;AACpB,IAAA,MAAM,EAAEC,aAAa,EAAE,GAAG,MAAMC,yBAAoBF,CAAAA,GAAAA,CAAAA;IACpD,MAAMG,OAAAA,GAAQ,MAAMF,aAAAA,CAAcD,GAAKI,EAAAA,oBAAAA,CAAAA;IACvC,MAAM,EAAEC,MAAM,EAAE,GAAGL,GAAAA;AAEnB,IAAA,IAAI,CAACG,OAAO,EAAA;AACV,QAAA;AACF;IAEA,MAAMG,eAAAA,GAAkB,MAAMC,sBAAAA,CAAgBP,GAAKG,EAAAA,OAAAA,CAAAA;AACnD,IAAA,MAAMK,OAAUH,GAAAA,MAAAA,CAAOG,OAAO,CAAC,6BAA6BC,KAAK,EAAA;IAEjE,IAAI;QACF,MAAM,EACJC,IAAM,EAAA,EAAEA,IAAMC,EAAAA,WAAW,EAAE,EAC5B,GAAG,MAAML,eAAAA,CAAgBM,YAAY,EAAA;AACtCJ,QAAAA,OAAAA,CAAQK,OAAO,EAAA;AACfR,QAAAA,MAAAA,CAAOS,GAAG,CAACH,WAAAA,CAAAA;AACb,KAAA,CAAE,OAAOI,CAAG,EAAA;AACVf,QAAAA,GAAAA,CAAIK,MAAM,CAACW,KAAK,CAAC,yBAA2BD,EAAAA,CAAAA,CAAAA;AAC5CP,QAAAA,OAAAA,CAAQS,IAAI,CAAC,mEAAA,CAAA;AACf;AACF,CAAA;;;;"}
@@ -0,0 +1,32 @@
1
+ import { cloudApiFactory } from '../services/cli-api.mjs';
2
+ import 'fs-extra';
3
+ import 'path';
4
+ import 'lodash';
5
+ import { tokenServiceFactory } from '../services/token.mjs';
6
+ import 'chalk';
7
+ import 'fast-safe-stringify';
8
+ import 'ora';
9
+ import 'cli-progress';
10
+ import { promptLogin } from '../login/action.mjs';
11
+
12
+ var action = (async (ctx)=>{
13
+ const { getValidToken } = await tokenServiceFactory(ctx);
14
+ const token = await getValidToken(ctx, promptLogin);
15
+ const { logger } = ctx;
16
+ if (!token) {
17
+ return;
18
+ }
19
+ const cloudApiService = await cloudApiFactory(ctx, token);
20
+ const spinner = logger.spinner('Fetching your projects...').start();
21
+ try {
22
+ const { data: { data: projectList } } = await cloudApiService.listProjects();
23
+ spinner.succeed();
24
+ logger.log(projectList);
25
+ } catch (e) {
26
+ ctx.logger.debug('Failed to list projects', e);
27
+ spinner.fail('An error occurred while fetching your projects from Strapi Cloud.');
28
+ }
29
+ });
30
+
31
+ export { action as default };
32
+ //# sourceMappingURL=action.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.mjs","sources":["../../src/list-projects/action.ts"],"sourcesContent":["import type { CLIContext } from '../types';\nimport { cloudApiFactory, tokenServiceFactory } from '../services';\nimport { promptLogin } from '../login/action';\n\nexport default async (ctx: CLIContext) => {\n const { getValidToken } = await tokenServiceFactory(ctx);\n const token = await getValidToken(ctx, promptLogin);\n const { logger } = ctx;\n\n if (!token) {\n return;\n }\n\n const cloudApiService = await cloudApiFactory(ctx, token);\n const spinner = logger.spinner('Fetching your projects...').start();\n\n try {\n const {\n data: { data: projectList },\n } = await cloudApiService.listProjects();\n spinner.succeed();\n logger.log(projectList);\n } catch (e) {\n ctx.logger.debug('Failed to list projects', e);\n spinner.fail('An error occurred while fetching your projects from Strapi Cloud.');\n }\n};\n"],"names":["ctx","getValidToken","tokenServiceFactory","token","promptLogin","logger","cloudApiService","cloudApiFactory","spinner","start","data","projectList","listProjects","succeed","log","e","debug","fail"],"mappings":";;;;;;;;;;;AAIA,aAAe,CAAA,OAAOA,GAAAA,GAAAA;AACpB,IAAA,MAAM,EAAEC,aAAa,EAAE,GAAG,MAAMC,mBAAoBF,CAAAA,GAAAA,CAAAA;IACpD,MAAMG,KAAAA,GAAQ,MAAMF,aAAAA,CAAcD,GAAKI,EAAAA,WAAAA,CAAAA;IACvC,MAAM,EAAEC,MAAM,EAAE,GAAGL,GAAAA;AAEnB,IAAA,IAAI,CAACG,KAAO,EAAA;AACV,QAAA;AACF;IAEA,MAAMG,eAAAA,GAAkB,MAAMC,eAAAA,CAAgBP,GAAKG,EAAAA,KAAAA,CAAAA;AACnD,IAAA,MAAMK,OAAUH,GAAAA,MAAAA,CAAOG,OAAO,CAAC,6BAA6BC,KAAK,EAAA;IAEjE,IAAI;QACF,MAAM,EACJC,IAAM,EAAA,EAAEA,IAAMC,EAAAA,WAAW,EAAE,EAC5B,GAAG,MAAML,eAAAA,CAAgBM,YAAY,EAAA;AACtCJ,QAAAA,OAAAA,CAAQK,OAAO,EAAA;AACfR,QAAAA,MAAAA,CAAOS,GAAG,CAACH,WAAAA,CAAAA;AACb,KAAA,CAAE,OAAOI,CAAG,EAAA;AACVf,QAAAA,GAAAA,CAAIK,MAAM,CAACW,KAAK,CAAC,yBAA2BD,EAAAA,CAAAA,CAAAA;AAC5CP,QAAAA,OAAAA,CAAQS,IAAI,CAAC,mEAAA,CAAA;AACf;AACF,CAAA;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/list-projects/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAInD;;GAEG;AACH,QAAA,MAAM,OAAO,EAAE,kBAQd,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var helpers = require('../utils/helpers.js');
4
+ var action = require('./action.js');
5
+
6
+ /**
7
+ * `$ list project from the cloud`
8
+ */ const command = ({ command, ctx })=>{
9
+ command.command('cloud:projects').alias('projects').description('List Strapi Cloud projects').option('-d, --debug', 'Enable debugging mode with verbose logs').option('-s, --silent', "Don't log anything").action(()=>helpers.runAction('projects', action)(ctx));
10
+ };
11
+
12
+ module.exports = command;
13
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sources":["../../src/list-projects/command.ts"],"sourcesContent":["import { type StrapiCloudCommand } from '../types';\nimport { runAction } from '../utils/helpers';\nimport action from './action';\n\n/**\n * `$ list project from the cloud`\n */\nconst command: StrapiCloudCommand = ({ command, ctx }) => {\n command\n .command('cloud:projects')\n .alias('projects')\n .description('List Strapi Cloud projects')\n .option('-d, --debug', 'Enable debugging mode with verbose logs')\n .option('-s, --silent', \"Don't log anything\")\n .action(() => runAction('projects', action)(ctx));\n};\n\nexport default command;\n"],"names":["command","ctx","alias","description","option","action","runAction"],"mappings":";;;;;AAIA;;AAEC,UACKA,OAA8B,GAAA,CAAC,EAAEA,OAAO,EAAEC,GAAG,EAAE,GAAA;IACnDD,OACGA,CAAAA,OAAO,CAAC,gBACRE,CAAAA,CAAAA,KAAK,CAAC,UACNC,CAAAA,CAAAA,WAAW,CAAC,4BAAA,CAAA,CACZC,MAAM,CAAC,eAAe,yCACtBA,CAAAA,CAAAA,MAAM,CAAC,cAAgB,EAAA,oBAAA,CAAA,CACvBC,MAAM,CAAC,IAAMC,iBAAU,CAAA,UAAA,EAAYD,MAAQJ,CAAAA,CAAAA,GAAAA,CAAAA,CAAAA;AAChD;;;;"}
@@ -0,0 +1,11 @@
1
+ import { runAction } from '../utils/helpers.mjs';
2
+ import action from './action.mjs';
3
+
4
+ /**
5
+ * `$ list project from the cloud`
6
+ */ const command = ({ command, ctx })=>{
7
+ command.command('cloud:projects').alias('projects').description('List Strapi Cloud projects').option('-d, --debug', 'Enable debugging mode with verbose logs').option('-s, --silent', "Don't log anything").action(()=>runAction('projects', action)(ctx));
8
+ };
9
+
10
+ export { command as default };
11
+ //# sourceMappingURL=command.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.mjs","sources":["../../src/list-projects/command.ts"],"sourcesContent":["import { type StrapiCloudCommand } from '../types';\nimport { runAction } from '../utils/helpers';\nimport action from './action';\n\n/**\n * `$ list project from the cloud`\n */\nconst command: StrapiCloudCommand = ({ command, ctx }) => {\n command\n .command('cloud:projects')\n .alias('projects')\n .description('List Strapi Cloud projects')\n .option('-d, --debug', 'Enable debugging mode with verbose logs')\n .option('-s, --silent', \"Don't log anything\")\n .action(() => runAction('projects', action)(ctx));\n};\n\nexport default command;\n"],"names":["command","ctx","alias","description","option","action","runAction"],"mappings":";;;AAIA;;AAEC,UACKA,OAA8B,GAAA,CAAC,EAAEA,OAAO,EAAEC,GAAG,EAAE,GAAA;IACnDD,OACGA,CAAAA,OAAO,CAAC,gBACRE,CAAAA,CAAAA,KAAK,CAAC,UACNC,CAAAA,CAAAA,WAAW,CAAC,4BAAA,CAAA,CACZC,MAAM,CAAC,eAAe,yCACtBA,CAAAA,CAAAA,MAAM,CAAC,cAAgB,EAAA,oBAAA,CAAA,CACvBC,MAAM,CAAC,IAAMC,SAAU,CAAA,UAAA,EAAYD,MAAQJ,CAAAA,CAAAA,GAAAA,CAAAA,CAAAA;AAChD;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/list-projects/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;;AAE3B,wBAK4B"}
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var action = require('./action.js');
6
+ var command = require('./command.js');
7
+
8
+ var listProjects = {
9
+ name: 'list-projects',
10
+ description: 'List Strapi Cloud projects',
11
+ action,
12
+ command
13
+ };
14
+
15
+ exports.action = action;
16
+ exports.command = command;
17
+ exports.default = listProjects;
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/list-projects/index.ts"],"sourcesContent":["import action from './action';\nimport command from './command';\nimport type { StrapiCloudCommandInfo } from '../types';\n\nexport { action, command };\n\nexport default {\n name: 'list-projects',\n description: 'List Strapi Cloud projects',\n action,\n command,\n} as StrapiCloudCommandInfo;\n"],"names":["name","description","action","command"],"mappings":";;;;;;;AAMA,mBAAe;IACbA,IAAM,EAAA,eAAA;IACNC,WAAa,EAAA,4BAAA;AACbC,IAAAA,MAAAA;AACAC,IAAAA;AACF,CAA4B;;;;;;"}
@@ -0,0 +1,12 @@
1
+ import action from './action.mjs';
2
+ import command from './command.mjs';
3
+
4
+ var listProjects = {
5
+ name: 'list-projects',
6
+ description: 'List Strapi Cloud projects',
7
+ action,
8
+ command
9
+ };
10
+
11
+ export { action, command, listProjects as default };
12
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../src/list-projects/index.ts"],"sourcesContent":["import action from './action';\nimport command from './command';\nimport type { StrapiCloudCommandInfo } from '../types';\n\nexport { action, command };\n\nexport default {\n name: 'list-projects',\n description: 'List Strapi Cloud projects',\n action,\n command,\n} as StrapiCloudCommandInfo;\n"],"names":["name","description","action","command"],"mappings":";;;AAMA,mBAAe;IACbA,IAAM,EAAA,eAAA;IACNC,WAAa,EAAA,4BAAA;AACbC,IAAAA,MAAAA;AACAC,IAAAA;AACF,CAA4B;;;;"}
@@ -0,0 +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;AAM3D,wBAAsB,WAAW,CAAC,GAAG,EAAE,UAAU,oBAchD;AAED,wBAA8B,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAgK3E"}
@@ -0,0 +1,177 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var axios = require('axios');
6
+ var chalk = require('chalk');
7
+ var inquirer = require('inquirer');
8
+ var cliApi = require('../services/cli-api.js');
9
+ require('fs-extra');
10
+ require('path');
11
+ require('lodash');
12
+ var token = require('../services/token.js');
13
+ require('fast-safe-stringify');
14
+ require('ora');
15
+ require('cli-progress');
16
+ var api = require('../config/api.js');
17
+ var analytics = require('../utils/analytics.js');
18
+
19
+ const openModule = import('open');
20
+ async function promptLogin(ctx) {
21
+ const response = await inquirer.prompt([
22
+ {
23
+ type: 'confirm',
24
+ name: 'login',
25
+ message: 'Would you like to login?'
26
+ }
27
+ ]);
28
+ if (response.login) {
29
+ const loginSuccessful = await loginAction(ctx);
30
+ return loginSuccessful;
31
+ }
32
+ return false;
33
+ }
34
+ async function loginAction(ctx) {
35
+ const { logger } = ctx;
36
+ const tokenService = await token.tokenServiceFactory(ctx);
37
+ const existingToken = await tokenService.retrieveToken();
38
+ const cloudApiService = await cliApi.cloudApiFactory(ctx, existingToken || undefined);
39
+ if (existingToken) {
40
+ const isTokenValid = await tokenService.isTokenValid(existingToken);
41
+ if (isTokenValid) {
42
+ try {
43
+ const userInfo = await cloudApiService.getUserInfo();
44
+ const { email } = userInfo.data.data;
45
+ if (email) {
46
+ logger.log(`You are already logged into your account (${email}).`);
47
+ } else {
48
+ logger.log('You are already logged in.');
49
+ }
50
+ logger.log('To access your dashboard, please copy and paste the following URL into your web browser:');
51
+ logger.log(chalk.underline(`${api.apiConfig.dashboardBaseUrl}/projects`));
52
+ return true;
53
+ } catch (e) {
54
+ logger.debug('Failed to fetch user info', e);
55
+ }
56
+ }
57
+ }
58
+ let cliConfig;
59
+ try {
60
+ logger.info('🔌 Connecting to the Strapi Cloud API...');
61
+ const config = await cloudApiService.config();
62
+ cliConfig = config.data;
63
+ } catch (e) {
64
+ logger.error('🥲 Oops! Something went wrong while logging you in. Please try again.');
65
+ logger.debug(e);
66
+ return false;
67
+ }
68
+ await analytics.trackEvent(ctx, cloudApiService, 'willLoginAttempt', {});
69
+ logger.debug('🔐 Creating device authentication request...', {
70
+ client_id: cliConfig.clientId,
71
+ scope: cliConfig.scope,
72
+ audience: cliConfig.audience
73
+ });
74
+ const deviceAuthResponse = await axios.post(cliConfig.deviceCodeAuthUrl, {
75
+ client_id: cliConfig.clientId,
76
+ scope: cliConfig.scope,
77
+ audience: cliConfig.audience
78
+ }).catch((e)=>{
79
+ logger.error('There was an issue with the authentication process. Please try again.');
80
+ if (e.message) {
81
+ logger.debug(e.message, e);
82
+ } else {
83
+ logger.debug(e);
84
+ }
85
+ });
86
+ openModule.then((open)=>{
87
+ open.default(deviceAuthResponse.data.verification_uri_complete).catch((e)=>{
88
+ logger.error('We encountered an issue opening the browser. Please try again later.');
89
+ logger.debug(e.message, e);
90
+ });
91
+ });
92
+ logger.log('If a browser tab does not open automatically, please follow the next steps:');
93
+ logger.log(`1. Open this url in your device: ${deviceAuthResponse.data.verification_uri_complete}`);
94
+ logger.log(`2. Enter the following code: ${deviceAuthResponse.data.user_code} and confirm to login.\n`);
95
+ const tokenPayload = {
96
+ grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
97
+ device_code: deviceAuthResponse.data.device_code,
98
+ client_id: cliConfig.clientId
99
+ };
100
+ let isAuthenticated = false;
101
+ const authenticate = async ()=>{
102
+ const spinner = logger.spinner('Waiting for authentication');
103
+ spinner.start();
104
+ const spinnerFail = ()=>spinner.fail('Authentication failed!');
105
+ while(!isAuthenticated){
106
+ try {
107
+ const tokenResponse = await axios.post(cliConfig.tokenUrl, tokenPayload);
108
+ const authTokenData = tokenResponse.data;
109
+ if (tokenResponse.status === 200) {
110
+ // Token validation
111
+ try {
112
+ logger.debug('🔐 Validating token...');
113
+ await tokenService.validateToken(authTokenData.id_token, cliConfig.jwksUrl);
114
+ logger.debug('🔐 Token validation successful!');
115
+ } catch (e) {
116
+ logger.debug(e);
117
+ spinnerFail();
118
+ throw new Error('Unable to proceed: Token validation failed');
119
+ }
120
+ logger.debug('🔍 Fetching user information...');
121
+ const cloudApiServiceWithToken = await cliApi.cloudApiFactory(ctx, authTokenData.access_token);
122
+ // Call to get user info to create the user in DB if not exists
123
+ await cloudApiServiceWithToken.getUserInfo();
124
+ logger.debug('🔍 User information fetched successfully!');
125
+ try {
126
+ logger.debug('📝 Saving login information...');
127
+ await tokenService.saveToken(authTokenData.access_token);
128
+ logger.debug('📝 Login information saved successfully!');
129
+ isAuthenticated = true;
130
+ } catch (e) {
131
+ logger.error('There was a problem saving your login information. Please try logging in again.');
132
+ logger.debug(e);
133
+ spinnerFail();
134
+ return false;
135
+ }
136
+ }
137
+ } catch (e) {
138
+ if (e.message === 'Unable to proceed: Token validation failed') {
139
+ logger.error('There seems to be a problem with your login information. Please try logging in again.');
140
+ spinnerFail();
141
+ await analytics.trackEvent(ctx, cloudApiService, 'didNotLogin', {
142
+ loginMethod: 'cli'
143
+ });
144
+ return false;
145
+ }
146
+ if (e.response?.data.error && ![
147
+ 'authorization_pending',
148
+ 'slow_down'
149
+ ].includes(e.response.data.error)) {
150
+ logger.debug(e);
151
+ spinnerFail();
152
+ await analytics.trackEvent(ctx, cloudApiService, 'didNotLogin', {
153
+ loginMethod: 'cli'
154
+ });
155
+ return false;
156
+ }
157
+ // Await interval before retrying
158
+ await new Promise((resolve)=>{
159
+ setTimeout(resolve, deviceAuthResponse.data.interval * 1000);
160
+ });
161
+ }
162
+ }
163
+ spinner.succeed('Authentication successful!');
164
+ logger.log('You are now logged into Strapi Cloud.');
165
+ logger.log('To access your dashboard, please copy and paste the following URL into your web browser:');
166
+ logger.log(chalk.underline(`${api.apiConfig.dashboardBaseUrl}/projects`));
167
+ await analytics.trackEvent(ctx, cloudApiService, 'didLogin', {
168
+ loginMethod: 'cli'
169
+ });
170
+ };
171
+ await authenticate();
172
+ return isAuthenticated;
173
+ }
174
+
175
+ exports.default = loginAction;
176
+ exports.promptLogin = promptLogin;
177
+ //# sourceMappingURL=action.js.map
@@ -0,0 +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(ctx: CLIContext): Promise<boolean> {\n const { logger } = 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 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 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 to the Strapi Cloud API...');\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\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', { loginMethod: 'cli' });\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', { loginMethod: 'cli' });\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 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 await trackEvent(ctx, cloudApiService, 'didLogin', { loginMethod: 'cli' });\n };\n\n await authenticate();\n return isAuthenticated;\n}\n"],"names":["openModule","promptLogin","ctx","response","inquirer","prompt","type","name","message","login","loginSuccessful","loginAction","logger","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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"}
@@ -0,0 +1,172 @@
1
+ import axios from 'axios';
2
+ import chalk from 'chalk';
3
+ import inquirer from 'inquirer';
4
+ import { cloudApiFactory } from '../services/cli-api.mjs';
5
+ import 'fs-extra';
6
+ import 'path';
7
+ import 'lodash';
8
+ import { tokenServiceFactory } from '../services/token.mjs';
9
+ import 'fast-safe-stringify';
10
+ import 'ora';
11
+ import 'cli-progress';
12
+ import { apiConfig } from '../config/api.mjs';
13
+ import { trackEvent } from '../utils/analytics.mjs';
14
+
15
+ const openModule = import('open');
16
+ async function promptLogin(ctx) {
17
+ const response = await inquirer.prompt([
18
+ {
19
+ type: 'confirm',
20
+ name: 'login',
21
+ message: 'Would you like to login?'
22
+ }
23
+ ]);
24
+ if (response.login) {
25
+ const loginSuccessful = await loginAction(ctx);
26
+ return loginSuccessful;
27
+ }
28
+ return false;
29
+ }
30
+ async function loginAction(ctx) {
31
+ const { logger } = ctx;
32
+ const tokenService = await tokenServiceFactory(ctx);
33
+ const existingToken = await tokenService.retrieveToken();
34
+ const cloudApiService = await cloudApiFactory(ctx, existingToken || undefined);
35
+ if (existingToken) {
36
+ const isTokenValid = await tokenService.isTokenValid(existingToken);
37
+ if (isTokenValid) {
38
+ try {
39
+ const userInfo = await cloudApiService.getUserInfo();
40
+ const { email } = userInfo.data.data;
41
+ if (email) {
42
+ logger.log(`You are already logged into your account (${email}).`);
43
+ } else {
44
+ logger.log('You are already logged in.');
45
+ }
46
+ logger.log('To access your dashboard, please copy and paste the following URL into your web browser:');
47
+ logger.log(chalk.underline(`${apiConfig.dashboardBaseUrl}/projects`));
48
+ return true;
49
+ } catch (e) {
50
+ logger.debug('Failed to fetch user info', e);
51
+ }
52
+ }
53
+ }
54
+ let cliConfig;
55
+ try {
56
+ logger.info('🔌 Connecting to the Strapi Cloud API...');
57
+ const config = await cloudApiService.config();
58
+ cliConfig = config.data;
59
+ } catch (e) {
60
+ logger.error('🥲 Oops! Something went wrong while logging you in. Please try again.');
61
+ logger.debug(e);
62
+ return false;
63
+ }
64
+ await trackEvent(ctx, cloudApiService, 'willLoginAttempt', {});
65
+ logger.debug('🔐 Creating device authentication request...', {
66
+ client_id: cliConfig.clientId,
67
+ scope: cliConfig.scope,
68
+ audience: cliConfig.audience
69
+ });
70
+ const deviceAuthResponse = await axios.post(cliConfig.deviceCodeAuthUrl, {
71
+ client_id: cliConfig.clientId,
72
+ scope: cliConfig.scope,
73
+ audience: cliConfig.audience
74
+ }).catch((e)=>{
75
+ logger.error('There was an issue with the authentication process. Please try again.');
76
+ if (e.message) {
77
+ logger.debug(e.message, e);
78
+ } else {
79
+ logger.debug(e);
80
+ }
81
+ });
82
+ openModule.then((open)=>{
83
+ open.default(deviceAuthResponse.data.verification_uri_complete).catch((e)=>{
84
+ logger.error('We encountered an issue opening the browser. Please try again later.');
85
+ logger.debug(e.message, e);
86
+ });
87
+ });
88
+ logger.log('If a browser tab does not open automatically, please follow the next steps:');
89
+ logger.log(`1. Open this url in your device: ${deviceAuthResponse.data.verification_uri_complete}`);
90
+ logger.log(`2. Enter the following code: ${deviceAuthResponse.data.user_code} and confirm to login.\n`);
91
+ const tokenPayload = {
92
+ grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
93
+ device_code: deviceAuthResponse.data.device_code,
94
+ client_id: cliConfig.clientId
95
+ };
96
+ let isAuthenticated = false;
97
+ const authenticate = async ()=>{
98
+ const spinner = logger.spinner('Waiting for authentication');
99
+ spinner.start();
100
+ const spinnerFail = ()=>spinner.fail('Authentication failed!');
101
+ while(!isAuthenticated){
102
+ try {
103
+ const tokenResponse = await axios.post(cliConfig.tokenUrl, tokenPayload);
104
+ const authTokenData = tokenResponse.data;
105
+ if (tokenResponse.status === 200) {
106
+ // Token validation
107
+ try {
108
+ logger.debug('🔐 Validating token...');
109
+ await tokenService.validateToken(authTokenData.id_token, cliConfig.jwksUrl);
110
+ logger.debug('🔐 Token validation successful!');
111
+ } catch (e) {
112
+ logger.debug(e);
113
+ spinnerFail();
114
+ throw new Error('Unable to proceed: Token validation failed');
115
+ }
116
+ logger.debug('🔍 Fetching user information...');
117
+ const cloudApiServiceWithToken = await cloudApiFactory(ctx, authTokenData.access_token);
118
+ // Call to get user info to create the user in DB if not exists
119
+ await cloudApiServiceWithToken.getUserInfo();
120
+ logger.debug('🔍 User information fetched successfully!');
121
+ try {
122
+ logger.debug('📝 Saving login information...');
123
+ await tokenService.saveToken(authTokenData.access_token);
124
+ logger.debug('📝 Login information saved successfully!');
125
+ isAuthenticated = true;
126
+ } catch (e) {
127
+ logger.error('There was a problem saving your login information. Please try logging in again.');
128
+ logger.debug(e);
129
+ spinnerFail();
130
+ return false;
131
+ }
132
+ }
133
+ } catch (e) {
134
+ if (e.message === 'Unable to proceed: Token validation failed') {
135
+ logger.error('There seems to be a problem with your login information. Please try logging in again.');
136
+ spinnerFail();
137
+ await trackEvent(ctx, cloudApiService, 'didNotLogin', {
138
+ loginMethod: 'cli'
139
+ });
140
+ return false;
141
+ }
142
+ if (e.response?.data.error && ![
143
+ 'authorization_pending',
144
+ 'slow_down'
145
+ ].includes(e.response.data.error)) {
146
+ logger.debug(e);
147
+ spinnerFail();
148
+ await trackEvent(ctx, cloudApiService, 'didNotLogin', {
149
+ loginMethod: 'cli'
150
+ });
151
+ return false;
152
+ }
153
+ // Await interval before retrying
154
+ await new Promise((resolve)=>{
155
+ setTimeout(resolve, deviceAuthResponse.data.interval * 1000);
156
+ });
157
+ }
158
+ }
159
+ spinner.succeed('Authentication successful!');
160
+ logger.log('You are now logged into Strapi Cloud.');
161
+ logger.log('To access your dashboard, please copy and paste the following URL into your web browser:');
162
+ logger.log(chalk.underline(`${apiConfig.dashboardBaseUrl}/projects`));
163
+ await trackEvent(ctx, cloudApiService, 'didLogin', {
164
+ loginMethod: 'cli'
165
+ });
166
+ };
167
+ await authenticate();
168
+ return isAuthenticated;
169
+ }
170
+
171
+ export { loginAction as default, promptLogin };
172
+ //# sourceMappingURL=action.mjs.map