@6thbridge/utils 1.9.0-1 → 1.9.0-3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/lib/actions/database-session.action.d.ts +13 -0
  2. package/lib/actions/database-session.action.js +77 -0
  3. package/lib/actions/database-session.action.js.map +1 -0
  4. package/lib/actions/database-session.action.test.d.ts +1 -0
  5. package/lib/actions/database-session.action.test.js +137 -0
  6. package/lib/actions/database-session.action.test.js.map +1 -0
  7. package/lib/actions/index.d.ts +2 -0
  8. package/lib/actions/index.js +2 -0
  9. package/lib/actions/index.js.map +1 -1
  10. package/lib/actions/lock.action.d.ts +16 -0
  11. package/lib/actions/lock.action.js +171 -0
  12. package/lib/actions/lock.action.js.map +1 -0
  13. package/lib/actions/lock.action.test.d.ts +1 -0
  14. package/lib/actions/lock.action.test.js +63 -0
  15. package/lib/actions/lock.action.test.js.map +1 -0
  16. package/lib/data/rabbitmq/index.d.ts +3 -2
  17. package/lib/data/rabbitmq/index.js +3 -0
  18. package/lib/data/rabbitmq/index.js.map +1 -1
  19. package/lib/database/MongoDBRepository.d.ts +27 -120
  20. package/lib/database/MongoDBRepository.js +49 -41
  21. package/lib/database/MongoDBRepository.js.map +1 -1
  22. package/lib/database/MongoDBTypeRepository.d.ts +51 -0
  23. package/lib/database/MongoDBTypeRepository.js +90 -0
  24. package/lib/database/MongoDBTypeRepository.js.map +1 -0
  25. package/lib/database/index.d.ts +2 -0
  26. package/lib/database/index.js +4 -0
  27. package/lib/database/index.js.map +1 -1
  28. package/lib/index.d.ts +4 -1
  29. package/lib/index.js +25 -16
  30. package/lib/index.js.map +1 -1
  31. package/lib/logger/batching.d.ts +7 -0
  32. package/lib/logger/batching.js +90 -0
  33. package/lib/logger/batching.js.map +1 -0
  34. package/lib/logger/batching.spec.d.ts +1 -0
  35. package/lib/logger/batching.spec.js +108 -0
  36. package/lib/logger/batching.spec.js.map +1 -0
  37. package/lib/logger/index.d.ts +1 -0
  38. package/lib/logger/index.js +5 -1
  39. package/lib/logger/index.js.map +1 -1
  40. package/lib/logger/logger-test.js +53 -24
  41. package/lib/logger/logger-test.js.map +1 -1
  42. package/lib/logger/logger.js +8 -23
  43. package/lib/logger/logger.js.map +1 -1
  44. package/lib/logger/redact.js +1 -1
  45. package/lib/logger/redact.js.map +1 -1
  46. package/lib/logger/test.spec.js +57 -0
  47. package/lib/logger/test.spec.js.map +1 -1
  48. package/lib/middlewares/common.js +7 -7
  49. package/lib/middlewares/common.js.map +1 -1
  50. package/lib/middlewares/error.middleware.d.ts +12 -0
  51. package/lib/middlewares/error.middleware.js +57 -0
  52. package/lib/middlewares/error.middleware.js.map +1 -0
  53. package/lib/middlewares/error.middleware.test.d.ts +1 -0
  54. package/lib/middlewares/error.middleware.test.js +45 -0
  55. package/lib/middlewares/error.middleware.test.js.map +1 -0
  56. package/lib/middlewares/express.d.ts +1 -0
  57. package/lib/middlewares/express.js +43 -9
  58. package/lib/middlewares/express.js.map +1 -1
  59. package/lib/middlewares/index.js +17 -7
  60. package/lib/middlewares/index.js.map +1 -1
  61. package/lib/monitoring/index.js +3 -3
  62. package/lib/monitoring/index.js.map +1 -1
  63. package/lib/monitoring/rollbar.js +2 -2
  64. package/lib/monitoring/rollbar.js.map +1 -1
  65. package/lib/pipelines/index.d.ts +3 -0
  66. package/lib/pipelines/index.js +20 -0
  67. package/lib/pipelines/index.js.map +1 -0
  68. package/lib/pipelines/parallel-pipeline.d.ts +7 -0
  69. package/lib/pipelines/parallel-pipeline.js +49 -0
  70. package/lib/pipelines/parallel-pipeline.js.map +1 -0
  71. package/lib/pipelines/pipeline-step.d.ts +5 -0
  72. package/lib/pipelines/pipeline-step.js +3 -0
  73. package/lib/pipelines/pipeline-step.js.map +1 -0
  74. package/lib/pipelines/pipeline.example.d.ts +2 -0
  75. package/lib/pipelines/pipeline.example.js +96 -0
  76. package/lib/pipelines/pipeline.example.js.map +1 -0
  77. package/lib/pipelines/pipelines.test.d.ts +1 -0
  78. package/lib/pipelines/pipelines.test.js +204 -0
  79. package/lib/pipelines/pipelines.test.js.map +1 -0
  80. package/lib/pipelines/pipelines.typecheck.d.ts +1 -0
  81. package/lib/pipelines/pipelines.typecheck.js +68 -0
  82. package/lib/pipelines/pipelines.typecheck.js.map +1 -0
  83. package/lib/pipelines/serial-pipeline.d.ts +7 -0
  84. package/lib/pipelines/serial-pipeline.js +39 -0
  85. package/lib/pipelines/serial-pipeline.js.map +1 -0
  86. package/lib/responses/express.d.ts +1 -1
  87. package/lib/responses/express.js +4 -4
  88. package/lib/responses/express.js.map +1 -1
  89. package/lib/responses/index.js +17 -7
  90. package/lib/responses/index.js.map +1 -1
  91. package/lib/schemas/country.schema.d.ts +5 -0
  92. package/lib/schemas/country.schema.js +15 -0
  93. package/lib/schemas/country.schema.js.map +1 -0
  94. package/lib/schemas/index.d.ts +2 -0
  95. package/lib/schemas/index.js +21 -0
  96. package/lib/schemas/index.js.map +1 -0
  97. package/lib/tsconfig.tsbuildinfo +1 -1
  98. package/lib/types/context.entity.d.ts +16 -0
  99. package/lib/types/context.entity.js +61 -8
  100. package/lib/types/context.entity.js.map +1 -1
  101. package/lib/types/integrations/credential.entity.d.ts +1 -0
  102. package/lib/types/integrations/credential.entity.js +5 -0
  103. package/lib/types/integrations/credential.entity.js.map +1 -1
  104. package/lib/types/integrations/integration.entity.d.ts +5 -1
  105. package/lib/types/integrations/integration.entity.js +10 -1
  106. package/lib/types/integrations/integration.entity.js.map +1 -1
  107. package/lib/types/route.entity.d.ts +1 -1
  108. package/lib/utils/amount.js +0 -1
  109. package/lib/utils/amount.js.map +1 -1
  110. package/lib/utils/database.d.ts +2 -0
  111. package/lib/utils/database.js +35 -6
  112. package/lib/utils/database.js.map +1 -1
  113. package/lib/utils/database.spec.js +229 -185
  114. package/lib/utils/database.spec.js.map +1 -1
  115. package/lib/utils/file.d.ts +3 -2
  116. package/lib/utils/file.js.map +1 -1
  117. package/lib/utils/helper.d.ts +2 -0
  118. package/lib/utils/helper.js +20 -0
  119. package/lib/utils/helper.js.map +1 -1
  120. package/lib/utils/helper.spec.js +56 -0
  121. package/lib/utils/helper.spec.js.map +1 -1
  122. package/lib/utils/http.d.ts +3 -4
  123. package/lib/utils/http.js +68 -44
  124. package/lib/utils/http.js.map +1 -1
  125. package/lib/utils/http.spec.d.ts +1 -0
  126. package/lib/utils/http.spec.js +121 -0
  127. package/lib/utils/http.spec.js.map +1 -0
  128. package/lib/utils/phoneNumber.d.ts +2 -2
  129. package/lib/utils/phoneNumber.js +17 -7
  130. package/lib/utils/phoneNumber.js.map +1 -1
  131. package/lib/utils/phoneNumber.spec.js +20 -0
  132. package/lib/utils/phoneNumber.spec.js.map +1 -1
  133. package/lib/utils/validator.d.ts +3 -2
  134. package/lib/utils/validator.js +40 -14
  135. package/lib/utils/validator.js.map +1 -1
  136. package/lib/utils/validator.spec.js +130 -14
  137. package/lib/utils/validator.spec.js.map +1 -1
  138. package/package.json +30 -23
  139. package/readme.md +37 -2
