@haiiro/docuflow 0.0.20 → 0.0.21
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/manifest.json +15 -15
- package/package.json +1 -1
- package/public/app/docflow-app.js +21 -21
- package/src/front-components/docflow-documents.front-component.mjs +1 -1
- package/src/front-components/docflow-processes.front-component.mjs +41 -41
- package/src/front-components/docflow-processes.front-component.tsx +60 -90
- package/src/front-components/docflow-tasks.front-component.mjs +1 -1
- package/src/front-components/launch-process.front-component.mjs +18 -18
- package/src/front-components/process-steps.front-component.mjs +25 -25
- package/src/front-components/process-steps.front-component.tsx +15 -316
- package/src/front-components/task-form.front-component.mjs +1 -1
- package/src/logic-functions/bitrix-app.logic-function.mjs +1 -1
- package/src/logic-functions/docflow-app.logic-function.mjs +1 -1
- package/src/logic-functions/launch-process.logic-function.mjs +21 -6
- package/src/logic-functions/process-catalog.logic-function.mjs +42 -8
- package/src/logic-functions/process-catalog.logic-function.ts +8 -3
- package/src/logic-functions/publish-process.logic-function.mjs +21 -6
- package/src/logic-functions/save-launch-fields.logic-function.mjs +528 -266
- package/src/logic-functions/save-launch-fields.logic-function.ts +40 -12
- package/src/logic-functions/save-step-settings.logic-function.mjs +123 -47
- package/src/logic-functions/save-step-settings.logic-function.ts +11 -28
|
@@ -1691,6 +1691,7 @@ var readUserMessage = (value) => {
|
|
|
1691
1691
|
}
|
|
1692
1692
|
return void 0;
|
|
1693
1693
|
};
|
|
1694
|
+
var isMissingGraphqlField = (error) => error instanceof CoreGraphqlError && /Cannot query field|Unknown type/i.test(error.message);
|
|
1694
1695
|
var callCoreGraphql = async ({
|
|
1695
1696
|
query,
|
|
1696
1697
|
variables,
|
|
@@ -1724,6 +1725,24 @@ var callCoreGraphql = async ({
|
|
|
1724
1725
|
}
|
|
1725
1726
|
return body.data;
|
|
1726
1727
|
};
|
|
1728
|
+
var CORE_WORKFLOWS_QUERY = `query CoreWorkflows($first: Int!, $after: String) {
|
|
1729
|
+
coreWorkflows(first: $first, after: $after) {
|
|
1730
|
+
pageInfo { hasNextPage endCursor }
|
|
1731
|
+
edges { node { id name updatedAt workspaceWorkflowId lastPublishedCoreWorkflowVersionId statuses } }
|
|
1732
|
+
}
|
|
1733
|
+
}`;
|
|
1734
|
+
var CORE_WORKFLOWS_WITH_CURRENT_VERSIONS_QUERY = `query CoreWorkflowsWithCurrentVersions($input: CoreWorkflowsWithCurrentVersionsInput!) {
|
|
1735
|
+
coreWorkflowsWithCurrentVersions(input: $input) {
|
|
1736
|
+
workflow { id }
|
|
1737
|
+
currentVersion { id status createdAt trigger steps workspaceWorkflowVersionId }
|
|
1738
|
+
versions { id status createdAt workspaceWorkflowVersionId }
|
|
1739
|
+
}
|
|
1740
|
+
}`;
|
|
1741
|
+
var CORE_WORKFLOW_VERSION_BY_ID_QUERY = `query CoreWorkflowVersionById($coreWorkflowVersionId: UUID!) {
|
|
1742
|
+
coreWorkflowVersionById(coreWorkflowVersionId: $coreWorkflowVersionId) {
|
|
1743
|
+
id status createdAt trigger steps workspaceWorkflowVersionId
|
|
1744
|
+
}
|
|
1745
|
+
}`;
|
|
1727
1746
|
var UPDATE_WORKFLOW_VERSION_STEP_MUTATION = `mutation UpdateWorkflowVersionStep($input: UpdateWorkflowVersionStepInput!) {
|
|
1728
1747
|
updateWorkflowVersionStep(input: $input) { id }
|
|
1729
1748
|
}`;
|
|
@@ -1797,28 +1816,8 @@ var listLaunchObjects = async () => {
|
|
|
1797
1816
|
return launchObjects;
|
|
1798
1817
|
};
|
|
1799
1818
|
|
|
1800
|
-
// src/shared/api/rest-response.util.ts
|
|
1801
|
-
var readDataValue = (response) => {
|
|
1802
|
-
const data = response?.data;
|
|
1803
|
-
if (typeof data !== "object" || data === null) {
|
|
1804
|
-
return void 0;
|
|
1805
|
-
}
|
|
1806
|
-
return Object.values(data)[0];
|
|
1807
|
-
};
|
|
1808
|
-
var readRestList = (response) => {
|
|
1809
|
-
const value = readDataValue(response);
|
|
1810
|
-
return {
|
|
1811
|
-
records: Array.isArray(value) ? value : [],
|
|
1812
|
-
pageInfo: response?.pageInfo ?? {},
|
|
1813
|
-
totalCount: response?.totalCount
|
|
1814
|
-
};
|
|
1815
|
-
};
|
|
1816
|
-
var readRestRecord = (response) => {
|
|
1817
|
-
const value = readDataValue(response);
|
|
1818
|
-
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
|
|
1819
|
-
};
|
|
1820
|
-
|
|
1821
1819
|
// src/shared/docflow.constants.ts
|
|
1820
|
+
var DOCFLOW_SECTION = "DOCFLOW";
|
|
1822
1821
|
var DOCFLOW_LAUNCH_PARAMETERS_KEY = "smbDocflowParameters";
|
|
1823
1822
|
var LAUNCH_PARAMETERS_STEP_INPUT = `{{trigger.${DOCFLOW_LAUNCH_PARAMETERS_KEY}}}`;
|
|
1824
1823
|
var LAUNCH_TRIGGER_NAME = "\u0417\u0430\u043F\u0443\u0441\u043A \u0441 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430\u043C\u0438";
|
|
@@ -1863,6 +1862,15 @@ var isLaunchParametersStep = (step) => {
|
|
|
1863
1862
|
return isPlainRecord(input.logicFunctionInput) && input.logicFunctionInput.parameters === LAUNCH_PARAMETERS_STEP_INPUT;
|
|
1864
1863
|
};
|
|
1865
1864
|
var isLaunchTrigger = (trigger) => trigger?.type === "WEBHOOK" && trigger.name === LAUNCH_TRIGGER_NAME;
|
|
1865
|
+
var parseExpectedBodyFields = (trigger) => {
|
|
1866
|
+
const expectedBody = trigger?.type === "WEBHOOK" ? trigger.settings?.expectedBody : void 0;
|
|
1867
|
+
if (!isPlainRecord(expectedBody)) {
|
|
1868
|
+
return [];
|
|
1869
|
+
}
|
|
1870
|
+
return Object.entries(expectedBody).flatMap(
|
|
1871
|
+
([name, sample]) => name === LAUNCH_RECORD_KEY || name.startsWith("smbDocflow") || isPlainRecord(sample) || Array.isArray(sample) ? [] : [{ id: `body-${name}`, name, label: name, type: typeof sample === "number" ? "NUMBER" : "TEXT" }]
|
|
1872
|
+
);
|
|
1873
|
+
};
|
|
1866
1874
|
var findLaunchParametersStep = (steps) => (steps ?? []).find(isLaunchParametersStep);
|
|
1867
1875
|
var parseLaunchFields = (value) => getFillableFormFields(parseFormFields(value));
|
|
1868
1876
|
var parseLaunchObject = (value) => typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
|
|
@@ -1987,30 +1995,199 @@ var buildLaunchRecordOutputSchema = (object) => ({
|
|
|
1987
1995
|
}
|
|
1988
1996
|
});
|
|
1989
1997
|
|
|
1998
|
+
// src/shared/workflow/workflow-run.util.ts
|
|
1999
|
+
var DAY_IN_MS = 24 * 60 * 60 * 1e3;
|
|
2000
|
+
|
|
2001
|
+
// src/shared/workflow/process-engine.ts
|
|
2002
|
+
var MANUAL_TRIGGER = {
|
|
2003
|
+
name: "\u0417\u0430\u043F\u0443\u0441\u043A \u0432\u0440\u0443\u0447\u043D\u0443\u044E",
|
|
2004
|
+
type: "MANUAL",
|
|
2005
|
+
position: { x: 0, y: 0 },
|
|
2006
|
+
settings: {
|
|
2007
|
+
outputSchema: {},
|
|
2008
|
+
availability: { type: "GLOBAL" },
|
|
2009
|
+
icon: "IconPlayerPlay",
|
|
2010
|
+
isPinned: false
|
|
2011
|
+
},
|
|
2012
|
+
nextStepIds: []
|
|
2013
|
+
};
|
|
2014
|
+
var buildLaunchTrigger = (base, fields, launchObject) => ({
|
|
2015
|
+
name: LAUNCH_TRIGGER_NAME,
|
|
2016
|
+
type: "WEBHOOK",
|
|
2017
|
+
position: base.position ?? { x: 0, y: 0 },
|
|
2018
|
+
nextStepIds: base.nextStepIds ?? [],
|
|
2019
|
+
settings: {
|
|
2020
|
+
httpMethod: "POST",
|
|
2021
|
+
authentication: "API_KEY",
|
|
2022
|
+
expectedBody: {
|
|
2023
|
+
...buildFieldsExpectedBody(fields),
|
|
2024
|
+
...launchObject !== void 0 ? { [LAUNCH_RECORD_KEY]: { id: "" } } : {}
|
|
2025
|
+
},
|
|
2026
|
+
outputSchema: {
|
|
2027
|
+
...buildFieldsOutputSchema(fields),
|
|
2028
|
+
...launchObject !== void 0 ? { [LAUNCH_RECORD_KEY]: buildLaunchRecordOutputSchema(launchObject) } : {}
|
|
2029
|
+
}
|
|
2030
|
+
}
|
|
2031
|
+
});
|
|
2032
|
+
var buildManualTrigger = (base) => ({
|
|
2033
|
+
...MANUAL_TRIGGER,
|
|
2034
|
+
...base.type === "MANUAL" ? { name: base.name ?? MANUAL_TRIGGER.name, settings: base.settings } : {},
|
|
2035
|
+
position: base.position ?? MANUAL_TRIGGER.position,
|
|
2036
|
+
nextStepIds: base.nextStepIds ?? []
|
|
2037
|
+
});
|
|
2038
|
+
var findOrCreateDraft = async (engine, workflowId) => {
|
|
2039
|
+
const versions = await engine.listVersions(workflowId);
|
|
2040
|
+
const draftId = versions.find(({ status }) => status === "DRAFT")?.id;
|
|
2041
|
+
if (draftId !== void 0) {
|
|
2042
|
+
return engine.getVersion(draftId);
|
|
2043
|
+
}
|
|
2044
|
+
if (versions.length === 0) {
|
|
2045
|
+
return void 0;
|
|
2046
|
+
}
|
|
2047
|
+
await engine.createDraft(workflowId, versions[0].id);
|
|
2048
|
+
const createdId = (await engine.listVersions(workflowId)).find(({ status }) => status === "DRAFT")?.id;
|
|
2049
|
+
return createdId === void 0 ? void 0 : engine.getVersion(createdId);
|
|
2050
|
+
};
|
|
2051
|
+
var STEP_ROW_HEIGHT = 150;
|
|
2052
|
+
var retargetStepVariables = (step, launchStepId) => {
|
|
2053
|
+
const settings = JSON.stringify(step.settings ?? {});
|
|
2054
|
+
const retargeted = settings.split(`{{${launchStepId}.`).join(`{{${TRIGGER_STEP_ID}.`);
|
|
2055
|
+
return retargeted === settings ? void 0 : { ...step, settings: JSON.parse(retargeted) };
|
|
2056
|
+
};
|
|
2057
|
+
var removeLegacyLaunchStep = async (engine, draft) => {
|
|
2058
|
+
const launchStep = findLaunchParametersStep(draft.steps);
|
|
2059
|
+
if (launchStep === void 0) {
|
|
2060
|
+
return;
|
|
2061
|
+
}
|
|
2062
|
+
await engine.deleteStep(draft.id, launchStep.id);
|
|
2063
|
+
const removedY = launchStep.position?.y;
|
|
2064
|
+
for (const step of draft.steps ?? []) {
|
|
2065
|
+
if (step.id === launchStep.id) {
|
|
2066
|
+
continue;
|
|
2067
|
+
}
|
|
2068
|
+
const retargeted = retargetStepVariables(step, launchStep.id);
|
|
2069
|
+
const movesUp = typeof removedY === "number" && typeof step.position?.y === "number" && step.position.y > removedY;
|
|
2070
|
+
if (retargeted === void 0 && !movesUp) {
|
|
2071
|
+
continue;
|
|
2072
|
+
}
|
|
2073
|
+
const updated = retargeted ?? step;
|
|
2074
|
+
await engine.updateStep(
|
|
2075
|
+
draft.id,
|
|
2076
|
+
movesUp && step.position ? { ...updated, position: { ...step.position, y: step.position.y - STEP_ROW_HEIGHT } } : updated
|
|
2077
|
+
);
|
|
2078
|
+
}
|
|
2079
|
+
};
|
|
2080
|
+
var syncLaunchTrigger = async (engine, {
|
|
2081
|
+
workflowId,
|
|
2082
|
+
fields,
|
|
2083
|
+
launchObject
|
|
2084
|
+
}) => {
|
|
2085
|
+
const draft = await findOrCreateDraft(engine, workflowId);
|
|
2086
|
+
if (draft === void 0) {
|
|
2087
|
+
return { status: "NO_VERSION" };
|
|
2088
|
+
}
|
|
2089
|
+
const current = draft.trigger ?? MANUAL_TRIGGER;
|
|
2090
|
+
if (current.type !== "MANUAL" && !isLaunchTrigger(current)) {
|
|
2091
|
+
return { status: "NOT_MANUAL" };
|
|
2092
|
+
}
|
|
2093
|
+
await removeLegacyLaunchStep(engine, draft);
|
|
2094
|
+
const trigger = (await engine.getVersion(draft.id))?.trigger ?? current;
|
|
2095
|
+
await engine.updateTrigger(
|
|
2096
|
+
draft.id,
|
|
2097
|
+
fields.length > 0 || launchObject !== void 0 ? buildLaunchTrigger(trigger, fields, launchObject) : buildManualTrigger(trigger)
|
|
2098
|
+
);
|
|
2099
|
+
return { status: "SAVED", workflowVersionId: draft.id };
|
|
2100
|
+
};
|
|
2101
|
+
|
|
2102
|
+
// node_modules/twenty-sdk/dist/logic-function/isDefined-Dtu5EYqP-CMNeFg4z.mjs
|
|
2103
|
+
var import_guards = __toESM(require_build(), 1);
|
|
2104
|
+
var n = (n4) => !(0, import_guards.isUndefined)(n4) && !(0, import_guards.isNull)(n4);
|
|
2105
|
+
|
|
2106
|
+
// node_modules/twenty-sdk/dist/logic-function/index.mjs
|
|
2107
|
+
var import_guards2 = __toESM(require_build(), 1);
|
|
2108
|
+
|
|
2109
|
+
// node_modules/uuid/dist-node/stringify.js
|
|
2110
|
+
var byteToHex = [];
|
|
2111
|
+
for (let i5 = 0; i5 < 256; ++i5) {
|
|
2112
|
+
byteToHex.push((i5 + 256).toString(16).slice(1));
|
|
2113
|
+
}
|
|
2114
|
+
function unsafeStringify(arr, offset = 0) {
|
|
2115
|
+
return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
|
|
2116
|
+
}
|
|
2117
|
+
|
|
2118
|
+
// node_modules/uuid/dist-node/rng.js
|
|
2119
|
+
import { randomFillSync } from "node:crypto";
|
|
2120
|
+
var rnds8Pool = new Uint8Array(256);
|
|
2121
|
+
var poolPtr = rnds8Pool.length;
|
|
2122
|
+
function rng() {
|
|
2123
|
+
if (poolPtr > rnds8Pool.length - 16) {
|
|
2124
|
+
randomFillSync(rnds8Pool);
|
|
2125
|
+
poolPtr = 0;
|
|
2126
|
+
}
|
|
2127
|
+
return rnds8Pool.slice(poolPtr, poolPtr += 16);
|
|
2128
|
+
}
|
|
2129
|
+
|
|
2130
|
+
// node_modules/uuid/dist-node/native.js
|
|
2131
|
+
import { randomUUID } from "node:crypto";
|
|
2132
|
+
var native_default = { randomUUID };
|
|
2133
|
+
|
|
2134
|
+
// node_modules/uuid/dist-node/v4.js
|
|
2135
|
+
function _v4(options, buf, offset) {
|
|
2136
|
+
options = options || {};
|
|
2137
|
+
const rnds = options.random ?? options.rng?.() ?? rng();
|
|
2138
|
+
if (rnds.length < 16) {
|
|
2139
|
+
throw new Error("Random bytes length must be >= 16");
|
|
2140
|
+
}
|
|
2141
|
+
rnds[6] = rnds[6] & 15 | 64;
|
|
2142
|
+
rnds[8] = rnds[8] & 63 | 128;
|
|
2143
|
+
if (buf) {
|
|
2144
|
+
offset = offset || 0;
|
|
2145
|
+
if (offset < 0 || offset + 16 > buf.length) {
|
|
2146
|
+
throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
|
|
2147
|
+
}
|
|
2148
|
+
for (let i5 = 0; i5 < 16; ++i5) {
|
|
2149
|
+
buf[offset + i5] = rnds[i5];
|
|
2150
|
+
}
|
|
2151
|
+
return buf;
|
|
2152
|
+
}
|
|
2153
|
+
return unsafeStringify(rnds);
|
|
2154
|
+
}
|
|
2155
|
+
function v4(options, buf, offset) {
|
|
2156
|
+
if (native_default.randomUUID && !buf && !options) {
|
|
2157
|
+
return native_default.randomUUID();
|
|
2158
|
+
}
|
|
2159
|
+
return _v4(options, buf, offset);
|
|
2160
|
+
}
|
|
2161
|
+
var v4_default = v4;
|
|
2162
|
+
|
|
2163
|
+
// node_modules/twenty-sdk/dist/logic-function/index.mjs
|
|
2164
|
+
var l4 = __toESM(require_react(), 1);
|
|
2165
|
+
import { MetadataApiClient as u3 } from "twenty-client-sdk/metadata";
|
|
2166
|
+
|
|
1990
2167
|
// node_modules/twenty-client-sdk/dist/chunk-Dqa2HsxW.mjs
|
|
1991
|
-
var
|
|
1992
|
-
var
|
|
1993
|
-
var
|
|
2168
|
+
var e2 = Object.create;
|
|
2169
|
+
var t2 = Object.defineProperty;
|
|
2170
|
+
var n2 = Object.getOwnPropertyDescriptor;
|
|
1994
2171
|
var r = Object.getOwnPropertyNames;
|
|
1995
2172
|
var i = Object.getPrototypeOf;
|
|
1996
2173
|
var a = Object.prototype.hasOwnProperty;
|
|
1997
2174
|
var o = (e3, t4) => () => (t4 || (e3((t4 = { exports: {} }).exports, t4), e3 = null), t4.exports);
|
|
1998
2175
|
var s = (e3, n4) => {
|
|
1999
2176
|
let r4 = {};
|
|
2000
|
-
for (var i5 in e3)
|
|
2177
|
+
for (var i5 in e3) t2(r4, i5, {
|
|
2001
2178
|
get: e3[i5],
|
|
2002
2179
|
enumerable: true
|
|
2003
2180
|
});
|
|
2004
|
-
return n4 ||
|
|
2181
|
+
return n4 || t2(r4, Symbol.toStringTag, { value: "Module" }), r4;
|
|
2005
2182
|
};
|
|
2006
2183
|
var c = (e3, i5, o5, s5) => {
|
|
2007
|
-
if (i5 && typeof i5 == "object" || typeof i5 == "function") for (var c4 = r(i5), l5 = 0, u4 = c4.length, d2; l5 < u4; l5++) d2 = c4[l5], !a.call(e3, d2) && d2 !== o5 &&
|
|
2184
|
+
if (i5 && typeof i5 == "object" || typeof i5 == "function") for (var c4 = r(i5), l5 = 0, u4 = c4.length, d2; l5 < u4; l5++) d2 = c4[l5], !a.call(e3, d2) && d2 !== o5 && t2(e3, d2, {
|
|
2008
2185
|
get: ((e4) => i5[e4]).bind(null, d2),
|
|
2009
|
-
enumerable: !(s5 =
|
|
2186
|
+
enumerable: !(s5 = n2(i5, d2)) || s5.enumerable
|
|
2010
2187
|
});
|
|
2011
2188
|
return e3;
|
|
2012
2189
|
};
|
|
2013
|
-
var l = (n4, r4, a5) => (a5 = n4 == null ? {} :
|
|
2190
|
+
var l = (n4, r4, a5) => (a5 = n4 == null ? {} : e2(i(n4)), c(r4 || !n4 || !n4.__esModule ? t2(a5, "default", {
|
|
2014
2191
|
value: n4,
|
|
2015
2192
|
enumerable: true
|
|
2016
2193
|
}) : a5, n4));
|
|
@@ -61351,205 +61528,7 @@ var u2 = class {
|
|
|
61351
61528
|
}
|
|
61352
61529
|
};
|
|
61353
61530
|
|
|
61354
|
-
// src/shared/api/rest-filter.util.ts
|
|
61355
|
-
var UNSAFE_FILTER_CHARACTERS = /[()[\]'",]/g;
|
|
61356
|
-
var sanitizeFilterText = (text) => text.replace(UNSAFE_FILTER_CHARACTERS, " ").trim();
|
|
61357
|
-
var quote = (value) => `'${sanitizeFilterText(value)}'`;
|
|
61358
|
-
var restEq = (field, value) => `${field}[eq]:${quote(value)}`;
|
|
61359
|
-
|
|
61360
|
-
// src/server/records.ts
|
|
61361
|
-
var clients = {
|
|
61362
|
-
person: new u2(),
|
|
61363
|
-
application: new u2({ runAs: "application" })
|
|
61364
|
-
};
|
|
61365
|
-
var restClient = (runAs) => clients[runAs];
|
|
61366
|
-
var listWorkflowVersions = async (runAs, workflowId) => readRestList(
|
|
61367
|
-
await restClient(runAs).get("/rest/workflowVersions", {
|
|
61368
|
-
query: {
|
|
61369
|
-
filter: restEq("workflowId", workflowId),
|
|
61370
|
-
order_by: "createdAt[DescNullsLast]",
|
|
61371
|
-
limit: 50
|
|
61372
|
-
}
|
|
61373
|
-
})
|
|
61374
|
-
).records;
|
|
61375
|
-
|
|
61376
|
-
// src/server/launch-step.ts
|
|
61377
|
-
var MANUAL_TRIGGER = {
|
|
61378
|
-
name: "\u0417\u0430\u043F\u0443\u0441\u043A \u0432\u0440\u0443\u0447\u043D\u0443\u044E",
|
|
61379
|
-
type: "MANUAL",
|
|
61380
|
-
position: { x: 0, y: 0 },
|
|
61381
|
-
settings: {
|
|
61382
|
-
outputSchema: {},
|
|
61383
|
-
availability: { type: "GLOBAL" },
|
|
61384
|
-
icon: "IconPlayerPlay",
|
|
61385
|
-
isPinned: false
|
|
61386
|
-
},
|
|
61387
|
-
nextStepIds: []
|
|
61388
|
-
};
|
|
61389
|
-
var buildLaunchTrigger = (base, fields, launchObject) => ({
|
|
61390
|
-
name: LAUNCH_TRIGGER_NAME,
|
|
61391
|
-
type: "WEBHOOK",
|
|
61392
|
-
position: base.position ?? { x: 0, y: 0 },
|
|
61393
|
-
nextStepIds: base.nextStepIds ?? [],
|
|
61394
|
-
settings: {
|
|
61395
|
-
httpMethod: "POST",
|
|
61396
|
-
authentication: "API_KEY",
|
|
61397
|
-
expectedBody: {
|
|
61398
|
-
...buildFieldsExpectedBody(fields),
|
|
61399
|
-
...launchObject !== void 0 ? { [LAUNCH_RECORD_KEY]: { id: "" } } : {}
|
|
61400
|
-
},
|
|
61401
|
-
outputSchema: {
|
|
61402
|
-
...buildFieldsOutputSchema(fields),
|
|
61403
|
-
...launchObject !== void 0 ? { [LAUNCH_RECORD_KEY]: buildLaunchRecordOutputSchema(launchObject) } : {}
|
|
61404
|
-
}
|
|
61405
|
-
}
|
|
61406
|
-
});
|
|
61407
|
-
var buildManualTrigger = (base) => ({
|
|
61408
|
-
...MANUAL_TRIGGER,
|
|
61409
|
-
...base.type === "MANUAL" ? { name: base.name ?? MANUAL_TRIGGER.name, settings: base.settings } : {},
|
|
61410
|
-
position: base.position ?? MANUAL_TRIGGER.position,
|
|
61411
|
-
nextStepIds: base.nextStepIds ?? []
|
|
61412
|
-
});
|
|
61413
|
-
var findOrCreateDraft = async (workflowId) => {
|
|
61414
|
-
const versions = await listWorkflowVersions("person", workflowId);
|
|
61415
|
-
const draft = versions.find(({ status }) => status === "DRAFT");
|
|
61416
|
-
if (draft !== void 0 || versions.length === 0) {
|
|
61417
|
-
return draft;
|
|
61418
|
-
}
|
|
61419
|
-
await callCoreGraphql({
|
|
61420
|
-
query: CREATE_DRAFT_FROM_WORKFLOW_VERSION_MUTATION,
|
|
61421
|
-
variables: { input: { workflowId, workflowVersionIdToCopy: versions[0].id } }
|
|
61422
|
-
});
|
|
61423
|
-
return (await listWorkflowVersions("person", workflowId)).find(({ status }) => status === "DRAFT");
|
|
61424
|
-
};
|
|
61425
|
-
var STEP_ROW_HEIGHT = 150;
|
|
61426
|
-
var retargetStepVariables = (step, launchStepId) => {
|
|
61427
|
-
const settings = JSON.stringify(step.settings ?? {});
|
|
61428
|
-
const retargeted = settings.split(`{{${launchStepId}.`).join(`{{${TRIGGER_STEP_ID}.`);
|
|
61429
|
-
return retargeted === settings ? void 0 : { ...step, settings: JSON.parse(retargeted) };
|
|
61430
|
-
};
|
|
61431
|
-
var removeLegacyLaunchStep = async (draft) => {
|
|
61432
|
-
const launchStep = findLaunchParametersStep(draft.steps);
|
|
61433
|
-
if (launchStep === void 0) {
|
|
61434
|
-
return;
|
|
61435
|
-
}
|
|
61436
|
-
await callCoreGraphql({
|
|
61437
|
-
query: DELETE_WORKFLOW_VERSION_STEP_MUTATION,
|
|
61438
|
-
variables: { input: { workflowVersionId: draft.id, stepId: launchStep.id } }
|
|
61439
|
-
});
|
|
61440
|
-
const removedY = launchStep.position?.y;
|
|
61441
|
-
for (const step of draft.steps ?? []) {
|
|
61442
|
-
if (step.id === launchStep.id) {
|
|
61443
|
-
continue;
|
|
61444
|
-
}
|
|
61445
|
-
const retargeted = retargetStepVariables(step, launchStep.id);
|
|
61446
|
-
const movesUp = typeof removedY === "number" && typeof step.position?.y === "number" && step.position.y > removedY;
|
|
61447
|
-
if (retargeted === void 0 && !movesUp) {
|
|
61448
|
-
continue;
|
|
61449
|
-
}
|
|
61450
|
-
const updated = retargeted ?? step;
|
|
61451
|
-
await callCoreGraphql({
|
|
61452
|
-
query: UPDATE_WORKFLOW_VERSION_STEP_MUTATION,
|
|
61453
|
-
variables: {
|
|
61454
|
-
input: {
|
|
61455
|
-
workflowVersionId: draft.id,
|
|
61456
|
-
step: movesUp && step.position ? { ...updated, position: { ...step.position, y: step.position.y - STEP_ROW_HEIGHT } } : updated
|
|
61457
|
-
}
|
|
61458
|
-
}
|
|
61459
|
-
});
|
|
61460
|
-
}
|
|
61461
|
-
};
|
|
61462
|
-
var syncLaunchTrigger = async ({
|
|
61463
|
-
workflowId,
|
|
61464
|
-
fields,
|
|
61465
|
-
launchObject
|
|
61466
|
-
}) => {
|
|
61467
|
-
const draft = await findOrCreateDraft(workflowId);
|
|
61468
|
-
if (draft === void 0) {
|
|
61469
|
-
return void 0;
|
|
61470
|
-
}
|
|
61471
|
-
const current = draft.trigger ?? MANUAL_TRIGGER;
|
|
61472
|
-
if (current.type !== "MANUAL" && !isLaunchTrigger(current)) {
|
|
61473
|
-
return { status: "NOT_MANUAL" };
|
|
61474
|
-
}
|
|
61475
|
-
await removeLegacyLaunchStep(draft);
|
|
61476
|
-
const trigger = (await listWorkflowVersions("person", workflowId)).find(({ id: id3 }) => id3 === draft.id)?.trigger ?? current;
|
|
61477
|
-
await callCoreGraphql({
|
|
61478
|
-
query: UPDATE_WORKFLOW_VERSION_TRIGGER_MUTATION,
|
|
61479
|
-
variables: {
|
|
61480
|
-
input: {
|
|
61481
|
-
workflowVersionId: draft.id,
|
|
61482
|
-
trigger: fields.length > 0 || launchObject !== void 0 ? buildLaunchTrigger(trigger, fields, launchObject) : buildManualTrigger(trigger)
|
|
61483
|
-
}
|
|
61484
|
-
}
|
|
61485
|
-
});
|
|
61486
|
-
return { status: "SAVED", workflowVersionId: draft.id };
|
|
61487
|
-
};
|
|
61488
|
-
|
|
61489
|
-
// node_modules/twenty-sdk/dist/logic-function/isDefined-Dtu5EYqP-CMNeFg4z.mjs
|
|
61490
|
-
var import_guards = __toESM(require_build(), 1);
|
|
61491
|
-
var n2 = (n4) => !(0, import_guards.isUndefined)(n4) && !(0, import_guards.isNull)(n4);
|
|
61492
|
-
|
|
61493
61531
|
// node_modules/twenty-sdk/dist/logic-function/index.mjs
|
|
61494
|
-
var import_guards2 = __toESM(require_build(), 1);
|
|
61495
|
-
|
|
61496
|
-
// node_modules/uuid/dist-node/stringify.js
|
|
61497
|
-
var byteToHex = [];
|
|
61498
|
-
for (let i5 = 0; i5 < 256; ++i5) {
|
|
61499
|
-
byteToHex.push((i5 + 256).toString(16).slice(1));
|
|
61500
|
-
}
|
|
61501
|
-
function unsafeStringify(arr, offset = 0) {
|
|
61502
|
-
return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
|
|
61503
|
-
}
|
|
61504
|
-
|
|
61505
|
-
// node_modules/uuid/dist-node/rng.js
|
|
61506
|
-
import { randomFillSync } from "node:crypto";
|
|
61507
|
-
var rnds8Pool = new Uint8Array(256);
|
|
61508
|
-
var poolPtr = rnds8Pool.length;
|
|
61509
|
-
function rng() {
|
|
61510
|
-
if (poolPtr > rnds8Pool.length - 16) {
|
|
61511
|
-
randomFillSync(rnds8Pool);
|
|
61512
|
-
poolPtr = 0;
|
|
61513
|
-
}
|
|
61514
|
-
return rnds8Pool.slice(poolPtr, poolPtr += 16);
|
|
61515
|
-
}
|
|
61516
|
-
|
|
61517
|
-
// node_modules/uuid/dist-node/native.js
|
|
61518
|
-
import { randomUUID } from "node:crypto";
|
|
61519
|
-
var native_default = { randomUUID };
|
|
61520
|
-
|
|
61521
|
-
// node_modules/uuid/dist-node/v4.js
|
|
61522
|
-
function _v4(options, buf, offset) {
|
|
61523
|
-
options = options || {};
|
|
61524
|
-
const rnds = options.random ?? options.rng?.() ?? rng();
|
|
61525
|
-
if (rnds.length < 16) {
|
|
61526
|
-
throw new Error("Random bytes length must be >= 16");
|
|
61527
|
-
}
|
|
61528
|
-
rnds[6] = rnds[6] & 15 | 64;
|
|
61529
|
-
rnds[8] = rnds[8] & 63 | 128;
|
|
61530
|
-
if (buf) {
|
|
61531
|
-
offset = offset || 0;
|
|
61532
|
-
if (offset < 0 || offset + 16 > buf.length) {
|
|
61533
|
-
throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
|
|
61534
|
-
}
|
|
61535
|
-
for (let i5 = 0; i5 < 16; ++i5) {
|
|
61536
|
-
buf[offset + i5] = rnds[i5];
|
|
61537
|
-
}
|
|
61538
|
-
return buf;
|
|
61539
|
-
}
|
|
61540
|
-
return unsafeStringify(rnds);
|
|
61541
|
-
}
|
|
61542
|
-
function v4(options, buf, offset) {
|
|
61543
|
-
if (native_default.randomUUID && !buf && !options) {
|
|
61544
|
-
return native_default.randomUUID();
|
|
61545
|
-
}
|
|
61546
|
-
return _v4(options, buf, offset);
|
|
61547
|
-
}
|
|
61548
|
-
var v4_default = v4;
|
|
61549
|
-
|
|
61550
|
-
// node_modules/twenty-sdk/dist/logic-function/index.mjs
|
|
61551
|
-
var l4 = __toESM(require_react(), 1);
|
|
61552
|
-
import { MetadataApiClient as u3 } from "twenty-client-sdk/metadata";
|
|
61553
61532
|
var f2 = Object.defineProperty;
|
|
61554
61533
|
var p2 = (e3, t4) => () => (t4 || (e3((t4 = { exports: {} }).exports, t4), e3 = null), t4.exports);
|
|
61555
61534
|
var m2 = (e3, t4) => {
|
|
@@ -72257,17 +72236,17 @@ var gp2 = {
|
|
|
72257
72236
|
};
|
|
72258
72237
|
var _p = /* @__PURE__ */ new WeakSet();
|
|
72259
72238
|
var vp = /* @__PURE__ */ new WeakMap();
|
|
72260
|
-
var yp2 = (t4) =>
|
|
72239
|
+
var yp2 = (t4) => n(t4) && !(typeof t4 == "object" && _p.has(t4));
|
|
72261
72240
|
var bp = (e3) => typeof e3 == "object" && !!e3 && !Array.isArray(e3);
|
|
72262
72241
|
var xp2 = (t4) => {
|
|
72263
|
-
if (!
|
|
72242
|
+
if (!n(t4) || t4 === "") return true;
|
|
72264
72243
|
if (Array.isArray(t4)) return t4.length === 0;
|
|
72265
72244
|
if (!bp(t4) || t4 instanceof Date) return false;
|
|
72266
72245
|
if (_p.has(t4)) return true;
|
|
72267
72246
|
let n4 = vp.get(t4);
|
|
72268
72247
|
if (n4 === W2.RICH_TEXT) return !(0, import_guards2.isNonEmptyString)(t4.markdown) || t4.markdown.trim().length === 0;
|
|
72269
|
-
let i5 =
|
|
72270
|
-
return (
|
|
72248
|
+
let i5 = n(n4) ? gp2[n4] : void 0;
|
|
72249
|
+
return (n(i5) ? i5.map((e3) => t4[e3]) : Object.values(t4)).every(xp2);
|
|
72271
72250
|
};
|
|
72272
72251
|
var Sp2 = {
|
|
72273
72252
|
isDefined: {
|
|
@@ -116950,7 +116929,7 @@ var Vj2 = (t4, n4) => {
|
|
|
116950
116929
|
if (!(0, import_guards2.isString)(n4)) return;
|
|
116951
116930
|
let r4 = n4.split("."), i5 = t4;
|
|
116952
116931
|
for (let t5 of r4) {
|
|
116953
|
-
if (!
|
|
116932
|
+
if (!n(i5) || !(0, import_guards2.isObject)(i5) || Bj2.has(t5) || !Object.prototype.hasOwnProperty.call(i5, t5)) return;
|
|
116954
116933
|
i5 = i5[t5];
|
|
116955
116934
|
}
|
|
116956
116935
|
return i5;
|
|
@@ -116958,7 +116937,7 @@ var Vj2 = (t4, n4) => {
|
|
|
116958
116937
|
var Hj2 = (e3, n4) => (r4, i5) => (0, import_guards2.isNonEmptyArray)(r4) ? r4[e3]((e4) => n4(Vj2(e4, i5))) : false;
|
|
116959
116938
|
var Uj = (e3, n4) => (r4, i5, a5) => (0, import_guards2.isNonEmptyArray)(r4) ? r4[e3]((e4) => n4(Vj2(e4, i5), a5)) : false;
|
|
116960
116939
|
var Wj2 = new ph2();
|
|
116961
|
-
Wj2.functions.isDefined = (t4) =>
|
|
116940
|
+
Wj2.functions.isDefined = (t4) => n(t4), Wj2.functions.isNonEmptyString = (e3) => (0, import_guards2.isNonEmptyString)(e3), Wj2.functions.includes = (e3, t4) => Array.isArray(e3) && e3.includes(t4), Wj2.functions.arrayLength = (e3) => Array.isArray(e3) ? e3.length : 0, Wj2.functions.every = Hj2("every", Boolean), Wj2.functions.everyDefined = Hj2("every", n), Wj2.functions.some = Hj2("some", Boolean), Wj2.functions.someDefined = Hj2("some", n), Wj2.functions.someNonEmptyString = Hj2("some", import_guards2.isNonEmptyString), Wj2.functions.none = Hj2("every", (e3) => !e3), Wj2.functions.noneDefined = Hj2("every", (t4) => !n(t4)), Wj2.functions.everyEquals = Uj("every", (e3, t4) => e3 === t4), Wj2.functions.someEquals = Uj("some", (e3, t4) => e3 === t4), Wj2.functions.noneEquals = Uj("every", (e3, t4) => e3 !== t4), Wj2.functions.includesEvery = Uj("every", (e3, t4) => Array.isArray(e3) && e3.includes(t4)), Wj2.functions.includesSome = Uj("some", (e3, t4) => Array.isArray(e3) && e3.includes(t4)), Wj2.functions.includesNone = Uj("every", (e3, t4) => Array.isArray(e3) && !e3.includes(t4));
|
|
116962
116941
|
var Kj2 = [
|
|
116963
116942
|
"yyyy.MM.dd",
|
|
116964
116943
|
"yyyy/MM/dd",
|
|
@@ -119027,7 +119006,7 @@ var jF2 = (e3) => {
|
|
|
119027
119006
|
var MF2 = /{{([^{}]+)}}/g;
|
|
119028
119007
|
function* NF2(t4) {
|
|
119029
119008
|
if ((0, import_guards2.isString)(t4)) {
|
|
119030
|
-
for (let [, n4] of t4.matchAll(MF2))
|
|
119009
|
+
for (let [, n4] of t4.matchAll(MF2)) n(n4) && (yield n4);
|
|
119031
119010
|
return;
|
|
119032
119011
|
}
|
|
119033
119012
|
if ((0, import_guards2.isObject)(t4)) for (let e3 of Object.values(t4)) yield* NF2(e3);
|
|
@@ -119047,9 +119026,9 @@ var FF2 = (e3, t4) => {
|
|
|
119047
119026
|
return i5[e3.length][t4.length];
|
|
119048
119027
|
};
|
|
119049
119028
|
var IF2 = (t4) => {
|
|
119050
|
-
if (!
|
|
119029
|
+
if (!n(t4) || !Kf2(t4) || Array.isArray(t4)) return false;
|
|
119051
119030
|
let n4 = Object.values(t4);
|
|
119052
|
-
return n4.length === 0 ? false : n4.every((t5) =>
|
|
119031
|
+
return n4.length === 0 ? false : n4.every((t5) => n(t5) && Kf2(t5) && Wf2(t5.isLeaf));
|
|
119053
119032
|
};
|
|
119054
119033
|
var LF2 = (e3, t4 = []) => {
|
|
119055
119034
|
let n4 = [];
|
|
@@ -119065,21 +119044,21 @@ var RF2 = ({ schema: t4, propertyPath: n4 }) => {
|
|
|
119065
119044
|
let r4 = t4;
|
|
119066
119045
|
for (let t5 = 0; t5 < n4.length; t5++) {
|
|
119067
119046
|
let i5 = n4[t5];
|
|
119068
|
-
if (!
|
|
119047
|
+
if (!n(i5)) return;
|
|
119069
119048
|
if (!(0, import_guards2.isObject)(r4)) return {
|
|
119070
119049
|
validPrefix: n4.slice(0, t5),
|
|
119071
119050
|
failedSegment: i5,
|
|
119072
119051
|
availableKeys: []
|
|
119073
119052
|
};
|
|
119074
119053
|
let o5 = r4[i5];
|
|
119075
|
-
if (!
|
|
119054
|
+
if (!n(o5)) return {
|
|
119076
119055
|
validPrefix: n4.slice(0, t5),
|
|
119077
119056
|
failedSegment: i5,
|
|
119078
119057
|
availableKeys: Object.keys(r4)
|
|
119079
119058
|
};
|
|
119080
119059
|
if (o5.isLeaf) {
|
|
119081
119060
|
let r5 = n4[t5 + 1];
|
|
119082
|
-
return
|
|
119061
|
+
return n(r5) ? {
|
|
119083
119062
|
validPrefix: n4.slice(0, t5 + 1),
|
|
119084
119063
|
failedSegment: r5,
|
|
119085
119064
|
availableKeys: []
|
|
@@ -119116,9 +119095,9 @@ var KF2 = (e3, t4) => {
|
|
|
119116
119095
|
};
|
|
119117
119096
|
var qF2 = (t4, n4) => {
|
|
119118
119097
|
let [r4, ...i5] = n4;
|
|
119119
|
-
if (!
|
|
119098
|
+
if (!n(r4)) return zF2;
|
|
119120
119099
|
let a5 = t4[r4];
|
|
119121
|
-
return BF2(a5) ? WF2(a5, i5) :
|
|
119100
|
+
return BF2(a5) ? WF2(a5, i5) : n(a5) ? i5.length === 0 ? { found: true } : bp(a5) ? qF2(a5, i5) : zF2 : zF2;
|
|
119122
119101
|
};
|
|
119123
119102
|
var JF2 = (e3, t4) => t4.length === 0 || !bp(e3) ? zF2 : VF2(e3) ? GF2(e3.fields, t4) : HF2(e3) ? KF2(e3, t4) : qF2(e3, t4);
|
|
119124
119103
|
var YF2 = ({ schema: e3, propertyPath: t4 }) => JF2(e3, t4);
|
|
@@ -119129,7 +119108,7 @@ var XF2 = (t4) => {
|
|
|
119129
119108
|
let e3 = i5.value;
|
|
119130
119109
|
if (VF2(e3)) for (let t5 of XF2(e3.fields)) n4.push(`${r4}.${t5}`);
|
|
119131
119110
|
else if (bp(e3)) for (let t5 of XF2(e3)) n4.push(`${r4}.${t5}`);
|
|
119132
|
-
} else if (
|
|
119111
|
+
} else if (n(i5) && (n4.push(r4), bp(i5))) for (let e3 of XF2(i5)) n4.push(`${r4}.${e3}`);
|
|
119133
119112
|
return n4;
|
|
119134
119113
|
};
|
|
119135
119114
|
var ZF2 = (t4) => {
|
|
@@ -119141,7 +119120,7 @@ var ZF2 = (t4) => {
|
|
|
119141
119120
|
n4.push("first");
|
|
119142
119121
|
for (let e3 of ZF2(t4.first.value)) n4.push(`first.${e3}`);
|
|
119143
119122
|
}
|
|
119144
|
-
return
|
|
119123
|
+
return n(t4.all) && n4.push("all"), n4.push("totalCount"), n4;
|
|
119145
119124
|
}
|
|
119146
119125
|
return XF2(t4);
|
|
119147
119126
|
};
|
|
@@ -119160,7 +119139,7 @@ var tI2 = ({ schema: n4, propertyPath: r4, referencedStepId: i5 }) => {
|
|
|
119160
119139
|
schema: n4,
|
|
119161
119140
|
propertyPath: r4
|
|
119162
119141
|
});
|
|
119163
|
-
if (!
|
|
119142
|
+
if (!n(a5)) return [];
|
|
119164
119143
|
let o5 = eI2(a5.failedSegment, a5.availableKeys).map((e3) => [
|
|
119165
119144
|
i5,
|
|
119166
119145
|
...a5.validPrefix,
|
|
@@ -119176,7 +119155,7 @@ var nI2 = ({ workflow: t4, graph: n4, stepsById: r4 }) => {
|
|
|
119176
119155
|
let s5 = PF2(o5.settings?.input), c4 = n4.ancestorsByStepId.get(o5.id) ?? /* @__PURE__ */ new Set();
|
|
119177
119156
|
for (let n5 of s5) {
|
|
119178
119157
|
let s6 = jF2(n5), l5 = s6[0];
|
|
119179
|
-
if (!
|
|
119158
|
+
if (!n(l5)) {
|
|
119180
119159
|
i5.push({
|
|
119181
119160
|
severity: "error",
|
|
119182
119161
|
code: "VARIABLE_INVALID_PATH",
|
|
@@ -119225,8 +119204,8 @@ var nI2 = ({ workflow: t4, graph: n4, stepsById: r4 }) => {
|
|
|
119225
119204
|
var rI2 = ({ step: n4, variable: r4, pathSegments: i5, referencedStepId: o5, isTriggerReference: s5, trigger: c4, stepsById: l5 }) => {
|
|
119226
119205
|
let u4 = i5.slice(1);
|
|
119227
119206
|
if (u4.length === 0) return [];
|
|
119228
|
-
let d2 = s5 ? c4?.settings?.outputSchema : l5.get(o5)?.settings?.outputSchema, f3 =
|
|
119229
|
-
if (!
|
|
119207
|
+
let d2 = s5 ? c4?.settings?.outputSchema : l5.get(o5)?.settings?.outputSchema, f3 = n(d2) && (0, import_guards2.isObject)(d2) && !Array.isArray(d2) && Object.keys(d2).length === 0;
|
|
119208
|
+
if (!n(d2) || f3) return [];
|
|
119230
119209
|
if (!YF2({
|
|
119231
119210
|
schema: d2,
|
|
119232
119211
|
propertyPath: u4
|
|
@@ -119242,7 +119221,7 @@ var rI2 = ({ step: n4, variable: r4, pathSegments: i5, referencedStepId: o5, isT
|
|
|
119242
119221
|
message: `Step "${n4.name ?? n4.id}" references variable "{{${r4}}}" but the path "${u4.join(".")}" was not found in the output of step "${o5}".`,
|
|
119243
119222
|
stepId: n4.id,
|
|
119244
119223
|
path: r4,
|
|
119245
|
-
...
|
|
119224
|
+
...n(s6) ? { hint: s6 } : {},
|
|
119246
119225
|
...(0, import_guards2.isNonEmptyArray)(i6) ? { suggestions: i6 } : {},
|
|
119247
119226
|
...(0, import_guards2.isNonEmptyArray)(a5) ? { availablePaths: a5 } : {}
|
|
119248
119227
|
}];
|
|
@@ -119426,7 +119405,7 @@ sI2.extend({ input: V2({
|
|
|
119426
119405
|
fieldName: z2()
|
|
119427
119406
|
}).optional()
|
|
119428
119407
|
}).superRefine((t4, n4) => {
|
|
119429
|
-
t4.strategy === "LOAD_BALANCED" && !
|
|
119408
|
+
t4.strategy === "LOAD_BALANCED" && !n(t4.loadBalance) && n4.addIssue({
|
|
119430
119409
|
code: Cf2.custom,
|
|
119431
119410
|
path: ["loadBalance"],
|
|
119432
119411
|
message: "loadBalance is required when strategy is LOAD_BALANCED"
|
|
@@ -119442,7 +119421,7 @@ var NI2 = (e3) => {
|
|
|
119442
119421
|
};
|
|
119443
119422
|
var PI2 = (t4) => {
|
|
119444
119423
|
let n4 = t4.settings?.input;
|
|
119445
|
-
if (
|
|
119424
|
+
if (n(n4) && (0, import_guards2.isObject)(n4)) return n4;
|
|
119446
119425
|
};
|
|
119447
119426
|
var FI2 = (e3) => {
|
|
119448
119427
|
let t4 = new Set(e3.nextStepIds ?? []);
|
|
@@ -119451,13 +119430,13 @@ var FI2 = (e3) => {
|
|
|
119451
119430
|
return [...t4];
|
|
119452
119431
|
};
|
|
119453
119432
|
var II2 = ({ trigger: t4, steps: n4 }) => {
|
|
119454
|
-
let r4 = /* @__PURE__ */ new Map(), i5 =
|
|
119433
|
+
let r4 = /* @__PURE__ */ new Map(), i5 = n(t4?.nextStepIds) ? t4.nextStepIds.filter(n) : [];
|
|
119455
119434
|
r4.set(AF2, i5);
|
|
119456
119435
|
for (let e3 of n4 ?? []) r4.set(e3.id, FI2(e3));
|
|
119457
119436
|
let a5 = /* @__PURE__ */ new Set(), o5 = [AF2];
|
|
119458
119437
|
for (; o5.length > 0; ) {
|
|
119459
119438
|
let t5 = o5.shift();
|
|
119460
|
-
if (!(!
|
|
119439
|
+
if (!(!n(t5) || a5.has(t5))) {
|
|
119461
119440
|
a5.add(t5);
|
|
119462
119441
|
for (let e3 of r4.get(t5) ?? []) a5.has(e3) || o5.push(e3);
|
|
119463
119442
|
}
|
|
@@ -119503,10 +119482,10 @@ var RI2 = ({ workflow: t4, graph: n4 }) => {
|
|
|
119503
119482
|
return;
|
|
119504
119483
|
}
|
|
119505
119484
|
let d2 = o5.get(t5), f3 = `${t5}:${c4.join(",")}`;
|
|
119506
|
-
if (!
|
|
119485
|
+
if (!n(d2) || a5.has(f3)) return;
|
|
119507
119486
|
i5.add(t5), NI2(d2) && (d2.settings.input.initialLoopStepIds ?? []).forEach((e3) => s5(e3, [...c4, t5], t5));
|
|
119508
119487
|
let p3 = d2.type === kF2.ITERATOR ? d2.nextStepIds ?? [] : n4.childrenByStepId.get(t5) ?? [];
|
|
119509
|
-
|
|
119488
|
+
n(u4) && p3.length === 0 && r4.push({
|
|
119510
119489
|
severity: "error",
|
|
119511
119490
|
code: "ITERATOR_MISSING_RETURN",
|
|
119512
119491
|
stepId: t5,
|
|
@@ -119523,7 +119502,7 @@ var zI2 = ({ workflow: t4, graph: n4 }) => {
|
|
|
119523
119502
|
message: `Duplicate step id "${e3.id}". Every step id must be unique within the workflow.`,
|
|
119524
119503
|
stepId: e3.id
|
|
119525
119504
|
}), o5.add(e3.id);
|
|
119526
|
-
let s5 = (t4.trigger?.nextStepIds ?? []).filter(
|
|
119505
|
+
let s5 = (t4.trigger?.nextStepIds ?? []).filter(n);
|
|
119527
119506
|
zj2(i5) && s5.length === 0 && r4.push({
|
|
119528
119507
|
severity: "error",
|
|
119529
119508
|
code: "TRIGGER_HAS_NO_NEXT_STEP",
|
|
@@ -119561,7 +119540,7 @@ var BI = (t4) => {
|
|
|
119561
119540
|
message: `If/Else step "${t4.name ?? t4.id}" should have at least two branches (a condition branch and an else branch).`,
|
|
119562
119541
|
stepId: t4.id
|
|
119563
119542
|
});
|
|
119564
|
-
let o5 = r4?.stepFilterGroups, s5 = new Set((Array.isArray(o5) ? o5 : []).filter(
|
|
119543
|
+
let o5 = r4?.stepFilterGroups, s5 = new Set((Array.isArray(o5) ? o5 : []).filter(n).map((e3) => e3.id));
|
|
119565
119544
|
for (let r5 of a5) {
|
|
119566
119545
|
let i6 = r5?.nextStepIds;
|
|
119567
119546
|
(!Array.isArray(i6) || i6.length === 0) && n4.push({
|
|
@@ -119569,7 +119548,7 @@ var BI = (t4) => {
|
|
|
119569
119548
|
code: "IF_ELSE_BRANCH_HAS_NO_NEXT_STEP",
|
|
119570
119549
|
message: `A branch of If/Else step "${t4.name ?? t4.id}" is not connected to any step.`,
|
|
119571
119550
|
stepId: t4.id
|
|
119572
|
-
}),
|
|
119551
|
+
}), n(r5?.filterGroupId) && !s5.has(r5.filterGroupId) && n4.push({
|
|
119573
119552
|
severity: "error",
|
|
119574
119553
|
code: "INVALID_STEP_PARAMS",
|
|
119575
119554
|
message: `A branch of If/Else step "${t4.name ?? t4.id}" references filter group "${r5.filterGroupId}", which does not exist.`,
|
|
@@ -119592,6 +119571,8 @@ var VI2 = /* @__PURE__ */ (function(e3) {
|
|
|
119592
119571
|
return e3.OK = "OK", e3.SUCCESS = "SUCCESS", e3.INFO = "INFO", e3.WARNING = "WARNING", e3.ERROR = "ERROR", e3.NEUTRAL = "NEUTRAL", e3.UNKNOWN = "UNKNOWN", e3;
|
|
119593
119572
|
})({});
|
|
119594
119573
|
Object.values(VI2).filter((e3) => e3 !== VI2.OK && e3 !== VI2.UNKNOWN), W2.TEXT, W2.ARRAY, W2.BOOLEAN, W2.DATE, W2.DATE_TIME, W2.NUMBER, W2.NUMERIC, W2.RAW_JSON, W2.RICH_TEXT, W2.SELECT, W2.MULTI_SELECT, kF2.SEND_EMAIL, kF2.DRAFT_EMAIL, kF2.CREATE_CALENDAR_EVENT;
|
|
119574
|
+
var HI2 = "TWENTY_API_URL";
|
|
119575
|
+
var UI2 = "TWENTY_APP_APPLICATION_ACCESS_TOKEN";
|
|
119595
119576
|
hp2.map((e3) => mp2[e3]);
|
|
119596
119577
|
var WI2 = {
|
|
119597
119578
|
universalIdentifier: Wl2(),
|
|
@@ -119656,7 +119637,7 @@ var YI2 = gd2("type", [
|
|
|
119656
119637
|
fieldUniversalIdentifier: Wl2()
|
|
119657
119638
|
}).optional()
|
|
119658
119639
|
}).superRefine((t4, n4) => {
|
|
119659
|
-
t4.strategy === "LOAD_BALANCED" && !
|
|
119640
|
+
t4.strategy === "LOAD_BALANCED" && !n(t4.loadBalance) && n4.addIssue({
|
|
119660
119641
|
code: "custom",
|
|
119661
119642
|
path: ["loadBalance"],
|
|
119662
119643
|
message: "loadBalance is required when strategy is LOAD_BALANCED"
|
|
@@ -119724,6 +119705,27 @@ fd2({
|
|
|
119724
119705
|
message: e4.message
|
|
119725
119706
|
});
|
|
119726
119707
|
});
|
|
119708
|
+
var XI2 = () => process.env.TWENTY_APP_APPLICATION_ACCESS_TOKEN ?? process.env.TWENTY_APP_ACCESS_TOKEN;
|
|
119709
|
+
var ZI = async ({ query: e3, variables: t4, caller: n4 }) => {
|
|
119710
|
+
let r4 = process.env[HI2], i5 = XI2();
|
|
119711
|
+
if (!r4 || !i5) throw Error(`${n4}() requires the app runtime env vars ${HI2} and ${UI2}.`);
|
|
119712
|
+
let a5 = await fetch(`${r4}/metadata`, {
|
|
119713
|
+
method: "POST",
|
|
119714
|
+
headers: {
|
|
119715
|
+
"Content-Type": "application/json",
|
|
119716
|
+
Authorization: `Bearer ${i5}`
|
|
119717
|
+
},
|
|
119718
|
+
body: JSON.stringify({
|
|
119719
|
+
query: e3,
|
|
119720
|
+
variables: t4
|
|
119721
|
+
})
|
|
119722
|
+
});
|
|
119723
|
+
if (!a5.ok) throw Error(`${n4}() failed: HTTP ${a5.status} ${a5.statusText}`);
|
|
119724
|
+
let o5 = await a5.json();
|
|
119725
|
+
if (o5.errors && o5.errors.length > 0) throw Error(`${n4}() failed: ${o5.errors.map((e4) => e4.message).join(", ")}`);
|
|
119726
|
+
if (!o5.data) throw Error(`${n4}() failed: response contained no data.`);
|
|
119727
|
+
return o5.data;
|
|
119728
|
+
};
|
|
119727
119729
|
var aL = "\n id\n handle\n displayName\n visibility\n connectedAccountId\n isSyncEnabled\n";
|
|
119728
119730
|
var oL = `
|
|
119729
119731
|
mutation CreateAppMessageChannel($input: CreateAppMessageChannelInput!) {
|
|
@@ -119753,6 +119755,45 @@ var fL = `
|
|
|
119753
119755
|
}
|
|
119754
119756
|
}
|
|
119755
119757
|
`;
|
|
119758
|
+
var TL = "\n query GetAppKeyValue($key: String!, $scope: AppKeyValueScope) {\n appKeyValue(key: $key, scope: $scope) {\n key\n value\n scope\n }\n }\n";
|
|
119759
|
+
var EL = "\n mutation SetAppKeyValue($input: SetAppKeyValueInput!) {\n setAppKeyValue(input: $input) {\n key\n value\n scope\n }\n }\n";
|
|
119760
|
+
var DL = "\n mutation DeleteAppKeyValue($key: String!, $scope: AppKeyValueScope) {\n deleteAppKeyValue(key: $key, scope: $scope)\n }\n";
|
|
119761
|
+
var OL = "WORKSPACE";
|
|
119762
|
+
var kL = {
|
|
119763
|
+
async get(e3, t4) {
|
|
119764
|
+
let { appKeyValue: n4 } = await ZI({
|
|
119765
|
+
query: TL,
|
|
119766
|
+
variables: {
|
|
119767
|
+
key: e3,
|
|
119768
|
+
scope: t4?.scope ?? OL
|
|
119769
|
+
},
|
|
119770
|
+
caller: "kv.get"
|
|
119771
|
+
});
|
|
119772
|
+
return n4?.value ?? null;
|
|
119773
|
+
},
|
|
119774
|
+
async set(e3, t4, n4) {
|
|
119775
|
+
await ZI({
|
|
119776
|
+
query: EL,
|
|
119777
|
+
variables: { input: {
|
|
119778
|
+
key: e3,
|
|
119779
|
+
value: t4,
|
|
119780
|
+
scope: n4?.scope ?? OL
|
|
119781
|
+
} },
|
|
119782
|
+
caller: "kv.set"
|
|
119783
|
+
});
|
|
119784
|
+
},
|
|
119785
|
+
async delete(e3, t4) {
|
|
119786
|
+
let { deleteAppKeyValue: n4 } = await ZI({
|
|
119787
|
+
query: DL,
|
|
119788
|
+
variables: {
|
|
119789
|
+
key: e3,
|
|
119790
|
+
scope: t4?.scope ?? OL
|
|
119791
|
+
},
|
|
119792
|
+
caller: "kv.delete"
|
|
119793
|
+
});
|
|
119794
|
+
return n4;
|
|
119795
|
+
}
|
|
119796
|
+
};
|
|
119756
119797
|
var AL = class {
|
|
119757
119798
|
constructor(e3, t4) {
|
|
119758
119799
|
this.__twentyHttpResponse = true, this.body = e3, this.status = t4?.status, this.headers = t4?.headers;
|
|
@@ -119788,6 +119829,208 @@ var withRouteErrors = (name, handler2) => async (...args) => {
|
|
|
119788
119829
|
}
|
|
119789
119830
|
};
|
|
119790
119831
|
|
|
119832
|
+
// src/shared/api/rest-response.util.ts
|
|
119833
|
+
var readDataValue = (response) => {
|
|
119834
|
+
const data = response?.data;
|
|
119835
|
+
if (typeof data !== "object" || data === null) {
|
|
119836
|
+
return void 0;
|
|
119837
|
+
}
|
|
119838
|
+
return Object.values(data)[0];
|
|
119839
|
+
};
|
|
119840
|
+
var readRestList = (response) => {
|
|
119841
|
+
const value = readDataValue(response);
|
|
119842
|
+
return {
|
|
119843
|
+
records: Array.isArray(value) ? value : [],
|
|
119844
|
+
pageInfo: response?.pageInfo ?? {},
|
|
119845
|
+
totalCount: response?.totalCount
|
|
119846
|
+
};
|
|
119847
|
+
};
|
|
119848
|
+
var readRestRecord = (response) => {
|
|
119849
|
+
const value = readDataValue(response);
|
|
119850
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
|
|
119851
|
+
};
|
|
119852
|
+
|
|
119853
|
+
// src/shared/api/rest-filter.util.ts
|
|
119854
|
+
var UNSAFE_FILTER_CHARACTERS = /[()[\]'",]/g;
|
|
119855
|
+
var sanitizeFilterText = (text) => text.replace(UNSAFE_FILTER_CHARACTERS, " ").trim();
|
|
119856
|
+
var quote = (value) => `'${sanitizeFilterText(value)}'`;
|
|
119857
|
+
var restEq = (field, value) => `${field}[eq]:${quote(value)}`;
|
|
119858
|
+
|
|
119859
|
+
// src/server/records.ts
|
|
119860
|
+
var clients = {
|
|
119861
|
+
person: new u2(),
|
|
119862
|
+
application: new u2({ runAs: "application" })
|
|
119863
|
+
};
|
|
119864
|
+
var restClient = (runAs) => clients[runAs];
|
|
119865
|
+
var listWorkflowVersions = async (runAs, workflowId) => readRestList(
|
|
119866
|
+
await restClient(runAs).get("/rest/workflowVersions", {
|
|
119867
|
+
query: {
|
|
119868
|
+
filter: restEq("workflowId", workflowId),
|
|
119869
|
+
order_by: "createdAt[DescNullsLast]",
|
|
119870
|
+
limit: 50
|
|
119871
|
+
}
|
|
119872
|
+
})
|
|
119873
|
+
).records;
|
|
119874
|
+
|
|
119875
|
+
// src/server/launch-step.ts
|
|
119876
|
+
var recordsEngine = {
|
|
119877
|
+
listVersions: (workflowId) => listWorkflowVersions("person", workflowId),
|
|
119878
|
+
getVersion: async (versionId) => readRestRecord(
|
|
119879
|
+
await restClient("person").get(`/rest/workflowVersions/${versionId}`)
|
|
119880
|
+
),
|
|
119881
|
+
createDraft: async (workflowId, fromVersionId) => {
|
|
119882
|
+
await callCoreGraphql({
|
|
119883
|
+
query: CREATE_DRAFT_FROM_WORKFLOW_VERSION_MUTATION,
|
|
119884
|
+
variables: { input: { workflowId, workflowVersionIdToCopy: fromVersionId } }
|
|
119885
|
+
});
|
|
119886
|
+
},
|
|
119887
|
+
updateTrigger: async (versionId, trigger) => {
|
|
119888
|
+
await callCoreGraphql({
|
|
119889
|
+
query: UPDATE_WORKFLOW_VERSION_TRIGGER_MUTATION,
|
|
119890
|
+
variables: { input: { workflowVersionId: versionId, trigger } }
|
|
119891
|
+
});
|
|
119892
|
+
},
|
|
119893
|
+
updateStep: async (versionId, step) => {
|
|
119894
|
+
await callCoreGraphql({
|
|
119895
|
+
query: UPDATE_WORKFLOW_VERSION_STEP_MUTATION,
|
|
119896
|
+
variables: { input: { workflowVersionId: versionId, step } }
|
|
119897
|
+
});
|
|
119898
|
+
},
|
|
119899
|
+
deleteStep: async (versionId, stepId) => {
|
|
119900
|
+
await callCoreGraphql({
|
|
119901
|
+
query: DELETE_WORKFLOW_VERSION_STEP_MUTATION,
|
|
119902
|
+
variables: { input: { workflowVersionId: versionId, stepId } }
|
|
119903
|
+
});
|
|
119904
|
+
}
|
|
119905
|
+
};
|
|
119906
|
+
|
|
119907
|
+
// src/server/process-catalog.ts
|
|
119908
|
+
var MEMBERSHIP_KEY = "docflow-processes";
|
|
119909
|
+
var LAUNCH_SETTINGS_KEY = "docflow-launch-settings";
|
|
119910
|
+
var PAGE_SIZE = 200;
|
|
119911
|
+
var VERSIONS_BATCH_SIZE = 50;
|
|
119912
|
+
var readStringList = (value) => Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
|
|
119913
|
+
var readMembership = async () => {
|
|
119914
|
+
const stored = await kL.get(MEMBERSHIP_KEY);
|
|
119915
|
+
return { included: readStringList(stored?.included), excluded: readStringList(stored?.excluded) };
|
|
119916
|
+
};
|
|
119917
|
+
var readLaunchSettings = async () => {
|
|
119918
|
+
const stored = await kL.get(LAUNCH_SETTINGS_KEY);
|
|
119919
|
+
return typeof stored === "object" && stored !== null ? stored : {};
|
|
119920
|
+
};
|
|
119921
|
+
var saveLaunchSettings = async (workflowId, settings) => {
|
|
119922
|
+
await kL.set(LAUNCH_SETTINGS_KEY, { ...await readLaunchSettings(), [workflowId]: settings });
|
|
119923
|
+
};
|
|
119924
|
+
var NIL_ID = "00000000-0000-0000-0000-000000000000";
|
|
119925
|
+
var canAppEditCache;
|
|
119926
|
+
var canAppEditProcesses = async () => {
|
|
119927
|
+
if (canAppEditCache === void 0) {
|
|
119928
|
+
try {
|
|
119929
|
+
await callCoreGraphql({
|
|
119930
|
+
query: "mutation($id: UUID!) { activateWorkflowVersion(workflowVersionId: $id) }",
|
|
119931
|
+
variables: { id: NIL_ID }
|
|
119932
|
+
});
|
|
119933
|
+
canAppEditCache = true;
|
|
119934
|
+
} catch (error) {
|
|
119935
|
+
canAppEditCache = !isMissingGraphqlField(error);
|
|
119936
|
+
}
|
|
119937
|
+
}
|
|
119938
|
+
return canAppEditCache;
|
|
119939
|
+
};
|
|
119940
|
+
var readLegacyWorkflows = async (runAs) => {
|
|
119941
|
+
try {
|
|
119942
|
+
const { records } = readRestList(
|
|
119943
|
+
await restClient(runAs).get("/rest/workflows", {
|
|
119944
|
+
query: { filter: restEq("smbSection", DOCFLOW_SECTION), limit: PAGE_SIZE }
|
|
119945
|
+
})
|
|
119946
|
+
);
|
|
119947
|
+
return new Map(records.map((record) => [record.id, record]));
|
|
119948
|
+
} catch {
|
|
119949
|
+
return /* @__PURE__ */ new Map();
|
|
119950
|
+
}
|
|
119951
|
+
};
|
|
119952
|
+
var listCoreWorkflows = async (runAs) => {
|
|
119953
|
+
const nodes = [];
|
|
119954
|
+
let after;
|
|
119955
|
+
do {
|
|
119956
|
+
const { coreWorkflows } = await callCoreGraphql({ query: CORE_WORKFLOWS_QUERY, variables: { first: PAGE_SIZE, after }, runAs });
|
|
119957
|
+
nodes.push(...coreWorkflows.edges.map(({ node }) => node));
|
|
119958
|
+
after = coreWorkflows.pageInfo.hasNextPage ? coreWorkflows.pageInfo.endCursor ?? void 0 : void 0;
|
|
119959
|
+
} while (after !== void 0);
|
|
119960
|
+
return nodes;
|
|
119961
|
+
};
|
|
119962
|
+
var isDocflowNode = (node, membership, legacy) => !membership.excluded.includes(node.id) && (membership.included.includes(node.id) || typeof node.workspaceWorkflowId === "string" && legacy.has(node.workspaceWorkflowId));
|
|
119963
|
+
var byNewest = (first, second) => new Date(second.createdAt ?? 0).getTime() - new Date(first.createdAt ?? 0).getTime();
|
|
119964
|
+
var getVersion = async (id3, runAs) => (await callCoreGraphql({
|
|
119965
|
+
query: CORE_WORKFLOW_VERSION_BY_ID_QUERY,
|
|
119966
|
+
variables: { coreWorkflowVersionId: id3 },
|
|
119967
|
+
runAs
|
|
119968
|
+
})).coreWorkflowVersionById ?? void 0;
|
|
119969
|
+
var readVersions = async (workflowIds, runAs) => {
|
|
119970
|
+
const result = /* @__PURE__ */ new Map();
|
|
119971
|
+
for (let start = 0; start < workflowIds.length; start += VERSIONS_BATCH_SIZE) {
|
|
119972
|
+
const { coreWorkflowsWithCurrentVersions } = await callCoreGraphql({
|
|
119973
|
+
query: CORE_WORKFLOWS_WITH_CURRENT_VERSIONS_QUERY,
|
|
119974
|
+
variables: { input: { coreWorkflowIds: workflowIds.slice(start, start + VERSIONS_BATCH_SIZE) } },
|
|
119975
|
+
runAs
|
|
119976
|
+
});
|
|
119977
|
+
for (const { workflow, currentVersion, versions } of coreWorkflowsWithCurrentVersions) {
|
|
119978
|
+
const sorted = [...versions].sort(byNewest);
|
|
119979
|
+
const current = currentVersion ?? void 0;
|
|
119980
|
+
const activeId = sorted.find(({ status }) => status === "ACTIVE")?.id;
|
|
119981
|
+
const draft = current?.status === "DRAFT" ? current : void 0;
|
|
119982
|
+
const active = activeId === void 0 ? void 0 : current?.id === activeId ? current : await getVersion(activeId, runAs);
|
|
119983
|
+
const deactivatedId = sorted.find(({ status }) => status === "DEACTIVATED")?.id;
|
|
119984
|
+
const deactivated = deactivatedId === void 0 || active !== void 0 || draft !== void 0 ? void 0 : current?.id === deactivatedId ? current : await getVersion(deactivatedId, runAs);
|
|
119985
|
+
result.set(workflow.id, { active, draft, deactivated });
|
|
119986
|
+
}
|
|
119987
|
+
}
|
|
119988
|
+
return result;
|
|
119989
|
+
};
|
|
119990
|
+
var toProcess = (node, versions, legacy, launchSettings) => {
|
|
119991
|
+
const savedFields = parseLaunchFields(launchSettings?.fields ?? legacy?.smbLaunchFields);
|
|
119992
|
+
const savedObject = launchSettings !== void 0 ? launchSettings.launchObject : legacy?.smbLaunchObject;
|
|
119993
|
+
const active = versions?.active;
|
|
119994
|
+
return {
|
|
119995
|
+
workflowId: node.id,
|
|
119996
|
+
workspaceWorkflowId: node.workspaceWorkflowId ?? null,
|
|
119997
|
+
name: node.name?.trim() || "\u0411\u0435\u0437 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F",
|
|
119998
|
+
updatedAt: node.updatedAt ?? null,
|
|
119999
|
+
...versions,
|
|
120000
|
+
// Fields saved by docflow, or for a webhook set up in the Twenty editor
|
|
120001
|
+
// the values its body expects
|
|
120002
|
+
launchFields: savedFields.length > 0 ? savedFields : parseExpectedBodyFields(active?.trigger),
|
|
120003
|
+
launchObject: isLaunchTrigger(active?.trigger) ? parseLaunchObject(savedObject) : void 0,
|
|
120004
|
+
// The draft is launched on this object once published: the settings page
|
|
120005
|
+
// shows what was saved, not what is published
|
|
120006
|
+
savedLaunchObject: parseLaunchObject(savedObject)
|
|
120007
|
+
};
|
|
120008
|
+
};
|
|
120009
|
+
var listDocflowProcesses = async (runAs = "person") => {
|
|
120010
|
+
const [nodes, membership, legacy, launchSettings] = await Promise.all([
|
|
120011
|
+
listCoreWorkflows(runAs),
|
|
120012
|
+
readMembership(),
|
|
120013
|
+
readLegacyWorkflows(runAs),
|
|
120014
|
+
readLaunchSettings()
|
|
120015
|
+
]);
|
|
120016
|
+
const docflowNodes = nodes.filter((node) => isDocflowNode(node, membership, legacy));
|
|
120017
|
+
const versions = await readVersions(
|
|
120018
|
+
docflowNodes.map(({ id: id3 }) => id3),
|
|
120019
|
+
runAs
|
|
120020
|
+
);
|
|
120021
|
+
return docflowNodes.map(
|
|
120022
|
+
(node) => toProcess(
|
|
120023
|
+
node,
|
|
120024
|
+
versions.get(node.id),
|
|
120025
|
+
node.workspaceWorkflowId ? legacy.get(node.workspaceWorkflowId) : void 0,
|
|
120026
|
+
launchSettings[node.id]
|
|
120027
|
+
)
|
|
120028
|
+
);
|
|
120029
|
+
};
|
|
120030
|
+
var findDocflowProcess = async (workflowId, runAs = "person") => (await listDocflowProcesses(runAs)).find(
|
|
120031
|
+
(process2) => process2.workflowId === workflowId || process2.workspaceWorkflowId === workflowId
|
|
120032
|
+
);
|
|
120033
|
+
|
|
119791
120034
|
// src/universal-identifiers.ts
|
|
119792
120035
|
var SAVE_LAUNCH_FIELDS_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER = "d2cce9f2-6ba4-415c-aa3d-5d9aba6ae89c";
|
|
119793
120036
|
|
|
@@ -119808,19 +120051,38 @@ var handler = async (event) => {
|
|
|
119808
120051
|
if (launchObjectName !== void 0 && launchObject === void 0) {
|
|
119809
120052
|
return jsonResponse(422, { message: `\u041E\u0431\u044A\u0435\u043A\u0442 \xAB${launchObjectName}\xBB \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D` });
|
|
119810
120053
|
}
|
|
119811
|
-
const
|
|
119812
|
-
|
|
120054
|
+
const docflowProcess = await findDocflowProcess(workflowId, "person");
|
|
120055
|
+
if (docflowProcess === void 0) {
|
|
120056
|
+
return jsonResponse(404, { message: "\u041F\u0440\u043E\u0446\u0435\u0441\u0441 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043E\u0431\u043E\u0440\u043E\u0442\u0430 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D" });
|
|
120057
|
+
}
|
|
120058
|
+
await saveLaunchSettings(docflowProcess.workflowId, {
|
|
120059
|
+
fields,
|
|
120060
|
+
launchObject: launchObject?.nameSingular ?? null
|
|
120061
|
+
});
|
|
120062
|
+
const canAppEdit = await canAppEditProcesses();
|
|
120063
|
+
if (canAppEdit && docflowProcess.workspaceWorkflowId !== null) {
|
|
120064
|
+
await restClient("person").patch(`/rest/workflows/${docflowProcess.workspaceWorkflowId}`, {
|
|
119813
120065
|
smbLaunchFields: fields.length > 0 ? fields : null,
|
|
119814
120066
|
smbLaunchObject: launchObject?.nameSingular ?? null
|
|
119815
|
-
})
|
|
119816
|
-
|
|
119817
|
-
if (
|
|
119818
|
-
return
|
|
120067
|
+
});
|
|
120068
|
+
}
|
|
120069
|
+
if (body.syncTrigger === false) {
|
|
120070
|
+
return { status: "SAVED" };
|
|
120071
|
+
}
|
|
120072
|
+
if (!canAppEdit || docflowProcess.workspaceWorkflowId === null) {
|
|
120073
|
+
return jsonResponse(409, {
|
|
120074
|
+
code: "EDIT_ON_STANDALONE_PAGE",
|
|
120075
|
+
message: "\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B. \u0417\u0430\u043F\u0443\u0441\u043A \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0430 \u0432 \u044D\u0442\u043E\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 Twenty \u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u043D\u0430 \u043F\u043E\u043B\u043D\u043E\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043E\u0431\u043E\u0440\u043E\u0442\u0430"
|
|
120076
|
+
});
|
|
119819
120077
|
}
|
|
119820
120078
|
try {
|
|
119821
|
-
const result = await syncLaunchTrigger(
|
|
120079
|
+
const result = await syncLaunchTrigger(recordsEngine, {
|
|
120080
|
+
workflowId: docflowProcess.workspaceWorkflowId,
|
|
120081
|
+
fields,
|
|
120082
|
+
launchObject
|
|
120083
|
+
});
|
|
119822
120084
|
logDocflow("launch fields: draft synced", { workflowId, result });
|
|
119823
|
-
if (result
|
|
120085
|
+
if (result.status === "NOT_MANUAL") {
|
|
119824
120086
|
return jsonResponse(409, {
|
|
119825
120087
|
message: "\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B, \u043D\u043E \u0437\u0430\u043F\u0443\u0441\u043A \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0430 \u043D\u0435 \u0438\u0437\u043C\u0435\u043D\u0451\u043D: \u043E\u043D \u0437\u0430\u043F\u0443\u0441\u043A\u0430\u0435\u0442\u0441\u044F \u043D\u0435 \u0432\u0440\u0443\u0447\u043D\u0443\u044E"
|
|
119826
120088
|
});
|