@webiny/api-record-locking 0.0.0-unstable.c27f4d8a31 → 0.0.0-unstable.d0f34a8194

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 (187) hide show
  1. package/RecordLockingAppFeature.d.ts +11 -0
  2. package/RecordLockingAppFeature.js +20 -0
  3. package/RecordLockingAppFeature.js.map +1 -0
  4. package/domain/LockRecord.js +63 -70
  5. package/domain/LockRecord.js.map +1 -1
  6. package/domain/RecordLockingModel.js +27 -23
  7. package/domain/RecordLockingModel.js.map +1 -1
  8. package/domain/abstractions.d.ts +9 -3
  9. package/domain/abstractions.js +3 -7
  10. package/domain/abstractions.js.map +1 -1
  11. package/domain/calculateExpiresOn.js +5 -6
  12. package/domain/calculateExpiresOn.js.map +1 -1
  13. package/domain/errors.js +71 -81
  14. package/domain/errors.js.map +1 -1
  15. package/domain/index.js +0 -2
  16. package/domain/types.js +6 -9
  17. package/domain/types.js.map +1 -1
  18. package/features/GetLockRecord/GetLockRecordRepository.d.ts +4 -3
  19. package/features/GetLockRecord/GetLockRecordRepository.js +33 -25
  20. package/features/GetLockRecord/GetLockRecordRepository.js.map +1 -1
  21. package/features/GetLockRecord/GetLockRecordUseCase.js +13 -10
  22. package/features/GetLockRecord/GetLockRecordUseCase.js.map +1 -1
  23. package/features/GetLockRecord/abstractions.js +3 -14
  24. package/features/GetLockRecord/abstractions.js.map +1 -1
  25. package/features/GetLockRecord/feature.d.ts +4 -1
  26. package/features/GetLockRecord/feature.js +7 -6
  27. package/features/GetLockRecord/feature.js.map +1 -1
  28. package/features/GetLockRecord/index.js +0 -2
  29. package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.d.ts +1 -1
  30. package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js +20 -29
  31. package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js.map +1 -1
  32. package/features/GetLockedEntryLockRecord/abstractions.js +2 -10
  33. package/features/GetLockedEntryLockRecord/abstractions.js.map +1 -1
  34. package/features/GetLockedEntryLockRecord/feature.d.ts +4 -1
  35. package/features/GetLockedEntryLockRecord/feature.js +6 -5
  36. package/features/GetLockedEntryLockRecord/feature.js.map +1 -1
  37. package/features/GetLockedEntryLockRecord/index.js +0 -2
  38. package/features/IsEntryLocked/IsEntryLockedUseCase.d.ts +1 -1
  39. package/features/IsEntryLocked/IsEntryLockedUseCase.js +23 -29
  40. package/features/IsEntryLocked/IsEntryLockedUseCase.js.map +1 -1
  41. package/features/IsEntryLocked/abstractions.js +2 -9
  42. package/features/IsEntryLocked/abstractions.js.map +1 -1
  43. package/features/IsEntryLocked/feature.d.ts +4 -1
  44. package/features/IsEntryLocked/feature.js +6 -5
  45. package/features/IsEntryLocked/feature.js.map +1 -1
  46. package/features/IsEntryLocked/index.js +0 -2
  47. package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.d.ts +4 -4
  48. package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.js +28 -34
  49. package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.js.map +1 -1
  50. package/features/KickOutCurrentUser/abstractions.js +2 -6
  51. package/features/KickOutCurrentUser/abstractions.js.map +1 -1
  52. package/features/KickOutCurrentUser/feature.d.ts +4 -1
  53. package/features/KickOutCurrentUser/feature.js +6 -5
  54. package/features/KickOutCurrentUser/feature.js.map +1 -1
  55. package/features/KickOutCurrentUser/index.js +0 -2
  56. package/features/ListAllLockRecords/ListAllLockRecordsRepository.d.ts +5 -3
  57. package/features/ListAllLockRecords/ListAllLockRecordsRepository.js +39 -32
  58. package/features/ListAllLockRecords/ListAllLockRecordsRepository.js.map +1 -1
  59. package/features/ListAllLockRecords/ListAllLockRecordsUseCase.js +13 -10
  60. package/features/ListAllLockRecords/ListAllLockRecordsUseCase.js.map +1 -1
  61. package/features/ListAllLockRecords/abstractions.js +3 -14
  62. package/features/ListAllLockRecords/abstractions.js.map +1 -1
  63. package/features/ListAllLockRecords/feature.d.ts +4 -1
  64. package/features/ListAllLockRecords/feature.js +7 -6
  65. package/features/ListAllLockRecords/feature.js.map +1 -1
  66. package/features/ListAllLockRecords/index.js +0 -2
  67. package/features/ListLockRecords/ListLockRecordsRepository.d.ts +6 -3
  68. package/features/ListLockRecords/ListLockRecordsRepository.js +39 -32
  69. package/features/ListLockRecords/ListLockRecordsRepository.js.map +1 -1
  70. package/features/ListLockRecords/ListLockRecordsUseCase.d.ts +1 -1
  71. package/features/ListLockRecords/ListLockRecordsUseCase.js +27 -24
  72. package/features/ListLockRecords/ListLockRecordsUseCase.js.map +1 -1
  73. package/features/ListLockRecords/abstractions.js +3 -14
  74. package/features/ListLockRecords/abstractions.js.map +1 -1
  75. package/features/ListLockRecords/feature.d.ts +4 -1
  76. package/features/ListLockRecords/feature.js +7 -6
  77. package/features/ListLockRecords/feature.js.map +1 -1
  78. package/features/ListLockRecords/index.js +0 -2
  79. package/features/LockEntry/LockEntryEventsDecorator.d.ts +1 -1
  80. package/features/LockEntry/LockEntryEventsDecorator.js +32 -32
  81. package/features/LockEntry/LockEntryEventsDecorator.js.map +1 -1
  82. package/features/LockEntry/LockEntryRepository.d.ts +4 -3
  83. package/features/LockEntry/LockEntryRepository.js +35 -31
  84. package/features/LockEntry/LockEntryRepository.js.map +1 -1
  85. package/features/LockEntry/LockEntryUseCase.js +21 -26
  86. package/features/LockEntry/LockEntryUseCase.js.map +1 -1
  87. package/features/LockEntry/abstractions.js +3 -14
  88. package/features/LockEntry/abstractions.js.map +1 -1
  89. package/features/LockEntry/events.d.ts +2 -2
  90. package/features/LockEntry/events.js +26 -34
  91. package/features/LockEntry/events.js.map +1 -1
  92. package/features/LockEntry/feature.d.ts +4 -1
  93. package/features/LockEntry/feature.js +8 -7
  94. package/features/LockEntry/feature.js.map +1 -1
  95. package/features/LockEntry/index.js +0 -2
  96. package/features/RecordLockingFeature.d.ts +4 -6
  97. package/features/RecordLockingFeature.js +21 -22
  98. package/features/RecordLockingFeature.js.map +1 -1
  99. package/features/RecordLockingModelProvider.d.ts +18 -0
  100. package/features/RecordLockingModelProvider.js +22 -0
  101. package/features/RecordLockingModelProvider.js.map +1 -0
  102. package/features/UnlockEntry/UnlockEntryEventsDecorator.d.ts +1 -1
  103. package/features/UnlockEntry/UnlockEntryEventsDecorator.js +33 -33
  104. package/features/UnlockEntry/UnlockEntryEventsDecorator.js.map +1 -1
  105. package/features/UnlockEntry/UnlockEntryRepository.d.ts +3 -3
  106. package/features/UnlockEntry/UnlockEntryRepository.js +31 -28
  107. package/features/UnlockEntry/UnlockEntryRepository.js.map +1 -1
  108. package/features/UnlockEntry/UnlockEntryUseCase.d.ts +1 -1
  109. package/features/UnlockEntry/UnlockEntryUseCase.js +54 -70
  110. package/features/UnlockEntry/UnlockEntryUseCase.js.map +1 -1
  111. package/features/UnlockEntry/abstractions.js +3 -14
  112. package/features/UnlockEntry/abstractions.js.map +1 -1
  113. package/features/UnlockEntry/events.d.ts +2 -2
  114. package/features/UnlockEntry/events.js +26 -34
  115. package/features/UnlockEntry/events.js.map +1 -1
  116. package/features/UnlockEntry/feature.d.ts +4 -1
  117. package/features/UnlockEntry/feature.js +8 -7
  118. package/features/UnlockEntry/feature.js.map +1 -1
  119. package/features/UnlockEntry/hasFullAccessPermission.d.ts +1 -1
  120. package/features/UnlockEntry/hasFullAccessPermission.js +6 -7
  121. package/features/UnlockEntry/hasFullAccessPermission.js.map +1 -1
  122. package/features/UnlockEntry/index.js +0 -2
  123. package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.d.ts +1 -1
  124. package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.js +32 -32
  125. package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.js.map +1 -1
  126. package/features/UnlockEntryRequest/UnlockEntryRequestRepository.d.ts +4 -4
  127. package/features/UnlockEntryRequest/UnlockEntryRequestRepository.js +34 -32
  128. package/features/UnlockEntryRequest/UnlockEntryRequestRepository.js.map +1 -1
  129. package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.d.ts +1 -1
  130. package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.js +63 -80
  131. package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.js.map +1 -1
  132. package/features/UnlockEntryRequest/abstractions.js +3 -14
  133. package/features/UnlockEntryRequest/abstractions.js.map +1 -1
  134. package/features/UnlockEntryRequest/events.d.ts +2 -2
  135. package/features/UnlockEntryRequest/events.js +26 -34
  136. package/features/UnlockEntryRequest/events.js.map +1 -1
  137. package/features/UnlockEntryRequest/feature.d.ts +4 -1
  138. package/features/UnlockEntryRequest/feature.js +8 -7
  139. package/features/UnlockEntryRequest/feature.js.map +1 -1
  140. package/features/UnlockEntryRequest/index.js +0 -2
  141. package/features/UpdateEntryLock/UpdateEntryLockRepository.d.ts +5 -4
  142. package/features/UpdateEntryLock/UpdateEntryLockRepository.js +48 -50
  143. package/features/UpdateEntryLock/UpdateEntryLockRepository.js.map +1 -1
  144. package/features/UpdateEntryLock/UpdateEntryLockUseCase.d.ts +1 -1
  145. package/features/UpdateEntryLock/UpdateEntryLockUseCase.js +41 -52
  146. package/features/UpdateEntryLock/UpdateEntryLockUseCase.js.map +1 -1
  147. package/features/UpdateEntryLock/abstractions.js +3 -14
  148. package/features/UpdateEntryLock/abstractions.js.map +1 -1
  149. package/features/UpdateEntryLock/feature.d.ts +4 -1
  150. package/features/UpdateEntryLock/feature.js +7 -6
  151. package/features/UpdateEntryLock/feature.js.map +1 -1
  152. package/features/UpdateEntryLock/index.js +0 -2
  153. package/graphql/RecordLockingGraphQLSchema.d.ts +25 -0
  154. package/graphql/RecordLockingGraphQLSchema.js +390 -0
  155. package/graphql/RecordLockingGraphQLSchema.js.map +1 -0
  156. package/graphql/checkPermissions.d.ts +3 -3
  157. package/graphql/checkPermissions.js +4 -10
  158. package/graphql/checkPermissions.js.map +1 -1
  159. package/graphql/resolve.d.ts +1 -1
  160. package/graphql/resolve.js +16 -18
  161. package/graphql/resolve.js.map +1 -1
  162. package/index.d.ts +2 -9
  163. package/index.js +1 -62
  164. package/package.json +27 -22
  165. package/types.js +6 -9
  166. package/types.js.map +1 -1
  167. package/utils/convertWhereCondition.js +20 -32
  168. package/utils/convertWhereCondition.js.map +1 -1
  169. package/utils/getTimeout.js +8 -15
  170. package/utils/getTimeout.js.map +1 -1
  171. package/utils/lockRecordDatabaseId.js +6 -11
  172. package/utils/lockRecordDatabaseId.js.map +1 -1
  173. package/domain/index.js.map +0 -1
  174. package/features/GetLockRecord/index.js.map +0 -1
  175. package/features/GetLockedEntryLockRecord/index.js.map +0 -1
  176. package/features/IsEntryLocked/index.js.map +0 -1
  177. package/features/KickOutCurrentUser/index.js.map +0 -1
  178. package/features/ListAllLockRecords/index.js.map +0 -1
  179. package/features/ListLockRecords/index.js.map +0 -1
  180. package/features/LockEntry/index.js.map +0 -1
  181. package/features/UnlockEntry/index.js.map +0 -1
  182. package/features/UnlockEntryRequest/index.js.map +0 -1
  183. package/features/UpdateEntryLock/index.js.map +0 -1
  184. package/graphql/schema.d.ts +0 -11
  185. package/graphql/schema.js +0 -318
  186. package/graphql/schema.js.map +0 -1
  187. package/index.js.map +0 -1