@@ -0,0 +1,13 @@
1
+ import { ContextEntity } from '../types';
2
+ import type { ClientSession, Model } from 'mongoose';
3
+ import type { Lock } from 'redlock';
4
+ export type DatabaseSessionActionOptions = {
5
+ lockKey?: string[];
6
+ lockTTLInSeconds?: number;
7
+ };
8
+ export declare class DatabaseSessionAction {
9
+ private static model;
10
+ static configure(model: Model<any>): void;
11
+ static withTransaction<T>(context: ContextEntity, action: (session: ClientSession | null, lock: Lock | null) => Promise<T>, options?: DatabaseSessionActionOptions): Promise<T>;
12
+ private static getModel;
13
+ }
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DatabaseSessionAction = void 0;
13
+ const lock_action_1 = require("./lock.action");
14
+ class DatabaseSessionAction {
15
+ static configure(model) {
16
+ this.model = model;
17
+ }
18
+ static withTransaction(context, action, options) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ var _a, _b;
21
+ let lock = null;
22
+ let session = null;
23
+ try {
24
+ if ((_a = options === null || options === void 0 ? void 0 : options.lockKey) === null || _a === void 0 ? void 0 : _a.length) {
25
+ lock = yield lock_action_1.LockAction.acquireMultipleLocks(context, options.lockKey, options.lockTTLInSeconds || 10);
26
+ }
27
+ if (process.env.NODE_ENV !== 'production') {
28
+ console.log('!!! Database session is not started in non-production env');
29
+ return yield action(null, lock);
30
+ }
31
+ console.log('!!! Using Database session in prod env');
32
+ session = yield this.getModel().startSession();
33
+ session.startTransaction();
34
+ const response = yield action(session, lock);
35
+ yield session.commitTransaction();
36
+ return response;
37
+ }
38
+ catch (error) {
39
+ if (session) {
40
+ try {
41
+ yield session.abortTransaction();
42
+ }
43
+ catch (cleanupError) {
44
+ context.logger.exception(cleanupError, { operation: 'endSession' });
45
+ }
46
+ }
47
+ throw error;
48
+ }
49
+ finally {
50
+ if (session) {
51
+ try {
52
+ yield session.endSession();
53
+ }
54
+ catch (cleanupError) {
55
+ context.logger.exception(cleanupError, { operation: 'endSession' });
56
+ }
57
+ }
58
+ if (lock && ((_b = options === null || options === void 0 ? void 0 : options.lockKey) === null || _b === void 0 ? void 0 : _b.length)) {
59
+ try {
60
+ yield lock_action_1.LockAction.releaseMultipleLock(context, lock, options.lockKey);
61
+ }
62
+ catch (cleanupError) {
63
+ context.logger.exception(cleanupError, { operation: 'releaseMultipleLock', keys: options.lockKey });
64
+ }
65
+ }
66
+ }
67
+ });
68
+ }
69
+ static getModel() {
70
+ if (!this.model)
71
+ throw new Error('DatabaseSessionAction has not been configured');
72
+ return this.model;
73
+ }
74
+ }
75
+ exports.DatabaseSessionAction = DatabaseSessionAction;
76
+ DatabaseSessionAction.model = null;
77
+ //# sourceMappingURL=database-session.action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-session.action.js","sourceRoot":"","sources":["../../src/actions/database-session.action.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,+CAA2C;AAO3C,MAAa,qBAAqB;IAGhC,MAAM,CAAC,SAAS,CAAC,KAAiB;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,MAAM,CAAO,eAAe,CAC1B,OAAsB,EACtB,MAAwE,EACxE,OAAsC;;;YAEtC,IAAI,IAAI,GAAgB,IAAI,CAAC;YAC7B,IAAI,OAAO,GAAyB,IAAI,CAAC;YAEzC,IAAI,CAAC;gBACH,IAAI,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,0CAAE,MAAM,EAAE,CAAC;oBAC7B,IAAI,GAAG,MAAM,wBAAU,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;gBACzG,CAAC;gBAED,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;oBAC1C,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;oBACzE,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAClC,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;gBACtD,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,CAAC;gBAC/C,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBAE3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC7C,MAAM,OAAO,CAAC,iBAAiB,EAAE,CAAC;gBAClC,OAAO,QAAQ,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC;wBACH,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC;oBACnC,CAAC;oBAAC,OAAO,YAAY,EAAE,CAAC;wBACtB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,YAAqB,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;oBAC/E,CAAC;gBACH,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;oBAAS,CAAC;gBACT,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC;wBACH,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;oBAC7B,CAAC;oBAAC,OAAO,YAAY,EAAE,CAAC;wBACtB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,YAAqB,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;oBAC/E,CAAC;gBACH,CAAC;gBAED,IAAI,IAAI,KAAI,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,0CAAE,MAAM,CAAA,EAAE,CAAC;oBACrC,IAAI,CAAC;wBACH,MAAM,wBAAU,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;oBACvE,CAAC;oBAAC,OAAO,YAAY,EAAE,CAAC;wBACtB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,YAAqB,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC/G,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;KAAA;IAEO,MAAM,CAAC,QAAQ;QACrB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAElF,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;;AAhEH,sDAiEC;AAhEgB,2BAAK,GAAsB,IAAI,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const types_1 = require("../types");
16
+ const database_session_action_1 = require("./database-session.action");
17
+ const redlock_1 = __importDefault(require("redlock"));
18
+ const lock_action_1 = require("./lock.action");
19
+ const createLogger = () => ({
20
+ exception: jest.fn(),
21
+ });
22
+ const createContext = (logger) => {
23
+ const context = new types_1.ContextEntity();
24
+ context.logger = logger;
25
+ return context;
26
+ };
27
+ const createSession = (events) => ({
28
+ startTransaction: jest.fn(() => { events.push('start'); }),
29
+ commitTransaction: jest.fn(() => __awaiter(void 0, void 0, void 0, function* () { events.push('commit'); })),
30
+ abortTransaction: jest.fn(() => __awaiter(void 0, void 0, void 0, function* () { events.push('abort'); })),
31
+ endSession: jest.fn(() => __awaiter(void 0, void 0, void 0, function* () { events.push('end'); })),
32
+ });
33
+ const configureActions = (session, events) => {
34
+ const lock = { release: jest.fn(() => __awaiter(void 0, void 0, void 0, function* () { events.push('release'); })) };
35
+ const redisClient = { getRedisCommander: jest.fn().mockReturnValue({}) };
36
+ lock_action_1.LockAction.configure(redisClient);
37
+ jest.spyOn(redlock_1.default.prototype, 'acquire').mockImplementation(() => __awaiter(void 0, void 0, void 0, function* () {
38
+ events.push('acquire');
39
+ return lock;
40
+ }));
41
+ const model = {
42
+ startSession: jest.fn(() => __awaiter(void 0, void 0, void 0, function* () {
43
+ events.push('session');
44
+ return session;
45
+ })),
46
+ };
47
+ database_session_action_1.DatabaseSessionAction.configure(model);
48
+ return { redisClient };
49
+ };
50
+ describe('DatabaseSessionAction', () => {
51
+ const originalNodeEnv = process.env.NODE_ENV;
52
+ beforeEach(() => {
53
+ process.env.NODE_ENV = 'production';
54
+ });
55
+ afterEach(() => jest.restoreAllMocks());
56
+ afterAll(() => {
57
+ process.env.NODE_ENV = originalNodeEnv;
58
+ });
59
+ it('commits the callback result and cleans up its session and lock once', () => __awaiter(void 0, void 0, void 0, function* () {
60
+ const events = [];
61
+ const session = createSession(events);
62
+ configureActions(session, events);
63
+ yield expect(database_session_action_1.DatabaseSessionAction.withTransaction(createContext(createLogger()), (activeSession) => __awaiter(void 0, void 0, void 0, function* () {
64
+ expect(activeSession).toBe(session);
65
+ events.push('action');
66
+ return 'done';
67
+ }), { lockKey: ['wallet:1'], lockTTLInSeconds: 5 })).resolves.toBe('done');
68
+ expect(events).toEqual(['acquire', 'session', 'start', 'action', 'commit', 'end', 'release']);
69
+ expect(session.abortTransaction).not.toHaveBeenCalled();
70
+ }));
71
+ it('skips sessions outside production while preserving the configured lock', () => __awaiter(void 0, void 0, void 0, function* () {
72
+ process.env.NODE_ENV = 'development';
73
+ const events = [];
74
+ const session = createSession(events);
75
+ configureActions(session, events);
76
+ yield expect(database_session_action_1.DatabaseSessionAction.withTransaction(createContext(createLogger()), (activeSession) => __awaiter(void 0, void 0, void 0, function* () {
77
+ expect(activeSession).toBeNull();
78
+ events.push('action');
79
+ return 'done';
80
+ }), { lockKey: ['wallet:1'] })).resolves.toBe('done');
81
+ expect(events).toEqual(['acquire', 'action', 'release']);
82
+ expect(session.startTransaction).not.toHaveBeenCalled();
83
+ }));
84
+ it('aborts the transaction and still cleans up when the callback fails', () => __awaiter(void 0, void 0, void 0, function* () {
85
+ const events = [];
86
+ const session = createSession(events);
87
+ configureActions(session, events);
88
+ const error = new Error('write failed');
89
+ yield expect(database_session_action_1.DatabaseSessionAction.withTransaction(createContext(createLogger()), () => __awaiter(void 0, void 0, void 0, function* () {
90
+ events.push('action');
91
+ throw error;
92
+ }), { lockKey: ['wallet:1'] })).rejects.toThrow(error);
93
+ expect(events).toEqual(['acquire', 'session', 'start', 'action', 'abort', 'end', 'release']);
94
+ }));
95
+ it('aborts and cleans up when commit fails', () => __awaiter(void 0, void 0, void 0, function* () {
96
+ const events = [];
97
+ const session = createSession(events);
98
+ const error = new Error('commit failed');
99
+ session.commitTransaction.mockImplementation(() => __awaiter(void 0, void 0, void 0, function* () {
100
+ events.push('commit');
101
+ throw error;
102
+ }));
103
+ configureActions(session, events);
104
+ yield expect(database_session_action_1.DatabaseSessionAction.withTransaction(createContext(createLogger()), () => __awaiter(void 0, void 0, void 0, function* () { return 'done'; }))).rejects.toThrow(error);
105
+ expect(events).toEqual(['session', 'start', 'commit', 'abort', 'end']);
106
+ }));
107
+ it('releases the lock when session creation fails', () => __awaiter(void 0, void 0, void 0, function* () {
108
+ const events = [];
109
+ const session = createSession(events);
110
+ configureActions(session, events);
111
+ const error = new Error('session unavailable');
112
+ const model = { startSession: jest.fn().mockRejectedValue(error) };
113
+ database_session_action_1.DatabaseSessionAction.configure(model);
114
+ yield expect(database_session_action_1.DatabaseSessionAction.withTransaction(createContext(createLogger()), () => __awaiter(void 0, void 0, void 0, function* () { return 'done'; }), { lockKey: ['wallet:1'] })).rejects.toThrow(error);
115
+ expect(events).toEqual(['acquire', 'release']);
116
+ }));
117
+ it('logs cleanup failures with the caller context logger without replacing the callback result', () => __awaiter(void 0, void 0, void 0, function* () {
118
+ const events = [];
119
+ const session = createSession(events);
120
+ const endError = new Error('end failed');
121
+ const releaseError = new Error('release failed');
122
+ session.endSession.mockRejectedValue(endError);
123
+ const logger = createLogger();
124
+ const lock = { release: jest.fn().mockRejectedValue(releaseError) };
125
+ const redisClient = { getRedisCommander: jest.fn().mockReturnValue({}) };
126
+ const model = { startSession: jest.fn().mockResolvedValue(session) };
127
+ lock_action_1.LockAction.configure(redisClient);
128
+ jest.spyOn(redlock_1.default.prototype, 'acquire').mockResolvedValue(lock);
129
+ database_session_action_1.DatabaseSessionAction.configure(model);
130
+ yield expect(database_session_action_1.DatabaseSessionAction.withTransaction(createContext(logger), () => __awaiter(void 0, void 0, void 0, function* () { return 'done'; }), { lockKey: ['wallet:1'] })).resolves.toBe('done');
131
+ expect(logger.exception).toHaveBeenCalledWith(endError, { operation: 'endSession' });
132
+ expect(logger.exception).toHaveBeenCalledWith(releaseError, expect.objectContaining({
133
+ errorCode: 'ResourceLockError',
134
+ }));
135
+ }));
136
+ });
137
+ //# sourceMappingURL=database-session.action.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-session.action.test.js","sourceRoot":"","sources":["../../src/actions/database-session.action.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ export * from './database-session.action';
2
+ export * from './lock.action';
1
3
  export * from './charge.action';
