@webiny/api-record-locking 0.0.0-unstable.a4637c5ce6 → 0.0.0-unstable.a4f3e4ea8b

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 (285) hide show
  1. package/README.md +10 -9
  2. package/domain/LockRecord.d.ts +45 -0
  3. package/domain/LockRecord.js +73 -0
  4. package/domain/LockRecord.js.map +1 -0
  5. package/domain/RecordLockingModel.d.ts +9 -0
  6. package/domain/RecordLockingModel.js +32 -0
  7. package/domain/RecordLockingModel.js.map +1 -0
  8. package/domain/abstractions.d.ts +18 -0
  9. package/domain/abstractions.js +6 -0
  10. package/domain/abstractions.js.map +1 -0
  11. package/domain/calculateExpiresOn.d.ts +1 -0
  12. package/domain/calculateExpiresOn.js +8 -0
  13. package/domain/calculateExpiresOn.js.map +1 -0
  14. package/domain/errors.d.ts +71 -0
  15. package/domain/errors.js +85 -0
  16. package/domain/errors.js.map +1 -0
  17. package/domain/index.d.ts +4 -0
  18. package/domain/index.js +4 -0
  19. package/domain/types.d.ts +44 -0
  20. package/domain/types.js +9 -0
  21. package/domain/types.js.map +1 -0
  22. package/features/GetLockRecord/GetLockRecordRepository.d.ts +16 -0
  23. package/features/GetLockRecord/GetLockRecordRepository.js +40 -0
  24. package/features/GetLockRecord/GetLockRecordRepository.js.map +1 -0
  25. package/features/GetLockRecord/GetLockRecordUseCase.d.ts +12 -0
  26. package/features/GetLockRecord/GetLockRecordUseCase.js +18 -0
  27. package/features/GetLockRecord/GetLockRecordUseCase.js.map +1 -0
  28. package/features/GetLockRecord/abstractions.d.ts +41 -0
  29. package/features/GetLockRecord/abstractions.js +6 -0
  30. package/features/GetLockRecord/abstractions.js.map +1 -0
  31. package/features/GetLockRecord/feature.d.ts +4 -0
  32. package/features/GetLockRecord/feature.js +13 -0
  33. package/features/GetLockRecord/feature.js.map +1 -0
  34. package/features/GetLockRecord/index.d.ts +2 -0
  35. package/features/GetLockRecord/index.js +2 -0
  36. package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.d.ts +15 -0
  37. package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js +30 -0
  38. package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js.map +1 -0
  39. package/features/GetLockedEntryLockRecord/abstractions.d.ts +26 -0
  40. package/features/GetLockedEntryLockRecord/abstractions.js +5 -0
  41. package/features/GetLockedEntryLockRecord/abstractions.js.map +1 -0
  42. package/features/GetLockedEntryLockRecord/feature.d.ts +4 -0
  43. package/features/GetLockedEntryLockRecord/feature.js +11 -0
  44. package/features/GetLockedEntryLockRecord/feature.js.map +1 -0
  45. package/features/GetLockedEntryLockRecord/index.d.ts +2 -0
  46. package/features/GetLockedEntryLockRecord/index.js +2 -0
  47. package/features/IsEntryLocked/IsEntryLockedUseCase.d.ts +14 -0
  48. package/features/IsEntryLocked/IsEntryLockedUseCase.js +33 -0
  49. package/features/IsEntryLocked/IsEntryLockedUseCase.js.map +1 -0
  50. package/features/IsEntryLocked/abstractions.d.ts +24 -0
  51. package/features/IsEntryLocked/abstractions.js +5 -0
  52. package/features/IsEntryLocked/abstractions.js.map +1 -0
  53. package/features/IsEntryLocked/feature.d.ts +4 -0
  54. package/features/IsEntryLocked/feature.js +11 -0
  55. package/features/IsEntryLocked/feature.js.map +1 -0
  56. package/features/IsEntryLocked/index.d.ts +1 -0
  57. package/features/IsEntryLocked/index.js +1 -0
  58. package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.d.ts +15 -0
  59. package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.js +36 -0
  60. package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.js.map +1 -0
  61. package/features/KickOutCurrentUser/abstractions.d.ts +17 -0
  62. package/features/KickOutCurrentUser/abstractions.js +5 -0
  63. package/features/KickOutCurrentUser/abstractions.js.map +1 -0
  64. package/features/KickOutCurrentUser/feature.d.ts +4 -0
  65. package/features/KickOutCurrentUser/feature.js +11 -0
  66. package/features/KickOutCurrentUser/feature.js.map +1 -0
  67. package/features/KickOutCurrentUser/index.d.ts +1 -0
  68. package/features/KickOutCurrentUser/index.js +1 -0
  69. package/features/ListAllLockRecords/ListAllLockRecordsRepository.d.ts +18 -0
  70. package/features/ListAllLockRecords/ListAllLockRecordsRepository.js +49 -0
  71. package/features/ListAllLockRecords/ListAllLockRecordsRepository.js.map +1 -0
  72. package/features/ListAllLockRecords/ListAllLockRecordsUseCase.d.ts +11 -0
  73. package/features/ListAllLockRecords/ListAllLockRecordsUseCase.js +18 -0
  74. package/features/ListAllLockRecords/ListAllLockRecordsUseCase.js.map +1 -0
  75. package/features/ListAllLockRecords/abstractions.d.ts +40 -0
  76. package/features/ListAllLockRecords/abstractions.js +6 -0
  77. package/features/ListAllLockRecords/abstractions.js.map +1 -0
  78. package/features/ListAllLockRecords/feature.d.ts +4 -0
  79. package/features/ListAllLockRecords/feature.js +13 -0
  80. package/features/ListAllLockRecords/feature.js.map +1 -0
  81. package/features/ListAllLockRecords/index.d.ts +2 -0
  82. package/features/ListAllLockRecords/index.js +2 -0
  83. package/features/ListLockRecords/ListLockRecordsRepository.d.ts +17 -0
  84. package/features/ListLockRecords/ListLockRecordsRepository.js +49 -0
  85. package/features/ListLockRecords/ListLockRecordsRepository.js.map +1 -0
  86. package/features/ListLockRecords/ListLockRecordsUseCase.d.ts +15 -0
  87. package/features/ListLockRecords/ListLockRecordsUseCase.js +33 -0
  88. package/features/ListLockRecords/ListLockRecordsUseCase.js.map +1 -0
  89. package/features/ListLockRecords/abstractions.d.ts +45 -0
  90. package/features/ListLockRecords/abstractions.js +6 -0
  91. package/features/ListLockRecords/abstractions.js.map +1 -0
  92. package/features/ListLockRecords/feature.d.ts +4 -0
  93. package/features/ListLockRecords/feature.js +13 -0
  94. package/features/ListLockRecords/feature.js.map +1 -0
  95. package/features/ListLockRecords/index.d.ts +1 -0
  96. package/features/ListLockRecords/index.js +1 -0
  97. package/features/LockEntry/LockEntryEventsDecorator.d.ts +14 -0
  98. package/features/LockEntry/LockEntryEventsDecorator.js +40 -0
  99. package/features/LockEntry/LockEntryEventsDecorator.js.map +1 -0
  100. package/features/LockEntry/LockEntryRepository.d.ts +16 -0
  101. package/features/LockEntry/LockEntryRepository.js +45 -0
  102. package/features/LockEntry/LockEntryRepository.js.map +1 -0
  103. package/features/LockEntry/LockEntryUseCase.d.ts +14 -0
  104. package/features/LockEntry/LockEntryUseCase.js +31 -0
  105. package/features/LockEntry/LockEntryUseCase.js.map +1 -0
  106. package/features/LockEntry/abstractions.d.ts +41 -0
  107. package/features/LockEntry/abstractions.js +6 -0
  108. package/features/LockEntry/abstractions.js.map +1 -0
  109. package/features/LockEntry/events.d.ts +45 -0
  110. package/features/LockEntry/events.js +32 -0
  111. package/features/LockEntry/events.js.map +1 -0
  112. package/features/LockEntry/feature.d.ts +4 -0
  113. package/features/LockEntry/feature.js +15 -0
  114. package/features/LockEntry/feature.js.map +1 -0
  115. package/features/LockEntry/index.d.ts +1 -0
  116. package/features/LockEntry/index.js +1 -0
  117. package/features/RecordLockingFeature.d.ts +15 -0
  118. package/features/RecordLockingFeature.js +34 -0
  119. package/features/RecordLockingFeature.js.map +1 -0
  120. package/features/UnlockEntry/UnlockEntryEventsDecorator.d.ts +14 -0
  121. package/features/UnlockEntry/UnlockEntryEventsDecorator.js +41 -0
  122. package/features/UnlockEntry/UnlockEntryEventsDecorator.js.map +1 -0
  123. package/features/UnlockEntry/UnlockEntryRepository.d.ts +14 -0
  124. package/features/UnlockEntry/UnlockEntryRepository.js +42 -0
  125. package/features/UnlockEntry/UnlockEntryRepository.js.map +1 -0
  126. package/features/UnlockEntry/UnlockEntryUseCase.d.ts +18 -0
  127. package/features/UnlockEntry/UnlockEntryUseCase.js +65 -0
  128. package/features/UnlockEntry/UnlockEntryUseCase.js.map +1 -0
  129. package/features/UnlockEntry/abstractions.d.ts +44 -0
  130. package/features/UnlockEntry/abstractions.js +6 -0
  131. package/features/UnlockEntry/abstractions.js.map +1 -0
  132. package/features/UnlockEntry/events.d.ts +46 -0
  133. package/features/UnlockEntry/events.js +32 -0
  134. package/features/UnlockEntry/events.js.map +1 -0
  135. package/features/UnlockEntry/feature.d.ts +4 -0
  136. package/features/UnlockEntry/feature.js +15 -0
  137. package/features/UnlockEntry/feature.js.map +1 -0
  138. package/features/UnlockEntry/hasFullAccessPermission.d.ts +2 -0
  139. package/features/UnlockEntry/hasFullAccessPermission.js +9 -0
  140. package/features/UnlockEntry/hasFullAccessPermission.js.map +1 -0
  141. package/features/UnlockEntry/index.d.ts +1 -0
  142. package/features/UnlockEntry/index.js +1 -0
  143. package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.d.ts +14 -0
  144. package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.js +40 -0
  145. package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.js.map +1 -0
  146. package/features/UnlockEntryRequest/UnlockEntryRequestRepository.d.ts +17 -0
  147. package/features/UnlockEntryRequest/UnlockEntryRequestRepository.js +44 -0
  148. package/features/UnlockEntryRequest/UnlockEntryRequestRepository.js.map +1 -0
  149. package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.d.ts +16 -0
  150. package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.js +75 -0
  151. package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.js.map +1 -0
  152. package/features/UnlockEntryRequest/abstractions.d.ts +42 -0
  153. package/features/UnlockEntryRequest/abstractions.js +6 -0
  154. package/features/UnlockEntryRequest/abstractions.js.map +1 -0
  155. package/features/UnlockEntryRequest/events.d.ts +45 -0
  156. package/features/UnlockEntryRequest/events.js +32 -0
  157. package/features/UnlockEntryRequest/events.js.map +1 -0
  158. package/features/UnlockEntryRequest/feature.d.ts +4 -0
  159. package/features/UnlockEntryRequest/feature.js +15 -0
  160. package/features/UnlockEntryRequest/feature.js.map +1 -0
  161. package/features/UnlockEntryRequest/index.d.ts +3 -0
  162. package/features/UnlockEntryRequest/index.js +3 -0
  163. package/features/UpdateEntryLock/UpdateEntryLockRepository.d.ts +20 -0
  164. package/features/UpdateEntryLock/UpdateEntryLockRepository.js +60 -0
  165. package/features/UpdateEntryLock/UpdateEntryLockRepository.js.map +1 -0
  166. package/features/UpdateEntryLock/UpdateEntryLockUseCase.d.ts +18 -0
  167. package/features/UpdateEntryLock/UpdateEntryLockUseCase.js +51 -0
  168. package/features/UpdateEntryLock/UpdateEntryLockUseCase.js.map +1 -0
  169. package/features/UpdateEntryLock/abstractions.d.ts +42 -0
  170. package/features/UpdateEntryLock/abstractions.js +6 -0
  171. package/features/UpdateEntryLock/abstractions.js.map +1 -0
  172. package/features/UpdateEntryLock/feature.d.ts +4 -0
  173. package/features/UpdateEntryLock/feature.js +13 -0
  174. package/features/UpdateEntryLock/feature.js.map +1 -0
  175. package/features/UpdateEntryLock/index.d.ts +1 -0
  176. package/features/UpdateEntryLock/index.js +1 -0
  177. package/graphql/checkPermissions.d.ts +5 -0
  178. package/graphql/checkPermissions.js +10 -0
  179. package/graphql/checkPermissions.js.map +1 -0
  180. package/{utils → graphql}/resolve.d.ts +2 -2
  181. package/graphql/resolve.js +20 -0
  182. package/graphql/resolve.js.map +1 -0
  183. package/graphql/schema.d.ts +7 -3
  184. package/graphql/schema.js +162 -145
  185. package/graphql/schema.js.map +1 -1
  186. package/index.d.ts +3 -3
  187. package/index.js +55 -34
  188. package/index.js.map +1 -1
  189. package/package.json +29 -28
  190. package/types.d.ts +3 -132
  191. package/types.js +6 -27
  192. package/types.js.map +1 -1
  193. package/utils/convertWhereCondition.d.ts +1 -1
  194. package/utils/convertWhereCondition.js +21 -36
  195. package/utils/convertWhereCondition.js.map +1 -1
  196. package/utils/getTimeout.js +8 -22
  197. package/utils/getTimeout.js.map +1 -1
  198. package/utils/lockRecordDatabaseId.js +7 -20
  199. package/utils/lockRecordDatabaseId.js.map +1 -1
  200. package/abstractions/IGetLockRecordUseCase.d.ts +0 -8
  201. package/abstractions/IGetLockRecordUseCase.js +0 -7
  202. package/abstractions/IGetLockRecordUseCase.js.map +0 -1
  203. package/abstractions/IGetLockedEntryLockRecordUseCase.d.ts +0 -8
  204. package/abstractions/IGetLockedEntryLockRecordUseCase.js +0 -7
  205. package/abstractions/IGetLockedEntryLockRecordUseCase.js.map +0 -1
  206. package/abstractions/IIsEntryLocked.d.ts +0 -8
  207. package/abstractions/IIsEntryLocked.js +0 -7
  208. package/abstractions/IIsEntryLocked.js.map +0 -1
  209. package/abstractions/IKickOutCurrentUserUseCase.d.ts +0 -5
  210. package/abstractions/IKickOutCurrentUserUseCase.js +0 -7
  211. package/abstractions/IKickOutCurrentUserUseCase.js.map +0 -1
  212. package/abstractions/IListAllLockRecordsUseCase.d.ts +0 -9
  213. package/abstractions/IListAllLockRecordsUseCase.js +0 -7
  214. package/abstractions/IListAllLockRecordsUseCase.js.map +0 -1
  215. package/abstractions/IListLockRecordsUseCase.d.ts +0 -10
  216. package/abstractions/IListLockRecordsUseCase.js +0 -7
  217. package/abstractions/IListLockRecordsUseCase.js.map +0 -1
  218. package/abstractions/ILockEntryUseCase.d.ts +0 -11
  219. package/abstractions/ILockEntryUseCase.js +0 -7
  220. package/abstractions/ILockEntryUseCase.js.map +0 -1
  221. package/abstractions/IUnlockEntryRequestUseCase.d.ts +0 -11
  222. package/abstractions/IUnlockEntryRequestUseCase.js +0 -7
  223. package/abstractions/IUnlockEntryRequestUseCase.js.map +0 -1
  224. package/abstractions/IUnlockEntryUseCase.d.ts +0 -12
  225. package/abstractions/IUnlockEntryUseCase.js +0 -7
  226. package/abstractions/IUnlockEntryUseCase.js.map +0 -1
  227. package/abstractions/IUpdateEntryLockUseCase.d.ts +0 -11
  228. package/abstractions/IUpdateEntryLockUseCase.js +0 -7
  229. package/abstractions/IUpdateEntryLockUseCase.js.map +0 -1
  230. package/crud/crud.d.ts +0 -7
  231. package/crud/crud.js +0 -204
  232. package/crud/crud.js.map +0 -1
  233. package/crud/model.d.ts +0 -2
  234. package/crud/model.js +0 -127
  235. package/crud/model.js.map +0 -1
  236. package/useCases/GetLockRecord/GetLockRecordUseCase.d.ts +0 -16
  237. package/useCases/GetLockRecord/GetLockRecordUseCase.js +0 -39
  238. package/useCases/GetLockRecord/GetLockRecordUseCase.js.map +0 -1
  239. package/useCases/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.d.ts +0 -16
  240. package/useCases/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js +0 -29
  241. package/useCases/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js.map +0 -1
  242. package/useCases/IsEntryLocked/IsEntryLockedUseCase.d.ts +0 -13
  243. package/useCases/IsEntryLocked/IsEntryLockedUseCase.js +0 -31
  244. package/useCases/IsEntryLocked/IsEntryLockedUseCase.js.map +0 -1
  245. package/useCases/KickOutCurrentUser/KickOutCurrentUserUseCase.d.ts +0 -12
  246. package/useCases/KickOutCurrentUser/KickOutCurrentUserUseCase.js +0 -46
  247. package/useCases/KickOutCurrentUser/KickOutCurrentUserUseCase.js.map +0 -1
  248. package/useCases/ListAllLockRecordsUseCase/ListAllLockRecordsUseCase.d.ts +0 -13
  249. package/useCases/ListAllLockRecordsUseCase/ListAllLockRecordsUseCase.js +0 -34
  250. package/useCases/ListAllLockRecordsUseCase/ListAllLockRecordsUseCase.js.map +0 -1
  251. package/useCases/ListLockRecordsUseCase/ListLockRecordsUseCase.d.ts +0 -14
  252. package/useCases/ListLockRecordsUseCase/ListLockRecordsUseCase.js +0 -27
  253. package/useCases/ListLockRecordsUseCase/ListLockRecordsUseCase.js.map +0 -1
  254. package/useCases/LockEntryUseCase/LockEntryUseCase.d.ts +0 -21
  255. package/useCases/LockEntryUseCase/LockEntryUseCase.js +0 -64
  256. package/useCases/LockEntryUseCase/LockEntryUseCase.js.map +0 -1
  257. package/useCases/UnlockEntryUseCase/UnlockEntryUseCase.d.ts +0 -23
  258. package/useCases/UnlockEntryUseCase/UnlockEntryUseCase.js +0 -90
  259. package/useCases/UnlockEntryUseCase/UnlockEntryUseCase.js.map +0 -1
  260. package/useCases/UnlockRequestUseCase/UnlockEntryRequestUseCase.d.ts +0 -21
  261. package/useCases/UnlockRequestUseCase/UnlockEntryRequestUseCase.js +0 -82
  262. package/useCases/UnlockRequestUseCase/UnlockEntryRequestUseCase.js.map +0 -1
  263. package/useCases/UpdateEntryLock/UpdateEntryLockUseCase.d.ts +0 -26
  264. package/useCases/UpdateEntryLock/UpdateEntryLockUseCase.js +0 -93
  265. package/useCases/UpdateEntryLock/UpdateEntryLockUseCase.js.map +0 -1
  266. package/useCases/index.d.ts +0 -31
  267. package/useCases/index.js +0 -96
  268. package/useCases/index.js.map +0 -1
  269. package/useCases/types.d.ts +0 -5
  270. package/useCases/types.js +0 -7
  271. package/useCases/types.js.map +0 -1
  272. package/utils/calculateExpiresOn.d.ts +0 -2
  273. package/utils/calculateExpiresOn.js +0 -16
  274. package/utils/calculateExpiresOn.js.map +0 -1
  275. package/utils/checkPermissions.d.ts +0 -7
  276. package/utils/checkPermissions.js +0 -21
  277. package/utils/checkPermissions.js.map +0 -1
  278. package/utils/convertEntryToLockRecord.d.ts +0 -28
  279. package/utils/convertEntryToLockRecord.js +0 -91
  280. package/utils/convertEntryToLockRecord.js.map +0 -1
  281. package/utils/resolve.js +0 -30
  282. package/utils/resolve.js.map +0 -1
  283. package/utils/validateSameIdentity.d.ts +0 -6
  284. package/utils/validateSameIdentity.js +0 -24
  285. package/utils/validateSameIdentity.js.map +0 -1
