@cap-js/process 0.0.0 → 0.1.1
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 +201 -0
- package/README.md +635 -0
- package/cds-plugin.js +2 -0
- package/dist/cds-plugin.js +4 -0
- package/dist/cds-plugin.js.map +1 -0
- package/dist/lib/api/index.js +23 -0
- package/dist/lib/api/index.js.map +1 -0
- package/dist/lib/api/local-workflow-store.js +85 -0
- package/dist/lib/api/local-workflow-store.js.map +1 -0
- package/dist/lib/api/process-api-client.js +103 -0
- package/dist/lib/api/process-api-client.js.map +1 -0
- package/dist/lib/api/workflow-client.js +174 -0
- package/dist/lib/api/workflow-client.js.map +1 -0
- package/dist/lib/auth/credentials.js +17 -0
- package/dist/lib/auth/credentials.js.map +1 -0
- package/dist/lib/auth/index.js +11 -0
- package/dist/lib/auth/index.js.map +1 -0
- package/dist/lib/auth/token-cache.js +67 -0
- package/dist/lib/auth/token-cache.js.map +1 -0
- package/dist/lib/auth/token-provider.js +32 -0
- package/dist/lib/auth/token-provider.js.map +1 -0
- package/dist/lib/build/constants.js +106 -0
- package/dist/lib/build/constants.js.map +1 -0
- package/dist/lib/build/index.js +22 -0
- package/dist/lib/build/index.js.map +1 -0
- package/dist/lib/build/plugin.js +126 -0
- package/dist/lib/build/plugin.js.map +1 -0
- package/dist/lib/build/validation-utils.js +309 -0
- package/dist/lib/build/validation-utils.js.map +1 -0
- package/dist/lib/build/validations.js +185 -0
- package/dist/lib/build/validations.js.map +1 -0
- package/dist/lib/constants.js +78 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/handlers/annotationCache.js +47 -0
- package/dist/lib/handlers/annotationCache.js.map +1 -0
- package/dist/lib/handlers/annotationHandlers.js +57 -0
- package/dist/lib/handlers/annotationHandlers.js.map +1 -0
- package/dist/lib/handlers/index.js +26 -0
- package/dist/lib/handlers/index.js.map +1 -0
- package/dist/lib/handlers/onDeleteUtils.js +63 -0
- package/dist/lib/handlers/onDeleteUtils.js.map +1 -0
- package/dist/lib/handlers/processActionHandler.js +55 -0
- package/dist/lib/handlers/processActionHandler.js.map +1 -0
- package/dist/lib/handlers/processCancel.js +28 -0
- package/dist/lib/handlers/processCancel.js.map +1 -0
- package/dist/lib/handlers/processResume.js +28 -0
- package/dist/lib/handlers/processResume.js.map +1 -0
- package/dist/lib/handlers/processService.js +125 -0
- package/dist/lib/handlers/processService.js.map +1 -0
- package/dist/lib/handlers/processStart.js +156 -0
- package/dist/lib/handlers/processStart.js.map +1 -0
- package/dist/lib/handlers/processSuspend.js +28 -0
- package/dist/lib/handlers/processSuspend.js.map +1 -0
- package/dist/lib/handlers/utils.js +124 -0
- package/dist/lib/handlers/utils.js.map +1 -0
- package/dist/lib/index.js +43 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/processImport.js +449 -0
- package/dist/lib/processImport.js.map +1 -0
- package/dist/lib/processImportRegistration.js +27 -0
- package/dist/lib/processImportRegistration.js.map +1 -0
- package/dist/lib/shared/businessKey-helper.js +27 -0
- package/dist/lib/shared/businessKey-helper.js.map +1 -0
- package/dist/lib/shared/input-parser.js +650 -0
- package/dist/lib/shared/input-parser.js.map +1 -0
- package/dist/lib/types/csn-extensions.js +37 -0
- package/dist/lib/types/csn-extensions.js.map +1 -0
- package/dist/srv/BTPProcessService.js +117 -0
- package/dist/srv/BTPProcessService.js.map +1 -0
- package/dist/srv/localProcessService.js +152 -0
- package/dist/srv/localProcessService.js.map +1 -0
- package/package.json +98 -1
- package/srv/BTPProcessService.cds +42 -0
- package/srv/BTPProcessService.js +2 -0
- package/srv/localProcessService.cds +3 -0
- package/srv/localProcessService.js +2 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerProcessServiceHandlers = registerProcessServiceHandlers;
|
|
7
|
+
const cds_1 = __importDefault(require("@sap/cds"));
|
|
8
|
+
const constants_1 = require("../constants");
|
|
9
|
+
const utils_1 = require("./utils");
|
|
10
|
+
const api_1 = require("../api");
|
|
11
|
+
const LOG = cds_1.default.log(constants_1.PROCESS_LOGGER_PREFIX);
|
|
12
|
+
function registerProcessServiceHandlers(service) {
|
|
13
|
+
const definitionId = service.definition?.[constants_1.PROCESS_PREFIX];
|
|
14
|
+
if (!definitionId) {
|
|
15
|
+
LOG.warn(`No definitionID found for service ${service.name}. Process service handlers will not be registered.`);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
LOG.debug(`Registering handlers for process service: ${service.name}`);
|
|
19
|
+
LOG.debug(` ${constants_1.PROCESS_PREFIX}: ${definitionId}`);
|
|
20
|
+
registerStartHandler(service, definitionId);
|
|
21
|
+
registerSuspendHandler(service, definitionId);
|
|
22
|
+
registerResumeHandler(service, definitionId);
|
|
23
|
+
registerCancelHandler(service, definitionId);
|
|
24
|
+
registerGetInstancesByBusinessKeyHandler(service, definitionId);
|
|
25
|
+
registerGetAttributesHandler(service, definitionId);
|
|
26
|
+
registerGetOutputsHandler(service, definitionId);
|
|
27
|
+
}
|
|
28
|
+
function registerStartHandler(service, definitionId) {
|
|
29
|
+
service.on('start', async (req) => {
|
|
30
|
+
LOG.debug(`Starting process: ${definitionId}`);
|
|
31
|
+
if (!req.data) {
|
|
32
|
+
return req.reject({ status: 400, message: 'Malformed request: missing request data' });
|
|
33
|
+
}
|
|
34
|
+
const inputs = req.data.inputs ?? {};
|
|
35
|
+
const payload = { definitionId, context: inputs };
|
|
36
|
+
await (0, utils_1.emitProcessEvent)('start', req, payload, `Failed to start workflow: ${definitionId}`);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function registerSuspendHandler(service, definitionId) {
|
|
40
|
+
service.on('suspend', async (req) => {
|
|
41
|
+
LOG.debug(`Suspending process: ${definitionId}`);
|
|
42
|
+
const { businessKey, cascade } = req.data;
|
|
43
|
+
if (!businessKey) {
|
|
44
|
+
return req.reject({ status: 400, message: 'Missing required parameter: businessKey' });
|
|
45
|
+
}
|
|
46
|
+
const payload = { businessKey, cascade: cascade ?? false };
|
|
47
|
+
await (0, utils_1.emitProcessEvent)('suspend', req, payload, `Failed to suspend process with business key: ${businessKey}`);
|
|
48
|
+
LOG.debug(`Process suspended: businessKey=${businessKey}`);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function registerResumeHandler(service, definitionId) {
|
|
52
|
+
service.on('resume', async (req) => {
|
|
53
|
+
LOG.debug(`Resuming process: ${definitionId}`);
|
|
54
|
+
const { businessKey, cascade } = req.data;
|
|
55
|
+
if (!businessKey) {
|
|
56
|
+
return req.reject({ status: 400, message: 'Missing required parameter: businessKey' });
|
|
57
|
+
}
|
|
58
|
+
const payload = { businessKey, cascade: cascade ?? false };
|
|
59
|
+
await (0, utils_1.emitProcessEvent)('resume', req, payload, `Failed to resume process with business key: ${businessKey}`);
|
|
60
|
+
LOG.debug(`Process resumed: businessKey=${businessKey}`);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function registerCancelHandler(service, definitionId) {
|
|
64
|
+
service.on('cancel', async (req) => {
|
|
65
|
+
LOG.debug(`Cancelling process: ${definitionId}`);
|
|
66
|
+
const { businessKey, cascade } = req.data;
|
|
67
|
+
if (!businessKey) {
|
|
68
|
+
return req.reject({ status: 400, message: 'Missing required parameter: businessKey' });
|
|
69
|
+
}
|
|
70
|
+
const payload = { businessKey, cascade: cascade ?? false };
|
|
71
|
+
await (0, utils_1.emitProcessEvent)('cancel', req, payload, `Failed to cancel process with business key: ${businessKey}`);
|
|
72
|
+
LOG.debug(`Process cancelled: businessKey=${businessKey}`);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function registerGetInstancesByBusinessKeyHandler(service, definitionId) {
|
|
76
|
+
service.on('getInstancesByBusinessKey', async (req) => {
|
|
77
|
+
LOG.debug(`Getting instances by businessKey for process: ${definitionId}`);
|
|
78
|
+
const { businessKey, status } = req.data;
|
|
79
|
+
if (!businessKey) {
|
|
80
|
+
return req.reject({ status: 400, message: 'Missing required parameter: businessKey' });
|
|
81
|
+
}
|
|
82
|
+
if (status) {
|
|
83
|
+
const validStatuses = Object.values(api_1.WorkflowStatus);
|
|
84
|
+
const statuses = Array.isArray(status) ? status : [status];
|
|
85
|
+
const invalidStatuses = statuses.filter((s) => !validStatuses.includes(s));
|
|
86
|
+
if (invalidStatuses.length > 0) {
|
|
87
|
+
return req.reject({
|
|
88
|
+
status: 400,
|
|
89
|
+
message: `Invalid status value(s): ${invalidStatuses.join(', ')}. Valid values are: ${validStatuses.join(', ')}`,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const processService = await cds_1.default.connect.to(constants_1.PROCESS_SERVICE);
|
|
94
|
+
const result = await processService.send('getInstancesByBusinessKey', {
|
|
95
|
+
businessKey,
|
|
96
|
+
status,
|
|
97
|
+
});
|
|
98
|
+
return result;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
function registerGetAttributesHandler(service, definitionId) {
|
|
102
|
+
service.on('getAttributes', async (req) => {
|
|
103
|
+
LOG.debug(`Getting attributes for process: ${definitionId}`);
|
|
104
|
+
const { processInstanceId } = req.data;
|
|
105
|
+
if (!processInstanceId) {
|
|
106
|
+
return req.reject({ status: 400, message: 'Missing required parameter: processInstanceId' });
|
|
107
|
+
}
|
|
108
|
+
const processService = await cds_1.default.connect.to(constants_1.PROCESS_SERVICE);
|
|
109
|
+
const result = await processService.send('getAttributes', { processInstanceId });
|
|
110
|
+
return result;
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
function registerGetOutputsHandler(service, definitionId) {
|
|
114
|
+
service.on('getOutputs', async (req) => {
|
|
115
|
+
LOG.debug(`Getting outputs for process: ${definitionId}`);
|
|
116
|
+
const { processInstanceId } = req.data;
|
|
117
|
+
if (!processInstanceId) {
|
|
118
|
+
return req.reject({ status: 400, message: 'Missing required parameter: processInstanceId' });
|
|
119
|
+
}
|
|
120
|
+
const processService = await cds_1.default.connect.to(constants_1.PROCESS_SERVICE);
|
|
121
|
+
const result = await processService.send('getOutputs', { processInstanceId });
|
|
122
|
+
return result;
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=processService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processService.js","sourceRoot":"","sources":["../../../lib/handlers/processService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.addDeletedEntityToRequestStartBusinessKey = exports.addDeletedEntityToRequestStart = void 0;
|
|
7
|
+
exports.getColumnsForProcessStart = getColumnsForProcessStart;
|
|
8
|
+
exports.handleProcessStart = handleProcessStart;
|
|
9
|
+
const utils_1 = require("./utils");
|
|
10
|
+
const constants_1 = require("./../constants");
|
|
11
|
+
const input_parser_1 = require("../shared/input-parser");
|
|
12
|
+
const cds_1 = __importDefault(require("@sap/cds"));
|
|
13
|
+
const onDeleteUtils_1 = require("./onDeleteUtils");
|
|
14
|
+
const businessKey_helper_1 = require("../shared/businessKey-helper");
|
|
15
|
+
const LOG = cds_1.default.log(constants_1.PROCESS_LOGGER_PREFIX);
|
|
16
|
+
function getColumnsForProcessStart(target) {
|
|
17
|
+
const startSpecs = initStartSpecs(target);
|
|
18
|
+
startSpecs.inputs = parseInputToTree(target);
|
|
19
|
+
if (startSpecs.inputs.length === 0) {
|
|
20
|
+
LOG.debug(constants_1.LOG_MESSAGES.NO_PROCESS_INPUTS_DEFINED);
|
|
21
|
+
return ['*'];
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
return convertToColumnsExpr(startSpecs.inputs);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async function handleProcessStart(req, data) {
|
|
28
|
+
if ((0, onDeleteUtils_1.isDeleteWithoutProcess)(req, constants_1.LOG_MESSAGES.PROCESS_NOT_STARTED, 'start'))
|
|
29
|
+
return;
|
|
30
|
+
const target = req.target;
|
|
31
|
+
const processEventKey = onDeleteUtils_1.PROCESS_EVENT_MAP['start'];
|
|
32
|
+
data = (req._Process?.[processEventKey] ??
|
|
33
|
+
(0, utils_1.getEntityDataFromRequest)(data, req.params));
|
|
34
|
+
const startSpecs = initStartSpecs(target);
|
|
35
|
+
startSpecs.inputs = parseInputToTree(target);
|
|
36
|
+
// if startSpecs.input = [] --> no input defined, fetch entire row
|
|
37
|
+
let columns;
|
|
38
|
+
if (startSpecs.inputs.length === 0) {
|
|
39
|
+
columns = [input_parser_1.WILDCARD];
|
|
40
|
+
LOG.debug(constants_1.LOG_MESSAGES.NO_PROCESS_INPUTS_DEFINED);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
columns = convertToColumnsExpr(startSpecs.inputs);
|
|
44
|
+
}
|
|
45
|
+
const businessKeyColumn = (0, businessKey_helper_1.getBusinessKeyColumn)(target[constants_1.BUSINESS_KEY]?.['=']);
|
|
46
|
+
// fetch entity data (without businessKey to avoid alias collision)
|
|
47
|
+
const row = await (0, utils_1.resolveEntityRowOrReject)(req, data, startSpecs.conditionExpr, 'Failed to fetch entity for process start.', constants_1.LOG_MESSAGES.PROCESS_NOT_STARTED, columns);
|
|
48
|
+
if (!row)
|
|
49
|
+
return;
|
|
50
|
+
let businessKeyValue;
|
|
51
|
+
if (businessKeyColumn) {
|
|
52
|
+
if (req.event === 'DELETE') {
|
|
53
|
+
const businessKeyData = req._Process?.[onDeleteUtils_1.PROCESS_EVENT_MAP['startBusinessKey']];
|
|
54
|
+
businessKeyValue = businessKeyData?.businessKey;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
const businessKeyRow = await (0, utils_1.resolveEntityRowOrReject)(req, data, startSpecs.conditionExpr, 'Failed to fetch business key for process start.', constants_1.LOG_MESSAGES.PROCESS_NOT_STARTED, [businessKeyColumn]);
|
|
58
|
+
businessKeyValue = businessKeyRow?.businessKey;
|
|
59
|
+
}
|
|
60
|
+
if (businessKeyValue && businessKeyValue.length > constants_1.BUSINESS_KEY_MAX_LENGTH) {
|
|
61
|
+
const msg = `Business key value exceeds maximum length of ${constants_1.BUSINESS_KEY_MAX_LENGTH} characters. Process start will fail.`;
|
|
62
|
+
LOG.error(msg);
|
|
63
|
+
return req.reject({ status: 400, message: msg });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// emit process start
|
|
67
|
+
const payload = { definitionId: startSpecs.id, context: row };
|
|
68
|
+
await (0, utils_1.emitProcessEvent)('start', req, payload, `Failed to start process with definition ID ${startSpecs.id}.`, businessKeyValue);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Fetches and attaches entity data to the request for DELETE operations
|
|
72
|
+
*/
|
|
73
|
+
exports.addDeletedEntityToRequestStart = (0, onDeleteUtils_1.createAddDeletedEntityHandler)({
|
|
74
|
+
action: 'start',
|
|
75
|
+
ifAnnotation: constants_1.PROCESS_START_IF,
|
|
76
|
+
getColumns: (req) => getColumnsForProcessStart(req.target),
|
|
77
|
+
});
|
|
78
|
+
/**
|
|
79
|
+
* Fetches and attaches businessKey data separately for DELETE operations
|
|
80
|
+
* to avoid alias collision with entity fields named "businessKey"
|
|
81
|
+
*/
|
|
82
|
+
exports.addDeletedEntityToRequestStartBusinessKey = (0, onDeleteUtils_1.createAddDeletedEntityHandler)({
|
|
83
|
+
action: 'startBusinessKey',
|
|
84
|
+
ifAnnotation: constants_1.PROCESS_START_IF,
|
|
85
|
+
getColumns: (req) => {
|
|
86
|
+
const target = req.target;
|
|
87
|
+
const businessKeyCol = (0, businessKey_helper_1.getBusinessKeyColumn)(target[constants_1.BUSINESS_KEY]?.['=']);
|
|
88
|
+
return businessKeyCol ? [businessKeyCol] : [];
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
function initStartSpecs(target) {
|
|
92
|
+
const startSpecs = {
|
|
93
|
+
id: target[constants_1.PROCESS_START_ID],
|
|
94
|
+
on: target[constants_1.PROCESS_START_ON],
|
|
95
|
+
inputs: [],
|
|
96
|
+
conditionExpr: target[constants_1.PROCESS_START_IF]
|
|
97
|
+
? target[constants_1.PROCESS_START_IF].xpr
|
|
98
|
+
: undefined,
|
|
99
|
+
};
|
|
100
|
+
return startSpecs;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Creates an EntityContext for runtime cds.entity
|
|
104
|
+
*/
|
|
105
|
+
function createRuntimeEntityContext(entity) {
|
|
106
|
+
return {
|
|
107
|
+
getElement: (name) => {
|
|
108
|
+
const element = entity.elements?.[name];
|
|
109
|
+
if (!element)
|
|
110
|
+
return undefined;
|
|
111
|
+
const isAssocOrComp = element.type === 'cds.Association' || element.type === 'cds.Composition';
|
|
112
|
+
const targetEntity = element._target
|
|
113
|
+
? createRuntimeEntityContext(element._target)
|
|
114
|
+
: createRuntimeEntityContext(entity);
|
|
115
|
+
return { isAssocOrComp, targetEntity };
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function parseInputToTree(target) {
|
|
120
|
+
const inputsCSN = target[constants_1.PROCESS_START_INPUTS];
|
|
121
|
+
const parsedEntries = (0, input_parser_1.parseInputsArray)(inputsCSN);
|
|
122
|
+
const runtimeContext = createRuntimeEntityContext(target);
|
|
123
|
+
return (0, input_parser_1.buildInputTree)(parsedEntries, runtimeContext);
|
|
124
|
+
}
|
|
125
|
+
function convertToColumnsExpr(array) {
|
|
126
|
+
const result = [];
|
|
127
|
+
for (const item of array) {
|
|
128
|
+
// Handle wildcard '*' (from $self) - means all scalar fields
|
|
129
|
+
if (item.sourceElement === input_parser_1.WILDCARD) {
|
|
130
|
+
result.push(input_parser_1.WILDCARD);
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
const column = {};
|
|
134
|
+
// Start with the source element as a ref
|
|
135
|
+
column.ref = [item.sourceElement];
|
|
136
|
+
// Add alias if targetVariable exists
|
|
137
|
+
if (item.targetVariable) {
|
|
138
|
+
column.as = item.targetVariable;
|
|
139
|
+
}
|
|
140
|
+
// Handle nested associations (expand)
|
|
141
|
+
// If associatedInputElements is defined (i.e., this is an association):
|
|
142
|
+
// - If it has elements, expand with those specific elements
|
|
143
|
+
// - If it's empty (no annotated elements in associated entity), expand with '*' to get all direct attributes
|
|
144
|
+
if (item.associatedInputElements !== undefined) {
|
|
145
|
+
if (item.associatedInputElements.length > 0) {
|
|
146
|
+
column.expand = convertToColumnsExpr(item.associatedInputElements);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
column.expand = ['*'];
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
result.push(column);
|
|
153
|
+
}
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=processStart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processStart.js","sourceRoot":"","sources":["../../../lib/handlers/processStart.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addDeletedEntityToRequestSuspend = exports.handleProcessSuspend = void 0;
|
|
4
|
+
const processActionHandler_1 = require("./processActionHandler");
|
|
5
|
+
const constants_1 = require("../constants");
|
|
6
|
+
const action = 'suspend';
|
|
7
|
+
exports.handleProcessSuspend = (0, processActionHandler_1.createProcessActionHandler)({
|
|
8
|
+
action: action,
|
|
9
|
+
annotations: {
|
|
10
|
+
ON: constants_1.PROCESS_SUSPEND_ON,
|
|
11
|
+
CASCADE: constants_1.PROCESS_SUSPEND_CASCADE,
|
|
12
|
+
IF: constants_1.PROCESS_SUSPEND_IF,
|
|
13
|
+
},
|
|
14
|
+
logMessages: {
|
|
15
|
+
NOT_TRIGGERED: constants_1.LOG_MESSAGES.PROCESS_NOT_SUSPENDED,
|
|
16
|
+
FETCH_FAILED: 'Failed to fetch entity for process suspend.',
|
|
17
|
+
INVALID_KEY: 'Failed to build business key for process suspend.',
|
|
18
|
+
EMPTY_KEY: 'Business key is empty for process suspend.',
|
|
19
|
+
FAILED: 'Failed to suspend process with business key',
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
exports.addDeletedEntityToRequestSuspend = (0, processActionHandler_1.createProcessActionAddDeletedEntityHandler)({
|
|
23
|
+
action: action,
|
|
24
|
+
annotations: {
|
|
25
|
+
IF: constants_1.PROCESS_SUSPEND_IF,
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=processSuspend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processSuspend.js","sourceRoot":"","sources":["../../../lib/handlers/processSuspend.ts"],"names":[],"mappings":";;;AAAA,iEAGgC;AAChC,4CAKsB;AAEtB,MAAM,MAAM,GAAG,SAAS,CAAC;AAEZ,QAAA,oBAAoB,GAAG,IAAA,iDAA0B,EAAC;IAC7D,MAAM,EAAE,MAAM;IACd,WAAW,EAAE;QACX,EAAE,EAAE,8BAAkB;QACtB,OAAO,EAAE,mCAAuB;QAChC,EAAE,EAAE,8BAAkB;KACvB;IACD,WAAW,EAAE;QACX,aAAa,EAAE,wBAAY,CAAC,qBAAqB;QACjD,YAAY,EAAE,6CAA6C;QAC3D,WAAW,EAAE,mDAAmD;QAChE,SAAS,EAAE,4CAA4C;QACvD,MAAM,EAAE,6CAA6C;KACtD;CACF,CAAC,CAAC;AAEU,QAAA,gCAAgC,GAAG,IAAA,iEAA0C,EAAC;IACzF,MAAM,EAAE,MAAM;IACd,WAAW,EAAE;QACX,EAAE,EAAE,8BAAkB;KACvB;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getEntityDataFromRequest = getEntityDataFromRequest;
|
|
7
|
+
exports.resolveEntityRowOrReject = resolveEntityRowOrReject;
|
|
8
|
+
exports.emitProcessEvent = emitProcessEvent;
|
|
9
|
+
const cds_1 = __importDefault(require("@sap/cds"));
|
|
10
|
+
const constants_1 = require("../constants");
|
|
11
|
+
const { SELECT } = cds_1.default.ql;
|
|
12
|
+
const LOG = cds_1.default.log(constants_1.PROCESS_LOGGER_PREFIX);
|
|
13
|
+
async function fetchEntity(results, request, condition, columns) {
|
|
14
|
+
if (typeof results !== 'object') {
|
|
15
|
+
results = {};
|
|
16
|
+
}
|
|
17
|
+
const keyFields = getKeyFieldsForEntity(request.target);
|
|
18
|
+
// build where clause
|
|
19
|
+
const where = buildWhereClause(keyFields, results, condition);
|
|
20
|
+
const fetchedData = await SELECT.one
|
|
21
|
+
.from(request.target.name)
|
|
22
|
+
.columns(columns)
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
|
+
.where(where);
|
|
25
|
+
if (!fetchedData) {
|
|
26
|
+
// condition not met
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
return { ...fetchedData };
|
|
30
|
+
}
|
|
31
|
+
function buildWhereClause(keyFields, results, condition) {
|
|
32
|
+
const keyObject = keyFields.reduce((obj, keyField) => {
|
|
33
|
+
obj[keyField] = results[keyField];
|
|
34
|
+
return obj;
|
|
35
|
+
}, {});
|
|
36
|
+
// build where expression for object keys
|
|
37
|
+
const parts = [];
|
|
38
|
+
for (const key in keyObject) {
|
|
39
|
+
if (Object.hasOwn(keyObject, key)) {
|
|
40
|
+
const object = keyObject[key];
|
|
41
|
+
if (parts.length)
|
|
42
|
+
parts.push('and');
|
|
43
|
+
parts.push({ ref: [key] }, '=', { val: object });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// { ref: [ 'ID' ] }, '=', { val: '123456' }
|
|
47
|
+
let where;
|
|
48
|
+
if (condition !== undefined) {
|
|
49
|
+
where = [{ xpr: parts }, 'and', { xpr: condition }];
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
where = { xpr: parts };
|
|
53
|
+
}
|
|
54
|
+
return where;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Extracts key field names from a CDS entity
|
|
58
|
+
*/
|
|
59
|
+
function getKeyFieldsForEntity(entity) {
|
|
60
|
+
const keys = entity.keys;
|
|
61
|
+
const result = [];
|
|
62
|
+
for (const key in keys) {
|
|
63
|
+
if (keys[key].virtual)
|
|
64
|
+
continue;
|
|
65
|
+
result.push(key);
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Extracts entity data from a CDS request.
|
|
71
|
+
* For CRUD operations, returns data directly.
|
|
72
|
+
* For bound actions, merges params (entity keys) with data (action inputs).
|
|
73
|
+
*/
|
|
74
|
+
function getEntityDataFromRequest(data, reqParams) {
|
|
75
|
+
if (reqParams && Array.isArray(reqParams) && reqParams.length > 0) {
|
|
76
|
+
const paramsData = reqParams.reduce((acc, param) => {
|
|
77
|
+
if (typeof param === 'object' && param !== null) {
|
|
78
|
+
return { ...acc, ...param };
|
|
79
|
+
}
|
|
80
|
+
return acc;
|
|
81
|
+
}, {});
|
|
82
|
+
return { ...data, ...paramsData };
|
|
83
|
+
}
|
|
84
|
+
return data;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Fetches entity data or rejects the request with appropriate error
|
|
88
|
+
* Returns undefined if condition is not met (expected case) or if request was rejected
|
|
89
|
+
*/
|
|
90
|
+
async function resolveEntityRowOrReject(req, data, conditionExpr, fetchFailedMsg, notTriggeredMsg, columns) {
|
|
91
|
+
let row;
|
|
92
|
+
try {
|
|
93
|
+
row = req.event === 'DELETE' ? data : await fetchEntity(data, req, conditionExpr, columns);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
LOG.error(fetchFailedMsg, error);
|
|
97
|
+
return req.reject({
|
|
98
|
+
status: 500,
|
|
99
|
+
message: fetchFailedMsg,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
if (!row) {
|
|
103
|
+
LOG.debug(notTriggeredMsg);
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
return row;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Emits a process event to the queued ProcessService
|
|
110
|
+
*/
|
|
111
|
+
async function emitProcessEvent(event, req, payload, processEventFailedMsg, businessKeyValue) {
|
|
112
|
+
try {
|
|
113
|
+
const processService = await cds_1.default.connect.to(constants_1.PROCESS_SERVICE);
|
|
114
|
+
const queuedProcessService = cds_1.default.queued(processService);
|
|
115
|
+
await queuedProcessService.emit(event, payload, {
|
|
116
|
+
businessKey: businessKeyValue,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
LOG.error(processEventFailedMsg, error);
|
|
121
|
+
return req.reject({ status: 500, message: processEventFailedMsg });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/handlers/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
__exportStar(require("./constants"), exports);
|
|
21
|
+
__exportStar(require("./handlers"), exports);
|
|
22
|
+
__exportStar(require("./build"), exports);
|
|
23
|
+
__exportStar(require("./api"), exports);
|
|
24
|
+
__exportStar(require("./auth"), exports);
|
|
25
|
+
const cds_1 = __importDefault(require("@sap/cds"));
|
|
26
|
+
const handlers_1 = require("./handlers");
|
|
27
|
+
const constants_1 = require("./constants");
|
|
28
|
+
const build_1 = require("./build");
|
|
29
|
+
const processImportRegistration_1 = require("./processImportRegistration");
|
|
30
|
+
// Register build plugin for annotation validation during cds build
|
|
31
|
+
cds_1.default.build?.register?.('process-validation', build_1.ProcessValidationPlugin);
|
|
32
|
+
// Register import handler for: cds import --from process
|
|
33
|
+
(0, processImportRegistration_1.registerProcessImport)();
|
|
34
|
+
cds_1.default.on('serving', async (service) => {
|
|
35
|
+
(0, handlers_1.registerAnnotationHandlers)(service);
|
|
36
|
+
});
|
|
37
|
+
cds_1.default.on('served', async (services) => {
|
|
38
|
+
const processServices = Object.values(services).filter((service) => service.definition?.[constants_1.PROCESS_PREFIX]);
|
|
39
|
+
for (const service of processServices) {
|
|
40
|
+
(0, handlers_1.registerProcessServiceHandlers)(service);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,6CAA2B;AAC3B,0CAAwB;AACxB,wCAAsB;AACtB,yCAAuB;AAEvB,mDAA2B;AAC3B,yCAAwF;AACxF,2CAA6C;AAC7C,mCAAkD;AAClD,2EAAoE;AAEpE,mEAAmE;AACnE,aAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,oBAAoB,EAAE,+BAAuB,CAAC,CAAC;AAErE,yDAAyD;AACzD,IAAA,iDAAqB,GAAE,CAAC;AAExB,aAAG,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,OAAoB,EAAE,EAAE;IAC/C,IAAA,qCAA0B,EAAC,OAAO,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,aAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAClC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CACpD,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,0BAAc,CAAC,CAClD,CAAC;IACF,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,IAAA,yCAA8B,EAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC,CAAC,CAAC"}
|