2
4
  export * from './charge.action';
3
5
  export * from './permission.action';
@@ -14,6 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./database-session.action"), exports);
18
+ __exportStar(require("./lock.action"), exports);
17
19
  __exportStar(require("./charge.action"), exports);
18
20
  __exportStar(require("./charge.action"), exports);
19
21
  __exportStar(require("./permission.action"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,kDAAiC;AACjC,sDAAqC;AACrC,iDAAgC;AAEhC,uDAAqC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C;AAC1C,gDAA8B;AAC9B,kDAAgC;AAChC,kDAAiC;AACjC,sDAAqC;AACrC,iDAAgC;AAEhC,uDAAqC"}
@@ -0,0 +1,16 @@
1
+ import { ContextEntity } from '../types';
2
+ import { RedisClient } from '../data/redis';
3
+ import Redlock from 'redlock';
4
+ import type { Lock } from 'redlock';
5
+ export type LockActionConfiguration = {
6
+ client: Redlock;
7
+ };
8
+ export declare class LockAction {
9
+ private static configuration;
10
+ static configure(redisClient: RedisClient): void;
11
+ static acquireMultipleLocks(context: ContextEntity, keys: string[], durationInSeconds: number): Promise<Lock>;
12
+ static getLock(context: ContextEntity, key: string, durationInSeconds: number): Promise<Lock>;
13
+ static releaseLock(context: ContextEntity, lock: Lock, key?: string): Promise<Lock>;
14
+ static releaseMultipleLock(context: ContextEntity, lock: Lock, keys: string[]): Promise<Lock>;
15
+ private static getConfiguration;
16
+ }
@@ -0,0 +1,171 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.LockAction = void 0;
46
+ const types_1 = require("../types");
47
+ const logger_1 = require("../logger");
48
+ const redlock_1 = __importStar(require("redlock"));
49
+ class LockAction {
50
+ static configure(redisClient) {
51
+ const client = new redlock_1.default([redisClient.getRedisCommander()], {
52
+ driftFactor: 0.01,
53
+ retryCount: 20,
54
+ retryDelay: 2000,
55
+ retryJitter: 200,
56
+ automaticExtensionThreshold: 500,
57
+ });
58
+ client.on('error', (error) => {
59
+ if (error instanceof redlock_1.ResourceLockedError) {
60
+ logger_1.logger.error('ResourceLockedError', {
61
+ logType: 'resource-locked-error',
62
+ message: error.message,
63
+ stack: new Error('resource-locked-error').stack,
64
+ });
65
+ return;
66
+ }
67
+ logger_1.logger.exception(error, {
68
+ tag: 'redlock-exception',
69
+ stack: new Error('redlock-exception').stack,
70
+ status: 400,
71
+ });
72
+ logger_1.logger.error('RedLockError', {
73
+ logType: 'red-lock-error',
74
+ message: error.message,
75
+ stack: new Error('red-lock-error').stack,
76
+ });
77
+ });
78
+ this.configuration = { client };
79
+ }
80
+ static acquireMultipleLocks(context, keys, durationInSeconds) {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ const uniqueKeys = [...new Set(keys)];
83
+ const { client } = this.getConfiguration();
84
+ try {
85
+ return yield client.acquire(uniqueKeys, durationInSeconds * 1000);
86
+ }
87
+ catch (error) {
88
+ context.logger.exception(error, {
89
+ logType: 'RedlockSecurityException',
90
+ errorCode: 'ResourceLockError',
91
+ keys,
92
+ durationInSeconds,
93
+ });
94
+ throw new types_1.CustomException({
95
+ message: `Security Exception: Oops! We are unable to get resources lock on ${keys.join('|')}. Please try again`,
96
+ errorCode: 'ResourceLockError',
97
+ statusCode: 400,
98
+ });
99
+ }
100
+ });
101
+ }
102
+ static getLock(context, key, durationInSeconds) {
103
+ return __awaiter(this, void 0, void 0, function* () {
104
+ const { client } = this.getConfiguration();
105
+ try {
106
+ return yield client.acquire([key], durationInSeconds * 1000);
107
+ }
108
+ catch (error) {
109
+ context.logger.exception(error, {
110
+ logType: 'RedlockSecurityException',
111
+ errorCode: 'ResourceLockError',
112
+ message: `Security Exception: Oops! We are unable to release lock for resource ${key}. Please try again`,
113
+ key,
114
+ durationInSeconds,
115
+ status: 499,
116
+ });
117
+ throw new types_1.CustomException({
118
+ message: `Security Exception: Oops! We are unable to get resource lock on ${key}. Please try again`,
119
+ errorCode: 'ResourceLockError',
120
+ statusCode: 400,
121
+ });
122
+ }
123
+ });
124
+ }
125
+ static releaseLock(context, lock, key) {
126
+ return __awaiter(this, void 0, void 0, function* () {
127
+ this.getConfiguration();
128
+ try {
129
+ yield lock.release();
130
+ }
131
+ catch (error) {
132
+ context.logger.exception(error, {
133
+ logType: 'RedlockSecurityException',
134
+ key,
135
+ message: `Security Exception: Oops! We are unable to release lock for resource ${key}. Please try again`,
136
+ errorCode: 'ResourceLockError',
137
+ tag: 'releaseWalletLock',
138
+ status: 499,
139
+ });
140
+ }
141
+ return lock;
142
+ });
143
+ }
144
+ static releaseMultipleLock(context, lock, keys) {
145
+ return __awaiter(this, void 0, void 0, function* () {
146
+ this.getConfiguration();
147
+ try {
148
+ yield lock.release();
149
+ }
150
+ catch (error) {
151
+ context.logger.exception(error, {
152
+ logType: 'RedlockSecurityException',
153
+ keys,
154
+ message: `Security Exception: Oops! We are unable to release lock for resources ${keys.join('|')}. Please try again`,
155
+ errorCode: 'ResourceLockError',
156
+ tag: 'releaseWalletLock',
157
+ status: 499,
158
+ });
159
+ }
160
+ return lock;
161
+ });
162
+ }
163
+ static getConfiguration() {
164
+ if (!this.configuration)
165
+ throw new Error('LockAction has not been configured');
166
+ return this.configuration;
167
+ }
168
+ }
169
+ exports.LockAction = LockAction;
170
+ LockAction.configuration = null;
171
+ //# sourceMappingURL=lock.action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.action.js","sourceRoot":"","sources":["../../src/actions/lock.action.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oCAA0D;AAE1D,sCAAmC;AACnC,mDAAuD;AAOvD,MAAa,UAAU;IAGrB,MAAM,CAAC,SAAS,CAAC,WAAwB;QACvC,MAAM,MAAM,GAAG,IAAI,iBAAO,CAAC,CAAC,WAAW,CAAC,iBAAiB,EAAS,CAAC,EAAE;YACnE,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,EAAE;YACd,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,GAAG;YAChB,2BAA2B,EAAE,GAAG;SACjC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,KAAK,YAAY,6BAAmB,EAAE,CAAC;gBACzC,eAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE;oBAClC,OAAO,EAAE,uBAAuB;oBAChC,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,KAAK,EAAE,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,KAAK;iBAChD,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,eAAM,CAAC,SAAS,CAAC,KAAK,EAAE;gBACtB,GAAG,EAAE,mBAAmB;gBACxB,KAAK,EAAE,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,KAAK;gBAC3C,MAAM,EAAE,GAAG;aACZ,CAAC,CAAC;YACH,eAAM,CAAC,KAAK,CAAC,cAAc,EAAE;gBAC3B,OAAO,EAAE,gBAAgB;gBACzB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,KAAK;aACzC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,GAAG,EAAE,MAAM,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,CAAO,oBAAoB,CAAC,OAAsB,EAAE,IAAc,EAAE,iBAAyB;;YACjG,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACtC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAE3C,IAAI,CAAC;gBACH,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAC,CAAC;YACpE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,KAAc,EAAE;oBACvC,OAAO,EAAE,0BAA0B;oBACnC,SAAS,EAAE,mBAAmB;oBAC9B,IAAI;oBACJ,iBAAiB;iBAClB,CAAC,CAAC;gBAEH,MAAM,IAAI,uBAAe,CAAC;oBACxB,OAAO,EAAE,oEAAoE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB;oBAC/G,SAAS,EAAE,mBAAmB;oBAC9B,UAAU,EAAE,GAAG;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KAAA;IAED,MAAM,CAAO,OAAO,CAAC,OAAsB,EAAE,GAAW,EAAE,iBAAyB;;YACjF,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAE3C,IAAI,CAAC;gBACH,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,KAAc,EAAE;oBACvC,OAAO,EAAE,0BAA0B;oBACnC,SAAS,EAAE,mBAAmB;oBAC9B,OAAO,EAAE,wEAAwE,GAAG,oBAAoB;oBACxG,GAAG;oBACH,iBAAiB;oBACjB,MAAM,EAAE,GAAG;iBACZ,CAAC,CAAC;gBAEH,MAAM,IAAI,uBAAe,CAAC;oBACxB,OAAO,EAAE,mEAAmE,GAAG,oBAAoB;oBACnG,SAAS,EAAE,mBAAmB;oBAC9B,UAAU,EAAE,GAAG;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KAAA;IAED,MAAM,CAAO,WAAW,CAAC,OAAsB,EAAE,IAAU,EAAE,GAAY;;YACvE,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAExB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,KAAc,EAAE;oBACvC,OAAO,EAAE,0BAA0B;oBACnC,GAAG;oBACH,OAAO,EAAE,wEAAwE,GAAG,oBAAoB;oBACxG,SAAS,EAAE,mBAAmB;oBAC9B,GAAG,EAAE,mBAAmB;oBACxB,MAAM,EAAE,GAAG;iBACZ,CAAC,CAAC;YACL,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAED,MAAM,CAAO,mBAAmB,CAAC,OAAsB,EAAE,IAAU,EAAE,IAAc;;YACjF,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAExB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,KAAc,EAAE;oBACvC,OAAO,EAAE,0BAA0B;oBACnC,IAAI;oBACJ,OAAO,EAAE,yEAAyE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB;oBACpH,SAAS,EAAE,mBAAmB;oBAC9B,GAAG,EAAE,mBAAmB;oBACxB,MAAM,EAAE,GAAG;iBACZ,CAAC,CAAC;YACL,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAEO,MAAM,CAAC,gBAAgB;QAC7B,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAE/E,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;;AA5HH,gCA6HC;AA5HgB,wBAAa,GAAmC,IAAI,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const types_1 = require("../types");
16
+ const redlock_1 = __importDefault(require("redlock"));
17
+ const lock_action_1 = require("./lock.action");
18
+ const createLogger = () => ({
19
+ exception: jest.fn(),
20
+ });
21
+ const createContext = (logger) => {
22
+ const context = new types_1.ContextEntity();
23
+ context.logger = logger;
24
+ return context;
25
+ };
26
+ const configureLockAction = () => {
27
+ const redisClient = { getRedisCommander: jest.fn().mockReturnValue({}) };
28
+ lock_action_1.LockAction.configure(redisClient);
29
+ return jest.spyOn(redlock_1.default.prototype, 'acquire');
30
+ };
31
+ describe('LockAction', () => {
32
+ afterEach(() => jest.restoreAllMocks());
33
+ it('requires configuration before use', () => __awaiter(void 0, void 0, void 0, function* () {
34
+ yield expect(lock_action_1.LockAction.getLock(createContext(createLogger()), 'wallet:1', 5)).rejects.toThrow('LockAction has not been configured');
35
+ }));
36
+ it('deduplicates keys and converts the TTL to milliseconds', () => __awaiter(void 0, void 0, void 0, function* () {
37
+ const lock = { release: jest.fn() };
38
+ const acquire = configureLockAction().mockResolvedValue(lock);
39
+ yield expect(lock_action_1.LockAction.acquireMultipleLocks(createContext(createLogger()), ['wallet:1', 'wallet:1', 'wallet:2'], 5)).resolves.toBe(lock);
40
+ expect(acquire).toHaveBeenCalledWith(['wallet:1', 'wallet:2'], 5000);
41
+ }));
42
+ it('logs acquisition failures with the caller context logger', () => __awaiter(void 0, void 0, void 0, function* () {
43
+ const error = new Error('locked');
44
+ const logger = createLogger();
45
+ configureLockAction().mockRejectedValue(error);
46
+ yield expect(lock_action_1.LockAction.getLock(createContext(logger), 'wallet:1', 5)).rejects.toEqual(expect.any(types_1.CustomException));
47
+ expect(logger.exception).toHaveBeenCalledWith(error, expect.objectContaining({
48
+ errorCode: 'ResourceLockError',
49
+ key: 'wallet:1',
50
+ }));
51
+ }));
52
+ it('logs a release failure with the caller context logger and returns the lock', () => __awaiter(void 0, void 0, void 0, function* () {
53
+ const error = new Error('release failed');
54
+ const lock = { release: jest.fn().mockRejectedValue(error) };
55
+ const logger = createLogger();
56
+ configureLockAction();
57
+ yield expect(lock_action_1.LockAction.releaseMultipleLock(createContext(logger), lock, ['wallet:1', 'wallet:1'])).resolves.toBe(lock);
58
+ expect(logger.exception).toHaveBeenCalledWith(error, expect.objectContaining({
59
+ keys: ['wallet:1', 'wallet:1'],
60
+ }));
61
+ }));
62
+ });
63
+ //# sourceMappingURL=lock.action.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.action.test.js","sourceRoot":"","sources":["../../src/actions/lock.action.test.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,7 @@ export declare class RabbitMQClient {
31
31
  private connection;
