@webiny/api-headless-cms 6.1.0 → 6.2.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 (577) hide show
  1. package/context.d.ts +2 -5
  2. package/context.js +16 -7
  3. package/context.js.map +1 -1
  4. package/crud/AccessControl/AccessControl.d.ts +18 -28
  5. package/crud/AccessControl/AccessControl.js.map +1 -1
  6. package/crud/contentEntry/entryDataFactories/createEntryData.js +17 -6
  7. package/crud/contentEntry/entryDataFactories/createEntryData.js.map +1 -1
  8. package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js +9 -3
  9. package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js.map +1 -1
  10. package/crud/contentEntry/entryDataValidation.d.ts +1 -1
  11. package/crud/contentEntry/entryDataValidation.js +16 -13
  12. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  13. package/crud/contentEntry/searchableFields.d.ts +2 -3
  14. package/crud/contentEntry/searchableFields.js +10 -18
  15. package/crud/contentEntry/searchableFields.js.map +1 -1
  16. package/crud/contentModel.crud.js +2 -1
  17. package/crud/contentModel.crud.js.map +1 -1
  18. package/domain/contentModel/validation/modelFields.js +15 -20
  19. package/domain/contentModel/validation/modelFields.js.map +1 -1
  20. package/exports/api/cms/graphql.d.ts +1 -0
  21. package/exports/api/cms/graphql.js +3 -0
  22. package/exports/api/cms/graphql.js.map +1 -0
  23. package/exports/api/cms/storage.d.ts +3 -0
  24. package/exports/api/cms/storage.js +5 -0
  25. package/exports/api/cms/storage.js.map +1 -0
  26. package/exports/api/cms/validation.d.ts +4 -0
  27. package/exports/api/cms/validation.js +6 -0
  28. package/exports/api/cms/validation.js.map +1 -0
  29. package/features/contentEntry/CreateEntry/CreateEntryUseCase.d.ts +3 -3
  30. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js +3 -3
  31. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js.map +1 -1
  32. package/features/contentEntry/CreateEntry/events.d.ts +2 -2
  33. package/features/contentEntry/CreateEntry/events.js +1 -1
  34. package/features/contentEntry/CreateEntry/events.js.map +1 -1
  35. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.d.ts +3 -3
  36. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js +3 -3
  37. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js.map +1 -1
  38. package/features/contentEntry/CreateEntryRevisionFrom/events.d.ts +2 -2
  39. package/features/contentEntry/CreateEntryRevisionFrom/events.js +1 -1
  40. package/features/contentEntry/CreateEntryRevisionFrom/events.js.map +1 -1
  41. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.d.ts +1 -1
  42. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.js +1 -1
  43. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.js.map +1 -1
  44. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.d.ts +2 -2
  45. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js +2 -2
  46. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js.map +1 -1
  47. package/features/contentEntry/DeleteEntry/events.d.ts +2 -2
  48. package/features/contentEntry/DeleteEntry/events.js +1 -1
  49. package/features/contentEntry/DeleteEntry/events.js.map +1 -1
  50. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.d.ts +1 -1
  51. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js +1 -1
  52. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js.map +1 -1
  53. package/features/contentEntry/DeleteEntryRevision/events.d.ts +2 -2
  54. package/features/contentEntry/DeleteEntryRevision/events.js +1 -1
  55. package/features/contentEntry/DeleteEntryRevision/events.js.map +1 -1
  56. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.d.ts +1 -1
  57. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js +1 -1
  58. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js.map +1 -1
  59. package/features/contentEntry/DeleteMultipleEntries/events.d.ts +2 -2
  60. package/features/contentEntry/DeleteMultipleEntries/events.js +1 -1
  61. package/features/contentEntry/DeleteMultipleEntries/events.js.map +1 -1
  62. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js +6 -11
  63. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js.map +1 -1
  64. package/features/contentEntry/ListEntries/ListEntriesUseCase.d.ts +1 -1
  65. package/features/contentEntry/ListEntries/ListEntriesUseCase.js +1 -1
  66. package/features/contentEntry/ListEntries/ListEntriesUseCase.js.map +1 -1
  67. package/features/contentEntry/MoveEntry/MoveEntryUseCase.d.ts +1 -1
  68. package/features/contentEntry/MoveEntry/MoveEntryUseCase.js +1 -1
  69. package/features/contentEntry/MoveEntry/MoveEntryUseCase.js.map +1 -1
  70. package/features/contentEntry/MoveEntry/events.d.ts +2 -2
  71. package/features/contentEntry/MoveEntry/events.js +1 -1
  72. package/features/contentEntry/MoveEntry/events.js.map +1 -1
  73. package/features/contentEntry/PublishEntry/PublishEntryUseCase.d.ts +2 -2
  74. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js +2 -2
  75. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js.map +1 -1
  76. package/features/contentEntry/PublishEntry/events.d.ts +2 -2
  77. package/features/contentEntry/PublishEntry/events.js +1 -1
  78. package/features/contentEntry/PublishEntry/events.js.map +1 -1
  79. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.d.ts +2 -2
  80. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js +2 -2
  81. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js.map +1 -1
  82. package/features/contentEntry/RepublishEntry/events.d.ts +2 -2
  83. package/features/contentEntry/RepublishEntry/events.js +1 -1
  84. package/features/contentEntry/RepublishEntry/events.js.map +1 -1
  85. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.d.ts +2 -2
  86. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.js +2 -2
  87. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.js.map +1 -1
  88. package/features/contentEntry/RestoreEntryFromBin/events.d.ts +2 -2
  89. package/features/contentEntry/RestoreEntryFromBin/events.js +1 -1
  90. package/features/contentEntry/RestoreEntryFromBin/events.js.map +1 -1
  91. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.d.ts +2 -2
  92. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js +2 -2
  93. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js.map +1 -1
  94. package/features/contentEntry/UnpublishEntry/events.d.ts +2 -2
  95. package/features/contentEntry/UnpublishEntry/events.js +1 -1
  96. package/features/contentEntry/UnpublishEntry/events.js.map +1 -1
  97. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.d.ts +3 -3
  98. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js +3 -3
  99. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js.map +1 -1
  100. package/features/contentEntry/UpdateEntry/events.d.ts +2 -2
  101. package/features/contentEntry/UpdateEntry/events.js +1 -1
  102. package/features/contentEntry/UpdateEntry/events.js.map +1 -1
  103. package/features/contentModel/CreateModel/CreateModelRepository.d.ts +1 -1
  104. package/features/contentModel/CreateModel/CreateModelRepository.js +1 -1
  105. package/features/contentModel/CreateModel/CreateModelRepository.js.map +1 -1
  106. package/features/contentModel/CreateModel/CreateModelUseCase.d.ts +3 -3
  107. package/features/contentModel/CreateModel/CreateModelUseCase.js +3 -3
  108. package/features/contentModel/CreateModel/CreateModelUseCase.js.map +1 -1
  109. package/features/contentModel/CreateModel/events.d.ts +2 -2
  110. package/features/contentModel/CreateModel/events.js +1 -1
  111. package/features/contentModel/CreateModel/events.js.map +1 -1
  112. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.d.ts +1 -1
  113. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js +1 -1
  114. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js.map +1 -1
  115. package/features/contentModel/CreateModelFrom/CreateModelFromUseCase.d.ts +3 -3
  116. package/features/contentModel/CreateModelFrom/CreateModelFromUseCase.js +4 -3
  117. package/features/contentModel/CreateModelFrom/CreateModelFromUseCase.js.map +1 -1
  118. package/features/contentModel/CreateModelFrom/events.d.ts +2 -2
  119. package/features/contentModel/CreateModelFrom/events.js +1 -1
  120. package/features/contentModel/CreateModelFrom/events.js.map +1 -1
  121. package/features/contentModel/DeleteModel/DeleteModelUseCase.d.ts +1 -1
  122. package/features/contentModel/DeleteModel/DeleteModelUseCase.js +1 -1
  123. package/features/contentModel/DeleteModel/DeleteModelUseCase.js.map +1 -1
  124. package/features/contentModel/DeleteModel/events.d.ts +2 -2
  125. package/features/contentModel/DeleteModel/events.js +1 -1
  126. package/features/contentModel/DeleteModel/events.js.map +1 -1
  127. package/features/contentModel/ModelToAstConverter/ModelToAstConverter.d.ts +3 -3
  128. package/features/contentModel/ModelToAstConverter/ModelToAstConverter.js +6 -6
  129. package/features/contentModel/ModelToAstConverter/ModelToAstConverter.js.map +1 -1
  130. package/features/contentModel/UpdateModel/UpdateModelUseCase.d.ts +2 -2
  131. package/features/contentModel/UpdateModel/UpdateModelUseCase.js +2 -2
  132. package/features/contentModel/UpdateModel/UpdateModelUseCase.js.map +1 -1
  133. package/features/contentModel/UpdateModel/events.d.ts +2 -2
  134. package/features/contentModel/UpdateModel/events.js +1 -1
  135. package/features/contentModel/UpdateModel/events.js.map +1 -1
  136. package/features/contentModel/shared/ModelsFetcher.d.ts +1 -1
  137. package/features/contentModel/shared/ModelsFetcher.js +1 -1
  138. package/features/contentModel/shared/ModelsFetcher.js.map +1 -1
  139. package/features/contentModelGroup/CreateGroup/CreateGroupRepository.d.ts +1 -1
  140. package/features/contentModelGroup/CreateGroup/CreateGroupRepository.js +1 -1
  141. package/features/contentModelGroup/CreateGroup/CreateGroupRepository.js.map +1 -1
  142. package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.d.ts +3 -3
  143. package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.js +3 -3
  144. package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.js.map +1 -1
  145. package/features/contentModelGroup/CreateGroup/events.d.ts +2 -2
  146. package/features/contentModelGroup/CreateGroup/events.js +1 -1
  147. package/features/contentModelGroup/CreateGroup/events.js.map +1 -1
  148. package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.d.ts +1 -1
  149. package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.js +1 -1
  150. package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.js.map +1 -1
  151. package/features/contentModelGroup/DeleteGroup/events.d.ts +2 -2
  152. package/features/contentModelGroup/DeleteGroup/events.js +1 -1
  153. package/features/contentModelGroup/DeleteGroup/events.js.map +1 -1
  154. package/features/contentModelGroup/GetGroup/GetGroupRepository.d.ts +2 -2
  155. package/features/contentModelGroup/GetGroup/GetGroupRepository.js +2 -2
  156. package/features/contentModelGroup/GetGroup/GetGroupRepository.js.map +1 -1
  157. package/features/contentModelGroup/ListGroups/ListGroupsRepository.d.ts +2 -2
  158. package/features/contentModelGroup/ListGroups/ListGroupsRepository.js +2 -2
  159. package/features/contentModelGroup/ListGroups/ListGroupsRepository.js.map +1 -1
  160. package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.d.ts +2 -2
  161. package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.js +2 -2
  162. package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.js.map +1 -1
  163. package/features/contentModelGroup/UpdateGroup/events.d.ts +2 -2
  164. package/features/contentModelGroup/UpdateGroup/events.js +1 -1
  165. package/features/contentModelGroup/UpdateGroup/events.js.map +1 -1
  166. package/features/contentModelGroup/shared/PluginGroupsProvider.d.ts +2 -2
  167. package/features/contentModelGroup/shared/PluginGroupsProvider.js +2 -2
  168. package/features/contentModelGroup/shared/PluginGroupsProvider.js.map +1 -1
  169. package/features/graphql/feature.d.ts +1 -0
  170. package/features/graphql/feature.js +34 -0
  171. package/features/graphql/feature.js.map +1 -0
  172. package/features/graphql/fields/CmsModelFieldToGraphQLRegistry.d.ts +13 -0
  173. package/features/graphql/fields/CmsModelFieldToGraphQLRegistry.js +27 -0
  174. package/features/graphql/fields/CmsModelFieldToGraphQLRegistry.js.map +1 -0
  175. package/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.d.ts +97 -0
  176. package/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.js +4 -0
  177. package/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.js.map +1 -0
  178. package/features/graphql/fields/abstractions/CmsModelFieldToGraphQLRegistry.d.ts +10 -0
  179. package/features/graphql/fields/abstractions/CmsModelFieldToGraphQLRegistry.js +4 -0
  180. package/features/graphql/fields/abstractions/CmsModelFieldToGraphQLRegistry.js.map +1 -0
  181. package/features/graphql/fields/base/BooleanToGraphQL.d.ts +26 -0
  182. package/features/graphql/fields/base/BooleanToGraphQL.js +68 -0
  183. package/features/graphql/fields/base/BooleanToGraphQL.js.map +1 -0
  184. package/features/graphql/fields/base/DateTimeToGraphQL.d.ts +26 -0
  185. package/features/graphql/fields/base/DateTimeToGraphQL.js +97 -0
  186. package/features/graphql/fields/base/DateTimeToGraphQL.js.map +1 -0
  187. package/features/graphql/fields/base/DynamicZoneToGraphQL.d.ts +30 -0
  188. package/features/graphql/fields/base/DynamicZoneToGraphQL.js +280 -0
  189. package/features/graphql/fields/base/DynamicZoneToGraphQL.js.map +1 -0
  190. package/features/graphql/fields/base/FileToGraphQL.d.ts +22 -0
  191. package/features/graphql/fields/base/FileToGraphQL.js +39 -0
  192. package/features/graphql/fields/base/FileToGraphQL.js.map +1 -0
  193. package/features/graphql/fields/base/JsonToGraphQL.d.ts +24 -0
  194. package/features/graphql/fields/base/JsonToGraphQL.js +52 -0
  195. package/features/graphql/fields/base/JsonToGraphQL.js.map +1 -0
  196. package/features/graphql/fields/base/LongTextToGraphQL.d.ts +24 -0
  197. package/features/graphql/fields/base/LongTextToGraphQL.js +57 -0
  198. package/features/graphql/fields/base/LongTextToGraphQL.js.map +1 -0
  199. package/features/graphql/fields/base/NumberToGraphQL.d.ts +26 -0
  200. package/features/graphql/fields/base/NumberToGraphQL.js +78 -0
  201. package/features/graphql/fields/base/NumberToGraphQL.js.map +1 -0
  202. package/features/graphql/fields/base/ObjectToGraphQL.d.ts +31 -0
  203. package/features/graphql/fields/base/ObjectToGraphQL.js +264 -0
  204. package/features/graphql/fields/base/ObjectToGraphQL.js.map +1 -0
  205. package/features/graphql/fields/base/RefToGraphQL.d.ts +29 -0
  206. package/features/graphql/fields/base/RefToGraphQL.js +261 -0
  207. package/features/graphql/fields/base/RefToGraphQL.js.map +1 -0
  208. package/features/graphql/fields/base/RichTextToGraphQL.d.ts +25 -0
  209. package/features/graphql/fields/base/RichTextToGraphQL.js +58 -0
  210. package/features/graphql/fields/base/RichTextToGraphQL.js.map +1 -0
  211. package/features/graphql/fields/base/SearchableJsonToGraphQL.d.ts +26 -0
  212. package/features/graphql/fields/base/SearchableJsonToGraphQL.js +62 -0
  213. package/features/graphql/fields/base/SearchableJsonToGraphQL.js.map +1 -0
  214. package/features/graphql/fields/base/TextToGraphQL.d.ts +26 -0
  215. package/features/graphql/fields/base/TextToGraphQL.js +74 -0
  216. package/features/graphql/fields/base/TextToGraphQL.js.map +1 -0
  217. package/features/graphql/fields/base/dynamicZone/createTypeDefsForTemplates.d.ts +16 -0
  218. package/features/graphql/fields/base/dynamicZone/createTypeDefsForTemplates.js +37 -0
  219. package/features/graphql/fields/base/dynamicZone/createTypeDefsForTemplates.js.map +1 -0
  220. package/features/graphql/fields/base/dynamicZone/normalizeDynamicZoneInput.d.ts +3 -0
  221. package/features/graphql/fields/base/dynamicZone/normalizeDynamicZoneInput.js +14 -0
  222. package/features/graphql/fields/base/dynamicZone/normalizeDynamicZoneInput.js.map +1 -0
  223. package/{graphqlFields → features/graphql/fields/base}/richText/richTextResolver.d.ts +1 -1
  224. package/{graphqlFields → features/graphql/fields/base}/richText/richTextResolver.js +2 -2
  225. package/features/graphql/fields/base/richText/richTextResolver.js.map +1 -0
  226. package/{graphqlFields/helpers.d.ts → features/graphql/fields/base/utils/createGraphQLInputField.d.ts} +1 -1
  227. package/features/graphql/fields/base/utils/createGraphQLInputField.js +17 -0
  228. package/features/graphql/fields/base/utils/createGraphQLInputField.js.map +1 -0
  229. package/features/graphql/index.d.ts +4 -0
  230. package/features/graphql/index.js +6 -0
  231. package/features/graphql/index.js.map +1 -0
  232. package/features/graphql/sort/abstractions/CmsGraphQLSchemaSorter.d.ts +13 -0
  233. package/features/graphql/sort/abstractions/CmsGraphQLSchemaSorter.js +4 -0
  234. package/features/graphql/sort/abstractions/CmsGraphQLSchemaSorter.js.map +1 -0
  235. package/features/installer/CmsInstaller.d.ts +1 -1
  236. package/features/installer/CmsInstaller.js +1 -1
  237. package/features/installer/CmsInstaller.js.map +1 -1
  238. package/features/shared/abstractions.d.ts +9 -2
  239. package/features/shared/abstractions.js +1 -0
  240. package/features/shared/abstractions.js.map +1 -1
  241. package/features/storage/StorageTransformRegistry.d.ts +13 -0
  242. package/features/storage/StorageTransformRegistry.js +27 -0
  243. package/features/storage/StorageTransformRegistry.js.map +1 -0
  244. package/features/storage/abstractions/StorageTransform.d.ts +26 -0
  245. package/features/storage/abstractions/StorageTransform.js +4 -0
  246. package/features/storage/abstractions/StorageTransform.js.map +1 -0
  247. package/features/storage/abstractions/StorageTransformRegistry.d.ts +10 -0
  248. package/features/storage/abstractions/StorageTransformRegistry.js +4 -0
  249. package/features/storage/abstractions/StorageTransformRegistry.js.map +1 -0
  250. package/features/storage/feature.d.ts +1 -0
  251. package/features/storage/feature.js +24 -0
  252. package/features/storage/feature.js.map +1 -0
  253. package/features/storage/fields/DateStorageTransform.d.ts +10 -0
  254. package/features/storage/fields/DateStorageTransform.js +110 -0
  255. package/features/storage/fields/DateStorageTransform.js.map +1 -0
  256. package/features/storage/fields/DefaultStorageTransform.d.ts +10 -0
  257. package/features/storage/fields/DefaultStorageTransform.js +20 -0
  258. package/features/storage/fields/DefaultStorageTransform.js.map +1 -0
  259. package/features/storage/fields/DynamicZoneStorageTransform.d.ts +10 -0
  260. package/features/storage/fields/DynamicZoneStorageTransform.js +142 -0
  261. package/features/storage/fields/DynamicZoneStorageTransform.js.map +1 -0
  262. package/features/storage/fields/JsonStorageTransform.d.ts +13 -0
  263. package/features/storage/fields/JsonStorageTransform.js +31 -0
  264. package/features/storage/fields/JsonStorageTransform.js.map +1 -0
  265. package/features/storage/fields/LongTextStorageTransform.d.ts +18 -0
  266. package/features/storage/fields/LongTextStorageTransform.js +55 -0
  267. package/features/storage/fields/LongTextStorageTransform.js.map +1 -0
  268. package/features/storage/fields/ObjectStorageTransform.d.ts +10 -0
  269. package/features/storage/fields/ObjectStorageTransform.js +99 -0
  270. package/features/storage/fields/ObjectStorageTransform.js.map +1 -0
  271. package/features/storage/fields/RichTextStorageTransform.d.ts +13 -0
  272. package/features/storage/fields/RichTextStorageTransform.js +39 -0
  273. package/features/storage/fields/RichTextStorageTransform.js.map +1 -0
  274. package/features/storage/index.d.ts +3 -0
  275. package/features/storage/index.js +5 -0
  276. package/features/storage/index.js.map +1 -0
  277. package/features/validation/CmsModelFieldPatternValidatorRegistry.d.ts +12 -0
  278. package/features/validation/CmsModelFieldPatternValidatorRegistry.js +21 -0
  279. package/features/validation/CmsModelFieldPatternValidatorRegistry.js.map +1 -0
  280. package/features/validation/CmsModelFieldValidatorRegistry.d.ts +12 -0
  281. package/features/validation/CmsModelFieldValidatorRegistry.js +23 -0
  282. package/features/validation/CmsModelFieldValidatorRegistry.js.map +1 -0
  283. package/features/validation/abstractions/CmsModelFieldPatternValidator.d.ts +13 -0
  284. package/features/validation/abstractions/CmsModelFieldPatternValidator.js +4 -0
  285. package/features/validation/abstractions/CmsModelFieldPatternValidator.js.map +1 -0
  286. package/features/validation/abstractions/CmsModelFieldPatternValidatorRegistry.d.ts +9 -0
  287. package/features/validation/abstractions/CmsModelFieldPatternValidatorRegistry.js +4 -0
  288. package/features/validation/abstractions/CmsModelFieldPatternValidatorRegistry.js.map +1 -0
  289. package/features/validation/abstractions/CmsModelFieldValidator.d.ts +11 -0
  290. package/features/validation/abstractions/CmsModelFieldValidator.js +4 -0
  291. package/features/validation/abstractions/CmsModelFieldValidator.js.map +1 -0
  292. package/features/validation/abstractions/CmsModelFieldValidatorRegistry.d.ts +9 -0
  293. package/features/validation/abstractions/CmsModelFieldValidatorRegistry.js +4 -0
  294. package/features/validation/abstractions/CmsModelFieldValidatorRegistry.js.map +1 -0
  295. package/features/validation/feature.d.ts +1 -0
  296. package/features/validation/feature.js +48 -0
  297. package/features/validation/feature.js.map +1 -0
  298. package/features/validation/index.d.ts +5 -0
  299. package/features/validation/index.js +7 -0
  300. package/features/validation/index.js.map +1 -0
  301. package/features/validation/validators/DateGteValidator.d.ts +10 -0
  302. package/features/validation/validators/DateGteValidator.js +26 -0
  303. package/features/validation/validators/DateGteValidator.js.map +1 -0
  304. package/features/validation/validators/DateLteValidator.d.ts +10 -0
  305. package/features/validation/validators/DateLteValidator.js +26 -0
  306. package/features/validation/validators/DateLteValidator.js.map +1 -0
  307. package/features/validation/validators/GteValidator.d.ts +10 -0
  308. package/features/validation/validators/GteValidator.js +21 -0
  309. package/features/validation/validators/GteValidator.js.map +1 -0
  310. package/features/validation/validators/InValidator.d.ts +10 -0
  311. package/features/validation/validators/InValidator.js +21 -0
  312. package/features/validation/validators/InValidator.js.map +1 -0
  313. package/features/validation/validators/LteValidator.d.ts +10 -0
  314. package/features/validation/validators/LteValidator.js +21 -0
  315. package/features/validation/validators/LteValidator.js.map +1 -0
  316. package/features/validation/validators/MaxLengthValidator.d.ts +10 -0
  317. package/features/validation/validators/MaxLengthValidator.js +21 -0
  318. package/features/validation/validators/MaxLengthValidator.js.map +1 -0
  319. package/features/validation/validators/MinLengthValidator.d.ts +10 -0
  320. package/features/validation/validators/MinLengthValidator.js +21 -0
  321. package/features/validation/validators/MinLengthValidator.js.map +1 -0
  322. package/features/validation/validators/PatternValidator.d.ts +13 -0
  323. package/features/validation/validators/PatternValidator.js +38 -0
  324. package/features/validation/validators/PatternValidator.js.map +1 -0
  325. package/features/validation/validators/RequiredValidator.d.ts +10 -0
  326. package/features/validation/validators/RequiredValidator.js +16 -0
  327. package/features/validation/validators/RequiredValidator.js.map +1 -0
  328. package/features/validation/validators/TimeGteValidator.d.ts +10 -0
  329. package/features/validation/validators/TimeGteValidator.js +21 -0
  330. package/features/validation/validators/TimeGteValidator.js.map +1 -0
  331. package/features/validation/validators/TimeLteValidator.d.ts +10 -0
  332. package/features/validation/validators/TimeLteValidator.js +21 -0
  333. package/features/validation/validators/TimeLteValidator.js.map +1 -0
  334. package/features/validation/validators/UniqueValidator.d.ts +10 -0
  335. package/features/validation/validators/UniqueValidator.js +47 -0
  336. package/features/validation/validators/UniqueValidator.js.map +1 -0
  337. package/features/validation/validators/patterns/EmailPattern.d.ts +12 -0
  338. package/features/validation/validators/patterns/EmailPattern.js +14 -0
  339. package/features/validation/validators/patterns/EmailPattern.js.map +1 -0
  340. package/features/validation/validators/patterns/LowerCasePattern.d.ts +12 -0
  341. package/features/validation/validators/patterns/LowerCasePattern.js +14 -0
  342. package/features/validation/validators/patterns/LowerCasePattern.js.map +1 -0
  343. package/features/validation/validators/patterns/LowerCaseSpacePattern.d.ts +12 -0
  344. package/features/validation/validators/patterns/LowerCaseSpacePattern.js +14 -0
  345. package/features/validation/validators/patterns/LowerCaseSpacePattern.js.map +1 -0
  346. package/features/validation/validators/patterns/UpperCasePattern.d.ts +12 -0
  347. package/features/validation/validators/patterns/UpperCasePattern.js +14 -0
  348. package/features/validation/validators/patterns/UpperCasePattern.js.map +1 -0
  349. package/features/validation/validators/patterns/UpperCaseSpacePattern.d.ts +12 -0
  350. package/features/validation/validators/patterns/UpperCaseSpacePattern.js +14 -0
  351. package/features/validation/validators/patterns/UpperCaseSpacePattern.js.map +1 -0
  352. package/features/validation/validators/patterns/UrlPattern.d.ts +12 -0
  353. package/features/validation/validators/patterns/UrlPattern.js +14 -0
  354. package/features/validation/validators/patterns/UrlPattern.js.map +1 -0
  355. package/graphql/getSchema/generateCacheKey.js +1 -1
  356. package/graphql/getSchema/generateCacheKey.js.map +1 -1
  357. package/graphql/schema/baseSchema.d.ts +2 -1
  358. package/graphql/schema/baseSchema.js +11 -9
  359. package/graphql/schema/baseSchema.js.map +1 -1
  360. package/graphql/schema/createFieldResolvers.d.ts +3 -2
  361. package/graphql/schema/createFieldResolvers.js +5 -4
  362. package/graphql/schema/createFieldResolvers.js.map +1 -1
  363. package/graphql/schema/createManageResolvers.d.ts +3 -2
  364. package/graphql/schema/createManageResolvers.js +3 -3
  365. package/graphql/schema/createManageResolvers.js.map +1 -1
  366. package/graphql/schema/createManageSDL.d.ts +4 -4
  367. package/graphql/schema/createManageSDL.js +8 -8
  368. package/graphql/schema/createManageSDL.js.map +1 -1
  369. package/graphql/schema/createPreviewResolvers.d.ts +3 -2
  370. package/graphql/schema/createPreviewResolvers.js +4 -4
  371. package/graphql/schema/createPreviewResolvers.js.map +1 -1
  372. package/graphql/schema/createReadResolvers.d.ts +3 -2
  373. package/graphql/schema/createReadResolvers.js +4 -4
  374. package/graphql/schema/createReadResolvers.js.map +1 -1
  375. package/graphql/schema/createReadSDL.d.ts +4 -4
  376. package/graphql/schema/createReadSDL.js +7 -7
  377. package/graphql/schema/createReadSDL.js.map +1 -1
  378. package/graphql/schema/createSingularResolvers.d.ts +3 -2
  379. package/graphql/schema/createSingularResolvers.js +3 -3
  380. package/graphql/schema/createSingularResolvers.js.map +1 -1
  381. package/graphql/schema/createSingularSDL.d.ts +3 -2
  382. package/graphql/schema/createSingularSDL.js +3 -3
  383. package/graphql/schema/createSingularSDL.js.map +1 -1
  384. package/graphql/schema/resolvers/manage/normalizeGraphQlInput.js +6 -7
  385. package/graphql/schema/resolvers/manage/normalizeGraphQlInput.js.map +1 -1
  386. package/graphql/schema/schemaPlugins.js +14 -17
  387. package/graphql/schema/schemaPlugins.js.map +1 -1
  388. package/index.d.ts +1 -4
  389. package/index.js +2 -6
  390. package/index.js.map +1 -1
  391. package/package.json +25 -25
  392. package/plugins/index.d.ts +0 -2
  393. package/plugins/index.js +0 -2
  394. package/plugins/index.js.map +1 -1
  395. package/types/modelField.d.ts +1 -1
  396. package/types/modelField.js.map +1 -1
  397. package/types/plugins.d.ts +1 -305
  398. package/types/plugins.js.map +1 -1
  399. package/types/types.d.ts +4 -44
  400. package/types/types.js +0 -4
  401. package/types/types.js.map +1 -1
  402. package/utils/contentModelAst/CmsModelFieldToAstConverterFromPlugins.d.ts +3 -2
  403. package/utils/contentModelAst/CmsModelFieldToAstConverterFromPlugins.js +3 -3
  404. package/utils/contentModelAst/CmsModelFieldToAstConverterFromPlugins.js.map +1 -1
  405. package/utils/contentModelAst/CmsModelFieldToAstFromPlugin.d.ts +4 -3
  406. package/utils/contentModelAst/CmsModelFieldToAstFromPlugin.js +3 -3
  407. package/utils/contentModelAst/CmsModelFieldToAstFromPlugin.js.map +1 -1
  408. package/utils/converters/ConverterCollection.d.ts +2 -0
  409. package/utils/converters/ConverterCollection.js +3 -2
  410. package/utils/converters/ConverterCollection.js.map +1 -1
  411. package/utils/converters/valueKeyFromStorageConverter.d.ts +2 -0
  412. package/utils/converters/valueKeyFromStorageConverter.js +4 -2
  413. package/utils/converters/valueKeyFromStorageConverter.js.map +1 -1
  414. package/utils/converters/valueKeyStorageConverter.d.ts +2 -3
  415. package/utils/converters/valueKeyStorageConverter.js +7 -3
  416. package/utils/converters/valueKeyStorageConverter.js.map +1 -1
  417. package/utils/converters/valueKeyToStorageConverter.d.ts +2 -0
  418. package/utils/converters/valueKeyToStorageConverter.js +4 -2
  419. package/utils/converters/valueKeyToStorageConverter.js.map +1 -1
  420. package/utils/createTypeFromFields.d.ts +3 -2
  421. package/utils/createTypeFromFields.js +3 -3
  422. package/utils/createTypeFromFields.js.map +1 -1
  423. package/utils/entryStorage.d.ts +8 -15
  424. package/utils/entryStorage.js +31 -59
  425. package/utils/entryStorage.js.map +1 -1
  426. package/utils/getBaseFieldType.js +3 -0
  427. package/utils/getBaseFieldType.js.map +1 -1
  428. package/utils/getSchemaFromFieldPlugins.d.ts +3 -2
  429. package/utils/getSchemaFromFieldPlugins.js +5 -9
  430. package/utils/getSchemaFromFieldPlugins.js.map +1 -1
  431. package/utils/renderFields.d.ts +4 -3
  432. package/utils/renderFields.js +14 -9
  433. package/utils/renderFields.js.map +1 -1
  434. package/utils/renderGetFilterFields.d.ts +3 -2
  435. package/utils/renderGetFilterFields.js +2 -2
  436. package/utils/renderGetFilterFields.js.map +1 -1
  437. package/utils/renderInputFields.d.ts +4 -3
  438. package/utils/renderInputFields.js +5 -11
  439. package/utils/renderInputFields.js.map +1 -1
  440. package/utils/renderListFilterFields.d.ts +3 -2
  441. package/utils/renderListFilterFields.js +5 -3
  442. package/utils/renderListFilterFields.js.map +1 -1
  443. package/utils/renderSortEnum.d.ts +4 -4
  444. package/utils/renderSortEnum.js +11 -11
  445. package/utils/renderSortEnum.js.map +1 -1
  446. package/graphql/schema/createFieldTypePluginRecords.d.ts +0 -3
  447. package/graphql/schema/createFieldTypePluginRecords.js +0 -8
  448. package/graphql/schema/createFieldTypePluginRecords.js.map +0 -1
  449. package/graphqlFields/boolean.d.ts +0 -2
  450. package/graphqlFields/boolean.js +0 -52
  451. package/graphqlFields/boolean.js.map +0 -1
  452. package/graphqlFields/datetime.d.ts +0 -2
  453. package/graphqlFields/datetime.js +0 -71
  454. package/graphqlFields/datetime.js.map +0 -1
  455. package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +0 -2
  456. package/graphqlFields/dynamicZone/dynamicZoneField.js +0 -313
  457. package/graphqlFields/dynamicZone/dynamicZoneField.js.map +0 -1
  458. package/graphqlFields/dynamicZone/index.d.ts +0 -1
  459. package/graphqlFields/dynamicZone/index.js +0 -3
  460. package/graphqlFields/dynamicZone/index.js.map +0 -1
  461. package/graphqlFields/file.d.ts +0 -2
  462. package/graphqlFields/file.js +0 -37
  463. package/graphqlFields/file.js.map +0 -1
  464. package/graphqlFields/helpers.js +0 -20
  465. package/graphqlFields/helpers.js.map +0 -1
  466. package/graphqlFields/index.d.ts +0 -2
  467. package/graphqlFields/index.js +0 -15
  468. package/graphqlFields/index.js.map +0 -1
  469. package/graphqlFields/json.d.ts +0 -2
  470. package/graphqlFields/json.js +0 -42
  471. package/graphqlFields/json.js.map +0 -1
  472. package/graphqlFields/longText.d.ts +0 -2
  473. package/graphqlFields/longText.js +0 -57
  474. package/graphqlFields/longText.js.map +0 -1
  475. package/graphqlFields/number.d.ts +0 -2
  476. package/graphqlFields/number.js +0 -63
  477. package/graphqlFields/number.js.map +0 -1
  478. package/graphqlFields/object.d.ts +0 -2
  479. package/graphqlFields/object.js +0 -245
  480. package/graphqlFields/object.js.map +0 -1
  481. package/graphqlFields/ref.d.ts +0 -2
  482. package/graphqlFields/ref.js +0 -286
  483. package/graphqlFields/ref.js.map +0 -1
  484. package/graphqlFields/richText/richTextResolver.js.map +0 -1
  485. package/graphqlFields/richText.d.ts +0 -2
  486. package/graphqlFields/richText.js +0 -48
  487. package/graphqlFields/richText.js.map +0 -1
  488. package/graphqlFields/searchableJson.d.ts +0 -2
  489. package/graphqlFields/searchableJson.js +0 -53
  490. package/graphqlFields/searchableJson.js.map +0 -1
  491. package/graphqlFields/text.d.ts +0 -2
  492. package/graphqlFields/text.js +0 -59
  493. package/graphqlFields/text.js.map +0 -1
  494. package/plugins/CmsGraphQLSchemaSorterPlugin.d.ts +0 -20
  495. package/plugins/CmsGraphQLSchemaSorterPlugin.js +0 -19
  496. package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +0 -1
  497. package/plugins/StorageTransformPlugin.d.ts +0 -35
  498. package/plugins/StorageTransformPlugin.js +0 -26
  499. package/plugins/StorageTransformPlugin.js.map +0 -1
  500. package/storage/date.d.ts +0 -3
  501. package/storage/date.js +0 -110
  502. package/storage/date.js.map +0 -1
  503. package/storage/default.d.ts +0 -2
  504. package/storage/default.js +0 -19
  505. package/storage/default.js.map +0 -1
  506. package/storage/dynamicZone.d.ts +0 -2
  507. package/storage/dynamicZone.js +0 -149
  508. package/storage/dynamicZone.js.map +0 -1
  509. package/storage/index.d.ts +0 -1
  510. package/storage/index.js +0 -13
  511. package/storage/index.js.map +0 -1
  512. package/storage/json.d.ts +0 -2
  513. package/storage/json.js +0 -49
  514. package/storage/json.js.map +0 -1
  515. package/storage/object.d.ts +0 -2
  516. package/storage/object.js +0 -104
  517. package/storage/object.js.map +0 -1
  518. package/validators/dateGte.d.ts +0 -2
  519. package/validators/dateGte.js +0 -25
  520. package/validators/dateGte.js.map +0 -1
  521. package/validators/dateLte.d.ts +0 -2
  522. package/validators/dateLte.js +0 -25
  523. package/validators/dateLte.js.map +0 -1
  524. package/validators/gte.d.ts +0 -2
  525. package/validators/gte.js +0 -22
  526. package/validators/gte.js.map +0 -1
  527. package/validators/in.d.ts +0 -2
  528. package/validators/in.js +0 -22
  529. package/validators/in.js.map +0 -1
  530. package/validators/index.d.ts +0 -1
  531. package/validators/index.js +0 -16
  532. package/validators/index.js.map +0 -1
  533. package/validators/lte.d.ts +0 -2
  534. package/validators/lte.js +0 -22
  535. package/validators/lte.js.map +0 -1
  536. package/validators/maxLength.d.ts +0 -2
  537. package/validators/maxLength.js +0 -22
  538. package/validators/maxLength.js.map +0 -1
  539. package/validators/minLength.d.ts +0 -2
  540. package/validators/minLength.js +0 -22
  541. package/validators/minLength.js.map +0 -1
  542. package/validators/pattern.d.ts +0 -2
  543. package/validators/pattern.js +0 -36
  544. package/validators/pattern.js.map +0 -1
  545. package/validators/patternPlugins/email.d.ts +0 -2
  546. package/validators/patternPlugins/email.js +0 -13
  547. package/validators/patternPlugins/email.js.map +0 -1
  548. package/validators/patternPlugins/index.d.ts +0 -2
  549. package/validators/patternPlugins/index.js +0 -11
  550. package/validators/patternPlugins/index.js.map +0 -1
  551. package/validators/patternPlugins/lowerCase.d.ts +0 -2
  552. package/validators/patternPlugins/lowerCase.js +0 -13
  553. package/validators/patternPlugins/lowerCase.js.map +0 -1
  554. package/validators/patternPlugins/lowerCaseSpace.d.ts +0 -2
  555. package/validators/patternPlugins/lowerCaseSpace.js +0 -13
  556. package/validators/patternPlugins/lowerCaseSpace.js.map +0 -1
  557. package/validators/patternPlugins/upperCase.d.ts +0 -2
  558. package/validators/patternPlugins/upperCase.js +0 -13
  559. package/validators/patternPlugins/upperCase.js.map +0 -1
  560. package/validators/patternPlugins/upperCaseSpace.d.ts +0 -2
  561. package/validators/patternPlugins/upperCaseSpace.js +0 -13
  562. package/validators/patternPlugins/upperCaseSpace.js.map +0 -1
  563. package/validators/patternPlugins/url.d.ts +0 -2
  564. package/validators/patternPlugins/url.js +0 -13
  565. package/validators/patternPlugins/url.js.map +0 -1
  566. package/validators/required.d.ts +0 -2
  567. package/validators/required.js +0 -17
  568. package/validators/required.js.map +0 -1
  569. package/validators/timeGte.d.ts +0 -2
  570. package/validators/timeGte.js +0 -20
  571. package/validators/timeGte.js.map +0 -1
  572. package/validators/timeLte.d.ts +0 -2
  573. package/validators/timeLte.js +0 -20
  574. package/validators/timeLte.js.map +0 -1
  575. package/validators/unique.d.ts +0 -6
  576. package/validators/unique.js +0 -57
  577. package/validators/unique.js.map +0 -1
