@webiny/api-record-locking 0.0.0-unstable.06b2ede40f
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/LICENSE +21 -0
- package/README.md +10 -0
- package/abstractions/IGetLockRecordUseCase.d.ts +8 -0
- package/abstractions/IGetLockRecordUseCase.js +7 -0
- package/abstractions/IGetLockRecordUseCase.js.map +1 -0
- package/abstractions/IGetLockedEntryLockRecordUseCase.d.ts +8 -0
- package/abstractions/IGetLockedEntryLockRecordUseCase.js +7 -0
- package/abstractions/IGetLockedEntryLockRecordUseCase.js.map +1 -0
- package/abstractions/IIsEntryLocked.d.ts +8 -0
- package/abstractions/IIsEntryLocked.js +7 -0
- package/abstractions/IIsEntryLocked.js.map +1 -0
- package/abstractions/IKickOutCurrentUserUseCase.d.ts +5 -0
- package/abstractions/IKickOutCurrentUserUseCase.js +7 -0
- package/abstractions/IKickOutCurrentUserUseCase.js.map +1 -0
- package/abstractions/IListAllLockRecordsUseCase.d.ts +9 -0
- package/abstractions/IListAllLockRecordsUseCase.js +7 -0
- package/abstractions/IListAllLockRecordsUseCase.js.map +1 -0
- package/abstractions/IListLockRecordsUseCase.d.ts +10 -0
- package/abstractions/IListLockRecordsUseCase.js +7 -0
- package/abstractions/IListLockRecordsUseCase.js.map +1 -0
- package/abstractions/ILockEntryUseCase.d.ts +11 -0
- package/abstractions/ILockEntryUseCase.js +7 -0
- package/abstractions/ILockEntryUseCase.js.map +1 -0
- package/abstractions/IUnlockEntryRequestUseCase.d.ts +11 -0
- package/abstractions/IUnlockEntryRequestUseCase.js +7 -0
- package/abstractions/IUnlockEntryRequestUseCase.js.map +1 -0
- package/abstractions/IUnlockEntryUseCase.d.ts +12 -0
- package/abstractions/IUnlockEntryUseCase.js +7 -0
- package/abstractions/IUnlockEntryUseCase.js.map +1 -0
- package/abstractions/IUpdateEntryLockUseCase.d.ts +11 -0
- package/abstractions/IUpdateEntryLockUseCase.js +7 -0
- package/abstractions/IUpdateEntryLockUseCase.js.map +1 -0
- package/crud/crud.d.ts +7 -0
- package/crud/crud.js +204 -0
- package/crud/crud.js.map +1 -0
- package/crud/model.d.ts +2 -0
- package/crud/model.js +127 -0
- package/crud/model.js.map +1 -0
- package/graphql/schema.d.ts +7 -0
- package/graphql/schema.js +280 -0
- package/graphql/schema.js.map +1 -0
- package/index.d.ts +9 -0
- package/index.js +39 -0
- package/index.js.map +1 -0
- package/package.json +46 -0
- package/types.d.ts +182 -0
- package/types.js +30 -0
- package/types.js.map +1 -0
- package/useCases/GetLockRecord/GetLockRecordUseCase.d.ts +16 -0
- package/useCases/GetLockRecord/GetLockRecordUseCase.js +39 -0
- package/useCases/GetLockRecord/GetLockRecordUseCase.js.map +1 -0
- package/useCases/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.d.ts +16 -0
- package/useCases/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js +29 -0
- package/useCases/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js.map +1 -0
- package/useCases/IsEntryLocked/IsEntryLockedUseCase.d.ts +13 -0
- package/useCases/IsEntryLocked/IsEntryLockedUseCase.js +31 -0
- package/useCases/IsEntryLocked/IsEntryLockedUseCase.js.map +1 -0
- package/useCases/KickOutCurrentUser/KickOutCurrentUserUseCase.d.ts +12 -0
- package/useCases/KickOutCurrentUser/KickOutCurrentUserUseCase.js +46 -0
- package/useCases/KickOutCurrentUser/KickOutCurrentUserUseCase.js.map +1 -0
- package/useCases/ListAllLockRecordsUseCase/ListAllLockRecordsUseCase.d.ts +13 -0
- package/useCases/ListAllLockRecordsUseCase/ListAllLockRecordsUseCase.js +34 -0
- package/useCases/ListAllLockRecordsUseCase/ListAllLockRecordsUseCase.js.map +1 -0
- package/useCases/ListLockRecordsUseCase/ListLockRecordsUseCase.d.ts +14 -0
- package/useCases/ListLockRecordsUseCase/ListLockRecordsUseCase.js +27 -0
- package/useCases/ListLockRecordsUseCase/ListLockRecordsUseCase.js.map +1 -0
- package/useCases/LockEntryUseCase/LockEntryUseCase.d.ts +21 -0
- package/useCases/LockEntryUseCase/LockEntryUseCase.js +64 -0
- package/useCases/LockEntryUseCase/LockEntryUseCase.js.map +1 -0
- package/useCases/UnlockEntryUseCase/UnlockEntryUseCase.d.ts +23 -0
- package/useCases/UnlockEntryUseCase/UnlockEntryUseCase.js +90 -0
- package/useCases/UnlockEntryUseCase/UnlockEntryUseCase.js.map +1 -0
- package/useCases/UnlockRequestUseCase/UnlockEntryRequestUseCase.d.ts +21 -0
- package/useCases/UnlockRequestUseCase/UnlockEntryRequestUseCase.js +82 -0
- package/useCases/UnlockRequestUseCase/UnlockEntryRequestUseCase.js.map +1 -0
- package/useCases/UpdateEntryLock/UpdateEntryLockUseCase.d.ts +26 -0
- package/useCases/UpdateEntryLock/UpdateEntryLockUseCase.js +93 -0
- package/useCases/UpdateEntryLock/UpdateEntryLockUseCase.js.map +1 -0
- package/useCases/index.d.ts +31 -0
- package/useCases/index.js +96 -0
- package/useCases/index.js.map +1 -0
- package/useCases/types.d.ts +5 -0
- package/useCases/types.js +7 -0
- package/useCases/types.js.map +1 -0
- package/utils/calculateExpiresOn.d.ts +2 -0
- package/utils/calculateExpiresOn.js +16 -0
- package/utils/calculateExpiresOn.js.map +1 -0
- package/utils/checkPermissions.d.ts +7 -0
- package/utils/checkPermissions.js +21 -0
- package/utils/checkPermissions.js.map +1 -0
- package/utils/convertEntryToLockRecord.d.ts +28 -0
- package/utils/convertEntryToLockRecord.js +91 -0
- package/utils/convertEntryToLockRecord.js.map +1 -0
- package/utils/convertWhereCondition.d.ts +4 -0
- package/utils/convertWhereCondition.js +41 -0
- package/utils/convertWhereCondition.js.map +1 -0
- package/utils/getTimeout.d.ts +5 -0
- package/utils/getTimeout.js +28 -0
- package/utils/getTimeout.js.map +1 -0
- package/utils/lockRecordDatabaseId.d.ts +2 -0
- package/utils/lockRecordDatabaseId.js +24 -0
- package/utils/lockRecordDatabaseId.js.map +1 -0
- package/utils/resolve.d.ts +8 -0
- package/utils/resolve.js +30 -0
- package/utils/resolve.js.map +1 -0
- package/utils/validateSameIdentity.d.ts +6 -0
- package/utils/validateSameIdentity.js +24 -0
- package/utils/validateSameIdentity.js.map +1 -0
package/crud/model.js
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createLockingModel = exports.RECORD_LOCKING_MODEL_ID = void 0;
|
|
7
|
+
var _apiHeadlessCms = require("@webiny/api-headless-cms");
|
|
8
|
+
const RECORD_LOCKING_MODEL_ID = exports.RECORD_LOCKING_MODEL_ID = "wby_recordLocking";
|
|
9
|
+
const createLockingModel = () => {
|
|
10
|
+
return (0, _apiHeadlessCms.createCmsModel)((0, _apiHeadlessCms.createPrivateModel)({
|
|
11
|
+
modelId: RECORD_LOCKING_MODEL_ID,
|
|
12
|
+
name: "Record Lock Tracking",
|
|
13
|
+
fields: [{
|
|
14
|
+
id: "targetId",
|
|
15
|
+
type: "text",
|
|
16
|
+
fieldId: "targetId",
|
|
17
|
+
storageId: "text@targetId",
|
|
18
|
+
label: "Target ID",
|
|
19
|
+
validation: [{
|
|
20
|
+
name: "required",
|
|
21
|
+
message: "Target ID is required."
|
|
22
|
+
}]
|
|
23
|
+
},
|
|
24
|
+
/**
|
|
25
|
+
* Since we need a generic way to track records, we will use type to determine if it's a cms record or a page or a form, etc...
|
|
26
|
+
* Update IHeadlessCmsLockRecordValues in types.ts file with additional fields as required.
|
|
27
|
+
*
|
|
28
|
+
* @see IHeadlessCmsLockRecordValues
|
|
29
|
+
*/
|
|
30
|
+
{
|
|
31
|
+
id: "type",
|
|
32
|
+
type: "text",
|
|
33
|
+
fieldId: "type",
|
|
34
|
+
storageId: "text@type",
|
|
35
|
+
label: "Record Type",
|
|
36
|
+
validation: [{
|
|
37
|
+
name: "required",
|
|
38
|
+
message: "Record type is required."
|
|
39
|
+
}]
|
|
40
|
+
}, {
|
|
41
|
+
id: "actions",
|
|
42
|
+
type: "object",
|
|
43
|
+
fieldId: "actions",
|
|
44
|
+
storageId: "object@actions",
|
|
45
|
+
label: "Actions",
|
|
46
|
+
multipleValues: true,
|
|
47
|
+
settings: {
|
|
48
|
+
fields: [{
|
|
49
|
+
id: "type",
|
|
50
|
+
type: "text",
|
|
51
|
+
fieldId: "type",
|
|
52
|
+
storageId: "text@type",
|
|
53
|
+
label: "Action Type",
|
|
54
|
+
validation: [{
|
|
55
|
+
name: "required",
|
|
56
|
+
message: "Action type is required."
|
|
57
|
+
}]
|
|
58
|
+
}, {
|
|
59
|
+
id: "message",
|
|
60
|
+
type: "text",
|
|
61
|
+
fieldId: "message",
|
|
62
|
+
storageId: "text@message",
|
|
63
|
+
label: "Message"
|
|
64
|
+
}, {
|
|
65
|
+
id: "createdBy",
|
|
66
|
+
type: "object",
|
|
67
|
+
fieldId: "createdBy",
|
|
68
|
+
storageId: "object@createdBy",
|
|
69
|
+
label: "Created By",
|
|
70
|
+
validation: [{
|
|
71
|
+
name: "required",
|
|
72
|
+
message: "Created by is required."
|
|
73
|
+
}],
|
|
74
|
+
settings: {
|
|
75
|
+
fields: [{
|
|
76
|
+
id: "id",
|
|
77
|
+
type: "text",
|
|
78
|
+
fieldId: "id",
|
|
79
|
+
storageId: "text@id",
|
|
80
|
+
label: "ID",
|
|
81
|
+
validation: [{
|
|
82
|
+
name: "required",
|
|
83
|
+
message: "ID is required."
|
|
84
|
+
}]
|
|
85
|
+
}, {
|
|
86
|
+
id: "displayName",
|
|
87
|
+
type: "text",
|
|
88
|
+
fieldId: "displayName",
|
|
89
|
+
storageId: "text@displayName",
|
|
90
|
+
label: "Display Name",
|
|
91
|
+
validation: [{
|
|
92
|
+
name: "required",
|
|
93
|
+
message: "Display name is required."
|
|
94
|
+
}]
|
|
95
|
+
}, {
|
|
96
|
+
id: "type",
|
|
97
|
+
type: "text",
|
|
98
|
+
fieldId: "type",
|
|
99
|
+
storageId: "text@type",
|
|
100
|
+
label: "Type",
|
|
101
|
+
validation: [{
|
|
102
|
+
name: "required",
|
|
103
|
+
message: "Type is required."
|
|
104
|
+
}]
|
|
105
|
+
}]
|
|
106
|
+
}
|
|
107
|
+
}, {
|
|
108
|
+
id: "createdOn",
|
|
109
|
+
type: "datetime",
|
|
110
|
+
fieldId: "createdOn",
|
|
111
|
+
storageId: "datetime@createdOn",
|
|
112
|
+
settings: {
|
|
113
|
+
type: "dateTimeWithoutTimezone"
|
|
114
|
+
},
|
|
115
|
+
label: "Created On",
|
|
116
|
+
validation: [{
|
|
117
|
+
name: "required",
|
|
118
|
+
message: "Created on is required."
|
|
119
|
+
}]
|
|
120
|
+
}]
|
|
121
|
+
}
|
|
122
|
+
}]
|
|
123
|
+
}));
|
|
124
|
+
};
|
|
125
|
+
exports.createLockingModel = createLockingModel;
|
|
126
|
+
|
|
127
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_apiHeadlessCms","require","RECORD_LOCKING_MODEL_ID","exports","createLockingModel","createCmsModel","createPrivateModel","modelId","name","fields","id","type","fieldId","storageId","label","validation","message","multipleValues","settings"],"sources":["model.ts"],"sourcesContent":["import { createCmsModel, createPrivateModel } from \"@webiny/api-headless-cms\";\n\nexport const RECORD_LOCKING_MODEL_ID = \"wby_recordLocking\";\n\nexport const createLockingModel = () => {\n return createCmsModel(\n createPrivateModel({\n modelId: RECORD_LOCKING_MODEL_ID,\n name: \"Record Lock Tracking\",\n fields: [\n {\n id: \"targetId\",\n type: \"text\",\n fieldId: \"targetId\",\n storageId: \"text@targetId\",\n label: \"Target ID\",\n validation: [\n {\n name: \"required\",\n message: \"Target ID is required.\"\n }\n ]\n },\n /**\n * Since we need a generic way to track records, we will use type to determine if it's a cms record or a page or a form, etc...\n * Update IHeadlessCmsLockRecordValues in types.ts file with additional fields as required.\n *\n * @see IHeadlessCmsLockRecordValues\n */\n {\n id: \"type\",\n type: \"text\",\n fieldId: \"type\",\n storageId: \"text@type\",\n label: \"Record Type\",\n validation: [\n {\n name: \"required\",\n message: \"Record type is required.\"\n }\n ]\n },\n {\n id: \"actions\",\n type: \"object\",\n fieldId: \"actions\",\n storageId: \"object@actions\",\n label: \"Actions\",\n multipleValues: true,\n settings: {\n fields: [\n {\n id: \"type\",\n type: \"text\",\n fieldId: \"type\",\n storageId: \"text@type\",\n label: \"Action Type\",\n validation: [\n {\n name: \"required\",\n message: \"Action type is required.\"\n }\n ]\n },\n {\n id: \"message\",\n type: \"text\",\n fieldId: \"message\",\n storageId: \"text@message\",\n label: \"Message\"\n },\n {\n id: \"createdBy\",\n type: \"object\",\n fieldId: \"createdBy\",\n storageId: \"object@createdBy\",\n label: \"Created By\",\n validation: [\n {\n name: \"required\",\n message: \"Created by is required.\"\n }\n ],\n settings: {\n fields: [\n {\n id: \"id\",\n type: \"text\",\n fieldId: \"id\",\n storageId: \"text@id\",\n label: \"ID\",\n validation: [\n {\n name: \"required\",\n message: \"ID is required.\"\n }\n ]\n },\n {\n id: \"displayName\",\n type: \"text\",\n fieldId: \"displayName\",\n storageId: \"text@displayName\",\n label: \"Display Name\",\n validation: [\n {\n name: \"required\",\n message: \"Display name is required.\"\n }\n ]\n },\n {\n id: \"type\",\n type: \"text\",\n fieldId: \"type\",\n storageId: \"text@type\",\n label: \"Type\",\n validation: [\n {\n name: \"required\",\n message: \"Type is required.\"\n }\n ]\n }\n ]\n }\n },\n {\n id: \"createdOn\",\n type: \"datetime\",\n fieldId: \"createdOn\",\n storageId: \"datetime@createdOn\",\n settings: {\n type: \"dateTimeWithoutTimezone\"\n },\n label: \"Created On\",\n validation: [\n {\n name: \"required\",\n message: \"Created on is required.\"\n }\n ]\n }\n ]\n }\n }\n ]\n })\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Context } from "../types";
|
|
2
|
+
import type { IGraphQLSchemaPlugin } from "@webiny/handler-graphql";
|
|
3
|
+
interface Params {
|
|
4
|
+
context: Pick<Context, "plugins" | "recordLocking" | "security" | "cms">;
|
|
5
|
+
}
|
|
6
|
+
export declare const createGraphQLSchema: (params: Params) => Promise<IGraphQLSchemaPlugin<Context>>;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createGraphQLSchema = void 0;
|
|
7
|
+
var _resolve = require("../utils/resolve");
|
|
8
|
+
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
9
|
+
var _renderFields = require("@webiny/api-headless-cms/utils/renderFields");
|
|
10
|
+
var _createFieldTypePluginRecords = require("@webiny/api-headless-cms/graphql/schema/createFieldTypePluginRecords");
|
|
11
|
+
var _renderListFilterFields = require("@webiny/api-headless-cms/utils/renderListFilterFields");
|
|
12
|
+
var _renderSortEnum = require("@webiny/api-headless-cms/utils/renderSortEnum");
|
|
13
|
+
var _checkPermissions = require("../utils/checkPermissions");
|
|
14
|
+
const createGraphQLSchema = async params => {
|
|
15
|
+
const context = params.context;
|
|
16
|
+
const model = await context.recordLocking.getModel();
|
|
17
|
+
const models = await context.security.withoutAuthorization(async () => {
|
|
18
|
+
return (await context.cms.listModels()).filter(model => {
|
|
19
|
+
if (model.fields.length === 0) {
|
|
20
|
+
return false;
|
|
21
|
+
} else if (model.isPrivate) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return true;
|
|
25
|
+
});
|
|
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")}
|
|
51
|
+
|
|
52
|
+
type RecordLockingError {
|
|
53
|
+
message: String
|
|
54
|
+
code: String
|
|
55
|
+
data: JSON
|
|
56
|
+
stack: String
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
enum RecordLockingRecordActionType {
|
|
60
|
+
requested
|
|
61
|
+
approved
|
|
62
|
+
denied
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
type RecordLockingIdentity {
|
|
66
|
+
id: String!
|
|
67
|
+
displayName: String
|
|
68
|
+
type: String
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
type RecordLockingRecordAction {
|
|
72
|
+
id: ID!
|
|
73
|
+
type: RecordLockingRecordActionType!
|
|
74
|
+
message: String
|
|
75
|
+
createdBy: RecordLockingIdentity!
|
|
76
|
+
createdOn: DateTime!
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
type RecordLockingRecord {
|
|
80
|
+
id: ID!
|
|
81
|
+
lockedBy: RecordLockingIdentity!
|
|
82
|
+
lockedOn: DateTime!
|
|
83
|
+
updatedOn: DateTime!
|
|
84
|
+
expiresOn: DateTime!
|
|
85
|
+
${recordLockingFields.map(f => f.fields).join("\n")}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
type RecordLockingIsEntryLockedResponse {
|
|
89
|
+
data: Boolean
|
|
90
|
+
error: RecordLockingError
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
type RecordLockingGetLockRecordResponse {
|
|
94
|
+
data: RecordLockingRecord
|
|
95
|
+
error: RecordLockingError
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
type RecordLockingGetLockedEntryLockRecordResponse {
|
|
99
|
+
data: RecordLockingRecord
|
|
100
|
+
error: RecordLockingError
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
type RecordLockingListLockRecordsResponse {
|
|
104
|
+
data: [RecordLockingRecord!]
|
|
105
|
+
error: RecordLockingError
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
type RecordLockingLockEntryResponse {
|
|
109
|
+
data: RecordLockingRecord
|
|
110
|
+
error: RecordLockingError
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
type RecordLockingUpdateLockResponse {
|
|
114
|
+
data: RecordLockingRecord
|
|
115
|
+
error: RecordLockingError
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
type RecordLockingUnlockEntryResponse {
|
|
119
|
+
data: RecordLockingRecord
|
|
120
|
+
error: RecordLockingError
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
type RecordLockingUnlockEntryRequestResponse {
|
|
124
|
+
data: RecordLockingRecord
|
|
125
|
+
error: RecordLockingError
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
input RecordLockingListWhereInput {
|
|
129
|
+
${listFilterFieldsRender}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
enum RecordLockingListSorter {
|
|
133
|
+
${sortEnumRender}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
type RecordLockingQuery {
|
|
137
|
+
_empty: String
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
type RecordLockingMutation {
|
|
141
|
+
_empty: String
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
extend type RecordLockingQuery {
|
|
145
|
+
isEntryLocked(id: ID!, type: String!): RecordLockingIsEntryLockedResponse!
|
|
146
|
+
getLockRecord(id: ID!, type: String!): RecordLockingGetLockRecordResponse!
|
|
147
|
+
# 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
|
|
148
|
+
getLockedEntryLockRecord(id: ID!, type: String!): RecordLockingGetLockedEntryLockRecordResponse!
|
|
149
|
+
listAllLockRecords(
|
|
150
|
+
where: RecordLockingListWhereInput
|
|
151
|
+
sort: [RecordLockingListSorter!]
|
|
152
|
+
limit: Int
|
|
153
|
+
after: String
|
|
154
|
+
): RecordLockingListLockRecordsResponse!
|
|
155
|
+
# Basically same as listAllLockRecords except this one will filter out records with expired lock.
|
|
156
|
+
listLockRecords(
|
|
157
|
+
where: RecordLockingListWhereInput
|
|
158
|
+
sort: [RecordLockingListSorter!]
|
|
159
|
+
limit: Int
|
|
160
|
+
after: String
|
|
161
|
+
): RecordLockingListLockRecordsResponse!
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
extend type RecordLockingMutation {
|
|
165
|
+
lockEntry(id: ID!, type: String!): RecordLockingLockEntryResponse!
|
|
166
|
+
updateEntryLock(id: ID!, type: String!): RecordLockingUpdateLockResponse!
|
|
167
|
+
unlockEntry(id: ID!, type: String!, force: Boolean): RecordLockingUnlockEntryResponse!
|
|
168
|
+
unlockEntryRequest(
|
|
169
|
+
id: ID!
|
|
170
|
+
type: String!
|
|
171
|
+
): RecordLockingUnlockEntryRequestResponse!
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
extend type Query {
|
|
175
|
+
recordLocking: RecordLockingQuery
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
extend type Mutation {
|
|
179
|
+
recordLocking: RecordLockingMutation
|
|
180
|
+
}
|
|
181
|
+
`,
|
|
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;
|
|
208
|
+
}
|
|
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
|
+
}
|
|
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;
|
|
277
|
+
};
|
|
278
|
+
exports.createGraphQLSchema = createGraphQLSchema;
|
|
279
|
+
|
|
280
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +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":[]}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ContextPlugin } from "@webiny/api";
|
|
2
|
+
import type { Context } from "./types";
|
|
3
|
+
export interface ICreateContextPluginParams {
|
|
4
|
+
/**
|
|
5
|
+
* A number of seconds after last activity to wait before the record is automatically unlocked.
|
|
6
|
+
*/
|
|
7
|
+
timeout?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare const createRecordLocking: (params?: ICreateContextPluginParams) => ContextPlugin<Context>[];
|
package/index.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createRecordLocking = void 0;
|
|
7
|
+
var _schema = require("./graphql/schema");
|
|
8
|
+
var _api = require("@webiny/api");
|
|
9
|
+
var _crud = require("./crud/crud");
|
|
10
|
+
var _model = require("./crud/model");
|
|
11
|
+
var _apiHeadlessCms = require("@webiny/api-headless-cms");
|
|
12
|
+
const createContextPlugin = params => {
|
|
13
|
+
const plugin = new _api.ContextPlugin(async context => {
|
|
14
|
+
if (!context.wcp.canUseRecordLocking()) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const ready = await (0, _apiHeadlessCms.isHeadlessCmsReady)(context);
|
|
18
|
+
if (!ready) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
context.plugins.register((0, _model.createLockingModel)());
|
|
22
|
+
context.recordLocking = await (0, _crud.createRecordLockingCrud)({
|
|
23
|
+
context,
|
|
24
|
+
timeout: params?.timeout
|
|
25
|
+
});
|
|
26
|
+
const graphQlPlugin = await (0, _schema.createGraphQLSchema)({
|
|
27
|
+
context
|
|
28
|
+
});
|
|
29
|
+
context.plugins.register(graphQlPlugin);
|
|
30
|
+
});
|
|
31
|
+
plugin.name = "context.recordLocking";
|
|
32
|
+
return plugin;
|
|
33
|
+
};
|
|
34
|
+
const createRecordLocking = params => {
|
|
35
|
+
return [createContextPlugin(params)];
|
|
36
|
+
};
|
|
37
|
+
exports.createRecordLocking = createRecordLocking;
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_schema","require","_api","_crud","_model","_apiHeadlessCms","createContextPlugin","params","plugin","ContextPlugin","context","wcp","canUseRecordLocking","ready","isHeadlessCmsReady","plugins","register","createLockingModel","recordLocking","createRecordLockingCrud","timeout","graphQlPlugin","createGraphQLSchema","name","createRecordLocking","exports"],"sources":["index.ts"],"sourcesContent":["import { createGraphQLSchema } from \"~/graphql/schema\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport type { Context } from \"~/types\";\nimport { createRecordLockingCrud } from \"~/crud/crud\";\nimport { createLockingModel } from \"~/crud/model\";\nimport { isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\n\nexport interface ICreateContextPluginParams {\n /**\n * A number of seconds after last activity to wait before the record is automatically unlocked.\n */\n timeout?: number;\n}\n\nconst createContextPlugin = (params?: ICreateContextPluginParams) => {\n const plugin = new ContextPlugin<Context>(async context => {\n if (!context.wcp.canUseRecordLocking()) {\n return;\n }\n\n const ready = await isHeadlessCmsReady(context);\n if (!ready) {\n return;\n }\n context.plugins.register(createLockingModel());\n\n context.recordLocking = await createRecordLockingCrud({\n context,\n timeout: params?.timeout\n });\n\n const graphQlPlugin = await createGraphQLSchema({ context });\n context.plugins.register(graphQlPlugin);\n });\n plugin.name = \"context.recordLocking\";\n\n return plugin;\n};\n\nexport const createRecordLocking = (params?: ICreateContextPluginParams) => {\n return [createContextPlugin(params)];\n};\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,IAAA,GAAAD,OAAA;AAEA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,eAAA,GAAAJ,OAAA;AASA,MAAMK,mBAAmB,GAAIC,MAAmC,IAAK;EACjE,MAAMC,MAAM,GAAG,IAAIC,kBAAa,CAAU,MAAMC,OAAO,IAAI;IACvD,IAAI,CAACA,OAAO,CAACC,GAAG,CAACC,mBAAmB,CAAC,CAAC,EAAE;MACpC;IACJ;IAEA,MAAMC,KAAK,GAAG,MAAM,IAAAC,kCAAkB,EAACJ,OAAO,CAAC;IAC/C,IAAI,CAACG,KAAK,EAAE;MACR;IACJ;IACAH,OAAO,CAACK,OAAO,CAACC,QAAQ,CAAC,IAAAC,yBAAkB,EAAC,CAAC,CAAC;IAE9CP,OAAO,CAACQ,aAAa,GAAG,MAAM,IAAAC,6BAAuB,EAAC;MAClDT,OAAO;MACPU,OAAO,EAAEb,MAAM,EAAEa;IACrB,CAAC,CAAC;IAEF,MAAMC,aAAa,GAAG,MAAM,IAAAC,2BAAmB,EAAC;MAAEZ;IAAQ,CAAC,CAAC;IAC5DA,OAAO,CAACK,OAAO,CAACC,QAAQ,CAACK,aAAa,CAAC;EAC3C,CAAC,CAAC;EACFb,MAAM,CAACe,IAAI,GAAG,uBAAuB;EAErC,OAAOf,MAAM;AACjB,CAAC;AAEM,MAAMgB,mBAAmB,GAAIjB,MAAmC,IAAK;EACxE,OAAO,CAACD,mBAAmB,CAACC,MAAM,CAAC,CAAC;AACxC,CAAC;AAACkB,OAAA,CAAAD,mBAAA,GAAAA,mBAAA","ignoreList":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@webiny/api-record-locking",
|
|
3
|
+
"version": "0.0.0-unstable.06b2ede40f",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/webiny/webiny-js.git"
|
|
8
|
+
},
|
|
9
|
+
"description": "Record Locking built on top of the Headless CMS.",
|
|
10
|
+
"contributors": [
|
|
11
|
+
"Bruno Zorić <bruno@webiny.com>"
|
|
12
|
+
],
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@webiny/api": "0.0.0-unstable.06b2ede40f",
|
|
16
|
+
"@webiny/api-headless-cms": "0.0.0-unstable.06b2ede40f",
|
|
17
|
+
"@webiny/api-websockets": "0.0.0-unstable.06b2ede40f",
|
|
18
|
+
"@webiny/error": "0.0.0-unstable.06b2ede40f",
|
|
19
|
+
"@webiny/handler": "0.0.0-unstable.06b2ede40f",
|
|
20
|
+
"@webiny/handler-aws": "0.0.0-unstable.06b2ede40f",
|
|
21
|
+
"@webiny/handler-graphql": "0.0.0-unstable.06b2ede40f",
|
|
22
|
+
"@webiny/plugins": "0.0.0-unstable.06b2ede40f",
|
|
23
|
+
"@webiny/pubsub": "0.0.0-unstable.06b2ede40f",
|
|
24
|
+
"@webiny/utils": "0.0.0-unstable.06b2ede40f"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@webiny/api-i18n": "0.0.0-unstable.06b2ede40f",
|
|
28
|
+
"@webiny/api-security": "0.0.0-unstable.06b2ede40f",
|
|
29
|
+
"@webiny/api-tenancy": "0.0.0-unstable.06b2ede40f",
|
|
30
|
+
"@webiny/api-wcp": "0.0.0-unstable.06b2ede40f",
|
|
31
|
+
"@webiny/project-utils": "0.0.0-unstable.06b2ede40f",
|
|
32
|
+
"graphql": "15.9.0",
|
|
33
|
+
"rimraf": "6.0.1",
|
|
34
|
+
"type-fest": "4.14.0",
|
|
35
|
+
"typescript": "5.3.3"
|
|
36
|
+
},
|
|
37
|
+
"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"
|
|
44
|
+
},
|
|
45
|
+
"gitHead": "06b2ede40fc2212a70eeafd74afd50b56fb0ce82"
|
|
46
|
+
}
|