starta.microservice 0.1.4874 → 0.1.4879
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/lib/adapters/database/DBScripts/DBInitialise.js +3 -12
- package/lib/adapters/database/DBScripts/DBInitialise.js.map +1 -1
- package/lib/adapters/database/index.js +45 -62
- package/lib/adapters/database/index.js.map +1 -1
- package/lib/adapters/logger/index.js +27 -17
- package/lib/adapters/logger/index.js.map +1 -1
- package/lib/adapters/{rabbitmq/index.d.ts → messageBroker/Rabbitmq.d.ts} +4 -6
- package/lib/adapters/messageBroker/Rabbitmq.js +159 -0
- package/lib/adapters/messageBroker/Rabbitmq.js.map +1 -0
- package/lib/adapters/messageBroker/SnsSqs.d.ts +18 -0
- package/lib/adapters/messageBroker/SnsSqs.js +273 -0
- package/lib/adapters/messageBroker/SnsSqs.js.map +1 -0
- package/lib/adapters/messageBroker/index.d.ts +16 -0
- package/lib/adapters/messageBroker/index.js +45 -0
- package/lib/adapters/messageBroker/index.js.map +1 -0
- package/lib/adapters/messageBroker/types.d.ts +11 -0
- package/lib/adapters/messageBroker/types.js +3 -0
- package/lib/adapters/messageBroker/types.js.map +1 -0
- package/lib/adapters/redisService/Publisher.js +2 -13
- package/lib/adapters/redisService/Publisher.js.map +1 -1
- package/lib/adapters/redisService/RedisAdapter.js +59 -100
- package/lib/adapters/redisService/RedisAdapter.js.map +1 -1
- package/lib/adapters/redisService/index.d.ts +0 -2
- package/lib/adapters/redisService/index.js +159 -281
- package/lib/adapters/redisService/index.js.map +1 -1
- package/lib/agenda/index.js +10 -20
- package/lib/agenda/index.js.map +1 -1
- package/lib/config.d.ts +2 -0
- package/lib/config.js +2 -0
- package/lib/config.js.map +1 -1
- package/lib/entities/Account.js +2 -14
- package/lib/entities/Account.js.map +1 -1
- package/lib/helpers/index.js +7 -1
- package/lib/helpers/index.js.map +1 -1
- package/lib/repositories/Repository.js +178 -207
- package/lib/repositories/Repository.js.map +1 -1
- package/lib/services/ServiceExecutor.d.ts +3 -3
- package/lib/services/ServiceExecutor.js +34 -48
- package/lib/services/ServiceExecutor.js.map +1 -1
- package/lib/services/ServiceExecutorHandler.js +264 -283
- package/lib/services/ServiceExecutorHandler.js.map +1 -1
- package/lib/services/ServiceFactoryBase.d.ts +3 -3
- package/lib/services/ServiceFactoryBase.js +2 -2
- package/lib/services/ServiceFactoryBase.js.map +1 -1
- package/lib/services/ServiceHandlerBase.d.ts +3 -3
- package/lib/services/ServiceHandlerBase.js +54 -72
- package/lib/services/ServiceHandlerBase.js.map +1 -1
- package/lib/services/dataSelectors.js +1 -1
- package/lib/services/dataSelectors.js.map +1 -1
- package/package.json +1 -1
- package/lib/adapters/rabbitmq/index.js +0 -184
- package/lib/adapters/rabbitmq/index.js.map +0 -1
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
var _SnsSqs_logger, _SnsSqs_snsClient, _SnsSqs_sqsClient, _SnsSqs_createdTopics, _SnsSqs_createdQueues, _SnsSqs_isStopRequested, _SnsSqs_promises;
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const aws_sdk_1 = __importDefault(require("aws-sdk"));
|
|
19
|
+
const config_1 = __importDefault(require("../../config"));
|
|
20
|
+
const loggerContext_1 = __importDefault(require("../../contexts/loggerContext"));
|
|
21
|
+
const executionContext_1 = __importDefault(require("../../contexts/executionContext"));
|
|
22
|
+
aws_sdk_1.default.config.update({
|
|
23
|
+
accessKeyId: config_1.default.aws.accessKey,
|
|
24
|
+
secretAccessKey: config_1.default.aws.secretKey,
|
|
25
|
+
region: config_1.default.aws.region
|
|
26
|
+
});
|
|
27
|
+
class SnsSqs {
|
|
28
|
+
constructor(logger) {
|
|
29
|
+
_SnsSqs_logger.set(this, void 0);
|
|
30
|
+
_SnsSqs_snsClient.set(this, void 0);
|
|
31
|
+
_SnsSqs_sqsClient.set(this, void 0);
|
|
32
|
+
_SnsSqs_createdTopics.set(this, new Set());
|
|
33
|
+
_SnsSqs_createdQueues.set(this, new Set());
|
|
34
|
+
_SnsSqs_isStopRequested.set(this, false);
|
|
35
|
+
_SnsSqs_promises.set(this, []);
|
|
36
|
+
__classPrivateFieldSet(this, _SnsSqs_logger, logger, "f");
|
|
37
|
+
__classPrivateFieldSet(this, _SnsSqs_snsClient, new aws_sdk_1.default.SNS(), "f");
|
|
38
|
+
__classPrivateFieldSet(this, _SnsSqs_sqsClient, new aws_sdk_1.default.SQS(), "f");
|
|
39
|
+
}
|
|
40
|
+
async createTopics(topics) {
|
|
41
|
+
topics = topics.map(topic => `${config_1.default.environment}-${topic}`);
|
|
42
|
+
const topicsToCreate = topics.filter(topic => !__classPrivateFieldGet(this, _SnsSqs_createdTopics, "f").has(topic));
|
|
43
|
+
await Promise.all(topicsToCreate.map(topicName => this.createTopic(topicName)));
|
|
44
|
+
}
|
|
45
|
+
async connect() {
|
|
46
|
+
__classPrivateFieldGet(this, _SnsSqs_logger, "f").generic.info("Attempting to connect to SNS and SQS");
|
|
47
|
+
try {
|
|
48
|
+
// Fetch and store list of topics
|
|
49
|
+
const topicsResponse = await __classPrivateFieldGet(this, _SnsSqs_snsClient, "f").listTopics({}).promise();
|
|
50
|
+
topicsResponse.Topics.forEach(topic => {
|
|
51
|
+
const topicArn = topic.TopicArn;
|
|
52
|
+
const topicName = topicArn.split(':').pop(); // Extract topic name from ARN
|
|
53
|
+
if (topicName.startsWith(`${config_1.default.environment}-`)) {
|
|
54
|
+
__classPrivateFieldGet(this, _SnsSqs_createdTopics, "f").add(topicName);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
// Fetch and store list of queues
|
|
58
|
+
const queuesResponse = await __classPrivateFieldGet(this, _SnsSqs_sqsClient, "f").listQueues({}).promise();
|
|
59
|
+
(queuesResponse.QueueUrls || []).forEach(queueUrl => {
|
|
60
|
+
const queueName = queueUrl.split('/').pop(); // Extract queue name from ARN
|
|
61
|
+
if (queueName.startsWith(`${config_1.default.environment}-`)) {
|
|
62
|
+
__classPrivateFieldGet(this, _SnsSqs_createdQueues, "f").add(queueName);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
__classPrivateFieldGet(this, _SnsSqs_logger, "f").generic.info("Successfully connected to SNS and SQS and retrieved existing topics and queues");
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
__classPrivateFieldGet(this, _SnsSqs_logger, "f").generic.error("Failed to connect to SNS and SQS", error);
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async checkLiveness() {
|
|
73
|
+
try {
|
|
74
|
+
__classPrivateFieldGet(this, _SnsSqs_logger, "f").generic.info("Attempting to connect to SNS and SQS");
|
|
75
|
+
await __classPrivateFieldGet(this, _SnsSqs_snsClient, "f").listTopics({}).promise();
|
|
76
|
+
await __classPrivateFieldGet(this, _SnsSqs_sqsClient, "f").listQueues({}).promise();
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
__classPrivateFieldGet(this, _SnsSqs_logger, "f").generic.error("Failed to connect to SNS and SQS", error);
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async disconnect() {
|
|
85
|
+
__classPrivateFieldSet(this, _SnsSqs_isStopRequested, true, "f");
|
|
86
|
+
__classPrivateFieldGet(this, _SnsSqs_logger, "f").generic.info("Disconnect from SNS and SQS called, waiting for " + __classPrivateFieldGet(this, _SnsSqs_promises, "f").length + " consumers to disconnect");
|
|
87
|
+
await Promise.all(__classPrivateFieldGet(this, _SnsSqs_promises, "f"));
|
|
88
|
+
__classPrivateFieldGet(this, _SnsSqs_logger, "f").generic.info("Disconnected from SNS and SQS called");
|
|
89
|
+
}
|
|
90
|
+
async emitEvent(topicName, eventData) {
|
|
91
|
+
topicName = `${config_1.default.environment}-${topicName}`;
|
|
92
|
+
const topicArn = await this.createTopic(topicName);
|
|
93
|
+
const logger = (loggerContext_1.default.getLogger() ?? __classPrivateFieldGet(this, _SnsSqs_logger, "f")).withParams({
|
|
94
|
+
serviceBroker: { topicName },
|
|
95
|
+
});
|
|
96
|
+
try {
|
|
97
|
+
await __classPrivateFieldGet(this, _SnsSqs_snsClient, "f").publish({
|
|
98
|
+
TopicArn: topicArn,
|
|
99
|
+
Message: JSON.stringify({
|
|
100
|
+
eventData,
|
|
101
|
+
context: executionContext_1.default.getFullData(),
|
|
102
|
+
}),
|
|
103
|
+
MessageAttributes: {
|
|
104
|
+
correlationId: {
|
|
105
|
+
DataType: 'String',
|
|
106
|
+
StringValue: executionContext_1.default.getCorrelationId(),
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}).promise();
|
|
110
|
+
logger.generic.info("Message published to SNS topic");
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
logger.internalError(e, "Unable to publish to SNS topic");
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async consume(topicName, queueName, onMessage) {
|
|
117
|
+
topicName = `${config_1.default.environment}-${topicName}`;
|
|
118
|
+
queueName = `${config_1.default.environment}-${queueName}`;
|
|
119
|
+
const dlqName = `${config_1.default.environment}-ERROR-${queueName}`;
|
|
120
|
+
const { queueUrl } = await this.createQueueWithDLQ(queueName, dlqName);
|
|
121
|
+
await this.subscribeQueueToTopic(queueName, queueUrl, topicName);
|
|
122
|
+
const consumeLoop = async () => {
|
|
123
|
+
while (!__classPrivateFieldGet(this, _SnsSqs_isStopRequested, "f")) {
|
|
124
|
+
const params = {
|
|
125
|
+
QueueUrl: queueUrl,
|
|
126
|
+
WaitTimeSeconds: 20,
|
|
127
|
+
VisibilityTimeout: 60,
|
|
128
|
+
MaxNumberOfMessages: 1
|
|
129
|
+
};
|
|
130
|
+
const data = await __classPrivateFieldGet(this, _SnsSqs_sqsClient, "f").receiveMessage(params).promise();
|
|
131
|
+
if (data.Messages) {
|
|
132
|
+
for (const message of data.Messages) {
|
|
133
|
+
let logger = __classPrivateFieldGet(this, _SnsSqs_logger, "f");
|
|
134
|
+
try {
|
|
135
|
+
const messageBody = JSON.parse(message.Body);
|
|
136
|
+
const { eventData, context } = JSON.parse(messageBody.Message);
|
|
137
|
+
executionContext_1.default.setFullData(context);
|
|
138
|
+
const startTime = process.hrtime();
|
|
139
|
+
logger = logger.withParams({
|
|
140
|
+
correlationId: executionContext_1.default.getCorrelationId(),
|
|
141
|
+
login: executionContext_1.default.getAuthorizedUserLogin(),
|
|
142
|
+
serviceBroker: { topicName, queueName },
|
|
143
|
+
});
|
|
144
|
+
logger.generic.info("Consuming started");
|
|
145
|
+
await onMessage(eventData, { logger });
|
|
146
|
+
const diff = process.hrtime(startTime);
|
|
147
|
+
const timeInMilliseconds = diff[0] * 1000 + diff[1] / 1000000;
|
|
148
|
+
logger.generic.info("Consuming finished", { taskDuration: timeInMilliseconds });
|
|
149
|
+
await __classPrivateFieldGet(this, _SnsSqs_sqsClient, "f").deleteMessage({
|
|
150
|
+
QueueUrl: queueUrl,
|
|
151
|
+
ReceiptHandle: message.ReceiptHandle
|
|
152
|
+
}).promise();
|
|
153
|
+
}
|
|
154
|
+
catch (e) {
|
|
155
|
+
logger.generic.error(`Consuming error\nerror: |${e.toString()}|\nobject: |${message.Body}|`, e);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
__classPrivateFieldGet(this, _SnsSqs_promises, "f").push(consumeLoop().catch(e => {
|
|
162
|
+
__classPrivateFieldGet(this, _SnsSqs_logger, "f").generic.error(`Consuming error\nerror: |${e.toString()}|`, e);
|
|
163
|
+
}));
|
|
164
|
+
}
|
|
165
|
+
async createTopic(topicName) {
|
|
166
|
+
if (!__classPrivateFieldGet(this, _SnsSqs_createdTopics, "f").has(topicName)) {
|
|
167
|
+
__classPrivateFieldGet(this, _SnsSqs_logger, "f").generic.info('Creating topic', {
|
|
168
|
+
serviceBroker: {
|
|
169
|
+
topicName
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
try {
|
|
173
|
+
const response = await __classPrivateFieldGet(this, _SnsSqs_snsClient, "f").createTopic({ Name: topicName }).promise();
|
|
174
|
+
const topicArn = response.TopicArn;
|
|
175
|
+
__classPrivateFieldGet(this, _SnsSqs_createdTopics, "f").add(topicName);
|
|
176
|
+
return topicArn;
|
|
177
|
+
}
|
|
178
|
+
catch (e) {
|
|
179
|
+
__classPrivateFieldGet(this, _SnsSqs_logger, "f").generic.info('Creating topic', {
|
|
180
|
+
serviceBroker: {
|
|
181
|
+
topicName
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
throw e;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return `arn:aws:sns:${config_1.default.aws.region}:${config_1.default.aws.accountId}:${topicName}`;
|
|
188
|
+
}
|
|
189
|
+
async createQueueWithDLQ(queueName, dlqName) {
|
|
190
|
+
const createQueue = async (queueName, redrivePolicy) => {
|
|
191
|
+
if (!__classPrivateFieldGet(this, _SnsSqs_createdQueues, "f").has(queueName)) {
|
|
192
|
+
__classPrivateFieldGet(this, _SnsSqs_logger, "f").generic.info('Creating queue', {
|
|
193
|
+
serviceBroker: {
|
|
194
|
+
queueName
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
const params = {
|
|
198
|
+
QueueName: queueName,
|
|
199
|
+
Attributes: {}
|
|
200
|
+
};
|
|
201
|
+
if (redrivePolicy) {
|
|
202
|
+
params.Attributes['RedrivePolicy'] = redrivePolicy;
|
|
203
|
+
}
|
|
204
|
+
const response = await __classPrivateFieldGet(this, _SnsSqs_sqsClient, "f").createQueue(params).promise();
|
|
205
|
+
__classPrivateFieldGet(this, _SnsSqs_createdQueues, "f").add(queueName);
|
|
206
|
+
return response.QueueUrl;
|
|
207
|
+
}
|
|
208
|
+
return `https://sqs.${config_1.default.aws.region}.amazonaws.com/${config_1.default.aws.accountId}/${queueName}`;
|
|
209
|
+
};
|
|
210
|
+
let deadLetterQueueUrl = await createQueue(dlqName);
|
|
211
|
+
// Get the ARN of the dead-letter queue
|
|
212
|
+
const { Attributes: dlqAttributes } = await __classPrivateFieldGet(this, _SnsSqs_sqsClient, "f").getQueueAttributes({
|
|
213
|
+
QueueUrl: deadLetterQueueUrl,
|
|
214
|
+
AttributeNames: ['QueueArn']
|
|
215
|
+
}).promise();
|
|
216
|
+
const dlqArn = dlqAttributes.QueueArn;
|
|
217
|
+
// Create the main queue with redrive policy pointing to the DLQ
|
|
218
|
+
const redrivePolicy = JSON.stringify({
|
|
219
|
+
maxReceiveCount: 1,
|
|
220
|
+
deadLetterTargetArn: dlqArn
|
|
221
|
+
});
|
|
222
|
+
const queueUrl = await createQueue(queueName, redrivePolicy);
|
|
223
|
+
return { queueUrl, deadLetterQueueUrl };
|
|
224
|
+
}
|
|
225
|
+
async subscribeQueueToTopic(queueName, queueUrl, topicName) {
|
|
226
|
+
__classPrivateFieldGet(this, _SnsSqs_logger, "f").generic.info('Subscribing queue to topic', {
|
|
227
|
+
serviceBroker: {
|
|
228
|
+
queueName,
|
|
229
|
+
topicName
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
const topicArn = await this.createTopic(topicName);
|
|
233
|
+
// Get the ARN of the queue
|
|
234
|
+
const { Attributes: queueAttributes } = await __classPrivateFieldGet(this, _SnsSqs_sqsClient, "f").getQueueAttributes({
|
|
235
|
+
QueueUrl: queueUrl,
|
|
236
|
+
AttributeNames: ['QueueArn']
|
|
237
|
+
}).promise();
|
|
238
|
+
const queueArn = queueAttributes.QueueArn;
|
|
239
|
+
// Subscribe the queue to the topic
|
|
240
|
+
await __classPrivateFieldGet(this, _SnsSqs_snsClient, "f").subscribe({
|
|
241
|
+
Protocol: 'sqs',
|
|
242
|
+
TopicArn: topicArn,
|
|
243
|
+
Endpoint: queueArn
|
|
244
|
+
}).promise();
|
|
245
|
+
// Update the SQS queue policy to allow the SNS topic to send messages to the queue
|
|
246
|
+
const policy = {
|
|
247
|
+
Version: "2012-10-17",
|
|
248
|
+
Statement: [
|
|
249
|
+
{
|
|
250
|
+
Sid: "AllowSNSMessages",
|
|
251
|
+
Effect: "Allow",
|
|
252
|
+
Principal: "*",
|
|
253
|
+
Action: "sqs:SendMessage",
|
|
254
|
+
Resource: queueArn,
|
|
255
|
+
Condition: {
|
|
256
|
+
ArnEquals: {
|
|
257
|
+
"aws:SourceArn": topicArn
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
]
|
|
262
|
+
};
|
|
263
|
+
await __classPrivateFieldGet(this, _SnsSqs_sqsClient, "f").setQueueAttributes({
|
|
264
|
+
QueueUrl: queueUrl,
|
|
265
|
+
Attributes: {
|
|
266
|
+
Policy: JSON.stringify(policy)
|
|
267
|
+
}
|
|
268
|
+
}).promise();
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
_SnsSqs_logger = new WeakMap(), _SnsSqs_snsClient = new WeakMap(), _SnsSqs_sqsClient = new WeakMap(), _SnsSqs_createdTopics = new WeakMap(), _SnsSqs_createdQueues = new WeakMap(), _SnsSqs_isStopRequested = new WeakMap(), _SnsSqs_promises = new WeakMap();
|
|
272
|
+
exports.default = SnsSqs;
|
|
273
|
+
//# sourceMappingURL=SnsSqs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SnsSqs.js","sourceRoot":"","sources":["../../../src/adapters/messageBroker/SnsSqs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { IMessageBroker } from './types';
|
|
2
|
+
import ServerLogger from '../../adapters/logger';
|
|
3
|
+
declare class MessageBrokerProxy implements IMessageBroker {
|
|
4
|
+
private broker;
|
|
5
|
+
constructor(logger: ServerLogger);
|
|
6
|
+
createTopics(topics: string[]): Promise<void>;
|
|
7
|
+
connect(): Promise<void>;
|
|
8
|
+
disconnect(): Promise<void>;
|
|
9
|
+
emitEvent(topic: string, eventData: Object): Promise<void>;
|
|
10
|
+
consume(topic: string, queue: string, onMessage: (msg: any, { logger }?: {
|
|
11
|
+
logger: ServerLogger;
|
|
12
|
+
}) => Promise<void>): Promise<any>;
|
|
13
|
+
checkLiveness(): Promise<boolean>;
|
|
14
|
+
setBroker(broker: IMessageBroker): void;
|
|
15
|
+
}
|
|
16
|
+
export default MessageBrokerProxy;
|
|
@@ -0,0 +1,45 @@
|
|
|
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
|
+
const SnsSqs_1 = __importDefault(require("./SnsSqs"));
|
|
7
|
+
const Rabbitmq_1 = __importDefault(require("./Rabbitmq"));
|
|
8
|
+
const config_1 = __importDefault(require("../../config"));
|
|
9
|
+
class MessageBrokerProxy {
|
|
10
|
+
constructor(logger) {
|
|
11
|
+
switch (config_1.default.messageBrokerType) {
|
|
12
|
+
case 'sqssns':
|
|
13
|
+
this.broker = new SnsSqs_1.default(logger);
|
|
14
|
+
break;
|
|
15
|
+
case 'rabbitmq':
|
|
16
|
+
this.broker = new Rabbitmq_1.default(logger);
|
|
17
|
+
break;
|
|
18
|
+
default:
|
|
19
|
+
throw new Error(`Unsupported message broker type: ${config_1.default.messageBrokerType}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async createTopics(topics) {
|
|
23
|
+
return this.broker.createTopics(topics);
|
|
24
|
+
}
|
|
25
|
+
async connect() {
|
|
26
|
+
return this.broker.connect();
|
|
27
|
+
}
|
|
28
|
+
async disconnect() {
|
|
29
|
+
return this.broker.disconnect();
|
|
30
|
+
}
|
|
31
|
+
async emitEvent(topic, eventData) {
|
|
32
|
+
return this.broker.emitEvent(topic, eventData);
|
|
33
|
+
}
|
|
34
|
+
async consume(topic, queue, onMessage) {
|
|
35
|
+
return this.broker.consume(topic, queue, onMessage);
|
|
36
|
+
}
|
|
37
|
+
async checkLiveness() {
|
|
38
|
+
return this.broker.checkLiveness();
|
|
39
|
+
}
|
|
40
|
+
setBroker(broker) {
|
|
41
|
+
this.broker = broker;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.default = MessageBrokerProxy;
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/messageBroker/index.ts"],"names":[],"mappings":";;;;;AACA,sDAA8B;AAC9B,0DAAkC;AAElC,0DAAkC;AAElC,MAAM,kBAAkB;IAGtB,YAAY,MAAoB;QAC9B,QAAQ,gBAAM,CAAC,iBAAiB,EAAE;YAChC,KAAK,QAAQ;gBACX,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAM,CAAC,MAAM,CAAC,CAAC;gBACjC,MAAM;YACR,KAAK,UAAU;gBACb,IAAI,CAAC,MAAM,GAAG,IAAI,kBAAQ,CAAC,MAAM,CAAC,CAAC;gBACnC,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,oCAAoC,gBAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;SACnF;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAgB;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,SAAiB;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,OAAO,CACX,KAAa,EACb,KAAa,EACb,SAA6E;QAE7E,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;IACrC,CAAC;IAED,SAAS,CAAC,MAAsB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,kBAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import ServerLogger from "../logger";
|
|
2
|
+
export interface IMessageBroker {
|
|
3
|
+
connect(): Promise<void>;
|
|
4
|
+
disconnect(): Promise<void>;
|
|
5
|
+
consume(topic: string, queue: string, onMessage: (msg: any, { logger }?: {
|
|
6
|
+
logger: ServerLogger;
|
|
7
|
+
}) => Promise<void>): any;
|
|
8
|
+
checkLiveness(): Promise<boolean>;
|
|
9
|
+
createTopics(topics: string[]): Promise<void>;
|
|
10
|
+
emitEvent(topic: string, eventData: Object): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/messageBroker/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
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
2
|
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
12
3
|
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
13
4
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
@@ -27,10 +18,8 @@ class Publisher {
|
|
|
27
18
|
_Publisher_redisClientPub.set(this, void 0);
|
|
28
19
|
__classPrivateFieldSet(this, _Publisher_redisClientPub, redisClientPub, "f");
|
|
29
20
|
}
|
|
30
|
-
publish(channel, message) {
|
|
31
|
-
return
|
|
32
|
-
return yield (0, util_1.promisify)(__classPrivateFieldGet(this, _Publisher_redisClientPub, "f").publish.bind(__classPrivateFieldGet(this, _Publisher_redisClientPub, "f")))(channel, message);
|
|
33
|
-
});
|
|
21
|
+
async publish(channel, message) {
|
|
22
|
+
return await (0, util_1.promisify)(__classPrivateFieldGet(this, _Publisher_redisClientPub, "f").publish.bind(__classPrivateFieldGet(this, _Publisher_redisClientPub, "f")))(channel, message);
|
|
34
23
|
}
|
|
35
24
|
}
|
|
36
25
|
_Publisher_redisClientPub = new WeakMap();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Publisher.js","sourceRoot":"","sources":["../../../src/adapters/redisService/Publisher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Publisher.js","sourceRoot":"","sources":["../../../src/adapters/redisService/Publisher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,+BAAiC;AAEjC,MAAM,SAAS;IAGb,YAAY,cAAsB;QAFlC,4CAAwB;QAGtB,uBAAA,IAAI,6BAAmB,cAAc,MAAA,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,OAAe;QAC5C,OAAO,MAAM,IAAA,gBAAS,EAAC,uBAAA,IAAI,iCAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAA,IAAI,iCAAgB,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpG,CAAC;CACF;;AAED,kBAAe,SAAS,CAAC"}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
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
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -41,32 +32,28 @@ class RedisService {
|
|
|
41
32
|
this.redlock = redlock;
|
|
42
33
|
this.logger = logger;
|
|
43
34
|
}
|
|
44
|
-
checkLiveness() {
|
|
45
|
-
return
|
|
46
|
-
return yield (0, util_1.promisify)(redisClientPublisher.ping.bind(redisClientPublisher))();
|
|
47
|
-
});
|
|
35
|
+
async checkLiveness() {
|
|
36
|
+
return await (0, util_1.promisify)(redisClientPublisher.ping.bind(redisClientPublisher))();
|
|
48
37
|
}
|
|
49
|
-
disconnect() {
|
|
50
|
-
return
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
38
|
+
async disconnect() {
|
|
39
|
+
return new Promise((resolve, reject) => {
|
|
40
|
+
this.logger.generic.info('shutting down redisClientPublisher');
|
|
41
|
+
redisClientPublisher.quit((err) => {
|
|
42
|
+
if (err) {
|
|
43
|
+
this.logger.internalError(err, 'Unable to redisClientPublisher.quit');
|
|
44
|
+
}
|
|
45
|
+
this.logger.generic.info('shutting down redisClientListener');
|
|
46
|
+
redisClientListener.quit((err) => {
|
|
54
47
|
if (err) {
|
|
55
|
-
this.logger.internalError(err, 'Unable to
|
|
48
|
+
this.logger.internalError(err, 'Unable to redisClientListener.quit');
|
|
56
49
|
}
|
|
57
|
-
this.logger.generic.info('shutting down
|
|
58
|
-
|
|
50
|
+
this.logger.generic.info('shutting down redlockClient');
|
|
51
|
+
redlockClient.quit((err) => {
|
|
59
52
|
if (err) {
|
|
60
|
-
this.logger.internalError(err, 'Unable to
|
|
53
|
+
this.logger.internalError(err, 'Unable to redlockClient.quit');
|
|
61
54
|
}
|
|
62
|
-
this.logger.generic.info('
|
|
63
|
-
|
|
64
|
-
if (err) {
|
|
65
|
-
this.logger.internalError(err, 'Unable to redlockClient.quit');
|
|
66
|
-
}
|
|
67
|
-
this.logger.generic.info('all the redises are down');
|
|
68
|
-
resolve(null);
|
|
69
|
-
});
|
|
55
|
+
this.logger.generic.info('all the redises are down');
|
|
56
|
+
resolve(null);
|
|
70
57
|
});
|
|
71
58
|
});
|
|
72
59
|
});
|
|
@@ -81,90 +68,62 @@ class RedisService {
|
|
|
81
68
|
getLocker() {
|
|
82
69
|
return this.redlock;
|
|
83
70
|
}
|
|
84
|
-
_getVar(key) {
|
|
85
|
-
return
|
|
86
|
-
return yield (0, util_1.promisify)(redisClientPublisher.get.bind(redisClientPublisher))(key.toLowerCase());
|
|
87
|
-
});
|
|
71
|
+
async _getVar(key) {
|
|
72
|
+
return await (0, util_1.promisify)(redisClientPublisher.get.bind(redisClientPublisher))(key.toLowerCase());
|
|
88
73
|
}
|
|
89
|
-
_getVarExpirationTime(key) {
|
|
90
|
-
return
|
|
91
|
-
return yield (0, util_1.promisify)(redisClientPublisher.ttl.bind(redisClientPublisher))(key.toLocaleLowerCase());
|
|
92
|
-
});
|
|
74
|
+
async _getVarExpirationTime(key) {
|
|
75
|
+
return await (0, util_1.promisify)(redisClientPublisher.ttl.bind(redisClientPublisher))(key.toLocaleLowerCase());
|
|
93
76
|
}
|
|
94
|
-
_setVar(key, variable, expirationTime = null) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
return yield (0, util_1.promisify)(set.bind(redisClientPublisher))(key.toLowerCase(), variable, expirationTime);
|
|
105
|
-
});
|
|
77
|
+
async _setVar(key, variable, expirationTime = null) {
|
|
78
|
+
const set = (k, v, e, callback) => {
|
|
79
|
+
if (e) {
|
|
80
|
+
redisClientPublisher.setex(k, e, v, callback);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
redisClientPublisher.set(k, v, callback);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
return await (0, util_1.promisify)(set.bind(redisClientPublisher))(key.toLowerCase(), variable, expirationTime);
|
|
106
87
|
}
|
|
107
|
-
_setVarIfNotExits(key, variable) {
|
|
108
|
-
return
|
|
109
|
-
return yield (0, util_1.promisify)(redisClientPublisher.setnx.bind(redisClientPublisher))(key.toLowerCase(), variable);
|
|
110
|
-
});
|
|
88
|
+
async _setVarIfNotExits(key, variable) {
|
|
89
|
+
return await (0, util_1.promisify)(redisClientPublisher.setnx.bind(redisClientPublisher))(key.toLowerCase(), variable);
|
|
111
90
|
}
|
|
112
|
-
_setVarIfNotExitsOrIncrement(key, expirationTime) {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
return yield this._increment(key);
|
|
119
|
-
});
|
|
91
|
+
async _setVarIfNotExitsOrIncrement(key, expirationTime) {
|
|
92
|
+
const setResult = await (0, util_1.promisify)(redisClientPublisher.set.bind(redisClientPublisher))(key.toLowerCase(), '1', 'NX', 'EX', expirationTime);
|
|
93
|
+
if (setResult === 'OK') {
|
|
94
|
+
return 1;
|
|
95
|
+
}
|
|
96
|
+
return await this._increment(key);
|
|
120
97
|
}
|
|
121
98
|
;
|
|
122
|
-
_getHash(key) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
return JSON.parse(value);
|
|
126
|
-
});
|
|
99
|
+
async _getHash(key) {
|
|
100
|
+
const value = await this._getVar(key);
|
|
101
|
+
return JSON.parse(value);
|
|
127
102
|
}
|
|
128
|
-
_setHash(key, object, expirationTime = null) {
|
|
129
|
-
return
|
|
130
|
-
return yield this._setVar(key, JSON.stringify(object), expirationTime);
|
|
131
|
-
});
|
|
103
|
+
async _setHash(key, object, expirationTime = null) {
|
|
104
|
+
return await this._setVar(key, JSON.stringify(object), expirationTime);
|
|
132
105
|
}
|
|
133
|
-
_deleteHash(key) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
return yield (0, util_1.promisify)(del.bind(redisClientPublisher))(key.toLowerCase());
|
|
137
|
-
});
|
|
106
|
+
async _deleteHash(key) {
|
|
107
|
+
const del = (s, c) => redisClientPublisher.del(s, c);
|
|
108
|
+
return await (0, util_1.promisify)(del.bind(redisClientPublisher))(key.toLowerCase());
|
|
138
109
|
}
|
|
139
|
-
flushAll() {
|
|
140
|
-
return
|
|
141
|
-
return yield (0, util_1.promisify)(redisClientPublisher.flushall.bind(redisClientPublisher))();
|
|
142
|
-
});
|
|
110
|
+
async flushAll() {
|
|
111
|
+
return await (0, util_1.promisify)(redisClientPublisher.flushall.bind(redisClientPublisher))();
|
|
143
112
|
}
|
|
144
|
-
_resetExpireTimeout(key, expirationTime) {
|
|
145
|
-
return
|
|
146
|
-
return yield (0, util_1.promisify)(redisClientPublisher.expire.bind(redisClientPublisher))(key.toLowerCase(), expirationTime);
|
|
147
|
-
});
|
|
113
|
+
async _resetExpireTimeout(key, expirationTime) {
|
|
114
|
+
return await (0, util_1.promisify)(redisClientPublisher.expire.bind(redisClientPublisher))(key.toLowerCase(), expirationTime);
|
|
148
115
|
}
|
|
149
|
-
_increment(key) {
|
|
150
|
-
return
|
|
151
|
-
return yield (0, util_1.promisify)(redisClientPublisher.incr.bind(redisClientPublisher))(key.toLowerCase());
|
|
152
|
-
});
|
|
116
|
+
async _increment(key) {
|
|
117
|
+
return await (0, util_1.promisify)(redisClientPublisher.incr.bind(redisClientPublisher))(key.toLowerCase());
|
|
153
118
|
}
|
|
154
|
-
_decrement(key) {
|
|
155
|
-
return
|
|
156
|
-
return yield (0, util_1.promisify)(redisClientPublisher.decr.bind(redisClientPublisher))(key.toLowerCase());
|
|
157
|
-
});
|
|
119
|
+
async _decrement(key) {
|
|
120
|
+
return await (0, util_1.promisify)(redisClientPublisher.decr.bind(redisClientPublisher))(key.toLowerCase());
|
|
158
121
|
}
|
|
159
|
-
keys(pattern) {
|
|
160
|
-
return
|
|
161
|
-
return yield (0, util_1.promisify)(redisClientPublisher.keys.bind(redisClientPublisher))(pattern);
|
|
162
|
-
});
|
|
122
|
+
async keys(pattern) {
|
|
123
|
+
return await (0, util_1.promisify)(redisClientPublisher.keys.bind(redisClientPublisher))(pattern);
|
|
163
124
|
}
|
|
164
|
-
emitEvent(eventName, message) {
|
|
165
|
-
return
|
|
166
|
-
return yield this.redisPublisher.publish(eventName, JSON.stringify(message));
|
|
167
|
-
});
|
|
125
|
+
async emitEvent(eventName, message) {
|
|
126
|
+
return await this.redisPublisher.publish(eventName, JSON.stringify(message));
|
|
168
127
|
}
|
|
169
128
|
}
|
|
170
129
|
exports.default = RedisService;
|