@apipass/sqs-server 0.0.31 → 0.0.32-alpha.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/lib/sqs-options.interface.d.ts +2 -0
- package/lib/sqs-server.d.ts +3 -0
- package/lib/sqs-server.js +47 -8
- package/lib/sqs-server.js.map +1 -1
- package/package.json +2 -2
package/lib/sqs-server.d.ts
CHANGED
|
@@ -3,11 +3,14 @@ import { SqsOptions } from "./sqs-options.interface";
|
|
|
3
3
|
export declare class SQSServer extends Server implements CustomTransportStrategy {
|
|
4
4
|
private readonly options;
|
|
5
5
|
private sqs;
|
|
6
|
+
private s3;
|
|
6
7
|
private consumers;
|
|
7
8
|
private registeredQueues;
|
|
8
9
|
constructor(options: SqsOptions);
|
|
9
10
|
listen(callback: () => any): any;
|
|
10
11
|
private bindHandlers;
|
|
12
|
+
private readMessageFromPayloadS3Pointer;
|
|
13
|
+
private isS3Message;
|
|
11
14
|
private createQueueIfNotExist;
|
|
12
15
|
close(): any;
|
|
13
16
|
}
|
package/lib/sqs-server.js
CHANGED
|
@@ -25,12 +25,12 @@ const microservices_1 = require("@nestjs/microservices");
|
|
|
25
25
|
const sqs_consumer_1 = require("sqs-consumer");
|
|
26
26
|
const sqs_context_1 = require("./sqs-context");
|
|
27
27
|
const aws = require("aws-sdk");
|
|
28
|
-
const sqs = new aws.SQS({ region: 'us-east-1' });
|
|
29
28
|
class SQSServer extends microservices_1.Server {
|
|
30
29
|
constructor(options) {
|
|
31
30
|
super();
|
|
32
31
|
this.options = options;
|
|
33
32
|
this.sqs = this.options.sqs || new aws.SQS();
|
|
33
|
+
this.s3 = this.options.s3 || new aws.S3();
|
|
34
34
|
this.consumers = [];
|
|
35
35
|
this.registeredQueues = [];
|
|
36
36
|
}
|
|
@@ -39,7 +39,14 @@ class SQSServer extends microservices_1.Server {
|
|
|
39
39
|
callback();
|
|
40
40
|
}
|
|
41
41
|
bindHandlers() {
|
|
42
|
-
this.messageHandlers.forEach((
|
|
42
|
+
this.messageHandlers.forEach((handlerMetadata, queueName) => {
|
|
43
|
+
var _a;
|
|
44
|
+
const handler = handlerMetadata['callback'];
|
|
45
|
+
console.log('handler:', JSON.stringify(handler));
|
|
46
|
+
const extras = (_a = handlerMetadata.extras) !== null && _a !== void 0 ? _a : {};
|
|
47
|
+
console.log('extras:', JSON.stringify(handler));
|
|
48
|
+
const acceptedTopics = Array.isArray(extras.topic) ? extras.topic : [];
|
|
49
|
+
console.log('acceptedTopics:', JSON.stringify(acceptedTopics));
|
|
43
50
|
this.createQueueIfNotExist(queueName, this.options);
|
|
44
51
|
const queueAlreadyRegistered = this.registeredQueues.includes(queueName);
|
|
45
52
|
if (queueAlreadyRegistered)
|
|
@@ -48,9 +55,21 @@ class SQSServer extends microservices_1.Server {
|
|
|
48
55
|
sqs: this.sqs,
|
|
49
56
|
queueUrl: `${this.options.endpoint}/${queueName}`,
|
|
50
57
|
handleMessage: (message) => __awaiter(this, void 0, void 0, function* () {
|
|
58
|
+
var _b, _c, _d, _e;
|
|
51
59
|
const { Body } = message, messageMetadata = __rest(message, ["Body"]);
|
|
52
|
-
|
|
53
|
-
|
|
60
|
+
let parsedBody = JSON.parse(Body);
|
|
61
|
+
if (this.isS3Message(parsedBody)) {
|
|
62
|
+
parsedBody = yield this.readMessageFromPayloadS3Pointer(parsedBody[1]);
|
|
63
|
+
}
|
|
64
|
+
const topicArn = (_b = parsedBody.TopicArn) !== null && _b !== void 0 ? _b : (_e = (_d = (_c = parsedBody === null || parsedBody === void 0 ? void 0 : parsedBody.Records) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.Sns) === null || _e === void 0 ? void 0 : _e.TopicArn;
|
|
65
|
+
const topicName = topicArn === null || topicArn === void 0 ? void 0 : topicArn.split(':').pop();
|
|
66
|
+
if (acceptedTopics.length > 0 && (!topicName || !acceptedTopics.includes(topicName))) {
|
|
67
|
+
console.info(`Ignored message from topic ${topicName} on queue ${queueName}`);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const context = new sqs_context_1.SQSContext({ queueName, messageMetadata });
|
|
71
|
+
console.log(`Received message from queue ${queueName}`);
|
|
72
|
+
yield handler(parsedBody, context);
|
|
54
73
|
})
|
|
55
74
|
});
|
|
56
75
|
app.on('error', (err) => {
|
|
@@ -64,22 +83,42 @@ class SQSServer extends microservices_1.Server {
|
|
|
64
83
|
this.registeredQueues.push(queueName);
|
|
65
84
|
});
|
|
66
85
|
}
|
|
86
|
+
readMessageFromPayloadS3Pointer(objectInfo) {
|
|
87
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
88
|
+
const object = yield this.s3.getObject({
|
|
89
|
+
Bucket: objectInfo.s3BucketName,
|
|
90
|
+
Key: objectInfo.s3Key
|
|
91
|
+
}).promise();
|
|
92
|
+
yield this.s3.deleteObject({
|
|
93
|
+
Bucket: objectInfo.s3BucketName,
|
|
94
|
+
Key: objectInfo.s3Key
|
|
95
|
+
}).promise();
|
|
96
|
+
return JSON.parse(object.Body.toString());
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
isS3Message(messageBody) {
|
|
100
|
+
return !!(messageBody && Array.isArray(messageBody)
|
|
101
|
+
&& messageBody[0] instanceof String
|
|
102
|
+
&& messageBody[0].includes('PayloadS3Pointer'));
|
|
103
|
+
}
|
|
67
104
|
createQueueIfNotExist(queueName, options) {
|
|
68
|
-
console.log(`AutoCreateQueue: ${options.autoCreateQueue}`);
|
|
69
105
|
if (!options.autoCreateQueue) {
|
|
70
106
|
return;
|
|
71
107
|
}
|
|
72
|
-
|
|
108
|
+
const params = {
|
|
73
109
|
QueueName: queueName,
|
|
74
110
|
};
|
|
111
|
+
const sqs = this.sqs;
|
|
75
112
|
sqs.getQueueUrl(params, function (err, data) {
|
|
76
113
|
if (err) {
|
|
77
114
|
if (err.code === 'AWS.SimpleQueueService.NonExistentQueue') {
|
|
78
115
|
sqs.createQueue(params, function (err, data) {
|
|
79
|
-
if (err)
|
|
116
|
+
if (err) {
|
|
80
117
|
console.log(`Fail on create queue. Error: ${err}`);
|
|
81
|
-
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
82
120
|
console.log(`Success on create queue ${queueName}`);
|
|
121
|
+
}
|
|
83
122
|
});
|
|
84
123
|
}
|
|
85
124
|
}
|
package/lib/sqs-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqs-server.js","sourceRoot":"","sources":["../src/sqs-server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"sqs-server.js","sourceRoot":"","sources":["../src/sqs-server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apipass/sqs-server",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.32-alpha.0",
|
|
4
4
|
"description": "> TODO: description",
|
|
5
5
|
"author": "Alexandre Zanelatto <alexandre@apipass.com.br>",
|
|
6
6
|
"license": "ISC",
|
|
@@ -26,5 +26,5 @@
|
|
|
26
26
|
"tsc": "tsc",
|
|
27
27
|
"test": "node ./__tests__/@apipass/sqs-server.test.js"
|
|
28
28
|
},
|
|
29
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "53e25ff328bee83ba332cf9ca16b6bb409442da6"
|
|
30
30
|
}
|