@golemio/core 3.2.2-dev.2622707631 → 3.3.0-dev.2636931178

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 (28) hide show
  1. package/dist/input-gateway/ioc/ContainerToken.d.ts +1 -0
  2. package/dist/input-gateway/ioc/ContainerToken.js +1 -0
  3. package/dist/input-gateway/ioc/ContainerToken.js.map +1 -1
  4. package/dist/input-gateway/ioc/Di.js +7 -0
  5. package/dist/input-gateway/ioc/Di.js.map +1 -1
  6. package/dist/input-gateway/models/IModel.d.ts +16 -0
  7. package/dist/input-gateway/models/IModel.js +3 -0
  8. package/dist/input-gateway/models/IModel.js.map +1 -0
  9. package/dist/input-gateway/models/RedisModel.d.ts +48 -0
  10. package/dist/input-gateway/models/RedisModel.js +186 -0
  11. package/dist/input-gateway/models/RedisModel.js.map +1 -0
  12. package/dist/input-gateway/models/index.d.ts +2 -0
  13. package/dist/input-gateway/models/index.js +19 -0
  14. package/dist/input-gateway/models/index.js.map +1 -0
  15. package/dist/integration-engine/datasources/index.d.ts +1 -0
  16. package/dist/integration-engine/datasources/index.js +1 -0
  17. package/dist/integration-engine/datasources/index.js.map +1 -1
  18. package/dist/integration-engine/workers/AbstractTaskWithoutValidation.d.ts +1 -0
  19. package/dist/integration-engine/workers/AbstractTaskWithoutValidation.js +9 -1
  20. package/dist/integration-engine/workers/AbstractTaskWithoutValidation.js.map +1 -1
  21. package/dist/integration-engine/workers/AbstractWorker.d.ts +1 -0
  22. package/dist/integration-engine/workers/AbstractWorker.js +20 -1
  23. package/dist/integration-engine/workers/AbstractWorker.js.map +1 -1
  24. package/dist/integration-engine/workers/helpers/AbortableTask.d.ts +2 -2
  25. package/dist/integration-engine/workers/helpers/AbortableTask.js +5 -4
  26. package/dist/integration-engine/workers/helpers/AbortableTask.js.map +1 -1
  27. package/dist/integration-engine/workers/interfaces/ITask.d.ts +1 -0
  28. package/package.json +1 -1