package/context.d.ts CHANGED
@@ -1,6 +1,3 @@
1
- import type { CmsContext, HeadlessCmsStorageOperations } from "./types/index.js";
1
+ import type { CmsContext } from "./types/index.js";
2
2
  import { ContextPlugin } from "@webiny/api";
3
- export interface CrudParams {
4
- storageOperations: HeadlessCmsStorageOperations;
5
- }
6
- export declare const createContextPlugin: ({ storageOperations }: CrudParams) => ContextPlugin<CmsContext>;
3
+ export declare const createContextPlugin: () => ContextPlugin<CmsContext>;
package/context.js CHANGED
@@ -13,7 +13,7 @@ import { createImportCrud } from "./export/crud/importing.js";
13
13
  import { getSchema } from "./graphql/getSchema.js";
14
14
  import { CmsInstallerFeature } from "./features/installer/feature.js";
15
15
  import { ContentEntriesFeature } from "./features/contentEntry/ContentEntriesFeature.js";
16
- import { AccessControl as AccessControlAbstraction, CmsContext as CmsContextAbstraction, StorageOperations } from "./features/shared/abstractions.js";
16
+ import { AccessControl as AccessControlAbstraction, CmsContext as CmsContextAbstraction, StorageOperations, StorageOperationsFactory } from "./features/shared/abstractions.js";
17
17
  import { EntryFromStorageTransform, EntryToStorageTransform, PluginsContainer, SearchableFieldsProvider } from "./legacy/abstractions.js";
