@skedulo/integration-sdk 0.8.2 → 0.9.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/.claude/worktrees/agent-a16acadaf5412dffd/jest.config.js +12 -0
- package/.claude/worktrees/agent-a33c3e4636d488e49/jest.config.js +12 -0
- package/.claude/worktrees/agent-a5b1d2ffa4ceef4a6/jest.config.js +12 -0
- package/.claude/worktrees/agent-aa1db4c22eabbde8e/jest.config.js +12 -0
- package/.claude/worktrees/agent-ac197ae8c69d7061c/jest.config.js +12 -0
- package/CHANGELOG.md +25 -0
- package/dist/actions/data-flow/preview.action.d.ts.map +1 -1
- package/dist/actions/data-flow/preview.action.js +18 -3
- package/dist/actions/data-flow/preview.action.js.map +1 -1
- package/dist/actions/event/on-skedulo.action.d.ts.map +1 -1
- package/dist/actions/event/on-skedulo.action.js +12 -1
- package/dist/actions/event/on-skedulo.action.js.map +1 -1
- package/dist/actions/event/on-vendor.action.d.ts.map +1 -1
- package/dist/actions/event/on-vendor.action.js +0 -3
- package/dist/actions/event/on-vendor.action.js.map +1 -1
- package/dist/actions/event/types.d.ts +2 -0
- package/dist/actions/event/types.d.ts.map +1 -1
- package/dist/actions/utils/types.d.ts +2 -0
- package/dist/actions/utils/types.d.ts.map +1 -1
- package/dist/adapters/base-adapter-handler.d.ts +2 -0
- package/dist/adapters/base-adapter-handler.d.ts.map +1 -1
- package/dist/adapters/base-adapter-handler.js +4 -1
- package/dist/adapters/base-adapter-handler.js.map +1 -1
- package/dist/adapters/skedulo.adapter.d.ts +1 -0
- package/dist/adapters/skedulo.adapter.d.ts.map +1 -1
- package/dist/adapters/skedulo.adapter.js +25 -18
- package/dist/adapters/skedulo.adapter.js.map +1 -1
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +8 -1
- package/dist/constants.js.map +1 -1
- package/dist/handlers/metadata.handler.d.ts +17 -0
- package/dist/handlers/metadata.handler.d.ts.map +1 -0
- package/dist/handlers/metadata.handler.js +50 -0
- package/dist/handlers/metadata.handler.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/services/field-mapping.service.d.ts +7 -0
- package/dist/services/field-mapping.service.d.ts.map +1 -1
- package/dist/services/field-mapping.service.js +16 -0
- package/dist/services/field-mapping.service.js.map +1 -1
- package/dist/services/sync-runner.d.ts +0 -6
- package/dist/services/sync-runner.d.ts.map +1 -1
- package/dist/services/sync-runner.js +6 -78
- package/dist/services/sync-runner.js.map +1 -1
- package/dist/services/sync.service.d.ts +11 -1
- package/dist/services/sync.service.d.ts.map +1 -1
- package/dist/services/sync.service.js +30 -4
- package/dist/services/sync.service.js.map +1 -1
- package/dist/utils/coerceFilterValues.d.ts +10 -0
- package/dist/utils/coerceFilterValues.d.ts.map +1 -0
- package/dist/utils/coerceFilterValues.js +51 -0
- package/dist/utils/coerceFilterValues.js.map +1 -0
- package/dist/utils/compileFilter.d.ts.map +1 -1
- package/dist/utils/compileFilter.js +13 -1
- package/dist/utils/compileFilter.js.map +1 -1
- package/dist/utils/normalizeDataFlow.d.ts +3 -0
- package/dist/utils/normalizeDataFlow.d.ts.map +1 -0
- package/dist/utils/normalizeDataFlow.js +37 -0
- package/dist/utils/normalizeDataFlow.js.map +1 -0
- package/dist/utils.d.ts +2 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +10 -0
- package/dist/utils.js.map +1 -0
- package/package.json +2 -2
- package/yarn.lock +7 -7
- package/dist/actions/data-flow.action.d.ts +0 -62
- package/dist/actions/data-flow.action.d.ts.map +0 -1
- package/dist/actions/data-flow.action.js +0 -217
- package/dist/actions/data-flow.action.js.map +0 -1
- package/dist/actions/event.action.d.ts +0 -32
- package/dist/actions/event.action.d.ts.map +0 -1
- package/dist/actions/event.action.js +0 -113
- package/dist/actions/event.action.js.map +0 -1
- package/dist/actions/metadata.action.d.ts +0 -44
- package/dist/actions/metadata.action.d.ts.map +0 -1
- package/dist/actions/metadata.action.js +0 -96
- package/dist/actions/metadata.action.js.map +0 -1
- package/dist/actions/scheduled-job.action.d.ts +0 -73
- package/dist/actions/scheduled-job.action.d.ts.map +0 -1
- package/dist/actions/scheduled-job.action.js +0 -355
- package/dist/actions/scheduled-job.action.js.map +0 -1
- package/dist/actions/sync.action.d.ts +0 -26
- package/dist/actions/sync.action.d.ts.map +0 -1
- package/dist/actions/sync.action.js +0 -81
- package/dist/actions/sync.action.js.map +0 -1
- package/dist/services/artifact-builder.d.ts +0 -95
- package/dist/services/artifact-builder.d.ts.map +0 -1
- package/dist/services/artifact-builder.js +0 -142
- package/dist/services/artifact-builder.js.map +0 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.coerceFilterValues = coerceFilterValues;
|
|
4
|
+
// `in`/`nin` carry a list (handled by compileFilter's coerceArrayValue), `between` a
|
|
5
|
+
// tuple, and exists/notExists no value — none want scalar type coercion.
|
|
6
|
+
const NON_SCALAR_OPS = new Set(['in', 'nin', 'between', 'exists', 'notExists']);
|
|
7
|
+
const toBoolean = (v) => {
|
|
8
|
+
const t = v.trim().toLowerCase();
|
|
9
|
+
if (t === 'true')
|
|
10
|
+
return true;
|
|
11
|
+
if (t === 'false')
|
|
12
|
+
return false;
|
|
13
|
+
return null;
|
|
14
|
+
};
|
|
15
|
+
const toNumber = (v) => {
|
|
16
|
+
if (v.trim() === '')
|
|
17
|
+
return null;
|
|
18
|
+
const n = Number(v);
|
|
19
|
+
return Number.isFinite(n) ? n : null;
|
|
20
|
+
};
|
|
21
|
+
// Only plain string values need coercing; UI text inputs always emit strings, so a
|
|
22
|
+
// boolean/number field ends up as `"true"`/`"5"` and JSONata's type-strict `=` never
|
|
23
|
+
// matches the real typed record value. Coerce to the field's type. Unrecognized text
|
|
24
|
+
// (e.g. "yes", "") is left as-is rather than lost.
|
|
25
|
+
function coerceRule(rule, typeByField) {
|
|
26
|
+
if (NON_SCALAR_OPS.has(rule.op) || typeof rule.value !== 'string')
|
|
27
|
+
return rule;
|
|
28
|
+
const type = typeByField.get(rule.field);
|
|
29
|
+
if (type === 'boolean') {
|
|
30
|
+
const b = toBoolean(rule.value);
|
|
31
|
+
return b === null ? rule : Object.assign(Object.assign({}, rule), { value: b });
|
|
32
|
+
}
|
|
33
|
+
if (type === 'number') {
|
|
34
|
+
const n = toNumber(rule.value);
|
|
35
|
+
return n === null ? rule : Object.assign(Object.assign({}, rule), { value: n });
|
|
36
|
+
}
|
|
37
|
+
return rule;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Coerce a data-flow filter's scalar string values to the source field's real type
|
|
41
|
+
* (boolean / number), so a filter built in the UI text box matches the typed values
|
|
42
|
+
* the adapter returns. Schema-aware and non-lossy: fields not in `fields`, non-string
|
|
43
|
+
* values, and unparseable text pass through unchanged.
|
|
44
|
+
*/
|
|
45
|
+
function coerceFilterValues(filter, fields) {
|
|
46
|
+
if (!filter)
|
|
47
|
+
return filter;
|
|
48
|
+
const typeByField = new Map(fields.map((f) => [f.name, f.type]));
|
|
49
|
+
return Object.assign(Object.assign({}, filter), { rules: filter.rules.map((r) => coerceRule(r, typeByField)) });
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=coerceFilterValues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coerceFilterValues.js","sourceRoot":"","sources":["../../src/utils/coerceFilterValues.ts"],"names":[],"mappings":";;AA4CA,gDAOC;AAhDD,qFAAqF;AACrF,yEAAyE;AACzE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;AAEhG,MAAM,SAAS,GAAG,CAAC,CAAS,EAAkB,EAAE;IAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAiB,EAAE;IAC5C,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC,CAAC;AAEF,mFAAmF;AACnF,qFAAqF;AACrF,qFAAqF;AACrF,mDAAmD;AACnD,SAAS,UAAU,CAAC,IAAgB,EAAE,WAAgC;IACpE,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC/E,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,iCAAM,IAAI,KAAE,KAAK,EAAE,CAAC,GAAE,CAAC;IACnD,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,iCAAM,IAAI,KAAE,KAAK,EAAE,CAAC,GAAE,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAgB,kBAAkB,CAChC,MAA8B,EAC9B,MAAmB;IAEnB,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAC3B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjE,uCAAY,MAAM,KAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,IAAG;AACnF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compileFilter.d.ts","sourceRoot":"","sources":["../../src/utils/compileFilter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,UAAU,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"compileFilter.d.ts","sourceRoot":"","sources":["../../src/utils/compileFilter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAuG7E,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAIxD"}
|
|
@@ -36,8 +36,20 @@ function fieldRef(field) {
|
|
|
36
36
|
.map((segment) => `\`${segment}\``)
|
|
37
37
|
.join('.');
|
|
38
38
|
}
|
|
39
|
+
// `in`/`nin` take a list. If a caller (e.g. an older UI build) persisted the values as a
|
|
40
|
+
// single comma-joined string, split it back into an array so the operator doesn't collapse
|
|
41
|
+
// to a scalar-equality test that never matches. Leaves real arrays and expr values as-is.
|
|
42
|
+
function coerceArrayValue(value) {
|
|
43
|
+
if (typeof value !== 'string')
|
|
44
|
+
return value;
|
|
45
|
+
return value
|
|
46
|
+
.split(',')
|
|
47
|
+
.map((s) => s.trim())
|
|
48
|
+
.filter((s) => s.length > 0);
|
|
49
|
+
}
|
|
39
50
|
function compileRule(rule) {
|
|
40
|
-
const { field, op
|
|
51
|
+
const { field, op } = rule;
|
|
52
|
+
const value = op === 'in' || op === 'nin' ? coerceArrayValue(rule.value) : rule.value;
|
|
41
53
|
// Backtick in a field name would break out of the JSONata identifier — reject early
|
|
42
54
|
if (field.includes('`'))
|
|
43
55
|
throw new Error(`Invalid field name (contains backtick): ${field}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compileFilter.js","sourceRoot":"","sources":["../../src/utils/compileFilter.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"compileFilter.js","sourceRoot":"","sources":["../../src/utils/compileFilter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeDataFlow.d.ts","sourceRoot":"","sources":["../../src/utils/normalizeDataFlow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAqBvE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAW1D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.normalizeDataFlow = normalizeDataFlow;
|
|
15
|
+
// Older stored flows may have `property` instead of `field` in filter rules.
|
|
16
|
+
// Normalize to `field` so the integration service API accepts them on re-save.
|
|
17
|
+
function normalizeFilterRule(rule) {
|
|
18
|
+
var _a;
|
|
19
|
+
const _b = rule, { property, field } = _b, rest = __rest(_b, ["property", "field"]);
|
|
20
|
+
return Object.assign({ field: (_a = field !== null && field !== void 0 ? field : property) !== null && _a !== void 0 ? _a : '' }, rest);
|
|
21
|
+
}
|
|
22
|
+
function normalizeFilter(filter) {
|
|
23
|
+
if (!filter)
|
|
24
|
+
return filter;
|
|
25
|
+
return Object.assign(Object.assign({}, filter), { rules: filter.rules.map((r) => normalizeFilterRule(r)) });
|
|
26
|
+
}
|
|
27
|
+
function normalizeDataFlow(flow) {
|
|
28
|
+
return Object.assign(Object.assign({}, flow), { filter: normalizeFilter(flow.filter), lastRunAt: (() => {
|
|
29
|
+
if (!flow.lastRunAt)
|
|
30
|
+
return null;
|
|
31
|
+
if (flow.lastRunAt instanceof Date)
|
|
32
|
+
return flow.lastRunAt;
|
|
33
|
+
const d = new Date(flow.lastRunAt);
|
|
34
|
+
return isNaN(d.getTime()) ? null : d;
|
|
35
|
+
})() });
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=normalizeDataFlow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeDataFlow.js","sourceRoot":"","sources":["../../src/utils/normalizeDataFlow.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAqBA,8CAWC;AA7BD,6EAA6E;AAC7E,+EAA+E;AAC/E,SAAS,mBAAmB,CAAC,IAA6B;;IACxD,MAAM,KAA+B,IAGpC,EAHK,EAAE,QAAQ,EAAE,KAAK,OAGtB,EAH2B,IAAI,cAA1B,qBAA4B,CAGjC,CAAC;IACF,OAAO,gBAAE,KAAK,EAAE,MAAA,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,QAAQ,mCAAI,EAAE,IAAK,IAAI,CAAgB,CAAC;AACnE,CAAC;AAED,SAAS,eAAe,CAAC,MAA8B;IACrD,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAC3B,uCACK,MAAM,KACT,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAuC,CAAC,CAAC,IAC5F;AACJ,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAc;IAC9C,uCACK,IAAI,KACP,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EACpC,SAAS,EAAE,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,OAAO,IAAI,CAAC;YACjC,IAAI,IAAI,CAAC,SAAS,YAAY,IAAI;gBAAE,OAAO,IAAI,CAAC,SAAS,CAAC;YAC1D,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAA8B,CAAC,CAAC;YACxD,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,EAAE,IACJ;AACJ,CAAC"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.escapeEqlString = escapeEqlString;
|
|
4
|
+
// EQL string literals use single quotes; the resulting filter is embedded in a
|
|
5
|
+
// GraphQL string literal that uses double quotes. Escape backslashes and single
|
|
6
|
+
// quotes only.
|
|
7
|
+
function escapeEqlString(value) {
|
|
8
|
+
return value.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;AAGA,0CAEC;AALD,+EAA+E;AAC/E,gFAAgF;AAChF,eAAe;AACf,SAAgB,eAAe,CAAC,KAAa;IAC3C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skedulo/integration-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.1",
|
|
4
4
|
"description": "Runtime SDK for Skedulo integration data flows",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@skedulo/field-mapping-engine": "^1.2.0",
|
|
38
|
-
"@skedulo/pulse-solution-services": "^0.0.
|
|
38
|
+
"@skedulo/pulse-solution-services": "^0.0.26",
|
|
39
39
|
"jsonata": "^2.1.0"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
package/yarn.lock
CHANGED
|
@@ -701,10 +701,10 @@
|
|
|
701
701
|
jwt-decode "^4.0.0"
|
|
702
702
|
typescript "~5.8.3"
|
|
703
703
|
|
|
704
|
-
"@skedulo/pulse-solution-services@^0.0.
|
|
705
|
-
version "0.0.
|
|
706
|
-
resolved "https://registry.yarnpkg.com/@skedulo/pulse-solution-services/-/pulse-solution-services-0.0.
|
|
707
|
-
integrity sha512-
|
|
704
|
+
"@skedulo/pulse-solution-services@^0.0.26":
|
|
705
|
+
version "0.0.26"
|
|
706
|
+
resolved "https://registry.yarnpkg.com/@skedulo/pulse-solution-services/-/pulse-solution-services-0.0.26.tgz#733b9f473ccb08f89df7afe20a40dda3813e0121"
|
|
707
|
+
integrity sha512-9b2NFtQeI8Krbr8jcR5BiN1RRdSdSyzqMoYCRtp1MZdR8uwRj5oc21SEYETuNpDyqCxfUh3HNaVKKIXKN8Fyhw==
|
|
708
708
|
dependencies:
|
|
709
709
|
"@skedulo/function-utilities" "^0.0.8"
|
|
710
710
|
dayjs "^1.11.13"
|
|
@@ -2093,9 +2093,9 @@ lines-and-columns@^1.1.6:
|
|
|
2093
2093
|
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
|
|
2094
2094
|
|
|
2095
2095
|
linkify-it@^5.0.0:
|
|
2096
|
-
version "5.0.
|
|
2097
|
-
resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.
|
|
2098
|
-
integrity sha512-
|
|
2096
|
+
version "5.0.1"
|
|
2097
|
+
resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.1.tgz#10c4cecbb5c6828eabf81d3c801adc4a542dfb55"
|
|
2098
|
+
integrity sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==
|
|
2099
2099
|
dependencies:
|
|
2100
2100
|
uc.micro "^2.0.0"
|
|
2101
2101
|
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import type { CreateDataFlowInput, DataFlowListParams, UpdateDataFlowPatch } from '../clients/dataflow.client';
|
|
2
|
-
import { type DataFlow } from '../interfaces/data-flow-spec.interface';
|
|
3
|
-
import type { Action } from './utils/types';
|
|
4
|
-
/**
|
|
5
|
-
* Create a new data flow. New flows start INACTIVE per IS schema — no ES
|
|
6
|
-
* artifact is created here. Call `data-flow.activate` to provision the ES side.
|
|
7
|
-
*/
|
|
8
|
-
export declare function makeDataFlowCreateAction(): Action<CreateDataFlowInput, DataFlow>;
|
|
9
|
-
export interface DataFlowUpdateInput {
|
|
10
|
-
id: number;
|
|
11
|
-
patch: UpdateDataFlowPatch;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Update an existing data flow.
|
|
15
|
-
*
|
|
16
|
-
* Constraints (business rules):
|
|
17
|
-
* - `sourceSystem` / `targetSystem` (direction) are immutable after create.
|
|
18
|
-
* Reject with `DIRECTION_IS_IMMUTABLE`.
|
|
19
|
-
* - If the flow is currently ACTIVE (its `sync_config` carries a
|
|
20
|
-
* `trigger_name`) AND the patch changes `strategy` or `interval_minutes`,
|
|
21
|
-
* the artifact would need to be recreated. v1 requires the caller to
|
|
22
|
-
* deactivate first and rejects with `DEACTIVATE_BEFORE_STRATEGY_CHANGE`.
|
|
23
|
-
*/
|
|
24
|
-
export declare function makeDataFlowUpdateAction(): Action<DataFlowUpdateInput, DataFlow>;
|
|
25
|
-
export interface DataFlowDeleteInput {
|
|
26
|
-
id: number;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Delete a data flow. If currently ACTIVE (has a provisioned artifact),
|
|
30
|
-
* deactivate first so the artifact is cleaned up, then delete from IS.
|
|
31
|
-
*/
|
|
32
|
-
export declare function makeDataFlowDeleteAction(): Action<DataFlowDeleteInput, {
|
|
33
|
-
id: number;
|
|
34
|
-
}>;
|
|
35
|
-
export interface DataFlowActivateInput {
|
|
36
|
-
id: number;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Activate a data flow. Two-phase fail-closed: ES artifact created first,
|
|
40
|
-
* then IS PATCH; if PATCH fails the ES artifact is compensatingly deleted.
|
|
41
|
-
* See `DataFlowService.activate` for full semantics.
|
|
42
|
-
*/
|
|
43
|
-
export declare function makeDataFlowActivateAction(): Action<DataFlowActivateInput, DataFlow>;
|
|
44
|
-
export interface DataFlowDeactivateInput {
|
|
45
|
-
id: number;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Deactivate a data flow. Deletes the artifact (404 = success) and clears
|
|
49
|
-
* `trigger_name`/`trigger_type` from `sync_config` in IS.
|
|
50
|
-
*/
|
|
51
|
-
export declare function makeDataFlowDeactivateAction(): Action<DataFlowDeactivateInput, DataFlow>;
|
|
52
|
-
export interface DataFlowGetInput {
|
|
53
|
-
id: number;
|
|
54
|
-
}
|
|
55
|
-
export declare function makeDataFlowGetAction(): Action<DataFlowGetInput, DataFlow>;
|
|
56
|
-
export interface DataFlowListInput {
|
|
57
|
-
filter?: DataFlowListParams;
|
|
58
|
-
}
|
|
59
|
-
export declare function makeDataFlowListAction(): Action<DataFlowListInput, Array<{
|
|
60
|
-
id: number;
|
|
61
|
-
}>>;
|
|
62
|
-
//# sourceMappingURL=data-flow.action.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-flow.action.d.ts","sourceRoot":"","sources":["../../src/actions/data-flow.action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAGrF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAmD5C;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAUhF;AAID,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,mBAAmB,CAAC;CAC5B;AAcD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAyChF;AAID,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,mBAAmB,EAAE;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAmBtF;AAID,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAUpF;AAID,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAUxF;AAID,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAc1E;AAID,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,iBAAiB,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAoBzF"}
|
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.makeDataFlowCreateAction = makeDataFlowCreateAction;
|
|
4
|
-
exports.makeDataFlowUpdateAction = makeDataFlowUpdateAction;
|
|
5
|
-
exports.makeDataFlowDeleteAction = makeDataFlowDeleteAction;
|
|
6
|
-
exports.makeDataFlowActivateAction = makeDataFlowActivateAction;
|
|
7
|
-
exports.makeDataFlowDeactivateAction = makeDataFlowDeactivateAction;
|
|
8
|
-
exports.makeDataFlowGetAction = makeDataFlowGetAction;
|
|
9
|
-
exports.makeDataFlowListAction = makeDataFlowListAction;
|
|
10
|
-
const data_flow_spec_interface_1 = require("../interfaces/data-flow-spec.interface");
|
|
11
|
-
const action_names_1 = require("./utils/action-names");
|
|
12
|
-
const errors_1 = require("./utils/errors");
|
|
13
|
-
function isNonEmptyString(v) {
|
|
14
|
-
return typeof v === 'string' && v.length > 0;
|
|
15
|
-
}
|
|
16
|
-
function parseId(raw) {
|
|
17
|
-
const obj = (raw !== null && raw !== void 0 ? raw : {});
|
|
18
|
-
if (!Number.isInteger(obj.id) || obj.id <= 0) {
|
|
19
|
-
throw new errors_1.InvalidInputError('id must be a positive integer');
|
|
20
|
-
}
|
|
21
|
-
return obj.id;
|
|
22
|
-
}
|
|
23
|
-
// ── data-flow.create ─────────────────────────────────────────────────────────
|
|
24
|
-
function parseCreateInput(raw) {
|
|
25
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
26
|
-
const obj = (raw !== null && raw !== void 0 ? raw : {});
|
|
27
|
-
const { name, sourceObject, targetObject, matchKeyField } = obj;
|
|
28
|
-
if (!isNonEmptyString(name)) {
|
|
29
|
-
throw new errors_1.InvalidInputError('name must be a non-empty string');
|
|
30
|
-
}
|
|
31
|
-
if (!isNonEmptyString(sourceObject)) {
|
|
32
|
-
throw new errors_1.InvalidInputError('sourceObject must be a non-empty string');
|
|
33
|
-
}
|
|
34
|
-
if (!isNonEmptyString(targetObject)) {
|
|
35
|
-
throw new errors_1.InvalidInputError('targetObject must be a non-empty string');
|
|
36
|
-
}
|
|
37
|
-
if (!isNonEmptyString(matchKeyField)) {
|
|
38
|
-
throw new errors_1.InvalidInputError('matchKeyField must be a non-empty string');
|
|
39
|
-
}
|
|
40
|
-
return {
|
|
41
|
-
// Authoritative integrationType is injected by the handler from context;
|
|
42
|
-
// placeholder here keeps the parsed shape well-typed.
|
|
43
|
-
integrationType: '',
|
|
44
|
-
name,
|
|
45
|
-
description: (_a = obj.description) !== null && _a !== void 0 ? _a : null,
|
|
46
|
-
sourceSystem: (_b = obj.sourceSystem) !== null && _b !== void 0 ? _b : null,
|
|
47
|
-
targetSystem: (_c = obj.targetSystem) !== null && _c !== void 0 ? _c : null,
|
|
48
|
-
sourceObject,
|
|
49
|
-
targetObject,
|
|
50
|
-
triggerConfig: (_d = obj.triggerConfig) !== null && _d !== void 0 ? _d : null,
|
|
51
|
-
mappingConfig: (_e = obj.mappingConfig) !== null && _e !== void 0 ? _e : null,
|
|
52
|
-
filter: (_f = obj.filter) !== null && _f !== void 0 ? _f : null,
|
|
53
|
-
matchKeyField,
|
|
54
|
-
executionOrder: (_g = obj.executionOrder) !== null && _g !== void 0 ? _g : null,
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Create a new data flow. New flows start INACTIVE per IS schema — no ES
|
|
59
|
-
* artifact is created here. Call `data-flow.activate` to provision the ES side.
|
|
60
|
-
*/
|
|
61
|
-
function makeDataFlowCreateAction() {
|
|
62
|
-
return {
|
|
63
|
-
name: action_names_1.ACTIONS.dataFlow.create,
|
|
64
|
-
parseInput: parseCreateInput,
|
|
65
|
-
async handler(input, ctx) {
|
|
66
|
-
// IS resolves tenantIntegrationId from integrationType + tenantId (token);
|
|
67
|
-
// take integrationType authoritatively from this function's context.
|
|
68
|
-
return ctx.dataFlowService.create(Object.assign(Object.assign({}, input), { integrationType: ctx.integrationType }));
|
|
69
|
-
},
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
function parseUpdateInput(raw) {
|
|
73
|
-
const obj = (raw !== null && raw !== void 0 ? raw : {});
|
|
74
|
-
const { id, patch } = obj;
|
|
75
|
-
if (!Number.isInteger(id) || id <= 0) {
|
|
76
|
-
throw new errors_1.InvalidInputError('id must be a positive integer');
|
|
77
|
-
}
|
|
78
|
-
if (!patch || typeof patch !== 'object' || Array.isArray(patch)) {
|
|
79
|
-
throw new errors_1.InvalidInputError('patch must be an object');
|
|
80
|
-
}
|
|
81
|
-
return { id: id, patch: patch };
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Update an existing data flow.
|
|
85
|
-
*
|
|
86
|
-
* Constraints (business rules):
|
|
87
|
-
* - `sourceSystem` / `targetSystem` (direction) are immutable after create.
|
|
88
|
-
* Reject with `DIRECTION_IS_IMMUTABLE`.
|
|
89
|
-
* - If the flow is currently ACTIVE (its `sync_config` carries a
|
|
90
|
-
* `trigger_name`) AND the patch changes `strategy` or `interval_minutes`,
|
|
91
|
-
* the artifact would need to be recreated. v1 requires the caller to
|
|
92
|
-
* deactivate first and rejects with `DEACTIVATE_BEFORE_STRATEGY_CHANGE`.
|
|
93
|
-
*/
|
|
94
|
-
function makeDataFlowUpdateAction() {
|
|
95
|
-
return {
|
|
96
|
-
name: action_names_1.ACTIONS.dataFlow.update,
|
|
97
|
-
parseInput: parseUpdateInput,
|
|
98
|
-
async handler(input, ctx) {
|
|
99
|
-
var _a;
|
|
100
|
-
const { id, patch } = input;
|
|
101
|
-
const patchRecord = patch;
|
|
102
|
-
if (Object.prototype.hasOwnProperty.call(patchRecord, 'sourceSystem') ||
|
|
103
|
-
Object.prototype.hasOwnProperty.call(patchRecord, 'targetSystem')) {
|
|
104
|
-
throw new errors_1.ActionError('DIRECTION_IS_IMMUTABLE', 'Direction is locked after creation. To change direction, delete this flow and create a new one.');
|
|
105
|
-
}
|
|
106
|
-
const incomingTrigger = patch.triggerConfig;
|
|
107
|
-
if (incomingTrigger) {
|
|
108
|
-
const incoming = (0, data_flow_spec_interface_1.asSyncConfig)(incomingTrigger);
|
|
109
|
-
if (incoming) {
|
|
110
|
-
const flow = await ctx.dataFlowService.getFlowById(id);
|
|
111
|
-
if (!flow) {
|
|
112
|
-
throw new errors_1.ActionError('FLOW_NOT_FOUND', `Flow ${id} not found`);
|
|
113
|
-
}
|
|
114
|
-
// Normalize both sides so a legacy-shaped DB row compares correctly
|
|
115
|
-
// against the new-shaped patch.
|
|
116
|
-
const existing = (0, data_flow_spec_interface_1.asSyncConfig)((_a = flow.triggerConfig) !== null && _a !== void 0 ? _a : null);
|
|
117
|
-
const isActive = !!(existing === null || existing === void 0 ? void 0 : existing.trigger_name);
|
|
118
|
-
if (isActive && existing && incoming.strategy !== existing.strategy) {
|
|
119
|
-
throw new errors_1.ActionError('DEACTIVATE_BEFORE_STRATEGY_CHANGE', 'Deactivate the flow before changing the sync strategy');
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return ctx.dataFlowService.update(id, patch);
|
|
124
|
-
},
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Delete a data flow. If currently ACTIVE (has a provisioned artifact),
|
|
129
|
-
* deactivate first so the artifact is cleaned up, then delete from IS.
|
|
130
|
-
*/
|
|
131
|
-
function makeDataFlowDeleteAction() {
|
|
132
|
-
return {
|
|
133
|
-
name: action_names_1.ACTIONS.dataFlow.delete,
|
|
134
|
-
parseInput(raw) {
|
|
135
|
-
return { id: parseId(raw) };
|
|
136
|
-
},
|
|
137
|
-
async handler(input, ctx) {
|
|
138
|
-
var _a;
|
|
139
|
-
const flow = await ctx.dataFlowService.getFlowById(input.id);
|
|
140
|
-
if (!flow) {
|
|
141
|
-
throw new errors_1.ActionError('FLOW_NOT_FOUND', `Flow ${input.id} not found`);
|
|
142
|
-
}
|
|
143
|
-
const sc = (0, data_flow_spec_interface_1.asSyncConfig)((_a = flow.triggerConfig) !== null && _a !== void 0 ? _a : null);
|
|
144
|
-
if (sc === null || sc === void 0 ? void 0 : sc.trigger_name) {
|
|
145
|
-
await ctx.dataFlowService.deactivate(input.id, ctx);
|
|
146
|
-
}
|
|
147
|
-
await ctx.dataFlowService.delete(input.id);
|
|
148
|
-
return { id: input.id };
|
|
149
|
-
},
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Activate a data flow. Two-phase fail-closed: ES artifact created first,
|
|
154
|
-
* then IS PATCH; if PATCH fails the ES artifact is compensatingly deleted.
|
|
155
|
-
* See `DataFlowService.activate` for full semantics.
|
|
156
|
-
*/
|
|
157
|
-
function makeDataFlowActivateAction() {
|
|
158
|
-
return {
|
|
159
|
-
name: action_names_1.ACTIONS.dataFlow.activate,
|
|
160
|
-
parseInput(raw) {
|
|
161
|
-
return { id: parseId(raw) };
|
|
162
|
-
},
|
|
163
|
-
async handler(input, ctx) {
|
|
164
|
-
return ctx.dataFlowService.activate(input.id, ctx);
|
|
165
|
-
},
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Deactivate a data flow. Deletes the artifact (404 = success) and clears
|
|
170
|
-
* `trigger_name`/`trigger_type` from `sync_config` in IS.
|
|
171
|
-
*/
|
|
172
|
-
function makeDataFlowDeactivateAction() {
|
|
173
|
-
return {
|
|
174
|
-
name: action_names_1.ACTIONS.dataFlow.deactivate,
|
|
175
|
-
parseInput(raw) {
|
|
176
|
-
return { id: parseId(raw) };
|
|
177
|
-
},
|
|
178
|
-
async handler(input, ctx) {
|
|
179
|
-
return ctx.dataFlowService.deactivate(input.id, ctx);
|
|
180
|
-
},
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
function makeDataFlowGetAction() {
|
|
184
|
-
return {
|
|
185
|
-
name: action_names_1.ACTIONS.dataFlow.get,
|
|
186
|
-
parseInput(raw) {
|
|
187
|
-
return { id: parseId(raw) };
|
|
188
|
-
},
|
|
189
|
-
async handler(input, ctx) {
|
|
190
|
-
const flow = await ctx.dataFlowService.getFlowById(input.id);
|
|
191
|
-
if (!flow) {
|
|
192
|
-
throw new errors_1.ActionError('FLOW_NOT_FOUND', `Flow ${input.id} not found`);
|
|
193
|
-
}
|
|
194
|
-
return flow;
|
|
195
|
-
},
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
function makeDataFlowListAction() {
|
|
199
|
-
return {
|
|
200
|
-
name: action_names_1.ACTIONS.dataFlow.list,
|
|
201
|
-
parseInput(raw) {
|
|
202
|
-
const obj = (raw !== null && raw !== void 0 ? raw : {});
|
|
203
|
-
const filter = obj.filter;
|
|
204
|
-
if (filter !== undefined &&
|
|
205
|
-
(filter === null || typeof filter !== 'object' || Array.isArray(filter))) {
|
|
206
|
-
throw new errors_1.InvalidInputError('filter must be an object when provided');
|
|
207
|
-
}
|
|
208
|
-
return { filter: filter };
|
|
209
|
-
},
|
|
210
|
-
async handler(input, ctx) {
|
|
211
|
-
// Scope to this function's own integration type so a vendor function
|
|
212
|
-
// never lists another vendor's flows.
|
|
213
|
-
return ctx.dataFlowService.list(Object.assign(Object.assign({}, input.filter), { integrationType: ctx.integrationType }));
|
|
214
|
-
},
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
//# sourceMappingURL=data-flow.action.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-flow.action.js","sourceRoot":"","sources":["../../src/actions/data-flow.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { Adapter } from '../interfaces/adapter.interface';
|
|
2
|
-
import type { AdapterRegistry } from '../adapters/adapter-registry';
|
|
3
|
-
import type { SyncResult } from '../interfaces/sync-result.interface';
|
|
4
|
-
import type { Action } from './utils/types';
|
|
5
|
-
type EventDeps = {
|
|
6
|
-
adapter: Adapter;
|
|
7
|
-
registry: AdapterRegistry;
|
|
8
|
-
};
|
|
9
|
-
type SkeduloOperation = 'INSERT' | 'UPDATE' | 'DELETE';
|
|
10
|
-
interface SkeduloChange {
|
|
11
|
-
operation: SkeduloOperation;
|
|
12
|
-
recordId: string;
|
|
13
|
-
payload: Record<string, unknown>;
|
|
14
|
-
}
|
|
15
|
-
export interface OnSkeduloEventInput {
|
|
16
|
-
/** Resolved from the `sked-data-flow-id` header (passed by the dispatcher as parse meta). */
|
|
17
|
-
dataFlowId: number;
|
|
18
|
-
changes: SkeduloChange[];
|
|
19
|
-
}
|
|
20
|
-
export interface OnSkeduloEventOutput {
|
|
21
|
-
message: string;
|
|
22
|
-
results: SyncResult[];
|
|
23
|
-
}
|
|
24
|
-
export declare function makeOnSkeduloEventAction(deps: EventDeps): Action<OnSkeduloEventInput, OnSkeduloEventOutput>;
|
|
25
|
-
export type OnVendorEventInput = unknown;
|
|
26
|
-
export interface OnVendorEventOutput {
|
|
27
|
-
message: string;
|
|
28
|
-
results: SyncResult[];
|
|
29
|
-
}
|
|
30
|
-
export declare function makeOnVendorEventAction(deps: EventDeps): Action<OnVendorEventInput, OnVendorEventOutput>;
|
|
31
|
-
export {};
|
|
32
|
-
//# sourceMappingURL=event.action.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"event.action.d.ts","sourceRoot":"","sources":["../../src/actions/event.action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAItE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,KAAK,SAAS,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,CAAC;AAIjE,KAAK,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvD,UAAU,aAAa;IACrB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,6FAA6F;IAC7F,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AACD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAkCD,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,SAAS,GACd,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CA8CnD;AAID,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC;AACzC,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,SAAS,GACd,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CA2CjD"}
|