@strapi/admin 5.17.0-beta.0 → 5.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/dist/admin/admin/src/StrapiApp.js +27 -4
  2. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  3. package/dist/admin/admin/src/StrapiApp.mjs +27 -4
  4. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/LeftMenu.js +1 -1
  6. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  7. package/dist/admin/admin/src/components/LeftMenu.mjs +2 -2
  8. package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/MainNav/NavLink.js +40 -4
  10. package/dist/admin/admin/src/components/MainNav/NavLink.js.map +1 -1
  11. package/dist/admin/admin/src/components/MainNav/NavLink.mjs +21 -4
  12. package/dist/admin/admin/src/components/MainNav/NavLink.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/MainNav/NavUser.js +1 -1
  14. package/dist/admin/admin/src/components/MainNav/NavUser.js.map +1 -1
  15. package/dist/admin/admin/src/components/MainNav/NavUser.mjs +1 -1
  16. package/dist/admin/admin/src/components/MainNav/NavUser.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/Providers.js +8 -5
  18. package/dist/admin/admin/src/components/Providers.js.map +1 -1
  19. package/dist/admin/admin/src/components/Providers.mjs +8 -5
  20. package/dist/admin/admin/src/components/Providers.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/SubNav.js +27 -7
  22. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  23. package/dist/admin/admin/src/components/SubNav.mjs +28 -8
  24. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  25. package/dist/admin/admin/src/components/UnstableGuidedTour/Context.js +89 -0
  26. package/dist/admin/admin/src/components/UnstableGuidedTour/Context.js.map +1 -0
  27. package/dist/admin/admin/src/components/UnstableGuidedTour/Context.mjs +66 -0
  28. package/dist/admin/admin/src/components/UnstableGuidedTour/Context.mjs.map +1 -0
  29. package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.js +291 -0
  30. package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.js.map +1 -0
  31. package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.mjs +289 -0
  32. package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.mjs.map +1 -0
  33. package/dist/admin/admin/src/components/UnstableGuidedTour/Step.js +153 -0
  34. package/dist/admin/admin/src/components/UnstableGuidedTour/Step.js.map +1 -0
  35. package/dist/admin/admin/src/components/UnstableGuidedTour/Step.mjs +132 -0
  36. package/dist/admin/admin/src/components/UnstableGuidedTour/Step.mjs.map +1 -0
  37. package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.js +416 -0
  38. package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.js.map +1 -0
  39. package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.mjs +395 -0
  40. package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.mjs.map +1 -0
  41. package/dist/admin/admin/src/components/Widgets.js +52 -0
  42. package/dist/admin/admin/src/components/Widgets.js.map +1 -0
  43. package/dist/admin/admin/src/components/Widgets.mjs +50 -0
  44. package/dist/admin/admin/src/components/Widgets.mjs.map +1 -0
  45. package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
  46. package/dist/admin/admin/src/core/apis/Widgets.mjs.map +1 -1
  47. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  48. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  49. package/dist/admin/admin/src/features/Tracking.js +0 -33
  50. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  51. package/dist/admin/admin/src/features/Tracking.mjs +0 -33
  52. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  53. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +15 -8
  54. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  55. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +15 -8
  56. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
  57. package/dist/admin/admin/src/pages/Home/HomePage.js +2 -1
  58. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  59. package/dist/admin/admin/src/pages/Home/HomePage.mjs +2 -1
  60. package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
  61. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +93 -0
  62. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
  63. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +95 -3
  64. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
  65. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +8 -3
  66. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
  67. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs +10 -5
  68. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
  69. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +6 -1
  70. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
  71. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs +6 -1
  72. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
  73. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +58 -53
  74. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
  75. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +58 -53
  76. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
  77. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +3 -3
  78. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  79. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs +3 -3
  80. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
  81. package/dist/admin/admin/src/services/admin.js +17 -3
  82. package/dist/admin/admin/src/services/admin.js.map +1 -1
  83. package/dist/admin/admin/src/services/admin.mjs +17 -4
  84. package/dist/admin/admin/src/services/admin.mjs.map +1 -1
  85. package/dist/admin/admin/src/services/apiTokens.js +4 -2
  86. package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
  87. package/dist/admin/admin/src/services/apiTokens.mjs +4 -2
  88. package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
  89. package/dist/admin/admin/src/translations/en.json.js +34 -2
  90. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  91. package/dist/admin/admin/src/translations/en.json.mjs +34 -2
  92. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  93. package/dist/admin/admin/src/translations/es.json.js +1 -0
  94. package/dist/admin/admin/src/translations/es.json.js.map +1 -1
  95. package/dist/admin/admin/src/translations/es.json.mjs +1 -0
  96. package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
  97. package/dist/admin/admin/src/translations/fr.json.js +3 -1
  98. package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
  99. package/dist/admin/admin/src/translations/fr.json.mjs +3 -1
  100. package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
  101. package/dist/admin/admin/src/utils/users.js +8 -0
  102. package/dist/admin/admin/src/utils/users.js.map +1 -1
  103. package/dist/admin/admin/src/utils/users.mjs +8 -1
  104. package/dist/admin/admin/src/utils/users.mjs.map +1 -1
  105. package/dist/admin/admin/tests/server.js +8 -0
  106. package/dist/admin/admin/tests/server.js.map +1 -1
  107. package/dist/admin/admin/tests/server.mjs +8 -0
  108. package/dist/admin/admin/tests/server.mjs.map +1 -1
  109. package/dist/admin/admin/tests/utils.js +25 -21
  110. package/dist/admin/admin/tests/utils.js.map +1 -1
  111. package/dist/admin/admin/tests/utils.mjs +25 -21
  112. package/dist/admin/admin/tests/utils.mjs.map +1 -1
  113. package/dist/admin/index.js +2 -0
  114. package/dist/admin/index.js.map +1 -1
  115. package/dist/admin/index.mjs +1 -0
  116. package/dist/admin/index.mjs.map +1 -1
  117. package/dist/admin/src/components/UnstableGuidedTour/Context.d.ts +38 -0
  118. package/dist/admin/src/components/UnstableGuidedTour/Overview.d.ts +1 -0
  119. package/dist/admin/src/components/UnstableGuidedTour/Step.d.ts +37 -0
  120. package/dist/admin/src/components/UnstableGuidedTour/Tours.d.ts +58 -0
  121. package/dist/admin/src/components/Widgets.d.ts +2 -0
  122. package/dist/admin/src/core/apis/Widgets.d.ts +1 -1
  123. package/dist/admin/src/features/Auth.d.ts +1 -1
  124. package/dist/admin/src/features/Tracking.d.ts +9 -2
  125. package/dist/admin/src/index.d.ts +1 -0
  126. package/dist/admin/src/pages/Settings/components/Tokens/TokenBox.d.ts +1 -0
  127. package/dist/admin/src/services/admin.d.ts +8 -8
  128. package/dist/admin/src/services/apiTokens.d.ts +1 -1
  129. package/dist/admin/src/utils/users.d.ts +5 -1
  130. package/dist/ee/server/src/index.d.ts +2 -12
  131. package/dist/ee/server/src/index.d.ts.map +1 -1
  132. package/dist/ee/server/src/routes/index.d.ts +1 -6
  133. package/dist/ee/server/src/routes/index.d.ts.map +1 -1
  134. package/dist/ee/server/src/routes/license-limit.d.ts +1 -6
  135. package/dist/ee/server/src/routes/license-limit.d.ts.map +1 -1
  136. package/dist/server/ee/server/src/routes/license-limit.js +1 -12
  137. package/dist/server/ee/server/src/routes/license-limit.js.map +1 -1
  138. package/dist/server/ee/server/src/routes/license-limit.mjs +1 -12
  139. package/dist/server/ee/server/src/routes/license-limit.mjs.map +1 -1
  140. package/dist/server/server/src/bootstrap.js +4 -12
  141. package/dist/server/server/src/bootstrap.js.map +1 -1
  142. package/dist/server/server/src/bootstrap.mjs +4 -12
  143. package/dist/server/server/src/bootstrap.mjs.map +1 -1
  144. package/dist/server/server/src/controllers/admin.js +12 -1
  145. package/dist/server/server/src/controllers/admin.js.map +1 -1
  146. package/dist/server/server/src/controllers/admin.mjs +12 -1
  147. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  148. package/dist/server/server/src/routes/admin.js +10 -0
  149. package/dist/server/server/src/routes/admin.js.map +1 -1
  150. package/dist/server/server/src/routes/admin.mjs +10 -0
  151. package/dist/server/server/src/routes/admin.mjs.map +1 -1
  152. package/dist/server/server/src/services/constants.js +14 -0
  153. package/dist/server/server/src/services/constants.js.map +1 -1
  154. package/dist/server/server/src/services/constants.mjs +14 -0
  155. package/dist/server/server/src/services/constants.mjs.map +1 -1
  156. package/dist/server/server/src/services/guided-tour.js +61 -0
  157. package/dist/server/server/src/services/guided-tour.js.map +1 -0
  158. package/dist/server/server/src/services/guided-tour.mjs +59 -0
  159. package/dist/server/server/src/services/guided-tour.mjs.map +1 -0
  160. package/dist/server/server/src/services/index.js +3 -1
  161. package/dist/server/server/src/services/index.js.map +1 -1
  162. package/dist/server/server/src/services/index.mjs +3 -1
  163. package/dist/server/server/src/services/index.mjs.map +1 -1
  164. package/dist/server/server/src/services/user.js +28 -1
  165. package/dist/server/server/src/services/user.js.map +1 -1
  166. package/dist/server/server/src/services/user.mjs +28 -1
  167. package/dist/server/server/src/services/user.mjs.map +1 -1
  168. package/dist/server/server/src/strategies/api-token.js +15 -4
  169. package/dist/server/server/src/strategies/api-token.js.map +1 -1
  170. package/dist/server/server/src/strategies/api-token.mjs +15 -4
  171. package/dist/server/server/src/strategies/api-token.mjs.map +1 -1
  172. package/dist/server/src/bootstrap.d.ts.map +1 -1
  173. package/dist/server/src/controllers/admin.d.ts +6 -1
  174. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  175. package/dist/server/src/controllers/index.d.ts +6 -0
  176. package/dist/server/src/controllers/index.d.ts.map +1 -1
  177. package/dist/server/src/index.d.ts +12 -0
  178. package/dist/server/src/index.d.ts.map +1 -1
  179. package/dist/server/src/routes/admin.d.ts.map +1 -1
  180. package/dist/server/src/services/constants.d.ts +11 -1
  181. package/dist/server/src/services/constants.d.ts.map +1 -1
  182. package/dist/server/src/services/guided-tour.d.ts +12 -0
  183. package/dist/server/src/services/guided-tour.d.ts.map +1 -0
  184. package/dist/server/src/services/index.d.ts +6 -0
  185. package/dist/server/src/services/index.d.ts.map +1 -1
  186. package/dist/server/src/services/user.d.ts +1 -0
  187. package/dist/server/src/services/user.d.ts.map +1 -1
  188. package/dist/server/src/strategies/api-token.d.ts.map +1 -1
  189. package/dist/shared/contracts/admin.d.ts +15 -0
  190. package/dist/shared/contracts/admin.d.ts.map +1 -1
  191. package/package.json +9 -9
@@ -8,18 +8,7 @@ var licenseLimit = {
8
8
  handler: 'admin.licenseLimitInformation',
9
9
  config: {
10
10
  policies: [
11
- 'admin::isAuthenticatedAdmin',
12
- {
13
- name: 'admin::hasPermissions',
14
- config: {
15
- actions: [
16
- 'admin::users.create',
17
- 'admin::users.read',
18
- 'admin::users.update',
19
- 'admin::users.delete'
20
- ]
21
- }
22
- }
11
+ 'admin::isAuthenticatedAdmin'
23
12
  ]
24
13
  }
25
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"license-limit.mjs","sources":["../../../../../../ee/server/src/routes/license-limit.ts"],"sourcesContent":["export default {\n type: 'admin',\n routes: [\n // License limit infos\n {\n method: 'GET',\n path: '/license-limit-information',\n handler: 'admin.licenseLimitInformation',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: [\n 'admin::users.create',\n 'admin::users.read',\n 'admin::users.update',\n 'admin::users.delete',\n ],\n },\n },\n ],\n },\n },\n ],\n};\n"],"names":["type","routes","method","path","handler","config","policies","name","actions"],"mappings":"AAAA,mBAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;;AAEN,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,4BAAA;YACNC,OAAS,EAAA,+BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AACP,gCAAA,qBAAA;AACA,gCAAA,mBAAA;AACA,gCAAA,qBAAA;AACA,gCAAA;AACD;AACH;AACF;AACD;AACH;AACF;AACD;AACH,CAAE;;;;"}
1
+ {"version":3,"file":"license-limit.mjs","sources":["../../../../../../ee/server/src/routes/license-limit.ts"],"sourcesContent":["export default {\n type: 'admin',\n routes: [\n // License limit infos\n {\n method: 'GET',\n path: '/license-limit-information',\n handler: 'admin.licenseLimitInformation',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n ],\n};\n"],"names":["type","routes","method","path","handler","config","policies"],"mappings":"AAAA,mBAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;;AAEN,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,4BAAA;YACNC,OAAS,EAAA,+BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH,CAAE;;;;"}
@@ -5,6 +5,7 @@ var utils = require('@strapi/utils');
5
5
  var index = require('./utils/index.js');
6
6
  var adminActions = require('./config/admin-actions.js');
7
7
  var adminConditions = require('./config/admin-conditions.js');
8
+ var constants = require('./services/constants.js');
8
9
 