18
18
  import { entryFromStorageTransform, entryToStorageTransform } from "./utils/entryStorage.js";
19
19
  import { getSearchableFields } from "./crud/contentEntry/searchableFields.js";
@@ -22,6 +22,9 @@ import { ContentModelFeature } from "./features/contentModel/ContentModelFeature
22
22
  import { ModelBuilderFeature } from "./features/modelBuilder/index.js";
23
23
  import { CmsWhereMapperFeature } from "./features/whereMapper/feature.js";
24
24
  import { CmsSortMapperFeature } from "./features/sortMapper/feature.js";
25
+ import { GraphQLFeature } from "./features/graphql/index.js";
26
+ import { ValidationFeature } from "./features/validation/index.js";
27
+ import { StorageFeature } from "./features/storage/index.js";
25
28
  const getParameters = async context => {
26
29
  const plugins = context.plugins.byType(CmsParametersPlugin.type);
27
30
  for (const plugin of plugins) {
@@ -32,9 +35,7 @@ const getParameters = async context => {
32
35
  }
33
36
  throw new WebinyError("Could not determine type of the CMS.", "CMS_TYPE_ERROR");
34
37
  };
35
- export const createContextPlugin = ({
36
- storageOperations
37
- }) => {
38
+ export const createContextPlugin = () => {
38
39
  const plugin = new ContextPlugin(async context => {
39
40
  const {
40
41
  type
@@ -58,6 +59,12 @@ export const createContextPlugin = ({
58
59
  context.cms.MANAGE = true;
59
60
  }
60
61
  };
62
+
63
+ // TODO figure out a better way. maybe this stuff should be on before handler?
64
+ // GraphQL fields must be loaded before anything else
65
+ GraphQLFeature.register(context.container);
66
+ ValidationFeature.register(context.container);
67
+ StorageFeature.register(context.container);
61
68
  async function getExecutableSchema(type) {
62
69
  const originalType = context.cms.type;
63
70
  setSchemaType(type);
@@ -73,8 +80,7 @@ export const createContextPlugin = ({
73
80
  return processRequestBody(input, schema, context);
74
81
  };
75
82
  }
76
- context.plugins.register(new StorageOperationsCmsModelPlugin(createCmsModelFieldConvertersAttachFactory(context.plugins)));
77
- await storageOperations.beforeInit(context);
83
+ context.plugins.register(new StorageOperationsCmsModelPlugin(createCmsModelFieldConvertersAttachFactory(context)));
78
84
  const accessControl = new AccessControl({
79
85
  getIdentity: async () => context.security.getIdentity(),
80
86
  getGroupsPermissions: () => context.security.getPermissions("cms.contentModelGroup"),
@@ -86,6 +92,9 @@ export const createContextPlugin = ({
86
92
  });
87
93
  }
88
94
  });
95
+ const storageOperationsFactory = context.container.resolve(StorageOperationsFactory);
96
+ const storageOperations = await storageOperationsFactory.create(context);
97
+ await storageOperations.beforeInit(context);
89
98
  context.cms = {
90
99
  type,
91
100
  READ: type === "read",
@@ -124,7 +133,7 @@ export const createContextPlugin = ({
124
133
  });
125
134
  context.container.registerInstance(SearchableFieldsProvider, params => {
126
135
  return getSearchableFields({
127
- plugins: context.plugins,
136
+ context,
128
137
  fields: params.fields,
129
138
  input: []
130
139
  });
package/context.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["WebinyError","ContextPlugin","processRequestBody","CmsParametersPlugin","AccessControl","createModelGroupsCrud","createModelsCrud","createContentEntryCrud","StorageOperationsCmsModelPlugin","createCmsModelFieldConvertersAttachFactory","createExportCrud","createImportCrud","getSchema","CmsInstallerFeature","ContentEntriesFeature","AccessControlAbstraction","CmsContext","CmsContextAbstraction","StorageOperations","EntryFromStorageTransform","EntryToStorageTransform","PluginsContainer","SearchableFieldsProvider","entryFromStorageTransform","entryToStorageTransform","getSearchableFields","ContentModelGroupFeature","ContentModelFeature","ModelBuilderFeature","CmsWhereMapperFeature","CmsSortMapperFeature","getParameters","context","plugins","byType","type","plugin","result","createContextPlugin","storageOperations","getTenant","tenancy","getCurrentTenant","setSchemaType","cms","READ","PREVIEW","MANAGE","getExecutableSchema","originalType","schema","security","withoutAuthorization","input","register","beforeInit","accessControl","getIdentity","getGroupsPermissions","getPermissions","getModelsPermissions","getEntriesPermissions","listAllGroups","listGroups","export","importing","container","registerInstance","model","entry","params","fields","init","name"],"sources":["context.ts"],"sourcesContent":["import type { ApiEndpoint, CmsContext, HeadlessCmsStorageOperations } from \"~/types/index.js\";\nimport WebinyError from \"@webiny/error\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport type { GraphQLRequestBody } from \"@webiny/handler-graphql/types.js\";\nimport { processRequestBody } from \"@webiny/handler-graphql\";\nimport type { CmsParametersPluginResponse } from \"~/plugins/CmsParametersPlugin.js\";\nimport { CmsParametersPlugin } from \"~/plugins/CmsParametersPlugin.js\";\nimport { AccessControl } from \"~/crud/AccessControl/AccessControl.js\";\nimport { createModelGroupsCrud } from \"~/crud/contentModelGroup.crud.js\";\nimport { createModelsCrud } from \"~/crud/contentModel.crud.js\";\nimport { createContentEntryCrud } from \"~/crud/contentEntry.crud.js\";\nimport { StorageOperationsCmsModelPlugin } from \"~/plugins/index.js\";\nimport { createCmsModelFieldConvertersAttachFactory } from \"~/utils/converters/valueKeyStorageConverter.js\";\nimport { createExportCrud } from \"~/export/index.js\";\nimport { createImportCrud } from \"~/export/crud/importing.js\";\nimport { getSchema } from \"~/graphql/getSchema.js\";\nimport { CmsInstallerFeature } from \"~/features/installer/feature.js\";\nimport { ContentEntriesFeature } from \"~/features/contentEntry/ContentEntriesFeature.js\";\nimport {\n AccessControl as AccessControlAbstraction,\n CmsContext as CmsContextAbstraction,\n StorageOperations\n} from \"~/features/shared/abstractions.js\";\nimport {\n EntryFromStorageTransform,\n EntryToStorageTransform,\n PluginsContainer,\n SearchableFieldsProvider\n} from \"./legacy/abstractions.js\";\nimport { entryFromStorageTransform, entryToStorageTransform } from \"~/utils/entryStorage.js\";\nimport { getSearchableFields } from \"~/crud/contentEntry/searchableFields.js\";\nimport { ContentModelGroupFeature } from \"~/features/contentModelGroup/ContentModelGroupFeature.js\";\nimport { ContentModelFeature } from \"~/features/contentModel/ContentModelFeature.js\";\nimport { ModelBuilderFeature } from \"~/features/modelBuilder/index.js\";\nimport { CmsWhereMapperFeature } from \"~/features/whereMapper/feature.js\";\nimport { CmsSortMapperFeature } from \"~/features/sortMapper/feature.js\";\n\nconst getParameters = async (context: CmsContext): Promise<CmsParametersPluginResponse> => {\n const plugins = context.plugins.byType<CmsParametersPlugin>(CmsParametersPlugin.type);\n\n for (const plugin of plugins) {\n const result = await plugin.getParameters(context);\n if (result !== null) {\n return result;\n }\n }\n throw new WebinyError(\"Could not determine type of the CMS.\", \"CMS_TYPE_ERROR\");\n};\n\nexport interface CrudParams {\n storageOperations: HeadlessCmsStorageOperations;\n}\n\nexport const createContextPlugin = ({ storageOperations }: CrudParams) => {\n const plugin = new ContextPlugin<CmsContext>(async context => {\n const { type } = await getParameters(context);\n\n const getTenant = () => {\n return context.tenancy.getCurrentTenant();\n };\n\n const setSchemaType = (type: ApiEndpoint | null) => {\n if (!type) {\n return;\n }\n\n context.cms.type = type;\n\n switch (type) {\n case \"read\":\n context.cms.READ = true;\n break;\n case \"preview\":\n context.cms.PREVIEW = true;\n break;\n default:\n context.cms.MANAGE = true;\n }\n };\n\n async function getExecutableSchema(type: ApiEndpoint) {\n const originalType = context.cms.type;\n setSchemaType(type);\n\n const schema = await context.security.withoutAuthorization(() => {\n return getSchema({\n context,\n getTenant,\n type\n });\n });\n\n setSchemaType(originalType);\n\n return async <TData, TExtensions>(input: GraphQLRequestBody | GraphQLRequestBody[]) => {\n return processRequestBody<TData, TExtensions>(input, schema, context);\n };\n }\n\n context.plugins.register(\n new StorageOperationsCmsModelPlugin(\n createCmsModelFieldConvertersAttachFactory(context.plugins)\n )\n );\n\n await storageOperations.beforeInit(context);\n\n const accessControl = new AccessControl({\n getIdentity: async () => context.security.getIdentity(),\n getGroupsPermissions: () => context.security.getPermissions(\"cms.contentModelGroup\"),\n getModelsPermissions: () => context.security.getPermissions(\"cms.contentModel\"),\n getEntriesPermissions: () => context.security.getPermissions(\"cms.contentEntry\"),\n listAllGroups: () => {\n return context.security.withoutAuthorization(() => {\n return context.cms.listGroups();\n });\n }\n });\n\n context.cms = {\n type,\n READ: type === \"read\",\n PREVIEW: type === \"preview\",\n MANAGE: type === \"manage\",\n storageOperations,\n accessControl,\n getExecutableSchema,\n ...createModelGroupsCrud({\n context\n }),\n ...createModelsCrud({\n context\n }),\n ...createContentEntryCrud({\n context\n }),\n export: {\n ...createExportCrud(context)\n },\n importing: {\n ...createImportCrud(context)\n }\n };\n\n // Register legacy dependencies\n context.container.registerInstance(StorageOperations, storageOperations);\n context.container.registerInstance(AccessControlAbstraction, accessControl);\n context.container.registerInstance(CmsContextAbstraction, context);\n context.container.registerInstance(PluginsContainer, context.plugins);\n context.container.registerInstance(EntryToStorageTransform, (model, entry) => {\n return entryToStorageTransform(context, model, entry);\n });\n context.container.registerInstance(EntryFromStorageTransform, (model, entry) => {\n return entryFromStorageTransform(context, model, entry);\n });\n context.container.registerInstance(SearchableFieldsProvider, params => {\n return getSearchableFields({\n plugins: context.plugins,\n fields: params.fields,\n input: []\n });\n });\n\n // Register features\n CmsInstallerFeature.register(context.container);\n ContentEntriesFeature.register(context.container);\n ContentModelFeature.register(context.container);\n ContentModelGroupFeature.register(context.container);\n ModelBuilderFeature.register(context.container);\n\n CmsWhereMapperFeature.register(context.container);\n CmsSortMapperFeature.register(context.container);\n\n if (!storageOperations.init) {\n return;\n }\n await storageOperations.init(context);\n });\n\n plugin.name = \"cms.createContext\";\n\n return plugin;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["WebinyError","ContextPlugin","processRequestBody","CmsParametersPlugin","AccessControl","createModelGroupsCrud","createModelsCrud","createContentEntryCrud","StorageOperationsCmsModelPlugin","createCmsModelFieldConvertersAttachFactory","createExportCrud","createImportCrud","getSchema","CmsInstallerFeature","ContentEntriesFeature","AccessControlAbstraction","CmsContext","CmsContextAbstraction","StorageOperations","StorageOperationsFactory","EntryFromStorageTransform","EntryToStorageTransform","PluginsContainer","SearchableFieldsProvider","entryFromStorageTransform","entryToStorageTransform","getSearchableFields","ContentModelGroupFeature","ContentModelFeature","ModelBuilderFeature","CmsWhereMapperFeature","CmsSortMapperFeature","GraphQLFeature","ValidationFeature","StorageFeature","getParameters","context","plugins","byType","type","plugin","result","createContextPlugin","getTenant","tenancy","getCurrentTenant","setSchemaType","cms","READ","PREVIEW","MANAGE","register","container","getExecutableSchema","originalType","schema","security","withoutAuthorization","input","accessControl","getIdentity","getGroupsPermissions","getPermissions","getModelsPermissions","getEntriesPermissions","listAllGroups","listGroups","storageOperationsFactory","resolve","storageOperations","create","beforeInit","export","importing","registerInstance","model","entry","params","fields","init","name"],"sources":["context.ts"],"sourcesContent":["import type { ApiEndpoint, CmsContext } from \"~/types/index.js\";\nimport WebinyError from \"@webiny/error\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport type { GraphQLRequestBody } from \"@webiny/handler-graphql/types.js\";\nimport { processRequestBody } from \"@webiny/handler-graphql\";\nimport type { CmsParametersPluginResponse } from \"~/plugins/CmsParametersPlugin.js\";\nimport { CmsParametersPlugin } from \"~/plugins/CmsParametersPlugin.js\";\nimport { AccessControl } from \"~/crud/AccessControl/AccessControl.js\";\nimport { createModelGroupsCrud } from \"~/crud/contentModelGroup.crud.js\";\nimport { createModelsCrud } from \"~/crud/contentModel.crud.js\";\nimport { createContentEntryCrud } from \"~/crud/contentEntry.crud.js\";\nimport { StorageOperationsCmsModelPlugin } from \"~/plugins/index.js\";\nimport { createCmsModelFieldConvertersAttachFactory } from \"~/utils/converters/valueKeyStorageConverter.js\";\nimport { createExportCrud } from \"~/export/index.js\";\nimport { createImportCrud } from \"~/export/crud/importing.js\";\nimport { getSchema } from \"~/graphql/getSchema.js\";\nimport { CmsInstallerFeature } from \"~/features/installer/feature.js\";\nimport { ContentEntriesFeature } from \"~/features/contentEntry/ContentEntriesFeature.js\";\nimport {\n AccessControl as AccessControlAbstraction,\n CmsContext as CmsContextAbstraction,\n StorageOperations,\n StorageOperationsFactory\n} from \"~/features/shared/abstractions.js\";\nimport {\n EntryFromStorageTransform,\n EntryToStorageTransform,\n PluginsContainer,\n SearchableFieldsProvider\n} from \"./legacy/abstractions.js\";\nimport { entryFromStorageTransform, entryToStorageTransform } from \"~/utils/entryStorage.js\";\nimport { getSearchableFields } from \"~/crud/contentEntry/searchableFields.js\";\nimport { ContentModelGroupFeature } from \"~/features/contentModelGroup/ContentModelGroupFeature.js\";\nimport { ContentModelFeature } from \"~/features/contentModel/ContentModelFeature.js\";\nimport { ModelBuilderFeature } from \"~/features/modelBuilder/index.js\";\nimport { CmsWhereMapperFeature } from \"~/features/whereMapper/feature.js\";\nimport { CmsSortMapperFeature } from \"~/features/sortMapper/feature.js\";\nimport { GraphQLFeature } from \"~/features/graphql/index.js\";\nimport { ValidationFeature } from \"~/features/validation/index.js\";\nimport { StorageFeature } from \"~/features/storage/index.js\";\n\nconst getParameters = async (context: CmsContext): Promise<CmsParametersPluginResponse> => {\n const plugins = context.plugins.byType<CmsParametersPlugin>(CmsParametersPlugin.type);\n\n for (const plugin of plugins) {\n const result = await plugin.getParameters(context);\n if (result !== null) {\n return result;\n }\n }\n throw new WebinyError(\"Could not determine type of the CMS.\", \"CMS_TYPE_ERROR\");\n};\n\nexport const createContextPlugin = () => {\n const plugin = new ContextPlugin<CmsContext>(async context => {\n const { type } = await getParameters(context);\n\n const getTenant = () => {\n return context.tenancy.getCurrentTenant();\n };\n\n const setSchemaType = (type: ApiEndpoint | null) => {\n if (!type) {\n return;\n }\n\n context.cms.type = type;\n\n switch (type) {\n case \"read\":\n context.cms.READ = true;\n break;\n case \"preview\":\n context.cms.PREVIEW = true;\n break;\n default:\n context.cms.MANAGE = true;\n }\n };\n\n // TODO figure out a better way. maybe this stuff should be on before handler?\n // GraphQL fields must be loaded before anything else\n GraphQLFeature.register(context.container);\n ValidationFeature.register(context.container);\n StorageFeature.register(context.container);\n\n async function getExecutableSchema(type: ApiEndpoint) {\n const originalType = context.cms.type;\n setSchemaType(type);\n\n const schema = await context.security.withoutAuthorization(() => {\n return getSchema({\n context,\n getTenant,\n type\n });\n });\n\n setSchemaType(originalType);\n\n return async <TData, TExtensions>(input: GraphQLRequestBody | GraphQLRequestBody[]) => {\n return processRequestBody<TData, TExtensions>(input, schema, context);\n };\n }\n\n context.plugins.register(\n new StorageOperationsCmsModelPlugin(createCmsModelFieldConvertersAttachFactory(context))\n );\n\n const accessControl = new AccessControl({\n getIdentity: async () => context.security.getIdentity(),\n getGroupsPermissions: () => context.security.getPermissions(\"cms.contentModelGroup\"),\n getModelsPermissions: () => context.security.getPermissions(\"cms.contentModel\"),\n getEntriesPermissions: () => context.security.getPermissions(\"cms.contentEntry\"),\n listAllGroups: () => {\n return context.security.withoutAuthorization(() => {\n return context.cms.listGroups();\n });\n }\n });\n\n const storageOperationsFactory = context.container.resolve(StorageOperationsFactory);\n\n const storageOperations = await storageOperationsFactory.create(context);\n await storageOperations.beforeInit(context);\n\n context.cms = {\n type,\n READ: type === \"read\",\n PREVIEW: type === \"preview\",\n MANAGE: type === \"manage\",\n storageOperations,\n accessControl,\n getExecutableSchema,\n ...createModelGroupsCrud({\n context\n }),\n ...createModelsCrud({\n context\n }),\n ...createContentEntryCrud({\n context\n }),\n export: {\n ...createExportCrud(context)\n },\n importing: {\n ...createImportCrud(context)\n }\n };\n\n // Register legacy dependencies\n context.container.registerInstance(StorageOperations, storageOperations);\n context.container.registerInstance(AccessControlAbstraction, accessControl);\n context.container.registerInstance(CmsContextAbstraction, context);\n context.container.registerInstance(PluginsContainer, context.plugins);\n context.container.registerInstance(EntryToStorageTransform, (model, entry) => {\n return entryToStorageTransform(context, model, entry);\n });\n context.container.registerInstance(EntryFromStorageTransform, (model, entry) => {\n return entryFromStorageTransform(context, model, entry);\n });\n context.container.registerInstance(SearchableFieldsProvider, params => {\n return getSearchableFields({\n context,\n fields: params.fields,\n input: []\n });\n });\n\n // Register features\n CmsInstallerFeature.register(context.container);\n ContentEntriesFeature.register(context.container);\n ContentModelFeature.register(context.container);\n ContentModelGroupFeature.register(context.container);\n ModelBuilderFeature.register(context.container);\n CmsWhereMapperFeature.register(context.container);\n CmsSortMapperFeature.register(context.container);\n\n if (!storageOperations.init) {\n return;\n }\n await storageOperations.init(context);\n });\n\n plugin.name = \"cms.createContext\";\n\n return plugin;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -27,22 +27,12 @@ export interface CanAccessEntryParams extends GetEntriesAccessControlListParams
27
27
  rwd?: string;
28
28
  pw?: string;
29
29
  }
30
- interface AccessControlEntry {
31
- rwd: string;
32
- canAccessNonOwned: boolean;
33
- canAccessOnlyOwned: boolean;
34
- }
35
- type AccessControlList = AccessControlEntry[];
36
- interface EntriesAccessControlEntry extends AccessControlEntry {
37
- pw?: string;
38
- }
39
- type EntriesAccessControlList = EntriesAccessControlEntry[];
40
30
  export declare class AccessControl {
41
- getIdentity: AccessControlParams["getIdentity"];
42
- getGroupsPermissions: AccessControlParams["getGroupsPermissions"];
43
- getModelsPermissions: AccessControlParams["getModelsPermissions"];
44
- getEntriesPermissions: AccessControlParams["getEntriesPermissions"];
45
- listAllGroupsCallback: AccessControlParams["listAllGroups"];
31
+ private getIdentity;
32
+ private getGroupsPermissions;
33
+ private getModelsPermissions;
34
+ private getEntriesPermissions;
35
+ private listAllGroupsCallback;
46
36
  private fullAccessPermissions;
47
37
  private allGroups;
48
38
  constructor({ getIdentity, getGroupsPermissions, getModelsPermissions, getEntriesPermissions, listAllGroups }: AccessControlParams);
@@ -56,10 +46,10 @@ export declare class AccessControl {
56
46
  * - hasFullAccessToGroups
57
47
  */
58
48
  canAccessGroup(params?: CanAccessGroupParams): Promise<boolean>;
59
- canAccessNonOwnedGroups(params: GetGroupsAccessControlListParams): Promise<boolean>;
60
- canAccessOnlyOwnedGroups(params: GetGroupsAccessControlListParams): Promise<boolean>;
61
- getGroupsAccessControlList(params: GetGroupsAccessControlListParams): Promise<AccessControlList>;
62
- hasFullAccessToGroups(): Promise<boolean>;
49
+ private canAccessNonOwnedGroups;
50
+ private canAccessOnlyOwnedGroups;
51
+ private getGroupsAccessControlList;
52
+ private hasFullAccessToGroups;
63
53
  /**
64
54
  * Models-related methods below. 👇
65
55
  * - canAccessModel
@@ -70,11 +60,11 @@ export declare class AccessControl {
70
60
  * - hasFullAccessToModels
71
61
  */
72
62
  canAccessModel(params: CanAccessModelParams): Promise<boolean>;
73
- ensureCanAccessModel(params?: CanAccessModelParams): Promise<void>;
74
- canAccessNonOwnedModels(params: GetModelsAccessControlListParams): Promise<boolean>;
75
- canAccessOnlyOwnedModels(params: GetModelsAccessControlListParams): Promise<boolean>;
76
- getModelsAccessControlList(params: GetModelsAccessControlListParams): Promise<AccessControlList>;
77
- hasFullAccessToModels(params: GetModelsAccessControlListParams): Promise<boolean>;
63
+ private ensureCanAccessModel;
64
+ private canAccessNonOwnedModels;
65
+ private canAccessOnlyOwnedModels;
66
+ private getModelsAccessControlList;
67
+ private hasFullAccessToModels;
78
68
  /**
79
69
  * Entries-related methods below. 👇
80
70
  * - canAccessEntry
@@ -85,11 +75,11 @@ export declare class AccessControl {
85
75
  * - hasFullAccessToEntries
86
76
  */
87
77
  canAccessEntry(params: CanAccessEntryParams): Promise<boolean>;
88
- ensureCanAccessEntry(params: CanAccessEntryParams): Promise<void>;
89
- canAccessNonOwnedEntries(params: GetEntriesAccessControlListParams): Promise<boolean>;
78
+ private ensureCanAccessEntry;
79
+ private canAccessNonOwnedEntries;
90
80
  canAccessOnlyOwnedEntries(params: GetEntriesAccessControlListParams): Promise<boolean>;
91
- getEntriesAccessControlList(params: GetEntriesAccessControlListParams): Promise<EntriesAccessControlList>;
92
- hasFullAccessToEntries(params: GetEntriesAccessControlListParams): Promise<boolean>;
81
+ private getEntriesAccessControlList;
82
+ private hasFullAccessToEntries;
93
83
  private modelAuthorizationDisabled;
94
84
  private listAllGroups;
95
85
  private getGroup;
@@ -1 +1 @@
1
- {"version":3,"names":["NotAuthorizedError","AccessControl","constructor","getIdentity","getGroupsPermissions","getModelsPermissions","getEntriesPermissions","listAllGroups","fullAccessPermissions","listAllGroupsCallback","allGroups","canAccessGroup","params","acl","getGroupsAccessControlList","canRead","find","ace","rwd","includes","hasRwd","canAccessNonOwnedGroups","some","canAccessNonOwned","canAccessOnlyOwnedGroups","hasFullAccessToGroups","canAccessOnlyOwned","groupsPermissionsList","groupsPermissions","own","modelGroupCreatedBy","group","createdBy","identity","id","push","groups","Array","isArray","permissions","p","filter","Boolean","name","canAccessModel","getModelsAccessControlList","ensureCanAccessModel","canAccess","modelName","model","canAccessNonOwnedModels","canAccessOnlyOwnedModels","hasFullAccessToModels","i","length","modelsPermissionsList","relatedModelPermissions","_src","getGroup","fullAccess","models","modelCreatedBy","modelId","modelAuthorizationDisabled","canAccessEntry","getEntriesAccessControlList","pw","hasPw","ensureCanAccessEntry","entry","entryId","canAccessNonOwnedEntries","canAccessOnlyOwnedEntries","hasFullAccessToEntries","groupPermissions","relatedModelsPermissions","entriesPermissionsList","relatedEntriesPermissions","groupCreatedBy","entryCreatedBy","authorization","slug"],"sources":["AccessControl.ts"],"sourcesContent":["import type {\n CmsEntry,\n CmsEntryPermission,\n CmsGroup,\n CmsGroupPermission,\n CmsModel,\n CmsModelPermission\n} from \"~/types/index.js\";\nimport type { SecurityIdentity } from \"@webiny/api-core/types/security.js\";\nimport { NotAuthorizedError } from \"~/utils/errors.js\";\n\nexport interface AccessControlParams {\n getIdentity: () => Promise<SecurityIdentity>;\n getGroupsPermissions: () => Promise<CmsGroupPermission[]>;\n getModelsPermissions: () => Promise<CmsModelPermission[]>;\n getEntriesPermissions: () => Promise<CmsEntryPermission[]>;\n listAllGroups: () => Promise<CmsGroup[]>;\n}\n\ninterface GetGroupsAccessControlListParams {\n group?: CmsGroup;\n}\n\ninterface CanAccessGroupParams extends GetGroupsAccessControlListParams {\n rwd?: string;\n}\n\ninterface GetModelsAccessControlListParams {\n model?: CmsModel;\n}\n\ninterface CanAccessModelParams extends GetModelsAccessControlListParams {\n rwd?: string;\n}\n\ninterface GetEntriesAccessControlListParams {\n model: Pick<CmsModel, \"modelId\" | \"createdBy\" | \"group\" | \"authorization\">;\n entry?: Pick<CmsEntry, \"entryId\" | \"createdBy\">;\n}\n\nexport interface CanAccessEntryParams extends GetEntriesAccessControlListParams {\n rwd?: string;\n pw?: string;\n}\n\ninterface AccessControlEntry {\n rwd: string;\n canAccessNonOwned: boolean;\n canAccessOnlyOwned: boolean;\n}\n\ntype AccessControlList = AccessControlEntry[];\n\ninterface EntriesAccessControlEntry extends AccessControlEntry {\n pw?: string;\n}\n\ntype EntriesAccessControlList = EntriesAccessControlEntry[];\n\ninterface IModelAuthorizationDisabledParams {\n model: Pick<CmsModel, \"authorization\">;\n}\n\nexport class AccessControl {\n getIdentity: AccessControlParams[\"getIdentity\"];\n getGroupsPermissions: AccessControlParams[\"getGroupsPermissions\"];\n getModelsPermissions: AccessControlParams[\"getModelsPermissions\"];\n getEntriesPermissions: AccessControlParams[\"getEntriesPermissions\"];\n listAllGroupsCallback: AccessControlParams[\"listAllGroups\"];\n\n private fullAccessPermissions: string[];\n private allGroups: null | Promise<CmsGroup[]>;\n\n constructor({\n getIdentity,\n getGroupsPermissions,\n getModelsPermissions,\n getEntriesPermissions,\n listAllGroups\n }: AccessControlParams) {\n this.getIdentity = getIdentity;\n this.getGroupsPermissions = getGroupsPermissions;\n this.getModelsPermissions = getModelsPermissions;\n this.getEntriesPermissions = getEntriesPermissions;\n this.fullAccessPermissions = [\"*\", \"cms.*\"];\n this.listAllGroupsCallback = listAllGroups;\n this.allGroups = null;\n }\n\n /**\n * Groups-related methods below. 👇\n * - canAccessGroup\n * - ensureCanAccessGroup\n * - canAccessNonOwnedGroups\n * - canAccessOnlyOwnedGroups\n * - getGroupsAccessControlList\n * - hasFullAccessToGroups\n */\n\n async canAccessGroup(params: CanAccessGroupParams = {}) {\n const acl = await this.getGroupsAccessControlList(params);\n\n const canRead = acl.find(ace => ace.rwd?.includes(\"r\"));\n if (!canRead) {\n return false;\n }\n\n const { rwd } = params;\n if (rwd) {\n const hasRwd = acl.find(ace => ace.rwd.includes(rwd));\n if (!hasRwd) {\n return false;\n }\n }\n\n return true;\n }\n\n async canAccessNonOwnedGroups(params: GetGroupsAccessControlListParams) {\n const acl = await this.getGroupsAccessControlList(params);\n return acl.some(ace => ace.canAccessNonOwned);\n }\n\n async canAccessOnlyOwnedGroups(params: GetGroupsAccessControlListParams) {\n const canAccessNonOwned = await this.canAccessNonOwnedGroups(params);\n return !canAccessNonOwned;\n }\n\n async getGroupsAccessControlList(\n params: GetGroupsAccessControlListParams\n ): Promise<AccessControlList> {\n if (await this.hasFullAccessToGroups()) {\n return [{ rwd: \"rwd\", canAccessNonOwned: true, canAccessOnlyOwned: false }];\n }\n\n const groupsPermissionsList = await this.getGroupsPermissions();\n const acl: AccessControlList = [];\n\n for (const groupsPermissions of groupsPermissionsList) {\n if (groupsPermissions.own) {\n if (\"group\" in params) {\n const modelGroupCreatedBy = params.group?.createdBy;\n if (!modelGroupCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n\n if (modelGroupCreatedBy.id !== identity.id) {\n continue;\n }\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true\n });\n }\n\n if (groupsPermissions.groups) {\n if (\"group\" in params) {\n const { group } = params;\n if (!group) {\n continue;\n }\n\n const { groups } = groupsPermissions;\n if (!Array.isArray(groups)) {\n continue;\n }\n\n if (!groups.includes(group.id)) {\n continue;\n }\n }\n }\n\n acl.push({\n rwd: groupsPermissions.rwd as string,\n canAccessNonOwned: true,\n canAccessOnlyOwned: false\n });\n }\n\n return acl;\n }\n\n async hasFullAccessToGroups() {\n const permissions = await this.getGroupsPermissions();\n return permissions.some(p => this.fullAccessPermissions.filter(Boolean).includes(p.name));\n }\n\n /**\n * Models-related methods below. 👇\n * - canAccessModel\n * - ensureCanAccessModel\n * - canAccessNonOwnedModels\n * - canAccessOnlyOwnedModels\n * - getModelsAccessControlList\n * - hasFullAccessToModels\n */\n\n async canAccessModel(params: CanAccessModelParams) {\n const acl = await this.getModelsAccessControlList(params);\n\n const canRead = acl.find(ace => ace.rwd.includes(\"r\"));\n if (!canRead) {\n return false;\n }\n\n const { rwd } = params;\n if (rwd) {\n const hasRwd = acl.find(ace => ace.rwd.includes(rwd));\n if (!hasRwd) {\n return false;\n }\n }\n\n return true;\n }\n\n async ensureCanAccessModel(params: CanAccessModelParams = {}) {\n const canAccess = await this.canAccessModel(params);\n if (canAccess) {\n return;\n }\n\n if (\"model\" in params) {\n let modelName = \"(could not determine name)\";\n if (params.model?.name) {\n modelName = `\"${params.model.name}\"`;\n }\n\n throw new NotAuthorizedError(`Not allowed to access content model ${modelName}.`);\n }\n\n throw new NotAuthorizedError(`Not allowed to access content models.`);\n }\n\n async canAccessNonOwnedModels(params: GetModelsAccessControlListParams) {\n const acl = await this.getModelsAccessControlList(params);\n return acl.some(ace => ace.canAccessNonOwned);\n }\n\n async canAccessOnlyOwnedModels(params: GetModelsAccessControlListParams) {\n const canAccessNonOwned = await this.canAccessNonOwnedModels(params);\n return !canAccessNonOwned;\n }\n\n async getModelsAccessControlList(\n params: GetModelsAccessControlListParams\n ): Promise<AccessControlList> {\n if (await this.hasFullAccessToModels(params)) {\n return [{ rwd: \"rwd\", canAccessNonOwned: true, canAccessOnlyOwned: false }];\n }\n\n const groupsPermissionsList = await this.getGroupsPermissions();\n const acl: AccessControlList = [];\n\n for (let i = 0; i < groupsPermissionsList.length; i++) {\n const groupsPermissions = groupsPermissionsList[i];\n\n const modelsPermissionsList = await this.getModelsPermissions();\n const relatedModelPermissions = modelsPermissionsList.find(\n permissions => permissions._src === groupsPermissions._src\n );\n\n if (!relatedModelPermissions) {\n continue;\n }\n\n if (groupsPermissions.own) {\n if (\"model\" in params) {\n const { model } = params;\n if (!model) {\n continue;\n }\n\n const group = await this.getGroup(model.group);\n if (!group) {\n continue;\n }\n\n const modelGroupCreatedBy = group.createdBy;\n if (!modelGroupCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (modelGroupCreatedBy.id !== identity.id) {\n continue;\n }\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true\n });\n\n continue;\n }\n\n if (groupsPermissions.groups) {\n if (\"model\" in params) {\n const { model } = params;\n if (!model) {\n continue;\n }\n\n if (!Array.isArray(groupsPermissions.groups)) {\n continue;\n }\n\n if (!groupsPermissions.groups.includes(model.group)) {\n continue;\n }\n }\n }\n\n const fullAccess =\n !relatedModelPermissions.rwd &&\n !relatedModelPermissions.own &&\n !relatedModelPermissions.models;\n\n if (fullAccess) {\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: true,\n canAccessOnlyOwned: false\n });\n\n continue;\n }\n\n if (relatedModelPermissions.own) {\n if (\"model\" in params) {\n if (!params.model) {\n continue;\n }\n\n const modelCreatedBy = params.model.createdBy;\n if (!modelCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (modelCreatedBy.id !== identity.id) {\n continue;\n }\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true\n });\n\n continue;\n }\n\n if (relatedModelPermissions.models) {\n const { models } = relatedModelPermissions;\n if (\"model\" in params) {\n if (!params.model) {\n continue;\n }\n\n if (!Array.isArray(models)) {\n continue;\n }\n\n if (!models.includes(params.model.modelId)) {\n continue;\n }\n }\n }\n\n acl.push({\n rwd: relatedModelPermissions.rwd as string,\n canAccessNonOwned: true,\n canAccessOnlyOwned: false\n });\n }\n\n return acl;\n }\n\n async hasFullAccessToModels(params: GetModelsAccessControlListParams) {\n const { model } = params;\n if (model) {\n if (this.modelAuthorizationDisabled({ model })) {\n return true;\n }\n }\n\n const permissions = await this.getModelsPermissions();\n return permissions.some(p => this.fullAccessPermissions.filter(Boolean).includes(p.name));\n }\n\n /**\n * Entries-related methods below. 👇\n * - canAccessEntry\n * - ensureCanAccessEntry\n * - canAccessNonOwnedEntries\n * - canAccessOnlyOwnedEntries\n * - getEntriesAccessControlList\n * - hasFullAccessToEntries\n */\n\n async canAccessEntry(params: CanAccessEntryParams) {\n const acl = await this.getEntriesAccessControlList(params);\n\n const canRead = acl.find(ace => ace.rwd.includes(\"r\"));\n if (!canRead) {\n return false;\n }\n\n const { rwd } = params;\n if (rwd) {\n const hasRwd = acl.find(ace => ace.rwd.includes(rwd));\n if (!hasRwd) {\n return false;\n }\n }\n\n const { pw } = params;\n if (pw) {\n const hasPw = acl.find(ace => ace.pw?.includes(pw));\n if (!hasPw) {\n return false;\n }\n }\n\n return true;\n }\n\n async ensureCanAccessEntry(params: CanAccessEntryParams) {\n const canAccess = await this.canAccessEntry(params);\n if (!canAccess) {\n if (params.entry) {\n throw new NotAuthorizedError(\n `Not allowed to access entry \"${params.entry.entryId}\".`\n );\n }\n\n throw new NotAuthorizedError(\n `Not allowed to access \"${params.model.modelId}\" entries.`\n );\n }\n }\n\n async canAccessNonOwnedEntries(params: GetEntriesAccessControlListParams) {\n const acl = await this.getEntriesAccessControlList(params);\n return acl.some(ace => ace.canAccessNonOwned);\n }\n\n async canAccessOnlyOwnedEntries(params: GetEntriesAccessControlListParams) {\n const canAccessNonOwned = await this.canAccessNonOwnedEntries(params);\n return !canAccessNonOwned;\n }\n\n async getEntriesAccessControlList(\n params: GetEntriesAccessControlListParams\n ): Promise<EntriesAccessControlList> {\n if (await this.hasFullAccessToEntries(params)) {\n return [{ rwd: \"rwd\", pw: \"pu\", canAccessNonOwned: true, canAccessOnlyOwned: false }];\n }\n\n // We need a map of groups slugs to ids, to perform checks on models\n const { model } = params;\n const groupsPermissionsList = await this.getGroupsPermissions();\n const acl: EntriesAccessControlList = [];\n\n for (let i = 0; i < groupsPermissionsList.length; i++) {\n const groupPermissions = groupsPermissionsList[i];\n\n const modelsPermissionsList = await this.getModelsPermissions();\n const relatedModelsPermissions = modelsPermissionsList.find(\n permissions => permissions._src === groupPermissions._src\n );\n\n if (!relatedModelsPermissions) {\n continue;\n }\n\n const entriesPermissionsList = await this.getEntriesPermissions();\n const relatedEntriesPermissions = entriesPermissionsList.find(\n permissions => permissions._src === groupPermissions._src\n );\n\n if (!relatedEntriesPermissions) {\n continue;\n }\n\n if (groupPermissions.own) {\n const group = await this.getGroup(model.group);\n if (!group) {\n continue;\n }\n\n const groupCreatedBy = group.createdBy;\n if (!groupCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (groupCreatedBy.id !== identity.id) {\n continue;\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true,\n pw: relatedEntriesPermissions.pw\n });\n\n continue;\n }\n\n if (groupPermissions.groups) {\n const { groups } = groupPermissions;\n\n if (!Array.isArray(groups)) {\n continue;\n }\n\n if (!groups.includes(model.group)) {\n continue;\n }\n }\n\n if (relatedModelsPermissions.own) {\n const modelCreatedBy = model.createdBy;\n if (!modelCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (modelCreatedBy.id !== identity.id) {\n continue;\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true,\n pw: relatedEntriesPermissions.pw\n });\n }\n\n if (relatedModelsPermissions.models) {\n if (!Array.isArray(relatedModelsPermissions.models)) {\n continue;\n }\n\n if (!relatedModelsPermissions.models.includes(model.modelId)) {\n continue;\n }\n }\n\n const fullAccess =\n !relatedEntriesPermissions.rwd &&\n !relatedEntriesPermissions.own &&\n !relatedEntriesPermissions.models;\n\n if (fullAccess) {\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true,\n pw: \"pu\"\n });\n\n continue;\n }\n\n if (relatedEntriesPermissions.own) {\n if (\"entry\" in params) {\n const entryCreatedBy = params.entry?.createdBy;\n if (!entryCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (entryCreatedBy.id !== identity.id) {\n continue;\n }\n }\n\n acl.push({\n rwd: relatedEntriesPermissions.rwd,\n canAccessNonOwned: false,\n canAccessOnlyOwned: true,\n pw: relatedEntriesPermissions.pw\n });\n\n continue;\n }\n\n acl.push({\n rwd: relatedEntriesPermissions.rwd,\n canAccessNonOwned: true,\n canAccessOnlyOwned: false,\n pw: relatedEntriesPermissions.pw\n });\n }\n\n return acl;\n }\n\n async hasFullAccessToEntries(params: GetEntriesAccessControlListParams) {\n if (this.modelAuthorizationDisabled(params)) {\n return true;\n }\n\n const permissions = await this.getEntriesPermissions();\n return permissions.some(p => this.fullAccessPermissions.filter(Boolean).includes(p.name));\n }\n\n private modelAuthorizationDisabled(params: IModelAuthorizationDisabledParams) {\n if (\"authorization\" in params.model) {\n const { authorization } = params.model;\n if (typeof authorization === \"boolean\") {\n return authorization === false;\n }\n\n return authorization?.permissions === false;\n }\n\n return false;\n }\n\n private async listAllGroups(): Promise<CmsGroup[]> {\n if (this.allGroups === null) {\n this.allGroups = this.listAllGroupsCallback();\n }\n\n return this.allGroups;\n }\n\n private async getGroup(slug: string): Promise<CmsGroup | undefined> {\n const groups = await this.listAllGroups();\n return groups.find(group => group.slug === slug);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["NotAuthorizedError","AccessControl","constructor","getIdentity","getGroupsPermissions","getModelsPermissions","getEntriesPermissions","listAllGroups","fullAccessPermissions","listAllGroupsCallback","allGroups","canAccessGroup","params","acl","getGroupsAccessControlList","canRead","find","ace","rwd","includes","hasRwd","canAccessNonOwnedGroups","some","canAccessNonOwned","canAccessOnlyOwnedGroups","hasFullAccessToGroups","canAccessOnlyOwned","groupsPermissionsList","groupsPermissions","own","modelGroupCreatedBy","group","createdBy","identity","id","push","groups","Array","isArray","permissions","p","filter","Boolean","name","canAccessModel","getModelsAccessControlList","ensureCanAccessModel","canAccess","modelName","model","canAccessNonOwnedModels","canAccessOnlyOwnedModels","hasFullAccessToModels","i","length","modelsPermissionsList","relatedModelPermissions","_src","getGroup","fullAccess","models","modelCreatedBy","modelId","modelAuthorizationDisabled","canAccessEntry","getEntriesAccessControlList","pw","hasPw","ensureCanAccessEntry","entry","entryId","canAccessNonOwnedEntries","canAccessOnlyOwnedEntries","hasFullAccessToEntries","groupPermissions","relatedModelsPermissions","entriesPermissionsList","relatedEntriesPermissions","groupCreatedBy","entryCreatedBy","authorization","slug"],"sources":["AccessControl.ts"],"sourcesContent":["import type {\n CmsEntry,\n CmsEntryPermission,\n CmsGroup,\n CmsGroupPermission,\n CmsModel,\n CmsModelPermission\n} from \"~/types/index.js\";\nimport type { SecurityIdentity } from \"@webiny/api-core/types/security.js\";\nimport { NotAuthorizedError } from \"~/utils/errors.js\";\n\nexport interface AccessControlParams {\n getIdentity: () => Promise<SecurityIdentity>;\n getGroupsPermissions: () => Promise<CmsGroupPermission[]>;\n getModelsPermissions: () => Promise<CmsModelPermission[]>;\n getEntriesPermissions: () => Promise<CmsEntryPermission[]>;\n listAllGroups: () => Promise<CmsGroup[]>;\n}\n\ninterface GetGroupsAccessControlListParams {\n group?: CmsGroup;\n}\n\ninterface CanAccessGroupParams extends GetGroupsAccessControlListParams {\n rwd?: string;\n}\n\ninterface GetModelsAccessControlListParams {\n model?: CmsModel;\n}\n\ninterface CanAccessModelParams extends GetModelsAccessControlListParams {\n rwd?: string;\n}\n\ninterface GetEntriesAccessControlListParams {\n model: Pick<CmsModel, \"modelId\" | \"createdBy\" | \"group\" | \"authorization\">;\n entry?: Pick<CmsEntry, \"entryId\" | \"createdBy\">;\n}\n\nexport interface CanAccessEntryParams extends GetEntriesAccessControlListParams {\n rwd?: string;\n pw?: string;\n}\n\ninterface AccessControlEntry {\n rwd: string;\n canAccessNonOwned: boolean;\n canAccessOnlyOwned: boolean;\n}\n\ntype AccessControlList = AccessControlEntry[];\n\ninterface EntriesAccessControlEntry extends AccessControlEntry {\n pw?: string;\n}\n\ntype EntriesAccessControlList = EntriesAccessControlEntry[];\n\ninterface IModelAuthorizationDisabledParams {\n model: Pick<CmsModel, \"authorization\">;\n}\n\nexport class AccessControl {\n private getIdentity: AccessControlParams[\"getIdentity\"];\n private getGroupsPermissions: AccessControlParams[\"getGroupsPermissions\"];\n private getModelsPermissions: AccessControlParams[\"getModelsPermissions\"];\n private getEntriesPermissions: AccessControlParams[\"getEntriesPermissions\"];\n private listAllGroupsCallback: AccessControlParams[\"listAllGroups\"];\n\n private fullAccessPermissions: string[];\n private allGroups: null | Promise<CmsGroup[]>;\n\n constructor({\n getIdentity,\n getGroupsPermissions,\n getModelsPermissions,\n getEntriesPermissions,\n listAllGroups\n }: AccessControlParams) {\n this.getIdentity = getIdentity;\n this.getGroupsPermissions = getGroupsPermissions;\n this.getModelsPermissions = getModelsPermissions;\n this.getEntriesPermissions = getEntriesPermissions;\n this.fullAccessPermissions = [\"*\", \"cms.*\"];\n this.listAllGroupsCallback = listAllGroups;\n this.allGroups = null;\n }\n\n /**\n * Groups-related methods below. 👇\n * - canAccessGroup\n * - ensureCanAccessGroup\n * - canAccessNonOwnedGroups\n * - canAccessOnlyOwnedGroups\n * - getGroupsAccessControlList\n * - hasFullAccessToGroups\n */\n\n async canAccessGroup(params: CanAccessGroupParams = {}) {\n const acl = await this.getGroupsAccessControlList(params);\n\n const canRead = acl.find(ace => ace.rwd?.includes(\"r\"));\n if (!canRead) {\n return false;\n }\n\n const { rwd } = params;\n if (rwd) {\n const hasRwd = acl.find(ace => ace.rwd.includes(rwd));\n if (!hasRwd) {\n return false;\n }\n }\n\n return true;\n }\n\n private async canAccessNonOwnedGroups(params: GetGroupsAccessControlListParams) {\n const acl = await this.getGroupsAccessControlList(params);\n return acl.some(ace => ace.canAccessNonOwned);\n }\n\n private async canAccessOnlyOwnedGroups(params: GetGroupsAccessControlListParams) {\n const canAccessNonOwned = await this.canAccessNonOwnedGroups(params);\n return !canAccessNonOwned;\n }\n\n private async getGroupsAccessControlList(\n params: GetGroupsAccessControlListParams\n ): Promise<AccessControlList> {\n if (await this.hasFullAccessToGroups()) {\n return [{ rwd: \"rwd\", canAccessNonOwned: true, canAccessOnlyOwned: false }];\n }\n\n const groupsPermissionsList = await this.getGroupsPermissions();\n const acl: AccessControlList = [];\n\n for (const groupsPermissions of groupsPermissionsList) {\n if (groupsPermissions.own) {\n if (\"group\" in params) {\n const modelGroupCreatedBy = params.group?.createdBy;\n if (!modelGroupCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n\n if (modelGroupCreatedBy.id !== identity.id) {\n continue;\n }\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true\n });\n }\n\n if (groupsPermissions.groups) {\n if (\"group\" in params) {\n const { group } = params;\n if (!group) {\n continue;\n }\n\n const { groups } = groupsPermissions;\n if (!Array.isArray(groups)) {\n continue;\n }\n\n if (!groups.includes(group.id)) {\n continue;\n }\n }\n }\n\n acl.push({\n rwd: groupsPermissions.rwd as string,\n canAccessNonOwned: true,\n canAccessOnlyOwned: false\n });\n }\n\n return acl;\n }\n\n private async hasFullAccessToGroups() {\n const permissions = await this.getGroupsPermissions();\n return permissions.some(p => this.fullAccessPermissions.filter(Boolean).includes(p.name));\n }\n\n /**\n * Models-related methods below. 👇\n * - canAccessModel\n * - ensureCanAccessModel\n * - canAccessNonOwnedModels\n * - canAccessOnlyOwnedModels\n * - getModelsAccessControlList\n * - hasFullAccessToModels\n */\n\n async canAccessModel(params: CanAccessModelParams) {\n const acl = await this.getModelsAccessControlList(params);\n\n const canRead = acl.find(ace => ace.rwd.includes(\"r\"));\n if (!canRead) {\n return false;\n }\n\n const { rwd } = params;\n if (rwd) {\n const hasRwd = acl.find(ace => ace.rwd.includes(rwd));\n if (!hasRwd) {\n return false;\n }\n }\n\n return true;\n }\n\n private async ensureCanAccessModel(params: CanAccessModelParams = {}) {\n const canAccess = await this.canAccessModel(params);\n if (canAccess) {\n return;\n }\n\n if (\"model\" in params) {\n let modelName = \"(could not determine name)\";\n if (params.model?.name) {\n modelName = `\"${params.model.name}\"`;\n }\n\n throw new NotAuthorizedError(`Not allowed to access content model ${modelName}.`);\n }\n\n throw new NotAuthorizedError(`Not allowed to access content models.`);\n }\n\n private async canAccessNonOwnedModels(params: GetModelsAccessControlListParams) {\n const acl = await this.getModelsAccessControlList(params);\n return acl.some(ace => ace.canAccessNonOwned);\n }\n\n private async canAccessOnlyOwnedModels(params: GetModelsAccessControlListParams) {\n const canAccessNonOwned = await this.canAccessNonOwnedModels(params);\n return !canAccessNonOwned;\n }\n\n private async getModelsAccessControlList(\n params: GetModelsAccessControlListParams\n ): Promise<AccessControlList> {\n if (await this.hasFullAccessToModels(params)) {\n return [{ rwd: \"rwd\", canAccessNonOwned: true, canAccessOnlyOwned: false }];\n }\n\n const groupsPermissionsList = await this.getGroupsPermissions();\n const acl: AccessControlList = [];\n\n for (let i = 0; i < groupsPermissionsList.length; i++) {\n const groupsPermissions = groupsPermissionsList[i];\n\n const modelsPermissionsList = await this.getModelsPermissions();\n const relatedModelPermissions = modelsPermissionsList.find(\n permissions => permissions._src === groupsPermissions._src\n );\n\n if (!relatedModelPermissions) {\n continue;\n }\n\n if (groupsPermissions.own) {\n if (\"model\" in params) {\n const { model } = params;\n if (!model) {\n continue;\n }\n\n const group = await this.getGroup(model.group);\n if (!group) {\n continue;\n }\n\n const modelGroupCreatedBy = group.createdBy;\n if (!modelGroupCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (modelGroupCreatedBy.id !== identity.id) {\n continue;\n }\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true\n });\n\n continue;\n }\n\n if (groupsPermissions.groups) {\n if (\"model\" in params) {\n const { model } = params;\n if (!model) {\n continue;\n }\n\n if (!Array.isArray(groupsPermissions.groups)) {\n continue;\n }\n\n if (!groupsPermissions.groups.includes(model.group)) {\n continue;\n }\n }\n }\n\n const fullAccess =\n !relatedModelPermissions.rwd &&\n !relatedModelPermissions.own &&\n !relatedModelPermissions.models;\n\n if (fullAccess) {\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: true,\n canAccessOnlyOwned: false\n });\n\n continue;\n }\n\n if (relatedModelPermissions.own) {\n if (\"model\" in params) {\n if (!params.model) {\n continue;\n }\n\n const modelCreatedBy = params.model.createdBy;\n if (!modelCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (modelCreatedBy.id !== identity.id) {\n continue;\n }\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true\n });\n\n continue;\n }\n\n if (relatedModelPermissions.models) {\n const { models } = relatedModelPermissions;\n if (\"model\" in params) {\n if (!params.model) {\n continue;\n }\n\n if (!Array.isArray(models)) {\n continue;\n }\n\n if (!models.includes(params.model.modelId)) {\n continue;\n }\n }\n }\n\n acl.push({\n rwd: relatedModelPermissions.rwd as string,\n canAccessNonOwned: true,\n canAccessOnlyOwned: false\n });\n }\n\n return acl;\n }\n\n private async hasFullAccessToModels(params: GetModelsAccessControlListParams) {\n const { model } = params;\n if (model) {\n if (this.modelAuthorizationDisabled({ model })) {\n return true;\n }\n }\n\n const permissions = await this.getModelsPermissions();\n return permissions.some(p => this.fullAccessPermissions.filter(Boolean).includes(p.name));\n }\n\n /**\n * Entries-related methods below. 👇\n * - canAccessEntry\n * - ensureCanAccessEntry\n * - canAccessNonOwnedEntries\n * - canAccessOnlyOwnedEntries\n * - getEntriesAccessControlList\n * - hasFullAccessToEntries\n */\n\n async canAccessEntry(params: CanAccessEntryParams) {\n const acl = await this.getEntriesAccessControlList(params);\n\n const canRead = acl.find(ace => ace.rwd.includes(\"r\"));\n if (!canRead) {\n return false;\n }\n\n const { rwd } = params;\n if (rwd) {\n const hasRwd = acl.find(ace => ace.rwd.includes(rwd));\n if (!hasRwd) {\n return false;\n }\n }\n\n const { pw } = params;\n if (pw) {\n const hasPw = acl.find(ace => ace.pw?.includes(pw));\n if (!hasPw) {\n return false;\n }\n }\n\n return true;\n }\n\n private async ensureCanAccessEntry(params: CanAccessEntryParams) {\n const canAccess = await this.canAccessEntry(params);\n if (!canAccess) {\n if (params.entry) {\n throw new NotAuthorizedError(\n `Not allowed to access entry \"${params.entry.entryId}\".`\n );\n }\n\n throw new NotAuthorizedError(\n `Not allowed to access \"${params.model.modelId}\" entries.`\n );\n }\n }\n\n private async canAccessNonOwnedEntries(params: GetEntriesAccessControlListParams) {\n const acl = await this.getEntriesAccessControlList(params);\n return acl.some(ace => ace.canAccessNonOwned);\n }\n\n async canAccessOnlyOwnedEntries(params: GetEntriesAccessControlListParams) {\n const canAccessNonOwned = await this.canAccessNonOwnedEntries(params);\n return !canAccessNonOwned;\n }\n\n private async getEntriesAccessControlList(\n params: GetEntriesAccessControlListParams\n ): Promise<EntriesAccessControlList> {\n if (await this.hasFullAccessToEntries(params)) {\n return [{ rwd: \"rwd\", pw: \"pu\", canAccessNonOwned: true, canAccessOnlyOwned: false }];\n }\n\n // We need a map of groups slugs to ids, to perform checks on models\n const { model } = params;\n const groupsPermissionsList = await this.getGroupsPermissions();\n const acl: EntriesAccessControlList = [];\n\n for (let i = 0; i < groupsPermissionsList.length; i++) {\n const groupPermissions = groupsPermissionsList[i];\n\n const modelsPermissionsList = await this.getModelsPermissions();\n const relatedModelsPermissions = modelsPermissionsList.find(\n permissions => permissions._src === groupPermissions._src\n );\n\n if (!relatedModelsPermissions) {\n continue;\n }\n\n const entriesPermissionsList = await this.getEntriesPermissions();\n const relatedEntriesPermissions = entriesPermissionsList.find(\n permissions => permissions._src === groupPermissions._src\n );\n\n if (!relatedEntriesPermissions) {\n continue;\n }\n\n if (groupPermissions.own) {\n const group = await this.getGroup(model.group);\n if (!group) {\n continue;\n }\n\n const groupCreatedBy = group.createdBy;\n if (!groupCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (groupCreatedBy.id !== identity.id) {\n continue;\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true,\n pw: relatedEntriesPermissions.pw\n });\n\n continue;\n }\n\n if (groupPermissions.groups) {\n const { groups } = groupPermissions;\n\n if (!Array.isArray(groups)) {\n continue;\n }\n\n if (!groups.includes(model.group)) {\n continue;\n }\n }\n\n if (relatedModelsPermissions.own) {\n const modelCreatedBy = model.createdBy;\n if (!modelCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (modelCreatedBy.id !== identity.id) {\n continue;\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true,\n pw: relatedEntriesPermissions.pw\n });\n }\n\n if (relatedModelsPermissions.models) {\n if (!Array.isArray(relatedModelsPermissions.models)) {\n continue;\n }\n\n if (!relatedModelsPermissions.models.includes(model.modelId)) {\n continue;\n }\n }\n\n const fullAccess =\n !relatedEntriesPermissions.rwd &&\n !relatedEntriesPermissions.own &&\n !relatedEntriesPermissions.models;\n\n if (fullAccess) {\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true,\n pw: \"pu\"\n });\n\n continue;\n }\n\n if (relatedEntriesPermissions.own) {\n if (\"entry\" in params) {\n const entryCreatedBy = params.entry?.createdBy;\n if (!entryCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (entryCreatedBy.id !== identity.id) {\n continue;\n }\n }\n\n acl.push({\n rwd: relatedEntriesPermissions.rwd,\n canAccessNonOwned: false,\n canAccessOnlyOwned: true,\n pw: relatedEntriesPermissions.pw\n });\n\n continue;\n }\n\n acl.push({\n rwd: relatedEntriesPermissions.rwd,\n canAccessNonOwned: true,\n canAccessOnlyOwned: false,\n pw: relatedEntriesPermissions.pw\n });\n }\n\n return acl;\n }\n\n private async hasFullAccessToEntries(params: GetEntriesAccessControlListParams) {\n if (this.modelAuthorizationDisabled(params)) {\n return true;\n }\n\n const permissions = await this.getEntriesPermissions();\n return permissions.some(p => this.fullAccessPermissions.filter(Boolean).includes(p.name));\n }\n\n private modelAuthorizationDisabled(params: IModelAuthorizationDisabledParams) {\n if (\"authorization\" in params.model) {\n const { authorization } = params.model;\n if (typeof authorization === \"boolean\") {\n return authorization === false;\n }\n\n return authorization?.permissions === false;\n }\n\n return false;\n }\n\n private async listAllGroups(): Promise<CmsGroup[]> {\n if (this.allGroups === null) {\n this.allGroups = this.listAllGroupsCallback();\n }\n\n return this.allGroups;\n }\n\n private async getGroup(slug: string): Promise<CmsGroup | undefined> {\n const groups = await this.listAllGroups();\n return groups.find(group => group.slug === slug);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,7 @@ import { referenceFieldsMapping } from "../referenceFieldsMapping.js";
6
6
  import { createIdentifier, mdbid } from "@webiny/utils";
7
7
  import { STATUS_DRAFT, STATUS_PUBLISHED, STATUS_UNPUBLISHED } from "./statuses.js";
8
8
  import { getIdentity } from "../../../utils/identity.js";
9
+ import { NotAuthorizedError } from "../../../utils/errors.js";
9
10
  import { getSystem } from "./system.js";
10
11
  /**
11
12
  * Used for some fields to convert their values.
@@ -138,16 +139,21 @@ export const createEntryData = async ({
138
139
  const status = rawInput.status || STATUS_DRAFT;
139
140
  if (status !== STATUS_DRAFT) {
140
141
  if (status === STATUS_PUBLISHED) {
141
- await accessControl.ensureCanAccessEntry({
142
+ const canPublish = await accessControl.canAccessEntry({
142
143
  model,
143
144
  pw: "p"
144
145
  });
146
+ if (!canPublish) {
147
+ throw new NotAuthorizedError(`Not allowed to access "${model.modelId}" entries.`);
148
+ }
145
149
  } else if (status === STATUS_UNPUBLISHED) {
146
- // If setting the status other than draft, we have to check if the user has permissions to publish.
147
- await accessControl.ensureCanAccessEntry({
150
+ const canUnpublish = await accessControl.canAccessEntry({
148
151
  model,
149
152
  pw: "u"
150
153
  });
154
+ if (!canUnpublish) {
155
+ throw new NotAuthorizedError(`Not allowed to access "${model.modelId}" entries.`);
156
+ }
151
157
  }
152
158
  }
153
159
  const locked = status !== STATUS_DRAFT;
@@ -226,18 +232,23 @@ export const createEntryData = async ({
226
232
  };
227
233
  if (status !== STATUS_DRAFT) {
228
234
  if (status === STATUS_PUBLISHED) {
229
- await accessControl.ensureCanAccessEntry({
235
+ const canPublish = await accessControl.canAccessEntry({
230
236
  model,
231
237
  entry,
232
238
  pw: "p"
233
239
  });
240
+ if (!canPublish) {
241
+ throw new NotAuthorizedError(`Not allowed to access entry "${entry.entryId}".`);
242
+ }
234
243
  } else if (status === STATUS_UNPUBLISHED) {
235
- // If setting the status other than draft, we have to check if the user has permissions to publish.
236
- await accessControl.ensureCanAccessEntry({
244
+ const canUnpublish = await accessControl.canAccessEntry({
237
245
  model,
238
246
  entry,
239
247
  pw: "u"
240
248
  });
249
+ if (!canUnpublish) {
250
+ throw new NotAuthorizedError(`Not allowed to access entry "${entry.entryId}".`);
251
+ }
241
252
  }
242
253
  }
243
254
  return {
@@ -1 +1 @@
1
- {"version":3,"names":["getDate","ROOT_FOLDER","WebinyError","validateModelEntryDataOrThrow","referenceFieldsMapping","createIdentifier","mdbid","STATUS_DRAFT","STATUS_PUBLISHED","STATUS_UNPUBLISHED","getIdentity","getSystem","convertDefaultValue","field","value","type","Boolean","Number","getDefaultValue","settings","list","defaultValue","undefined","predefinedValues","enabled","Array","isArray","values","selectedValue","find","selected","filter","map","createEntryId","input","entryId","id","match","version","cleanInputValues","model","fields","reduce","acc","fieldId","key","createEntryData","rawInput","options","context","getSecurityIdentity","getTenant","accessControl","initialValues","skipValidators","validateEntries","currentIdentity","currentDateTime","Date","status","ensureCanAccessEntry","pw","locked","revisionLevelPublishingMetaFields","revisionFirstPublishedOn","revisionLastPublishedOn","revisionFirstPublishedBy","revisionLastPublishedBy","entryLevelPublishingMetaFields","firstPublishedOn","lastPublishedOn","firstPublishedBy","lastPublishedBy","entry","tenant","modelId","createdOn","modifiedOn","savedOn","deletedOn","restoredOn","createdBy","modifiedBy","savedBy","deletedBy","restoredBy","revisionCreatedOn","revisionModifiedOn","revisionSavedOn","revisionDeletedOn","revisionRestoredOn","revisionCreatedBy","revisionModifiedBy","revisionSavedBy","revisionDeletedBy","revisionRestoredBy","location","folderId","wbyAco_location","system","live","structuredClone"],"sources":["createEntryData.ts"],"sourcesContent":["import type {\n CmsContext,\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CmsModelField,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\nimport WebinyError from \"@webiny/error\";\nimport { validateModelEntryDataOrThrow } from \"~/crud/contentEntry/entryDataValidation.js\";\nimport { referenceFieldsMapping } from \"~/crud/contentEntry/referenceFieldsMapping.js\";\nimport { createIdentifier, mdbid } from \"@webiny/utils\";\nimport { STATUS_DRAFT, STATUS_PUBLISHED, STATUS_UNPUBLISHED } from \"./statuses.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport type { AccessControl } from \"~/crud/AccessControl/AccessControl.js\";\nimport { getSystem } from \"./system.js\";\nimport type { SecurityIdentity } from \"@webiny/api-core/types/security.js\";\nimport type { Tenant } from \"@webiny/api-core/types/tenancy.js\";\n\ntype DefaultValue = boolean | number | string | null;\n\n/**\n * Used for some fields to convert their values.\n */\nconst convertDefaultValue = (field: CmsModelField, value: DefaultValue): DefaultValue => {\n switch (field.type) {\n case \"boolean\":\n return Boolean(value);\n case \"number\":\n return Number(value);\n default:\n return value;\n }\n};\n\nconst getDefaultValue = (field: CmsModelField): (DefaultValue | DefaultValue[]) | undefined => {\n const { settings, list } = field;\n if (settings && settings.defaultValue !== undefined) {\n return convertDefaultValue(field, settings.defaultValue);\n }\n const { predefinedValues } = field;\n if (\n !predefinedValues ||\n !predefinedValues.enabled ||\n Array.isArray(predefinedValues.values) === false\n ) {\n return undefined;\n }\n if (!list) {\n const selectedValue = predefinedValues.values.find(value => {\n return !!value.selected;\n });\n if (selectedValue) {\n return convertDefaultValue(field, selectedValue.value);\n }\n return undefined;\n }\n return predefinedValues.values\n .filter(({ selected }) => !!selected)\n .map(({ value }) => {\n return convertDefaultValue(field, value);\n });\n};\n\nconst createEntryId = (input: CreateCmsEntryInput) => {\n let entryId = mdbid();\n if (input.id) {\n if (input.id.match(/^([a-zA-Z0-9])([a-zA-Z0-9\\-]+)([a-zA-Z0-9])$/) === null) {\n throw new WebinyError(\n \"The provided ID is not valid. It must be a string which can be A-Z, a-z, 0-9, - and it cannot start or end with a -.\",\n \"INVALID_ID\",\n {\n id: input.id\n }\n );\n }\n entryId = input.id;\n }\n const version = 1;\n return {\n entryId,\n version,\n id: createIdentifier({\n id: entryId,\n version\n })\n };\n};\n\n/**\n * Cleans and adds default values to create input data.\n */\nconst cleanInputValues = <TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n input: TValues\n) => {\n return model.fields.reduce<TValues>((acc, field) => {\n /**\n * This should never happen, but let's make it sure.\n * The fix would be for the user to add the fieldId on the field definition.\n */\n if (!field.fieldId) {\n throw new WebinyError(\"Field does not have an fieldId.\", \"MISSING_FIELD_ID\", {\n field\n });\n }\n const key = field.fieldId as keyof TValues;\n const value = input[key] as TValues[keyof TValues];\n /**\n * We set the default value on create input if value is not defined.\n */\n acc[key] = value === undefined ? (getDefaultValue(field) as TValues[keyof TValues]) : value;\n return acc;\n }, {} as TValues);\n};\n\ninterface CreateEntryDataParams<TValues extends CmsEntryValues = CmsEntryValues> {\n model: CmsModel;\n rawInput: CreateCmsEntryInput<TValues>;\n options?: CreateCmsEntryOptionsInput;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n getTenant: () => Tenant;\n accessControl: AccessControl;\n}\n\ninterface ICreateEntryDataResponse<TValues extends CmsEntryValues = CmsEntryValues> {\n entry: CmsEntry<TValues>;\n input: CreateCmsEntryInput<TValues>;\n}\n\nexport const createEntryData = async <TValues extends CmsEntryValues = CmsEntryValues>({\n model,\n rawInput,\n options,\n context,\n getIdentity: getSecurityIdentity,\n getTenant,\n accessControl\n}: CreateEntryDataParams<TValues>): Promise<ICreateEntryDataResponse<TValues>> => {\n const initialValues = cleanInputValues<TValues>(model, rawInput.values || ({} as TValues));\n\n await validateModelEntryDataOrThrow({\n context,\n model,\n values: initialValues,\n skipValidators: options?.skipValidators\n });\n\n const values = await referenceFieldsMapping<TValues>({\n context,\n model,\n values: initialValues,\n validateEntries: true\n });\n\n const { id, entryId, version } = createEntryId(rawInput);\n\n /**\n * There is a possibility that user sends an ID in the input, so we will use that one.\n * There is no check if the ID is unique or not, that is up to the user.\n */\n const currentIdentity = getSecurityIdentity();\n const currentDateTime = new Date();\n\n /**\n * Users can set the initial status of the entry. If so, we need to make\n * sure they have the required permissions and also that all the fields\n * are filled in correctly.\n */\n const status = rawInput.status || STATUS_DRAFT;\n if (status !== STATUS_DRAFT) {\n if (status === STATUS_PUBLISHED) {\n await accessControl.ensureCanAccessEntry({ model, pw: \"p\" });\n } else if (status === STATUS_UNPUBLISHED) {\n // If setting the status other than draft, we have to check if the user has permissions to publish.\n await accessControl.ensureCanAccessEntry({ model, pw: \"u\" });\n }\n }\n\n const locked = status !== STATUS_DRAFT;\n\n let revisionLevelPublishingMetaFields: Pick<\n CmsEntry,\n | \"revisionFirstPublishedOn\"\n | \"revisionLastPublishedOn\"\n | \"revisionFirstPublishedBy\"\n | \"revisionLastPublishedBy\"\n > = {\n revisionFirstPublishedOn: null,\n revisionLastPublishedOn: null,\n revisionFirstPublishedBy: null,\n revisionLastPublishedBy: null\n };\n\n let entryLevelPublishingMetaFields: Pick<\n CmsEntry,\n \"firstPublishedOn\" | \"lastPublishedOn\" | \"firstPublishedBy\" | \"lastPublishedBy\"\n > = {\n firstPublishedOn: null,\n lastPublishedOn: null,\n firstPublishedBy: null,\n lastPublishedBy: null\n };\n\n if (status === STATUS_PUBLISHED) {\n revisionLevelPublishingMetaFields = {\n revisionFirstPublishedOn: getDate(rawInput.revisionFirstPublishedOn, currentDateTime),\n revisionLastPublishedOn: getDate(rawInput.revisionLastPublishedOn, currentDateTime),\n revisionFirstPublishedBy: getIdentity(\n rawInput.revisionFirstPublishedBy,\n currentIdentity\n ),\n revisionLastPublishedBy: getIdentity(rawInput.revisionLastPublishedBy, currentIdentity)\n };\n\n entryLevelPublishingMetaFields = {\n firstPublishedOn: getDate(rawInput.firstPublishedOn, currentDateTime),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, currentDateTime),\n firstPublishedBy: getIdentity(rawInput.firstPublishedBy, currentIdentity),\n lastPublishedBy: getIdentity(rawInput.lastPublishedBy, currentIdentity)\n };\n }\n\n const entry: CmsEntry<TValues> = {\n tenant: getTenant().id,\n entryId,\n id,\n modelId: model.modelId,\n\n /**\n * Entry-level meta fields. 👇\n */\n createdOn: getDate(rawInput.createdOn, currentDateTime),\n modifiedOn: getDate(rawInput.modifiedOn, null),\n savedOn: getDate(rawInput.savedOn, currentDateTime),\n deletedOn: getDate(rawInput.deletedOn, null),\n restoredOn: getDate(rawInput.restoredOn, null),\n createdBy: getIdentity(rawInput.createdBy, currentIdentity)!,\n modifiedBy: getIdentity(rawInput.modifiedBy, null),\n savedBy: getIdentity(rawInput.savedBy, currentIdentity)!,\n deletedBy: getIdentity(rawInput.deletedBy, null),\n restoredBy: getIdentity(rawInput.restoredBy, null),\n ...entryLevelPublishingMetaFields,\n\n /**\n * Revision-level meta fields. 👇\n */\n revisionCreatedOn: getDate(rawInput.revisionCreatedOn, currentDateTime),\n revisionModifiedOn: getDate(rawInput.revisionModifiedOn, null),\n revisionSavedOn: getDate(rawInput.revisionSavedOn, currentDateTime),\n revisionDeletedOn: getDate(rawInput.revisionDeletedOn, null),\n revisionRestoredOn: getDate(rawInput.revisionRestoredOn, null),\n revisionCreatedBy: getIdentity(rawInput.revisionCreatedBy, currentIdentity)!,\n revisionModifiedBy: getIdentity(rawInput.revisionModifiedBy, null),\n revisionSavedBy: getIdentity(rawInput.revisionSavedBy, currentIdentity)!,\n revisionDeletedBy: getIdentity(rawInput.revisionDeletedBy, null),\n revisionRestoredBy: getIdentity(rawInput.revisionRestoredBy, null),\n ...revisionLevelPublishingMetaFields,\n\n version,\n status,\n locked,\n values,\n location: {\n folderId:\n rawInput.location?.folderId || rawInput.wbyAco_location?.folderId || ROOT_FOLDER\n },\n system: getSystem({\n input: rawInput\n }),\n live:\n status === STATUS_PUBLISHED\n ? {\n version\n }\n : null\n };\n\n if (status !== STATUS_DRAFT) {\n if (status === STATUS_PUBLISHED) {\n await accessControl.ensureCanAccessEntry({ model, entry, pw: \"p\" });\n } else if (status === STATUS_UNPUBLISHED) {\n // If setting the status other than draft, we have to check if the user has permissions to publish.\n await accessControl.ensureCanAccessEntry({ model, entry, pw: \"u\" });\n }\n }\n\n return {\n entry,\n input: {\n ...rawInput,\n values: structuredClone(values)\n }\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["getDate","ROOT_FOLDER","WebinyError","validateModelEntryDataOrThrow","referenceFieldsMapping","createIdentifier","mdbid","STATUS_DRAFT","STATUS_PUBLISHED","STATUS_UNPUBLISHED","getIdentity","NotAuthorizedError","getSystem","convertDefaultValue","field","value","type","Boolean","Number","getDefaultValue","settings","list","defaultValue","undefined","predefinedValues","enabled","Array","isArray","values","selectedValue","find","selected","filter","map","createEntryId","input","entryId","id","match","version","cleanInputValues","model","fields","reduce","acc","fieldId","key","createEntryData","rawInput","options","context","getSecurityIdentity","getTenant","accessControl","initialValues","skipValidators","validateEntries","currentIdentity","currentDateTime","Date","status","canPublish","canAccessEntry","pw","modelId","canUnpublish","locked","revisionLevelPublishingMetaFields","revisionFirstPublishedOn","revisionLastPublishedOn","revisionFirstPublishedBy","revisionLastPublishedBy","entryLevelPublishingMetaFields","firstPublishedOn","lastPublishedOn","firstPublishedBy","lastPublishedBy","entry","tenant","createdOn","modifiedOn","savedOn","deletedOn","restoredOn","createdBy","modifiedBy","savedBy","deletedBy","restoredBy","revisionCreatedOn","revisionModifiedOn","revisionSavedOn","revisionDeletedOn","revisionRestoredOn","revisionCreatedBy","revisionModifiedBy","revisionSavedBy","revisionDeletedBy","revisionRestoredBy","location","folderId","wbyAco_location","system","live","structuredClone"],"sources":["createEntryData.ts"],"sourcesContent":["import type {\n CmsContext,\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CmsModelField,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\nimport WebinyError from \"@webiny/error\";\nimport { validateModelEntryDataOrThrow } from \"~/crud/contentEntry/entryDataValidation.js\";\nimport { referenceFieldsMapping } from \"~/crud/contentEntry/referenceFieldsMapping.js\";\nimport { createIdentifier, mdbid } from \"@webiny/utils\";\nimport { STATUS_DRAFT, STATUS_PUBLISHED, STATUS_UNPUBLISHED } from \"./statuses.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport type { AccessControl } from \"~/crud/AccessControl/AccessControl.js\";\nimport { NotAuthorizedError } from \"~/utils/errors.js\";\nimport { getSystem } from \"./system.js\";\nimport type { SecurityIdentity } from \"@webiny/api-core/types/security.js\";\nimport type { Tenant } from \"@webiny/api-core/types/tenancy.js\";\n\ntype DefaultValue = boolean | number | string | null;\n\n/**\n * Used for some fields to convert their values.\n */\nconst convertDefaultValue = (field: CmsModelField, value: DefaultValue): DefaultValue => {\n switch (field.type) {\n case \"boolean\":\n return Boolean(value);\n case \"number\":\n return Number(value);\n default:\n return value;\n }\n};\n\nconst getDefaultValue = (field: CmsModelField): (DefaultValue | DefaultValue[]) | undefined => {\n const { settings, list } = field;\n if (settings && settings.defaultValue !== undefined) {\n return convertDefaultValue(field, settings.defaultValue);\n }\n const { predefinedValues } = field;\n if (\n !predefinedValues ||\n !predefinedValues.enabled ||\n Array.isArray(predefinedValues.values) === false\n ) {\n return undefined;\n }\n if (!list) {\n const selectedValue = predefinedValues.values.find(value => {\n return !!value.selected;\n });\n if (selectedValue) {\n return convertDefaultValue(field, selectedValue.value);\n }\n return undefined;\n }\n return predefinedValues.values\n .filter(({ selected }) => !!selected)\n .map(({ value }) => {\n return convertDefaultValue(field, value);\n });\n};\n\nconst createEntryId = (input: CreateCmsEntryInput) => {\n let entryId = mdbid();\n if (input.id) {\n if (input.id.match(/^([a-zA-Z0-9])([a-zA-Z0-9\\-]+)([a-zA-Z0-9])$/) === null) {\n throw new WebinyError(\n \"The provided ID is not valid. It must be a string which can be A-Z, a-z, 0-9, - and it cannot start or end with a -.\",\n \"INVALID_ID\",\n {\n id: input.id\n }\n );\n }\n entryId = input.id;\n }\n const version = 1;\n return {\n entryId,\n version,\n id: createIdentifier({\n id: entryId,\n version\n })\n };\n};\n\n/**\n * Cleans and adds default values to create input data.\n */\nconst cleanInputValues = <TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n input: TValues\n) => {\n return model.fields.reduce<TValues>((acc, field) => {\n /**\n * This should never happen, but let's make it sure.\n * The fix would be for the user to add the fieldId on the field definition.\n */\n if (!field.fieldId) {\n throw new WebinyError(\"Field does not have an fieldId.\", \"MISSING_FIELD_ID\", {\n field\n });\n }\n const key = field.fieldId as keyof TValues;\n const value = input[key] as TValues[keyof TValues];\n /**\n * We set the default value on create input if value is not defined.\n */\n acc[key] = value === undefined ? (getDefaultValue(field) as TValues[keyof TValues]) : value;\n return acc;\n }, {} as TValues);\n};\n\ninterface CreateEntryDataParams<TValues extends CmsEntryValues = CmsEntryValues> {\n model: CmsModel;\n rawInput: CreateCmsEntryInput<TValues>;\n options?: CreateCmsEntryOptionsInput;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n getTenant: () => Tenant;\n accessControl: AccessControl;\n}\n\ninterface ICreateEntryDataResponse<TValues extends CmsEntryValues = CmsEntryValues> {\n entry: CmsEntry<TValues>;\n input: CreateCmsEntryInput<TValues>;\n}\n\nexport const createEntryData = async <TValues extends CmsEntryValues = CmsEntryValues>({\n model,\n rawInput,\n options,\n context,\n getIdentity: getSecurityIdentity,\n getTenant,\n accessControl\n}: CreateEntryDataParams<TValues>): Promise<ICreateEntryDataResponse<TValues>> => {\n const initialValues = cleanInputValues<TValues>(model, rawInput.values || ({} as TValues));\n\n await validateModelEntryDataOrThrow({\n context,\n model,\n values: initialValues,\n skipValidators: options?.skipValidators\n });\n\n const values = await referenceFieldsMapping<TValues>({\n context,\n model,\n values: initialValues,\n validateEntries: true\n });\n\n const { id, entryId, version } = createEntryId(rawInput);\n\n /**\n * There is a possibility that user sends an ID in the input, so we will use that one.\n * There is no check if the ID is unique or not, that is up to the user.\n */\n const currentIdentity = getSecurityIdentity();\n const currentDateTime = new Date();\n\n /**\n * Users can set the initial status of the entry. If so, we need to make\n * sure they have the required permissions and also that all the fields\n * are filled in correctly.\n */\n const status = rawInput.status || STATUS_DRAFT;\n if (status !== STATUS_DRAFT) {\n if (status === STATUS_PUBLISHED) {\n const canPublish = await accessControl.canAccessEntry({ model, pw: \"p\" });\n if (!canPublish) {\n throw new NotAuthorizedError(`Not allowed to access \"${model.modelId}\" entries.`);\n }\n } else if (status === STATUS_UNPUBLISHED) {\n const canUnpublish = await accessControl.canAccessEntry({ model, pw: \"u\" });\n if (!canUnpublish) {\n throw new NotAuthorizedError(`Not allowed to access \"${model.modelId}\" entries.`);\n }\n }\n }\n\n const locked = status !== STATUS_DRAFT;\n\n let revisionLevelPublishingMetaFields: Pick<\n CmsEntry,\n | \"revisionFirstPublishedOn\"\n | \"revisionLastPublishedOn\"\n | \"revisionFirstPublishedBy\"\n | \"revisionLastPublishedBy\"\n > = {\n revisionFirstPublishedOn: null,\n revisionLastPublishedOn: null,\n revisionFirstPublishedBy: null,\n revisionLastPublishedBy: null\n };\n\n let entryLevelPublishingMetaFields: Pick<\n CmsEntry,\n \"firstPublishedOn\" | \"lastPublishedOn\" | \"firstPublishedBy\" | \"lastPublishedBy\"\n > = {\n firstPublishedOn: null,\n lastPublishedOn: null,\n firstPublishedBy: null,\n lastPublishedBy: null\n };\n\n if (status === STATUS_PUBLISHED) {\n revisionLevelPublishingMetaFields = {\n revisionFirstPublishedOn: getDate(rawInput.revisionFirstPublishedOn, currentDateTime),\n revisionLastPublishedOn: getDate(rawInput.revisionLastPublishedOn, currentDateTime),\n revisionFirstPublishedBy: getIdentity(\n rawInput.revisionFirstPublishedBy,\n currentIdentity\n ),\n revisionLastPublishedBy: getIdentity(rawInput.revisionLastPublishedBy, currentIdentity)\n };\n\n entryLevelPublishingMetaFields = {\n firstPublishedOn: getDate(rawInput.firstPublishedOn, currentDateTime),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, currentDateTime),\n firstPublishedBy: getIdentity(rawInput.firstPublishedBy, currentIdentity),\n lastPublishedBy: getIdentity(rawInput.lastPublishedBy, currentIdentity)\n };\n }\n\n const entry: CmsEntry<TValues> = {\n tenant: getTenant().id,\n entryId,\n id,\n modelId: model.modelId,\n\n /**\n * Entry-level meta fields. 👇\n */\n createdOn: getDate(rawInput.createdOn, currentDateTime),\n modifiedOn: getDate(rawInput.modifiedOn, null),\n savedOn: getDate(rawInput.savedOn, currentDateTime),\n deletedOn: getDate(rawInput.deletedOn, null),\n restoredOn: getDate(rawInput.restoredOn, null),\n createdBy: getIdentity(rawInput.createdBy, currentIdentity)!,\n modifiedBy: getIdentity(rawInput.modifiedBy, null),\n savedBy: getIdentity(rawInput.savedBy, currentIdentity)!,\n deletedBy: getIdentity(rawInput.deletedBy, null),\n restoredBy: getIdentity(rawInput.restoredBy, null),\n ...entryLevelPublishingMetaFields,\n\n /**\n * Revision-level meta fields. 👇\n */\n revisionCreatedOn: getDate(rawInput.revisionCreatedOn, currentDateTime),\n revisionModifiedOn: getDate(rawInput.revisionModifiedOn, null),\n revisionSavedOn: getDate(rawInput.revisionSavedOn, currentDateTime),\n revisionDeletedOn: getDate(rawInput.revisionDeletedOn, null),\n revisionRestoredOn: getDate(rawInput.revisionRestoredOn, null),\n revisionCreatedBy: getIdentity(rawInput.revisionCreatedBy, currentIdentity)!,\n revisionModifiedBy: getIdentity(rawInput.revisionModifiedBy, null),\n revisionSavedBy: getIdentity(rawInput.revisionSavedBy, currentIdentity)!,\n revisionDeletedBy: getIdentity(rawInput.revisionDeletedBy, null),\n revisionRestoredBy: getIdentity(rawInput.revisionRestoredBy, null),\n ...revisionLevelPublishingMetaFields,\n\n version,\n status,\n locked,\n values,\n location: {\n folderId:\n rawInput.location?.folderId || rawInput.wbyAco_location?.folderId || ROOT_FOLDER\n },\n system: getSystem({\n input: rawInput\n }),\n live:\n status === STATUS_PUBLISHED\n ? {\n version\n }\n : null\n };\n\n if (status !== STATUS_DRAFT) {\n if (status === STATUS_PUBLISHED) {\n const canPublish = await accessControl.canAccessEntry({ model, entry, pw: \"p\" });\n if (!canPublish) {\n throw new NotAuthorizedError(`Not allowed to access entry \"${entry.entryId}\".`);\n }\n } else if (status === STATUS_UNPUBLISHED) {\n const canUnpublish = await accessControl.canAccessEntry({ model, entry, pw: \"u\" });\n if (!canUnpublish) {\n throw new NotAuthorizedError(`Not allowed to access entry \"${entry.entryId}\".`);\n }\n }\n }\n\n return {\n entry,\n input: {\n ...rawInput,\n values: structuredClone(values)\n }\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,7 @@ import { referenceFieldsMapping } from "../referenceFieldsMapping.js";
6
6
  import { createIdentifier, parseIdentifier } from "@webiny/utils";
7
7
  import WebinyError from "@webiny/error";
8
8
  import { STATUS_DRAFT, STATUS_PUBLISHED, STATUS_UNPUBLISHED } from "./statuses.js";
9
+ import { NotAuthorizedError } from "../../../utils/errors.js";
9
10
  import { getSystem } from "./system.js";
10
11
  export const createEntryRevisionFromData = async ({
11
12
  sourceId,
@@ -56,16 +57,21 @@ export const createEntryRevisionFromData = async ({
56
57
  const status = rawInput.status || STATUS_DRAFT;
57
58
  if (status !== STATUS_DRAFT) {
58
59
  if (status === STATUS_PUBLISHED) {
59
- await accessControl.ensureCanAccessEntry({
60
+ const canPublish = await accessControl.canAccessEntry({
60
61
  model,
61
62
  pw: "p"
62
63
  });
64
+ if (!canPublish) {
65
+ throw new NotAuthorizedError(`Not allowed to access "${model.modelId}" entries.`);
66
+ }
63
67
  } else if (status === STATUS_UNPUBLISHED) {
64
- // If setting the status other than draft, we have to check if the user has permissions to publish.
65
- await accessControl.ensureCanAccessEntry({
68
+ const canUnpublish = await accessControl.canAccessEntry({
66
69
  model,
67
70
  pw: "u"
68
71
  });
72
+ if (!canUnpublish) {
73
+ throw new NotAuthorizedError(`Not allowed to access "${model.modelId}" entries.`);
74
+ }
69
75
  }
70
76
  }
71
77
  const locked = status !== STATUS_DRAFT;