@fsai-flow/workflow 0.0.2 → 0.0.3

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.
Files changed (79) hide show
  1. package/dist/README.md +31 -0
  2. package/dist/package.json +42 -0
  3. package/dist/src/index.d.ts +21 -0
  4. package/dist/src/index.js +33 -0
  5. package/dist/src/index.js.map +1 -0
  6. package/dist/src/lib/Constants.d.ts +68 -0
  7. package/dist/src/lib/Constants.js +106 -0
  8. package/dist/src/lib/Constants.js.map +1 -0
  9. package/dist/src/lib/DeferredPromise.d.ts +6 -0
  10. package/dist/src/lib/DeferredPromise.js +11 -0
  11. package/dist/src/lib/DeferredPromise.js.map +1 -0
  12. package/dist/src/lib/Expression.d.ts +65 -0
  13. package/dist/src/lib/Expression.js +215 -0
  14. package/dist/src/lib/Expression.js.map +1 -0
  15. package/dist/src/lib/Interfaces.d.ts +1579 -0
  16. package/dist/src/lib/Interfaces.js +44 -0
  17. package/dist/src/lib/Interfaces.js.map +1 -0
  18. package/dist/src/lib/LoggerProxy.d.ts +9 -0
  19. package/dist/src/lib/LoggerProxy.js +40 -0
  20. package/dist/src/lib/LoggerProxy.js.map +1 -0
  21. package/dist/src/lib/MetadataUtils.d.ts +4 -0
  22. package/dist/src/lib/MetadataUtils.js +27 -0
  23. package/dist/src/lib/MetadataUtils.js.map +1 -0
  24. package/dist/src/lib/NodeErrors.d.ts +82 -0
  25. package/dist/src/lib/NodeErrors.js +289 -0
  26. package/dist/src/lib/NodeErrors.js.map +1 -0
  27. package/dist/src/lib/NodeHelpers.d.ts +198 -0
  28. package/dist/src/lib/NodeHelpers.js +1348 -0
  29. package/dist/src/lib/NodeHelpers.js.map +1 -0
  30. package/dist/src/lib/ObservableObject.d.ts +5 -0
  31. package/dist/src/lib/ObservableObject.js +61 -0
  32. package/dist/src/lib/ObservableObject.js.map +1 -0
  33. package/dist/src/lib/RoutingNode.d.ts +18 -0
  34. package/dist/src/lib/RoutingNode.js +508 -0
  35. package/dist/src/lib/RoutingNode.js.map +1 -0
  36. package/dist/src/lib/TelemetryHelpers.d.ts +3 -0
  37. package/dist/src/lib/TelemetryHelpers.js +69 -0
  38. package/dist/src/lib/TelemetryHelpers.js.map +1 -0
  39. package/dist/src/lib/TypeValidation.d.ts +21 -0
  40. package/dist/src/lib/TypeValidation.js +385 -0
  41. package/dist/src/lib/TypeValidation.js.map +1 -0
  42. package/dist/src/lib/VersionedNodeType.d.ts +9 -0
  43. package/dist/src/lib/VersionedNodeType.js +26 -0
  44. package/dist/src/lib/VersionedNodeType.js.map +1 -0
  45. package/dist/src/lib/Workflow.d.ts +248 -0
  46. package/dist/src/lib/Workflow.js +904 -0
  47. package/dist/src/lib/Workflow.js.map +1 -0
  48. package/dist/src/lib/WorkflowDataProxy.d.ts +87 -0
  49. package/dist/src/lib/WorkflowDataProxy.js +556 -0
  50. package/dist/src/lib/WorkflowDataProxy.js.map +1 -0
  51. package/dist/src/lib/WorkflowErrors.d.ts +9 -0
  52. package/dist/src/lib/WorkflowErrors.js +18 -0
  53. package/dist/src/lib/WorkflowErrors.js.map +1 -0
  54. package/dist/src/lib/WorkflowHooks.d.ts +11 -0
  55. package/dist/src/lib/WorkflowHooks.js +34 -0
  56. package/dist/src/lib/WorkflowHooks.js.map +1 -0
  57. package/dist/src/lib/errors/base/base.error.d.ts +30 -0
  58. package/dist/src/lib/errors/base/base.error.js +45 -0
  59. package/dist/src/lib/errors/base/base.error.js.map +1 -0
  60. package/dist/src/lib/errors/base/operational.error.d.ts +15 -0
  61. package/dist/src/lib/errors/base/operational.error.js +19 -0
  62. package/dist/src/lib/errors/base/operational.error.js.map +1 -0
  63. package/dist/src/lib/errors/error.types.d.ts +11 -0
  64. package/dist/src/lib/errors/error.types.js +3 -0
  65. package/dist/src/lib/errors/error.types.js.map +1 -0
  66. package/dist/src/lib/errors/index.d.ts +1 -0
  67. package/dist/src/lib/errors/index.js +6 -0
  68. package/dist/src/lib/errors/index.js.map +1 -0
  69. package/dist/src/lib/result.d.ts +19 -0
  70. package/dist/src/lib/result.js +36 -0
  71. package/dist/src/lib/result.js.map +1 -0
  72. package/dist/src/lib/utils.d.ts +50 -0
  73. package/dist/src/lib/utils.js +119 -0
  74. package/dist/src/lib/utils.js.map +1 -0
  75. package/package.json +5 -1
  76. package/src/lib/Interfaces.ts +28 -33
  77. package/src/lib/Workflow.ts +1 -1
  78. package/src/lib/WorkflowDataProxy.ts +1 -1
  79. package/src/lib/utils.ts +99 -120
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowHooks.js","sourceRoot":"","sources":["../../../src/lib/WorkflowHooks.ts"],"names":[],"mappings":";;;AAQA,MAAa,aAAa;IACzB,IAAI,CAAsB;IAE1B,YAAY,CAAgB;IAE5B,WAAW,CAAS;IAEpB,SAAS,CAAU;IAEnB,OAAO,CAAU;IAEjB,aAAa,CAAwB;IAErC,YACC,aAAoC,EACpC,IAAyB,EACzB,WAAmB,EACnB,YAA2B,EAC3B,kBAAqD;QAErD,2FAA2F;QAC3F,kBAAkB,GAAG,kBAAkB,IAAI,EAAE,CAAC;QAE9C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC;QAC9C,IAAI,CAAC,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC;IAC3C,CAAC;IAED,iHAAiH;IACjH,KAAK,CAAC,oBAAoB,CAAC,QAAgB,EAAE,UAAiB;QAC7D,6BAA6B;QAC7B,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC/F,0FAA0F;YAC1F,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAE,EAAE,CAAC;gBAC1D,4CAA4C;gBAC5C,MAAM,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC5C,CAAC;QACF,CAAC;IACF,CAAC;CACD;AA1CD,sCA0CC"}
@@ -0,0 +1,30 @@
1
+ import type { Event } from '@sentry/node';
2
+ import type { ErrorTags, ErrorLevel, ReportingOptions } from '../error.types';
3
+ export type BaseErrorOptions = {
4
+ description?: undefined | null;
5
+ } & ErrorOptions & ReportingOptions;
6
+ interface ErrorOptions {
7
+ cause?: unknown;
8
+ }
9
+ /**
10
+ * Base class for all errors
11
+ */
12
+ export declare abstract class BaseError extends Error {
13
+ /**
14
+ * Error level. Defines which level the error should be logged/reported
15
+ * @default 'error'
16
+ */
17
+ level: ErrorLevel;
18
+ /**
19
+ * Whether the error should be reported to Sentry.
20
+ * @default true
21
+ */
22
+ readonly shouldReport: boolean;
23
+ readonly description: string | null | undefined;
24
+ readonly tags: ErrorTags;
25
+ readonly extra?: Event['extra'];
26
+ readonly packageName?: string;
27
+ readonly cause?: unknown;
28
+ constructor(message: string, { level, description, shouldReport, tags, extra, ...rest }?: BaseErrorOptions);
29
+ }
30
+ export {};
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseError = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const callsites_1 = tslib_1.__importDefault(require("callsites"));
6
+ /**
7
+ * Base class for all errors
8
+ */
9
+ class BaseError extends Error {
10
+ /**
11
+ * Error level. Defines which level the error should be logged/reported
12
+ * @default 'error'
13
+ */
14
+ level;
15
+ /**
16
+ * Whether the error should be reported to Sentry.
17
+ * @default true
18
+ */
19
+ shouldReport;
20
+ description;
21
+ tags;
22
+ extra;
23
+ packageName;
24
+ cause;
25
+ constructor(message, { level = 'error', description, shouldReport, tags = {}, extra, ...rest } = {}) {
26
+ super(message);
27
+ if (rest.cause !== undefined) {
28
+ this.cause = rest.cause;
29
+ }
30
+ this.level = level;
31
+ this.shouldReport = shouldReport ?? (level === 'error' || level === 'fatal');
32
+ this.description = description;
33
+ this.tags = tags;
34
+ this.extra = extra;
35
+ try {
36
+ const filePath = (0, callsites_1.default)()[2].getFileName() ?? '';
37
+ const match = /packages\/([^\/]+)\//.exec(filePath)?.[1];
38
+ if (match)
39
+ this.tags['packageName'] = match;
40
+ }
41
+ catch { }
42
+ }
43
+ }
44
+ exports.BaseError = BaseError;
45
+ //# sourceMappingURL=base.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.error.js","sourceRoot":"","sources":["../../../../../src/lib/errors/base/base.error.ts"],"names":[],"mappings":";;;;AACA,kEAAkC;AAUlC;;GAEG;AACH,MAAsB,SAAU,SAAQ,KAAK;IAC5C;;;OAGG;IACH,KAAK,CAAa;IAElB;;;OAGG;IACM,YAAY,CAAU;IAEtB,WAAW,CAA4B;IAEvC,IAAI,CAAY;IAEhB,KAAK,CAAkB;IAEvB,WAAW,CAAU;IAErB,KAAK,CAAW;IAEzB,YACC,OAAe,EACf,EACC,KAAK,GAAG,OAAO,EACf,WAAW,EACX,YAAY,EACZ,IAAI,GAAG,EAAE,EACT,KAAK,EACL,GAAG,IAAI,KACc,EAAE;QAExB,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,CAAC,CAAC;QAC7E,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,IAAA,mBAAS,GAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAEzD,IAAI,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;CACD;AArDD,8BAqDC"}
@@ -0,0 +1,15 @@
1
+ import type { BaseErrorOptions } from './base.error';
2
+ import { BaseError } from './base.error';
3
+ export type OperationalErrorOptions = Omit<BaseErrorOptions, 'level'> & {
4
+ level?: 'info' | 'warning' | 'error';
5
+ };
6
+ /**
7
+ * Error that indicates a transient issue, like a network request failing,
8
+ * a database query timing out, etc. These are expected to happen, are
9
+ * transient by nature and should be handled gracefully.
10
+ *
11
+ * Default level: warning
12
+ */
13
+ export declare class OperationalError extends BaseError {
14
+ constructor(message: string, opts?: OperationalErrorOptions);
15
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperationalError = void 0;
4
+ const base_error_1 = require("./base.error");
5
+ /**
6
+ * Error that indicates a transient issue, like a network request failing,
7
+ * a database query timing out, etc. These are expected to happen, are
8
+ * transient by nature and should be handled gracefully.
9
+ *
10
+ * Default level: warning
11
+ */
12
+ class OperationalError extends base_error_1.BaseError {
13
+ constructor(message, opts = {}) {
14
+ opts.level = opts.level ?? 'warning';
15
+ super(message, opts);
16
+ }
17
+ }
18
+ exports.OperationalError = OperationalError;
19
+ //# sourceMappingURL=operational.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operational.error.js","sourceRoot":"","sources":["../../../../../src/lib/errors/base/operational.error.ts"],"names":[],"mappings":";;;AACA,6CAAyC;AAMzC;;;;;;GAMG;AACH,MAAa,gBAAiB,SAAQ,sBAAS;IAC9C,YAAY,OAAe,EAAE,OAAgC,EAAE;QAC9D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;QAErC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtB,CAAC;CACD;AAND,4CAMC"}
@@ -0,0 +1,11 @@
1
+ import type { Event } from '@sentry/node';
2
+ export type ErrorLevel = 'fatal' | 'error' | 'warning' | 'info';
3
+ export type ErrorTags = NonNullable<Event['tags']>;
4
+ export type ReportingOptions = {
5
+ /** Whether the error should be reported to Sentry */
6
+ shouldReport?: boolean;
7
+ level?: ErrorLevel;
8
+ tags?: ErrorTags;
9
+ extra?: Event['extra'];
10
+ executionId?: string;
11
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=error.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.types.js","sourceRoot":"","sources":["../../../../src/lib/errors/error.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export { OperationalError, type OperationalErrorOptions } from './base/operational.error';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperationalError = void 0;
4
+ var operational_error_1 = require("./base/operational.error");
5
+ Object.defineProperty(exports, "OperationalError", { enumerable: true, get: function () { return operational_error_1.OperationalError; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/errors/index.ts"],"names":[],"mappings":";;;AAAA,8DAA0F;AAAjF,qHAAA,gBAAgB,OAAA"}
@@ -0,0 +1,19 @@
1
+ export type ResultOk<T> = {
2
+ ok: true;
3
+ result: T;
4
+ };
5
+ export type ResultError<E> = {
6
+ ok: false;
7
+ error: E;
8
+ };
9
+ export type Result<T, E> = ResultOk<T> | ResultError<E>;
10
+ export declare const createResultOk: <T>(data: T) => ResultOk<T>;
11
+ export declare const createResultError: <E = unknown>(error: E) => ResultError<E>;
12
+ export declare function ensureError(error: unknown): Error;
13
+ /**
14
+ * Executes the given function and converts it to a Result object.
15
+ *
16
+ * @example
17
+ * const result = toResult(() => fs.writeFileSync('file.txt', 'Hello, World!'));
18
+ */
19
+ export declare const toResult: <T, E extends Error = Error>(fn: () => T) => Result<T, E>;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toResult = exports.createResultError = exports.createResultOk = void 0;
4
+ exports.ensureError = ensureError;
5
+ const createResultOk = (data) => ({
6
+ ok: true,
7
+ result: data,
8
+ });
9
+ exports.createResultOk = createResultOk;
10
+ const createResultError = (error) => ({
11
+ ok: false,
12
+ error,
13
+ });
14
+ exports.createResultError = createResultError;
15
+ function ensureError(error) {
16
+ return error instanceof Error
17
+ ? error
18
+ : new Error('Error that was not an instance of Error was thrown, cause: ' + error);
19
+ }
20
+ /**
21
+ * Executes the given function and converts it to a Result object.
22
+ *
23
+ * @example
24
+ * const result = toResult(() => fs.writeFileSync('file.txt', 'Hello, World!'));
25
+ */
26
+ const toResult = (fn) => {
27
+ try {
28
+ return (0, exports.createResultOk)(fn());
29
+ }
30
+ catch (e) {
31
+ const error = ensureError(e);
32
+ return (0, exports.createResultError)(error);
33
+ }
34
+ };
35
+ exports.toResult = toResult;
36
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../../src/lib/result.ts"],"names":[],"mappings":";;;AAcA,kCAIC;AAdM,MAAM,cAAc,GAAG,CAAI,IAAO,EAAe,EAAE,CAAC,CAAC;IAC3D,EAAE,EAAE,IAAI;IACR,MAAM,EAAE,IAAI;CACZ,CAAC,CAAC;AAHU,QAAA,cAAc,kBAGxB;AAEI,MAAM,iBAAiB,GAAG,CAAc,KAAQ,EAAkB,EAAE,CAAC,CAAC;IAC5E,EAAE,EAAE,KAAK;IACT,KAAK;CACL,CAAC,CAAC;AAHU,QAAA,iBAAiB,qBAG3B;AAEH,SAAgB,WAAW,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,KAAK;QAC5B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,KAAK,CAAC,6DAA6D,GAAG,KAAK,CAAC,CAAC;AACrF,CAAC;AAED;;;;;GAKG;AACI,MAAM,QAAQ,GAAG,CAA6B,EAAW,EAAgB,EAAE;IACjF,IAAI,CAAC;QACJ,OAAO,IAAA,sBAAc,EAAI,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,IAAA,yBAAiB,EAAI,KAAU,CAAC,CAAC;IACzC,CAAC;AACF,CAAC,CAAC;AAPW,QAAA,QAAQ,YAOnB"}
@@ -0,0 +1,50 @@
1
+ import type { IDisplayOptions, INodeProperties } from './Interfaces';
2
+ export declare function updateDisplayOptions(displayOptions: IDisplayOptions, properties: INodeProperties[]): {
3
+ displayOptions: IDisplayOptions;
4
+ displayName: string;
5
+ name: string;
6
+ type: import("./Interfaces").NodePropertyTypes;
7
+ typeOptions?: import("./Interfaces").INodePropertyTypeOptions;
8
+ default: import("./Interfaces").NodeParameterValue | import("./Interfaces").INodeParameters | import("./Interfaces").INodeParameters[] | import("./Interfaces").NodeParameterValue[];
9
+ description?: string;
10
+ hint?: string;
11
+ options?: Array<import("./Interfaces").INodePropertyOptions | INodeProperties | import("./Interfaces").INodePropertyCollection>;
12
+ placeholder?: string;
13
+ isNodeSetting?: boolean;
14
+ noDataExpression?: boolean;
15
+ required?: boolean;
16
+ routing?: import("./Interfaces").INodePropertyRouting;
17
+ modes?: import("./Interfaces").INodePropertyMode[];
18
+ validateType?: import("./Interfaces").FieldType;
19
+ ignoreValidationDuringExecution?: boolean;
20
+ disabledOptions?: {
21
+ show?: {
22
+ [key: string]: Array<import("./Interfaces").NodeParameterValue | import("./Interfaces").DisplayCondition> | import("./Interfaces").NodeParameterValue[] | undefined;
23
+ };
24
+ };
25
+ }[];
26
+ export declare function randomInt(max: number): number;
27
+ export declare function randomInt(min: number, max: number): number;
28
+ type MutuallyExclusive<T, U> = (T & {
29
+ [k in Exclude<keyof U, keyof T>]?: never;
30
+ }) | (U & {
31
+ [k in Exclude<keyof T, keyof U>]?: never;
32
+ });
33
+ type JSONParseOptions<T> = {
34
+ acceptJSObject?: boolean;
35
+ } & MutuallyExclusive<{
36
+ errorMessage?: string;
37
+ }, {
38
+ fallbackValue?: T;
39
+ }>;
40
+ export declare const jsonParse: <T>(jsonString: string, options?: JSONParseOptions<T>) => T;
41
+ type JSONStringifyOptions = {
42
+ replaceCircularRefs?: boolean;
43
+ };
44
+ export declare const replaceCircularReferences: <T>(value: T, knownObjects?: WeakSet<object>) => T;
45
+ export declare const jsonStringify: (obj: unknown, options?: JSONStringifyOptions) => string;
46
+ /**
47
+ * Checks if a value is an object with a specific key and provides a type guard for the key.
48
+ */
49
+ export declare function hasKey<T extends PropertyKey>(value: unknown, key: T): value is Record<T, unknown>;
50
+ export {};
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.jsonStringify = exports.replaceCircularReferences = exports.jsonParse = void 0;
4
+ exports.updateDisplayOptions = updateDisplayOptions;
5
+ exports.randomInt = randomInt;
6
+ exports.hasKey = hasKey;
7
+ const esprima_next_1 = require("esprima-next");
8
+ const lodash_1 = require("lodash");
9
+ function updateDisplayOptions(displayOptions, properties) {
10
+ return properties.map((nodeProperty) => {
11
+ return {
12
+ ...nodeProperty,
13
+ displayOptions: (0, lodash_1.merge)({}, nodeProperty.displayOptions, displayOptions),
14
+ };
15
+ });
16
+ }
17
+ /**
18
+ * Generates a random integer within a specified range.
19
+ *
20
+ * @param {number} min - The lower bound of the range. If `max` is not provided, this value is used as the upper bound and the lower bound is set to 0.
21
+ * @param {number} [max] - The upper bound of the range, not inclusive.
22
+ * @returns {number} A random integer within the specified range.
23
+ */
24
+ function randomInt(min, max) {
25
+ if (max === undefined) {
26
+ max = min;
27
+ min = 0;
28
+ }
29
+ if (max <= min) {
30
+ throw new Error("max must be greater than min");
31
+ }
32
+ const range = max - min;
33
+ const maxUnbiased = Math.floor(0xffffffff / range) * range;
34
+ let rand;
35
+ do {
36
+ rand = crypto.getRandomValues(new Uint32Array(1))[0];
37
+ } while (rand >= maxUnbiased);
38
+ return min + (rand % range);
39
+ }
40
+ const jsonParse = (jsonString, options) => {
41
+ try {
42
+ return JSON.parse(jsonString);
43
+ }
44
+ catch (error) {
45
+ if (options?.acceptJSObject) {
46
+ try {
47
+ const jsonStringCleaned = parseJSObject(jsonString);
48
+ return jsonStringCleaned;
49
+ }
50
+ catch (e) {
51
+ // Ignore this error and return the original error or the fallback value
52
+ }
53
+ }
54
+ if (options?.fallbackValue !== undefined) {
55
+ if (options.fallbackValue instanceof Function) {
56
+ return options.fallbackValue();
57
+ }
58
+ return options.fallbackValue;
59
+ }
60
+ else if (options?.errorMessage) {
61
+ // TODO REFACTOR: Use ApplicationError from offical @fsai-flow/workflow repo
62
+ throw new Error(options.errorMessage);
63
+ }
64
+ throw error;
65
+ }
66
+ };
67
+ exports.jsonParse = jsonParse;
68
+ const replaceCircularReferences = (value, knownObjects = new WeakSet()) => {
69
+ if (typeof value !== 'object' || value === null || value instanceof RegExp)
70
+ return value;
71
+ if ('toJSON' in value && typeof value.toJSON === 'function')
72
+ return value.toJSON();
73
+ if (knownObjects.has(value))
74
+ return '[Circular Reference]';
75
+ knownObjects.add(value);
76
+ const copy = (Array.isArray(value) ? [] : {});
77
+ for (const key in value) {
78
+ copy[key] = (0, exports.replaceCircularReferences)(value[key], knownObjects);
79
+ }
80
+ knownObjects.delete(value);
81
+ return copy;
82
+ };
83
+ exports.replaceCircularReferences = replaceCircularReferences;
84
+ const jsonStringify = (obj, options = {}) => {
85
+ return JSON.stringify(options?.replaceCircularRefs ? (0, exports.replaceCircularReferences)(obj) : obj);
86
+ };
87
+ exports.jsonStringify = jsonStringify;
88
+ function syntaxNodeToValue(expression) {
89
+ switch (expression?.type) {
90
+ case esprima_next_1.Syntax.ObjectExpression:
91
+ return Object.fromEntries(expression.properties
92
+ .filter((prop) => prop.type === esprima_next_1.Syntax.Property)
93
+ .map(({ key, value }) => [syntaxNodeToValue(key), syntaxNodeToValue(value)]));
94
+ case esprima_next_1.Syntax.Identifier:
95
+ return expression.name;
96
+ case esprima_next_1.Syntax.Literal:
97
+ return expression.value;
98
+ case esprima_next_1.Syntax.ArrayExpression:
99
+ return expression.elements.map((exp) => syntaxNodeToValue(exp));
100
+ default:
101
+ return undefined;
102
+ }
103
+ }
104
+ /**
105
+ * Parse any JavaScript ObjectExpression, including:
106
+ * - single quoted keys
107
+ * - unquoted keys
108
+ */
109
+ function parseJSObject(objectAsString) {
110
+ const jsExpression = (0, esprima_next_1.parse)(`(${objectAsString})`).body.find((node) => node.type === esprima_next_1.Syntax.ExpressionStatement && node.expression.type === esprima_next_1.Syntax.ObjectExpression);
111
+ return syntaxNodeToValue(jsExpression?.expression);
112
+ }
113
+ /**
114
+ * Checks if a value is an object with a specific key and provides a type guard for the key.
115
+ */
116
+ function hasKey(value, key) {
117
+ return value !== null && typeof value === 'object' && value.hasOwnProperty(key);
118
+ }
119
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fsai-flow/workflow",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "license": "PolyForm Noncommercial License 1.0.0",
5
5
  "dependencies": {
6
6
  "form-data": "^4.0.1",
@@ -10,6 +10,8 @@
10
10
  "lodash.isequal": "^4.5.0",
11
11
  "lodash.merge": "^4.6.2",
12
12
  "luxon": "^3.5.0",
13
+ "request": "^2.88.2",
14
+ "request-promise-native": "^1.0.9",
13
15
  "riot-tmpl": "^3.0.8",
14
16
  "tslib": "^2.3.0",
15
17
  "@sentry/node": "^9.15.0",
@@ -24,6 +26,8 @@
24
26
  "@types/lodash.isequal": "^4.5.8",
25
27
  "@types/lodash.merge": "^4.6.9",
26
28
  "@types/luxon": "^3.4.2",
29
+ "@types/request": "^2.48.12",
30
+ "@types/request-promise-native": "^1.0.15",
27
31
  "@types/xml2js": "^0.4.14",
28
32
  "@typescript-eslint/eslint-plugin": "^8.18.0",
29
33
  "@typescript-eslint/parser": "^8.18.0",
@@ -13,6 +13,8 @@ import { NodeApiError, NodeOperationError } from './NodeErrors';
13
13
  import { Workflow } from './Workflow';
14
14
  import { CODE_EXECUTION_MODES, CODE_LANGUAGES, LOG_LEVELS } from './Constants';
15
15
 
16
+ import { OptionsWithUri, OptionsWithUrl } from 'request';
17
+ import * as requestPromise from 'request-promise-native';
16
18
  export interface IAdditionalCredentialOptions {
17
19
  oauth2?: IOAuth2Options;
18
20
  credentialsDecrypted?: ICredentialsDecrypted;
@@ -692,8 +694,33 @@ export type ISupplyDataFunctions = {
692
694
  requestOptions: IHttpRequestOptions,
693
695
  additionalCredentialOptions?: IAdditionalCredentialOptions,
694
696
  ): Promise<IN8nHttpResponse | IN8nHttpFullResponse>;
697
+ request: (uriOrObject: string | IDataObject | any, options?: IDataObject) => Promise<any>; // tslint:disable-line:no-any
698
+ requestWithAuthentication(
699
+ this: IAllExecuteFunctions,
700
+ credentialsType: string,
701
+ requestOptions: OptionsWithUri | requestPromise.RequestPromiseOptions,
702
+ additionalCredentialOptions?: IAdditionalCredentialOptions,
703
+ ): Promise<any>;
704
+ requestOAuth2(
705
+ this: IAllExecuteFunctions,
706
+ credentialsType: string,
707
+ requestOptions: OptionsWithUri | requestPromise.RequestPromiseOptions,
708
+ oAuth2Options?: IOAuth2Options,
709
+ ): Promise<any>;
710
+ requestOAuth1(
711
+ this: IAllExecuteFunctions,
712
+ credentialsType: string,
713
+ requestOptions: OptionsWithUrl | requestPromise.RequestPromiseOptions,
714
+ ): Promise<any>;
715
+ prepareBinaryData(
716
+ binaryData: Buffer,
717
+ filePath?: string,
718
+ mimeType?: string,
719
+ ): Promise<IBinaryData>;
695
720
  assertBinaryData(itemIndex: number, propertyName: string, inputIndex?: number): IBinaryData;
696
721
  getBinaryDataBuffer(itemIndex: number, propertyName: string, inputIndex?: number): Promise<Buffer>;
722
+ returnJsonArray(jsonData: IDataObject | IDataObject[]): INodeExecutionData[];
723
+ normalizeItems(items: INodeExecutionData | INodeExecutionData[]): INodeExecutionData[];
697
724
  [key: string]: (...args: any[]) => any; // tslint:disable-line:no-any
698
725
  };
699
726
  }
@@ -1041,7 +1068,6 @@ export interface IWebhookFunctions {
1041
1068
  node?: INode,
1042
1069
  ): { outputExecutionData: IRunExecutionData };
1043
1070
  logAiEvent(event: AiEvent, data?: string): void;
1044
-
1045
1071
  }
1046
1072
 
1047
1073
  export interface INodeCredentialsDetails {
@@ -1994,6 +2020,7 @@ export interface IWorkflowBase {
1994
2020
  connections: IConnections;
1995
2021
  settings?: IWorkflowSettings;
1996
2022
  staticData?: IDataObject;
2023
+ teamId?: string | null;
1997
2024
  }
1998
2025
 
1999
2026
  export interface IWorkflowCredentials {
@@ -2228,35 +2255,3 @@ export type AiEvent =
2228
2255
  | 'ai-llm-errored'
2229
2256
  | 'ai-vector-store-populated'
2230
2257
  | 'ai-vector-store-updated';
2231
-
2232
- export type SetNodeOptions = {
2233
- dotNotation?: boolean;
2234
- ignoreConversionErrors?: boolean;
2235
- include?: IncludeMods;
2236
- includeBinary?: boolean;
2237
- };
2238
-
2239
- export type SetField = {
2240
- name: string;
2241
- type: 'stringValue' | 'numberValue' | 'booleanValue' | 'arrayValue' | 'objectValue';
2242
- stringValue?: string;
2243
- numberValue?: number;
2244
- booleanValue?: boolean;
2245
- arrayValue?: string[] | string | IDataObject | IDataObject[];
2246
- objectValue?: string | IDataObject;
2247
- };
2248
-
2249
- export type AssignmentSetField = {
2250
- name: string;
2251
- value: unknown;
2252
- type: string;
2253
- };
2254
-
2255
- export const INCLUDE = {
2256
- ALL: 'all',
2257
- NONE: 'none',
2258
- SELECTED: 'selected',
2259
- EXCEPT: 'except',
2260
- } as const;
2261
-
2262
- export type IncludeMods = (typeof INCLUDE)[keyof typeof INCLUDE];
@@ -158,7 +158,7 @@ export class Workflow {
158
158
  if (connectionInfo.node === '__proto__' || connectionInfo.node === 'constructor' || connectionInfo.node === 'prototype') {
159
159
  throw new Error('Prototype-polluting assignment detected');
160
160
  }
161
-
161
+
162
162
  if (!returnConnection.hasOwnProperty(connectionInfo.node)) {
163
163
  returnConnection[connectionInfo.node] = {};
164
164
  }
@@ -385,7 +385,7 @@ export class WorkflowDataProxy {
385
385
  {},
386
386
  {
387
387
  get(target, name, receiver) {
388
- return process.env[name.toString()];
388
+ throw new Error('Environment variables are not supported in this node');
389
389
  },
390
390
  },
391
391
  );