9
10
  const defaultAdminAuthSettings = {
10
11
  providers: {
@@ -84,18 +85,9 @@ const syncAPITokensPermissions = async ()=>{
84
85
  const usersCount = await userService.count();
85
86
  const apiTokenCount = await apiTokenService.count();
86
87
  if (usersCount === 0 && apiTokenCount === 0) {
87
- await apiTokenService.create({
88
- name: 'Read Only',
89
- description: 'A default API token with read-only permissions, only used for accessing resources',
90
- type: 'read-only',
91
- lifespan: null
92
- });
93
- await apiTokenService.create({
94
- name: 'Full Access',
95
- description: 'A default API token with full access permissions, used for accessing or modifying resources',
96
- type: 'full-access',
97
- lifespan: null
98
- });
88
+ for (const token of constants.DEFAULT_API_TOKENS){
89
+ await apiTokenService.create(token);
90
+ }
99
91
  }
100
92
  };
101
93
  var bootstrap = (async ({ strapi: strapi1 })=>{
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sources":["../../../../server/src/bootstrap.ts"],"sourcesContent":["import { merge, map, difference, uniq } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { async } from '@strapi/utils';\nimport { getService } from './utils';\nimport adminActions from './config/admin-actions';\nimport adminConditions from './config/admin-conditions';\n\nconst defaultAdminAuthSettings = {\n providers: {\n autoRegister: false,\n defaultRole: null,\n ssoLockedRoles: null,\n },\n};\n\nconst registerPermissionActions = async () => {\n await getService('permission').actionProvider.registerMany(adminActions.actions);\n};\n\nconst registerAdminConditions = async () => {\n await getService('permission').conditionProvider.registerMany(adminConditions.conditions);\n};\n\nconst registerModelHooks = () => {\n const { sendDidChangeInterfaceLanguage } = getService('metrics');\n\n strapi.db.lifecycles.subscribe({\n models: ['admin::user'],\n afterCreate: sendDidChangeInterfaceLanguage,\n afterDelete: sendDidChangeInterfaceLanguage,\n afterUpdate({ params }) {\n if (params.data.preferedLanguage) {\n sendDidChangeInterfaceLanguage();\n }\n },\n });\n};\n\nconst syncAuthSettings = async () => {\n const adminStore = await strapi.store({ type: 'core', name: 'admin' });\n const adminAuthSettings = await adminStore.get({ key: 'auth' });\n const newAuthSettings = merge(defaultAdminAuthSettings, adminAuthSettings);\n\n const roleExists = await getService('role').exists({\n id: newAuthSettings.providers.defaultRole,\n });\n\n // Reset the default SSO role if it has been deleted manually\n if (!roleExists) {\n newAuthSettings.providers.defaultRole = null;\n }\n\n await adminStore.set({ key: 'auth', value: newAuthSettings });\n};\n\nconst syncAPITokensPermissions = async () => {\n const validPermissions = strapi.contentAPI.permissions.providers.action.keys();\n const permissionsInDB = await async.pipe(\n strapi.db.query('admin::api-token-permission').findMany,\n map('action')\n )();\n\n const unknownPermissions = uniq(difference(permissionsInDB, validPermissions));\n\n if (unknownPermissions.length > 0) {\n await strapi.db\n .query('admin::api-token-permission')\n .deleteMany({ where: { action: { $in: unknownPermissions } } });\n }\n};\n\n/**\n * Ensures the creation of default API tokens during the app creation.\n *\n * Checks the database for existing users and API tokens:\n * - If there are no users and no API tokens, it creates two default API tokens:\n * 1. A \"Read Only\" API token with permissions for accessing resources.\n * 2. A \"Full Access\" API token with permissions for accessing and modifying resources.\n *\n * @sideEffects Creates new API tokens in the database if conditions are met.\n */\n\nconst createDefaultAPITokensIfNeeded = async () => {\n const userService = getService('user');\n const apiTokenService = getService('api-token');\n\n const usersCount = await userService.count();\n const apiTokenCount = await apiTokenService.count();\n\n if (usersCount === 0 && apiTokenCount === 0) {\n await apiTokenService.create({\n name: 'Read Only',\n description:\n 'A default API token with read-only permissions, only used for accessing resources',\n type: 'read-only',\n lifespan: null,\n });\n\n await apiTokenService.create({\n name: 'Full Access',\n description:\n 'A default API token with full access permissions, used for accessing or modifying resources',\n type: 'full-access',\n lifespan: null,\n });\n }\n};\n\nexport default async ({ strapi }: { strapi: Core.Strapi }) => {\n await registerAdminConditions();\n await registerPermissionActions();\n registerModelHooks();\n\n const permissionService = getService('permission');\n const userService = getService('user');\n const roleService = getService('role');\n const apiTokenService = getService('api-token');\n const transferService = getService('transfer');\n const tokenService = getService('token');\n\n await roleService.createRolesIfNoneExist();\n await roleService.resetSuperAdminPermissions();\n await roleService.displayWarningIfNoSuperAdmin();\n\n await permissionService.cleanPermissionsInDatabase();\n\n await userService.displayWarningIfUsersDontHaveRole();\n\n await syncAuthSettings();\n await syncAPITokensPermissions();\n\n await getService('metrics').sendUpdateProjectInformation(strapi);\n getService('metrics').startCron(strapi);\n\n apiTokenService.checkSaltIsDefined();\n transferService.token.checkSaltIsDefined();\n tokenService.checkSecretIsDefined();\n\n await createDefaultAPITokensIfNeeded();\n};\n"],"names":["defaultAdminAuthSettings","providers","autoRegister","defaultRole","ssoLockedRoles","registerPermissionActions","getService","actionProvider","registerMany","adminActions","actions","registerAdminConditions","conditionProvider","adminConditions","conditions","registerModelHooks","sendDidChangeInterfaceLanguage","strapi","db","lifecycles","subscribe","models","afterCreate","afterDelete","afterUpdate","params","data","preferedLanguage","syncAuthSettings","adminStore","store","type","name","adminAuthSettings","get","key","newAuthSettings","merge","roleExists","exists","id","set","value","syncAPITokensPermissions","validPermissions","contentAPI","permissions","action","keys","permissionsInDB","async","pipe","query","findMany","map","unknownPermissions","uniq","difference","length","deleteMany","where","$in","createDefaultAPITokensIfNeeded","userService","apiTokenService","usersCount","count","apiTokenCount","create","description","lifespan","permissionService","roleService","transferService","tokenService","createRolesIfNoneExist","resetSuperAdminPermissions","displayWarningIfNoSuperAdmin","cleanPermissionsInDatabase","displayWarningIfUsersDontHaveRole","sendUpdateProjectInformation","startCron","checkSaltIsDefined","token","checkSecretIsDefined"],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sources":["../../../../server/src/bootstrap.ts"],"sourcesContent":["import { merge, map, difference, uniq } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { async } from '@strapi/utils';\nimport { getService } from './utils';\nimport adminActions from './config/admin-actions';\nimport adminConditions from './config/admin-conditions';\nimport constants from './services/constants';\n\nconst defaultAdminAuthSettings = {\n providers: {\n autoRegister: false,\n defaultRole: null,\n ssoLockedRoles: null,\n },\n};\n\nconst registerPermissionActions = async () => {\n await getService('permission').actionProvider.registerMany(adminActions.actions);\n};\n\nconst registerAdminConditions = async () => {\n await getService('permission').conditionProvider.registerMany(adminConditions.conditions);\n};\n\nconst registerModelHooks = () => {\n const { sendDidChangeInterfaceLanguage } = getService('metrics');\n\n strapi.db.lifecycles.subscribe({\n models: ['admin::user'],\n afterCreate: sendDidChangeInterfaceLanguage,\n afterDelete: sendDidChangeInterfaceLanguage,\n afterUpdate({ params }) {\n if (params.data.preferedLanguage) {\n sendDidChangeInterfaceLanguage();\n }\n },\n });\n};\n\nconst syncAuthSettings = async () => {\n const adminStore = await strapi.store({ type: 'core', name: 'admin' });\n const adminAuthSettings = await adminStore.get({ key: 'auth' });\n const newAuthSettings = merge(defaultAdminAuthSettings, adminAuthSettings);\n\n const roleExists = await getService('role').exists({\n id: newAuthSettings.providers.defaultRole,\n });\n\n // Reset the default SSO role if it has been deleted manually\n if (!roleExists) {\n newAuthSettings.providers.defaultRole = null;\n }\n\n await adminStore.set({ key: 'auth', value: newAuthSettings });\n};\n\nconst syncAPITokensPermissions = async () => {\n const validPermissions = strapi.contentAPI.permissions.providers.action.keys();\n const permissionsInDB = await async.pipe(\n strapi.db.query('admin::api-token-permission').findMany,\n map('action')\n )();\n\n const unknownPermissions = uniq(difference(permissionsInDB, validPermissions));\n\n if (unknownPermissions.length > 0) {\n await strapi.db\n .query('admin::api-token-permission')\n .deleteMany({ where: { action: { $in: unknownPermissions } } });\n }\n};\n\n/**\n * Ensures the creation of default API tokens during the app creation.\n *\n * Checks the database for existing users and API tokens:\n * - If there are no users and no API tokens, it creates two default API tokens:\n * 1. A \"Read Only\" API token with permissions for accessing resources.\n * 2. A \"Full Access\" API token with permissions for accessing and modifying resources.\n *\n * @sideEffects Creates new API tokens in the database if conditions are met.\n */\n\nconst createDefaultAPITokensIfNeeded = async () => {\n const userService = getService('user');\n const apiTokenService = getService('api-token');\n\n const usersCount = await userService.count();\n const apiTokenCount = await apiTokenService.count();\n\n if (usersCount === 0 && apiTokenCount === 0) {\n for (const token of constants.DEFAULT_API_TOKENS) {\n await apiTokenService.create(token);\n }\n }\n};\n\nexport default async ({ strapi }: { strapi: Core.Strapi }) => {\n await registerAdminConditions();\n await registerPermissionActions();\n registerModelHooks();\n\n const permissionService = getService('permission');\n const userService = getService('user');\n const roleService = getService('role');\n const apiTokenService = getService('api-token');\n const transferService = getService('transfer');\n const tokenService = getService('token');\n\n await roleService.createRolesIfNoneExist();\n await roleService.resetSuperAdminPermissions();\n await roleService.displayWarningIfNoSuperAdmin();\n\n await permissionService.cleanPermissionsInDatabase();\n\n await userService.displayWarningIfUsersDontHaveRole();\n\n await syncAuthSettings();\n await syncAPITokensPermissions();\n\n await getService('metrics').sendUpdateProjectInformation(strapi);\n getService('metrics').startCron(strapi);\n\n apiTokenService.checkSaltIsDefined();\n transferService.token.checkSaltIsDefined();\n tokenService.checkSecretIsDefined();\n\n await createDefaultAPITokensIfNeeded();\n};\n"],"names":["defaultAdminAuthSettings","providers","autoRegister","defaultRole","ssoLockedRoles","registerPermissionActions","getService","actionProvider","registerMany","adminActions","actions","registerAdminConditions","conditionProvider","adminConditions","conditions","registerModelHooks","sendDidChangeInterfaceLanguage","strapi","db","lifecycles","subscribe","models","afterCreate","afterDelete","afterUpdate","params","data","preferedLanguage","syncAuthSettings","adminStore","store","type","name","adminAuthSettings","get","key","newAuthSettings","merge","roleExists","exists","id","set","value","syncAPITokensPermissions","validPermissions","contentAPI","permissions","action","keys","permissionsInDB","async","pipe","query","findMany","map","unknownPermissions","uniq","difference","length","deleteMany","where","$in","createDefaultAPITokensIfNeeded","userService","apiTokenService","usersCount","count","apiTokenCount","token","constants","DEFAULT_API_TOKENS","create","permissionService","roleService","transferService","tokenService","createRolesIfNoneExist","resetSuperAdminPermissions","displayWarningIfNoSuperAdmin","cleanPermissionsInDatabase","displayWarningIfUsersDontHaveRole","sendUpdateProjectInformation","startCron","checkSaltIsDefined","checkSecretIsDefined"],"mappings":";;;;;;;;;AAQA,MAAMA,wBAA2B,GAAA;IAC/BC,SAAW,EAAA;QACTC,YAAc,EAAA,KAAA;QACdC,WAAa,EAAA,IAAA;QACbC,cAAgB,EAAA;AAClB;AACF,CAAA;AAEA,MAAMC,yBAA4B,GAAA,UAAA;AAChC,IAAA,MAAMC,iBAAW,YAAcC,CAAAA,CAAAA,cAAc,CAACC,YAAY,CAACC,qBAAaC,OAAO,CAAA;AACjF,CAAA;AAEA,MAAMC,uBAA0B,GAAA,UAAA;AAC9B,IAAA,MAAML,iBAAW,YAAcM,CAAAA,CAAAA,iBAAiB,CAACJ,YAAY,CAACK,wBAAgBC,UAAU,CAAA;AAC1F,CAAA;AAEA,MAAMC,kBAAqB,GAAA,IAAA;AACzB,IAAA,MAAM,EAAEC,8BAA8B,EAAE,GAAGV,gBAAW,CAAA,SAAA,CAAA;AAEtDW,IAAAA,MAAAA,CAAOC,EAAE,CAACC,UAAU,CAACC,SAAS,CAAC;QAC7BC,MAAQ,EAAA;AAAC,YAAA;AAAc,SAAA;QACvBC,WAAaN,EAAAA,8BAAAA;QACbO,WAAaP,EAAAA,8BAAAA;QACbQ,WAAY,CAAA,CAAA,EAAEC,MAAM,EAAE,EAAA;AACpB,YAAA,IAAIA,MAAOC,CAAAA,IAAI,CAACC,gBAAgB,EAAE;AAChCX,gBAAAA,8BAAAA,EAAAA;AACF;AACF;AACF,KAAA,CAAA;AACF,CAAA;AAEA,MAAMY,gBAAmB,GAAA,UAAA;AACvB,IAAA,MAAMC,UAAa,GAAA,MAAMZ,MAAOa,CAAAA,KAAK,CAAC;QAAEC,IAAM,EAAA,MAAA;QAAQC,IAAM,EAAA;AAAQ,KAAA,CAAA;AACpE,IAAA,MAAMC,iBAAoB,GAAA,MAAMJ,UAAWK,CAAAA,GAAG,CAAC;QAAEC,GAAK,EAAA;AAAO,KAAA,CAAA;IAC7D,MAAMC,eAAAA,GAAkBC,SAAMrC,wBAA0BiC,EAAAA,iBAAAA,CAAAA;AAExD,IAAA,MAAMK,UAAa,GAAA,MAAMhC,gBAAW,CAAA,MAAA,CAAA,CAAQiC,MAAM,CAAC;QACjDC,EAAIJ,EAAAA,eAAAA,CAAgBnC,SAAS,CAACE;AAChC,KAAA,CAAA;;AAGA,IAAA,IAAI,CAACmC,UAAY,EAAA;QACfF,eAAgBnC,CAAAA,SAAS,CAACE,WAAW,GAAG,IAAA;AAC1C;IAEA,MAAM0B,UAAAA,CAAWY,GAAG,CAAC;QAAEN,GAAK,EAAA,MAAA;QAAQO,KAAON,EAAAA;AAAgB,KAAA,CAAA;AAC7D,CAAA;AAEA,MAAMO,wBAA2B,GAAA,UAAA;IAC/B,MAAMC,gBAAAA,GAAmB3B,MAAO4B,CAAAA,UAAU,CAACC,WAAW,CAAC7C,SAAS,CAAC8C,MAAM,CAACC,IAAI,EAAA;AAC5E,IAAA,MAAMC,eAAkB,GAAA,MAAMC,WAAMC,CAAAA,IAAI,CACtClC,MAAAA,CAAOC,EAAE,CAACkC,KAAK,CAAC,6BAA+BC,CAAAA,CAAAA,QAAQ,EACvDC,MAAI,CAAA,QAAA,CAAA,CAAA,EAAA;IAGN,MAAMC,kBAAAA,GAAqBC,OAAKC,CAAAA,aAAAA,CAAWR,eAAiBL,EAAAA,gBAAAA,CAAAA,CAAAA;IAE5D,IAAIW,kBAAAA,CAAmBG,MAAM,GAAG,CAAG,EAAA;AACjC,QAAA,MAAMzC,OAAOC,EAAE,CACZkC,KAAK,CAAC,6BAAA,CAAA,CACNO,UAAU,CAAC;YAAEC,KAAO,EAAA;gBAAEb,MAAQ,EAAA;oBAAEc,GAAKN,EAAAA;AAAmB;AAAE;AAAE,SAAA,CAAA;AACjE;AACF,CAAA;AAEA;;;;;;;;;AASC,IAED,MAAMO,8BAAiC,GAAA,UAAA;AACrC,IAAA,MAAMC,cAAczD,gBAAW,CAAA,MAAA,CAAA;AAC/B,IAAA,MAAM0D,kBAAkB1D,gBAAW,CAAA,WAAA,CAAA;IAEnC,MAAM2D,UAAAA,GAAa,MAAMF,WAAAA,CAAYG,KAAK,EAAA;IAC1C,MAAMC,aAAAA,GAAgB,MAAMH,eAAAA,CAAgBE,KAAK,EAAA;IAEjD,IAAID,UAAAA,KAAe,CAAKE,IAAAA,aAAAA,KAAkB,CAAG,EAAA;AAC3C,QAAA,KAAK,MAAMC,KAAAA,IAASC,SAAUC,CAAAA,kBAAkB,CAAE;YAChD,MAAMN,eAAAA,CAAgBO,MAAM,CAACH,KAAAA,CAAAA;AAC/B;AACF;AACF,CAAA;AAEA,gBAAe,CAAA,OAAO,EAAEnD,MAAAA,EAAAA,OAAM,EAA2B,GAAA;IACvD,MAAMN,uBAAAA,EAAAA;IACN,MAAMN,yBAAAA,EAAAA;AACNU,IAAAA,kBAAAA,EAAAA;AAEA,IAAA,MAAMyD,oBAAoBlE,gBAAW,CAAA,YAAA,CAAA;AACrC,IAAA,MAAMyD,cAAczD,gBAAW,CAAA,MAAA,CAAA;AAC/B,IAAA,MAAMmE,cAAcnE,gBAAW,CAAA,MAAA,CAAA;AAC/B,IAAA,MAAM0D,kBAAkB1D,gBAAW,CAAA,WAAA,CAAA;AACnC,IAAA,MAAMoE,kBAAkBpE,gBAAW,CAAA,UAAA,CAAA;AACnC,IAAA,MAAMqE,eAAerE,gBAAW,CAAA,OAAA,CAAA;AAEhC,IAAA,MAAMmE,YAAYG,sBAAsB,EAAA;AACxC,IAAA,MAAMH,YAAYI,0BAA0B,EAAA;AAC5C,IAAA,MAAMJ,YAAYK,4BAA4B,EAAA;AAE9C,IAAA,MAAMN,kBAAkBO,0BAA0B,EAAA;AAElD,IAAA,MAAMhB,YAAYiB,iCAAiC,EAAA;IAEnD,MAAMpD,gBAAAA,EAAAA;IACN,MAAMe,wBAAAA,EAAAA;IAEN,MAAMrC,gBAAAA,CAAW,SAAW2E,CAAAA,CAAAA,4BAA4B,CAAChE,OAAAA,CAAAA;IACzDX,gBAAW,CAAA,SAAA,CAAA,CAAW4E,SAAS,CAACjE,OAAAA,CAAAA;AAEhC+C,IAAAA,eAAAA,CAAgBmB,kBAAkB,EAAA;IAClCT,eAAgBN,CAAAA,KAAK,CAACe,kBAAkB,EAAA;AACxCR,IAAAA,YAAAA,CAAaS,oBAAoB,EAAA;IAEjC,MAAMtB,8BAAAA,EAAAA;AACR,CAAA;;;;"}
@@ -3,6 +3,7 @@ import { async } from '@strapi/utils';
3
3
  import { getService } from './utils/index.mjs';
4
4
  import adminActions from './config/admin-actions.mjs';
5
5
  import adminConditions from './config/admin-conditions.mjs';
6
+ import constants from './services/constants.mjs';
6
7
 
7
8
  const defaultAdminAuthSettings = {
8
9
  providers: {
@@ -82,18 +83,9 @@ const syncAPITokensPermissions = async ()=>{
82
83
  const usersCount = await userService.count();
83
84
  const apiTokenCount = await apiTokenService.count();
84
85
  if (usersCount === 0 && apiTokenCount === 0) {
85
- await apiTokenService.create({
86
- name: 'Read Only',
87
- description: 'A default API token with read-only permissions, only used for accessing resources',
88
- type: 'read-only',
89
- lifespan: null
90
- });
91
- await apiTokenService.create({
92
- name: 'Full Access',
93
- description: 'A default API token with full access permissions, used for accessing or modifying resources',
94
- type: 'full-access',
95
- lifespan: null
96
- });
86
+ for (const token of constants.DEFAULT_API_TOKENS){
87
+ await apiTokenService.create(token);
88
+ }
97
89
  }
98
90
  };
99
91
  var bootstrap = (async ({ strapi: strapi1 })=>{
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.mjs","sources":["../../../../server/src/bootstrap.ts"],"sourcesContent":["import { merge, map, difference, uniq } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { async } from '@strapi/utils';\nimport { getService } from './utils';\nimport adminActions from './config/admin-actions';\nimport adminConditions from './config/admin-conditions';\n\nconst defaultAdminAuthSettings = {\n providers: {\n autoRegister: false,\n defaultRole: null,\n ssoLockedRoles: null,\n },\n};\n\nconst registerPermissionActions = async () => {\n await getService('permission').actionProvider.registerMany(adminActions.actions);\n};\n\nconst registerAdminConditions = async () => {\n await getService('permission').conditionProvider.registerMany(adminConditions.conditions);\n};\n\nconst registerModelHooks = () => {\n const { sendDidChangeInterfaceLanguage } = getService('metrics');\n\n strapi.db.lifecycles.subscribe({\n models: ['admin::user'],\n afterCreate: sendDidChangeInterfaceLanguage,\n afterDelete: sendDidChangeInterfaceLanguage,\n afterUpdate({ params }) {\n if (params.data.preferedLanguage) {\n sendDidChangeInterfaceLanguage();\n }\n },\n });\n};\n\nconst syncAuthSettings = async () => {\n const adminStore = await strapi.store({ type: 'core', name: 'admin' });\n const adminAuthSettings = await adminStore.get({ key: 'auth' });\n const newAuthSettings = merge(defaultAdminAuthSettings, adminAuthSettings);\n\n const roleExists = await getService('role').exists({\n id: newAuthSettings.providers.defaultRole,\n });\n\n // Reset the default SSO role if it has been deleted manually\n if (!roleExists) {\n newAuthSettings.providers.defaultRole = null;\n }\n\n await adminStore.set({ key: 'auth', value: newAuthSettings });\n};\n\nconst syncAPITokensPermissions = async () => {\n const validPermissions = strapi.contentAPI.permissions.providers.action.keys();\n const permissionsInDB = await async.pipe(\n strapi.db.query('admin::api-token-permission').findMany,\n map('action')\n )();\n\n const unknownPermissions = uniq(difference(permissionsInDB, validPermissions));\n\n if (unknownPermissions.length > 0) {\n await strapi.db\n .query('admin::api-token-permission')\n .deleteMany({ where: { action: { $in: unknownPermissions } } });\n }\n};\n\n/**\n * Ensures the creation of default API tokens during the app creation.\n *\n * Checks the database for existing users and API tokens:\n * - If there are no users and no API tokens, it creates two default API tokens:\n * 1. A \"Read Only\" API token with permissions for accessing resources.\n * 2. A \"Full Access\" API token with permissions for accessing and modifying resources.\n *\n * @sideEffects Creates new API tokens in the database if conditions are met.\n */\n\nconst createDefaultAPITokensIfNeeded = async () => {\n const userService = getService('user');\n const apiTokenService = getService('api-token');\n\n const usersCount = await userService.count();\n const apiTokenCount = await apiTokenService.count();\n\n if (usersCount === 0 && apiTokenCount === 0) {\n await apiTokenService.create({\n name: 'Read Only',\n description:\n 'A default API token with read-only permissions, only used for accessing resources',\n type: 'read-only',\n lifespan: null,\n });\n\n await apiTokenService.create({\n name: 'Full Access',\n description:\n 'A default API token with full access permissions, used for accessing or modifying resources',\n type: 'full-access',\n lifespan: null,\n });\n }\n};\n\nexport default async ({ strapi }: { strapi: Core.Strapi }) => {\n await registerAdminConditions();\n await registerPermissionActions();\n registerModelHooks();\n\n const permissionService = getService('permission');\n const userService = getService('user');\n const roleService = getService('role');\n const apiTokenService = getService('api-token');\n const transferService = getService('transfer');\n const tokenService = getService('token');\n\n await roleService.createRolesIfNoneExist();\n await roleService.resetSuperAdminPermissions();\n await roleService.displayWarningIfNoSuperAdmin();\n\n await permissionService.cleanPermissionsInDatabase();\n\n await userService.displayWarningIfUsersDontHaveRole();\n\n await syncAuthSettings();\n await syncAPITokensPermissions();\n\n await getService('metrics').sendUpdateProjectInformation(strapi);\n getService('metrics').startCron(strapi);\n\n apiTokenService.checkSaltIsDefined();\n transferService.token.checkSaltIsDefined();\n tokenService.checkSecretIsDefined();\n\n await createDefaultAPITokensIfNeeded();\n};\n"],"names":["defaultAdminAuthSettings","providers","autoRegister","defaultRole","ssoLockedRoles","registerPermissionActions","getService","actionProvider","registerMany","adminActions","actions","registerAdminConditions","conditionProvider","adminConditions","conditions","registerModelHooks","sendDidChangeInterfaceLanguage","strapi","db","lifecycles","subscribe","models","afterCreate","afterDelete","afterUpdate","params","data","preferedLanguage","syncAuthSettings","adminStore","store","type","name","adminAuthSettings","get","key","newAuthSettings","merge","roleExists","exists","id","set","value","syncAPITokensPermissions","validPermissions","contentAPI","permissions","action","keys","permissionsInDB","async","pipe","query","findMany","map","unknownPermissions","uniq","difference","length","deleteMany","where","$in","createDefaultAPITokensIfNeeded","userService","apiTokenService","usersCount","count","apiTokenCount","create","description","lifespan","permissionService","roleService","transferService","tokenService","createRolesIfNoneExist","resetSuperAdminPermissions","displayWarningIfNoSuperAdmin","cleanPermissionsInDatabase","displayWarningIfUsersDontHaveRole","sendUpdateProjectInformation","startCron","checkSaltIsDefined","token","checkSecretIsDefined"],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.mjs","sources":["../../../../server/src/bootstrap.ts"],"sourcesContent":["import { merge, map, difference, uniq } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { async } from '@strapi/utils';\nimport { getService } from './utils';\nimport adminActions from './config/admin-actions';\nimport adminConditions from './config/admin-conditions';\nimport constants from './services/constants';\n\nconst defaultAdminAuthSettings = {\n providers: {\n autoRegister: false,\n defaultRole: null,\n ssoLockedRoles: null,\n },\n};\n\nconst registerPermissionActions = async () => {\n await getService('permission').actionProvider.registerMany(adminActions.actions);\n};\n\nconst registerAdminConditions = async () => {\n await getService('permission').conditionProvider.registerMany(adminConditions.conditions);\n};\n\nconst registerModelHooks = () => {\n const { sendDidChangeInterfaceLanguage } = getService('metrics');\n\n strapi.db.lifecycles.subscribe({\n models: ['admin::user'],\n afterCreate: sendDidChangeInterfaceLanguage,\n afterDelete: sendDidChangeInterfaceLanguage,\n afterUpdate({ params }) {\n if (params.data.preferedLanguage) {\n sendDidChangeInterfaceLanguage();\n }\n },\n });\n};\n\nconst syncAuthSettings = async () => {\n const adminStore = await strapi.store({ type: 'core', name: 'admin' });\n const adminAuthSettings = await adminStore.get({ key: 'auth' });\n const newAuthSettings = merge(defaultAdminAuthSettings, adminAuthSettings);\n\n const roleExists = await getService('role').exists({\n id: newAuthSettings.providers.defaultRole,\n });\n\n // Reset the default SSO role if it has been deleted manually\n if (!roleExists) {\n newAuthSettings.providers.defaultRole = null;\n }\n\n await adminStore.set({ key: 'auth', value: newAuthSettings });\n};\n\nconst syncAPITokensPermissions = async () => {\n const validPermissions = strapi.contentAPI.permissions.providers.action.keys();\n const permissionsInDB = await async.pipe(\n strapi.db.query('admin::api-token-permission').findMany,\n map('action')\n )();\n\n const unknownPermissions = uniq(difference(permissionsInDB, validPermissions));\n\n if (unknownPermissions.length > 0) {\n await strapi.db\n .query('admin::api-token-permission')\n .deleteMany({ where: { action: { $in: unknownPermissions } } });\n }\n};\n\n/**\n * Ensures the creation of default API tokens during the app creation.\n *\n * Checks the database for existing users and API tokens:\n * - If there are no users and no API tokens, it creates two default API tokens:\n * 1. A \"Read Only\" API token with permissions for accessing resources.\n * 2. A \"Full Access\" API token with permissions for accessing and modifying resources.\n *\n * @sideEffects Creates new API tokens in the database if conditions are met.\n */\n\nconst createDefaultAPITokensIfNeeded = async () => {\n const userService = getService('user');\n const apiTokenService = getService('api-token');\n\n const usersCount = await userService.count();\n const apiTokenCount = await apiTokenService.count();\n\n if (usersCount === 0 && apiTokenCount === 0) {\n for (const token of constants.DEFAULT_API_TOKENS) {\n await apiTokenService.create(token);\n }\n }\n};\n\nexport default async ({ strapi }: { strapi: Core.Strapi }) => {\n await registerAdminConditions();\n await registerPermissionActions();\n registerModelHooks();\n\n const permissionService = getService('permission');\n const userService = getService('user');\n const roleService = getService('role');\n const apiTokenService = getService('api-token');\n const transferService = getService('transfer');\n const tokenService = getService('token');\n\n await roleService.createRolesIfNoneExist();\n await roleService.resetSuperAdminPermissions();\n await roleService.displayWarningIfNoSuperAdmin();\n\n await permissionService.cleanPermissionsInDatabase();\n\n await userService.displayWarningIfUsersDontHaveRole();\n\n await syncAuthSettings();\n await syncAPITokensPermissions();\n\n await getService('metrics').sendUpdateProjectInformation(strapi);\n getService('metrics').startCron(strapi);\n\n apiTokenService.checkSaltIsDefined();\n transferService.token.checkSaltIsDefined();\n tokenService.checkSecretIsDefined();\n\n await createDefaultAPITokensIfNeeded();\n};\n"],"names":["defaultAdminAuthSettings","providers","autoRegister","defaultRole","ssoLockedRoles","registerPermissionActions","getService","actionProvider","registerMany","adminActions","actions","registerAdminConditions","conditionProvider","adminConditions","conditions","registerModelHooks","sendDidChangeInterfaceLanguage","strapi","db","lifecycles","subscribe","models","afterCreate","afterDelete","afterUpdate","params","data","preferedLanguage","syncAuthSettings","adminStore","store","type","name","adminAuthSettings","get","key","newAuthSettings","merge","roleExists","exists","id","set","value","syncAPITokensPermissions","validPermissions","contentAPI","permissions","action","keys","permissionsInDB","async","pipe","query","findMany","map","unknownPermissions","uniq","difference","length","deleteMany","where","$in","createDefaultAPITokensIfNeeded","userService","apiTokenService","usersCount","count","apiTokenCount","token","constants","DEFAULT_API_TOKENS","create","permissionService","roleService","transferService","tokenService","createRolesIfNoneExist","resetSuperAdminPermissions","displayWarningIfNoSuperAdmin","cleanPermissionsInDatabase","displayWarningIfUsersDontHaveRole","sendUpdateProjectInformation","startCron","checkSaltIsDefined","checkSecretIsDefined"],"mappings":"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"}
@@ -4,7 +4,6 @@ var path = require('path');
4
4
  var fp = require('lodash/fp');
5
5
  var _ = require('lodash');
6
6
  var fse = require('fs-extra');
7
- require('@strapi/types');
8
7
  var utils = require('@strapi/utils');
9
8
  var tsUtils = require('@strapi/typescript-utils');
10
9
  var projectSettings = require('../validation/project-settings.js');
@@ -138,6 +137,18 @@ const { isUsingTypeScript } = tsUtils;
138
137
  strapi
139
138
  });
140
139
  return data;
140
+ },
141
+ async getGuidedTourMeta (ctx) {
142
+ const [isFirstSuperAdminUser, completedActions] = await Promise.all([
143
+ index.getService('user').isFirstSuperAdminUser(ctx.state.user.id),
144
+ index.getService('guided-tour').getCompletedActions()
145
+ ]);
146
+ return {
147
+ data: {
148
+ isFirstSuperAdminUser,
149
+ completedActions
150
+ }
151
+ };
141
152
  }
142
153
  };
143
154
 
@@ -1 +1 @@
1
- {"version":3,"file":"admin.js","sources":["../../../../../server/src/controllers/admin.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport path from 'path';\n\nimport { map, values, sumBy, pipe, flatMap, propEq } from 'lodash/fp';\nimport _ from 'lodash';\nimport { exists } from 'fs-extra';\nimport '@strapi/types';\nimport { env } from '@strapi/utils';\nimport tsUtils from '@strapi/typescript-utils';\nimport {\n validateUpdateProjectSettings,\n validateUpdateProjectSettingsFiles,\n validateUpdateProjectSettingsImagesDimensions,\n} from '../validation/project-settings';\nimport { getService } from '../utils';\n\nimport type {\n Init,\n GetProjectSettings,\n Information,\n Plugins,\n TelemetryProperties,\n UpdateProjectSettings,\n} from '../../../shared/contracts/admin';\n\nconst { isUsingTypeScript } = tsUtils;\n\n/**\n * A set of functions called \"actions\" for `Admin`\n */\nexport default {\n // TODO very temporary to check the switch ee/ce\n // When removing this we need to update the /admin/src/index.js file\n // whe,re we set the strapi.window.isEE value\n\n // NOTE: admin/ee/server overrides this controller, and adds the EE features\n // This returns an empty feature list for CE\n async getProjectType() {\n const flags = strapi.config.get('admin.flags', {});\n return { data: { isEE: false, features: [], flags } };\n },\n\n async init() {\n let uuid = strapi.config.get('uuid', false);\n const hasAdmin = await getService('user').exists();\n const { menuLogo, authLogo } = await getService('project-settings').getProjectSettings();\n // set to null if telemetryDisabled flag not avaialble in package.json\n const telemetryDisabled: boolean | null = strapi.config.get(\n 'packageJsonStrapi.telemetryDisabled',\n null\n );\n\n if (telemetryDisabled !== null && telemetryDisabled === true) {\n uuid = false;\n }\n\n return {\n data: {\n uuid,\n hasAdmin,\n menuLogo: menuLogo ? menuLogo.url : null,\n authLogo: authLogo ? authLogo.url : null,\n },\n } satisfies Init.Response;\n },\n\n async getProjectSettings() {\n return getService(\n 'project-settings'\n ).getProjectSettings() satisfies Promise<GetProjectSettings.Response>;\n },\n\n async updateProjectSettings(ctx: Context) {\n const {\n request: { files, body },\n } = ctx as { request: UpdateProjectSettings.Request };\n\n const projectSettingsService = getService('project-settings');\n\n await validateUpdateProjectSettings(body);\n await validateUpdateProjectSettingsFiles(files);\n\n const formatedFiles = await projectSettingsService.parseFilesData(files);\n await validateUpdateProjectSettingsImagesDimensions(formatedFiles);\n\n return projectSettingsService.updateProjectSettings({\n ...body,\n ...formatedFiles,\n }) satisfies Promise<UpdateProjectSettings.Response>;\n },\n\n async telemetryProperties(ctx: Context) {\n // If the telemetry is disabled, ignore the request and return early\n if (strapi.telemetry.isDisabled) {\n ctx.status = 204;\n return;\n }\n\n const useTypescriptOnServer = await isUsingTypeScript(strapi.dirs.app.root);\n const useTypescriptOnAdmin = await isUsingTypeScript(\n path.join(strapi.dirs.app.root, 'src', 'admin')\n );\n const isHostedOnStrapiCloud = env('STRAPI_HOSTING', null) === 'strapi.cloud';\n\n const numberOfAllContentTypes = _.size(strapi.contentTypes);\n const numberOfComponents = _.size(strapi.components);\n\n const getNumberOfDynamicZones = () => {\n return pipe(\n map('attributes'),\n flatMap(values),\n // @ts-expect-error lodash types\n sumBy(propEq('type', 'dynamiczone'))\n )(strapi.contentTypes as any);\n };\n\n return {\n data: {\n useTypescriptOnServer,\n useTypescriptOnAdmin,\n isHostedOnStrapiCloud,\n numberOfAllContentTypes, // TODO: V5: This event should be renamed numberOfContentTypes in V5 as the name is already taken to describe the number of content types using i18n.\n numberOfComponents,\n numberOfDynamicZones: getNumberOfDynamicZones(),\n },\n } satisfies TelemetryProperties.Response;\n },\n\n async information() {\n const currentEnvironment: string = strapi.config.get('environment');\n const autoReload = strapi.config.get('autoReload', false);\n const strapiVersion = strapi.config.get('info.strapi', null);\n const dependencies = strapi.config.get('info.dependencies', {});\n const projectId = strapi.config.get('uuid', null);\n const nodeVersion = process.version;\n const communityEdition = !strapi.EE;\n const useYarn: boolean = await exists(path.join(process.cwd(), 'yarn.lock'));\n\n return {\n data: {\n currentEnvironment,\n autoReload,\n strapiVersion,\n dependencies,\n projectId,\n nodeVersion,\n communityEdition,\n useYarn,\n },\n } satisfies Information.Response;\n },\n\n async plugins(ctx: Context) {\n const enabledPlugins = strapi.config.get('enabledPlugins') as any;\n\n // List of core plugins that are always enabled,\n // and so it's not necessary to display them in the plugins list\n const CORE_PLUGINS = [\n 'content-manager',\n 'content-type-builder',\n 'email',\n 'upload',\n 'i18n',\n 'content-releases',\n 'review-workflows',\n ];\n\n const plugins = Object.entries(enabledPlugins)\n .filter(([key]: any) => !CORE_PLUGINS.includes(key))\n .map(([key, plugin]: any) => ({\n name: plugin.info.name || key,\n displayName: plugin.info.displayName || plugin.info.name || key,\n description: plugin.info.description || '',\n packageName: plugin.info.packageName,\n }));\n\n ctx.send({ plugins }) satisfies Plugins.Response;\n },\n\n async licenseTrialTimeLeft() {\n const data = await strapi.ee.getTrialEndDate({\n strapi,\n });\n\n return data;\n },\n};\n"],"names":["isUsingTypeScript","tsUtils","getProjectType","flags","strapi","config","get","data","isEE","features","init","uuid","hasAdmin","getService","exists","menuLogo","authLogo","getProjectSettings","telemetryDisabled","url","updateProjectSettings","ctx","request","files","body","projectSettingsService","validateUpdateProjectSettings","validateUpdateProjectSettingsFiles","formatedFiles","parseFilesData","validateUpdateProjectSettingsImagesDimensions","telemetryProperties","telemetry","isDisabled","status","useTypescriptOnServer","dirs","app","root","useTypescriptOnAdmin","path","join","isHostedOnStrapiCloud","env","numberOfAllContentTypes","_","size","contentTypes","numberOfComponents","components","getNumberOfDynamicZones","pipe","map","flatMap","values","sumBy","propEq","numberOfDynamicZones","information","currentEnvironment","autoReload","strapiVersion","dependencies","projectId","nodeVersion","process","version","communityEdition","EE","useYarn","cwd","plugins","enabledPlugins","CORE_PLUGINS","Object","entries","filter","key","includes","plugin","name","info","displayName","description","packageName","send","licenseTrialTimeLeft","ee","getTrialEndDate"],"mappings":"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"}
1
+ {"version":3,"file":"admin.js","sources":["../../../../../server/src/controllers/admin.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport path from 'path';\n\nimport { map, values, sumBy, pipe, flatMap, propEq } from 'lodash/fp';\nimport _ from 'lodash';\nimport { exists } from 'fs-extra';\nimport { env } from '@strapi/utils';\nimport tsUtils from '@strapi/typescript-utils';\nimport {\n validateUpdateProjectSettings,\n validateUpdateProjectSettingsFiles,\n validateUpdateProjectSettingsImagesDimensions,\n} from '../validation/project-settings';\nimport { getService } from '../utils';\n\nimport type {\n Init,\n GetProjectSettings,\n Information,\n Plugins,\n TelemetryProperties,\n UpdateProjectSettings,\n GetGuidedTourMeta,\n} from '../../../shared/contracts/admin';\n\nconst { isUsingTypeScript } = tsUtils;\n\n/**\n * A set of functions called \"actions\" for `Admin`\n */\nexport default {\n // TODO very temporary to check the switch ee/ce\n // When removing this we need to update the /admin/src/index.js file\n // whe,re we set the strapi.window.isEE value\n\n // NOTE: admin/ee/server overrides this controller, and adds the EE features\n // This returns an empty feature list for CE\n async getProjectType() {\n const flags = strapi.config.get('admin.flags', {});\n return { data: { isEE: false, features: [], flags } };\n },\n\n async init() {\n let uuid = strapi.config.get('uuid', false);\n const hasAdmin = await getService('user').exists();\n const { menuLogo, authLogo } = await getService('project-settings').getProjectSettings();\n // set to null if telemetryDisabled flag not avaialble in package.json\n const telemetryDisabled: boolean | null = strapi.config.get(\n 'packageJsonStrapi.telemetryDisabled',\n null\n );\n\n if (telemetryDisabled !== null && telemetryDisabled === true) {\n uuid = false;\n }\n\n return {\n data: {\n uuid,\n hasAdmin,\n menuLogo: menuLogo ? menuLogo.url : null,\n authLogo: authLogo ? authLogo.url : null,\n },\n } satisfies Init.Response;\n },\n\n async getProjectSettings() {\n return getService(\n 'project-settings'\n ).getProjectSettings() satisfies Promise<GetProjectSettings.Response>;\n },\n\n async updateProjectSettings(ctx: Context) {\n const {\n request: { files, body },\n } = ctx as { request: UpdateProjectSettings.Request };\n\n const projectSettingsService = getService('project-settings');\n\n await validateUpdateProjectSettings(body);\n await validateUpdateProjectSettingsFiles(files);\n\n const formatedFiles = await projectSettingsService.parseFilesData(files);\n await validateUpdateProjectSettingsImagesDimensions(formatedFiles);\n\n return projectSettingsService.updateProjectSettings({\n ...body,\n ...formatedFiles,\n }) satisfies Promise<UpdateProjectSettings.Response>;\n },\n\n async telemetryProperties(ctx: Context) {\n // If the telemetry is disabled, ignore the request and return early\n if (strapi.telemetry.isDisabled) {\n ctx.status = 204;\n return;\n }\n\n const useTypescriptOnServer = await isUsingTypeScript(strapi.dirs.app.root);\n const useTypescriptOnAdmin = await isUsingTypeScript(\n path.join(strapi.dirs.app.root, 'src', 'admin')\n );\n const isHostedOnStrapiCloud = env('STRAPI_HOSTING', null) === 'strapi.cloud';\n\n const numberOfAllContentTypes = _.size(strapi.contentTypes);\n const numberOfComponents = _.size(strapi.components);\n\n const getNumberOfDynamicZones = () => {\n return pipe(\n map('attributes'),\n flatMap(values),\n // @ts-expect-error lodash types\n sumBy(propEq('type', 'dynamiczone'))\n )(strapi.contentTypes as any);\n };\n\n return {\n data: {\n useTypescriptOnServer,\n useTypescriptOnAdmin,\n isHostedOnStrapiCloud,\n numberOfAllContentTypes, // TODO: V5: This event should be renamed numberOfContentTypes in V5 as the name is already taken to describe the number of content types using i18n.\n numberOfComponents,\n numberOfDynamicZones: getNumberOfDynamicZones(),\n },\n } satisfies TelemetryProperties.Response;\n },\n\n async information() {\n const currentEnvironment: string = strapi.config.get('environment');\n const autoReload = strapi.config.get('autoReload', false);\n const strapiVersion = strapi.config.get('info.strapi', null);\n const dependencies = strapi.config.get('info.dependencies', {});\n const projectId = strapi.config.get('uuid', null);\n const nodeVersion = process.version;\n const communityEdition = !strapi.EE;\n const useYarn: boolean = await exists(path.join(process.cwd(), 'yarn.lock'));\n\n return {\n data: {\n currentEnvironment,\n autoReload,\n strapiVersion,\n dependencies,\n projectId,\n nodeVersion,\n communityEdition,\n useYarn,\n },\n } satisfies Information.Response;\n },\n\n async plugins(ctx: Context) {\n const enabledPlugins = strapi.config.get('enabledPlugins') as any;\n\n // List of core plugins that are always enabled,\n // and so it's not necessary to display them in the plugins list\n const CORE_PLUGINS = [\n 'content-manager',\n 'content-type-builder',\n 'email',\n 'upload',\n 'i18n',\n 'content-releases',\n 'review-workflows',\n ];\n\n const plugins = Object.entries(enabledPlugins)\n .filter(([key]: any) => !CORE_PLUGINS.includes(key))\n .map(([key, plugin]: any) => ({\n name: plugin.info.name || key,\n displayName: plugin.info.displayName || plugin.info.name || key,\n description: plugin.info.description || '',\n packageName: plugin.info.packageName,\n }));\n\n ctx.send({ plugins }) satisfies Plugins.Response;\n },\n\n async licenseTrialTimeLeft() {\n const data = await strapi.ee.getTrialEndDate({\n strapi,\n });\n\n return data;\n },\n\n async getGuidedTourMeta(ctx: Context) {\n const [isFirstSuperAdminUser, completedActions] = await Promise.all([\n getService('user').isFirstSuperAdminUser(ctx.state.user.id),\n getService('guided-tour').getCompletedActions(),\n ]);\n\n return {\n data: {\n isFirstSuperAdminUser,\n completedActions,\n },\n } satisfies GetGuidedTourMeta.Response;\n },\n};\n"],"names":["isUsingTypeScript","tsUtils","getProjectType","flags","strapi","config","get","data","isEE","features","init","uuid","hasAdmin","getService","exists","menuLogo","authLogo","getProjectSettings","telemetryDisabled","url","updateProjectSettings","ctx","request","files","body","projectSettingsService","validateUpdateProjectSettings","validateUpdateProjectSettingsFiles","formatedFiles","parseFilesData","validateUpdateProjectSettingsImagesDimensions","telemetryProperties","telemetry","isDisabled","status","useTypescriptOnServer","dirs","app","root","useTypescriptOnAdmin","path","join","isHostedOnStrapiCloud","env","numberOfAllContentTypes","_","size","contentTypes","numberOfComponents","components","getNumberOfDynamicZones","pipe","map","flatMap","values","sumBy","propEq","numberOfDynamicZones","information","currentEnvironment","autoReload","strapiVersion","dependencies","projectId","nodeVersion","process","version","communityEdition","EE","useYarn","cwd","plugins","enabledPlugins","CORE_PLUGINS","Object","entries","filter","key","includes","plugin","name","info","displayName","description","packageName","send","licenseTrialTimeLeft","ee","getTrialEndDate","getGuidedTourMeta","isFirstSuperAdminUser","completedActions","Promise","all","state","user","id","getCompletedActions"],"mappings":"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"}
@@ -2,7 +2,6 @@ import path from 'path';
2
2
  import { pipe, map, flatMap, values, sumBy, propEq } from 'lodash/fp';
3
3
  import ___default from 'lodash';
4
4
  import { exists } from 'fs-extra';
5
- import '@strapi/types';
6
5
  import { env } from '@strapi/utils';
7
6
  import tsUtils from '@strapi/typescript-utils';
8
7
  import { validateUpdateProjectSettings, validateUpdateProjectSettingsFiles, validateUpdateProjectSettingsImagesDimensions } from '../validation/project-settings.mjs';
@@ -136,6 +135,18 @@ const { isUsingTypeScript } = tsUtils;
136
135
  strapi
137
136
  });
138
137
  return data;
138
+ },
139
+ async getGuidedTourMeta (ctx) {
140
+ const [isFirstSuperAdminUser, completedActions] = await Promise.all([
141
+ getService('user').isFirstSuperAdminUser(ctx.state.user.id),
142
+ getService('guided-tour').getCompletedActions()
143
+ ]);
144
+ return {
145
+ data: {
146
+ isFirstSuperAdminUser,
147
+ completedActions
148
+ }
149
+ };
139
150
  }
140
151
  };
141
152
 
@@ -1 +1 @@
1
- {"version":3,"file":"admin.mjs","sources":["../../../../../server/src/controllers/admin.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport path from 'path';\n\nimport { map, values, sumBy, pipe, flatMap, propEq } from 'lodash/fp';\nimport _ from 'lodash';\nimport { exists } from 'fs-extra';\nimport '@strapi/types';\nimport { env } from '@strapi/utils';\nimport tsUtils from '@strapi/typescript-utils';\nimport {\n validateUpdateProjectSettings,\n validateUpdateProjectSettingsFiles,\n validateUpdateProjectSettingsImagesDimensions,\n} from '../validation/project-settings';\nimport { getService } from '../utils';\n\nimport type {\n Init,\n GetProjectSettings,\n Information,\n Plugins,\n TelemetryProperties,\n UpdateProjectSettings,\n} from '../../../shared/contracts/admin';\n\nconst { isUsingTypeScript } = tsUtils;\n\n/**\n * A set of functions called \"actions\" for `Admin`\n */\nexport default {\n // TODO very temporary to check the switch ee/ce\n // When removing this we need to update the /admin/src/index.js file\n // whe,re we set the strapi.window.isEE value\n\n // NOTE: admin/ee/server overrides this controller, and adds the EE features\n // This returns an empty feature list for CE\n async getProjectType() {\n const flags = strapi.config.get('admin.flags', {});\n return { data: { isEE: false, features: [], flags } };\n },\n\n async init() {\n let uuid = strapi.config.get('uuid', false);\n const hasAdmin = await getService('user').exists();\n const { menuLogo, authLogo } = await getService('project-settings').getProjectSettings();\n // set to null if telemetryDisabled flag not avaialble in package.json\n const telemetryDisabled: boolean | null = strapi.config.get(\n 'packageJsonStrapi.telemetryDisabled',\n null\n );\n\n if (telemetryDisabled !== null && telemetryDisabled === true) {\n uuid = false;\n }\n\n return {\n data: {\n uuid,\n hasAdmin,\n menuLogo: menuLogo ? menuLogo.url : null,\n authLogo: authLogo ? authLogo.url : null,\n },\n } satisfies Init.Response;\n },\n\n async getProjectSettings() {\n return getService(\n 'project-settings'\n ).getProjectSettings() satisfies Promise<GetProjectSettings.Response>;\n },\n\n async updateProjectSettings(ctx: Context) {\n const {\n request: { files, body },\n } = ctx as { request: UpdateProjectSettings.Request };\n\n const projectSettingsService = getService('project-settings');\n\n await validateUpdateProjectSettings(body);\n await validateUpdateProjectSettingsFiles(files);\n\n const formatedFiles = await projectSettingsService.parseFilesData(files);\n await validateUpdateProjectSettingsImagesDimensions(formatedFiles);\n\n return projectSettingsService.updateProjectSettings({\n ...body,\n ...formatedFiles,\n }) satisfies Promise<UpdateProjectSettings.Response>;\n },\n\n async telemetryProperties(ctx: Context) {\n // If the telemetry is disabled, ignore the request and return early\n if (strapi.telemetry.isDisabled) {\n ctx.status = 204;\n return;\n }\n\n const useTypescriptOnServer = await isUsingTypeScript(strapi.dirs.app.root);\n const useTypescriptOnAdmin = await isUsingTypeScript(\n path.join(strapi.dirs.app.root, 'src', 'admin')\n );\n const isHostedOnStrapiCloud = env('STRAPI_HOSTING', null) === 'strapi.cloud';\n\n const numberOfAllContentTypes = _.size(strapi.contentTypes);\n const numberOfComponents = _.size(strapi.components);\n\n const getNumberOfDynamicZones = () => {\n return pipe(\n map('attributes'),\n flatMap(values),\n // @ts-expect-error lodash types\n sumBy(propEq('type', 'dynamiczone'))\n )(strapi.contentTypes as any);\n };\n\n return {\n data: {\n useTypescriptOnServer,\n useTypescriptOnAdmin,\n isHostedOnStrapiCloud,\n numberOfAllContentTypes, // TODO: V5: This event should be renamed numberOfContentTypes in V5 as the name is already taken to describe the number of content types using i18n.\n numberOfComponents,\n numberOfDynamicZones: getNumberOfDynamicZones(),\n },\n } satisfies TelemetryProperties.Response;\n },\n\n async information() {\n const currentEnvironment: string = strapi.config.get('environment');\n const autoReload = strapi.config.get('autoReload', false);\n const strapiVersion = strapi.config.get('info.strapi', null);\n const dependencies = strapi.config.get('info.dependencies', {});\n const projectId = strapi.config.get('uuid', null);\n const nodeVersion = process.version;\n const communityEdition = !strapi.EE;\n const useYarn: boolean = await exists(path.join(process.cwd(), 'yarn.lock'));\n\n return {\n data: {\n currentEnvironment,\n autoReload,\n strapiVersion,\n dependencies,\n projectId,\n nodeVersion,\n communityEdition,\n useYarn,\n },\n } satisfies Information.Response;\n },\n\n async plugins(ctx: Context) {\n const enabledPlugins = strapi.config.get('enabledPlugins') as any;\n\n // List of core plugins that are always enabled,\n // and so it's not necessary to display them in the plugins list\n const CORE_PLUGINS = [\n 'content-manager',\n 'content-type-builder',\n 'email',\n 'upload',\n 'i18n',\n 'content-releases',\n 'review-workflows',\n ];\n\n const plugins = Object.entries(enabledPlugins)\n .filter(([key]: any) => !CORE_PLUGINS.includes(key))\n .map(([key, plugin]: any) => ({\n name: plugin.info.name || key,\n displayName: plugin.info.displayName || plugin.info.name || key,\n description: plugin.info.description || '',\n packageName: plugin.info.packageName,\n }));\n\n ctx.send({ plugins }) satisfies Plugins.Response;\n },\n\n async licenseTrialTimeLeft() {\n const data = await strapi.ee.getTrialEndDate({\n strapi,\n });\n\n return data;\n },\n};\n"],"names":["isUsingTypeScript","tsUtils","getProjectType","flags","strapi","config","get","data","isEE","features","init","uuid","hasAdmin","getService","exists","menuLogo","authLogo","getProjectSettings","telemetryDisabled","url","updateProjectSettings","ctx","request","files","body","projectSettingsService","validateUpdateProjectSettings","validateUpdateProjectSettingsFiles","formatedFiles","parseFilesData","validateUpdateProjectSettingsImagesDimensions","telemetryProperties","telemetry","isDisabled","status","useTypescriptOnServer","dirs","app","root","useTypescriptOnAdmin","path","join","isHostedOnStrapiCloud","env","numberOfAllContentTypes","_","size","contentTypes","numberOfComponents","components","getNumberOfDynamicZones","pipe","map","flatMap","values","sumBy","propEq","numberOfDynamicZones","information","currentEnvironment","autoReload","strapiVersion","dependencies","projectId","nodeVersion","process","version","communityEdition","EE","useYarn","cwd","plugins","enabledPlugins","CORE_PLUGINS","Object","entries","filter","key","includes","plugin","name","info","displayName","description","packageName","send","licenseTrialTimeLeft","ee","getTrialEndDate"],"mappings":"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"}
1
+ {"version":3,"file":"admin.mjs","sources":["../../../../../server/src/controllers/admin.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport path from 'path';\n\nimport { map, values, sumBy, pipe, flatMap, propEq } from 'lodash/fp';\nimport _ from 'lodash';\nimport { exists } from 'fs-extra';\nimport { env } from '@strapi/utils';\nimport tsUtils from '@strapi/typescript-utils';\nimport {\n validateUpdateProjectSettings,\n validateUpdateProjectSettingsFiles,\n validateUpdateProjectSettingsImagesDimensions,\n} from '../validation/project-settings';\nimport { getService } from '../utils';\n\nimport type {\n Init,\n GetProjectSettings,\n Information,\n Plugins,\n TelemetryProperties,\n UpdateProjectSettings,\n GetGuidedTourMeta,\n} from '../../../shared/contracts/admin';\n\nconst { isUsingTypeScript } = tsUtils;\n\n/**\n * A set of functions called \"actions\" for `Admin`\n */\nexport default {\n // TODO very temporary to check the switch ee/ce\n // When removing this we need to update the /admin/src/index.js file\n // whe,re we set the strapi.window.isEE value\n\n // NOTE: admin/ee/server overrides this controller, and adds the EE features\n // This returns an empty feature list for CE\n async getProjectType() {\n const flags = strapi.config.get('admin.flags', {});\n return { data: { isEE: false, features: [], flags } };\n },\n\n async init() {\n let uuid = strapi.config.get('uuid', false);\n const hasAdmin = await getService('user').exists();\n const { menuLogo, authLogo } = await getService('project-settings').getProjectSettings();\n // set to null if telemetryDisabled flag not avaialble in package.json\n const telemetryDisabled: boolean | null = strapi.config.get(\n 'packageJsonStrapi.telemetryDisabled',\n null\n );\n\n if (telemetryDisabled !== null && telemetryDisabled === true) {\n uuid = false;\n }\n\n return {\n data: {\n uuid,\n hasAdmin,\n menuLogo: menuLogo ? menuLogo.url : null,\n authLogo: authLogo ? authLogo.url : null,\n },\n } satisfies Init.Response;\n },\n\n async getProjectSettings() {\n return getService(\n 'project-settings'\n ).getProjectSettings() satisfies Promise<GetProjectSettings.Response>;\n },\n\n async updateProjectSettings(ctx: Context) {\n const {\n request: { files, body },\n } = ctx as { request: UpdateProjectSettings.Request };\n\n const projectSettingsService = getService('project-settings');\n\n await validateUpdateProjectSettings(body);\n await validateUpdateProjectSettingsFiles(files);\n\n const formatedFiles = await projectSettingsService.parseFilesData(files);\n await validateUpdateProjectSettingsImagesDimensions(formatedFiles);\n\n return projectSettingsService.updateProjectSettings({\n ...body,\n ...formatedFiles,\n }) satisfies Promise<UpdateProjectSettings.Response>;\n },\n\n async telemetryProperties(ctx: Context) {\n // If the telemetry is disabled, ignore the request and return early\n if (strapi.telemetry.isDisabled) {\n ctx.status = 204;\n return;\n }\n\n const useTypescriptOnServer = await isUsingTypeScript(strapi.dirs.app.root);\n const useTypescriptOnAdmin = await isUsingTypeScript(\n path.join(strapi.dirs.app.root, 'src', 'admin')\n );\n const isHostedOnStrapiCloud = env('STRAPI_HOSTING', null) === 'strapi.cloud';\n\n const numberOfAllContentTypes = _.size(strapi.contentTypes);\n const numberOfComponents = _.size(strapi.components);\n\n const getNumberOfDynamicZones = () => {\n return pipe(\n map('attributes'),\n flatMap(values),\n // @ts-expect-error lodash types\n sumBy(propEq('type', 'dynamiczone'))\n )(strapi.contentTypes as any);\n };\n\n return {\n data: {\n useTypescriptOnServer,\n useTypescriptOnAdmin,\n isHostedOnStrapiCloud,\n numberOfAllContentTypes, // TODO: V5: This event should be renamed numberOfContentTypes in V5 as the name is already taken to describe the number of content types using i18n.\n numberOfComponents,\n numberOfDynamicZones: getNumberOfDynamicZones(),\n },\n } satisfies TelemetryProperties.Response;\n },\n\n async information() {\n const currentEnvironment: string = strapi.config.get('environment');\n const autoReload = strapi.config.get('autoReload', false);\n const strapiVersion = strapi.config.get('info.strapi', null);\n const dependencies = strapi.config.get('info.dependencies', {});\n const projectId = strapi.config.get('uuid', null);\n const nodeVersion = process.version;\n const communityEdition = !strapi.EE;\n const useYarn: boolean = await exists(path.join(process.cwd(), 'yarn.lock'));\n\n return {\n data: {\n currentEnvironment,\n autoReload,\n strapiVersion,\n dependencies,\n projectId,\n nodeVersion,\n communityEdition,\n useYarn,\n },\n } satisfies Information.Response;\n },\n\n async plugins(ctx: Context) {\n const enabledPlugins = strapi.config.get('enabledPlugins') as any;\n\n // List of core plugins that are always enabled,\n // and so it's not necessary to display them in the plugins list\n const CORE_PLUGINS = [\n 'content-manager',\n 'content-type-builder',\n 'email',\n 'upload',\n 'i18n',\n 'content-releases',\n 'review-workflows',\n ];\n\n const plugins = Object.entries(enabledPlugins)\n .filter(([key]: any) => !CORE_PLUGINS.includes(key))\n .map(([key, plugin]: any) => ({\n name: plugin.info.name || key,\n displayName: plugin.info.displayName || plugin.info.name || key,\n description: plugin.info.description || '',\n packageName: plugin.info.packageName,\n }));\n\n ctx.send({ plugins }) satisfies Plugins.Response;\n },\n\n async licenseTrialTimeLeft() {\n const data = await strapi.ee.getTrialEndDate({\n strapi,\n });\n\n return data;\n },\n\n async getGuidedTourMeta(ctx: Context) {\n const [isFirstSuperAdminUser, completedActions] = await Promise.all([\n getService('user').isFirstSuperAdminUser(ctx.state.user.id),\n getService('guided-tour').getCompletedActions(),\n ]);\n\n return {\n data: {\n isFirstSuperAdminUser,\n completedActions,\n },\n } satisfies GetGuidedTourMeta.Response;\n },\n};\n"],"names":["isUsingTypeScript","tsUtils","getProjectType","flags","strapi","config","get","data","isEE","features","init","uuid","hasAdmin","getService","exists","menuLogo","authLogo","getProjectSettings","telemetryDisabled","url","updateProjectSettings","ctx","request","files","body","projectSettingsService","validateUpdateProjectSettings","validateUpdateProjectSettingsFiles","formatedFiles","parseFilesData","validateUpdateProjectSettingsImagesDimensions","telemetryProperties","telemetry","isDisabled","status","useTypescriptOnServer","dirs","app","root","useTypescriptOnAdmin","path","join","isHostedOnStrapiCloud","env","numberOfAllContentTypes","_","size","contentTypes","numberOfComponents","components","getNumberOfDynamicZones","pipe","map","flatMap","values","sumBy","propEq","numberOfDynamicZones","information","currentEnvironment","autoReload","strapiVersion","dependencies","projectId","nodeVersion","process","version","communityEdition","EE","useYarn","cwd","plugins","enabledPlugins","CORE_PLUGINS","Object","entries","filter","key","includes","plugin","name","info","displayName","description","packageName","send","licenseTrialTimeLeft","ee","getTrialEndDate","getGuidedTourMeta","isFirstSuperAdminUser","completedActions","Promise","all","state","user","id","getCompletedActions"],"mappings":"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"}
@@ -100,6 +100,16 @@ var admin = [
100
100
  'admin::isAuthenticatedAdmin'
101
101
  ]
102
102
  }
103
+ },
104
+ {
105
+ method: 'GET',
106
+ path: '/guided-tour-meta',
107
+ handler: 'admin.getGuidedTourMeta',
108
+ config: {
109
+ policies: [
110
+ 'admin::isAuthenticatedAdmin'
111
+ ]
112
+ }
103
113
  }