32
32
  private retryCountBeforeExit;
33
33
  private connectConfig;
34
+ static hasInstance(): boolean;
34
35
  /**
35
36
  * Get the singleton instance of RabbitMQ
36
37
  * @returns {RabbitMQClient} The singleton instance
@@ -50,8 +51,8 @@ export declare class RabbitMQClient {
50
51
  publishToExchange(exchangeName: string, routeKey: string | undefined, payload: any, options?: PublishOptions): Promise<boolean>;
51
52
  static publishToExchange(exchangeName: string, routeKey: string | undefined, payload: any, options?: PublishOptions): Promise<boolean>;
52
53
  static sendToDeadLetter(deadLetterEntity: BrokerDeadLetterPayloadEntity): Promise<boolean>;
53
- listen(queueName: string, options: any, callback: (payload: string, options: Record<string, any>) => void): Promise<void>;
54
- static listen(queueName: string, options: any, callback: (payload: string, options: Record<string, any>) => void): Promise<void>;
54
+ listen(queueName: string, options: any | undefined, callback: (payload: string, options: Record<string, any>) => void): Promise<void>;
55
+ static listen(queueName: string, options: any | undefined, callback: (payload: string, options: Record<string, any>) => void): Promise<void>;
55
56
  static requeueDeadLetter(deadLetterQueueName: string, queueOptions?: any): Promise<void>;
56
57
  static sendToRetry(brokerPayload: BrokerRetryEntity): Promise<boolean>;
57
58
  close(): void;
@@ -18,6 +18,9 @@ const __1 = require("../../");
18
18
  const lodash_1 = require("lodash");
19
19
  const types_1 = require("../../types");
20
20
  class RabbitMQClient {
21
+ static hasInstance() {
22
+ return RabbitMQClient.instance !== null;
23
+ }
21
24
  /**
22
25
  * Get the singleton instance of RabbitMQ
23
26
  * @returns {RabbitMQClient} The singleton instance
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data/rabbitmq/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data/rabbitmq/index.ts"],"names":[],"mappings":"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"}