sqs-consumer 7.0.1 → 7.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/.github/workflows/lock-threads.yml +29 -0
- package/dist/consumer.d.ts +1 -3
- package/dist/consumer.js +10 -11
- package/dist/types.d.ts +1 -1
- package/package.json +1 -1
- package/src/consumer.ts +14 -12
- package/src/types.ts +1 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: "Lock Threads"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: "0 * * * *" # Once a day, at midnight UTC
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
issues: write
|
|
10
|
+
pull-requests: write
|
|
11
|
+
|
|
12
|
+
concurrency:
|
|
13
|
+
group: lock
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
action:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- uses: dessant/lock-threads@v4
|
|
20
|
+
with:
|
|
21
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
22
|
+
issue-inactive-days: "30" # Lock issues after 30 days of being closed
|
|
23
|
+
pr-inactive-days: "5" # Lock closed PRs after 5 days. This ensures that issues that stem from a PR are opened as issues, rather than comments on the recently merged PR.
|
|
24
|
+
add-issue-labels: "outdated"
|
|
25
|
+
exclude-issue-created-before: "2023-01-01"
|
|
26
|
+
issue-comment: >
|
|
27
|
+
This issue has been closed for more than 30 days. If this issue is still occuring, please open a new issue with more recent context.
|
|
28
|
+
pr-comment: >
|
|
29
|
+
This pull request has already been merged/closed. If you experience issues related to these changes, please open a new issue referencing this pull request.
|
package/dist/consumer.d.ts
CHANGED
|
@@ -4,8 +4,6 @@ import { ConsumerOptions, TypedEventEmitter, StopOptions } from './types';
|
|
|
4
4
|
*/
|
|
5
5
|
export declare class Consumer extends TypedEventEmitter {
|
|
6
6
|
private pollingTimeoutId;
|
|
7
|
-
private heartbeatTimeoutId;
|
|
8
|
-
private handleMessageTimeoutId;
|
|
9
7
|
private stopped;
|
|
10
8
|
private queueUrl;
|
|
11
9
|
private handleMessage;
|
|
@@ -34,7 +32,7 @@ export declare class Consumer extends TypedEventEmitter {
|
|
|
34
32
|
/**
|
|
35
33
|
* Stop polling the queue for messages (pre existing requests will still be made until concluded).
|
|
36
34
|
*/
|
|
37
|
-
stop(options
|
|
35
|
+
stop(options?: StopOptions): void;
|
|
38
36
|
/**
|
|
39
37
|
* Returns the current polling state of the consumer: `true` if it is actively polling, `false` if it is not.
|
|
40
38
|
*/
|
package/dist/consumer.js
CHANGED
|
@@ -17,8 +17,6 @@ class Consumer extends types_1.TypedEventEmitter {
|
|
|
17
17
|
var _a, _b, _c, _d;
|
|
18
18
|
super();
|
|
19
19
|
this.pollingTimeoutId = undefined;
|
|
20
|
-
this.heartbeatTimeoutId = undefined;
|
|
21
|
-
this.handleMessageTimeoutId = undefined;
|
|
22
20
|
this.stopped = true;
|
|
23
21
|
/**
|
|
24
22
|
* A reusable options object for sqs.send that's used to avoid duplication.
|
|
@@ -186,10 +184,11 @@ class Consumer extends types_1.TypedEventEmitter {
|
|
|
186
184
|
* @param message The message that was delivered from SQS
|
|
187
185
|
*/
|
|
188
186
|
async processMessage(message) {
|
|
187
|
+
let heartbeatTimeoutId = undefined;
|
|
189
188
|
try {
|
|
190
189
|
this.emit('message_received', message);
|
|
191
190
|
if (this.heartbeatInterval) {
|
|
192
|
-
|
|
191
|
+
heartbeatTimeoutId = this.startHeartbeat(message);
|
|
193
192
|
}
|
|
194
193
|
const ackedMessage = await this.executeHandler(message);
|
|
195
194
|
if ((ackedMessage === null || ackedMessage === void 0 ? void 0 : ackedMessage.MessageId) === message.MessageId) {
|
|
@@ -204,8 +203,7 @@ class Consumer extends types_1.TypedEventEmitter {
|
|
|
204
203
|
}
|
|
205
204
|
}
|
|
206
205
|
finally {
|
|
207
|
-
clearInterval(
|
|
208
|
-
this.heartbeatTimeoutId = undefined;
|
|
206
|
+
clearInterval(heartbeatTimeoutId);
|
|
209
207
|
}
|
|
210
208
|
}
|
|
211
209
|
/**
|
|
@@ -213,12 +211,13 @@ class Consumer extends types_1.TypedEventEmitter {
|
|
|
213
211
|
* @param messages The messages that were delivered from SQS
|
|
214
212
|
*/
|
|
215
213
|
async processMessageBatch(messages) {
|
|
214
|
+
let heartbeatTimeoutId = undefined;
|
|
216
215
|
try {
|
|
217
216
|
messages.forEach((message) => {
|
|
218
217
|
this.emit('message_received', message);
|
|
219
218
|
});
|
|
220
219
|
if (this.heartbeatInterval) {
|
|
221
|
-
|
|
220
|
+
heartbeatTimeoutId = this.startHeartbeat(null, messages);
|
|
222
221
|
}
|
|
223
222
|
const ackedMessages = await this.executeBatchHandler(messages);
|
|
224
223
|
if ((ackedMessages === null || ackedMessages === void 0 ? void 0 : ackedMessages.length) > 0) {
|
|
@@ -235,8 +234,7 @@ class Consumer extends types_1.TypedEventEmitter {
|
|
|
235
234
|
}
|
|
236
235
|
}
|
|
237
236
|
finally {
|
|
238
|
-
clearInterval(
|
|
239
|
-
this.heartbeatTimeoutId = undefined;
|
|
237
|
+
clearInterval(heartbeatTimeoutId);
|
|
240
238
|
}
|
|
241
239
|
}
|
|
242
240
|
/**
|
|
@@ -297,11 +295,12 @@ class Consumer extends types_1.TypedEventEmitter {
|
|
|
297
295
|
* @param message The message that was received from SQS
|
|
298
296
|
*/
|
|
299
297
|
async executeHandler(message) {
|
|
298
|
+
let handleMessageTimeoutId = undefined;
|
|
300
299
|
try {
|
|
301
300
|
let result;
|
|
302
301
|
if (this.handleMessageTimeout) {
|
|
303
302
|
const pending = new Promise((_, reject) => {
|
|
304
|
-
|
|
303
|
+
handleMessageTimeoutId = setTimeout(() => {
|
|
305
304
|
reject(new errors_1.TimeoutError());
|
|
306
305
|
}, this.handleMessageTimeout);
|
|
307
306
|
});
|
|
@@ -320,8 +319,8 @@ class Consumer extends types_1.TypedEventEmitter {
|
|
|
320
319
|
throw err;
|
|
321
320
|
}
|
|
322
321
|
finally {
|
|
323
|
-
if (
|
|
324
|
-
clearTimeout(
|
|
322
|
+
if (handleMessageTimeoutId) {
|
|
323
|
+
clearTimeout(handleMessageTimeoutId);
|
|
325
324
|
}
|
|
326
325
|
}
|
|
327
326
|
}
|
package/dist/types.d.ts
CHANGED
package/package.json
CHANGED
package/src/consumer.ts
CHANGED
|
@@ -35,8 +35,6 @@ const debug = Debug('sqs-consumer');
|
|
|
35
35
|
*/
|
|
36
36
|
export class Consumer extends TypedEventEmitter {
|
|
37
37
|
private pollingTimeoutId: NodeJS.Timeout | undefined = undefined;
|
|
38
|
-
private heartbeatTimeoutId: NodeJS.Timeout | undefined = undefined;
|
|
39
|
-
private handleMessageTimeoutId: NodeJS.Timeout | undefined = undefined;
|
|
40
38
|
private stopped = true;
|
|
41
39
|
private queueUrl: string;
|
|
42
40
|
private handleMessage: (message: Message) => Promise<Message | void>;
|
|
@@ -102,7 +100,7 @@ export class Consumer extends TypedEventEmitter {
|
|
|
102
100
|
/**
|
|
103
101
|
* Stop polling the queue for messages (pre existing requests will still be made until concluded).
|
|
104
102
|
*/
|
|
105
|
-
public stop(options
|
|
103
|
+
public stop(options?: StopOptions): void {
|
|
106
104
|
if (this.stopped) {
|
|
107
105
|
debug('Consumer was already stopped');
|
|
108
106
|
return;
|
|
@@ -242,11 +240,13 @@ export class Consumer extends TypedEventEmitter {
|
|
|
242
240
|
* @param message The message that was delivered from SQS
|
|
243
241
|
*/
|
|
244
242
|
private async processMessage(message: Message): Promise<void> {
|
|
243
|
+
let heartbeatTimeoutId: NodeJS.Timeout | undefined = undefined;
|
|
244
|
+
|
|
245
245
|
try {
|
|
246
246
|
this.emit('message_received', message);
|
|
247
247
|
|
|
248
248
|
if (this.heartbeatInterval) {
|
|
249
|
-
|
|
249
|
+
heartbeatTimeoutId = this.startHeartbeat(message);
|
|
250
250
|
}
|
|
251
251
|
|
|
252
252
|
const ackedMessage = await this.executeHandler(message);
|
|
@@ -263,8 +263,7 @@ export class Consumer extends TypedEventEmitter {
|
|
|
263
263
|
await this.changeVisibilityTimeout(message, 0);
|
|
264
264
|
}
|
|
265
265
|
} finally {
|
|
266
|
-
clearInterval(
|
|
267
|
-
this.heartbeatTimeoutId = undefined;
|
|
266
|
+
clearInterval(heartbeatTimeoutId);
|
|
268
267
|
}
|
|
269
268
|
}
|
|
270
269
|
|
|
@@ -273,13 +272,15 @@ export class Consumer extends TypedEventEmitter {
|
|
|
273
272
|
* @param messages The messages that were delivered from SQS
|
|
274
273
|
*/
|
|
275
274
|
private async processMessageBatch(messages: Message[]): Promise<void> {
|
|
275
|
+
let heartbeatTimeoutId: NodeJS.Timeout | undefined = undefined;
|
|
276
|
+
|
|
276
277
|
try {
|
|
277
278
|
messages.forEach((message) => {
|
|
278
279
|
this.emit('message_received', message);
|
|
279
280
|
});
|
|
280
281
|
|
|
281
282
|
if (this.heartbeatInterval) {
|
|
282
|
-
|
|
283
|
+
heartbeatTimeoutId = this.startHeartbeat(null, messages);
|
|
283
284
|
}
|
|
284
285
|
|
|
285
286
|
const ackedMessages = await this.executeBatchHandler(messages);
|
|
@@ -298,8 +299,7 @@ export class Consumer extends TypedEventEmitter {
|
|
|
298
299
|
await this.changeVisibilityTimeoutBatch(messages, 0);
|
|
299
300
|
}
|
|
300
301
|
} finally {
|
|
301
|
-
clearInterval(
|
|
302
|
-
this.heartbeatTimeoutId = undefined;
|
|
302
|
+
clearInterval(heartbeatTimeoutId);
|
|
303
303
|
}
|
|
304
304
|
}
|
|
305
305
|
|
|
@@ -387,12 +387,14 @@ export class Consumer extends TypedEventEmitter {
|
|
|
387
387
|
* @param message The message that was received from SQS
|
|
388
388
|
*/
|
|
389
389
|
private async executeHandler(message: Message): Promise<Message> {
|
|
390
|
+
let handleMessageTimeoutId: NodeJS.Timeout | undefined = undefined;
|
|
391
|
+
|
|
390
392
|
try {
|
|
391
393
|
let result;
|
|
392
394
|
|
|
393
395
|
if (this.handleMessageTimeout) {
|
|
394
396
|
const pending = new Promise((_, reject) => {
|
|
395
|
-
|
|
397
|
+
handleMessageTimeoutId = setTimeout((): void => {
|
|
396
398
|
reject(new TimeoutError());
|
|
397
399
|
}, this.handleMessageTimeout);
|
|
398
400
|
});
|
|
@@ -409,8 +411,8 @@ export class Consumer extends TypedEventEmitter {
|
|
|
409
411
|
: `Unexpected message handler failure: ${err.message}`;
|
|
410
412
|
throw err;
|
|
411
413
|
} finally {
|
|
412
|
-
if (
|
|
413
|
-
clearTimeout(
|
|
414
|
+
if (handleMessageTimeoutId) {
|
|
415
|
+
clearTimeout(handleMessageTimeoutId);
|
|
414
416
|
}
|
|
415
417
|
}
|
|
416
418
|
}
|