@efebia/sqs-queue-v2 0.0.1 → 0.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.
- package/lib/index.d.ts +7 -17
- package/lib/index.js +26 -54
- package/package.json +2 -1
package/lib/index.d.ts
CHANGED
|
@@ -1,32 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
import { Queue as BaseQueue, Message, QueueOptions } from "@efebia/queue";
|
|
2
2
|
import AWS from "aws-sdk";
|
|
3
|
-
import EventEmitter from "events";
|
|
4
|
-
export type QueueOptions = {
|
|
5
|
-
sleepTimeout: number;
|
|
6
|
-
};
|
|
7
3
|
export type QueueConstructorOptions = {
|
|
8
4
|
client: AWS.SQS;
|
|
9
5
|
receiveOptions: AWS.SQS.ReceiveMessageRequest;
|
|
6
|
+
canRead?: () => boolean | Promise<boolean>;
|
|
10
7
|
} & Partial<QueueOptions>;
|
|
11
8
|
export type QueueCallback<TMessage extends object> = (name: string, params: TMessage, state: {
|
|
12
9
|
del: boolean;
|
|
13
10
|
}) => void | Promise<void>;
|
|
14
|
-
export declare class Queue extends
|
|
11
|
+
export declare class Queue<TMessage extends object> extends BaseQueue<AWS.SQS.Message, TMessage> {
|
|
15
12
|
receiveOptions: AWS.SQS.ReceiveMessageRequest;
|
|
16
13
|
client: AWS.SQS;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
start<TMessage extends object>(callback: QueueCallback<TMessage>, errorCallback: (error: any) => void | Promise<void>, canThrow?: boolean): Promise<void>;
|
|
14
|
+
canRead: () => boolean | Promise<boolean>;
|
|
15
|
+
constructor({ receiveOptions, client, canRead, ...otherOptions }: QueueConstructorOptions);
|
|
16
|
+
readMessages(): Promise<AWS.SQS.MessageList | undefined>;
|
|
21
17
|
processMessage<TMessage extends object>(message: AWS.SQS.Message, callback?: QueueCallback<TMessage>): Promise<void>;
|
|
22
18
|
delete(ReceiptHandle: string): Promise<{
|
|
23
19
|
$response: AWS.Response<{}, AWS.AWSError>;
|
|
24
20
|
}>;
|
|
25
|
-
|
|
26
|
-
resume(...args: Parameters<typeof this.start>): Promise<void>;
|
|
27
|
-
isRunning(): boolean;
|
|
28
|
-
send(body: {
|
|
29
|
-
name: string;
|
|
30
|
-
params: object;
|
|
31
|
-
}): Promise<import("aws-sdk/lib/request").PromiseResult<AWS.SQS.SendMessageResult, AWS.AWSError>>;
|
|
21
|
+
sendMessage(body: Message<TMessage>): Promise<void>;
|
|
32
22
|
}
|
package/lib/index.js
CHANGED
|
@@ -10,48 +10,30 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
10
10
|
}
|
|
11
11
|
return t;
|
|
12
12
|
};
|
|
13
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
-
};
|
|
16
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
14
|
exports.Queue = void 0;
|
|
18
|
-
const
|
|
19
|
-
const packageName =
|
|
20
|
-
|
|
21
|
-
class Queue extends events_1.default {
|
|
15
|
+
const queue_1 = require("@efebia/queue");
|
|
16
|
+
const packageName = "@efebia/sqs-queue-v2";
|
|
17
|
+
class Queue extends queue_1.Queue {
|
|
22
18
|
constructor(_a) {
|
|
23
|
-
var { receiveOptions, client } = _a, otherOptions = __rest(_a, ["receiveOptions", "client"]);
|
|
24
|
-
super();
|
|
19
|
+
var { receiveOptions, client, canRead } = _a, otherOptions = __rest(_a, ["receiveOptions", "client", "canRead"]);
|
|
20
|
+
super(otherOptions);
|
|
25
21
|
const options = Object.assign({
|
|
26
22
|
WaitTimeSeconds: 20,
|
|
27
23
|
MaxNumberOfMessages: 1,
|
|
28
24
|
}, receiveOptions);
|
|
29
|
-
this.forever = true;
|
|
30
25
|
this.receiveOptions = options;
|
|
31
26
|
this.client = client;
|
|
32
|
-
this.
|
|
33
|
-
sleepTimeout: 5000,
|
|
34
|
-
}, otherOptions);
|
|
27
|
+
this.canRead = canRead !== null && canRead !== void 0 ? canRead : (() => Promise.resolve(true));
|
|
35
28
|
}
|
|
36
|
-
async
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
for (const message of Messages) {
|
|
45
|
-
await this.processMessage(message, callback);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
catch (error) {
|
|
49
|
-
if (canThrow)
|
|
50
|
-
throw error;
|
|
51
|
-
await errorCallback(error);
|
|
52
|
-
await sleep(this.options.sleepTimeout);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
29
|
+
async readMessages() {
|
|
30
|
+
const readable = await this.canRead();
|
|
31
|
+
if (!readable)
|
|
32
|
+
return undefined;
|
|
33
|
+
const { Messages } = await this.client
|
|
34
|
+
.receiveMessage(this.receiveOptions)
|
|
35
|
+
.promise();
|
|
36
|
+
return Messages;
|
|
55
37
|
}
|
|
56
38
|
async processMessage(message, callback) {
|
|
57
39
|
const { ReceiptHandle, Body: stringifiedBody } = message;
|
|
@@ -69,14 +51,11 @@ class Queue extends events_1.default {
|
|
|
69
51
|
}
|
|
70
52
|
const { name, params } = parsedBody;
|
|
71
53
|
const state = { del: true };
|
|
72
|
-
if (callback)
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
this.emit(name, params, ReceiptHandle);
|
|
54
|
+
if (!callback)
|
|
55
|
+
return;
|
|
56
|
+
await callback(name, params, state);
|
|
57
|
+
if (state.del) {
|
|
58
|
+
await this.delete(ReceiptHandle);
|
|
80
59
|
}
|
|
81
60
|
}
|
|
82
61
|
delete(ReceiptHandle) {
|
|
@@ -84,20 +63,13 @@ class Queue extends events_1.default {
|
|
|
84
63
|
.deleteMessage({ QueueUrl: this.receiveOptions.QueueUrl, ReceiptHandle })
|
|
85
64
|
.promise();
|
|
86
65
|
}
|
|
87
|
-
|
|
88
|
-
this.
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
isRunning() {
|
|
95
|
-
return this.forever;
|
|
96
|
-
}
|
|
97
|
-
send(body) {
|
|
98
|
-
const updatedBody = Object.assign(Object.assign({}, body), { params: Object.assign(Object.assign({}, body.params), { createdAt: new Date() }) });
|
|
99
|
-
const MessageBody = JSON.stringify(updatedBody);
|
|
100
|
-
return this.client.sendMessage({ QueueUrl: this.receiveOptions.QueueUrl, MessageBody }).promise();
|
|
66
|
+
async sendMessage(body) {
|
|
67
|
+
await this.client
|
|
68
|
+
.sendMessage({
|
|
69
|
+
QueueUrl: this.receiveOptions.QueueUrl,
|
|
70
|
+
MessageBody: JSON.stringify(body),
|
|
71
|
+
})
|
|
72
|
+
.promise();
|
|
101
73
|
}
|
|
102
74
|
}
|
|
103
75
|
exports.Queue = Queue;
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@efebia/sqs-queue-v2",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"devDependencies": {
|
|
6
6
|
"@types/node": "^18.11.18",
|
|
7
7
|
"typescript": "^4.9.4"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
+
"@efebia/queue": "^0.0.1",
|
|
10
11
|
"aws-sdk": "^2.1292.0"
|
|
11
12
|
},
|
|
12
13
|
"files": [
|