Skip to content

Commit e7ef075

Browse files
authored
fix: removing bind and refactoring consumer (#478)
* fix: Refactor consumer - Add missing type declarations - Remove autoBind usage - Update passing in-class methods to intervals using arrow functions * fix: Fix calling processMessage in handleSqsResponse
1 parent 2e92e6f commit e7ef075

File tree

2 files changed

+30
-45
lines changed

2 files changed

+30
-45
lines changed

src/bind.ts

-22
This file was deleted.

src/consumer.ts

+30-23
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import {
1919

2020
import { ConsumerOptions, StopOptions, UpdatableOptions } from "./types.js";
2121
import { TypedEventEmitter } from "./emitter.js";
22-
import { autoBind } from "./bind.js";
2322
import {
2423
SQSError,
2524
TimeoutError,
@@ -89,7 +88,6 @@ export class Consumer extends TypedEventEmitter {
8988
useQueueUrlAsEndpoint: options.useQueueUrlAsEndpoint ?? true,
9089
region: options.region || process.env.AWS_REGION || "eu-west-1",
9190
});
92-
autoBind(this);
9391
}
9492

9593
/**
@@ -161,7 +159,7 @@ export class Consumer extends TypedEventEmitter {
161159
return;
162160
}
163161

164-
const exceededTimeout =
162+
const exceededTimeout: boolean =
165163
Date.now() - this.stopRequestedAtTimestamp >
166164
this.pollingCompleteWaitTimeMs;
167165
if (exceededTimeout) {
@@ -171,7 +169,7 @@ export class Consumer extends TypedEventEmitter {
171169
}
172170

173171
this.emit("waiting_for_polling_to_complete");
174-
setTimeout(this.waitForPollingToComplete, 1000);
172+
setTimeout(() => this.waitForPollingToComplete(), 1000);
175173
}
176174

177175
/**
@@ -196,7 +194,7 @@ export class Consumer extends TypedEventEmitter {
196194
public updateOption(
197195
option: UpdatableOptions,
198196
value: ConsumerOptions[UpdatableOptions],
199-
) {
197+
): void {
200198
validateOption(option, value, this, true);
201199

202200
this[option] = value;
@@ -237,7 +235,7 @@ export class Consumer extends TypedEventEmitter {
237235

238236
this.isPolling = true;
239237

240-
let currentPollingTimeout = this.pollingWaitTimeMs;
238+
let currentPollingTimeout: number = this.pollingWaitTimeMs;
241239
this.receiveMessage({
242240
QueueUrl: this.queueUrl,
243241
AttributeNames: this.attributeNames,
@@ -246,8 +244,10 @@ export class Consumer extends TypedEventEmitter {
246244
WaitTimeSeconds: this.waitTimeSeconds,
247245
VisibilityTimeout: this.visibilityTimeout,
248246
})
249-
.then(this.handleSqsResponse)
250-
.catch((err) => {
247+
.then((output: ReceiveMessageCommandOutput) =>
248+
this.handleSqsResponse(output),
249+
)
250+
.catch((err): void => {
251251
this.emitError(err);
252252
if (isConnectionError(err)) {
253253
logger.debug("authentication_error", {
@@ -258,16 +258,19 @@ export class Consumer extends TypedEventEmitter {
258258
}
259259
return;
260260
})
261-
.then(() => {
261+
.then((): void => {
262262
if (this.pollingTimeoutId) {
263263
clearTimeout(this.pollingTimeoutId);
264264
}
265-
this.pollingTimeoutId = setTimeout(this.poll, currentPollingTimeout);
265+
this.pollingTimeoutId = setTimeout(
266+
() => this.poll(),
267+
currentPollingTimeout,
268+
);
266269
})
267-
.catch((err) => {
270+
.catch((err): void => {
268271
this.emitError(err);
269272
})
270-
.finally(() => {
273+
.finally((): void => {
271274
this.isPolling = false;
272275
});
273276
}
@@ -283,7 +286,7 @@ export class Consumer extends TypedEventEmitter {
283286
if (this.preReceiveMessageCallback) {
284287
await this.preReceiveMessageCallback();
285288
}
286-
const result = await this.sqs.send(
289+
const result: ReceiveMessageCommandOutput = await this.sqs.send(
287290
new ReceiveMessageCommand(params),
288291
this.sqsSendOptions,
289292
);
@@ -309,7 +312,11 @@ export class Consumer extends TypedEventEmitter {
309312
if (this.handleMessageBatch) {
310313
await this.processMessageBatch(response.Messages);
311314
} else {
312-
await Promise.all(response.Messages.map(this.processMessage));
315+
await Promise.all(
316+
response.Messages.map((message: Message) =>
317+
this.processMessage(message),
318+
),
319+
);
313320
}
314321

315322
this.emit("response_processed");
@@ -333,7 +340,7 @@ export class Consumer extends TypedEventEmitter {
333340
heartbeatTimeoutId = this.startHeartbeat(message);
334341
}
335342

336-
const ackedMessage = await this.executeHandler(message);
343+
const ackedMessage: Message = await this.executeHandler(message);
337344

338345
if (ackedMessage?.MessageId === message.MessageId) {
339346
await this.deleteMessage(message);
@@ -361,20 +368,20 @@ export class Consumer extends TypedEventEmitter {
361368
let heartbeatTimeoutId: NodeJS.Timeout | undefined = undefined;
362369

363370
try {
364-
messages.forEach((message) => {
371+
messages.forEach((message: Message): void => {
365372
this.emit("message_received", message);
366373
});
367374

368375
if (this.heartbeatInterval) {
369376
heartbeatTimeoutId = this.startHeartbeat(null, messages);
370377
}
371378

372-
const ackedMessages = await this.executeBatchHandler(messages);
379+
const ackedMessages: Message[] = await this.executeBatchHandler(messages);
373380

374381
if (ackedMessages?.length > 0) {
375382
await this.deleteMessageBatch(ackedMessages);
376383

377-
ackedMessages.forEach((message) => {
384+
ackedMessages.forEach((message: Message): void => {
378385
this.emit("message_processed", message);
379386
});
380387
}
@@ -448,7 +455,7 @@ export class Consumer extends TypedEventEmitter {
448455
): Promise<ChangeMessageVisibilityBatchCommandOutput> {
449456
const params: ChangeMessageVisibilityBatchCommandInput = {
450457
QueueUrl: this.queueUrl,
451-
Entries: messages.map((message) => ({
458+
Entries: messages.map((message: Message) => ({
452459
Id: message.MessageId,
453460
ReceiptHandle: message.ReceiptHandle,
454461
VisibilityTimeout: timeout,
@@ -479,7 +486,7 @@ export class Consumer extends TypedEventEmitter {
479486
let result;
480487

481488
if (this.handleMessageTimeout) {
482-
const pending = new Promise((_, reject) => {
489+
const pending: Promise<void> = new Promise((_, reject): void => {
483490
handleMessageTimeoutId = setTimeout((): void => {
484491
reject(new TimeoutError());
485492
}, this.handleMessageTimeout);
@@ -518,7 +525,7 @@ export class Consumer extends TypedEventEmitter {
518525
*/
519526
private async executeBatchHandler(messages: Message[]): Promise<Message[]> {
520527
try {
521-
const result = await this.handleMessageBatch(messages);
528+
const result: void | Message[] = await this.handleMessageBatch(messages);
522529

523530
return !this.alwaysAcknowledge && result instanceof Object
524531
? result
@@ -576,12 +583,12 @@ export class Consumer extends TypedEventEmitter {
576583
return;
577584
}
578585
logger.debug("deleting_messages", {
579-
messageIds: messages.map((msg) => msg.MessageId),
586+
messageIds: messages.map((msg: Message) => msg.MessageId),
580587
});
581588

582589
const deleteParams: DeleteMessageBatchCommandInput = {
583590
QueueUrl: this.queueUrl,
584-
Entries: messages.map((message) => ({
591+
Entries: messages.map((message: Message) => ({
585592
Id: message.MessageId,
586593
ReceiptHandle: message.ReceiptHandle,
587594
})),

0 commit comments

Comments
 (0)