@webiny/api-record-locking 0.0.0-unstable.e53eceafb5 → 0.0.0-unstable.e6f0dc8ca7

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 (295) hide show
  1. package/README.md +10 -9
  2. package/domain/LockRecord.d.ts +45 -0
  3. package/{utils/convertEntryToLockRecord.js → domain/LockRecord.js} +10 -21
  4. package/domain/LockRecord.js.map +1 -0
  5. package/domain/RecordLockingModel.d.ts +9 -0
  6. package/domain/RecordLockingModel.js +29 -0
  7. package/domain/RecordLockingModel.js.map +1 -0
  8. package/domain/abstractions.d.ts +18 -0
  9. package/domain/abstractions.js +10 -0
  10. package/domain/abstractions.js.map +1 -0
  11. package/domain/calculateExpiresOn.d.ts +1 -0
  12. package/domain/calculateExpiresOn.js +9 -0
  13. package/domain/calculateExpiresOn.js.map +1 -0
  14. package/domain/errors.d.ts +71 -0
  15. package/domain/errors.js +95 -0
  16. package/domain/errors.js.map +1 -0
  17. package/domain/index.d.ts +4 -0
  18. package/domain/index.js +6 -0
  19. package/domain/index.js.map +1 -0
  20. package/domain/types.d.ts +44 -0
  21. package/domain/types.js +12 -0
  22. package/domain/types.js.map +1 -0
  23. package/features/GetLockRecord/GetLockRecordRepository.d.ts +16 -0
  24. package/features/GetLockRecord/GetLockRecordRepository.js +37 -0
  25. package/features/GetLockRecord/GetLockRecordRepository.js.map +1 -0
  26. package/features/GetLockRecord/GetLockRecordUseCase.d.ts +12 -0
  27. package/features/GetLockRecord/GetLockRecordUseCase.js +15 -0
  28. package/features/GetLockRecord/GetLockRecordUseCase.js.map +1 -0
  29. package/features/GetLockRecord/abstractions.d.ts +41 -0
  30. package/features/GetLockRecord/abstractions.js +17 -0
  31. package/features/GetLockRecord/abstractions.js.map +1 -0
  32. package/features/GetLockRecord/feature.d.ts +4 -0
  33. package/features/GetLockRecord/feature.js +12 -0
  34. package/features/GetLockRecord/feature.js.map +1 -0
  35. package/features/GetLockRecord/index.d.ts +2 -0
  36. package/features/GetLockRecord/index.js +4 -0
  37. package/features/GetLockRecord/index.js.map +1 -0
  38. package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.d.ts +15 -0
  39. package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js +39 -0
  40. package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js.map +1 -0
  41. package/features/GetLockedEntryLockRecord/abstractions.d.ts +26 -0
  42. package/features/GetLockedEntryLockRecord/abstractions.js +13 -0
  43. package/features/GetLockedEntryLockRecord/abstractions.js.map +1 -0
  44. package/features/GetLockedEntryLockRecord/feature.d.ts +4 -0
  45. package/features/GetLockedEntryLockRecord/feature.js +10 -0
  46. package/features/GetLockedEntryLockRecord/feature.js.map +1 -0
  47. package/features/GetLockedEntryLockRecord/index.d.ts +2 -0
  48. package/features/GetLockedEntryLockRecord/index.js +4 -0
  49. package/features/GetLockedEntryLockRecord/index.js.map +1 -0
  50. package/features/IsEntryLocked/IsEntryLockedUseCase.d.ts +14 -0
  51. package/features/IsEntryLocked/IsEntryLockedUseCase.js +39 -0
  52. package/features/IsEntryLocked/IsEntryLockedUseCase.js.map +1 -0
  53. package/features/IsEntryLocked/abstractions.d.ts +24 -0
  54. package/features/IsEntryLocked/abstractions.js +12 -0
  55. package/features/IsEntryLocked/abstractions.js.map +1 -0
  56. package/features/IsEntryLocked/feature.d.ts +4 -0
  57. package/features/IsEntryLocked/feature.js +10 -0
  58. package/features/IsEntryLocked/feature.js.map +1 -0
  59. package/features/IsEntryLocked/index.d.ts +1 -0
  60. package/features/IsEntryLocked/index.js +3 -0
  61. package/features/IsEntryLocked/index.js.map +1 -0
  62. package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.d.ts +15 -0
  63. package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.js +42 -0
  64. package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.js.map +1 -0
  65. package/features/KickOutCurrentUser/abstractions.d.ts +17 -0
  66. package/features/KickOutCurrentUser/abstractions.js +9 -0
  67. package/features/KickOutCurrentUser/abstractions.js.map +1 -0
  68. package/features/KickOutCurrentUser/feature.d.ts +4 -0
  69. package/features/KickOutCurrentUser/feature.js +10 -0
  70. package/features/KickOutCurrentUser/feature.js.map +1 -0
  71. package/features/KickOutCurrentUser/index.d.ts +1 -0
  72. package/features/KickOutCurrentUser/index.js +3 -0
  73. package/features/KickOutCurrentUser/index.js.map +1 -0
  74. package/features/ListAllLockRecords/ListAllLockRecordsRepository.d.ts +16 -0
  75. package/features/ListAllLockRecords/ListAllLockRecordsRepository.js +43 -0
  76. package/features/ListAllLockRecords/ListAllLockRecordsRepository.js.map +1 -0
  77. package/features/ListAllLockRecords/ListAllLockRecordsUseCase.d.ts +11 -0
  78. package/features/ListAllLockRecords/ListAllLockRecordsUseCase.js +15 -0
  79. package/features/ListAllLockRecords/ListAllLockRecordsUseCase.js.map +1 -0
  80. package/features/ListAllLockRecords/abstractions.d.ts +40 -0
  81. package/features/ListAllLockRecords/abstractions.js +17 -0
  82. package/features/ListAllLockRecords/abstractions.js.map +1 -0
  83. package/features/ListAllLockRecords/feature.d.ts +4 -0
  84. package/features/ListAllLockRecords/feature.js +12 -0
  85. package/features/ListAllLockRecords/feature.js.map +1 -0
  86. package/features/ListAllLockRecords/index.d.ts +2 -0
  87. package/features/ListAllLockRecords/index.js +4 -0
  88. package/features/ListAllLockRecords/index.js.map +1 -0
  89. package/features/ListLockRecords/ListLockRecordsRepository.d.ts +15 -0
  90. package/features/ListLockRecords/ListLockRecordsRepository.js +43 -0
  91. package/features/ListLockRecords/ListLockRecordsRepository.js.map +1 -0
  92. package/features/ListLockRecords/ListLockRecordsUseCase.d.ts +15 -0
  93. package/features/ListLockRecords/ListLockRecordsUseCase.js +30 -0
  94. package/features/ListLockRecords/ListLockRecordsUseCase.js.map +1 -0
  95. package/features/ListLockRecords/abstractions.d.ts +45 -0
  96. package/features/ListLockRecords/abstractions.js +17 -0
  97. package/features/ListLockRecords/abstractions.js.map +1 -0
  98. package/features/ListLockRecords/feature.d.ts +4 -0
  99. package/features/ListLockRecords/feature.js +12 -0
  100. package/features/ListLockRecords/feature.js.map +1 -0
  101. package/features/ListLockRecords/index.d.ts +1 -0
  102. package/features/ListLockRecords/index.js +3 -0
  103. package/features/ListLockRecords/index.js.map +1 -0
  104. package/features/LockEntry/LockEntryEventsDecorator.d.ts +14 -0
  105. package/features/LockEntry/LockEntryEventsDecorator.js +40 -0
  106. package/features/LockEntry/LockEntryEventsDecorator.js.map +1 -0
  107. package/features/LockEntry/LockEntryRepository.d.ts +16 -0
  108. package/features/LockEntry/LockEntryRepository.js +42 -0
  109. package/features/LockEntry/LockEntryRepository.js.map +1 -0
  110. package/features/LockEntry/LockEntryUseCase.d.ts +14 -0
  111. package/features/LockEntry/LockEntryUseCase.js +36 -0
  112. package/features/LockEntry/LockEntryUseCase.js.map +1 -0
  113. package/features/LockEntry/abstractions.d.ts +41 -0
  114. package/features/LockEntry/abstractions.js +17 -0
  115. package/features/LockEntry/abstractions.js.map +1 -0
  116. package/features/LockEntry/events.d.ts +45 -0
  117. package/features/LockEntry/events.js +40 -0
  118. package/features/LockEntry/events.js.map +1 -0
  119. package/features/LockEntry/feature.d.ts +4 -0
  120. package/features/LockEntry/feature.js +14 -0
  121. package/features/LockEntry/feature.js.map +1 -0
  122. package/features/LockEntry/index.d.ts +1 -0
  123. package/features/LockEntry/index.js +3 -0
  124. package/features/LockEntry/index.js.map +1 -0
  125. package/features/RecordLockingFeature.d.ts +15 -0
  126. package/features/RecordLockingFeature.js +36 -0
  127. package/features/RecordLockingFeature.js.map +1 -0
  128. package/features/UnlockEntry/UnlockEntryEventsDecorator.d.ts +14 -0
  129. package/features/UnlockEntry/UnlockEntryEventsDecorator.js +41 -0
  130. package/features/UnlockEntry/UnlockEntryEventsDecorator.js.map +1 -0
  131. package/features/UnlockEntry/UnlockEntryRepository.d.ts +14 -0
  132. package/features/UnlockEntry/UnlockEntryRepository.js +40 -0
  133. package/features/UnlockEntry/UnlockEntryRepository.js.map +1 -0
  134. package/features/UnlockEntry/UnlockEntryUseCase.d.ts +18 -0
  135. package/features/UnlockEntry/UnlockEntryUseCase.js +81 -0
  136. package/features/UnlockEntry/UnlockEntryUseCase.js.map +1 -0
  137. package/features/UnlockEntry/abstractions.d.ts +44 -0
  138. package/features/UnlockEntry/abstractions.js +17 -0
  139. package/features/UnlockEntry/abstractions.js.map +1 -0
  140. package/features/UnlockEntry/events.d.ts +46 -0
  141. package/features/UnlockEntry/events.js +40 -0
  142. package/features/UnlockEntry/events.js.map +1 -0
  143. package/features/UnlockEntry/feature.d.ts +4 -0
  144. package/features/UnlockEntry/feature.js +14 -0
  145. package/features/UnlockEntry/feature.js.map +1 -0
  146. package/features/UnlockEntry/hasFullAccessPermission.d.ts +2 -0
  147. package/features/UnlockEntry/hasFullAccessPermission.js +10 -0
  148. package/features/UnlockEntry/hasFullAccessPermission.js.map +1 -0
  149. package/features/UnlockEntry/index.d.ts +1 -0
  150. package/features/UnlockEntry/index.js +3 -0
  151. package/features/UnlockEntry/index.js.map +1 -0
  152. package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.d.ts +14 -0
  153. package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.js +40 -0
  154. package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.js.map +1 -0
  155. package/features/UnlockEntryRequest/UnlockEntryRequestRepository.d.ts +17 -0
  156. package/features/UnlockEntryRequest/UnlockEntryRequestRepository.js +43 -0
  157. package/features/UnlockEntryRequest/UnlockEntryRequestRepository.js.map +1 -0
  158. package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.d.ts +16 -0
  159. package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.js +92 -0
  160. package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.js.map +1 -0
  161. package/features/UnlockEntryRequest/abstractions.d.ts +42 -0
  162. package/features/UnlockEntryRequest/abstractions.js +17 -0
  163. package/features/UnlockEntryRequest/abstractions.js.map +1 -0
  164. package/features/UnlockEntryRequest/events.d.ts +45 -0
  165. package/features/UnlockEntryRequest/events.js +40 -0
  166. package/features/UnlockEntryRequest/events.js.map +1 -0
  167. package/features/UnlockEntryRequest/feature.d.ts +4 -0
  168. package/features/UnlockEntryRequest/feature.js +14 -0
  169. package/features/UnlockEntryRequest/feature.js.map +1 -0
  170. package/features/UnlockEntryRequest/index.d.ts +3 -0
  171. package/features/UnlockEntryRequest/index.js +5 -0
  172. package/features/UnlockEntryRequest/index.js.map +1 -0
  173. package/features/UpdateEntryLock/UpdateEntryLockRepository.d.ts +20 -0
  174. package/features/UpdateEntryLock/UpdateEntryLockRepository.js +63 -0
  175. package/features/UpdateEntryLock/UpdateEntryLockRepository.js.map +1 -0
  176. package/features/UpdateEntryLock/UpdateEntryLockUseCase.d.ts +18 -0
  177. package/features/UpdateEntryLock/UpdateEntryLockUseCase.js +62 -0
  178. package/features/UpdateEntryLock/UpdateEntryLockUseCase.js.map +1 -0
  179. package/features/UpdateEntryLock/abstractions.d.ts +42 -0
  180. package/features/UpdateEntryLock/abstractions.js +17 -0
  181. package/features/UpdateEntryLock/abstractions.js.map +1 -0
  182. package/features/UpdateEntryLock/feature.d.ts +4 -0
  183. package/features/UpdateEntryLock/feature.js +12 -0
  184. package/features/UpdateEntryLock/feature.js.map +1 -0
  185. package/features/UpdateEntryLock/index.d.ts +1 -0
  186. package/features/UpdateEntryLock/index.js +3 -0
  187. package/features/UpdateEntryLock/index.js.map +1 -0
  188. package/graphql/checkPermissions.d.ts +5 -0
  189. package/graphql/checkPermissions.js +14 -0
  190. package/graphql/checkPermissions.js.map +1 -0
  191. package/{utils → graphql}/resolve.d.ts +3 -3
  192. package/graphql/resolve.js +22 -0
  193. package/graphql/resolve.js.map +1 -0
  194. package/graphql/schema.d.ts +7 -3
  195. package/graphql/schema.js +101 -66
  196. package/graphql/schema.js.map +1 -1
  197. package/index.d.ts +3 -3
  198. package/index.js +49 -25
  199. package/index.js.map +1 -1
  200. package/package.json +25 -26
  201. package/types.d.ts +3 -132
  202. package/types.js +2 -20
  203. package/types.js.map +1 -1
  204. package/utils/convertWhereCondition.d.ts +1 -1
  205. package/utils/convertWhereCondition.js +11 -14
  206. package/utils/convertWhereCondition.js.map +1 -1
  207. package/utils/getTimeout.js +1 -8
  208. package/utils/getTimeout.js.map +1 -1
  209. package/utils/lockRecordDatabaseId.js +4 -12
  210. package/utils/lockRecordDatabaseId.js.map +1 -1
  211. package/abstractions/IGetLockRecordUseCase.d.ts +0 -8
  212. package/abstractions/IGetLockRecordUseCase.js +0 -7
  213. package/abstractions/IGetLockRecordUseCase.js.map +0 -1
  214. package/abstractions/IGetLockedEntryLockRecordUseCase.d.ts +0 -8
  215. package/abstractions/IGetLockedEntryLockRecordUseCase.js +0 -7
  216. package/abstractions/IGetLockedEntryLockRecordUseCase.js.map +0 -1
  217. package/abstractions/IIsEntryLocked.d.ts +0 -8
  218. package/abstractions/IIsEntryLocked.js +0 -7
  219. package/abstractions/IIsEntryLocked.js.map +0 -1
  220. package/abstractions/IKickOutCurrentUserUseCase.d.ts +0 -5
  221. package/abstractions/IKickOutCurrentUserUseCase.js +0 -7
  222. package/abstractions/IKickOutCurrentUserUseCase.js.map +0 -1
  223. package/abstractions/IListAllLockRecordsUseCase.d.ts +0 -9
  224. package/abstractions/IListAllLockRecordsUseCase.js +0 -7
  225. package/abstractions/IListAllLockRecordsUseCase.js.map +0 -1
  226. package/abstractions/IListLockRecordsUseCase.d.ts +0 -10
  227. package/abstractions/IListLockRecordsUseCase.js +0 -7
  228. package/abstractions/IListLockRecordsUseCase.js.map +0 -1
  229. package/abstractions/ILockEntryUseCase.d.ts +0 -11
  230. package/abstractions/ILockEntryUseCase.js +0 -7
  231. package/abstractions/ILockEntryUseCase.js.map +0 -1
  232. package/abstractions/IUnlockEntryRequestUseCase.d.ts +0 -11
  233. package/abstractions/IUnlockEntryRequestUseCase.js +0 -7
  234. package/abstractions/IUnlockEntryRequestUseCase.js.map +0 -1
  235. package/abstractions/IUnlockEntryUseCase.d.ts +0 -12
  236. package/abstractions/IUnlockEntryUseCase.js +0 -7
  237. package/abstractions/IUnlockEntryUseCase.js.map +0 -1
  238. package/abstractions/IUpdateEntryLockUseCase.d.ts +0 -11
  239. package/abstractions/IUpdateEntryLockUseCase.js +0 -7
  240. package/abstractions/IUpdateEntryLockUseCase.js.map +0 -1
  241. package/crud/crud.d.ts +0 -7
  242. package/crud/crud.js +0 -204
  243. package/crud/crud.js.map +0 -1
  244. package/crud/model.d.ts +0 -2
  245. package/crud/model.js +0 -127
  246. package/crud/model.js.map +0 -1
  247. package/useCases/GetLockRecord/GetLockRecordUseCase.d.ts +0 -16
  248. package/useCases/GetLockRecord/GetLockRecordUseCase.js +0 -39
  249. package/useCases/GetLockRecord/GetLockRecordUseCase.js.map +0 -1
  250. package/useCases/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.d.ts +0 -16
  251. package/useCases/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js +0 -29
  252. package/useCases/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js.map +0 -1
  253. package/useCases/IsEntryLocked/IsEntryLockedUseCase.d.ts +0 -13
  254. package/useCases/IsEntryLocked/IsEntryLockedUseCase.js +0 -31
  255. package/useCases/IsEntryLocked/IsEntryLockedUseCase.js.map +0 -1
  256. package/useCases/KickOutCurrentUser/KickOutCurrentUserUseCase.d.ts +0 -12
  257. package/useCases/KickOutCurrentUser/KickOutCurrentUserUseCase.js +0 -46
  258. package/useCases/KickOutCurrentUser/KickOutCurrentUserUseCase.js.map +0 -1
  259. package/useCases/ListAllLockRecordsUseCase/ListAllLockRecordsUseCase.d.ts +0 -13
  260. package/useCases/ListAllLockRecordsUseCase/ListAllLockRecordsUseCase.js +0 -34
  261. package/useCases/ListAllLockRecordsUseCase/ListAllLockRecordsUseCase.js.map +0 -1
  262. package/useCases/ListLockRecordsUseCase/ListLockRecordsUseCase.d.ts +0 -14
  263. package/useCases/ListLockRecordsUseCase/ListLockRecordsUseCase.js +0 -27
  264. package/useCases/ListLockRecordsUseCase/ListLockRecordsUseCase.js.map +0 -1
  265. package/useCases/LockEntryUseCase/LockEntryUseCase.d.ts +0 -21
  266. package/useCases/LockEntryUseCase/LockEntryUseCase.js +0 -64
  267. package/useCases/LockEntryUseCase/LockEntryUseCase.js.map +0 -1
  268. package/useCases/UnlockEntryUseCase/UnlockEntryUseCase.d.ts +0 -23
  269. package/useCases/UnlockEntryUseCase/UnlockEntryUseCase.js +0 -90
  270. package/useCases/UnlockEntryUseCase/UnlockEntryUseCase.js.map +0 -1
  271. package/useCases/UnlockRequestUseCase/UnlockEntryRequestUseCase.d.ts +0 -21
  272. package/useCases/UnlockRequestUseCase/UnlockEntryRequestUseCase.js +0 -82
  273. package/useCases/UnlockRequestUseCase/UnlockEntryRequestUseCase.js.map +0 -1
  274. package/useCases/UpdateEntryLock/UpdateEntryLockUseCase.d.ts +0 -26
  275. package/useCases/UpdateEntryLock/UpdateEntryLockUseCase.js +0 -93
  276. package/useCases/UpdateEntryLock/UpdateEntryLockUseCase.js.map +0 -1
  277. package/useCases/index.d.ts +0 -31
  278. package/useCases/index.js +0 -96
  279. package/useCases/index.js.map +0 -1
  280. package/useCases/types.d.ts +0 -5
  281. package/useCases/types.js +0 -7
  282. package/useCases/types.js.map +0 -1
  283. package/utils/calculateExpiresOn.d.ts +0 -2
  284. package/utils/calculateExpiresOn.js +0 -16
  285. package/utils/calculateExpiresOn.js.map +0 -1
  286. package/utils/checkPermissions.d.ts +0 -7
  287. package/utils/checkPermissions.js +0 -21
  288. package/utils/checkPermissions.js.map +0 -1
  289. package/utils/convertEntryToLockRecord.d.ts +0 -28
  290. package/utils/convertEntryToLockRecord.js.map +0 -1
  291. package/utils/resolve.js +0 -30
  292. package/utils/resolve.js.map +0 -1
  293. package/utils/validateSameIdentity.d.ts +0 -6
  294. package/utils/validateSameIdentity.js +0 -24
  295. package/utils/validateSameIdentity.js.map +0 -1
