mutualbankutils 1.0.0
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/dist/domain/BaseDomain.d.ts +8 -0
- package/dist/domain/BaseDomain.js +21 -0
- package/dist/domain/RoutingAttempts.d.ts +27 -0
- package/dist/domain/RoutingAttempts.js +53 -0
- package/dist/domain/Transaction.d.ts +28 -0
- package/dist/domain/Transaction.js +53 -0
- package/dist/factory/QueueFactory.d.ts +6 -0
- package/dist/factory/QueueFactory.js +39 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +36 -0
- package/dist/interfaces/IQueueAdapter.d.ts +29 -0
- package/dist/interfaces/IQueueAdapter.js +3 -0
- package/dist/interfaces/IQueueConfig.d.ts +17 -0
- package/dist/interfaces/IQueueConfig.js +3 -0
- package/dist/queue/adapters/RabbitMQAdapter.d.ts +21 -0
- package/dist/queue/adapters/RabbitMQAdapter.js +115 -0
- package/dist/queue/adapters/SQSAdapter.d.ts +25 -0
- package/dist/queue/adapters/SQSAdapter.js +187 -0
- package/dist/utils/BaseError.d.ts +4 -0
- package/dist/utils/BaseError.js +13 -0
- package/dist/utils/NotFound.d.ts +4 -0
- package/dist/utils/NotFound.js +13 -0
- package/dist/utils/NotFoundKey.d.ts +4 -0
- package/dist/utils/NotFoundKey.js +13 -0
- package/dist/utils/NotSupport.d.ts +4 -0
- package/dist/utils/NotSupport.js +13 -0
- package/dist/utils/NotSupported.d.ts +4 -0
- package/dist/utils/NotSupported.js +13 -0
- package/dist/utils/UnauthorizedAccess.d.ts +4 -0
- package/dist/utils/UnauthorizedAccess.js +13 -0
- package/package.json +31 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseDomain = void 0;
|
|
4
|
+
class BaseDomain {
|
|
5
|
+
constructor(props) {
|
|
6
|
+
this.props = props;
|
|
7
|
+
}
|
|
8
|
+
get(key) {
|
|
9
|
+
if (key !== undefined)
|
|
10
|
+
return this.props[key];
|
|
11
|
+
return this.props;
|
|
12
|
+
}
|
|
13
|
+
set(key, value) {
|
|
14
|
+
this.props[key] = value;
|
|
15
|
+
}
|
|
16
|
+
toJSON() {
|
|
17
|
+
return Object.freeze({ ...this.props });
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.BaseDomain = BaseDomain;
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZURvbWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NoYXJlZC9kb21haW4vQmFzZURvbWFpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFzQixVQUFVO0lBRzlCLFlBQVksS0FBUTtRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBTUQsR0FBRyxDQUFvQixHQUFPO1FBQzVCLElBQUksR0FBRyxLQUFLLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxHQUFHLENBQW9CLEdBQU0sRUFBRSxLQUFXO1FBQ3ZDLElBQUksQ0FBQyxLQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ0Y7QUF2QkQsZ0NBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VEb21haW48VD4ge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IFQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBUKSB7XHJcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XHJcbiAgfVxyXG5cclxuICBnZXQoKTogVDtcclxuXHJcbiAgZ2V0PEsgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IEspOiBUW0tdO1xyXG5cclxuICBnZXQ8SyBleHRlbmRzIGtleW9mIFQ+KGtleT86IEspOiBUIHwgVFtLXSB7XHJcbiAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLnByb3BzW2tleV07XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcztcclxuICB9XHJcblxyXG4gIHNldDxLIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBLLCB2YWx1ZTogVFtLXSk6IHZvaWQge1xyXG4gICAgKHRoaXMucHJvcHMgYXMgYW55KVtrZXldID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICB0b0pTT04oKTogVCB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLnRoaXMucHJvcHMgfSk7XHJcbiAgfVxyXG59Il19
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { BaseDomain } from './BaseDomain';
|
|
3
|
+
export declare enum RoutingAttemptStatus {
|
|
4
|
+
PENDING = "pending",
|
|
5
|
+
SUCCESS = "success",
|
|
6
|
+
FAILED = "failed"
|
|
7
|
+
}
|
|
8
|
+
export declare const routingAttemptsSchema: z.ZodObject<{
|
|
9
|
+
id: z.ZodOptional<z.ZodString>;
|
|
10
|
+
transactionId: z.ZodString;
|
|
11
|
+
providerCode: z.ZodString;
|
|
12
|
+
requestPayload: z.ZodOptional<z.ZodAny>;
|
|
13
|
+
responsePayload: z.ZodOptional<z.ZodAny>;
|
|
14
|
+
status: z.ZodEnum<typeof RoutingAttemptStatus>;
|
|
15
|
+
createdAt: z.ZodDefault<z.ZodOptional<z.ZodDate>>;
|
|
16
|
+
updatedAt: z.ZodDefault<z.ZodOptional<z.ZodDate>>;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
export type RoutingAttemptsProps = z.infer<typeof routingAttemptsSchema>;
|
|
19
|
+
export declare class RoutingAttempts extends BaseDomain<RoutingAttemptsProps> {
|
|
20
|
+
constructor(props: RoutingAttemptsProps);
|
|
21
|
+
static create(props: RoutingAttemptsProps): RoutingAttempts;
|
|
22
|
+
static restore(props: RoutingAttemptsProps): RoutingAttempts;
|
|
23
|
+
success(): void;
|
|
24
|
+
failed(): void;
|
|
25
|
+
setRequestPayload(payload: any): void;
|
|
26
|
+
setResponsePayload(payload: any): void;
|
|
27
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RoutingAttempts = exports.routingAttemptsSchema = exports.RoutingAttemptStatus = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const BaseDomain_1 = require("./BaseDomain");
|
|
6
|
+
const crypto_1 = require("crypto");
|
|
7
|
+
var RoutingAttemptStatus;
|
|
8
|
+
(function (RoutingAttemptStatus) {
|
|
9
|
+
RoutingAttemptStatus["PENDING"] = "pending";
|
|
10
|
+
RoutingAttemptStatus["SUCCESS"] = "success";
|
|
11
|
+
RoutingAttemptStatus["FAILED"] = "failed";
|
|
12
|
+
})(RoutingAttemptStatus || (exports.RoutingAttemptStatus = RoutingAttemptStatus = {}));
|
|
13
|
+
exports.routingAttemptsSchema = zod_1.z.object({
|
|
14
|
+
id: zod_1.z.string().optional(),
|
|
15
|
+
transactionId: zod_1.z.string(),
|
|
16
|
+
providerCode: zod_1.z.string(),
|
|
17
|
+
requestPayload: zod_1.z.any().optional(),
|
|
18
|
+
responsePayload: zod_1.z.any().optional(),
|
|
19
|
+
status: zod_1.z.nativeEnum(RoutingAttemptStatus),
|
|
20
|
+
createdAt: zod_1.z.date().optional().default(new Date()),
|
|
21
|
+
updatedAt: zod_1.z.date().optional().default(new Date()),
|
|
22
|
+
});
|
|
23
|
+
class RoutingAttempts extends BaseDomain_1.BaseDomain {
|
|
24
|
+
constructor(props) {
|
|
25
|
+
super(props);
|
|
26
|
+
}
|
|
27
|
+
static create(props) {
|
|
28
|
+
const id = (0, crypto_1.randomUUID)();
|
|
29
|
+
return new RoutingAttempts({
|
|
30
|
+
id,
|
|
31
|
+
...props,
|
|
32
|
+
createdAt: new Date(),
|
|
33
|
+
updatedAt: new Date(),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
static restore(props) {
|
|
37
|
+
return new RoutingAttempts(props);
|
|
38
|
+
}
|
|
39
|
+
success() {
|
|
40
|
+
this.set("status", RoutingAttemptStatus.SUCCESS);
|
|
41
|
+
}
|
|
42
|
+
failed() {
|
|
43
|
+
this.set("status", RoutingAttemptStatus.FAILED);
|
|
44
|
+
}
|
|
45
|
+
setRequestPayload(payload) {
|
|
46
|
+
this.set("requestPayload", JSON.stringify(payload));
|
|
47
|
+
}
|
|
48
|
+
setResponsePayload(payload) {
|
|
49
|
+
this.set("responsePayload", JSON.stringify(payload));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.RoutingAttempts = RoutingAttempts;
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGluZ0F0dGVtcHRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc2hhcmVkL2RvbWFpbi9Sb3V0aW5nQXR0ZW1wdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXdCO0FBQ3hCLDZDQUEwQztBQUMxQyxtQ0FBbUM7QUFFbkMsSUFBWSxvQkFJWDtBQUpELFdBQVksb0JBQW9CO0lBQzlCLDJDQUFtQixDQUFBO0lBQ25CLDJDQUFtQixDQUFBO0lBQ25CLHlDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFKVyxvQkFBb0Isb0NBQXBCLG9CQUFvQixRQUkvQjtBQUVZLFFBQUEscUJBQXFCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM1QyxFQUFFLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN6QixhQUFhLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUN6QixZQUFZLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUN4QixjQUFjLEVBQUUsT0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxlQUFlLEVBQUUsT0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyxNQUFNLEVBQUUsT0FBQyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQztJQUMxQyxTQUFTLEVBQUUsT0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ2xELFNBQVMsRUFBRSxPQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDbkQsQ0FBQyxDQUFDO0FBSUgsTUFBYSxlQUFnQixTQUFRLHVCQUFnQztJQUNuRSxZQUFZLEtBQTJCO1FBQ3JDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQTJCO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLElBQUEsbUJBQVUsR0FBRSxDQUFDO1FBRXhCLE9BQU8sSUFBSSxlQUFlLENBQUM7WUFDekIsRUFBRTtZQUNGLEdBQUcsS0FBSztZQUNSLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNyQixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBMkI7UUFDeEMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQVk7UUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELGtCQUFrQixDQUFDLE9BQVk7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztDQUNGO0FBbkNELDBDQW1DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xyXG5pbXBvcnQgeyBCYXNlRG9tYWluIH0gZnJvbSAnLi9CYXNlRG9tYWluJztcclxuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJjcnlwdG9cIlxyXG5cclxuZXhwb3J0IGVudW0gUm91dGluZ0F0dGVtcHRTdGF0dXMge1xyXG4gIFBFTkRJTkcgPSAncGVuZGluZycsXHJcbiAgU1VDQ0VTUyA9ICdzdWNjZXNzJyxcclxuICBGQUlMRUQgPSAnZmFpbGVkJyxcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHJvdXRpbmdBdHRlbXB0c1NjaGVtYSA9IHoub2JqZWN0KHtcclxuICBpZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxyXG4gIHRyYW5zYWN0aW9uSWQ6IHouc3RyaW5nKCksXHJcbiAgcHJvdmlkZXJDb2RlOiB6LnN0cmluZygpLFxyXG4gIHJlcXVlc3RQYXlsb2FkOiB6LmFueSgpLm9wdGlvbmFsKCksXHJcbiAgcmVzcG9uc2VQYXlsb2FkOiB6LmFueSgpLm9wdGlvbmFsKCksXHJcbiAgc3RhdHVzOiB6Lm5hdGl2ZUVudW0oUm91dGluZ0F0dGVtcHRTdGF0dXMpLFxyXG4gIGNyZWF0ZWRBdDogei5kYXRlKCkub3B0aW9uYWwoKS5kZWZhdWx0KG5ldyBEYXRlKCkpLFxyXG4gIHVwZGF0ZWRBdDogei5kYXRlKCkub3B0aW9uYWwoKS5kZWZhdWx0KG5ldyBEYXRlKCkpLFxyXG59KTtcclxuXHJcbmV4cG9ydCB0eXBlIFJvdXRpbmdBdHRlbXB0c1Byb3BzID0gei5pbmZlcjx0eXBlb2Ygcm91dGluZ0F0dGVtcHRzU2NoZW1hPjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSb3V0aW5nQXR0ZW1wdHMgZXh0ZW5kcyBCYXNlRG9tYWluPFJvdXRpbmdBdHRlbXB0c1Byb3BzPiB7XHJcbiAgY29uc3RydWN0b3IocHJvcHM6IFJvdXRpbmdBdHRlbXB0c1Byb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlKHByb3BzOiBSb3V0aW5nQXR0ZW1wdHNQcm9wcyk6IFJvdXRpbmdBdHRlbXB0cyB7XHJcbiAgICBjb25zdCBpZCA9IHJhbmRvbVVVSUQoKTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFJvdXRpbmdBdHRlbXB0cyh7XHJcbiAgICAgIGlkLFxyXG4gICAgICAuLi5wcm9wcyxcclxuICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxyXG4gICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyByZXN0b3JlKHByb3BzOiBSb3V0aW5nQXR0ZW1wdHNQcm9wcyk6IFJvdXRpbmdBdHRlbXB0cyB7XHJcbiAgICByZXR1cm4gbmV3IFJvdXRpbmdBdHRlbXB0cyhwcm9wcyk7XHJcbiAgfVxyXG5cclxuICBzdWNjZXNzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXQoXCJzdGF0dXNcIiwgUm91dGluZ0F0dGVtcHRTdGF0dXMuU1VDQ0VTUyk7XHJcbiAgfVxyXG5cclxuICBmYWlsZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldChcInN0YXR1c1wiLCBSb3V0aW5nQXR0ZW1wdFN0YXR1cy5GQUlMRUQpO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVxdWVzdFBheWxvYWQocGF5bG9hZDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNldChcInJlcXVlc3RQYXlsb2FkXCIsIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcclxuICB9XHJcblxyXG4gIHNldFJlc3BvbnNlUGF5bG9hZChwYXlsb2FkOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0KFwicmVzcG9uc2VQYXlsb2FkXCIsIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcclxuICB9XHJcbn0iXX0=
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { BaseDomain } from './BaseDomain';
|
|
3
|
+
export declare enum TransactionStatus {
|
|
4
|
+
CREATED = "created",
|
|
5
|
+
PENDING = "pending",
|
|
6
|
+
PROCESSING = "processing",
|
|
7
|
+
COMPLETED = "completed",
|
|
8
|
+
FAILED = "failed",
|
|
9
|
+
CANCELLED = "cancelled",
|
|
10
|
+
REFUNDED = "refunded"
|
|
11
|
+
}
|
|
12
|
+
export declare const transactionSchema: z.ZodObject<{
|
|
13
|
+
id: z.ZodOptional<z.ZodString>;
|
|
14
|
+
amount: z.ZodNumber;
|
|
15
|
+
providerCode: z.ZodString;
|
|
16
|
+
externalId: z.ZodString;
|
|
17
|
+
status: z.ZodEnum<typeof TransactionStatus>;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
export type TransactionProps = z.infer<typeof transactionSchema>;
|
|
20
|
+
export declare class Transaction extends BaseDomain<TransactionProps> {
|
|
21
|
+
constructor(props: TransactionProps);
|
|
22
|
+
static create(props: TransactionProps): Transaction;
|
|
23
|
+
static restore(props: TransactionProps): Transaction;
|
|
24
|
+
failed(): void;
|
|
25
|
+
completed(): void;
|
|
26
|
+
cancelled(): void;
|
|
27
|
+
refunded(): void;
|
|
28
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Transaction = exports.transactionSchema = exports.TransactionStatus = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const BaseDomain_1 = require("./BaseDomain");
|
|
6
|
+
const crypto_1 = require("crypto");
|
|
7
|
+
var TransactionStatus;
|
|
8
|
+
(function (TransactionStatus) {
|
|
9
|
+
TransactionStatus["CREATED"] = "created";
|
|
10
|
+
TransactionStatus["PENDING"] = "pending";
|
|
11
|
+
TransactionStatus["PROCESSING"] = "processing";
|
|
12
|
+
TransactionStatus["COMPLETED"] = "completed";
|
|
13
|
+
TransactionStatus["FAILED"] = "failed";
|
|
14
|
+
TransactionStatus["CANCELLED"] = "cancelled";
|
|
15
|
+
TransactionStatus["REFUNDED"] = "refunded";
|
|
16
|
+
})(TransactionStatus || (exports.TransactionStatus = TransactionStatus = {}));
|
|
17
|
+
exports.transactionSchema = zod_1.z.object({
|
|
18
|
+
id: zod_1.z.string().optional(),
|
|
19
|
+
amount: zod_1.z.number(),
|
|
20
|
+
providerCode: zod_1.z.string(),
|
|
21
|
+
externalId: zod_1.z.string(),
|
|
22
|
+
status: zod_1.z.nativeEnum(TransactionStatus),
|
|
23
|
+
});
|
|
24
|
+
class Transaction extends BaseDomain_1.BaseDomain {
|
|
25
|
+
constructor(props) {
|
|
26
|
+
super(props);
|
|
27
|
+
}
|
|
28
|
+
static create(props) {
|
|
29
|
+
const id = (0, crypto_1.randomUUID)();
|
|
30
|
+
return new Transaction({
|
|
31
|
+
id,
|
|
32
|
+
...props,
|
|
33
|
+
status: TransactionStatus.CREATED,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
static restore(props) {
|
|
37
|
+
return new Transaction(props);
|
|
38
|
+
}
|
|
39
|
+
failed() {
|
|
40
|
+
this.set("status", TransactionStatus.FAILED);
|
|
41
|
+
}
|
|
42
|
+
completed() {
|
|
43
|
+
this.set("status", TransactionStatus.COMPLETED);
|
|
44
|
+
}
|
|
45
|
+
cancelled() {
|
|
46
|
+
this.set("status", TransactionStatus.CANCELLED);
|
|
47
|
+
}
|
|
48
|
+
refunded() {
|
|
49
|
+
this.set("status", TransactionStatus.REFUNDED);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.Transaction = Transaction;
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zaGFyZWQvZG9tYWluL1RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUF3QjtBQUN4Qiw2Q0FBMEM7QUFDMUMsbUNBQW1DO0FBRW5DLElBQVksaUJBUVg7QUFSRCxXQUFZLGlCQUFpQjtJQUMzQix3Q0FBbUIsQ0FBQTtJQUNuQix3Q0FBbUIsQ0FBQTtJQUNuQiw4Q0FBeUIsQ0FBQTtJQUN6Qiw0Q0FBdUIsQ0FBQTtJQUN2QixzQ0FBaUIsQ0FBQTtJQUNqQiw0Q0FBdUIsQ0FBQTtJQUN2QiwwQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBUlcsaUJBQWlCLGlDQUFqQixpQkFBaUIsUUFRNUI7QUFFWSxRQUFBLGlCQUFpQixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDeEMsRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDekIsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDbEIsWUFBWSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDeEIsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDdEIsTUFBTSxFQUFFLE9BQUMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUM7Q0FDeEMsQ0FBQyxDQUFDO0FBSUgsTUFBYSxXQUFZLFNBQVEsdUJBQTRCO0lBQzNELFlBQVksS0FBdUI7UUFDakMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBdUI7UUFDbkMsTUFBTSxFQUFFLEdBQUcsSUFBQSxtQkFBVSxHQUFFLENBQUM7UUFDeEIsT0FBTyxJQUFJLFdBQVcsQ0FBQztZQUNyQixFQUFFO1lBQ0YsR0FBRyxLQUFLO1lBQ1IsTUFBTSxFQUFFLGlCQUFpQixDQUFDLE9BQU87U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBdUI7UUFDcEMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELENBQUM7Q0FDRjtBQWpDRCxrQ0FpQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcclxuaW1wb3J0IHsgQmFzZURvbWFpbiB9IGZyb20gJy4vQmFzZURvbWFpbic7XHJcbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwiY3J5cHRvXCJcclxuXHJcbmV4cG9ydCBlbnVtIFRyYW5zYWN0aW9uU3RhdHVzIHtcclxuICBDUkVBVEVEID0gJ2NyZWF0ZWQnLFxyXG4gIFBFTkRJTkcgPSAncGVuZGluZycsXHJcbiAgUFJPQ0VTU0lORyA9ICdwcm9jZXNzaW5nJyxcclxuICBDT01QTEVURUQgPSAnY29tcGxldGVkJyxcclxuICBGQUlMRUQgPSAnZmFpbGVkJyxcclxuICBDQU5DRUxMRUQgPSAnY2FuY2VsbGVkJyxcclxuICBSRUZVTkRFRCA9ICdyZWZ1bmRlZCcsXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCB0cmFuc2FjdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcclxuICBpZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxyXG4gIGFtb3VudDogei5udW1iZXIoKSxcclxuICBwcm92aWRlckNvZGU6IHouc3RyaW5nKCksXHJcbiAgZXh0ZXJuYWxJZDogei5zdHJpbmcoKSxcclxuICBzdGF0dXM6IHoubmF0aXZlRW51bShUcmFuc2FjdGlvblN0YXR1cyksXHJcbn0pO1xyXG5cclxuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25Qcm9wcyA9IHouaW5mZXI8dHlwZW9mIHRyYW5zYWN0aW9uU2NoZW1hPjtcclxuXHJcbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VEb21haW48VHJhbnNhY3Rpb25Qcm9wcz4ge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBUcmFuc2FjdGlvblByb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlKHByb3BzOiBUcmFuc2FjdGlvblByb3BzKTogVHJhbnNhY3Rpb24ge1xyXG4gICAgY29uc3QgaWQgPSByYW5kb21VVUlEKCk7XHJcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKHtcclxuICAgICAgaWQsXHJcbiAgICAgIC4uLnByb3BzLFxyXG4gICAgICBzdGF0dXM6IFRyYW5zYWN0aW9uU3RhdHVzLkNSRUFURUQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyByZXN0b3JlKHByb3BzOiBUcmFuc2FjdGlvblByb3BzKTogVHJhbnNhY3Rpb24ge1xyXG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbihwcm9wcyk7XHJcbiAgfVxyXG5cclxuICBmYWlsZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldChcInN0YXR1c1wiLCBUcmFuc2FjdGlvblN0YXR1cy5GQUlMRUQpO1xyXG4gIH1cclxuXHJcbiAgY29tcGxldGVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXQoXCJzdGF0dXNcIiwgVHJhbnNhY3Rpb25TdGF0dXMuQ09NUExFVEVEKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbGxlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0KFwic3RhdHVzXCIsIFRyYW5zYWN0aW9uU3RhdHVzLkNBTkNFTExFRCk7XHJcbiAgfVxyXG5cclxuICByZWZ1bmRlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0KFwic3RhdHVzXCIsIFRyYW5zYWN0aW9uU3RhdHVzLlJFRlVOREVEKTtcclxuICB9XHJcbn0iXX0=
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QueueFactory = void 0;
|
|
4
|
+
const RabbitMQAdapter_1 = require("../queue/adapters/RabbitMQAdapter");
|
|
5
|
+
const SQSAdapter_1 = require("../queue/adapters/SQSAdapter");
|
|
6
|
+
class QueueFactory {
|
|
7
|
+
static create(config) {
|
|
8
|
+
switch (config.type) {
|
|
9
|
+
case "rabbitmq":
|
|
10
|
+
return new RabbitMQAdapter_1.RabbitMQAdapter(config);
|
|
11
|
+
case "sqs":
|
|
12
|
+
return new SQSAdapter_1.SQSAdapter(config);
|
|
13
|
+
default:
|
|
14
|
+
throw new Error(`Unknown queue type: ${config.type}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
static createFromEnv() {
|
|
18
|
+
const type = process.env.QUEUE_TYPE || "rabbitmq";
|
|
19
|
+
if (type === "sqs") {
|
|
20
|
+
return new SQSAdapter_1.SQSAdapter({
|
|
21
|
+
type: "sqs",
|
|
22
|
+
endpoint: process.env.SQS_ENDPOINT,
|
|
23
|
+
region: process.env.SQS_REGION || "us-east-1",
|
|
24
|
+
accessKeyId: process.env.SQS_ACCESS_KEY || process.env.AWS_ACCESS_KEY_ID || "",
|
|
25
|
+
secretAccessKey: process.env.SQS_SECRET_KEY || process.env.AWS_SECRET_ACCESS_KEY || "",
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return new RabbitMQAdapter_1.RabbitMQAdapter({
|
|
29
|
+
type: "rabbitmq",
|
|
30
|
+
host: process.env.RABBITMQ_HOST || "localhost",
|
|
31
|
+
port: parseInt(process.env.RABBITMQ_PORT || "5672", 10),
|
|
32
|
+
username: process.env.RABBITMQ_USER || "guest",
|
|
33
|
+
password: process.env.RABBITMQ_PASSWORD || "guest",
|
|
34
|
+
vhost: process.env.RABBITMQ_VHOST || "/",
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.QueueFactory = QueueFactory;
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVldWVGYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc2hhcmVkL2ZhY3RvcnkvUXVldWVGYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHVFQUFvRTtBQUNwRSw2REFBMEQ7QUFFMUQsTUFBYSxZQUFZO0lBRXZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBbUI7UUFDL0IsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEIsS0FBSyxVQUFVO2dCQUNiLE9BQU8sSUFBSSxpQ0FBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JDLEtBQUssS0FBSztnQkFDUixPQUFPLElBQUksdUJBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoQztnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF3QixNQUFzQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0UsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYTtRQUNsQixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUM7UUFFbEQsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDbkIsT0FBTyxJQUFJLHVCQUFVLENBQUM7Z0JBQ3BCLElBQUksRUFBRSxLQUFLO2dCQUNYLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVk7Z0JBQ2xDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxXQUFXO2dCQUM3QyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxFQUFFO2dCQUM5RSxlQUFlLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxFQUFFO2FBQ3ZGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLElBQUksaUNBQWUsQ0FBQztZQUN6QixJQUFJLEVBQUUsVUFBVTtZQUNoQixJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLElBQUksV0FBVztZQUM5QyxJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDdkQsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLE9BQU87WUFDOUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksT0FBTztZQUNsRCxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLElBQUksR0FBRztTQUN6QyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFuQ0Qsb0NBbUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVF1ZXVlQWRhcHRlciB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL0lRdWV1ZUFkYXB0ZXJcIjtcclxuaW1wb3J0IHsgUXVldWVDb25maWcgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9JUXVldWVDb25maWdcIjtcclxuaW1wb3J0IHsgUmFiYml0TVFBZGFwdGVyIH0gZnJvbSBcIi4uL3F1ZXVlL2FkYXB0ZXJzL1JhYmJpdE1RQWRhcHRlclwiO1xyXG5pbXBvcnQgeyBTUVNBZGFwdGVyIH0gZnJvbSBcIi4uL3F1ZXVlL2FkYXB0ZXJzL1NRU0FkYXB0ZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWV1ZUZhY3Rvcnkge1xyXG5cclxuICBzdGF0aWMgY3JlYXRlKGNvbmZpZzogUXVldWVDb25maWcpOiBJUXVldWVBZGFwdGVyIHtcclxuICAgIHN3aXRjaCAoY29uZmlnLnR5cGUpIHtcclxuICAgICAgY2FzZSBcInJhYmJpdG1xXCI6XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSYWJiaXRNUUFkYXB0ZXIoY29uZmlnKTtcclxuICAgICAgY2FzZSBcInNxc1wiOlxyXG4gICAgICAgIHJldHVybiBuZXcgU1FTQWRhcHRlcihjb25maWcpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBxdWV1ZSB0eXBlOiAkeyhjb25maWcgYXMgUXVldWVDb25maWcpLnR5cGV9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlRnJvbUVudigpOiBJUXVldWVBZGFwdGVyIHtcclxuICAgIGNvbnN0IHR5cGUgPSBwcm9jZXNzLmVudi5RVUVVRV9UWVBFIHx8IFwicmFiYml0bXFcIjtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJzcXNcIikge1xyXG4gICAgICByZXR1cm4gbmV3IFNRU0FkYXB0ZXIoe1xyXG4gICAgICAgIHR5cGU6IFwic3FzXCIsXHJcbiAgICAgICAgZW5kcG9pbnQ6IHByb2Nlc3MuZW52LlNRU19FTkRQT0lOVCxcclxuICAgICAgICByZWdpb246IHByb2Nlc3MuZW52LlNRU19SRUdJT04gfHwgXCJ1cy1lYXN0LTFcIixcclxuICAgICAgICBhY2Nlc3NLZXlJZDogcHJvY2Vzcy5lbnYuU1FTX0FDQ0VTU19LRVkgfHwgcHJvY2Vzcy5lbnYuQVdTX0FDQ0VTU19LRVlfSUQgfHwgXCJcIixcclxuICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IHByb2Nlc3MuZW52LlNRU19TRUNSRVRfS0VZIHx8IHByb2Nlc3MuZW52LkFXU19TRUNSRVRfQUNDRVNTX0tFWSB8fCBcIlwiLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IFJhYmJpdE1RQWRhcHRlcih7XHJcbiAgICAgIHR5cGU6IFwicmFiYml0bXFcIixcclxuICAgICAgaG9zdDogcHJvY2Vzcy5lbnYuUkFCQklUTVFfSE9TVCB8fCBcImxvY2FsaG9zdFwiLFxyXG4gICAgICBwb3J0OiBwYXJzZUludChwcm9jZXNzLmVudi5SQUJCSVRNUV9QT1JUIHx8IFwiNTY3MlwiLCAxMCksXHJcbiAgICAgIHVzZXJuYW1lOiBwcm9jZXNzLmVudi5SQUJCSVRNUV9VU0VSIHx8IFwiZ3Vlc3RcIixcclxuICAgICAgcGFzc3dvcmQ6IHByb2Nlc3MuZW52LlJBQkJJVE1RX1BBU1NXT1JEIHx8IFwiZ3Vlc3RcIixcclxuICAgICAgdmhvc3Q6IHByb2Nlc3MuZW52LlJBQkJJVE1RX1ZIT1NUIHx8IFwiL1wiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG4iXX0=
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from "./interfaces/IQueueAdapter";
|
|
2
|
+
export * from "./interfaces/IQueueConfig";
|
|
3
|
+
export * from "./queue/adapters/RabbitMQAdapter";
|
|
4
|
+
export * from "./queue/adapters/SQSAdapter";
|
|
5
|
+
export * from "./factory/QueueFactory";
|
|
6
|
+
export * from "./domain/BaseDomain";
|
|
7
|
+
export * from "./domain/Transaction";
|
|
8
|
+
export * from "./domain/RoutingAttempts";
|
|
9
|
+
export * from "./utils/BaseError";
|
|
10
|
+
export * from "./utils/NotFound";
|
|
11
|
+
export * from "./utils/NotFoundKey";
|
|
12
|
+
export * from "./utils/NotSupport";
|
|
13
|
+
export * from "./utils/NotSupported";
|
|
14
|
+
export * from "./utils/UnauthorizedAccess";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
// Interfaces
|
|
18
|
+
__exportStar(require("./interfaces/IQueueAdapter"), exports);
|
|
19
|
+
__exportStar(require("./interfaces/IQueueConfig"), exports);
|
|
20
|
+
// Adapters
|
|
21
|
+
__exportStar(require("./queue/adapters/RabbitMQAdapter"), exports);
|
|
22
|
+
__exportStar(require("./queue/adapters/SQSAdapter"), exports);
|
|
23
|
+
// Factory
|
|
24
|
+
__exportStar(require("./factory/QueueFactory"), exports);
|
|
25
|
+
// Domain
|
|
26
|
+
__exportStar(require("./domain/BaseDomain"), exports);
|
|
27
|
+
__exportStar(require("./domain/Transaction"), exports);
|
|
28
|
+
__exportStar(require("./domain/RoutingAttempts"), exports);
|
|
29
|
+
// Utils/Errors
|
|
30
|
+
__exportStar(require("./utils/BaseError"), exports);
|
|
31
|
+
__exportStar(require("./utils/NotFound"), exports);
|
|
32
|
+
__exportStar(require("./utils/NotFoundKey"), exports);
|
|
33
|
+
__exportStar(require("./utils/NotSupport"), exports);
|
|
34
|
+
__exportStar(require("./utils/NotSupported"), exports);
|
|
35
|
+
__exportStar(require("./utils/UnauthorizedAccess"), exports);
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zaGFyZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGFBQWE7QUFDYiw2REFBMkM7QUFDM0MsNERBQTBDO0FBRTFDLFdBQVc7QUFDWCxtRUFBaUQ7QUFDakQsOERBQTRDO0FBRTVDLFVBQVU7QUFDVix5REFBdUM7QUFFdkMsU0FBUztBQUNULHNEQUFvQztBQUNwQyx1REFBcUM7QUFDckMsMkRBQXlDO0FBRXpDLGVBQWU7QUFDZixvREFBa0M7QUFDbEMsbURBQWlDO0FBQ2pDLHNEQUFvQztBQUNwQyxxREFBbUM7QUFDbkMsdURBQXFDO0FBQ3JDLDZEQUEyQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEludGVyZmFjZXNcclxuZXhwb3J0ICogZnJvbSBcIi4vaW50ZXJmYWNlcy9JUXVldWVBZGFwdGVyXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2ludGVyZmFjZXMvSVF1ZXVlQ29uZmlnXCI7XHJcblxyXG4vLyBBZGFwdGVyc1xyXG5leHBvcnQgKiBmcm9tIFwiLi9xdWV1ZS9hZGFwdGVycy9SYWJiaXRNUUFkYXB0ZXJcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vcXVldWUvYWRhcHRlcnMvU1FTQWRhcHRlclwiO1xyXG5cclxuLy8gRmFjdG9yeVxyXG5leHBvcnQgKiBmcm9tIFwiLi9mYWN0b3J5L1F1ZXVlRmFjdG9yeVwiO1xyXG5cclxuLy8gRG9tYWluXHJcbmV4cG9ydCAqIGZyb20gXCIuL2RvbWFpbi9CYXNlRG9tYWluXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2RvbWFpbi9UcmFuc2FjdGlvblwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9kb21haW4vUm91dGluZ0F0dGVtcHRzXCI7XHJcblxyXG4vLyBVdGlscy9FcnJvcnNcclxuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMvQmFzZUVycm9yXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL05vdEZvdW5kXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL05vdEZvdW5kS2V5XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL05vdFN1cHBvcnRcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMvTm90U3VwcG9ydGVkXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL1VuYXV0aG9yaXplZEFjY2Vzc1wiO1xyXG5cclxuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface QueueMessage<T = unknown> {
|
|
2
|
+
id: string;
|
|
3
|
+
body: T;
|
|
4
|
+
raw: unknown;
|
|
5
|
+
receivedAt: Date;
|
|
6
|
+
}
|
|
7
|
+
export interface PublishOptions {
|
|
8
|
+
delaySeconds?: number;
|
|
9
|
+
messageGroupId?: string;
|
|
10
|
+
deduplicationId?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ConsumeOptions {
|
|
13
|
+
prefetch?: number;
|
|
14
|
+
visibilityTimeout?: number;
|
|
15
|
+
waitTimeSeconds?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface IQueueAdapter {
|
|
18
|
+
connect(): Promise<void>;
|
|
19
|
+
disconnect(): Promise<void>;
|
|
20
|
+
isConnected(): boolean;
|
|
21
|
+
createQueue(queue: string): Promise<void>;
|
|
22
|
+
deleteQueue(queue: string): Promise<void>;
|
|
23
|
+
publish<T = unknown>(queue: string, message: T, options?: PublishOptions): Promise<string>;
|
|
24
|
+
publishBatch<T = unknown>(queue: string, messages: T[], options?: PublishOptions): Promise<string[]>;
|
|
25
|
+
consume<T = unknown>(queue: string, handler: (message: QueueMessage<T>) => Promise<void>, options?: ConsumeOptions): Promise<void>;
|
|
26
|
+
ack(message: QueueMessage): Promise<void>;
|
|
27
|
+
nack(message: QueueMessage, requeue?: boolean): Promise<void>;
|
|
28
|
+
getQueueLength(queue: string): Promise<number>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVF1ZXVlQWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL0lRdWV1ZUFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUXVldWVNZXNzYWdlPFQgPSB1bmtub3duPiB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBib2R5OiBUO1xyXG4gIHJhdzogdW5rbm93bjtcclxuICByZWNlaXZlZEF0OiBEYXRlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFB1Ymxpc2hPcHRpb25zIHtcclxuICBkZWxheVNlY29uZHM/OiBudW1iZXI7XHJcbiAgbWVzc2FnZUdyb3VwSWQ/OiBzdHJpbmc7XHJcbiAgZGVkdXBsaWNhdGlvbklkPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbnN1bWVPcHRpb25zIHtcclxuICBwcmVmZXRjaD86IG51bWJlcjtcclxuICB2aXNpYmlsaXR5VGltZW91dD86IG51bWJlcjtcclxuICB3YWl0VGltZVNlY29uZHM/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVF1ZXVlQWRhcHRlciB7XHJcbiAgY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+O1xyXG4gIGRpc2Nvbm5lY3QoKTogUHJvbWlzZTx2b2lkPjtcclxuICBpc0Nvbm5lY3RlZCgpOiBib29sZWFuO1xyXG5cclxuICBjcmVhdGVRdWV1ZShxdWV1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcclxuICBkZWxldGVRdWV1ZShxdWV1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgcHVibGlzaDxUID0gdW5rbm93bj4ocXVldWU6IHN0cmluZywgbWVzc2FnZTogVCwgb3B0aW9ucz86IFB1Ymxpc2hPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+O1xyXG4gIHB1Ymxpc2hCYXRjaDxUID0gdW5rbm93bj4ocXVldWU6IHN0cmluZywgbWVzc2FnZXM6IFRbXSwgb3B0aW9ucz86IFB1Ymxpc2hPcHRpb25zKTogUHJvbWlzZTxzdHJpbmdbXT47XHJcblxyXG4gIGNvbnN1bWU8VCA9IHVua25vd24+KFxyXG4gICAgcXVldWU6IHN0cmluZyxcclxuICAgIGhhbmRsZXI6IChtZXNzYWdlOiBRdWV1ZU1lc3NhZ2U8VD4pID0+IFByb21pc2U8dm9pZD4sXHJcbiAgICBvcHRpb25zPzogQ29uc3VtZU9wdGlvbnNcclxuICApOiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICBhY2sobWVzc2FnZTogUXVldWVNZXNzYWdlKTogUHJvbWlzZTx2b2lkPjtcclxuICBuYWNrKG1lc3NhZ2U6IFF1ZXVlTWVzc2FnZSwgcmVxdWV1ZT86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICBnZXRRdWV1ZUxlbmd0aChxdWV1ZTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+O1xyXG59XHJcblxyXG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface RabbitMQConfig {
|
|
2
|
+
type: "rabbitmq";
|
|
3
|
+
host: string;
|
|
4
|
+
port: number;
|
|
5
|
+
username: string;
|
|
6
|
+
password: string;
|
|
7
|
+
vhost?: string;
|
|
8
|
+
heartbeat?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface SQSConfig {
|
|
11
|
+
type: "sqs";
|
|
12
|
+
endpoint?: string;
|
|
13
|
+
region: string;
|
|
14
|
+
accessKeyId: string;
|
|
15
|
+
secretAccessKey: string;
|
|
16
|
+
}
|
|
17
|
+
export type QueueConfig = RabbitMQConfig | SQSConfig;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVF1ZXVlQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvSVF1ZXVlQ29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFJhYmJpdE1RQ29uZmlnIHtcclxuICB0eXBlOiBcInJhYmJpdG1xXCI7XHJcbiAgaG9zdDogc3RyaW5nO1xyXG4gIHBvcnQ6IG51bWJlcjtcclxuICB1c2VybmFtZTogc3RyaW5nO1xyXG4gIHBhc3N3b3JkOiBzdHJpbmc7XHJcbiAgdmhvc3Q/OiBzdHJpbmc7XHJcbiAgaGVhcnRiZWF0PzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNRU0NvbmZpZyB7XHJcbiAgdHlwZTogXCJzcXNcIjtcclxuICBlbmRwb2ludD86IHN0cmluZztcclxuICByZWdpb246IHN0cmluZztcclxuICBhY2Nlc3NLZXlJZDogc3RyaW5nO1xyXG4gIHNlY3JldEFjY2Vzc0tleTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBRdWV1ZUNvbmZpZyA9IFJhYmJpdE1RQ29uZmlnIHwgU1FTQ29uZmlnO1xyXG5cclxuIl19
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { IQueueAdapter, QueueMessage, PublishOptions, ConsumeOptions } from "../../interfaces/IQueueAdapter";
|
|
2
|
+
import { RabbitMQConfig } from "../../interfaces/IQueueConfig";
|
|
3
|
+
export declare class RabbitMQAdapter implements IQueueAdapter {
|
|
4
|
+
private connection;
|
|
5
|
+
private channel;
|
|
6
|
+
private config;
|
|
7
|
+
constructor(config: RabbitMQConfig);
|
|
8
|
+
connect(): Promise<void>;
|
|
9
|
+
disconnect(): Promise<void>;
|
|
10
|
+
isConnected(): boolean;
|
|
11
|
+
createQueue(queue: string): Promise<void>;
|
|
12
|
+
deleteQueue(queue: string): Promise<void>;
|
|
13
|
+
publish<T = unknown>(queue: string, message: T, options?: PublishOptions): Promise<string>;
|
|
14
|
+
publishBatch<T = unknown>(queue: string, messages: T[], options?: PublishOptions): Promise<string[]>;
|
|
15
|
+
consume<T = unknown>(queue: string, handler: (message: QueueMessage<T>) => Promise<void>, options?: ConsumeOptions): Promise<void>;
|
|
16
|
+
ack(message: QueueMessage): Promise<void>;
|
|
17
|
+
nack(message: QueueMessage, requeue?: boolean): Promise<void>;
|
|
18
|
+
getQueueLength(queue: string): Promise<number>;
|
|
19
|
+
private ensureChannel;
|
|
20
|
+
private generateMessageId;
|
|
21
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
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.RabbitMQAdapter = void 0;
|
|
7
|
+
const amqplib_1 = __importDefault(require("amqplib"));
|
|
8
|
+
class RabbitMQAdapter {
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.connection = null;
|
|
11
|
+
this.channel = null;
|
|
12
|
+
this.config = config;
|
|
13
|
+
}
|
|
14
|
+
async connect() {
|
|
15
|
+
const { host, port, username, password, vhost = "/", heartbeat = 60 } = this.config;
|
|
16
|
+
const url = `amqp://${username}:${password}@${host}:${port}${vhost}?heartbeat=${heartbeat}`;
|
|
17
|
+
this.connection = await amqplib_1.default.connect(url);
|
|
18
|
+
this.channel = await this.connection.createChannel();
|
|
19
|
+
this.connection.on("error", (err) => {
|
|
20
|
+
console.error("[RabbitMQ] Connection error:", err.message);
|
|
21
|
+
});
|
|
22
|
+
this.connection.on("close", () => {
|
|
23
|
+
console.warn("[RabbitMQ] Connection closed");
|
|
24
|
+
this.connection = null;
|
|
25
|
+
this.channel = null;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
async disconnect() {
|
|
29
|
+
if (this.channel) {
|
|
30
|
+
await this.channel.close();
|
|
31
|
+
this.channel = null;
|
|
32
|
+
}
|
|
33
|
+
if (this.connection) {
|
|
34
|
+
await this.connection.close();
|
|
35
|
+
this.connection = null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
isConnected() {
|
|
39
|
+
return this.connection !== null && this.channel !== null;
|
|
40
|
+
}
|
|
41
|
+
async createQueue(queue) {
|
|
42
|
+
this.ensureChannel();
|
|
43
|
+
await this.channel.assertQueue(queue, { durable: true });
|
|
44
|
+
}
|
|
45
|
+
async deleteQueue(queue) {
|
|
46
|
+
this.ensureChannel();
|
|
47
|
+
await this.channel.deleteQueue(queue);
|
|
48
|
+
}
|
|
49
|
+
async publish(queue, message, options) {
|
|
50
|
+
this.ensureChannel();
|
|
51
|
+
const messageId = this.generateMessageId();
|
|
52
|
+
const content = Buffer.from(JSON.stringify(message));
|
|
53
|
+
await this.channel.assertQueue(queue, { durable: true });
|
|
54
|
+
this.channel.sendToQueue(queue, content, {
|
|
55
|
+
persistent: true,
|
|
56
|
+
messageId,
|
|
57
|
+
timestamp: Date.now(),
|
|
58
|
+
});
|
|
59
|
+
return messageId;
|
|
60
|
+
}
|
|
61
|
+
async publishBatch(queue, messages, options) {
|
|
62
|
+
const ids = [];
|
|
63
|
+
for (const message of messages) {
|
|
64
|
+
const id = await this.publish(queue, message, options);
|
|
65
|
+
ids.push(id);
|
|
66
|
+
}
|
|
67
|
+
return ids;
|
|
68
|
+
}
|
|
69
|
+
async consume(queue, handler, options) {
|
|
70
|
+
this.ensureChannel();
|
|
71
|
+
if (options?.prefetch) {
|
|
72
|
+
await this.channel.prefetch(options.prefetch);
|
|
73
|
+
}
|
|
74
|
+
await this.channel.assertQueue(queue, { durable: true });
|
|
75
|
+
await this.channel.consume(queue, async (msg) => {
|
|
76
|
+
if (!msg)
|
|
77
|
+
return;
|
|
78
|
+
const queueMessage = {
|
|
79
|
+
id: msg.properties.messageId || this.generateMessageId(),
|
|
80
|
+
body: JSON.parse(msg.content.toString()),
|
|
81
|
+
raw: msg,
|
|
82
|
+
receivedAt: new Date(),
|
|
83
|
+
};
|
|
84
|
+
try {
|
|
85
|
+
await handler(queueMessage);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
console.error("[RabbitMQ] Error processing message:", error);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
async ack(message) {
|
|
93
|
+
this.ensureChannel();
|
|
94
|
+
this.channel.ack(message.raw);
|
|
95
|
+
}
|
|
96
|
+
async nack(message, requeue = true) {
|
|
97
|
+
this.ensureChannel();
|
|
98
|
+
this.channel.nack(message.raw, false, requeue);
|
|
99
|
+
}
|
|
100
|
+
async getQueueLength(queue) {
|
|
101
|
+
this.ensureChannel();
|
|
102
|
+
const { messageCount } = await this.channel.assertQueue(queue, { durable: true });
|
|
103
|
+
return messageCount;
|
|
104
|
+
}
|
|
105
|
+
ensureChannel() {
|
|
106
|
+
if (!this.channel) {
|
|
107
|
+
throw new Error("[RabbitMQ] Not connected. Call connect() first.");
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
generateMessageId() {
|
|
111
|
+
return `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
exports.RabbitMQAdapter = RabbitMQAdapter;
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFiYml0TVFBZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc2hhcmVkL3F1ZXVlL2FkYXB0ZXJzL1JhYmJpdE1RQWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzREFBMkI7QUFPM0IsTUFBYSxlQUFlO0lBSzFCLFlBQVksTUFBc0I7UUFKMUIsZUFBVSxHQUEwQixJQUFJLENBQUM7UUFDekMsWUFBTyxHQUF1QixJQUFJLENBQUM7UUFJekMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLFNBQVMsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3BGLE1BQU0sR0FBRyxHQUFHLFVBQVUsUUFBUSxJQUFJLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssY0FBYyxTQUFTLEVBQUUsQ0FBQztRQUU1RixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0saUJBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbEMsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsOEJBQThCLENB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LE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7SUFDSCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDeEUsQ0FBQztDQUNGO0FBdElELDBDQXNJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhbXFwIGZyb20gXCJhbXFwbGliXCI7XHJcbmltcG9ydCB7IElRdWV1ZUFkYXB0ZXIsIFF1ZXVlTWVzc2FnZSwgUHVibGlzaE9wdGlvbnMsIENvbnN1bWVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvSVF1ZXVlQWRhcHRlclwiO1xyXG5pbXBvcnQgeyBSYWJiaXRNUUNvbmZpZyB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL0lRdWV1ZUNvbmZpZ1wiO1xyXG5cclxudHlwZSBBbXFwQ29ubmVjdGlvbiA9IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgYW1xcC5jb25uZWN0Pj47XHJcbnR5cGUgQW1xcENoYW5uZWwgPSBBd2FpdGVkPFJldHVyblR5cGU8QW1xcENvbm5lY3Rpb25bXCJjcmVhdGVDaGFubmVsXCJdPj47XHJcblxyXG5leHBvcnQgY2xhc3MgUmFiYml0TVFBZGFwdGVyIGltcGxlbWVudHMgSVF1ZXVlQWRhcHRlciB7XHJcbiAgcHJpdmF0ZSBjb25uZWN0aW9uOiBBbXFwQ29ubmVjdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgY2hhbm5lbDogQW1xcENoYW5uZWwgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGNvbmZpZzogUmFiYml0TVFDb25maWc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogUmFiYml0TVFDb25maWcpIHtcclxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHsgaG9zdCwgcG9ydCwgdXNlcm5hbWUsIHBhc3N3b3JkLCB2aG9zdCA9IFwiL1wiLCBoZWFydGJlYXQgPSA2MCB9ID0gdGhpcy5jb25maWc7XHJcbiAgICBjb25zdCB1cmwgPSBgYW1xcDovLyR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9QCR7aG9zdH06JHtwb3J0fSR7dmhvc3R9P2hlYXJ0YmVhdD0ke2hlYXJ0YmVhdH1gO1xyXG5cclxuICAgIHRoaXMuY29ubmVjdGlvbiA9IGF3YWl0IGFtcXAuY29ubmVjdCh1cmwpO1xyXG4gICAgdGhpcy5jaGFubmVsID0gYXdhaXQgdGhpcy5jb25uZWN0aW9uLmNyZWF0ZUNoYW5uZWwoKTtcclxuXHJcbiAgICB0aGlzLmNvbm5lY3Rpb24ub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbUmFiYml0TVFdIENvbm5lY3Rpb24gZXJyb3I6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY29ubmVjdGlvbi5vbihcImNsb3NlXCIsICgpID0+IHtcclxuICAgICAgY29uc29sZS53YXJuKFwiW1JhYmJpdE1RXSBDb25uZWN0aW9uIGNsb3NlZFwiKTtcclxuICAgICAgdGhpcy5jb25uZWN0aW9uID0gbnVsbDtcclxuICAgICAgdGhpcy5jaGFubmVsID0gbnVsbDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmNoYW5uZWwpIHtcclxuICAgICAgYXdhaXQgdGhpcy5jaGFubmVsLmNsb3NlKCk7XHJcbiAgICAgIHRoaXMuY2hhbm5lbCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25uZWN0aW9uKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbi5jbG9zZSgpO1xyXG4gICAgICB0aGlzLmNvbm5lY3Rpb24gPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uICE9PSBudWxsICYmIHRoaXMuY2hhbm5lbCAhPT0gbnVsbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNyZWF0ZVF1ZXVlKHF1ZXVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZW5zdXJlQ2hhbm5lbCgpO1xyXG4gICAgYXdhaXQgdGhpcy5jaGFubmVsIS5hc3NlcnRRdWV1ZShxdWV1ZSwgeyBkdXJhYmxlOiB0cnVlIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGVsZXRlUXVldWUocXVldWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5lbnN1cmVDaGFubmVsKCk7XHJcbiAgICBhd2FpdCB0aGlzLmNoYW5uZWwhLmRlbGV0ZVF1ZXVlKHF1ZXVlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHB1Ymxpc2g8VCA9IHVua25vd24+KHF1ZXVlOiBzdHJpbmcsIG1lc3NhZ2U6IFQsIG9wdGlvbnM/OiBQdWJsaXNoT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICB0aGlzLmVuc3VyZUNoYW5uZWwoKTtcclxuXHJcbiAgICBjb25zdCBtZXNzYWdlSWQgPSB0aGlzLmdlbmVyYXRlTWVzc2FnZUlkKCk7XHJcbiAgICBjb25zdCBjb250ZW50ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuY2hhbm5lbCEuYXNzZXJ0UXVldWUocXVldWUsIHsgZHVyYWJsZTogdHJ1ZSB9KTtcclxuXHJcbiAgICB0aGlzLmNoYW5uZWwhLnNlbmRUb1F1ZXVlKHF1ZXVlLCBjb250ZW50LCB7XHJcbiAgICAgIHBlcnNpc3RlbnQ6IHRydWUsXHJcbiAgICAgIG1lc3NhZ2VJZCxcclxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG1lc3NhZ2VJZDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHB1Ymxpc2hCYXRjaDxUID0gdW5rbm93bj4ocXVldWU6IHN0cmluZywgbWVzc2FnZXM6IFRbXSwgb3B0aW9ucz86IFB1Ymxpc2hPcHRpb25zKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xyXG4gICAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XHJcbiAgICAgIGNvbnN0IGlkID0gYXdhaXQgdGhpcy5wdWJsaXNoKHF1ZXVlLCBtZXNzYWdlLCBvcHRpb25zKTtcclxuICAgICAgaWRzLnB1c2goaWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkcztcclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbnN1bWU8VCA9IHVua25vd24+KFxyXG4gICAgcXVldWU6IHN0cmluZyxcclxuICAgIGhhbmRsZXI6IChtZXNzYWdlOiBRdWV1ZU1lc3NhZ2U8VD4pID0+IFByb21pc2U8dm9pZD4sXHJcbiAgICBvcHRpb25zPzogQ29uc3VtZU9wdGlvbnNcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZW5zdXJlQ2hhbm5lbCgpO1xyXG5cclxuICAgIGlmIChvcHRpb25zPy5wcmVmZXRjaCkge1xyXG4gICAgICBhd2FpdCB0aGlzLmNoYW5uZWwhLnByZWZldGNoKG9wdGlvbnMucHJlZmV0Y2gpO1xyXG4gICAgfVxyXG5cclxuICAgIGF3YWl0IHRoaXMuY2hhbm5lbCEuYXNzZXJ0UXVldWUocXVldWUsIHsgZHVyYWJsZTogdHJ1ZSB9KTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmNoYW5uZWwhLmNvbnN1bWUocXVldWUsIGFzeW5jIChtc2cpID0+IHtcclxuICAgICAgaWYgKCFtc2cpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IHF1ZXVlTWVzc2FnZTogUXVldWVNZXNzYWdlPFQ+ID0ge1xyXG4gICAgICAgIGlkOiBtc2cucHJvcGVydGllcy5tZXNzYWdlSWQgfHwgdGhpcy5nZW5lcmF0ZU1lc3NhZ2VJZCgpLFxyXG4gICAgICAgIGJvZHk6IEpTT04ucGFyc2UobXNnLmNvbnRlbnQudG9TdHJpbmcoKSkgYXMgVCxcclxuICAgICAgICByYXc6IG1zZyxcclxuICAgICAgICByZWNlaXZlZEF0OiBuZXcgRGF0ZSgpLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCBoYW5kbGVyKHF1ZXVlTWVzc2FnZSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIltSYWJiaXRNUV0gRXJyb3IgcHJvY2Vzc2luZyBtZXNzYWdlOlwiLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWNrKG1lc3NhZ2U6IFF1ZXVlTWVzc2FnZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5lbnN1cmVDaGFubmVsKCk7XHJcbiAgICB0aGlzLmNoYW5uZWwhLmFjayhtZXNzYWdlLnJhdyBhcyBhbXFwLk1lc3NhZ2UpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmFjayhtZXNzYWdlOiBRdWV1ZU1lc3NhZ2UsIHJlcXVldWUgPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmVuc3VyZUNoYW5uZWwoKTtcclxuICAgIHRoaXMuY2hhbm5lbCEubmFjayhtZXNzYWdlLnJhdyBhcyBhbXFwLk1lc3NhZ2UsIGZhbHNlLCByZXF1ZXVlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFF1ZXVlTGVuZ3RoKHF1ZXVlOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgdGhpcy5lbnN1cmVDaGFubmVsKCk7XHJcbiAgICBjb25zdCB7IG1lc3NhZ2VDb3VudCB9ID0gYXdhaXQgdGhpcy5jaGFubmVsIS5hc3NlcnRRdWV1ZShxdWV1ZSwgeyBkdXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgcmV0dXJuIG1lc3NhZ2VDb3VudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW5zdXJlQ2hhbm5lbCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jaGFubmVsKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIltSYWJiaXRNUV0gTm90IGNvbm5lY3RlZC4gQ2FsbCBjb25uZWN0KCkgZmlyc3QuXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZU1lc3NhZ2VJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDE1KX1gO1xyXG4gIH1cclxufVxyXG5cclxuIl19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { IQueueAdapter, QueueMessage, PublishOptions, ConsumeOptions } from "../../interfaces/IQueueAdapter";
|
|
2
|
+
import { SQSConfig } from "../../interfaces/IQueueConfig";
|
|
3
|
+
export declare class SQSAdapter implements IQueueAdapter {
|
|
4
|
+
private client;
|
|
5
|
+
private config;
|
|
6
|
+
private queueUrls;
|
|
7
|
+
private consuming;
|
|
8
|
+
constructor(config: SQSConfig);
|
|
9
|
+
connect(): Promise<void>;
|
|
10
|
+
disconnect(): Promise<void>;
|
|
11
|
+
isConnected(): boolean;
|
|
12
|
+
createQueue(queue: string): Promise<void>;
|
|
13
|
+
deleteQueue(queue: string): Promise<void>;
|
|
14
|
+
publish<T = unknown>(queue: string, message: T, options?: PublishOptions): Promise<string>;
|
|
15
|
+
publishBatch<T = unknown>(queue: string, messages: T[], options?: PublishOptions): Promise<string[]>;
|
|
16
|
+
consume<T = unknown>(queue: string, handler: (message: QueueMessage<T>) => Promise<void>, options?: ConsumeOptions): Promise<void>;
|
|
17
|
+
ack(message: QueueMessage): Promise<void>;
|
|
18
|
+
nack(message: QueueMessage, _requeue?: boolean): Promise<void>;
|
|
19
|
+
getQueueLength(queue: string): Promise<number>;
|
|
20
|
+
stopConsuming(queue: string): void;
|
|
21
|
+
private getQueueUrl;
|
|
22
|
+
private ensureClient;
|
|
23
|
+
private generateMessageId;
|
|
24
|
+
private sleep;
|
|
25
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SQSAdapter = void 0;
|
|
4
|
+
const client_sqs_1 = require("@aws-sdk/client-sqs");
|
|
5
|
+
class SQSAdapter {
|
|
6
|
+
constructor(config) {
|
|
7
|
+
this.client = null;
|
|
8
|
+
this.queueUrls = new Map();
|
|
9
|
+
this.consuming = new Map();
|
|
10
|
+
this.config = config;
|
|
11
|
+
}
|
|
12
|
+
async connect() {
|
|
13
|
+
this.client = new client_sqs_1.SQSClient({
|
|
14
|
+
region: this.config.region,
|
|
15
|
+
endpoint: this.config.endpoint,
|
|
16
|
+
credentials: {
|
|
17
|
+
accessKeyId: this.config.accessKeyId,
|
|
18
|
+
secretAccessKey: this.config.secretAccessKey,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
async disconnect() {
|
|
23
|
+
this.consuming.clear();
|
|
24
|
+
this.queueUrls.clear();
|
|
25
|
+
if (this.client) {
|
|
26
|
+
this.client.destroy();
|
|
27
|
+
this.client = null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
isConnected() {
|
|
31
|
+
return this.client !== null;
|
|
32
|
+
}
|
|
33
|
+
async createQueue(queue) {
|
|
34
|
+
this.ensureClient();
|
|
35
|
+
const command = new client_sqs_1.CreateQueueCommand({
|
|
36
|
+
QueueName: queue,
|
|
37
|
+
Attributes: {
|
|
38
|
+
VisibilityTimeout: "30",
|
|
39
|
+
MessageRetentionPeriod: "345600",
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
const response = await this.client.send(command);
|
|
43
|
+
if (response.QueueUrl) {
|
|
44
|
+
this.queueUrls.set(queue, response.QueueUrl);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async deleteQueue(queue) {
|
|
48
|
+
this.ensureClient();
|
|
49
|
+
const queueUrl = await this.getQueueUrl(queue);
|
|
50
|
+
const command = new client_sqs_1.DeleteQueueCommand({ QueueUrl: queueUrl });
|
|
51
|
+
await this.client.send(command);
|
|
52
|
+
this.queueUrls.delete(queue);
|
|
53
|
+
}
|
|
54
|
+
async publish(queue, message, options) {
|
|
55
|
+
this.ensureClient();
|
|
56
|
+
const queueUrl = await this.getQueueUrl(queue);
|
|
57
|
+
const messageId = this.generateMessageId();
|
|
58
|
+
const command = new client_sqs_1.SendMessageCommand({
|
|
59
|
+
QueueUrl: queueUrl,
|
|
60
|
+
MessageBody: JSON.stringify(message),
|
|
61
|
+
DelaySeconds: options?.delaySeconds,
|
|
62
|
+
MessageGroupId: options?.messageGroupId,
|
|
63
|
+
MessageDeduplicationId: options?.deduplicationId || messageId,
|
|
64
|
+
});
|
|
65
|
+
const response = await this.client.send(command);
|
|
66
|
+
return response.MessageId || messageId;
|
|
67
|
+
}
|
|
68
|
+
async publishBatch(queue, messages, options) {
|
|
69
|
+
this.ensureClient();
|
|
70
|
+
const queueUrl = await this.getQueueUrl(queue);
|
|
71
|
+
const entries = messages.map((message, index) => ({
|
|
72
|
+
Id: `${index}`,
|
|
73
|
+
MessageBody: JSON.stringify(message),
|
|
74
|
+
DelaySeconds: options?.delaySeconds,
|
|
75
|
+
MessageGroupId: options?.messageGroupId,
|
|
76
|
+
MessageDeduplicationId: options?.deduplicationId || this.generateMessageId(),
|
|
77
|
+
}));
|
|
78
|
+
const command = new client_sqs_1.SendMessageBatchCommand({
|
|
79
|
+
QueueUrl: queueUrl,
|
|
80
|
+
Entries: entries,
|
|
81
|
+
});
|
|
82
|
+
const response = await this.client.send(command);
|
|
83
|
+
return response.Successful?.map((s) => s.MessageId || s.Id || "") || [];
|
|
84
|
+
}
|
|
85
|
+
async consume(queue, handler, options) {
|
|
86
|
+
this.ensureClient();
|
|
87
|
+
const queueUrl = await this.getQueueUrl(queue);
|
|
88
|
+
this.consuming.set(queue, true);
|
|
89
|
+
const poll = async () => {
|
|
90
|
+
while (this.consuming.get(queue)) {
|
|
91
|
+
try {
|
|
92
|
+
const command = new client_sqs_1.ReceiveMessageCommand({
|
|
93
|
+
QueueUrl: queueUrl,
|
|
94
|
+
MaxNumberOfMessages: options?.prefetch || 10,
|
|
95
|
+
WaitTimeSeconds: options?.waitTimeSeconds || 20,
|
|
96
|
+
VisibilityTimeout: options?.visibilityTimeout || 30,
|
|
97
|
+
AttributeNames: ["All"],
|
|
98
|
+
MessageAttributeNames: ["All"],
|
|
99
|
+
});
|
|
100
|
+
const response = await this.client.send(command);
|
|
101
|
+
if (response.Messages && response.Messages.length > 0) {
|
|
102
|
+
for (const msg of response.Messages) {
|
|
103
|
+
const queueMessage = {
|
|
104
|
+
id: msg.MessageId || this.generateMessageId(),
|
|
105
|
+
body: JSON.parse(msg.Body || "{}"),
|
|
106
|
+
raw: { message: msg, queueUrl },
|
|
107
|
+
receivedAt: new Date(),
|
|
108
|
+
};
|
|
109
|
+
try {
|
|
110
|
+
await handler(queueMessage);
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
console.error("[SQS] Error processing message:", error);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
console.error("[SQS] Polling error:", error);
|
|
120
|
+
await this.sleep(5000);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
poll();
|
|
125
|
+
}
|
|
126
|
+
async ack(message) {
|
|
127
|
+
this.ensureClient();
|
|
128
|
+
const { message: msg, queueUrl } = message.raw;
|
|
129
|
+
if (!msg.ReceiptHandle) {
|
|
130
|
+
throw new Error("[SQS] Message has no ReceiptHandle");
|
|
131
|
+
}
|
|
132
|
+
const command = new client_sqs_1.DeleteMessageCommand({
|
|
133
|
+
QueueUrl: queueUrl,
|
|
134
|
+
ReceiptHandle: msg.ReceiptHandle,
|
|
135
|
+
});
|
|
136
|
+
await this.client.send(command);
|
|
137
|
+
}
|
|
138
|
+
async nack(message, _requeue = true) {
|
|
139
|
+
// SQS automaticamente retorna a mensagem para a fila após o visibility timeout
|
|
140
|
+
// Não é necessário fazer nada aqui
|
|
141
|
+
console.warn("[SQS] nack called - message will be redelivered after visibility timeout");
|
|
142
|
+
}
|
|
143
|
+
async getQueueLength(queue) {
|
|
144
|
+
this.ensureClient();
|
|
145
|
+
const queueUrl = await this.getQueueUrl(queue);
|
|
146
|
+
const command = new client_sqs_1.GetQueueAttributesCommand({
|
|
147
|
+
QueueUrl: queueUrl,
|
|
148
|
+
AttributeNames: ["ApproximateNumberOfMessages"],
|
|
149
|
+
});
|
|
150
|
+
const response = await this.client.send(command);
|
|
151
|
+
return parseInt(response.Attributes?.ApproximateNumberOfMessages || "0", 10);
|
|
152
|
+
}
|
|
153
|
+
stopConsuming(queue) {
|
|
154
|
+
this.consuming.set(queue, false);
|
|
155
|
+
}
|
|
156
|
+
async getQueueUrl(queue) {
|
|
157
|
+
if (this.queueUrls.has(queue)) {
|
|
158
|
+
return this.queueUrls.get(queue);
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
const command = new client_sqs_1.GetQueueUrlCommand({ QueueName: queue });
|
|
162
|
+
const response = await this.client.send(command);
|
|
163
|
+
if (response.QueueUrl) {
|
|
164
|
+
this.queueUrls.set(queue, response.QueueUrl);
|
|
165
|
+
return response.QueueUrl;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
await this.createQueue(queue);
|
|
170
|
+
return this.queueUrls.get(queue);
|
|
171
|
+
}
|
|
172
|
+
throw new Error(`[SQS] Could not get URL for queue: ${queue}`);
|
|
173
|
+
}
|
|
174
|
+
ensureClient() {
|
|
175
|
+
if (!this.client) {
|
|
176
|
+
throw new Error("[SQS] Not connected. Call connect() first.");
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
generateMessageId() {
|
|
180
|
+
return `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
|
|
181
|
+
}
|
|
182
|
+
sleep(ms) {
|
|
183
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
exports.SQSAdapter = SQSAdapter;
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU1FTQWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NoYXJlZC9xdWV1ZS9hZGFwdGVycy9TUVNBZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9EQVc2QjtBQUk3QixNQUFhLFVBQVU7SUFNckIsWUFBWSxNQUFpQjtRQUxyQixXQUFNLEdBQXFCLElBQUksQ0FBQztRQUVoQyxjQUFTLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDM0MsY0FBUyxHQUF5QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBR2xELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxzQkFBUyxDQUFDO1lBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDMUIsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtZQUM5QixXQUFXLEVBQUU7Z0JBQ1gsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVztnQkFDcEMsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZTthQUM3QztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVTtRQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJ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QU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0NBQ0Y7QUE5TkQsZ0NBOE5DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBTUVNDbGllbnQsXHJcbiAgU2VuZE1lc3NhZ2VDb21tYW5kLFxyXG4gIFNlbmRNZXNzYWdlQmF0Y2hDb21tYW5kLFxyXG4gIFJlY2VpdmVNZXNzYWdlQ29tbWFuZCxcclxuICBEZWxldGVNZXNzYWdlQ29tbWFuZCxcclxuICBDcmVhdGVRdWV1ZUNvbW1hbmQsXHJcbiAgRGVsZXRlUXVldWVDb21tYW5kLFxyXG4gIEdldFF1ZXVlQXR0cmlidXRlc0NvbW1hbmQsXHJcbiAgR2V0UXVldWVVcmxDb21tYW5kLFxyXG4gIE1lc3NhZ2UsXHJcbn0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zcXNcIjtcclxuaW1wb3J0IHsgSVF1ZXVlQWRhcHRlciwgUXVldWVNZXNzYWdlLCBQdWJsaXNoT3B0aW9ucywgQ29uc3VtZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9JUXVldWVBZGFwdGVyXCI7XHJcbmltcG9ydCB7IFNRU0NvbmZpZyB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL0lRdWV1ZUNvbmZpZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNRU0FkYXB0ZXIgaW1wbGVtZW50cyBJUXVldWVBZGFwdGVyIHtcclxuICBwcml2YXRlIGNsaWVudDogU1FTQ2xpZW50IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBjb25maWc6IFNRU0NvbmZpZztcclxuICBwcml2YXRlIHF1ZXVlVXJsczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIGNvbnN1bWluZzogTWFwPHN0cmluZywgYm9vbGVhbj4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogU1FTQ29uZmlnKSB7XHJcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbm5lY3QoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmNsaWVudCA9IG5ldyBTUVNDbGllbnQoe1xyXG4gICAgICByZWdpb246IHRoaXMuY29uZmlnLnJlZ2lvbixcclxuICAgICAgZW5kcG9pbnQ6IHRoaXMuY29uZmlnLmVuZHBvaW50LFxyXG4gICAgICBjcmVkZW50aWFsczoge1xyXG4gICAgICAgIGFjY2Vzc0tleUlkOiB0aGlzLmNvbmZpZy5hY2Nlc3NLZXlJZCxcclxuICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IHRoaXMuY29uZmlnLnNlY3JldEFjY2Vzc0tleSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuY29uc3VtaW5nLmNsZWFyKCk7XHJcbiAgICB0aGlzLnF1ZXVlVXJscy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMuY2xpZW50KSB7XHJcbiAgICAgIHRoaXMuY2xpZW50LmRlc3Ryb3koKTtcclxuICAgICAgdGhpcy5jbGllbnQgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jbGllbnQgIT09IG51bGw7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjcmVhdGVRdWV1ZShxdWV1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmVuc3VyZUNsaWVudCgpO1xyXG5cclxuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgQ3JlYXRlUXVldWVDb21tYW5kKHtcclxuICAgICAgUXVldWVOYW1lOiBxdWV1ZSxcclxuICAgICAgQXR0cmlidXRlczoge1xyXG4gICAgICAgIFZpc2liaWxpdHlUaW1lb3V0OiBcIjMwXCIsXHJcbiAgICAgICAgTWVzc2FnZVJldGVudGlvblBlcmlvZDogXCIzNDU2MDBcIixcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQhLnNlbmQoY29tbWFuZCk7XHJcbiAgICBpZiAocmVzcG9uc2UuUXVldWVVcmwpIHtcclxuICAgICAgdGhpcy5xdWV1ZVVybHMuc2V0KHF1ZXVlLCByZXNwb25zZS5RdWV1ZVVybCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBkZWxldGVRdWV1ZShxdWV1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmVuc3VyZUNsaWVudCgpO1xyXG4gICAgY29uc3QgcXVldWVVcmwgPSBhd2FpdCB0aGlzLmdldFF1ZXVlVXJsKHF1ZXVlKTtcclxuXHJcbiAgICBjb25zdCBjb21tYW5kID0gbmV3IERlbGV0ZVF1ZXVlQ29tbWFuZCh7IFF1ZXVlVXJsOiBxdWV1ZVVybCB9KTtcclxuICAgIGF3YWl0IHRoaXMuY2xpZW50IS5zZW5kKGNvbW1hbmQpO1xyXG4gICAgdGhpcy5xdWV1ZVVybHMuZGVsZXRlKHF1ZXVlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHB1Ymxpc2g8VCA9IHVua25vd24+KHF1ZXVlOiBzdHJpbmcsIG1lc3NhZ2U6IFQsIG9wdGlvbnM/OiBQdWJsaXNoT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICB0aGlzLmVuc3VyZUNsaWVudCgpO1xyXG4gICAgY29uc3QgcXVldWVVcmwgPSBhd2FpdCB0aGlzLmdldFF1ZXVlVXJsKHF1ZXVlKTtcclxuXHJcbiAgICBjb25zdCBtZXNzYWdlSWQgPSB0aGlzLmdlbmVyYXRlTWVzc2FnZUlkKCk7XHJcblxyXG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBTZW5kTWVzc2FnZUNvbW1hbmQoe1xyXG4gICAgICBRdWV1ZVVybDogcXVldWVVcmwsXHJcbiAgICAgIE1lc3NhZ2VCb2R5OiBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSxcclxuICAgICAgRGVsYXlTZWNvbmRzOiBvcHRpb25zPy5kZWxheVNlY29uZHMsXHJcbiAgICAgIE1lc3NhZ2VHcm91cElkOiBvcHRpb25zPy5tZXNzYWdlR3JvdXBJZCxcclxuICAgICAgTWVzc2FnZURlZHVwbGljYXRpb25JZDogb3B0aW9ucz8uZGVkdXBsaWNhdGlvbklkIHx8IG1lc3NhZ2VJZCxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQhLnNlbmQoY29tbWFuZCk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2UuTWVzc2FnZUlkIHx8IG1lc3NhZ2VJZDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHB1Ymxpc2hCYXRjaDxUID0gdW5rbm93bj4ocXVldWU6IHN0cmluZywgbWVzc2FnZXM6IFRbXSwgb3B0aW9ucz86IFB1Ymxpc2hPcHRpb25zKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xyXG4gICAgdGhpcy5lbnN1cmVDbGllbnQoKTtcclxuICAgIGNvbnN0IHF1ZXVlVXJsID0gYXdhaXQgdGhpcy5nZXRRdWV1ZVVybChxdWV1ZSk7XHJcblxyXG4gICAgY29uc3QgZW50cmllcyA9IG1lc3NhZ2VzLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+ICh7XHJcbiAgICAgIElkOiBgJHtpbmRleH1gLFxyXG4gICAgICBNZXNzYWdlQm9keTogSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksXHJcbiAgICAgIERlbGF5U2Vjb25kczogb3B0aW9ucz8uZGVsYXlTZWNvbmRzLFxyXG4gICAgICBNZXNzYWdlR3JvdXBJZDogb3B0aW9ucz8ubWVzc2FnZUdyb3VwSWQsXHJcbiAgICAgIE1lc3NhZ2VEZWR1cGxpY2F0aW9uSWQ6IG9wdGlvbnM/LmRlZHVwbGljYXRpb25JZCB8fCB0aGlzLmdlbmVyYXRlTWVzc2FnZUlkKCksXHJcbiAgICB9KSk7XHJcblxyXG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBTZW5kTWVzc2FnZUJhdGNoQ29tbWFuZCh7XHJcbiAgICAgIFF1ZXVlVXJsOiBxdWV1ZVVybCxcclxuICAgICAgRW50cmllczogZW50cmllcyxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQhLnNlbmQoY29tbWFuZCk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2UuU3VjY2Vzc2Z1bD8ubWFwKChzKSA9PiBzLk1lc3NhZ2VJZCB8fCBzLklkIHx8IFwiXCIpIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY29uc3VtZTxUID0gdW5rbm93bj4oXHJcbiAgICBxdWV1ZTogc3RyaW5nLFxyXG4gICAgaGFuZGxlcjogKG1lc3NhZ2U6IFF1ZXVlTWVzc2FnZTxUPikgPT4gUHJvbWlzZTx2b2lkPixcclxuICAgIG9wdGlvbnM/OiBDb25zdW1lT3B0aW9uc1xyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5lbnN1cmVDbGllbnQoKTtcclxuICAgIGNvbnN0IHF1ZXVlVXJsID0gYXdhaXQgdGhpcy5nZXRRdWV1ZVVybChxdWV1ZSk7XHJcblxyXG4gICAgdGhpcy5jb25zdW1pbmcuc2V0KHF1ZXVlLCB0cnVlKTtcclxuXHJcbiAgICBjb25zdCBwb2xsID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICB3aGlsZSAodGhpcy5jb25zdW1pbmcuZ2V0KHF1ZXVlKSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gbmV3IFJlY2VpdmVNZXNzYWdlQ29tbWFuZCh7XHJcbiAgICAgICAgICAgIFF1ZXVlVXJsOiBxdWV1ZVVybCxcclxuICAgICAgICAgICAgTWF4TnVtYmVyT2ZNZXNzYWdlczogb3B0aW9ucz8ucHJlZmV0Y2ggfHwgMTAsXHJcbiAgICAgICAgICAgIFdhaXRUaW1lU2Vjb25kczogb3B0aW9ucz8ud2FpdFRpbWVTZWNvbmRzIHx8IDIwLFxyXG4gICAgICAgICAgICBWaXNpYmlsaXR5VGltZW91dDogb3B0aW9ucz8udmlzaWJpbGl0eVRpbWVvdXQgfHwgMzAsXHJcbiAgICAgICAgICAgIEF0dHJpYnV0ZU5hbWVzOiBbXCJBbGxcIl0sXHJcbiAgICAgICAgICAgIE1lc3NhZ2VBdHRyaWJ1dGVOYW1lczogW1wiQWxsXCJdLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudCEuc2VuZChjb21tYW5kKTtcclxuXHJcbiAgICAgICAgICBpZiAocmVzcG9uc2UuTWVzc2FnZXMgJiYgcmVzcG9uc2UuTWVzc2FnZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1zZyBvZiByZXNwb25zZS5NZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXVlTWVzc2FnZTogUXVldWVNZXNzYWdlPFQ+ID0ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IG1zZy5NZXNzYWdlSWQgfHwgdGhpcy5nZW5lcmF0ZU1lc3NhZ2VJZCgpLFxyXG4gICAgICAgICAgICAgICAgYm9keTogSlNPTi5wYXJzZShtc2cuQm9keSB8fCBcInt9XCIpIGFzIFQsXHJcbiAgICAgICAgICAgICAgICByYXc6IHsgbWVzc2FnZTogbXNnLCBxdWV1ZVVybCB9LFxyXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWRBdDogbmV3IERhdGUoKSxcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlcihxdWV1ZU1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiW1NRU10gRXJyb3IgcHJvY2Vzc2luZyBtZXNzYWdlOlwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbU1FTXSBQb2xsaW5nIGVycm9yOlwiLCBlcnJvcik7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnNsZWVwKDUwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBwb2xsKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhY2sobWVzc2FnZTogUXVldWVNZXNzYWdlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmVuc3VyZUNsaWVudCgpO1xyXG4gICAgY29uc3QgeyBtZXNzYWdlOiBtc2csIHF1ZXVlVXJsIH0gPSBtZXNzYWdlLnJhdyBhcyB7IG1lc3NhZ2U6IE1lc3NhZ2U7IHF1ZXVlVXJsOiBzdHJpbmcgfTtcclxuXHJcbiAgICBpZiAoIW1zZy5SZWNlaXB0SGFuZGxlKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIltTUVNdIE1lc3NhZ2UgaGFzIG5vIFJlY2VpcHRIYW5kbGVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBEZWxldGVNZXNzYWdlQ29tbWFuZCh7XHJcbiAgICAgIFF1ZXVlVXJsOiBxdWV1ZVVybCxcclxuICAgICAgUmVjZWlwdEhhbmRsZTogbXNnLlJlY2VpcHRIYW5kbGUsXHJcbiAgICB9KTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmNsaWVudCEuc2VuZChjb21tYW5kKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5hY2sobWVzc2FnZTogUXVldWVNZXNzYWdlLCBfcmVxdWV1ZSA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIFNRUyBhdXRvbWF0aWNhbWVudGUgcmV0b3JuYSBhIG1lbnNhZ2VtIHBhcmEgYSBmaWxhIGFww7NzIG8gdmlzaWJpbGl0eSB0aW1lb3V0XHJcbiAgICAvLyBOw6NvIMOpIG5lY2Vzc8OhcmlvIGZhemVyIG5hZGEgYXF1aVxyXG4gICAgY29uc29sZS53YXJuKFwiW1NRU10gbmFjayBjYWxsZWQgLSBtZXNzYWdlIHdpbGwgYmUgcmVkZWxpdmVyZWQgYWZ0ZXIgdmlzaWJpbGl0eSB0aW1lb3V0XCIpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0UXVldWVMZW5ndGgocXVldWU6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICB0aGlzLmVuc3VyZUNsaWVudCgpO1xyXG4gICAgY29uc3QgcXVldWVVcmwgPSBhd2FpdCB0aGlzLmdldFF1ZXVlVXJsKHF1ZXVlKTtcclxuXHJcbiAgICBjb25zdCBjb21tYW5kID0gbmV3IEdldFF1ZXVlQXR0cmlidXRlc0NvbW1hbmQoe1xyXG4gICAgICBRdWV1ZVVybDogcXVldWVVcmwsXHJcbiAgICAgIEF0dHJpYnV0ZU5hbWVzOiBbXCJBcHByb3hpbWF0ZU51bWJlck9mTWVzc2FnZXNcIl0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50IS5zZW5kKGNvbW1hbmQpO1xyXG4gICAgcmV0dXJuIHBhcnNlSW50KHJlc3BvbnNlLkF0dHJpYnV0ZXM/LkFwcHJveGltYXRlTnVtYmVyT2ZNZXNzYWdlcyB8fCBcIjBcIiwgMTApO1xyXG4gIH1cclxuXHJcbiAgc3RvcENvbnN1bWluZyhxdWV1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN1bWluZy5zZXQocXVldWUsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0UXVldWVVcmwocXVldWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBpZiAodGhpcy5xdWV1ZVVybHMuaGFzKHF1ZXVlKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5xdWV1ZVVybHMuZ2V0KHF1ZXVlKSE7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgY29tbWFuZCA9IG5ldyBHZXRRdWV1ZVVybENvbW1hbmQoeyBRdWV1ZU5hbWU6IHF1ZXVlIH0pO1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50IS5zZW5kKGNvbW1hbmQpO1xyXG5cclxuICAgICAgaWYgKHJlc3BvbnNlLlF1ZXVlVXJsKSB7XHJcbiAgICAgICAgdGhpcy5xdWV1ZVVybHMuc2V0KHF1ZXVlLCByZXNwb25zZS5RdWV1ZVVybCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLlF1ZXVlVXJsO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVRdWV1ZShxdWV1ZSk7XHJcbiAgICAgIHJldHVybiB0aGlzLnF1ZXVlVXJscy5nZXQocXVldWUpITtcclxuICAgIH1cclxuXHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFtTUVNdIENvdWxkIG5vdCBnZXQgVVJMIGZvciBxdWV1ZTogJHtxdWV1ZX1gKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW5zdXJlQ2xpZW50KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNsaWVudCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJbU1FTXSBOb3QgY29ubmVjdGVkLiBDYWxsIGNvbm5lY3QoKSBmaXJzdC5cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlTWVzc2FnZUlkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTUpfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xyXG4gIH1cclxufVxyXG5cclxuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseError = void 0;
|
|
4
|
+
class BaseError extends Error {
|
|
5
|
+
constructor(message, statusCode = 500) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.statusCode = statusCode;
|
|
8
|
+
this.name = this.constructor.name;
|
|
9
|
+
Error.captureStackTrace(this, this.constructor);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.BaseError = BaseError;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc2hhcmVkL3V0aWxzL0Jhc2VFcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFhLFNBQVUsU0FBUSxLQUFLO0lBR2xDLFlBQVksT0FBZSxFQUFFLGFBQXFCLEdBQUc7UUFDbkQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNsQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0Y7QUFURCw4QkFTQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBCYXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1c0NvZGU6IG51bWJlciA9IDUwMCkge1xyXG4gICAgc3VwZXIobWVzc2FnZSk7XHJcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xyXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NotFound = void 0;
|
|
4
|
+
const BaseError_1 = require("./BaseError");
|
|
5
|
+
class NotFound extends BaseError_1.BaseError {
|
|
6
|
+
constructor(message, statusCode = 404) {
|
|
7
|
+
super(`Not found: ${message}`, statusCode);
|
|
8
|
+
this.name = this.constructor.name;
|
|
9
|
+
Error.captureStackTrace(this, this.constructor);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.NotFound = NotFound;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm90Rm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zaGFyZWQvdXRpbHMvTm90Rm91bmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXdDO0FBRXhDLE1BQWEsUUFBUyxTQUFRLHFCQUFTO0lBQ3JDLFlBQVksT0FBZSxFQUFFLGFBQXFCLEdBQUc7UUFDbkQsS0FBSyxDQUFDLGNBQWMsT0FBTyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNsQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0Y7QUFORCw0QkFNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCIuL0Jhc2VFcnJvclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE5vdEZvdW5kIGV4dGVuZHMgQmFzZUVycm9yIHtcclxuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1c0NvZGU6IG51bWJlciA9IDQwNCkge1xyXG4gICAgc3VwZXIoYE5vdCBmb3VuZDogJHttZXNzYWdlfWAsIHN0YXR1c0NvZGUpO1xyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xyXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XHJcbiAgfVxyXG59Il19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NotFoundKey = void 0;
|
|
4
|
+
const BaseError_1 = require("./BaseError");
|
|
5
|
+
class NotFoundKey extends BaseError_1.BaseError {
|
|
6
|
+
constructor(provider, statusCode = 400) {
|
|
7
|
+
super(`Key not found for provider: ${provider}`, statusCode);
|
|
8
|
+
this.name = this.constructor.name;
|
|
9
|
+
Error.captureStackTrace(this, this.constructor);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.NotFoundKey = NotFoundKey;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm90Rm91bmRLZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zaGFyZWQvdXRpbHMvTm90Rm91bmRLZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXdDO0FBRXhDLE1BQWEsV0FBWSxTQUFRLHFCQUFTO0lBQ3hDLFlBQVksUUFBZ0IsRUFBRSxhQUFxQixHQUFHO1FBQ3BELEtBQUssQ0FBQywrQkFBK0IsUUFBUSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNsQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0Y7QUFORCxrQ0FNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCIuL0Jhc2VFcnJvclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE5vdEZvdW5kS2V5IGV4dGVuZHMgQmFzZUVycm9yIHtcclxuICBjb25zdHJ1Y3Rvcihwcm92aWRlcjogc3RyaW5nLCBzdGF0dXNDb2RlOiBudW1iZXIgPSA0MDApIHtcclxuICAgIHN1cGVyKGBLZXkgbm90IGZvdW5kIGZvciBwcm92aWRlcjogJHtwcm92aWRlcn1gLCBzdGF0dXNDb2RlKTtcclxuICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcclxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xyXG4gIH1cclxufSJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NotSupport = void 0;
|
|
4
|
+
const BaseError_1 = require("./BaseError");
|
|
5
|
+
class NotSupport extends BaseError_1.BaseError {
|
|
6
|
+
constructor(message, statusCode = 400) {
|
|
7
|
+
super(message, statusCode);
|
|
8
|
+
this.name = this.constructor.name;
|
|
9
|
+
Error.captureStackTrace(this, this.constructor);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.NotSupport = NotSupport;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm90U3VwcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NoYXJlZC91dGlscy9Ob3RTdXBwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF3QztBQUV4QyxNQUFhLFVBQVcsU0FBUSxxQkFBUztJQUN2QyxZQUFZLE9BQWUsRUFBRSxhQUFxQixHQUFHO1FBQ25ELEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNsQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0Y7QUFORCxnQ0FNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCIuL0Jhc2VFcnJvclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE5vdFN1cHBvcnQgZXh0ZW5kcyBCYXNlRXJyb3Ige1xyXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzQ29kZTogbnVtYmVyID0gNDAwKSB7XHJcbiAgICBzdXBlcihtZXNzYWdlLCBzdGF0dXNDb2RlKTtcclxuICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcclxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xyXG4gIH1cclxufVxyXG5cclxuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NotSupported = void 0;
|
|
4
|
+
const BaseError_1 = require("./BaseError");
|
|
5
|
+
class NotSupported extends BaseError_1.BaseError {
|
|
6
|
+
constructor(message, statusCode = 400) {
|
|
7
|
+
super(message, statusCode);
|
|
8
|
+
this.name = this.constructor.name;
|
|
9
|
+
Error.captureStackTrace(this, this.constructor);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.NotSupported = NotSupported;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm90U3VwcG9ydGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc2hhcmVkL3V0aWxzL05vdFN1cHBvcnRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBd0M7QUFFeEMsTUFBYSxZQUFhLFNBQVEscUJBQVM7SUFDekMsWUFBWSxPQUFlLEVBQUUsYUFBcUIsR0FBRztRQUNuRCxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDbEMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBTkQsb0NBTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tIFwiLi9CYXNlRXJyb3JcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBOb3RTdXBwb3J0ZWQgZXh0ZW5kcyBCYXNlRXJyb3Ige1xyXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzQ29kZTogbnVtYmVyID0gNDAwKSB7XHJcbiAgICBzdXBlcihtZXNzYWdlLCBzdGF0dXNDb2RlKTtcclxuICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcclxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xyXG4gIH1cclxufVxyXG5cclxuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UnauthorizedAccess = void 0;
|
|
4
|
+
const BaseError_1 = require("./BaseError");
|
|
5
|
+
class UnauthorizedAccess extends BaseError_1.BaseError {
|
|
6
|
+
constructor(provider, statusCode = 401) {
|
|
7
|
+
super(`Unauthorized to access the provider: ${provider}`, statusCode);
|
|
8
|
+
this.name = this.constructor.name;
|
|
9
|
+
Error.captureStackTrace(this, this.constructor);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.UnauthorizedAccess = UnauthorizedAccess;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5hdXRob3JpemVkQWNjZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc2hhcmVkL3V0aWxzL1VuYXV0aG9yaXplZEFjY2Vzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBd0M7QUFFeEMsTUFBYSxrQkFBbUIsU0FBUSxxQkFBUztJQUMvQyxZQUFZLFFBQWdCLEVBQUUsYUFBcUIsR0FBRztRQUNwRCxLQUFLLENBQUMsd0NBQXdDLFFBQVEsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDbEMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBTkQsZ0RBTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tIFwiLi9CYXNlRXJyb3JcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBVbmF1dGhvcml6ZWRBY2Nlc3MgZXh0ZW5kcyBCYXNlRXJyb3Ige1xyXG4gIGNvbnN0cnVjdG9yKHByb3ZpZGVyOiBzdHJpbmcsIHN0YXR1c0NvZGU6IG51bWJlciA9IDQwMSkge1xyXG4gICAgc3VwZXIoYFVuYXV0aG9yaXplZCB0byBhY2Nlc3MgdGhlIHByb3ZpZGVyOiAke3Byb3ZpZGVyfWAsIHN0YXR1c0NvZGUpO1xyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xyXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XHJcbiAgfVxyXG59Il19
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mutualbankutils",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MutualbankUtils - Queue adapters and shared utilities",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"prepublishOnly": "npm run build"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"queue",
|
|
16
|
+
"rabbitmq",
|
|
17
|
+
"sqs",
|
|
18
|
+
"adapter"
|
|
19
|
+
],
|
|
20
|
+
"author": "",
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@aws-sdk/client-sqs": "^3.956.0",
|
|
24
|
+
"amqplib": "^0.10.9"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@types/amqplib": "^0.10.8",
|
|
28
|
+
"typescript": "^5.0.0"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|