104
114
  ];
105
115
 
@@ -1 +1 @@
1
- {"version":3,"file":"admin.js","sources":["../../../../../server/src/routes/admin.ts"],"sourcesContent":["export default [\n {\n method: 'GET',\n path: '/init',\n handler: 'admin.init',\n config: { auth: false },\n },\n {\n method: 'GET',\n path: '/project-settings',\n handler: 'admin.getProjectSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: { actions: ['admin::project-settings.read'] },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/project-settings',\n handler: 'admin.updateProjectSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: { actions: ['admin::project-settings.update'] },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/project-type',\n handler: 'admin.getProjectType',\n config: { auth: false },\n },\n {\n method: 'GET',\n path: '/information',\n handler: 'admin.information',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/telemetry-properties',\n handler: 'admin.telemetryProperties',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/plugins',\n handler: 'admin.plugins',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['admin::marketplace.read'] } },\n ],\n },\n },\n {\n method: 'GET',\n path: '/license-trial-time-left',\n handler: 'admin.licenseTrialTimeLeft',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n];\n"],"names":["method","path","handler","config","auth","policies","name","actions"],"mappings":";;AAAA,YAAe;AACb,IAAA;QACEA,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,OAAA;QACNC,OAAS,EAAA,YAAA;QACTC,MAAQ,EAAA;YAAEC,IAAM,EAAA;AAAM;AACxB,KAAA;AACA,IAAA;QACEJ,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,mBAAA;QACNC,OAAS,EAAA,0BAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AACR,gBAAA,6BAAA;AACA,gBAAA;oBACEC,IAAM,EAAA,uBAAA;oBACNH,MAAQ,EAAA;wBAAEI,OAAS,EAAA;AAAC,4BAAA;AAA+B;AAAC;AACtD;AACD;AACH;AACF,KAAA;AACA,IAAA;QACEP,MAAQ,EAAA,MAAA;QACRC,IAAM,EAAA,mBAAA;QACNC,OAAS,EAAA,6BAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AACR,gBAAA,6BAAA;AACA,gBAAA;oBACEC,IAAM,EAAA,uBAAA;oBACNH,MAAQ,EAAA;wBAAEI,OAAS,EAAA;AAAC,4BAAA;AAAiC;AAAC;AACxD;AACD;AACH;AACF,KAAA;AACA,IAAA;QACEP,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,eAAA;QACNC,OAAS,EAAA,sBAAA;QACTC,MAAQ,EAAA;YAAEC,IAAM,EAAA;AAAM;AACxB,KAAA;AACA,IAAA;QACEJ,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,cAAA;QACNC,OAAS,EAAA,mBAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF,KAAA;AACA,IAAA;QACEL,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,uBAAA;QACNC,OAAS,EAAA,2BAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF,KAAA;AACA,IAAA;QACEL,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,UAAA;QACNC,OAAS,EAAA,eAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AACR,gBAAA,6BAAA;AACA,gBAAA;oBAAEC,IAAM,EAAA,uBAAA;oBAAyBH,MAAQ,EAAA;wBAAEI,OAAS,EAAA;AAAC,4BAAA;AAA0B;AAAC;AAAE;AACnF;AACH;AACF,KAAA;AACA,IAAA;QACEP,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,0BAAA;QACNC,OAAS,EAAA,4BAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF;CACD;;;;"}
1
+ {"version":3,"file":"admin.js","sources":["../../../../../server/src/routes/admin.ts"],"sourcesContent":["export default [\n {\n method: 'GET',\n path: '/init',\n handler: 'admin.init',\n config: { auth: false },\n },\n {\n method: 'GET',\n path: '/project-settings',\n handler: 'admin.getProjectSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: { actions: ['admin::project-settings.read'] },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/project-settings',\n handler: 'admin.updateProjectSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: { actions: ['admin::project-settings.update'] },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/project-type',\n handler: 'admin.getProjectType',\n config: { auth: false },\n },\n {\n method: 'GET',\n path: '/information',\n handler: 'admin.information',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/telemetry-properties',\n handler: 'admin.telemetryProperties',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/plugins',\n handler: 'admin.plugins',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['admin::marketplace.read'] } },\n ],\n },\n },\n {\n method: 'GET',\n path: '/license-trial-time-left',\n handler: 'admin.licenseTrialTimeLeft',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/guided-tour-meta',\n handler: 'admin.getGuidedTourMeta',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n];\n"],"names":["method","path","handler","config","auth","policies","name","actions"],"mappings":";;AAAA,YAAe;AACb,IAAA;QACEA,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,OAAA;QACNC,OAAS,EAAA,YAAA;QACTC,MAAQ,EAAA;YAAEC,IAAM,EAAA;AAAM;AACxB,KAAA;AACA,IAAA;QACEJ,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,mBAAA;QACNC,OAAS,EAAA,0BAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AACR,gBAAA,6BAAA;AACA,gBAAA;oBACEC,IAAM,EAAA,uBAAA;oBACNH,MAAQ,EAAA;wBAAEI,OAAS,EAAA;AAAC,4BAAA;AAA+B;AAAC;AACtD;AACD;AACH;AACF,KAAA;AACA,IAAA;QACEP,MAAQ,EAAA,MAAA;QACRC,IAAM,EAAA,mBAAA;QACNC,OAAS,EAAA,6BAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AACR,gBAAA,6BAAA;AACA,gBAAA;oBACEC,IAAM,EAAA,uBAAA;oBACNH,MAAQ,EAAA;wBAAEI,OAAS,EAAA;AAAC,4BAAA;AAAiC;AAAC;AACxD;AACD;AACH;AACF,KAAA;AACA,IAAA;QACEP,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,eAAA;QACNC,OAAS,EAAA,sBAAA;QACTC,MAAQ,EAAA;YAAEC,IAAM,EAAA;AAAM;AACxB,KAAA;AACA,IAAA;QACEJ,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,cAAA;QACNC,OAAS,EAAA,mBAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF,KAAA;AACA,IAAA;QACEL,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,uBAAA;QACNC,OAAS,EAAA,2BAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF,KAAA;AACA,IAAA;QACEL,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,UAAA;QACNC,OAAS,EAAA,eAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AACR,gBAAA,6BAAA;AACA,gBAAA;oBAAEC,IAAM,EAAA,uBAAA;oBAAyBH,MAAQ,EAAA;wBAAEI,OAAS,EAAA;AAAC,4BAAA;AAA0B;AAAC;AAAE;AACnF;AACH;AACF,KAAA;AACA,IAAA;QACEP,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,0BAAA;QACNC,OAAS,EAAA,4BAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF,KAAA;AACA,IAAA;QACEL,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,mBAAA;QACNC,OAAS,EAAA,yBAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF;CACD;;;;"}
@@ -98,6 +98,16 @@ var admin = [
98
98
  'admin::isAuthenticatedAdmin'
99
99
  ]