@@ -8,6 +8,7 @@ declare const ContainerToken: {
8
8
  LoggerEmitterProvider: symbol;
9
9
  RequestLogger: symbol;
10
10
  AmqpConnector: symbol;
11
+ RedisConnector: symbol;
11
12
  StorageService: symbol;
12
13
  StorageServiceProvider: symbol;
13
14
  SaveRawDataMiddleware: symbol;
@@ -12,6 +12,7 @@ const ContainerToken = {
12
12
  LoggerEmitterProvider: Symbol(),
13
13
  RequestLogger: Symbol(),
14
14
  AmqpConnector: Symbol(),
15
+ RedisConnector: Symbol(),
15
16
  StorageService: Symbol(),
16
17
  StorageServiceProvider: Symbol(),
17
18
  SaveRawDataMiddleware: Symbol(),
@@ -1 +1 @@
1
- {"version":3,"file":"ContainerToken.js","sourceRoot":"","sources":["../../../src/input-gateway/ioc/ContainerToken.ts"],"names":[],"mappings":";;;AAAA,2DAAmD;AAEnD,MAAM,cAAc,GAAG;IACnB,MAAM,EAAE,MAAM,EAAE;IAChB;;OAEG;IACH,MAAM,EAAE,qBAAS,CAAC,MAAM;IACxB,aAAa,EAAE,MAAM,EAAE;IACvB,qBAAqB,EAAE,MAAM,EAAE;IAC/B,aAAa,EAAE,MAAM,EAAE;IACvB,aAAa,EAAE,MAAM,EAAE;IACvB,cAAc,EAAE,MAAM,EAAE;IACxB,sBAAsB,EAAE,MAAM,EAAE;IAChC,qBAAqB,EAAE,MAAM,EAAE;IAC/B,mBAAmB,EAAE,MAAM,EAAE;CAChC,CAAC;AAEO,wCAAc"}
1
+ {"version":3,"file":"ContainerToken.js","sourceRoot":"","sources":["../../../src/input-gateway/ioc/ContainerToken.ts"],"names":[],"mappings":";;;AAAA,2DAAmD;AAEnD,MAAM,cAAc,GAAG;IACnB,MAAM,EAAE,MAAM,EAAE;IAChB;;OAEG;IACH,MAAM,EAAE,qBAAS,CAAC,MAAM;IACxB,aAAa,EAAE,MAAM,EAAE;IACvB,qBAAqB,EAAE,MAAM,EAAE;IAC/B,aAAa,EAAE,MAAM,EAAE;IACvB,aAAa,EAAE,MAAM,EAAE;IACvB,cAAc,EAAE,MAAM,EAAE;IACxB,cAAc,EAAE,MAAM,EAAE;IACxB,sBAAsB,EAAE,MAAM,EAAE;IAChC,qBAAqB,EAAE,MAAM,EAAE;IAC/B,mBAAmB,EAAE,MAAM,EAAE;CAChC,CAAC;AAEO,wCAAc"}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.InputGatewayContainer = void 0;
7
7
  const _helpers_1 = require("../../helpers");
8
8
  const SimpleConfig_1 = __importDefault(require("../../helpers/configuration/SimpleConfig"));
9
+ const IoRedisConnector_1 = require("../../helpers/data-access/redis/IoRedisConnector");
9
10
  const CoreToken_1 = require("../../helpers/ioc/CoreToken");
10
11
  const Di_1 = require("../../helpers/ioc/Di");
11
12
  const InputGatewayConfiguration_1 = require("../config/InputGatewayConfiguration");
@@ -40,6 +41,12 @@ InputGatewayContainer.register(ContainerToken_1.ContainerToken.AmqpConnector, {
40
41
  .register(ContainerToken_1.ContainerToken.StorageServiceProvider, StorageServiceProvider_1.StorageServiceProvider, singletonOptions)
41
42
  .register(ContainerToken_1.ContainerToken.StorageService, {
42
43
  useFactory: (0, tsyringe_1.instanceCachingFactory)((c) => c.resolve(ContainerToken_1.ContainerToken.StorageServiceProvider).service),
44
+ })
45
+ .register(ContainerToken_1.ContainerToken.RedisConnector, {
46
+ useFactory: (0, tsyringe_1.instanceCachingFactory)((c) => {
47
+ const simpleConfig = c.resolve(CoreToken_1.CoreToken.SimpleConfig);
48
+ return new IoRedisConnector_1.IoRedisConnector(simpleConfig.getValue("env.REDIS_CONN", ""), c.resolve(CoreToken_1.CoreToken.Logger));
49
+ }),
43
50
  });
44
51
  //#endregion
45
52
  //#region Middleware
@@ -1 +1 @@
1
- {"version":3,"file":"Di.js","sourceRoot":"","sources":["../../../src/input-gateway/ioc/Di.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAsE;AAEtE,4FAA+D;AAE/D,2DAAmD;AACnD,6CAAkD;AAElD,mFAAiF;AACjF,+DAA6D;AAC7D,kFAAgF;AAChF,4EAA0E;AAC1E,4EAA0E;AAC1E,2EAAyE;AACzE,uCAA6D;AAC7D,qDAAkD;AAElD,wBAAwB;AACxB,MAAM,gBAAgB,GAAG,EAAE,SAAS,EAAE,oBAAS,CAAC,SAAS,EAAE,CAAC;AAC5D,MAAM,qBAAqB,GAAG,oBAAe,CAAC,oBAAoB,EAAE,CAAC;AA8C5D,sDAAqB;AA7C9B,YAAY;AAEZ,iBAAiB;AACjB,qBAAqB,CAAC,QAAQ,CAAiB,+BAAc,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,qDAAyB,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAEjI,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAiB,+BAAc,CAAC,MAAM,CAAC,CAAC;AACpF,qBAAqB,CAAC,gBAAgB,CAClC,qBAAS,CAAC,YAAY,EACtB,IAAI,sBAAY,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CACtD,CAAC;AACF,qBAAqB,CAAC,gBAAgB,CAClC,+BAAc,CAAC,MAAM,EACrB,IAAA,uBAAY,EAAC;IACT,WAAW,EAAE,eAAe;IAC5B,OAAO,EAAE,MAAM,CAAC,QAAQ;IACxB,QAAQ,EAAE,MAAM,CAAC,SAAS;CAC7B,CAAC,CACL,CAAC;AACF,qBAAqB,CAAC,iBAAiB,CAAC,+BAAc,CAAC,qBAAqB,EAAE,6CAAqB,CAAC,CAAC,QAAQ,CACzG,+BAAc,CAAC,aAAa,EAC5B;IACI,UAAU,EAAE,IAAA,iCAAsB,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAwB,+BAAc,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC;CAC5H,CACJ,CAAC;AACF,qBAAqB,CAAC,gBAAgB,CAClC,+BAAc,CAAC,aAAa,EAC5B,IAAA,8BAAmB,EAAC,MAAM,CAAC,QAAQ,EAAE,qBAAqB,CAAC,OAAO,CAAC,+BAAc,CAAC,MAAM,CAAC,CAAC,CAC7F,CAAC;AACF,YAAY;AAEZ,qBAAqB;AACrB,qBAAqB,CAAC,QAAQ,CAAkB,+BAAc,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,6BAAa,EAAE,EAAE,gBAAgB,CAAC;KACvH,QAAQ,CAAC,+BAAc,CAAC,sBAAsB,EAAE,+CAAsB,EAAE,gBAAgB,CAAC;KACzF,QAAQ,CAAC,+BAAc,CAAC,cAAc,EAAE;IACrC,UAAU,EAAE,IAAA,iCAAsB,EAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAyB,+BAAc,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAC1F;CACJ,CAAC,CAAC;AACP,YAAY;AAEZ,oBAAoB;AACpB,qBAAqB,CAAC,iBAAiB,CAAC,+BAAc,CAAC,qBAAqB,EAAE,6CAAqB,CAAC,CAAC;AACrG,qBAAqB,CAAC,iBAAiB,CAAC,+BAAc,CAAC,mBAAmB,EAAE,yCAAmB,CAAC,CAAC"}
1
+ {"version":3,"file":"Di.js","sourceRoot":"","sources":["../../../src/input-gateway/ioc/Di.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface IRedisSettings {
2
+ isKeyConstructedFromData: boolean;
3
+ prefix: string;
4
+ encodeDataBeforeSave?: (raw: any) => any;
5
+ decodeDataAfterGet?: (encoded: any) => any;
6
+ }
7
+ export interface IRedisModel {
8
+ name: string;
9
+ set: (key: string, data: any, ttlSeconds: number, expireTimestamp: number | undefined) => Promise<any>;
10
+ hset: (key: string, data: any) => Promise<any>;
11
+ get: (key: string) => Promise<any>;
12
+ hget: (key: string) => Promise<any>;
13
+ delete: (key: string) => Promise<any>;
14
+ truncate: () => Promise<number>;
15
+ flush: () => Promise<"OK">;
16
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IModel.js","sourceRoot":"","sources":["../../../src/input-gateway/models/IModel.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { IRedisModel, IRedisSettings } from "./IModel";
2
+ import { IValidator } from "@golemio/validator";
3
+ import { ReadStream } from "fs";
4
+ import { Redis } from "ioredis";
5
+ import { Readable } from "stream";
6
+ /**
7
+ * Input gateway Redis model. Mirrors the integration-engine RedisModel but resolves its connection
8
+ * from the input-gateway container, where the (env-gated) RedisConnector is registered.
9
+ */
10
+ export declare class RedisModel implements IRedisModel {
11
+ /** Model name */
12
+ name: string;
13
+ /** The Redis connection */
14
+ protected connection: Redis;
15
+ /** Defines key construction */
16
+ protected isKeyConstructedFromData: boolean;
17
+ /** Function for encoding data (typically to string) before saving to Redis */
18
+ protected encodeDataBeforeSave: (raw: any) => any;
19
+ /** Function for decoding data (typically from string) after getting from Redis */
20
+ protected decodeDataAfterGet: (encoded: any) => any;
21
+ /** Key namespace prefix to identify model */
22
+ protected prefix: string;
23
+ /** Validation helper */
24
+ protected validator: IValidator | null;
25
+ constructor(name: string, settings: IRedisSettings, validator?: IValidator | null);
26
+ /**
27
+ * Saves data to Redis. The key expires after ttlSeconds seconds, or at the absolute Unix
28
+ * expireTimestamp (milliseconds) when ttlSeconds is not given.
29
+ */
30
+ set: (key: string, data: any, ttlSeconds?: number, expireTimestamp?: number) => Promise<any>;
31
+ hset: (key: string, data: any) => Promise<any>;
32
+ get: (key: string) => Promise<any>;
33
+ hget: (key: string) => Promise<any>;
34
+ mget: <T = object | string>(keys: string[]) => Promise<Array<T | null>>;
35
+ /**
36
+ * Stream data into a key from a file read stream via SET/APPEND.
37
+ */
38
+ pipeStream: (key: string, readStream: ReadStream) => Promise<void>;
39
+ /**
40
+ * Get a readable stream of data from a key via GETRANGE.
41
+ */
42
+ getReadableStream: (key: string) => Readable;
43
+ delete: (key?: string) => Promise<any>;
44
+ truncate: (namespace?: boolean) => Promise<number>;
45
+ flush: () => Promise<"OK">;
46
+ private validate;
47
+ private buildKey;
48
+ }
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RedisModel = void 0;
7
+ const utils_1 = require("../../helpers/utils");
8
+ const Logger_1 = require("../helpers/Logger");
9
+ const ioc_1 = require("../ioc");
10
+ const errors_1 = require("@golemio/errors");
11
+ const redis_rstream_1 = __importDefault(require("redis-rstream"));
12
+ const redis_wstream_1 = __importDefault(require("redis-wstream"));
13
+ /**
14
+ * Input gateway Redis model. Mirrors the integration-engine RedisModel but resolves its connection
15
+ * from the input-gateway container, where the (env-gated) RedisConnector is registered.
16
+ */
17
+ class RedisModel {
18
+ constructor(name, settings, validator = null) {
19
+ /**
20
+ * Saves data to Redis. The key expires after ttlSeconds seconds, or at the absolute Unix
21
+ * expireTimestamp (milliseconds) when ttlSeconds is not given.
22
+ */
23
+ this.set = async (key, data, ttlSeconds, expireTimestamp) => {
24
+ await this.validate(data);
25
+ if (Array.isArray(data)) {
26
+ // start the redis transaction
27
+ const multi = this.connection.multi();
28
+ for (const dataItem of data) {
29
+ const redisKey = `${this.prefix}:${this.buildKey(key, dataItem)}`;
30
+ const encodedData = this.encodeDataBeforeSave(dataItem);
31
+ if (ttlSeconds) {
32
+ multi.setex(redisKey, ttlSeconds, encodedData);
33
+ }
34
+ else if (expireTimestamp) {
35
+ // PXAT timestamp in milliseconds
36
+ multi.set(redisKey, encodedData, "PXAT", expireTimestamp);
37
+ }
38
+ else {
39
+ multi.set(redisKey, encodedData);
40
+ }
41
+ }
42
+ // redis transaction commit
43
+ return multi.exec();
44
+ }
45
+ else {
46
+ const redisKey = `${this.prefix}:${this.buildKey(key, data)}`;
47
+ const encodedData = this.encodeDataBeforeSave(data);
48
+ if (ttlSeconds) {
49
+ return this.connection.setex(redisKey, ttlSeconds, encodedData);
50
+ }
51
+ else if (expireTimestamp) {
52
+ // PXAT timestamp in milliseconds
53
+ return this.connection.set(redisKey, encodedData, "PXAT", expireTimestamp);
54
+ }
55
+ else {
56
+ return this.connection.set(redisKey, encodedData);
57
+ }
58
+ }
59
+ };
60
+ this.hset = async (key, data) => {
61
+ await this.validate(data);
62
+ if (Array.isArray(data)) {
63
+ // start the redis transaction
64
+ const multi = this.connection.multi();
65
+ for (const dataItem of data) {
66
+ const k = this.buildKey(key, dataItem);
67
+ // encoding and saving the data as redis hash
68
+ multi.hset(this.prefix, k, this.encodeDataBeforeSave(dataItem));
69
+ }
70
+ // redis transaction commit
71
+ return multi.exec();
72
+ }
73
+ else {
74
+ const k = this.buildKey(key, data);
75
+ // encoding and saving the data as redis hash
76
+ return this.connection.hset(this.prefix, k, this.encodeDataBeforeSave(data));
77
+ }
78
+ };
79
+ this.get = async (key) => {
80
+ // getting and decoding the data from redis hash
81
+ return this.decodeDataAfterGet(await this.connection.get(`${this.prefix}:${key}`));
82
+ };
83
+ this.hget = async (key) => {
84
+ // getting and decoding the data from redis hash
85
+ return this.decodeDataAfterGet(await this.connection.hget(this.prefix, key));
86
+ };
87
+ this.mget = async (keys) => {
88
+ if (keys.length === 0) {
89
+ return [];
90
+ }
91
+ const values = await this.connection.mget(...keys.map((key) => `${this.prefix}:${key}`));
92
+ return values.map((value) => this.decodeDataAfterGet(value));
93
+ };
94
+ /**
95
+ * Stream data into a key from a file read stream via SET/APPEND.
96
+ */
97
+ this.pipeStream = async (key, readStream) => {
98
+ const redisWriteStream = new redis_wstream_1.default(this.connection, `${this.prefix}:${key}`);
99
+ return new Promise((resolve, reject) => {
100
+ redisWriteStream.on("finish", () => {
101
+ resolve();
102
+ });
103
+ redisWriteStream.on("error", (err) => {
104
+ reject(err);
105
+ });
106
+ readStream.pipe(redisWriteStream);
107
+ });
108
+ };
109
+ /**
110
+ * Get a readable stream of data from a key via GETRANGE.
111
+ */
112
+ this.getReadableStream = (key) => {
113
+ return new redis_rstream_1.default(this.connection, `${this.prefix}:${key}`);
114
+ };
115
+ this.delete = async (key) => {
116
+ if (key) {
117
+ return this.connection.del(`${this.prefix}:${key}`);
118
+ }
119
+ return this.connection.del(`${this.prefix}`);
120
+ };
121
+ this.truncate = (namespace = true) => {
122
+ const prefix = `${this.prefix}${namespace ? ":" : ""}*`;
123
+ const stream = this.connection.scanStream({ match: prefix, count: 500 });
124
+ const pipeline = this.connection.pipeline();
125
+ return new Promise((resolve, reject) => {
126
+ stream.on("data", (keys) => {
127
+ if (keys.length > 0) {
128
+ pipeline.unlink(...keys);
129
+ }
130
+ });
131
+ stream.on("error", (err) => {
132
+ Logger_1.log.error(err);
133
+ return reject(err);
134
+ });
135
+ stream.on("end", async () => {
136
+ try {
137
+ const result = await pipeline.exec();
138
+ const deleteCount = result?.reduce((acc, el) => acc + el[1], 0) ?? 0;
139
+ Logger_1.log.info(`Truncate complete for ${prefix}, deleted ${deleteCount} in (${result?.length ?? 0}) batches`);
140
+ resolve(deleteCount);
141
+ }
142
+ catch (err) {
143
+ Logger_1.log.error(err);
144
+ return reject(err);
145
+ }
146
+ });
147
+ });
148
+ };
149
+ this.flush = () => {
150
+ return this.connection.flushdb();
151
+ };
152
+ this.validate = async (data) => {
153
+ // data validation
154
+ if (this.validator) {
155
+ try {
156
+ await this.validator.Validate(data);
157
+ }
158
+ catch (err) {
159
+ throw new errors_1.GeneralError("Error while validating data.", this.name, err);
160
+ }
161
+ }
162
+ else if (this.isKeyConstructedFromData) {
163
+ Logger_1.log.warn(this.name + ": Model validator is not set.");
164
+ }
165
+ };
166
+ this.buildKey = (key, data) => {
167
+ // checking if the value is type of object
168
+ if (this.isKeyConstructedFromData && typeof data !== "object") {
169
+ throw new errors_1.GeneralError("The data must be a type of object.", this.constructor.name);
170
+ }
171
+ return this.isKeyConstructedFromData ? (0, utils_1.getSubProperty)(key, data) : key;
172
+ };
173
+ this.name = name;
174
+ this.connection = ioc_1.InputGatewayContainer.resolve(ioc_1.ContainerToken.RedisConnector).getConnection();
175
+ this.isKeyConstructedFromData = settings.isKeyConstructedFromData;
176
+ this.prefix = settings.prefix;
177
+ this.validator = validator;
178
+ this.encodeDataBeforeSave = settings.encodeDataBeforeSave ? settings.encodeDataBeforeSave : (raw) => raw;
179
+ this.decodeDataAfterGet = settings.decodeDataAfterGet ? settings.decodeDataAfterGet : (raw) => raw;
180
+ if (this.validator?.setLogger) {
181
+ this.validator.setLogger(Logger_1.log);
182
+ }
183
+ }
184
+ }
185
+ exports.RedisModel = RedisModel;
186
+ //# sourceMappingURL=RedisModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedisModel.js","sourceRoot":"","sources":["../../../src/input-gateway/models/RedisModel.ts"],"names":[],"mappings":";;;;;;AACA,+CAAgD;AAChD,8CAAyC;AACzC,gCAAgE;AAEhE,4CAA+C;AAI/C,kEAAyC;AACzC,kEAAyC;AAGzC;;;GAGG;AACH,MAAa,UAAU;IAgBnB,YAAY,IAAY,EAAE,QAAwB,EAAE,YAA+B,IAAI;QAevF;;;WAGG;QACI,QAAG,GAAG,KAAK,EAAE,GAAW,EAAE,IAAS,EAAE,UAAmB,EAAE,eAAwB,EAAgB,EAAE;YACvG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE1B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,8BAA8B;gBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBAEtC,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE,CAAC;oBAC1B,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;oBAClE,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;oBAExD,IAAI,UAAU,EAAE,CAAC;wBACb,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;oBACnD,CAAC;yBAAM,IAAI,eAAe,EAAE,CAAC;wBACzB,iCAAiC;wBACjC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;oBAC9D,CAAC;yBAAM,CAAC;wBACJ,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;oBACrC,CAAC;gBACL,CAAC;gBAED,2BAA2B;gBAC3B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACJ,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAEpD,IAAI,UAAU,EAAE,CAAC;oBACb,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;gBACpE,CAAC;qBAAM,IAAI,eAAe,EAAE,CAAC;oBACzB,iCAAiC;oBACjC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;gBAC/E,CAAC;qBAAM,CAAC;oBACJ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;gBACtD,CAAC;YACL,CAAC;QACL,CAAC,CAAC;QAEK,SAAI,GAAG,KAAK,EAAE,GAAW,EAAE,IAAS,EAAgB,EAAE;YACzD,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE1B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,8BAA8B;gBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBAEtC,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE,CAAC;oBAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;oBACvC,6CAA6C;oBAC7C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACpE,CAAC;gBAED,2BAA2B;gBAC3B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACnC,6CAA6C;gBAC7C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;YACjF,CAAC;QACL,CAAC,CAAC;QAEK,QAAG,GAAG,KAAK,EAAE,GAAW,EAAgB,EAAE;YAC7C,gDAAgD;YAChD,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;QACvF,CAAC,CAAC;QAEK,SAAI,GAAG,KAAK,EAAE,GAAW,EAAgB,EAAE;YAC9C,gDAAgD;YAChD,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;QACjF,CAAC,CAAC;QAEK,SAAI,GAAG,KAAK,EAAuB,IAAc,EAA4B,EAAE;YAClF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpB,OAAO,EAAE,CAAC;YACd,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;YACzF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC;QAEF;;WAEG;QACI,eAAU,GAAG,KAAK,EAAE,GAAW,EAAE,UAAsB,EAAiB,EAAE;YAC7E,MAAM,gBAAgB,GAAa,IAAI,uBAAY,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;YAE9F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACnC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;oBAC/B,OAAO,EAAE,CAAC;gBACd,CAAC,CAAC,CAAC;gBAEH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;oBACjC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC,CAAC,CAAC;gBAEH,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEF;;WAEG;QACI,sBAAiB,GAAG,CAAC,GAAW,EAAY,EAAE;YACjD,OAAO,IAAI,uBAAY,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;QACtE,CAAC,CAAC;QAEK,WAAM,GAAG,KAAK,EAAE,GAAY,EAAgB,EAAE;YACjD,IAAI,GAAG,EAAE,CAAC;gBACN,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC;QAEK,aAAQ,GAAG,CAAC,SAAS,GAAG,IAAI,EAAmB,EAAE;YACpD,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;YACxD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAE5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACnC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAc,EAAE,EAAE;oBACjC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAClB,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC7B,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;oBACvB,YAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACf,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;oBACxB,IAAI,CAAC;wBACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBACrC,MAAM,WAAW,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,GAAW,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAI,EAAE,CAAC,CAAC,CAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;wBACzF,YAAG,CAAC,IAAI,CAAC,yBAAyB,MAAM,aAAa,WAAW,QAAQ,MAAM,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC;wBACxG,OAAO,CAAC,WAAW,CAAC,CAAC;oBACzB,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACX,YAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACf,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;oBACvB,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEK,UAAK,GAAG,GAAkB,EAAE;YAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACrC,CAAC,CAAC;QAEM,aAAQ,GAAG,KAAK,EAAE,IAAS,EAAE,EAAE;YACnC,kBAAkB;YAClB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACD,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACxC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACX,MAAM,IAAI,qBAAY,CAAC,8BAA8B,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC3E,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBACvC,YAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC,CAAC;YAC1D,CAAC;QACL,CAAC,CAAC;QAEM,aAAQ,GAAG,CAAC,GAAW,EAAE,IAAS,EAAE,EAAE;YAC1C,0CAA0C;YAC1C,IAAI,IAAI,CAAC,wBAAwB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5D,MAAM,IAAI,qBAAY,CAAC,oCAAoC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACxF,CAAC;YACD,OAAO,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAA,sBAAc,EAAS,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACnF,CAAC,CAAC;QAxLE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,2BAAqB,CAAC,OAAO,CAAkB,oBAAc,CAAC,cAAc,CAAC,CAAC,aAAa,EAAE,CAAC;QAChH,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,wBAAwB,CAAC;QAClE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;QACzG,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;QAEnG,IAAI,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,YAAG,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;CA6KJ;AA1MD,gCA0MC"}
@@ -0,0 +1,2 @@
1
+ export * from "./IModel";
2
+ export * from "./RedisModel";
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./IModel"), exports);
18
+ __exportStar(require("./RedisModel"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/input-gateway/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,+CAA6B"}
@@ -13,6 +13,7 @@ export * from "./datatype-strategy/XMLDataTypeStrategy";
13
13
  export * from "./protocol-strategy/FTPProtocolStrategy";
14
14
  export * from "./protocol-strategy/HTTPRequestProtocolStrategyStreamed";
15
15
  export * from "./protocol-strategy/GoogleCloudStorageProtocolStrategy";
16
+ export * from "./protocol-strategy/HTTPFetchProtocolStrategy";
16
17
  export * from "./protocol-strategy/PaginatedHTTPProtocolStrategy";
17
18
  export * from "./protocol-strategy/IProtocolStrategy";
18
19
  export * from "./protocol-strategy/IStreamingProtocolStrategy";
@@ -30,6 +30,7 @@ __exportStar(require("./datatype-strategy/XMLDataTypeStrategy"), exports);
30
30
  __exportStar(require("./protocol-strategy/FTPProtocolStrategy"), exports);
31
31
  __exportStar(require("./protocol-strategy/HTTPRequestProtocolStrategyStreamed"), exports);
32
32
  __exportStar(require("./protocol-strategy/GoogleCloudStorageProtocolStrategy"), exports);
33
+ __exportStar(require("./protocol-strategy/HTTPFetchProtocolStrategy"), exports);
33
34
  __exportStar(require("./protocol-strategy/PaginatedHTTPProtocolStrategy"), exports);
34
35
  __exportStar(require("./protocol-strategy/IProtocolStrategy"), exports);
35
36
  __exportStar(require("./protocol-strategy/IStreamingProtocolStrategy"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integration-engine/datasources/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6BAA6B;AAC7B,kDAAgC;AAChC,+CAA6B;AAC7B,qDAAmC;AACnC,4DAA0C;AAC1C,uDAAqC;AACrC,+DAA6C;AAC7C,gDAA8B;AAC9B,0EAAwD;AACxD,wEAAsD;AACtD,2EAAyD;AACzD,4EAA0D;AAC1D,0EAAwD;AACxD,0EAAwD;AACxD,0FAAwE;AACxE,yFAAuE;AACvE,oFAAkE;AAClE,wEAAsD;AACtD,iFAA+D;AAC/D,+EAA6D;AAC7D,uFAAqE;AACrE,uEAAqD;AACrD,2EAAyD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integration-engine/datasources/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6BAA6B;AAC7B,kDAAgC;AAChC,+CAA6B;AAC7B,qDAAmC;AACnC,4DAA0C;AAC1C,uDAAqC;AACrC,+DAA6C;AAC7C,gDAA8B;AAC9B,0EAAwD;AACxD,wEAAsD;AACtD,2EAAyD;AACzD,4EAA0D;AAC1D,0EAAwD;AACxD,0EAAwD;AACxD,0FAAwE;AACxE,yFAAuE;AACvE,gFAA8D;AAC9D,oFAAkE;AAClE,wEAAsD;AACtD,iFAA+D;AAC/D,+EAA6D;AAC7D,uFAAqE;AACrE,uEAAqD;AACrD,2EAAyD"}
@@ -5,6 +5,7 @@ export declare abstract class AbstractTaskWithoutValidation<TRawData extends obj
5
5
  queueTtl?: number;
6
6
  queuePrefix: string;
7
7
  queueType: "classic" | "quorum";
8
+ queueConsumerTimeout?: number;
8
9
  constructor(queuePrefix: string);
9
10
  get queueKey(): string;
10
11
  consume(msg: Message | null): Promise<void>;
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AbstractTaskWithoutValidation = void 0;
4
4
  const AbortableTask_1 = require("./helpers/AbortableTask");
5
+ // Abort the in-process task slightly before the broker's x-consumer-timeout fires, so the task ends
6
+ // with a graceful AbortError instead of RabbitMQ force-closing the channel.
7
+ const CONSUMER_TIMEOUT_ABORT_MARGIN_MS = 10_000; // 10 seconds
5
8
  class AbstractTaskWithoutValidation {
6
9
  constructor(queuePrefix) {
7
10
  this.queueType = "quorum";
@@ -11,7 +14,12 @@ class AbstractTaskWithoutValidation {
11
14
  return `${this.queuePrefix}.${this.queueName}`;
12
15
  }
13
16
  async consume(msg) {
14
- return AbortableTask_1.AbortableTask.from(this.validateAndExecute(msg), this.queueKey);
17
+ const abortTimeout = this.queueConsumerTimeout !== undefined
18
+ ? this.queueConsumerTimeout > CONSUMER_TIMEOUT_ABORT_MARGIN_MS
19
+ ? this.queueConsumerTimeout - CONSUMER_TIMEOUT_ABORT_MARGIN_MS
20
+ : this.queueConsumerTimeout
21
+ : undefined;
22
+ return AbortableTask_1.AbortableTask.from(this.validateAndExecute(msg), this.queueKey, abortTimeout);
15
23
  }
16
24
  }
17
25
  exports.AbstractTaskWithoutValidation = AbstractTaskWithoutValidation;
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractTaskWithoutValidation.js","sourceRoot":"","sources":["../../../src/integration-engine/workers/AbstractTaskWithoutValidation.ts"],"names":[],"mappings":";;;AAEA,2DAAkE;AAElE,MAAsB,6BAA6B;IAM/C,YAAY,WAAmB;QAFxB,cAAS,GAAyB,QAAQ,CAAC;QAG9C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;IACnD,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,GAAmB;QACpC,OAAO,6BAAa,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3E,CAAC;CAMJ;AAtBD,sEAsBC"}
1
+ {"version":3,"file":"AbstractTaskWithoutValidation.js","sourceRoot":"","sources":["../../../src/integration-engine/workers/AbstractTaskWithoutValidation.ts"],"names":[],"mappings":";;;AAEA,2DAAkE;AAElE,oGAAoG;AACpG,4EAA4E;AAC5E,MAAM,gCAAgC,GAAG,MAAM,CAAC,CAAC,aAAa;AAE9D,MAAsB,6BAA6B;IAO/C,YAAY,WAAmB;QAHxB,cAAS,GAAyB,QAAQ,CAAC;QAI9C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;IACnD,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,GAAmB;QACpC,MAAM,YAAY,GACd,IAAI,CAAC,oBAAoB,KAAK,SAAS;YACnC,CAAC,CAAC,IAAI,CAAC,oBAAoB,GAAG,gCAAgC;gBAC1D,CAAC,CAAC,IAAI,CAAC,oBAAoB,GAAG,gCAAgC;gBAC9D,CAAC,CAAC,IAAI,CAAC,oBAAoB;YAC/B,CAAC,CAAC,SAAS,CAAC;QAEpB,OAAO,6BAAa,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACzF,CAAC;CAMJ;AA9BD,sEA8BC"}
@@ -10,4 +10,5 @@ export declare abstract class AbstractWorker {
10
10
  getQueueDefinition(): IQueueDefinition;
11
11
  getQueuePrefix(): string;
12
12
  private getQueueTask;
13
+ private warnIfConsumerTimeoutOutOfBounds;
13
14
  }
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AbstractWorker = void 0;
4
4
  const config_1 = require("../config");
5
+ const helpers_1 = require("../helpers");
6
+ const RECOMMENDED_MIN_CONSUMER_TIMEOUT_MS = 60_000; // 1 minute
7
+ const RECOMMENDED_MAX_CONSUMER_TIMEOUT_MS = 7_200_000; // 2 hours
5
8
  class AbstractWorker {
6
9
  constructor() {
7
10
  this.queues = [];
@@ -23,17 +26,33 @@ class AbstractWorker {
23
26
  return config_1.config.RABBIT_EXCHANGE_NAME + "." + this.name.toLowerCase();
24
27
  }
25
28
  getQueueTask(task) {
29
+ const queueArguments = { "x-queue-type": task.queueType };
30
+ // Only declare x-consumer-timeout when set, so untimed queues keep an undefined-free argument table.
31
+ if (task.queueConsumerTimeout !== undefined) {
32
+ this.warnIfConsumerTimeoutOutOfBounds(task.queueName, task.queueConsumerTimeout, task.queueTtl);
33
+ queueArguments["x-consumer-timeout"] = task.queueConsumerTimeout;
34
+ }
26
35
  return {
27
36
  name: task.queueName,
28
37
  options: {
29
38
  deadLetterExchange: config_1.config.RABBIT_EXCHANGE_NAME,
30
39
  deadLetterRoutingKey: "dead",
31
40
  messageTtl: task.queueTtl,
32
- arguments: { "x-queue-type": task.queueType },
41
+ arguments: queueArguments,
33
42
  },
34
43
  consume: task.consume.bind(task),
35
44
  };
36
45
  }
46
+ warnIfConsumerTimeoutOutOfBounds(queueName, consumerTimeout, queueTtl) {
47
+ if (consumerTimeout < RECOMMENDED_MIN_CONSUMER_TIMEOUT_MS || consumerTimeout > RECOMMENDED_MAX_CONSUMER_TIMEOUT_MS) {
48
+ helpers_1.log.warn(`Queue ${queueName}: queueConsumerTimeout ${consumerTimeout} ms is outside the recommended range ` +
49
+ `[${RECOMMENDED_MIN_CONSUMER_TIMEOUT_MS}, ${RECOMMENDED_MAX_CONSUMER_TIMEOUT_MS}] ms.`);
50
+ }
51
+ if (queueTtl !== undefined && consumerTimeout > queueTtl) {
52
+ helpers_1.log.warn(`Queue ${queueName}: queueConsumerTimeout ${consumerTimeout} ms exceeds the queue message TTL ` +
53
+ `${queueTtl} ms; the message may expire before the consumer timeout applies.`);
54
+ }
55
+ }
37
56
  }
38
57
  exports.AbstractWorker = AbstractWorker;
39
58
  //# sourceMappingURL=AbstractWorker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractWorker.js","sourceRoot":"","sources":["../../../src/integration-engine/workers/AbstractWorker.ts"],"names":[],"mappings":";;;AAAA,sCAAoC;AAIpC,MAAsB,cAAc;IAApC;QAEY,WAAM,GAAiB,EAAE,CAAC;IAiCtC,CAAC;IA/BU,YAAY,CAAC,IAAW;QAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACI,kBAAkB;QACrB,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;YAClC,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAC;IACN,CAAC;IAEM,cAAc;QACjB,OAAO,eAAM,CAAC,oBAAoB,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACvE,CAAC;IAEO,YAAY,CAAC,IAAW;QAC5B,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,SAAS;YACpB,OAAO,EAAE;gBACL,kBAAkB,EAAE,eAAM,CAAC,oBAAoB;gBAC/C,oBAAoB,EAAE,MAAM;gBAC5B,UAAU,EAAE,IAAI,CAAC,QAAQ;gBACzB,SAAS,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE;aAChD;YACD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;SACnC,CAAC;IACN,CAAC;CACJ;AAnCD,wCAmCC"}
1
+ {"version":3,"file":"AbstractWorker.js","sourceRoot":"","sources":["../../../src/integration-engine/workers/AbstractWorker.ts"],"names":[],"mappings":";;;AAAA,sCAAoC;AACpC,wCAAkC;AAIlC,MAAM,mCAAmC,GAAG,MAAM,CAAC,CAAC,WAAW;AAC/D,MAAM,mCAAmC,GAAG,SAAS,CAAC,CAAC,UAAU;AAEjE,MAAsB,cAAc;IAApC;QAEY,WAAM,GAAiB,EAAE,CAAC;IAyDtC,CAAC;IAvDU,YAAY,CAAC,IAAW;QAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACI,kBAAkB;QACrB,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;YAClC,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAC;IACN,CAAC;IAEM,cAAc;QACjB,OAAO,eAAM,CAAC,oBAAoB,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACvE,CAAC;IAEO,YAAY,CAAC,IAAW;QAC5B,MAAM,cAAc,GAA4B,EAAE,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QAEnF,qGAAqG;QACrG,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChG,cAAc,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACrE,CAAC;QAED,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,SAAS;YACpB,OAAO,EAAE;gBACL,kBAAkB,EAAE,eAAM,CAAC,oBAAoB;gBAC/C,oBAAoB,EAAE,MAAM;gBAC5B,UAAU,EAAE,IAAI,CAAC,QAAQ;gBACzB,SAAS,EAAE,cAAc;aAC5B;YACD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;SACnC,CAAC;IACN,CAAC;IAEO,gCAAgC,CAAC,SAAiB,EAAE,eAAuB,EAAE,QAAiB;QAClG,IAAI,eAAe,GAAG,mCAAmC,IAAI,eAAe,GAAG,mCAAmC,EAAE,CAAC;YACjH,aAAG,CAAC,IAAI,CACJ,SAAS,SAAS,0BAA0B,eAAe,uCAAuC;gBAC9F,IAAI,mCAAmC,KAAK,mCAAmC,OAAO,CAC7F,CAAC;QACN,CAAC;QAED,IAAI,QAAQ,KAAK,SAAS,IAAI,eAAe,GAAG,QAAQ,EAAE,CAAC;YACvD,aAAG,CAAC,IAAI,CACJ,SAAS,SAAS,0BAA0B,eAAe,oCAAoC;gBAC3F,GAAG,QAAQ,kEAAkE,CACpF,CAAC;QACN,CAAC;IACL,CAAC;CACJ;AA3DD,wCA2DC"}
@@ -2,7 +2,7 @@ interface AbortableExecutorFunction<T> {
2
2
  (resolve: (value: PromiseLike<T> | T) => void, reject: (reason: Error) => void, abortSignal: AbortSignal): void;
3
3
  }
4
4
  export declare class AbortableTask<T> extends Promise<T> {
5
- constructor(executor: AbortableExecutorFunction<T>, queueName: string);
6
- static from: <T_1>(promise: Promise<T_1>, queueName: string) => Promise<T_1>;
5
+ constructor(executor: AbortableExecutorFunction<T>, queueName: string, consumerTimeout?: number);
6
+ static from: <T_1>(promise: Promise<T_1>, queueName: string, consumerTimeout?: number) => Promise<T_1>;
7
7
  }
8
8
  export {};
@@ -5,9 +5,10 @@ const errors_1 = require("@golemio/errors");
5
5
  const ioc_1 = require("../../ioc");
6
6
  const CoreToken_1 = require("../../../helpers/ioc/CoreToken");
7
7
  class AbortableTask extends Promise {
8
- constructor(executor, queueName) {
8
+ constructor(executor, queueName, consumerTimeout) {
9
9
  const simpleConfig = ioc_1.IntegrationEngineContainer.resolve(CoreToken_1.CoreToken.SimpleConfig);
10
- const abortSignal = AbortSignal.timeout(Number(simpleConfig.getValue("env.RABBIT_CONSUMER_TIMEOUT", 1740000)));
10
+ const timeout = consumerTimeout ?? Number(simpleConfig.getValue("env.RABBIT_CONSUMER_TIMEOUT", 1740000));
11
+ const abortSignal = AbortSignal.timeout(timeout);
11
12
  super((resolve, reject) => {
12
13
  abortSignal.addEventListener("abort", () => {
13
14
  reject(new errors_1.AbortError(`Task aborted due to timeout (${queueName})`));
@@ -17,12 +18,12 @@ class AbortableTask extends Promise {
17
18
  }
18
19
  }
19
20
  exports.AbortableTask = AbortableTask;
20
- AbortableTask.from = (promise, queueName) => {
21
+ AbortableTask.from = (promise, queueName, consumerTimeout) => {
21
22
  if (promise instanceof AbortableTask) {
22
23
  return promise;
23
24
  }
24
25
  return new AbortableTask((resolve, reject) => {
25
26
  promise.then(resolve).catch(reject);
26
- }, queueName);
27
+ }, queueName, consumerTimeout);
27
28
  };
28
29
  //# sourceMappingURL=AbortableTask.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbortableTask.js","sourceRoot":"","sources":["../../../../src/integration-engine/workers/helpers/AbortableTask.ts"],"names":[],"mappings":";;;AAAA,4CAA6C;AAC7C,mCAAqD;AAErD,8DAAmD;AAMnD,MAAa,aAAiB,SAAQ,OAAU;IAC5C,YAAY,QAAsC,EAAE,SAAiB;QACjE,MAAM,YAAY,GAAG,gCAA0B,CAAC,OAAO,CAAgB,qBAAS,CAAC,YAAY,CAAC,CAAC;QAC/F,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAE/G,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAQ,EAAE;YAC5B,WAAW,CAAC,gBAAgB,CACxB,OAAO,EACP,GAAG,EAAE;gBACD,MAAM,CAAC,IAAI,mBAAU,CAAC,gCAAgC,SAAS,GAAG,CAAC,CAAC,CAAC;YACzE,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACjB,CAAC;YAEF,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC;;AAhBL,sCA2BC;AATU,kBAAI,GAAG,CAAI,OAAmB,EAAE,SAAiB,EAAc,EAAE;IACpE,IAAI,OAAO,YAAY,aAAa,EAAE,CAAC;QACnC,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,aAAa,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC5C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC,EAAE,SAAS,CAAC,CAAC;AAClB,CAAC,CAAC"}
1
+ {"version":3,"file":"AbortableTask.js","sourceRoot":"","sources":["../../../../src/integration-engine/workers/helpers/AbortableTask.ts"],"names":[],"mappings":";;;AAAA,4CAA6C;AAC7C,mCAAqD;AAErD,8DAAmD;AAMnD,MAAa,aAAiB,SAAQ,OAAU;IAC5C,YAAY,QAAsC,EAAE,SAAiB,EAAE,eAAwB;QAC3F,MAAM,YAAY,GAAG,gCAA0B,CAAC,OAAO,CAAgB,qBAAS,CAAC,YAAY,CAAC,CAAC;QAC/F,MAAM,OAAO,GAAG,eAAe,IAAI,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC,CAAC;QACzG,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEjD,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAQ,EAAE;YAC5B,WAAW,CAAC,gBAAgB,CACxB,OAAO,EACP,GAAG,EAAE;gBACD,MAAM,CAAC,IAAI,mBAAU,CAAC,gCAAgC,SAAS,GAAG,CAAC,CAAC,CAAC;YACzE,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACjB,CAAC;YAEF,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC;;AAjBL,sCAgCC;AAbU,kBAAI,GAAG,CAAI,OAAmB,EAAE,SAAiB,EAAE,eAAwB,EAAc,EAAE;IAC9F,IAAI,OAAO,YAAY,aAAa,EAAE,CAAC;QACnC,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,aAAa,CACpB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAChB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC,EACD,SAAS,EACT,eAAe,CAClB,CAAC;AACN,CAAC,CAAC"}
@@ -4,5 +4,6 @@ export interface ITask {
4
4
  queueTtl?: number;
5
5
  queuePrefix: string;
6
6
  queueType: "classic" | "quorum";
7
+ queueConsumerTimeout?: number;
7
8
  consume(msg: Message | null): any;
8
9
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@golemio/core",
3
- "version": "3.2.2-dev.2622707631",
3
+ "version": "3.3.0-dev.2636931178",
4
4
  "description": "Golemio Core Module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",