package/graphql/schema.js DELETED
@@ -1,318 +0,0 @@
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
- // Record locking model
18
- const model = params.model;
19
-
20
- // Other public models that have at least one field
21
- const models = params.models.filter(model => {
22
- return model.fields.length > 0;
23
- });
24
- const fieldTypePlugins = params.fieldTypePlugins;
25
- const recordLockingFields = renderFields({
26
- models,
27
- model,
28
- fields: model.fields,
29
- type: "manage",
30
- fieldTypePlugins
31
- });
32
- const listFilterFieldsRender = renderListFilterFields({
33
- model,
34
- fields: model.fields,
35
- type: "manage",
36
- fieldTypePlugins,
37
- excludeFields: ["entryId"]
38
- });
39
- const sortEnumRender = renderSortEnum({
40
- model,
41
- fields: model.fields,
42
- fieldTypePlugins,
43
- sorterPlugins: []
44
- });
45
- const plugin = createGraphQLSchemaPlugin({
46
- typeDefs: /* GraphQL */`
47
- ${recordLockingFields.map(f => f.typeDefs).join("\n")}
48
-
49
- type RecordLockingError {
50
- message: String
51
- code: String
52
- data: JSON
53
- stack: String
54
- }
55
-
56
- enum RecordLockingRecordActionType {
57
- requested
58
- approved
59
- denied
60
- }
61
-
62
- type RecordLockingIdentity {
63
- id: String!
64
- displayName: String
65
- type: String
66
- }
67
-
68
- type RecordLockingRecordAction {
69
- id: ID!
70
- type: RecordLockingRecordActionType!
71
- message: String
72
- createdBy: RecordLockingIdentity!
73
- createdOn: DateTime!
74
- }
75
-
76
- type RecordLockingRecord {
77
- id: ID!
78
- lockedBy: RecordLockingIdentity!
79
- lockedOn: DateTime!
80
- updatedOn: DateTime!
81
- expiresOn: DateTime!
82
- ${recordLockingFields.map(f => f.fields).join("\n")}
83
- }
84
-
85
- type RecordLockingIsEntryLockedResponse {
86
- data: Boolean
87
- error: RecordLockingError
88
- }
89
-
90
- type RecordLockingGetLockRecordResponse {
91
- data: RecordLockingRecord
92
- error: RecordLockingError
93
- }
94
-
95
- type RecordLockingGetLockedEntryLockRecordResponse {
96
- data: RecordLockingRecord
97
- error: RecordLockingError
98
- }
99
-
100
- type RecordLockingListLockRecordsResponse {
101
- data: [RecordLockingRecord!]
102
- error: RecordLockingError
103
- }
104
-
105
- type RecordLockingLockEntryResponse {
106
- data: RecordLockingRecord
107
- error: RecordLockingError
108
- }
109
-
110
- type RecordLockingUpdateLockResponse {
111
- data: RecordLockingRecord
112
- error: RecordLockingError
113
- }
114
-
115
- type RecordLockingUnlockEntryResponse {
116
- data: RecordLockingRecord
117
- error: RecordLockingError
118
- }
119
-
120
- type RecordLockingUnlockEntryRequestResponse {
121
- data: RecordLockingRecord
122
- error: RecordLockingError
123
- }
124
-
125
- input RecordLockingListWhereInput {
126
- ${listFilterFieldsRender.allFiltersAsString()}
127
- }
128
-
129
- enum RecordLockingListSorter {
130
- ${sortEnumRender}
131
- }
132
-
133
- type RecordLockingQuery {
134
- _empty: String
135
- }
136
-
137
- type RecordLockingMutation {
138
- _empty: String
139
- }
140
-
141
- extend type RecordLockingQuery {
142
- isEntryLocked(id: ID!, type: String!): RecordLockingIsEntryLockedResponse!
143
- getLockRecord(id: ID!, type: String!): RecordLockingGetLockRecordResponse!
144
- # 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
145
- getLockedEntryLockRecord(id: ID!, type: String!): RecordLockingGetLockedEntryLockRecordResponse!
146
- listAllLockRecords(
147
- where: RecordLockingListWhereInput
148
- sort: [RecordLockingListSorter!]
149
- limit: Int
150
- after: String
151
- ): RecordLockingListLockRecordsResponse!
152
- # Basically same as listAllLockRecords except this one will filter out records with expired lock.
153
- listLockRecords(
154
- where: RecordLockingListWhereInput
155
- sort: [RecordLockingListSorter!]
156
- limit: Int
157
- after: String
158
- ): RecordLockingListLockRecordsResponse!
159
- }
160
-
161
- extend type RecordLockingMutation {
162
- lockEntry(id: ID!, type: String!): RecordLockingLockEntryResponse!
163
- updateEntryLock(id: ID!, type: String!): RecordLockingUpdateLockResponse!
164
- unlockEntry(id: ID!, type: String!, force: Boolean): RecordLockingUnlockEntryResponse!
165
- unlockEntryRequest(
166
- id: ID!
167
- type: String!
168
- ): RecordLockingUnlockEntryRequestResponse!
169
- }
170
-
171
- extend type Query {
172
- recordLocking: RecordLockingQuery
173
- }
174
-
175
- extend type Mutation {
176
- recordLocking: RecordLockingMutation
177
- }
178
- `,
179
- resolvers: {
180
- Query: {
181
- recordLocking: async () => ({})
182
- },
183
- Mutation: {
184
- recordLocking: async () => ({})
185
- },
186
- RecordLockingQuery: {
187
- async isEntryLocked(_, args, context) {
188
- return resolve(async () => {
189
- await checkPermissions(context);
190
- const useCase = context.container.resolve(IsEntryLockedUseCase);
191
- const result = await useCase.execute({
192
- id: args.id,
193
- type: args.type
194
- });
195
- if (result.isFail()) {
196
- throw result.error;
197
- }
198
- return result.value;
199
- });
200
- },
201
- async getLockRecord(_, args, context) {
202
- return resolve(async () => {
203
- await checkPermissions(context);
204
- const useCase = context.container.resolve(GetLockRecordUseCase);
205
- const result = await useCase.execute({
206
- id: args.id,
207
- type: args.type
208
- });
209
- if (result.isFail()) {
210
- throw result.error;
211
- }
212
- return result.value;
213
- });
214
- },
215
- async getLockedEntryLockRecord(_, args, context) {
216
- return resolve(async () => {
217
- await checkPermissions(context);
218
- const useCase = context.container.resolve(GetLockedEntryLockRecordUseCase);
219
- const result = await useCase.execute({
220
- id: args.id,
221
- type: args.type
222
- });
223
- // Returns null if not found/expired/locked by current user
224
- if (result.isFail()) {
225
- return null;
226
- }
227
- return result.value;
228
- });
229
- },
230
- async listLockRecords(_, args, context) {
231
- return resolveList(async () => {
232
- await checkPermissions(context);
233
- const useCase = context.container.resolve(ListLockRecordsUseCase);
234
- const result = await useCase.execute(args);
235
- if (result.isFail()) {
236
- throw result.error;
237
- }
238
- return result.value;
239
- });
240
- },
241
- listAllLockRecords(_, args, context) {
242
- return resolveList(async () => {
243
- await checkPermissions(context);
244
- const useCase = context.container.resolve(ListAllLockRecordsUseCase);
245
- const result = await useCase.execute(args);
246
- if (result.isFail()) {
247
- throw result.error;
248
- }
249
- return result.value;
250
- });
251
- }
252
- },
253
- RecordLockingMutation: {
254
- async lockEntry(_, args, context) {
255
- return resolve(async () => {
256
- await checkPermissions(context);
257
- const useCase = context.container.resolve(LockEntryUseCase);
258
- const result = await useCase.execute({
259
- id: args.id,
260
- type: args.type
261
- });
262
- if (result.isFail()) {
263
- throw result.error;
264
- }
265
- return result.value;
266
- });
267
- },
268
- async updateEntryLock(_, args, context) {
269
- return resolve(async () => {
270
- await checkPermissions(context);
271
- const useCase = context.container.resolve(UpdateEntryLockUseCase);
272
- const result = await useCase.execute({
273
- id: args.id,
274
- type: args.type
275
- });
276
- if (result.isFail()) {
277
- throw result.error;
278
- }
279
- return result.value;
280
- });
281
- },
282
- async unlockEntry(_, args, context) {
283
- return resolve(async () => {
284
- await checkPermissions(context);
285
- const useCase = context.container.resolve(UnlockEntryUseCase);
286
- const result = await useCase.execute({
287
- id: args.id,
288
- type: args.type,
289
- force: args.force
290
- });
291
- if (result.isFail()) {
292
- throw result.error;
293
- }
294
- return result.value;
295
- });
296
- },
297
- async unlockEntryRequest(_, args, context) {
298
- return resolve(async () => {
299
- await checkPermissions(context);
300
- const useCase = context.container.resolve(UnlockEntryRequestUseCase);
301
- const result = await useCase.execute({
302
- id: args.id,
303
- type: args.type
304
- });
305
- if (result.isFail()) {
306
- throw result.error;
307
- }
308
- return result.value;
309
- });
310
- }
311
- }
312
- }
313
- });
314
- plugin.name = "recordLocking.graphql.schema.locking";
315
- return plugin;
316
- };
317
-
318
- //# sourceMappingURL=schema.js.map
@@ -1 +0,0 @@
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","fieldTypePlugins","recordLockingFields","type","listFilterFieldsRender","excludeFields","sortEnumRender","sorterPlugins","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 { CmsFieldTypePlugins } from \"@webiny/api-headless-cms/types/index.js\";\n\ninterface Params {\n // Record locking model\n model: CmsModel;\n // All public models\n models: CmsModel[];\n fieldTypePlugins: CmsFieldTypePlugins;\n}\nexport const createGraphQLSchema = async (\n params: Params\n): Promise<IGraphQLSchemaPlugin<ApiCoreContext>> => {\n // Record locking model\n const model = params.model;\n\n // Other public models that have at least one field\n const models = params.models.filter(model => {\n return model.fields.length > 0;\n });\n\n const fieldTypePlugins = params.fieldTypePlugins;\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<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;AAYlC,OAAO,MAAMC,mBAAmB,GAAG,MAC/BC,MAAc,IACkC;EAChD;EACA,MAAMC,KAAK,GAAGD,MAAM,CAACC,KAAK;;EAE1B;EACA,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,gBAAgB,GAAGN,MAAM,CAACM,gBAAgB;EAEhD,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,gBAAgB;IAChBI,aAAa,EAAE,CAAC,SAAS;EAC7B,CAAC,CAAC;EAEF,MAAMC,cAAc,GAAGvB,cAAc,CAAC;IAClCa,KAAK;IACLG,MAAM,EAAEH,KAAK,CAACG,MAAM;IACpBE,gBAAgB;IAChBM,aAAa,EAAE;EACnB,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;cAC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","ignoreList":[]}
package/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"names":["ContextPlugin","WcpContext","ListModelsUseCase","GetModelUseCase","RecordLockingModel","RECORD_LOCKING_MODEL_ID","getTimeout","RecordLockingFeature","createGraphQLSchema","createFieldTypePluginRecords","IdentityContext","TenantContext","createContextPlugin","params","plugin","context","tenantContext","container","resolve","identityContext","wcp","getModel","listModels","canUseRecordLocking","getTenant","register","timeout","model","publicModels","withoutAuthorization","Promise","all","execute","includePrivate","value","graphQlPlugin","models","fieldTypePlugins","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 { createFieldTypePluginRecords } from \"@webiny/api-headless-cms/graphql/schema/createFieldTypePluginRecords.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.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 // Register GraphQL schema plugin\n const graphQlPlugin = await createGraphQLSchema({\n model,\n models: publicModels,\n fieldTypePlugins: createFieldTypePluginRecords(context.plugins)\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,4BAA4B,QAAQ,yEAAyE;AACtH,SAASC,eAAe,QAAQ,6DAA6D;AAC7F,SAASC,aAAa,QAAQ,0DAA0D;AASxF,MAAMC,mBAAmB,GAAIC,MAAmC,IAAK;EACjE,MAAMC,MAAM,GAAG,IAAId,aAAa,CAAiB,MAAMe,OAAO,IAAI;IAC9D,MAAMC,aAAa,GAAGD,OAAO,CAACE,SAAS,CAACC,OAAO,CAACP,aAAa,CAAC;IAC9D,MAAMQ,eAAe,GAAGJ,OAAO,CAACE,SAAS,CAACC,OAAO,CAACR,eAAe,CAAC;IAClE,MAAMU,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;IACA,MAAMC,aAAa,GAAG,MAAM3B,mBAAmB,CAAC;MAC5CmB,KAAK;MACLS,MAAM,EAAER,YAAY;MACpBS,gBAAgB,EAAE5B,4BAA4B,CAACM,OAAO,CAACuB,OAAO;IAClE,CAAC,CAAC;IAEFvB,OAAO,CAACuB,OAAO,CAACb,QAAQ,CAACU,aAAa,CAAC;;IAEvC;IACA5B,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":[]}