100
100
  }
101
+ },
102
+ {
103
+ method: 'GET',
104
+ path: '/guided-tour-meta',
105
+ handler: 'admin.getGuidedTourMeta',
106
+ config: {
107
+ policies: [
108
+ 'admin::isAuthenticatedAdmin'
109
+ ]
110
+ }
101
111
  }
102
112
  ];
103
113
 
@@ -1 +1 @@
1
- {"version":3,"file":"admin.mjs","sources":["../../../../../server/src/routes/admin.ts"],"sourcesContent":["export default [\n {\n method: 'GET',\n path: '/init',\n handler: 'admin.init',\n config: { auth: false },\n },\n {\n method: 'GET',\n path: '/project-settings',\n handler: 'admin.getProjectSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: { actions: ['admin::project-settings.read'] },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/project-settings',\n handler: 'admin.updateProjectSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: { actions: ['admin::project-settings.update'] },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/project-type',\n handler: 'admin.getProjectType',\n config: { auth: false },\n },\n {\n method: 'GET',\n path: '/information',\n handler: 'admin.information',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/telemetry-properties',\n handler: 'admin.telemetryProperties',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/plugins',\n handler: 'admin.plugins',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['admin::marketplace.read'] } },\n ],\n },\n },\n {\n method: 'GET',\n path: '/license-trial-time-left',\n handler: 'admin.licenseTrialTimeLeft',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n];\n"],"names":["method","path","handler","config","auth","policies","name","actions"],"mappings":"AAAA,YAAe;AACb,IAAA;QACEA,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,OAAA;QACNC,OAAS,EAAA,YAAA;QACTC,MAAQ,EAAA;YAAEC,IAAM,EAAA;AAAM;AACxB,KAAA;AACA,IAAA;QACEJ,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,mBAAA;QACNC,OAAS,EAAA,0BAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AACR,gBAAA,6BAAA;AACA,gBAAA;oBACEC,IAAM,EAAA,uBAAA;oBACNH,MAAQ,EAAA;wBAAEI,OAAS,EAAA;AAAC,4BAAA;AAA+B;AAAC;AACtD;AACD;AACH;AACF,KAAA;AACA,IAAA;QACEP,MAAQ,EAAA,MAAA;QACRC,IAAM,EAAA,mBAAA;QACNC,OAAS,EAAA,6BAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AACR,gBAAA,6BAAA;AACA,gBAAA;oBACEC,IAAM,EAAA,uBAAA;oBACNH,MAAQ,EAAA;wBAAEI,OAAS,EAAA;AAAC,4BAAA;AAAiC;AAAC;AACxD;AACD;AACH;AACF,KAAA;AACA,IAAA;QACEP,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,eAAA;QACNC,OAAS,EAAA,sBAAA;QACTC,MAAQ,EAAA;YAAEC,IAAM,EAAA;AAAM;AACxB,KAAA;AACA,IAAA;QACEJ,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,cAAA;QACNC,OAAS,EAAA,mBAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF,KAAA;AACA,IAAA;QACEL,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,uBAAA;QACNC,OAAS,EAAA,2BAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF,KAAA;AACA,IAAA;QACEL,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,UAAA;QACNC,OAAS,EAAA,eAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AACR,gBAAA,6BAAA;AACA,gBAAA;oBAAEC,IAAM,EAAA,uBAAA;oBAAyBH,MAAQ,EAAA;wBAAEI,OAAS,EAAA;AAAC,4BAAA;AAA0B;AAAC;AAAE;AACnF;AACH;AACF,KAAA;AACA,IAAA;QACEP,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,0BAAA;QACNC,OAAS,EAAA,4BAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF;CACD;;;;"}
1
+ {"version":3,"file":"admin.mjs","sources":["../../../../../server/src/routes/admin.ts"],"sourcesContent":["export default [\n {\n method: 'GET',\n path: '/init',\n handler: 'admin.init',\n config: { auth: false },\n },\n {\n method: 'GET',\n path: '/project-settings',\n handler: 'admin.getProjectSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: { actions: ['admin::project-settings.read'] },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/project-settings',\n handler: 'admin.updateProjectSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: { actions: ['admin::project-settings.update'] },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/project-type',\n handler: 'admin.getProjectType',\n config: { auth: false },\n },\n {\n method: 'GET',\n path: '/information',\n handler: 'admin.information',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/telemetry-properties',\n handler: 'admin.telemetryProperties',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/plugins',\n handler: 'admin.plugins',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['admin::marketplace.read'] } },\n ],\n },\n },\n {\n method: 'GET',\n path: '/license-trial-time-left',\n handler: 'admin.licenseTrialTimeLeft',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/guided-tour-meta',\n handler: 'admin.getGuidedTourMeta',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n];\n"],"names":["method","path","handler","config","auth","policies","name","actions"],"mappings":"AAAA,YAAe;AACb,IAAA;QACEA,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,OAAA;QACNC,OAAS,EAAA,YAAA;QACTC,MAAQ,EAAA;YAAEC,IAAM,EAAA;AAAM;AACxB,KAAA;AACA,IAAA;QACEJ,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,mBAAA;QACNC,OAAS,EAAA,0BAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AACR,gBAAA,6BAAA;AACA,gBAAA;oBACEC,IAAM,EAAA,uBAAA;oBACNH,MAAQ,EAAA;wBAAEI,OAAS,EAAA;AAAC,4BAAA;AAA+B;AAAC;AACtD;AACD;AACH;AACF,KAAA;AACA,IAAA;QACEP,MAAQ,EAAA,MAAA;QACRC,IAAM,EAAA,mBAAA;QACNC,OAAS,EAAA,6BAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AACR,gBAAA,6BAAA;AACA,gBAAA;oBACEC,IAAM,EAAA,uBAAA;oBACNH,MAAQ,EAAA;wBAAEI,OAAS,EAAA;AAAC,4BAAA;AAAiC;AAAC;AACxD;AACD;AACH;AACF,KAAA;AACA,IAAA;QACEP,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,eAAA;QACNC,OAAS,EAAA,sBAAA;QACTC,MAAQ,EAAA;YAAEC,IAAM,EAAA;AAAM;AACxB,KAAA;AACA,IAAA;QACEJ,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,cAAA;QACNC,OAAS,EAAA,mBAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF,KAAA;AACA,IAAA;QACEL,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,uBAAA;QACNC,OAAS,EAAA,2BAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF,KAAA;AACA,IAAA;QACEL,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,UAAA;QACNC,OAAS,EAAA,eAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AACR,gBAAA,6BAAA;AACA,gBAAA;oBAAEC,IAAM,EAAA,uBAAA;oBAAyBH,MAAQ,EAAA;wBAAEI,OAAS,EAAA;AAAC,4BAAA;AAA0B;AAAC;AAAE;AACnF;AACH;AACF,KAAA;AACA,IAAA;QACEP,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,0BAAA;QACNC,OAAS,EAAA,4BAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF,KAAA;AACA,IAAA;QACEL,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,mBAAA;QACNC,OAAS,EAAA,yBAAA;QACTC,MAAQ,EAAA;YACNE,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF;CACD;;;;"}
@@ -23,6 +23,20 @@ const constants = {
23
23
  DAYS_30: 30 * DAY_IN_MS,
24
24
  DAYS_90: 90 * DAY_IN_MS
25
25
  },
