@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.
- package/README.md +10 -9
- package/domain/LockRecord.d.ts +45 -0
- package/domain/LockRecord.js +73 -0
- package/domain/LockRecord.js.map +1 -0
- package/domain/RecordLockingModel.d.ts +9 -0
- package/domain/RecordLockingModel.js +32 -0
- package/domain/RecordLockingModel.js.map +1 -0
- package/domain/abstractions.d.ts +18 -0
- package/domain/abstractions.js +6 -0
- package/domain/abstractions.js.map +1 -0
- package/domain/calculateExpiresOn.d.ts +1 -0
- package/domain/calculateExpiresOn.js +8 -0
- package/domain/calculateExpiresOn.js.map +1 -0
- package/domain/errors.d.ts +71 -0
- package/domain/errors.js +85 -0
- package/domain/errors.js.map +1 -0
- package/domain/index.d.ts +4 -0
- package/domain/index.js +4 -0
- package/domain/types.d.ts +44 -0
- package/domain/types.js +9 -0
- package/domain/types.js.map +1 -0
- package/features/GetLockRecord/GetLockRecordRepository.d.ts +16 -0
- package/features/GetLockRecord/GetLockRecordRepository.js +40 -0
- package/features/GetLockRecord/GetLockRecordRepository.js.map +1 -0
- package/features/GetLockRecord/GetLockRecordUseCase.d.ts +12 -0
- package/features/GetLockRecord/GetLockRecordUseCase.js +18 -0
- package/features/GetLockRecord/GetLockRecordUseCase.js.map +1 -0
- package/features/GetLockRecord/abstractions.d.ts +41 -0
- package/features/GetLockRecord/abstractions.js +6 -0
- package/features/GetLockRecord/abstractions.js.map +1 -0
- package/features/GetLockRecord/feature.d.ts +4 -0
- package/features/GetLockRecord/feature.js +13 -0
- package/features/GetLockRecord/feature.js.map +1 -0
- package/features/GetLockRecord/index.d.ts +2 -0
- package/features/GetLockRecord/index.js +2 -0
- package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.d.ts +15 -0
- package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js +30 -0
- package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js.map +1 -0
- package/features/GetLockedEntryLockRecord/abstractions.d.ts +26 -0
- package/features/GetLockedEntryLockRecord/abstractions.js +5 -0
- package/features/GetLockedEntryLockRecord/abstractions.js.map +1 -0
- package/features/GetLockedEntryLockRecord/feature.d.ts +4 -0
- package/features/GetLockedEntryLockRecord/feature.js +11 -0
- package/features/GetLockedEntryLockRecord/feature.js.map +1 -0
- package/features/GetLockedEntryLockRecord/index.d.ts +2 -0
- package/features/GetLockedEntryLockRecord/index.js +2 -0
- package/features/IsEntryLocked/IsEntryLockedUseCase.d.ts +14 -0
- package/features/IsEntryLocked/IsEntryLockedUseCase.js +33 -0
- package/features/IsEntryLocked/IsEntryLockedUseCase.js.map +1 -0
- package/features/IsEntryLocked/abstractions.d.ts +24 -0
- package/features/IsEntryLocked/abstractions.js +5 -0
- package/features/IsEntryLocked/abstractions.js.map +1 -0
- package/features/IsEntryLocked/feature.d.ts +4 -0
- package/features/IsEntryLocked/feature.js +11 -0
- package/features/IsEntryLocked/feature.js.map +1 -0
- package/features/IsEntryLocked/index.d.ts +1 -0
- package/features/IsEntryLocked/index.js +1 -0
- package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.d.ts +15 -0
- package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.js +36 -0
- package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.js.map +1 -0
- package/features/KickOutCurrentUser/abstractions.d.ts +17 -0
- package/features/KickOutCurrentUser/abstractions.js +5 -0
- package/features/KickOutCurrentUser/abstractions.js.map +1 -0
- package/features/KickOutCurrentUser/feature.d.ts +4 -0
- package/features/KickOutCurrentUser/feature.js +11 -0
- package/features/KickOutCurrentUser/feature.js.map +1 -0
- package/features/KickOutCurrentUser/index.d.ts +1 -0
- package/features/KickOutCurrentUser/index.js +1 -0
- package/features/ListAllLockRecords/ListAllLockRecordsRepository.d.ts +18 -0
- package/features/ListAllLockRecords/ListAllLockRecordsRepository.js +49 -0
- package/features/ListAllLockRecords/ListAllLockRecordsRepository.js.map +1 -0
- package/features/ListAllLockRecords/ListAllLockRecordsUseCase.d.ts +11 -0
- package/features/ListAllLockRecords/ListAllLockRecordsUseCase.js +18 -0
- package/features/ListAllLockRecords/ListAllLockRecordsUseCase.js.map +1 -0
- package/features/ListAllLockRecords/abstractions.d.ts +40 -0
- package/features/ListAllLockRecords/abstractions.js +6 -0
- package/features/ListAllLockRecords/abstractions.js.map +1 -0
- package/features/ListAllLockRecords/feature.d.ts +4 -0
- package/features/ListAllLockRecords/feature.js +13 -0
- package/features/ListAllLockRecords/feature.js.map +1 -0
- package/features/ListAllLockRecords/index.d.ts +2 -0
- package/features/ListAllLockRecords/index.js +2 -0
- package/features/ListLockRecords/ListLockRecordsRepository.d.ts +17 -0
- package/features/ListLockRecords/ListLockRecordsRepository.js +49 -0
- package/features/ListLockRecords/ListLockRecordsRepository.js.map +1 -0
- package/features/ListLockRecords/ListLockRecordsUseCase.d.ts +15 -0
- package/features/ListLockRecords/ListLockRecordsUseCase.js +33 -0
- package/features/ListLockRecords/ListLockRecordsUseCase.js.map +1 -0
- package/features/ListLockRecords/abstractions.d.ts +45 -0
- package/features/ListLockRecords/abstractions.js +6 -0
- package/features/ListLockRecords/abstractions.js.map +1 -0
- package/features/ListLockRecords/feature.d.ts +4 -0
- package/features/ListLockRecords/feature.js +13 -0
- package/features/ListLockRecords/feature.js.map +1 -0
- package/features/ListLockRecords/index.d.ts +1 -0
- package/features/ListLockRecords/index.js +1 -0
- package/features/LockEntry/LockEntryEventsDecorator.d.ts +14 -0
- package/features/LockEntry/LockEntryEventsDecorator.js +40 -0
- package/features/LockEntry/LockEntryEventsDecorator.js.map +1 -0
- package/features/LockEntry/LockEntryRepository.d.ts +16 -0
- package/features/LockEntry/LockEntryRepository.js +45 -0
- package/features/LockEntry/LockEntryRepository.js.map +1 -0
- package/features/LockEntry/LockEntryUseCase.d.ts +14 -0
- package/features/LockEntry/LockEntryUseCase.js +31 -0
- package/features/LockEntry/LockEntryUseCase.js.map +1 -0
- package/features/LockEntry/abstractions.d.ts +41 -0
- package/features/LockEntry/abstractions.js +6 -0
- package/features/LockEntry/abstractions.js.map +1 -0
- package/features/LockEntry/events.d.ts +45 -0
- package/features/LockEntry/events.js +32 -0
- package/features/LockEntry/events.js.map +1 -0
- package/features/LockEntry/feature.d.ts +4 -0
- package/features/LockEntry/feature.js +15 -0
- package/features/LockEntry/feature.js.map +1 -0
- package/features/LockEntry/index.d.ts +1 -0
- package/features/LockEntry/index.js +1 -0
- package/features/RecordLockingFeature.d.ts +15 -0
- package/features/RecordLockingFeature.js +34 -0
- package/features/RecordLockingFeature.js.map +1 -0
- package/features/UnlockEntry/UnlockEntryEventsDecorator.d.ts +14 -0
- package/features/UnlockEntry/UnlockEntryEventsDecorator.js +41 -0
- package/features/UnlockEntry/UnlockEntryEventsDecorator.js.map +1 -0
- package/features/UnlockEntry/UnlockEntryRepository.d.ts +14 -0
- package/features/UnlockEntry/UnlockEntryRepository.js +42 -0
- package/features/UnlockEntry/UnlockEntryRepository.js.map +1 -0
- package/features/UnlockEntry/UnlockEntryUseCase.d.ts +18 -0
- package/features/UnlockEntry/UnlockEntryUseCase.js +65 -0
- package/features/UnlockEntry/UnlockEntryUseCase.js.map +1 -0
- package/features/UnlockEntry/abstractions.d.ts +44 -0
- package/features/UnlockEntry/abstractions.js +6 -0
- package/features/UnlockEntry/abstractions.js.map +1 -0
- package/features/UnlockEntry/events.d.ts +46 -0
- package/features/UnlockEntry/events.js +32 -0
- package/features/UnlockEntry/events.js.map +1 -0
- package/features/UnlockEntry/feature.d.ts +4 -0
- package/features/UnlockEntry/feature.js +15 -0
- package/features/UnlockEntry/feature.js.map +1 -0
- package/features/UnlockEntry/hasFullAccessPermission.d.ts +2 -0
- package/features/UnlockEntry/hasFullAccessPermission.js +9 -0
- package/features/UnlockEntry/hasFullAccessPermission.js.map +1 -0
- package/features/UnlockEntry/index.d.ts +1 -0
- package/features/UnlockEntry/index.js +1 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.d.ts +14 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.js +40 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.js.map +1 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestRepository.d.ts +17 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestRepository.js +44 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestRepository.js.map +1 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.d.ts +16 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.js +75 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.js.map +1 -0
- package/features/UnlockEntryRequest/abstractions.d.ts +42 -0
- package/features/UnlockEntryRequest/abstractions.js +6 -0
- package/features/UnlockEntryRequest/abstractions.js.map +1 -0
- package/features/UnlockEntryRequest/events.d.ts +45 -0
- package/features/UnlockEntryRequest/events.js +32 -0
- package/features/UnlockEntryRequest/events.js.map +1 -0
- package/features/UnlockEntryRequest/feature.d.ts +4 -0
- package/features/UnlockEntryRequest/feature.js +15 -0
- package/features/UnlockEntryRequest/feature.js.map +1 -0
- package/features/UnlockEntryRequest/index.d.ts +3 -0
- package/features/UnlockEntryRequest/index.js +3 -0
- package/features/UpdateEntryLock/UpdateEntryLockRepository.d.ts +20 -0
- package/features/UpdateEntryLock/UpdateEntryLockRepository.js +60 -0
- package/features/UpdateEntryLock/UpdateEntryLockRepository.js.map +1 -0
- package/features/UpdateEntryLock/UpdateEntryLockUseCase.d.ts +18 -0
- package/features/UpdateEntryLock/UpdateEntryLockUseCase.js +51 -0
- package/features/UpdateEntryLock/UpdateEntryLockUseCase.js.map +1 -0
- package/features/UpdateEntryLock/abstractions.d.ts +42 -0
- package/features/UpdateEntryLock/abstractions.js +6 -0
- package/features/UpdateEntryLock/abstractions.js.map +1 -0
- package/features/UpdateEntryLock/feature.d.ts +4 -0
- package/features/UpdateEntryLock/feature.js +13 -0
- package/features/UpdateEntryLock/feature.js.map +1 -0
- package/features/UpdateEntryLock/index.d.ts +1 -0
- package/features/UpdateEntryLock/index.js +1 -0
- package/graphql/checkPermissions.d.ts +5 -0
- package/graphql/checkPermissions.js +10 -0
- package/graphql/checkPermissions.js.map +1 -0
- package/{utils → graphql}/resolve.d.ts +2 -2
- package/graphql/resolve.js +20 -0
- package/graphql/resolve.js.map +1 -0
- package/graphql/schema.d.ts +7 -3
- package/graphql/schema.js +162 -145
- package/graphql/schema.js.map +1 -1
- package/index.d.ts +3 -3
- package/index.js +55 -34
- package/index.js.map +1 -1
- package/package.json +29 -28
- package/types.d.ts +3 -132
- package/types.js +6 -27
- package/types.js.map +1 -1
- package/utils/convertWhereCondition.d.ts +1 -1
- package/utils/convertWhereCondition.js +21 -36
- package/utils/convertWhereCondition.js.map +1 -1
- package/utils/getTimeout.js +8 -22
- package/utils/getTimeout.js.map +1 -1
- package/utils/lockRecordDatabaseId.js +7 -20
- package/utils/lockRecordDatabaseId.js.map +1 -1
- package/abstractions/IGetLockRecordUseCase.d.ts +0 -8
- package/abstractions/IGetLockRecordUseCase.js +0 -7
- package/abstractions/IGetLockRecordUseCase.js.map +0 -1
- package/abstractions/IGetLockedEntryLockRecordUseCase.d.ts +0 -8
- package/abstractions/IGetLockedEntryLockRecordUseCase.js +0 -7
- package/abstractions/IGetLockedEntryLockRecordUseCase.js.map +0 -1
- package/abstractions/IIsEntryLocked.d.ts +0 -8
- package/abstractions/IIsEntryLocked.js +0 -7
- package/abstractions/IIsEntryLocked.js.map +0 -1
- package/abstractions/IKickOutCurrentUserUseCase.d.ts +0 -5
- package/abstractions/IKickOutCurrentUserUseCase.js +0 -7
- package/abstractions/IKickOutCurrentUserUseCase.js.map +0 -1
- package/abstractions/IListAllLockRecordsUseCase.d.ts +0 -9
- package/abstractions/IListAllLockRecordsUseCase.js +0 -7
- package/abstractions/IListAllLockRecordsUseCase.js.map +0 -1
- package/abstractions/IListLockRecordsUseCase.d.ts +0 -10
- package/abstractions/IListLockRecordsUseCase.js +0 -7
- package/abstractions/IListLockRecordsUseCase.js.map +0 -1
- package/abstractions/ILockEntryUseCase.d.ts +0 -11
- package/abstractions/ILockEntryUseCase.js +0 -7
- package/abstractions/ILockEntryUseCase.js.map +0 -1
- package/abstractions/IUnlockEntryRequestUseCase.d.ts +0 -11
- package/abstractions/IUnlockEntryRequestUseCase.js +0 -7
- package/abstractions/IUnlockEntryRequestUseCase.js.map +0 -1
- package/abstractions/IUnlockEntryUseCase.d.ts +0 -12
- package/abstractions/IUnlockEntryUseCase.js +0 -7
- package/abstractions/IUnlockEntryUseCase.js.map +0 -1
- package/abstractions/IUpdateEntryLockUseCase.d.ts +0 -11
- package/abstractions/IUpdateEntryLockUseCase.js +0 -7
- package/abstractions/IUpdateEntryLockUseCase.js.map +0 -1
- package/crud/crud.d.ts +0 -7
- package/crud/crud.js +0 -204
- package/crud/crud.js.map +0 -1
- package/crud/model.d.ts +0 -2
- package/crud/model.js +0 -127
- package/crud/model.js.map +0 -1
- package/useCases/GetLockRecord/GetLockRecordUseCase.d.ts +0 -16
- package/useCases/GetLockRecord/GetLockRecordUseCase.js +0 -39
- package/useCases/GetLockRecord/GetLockRecordUseCase.js.map +0 -1
- package/useCases/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.d.ts +0 -16
- package/useCases/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js +0 -29
- package/useCases/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js.map +0 -1
- package/useCases/IsEntryLocked/IsEntryLockedUseCase.d.ts +0 -13
- package/useCases/IsEntryLocked/IsEntryLockedUseCase.js +0 -31
- package/useCases/IsEntryLocked/IsEntryLockedUseCase.js.map +0 -1
- package/useCases/KickOutCurrentUser/KickOutCurrentUserUseCase.d.ts +0 -12
- package/useCases/KickOutCurrentUser/KickOutCurrentUserUseCase.js +0 -46
- package/useCases/KickOutCurrentUser/KickOutCurrentUserUseCase.js.map +0 -1
- package/useCases/ListAllLockRecordsUseCase/ListAllLockRecordsUseCase.d.ts +0 -13
- package/useCases/ListAllLockRecordsUseCase/ListAllLockRecordsUseCase.js +0 -34
- package/useCases/ListAllLockRecordsUseCase/ListAllLockRecordsUseCase.js.map +0 -1
- package/useCases/ListLockRecordsUseCase/ListLockRecordsUseCase.d.ts +0 -14
- package/useCases/ListLockRecordsUseCase/ListLockRecordsUseCase.js +0 -27
- package/useCases/ListLockRecordsUseCase/ListLockRecordsUseCase.js.map +0 -1
- package/useCases/LockEntryUseCase/LockEntryUseCase.d.ts +0 -21
- package/useCases/LockEntryUseCase/LockEntryUseCase.js +0 -64
- package/useCases/LockEntryUseCase/LockEntryUseCase.js.map +0 -1
- package/useCases/UnlockEntryUseCase/UnlockEntryUseCase.d.ts +0 -23
- package/useCases/UnlockEntryUseCase/UnlockEntryUseCase.js +0 -90
- package/useCases/UnlockEntryUseCase/UnlockEntryUseCase.js.map +0 -1
- package/useCases/UnlockRequestUseCase/UnlockEntryRequestUseCase.d.ts +0 -21
- package/useCases/UnlockRequestUseCase/UnlockEntryRequestUseCase.js +0 -82
- package/useCases/UnlockRequestUseCase/UnlockEntryRequestUseCase.js.map +0 -1
- package/useCases/UpdateEntryLock/UpdateEntryLockUseCase.d.ts +0 -26
- package/useCases/UpdateEntryLock/UpdateEntryLockUseCase.js +0 -93
- package/useCases/UpdateEntryLock/UpdateEntryLockUseCase.js.map +0 -1
- package/useCases/index.d.ts +0 -31
- package/useCases/index.js +0 -96
- package/useCases/index.js.map +0 -1
- package/useCases/types.d.ts +0 -5
- package/useCases/types.js +0 -7
- package/useCases/types.js.map +0 -1
- package/utils/calculateExpiresOn.d.ts +0 -2
- package/utils/calculateExpiresOn.js +0 -16
- package/utils/calculateExpiresOn.js.map +0 -1
- package/utils/checkPermissions.d.ts +0 -7
- package/utils/checkPermissions.js +0 -21
- package/utils/checkPermissions.js.map +0 -1
- package/utils/convertEntryToLockRecord.d.ts +0 -28
- package/utils/convertEntryToLockRecord.js +0 -91
- package/utils/convertEntryToLockRecord.js.map +0 -1
- package/utils/resolve.js +0 -30
- package/utils/resolve.js.map +0 -1
- package/utils/validateSameIdentity.d.ts +0 -6
- package/utils/validateSameIdentity.js +0 -24
- package/utils/validateSameIdentity.js.map +0 -1
package/index.js
CHANGED
|
@@ -1,39 +1,60 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
1
|
+
import { ContextPlugin } from "@webiny/api";
|
|
2
|
+
import { createRegisterExtensionPlugin } from "@webiny/handler";
|
|
3
|
+
import { WcpContext } from "@webiny/api-core/features/wcp/WcpContext/index.js";
|
|
4
|
+
import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels";
|
|
5
|
+
import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel";
|
|
6
|
+
import { RECORD_LOCKING_MODEL_ID, RecordLockingModel } from "./domain/RecordLockingModel.js";
|
|
7
|
+
import { getTimeout } from "./utils/getTimeout.js";
|
|
8
|
+
import { RecordLockingFeature } from "./features/RecordLockingFeature.js";
|
|
9
|
+
import { createGraphQLSchema } from "./graphql/schema.js";
|
|
10
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
11
|
+
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
|
|
12
|
+
import { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/exports/api/cms/graphql.js";
|
|
13
|
+
const createContextPlugin = (params)=>{
|
|
14
|
+
const recordLockingContextPlugin = new ContextPlugin(async (context)=>{
|
|
15
|
+
const tenantContext = context.container.resolve(TenantContext);
|
|
16
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
17
|
+
const wcp = context.container.resolve(WcpContext);
|
|
18
|
+
const getModel = context.container.resolve(GetModelUseCase);
|
|
19
|
+
const listModels = context.container.resolve(ListModelsUseCase);
|
|
20
|
+
if (!wcp.canUseRecordLocking() || !tenantContext.getTenant()) return;
|
|
21
|
+
const timeout = getTimeout(params?.timeout);
|
|
22
|
+
const [model, publicModels] = await identityContext.withoutAuthorization(async ()=>{
|
|
23
|
+
const [model, publicModels] = await Promise.all([
|
|
24
|
+
getModel.execute(RECORD_LOCKING_MODEL_ID),
|
|
25
|
+
listModels.execute({
|
|
26
|
+
includePrivate: false
|
|
27
|
+
})
|
|
28
|
+
]);
|
|
29
|
+
return [
|
|
30
|
+
model.value,
|
|
31
|
+
publicModels.value
|
|
32
|
+
];
|
|
33
|
+
});
|
|
34
|
+
const fieldRegistry = context.container.resolve(CmsModelFieldToGraphQLRegistry);
|
|
35
|
+
const graphQlPlugin = await createGraphQLSchema({
|
|
36
|
+
model,
|
|
37
|
+
models: publicModels,
|
|
38
|
+
fieldRegistry
|
|
39
|
+
});
|
|
40
|
+
context.plugins.register(graphQlPlugin);
|
|
41
|
+
RecordLockingFeature.register(context.container, {
|
|
42
|
+
timeout,
|
|
43
|
+
model
|
|
44
|
+
});
|
|
28
45
|
});
|
|
29
|
-
context.
|
|
30
|
-
|
|
31
|
-
plugin.name = "context.recordLocking";
|
|
32
|
-
return plugin;
|
|
46
|
+
recordLockingContextPlugin.name = "context.recordLocking";
|
|
47
|
+
return recordLockingContextPlugin;
|
|
33
48
|
};
|
|
34
|
-
const createRecordLocking = params
|
|
35
|
-
|
|
49
|
+
const createRecordLocking = (params)=>{
|
|
50
|
+
const modelsPlugin = createRegisterExtensionPlugin((context)=>{
|
|
51
|
+
context.container.register(RecordLockingModel);
|
|
52
|
+
});
|
|
53
|
+
return [
|
|
54
|
+
createContextPlugin(params),
|
|
55
|
+
modelsPlugin
|
|
56
|
+
];
|
|
36
57
|
};
|
|
37
|
-
|
|
58
|
+
export { createRecordLocking };
|
|
38
59
|
|
|
39
60
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport { createRegisterExtensionPlugin } from \"@webiny/handler\";\nimport { WcpContext } from \"@webiny/api-core/features/wcp/WcpContext/index.js\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel\";\nimport { RecordLockingModel, RECORD_LOCKING_MODEL_ID } from \"~/domain/RecordLockingModel.js\";\nimport { getTimeout } from \"~/utils/getTimeout.js\";\nimport { RecordLockingFeature } from \"~/features/RecordLockingFeature.js\";\nimport { createGraphQLSchema } from \"~/graphql/schema.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"@webiny/api-headless-cms/exports/api/cms/graphql.js\";\n\nexport interface ICreateContextPluginParams {\n /**\n * A number of seconds after the last activity to wait before the record is automatically unlocked.\n */\n timeout?: number;\n}\n\nconst createContextPlugin = (params?: ICreateContextPluginParams) => {\n const recordLockingContextPlugin = 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 // Determine timeout value\n const timeout = getTimeout(params?.timeout);\n\n // Fetch CMS model to use for storing record locking data\n const [model, publicModels] = await identityContext.withoutAuthorization(async () => {\n const [model, publicModels] = await Promise.all([\n // Get a record locking model\n getModel.execute(RECORD_LOCKING_MODEL_ID),\n // Get all models\n listModels.execute({ includePrivate: false })\n ]);\n\n return [model.value, publicModels.value];\n });\n\n const fieldRegistry = context.container.resolve(CmsModelFieldToGraphQLRegistry);\n\n // Register GraphQL schema plugin\n const graphQlPlugin = await createGraphQLSchema({\n model,\n models: publicModels,\n fieldRegistry\n });\n\n context.plugins.register(graphQlPlugin);\n\n // Register features\n RecordLockingFeature.register(context.container, {\n timeout,\n model\n });\n });\n recordLockingContextPlugin.name = \"context.recordLocking\";\n\n return recordLockingContextPlugin;\n};\n\nexport const createRecordLocking = (params?: ICreateContextPluginParams) => {\n const modelsPlugin = createRegisterExtensionPlugin(context => {\n context.container.register(RecordLockingModel);\n });\n\n return [createContextPlugin(params), modelsPlugin];\n};\n"],"names":["createContextPlugin","params","recordLockingContextPlugin","ContextPlugin","context","tenantContext","TenantContext","identityContext","IdentityContext","wcp","WcpContext","getModel","GetModelUseCase","listModels","ListModelsUseCase","timeout","getTimeout","model","publicModels","Promise","RECORD_LOCKING_MODEL_ID","fieldRegistry","CmsModelFieldToGraphQLRegistry","graphQlPlugin","createGraphQLSchema","RecordLockingFeature","createRecordLocking","modelsPlugin","createRegisterExtensionPlugin","RecordLockingModel"],"mappings":";;;;;;;;;;;;AAqBA,MAAMA,sBAAsB,CAACC;IACzB,MAAMC,6BAA6B,IAAIC,cAA8B,OAAMC;QACvE,MAAMC,gBAAgBD,QAAQ,SAAS,CAAC,OAAO,CAACE;QAChD,MAAMC,kBAAkBH,QAAQ,SAAS,CAAC,OAAO,CAACI;QAClD,MAAMC,MAAML,QAAQ,SAAS,CAAC,OAAO,CAACM;QACtC,MAAMC,WAAWP,QAAQ,SAAS,CAAC,OAAO,CAACQ;QAC3C,MAAMC,aAAaT,QAAQ,SAAS,CAAC,OAAO,CAACU;QAE7C,IAAI,CAACL,IAAI,mBAAmB,MAAM,CAACJ,cAAc,SAAS,IACtD;QAIJ,MAAMU,UAAUC,WAAWf,QAAQ;QAGnC,MAAM,CAACgB,OAAOC,aAAa,GAAG,MAAMX,gBAAgB,oBAAoB,CAAC;YACrE,MAAM,CAACU,OAAOC,aAAa,GAAG,MAAMC,QAAQ,GAAG,CAAC;gBAE5CR,SAAS,OAAO,CAACS;gBAEjBP,WAAW,OAAO,CAAC;oBAAE,gBAAgB;gBAAM;aAC9C;YAED,OAAO;gBAACI,MAAM,KAAK;gBAAEC,aAAa,KAAK;aAAC;QAC5C;QAEA,MAAMG,gBAAgBjB,QAAQ,SAAS,CAAC,OAAO,CAACkB;QAGhD,MAAMC,gBAAgB,MAAMC,oBAAoB;YAC5CP;YACA,QAAQC;YACRG;QACJ;QAEAjB,QAAQ,OAAO,CAAC,QAAQ,CAACmB;QAGzBE,qBAAqB,QAAQ,CAACrB,QAAQ,SAAS,EAAE;YAC7CW;YACAE;QACJ;IACJ;IACAf,2BAA2B,IAAI,GAAG;IAElC,OAAOA;AACX;AAEO,MAAMwB,sBAAsB,CAACzB;IAChC,MAAM0B,eAAeC,8BAA8BxB,CAAAA;QAC/CA,QAAQ,SAAS,CAAC,QAAQ,CAACyB;IAC/B;IAEA,OAAO;QAAC7B,oBAAoBC;QAAS0B;KAAa;AACtD"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-record-locking",
|
|
3
|
-
"version": "0.0.0-unstable.
|
|
4
|
-
"
|
|
3
|
+
"version": "0.0.0-unstable.a4f3e4ea8b",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": "./index.js",
|
|
7
|
+
"./*": "./*"
|
|
8
|
+
},
|
|
5
9
|
"repository": {
|
|
6
10
|
"type": "git",
|
|
7
11
|
"url": "https://github.com/webiny/webiny-js.git"
|
|
@@ -12,35 +16,32 @@
|
|
|
12
16
|
],
|
|
13
17
|
"license": "MIT",
|
|
14
18
|
"dependencies": {
|
|
15
|
-
"@webiny/api": "0.0.0-unstable.
|
|
16
|
-
"@webiny/api-headless-cms": "0.0.0-unstable.
|
|
17
|
-
"@webiny/api-websockets": "0.0.0-unstable.
|
|
18
|
-
"@webiny/
|
|
19
|
-
"@webiny/handler": "0.0.0-unstable.
|
|
20
|
-
"@webiny/handler-aws": "0.0.0-unstable.
|
|
21
|
-
"@webiny/handler-graphql": "0.0.0-unstable.
|
|
22
|
-
"@webiny/plugins": "0.0.0-unstable.
|
|
23
|
-
"@webiny/
|
|
24
|
-
"@webiny/utils": "0.0.0-unstable.a4637c5ce6"
|
|
19
|
+
"@webiny/api": "0.0.0-unstable.a4f3e4ea8b",
|
|
20
|
+
"@webiny/api-headless-cms": "0.0.0-unstable.a4f3e4ea8b",
|
|
21
|
+
"@webiny/api-websockets": "0.0.0-unstable.a4f3e4ea8b",
|
|
22
|
+
"@webiny/feature": "0.0.0-unstable.a4f3e4ea8b",
|
|
23
|
+
"@webiny/handler": "0.0.0-unstable.a4f3e4ea8b",
|
|
24
|
+
"@webiny/handler-aws": "0.0.0-unstable.a4f3e4ea8b",
|
|
25
|
+
"@webiny/handler-graphql": "0.0.0-unstable.a4f3e4ea8b",
|
|
26
|
+
"@webiny/plugins": "0.0.0-unstable.a4f3e4ea8b",
|
|
27
|
+
"@webiny/utils": "0.0.0-unstable.a4f3e4ea8b"
|
|
25
28
|
},
|
|
26
29
|
"devDependencies": {
|
|
27
|
-
"@webiny/api-
|
|
28
|
-
"@webiny/
|
|
29
|
-
"@webiny/
|
|
30
|
-
"@webiny/
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
30
|
+
"@webiny/api-core": "0.0.0-unstable.a4f3e4ea8b",
|
|
31
|
+
"@webiny/build-tools": "0.0.0-unstable.a4f3e4ea8b",
|
|
32
|
+
"@webiny/project-utils": "0.0.0-unstable.a4f3e4ea8b",
|
|
33
|
+
"@webiny/wcp": "0.0.0-unstable.a4f3e4ea8b",
|
|
34
|
+
"graphql": "16.14.2",
|
|
35
|
+
"rimraf": "6.1.3",
|
|
36
|
+
"type-fest": "5.8.0",
|
|
37
|
+
"typescript": "7.0.2",
|
|
38
|
+
"vitest": "4.1.10"
|
|
36
39
|
},
|
|
37
40
|
"publishConfig": {
|
|
38
|
-
"access": "public"
|
|
39
|
-
"directory": "dist"
|
|
40
|
-
},
|
|
41
|
-
"scripts": {
|
|
42
|
-
"build": "node ../cli/bin.js run build",
|
|
43
|
-
"watch": "node ../cli/bin.js run watch"
|
|
41
|
+
"access": "public"
|
|
44
42
|
},
|
|
45
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "8476da73b653c89cc1474d968baf55c1b0ae0e5f",
|
|
44
|
+
"webiny": {
|
|
45
|
+
"publishFrom": "dist"
|
|
46
|
+
}
|
|
46
47
|
}
|
package/types.d.ts
CHANGED
|
@@ -1,26 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { CmsEntry, CmsError } from "@webiny/api-headless-cms/types";
|
|
3
|
-
|
|
4
|
-
import type { Context as IWebsocketsContext, IWebsocketsContextObject } from "@webiny/api-websockets/types";
|
|
5
|
-
import type { SecurityPermission } from "@webiny/api-security/types";
|
|
6
|
-
export { CmsError, CmsEntry };
|
|
1
|
+
import type { CmsEntryListParams, CmsEntryMeta, CmsIdentity } from "@webiny/api-headless-cms/types/index.js";
|
|
2
|
+
import { CmsEntry, CmsError } from "@webiny/api-headless-cms/types/index.js";
|
|
3
|
+
export type { CmsError, CmsEntry };
|
|
7
4
|
export type IRecordLockingIdentity = CmsIdentity;
|
|
8
|
-
export type IRecordLockingModelManager = CmsModelManager<IRecordLockingLockRecordValues>;
|
|
9
5
|
export type IRecordLockingMeta = CmsEntryMeta;
|
|
10
|
-
export interface IHasRecordLockingAccessCallable {
|
|
11
|
-
(): Promise<boolean>;
|
|
12
|
-
}
|
|
13
|
-
export interface IGetWebsocketsContextCallable {
|
|
14
|
-
(): IWebsocketsContextObject;
|
|
15
|
-
}
|
|
16
|
-
export interface IGetIdentity {
|
|
17
|
-
(): IRecordLockingIdentity;
|
|
18
|
-
}
|
|
19
|
-
export interface IRecordLockingLockRecordValues {
|
|
20
|
-
targetId: string;
|
|
21
|
-
type: IRecordLockingLockRecordEntryType;
|
|
22
|
-
actions?: IRecordLockingLockRecordAction[];
|
|
23
|
-
}
|
|
24
6
|
export declare enum RecordLockingLockRecordActionType {
|
|
25
7
|
requested = "requested",
|
|
26
8
|
approved = "approved",
|
|
@@ -69,114 +51,3 @@ export interface IRecordLockingLockRecord extends IRecordLockingLockRecordObject
|
|
|
69
51
|
export type IRecordLockingLockRecordEntryType = string;
|
|
70
52
|
export type IRecordLockingListAllLockRecordsParams = Pick<CmsEntryListParams, "where" | "limit" | "sort" | "after">;
|
|
71
53
|
export type IRecordLockingListLockRecordsParams = IRecordLockingListAllLockRecordsParams;
|
|
72
|
-
export interface IRecordLockingListAllLockRecordsResponse {
|
|
73
|
-
items: IRecordLockingLockRecord[];
|
|
74
|
-
meta: IRecordLockingMeta;
|
|
75
|
-
}
|
|
76
|
-
export type IRecordLockingListLockRecordsResponse = IRecordLockingListAllLockRecordsResponse;
|
|
77
|
-
export interface IRecordLockingGetLockRecordParams {
|
|
78
|
-
id: string;
|
|
79
|
-
type: IRecordLockingLockRecordEntryType;
|
|
80
|
-
}
|
|
81
|
-
export interface IRecordLockingIsLockedParams {
|
|
82
|
-
id: string;
|
|
83
|
-
type: IRecordLockingLockRecordEntryType;
|
|
84
|
-
}
|
|
85
|
-
export interface IRecordLockingGetLockedEntryLockRecordParams {
|
|
86
|
-
id: string;
|
|
87
|
-
type: IRecordLockingLockRecordEntryType;
|
|
88
|
-
}
|
|
89
|
-
export interface IRecordLockingLockEntryParams {
|
|
90
|
-
id: string;
|
|
91
|
-
type: IRecordLockingLockRecordEntryType;
|
|
92
|
-
}
|
|
93
|
-
export interface IRecordLockingUpdateEntryLockParams {
|
|
94
|
-
id: string;
|
|
95
|
-
type: IRecordLockingLockRecordEntryType;
|
|
96
|
-
}
|
|
97
|
-
export interface IRecordLockingUnlockEntryParams {
|
|
98
|
-
id: string;
|
|
99
|
-
type: IRecordLockingLockRecordEntryType;
|
|
100
|
-
force?: boolean;
|
|
101
|
-
}
|
|
102
|
-
export interface IRecordLockingUnlockEntryRequestParams {
|
|
103
|
-
id: string;
|
|
104
|
-
type: IRecordLockingLockRecordEntryType;
|
|
105
|
-
}
|
|
106
|
-
export interface OnEntryBeforeLockTopicParams {
|
|
107
|
-
id: string;
|
|
108
|
-
type: IRecordLockingLockRecordEntryType;
|
|
109
|
-
}
|
|
110
|
-
export interface OnEntryAfterLockTopicParams {
|
|
111
|
-
id: string;
|
|
112
|
-
type: IRecordLockingLockRecordEntryType;
|
|
113
|
-
record: IRecordLockingLockRecord;
|
|
114
|
-
}
|
|
115
|
-
export interface OnEntryLockErrorTopicParams {
|
|
116
|
-
id: string;
|
|
117
|
-
type: IRecordLockingLockRecordEntryType;
|
|
118
|
-
error: CmsError;
|
|
119
|
-
}
|
|
120
|
-
export interface OnEntryBeforeUnlockTopicParams {
|
|
121
|
-
id: string;
|
|
122
|
-
type: IRecordLockingLockRecordEntryType;
|
|
123
|
-
getIdentity: IGetIdentity;
|
|
124
|
-
}
|
|
125
|
-
export interface OnEntryAfterUnlockTopicParams {
|
|
126
|
-
id: string;
|
|
127
|
-
type: IRecordLockingLockRecordEntryType;
|
|
128
|
-
record: IRecordLockingLockRecord;
|
|
129
|
-
}
|
|
130
|
-
export interface OnEntryUnlockErrorTopicParams {
|
|
131
|
-
id: string;
|
|
132
|
-
type: IRecordLockingLockRecordEntryType;
|
|
133
|
-
error: CmsError;
|
|
134
|
-
}
|
|
135
|
-
export interface OnEntryBeforeUnlockRequestTopicParams {
|
|
136
|
-
id: string;
|
|
137
|
-
type: IRecordLockingLockRecordEntryType;
|
|
138
|
-
}
|
|
139
|
-
export interface OnEntryAfterUnlockRequestTopicParams {
|
|
140
|
-
id: string;
|
|
141
|
-
type: IRecordLockingLockRecordEntryType;
|
|
142
|
-
record: IRecordLockingLockRecord;
|
|
143
|
-
}
|
|
144
|
-
export interface OnEntryUnlockRequestErrorTopicParams {
|
|
145
|
-
id: string;
|
|
146
|
-
type: IRecordLockingLockRecordEntryType;
|
|
147
|
-
error: CmsError;
|
|
148
|
-
}
|
|
149
|
-
export interface IRecordLocking {
|
|
150
|
-
/**
|
|
151
|
-
* In milliseconds.
|
|
152
|
-
*/
|
|
153
|
-
getTimeout: () => number;
|
|
154
|
-
onEntryBeforeLock: Topic<OnEntryBeforeLockTopicParams>;
|
|
155
|
-
onEntryAfterLock: Topic<OnEntryAfterLockTopicParams>;
|
|
156
|
-
onEntryLockError: Topic<OnEntryLockErrorTopicParams>;
|
|
157
|
-
onEntryBeforeUnlock: Topic<OnEntryBeforeUnlockTopicParams>;
|
|
158
|
-
onEntryAfterUnlock: Topic<OnEntryAfterUnlockTopicParams>;
|
|
159
|
-
onEntryUnlockError: Topic<OnEntryUnlockErrorTopicParams>;
|
|
160
|
-
onEntryBeforeUnlockRequest: Topic<OnEntryBeforeUnlockRequestTopicParams>;
|
|
161
|
-
onEntryAfterUnlockRequest: Topic<OnEntryAfterUnlockRequestTopicParams>;
|
|
162
|
-
onEntryUnlockRequestError: Topic<OnEntryUnlockRequestErrorTopicParams>;
|
|
163
|
-
getModel(): Promise<CmsModel>;
|
|
164
|
-
listAllLockRecords(params?: IRecordLockingListAllLockRecordsParams): Promise<IRecordLockingListAllLockRecordsResponse>;
|
|
165
|
-
/**
|
|
166
|
-
* Same call as listAllLockRecords, except this one will filter out records with expired lock.
|
|
167
|
-
*/
|
|
168
|
-
listLockRecords(params?: IRecordLockingListLockRecordsParams): Promise<IRecordLockingListLockRecordsResponse>;
|
|
169
|
-
getLockRecord(params: IRecordLockingGetLockRecordParams): Promise<IRecordLockingLockRecord | null>;
|
|
170
|
-
isEntryLocked(params: IRecordLockingIsLockedParams): Promise<boolean>;
|
|
171
|
-
getLockedEntryLockRecord(params: IRecordLockingGetLockedEntryLockRecordParams): Promise<IRecordLockingLockRecord | null>;
|
|
172
|
-
lockEntry(params: IRecordLockingLockEntryParams): Promise<IRecordLockingLockRecord>;
|
|
173
|
-
updateEntryLock(params: IRecordLockingUpdateEntryLockParams): Promise<IRecordLockingLockRecord>;
|
|
174
|
-
unlockEntry(params: IRecordLockingUnlockEntryParams): Promise<IRecordLockingLockRecord>;
|
|
175
|
-
unlockEntryRequest(params: IRecordLockingUnlockEntryRequestParams): Promise<IRecordLockingLockRecord>;
|
|
176
|
-
}
|
|
177
|
-
export interface Context extends CmsContext, IWebsocketsContext {
|
|
178
|
-
recordLocking: IRecordLocking;
|
|
179
|
-
}
|
|
180
|
-
export interface RecordLockingSecurityPermission extends SecurityPermission {
|
|
181
|
-
canForceUnlock?: string;
|
|
182
|
-
}
|
package/types.js
CHANGED
|
@@ -1,30 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Object.defineProperty(exports, "CmsEntry", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function () {
|
|
9
|
-
return _types.CmsEntry;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
Object.defineProperty(exports, "CmsError", {
|
|
13
|
-
enumerable: true,
|
|
14
|
-
get: function () {
|
|
15
|
-
return _types.CmsError;
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
exports.RecordLockingLockRecordActionType = void 0;
|
|
19
|
-
var _types = require("@webiny/api-headless-cms/types");
|
|
20
|
-
let RecordLockingLockRecordActionType = exports.RecordLockingLockRecordActionType = /*#__PURE__*/function (RecordLockingLockRecordActionType) {
|
|
21
|
-
RecordLockingLockRecordActionType["requested"] = "requested";
|
|
22
|
-
RecordLockingLockRecordActionType["approved"] = "approved";
|
|
23
|
-
RecordLockingLockRecordActionType["denied"] = "denied";
|
|
24
|
-
return RecordLockingLockRecordActionType;
|
|
1
|
+
var types_RecordLockingLockRecordActionType = /*#__PURE__*/ function(RecordLockingLockRecordActionType) {
|
|
2
|
+
RecordLockingLockRecordActionType["requested"] = "requested";
|
|
3
|
+
RecordLockingLockRecordActionType["approved"] = "approved";
|
|
4
|
+
RecordLockingLockRecordActionType["denied"] = "denied";
|
|
5
|
+
return RecordLockingLockRecordActionType;
|
|
25
6
|
}({});
|
|
26
|
-
|
|
27
|
-
* Do not use any special chars other than #, as we use this to create lock record IDs.
|
|
28
|
-
*/
|
|
7
|
+
export { types_RecordLockingLockRecordActionType as RecordLockingLockRecordActionType };
|
|
29
8
|
|
|
30
9
|
//# sourceMappingURL=types.js.map
|
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["import type {\n CmsEntryListParams,\n CmsEntryMeta,\n CmsIdentity\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { CmsEntry, CmsError } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport type { CmsError, CmsEntry };\n\nexport type IRecordLockingIdentity = CmsIdentity;\n\nexport type IRecordLockingMeta = CmsEntryMeta;\n\nexport enum RecordLockingLockRecordActionType {\n requested = \"requested\",\n approved = \"approved\",\n denied = \"denied\"\n}\n\nexport interface IRecordLockingLockRecordRequestedAction {\n type: RecordLockingLockRecordActionType.requested;\n message?: string;\n createdOn: Date;\n createdBy: IRecordLockingIdentity;\n}\n\nexport interface IRecordLockingLockRecordApprovedAction {\n type: RecordLockingLockRecordActionType.approved;\n message?: string;\n createdOn: Date;\n createdBy: IRecordLockingIdentity;\n}\n\nexport interface IRecordLockingLockRecordDeniedAction {\n type: RecordLockingLockRecordActionType.denied;\n message?: string;\n createdOn: Date;\n createdBy: IRecordLockingIdentity;\n}\n\nexport type IRecordLockingLockRecordAction =\n | IRecordLockingLockRecordRequestedAction\n | IRecordLockingLockRecordApprovedAction\n | IRecordLockingLockRecordDeniedAction;\n\nexport interface IRecordLockingLockRecordObject {\n id: string;\n targetId: string;\n type: IRecordLockingLockRecordEntryType;\n lockedBy: IRecordLockingIdentity;\n lockedOn: Date;\n updatedOn: Date;\n expiresOn: Date;\n actions?: IRecordLockingLockRecordAction[];\n}\n\nexport interface IRecordLockingLockRecord extends IRecordLockingLockRecordObject {\n toObject(): IRecordLockingLockRecordObject;\n addAction(action: IRecordLockingLockRecordAction): void;\n getUnlockRequested(): IRecordLockingLockRecordRequestedAction | undefined;\n getUnlockApproved(): IRecordLockingLockRecordApprovedAction | undefined;\n getUnlockDenied(): IRecordLockingLockRecordDeniedAction | undefined;\n isExpired(): boolean;\n}\n\n/**\n * Do not use any special chars other than #, as we use this to create lock record IDs.\n */\nexport type IRecordLockingLockRecordEntryType = string;\n\nexport type IRecordLockingListAllLockRecordsParams = Pick<\n CmsEntryListParams,\n \"where\" | \"limit\" | \"sort\" | \"after\"\n>;\n\nexport type IRecordLockingListLockRecordsParams = IRecordLockingListAllLockRecordsParams;\n"],"names":["RecordLockingLockRecordActionType"],"mappings":"AAaO,IAAKA,0CAAiCA,WAAAA,GAAAA,SAAjCA,iCAAiC;;;;WAAjCA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IRecordLockingListLockRecordsParams } from "../types";
|
|
1
|
+
import type { IRecordLockingListLockRecordsParams } from "../types.js";
|
|
2
2
|
type IWhere = IRecordLockingListLockRecordsParams["where"] | undefined;
|
|
3
3
|
export declare const convertWhereCondition: (where: IWhere) => IWhere;
|
|
4
4
|
export {};
|
|
@@ -1,41 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
exports.convertWhereCondition = void 0;
|
|
7
|
-
var _lockRecordDatabaseId = require("./lockRecordDatabaseId");
|
|
8
|
-
const attachPrefix = value => {
|
|
9
|
-
if (!value) {
|
|
10
|
-
return value;
|
|
11
|
-
} else if (Array.isArray(value)) {
|
|
12
|
-
return value.map(_lockRecordDatabaseId.createLockRecordDatabaseId);
|
|
13
|
-
}
|
|
14
|
-
return (0, _lockRecordDatabaseId.createLockRecordDatabaseId)(value);
|
|
1
|
+
import { createLockRecordDatabaseId } from "./lockRecordDatabaseId.js";
|
|
2
|
+
const attachPrefix = (value)=>{
|
|
3
|
+
if (Array.isArray(value)) return value.map(createLockRecordDatabaseId);
|
|
4
|
+
return createLockRecordDatabaseId(value);
|
|
15
5
|
};
|
|
16
|
-
const convertWhereCondition = where
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
continue;
|
|
6
|
+
const convertWhereCondition = (where)=>{
|
|
7
|
+
if (!where) return where;
|
|
8
|
+
for(const key in where){
|
|
9
|
+
if (key.startsWith("AND") || key.startsWith("OR")) {
|
|
10
|
+
const value = where[key];
|
|
11
|
+
if (!value) continue;
|
|
12
|
+
for(const subKey in value)value[subKey] = convertWhereCondition(value[subKey]);
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
if (false === key.startsWith("id")) continue;
|
|
16
|
+
const value = where[key];
|
|
17
|
+
if (!value) continue;
|
|
18
|
+
const newKey = key.replace("id", "entryId");
|
|
19
|
+
where[newKey] = attachPrefix(where[key]);
|
|
20
|
+
delete where[key];
|
|
32
21
|
}
|
|
33
|
-
|
|
34
|
-
where[newKey] = attachPrefix(where[key]);
|
|
35
|
-
delete where[key];
|
|
36
|
-
}
|
|
37
|
-
return where;
|
|
22
|
+
return where;
|
|
38
23
|
};
|
|
39
|
-
|
|
24
|
+
export { convertWhereCondition };
|
|
40
25
|
|
|
41
26
|
//# sourceMappingURL=convertWhereCondition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"utils/convertWhereCondition.js","sources":["../../src/utils/convertWhereCondition.ts"],"sourcesContent":["import type { IRecordLockingListLockRecordsParams } from \"~/types.js\";\nimport { createLockRecordDatabaseId } from \"~/utils/lockRecordDatabaseId.js\";\n\ntype IWhere = IRecordLockingListLockRecordsParams[\"where\"] | undefined;\n\nconst attachPrefix = (value: string | string[]) => {\n if (Array.isArray(value)) {\n return value.map(createLockRecordDatabaseId);\n }\n return createLockRecordDatabaseId(value);\n};\n\nexport const convertWhereCondition = (where: IWhere): IWhere => {\n if (!where) {\n return where;\n }\n for (const key in where) {\n if (key.startsWith(\"AND\") || key.startsWith(\"OR\")) {\n const value = where[key as keyof typeof where] as IWhere[] | undefined;\n if (!value) {\n continue;\n }\n for (const subKey in value) {\n value[subKey] = convertWhereCondition(value[subKey]);\n }\n continue;\n } else if (key.startsWith(\"id\") === false) {\n continue;\n }\n const value = where[key as keyof typeof where];\n if (!value) {\n continue;\n }\n\n const newKey = key.replace(\"id\", \"entryId\") as keyof typeof where;\n // @ts-expect-error\n where[newKey] = attachPrefix(where[key]);\n // @ts-expect-error\n delete where[key];\n }\n return where;\n};\n"],"names":["attachPrefix","value","Array","createLockRecordDatabaseId","convertWhereCondition","where","key","subKey","newKey"],"mappings":";AAKA,MAAMA,eAAe,CAACC;IAClB,IAAIC,MAAM,OAAO,CAACD,QACd,OAAOA,MAAM,GAAG,CAACE;IAErB,OAAOA,2BAA2BF;AACtC;AAEO,MAAMG,wBAAwB,CAACC;IAClC,IAAI,CAACA,OACD,OAAOA;IAEX,IAAK,MAAMC,OAAOD,MAAO;QACrB,IAAIC,IAAI,UAAU,CAAC,UAAUA,IAAI,UAAU,CAAC,OAAO;YAC/C,MAAML,QAAQI,KAAK,CAACC,IAA0B;YAC9C,IAAI,CAACL,OACD;YAEJ,IAAK,MAAMM,UAAUN,MACjBA,KAAK,CAACM,OAAO,GAAGH,sBAAsBH,KAAK,CAACM,OAAO;YAEvD;QACJ;QAAO,IAAID,AAAyB,UAAzBA,IAAI,UAAU,CAAC,OACtB;QAEJ,MAAML,QAAQI,KAAK,CAACC,IAA0B;QAC9C,IAAI,CAACL,OACD;QAGJ,MAAMO,SAASF,IAAI,OAAO,CAAC,MAAM;QAEjCD,KAAK,CAACG,OAAO,GAAGR,aAAaK,KAAK,CAACC,IAAI;QAEvC,OAAOD,KAAK,CAACC,IAAI;IACrB;IACA,OAAOD;AACX"}
|
package/utils/getTimeout.js
CHANGED
|
@@ -1,28 +1,14 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getTimeout = void 0;
|
|
7
1
|
const minTimeoutInSeconds = 30;
|
|
8
2
|
const defaultTimeoutInSeconds = 60;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const getTimeout = input => {
|
|
14
|
-
if (input && input > 0) {
|
|
15
|
-
if (input < minTimeoutInSeconds) {
|
|
16
|
-
return minTimeoutInSeconds * 1000;
|
|
3
|
+
const getTimeout = (input)=>{
|
|
4
|
+
if (input && input > 0) {
|
|
5
|
+
if (input < minTimeoutInSeconds) return 1000 * minTimeoutInSeconds;
|
|
6
|
+
return 1000 * input;
|
|
17
7
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (!userDefined || isNaN(userDefined) || userDefined <= 0) {
|
|
22
|
-
return defaultTimeoutInSeconds * 1000;
|
|
23
|
-
}
|
|
24
|
-
return userDefined * 1000;
|
|
8
|
+
const userDefined = process.env.WEBINY_RECORD_LOCK_TIMEOUT ? parseInt(process.env.WEBINY_RECORD_LOCK_TIMEOUT) : void 0;
|
|
9
|
+
if (!userDefined || isNaN(userDefined) || userDefined <= 0) return 1000 * defaultTimeoutInSeconds;
|
|
10
|
+
return 1000 * userDefined;
|
|
25
11
|
};
|
|
26
|
-
|
|
12
|
+
export { getTimeout };
|
|
27
13
|
|
|
28
14
|
//# sourceMappingURL=getTimeout.js.map
|
package/utils/getTimeout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"utils/getTimeout.js","sources":["../../src/utils/getTimeout.ts"],"sourcesContent":["const minTimeoutInSeconds = 30;\nconst defaultTimeoutInSeconds = 60;\n/**\n * Input is in seconds.\n * Output is milliseconds.\n */\nexport const getTimeout = (input: number | undefined) => {\n if (input && input > 0) {\n if (input < minTimeoutInSeconds) {\n return minTimeoutInSeconds * 1000;\n }\n return input * 1000;\n }\n const userDefined = process.env.WEBINY_RECORD_LOCK_TIMEOUT\n ? parseInt(process.env.WEBINY_RECORD_LOCK_TIMEOUT)\n : undefined;\n if (!userDefined || isNaN(userDefined) || userDefined <= 0) {\n return defaultTimeoutInSeconds * 1000;\n }\n return userDefined * 1000;\n};\n"],"names":["minTimeoutInSeconds","defaultTimeoutInSeconds","getTimeout","input","userDefined","process","parseInt","undefined","isNaN"],"mappings":"AAAA,MAAMA,sBAAsB;AAC5B,MAAMC,0BAA0B;AAKzB,MAAMC,aAAa,CAACC;IACvB,IAAIA,SAASA,QAAQ,GAAG;QACpB,IAAIA,QAAQH,qBACR,OAAOA,AAAsB,OAAtBA;QAEX,OAAOG,AAAQ,OAARA;IACX;IACA,MAAMC,cAAcC,QAAQ,GAAG,CAAC,0BAA0B,GACpDC,SAASD,QAAQ,GAAG,CAAC,0BAA0B,IAC/CE;IACN,IAAI,CAACH,eAAeI,MAAMJ,gBAAgBA,eAAe,GACrD,OAAOH,AAA0B,OAA1BA;IAEX,OAAOG,AAAc,OAAdA;AACX"}
|
|
@@ -1,24 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.removeLockRecordDatabasePrefix = exports.createLockRecordDatabaseId = void 0;
|
|
7
|
-
var _utils = require("@webiny/utils");
|
|
1
|
+
import { parseIdentifier } from "@webiny/utils";
|
|
8
2
|
const WBY_LM_PREFIX = "wby-lm-";
|
|
9
|
-
const createLockRecordDatabaseId = input
|
|
10
|
-
|
|
11
|
-
id
|
|
12
|
-
|
|
13
|
-
if (id.startsWith(WBY_LM_PREFIX)) {
|
|
14
|
-
return id;
|
|
15
|
-
}
|
|
16
|
-
return `${WBY_LM_PREFIX}${id}`;
|
|
17
|
-
};
|
|
18
|
-
exports.createLockRecordDatabaseId = createLockRecordDatabaseId;
|
|
19
|
-
const removeLockRecordDatabasePrefix = id => {
|
|
20
|
-
return id.replace(WBY_LM_PREFIX, "");
|
|
3
|
+
const createLockRecordDatabaseId = (input)=>{
|
|
4
|
+
const { id } = parseIdentifier(input);
|
|
5
|
+
if (id.startsWith(WBY_LM_PREFIX)) return id;
|
|
6
|
+
return `${WBY_LM_PREFIX}${id}`;
|
|
21
7
|
};
|
|
22
|
-
|
|
8
|
+
const removeLockRecordDatabasePrefix = (id)=>id.replace(WBY_LM_PREFIX, "");
|
|
9
|
+
export { createLockRecordDatabaseId, removeLockRecordDatabasePrefix };
|
|
23
10
|
|
|
24
11
|
//# sourceMappingURL=lockRecordDatabaseId.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"utils/lockRecordDatabaseId.js","sources":["../../src/utils/lockRecordDatabaseId.ts"],"sourcesContent":["import { parseIdentifier } from \"@webiny/utils\";\n\nconst WBY_LM_PREFIX = \"wby-lm-\";\n\nexport const createLockRecordDatabaseId = (input: string): string => {\n const { id } = parseIdentifier(input);\n if (id.startsWith(WBY_LM_PREFIX)) {\n return id;\n }\n return `${WBY_LM_PREFIX}${id}`;\n};\n\nexport const removeLockRecordDatabasePrefix = (id: string) => {\n return id.replace(WBY_LM_PREFIX, \"\");\n};\n"],"names":["WBY_LM_PREFIX","createLockRecordDatabaseId","input","id","parseIdentifier","removeLockRecordDatabasePrefix"],"mappings":";AAEA,MAAMA,gBAAgB;AAEf,MAAMC,6BAA6B,CAACC;IACvC,MAAM,EAAEC,EAAE,EAAE,GAAGC,gBAAgBF;IAC/B,IAAIC,GAAG,UAAU,CAACH,gBACd,OAAOG;IAEX,OAAO,GAAGH,gBAAgBG,IAAI;AAClC;AAEO,MAAME,iCAAiC,CAACF,KACpCA,GAAG,OAAO,CAACH,eAAe"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { IRecordLockingGetLockRecordParams, IRecordLockingLockRecord } from "../types";
|
|
2
|
-
export type IGetLockRecordUseCaseExecuteParams = IRecordLockingGetLockRecordParams;
|
|
3
|
-
export interface IGetLockRecordUseCaseExecute {
|
|
4
|
-
(params: IGetLockRecordUseCaseExecuteParams): Promise<IRecordLockingLockRecord | null>;
|
|
5
|
-
}
|
|
6
|
-
export interface IGetLockRecordUseCase {
|
|
7
|
-
execute: IGetLockRecordUseCaseExecute;
|
|
8
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["IGetLockRecordUseCase.ts"],"sourcesContent":["import type { IRecordLockingGetLockRecordParams, IRecordLockingLockRecord } from \"~/types\";\n\nexport type IGetLockRecordUseCaseExecuteParams = IRecordLockingGetLockRecordParams;\n\nexport interface IGetLockRecordUseCaseExecute {\n (params: IGetLockRecordUseCaseExecuteParams): Promise<IRecordLockingLockRecord | null>;\n}\n\nexport interface IGetLockRecordUseCase {\n execute: IGetLockRecordUseCaseExecute;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { IRecordLockingIsLockedParams, IRecordLockingLockRecord } from "../types";
|
|
2
|
-
export type IGetLockedEntryLockRecordUseCaseExecuteParams = IRecordLockingIsLockedParams;
|
|
3
|
-
export interface IGetLockedEntryLockRecordUseCaseExecute {
|
|
4
|
-
(params: IGetLockedEntryLockRecordUseCaseExecuteParams): Promise<IRecordLockingLockRecord | null>;
|
|
5
|
-
}
|
|
6
|
-
export interface IGetLockedEntryLockRecordUseCase {
|
|
7
|
-
execute: IGetLockedEntryLockRecordUseCaseExecute;
|
|
8
|
-
}
|