@@ -0,0 +1,42 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import type { ILockRecord } from "../../domain/LockRecord.js";
3
+ import type { LockRecordEntryType } from "../../domain/types.js";
4
+ import type { LockRecordNotFoundError, LockRecordPersistenceError, IdentityMismatchError, UpdateEntryLockError } from "../../domain/errors.js";
5
+ export interface UpdateEntryLockInput {
6
+ id: string;
7
+ type: LockRecordEntryType;
8
+ }
9
+ /**
10
+ * UpdateEntryLock Use Case - Updates lock timestamp to keep it alive
11
+ */
12
+ export interface IUpdateEntryLockUseCase {
13
+ execute(input: UpdateEntryLockInput): Promise<Result<ILockRecord, UseCaseError>>;
14
+ }
15
+ export interface IUpdateEntryLockUseCaseErrors {
16
+ notFound: LockRecordNotFoundError;
17
+ notSameIdentity: IdentityMismatchError;
18
+ persistence: LockRecordPersistenceError;
19
+ updateError: UpdateEntryLockError;
20
+ }
21
+ type UseCaseError = IUpdateEntryLockUseCaseErrors[keyof IUpdateEntryLockUseCaseErrors];
22
+ export declare const UpdateEntryLockUseCase: import("@webiny/di").Abstraction<IUpdateEntryLockUseCase>;
23
+ export declare namespace UpdateEntryLockUseCase {
24
+ type Interface = IUpdateEntryLockUseCase;
25
+ type Error = UseCaseError;
26
+ }
27
+ /**
28
+ * UpdateEntryLockRepository - Updates lock record in storage
29
+ */
30
+ export interface IUpdateEntryLockRepository {
31
+ update(lockRecordId: string, updateOwner: boolean): Promise<Result<ILockRecord, RepositoryError>>;
32
+ }
33
+ export interface IUpdateEntryLockRepositoryErrors {
34
+ persistence: LockRecordPersistenceError;
35
+ }
36
+ type RepositoryError = IUpdateEntryLockRepositoryErrors[keyof IUpdateEntryLockRepositoryErrors];
37
+ export declare const UpdateEntryLockRepository: import("@webiny/di").Abstraction<IUpdateEntryLockRepository>;
38
+ export declare namespace UpdateEntryLockRepository {
39
+ type Interface = IUpdateEntryLockRepository;
40
+ type Error = RepositoryError;
41
+ }
42
+ export {};
@@ -0,0 +1,6 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const UpdateEntryLockUseCase = createAbstraction("UpdateEntryLockUseCase");
3
+ const UpdateEntryLockRepository = createAbstraction("UpdateEntryLockRepository");
4
+ export { UpdateEntryLockRepository, UpdateEntryLockUseCase };
5
+
6
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/UpdateEntryLock/abstractions.js","sources":["../../../src/features/UpdateEntryLock/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { ILockRecord } from \"~/domain/LockRecord.js\";\nimport type { LockRecordEntryType } from \"~/domain/types.js\";\nimport type {\n LockRecordNotFoundError,\n LockRecordPersistenceError,\n IdentityMismatchError,\n UpdateEntryLockError\n} from \"~/domain/errors.js\";\n\n// Input types\nexport interface UpdateEntryLockInput {\n id: string;\n type: LockRecordEntryType;\n}\n\n/**\n * UpdateEntryLock Use Case - Updates lock timestamp to keep it alive\n */\nexport interface IUpdateEntryLockUseCase {\n execute(input: UpdateEntryLockInput): Promise<Result<ILockRecord, UseCaseError>>;\n}\n\nexport interface IUpdateEntryLockUseCaseErrors {\n notFound: LockRecordNotFoundError;\n notSameIdentity: IdentityMismatchError;\n persistence: LockRecordPersistenceError;\n updateError: UpdateEntryLockError;\n}\n\ntype UseCaseError = IUpdateEntryLockUseCaseErrors[keyof IUpdateEntryLockUseCaseErrors];\n\nexport const UpdateEntryLockUseCase =\n createAbstraction<IUpdateEntryLockUseCase>(\"UpdateEntryLockUseCase\");\n\nexport namespace UpdateEntryLockUseCase {\n export type Interface = IUpdateEntryLockUseCase;\n export type Error = UseCaseError;\n}\n\n/**\n * UpdateEntryLockRepository - Updates lock record in storage\n */\nexport interface IUpdateEntryLockRepository {\n update(\n lockRecordId: string,\n updateOwner: boolean\n ): Promise<Result<ILockRecord, RepositoryError>>;\n}\n\nexport interface IUpdateEntryLockRepositoryErrors {\n persistence: LockRecordPersistenceError;\n}\n\ntype RepositoryError = IUpdateEntryLockRepositoryErrors[keyof IUpdateEntryLockRepositoryErrors];\n\nexport const UpdateEntryLockRepository = createAbstraction<IUpdateEntryLockRepository>(\n \"UpdateEntryLockRepository\"\n);\n\nexport namespace UpdateEntryLockRepository {\n export type Interface = IUpdateEntryLockRepository;\n export type Error = RepositoryError;\n}\n"],"names":["UpdateEntryLockUseCase","createAbstraction","UpdateEntryLockRepository"],"mappings":";AAiCO,MAAMA,yBACTC,kBAA2C;AAuBxC,MAAMC,4BAA4BD,kBACrC"}
@@ -0,0 +1,4 @@
1
+ export declare const UpdateEntryLockFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,13 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { UpdateEntryLockUseCase } from "./UpdateEntryLockUseCase.js";
3
+ import { UpdateEntryLockRepository } from "./UpdateEntryLockRepository.js";
4
+ const UpdateEntryLockFeature = createFeature({
5
+ name: "UpdateEntryLock",
6
+ register (container) {
7
+ container.register(UpdateEntryLockUseCase);
8
+ container.register(UpdateEntryLockRepository).inSingletonScope();
9
+ }
10
+ });
11
+ export { UpdateEntryLockFeature };
12
+
13
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/UpdateEntryLock/feature.js","sources":["../../../src/features/UpdateEntryLock/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { UpdateEntryLockUseCase } from \"./UpdateEntryLockUseCase.js\";\nimport { UpdateEntryLockRepository } from \"./UpdateEntryLockRepository.js\";\n\nexport const UpdateEntryLockFeature = createFeature({\n name: \"UpdateEntryLock\",\n register(container) {\n container.register(UpdateEntryLockUseCase);\n container.register(UpdateEntryLockRepository).inSingletonScope();\n }\n});\n"],"names":["UpdateEntryLockFeature","createFeature","container","UpdateEntryLockUseCase","UpdateEntryLockRepository"],"mappings":";;;AAIO,MAAMA,yBAAyBC,cAAc;IAChD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE,2BAA2B,gBAAgB;IAClE;AACJ"}
@@ -0,0 +1 @@
1
+ export * from "./abstractions.js";
@@ -0,0 +1 @@
1
+ export * from "./abstractions.js";
@@ -0,0 +1,5 @@
1
+ import type { ApiCoreContext } from "@webiny/api-core/types/core.js";
2
+ /**
3
+ * Simple permission check. Only authenticated users can access the websockets API via GraphQL
4
+ */
5
+ export declare const checkPermissions: (context: ApiCoreContext) => Promise<void>;
@@ -0,0 +1,10 @@
1
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
2
+ import { NotAuthorizedError } from "@webiny/api-core/features/security/shared";
3
+ const checkPermissions = async (context)=>{
4
+ const identityContext = context.container.resolve(IdentityContext);
5
+ const identity = identityContext.getIdentity();
6
+ if (identity.isAnonymous()) throw new NotAuthorizedError();
7
+ };
8
+ export { checkPermissions };
9
+
10
+ //# sourceMappingURL=checkPermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql/checkPermissions.js","sources":["../../src/graphql/checkPermissions.ts"],"sourcesContent":["import { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared\";\nimport type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\n\n/**\n * Simple permission check. Only authenticated users can access the websockets API via GraphQL\n */\nexport const checkPermissions = async (context: ApiCoreContext): Promise<void> => {\n const identityContext = context.container.resolve(IdentityContext);\n const identity = identityContext.getIdentity();\n\n if (identity.isAnonymous()) {\n throw new NotAuthorizedError();\n }\n};\n"],"names":["checkPermissions","context","identityContext","IdentityContext","identity","NotAuthorizedError"],"mappings":";;AAOO,MAAMA,mBAAmB,OAAOC;IACnC,MAAMC,kBAAkBD,QAAQ,SAAS,CAAC,OAAO,CAACE;IAClD,MAAMC,WAAWF,gBAAgB,WAAW;IAE5C,IAAIE,SAAS,WAAW,IACpB,MAAM,IAAIC;AAElB"}
@@ -1,8 +1,8 @@
1
1
  import { ErrorResponse, Response } from "@webiny/handler-graphql";