26
+ DEFAULT_API_TOKENS: [
27
+ {
28
+ name: 'Read Only',
29
+ description: 'A default API token with read-only permissions, only used for accessing resources',
30
+ type: 'read-only',
31
+ lifespan: null
32
+ },
33
+ {
34
+ name: 'Full Access',
35
+ description: 'A default API token with full access permissions, used for accessing or modifying resources',
36
+ type: 'full-access',
37
+ lifespan: null
38
+ }
39
+ ],
26
40
  TRANSFER_TOKEN_TYPE: {
27
41
  PUSH: 'push',
28
42
  PULL: 'pull'
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../../../server/src/services/constants.ts"],"sourcesContent":["const DAY_IN_MS = 24 * 60 * 60 * 1000;\n\nconst constants = {\n CONTENT_TYPE_SECTION: 'contentTypes',\n SUPER_ADMIN_CODE: 'strapi-super-admin',\n EDITOR_CODE: 'strapi-editor',\n AUTHOR_CODE: 'strapi-author',\n READ_ACTION: 'plugin::content-manager.explorer.read',\n CREATE_ACTION: 'plugin::content-manager.explorer.create',\n UPDATE_ACTION: 'plugin::content-manager.explorer.update',\n DELETE_ACTION: 'plugin::content-manager.explorer.delete',\n PUBLISH_ACTION: 'plugin::content-manager.explorer.publish',\n API_TOKEN_TYPE: {\n READ_ONLY: 'read-only',\n FULL_ACCESS: 'full-access',\n CUSTOM: 'custom',\n },\n // The front-end only displays these values\n API_TOKEN_LIFESPANS: {\n UNLIMITED: null,\n DAYS_7: 7 * DAY_IN_MS,\n DAYS_30: 30 * DAY_IN_MS,\n DAYS_90: 90 * DAY_IN_MS,\n },\n TRANSFER_TOKEN_TYPE: {\n PUSH: 'push',\n PULL: 'pull',\n },\n TRANSFER_TOKEN_LIFESPANS: {\n UNLIMITED: null,\n DAYS_7: 7 * DAY_IN_MS,\n DAYS_30: 30 * DAY_IN_MS,\n DAYS_90: 90 * DAY_IN_MS,\n },\n};\n\nexport default constants;\n"],"names":["DAY_IN_MS","constants","CONTENT_TYPE_SECTION","SUPER_ADMIN_CODE","EDITOR_CODE","AUTHOR_CODE","READ_ACTION","CREATE_ACTION","UPDATE_ACTION","DELETE_ACTION","PUBLISH_ACTION","API_TOKEN_TYPE","READ_ONLY","FULL_ACCESS","CUSTOM","API_TOKEN_LIFESPANS","UNLIMITED","DAYS_7","DAYS_30","DAYS_90","TRANSFER_TOKEN_TYPE","PUSH","PULL","TRANSFER_TOKEN_LIFESPANS"],"mappings":";;AAAA,MAAMA,SAAAA,GAAY,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA,IAAA;AAEjC,MAAMC,SAAY,GAAA;IAChBC,oBAAsB,EAAA,cAAA;IACtBC,gBAAkB,EAAA,oBAAA;IAClBC,WAAa,EAAA,eAAA;IACbC,WAAa,EAAA,eAAA;IACbC,WAAa,EAAA,uCAAA;IACbC,aAAe,EAAA,yCAAA;IACfC,aAAe,EAAA,yCAAA;IACfC,aAAe,EAAA,yCAAA;IACfC,cAAgB,EAAA,0CAAA;IAChBC,cAAgB,EAAA;QACdC,SAAW,EAAA,WAAA;QACXC,WAAa,EAAA,aAAA;QACbC,MAAQ,EAAA;AACV,KAAA;;IAEAC,mBAAqB,EAAA;QACnBC,SAAW,EAAA,IAAA;AACXC,QAAAA,MAAAA,EAAQ,CAAIjB,GAAAA,SAAAA;AACZkB,QAAAA,OAAAA,EAAS,EAAKlB,GAAAA,SAAAA;AACdmB,QAAAA,OAAAA,EAAS,EAAKnB,GAAAA;AAChB,KAAA;IACAoB,mBAAqB,EAAA;QACnBC,IAAM,EAAA,MAAA;QACNC,IAAM,EAAA;AACR,KAAA;IACAC,wBAA0B,EAAA;QACxBP,SAAW,EAAA,IAAA;AACXC,QAAAA,MAAAA,EAAQ,CAAIjB,GAAAA,SAAAA;AACZkB,QAAAA,OAAAA,EAAS,EAAKlB,GAAAA,SAAAA;AACdmB,QAAAA,OAAAA,EAAS,EAAKnB,GAAAA;AAChB;AACF;;;;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../../../server/src/services/constants.ts"],"sourcesContent":["const DAY_IN_MS = 24 * 60 * 60 * 1000;\n\nconst constants = {\n CONTENT_TYPE_SECTION: 'contentTypes',\n SUPER_ADMIN_CODE: 'strapi-super-admin',\n EDITOR_CODE: 'strapi-editor',\n AUTHOR_CODE: 'strapi-author',\n READ_ACTION: 'plugin::content-manager.explorer.read',\n CREATE_ACTION: 'plugin::content-manager.explorer.create',\n UPDATE_ACTION: 'plugin::content-manager.explorer.update',\n DELETE_ACTION: 'plugin::content-manager.explorer.delete',\n PUBLISH_ACTION: 'plugin::content-manager.explorer.publish',\n API_TOKEN_TYPE: {\n READ_ONLY: 'read-only',\n FULL_ACCESS: 'full-access',\n CUSTOM: 'custom',\n },\n // The front-end only displays these values\n API_TOKEN_LIFESPANS: {\n UNLIMITED: null,\n DAYS_7: 7 * DAY_IN_MS,\n DAYS_30: 30 * DAY_IN_MS,\n DAYS_90: 90 * DAY_IN_MS,\n },\n DEFAULT_API_TOKENS: [\n {\n name: 'Read Only',\n description:\n 'A default API token with read-only permissions, only used for accessing resources',\n type: 'read-only',\n lifespan: null,\n },\n {\n name: 'Full Access',\n description:\n 'A default API token with full access permissions, used for accessing or modifying resources',\n type: 'full-access',\n lifespan: null,\n },\n ] as const,\n TRANSFER_TOKEN_TYPE: {\n PUSH: 'push',\n PULL: 'pull',\n },\n TRANSFER_TOKEN_LIFESPANS: {\n UNLIMITED: null,\n DAYS_7: 7 * DAY_IN_MS,\n DAYS_30: 30 * DAY_IN_MS,\n DAYS_90: 90 * DAY_IN_MS,\n },\n};\n\nexport default constants;\n"],"names":["DAY_IN_MS","constants","CONTENT_TYPE_SECTION","SUPER_ADMIN_CODE","EDITOR_CODE","AUTHOR_CODE","READ_ACTION","CREATE_ACTION","UPDATE_ACTION","DELETE_ACTION","PUBLISH_ACTION","API_TOKEN_TYPE","READ_ONLY","FULL_ACCESS","CUSTOM","API_TOKEN_LIFESPANS","UNLIMITED","DAYS_7","DAYS_30","DAYS_90","DEFAULT_API_TOKENS","name","description","type","lifespan","TRANSFER_TOKEN_TYPE","PUSH","PULL","TRANSFER_TOKEN_LIFESPANS"],"mappings":";;AAAA,MAAMA,SAAAA,GAAY,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA,IAAA;AAEjC,MAAMC,SAAY,GAAA;IAChBC,oBAAsB,EAAA,cAAA;IACtBC,gBAAkB,EAAA,oBAAA;IAClBC,WAAa,EAAA,eAAA;IACbC,WAAa,EAAA,eAAA;IACbC,WAAa,EAAA,uCAAA;IACbC,aAAe,EAAA,yCAAA;IACfC,aAAe,EAAA,yCAAA;IACfC,aAAe,EAAA,yCAAA;IACfC,cAAgB,EAAA,0CAAA;IAChBC,cAAgB,EAAA;QACdC,SAAW,EAAA,WAAA;QACXC,WAAa,EAAA,aAAA;QACbC,MAAQ,EAAA;AACV,KAAA;;IAEAC,mBAAqB,EAAA;QACnBC,SAAW,EAAA,IAAA;AACXC,QAAAA,MAAAA,EAAQ,CAAIjB,GAAAA,SAAAA;AACZkB,QAAAA,OAAAA,EAAS,EAAKlB,GAAAA,SAAAA;AACdmB,QAAAA,OAAAA,EAAS,EAAKnB,GAAAA;AAChB,KAAA;IACAoB,kBAAoB,EAAA;AAClB,QAAA;YACEC,IAAM,EAAA,WAAA;YACNC,WACE,EAAA,mFAAA;YACFC,IAAM,EAAA,WAAA;YACNC,QAAU,EAAA;AACZ,SAAA;AACA,QAAA;YACEH,IAAM,EAAA,aAAA;YACNC,WACE,EAAA,6FAAA;YACFC,IAAM,EAAA,aAAA;YACNC,QAAU,EAAA;AACZ;AACD,KAAA;IACDC,mBAAqB,EAAA;QACnBC,IAAM,EAAA,MAAA;QACNC,IAAM,EAAA;AACR,KAAA;IACAC,wBAA0B,EAAA;QACxBZ,SAAW,EAAA,IAAA;AACXC,QAAAA,MAAAA,EAAQ,CAAIjB,GAAAA,SAAAA;AACZkB,QAAAA,OAAAA,EAAS,EAAKlB,GAAAA,SAAAA;AACdmB,QAAAA,OAAAA,EAAS,EAAKnB,GAAAA;AAChB;AACF;;;;"}
@@ -21,6 +21,20 @@ const constants = {
21
21
  DAYS_30: 30 * DAY_IN_MS,
22
22
  DAYS_90: 90 * DAY_IN_MS
23
23
  },
24
+ DEFAULT_API_TOKENS: [
25
+ {
26
+ name: 'Read Only',
27
+ description: 'A default API token with read-only permissions, only used for accessing resources',
28
+ type: 'read-only',
29
+ lifespan: null
30
+ },
31
+ {
32
+ name: 'Full Access',
33
+ description: 'A default API token with full access permissions, used for accessing or modifying resources',
34
+ type: 'full-access',
35
+ lifespan: null
36
+ }
37
+ ],
24
38
  TRANSFER_TOKEN_TYPE: {
25
39
  PUSH: 'push',
26
40
  PULL: 'pull'
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","sources":["../../../../../server/src/services/constants.ts"],"sourcesContent":["const DAY_IN_MS = 24 * 60 * 60 * 1000;\n\nconst constants = {\n CONTENT_TYPE_SECTION: 'contentTypes',\n SUPER_ADMIN_CODE: 'strapi-super-admin',\n EDITOR_CODE: 'strapi-editor',\n AUTHOR_CODE: 'strapi-author',\n READ_ACTION: 'plugin::content-manager.explorer.read',\n CREATE_ACTION: 'plugin::content-manager.explorer.create',\n UPDATE_ACTION: 'plugin::content-manager.explorer.update',\n DELETE_ACTION: 'plugin::content-manager.explorer.delete',\n PUBLISH_ACTION: 'plugin::content-manager.explorer.publish',\n API_TOKEN_TYPE: {\n READ_ONLY: 'read-only',\n FULL_ACCESS: 'full-access',\n CUSTOM: 'custom',\n },\n // The front-end only displays these values\n API_TOKEN_LIFESPANS: {\n UNLIMITED: null,\n DAYS_7: 7 * DAY_IN_MS,\n DAYS_30: 30 * DAY_IN_MS,\n DAYS_90: 90 * DAY_IN_MS,\n },\n TRANSFER_TOKEN_TYPE: {\n PUSH: 'push',\n PULL: 'pull',\n },\n TRANSFER_TOKEN_LIFESPANS: {\n UNLIMITED: null,\n DAYS_7: 7 * DAY_IN_MS,\n DAYS_30: 30 * DAY_IN_MS,\n DAYS_90: 90 * DAY_IN_MS,\n },\n};\n\nexport default constants;\n"],"names":["DAY_IN_MS","constants","CONTENT_TYPE_SECTION","SUPER_ADMIN_CODE","EDITOR_CODE","AUTHOR_CODE","READ_ACTION","CREATE_ACTION","UPDATE_ACTION","DELETE_ACTION","PUBLISH_ACTION","API_TOKEN_TYPE","READ_ONLY","FULL_ACCESS","CUSTOM","API_TOKEN_LIFESPANS","UNLIMITED","DAYS_7","DAYS_30","DAYS_90","TRANSFER_TOKEN_TYPE","PUSH","PULL","TRANSFER_TOKEN_LIFESPANS"],"mappings":"AAAA,MAAMA,SAAAA,GAAY,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA,IAAA;AAEjC,MAAMC,SAAY,GAAA;IAChBC,oBAAsB,EAAA,cAAA;IACtBC,gBAAkB,EAAA,oBAAA;IAClBC,WAAa,EAAA,eAAA;IACbC,WAAa,EAAA,eAAA;IACbC,WAAa,EAAA,uCAAA;IACbC,aAAe,EAAA,yCAAA;IACfC,aAAe,EAAA,yCAAA;IACfC,aAAe,EAAA,yCAAA;IACfC,cAAgB,EAAA,0CAAA;IAChBC,cAAgB,EAAA;QACdC,SAAW,EAAA,WAAA;QACXC,WAAa,EAAA,aAAA;QACbC,MAAQ,EAAA;AACV,KAAA;;IAEAC,mBAAqB,EAAA;QACnBC,SAAW,EAAA,IAAA;AACXC,QAAAA,MAAAA,EAAQ,CAAIjB,GAAAA,SAAAA;AACZkB,QAAAA,OAAAA,EAAS,EAAKlB,GAAAA,SAAAA;AACdmB,QAAAA,OAAAA,EAAS,EAAKnB,GAAAA;AAChB,KAAA;IACAoB,mBAAqB,EAAA;QACnBC,IAAM,EAAA,MAAA;QACNC,IAAM,EAAA;AACR,KAAA;IACAC,wBAA0B,EAAA;QACxBP,SAAW,EAAA,IAAA;AACXC,QAAAA,MAAAA,EAAQ,CAAIjB,GAAAA,SAAAA;AACZkB,QAAAA,OAAAA,EAAS,EAAKlB,GAAAA,SAAAA;AACdmB,QAAAA,OAAAA,EAAS,EAAKnB,GAAAA;AAChB;AACF;;;;"}
1
+ {"version":3,"file":"constants.mjs","sources":["../../../../../server/src/services/constants.ts"],"sourcesContent":["const DAY_IN_MS = 24 * 60 * 60 * 1000;\n\nconst constants = {\n CONTENT_TYPE_SECTION: 'contentTypes',\n SUPER_ADMIN_CODE: 'strapi-super-admin',\n EDITOR_CODE: 'strapi-editor',\n AUTHOR_CODE: 'strapi-author',\n READ_ACTION: 'plugin::content-manager.explorer.read',\n CREATE_ACTION: 'plugin::content-manager.explorer.create',\n UPDATE_ACTION: 'plugin::content-manager.explorer.update',\n DELETE_ACTION: 'plugin::content-manager.explorer.delete',\n PUBLISH_ACTION: 'plugin::content-manager.explorer.publish',\n API_TOKEN_TYPE: {\n READ_ONLY: 'read-only',\n FULL_ACCESS: 'full-access',\n CUSTOM: 'custom',\n },\n // The front-end only displays these values\n API_TOKEN_LIFESPANS: {\n UNLIMITED: null,\n DAYS_7: 7 * DAY_IN_MS,\n DAYS_30: 30 * DAY_IN_MS,\n DAYS_90: 90 * DAY_IN_MS,\n },\n DEFAULT_API_TOKENS: [\n {\n name: 'Read Only',\n description:\n 'A default API token with read-only permissions, only used for accessing resources',\n type: 'read-only',\n lifespan: null,\n },\n {\n name: 'Full Access',\n description:\n 'A default API token with full access permissions, used for accessing or modifying resources',\n type: 'full-access',\n lifespan: null,\n },\n ] as const,\n TRANSFER_TOKEN_TYPE: {\n PUSH: 'push',\n PULL: 'pull',\n },\n TRANSFER_TOKEN_LIFESPANS: {\n UNLIMITED: null,\n DAYS_7: 7 * DAY_IN_MS,\n DAYS_30: 30 * DAY_IN_MS,\n DAYS_90: 90 * DAY_IN_MS,\n },\n};\n\nexport default constants;\n"],"names":["DAY_IN_MS","constants","CONTENT_TYPE_SECTION","SUPER_ADMIN_CODE","EDITOR_CODE","AUTHOR_CODE","READ_ACTION","CREATE_ACTION","UPDATE_ACTION","DELETE_ACTION","PUBLISH_ACTION","API_TOKEN_TYPE","READ_ONLY","FULL_ACCESS","CUSTOM","API_TOKEN_LIFESPANS","UNLIMITED","DAYS_7","DAYS_30","DAYS_90","DEFAULT_API_TOKENS","name","description","type","lifespan","TRANSFER_TOKEN_TYPE","PUSH","PULL","TRANSFER_TOKEN_LIFESPANS"],"mappings":"AAAA,MAAMA,SAAAA,GAAY,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA,IAAA;AAEjC,MAAMC,SAAY,GAAA;IAChBC,oBAAsB,EAAA,cAAA;IACtBC,gBAAkB,EAAA,oBAAA;IAClBC,WAAa,EAAA,eAAA;IACbC,WAAa,EAAA,eAAA;IACbC,WAAa,EAAA,uCAAA;IACbC,aAAe,EAAA,yCAAA;IACfC,aAAe,EAAA,yCAAA;IACfC,aAAe,EAAA,yCAAA;IACfC,cAAgB,EAAA,0CAAA;IAChBC,cAAgB,EAAA;QACdC,SAAW,EAAA,WAAA;QACXC,WAAa,EAAA,aAAA;QACbC,MAAQ,EAAA;AACV,KAAA;;IAEAC,mBAAqB,EAAA;QACnBC,SAAW,EAAA,IAAA;AACXC,QAAAA,MAAAA,EAAQ,CAAIjB,GAAAA,SAAAA;AACZkB,QAAAA,OAAAA,EAAS,EAAKlB,GAAAA,SAAAA;AACdmB,QAAAA,OAAAA,EAAS,EAAKnB,GAAAA;AAChB,KAAA;IACAoB,kBAAoB,EAAA;AAClB,QAAA;YACEC,IAAM,EAAA,WAAA;YACNC,WACE,EAAA,mFAAA;YACFC,IAAM,EAAA,WAAA;YACNC,QAAU,EAAA;AACZ,SAAA;AACA,QAAA;YACEH,IAAM,EAAA,aAAA;YACNC,WACE,EAAA,6FAAA;YACFC,IAAM,EAAA,aAAA;YACNC,QAAU,EAAA;AACZ;AACD,KAAA;IACDC,mBAAqB,EAAA;QACnBC,IAAM,EAAA,MAAA;QACNC,IAAM,EAAA;AACR,KAAA;IACAC,wBAA0B,EAAA;QACxBZ,SAAW,EAAA,IAAA;AACXC,QAAAA,MAAAA,EAAQ,CAAIjB,GAAAA,SAAAA;AACZkB,QAAAA,OAAAA,EAAS,EAAKlB,GAAAA,SAAAA;AACdmB,QAAAA,OAAAA,EAAS,EAAKnB,GAAAA;AAChB;AACF;;;;"}
@@ -0,0 +1,61 @@
1
+ 'use strict';
2
+
3
+ var constants = require('./constants.js');
4
+
5
+ const DEFAULT_ATTIBUTES = [
6
+ 'createdAt',
7
+ 'updatedAt',
8
+ 'publishedAt',
9
+ 'createdBy',
10
+ 'updatedBy',
11
+ 'locale',
12
+ 'localizations'
13
+ ];
14
+ const createGuidedTourService = ({ strapi })=>{
15
+ const getCompletedActions = async ()=>{
16
+ // Check if any content-type schemas have been created on the api:: namespace
17
+ const contentTypeSchemaNames = Object.keys(strapi.contentTypes).filter((contentTypeUid)=>contentTypeUid.startsWith('api::'));
18
+ const contentTypeSchemaAttributes = contentTypeSchemaNames.map((uid)=>{
19
+ const attributes = Object.keys(strapi.contentType(uid).attributes);
20
+ return attributes.filter((attribute)=>!DEFAULT_ATTIBUTES.includes(attribute));
21
+ });
22
+ const didCreateContentTypeSchema = (()=>{
23
+ if (contentTypeSchemaNames.length === 0) {
24
+ return false;
25
+ }
26
+ return contentTypeSchemaAttributes.some((attributes)=>attributes.length > 0);
27
+ })();
28
+ // Check if any content has been created for content-types on the api:: namespace
29
+ const hasContent = await (async ()=>{
30
+ for (const name of contentTypeSchemaNames){
31
+ const count = await strapi.documents(name).count({});
32
+ if (count > 0) return true;
33
+ }
34
+ return false;
35
+ })();
36
+ const didCreateContent = didCreateContentTypeSchema && hasContent;
37
+ // Check if any api tokens have been created besides the default ones
38
+ const createdApiTokens = await strapi.documents('admin::api-token').findMany({
39
+ fields: [
40
+ 'name',
41
+ 'description'
42
+ ]
43
+ });
44
+ const didCreateApiToken = createdApiTokens.some((doc)=>constants.DEFAULT_API_TOKENS.every((token)=>token.name !== doc.name && token.description !== doc.description));
45
+ // Compute an array of action names that have been completed
46
+ const requiredActions = {
47
+ didCreateContentTypeSchema,
48
+ didCreateContent,
49
+ didCreateApiToken
50
+ };
51
+ const requiredActionNames = Object.keys(requiredActions);
52
+ const completedActions = requiredActionNames.filter((key)=>requiredActions[key]);
53
+ return completedActions;
54
+ };
55
+ return {
56
+ getCompletedActions
57
+ };
58
+ };
59
+
60
+ exports.createGuidedTourService = createGuidedTourService;
61
+ //# sourceMappingURL=guided-tour.js.map