@fgiova/sqs-consumer 2.1.0 → 2.1.1

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/README.md CHANGED
@@ -58,12 +58,13 @@ const consumer = new SQSConsumer({
58
58
  | destroySigner | boolean | false | Whether to destroy the signer when the consumer is destroyed. |
59
59
 
60
60
  ### ConsumerOptions
61
- | Option | Type | Default | Description |
62
- |-------------------------|----------|---------|------------------------------------------------------------|
63
- | visibilityTimeout | number | 30 | The visibility timeout for the messages in seconds |
64
- | waitTimeSeconds | number | 20 | The wait time for the receiveMessage call in seconds |
65
- | itemsPerRequest | number | 10 | The maximum number of messages to be received at once |
66
- | messageAttributeNames | string[] | [] | The message attribute names to be included in the response |
61
+ | Option | Type | Default | Description |
62
+ |-----------------------|----------|---------|------------------------------------------------------------|
63
+ | visibilityTimeout | number | 30 | The visibility timeout for the messages in seconds |
64
+ | waitTimeSeconds | number | 20 | The wait time for the receiveMessage call in seconds |
65
+ | itemsPerRequest | number | 10 | The maximum number of messages to be received at once |
66
+ | messageAttributeNames | string[] | [] | The message attribute names to be included in the response |
67
+ | attributeNames | string[] | [] | The attribute names to be included in the response |
67
68
 
68
69
  ### Hooks
69
70
  | Option | Type | Description |
package/dist/cjs/hooks.js CHANGED
@@ -101,7 +101,10 @@ class Hooks {
101
101
  // biome-ignore lint/suspicious/noExplicitAny: args can be anything
102
102
  ...args) {
103
103
  for (const fn of this.hooks[hookSymbol.S]) {
104
- message = await fn(message, ...args);
104
+ const returnMessage = await fn(message, ...args);
105
+ if (returnMessage) {
106
+ message = returnMessage;
107
+ }
105
108
  }
106
109
  return message;
107
110
  }
@@ -110,7 +113,7 @@ class Hooks {
110
113
  ...args) {
111
114
  for (const fn of this.hooks[hookSymbol.S]) {
112
115
  const continueLoop = await fn(...args);
113
- if (!continueLoop) {
116
+ if (continueLoop === false) {
114
117
  return false;
115
118
  }
116
119
  }
@@ -21,15 +21,19 @@ type ConsumerOptions = {
21
21
  waitTimeSeconds?: number;
22
22
  itemsPerRequest?: number;
23
23
  messageAttributeNames?: string[];
24
+ attributeNames?: string[];
24
25
  };
25
- type HooksOptions = {
26
- onPoll?: (messages: Message[]) => Promise<Message[]>;
27
- onMessage?: (message: Message) => Promise<Message>;
28
- onHandlerSuccess?: (message: Message) => Promise<Message>;
29
- onHandlerTimeout?: (message: Message) => Promise<boolean>;
30
- onHandlerError?: (message: Message, error: Error) => Promise<boolean>;
31
- onSuccess?: (message: Message) => Promise<boolean>;
32
- onError?: (hook: HookName, message: Message, error: Error) => Promise<boolean>;
26
+ type hookReturnMessages = Promise<Message[]> | Message[] | Promise<void> | void | undefined;
27
+ type hookReturnMessage = Promise<Message> | Message | Promise<void> | void | undefined;
28
+ type hookReturnBoolean = Promise<boolean> | boolean | Promise<void> | void | undefined;
29
+ export type HooksOptions = {
30
+ onPoll?: (messages: Message[]) => hookReturnMessages;
31
+ onMessage?: (message: Message) => hookReturnMessage;
32
+ onHandlerSuccess?: (message: Message) => hookReturnMessage;
33
+ onHandlerTimeout?: (message: Message) => hookReturnBoolean;
34
+ onHandlerError?: (message: Message, error: Error) => hookReturnBoolean;
35
+ onSuccess?: (message: Message) => hookReturnBoolean;
36
+ onError?: (hook: HookName, message: Message, error: Error) => hookReturnBoolean;
33
37
  onSQSError?: (error: Error, message?: Message) => Promise<void>;
34
38
  };
35
39
  export type SQSConsumerOptions = {
@@ -63,14 +67,15 @@ export declare class SQSConsumer {
63
67
  private pollMessages;
64
68
  start(): Promise<void>;
65
69
  stop(destroy?: boolean): Promise<void>;
66
- addHook(hookName: "onPoll", value: (messages: Message[]) => Promise<Message[]>): void;
67
- addHook(hookName: "onMessage", value: (message: Message) => Promise<Message>): void;
68
- addHook(hookName: "onHandlerSuccess", value: (message: Message) => Promise<Message>): void;
69
- addHook(hookName: "onHandlerTimeout", value: (message: Message) => Promise<boolean>): void;
70
- addHook(hookName: "onHandlerError", value: (message: Message, error: Error) => Promise<boolean>): void;
71
- addHook(hookName: "onSuccess", value: (message: Message) => Promise<boolean>): void;
72
- addHook(hookName: "onError", value: (hook: HookName, message: Message, error: Error) => Promise<boolean>): void;
73
- addHook(hookName: "onSQSError", value: (error: Error, message?: Message) => Promise<void>): void;
74
- addHook(hookName: HookName, value: Function): void;
70
+ get isRunning(): boolean;
71
+ addHook(hookName: "onPoll", value: (messages: Message[]) => Promise<Message[]>): this;
72
+ addHook(hookName: "onMessage", value: (message: Message) => Promise<Message>): this;
73
+ addHook(hookName: "onHandlerSuccess", value: (message: Message) => Promise<Message>): this;
74
+ addHook(hookName: "onHandlerTimeout", value: (message: Message) => Promise<boolean>): this;
75
+ addHook(hookName: "onHandlerError", value: (message: Message, error: Error) => Promise<boolean>): this;
76
+ addHook(hookName: "onSuccess", value: (message: Message) => Promise<boolean>): this;
77
+ addHook(hookName: "onError", value: (hook: HookName, message: Message, error: Error) => Promise<boolean>): this;
78
+ addHook(hookName: "onSQSError", value: (error: Error, message?: Message) => Promise<void>): this;
79
+ addHook(hookName: HookName, value: Function): this;
75
80
  }
76
81
  export {};
package/dist/cjs/index.js CHANGED
@@ -41,6 +41,7 @@ class SQSConsumer {
41
41
  waitTimeSeconds: options.consumerOptions?.waitTimeSeconds ?? 20,
42
42
  itemsPerRequest: options.consumerOptions?.itemsPerRequest ?? 10,
43
43
  messageAttributeNames: options.consumerOptions?.messageAttributeNames ?? [],
44
+ attributeNames: options.consumerOptions?.attributeNames ?? [],
44
45
  };
45
46
  this.sqsClient =
46
47
  options.clientOptions?.sqsClient ??
@@ -92,7 +93,7 @@ class SQSConsumer {
92
93
  else {
93
94
  handlerResult = await handler(message);
94
95
  }
95
- await Promise.all([this.hooks.runHook("onHandlerSuccess", message)]);
96
+ await this.hooks.runHook("onHandlerSuccess", message);
96
97
  return handlerResult;
97
98
  }
98
99
  catch (error) {
@@ -151,6 +152,7 @@ class SQSConsumer {
151
152
  MaxNumberOfMessages: this.consumerOptions.itemsPerRequest,
152
153
  VisibilityTimeout: visibilityTimeout,
153
154
  MessageAttributeNames: this.consumerOptions.messageAttributeNames,
155
+ AttributeNames: this.consumerOptions.attributeNames,
154
156
  });
155
157
  /* c8 ignore next 1 */
156
158
  const messages = messagesResult.Messages ?? [];
@@ -213,8 +215,13 @@ class SQSConsumer {
213
215
  this.destroyed = true;
214
216
  }
215
217
  }
218
+ /* c8 ignore next 3 */
219
+ get isRunning() {
220
+ return this.running;
221
+ }
216
222
  addHook(hookName, value) {
217
- return this.hooks.addHook(hookName, value);
223
+ this.hooks.addHook(hookName, value);
224
+ return this;
218
225
  }
219
226
  }
220
227
  exports.SQSConsumer = SQSConsumer;
@@ -98,7 +98,10 @@ export class Hooks {
98
98
  // biome-ignore lint/suspicious/noExplicitAny: args can be anything
99
99
  ...args) {
100
100
  for (const fn of this.hooks[hookSymbol.S]) {
101
- message = await fn(message, ...args);
101
+ const returnMessage = await fn(message, ...args);
102
+ if (returnMessage) {
103
+ message = returnMessage;
104
+ }
102
105
  }
103
106
  return message;
104
107
  }
@@ -107,7 +110,7 @@ export class Hooks {
107
110
  ...args) {
108
111
  for (const fn of this.hooks[hookSymbol.S]) {
109
112
  const continueLoop = await fn(...args);
110
- if (!continueLoop) {
113
+ if (continueLoop === false) {
111
114
  return false;
112
115
  }
113
116
  }
@@ -21,15 +21,19 @@ type ConsumerOptions = {
21
21
  waitTimeSeconds?: number;
22
22
  itemsPerRequest?: number;
23
23
  messageAttributeNames?: string[];
24
+ attributeNames?: string[];
24
25
  };
25
- type HooksOptions = {
26
- onPoll?: (messages: Message[]) => Promise<Message[]>;
27
- onMessage?: (message: Message) => Promise<Message>;
28
- onHandlerSuccess?: (message: Message) => Promise<Message>;
29
- onHandlerTimeout?: (message: Message) => Promise<boolean>;
30
- onHandlerError?: (message: Message, error: Error) => Promise<boolean>;
31
- onSuccess?: (message: Message) => Promise<boolean>;
32
- onError?: (hook: HookName, message: Message, error: Error) => Promise<boolean>;
26
+ type hookReturnMessages = Promise<Message[]> | Message[] | Promise<void> | void | undefined;
27
+ type hookReturnMessage = Promise<Message> | Message | Promise<void> | void | undefined;
28
+ type hookReturnBoolean = Promise<boolean> | boolean | Promise<void> | void | undefined;
29
+ export type HooksOptions = {
30
+ onPoll?: (messages: Message[]) => hookReturnMessages;
31
+ onMessage?: (message: Message) => hookReturnMessage;
32
+ onHandlerSuccess?: (message: Message) => hookReturnMessage;
33
+ onHandlerTimeout?: (message: Message) => hookReturnBoolean;
34
+ onHandlerError?: (message: Message, error: Error) => hookReturnBoolean;
35
+ onSuccess?: (message: Message) => hookReturnBoolean;
36
+ onError?: (hook: HookName, message: Message, error: Error) => hookReturnBoolean;
33
37
  onSQSError?: (error: Error, message?: Message) => Promise<void>;
34
38
  };
35
39
  export type SQSConsumerOptions = {
@@ -63,14 +67,15 @@ export declare class SQSConsumer {
63
67
  private pollMessages;
64
68
  start(): Promise<void>;
65
69
  stop(destroy?: boolean): Promise<void>;
66
- addHook(hookName: "onPoll", value: (messages: Message[]) => Promise<Message[]>): void;
67
- addHook(hookName: "onMessage", value: (message: Message) => Promise<Message>): void;
68
- addHook(hookName: "onHandlerSuccess", value: (message: Message) => Promise<Message>): void;
69
- addHook(hookName: "onHandlerTimeout", value: (message: Message) => Promise<boolean>): void;
70
- addHook(hookName: "onHandlerError", value: (message: Message, error: Error) => Promise<boolean>): void;
71
- addHook(hookName: "onSuccess", value: (message: Message) => Promise<boolean>): void;
72
- addHook(hookName: "onError", value: (hook: HookName, message: Message, error: Error) => Promise<boolean>): void;
73
- addHook(hookName: "onSQSError", value: (error: Error, message?: Message) => Promise<void>): void;
74
- addHook(hookName: HookName, value: Function): void;
70
+ get isRunning(): boolean;
71
+ addHook(hookName: "onPoll", value: (messages: Message[]) => Promise<Message[]>): this;
72
+ addHook(hookName: "onMessage", value: (message: Message) => Promise<Message>): this;
73
+ addHook(hookName: "onHandlerSuccess", value: (message: Message) => Promise<Message>): this;
74
+ addHook(hookName: "onHandlerTimeout", value: (message: Message) => Promise<boolean>): this;
75
+ addHook(hookName: "onHandlerError", value: (message: Message, error: Error) => Promise<boolean>): this;
76
+ addHook(hookName: "onSuccess", value: (message: Message) => Promise<boolean>): this;
77
+ addHook(hookName: "onError", value: (hook: HookName, message: Message, error: Error) => Promise<boolean>): this;
78
+ addHook(hookName: "onSQSError", value: (error: Error, message?: Message) => Promise<void>): this;
79
+ addHook(hookName: HookName, value: Function): this;
75
80
  }
76
81
  export {};
@@ -35,6 +35,7 @@ export class SQSConsumer {
35
35
  waitTimeSeconds: options.consumerOptions?.waitTimeSeconds ?? 20,
36
36
  itemsPerRequest: options.consumerOptions?.itemsPerRequest ?? 10,
37
37
  messageAttributeNames: options.consumerOptions?.messageAttributeNames ?? [],
38
+ attributeNames: options.consumerOptions?.attributeNames ?? [],
38
39
  };
39
40
  this.sqsClient =
40
41
  options.clientOptions?.sqsClient ??
@@ -86,7 +87,7 @@ export class SQSConsumer {
86
87
  else {
87
88
  handlerResult = await handler(message);
88
89
  }
89
- await Promise.all([this.hooks.runHook("onHandlerSuccess", message)]);
90
+ await this.hooks.runHook("onHandlerSuccess", message);
90
91
  return handlerResult;
91
92
  }
92
93
  catch (error) {
@@ -145,6 +146,7 @@ export class SQSConsumer {
145
146
  MaxNumberOfMessages: this.consumerOptions.itemsPerRequest,
146
147
  VisibilityTimeout: visibilityTimeout,
147
148
  MessageAttributeNames: this.consumerOptions.messageAttributeNames,
149
+ AttributeNames: this.consumerOptions.attributeNames,
148
150
  });
149
151
  /* c8 ignore next 1 */
150
152
  const messages = messagesResult.Messages ?? [];
@@ -207,7 +209,12 @@ export class SQSConsumer {
207
209
  this.destroyed = true;
208
210
  }
209
211
  }
212
+ /* c8 ignore next 3 */
213
+ get isRunning() {
214
+ return this.running;
215
+ }
210
216
  addHook(hookName, value) {
211
- return this.hooks.addHook(hookName, value);
217
+ this.hooks.addHook(hookName, value);
218
+ return this;
212
219
  }
213
220
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fgiova/sqs-consumer",
3
- "version": "2.1.0",
3
+ "version": "2.1.1",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "exports": {