package/graphql/schema.js CHANGED
@@ -1,51 +1,45 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createGraphQLSchema = void 0;
7
- var _resolve = require("../utils/resolve");
8
- var _handlerGraphql = require("@webiny/handler-graphql");
9
- var _renderFields = require("@webiny/api-headless-cms/utils/renderFields");
10
- var _createFieldTypePluginRecords = require("@webiny/api-headless-cms/graphql/schema/createFieldTypePluginRecords");
11
- var _renderListFilterFields = require("@webiny/api-headless-cms/utils/renderListFilterFields");
12
- var _renderSortEnum = require("@webiny/api-headless-cms/utils/renderSortEnum");
13
- var _checkPermissions = require("../utils/checkPermissions");
14
- const createGraphQLSchema = async params => {
15
- const context = params.context;
16
- const model = await context.recordLocking.getModel();
17
- const models = await context.security.withoutAuthorization(async () => {
18
- return (await context.cms.listModels()).filter(model => {
19
- if (model.fields.length === 0) {
20
- return false;
21
- } else if (model.isPrivate) {
22
- return false;
23
- }
24
- return true;
25
- });
1
+ import { resolve, resolveList } from "./resolve.js";
2
+ import { createGraphQLSchemaPlugin } from "@webiny/handler-graphql";
3
+ import { renderFields } from "@webiny/api-headless-cms/utils/renderFields.js";
4
+ import { renderListFilterFields } from "@webiny/api-headless-cms/utils/renderListFilterFields.js";
5
+ import { renderSortEnum } from "@webiny/api-headless-cms/utils/renderSortEnum.js";
6
+ import { checkPermissions } from "./checkPermissions.js";
7
+ import { IsEntryLockedUseCase } from "../features/IsEntryLocked/abstractions.js";
8
+ import { GetLockRecordUseCase } from "../features/GetLockRecord/abstractions.js";
9
+ import { GetLockedEntryLockRecordUseCase } from "../features/GetLockedEntryLockRecord/abstractions.js";
10
+ import { ListLockRecordsUseCase } from "../features/ListLockRecords/abstractions.js";
11
+ import { ListAllLockRecordsUseCase } from "../features/ListAllLockRecords/abstractions.js";
12
+ import { LockEntryUseCase } from "../features/LockEntry/abstractions.js";
13
+ import { UpdateEntryLockUseCase } from "../features/UpdateEntryLock/abstractions.js";
14
+ import { UnlockEntryUseCase } from "../features/UnlockEntry/abstractions.js";
15
+ import { UnlockEntryRequestUseCase } from "../features/UnlockEntryRequest/abstractions.js";
16
+ export const createGraphQLSchema = async params => {
17
+ const model = params.model;
18
+ const models = params.models.filter(model => {
19
+ return model.fields.length > 0;
26
20
  });
27
- const fieldTypePlugins = (0, _createFieldTypePluginRecords.createFieldTypePluginRecords)(context.plugins);
28
- const recordLockingFields = (0, _renderFields.renderFields)({
21
+ const fieldRegistry = params.fieldRegistry;
22
+ const recordLockingFields = renderFields({
29
23
  models,
30
24
  model,
31
25
  fields: model.fields,
32
26
  type: "manage",
33
- fieldTypePlugins
27
+ fieldRegistry
34
28
  });
35
- const listFilterFieldsRender = (0, _renderListFilterFields.renderListFilterFields)({
29
+ const listFilterFieldsRender = renderListFilterFields({
36
30
  model,
37
31
  fields: model.fields,
38
32
  type: "manage",
39
- fieldTypePlugins,
33
+ fieldRegistry,
40
34
  excludeFields: ["entryId"]
41
35
  });
42
- const sortEnumRender = (0, _renderSortEnum.renderSortEnum)({
36
+ const sortEnumRender = renderSortEnum({
43
37
  model,
44
38
  fields: model.fields,
45
- fieldTypePlugins,
46
- sorterPlugins: []
39
+ fieldRegistry,
40
+ sorters: []
47
41
  });
48
- const plugin = (0, _handlerGraphql.createGraphQLSchemaPlugin)({
42
+ const plugin = createGraphQLSchemaPlugin({
49
43
  typeDefs: /* GraphQL */`
50
44
  ${recordLockingFields.map(f => f.typeDefs).join("\n")}
51
45
 
@@ -126,7 +120,7 @@ const createGraphQLSchema = async params => {
126
120
  }
127
121
 
128
122
  input RecordLockingListWhereInput {
129
- ${listFilterFieldsRender}
123
+ ${listFilterFieldsRender.allFiltersAsString()}
130
124
  }
131
125
 
132
126
  enum RecordLockingListSorter {
@@ -188,85 +182,127 @@ const createGraphQLSchema = async params => {
188
182
  },
189
183
  RecordLockingQuery: {
190
184
  async isEntryLocked(_, args, context) {
191
- return (0, _resolve.resolve)(async () => {
192
- await (0, _checkPermissions.checkPermissions)(context);
193
- return context.recordLocking.isEntryLocked({
185
+ return resolve(async () => {
186
+ await checkPermissions(context);
187
+ const useCase = context.container.resolve(IsEntryLockedUseCase);
188
+ const result = await useCase.execute({
194
189
  id: args.id,
195
190
  type: args.type
196
191
  });
192
+ if (result.isFail()) {
193
+ throw result.error;
194
+ }
195
+ return result.value;
197
196
  });
198
197
  },
199
198
  async getLockRecord(_, args, context) {
200
- return (0, _resolve.resolve)(async () => {
201
- await (0, _checkPermissions.checkPermissions)(context);
202
- const result = await context.recordLocking.getLockRecord({
199
+ return resolve(async () => {
200
+ await checkPermissions(context);
201
+ const useCase = context.container.resolve(GetLockRecordUseCase);
202
+ const result = await useCase.execute({
203
203
  id: args.id,
204
204
  type: args.type
205
205
  });
206
- if (result) {
207
- return result;
206
+ if (result.isFail()) {
207
+ throw result.error;
208
208
  }
209
- throw new _handlerGraphql.NotFoundError("Lock record not found.");
209
+ return result.value;
210
210
  });
211
211
  },
212
212
  async getLockedEntryLockRecord(_, args, context) {
213
- return (0, _resolve.resolve)(async () => {
214
- await (0, _checkPermissions.checkPermissions)(context);
215
- return await context.recordLocking.getLockedEntryLockRecord({
213
+ return resolve(async () => {
214
+ await checkPermissions(context);
215
+ const useCase = context.container.resolve(GetLockedEntryLockRecordUseCase);
216
+ const result = await useCase.execute({
216
217
  id: args.id,
217
218
  type: args.type
218
219
  });
220
+ // Returns null if not found/expired/locked by current user
221
+ if (result.isFail()) {
222
+ return null;
223
+ }
224
+ return result.value;
219
225
  });
220
226
  },
221
227
  async listLockRecords(_, args, context) {
222
- return (0, _resolve.resolveList)(async () => {
223
- await (0, _checkPermissions.checkPermissions)(context);
224
- return await context.recordLocking.listLockRecords(args);
228
+ return resolveList(async () => {
229
+ await checkPermissions(context);
230
+ const useCase = context.container.resolve(ListLockRecordsUseCase);
231
+ const result = await useCase.execute(args);
232
+ if (result.isFail()) {
233
+ throw result.error;
234
+ }
235
+ return result.value;
225
236
  });
226
237
  },
227
238
  listAllLockRecords(_, args, context) {
228
- return (0, _resolve.resolveList)(async () => {
229
- await (0, _checkPermissions.checkPermissions)(context);
230
- return await context.recordLocking.listAllLockRecords(args);
239
+ return resolveList(async () => {
240
+ await checkPermissions(context);
241
+ const useCase = context.container.resolve(ListAllLockRecordsUseCase);
242
+ const result = await useCase.execute(args);
243
+ if (result.isFail()) {
244
+ throw result.error;
245
+ }
246
+ return result.value;
231
247
  });
232
248
  }
233
249
  },
234
250
  RecordLockingMutation: {
235
251
  async lockEntry(_, args, context) {
236
- return (0, _resolve.resolve)(async () => {
237
- await (0, _checkPermissions.checkPermissions)(context);
238
- return context.recordLocking.lockEntry({
252
+ return resolve(async () => {
253
+ await checkPermissions(context);
254
+ const useCase = context.container.resolve(LockEntryUseCase);
255
+ const result = await useCase.execute({
239
256
  id: args.id,
240
257
  type: args.type
241
258
  });
259
+ if (result.isFail()) {
260
+ throw result.error;
261
+ }
262
+ return result.value;
242
263
  });
243
264
  },
244
265
  async updateEntryLock(_, args, context) {
245
- return (0, _resolve.resolve)(async () => {
246
- await (0, _checkPermissions.checkPermissions)(context);
247
- return context.recordLocking.updateEntryLock({
266
+ return resolve(async () => {
267
+ await checkPermissions(context);
268
+ const useCase = context.container.resolve(UpdateEntryLockUseCase);
269
+ const result = await useCase.execute({
248
270
  id: args.id,
249
271
  type: args.type
250
272
  });
273
+ if (result.isFail()) {
274
+ throw result.error;
275
+ }
276
+ return result.value;
251
277
  });
252
278
  },
253
279
  async unlockEntry(_, args, context) {
254
- return (0, _resolve.resolve)(async () => {
255
- await (0, _checkPermissions.checkPermissions)(context);
256
- return await context.recordLocking.unlockEntry({
280
+ return resolve(async () => {
281
+ await checkPermissions(context);
282
+ const useCase = context.container.resolve(UnlockEntryUseCase);
283
+ const result = await useCase.execute({
257
284
  id: args.id,
258
285
  type: args.type,
259
286
  force: args.force
260
287
  });
288
+ if (result.isFail()) {
289
+ throw result.error;
290
+ }
291
+ return result.value;
261
292
  });
262
293
  },
263
294
  async unlockEntryRequest(_, args, context) {
264
- return (0, _resolve.resolve)(async () => {
265
- await (0, _checkPermissions.checkPermissions)(context);
266
- return await context.recordLocking.unlockEntryRequest({
295
+ return resolve(async () => {
296
+ await checkPermissions(context);
297
+ const useCase = context.container.resolve(UnlockEntryRequestUseCase);
298
+ const result = await useCase.execute({
267
299
  id: args.id,
268
300
  type: args.type
269
301
  });
302
+ if (result.isFail()) {
303
+ throw result.error;
304
+ }
305
+ return result.value;
270
306
  });
271
307
  }
272
308
  }
@@ -275,6 +311,5 @@ const createGraphQLSchema = async params => {
275
311
  plugin.name = "recordLocking.graphql.schema.locking";
276
312
  return plugin;
277
313
  };
278
- exports.createGraphQLSchema = createGraphQLSchema;
279
314
 
280
315
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_resolve","require","_handlerGraphql","_renderFields","_createFieldTypePluginRecords","_renderListFilterFields","_renderSortEnum","_checkPermissions","createGraphQLSchema","params","context","model","recordLocking","getModel","models","security","withoutAuthorization","cms","listModels","filter","fields","length","isPrivate","fieldTypePlugins","createFieldTypePluginRecords","plugins","recordLockingFields","renderFields","type","listFilterFieldsRender","renderListFilterFields","excludeFields","sortEnumRender","renderSortEnum","sorterPlugins","plugin","createGraphQLSchemaPlugin","typeDefs","map","f","join","resolvers","Query","Mutation","RecordLockingQuery","isEntryLocked","_","args","resolve","checkPermissions","id","getLockRecord","result","NotFoundError","getLockedEntryLockRecord","listLockRecords","resolveList","listAllLockRecords","RecordLockingMutation","lockEntry","updateEntryLock","unlockEntry","force","unlockEntryRequest","name","exports"],"sources":["schema.ts"],"sourcesContent":["import { resolve, resolveList } from \"~/utils/resolve\";\nimport type { Context } from \"~/types\";\nimport type { IGraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { createGraphQLSchemaPlugin, NotFoundError } from \"@webiny/handler-graphql\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields\";\nimport { createFieldTypePluginRecords } from \"@webiny/api-headless-cms/graphql/schema/createFieldTypePluginRecords\";\nimport { renderListFilterFields } from \"@webiny/api-headless-cms/utils/renderListFilterFields\";\nimport { renderSortEnum } from \"@webiny/api-headless-cms/utils/renderSortEnum\";\nimport { checkPermissions } from \"~/utils/checkPermissions\";\n\ninterface Params {\n context: Pick<Context, \"plugins\" | \"recordLocking\" | \"security\" | \"cms\">;\n}\nexport const createGraphQLSchema = async (\n params: Params\n): Promise<IGraphQLSchemaPlugin<Context>> => {\n const context = params.context;\n\n const model = await context.recordLocking.getModel();\n\n const models = await context.security.withoutAuthorization(async () => {\n return (await context.cms.listModels()).filter(model => {\n if (model.fields.length === 0) {\n return false;\n } else if (model.isPrivate) {\n return false;\n }\n return true;\n });\n });\n\n const fieldTypePlugins = createFieldTypePluginRecords(context.plugins);\n\n const recordLockingFields = renderFields({\n models,\n model,\n fields: model.fields,\n type: \"manage\",\n fieldTypePlugins\n });\n\n const listFilterFieldsRender = renderListFilterFields({\n model,\n fields: model.fields,\n type: \"manage\",\n fieldTypePlugins,\n excludeFields: [\"entryId\"]\n });\n\n const sortEnumRender = renderSortEnum({\n model,\n fields: model.fields,\n fieldTypePlugins,\n sorterPlugins: []\n });\n\n const plugin = createGraphQLSchemaPlugin<Context>({\n typeDefs: /* GraphQL */ `\n ${recordLockingFields.map(f => f.typeDefs).join(\"\\n\")}\n\n type RecordLockingError {\n message: String\n code: String\n data: JSON\n stack: String\n }\n\n enum RecordLockingRecordActionType {\n requested\n approved\n denied\n }\n\n type RecordLockingIdentity {\n id: String!\n displayName: String\n type: String\n }\n\n type RecordLockingRecordAction {\n id: ID!\n type: RecordLockingRecordActionType!\n message: String\n createdBy: RecordLockingIdentity!\n createdOn: DateTime!\n }\n\n type RecordLockingRecord {\n id: ID!\n lockedBy: RecordLockingIdentity!\n lockedOn: DateTime!\n updatedOn: DateTime!\n expiresOn: DateTime!\n ${recordLockingFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type RecordLockingIsEntryLockedResponse {\n data: Boolean\n error: RecordLockingError\n }\n\n type RecordLockingGetLockRecordResponse {\n data: RecordLockingRecord\n error: RecordLockingError\n }\n\n type RecordLockingGetLockedEntryLockRecordResponse {\n data: RecordLockingRecord\n error: RecordLockingError\n }\n\n type RecordLockingListLockRecordsResponse {\n data: [RecordLockingRecord!]\n error: RecordLockingError\n }\n\n type RecordLockingLockEntryResponse {\n data: RecordLockingRecord\n error: RecordLockingError\n }\n \n type RecordLockingUpdateLockResponse {\n data: RecordLockingRecord\n error: RecordLockingError\n }\n\n type RecordLockingUnlockEntryResponse {\n data: RecordLockingRecord\n error: RecordLockingError\n }\n\n type RecordLockingUnlockEntryRequestResponse {\n data: RecordLockingRecord\n error: RecordLockingError\n }\n\n input RecordLockingListWhereInput {\n ${listFilterFieldsRender}\n }\n\n enum RecordLockingListSorter {\n ${sortEnumRender}\n }\n\n type RecordLockingQuery {\n _empty: String\n }\n\n type RecordLockingMutation {\n _empty: String\n }\n\n extend type RecordLockingQuery {\n isEntryLocked(id: ID!, type: String!): RecordLockingIsEntryLockedResponse!\n getLockRecord(id: ID!, type: String!): RecordLockingGetLockRecordResponse!\n # Returns lock record or null - if entry is locked in context of the current user, does not throw an error like getLockRecord if no record in the DB\n getLockedEntryLockRecord(id: ID!, type: String!): RecordLockingGetLockedEntryLockRecordResponse!\n listAllLockRecords(\n where: RecordLockingListWhereInput\n sort: [RecordLockingListSorter!]\n limit: Int\n after: String\n ): RecordLockingListLockRecordsResponse!\n # Basically same as listAllLockRecords except this one will filter out records with expired lock.\n listLockRecords(\n where: RecordLockingListWhereInput\n sort: [RecordLockingListSorter!]\n limit: Int\n after: String\n ): RecordLockingListLockRecordsResponse!\n }\n\n extend type RecordLockingMutation {\n lockEntry(id: ID!, type: String!): RecordLockingLockEntryResponse!\n updateEntryLock(id: ID!, type: String!): RecordLockingUpdateLockResponse!\n unlockEntry(id: ID!, type: String!, force: Boolean): RecordLockingUnlockEntryResponse!\n unlockEntryRequest(\n id: ID!\n type: String!\n ): RecordLockingUnlockEntryRequestResponse!\n }\n\n extend type Query {\n recordLocking: RecordLockingQuery\n }\n\n extend type Mutation {\n recordLocking: RecordLockingMutation\n }\n `,\n resolvers: {\n Query: {\n recordLocking: async () => ({})\n },\n Mutation: {\n recordLocking: async () => ({})\n },\n RecordLockingQuery: {\n async isEntryLocked(_, args, context) {\n return resolve(async () => {\n await checkPermissions(context);\n return context.recordLocking.isEntryLocked({\n id: args.id,\n type: args.type\n });\n });\n },\n async getLockRecord(_, args, context) {\n return resolve(async () => {\n await checkPermissions(context);\n const result = await context.recordLocking.getLockRecord({\n id: args.id,\n type: args.type\n });\n if (result) {\n return result;\n }\n throw new NotFoundError(\"Lock record not found.\");\n });\n },\n async getLockedEntryLockRecord(_, args, context) {\n return resolve(async () => {\n await checkPermissions(context);\n return await context.recordLocking.getLockedEntryLockRecord({\n id: args.id,\n type: args.type\n });\n });\n },\n\n async listLockRecords(_, args, context) {\n return resolveList(async () => {\n await checkPermissions(context);\n return await context.recordLocking.listLockRecords(args);\n });\n },\n listAllLockRecords(_, args, context) {\n return resolveList(async () => {\n await checkPermissions(context);\n return await context.recordLocking.listAllLockRecords(args);\n });\n }\n },\n RecordLockingMutation: {\n async lockEntry(_, args, context) {\n return resolve(async () => {\n await checkPermissions(context);\n return context.recordLocking.lockEntry({\n id: args.id,\n type: args.type\n });\n });\n },\n async updateEntryLock(_, args, context) {\n return resolve(async () => {\n await checkPermissions(context);\n return context.recordLocking.updateEntryLock({\n id: args.id,\n type: args.type\n });\n });\n },\n async unlockEntry(_, args, context) {\n return resolve(async () => {\n await checkPermissions(context);\n return await context.recordLocking.unlockEntry({\n id: args.id,\n type: args.type,\n force: args.force\n });\n });\n },\n async unlockEntryRequest(_, args, context) {\n return resolve(async () => {\n await checkPermissions(context);\n return await context.recordLocking.unlockEntryRequest({\n id: args.id,\n type: args.type\n });\n });\n }\n }\n }\n });\n\n plugin.name = \"recordLocking.graphql.schema.locking\";\n\n return plugin;\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAGA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,aAAA,GAAAF,OAAA;AACA,IAAAG,6BAAA,GAAAH,OAAA;AACA,IAAAI,uBAAA,GAAAJ,OAAA;AACA,IAAAK,eAAA,GAAAL,OAAA;AACA,IAAAM,iBAAA,GAAAN,OAAA;AAKO,MAAMO,mBAAmB,GAAG,MAC/BC,MAAc,IAC2B;EACzC,MAAMC,OAAO,GAAGD,MAAM,CAACC,OAAO;EAE9B,MAAMC,KAAK,GAAG,MAAMD,OAAO,CAACE,aAAa,CAACC,QAAQ,CAAC,CAAC;EAEpD,MAAMC,MAAM,GAAG,MAAMJ,OAAO,CAACK,QAAQ,CAACC,oBAAoB,CAAC,YAAY;IACnE,OAAO,CAAC,MAAMN,OAAO,CAACO,GAAG,CAACC,UAAU,CAAC,CAAC,EAAEC,MAAM,CAACR,KAAK,IAAI;MACpD,IAAIA,KAAK,CAACS,MAAM,CAACC,MAAM,KAAK,CAAC,EAAE;QAC3B,OAAO,KAAK;MAChB,CAAC,MAAM,IAAIV,KAAK,CAACW,SAAS,EAAE;QACxB,OAAO,KAAK;MAChB;MACA,OAAO,IAAI;IACf,CAAC,CAAC;EACN,CAAC,CAAC;EAEF,MAAMC,gBAAgB,GAAG,IAAAC,0DAA4B,EAACd,OAAO,CAACe,OAAO,CAAC;EAEtE,MAAMC,mBAAmB,GAAG,IAAAC,0BAAY,EAAC;IACrCb,MAAM;IACNH,KAAK;IACLS,MAAM,EAAET,KAAK,CAACS,MAAM;IACpBQ,IAAI,EAAE,QAAQ;IACdL;EACJ,CAAC,CAAC;EAEF,MAAMM,sBAAsB,GAAG,IAAAC,8CAAsB,EAAC;IAClDnB,KAAK;IACLS,MAAM,EAAET,KAAK,CAACS,MAAM;IACpBQ,IAAI,EAAE,QAAQ;IACdL,gBAAgB;IAChBQ,aAAa,EAAE,CAAC,SAAS;EAC7B,CAAC,CAAC;EAEF,MAAMC,cAAc,GAAG,IAAAC,8BAAc,EAAC;IAClCtB,KAAK;IACLS,MAAM,EAAET,KAAK,CAACS,MAAM;IACpBG,gBAAgB;IAChBW,aAAa,EAAE;EACnB,CAAC,CAAC;EAEF,MAAMC,MAAM,GAAG,IAAAC,yCAAyB,EAAU;IAC9CC,QAAQ,EAAE,aAAc;AAChC,cAAcX,mBAAmB,CAACY,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACF,QAAQ,CAAC,CAACG,IAAI,CAAC,IAAI,CAAC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkBd,mBAAmB,CAACY,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACnB,MAAM,CAAC,CAACoB,IAAI,CAAC,IAAI,CAAC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkBX,sBAAsB;AACxC;AACA;AACA;AACA,kBAAkBG,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;IACDS,SAAS,EAAE;MACPC,KAAK,EAAE;QACH9B,aAAa,EAAE,MAAAA,CAAA,MAAa,CAAC,CAAC;MAClC,CAAC;MACD+B,QAAQ,EAAE;QACN/B,aAAa,EAAE,MAAAA,CAAA,MAAa,CAAC,CAAC;MAClC,CAAC;MACDgC,kBAAkB,EAAE;QAChB,MAAMC,aAAaA,CAACC,CAAC,EAAEC,IAAI,EAAErC,OAAO,EAAE;UAClC,OAAO,IAAAsC,gBAAO,EAAC,YAAY;YACvB,MAAM,IAAAC,kC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","ignoreList":[]}
1
+ {"version":3,"names":["resolve","resolveList","createGraphQLSchemaPlugin","renderFields","renderListFilterFields","renderSortEnum","checkPermissions","IsEntryLockedUseCase","GetLockRecordUseCase","GetLockedEntryLockRecordUseCase","ListLockRecordsUseCase","ListAllLockRecordsUseCase","LockEntryUseCase","UpdateEntryLockUseCase","UnlockEntryUseCase","UnlockEntryRequestUseCase","createGraphQLSchema","params","model","models","filter","fields","length","fieldRegistry","recordLockingFields","type","listFilterFieldsRender","excludeFields","sortEnumRender","sorters","plugin","typeDefs","map","f","join","allFiltersAsString","resolvers","Query","recordLocking","Mutation","RecordLockingQuery","isEntryLocked","_","args","context","useCase","container","result","execute","id","isFail","error","value","getLockRecord","getLockedEntryLockRecord","listLockRecords","listAllLockRecords","RecordLockingMutation","lockEntry","updateEntryLock","unlockEntry","force","unlockEntryRequest","name"],"sources":["schema.ts"],"sourcesContent":["import { resolve, resolveList } from \"./resolve.js\";\nimport type { IGraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { createGraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields.js\";\nimport { renderListFilterFields } from \"@webiny/api-headless-cms/utils/renderListFilterFields.js\";\nimport { renderSortEnum } from \"@webiny/api-headless-cms/utils/renderSortEnum.js\";\nimport { checkPermissions } from \"./checkPermissions.js\";\nimport { IsEntryLockedUseCase } from \"~/features/IsEntryLocked/abstractions.js\";\nimport { GetLockRecordUseCase } from \"~/features/GetLockRecord/abstractions.js\";\nimport { GetLockedEntryLockRecordUseCase } from \"~/features/GetLockedEntryLockRecord/abstractions.js\";\nimport { ListLockRecordsUseCase } from \"~/features/ListLockRecords/abstractions.js\";\nimport { ListAllLockRecordsUseCase } from \"~/features/ListAllLockRecords/abstractions.js\";\nimport { LockEntryUseCase } from \"~/features/LockEntry/abstractions.js\";\nimport { UpdateEntryLockUseCase } from \"~/features/UpdateEntryLock/abstractions.js\";\nimport { UnlockEntryUseCase } from \"~/features/UnlockEntry/abstractions.js\";\nimport { UnlockEntryRequestUseCase } from \"~/features/UnlockEntryRequest/abstractions.js\";\nimport type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\nimport { CmsModel } from \"@webiny/api-headless-cms/types/model.js\";\nimport type { CmsModelFieldToGraphQLRegistry } from \"@webiny/api-headless-cms/exports/api/cms/graphql.js\";\n\ninterface Params {\n model: CmsModel;\n models: CmsModel[];\n fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface;\n}\nexport const createGraphQLSchema = async (\n params: Params\n): Promise<IGraphQLSchemaPlugin<ApiCoreContext>> => {\n const model = params.model;\n\n const models = params.models.filter(model => {\n return model.fields.length > 0;\n });\n\n const fieldRegistry = params.fieldRegistry;\n\n const recordLockingFields = renderFields({\n models,\n model,\n fields: model.fields,\n type: \"manage\",\n fieldRegistry\n });\n\n const listFilterFieldsRender = renderListFilterFields({\n model,\n fields: model.fields,\n type: \"manage\",\n fieldRegistry,\n excludeFields: [\"entryId\"]\n });\n\n const sortEnumRender = renderSortEnum({\n model,\n fields: model.fields,\n fieldRegistry,\n sorters: []\n });\n\n const plugin = createGraphQLSchemaPlugin<ApiCoreContext>({\n typeDefs: /* GraphQL */ `\n ${recordLockingFields.map(f => f.typeDefs).join(\"\\n\")}\n\n type RecordLockingError {\n message: String\n code: String\n data: JSON\n stack: String\n }\n\n enum RecordLockingRecordActionType {\n requested\n approved\n denied\n }\n\n type RecordLockingIdentity {\n id: String!\n displayName: String\n type: String\n }\n\n type RecordLockingRecordAction {\n id: ID!\n type: RecordLockingRecordActionType!\n message: String\n createdBy: RecordLockingIdentity!\n createdOn: DateTime!\n }\n\n type RecordLockingRecord {\n id: ID!\n lockedBy: RecordLockingIdentity!\n lockedOn: DateTime!\n updatedOn: DateTime!\n expiresOn: DateTime!\n ${recordLockingFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type RecordLockingIsEntryLockedResponse {\n data: Boolean\n error: RecordLockingError\n }\n\n type RecordLockingGetLockRecordResponse {\n data: RecordLockingRecord\n error: RecordLockingError\n }\n\n type RecordLockingGetLockedEntryLockRecordResponse {\n data: RecordLockingRecord\n error: RecordLockingError\n }\n\n type RecordLockingListLockRecordsResponse {\n data: [RecordLockingRecord!]\n error: RecordLockingError\n }\n\n type RecordLockingLockEntryResponse {\n data: RecordLockingRecord\n error: RecordLockingError\n }\n \n type RecordLockingUpdateLockResponse {\n data: RecordLockingRecord\n error: RecordLockingError\n }\n\n type RecordLockingUnlockEntryResponse {\n data: RecordLockingRecord\n error: RecordLockingError\n }\n\n type RecordLockingUnlockEntryRequestResponse {\n data: RecordLockingRecord\n error: RecordLockingError\n }\n\n input RecordLockingListWhereInput {\n ${listFilterFieldsRender.allFiltersAsString()}\n }\n\n enum RecordLockingListSorter {\n ${sortEnumRender}\n }\n\n type RecordLockingQuery {\n _empty: String\n }\n\n type RecordLockingMutation {\n _empty: String\n }\n\n extend type RecordLockingQuery {\n isEntryLocked(id: ID!, type: String!): RecordLockingIsEntryLockedResponse!\n getLockRecord(id: ID!, type: String!): RecordLockingGetLockRecordResponse!\n # Returns lock record or null - if entry is locked in context of the current user, does not throw an error like getLockRecord if no record in the DB\n getLockedEntryLockRecord(id: ID!, type: String!): RecordLockingGetLockedEntryLockRecordResponse!\n listAllLockRecords(\n where: RecordLockingListWhereInput\n sort: [RecordLockingListSorter!]\n limit: Int\n after: String\n ): RecordLockingListLockRecordsResponse!\n # Basically same as listAllLockRecords except this one will filter out records with expired lock.\n listLockRecords(\n where: RecordLockingListWhereInput\n sort: [RecordLockingListSorter!]\n limit: Int\n after: String\n ): RecordLockingListLockRecordsResponse!\n }\n\n extend type RecordLockingMutation {\n lockEntry(id: ID!, type: String!): RecordLockingLockEntryResponse!\n updateEntryLock(id: ID!, type: String!): RecordLockingUpdateLockResponse!\n unlockEntry(id: ID!, type: String!, force: Boolean): RecordLockingUnlockEntryResponse!\n unlockEntryRequest(\n id: ID!\n type: String!\n ): RecordLockingUnlockEntryRequestResponse!\n }\n\n extend type Query {\n recordLocking: RecordLockingQuery\n }\n\n extend type Mutation {\n recordLocking: RecordLockingMutation\n }\n `,\n resolvers: {\n Query: {\n recordLocking: async () => ({})\n },\n Mutation: {\n recordLocking: async () => ({})\n },\n RecordLockingQuery: {\n async isEntryLocked(_, args, context) {\n return resolve(async () => {\n await checkPermissions(context);\n const useCase = context.container.resolve(IsEntryLockedUseCase);\n const result = await useCase.execute({\n id: args.id,\n type: args.type\n });\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n });\n },\n async getLockRecord(_, args, context) {\n return resolve(async () => {\n await checkPermissions(context);\n const useCase = context.container.resolve(GetLockRecordUseCase);\n const result = await useCase.execute({\n id: args.id,\n type: args.type\n });\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n });\n },\n async getLockedEntryLockRecord(_, args, context) {\n return resolve(async () => {\n await checkPermissions(context);\n const useCase = context.container.resolve(GetLockedEntryLockRecordUseCase);\n const result = await useCase.execute({\n id: args.id,\n type: args.type\n });\n // Returns null if not found/expired/locked by current user\n if (result.isFail()) {\n return null;\n }\n return result.value;\n });\n },\n\n async listLockRecords(_, args, context) {\n return resolveList(async () => {\n await checkPermissions(context);\n const useCase = context.container.resolve(ListLockRecordsUseCase);\n const result = await useCase.execute(args);\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n });\n },\n listAllLockRecords(_, args, context) {\n return resolveList(async () => {\n await checkPermissions(context);\n const useCase = context.container.resolve(ListAllLockRecordsUseCase);\n const result = await useCase.execute(args);\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n });\n }\n },\n RecordLockingMutation: {\n async lockEntry(_, args, context) {\n return resolve(async () => {\n await checkPermissions(context);\n const useCase = context.container.resolve(LockEntryUseCase);\n const result = await useCase.execute({\n id: args.id,\n type: args.type\n });\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n });\n },\n async updateEntryLock(_, args, context) {\n return resolve(async () => {\n await checkPermissions(context);\n const useCase = context.container.resolve(UpdateEntryLockUseCase);\n const result = await useCase.execute({\n id: args.id,\n type: args.type\n });\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n });\n },\n async unlockEntry(_, args, context) {\n return resolve(async () => {\n await checkPermissions(context);\n const useCase = context.container.resolve(UnlockEntryUseCase);\n const result = await useCase.execute({\n id: args.id,\n type: args.type,\n force: args.force\n });\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n });\n },\n async unlockEntryRequest(_, args, context) {\n return resolve(async () => {\n await checkPermissions(context);\n const useCase = context.container.resolve(UnlockEntryRequestUseCase);\n const result = await useCase.execute({\n id: args.id,\n type: args.type\n });\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n });\n }\n }\n }\n });\n\n plugin.name = \"recordLocking.graphql.schema.locking\";\n\n return plugin;\n};\n"],"mappings":"AAAA,SAASA,OAAO,EAAEC,WAAW;AAE7B,SAASC,yBAAyB,QAAQ,yBAAyB;AACnE,SAASC,YAAY,QAAQ,gDAAgD;AAC7E,SAASC,sBAAsB,QAAQ,0DAA0D;AACjG,SAASC,cAAc,QAAQ,kDAAkD;AACjF,SAASC,gBAAgB;AACzB,SAASC,oBAAoB;AAC7B,SAASC,oBAAoB;AAC7B,SAASC,+BAA+B;AACxC,SAASC,sBAAsB;AAC/B,SAASC,yBAAyB;AAClC,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;AAC/B,SAASC,kBAAkB;AAC3B,SAASC,yBAAyB;AAUlC,OAAO,MAAMC,mBAAmB,GAAG,MAC/BC,MAAc,IACkC;EAChD,MAAMC,KAAK,GAAGD,MAAM,CAACC,KAAK;EAE1B,MAAMC,MAAM,GAAGF,MAAM,CAACE,MAAM,CAACC,MAAM,CAACF,KAAK,IAAI;IACzC,OAAOA,KAAK,CAACG,MAAM,CAACC,MAAM,GAAG,CAAC;EAClC,CAAC,CAAC;EAEF,MAAMC,aAAa,GAAGN,MAAM,CAACM,aAAa;EAE1C,MAAMC,mBAAmB,GAAGrB,YAAY,CAAC;IACrCgB,MAAM;IACND,KAAK;IACLG,MAAM,EAAEH,KAAK,CAACG,MAAM;IACpBI,IAAI,EAAE,QAAQ;IACdF;EACJ,CAAC,CAAC;EAEF,MAAMG,sBAAsB,GAAGtB,sBAAsB,CAAC;IAClDc,KAAK;IACLG,MAAM,EAAEH,KAAK,CAACG,MAAM;IACpBI,IAAI,EAAE,QAAQ;IACdF,aAAa;IACbI,aAAa,EAAE,CAAC,SAAS;EAC7B,CAAC,CAAC;EAEF,MAAMC,cAAc,GAAGvB,cAAc,CAAC;IAClCa,KAAK;IACLG,MAAM,EAAEH,KAAK,CAACG,MAAM;IACpBE,aAAa;IACbM,OAAO,EAAE;EACb,CAAC,CAAC;EAEF,MAAMC,MAAM,GAAG5B,yBAAyB,CAAiB;IACrD6B,QAAQ,EAAE,aAAc;AAChC,cAAcP,mBAAmB,CAACQ,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACF,QAAQ,CAAC,CAACG,IAAI,CAAC,IAAI,CAAC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkBV,mBAAmB,CAACQ,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACZ,MAAM,CAAC,CAACa,IAAI,CAAC,IAAI,CAAC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkBR,sBAAsB,CAACS,kBAAkB,CAAC,CAAC;AAC7D;AACA;AACA;AACA,kBAAkBP,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;IACDQ,SAAS,EAAE;MACPC,KAAK,EAAE;QACHC,aAAa,EAAE,MAAAA,CAAA,MAAa,CAAC,CAAC;MAClC,CAAC;MACDC,QAAQ,EAAE;QACND,aAAa,EAAE,MAAAA,CAAA,MAAa,CAAC,CAAC;MAClC,CAAC;MACDE,kBAAkB,EAAE;QAChB,MAAMC,aAAaA,CAACC,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAE;UAClC,OAAO5C,OAAO,CAAC,YAAY;YACvB,MAAMM,gBAAgB,CAACsC,OAAO,CAAC;YAC/B,MAAMC,OAAO,GAAGD,OAAO,CAACE,SAAS,CAAC9C,OAAO,CAACO,oBAAoB,CAAC;YAC/D,MAAMwC,MAAM,GAAG,MAAMF,OAAO,CAACG,OAAO,CAAC;cACjCC,EAAE,EAAEN,IAAI,CA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","ignoreList":[]}
package/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
+ import type { ApiCoreContext } from "@webiny/api-core/types/core.js";
1
2
  import { ContextPlugin } from "@webiny/api";
2
- import type { Context } from "./types";
3
3
  export interface ICreateContextPluginParams {
4
4
  /**
5
- * A number of seconds after last activity to wait before the record is automatically unlocked.
5
+ * A number of seconds after the last activity to wait before the record is automatically unlocked.
6
6
  */
7
7
  timeout?: number;
8
8
  }
9
- export declare const createRecordLocking: (params?: ICreateContextPluginParams) => ContextPlugin<Context>[];
9
+ export declare const createRecordLocking: (params?: ICreateContextPluginParams) => ContextPlugin<ApiCoreContext>[];
package/index.js CHANGED
@@ -1,39 +1,63 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createRecordLocking = void 0;
7
- var _schema = require("./graphql/schema");
8
- var _api = require("@webiny/api");
9
- var _crud = require("./crud/crud");
10
- var _model = require("./crud/model");
11
- var _apiHeadlessCms = require("@webiny/api-headless-cms");
1
+ import { ContextPlugin } from "@webiny/api";
2
+ import { WcpContext } from "@webiny/api-core/features/wcp/WcpContext/index.js";
3
+ import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels";
4
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel";
5
+ import { RecordLockingModel, RECORD_LOCKING_MODEL_ID } from "./domain/RecordLockingModel.js";
6
+ import { getTimeout } from "./utils/getTimeout.js";
7
+ import { RecordLockingFeature } from "./features/RecordLockingFeature.js";
8
+ import { createGraphQLSchema } from "./graphql/schema.js";
9
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
10
+ import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
11
+ import { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/exports/api/cms/graphql.js";
12
12
  const createContextPlugin = params => {
13
- const plugin = new _api.ContextPlugin(async context => {
14
- if (!context.wcp.canUseRecordLocking()) {
15
- return;
16
- }
17
- const ready = await (0, _apiHeadlessCms.isHeadlessCmsReady)(context);
18
- if (!ready) {
13
+ const plugin = new ContextPlugin(async context => {
14
+ const tenantContext = context.container.resolve(TenantContext);
15
+ const identityContext = context.container.resolve(IdentityContext);
16
+ const wcp = context.container.resolve(WcpContext);
17
+ const getModel = context.container.resolve(GetModelUseCase);
18
+ const listModels = context.container.resolve(ListModelsUseCase);
19
+ if (!wcp.canUseRecordLocking() || !tenantContext.getTenant()) {
19
20
  return;
20
21
  }
21
- context.plugins.register((0, _model.createLockingModel)());
22
- context.recordLocking = await (0, _crud.createRecordLockingCrud)({
23
- context,
24
- timeout: params?.timeout
22
+
23
+ // Register the private model
24
+ context.container.register(RecordLockingModel);
25
+
26
+ // Determine timeout value
27
+ const timeout = getTimeout(params?.timeout);
28
+
29
+ // Fetch CMS model to use for storing record locking data
30
+ const [model, publicModels] = await identityContext.withoutAuthorization(async () => {
31
+ const [model, publicModels] = await Promise.all([
32
+ // Get a record locking model
33
+ getModel.execute(RECORD_LOCKING_MODEL_ID),
34
+ // Get all models
35
+ listModels.execute({
36
+ includePrivate: false
37
+ })]);
38
+ return [model.value, publicModels.value];
25
39
  });
26
- const graphQlPlugin = await (0, _schema.createGraphQLSchema)({
27
- context
40
+ const fieldRegistry = context.container.resolve(CmsModelFieldToGraphQLRegistry);
41
+
42
+ // Register GraphQL schema plugin
43
+ const graphQlPlugin = await createGraphQLSchema({
44
+ model,
45
+ models: publicModels,
46
+ fieldRegistry
28
47
  });
29
48
  context.plugins.register(graphQlPlugin);
49
+
50
+ // Register features
51
+ RecordLockingFeature.register(context.container, {
52
+ timeout,
53
+ model
54
+ });
30
55
  });
31
56
  plugin.name = "context.recordLocking";
32
57
  return plugin;
33
58
  };
34
- const createRecordLocking = params => {
59
+ export const createRecordLocking = params => {
35
60
  return [createContextPlugin(params)];
36
61
  };
37
- exports.createRecordLocking = createRecordLocking;
38
62
 
39
63
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["_schema","require","_api","_crud","_model","_apiHeadlessCms","createContextPlugin","params","plugin","ContextPlugin","context","wcp","canUseRecordLocking","ready","isHeadlessCmsReady","plugins","register","createLockingModel","recordLocking","createRecordLockingCrud","timeout","graphQlPlugin","createGraphQLSchema","name","createRecordLocking","exports"],"sources":["index.ts"],"sourcesContent":["import { createGraphQLSchema } from \"~/graphql/schema\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport type { Context } from \"~/types\";\nimport { createRecordLockingCrud } from \"~/crud/crud\";\nimport { createLockingModel } from \"~/crud/model\";\nimport { isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\n\nexport interface ICreateContextPluginParams {\n /**\n * A number of seconds after last activity to wait before the record is automatically unlocked.\n */\n timeout?: number;\n}\n\nconst createContextPlugin = (params?: ICreateContextPluginParams) => {\n const plugin = new ContextPlugin<Context>(async context => {\n if (!context.wcp.canUseRecordLocking()) {\n return;\n }\n\n const ready = await isHeadlessCmsReady(context);\n if (!ready) {\n return;\n }\n context.plugins.register(createLockingModel());\n\n context.recordLocking = await createRecordLockingCrud({\n context,\n timeout: params?.timeout\n });\n\n const graphQlPlugin = await createGraphQLSchema({ context });\n context.plugins.register(graphQlPlugin);\n });\n plugin.name = \"context.recordLocking\";\n\n return plugin;\n};\n\nexport const createRecordLocking = (params?: ICreateContextPluginParams) => {\n return [createContextPlugin(params)];\n};\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,IAAA,GAAAD,OAAA;AAEA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,eAAA,GAAAJ,OAAA;AASA,MAAMK,mBAAmB,GAAIC,MAAmC,IAAK;EACjE,MAAMC,MAAM,GAAG,IAAIC,kBAAa,CAAU,MAAMC,OAAO,IAAI;IACvD,IAAI,CAACA,OAAO,CAACC,GAAG,CAACC,mBAAmB,CAAC,CAAC,EAAE;MACpC;IACJ;IAEA,MAAMC,KAAK,GAAG,MAAM,IAAAC,kCAAkB,EAACJ,OAAO,CAAC;IAC/C,IAAI,CAACG,KAAK,EAAE;MACR;IACJ;IACAH,OAAO,CAACK,OAAO,CAACC,QAAQ,CAAC,IAAAC,yBAAkB,EAAC,CAAC,CAAC;IAE9CP,OAAO,CAACQ,aAAa,GAAG,MAAM,IAAAC,6BAAuB,EAAC;MAClDT,OAAO;MACPU,OAAO,EAAEb,MAAM,EAAEa;IACrB,CAAC,CAAC;IAEF,MAAMC,aAAa,GAAG,MAAM,IAAAC,2BAAmB,EAAC;MAAEZ;IAAQ,CAAC,CAAC;IAC5DA,OAAO,CAACK,OAAO,CAACC,QAAQ,CAACK,aAAa,CAAC;EAC3C,CAAC,CAAC;EACFb,MAAM,CAACe,IAAI,GAAG,uBAAuB;EAErC,OAAOf,MAAM;AACjB,CAAC;AAEM,MAAMgB,mBAAmB,GAAIjB,MAAmC,IAAK;EACxE,OAAO,CAACD,mBAAmB,CAACC,MAAM,CAAC,CAAC;AACxC,CAAC;AAACkB,OAAA,CAAAD,mBAAA,GAAAA,mBAAA","ignoreList":[]}
1
+ {"version":3,"names":["ContextPlugin","WcpContext","ListModelsUseCase","GetModelUseCase","RecordLockingModel","RECORD_LOCKING_MODEL_ID","getTimeout","RecordLockingFeature","createGraphQLSchema","IdentityContext","TenantContext","CmsModelFieldToGraphQLRegistry","createContextPlugin","params","plugin","context","tenantContext","container","resolve","identityContext","wcp","getModel","listModels","canUseRecordLocking","getTenant","register","timeout","model","publicModels","withoutAuthorization","Promise","all","execute","includePrivate","value","fieldRegistry","graphQlPlugin","models","plugins","name","createRecordLocking"],"sources":["index.ts"],"sourcesContent":["import type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport { WcpContext } from \"@webiny/api-core/features/wcp/WcpContext/index.js\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel\";\nimport { RecordLockingModel, RECORD_LOCKING_MODEL_ID } from \"~/domain/RecordLockingModel.js\";\nimport { getTimeout } from \"~/utils/getTimeout.js\";\nimport { RecordLockingFeature } from \"~/features/RecordLockingFeature.js\";\nimport { createGraphQLSchema } from \"~/graphql/schema.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"@webiny/api-headless-cms/exports/api/cms/graphql.js\";\n\nexport interface ICreateContextPluginParams {\n /**\n * A number of seconds after the last activity to wait before the record is automatically unlocked.\n */\n timeout?: number;\n}\n\nconst createContextPlugin = (params?: ICreateContextPluginParams) => {\n const plugin = new ContextPlugin<ApiCoreContext>(async context => {\n const tenantContext = context.container.resolve(TenantContext);\n const identityContext = context.container.resolve(IdentityContext);\n const wcp = context.container.resolve(WcpContext);\n const getModel = context.container.resolve(GetModelUseCase);\n const listModels = context.container.resolve(ListModelsUseCase);\n\n if (!wcp.canUseRecordLocking() || !tenantContext.getTenant()) {\n return;\n }\n\n // Register the private model\n context.container.register(RecordLockingModel);\n\n // Determine timeout value\n const timeout = getTimeout(params?.timeout);\n\n // Fetch CMS model to use for storing record locking data\n const [model, publicModels] = await identityContext.withoutAuthorization(async () => {\n const [model, publicModels] = await Promise.all([\n // Get a record locking model\n getModel.execute(RECORD_LOCKING_MODEL_ID),\n // Get all models\n listModels.execute({ includePrivate: false })\n ]);\n\n return [model.value, publicModels.value];\n });\n\n const fieldRegistry = context.container.resolve(CmsModelFieldToGraphQLRegistry);\n\n // Register GraphQL schema plugin\n const graphQlPlugin = await createGraphQLSchema({\n model,\n models: publicModels,\n fieldRegistry\n });\n\n context.plugins.register(graphQlPlugin);\n\n // Register features\n RecordLockingFeature.register(context.container, {\n timeout,\n model\n });\n });\n plugin.name = \"context.recordLocking\";\n\n return plugin;\n};\n\nexport const createRecordLocking = (params?: ICreateContextPluginParams) => {\n return [createContextPlugin(params)];\n};\n"],"mappings":"AACA,SAASA,aAAa,QAAQ,aAAa;AAC3C,SAASC,UAAU,QAAQ,mDAAmD;AAC9E,SAASC,iBAAiB,QAAQ,2DAA2D;AAC7F,SAASC,eAAe,QAAQ,yDAAyD;AACzF,SAASC,kBAAkB,EAAEC,uBAAuB;AACpD,SAASC,UAAU;AACnB,SAASC,oBAAoB;AAC7B,SAASC,mBAAmB;AAC5B,SAASC,eAAe,QAAQ,6DAA6D;AAC7F,SAASC,aAAa,QAAQ,0DAA0D;AACxF,SAASC,8BAA8B,QAAQ,qDAAqD;AASpG,MAAMC,mBAAmB,GAAIC,MAAmC,IAAK;EACjE,MAAMC,MAAM,GAAG,IAAId,aAAa,CAAiB,MAAMe,OAAO,IAAI;IAC9D,MAAMC,aAAa,GAAGD,OAAO,CAACE,SAAS,CAACC,OAAO,CAACR,aAAa,CAAC;IAC9D,MAAMS,eAAe,GAAGJ,OAAO,CAACE,SAAS,CAACC,OAAO,CAACT,eAAe,CAAC;IAClE,MAAMW,GAAG,GAAGL,OAAO,CAACE,SAAS,CAACC,OAAO,CAACjB,UAAU,CAAC;IACjD,MAAMoB,QAAQ,GAAGN,OAAO,CAACE,SAAS,CAACC,OAAO,CAACf,eAAe,CAAC;IAC3D,MAAMmB,UAAU,GAAGP,OAAO,CAACE,SAAS,CAACC,OAAO,CAAChB,iBAAiB,CAAC;IAE/D,IAAI,CAACkB,GAAG,CAACG,mBAAmB,CAAC,CAAC,IAAI,CAACP,aAAa,CAACQ,SAAS,CAAC,CAAC,EAAE;MAC1D;IACJ;;IAEA;IACAT,OAAO,CAACE,SAAS,CAACQ,QAAQ,CAACrB,kBAAkB,CAAC;;IAE9C;IACA,MAAMsB,OAAO,GAAGpB,UAAU,CAACO,MAAM,EAAEa,OAAO,CAAC;;IAE3C;IACA,MAAM,CAACC,KAAK,EAAEC,YAAY,CAAC,GAAG,MAAMT,eAAe,CAACU,oBAAoB,CAAC,YAAY;MACjF,MAAM,CAACF,KAAK,EAAEC,YAAY,CAAC,GAAG,MAAME,OAAO,CAACC,GAAG,CAAC;MAC5C;MACAV,QAAQ,CAACW,OAAO,CAAC3B,uBAAuB,CAAC;MACzC;MACAiB,UAAU,CAACU,OAAO,CAAC;QAAEC,cAAc,EAAE;MAAM,CAAC,CAAC,CAChD,CAAC;MAEF,OAAO,CAACN,KAAK,CAACO,KAAK,EAAEN,YAAY,CAACM,KAAK,CAAC;IAC5C,CAAC,CAAC;IAEF,MAAMC,aAAa,GAAGpB,OAAO,CAACE,SAAS,CAACC,OAAO,CAACP,8BAA8B,CAAC;;IAE/E;IACA,MAAMyB,aAAa,GAAG,MAAM5B,mBAAmB,CAAC;MAC5CmB,KAAK;MACLU,MAAM,EAAET,YAAY;MACpBO;IACJ,CAAC,CAAC;IAEFpB,OAAO,CAACuB,OAAO,CAACb,QAAQ,CAACW,aAAa,CAAC;;IAEvC;IACA7B,oBAAoB,CAACkB,QAAQ,CAACV,OAAO,CAACE,SAAS,EAAE;MAC7CS,OAAO;MACPC;IACJ,CAAC,CAAC;EACN,CAAC,CAAC;EACFb,MAAM,CAACyB,IAAI,GAAG,uBAAuB;EAErC,OAAOzB,MAAM;AACjB,CAAC;AAED,OAAO,MAAM0B,mBAAmB,GAAI3B,MAAmC,IAAK;EACxE,OAAO,CAACD,mBAAmB,CAACC,MAAM,CAAC,CAAC;AACxC,CAAC","ignoreList":[]}
package/package.json CHANGED
@@ -1,7 +1,11 @@
1
1
  {
2
2
  "name": "@webiny/api-record-locking",
3
- "version": "0.0.0-unstable.e53eceafb5",
4
- "main": "index.js",
3
+ "version": "0.0.0-unstable.e6f0dc8ca7",
4
+ "type": "module",
5
+ "exports": {
6
+ ".": "./index.js",
7
+ "./*": "./*"
8
+ },
5
9
  "repository": {
6
10
  "type": "git",
7
11
  "url": "https://github.com/webiny/webiny-js.git"
@@ -12,35 +16,30 @@
12
16
  ],
13
17
  "license": "MIT",
14
18
  "dependencies": {
15
- "@webiny/api": "0.0.0-unstable.e53eceafb5",
16
- "@webiny/api-headless-cms": "0.0.0-unstable.e53eceafb5",
17
- "@webiny/api-websockets": "0.0.0-unstable.e53eceafb5",
18
- "@webiny/error": "0.0.0-unstable.e53eceafb5",
19
- "@webiny/handler": "0.0.0-unstable.e53eceafb5",
20
- "@webiny/handler-aws": "0.0.0-unstable.e53eceafb5",
21
- "@webiny/handler-graphql": "0.0.0-unstable.e53eceafb5",
22
- "@webiny/plugins": "0.0.0-unstable.e53eceafb5",
23
- "@webiny/pubsub": "0.0.0-unstable.e53eceafb5",
24
- "@webiny/utils": "0.0.0-unstable.e53eceafb5"
19
+ "@webiny/api": "0.0.0-unstable.e6f0dc8ca7",
20
+ "@webiny/api-headless-cms": "0.0.0-unstable.e6f0dc8ca7",
21
+ "@webiny/api-websockets": "0.0.0-unstable.e6f0dc8ca7",
22
+ "@webiny/feature": "0.0.0-unstable.e6f0dc8ca7",
23
+ "@webiny/handler": "0.0.0-unstable.e6f0dc8ca7",
24
+ "@webiny/handler-aws": "0.0.0-unstable.e6f0dc8ca7",
25
+ "@webiny/handler-graphql": "0.0.0-unstable.e6f0dc8ca7",
26
+ "@webiny/plugins": "0.0.0-unstable.e6f0dc8ca7",
27
+ "@webiny/utils": "0.0.0-unstable.e6f0dc8ca7"
25
28
  },
26
29
  "devDependencies": {
27
- "@webiny/api-i18n": "0.0.0-unstable.e53eceafb5",
28
- "@webiny/api-security": "0.0.0-unstable.e53eceafb5",
29
- "@webiny/api-tenancy": "0.0.0-unstable.e53eceafb5",
30
- "@webiny/api-wcp": "0.0.0-unstable.e53eceafb5",
31
- "@webiny/project-utils": "0.0.0-unstable.e53eceafb5",
32
- "graphql": "15.9.0",
33
- "rimraf": "6.0.1",
34
- "type-fest": "4.14.0",
35
- "typescript": "5.3.3"
30
+ "@webiny/api-core": "0.0.0-unstable.e6f0dc8ca7",
31
+ "@webiny/build-tools": "0.0.0-unstable.e6f0dc8ca7",
32
+ "@webiny/project-utils": "0.0.0-unstable.e6f0dc8ca7",
33
+ "@webiny/wcp": "0.0.0-unstable.e6f0dc8ca7",
34
+ "graphql": "16.14.0",
35
+ "rimraf": "6.1.3",
36
+ "type-fest": "5.6.0",
37
+ "typescript": "6.0.3",
38
+ "vitest": "4.1.5"
36
39
  },
37
40
  "publishConfig": {
38
41
  "access": "public",
39
42
  "directory": "dist"
40
43
  },
41
- "scripts": {
42
- "build": "node ../cli/bin.js run build",
43
- "watch": "node ../cli/bin.js run watch"
44
- },
45
- "gitHead": "e53eceafb5ce1a3872c9b4548939bb2eae5b1aef"
44
+ "gitHead": "e6f0dc8ca741c1fcc3fec9a5b9e86fdd49544641"
46
45
  }