2
- import type { IRecordLockingMeta } from "../types";
2
+ import type { IRecordLockingMeta } from "../types.js";
3
3
  export declare const resolve: <T>(cb: () => Promise<T>) => Promise<Response<T> | ErrorResponse>;
4
4
  export interface IListResponse<T> {
5
5
  items: T[];
6
6
  meta: IRecordLockingMeta;
7
7
  }
8
- export declare const resolveList: <T>(cb: () => Promise<IListResponse<T>>) => Promise<ErrorResponse | Response<T[]>>;
8
+ export declare const resolveList: <T>(cb: () => Promise<IListResponse<T>>) => Promise<Response<T[]> | ErrorResponse>;
@@ -0,0 +1,20 @@
1
+ import { ErrorResponse, ListErrorResponse, ListResponse, Response } from "@webiny/handler-graphql";
2
+ const resolve = async (cb)=>{
3
+ try {
4
+ const result = await cb();
5
+ return new Response(result);
6
+ } catch (ex) {
7
+ return new ErrorResponse(ex);
8
+ }
9
+ };
10
+ const resolveList = async (cb)=>{
11
+ try {
12
+ const { items, meta } = await cb();
13
+ return new ListResponse(items, meta);
14
+ } catch (ex) {
15
+ return new ListErrorResponse(ex);
16
+ }
17
+ };
18
+ export { resolve, resolveList };
19
+
20
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql/resolve.js","sources":["../../src/graphql/resolve.ts"],"sourcesContent":["import { ErrorResponse, ListErrorResponse, ListResponse, Response } from \"@webiny/handler-graphql\";\nimport type { IRecordLockingMeta } from \"~/types.js\";\n\nexport const resolve = async <T>(cb: () => Promise<T>): Promise<Response<T> | ErrorResponse> => {\n try {\n const result = await cb();\n return new Response<T>(result);\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n};\n\nexport interface IListResponse<T> {\n items: T[];\n meta: IRecordLockingMeta;\n}\n\nexport const resolveList = async <T>(\n cb: () => Promise<IListResponse<T>>\n): Promise<Response<T[]> | ErrorResponse> => {\n try {\n const { items, meta } = await cb();\n return new ListResponse(items, meta);\n } catch (ex) {\n return new ListErrorResponse(ex);\n }\n};\n"],"names":["resolve","cb","result","Response","ex","ErrorResponse","resolveList","items","meta","ListResponse","ListErrorResponse"],"mappings":";AAGO,MAAMA,UAAU,OAAUC;IAC7B,IAAI;QACA,MAAMC,SAAS,MAAMD;QACrB,OAAO,IAAIE,SAAYD;IAC3B,EAAE,OAAOE,IAAI;QACT,OAAO,IAAIC,cAAcD;IAC7B;AACJ;AAOO,MAAME,cAAc,OACvBL;IAEA,IAAI;QACA,MAAM,EAAEM,KAAK,EAAEC,IAAI,EAAE,GAAG,MAAMP;QAC9B,OAAO,IAAIQ,aAAaF,OAAOC;IACnC,EAAE,OAAOJ,IAAI;QACT,OAAO,IAAIM,kBAAkBN;IACjC;AACJ"}
@@ -1,7 +1,11 @@
1
- import type { Context } from "../types";
2
1
  import type { IGraphQLSchemaPlugin } from "@webiny/handler-graphql";
