-
Notifications
You must be signed in to change notification settings - Fork 335
/
types.ts
335 lines (318 loc) · 9.59 KB
/
types.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
import {
SQSClient,
Message,
QueueAttributeName,
MessageSystemAttributeName,
} from "@aws-sdk/client-sqs";
/**
* The options for the consumer.
*/
export interface ConsumerOptions {
/**
* The SQS queue URL.
*/
queueUrl: string;
/**
* List of queue attributes to retrieve, see [AWS docs](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-sqs/Variable/QueueAttributeName/).
* @defaultvalue `[]`
*/
attributeNames?: QueueAttributeName[];
/**
* List of message attributes to retrieve (i.e. `['name', 'address']`).
* @defaultvalue `[]`
*/
messageAttributeNames?: string[];
/**
* A list of attributes that need to be returned along with each message.
* @defaultvalue `[]`
*/
messageSystemAttributeNames?: MessageSystemAttributeName[];
/** @hidden */
stopped?: boolean;
/**
* The number of messages to request from SQS when polling (default `1`).
*
* This cannot be higher than the
* [AWS limit of 10](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/quotas-messages.html).
* @defaultvalue `1`
*/
batchSize?: number;
/**
* The duration (in seconds) that the received messages are hidden from subsequent
* retrieve requests after being retrieved by a ReceiveMessage request.
*/
visibilityTimeout?: number;
/**
* The duration (in seconds) for which the call will wait for a message to arrive in
* the queue before returning.
* @defaultvalue `20`
*/
waitTimeSeconds?: number;
/**
* The duration (in milliseconds) to wait before retrying after an authentication error.
* @defaultvalue `10000`
*/
authenticationErrorTimeout?: number;
/**
* The duration (in milliseconds) to wait before repolling the queue.
* @defaultvalue `0`
*/
pollingWaitTimeMs?: number;
/**
* If you want the stop action to wait for the final poll to complete and in-flight messages
* to be processed before emitting 'stopped' set this to the max amount of time to wait.
* @defaultvalue `0`
*/
pollingCompleteWaitTimeMs?: number;
/**
* If true, sets the message visibility timeout to 0 after a `processing_error`. You can
* also specify a different timeout using a number.
* @defaultvalue `false`
*/
terminateVisibilityTimeout?: boolean | number;
/**
* The interval (in seconds) between requests to extend the message visibility timeout.
*
* On each heartbeat the visibility is extended by adding `visibilityTimeout` to
* the number of seconds since the start of the handler function.
*
* This value must less than `visibilityTimeout`.
*/
heartbeatInterval?: number;
/**
* An optional [SQS Client](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-sqs/classes/sqsclient.html)
* object to use if you need to configure the client manually.
*/
sqs?: SQSClient;
/**
* The AWS region.
* @defaultValue process.env.AWS_REGION || `eu-west-1`
*/
region?: string;
/**
* Set this value to false to ignore the `queueUrl` and use the
* client's resolved endpoint, which may be a custom endpoint.
* @defaultValue `true`
*/
useQueueUrlAsEndpoint?: boolean;
/**
* Time in ms to wait for `handleMessage` to process a message before timing out.
*
* Emits `timeout_error` on timeout. By default, if `handleMessage` times out,
* the unprocessed message returns to the end of the queue.
*/
handleMessageTimeout?: number;
/**
* Default to `true`, if you don't want the package to delete messages from sqs
* set this to `false`.
* @defaultvalue `true`
*/
shouldDeleteMessages?: boolean;
/**
* By default, the consumer will treat an empty object or array from either of the
* handlers as a acknowledgement of no messages and will not delete those messages as
* a result. Set this to `true` to always acknowledge all messages no matter the returned
* value.
* @defaultvalue `false`
*/
alwaysAcknowledge?: boolean;
/**
* An `async` function (or function that returns a `Promise`) to be called whenever
* a message is received.
*
* In the case that you need to acknowledge the message, return an object containing
* the MessageId that you'd like to acknowledge.
*/
handleMessage?(message: Message): Promise<Message | void>;
/**
* An `async` function (or function that returns a `Promise`) to be called whenever
* a batch of messages is received. Similar to `handleMessage` but will receive the
* list of messages, not each message individually.
*
* **If both are set, `handleMessageBatch` overrides `handleMessage`**.
*
* In the case that you need to ack only some of the messages, return an array with
* the successful messages only.
*/
handleMessageBatch?(messages: Message[]): Promise<Message[] | void>;
/**
* An `async` function (or function that returns a `Promise`) to be called right
* before the SQS Client sends a receive message command.
*
* This function is usefull if SQS Client module exports have been modified, for
* example to add middlewares.
*/
preReceiveMessageCallback?(): Promise<void>;
/**
* An `async` function (or function that returns a `Promise`) to be called right
* after the SQS Client sends a receive message command.
*
* This function is usefull if SQS Client module exports have been modified, for
* example to add middlewares.
*/
postReceiveMessageCallback?(): Promise<void>;
/**
* Set this to `true` if you want to receive additional information about the error
* that occurred from AWS, such as the response and metadata.
*/
extendedAWSErrors?: boolean;
}
/**
* A subset of the ConsumerOptions that can be updated at runtime.
*/
export type UpdatableOptions =
| "visibilityTimeout"
| "batchSize"
| "waitTimeSeconds"
| "pollingWaitTimeMs";
/**
* The options for the stop method.
*/
export interface StopOptions {
/**
* Default to `false`, if you want the stop action to also abort requests to SQS
* set this to `true`.
* @defaultvalue `false`
*/
abort?: boolean;
}
/**
* These are the events that the consumer emits.
*/
export interface Events {
/**
* Fired after one batch of items (up to `batchSize`) has been successfully processed.
*/
response_processed: [];
/**
* Fired when the queue is empty (All messages have been consumed).
*/
empty: [];
/**
* Fired when a message is received.
*/
message_received: [Message];
/**
* Fired when a message is successfully processed and removed from the queue.
*/
message_processed: [Message];
/**
* Fired when an error occurs interacting with the queue.
*
* If the error correlates to a message, that message is included in Params
*/
error: [Error, void | Message | Message[]];
/**
* Fired when `handleMessageTimeout` is supplied as an option and if
* `handleMessage` times out.
*/
timeout_error: [Error, Message];
/**
* Fired when an error occurs processing the message.
*/
processing_error: [Error, Message];
/**
* Fired when requests to SQS were aborted.
*/
aborted: [];
/**
* Fired when the consumer starts its work..
*/
started: [];
/**
* Fired when the consumer finally stops its work.
*/
stopped: [];
/**
* Fired when an option is updated
*/
option_updated: [UpdatableOptions, ConsumerOptions[UpdatableOptions]];
/**
* Fired when the Consumer is waiting for polling to complete before stopping.
*/
waiting_for_polling_to_complete: [];
/**
* Fired when the Consumer has waited for polling to complete and is stopping due to a timeout.
*/
waiting_for_polling_to_complete_timeout_exceeded: [];
}
/**
* The error object that is emitted with error events from AWS.
*/
export type AWSError = {
/**
* Name, eg. ConditionalCheckFailedException
*/
readonly name: string;
/**
* Human-readable error response message
*/
message: string;
/**
* Non-standard stacktrace
*/
stack?: string;
/**
* Whether the client or server are at fault.
*/
readonly $fault: "client" | "server";
/**
* Represents an HTTP message as received in reply to a request
*/
readonly $response?: {
/**
* The status code of the HTTP response.
*/
statusCode?: number;
/**
* The headers of the HTTP message.
*/
headers: Record<string, string>;
/**
* The body of the HTTP message.
* Can be: ArrayBuffer | ArrayBufferView | string | Uint8Array | Readable | ReadableStream
*/
body?: any;
};
/**
* The service that encountered the exception.
*/
readonly $service?: string;
/**
* Indicates that an error MAY be retried by the client.
*/
readonly $retryable?: {
/**
* Indicates that the error is a retryable throttling error.
*/
readonly throttling?: boolean;
};
readonly $metadata: {
/**
* The status code of the last HTTP response received for this operation.
*/
readonly httpStatusCode?: number;
/**
* A unique identifier for the last request sent for this operation. Often
* requested by AWS service teams to aid in debugging.
*/
readonly requestId?: string;
/**
* A secondary identifier for the last request sent. Used for debugging.
*/
readonly extendedRequestId?: string;
/**
* A tertiary identifier for the last request sent. Used for debugging.
*/
readonly cfId?: string;
/**
* The number of times this operation was attempted.
*/
readonly attempts?: number;
/**
* The total amount of time (in milliseconds) that was spent waiting between
* retry attempts.
*/
readonly totalRetryDelay?: number;
};
};