2
+ import type { ApiCoreContext } from "@webiny/api-core/types/core.js";
3
+ import { CmsModel } from "@webiny/api-headless-cms/types/model.js";
4
+ import type { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/exports/api/cms/graphql.js";
3
5
  interface Params {
4
- context: Pick<Context, "plugins" | "recordLocking" | "security" | "cms">;
6
+ model: CmsModel;
7
+ models: CmsModel[];
8
+ fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface;
5
9
  }
6
- export declare const createGraphQLSchema: (params: Params) => Promise<IGraphQLSchemaPlugin<Context>>;
10
+ export declare const createGraphQLSchema: (params: Params) => Promise<IGraphQLSchemaPlugin<ApiCoreContext>>;
7
11
  export {};
package/graphql/schema.js CHANGED
@@ -1,53 +1,47 @@
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;
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
+ const createGraphQLSchema = async (params)=>{
17
+ const model = params.model;
18
+ const models = params.models.filter((model)=>model.fields.length > 0);
19
+ const fieldRegistry = params.fieldRegistry;
20
+ const recordLockingFields = renderFields({
21
+ models,
22
+ model,
23
+ fields: model.fields,
24
+ type: "manage",
25
+ fieldRegistry
26
+ });
27
+ const listFilterFieldsRender = renderListFilterFields({
28
+ model,
29
+ fields: model.fields,
30
+ type: "manage",
31
+ fieldRegistry,
32
+ excludeFields: [
33
+ "entryId"
34
+ ]
35
+ });
36
+ const sortEnumRender = renderSortEnum({
37
+ model,
38
+ fields: model.fields,
39
+ fieldRegistry,
40
+ sorters: []
25
41
  });
26
- });
27
- const fieldTypePlugins = (0, _createFieldTypePluginRecords.createFieldTypePluginRecords)(context.plugins);
28
- const recordLockingFields = (0, _renderFields.renderFields)({
29
- models,
30
- model,
31
- fields: model.fields,
32
- type: "manage",
33
- fieldTypePlugins
34
- });
35
- const listFilterFieldsRender = (0, _renderListFilterFields.renderListFilterFields)({
36
- model,
37
- fields: model.fields,
38
- type: "manage",
39
- fieldTypePlugins,
40
- excludeFields: ["entryId"]
41
- });
42
- const sortEnumRender = (0, _renderSortEnum.renderSortEnum)({
43
- model,
44
- fields: model.fields,
45
- fieldTypePlugins,
46
- sorterPlugins: []
47
- });
48
- const plugin = (0, _handlerGraphql.createGraphQLSchemaPlugin)({
49
- typeDefs: /* GraphQL */`
50
- ${recordLockingFields.map(f => f.typeDefs).join("\n")}
42
+ const plugin = createGraphQLSchemaPlugin({
43
+ typeDefs: `
44
+ ${recordLockingFields.map((f)=>f.typeDefs).join("\n")}
51
45
 
52
46
  type RecordLockingError {
53
47
  message: String
@@ -82,7 +76,7 @@ const createGraphQLSchema = async params => {
82
76
  lockedOn: DateTime!
83
77
  updatedOn: DateTime!
84
78
  expiresOn: DateTime!
85
- ${recordLockingFields.map(f => f.fields).join("\n")}
79
+ ${recordLockingFields.map((f)=>f.fields).join("\n")}
86
80
  }
87
81
 
88
82
  type RecordLockingIsEntryLockedResponse {
@@ -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 {
@@ -179,102 +173,125 @@ const createGraphQLSchema = async params => {
179
173
  recordLocking: RecordLockingMutation
180
174
  }
181
175
  `,
182
- resolvers: {
183
- Query: {
184
- recordLocking: async () => ({})
185
- },
186
- Mutation: {
187
- recordLocking: async () => ({})
188
- },
189
- RecordLockingQuery: {
190
- async isEntryLocked(_, args, context) {
191
- return (0, _resolve.resolve)(async () => {
192
- await (0, _checkPermissions.checkPermissions)(context);
193
- return context.recordLocking.isEntryLocked({
194
- id: args.id,
195
- type: args.type
196
- });
197
- });
198
- },
199
- async getLockRecord(_, args, context) {
200
- return (0, _resolve.resolve)(async () => {
201
- await (0, _checkPermissions.checkPermissions)(context);
202
- const result = await context.recordLocking.getLockRecord({
203
- id: args.id,
204
- type: args.type
205
- });
206
- if (result) {
207
- return result;
176
+ resolvers: {
177
+ Query: {
178
+ recordLocking: async ()=>({})
179
+ },
180
+ Mutation: {
181
+ recordLocking: async ()=>({})
182
+ },
183
+ RecordLockingQuery: {
184
+ async isEntryLocked (_, args, context) {
185
+ return resolve(async ()=>{
186
+ await checkPermissions(context);
187
+ const useCase = context.container.resolve(IsEntryLockedUseCase);
188
+ const result = await useCase.execute({
189
+ id: args.id,
190
+ type: args.type
191
+ });
192
+ if (result.isFail()) throw result.error;
193
+ return result.value;
194
+ });
195
+ },
196
+ async getLockRecord (_, args, context) {
197
+ return resolve(async ()=>{
198
+ await checkPermissions(context);
199
+ const useCase = context.container.resolve(GetLockRecordUseCase);
200
+ const result = await useCase.execute({
201
+ id: args.id,
202
+ type: args.type
203
+ });
204
+ if (result.isFail()) throw result.error;
205
+ return result.value;
206
+ });
207
+ },
208
+ async getLockedEntryLockRecord (_, args, context) {
209
+ return resolve(async ()=>{
210
+ await checkPermissions(context);
211
+ const useCase = context.container.resolve(GetLockedEntryLockRecordUseCase);
212
+ const result = await useCase.execute({
213
+ id: args.id,
214
+ type: args.type
215
+ });
216
+ if (result.isFail()) return null;
217
+ return result.value;
218
+ });
219
+ },
220
+ async listLockRecords (_, args, context) {
221
+ return resolveList(async ()=>{
222
+ await checkPermissions(context);
223
+ const useCase = context.container.resolve(ListLockRecordsUseCase);
224
+ const result = await useCase.execute(args);
225
+ if (result.isFail()) throw result.error;
226
+ return result.value;
227
+ });
228
+ },
229
+ listAllLockRecords (_, args, context) {
230
+ return resolveList(async ()=>{
231
+ await checkPermissions(context);
232
+ const useCase = context.container.resolve(ListAllLockRecordsUseCase);
233
+ const result = await useCase.execute(args);
234
+ if (result.isFail()) throw result.error;
235
+ return result.value;
236
+ });
237
+ }
238
+ },
239
+ RecordLockingMutation: {
240
+ async lockEntry (_, args, context) {
241
+ return resolve(async ()=>{
242
+ await checkPermissions(context);
243
+ const useCase = context.container.resolve(LockEntryUseCase);
244
+ const result = await useCase.execute({
245
+ id: args.id,
246
+ type: args.type
247
+ });
248
+ if (result.isFail()) throw result.error;
249
+ return result.value;
250
+ });
251
+ },
252
+ async updateEntryLock (_, args, context) {
253
+ return resolve(async ()=>{
254
+ await checkPermissions(context);
255
+ const useCase = context.container.resolve(UpdateEntryLockUseCase);
256
+ const result = await useCase.execute({
257
+ id: args.id,
258
+ type: args.type
259
+ });
260
+ if (result.isFail()) throw result.error;
261
+ return result.value;
262
+ });
263
+ },
264
+ async unlockEntry (_, args, context) {
265
+ return resolve(async ()=>{
266
+ await checkPermissions(context);
267
+ const useCase = context.container.resolve(UnlockEntryUseCase);
268
+ const result = await useCase.execute({
269
+ id: args.id,
270
+ type: args.type,
271
+ force: args.force
272
+ });
273
+ if (result.isFail()) throw result.error;
274
+ return result.value;
275
+ });
276
+ },
277
+ async unlockEntryRequest (_, args, context) {
278
+ return resolve(async ()=>{
279
+ await checkPermissions(context);
280
+ const useCase = context.container.resolve(UnlockEntryRequestUseCase);
281
+ const result = await useCase.execute({
282
+ id: args.id,
283
+ type: args.type
284
+ });
285
+ if (result.isFail()) throw result.error;
286
+ return result.value;
287
+ });
288
+ }
208
289
  }
209
- throw new _handlerGraphql.NotFoundError("Lock record not found.");
210
- });
211
- },
212
- async getLockedEntryLockRecord(_, args, context) {
213
- return (0, _resolve.resolve)(async () => {
214
- await (0, _checkPermissions.checkPermissions)(context);
215
- return await context.recordLocking.getLockedEntryLockRecord({
216
- id: args.id,
217
- type: args.type
218
- });
219
- });
220
- },
221
- async listLockRecords(_, args, context) {
222
- return (0, _resolve.resolveList)(async () => {
223
- await (0, _checkPermissions.checkPermissions)(context);
224
- return await context.recordLocking.listLockRecords(args);
225
- });
226
- },
227
- listAllLockRecords(_, args, context) {
228
- return (0, _resolve.resolveList)(async () => {
229
- await (0, _checkPermissions.checkPermissions)(context);
230
- return await context.recordLocking.listAllLockRecords(args);
231
- });
232
290
  }
233
- },
234
- RecordLockingMutation: {
235
- async lockEntry(_, args, context) {
236
- return (0, _resolve.resolve)(async () => {
237
- await (0, _checkPermissions.checkPermissions)(context);
238
- return context.recordLocking.lockEntry({
239
- id: args.id,
240
- type: args.type
241
- });
242
- });
243
- },
244
- async updateEntryLock(_, args, context) {
245
- return (0, _resolve.resolve)(async () => {
246
- await (0, _checkPermissions.checkPermissions)(context);
247
- return context.recordLocking.updateEntryLock({
248
- id: args.id,
249
- type: args.type
250
- });
251
- });
252
- },
253
- async unlockEntry(_, args, context) {
254
- return (0, _resolve.resolve)(async () => {
255
- await (0, _checkPermissions.checkPermissions)(context);
256
- return await context.recordLocking.unlockEntry({
257
- id: args.id,
258
- type: args.type,
259
- force: args.force
260
- });
261
- });
262
- },
263
- async unlockEntryRequest(_, args, context) {
264
- return (0, _resolve.resolve)(async () => {
265
- await (0, _checkPermissions.checkPermissions)(context);
266
- return await context.recordLocking.unlockEntryRequest({
267
- id: args.id,
268
- type: args.type
269
- });
270
- });
271
- }
272
- }
273
- }
274
- });
275
- plugin.name = "recordLocking.graphql.schema.locking";
276
- return plugin;
291
+ });
292
+ plugin.name = "recordLocking.graphql.schema.locking";
293
+ return plugin;
277
294
  };
278
- exports.createGraphQLSchema = createGraphQLSchema;
295
+ export { createGraphQLSchema };
279
296
 
280
297
  //# 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,"file":"graphql/schema.js","sources":["../../src/graphql/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"],"names":["createGraphQLSchema","params","model","models","fieldRegistry","recordLockingFields","renderFields","listFilterFieldsRender","renderListFilterFields","sortEnumRender","renderSortEnum","plugin","createGraphQLSchemaPlugin","f","_","args","context","resolve","checkPermissions","useCase","IsEntryLockedUseCase","result","GetLockRecordUseCase","GetLockedEntryLockRecordUseCase","resolveList","ListLockRecordsUseCase","ListAllLockRecordsUseCase","LockEntryUseCase","UpdateEntryLockUseCase","UnlockEntryUseCase","UnlockEntryRequestUseCase"],"mappings":"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"}
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> | import("@webiny/handler").RegisterExtensionPlugin<import("@webiny/handler/types").Context>)[];