@probitas/client-sqs
AWS SQS client for Probitas scenario testing framework.
This package provides an AWS SQS client designed for integration testing of message-driven applications using Amazon Simple Queue Service.
Features
- Queue Management: Create, delete, and purge queues
- Message Operations: Send, receive, and delete messages (single and batch)
- Message Attributes: Support for custom message attributes
- LocalStack Compatible: Works with LocalStack for local development
- Resource Management: Implements
AsyncDisposablefor proper cleanup
Installation
deno add jsr:@probitas/client-sqs
Quick Start
import { createSqsClient } from "@probitas/client-sqs";
const client = await createSqsClient({
region: "us-east-1",
url: "http://localhost:4566", // LocalStack
credentials: {
accessKeyId: "test",
secretAccessKey: "test",
},
});
// Ensure queue exists
const queueResult = await client.ensureQueue("test-queue");
const queueUrl = queueResult.queueUrl;
// Send a message
const sendResult = await client.send(queueUrl, "Hello, World!", {
attributes: {
type: { dataType: "String", stringValue: "greeting" },
},
});
console.log("Message ID:", sendResult.messageId);
// Receive messages
const receiveResult = await client.receive(queueUrl, {
maxMessages: 10,
waitTimeSeconds: 5,
});
console.log("Received:", receiveResult.messages.length);
// Delete message after processing
for (const msg of receiveResult.messages) {
await client.delete(queueUrl, msg.receiptHandle);
}
await client.close();
Batch Operations
// Send batch messages
await client.sendBatch(queueUrl, [
{ body: "Message 1", id: "msg-1" },
{ body: "Message 2", id: "msg-2" },
{ body: "Message 3", id: "msg-3" },
]);
// Delete batch messages
const messages = await client.receive(queueUrl, { maxMessages: 10 });
await client.deleteBatch(
queueUrl,
messages.messages.map((m, i) => ({ id: `del-${i}`, receiptHandle: m.receiptHandle }))
);
Using with using Statement
await using client = await createSqsClient({
region: "us-east-1",
url: "http://localhost:4566",
});
const queue = await client.ensureQueue("test");
// Client automatically closed when block exits
Related Packages
| Package | Description |
|---|---|
@probitas/client |
Core utilities and types |
@probitas/client-rabbitmq |
RabbitMQ client |
Links
Installation
deno add jsr:@probitas/client-sqsClasses
#SqsBatchError
class SqsBatchError extends SqsErrorSqsErrorError thrown when a batch operation partially fails.
| Name | Description |
|---|---|
name | — |
kind | — |
failedCount | — |
Constructor
new SqsBatchError(message: string, failedCount: number, options?: SqsErrorOptions)Properties
- readonly
namestring - readonly
kind"batch" - readonly
failedCountnumber
#SqsCommandError
class SqsCommandError extends SqsErrorSqsErrorError thrown when an SQS command fails.
Constructor
new SqsCommandError(message: string, options: SqsCommandErrorOptions)Properties
- readonly
namestring - readonly
kind"command" - readonly
operationstring
#SqsConnectionError
class SqsConnectionError extends SqsErrorSqsErrorError thrown when an SQS connection cannot be established.
Constructor
new SqsConnectionError(message: string, options?: SqsErrorOptions)Properties
- readonly
namestring - readonly
kind"connection"
#SqsError
class SqsError extends ClientErrorClientErrorBase error class for SQS client errors.
Constructor
new SqsError(message: string, _: unknown, options?: SqsErrorOptions)Properties
- readonly
namestring - readonly
code?string
#SqsMessageNotFoundError
class SqsMessageNotFoundError extends SqsErrorSqsErrorError thrown when a message is not found or receipt handle is invalid.
Constructor
new SqsMessageNotFoundError(message: string, options?: SqsErrorOptions)Properties
- readonly
namestring - readonly
kind"message_not_found"
#SqsMessageTooLargeError
class SqsMessageTooLargeError extends SqsErrorSqsErrorError thrown when a message exceeds the size limit.
Constructor
new SqsMessageTooLargeError(message: string, size: number, maxSize: number, options?: SqsErrorOptions)Properties
- readonly
namestring - readonly
kind"message_too_large" - readonly
sizenumber - readonly
maxSizenumber
#SqsQueueNotFoundError
class SqsQueueNotFoundError extends SqsErrorSqsErrorError thrown when a queue is not found.
Constructor
new SqsQueueNotFoundError(message: string, queueUrl: string, options?: SqsErrorOptions)Properties
- readonly
namestring - readonly
kind"queue_not_found" - readonly
queueUrlstring
Interfaces
#SqsBatchFailedEntry
interface SqsBatchFailedEntryFailed batch entry.
Properties
- readonly
idstring - readonly
codestring - readonly
messagestring
#SqsBatchMessage
interface SqsBatchMessageBatch message for sendBatch.
| Name | Description |
|---|---|
id | — |
body | — |
delaySeconds | — |
messageAttributes | — |
Properties
- readonly
idstring - readonly
bodystring - readonly
delaySeconds?number
#SqsBatchSuccessEntry
interface SqsBatchSuccessEntrySuccessful batch send entry.
Properties
- readonly
messageIdstring - readonly
idstring
#SqsClient
interface SqsClient extends AsyncDisposableSQS client interface.
| Name | Description |
|---|---|
config | — |
queueUrl | The current queue URL. |
setQueueUrl() | Set the queue URL for subsequent operations. |
ensureQueue() | Ensure a queue exists. |
deleteQueue() | Delete a queue by URL. |
send() | Send a message to the queue. |
sendBatch() | Send multiple messages to the queue in a single request. |
receive() | Receive messages from the queue. |
delete() | Delete a message from the queue. |
deleteBatch() | Delete multiple messages from the queue in a single request. |
purge() | Purge all messages from the queue. |
close() | Close the client and release resources. |
Properties
- readonly
queueUrlstring | undefinedThe current queue URL. Can be set via config, ensureQueue(), or setQueueUrl().
Methods
setQueueUrl(queueUrl: string): voidSet the queue URL for subsequent operations.
Parameters
queueUrlstring
ensureQueue(queueName: string, options?: SqsEnsureQueueOptions): Promise<SqsEnsureQueueResult>Ensure a queue exists. Creates the queue if it doesn't exist. If the queue already exists with the same attributes, returns the existing queue URL. Also sets the queue URL for subsequent operations.
Parameters
queueNamestringoptions?SqsEnsureQueueOptions
deleteQueue(queueUrl: string, options?: CommonOptions): Promise<SqsDeleteQueueResult>Delete a queue by URL.
Parameters
queueUrlstringoptions?CommonOptions
send(body: string, options?: SqsSendOptions): Promise<SqsSendResult>Send a message to the queue.
Parameters
bodystringoptions?SqsSendOptions
sendBatch(messages: SqsBatchMessage[]): Promise<SqsSendBatchResult>Send multiple messages to the queue in a single request.
Parameters
messagesSqsBatchMessage[]
receive(options?: SqsReceiveOptions): Promise<SqsReceiveResult>Receive messages from the queue.
Parameters
options?SqsReceiveOptions
delete(receiptHandle: string, options?: CommonOptions): Promise<SqsDeleteResult>Delete a message from the queue.
Parameters
receiptHandlestringoptions?CommonOptions
deleteBatch(receiptHandles: string[], options?: CommonOptions): Promise<SqsDeleteBatchResult>Delete multiple messages from the queue in a single request.
Parameters
receiptHandlesstring[]options?CommonOptions
purge(options?: CommonOptions): Promise<SqsDeleteResult>Purge all messages from the queue.
Parameters
options?CommonOptions
close(): Promise<void>Close the client and release resources.
#SqsClientConfig
interface SqsClientConfig extends CommonOptionsSQS client configuration.
| Name | Description |
|---|---|
region | AWS region |
credentials | AWS credentials |
queueUrl | SQS queue URL (optional - can be set later or used with ensureQueue) |
url | SQS endpoint URL (e.g., "http://localhost:4566" for LocalStack). |
Properties
- readonly
regionstringAWS region
- readonly
credentials?{ accessKeyId: string; secretAccessKey: string }AWS credentials
- readonly
queueUrl?stringSQS queue URL (optional - can be set later or used with ensureQueue)
SQS endpoint URL (e.g., "http://localhost:4566" for LocalStack). Can be a string URL or a connection config object. Optional for real AWS (uses default endpoint), required for LocalStack.
#SqsCommandErrorOptions
interface SqsCommandErrorOptions extends SqsErrorOptionsOptions for SQS command errors.
| Name | Description |
|---|---|
operation | — |
Properties
- readonly
operationstring
#SqsConnectionConfig
interface SqsConnectionConfig extends CommonConnectionConfigSQS connection configuration.
Extends CommonConnectionConfig with SQS-specific options.
| Name | Description |
|---|---|
protocol | Protocol to use. |
path | Custom path (for LocalStack or custom endpoints). |
region | AWS region (required for AWS, optional for LocalStack). |
Properties
- readonly
protocol?"http" | "https"Protocol to use.
- readonly
path?stringCustom path (for LocalStack or custom endpoints).
- readonly
region?stringAWS region (required for AWS, optional for LocalStack).
#SqsDeleteBatchResult
interface SqsDeleteBatchResultResult of batch deleting messages.
| Name | Description |
|---|---|
type | — |
ok | — |
successful | — |
failed | — |
duration | — |
Properties
- readonly
type"sqs:delete-batch" - readonly
okboolean - readonly
successfulreadonly string[] - readonly
durationnumber
#SqsDeleteQueueResult
interface SqsDeleteQueueResultResult of deleting a queue.
Properties
- readonly
type"sqs:delete-queue" - readonly
okboolean - readonly
durationnumber
#SqsDeleteResult
interface SqsDeleteResultResult of deleting a message.
Properties
- readonly
type"sqs:delete" - readonly
okboolean - readonly
durationnumber
#SqsEnsureQueueOptions
interface SqsEnsureQueueOptions extends CommonOptionsOptions for ensuring a queue exists.
| Name | Description |
|---|---|
attributes | Queue attributes (e.g., DelaySeconds, MessageRetentionPeriod) |
tags | Queue tags |
Properties
- readonly
attributes?Record<string, string>Queue attributes (e.g., DelaySeconds, MessageRetentionPeriod)
#SqsEnsureQueueResult
interface SqsEnsureQueueResultResult of ensuring a queue exists.
Properties
- readonly
type"sqs:ensure-queue" - readonly
okboolean - readonly
queueUrlstring - readonly
durationnumber
#SqsErrorOptions
interface SqsErrorOptions extends ErrorOptionsOptions for SQS errors.
| Name | Description |
|---|---|
code | — |
Properties
- readonly
code?string
#SqsMessage
interface SqsMessageSQS message received from a queue.
| Name | Description |
|---|---|
messageId | — |
body | — |
receiptHandle | — |
attributes | — |
messageAttributes | — |
md5OfBody | — |
Properties
- readonly
messageIdstring - readonly
bodystring - readonly
receiptHandlestring - readonly
attributesRecord<string, string> - readonly
md5OfBodystring
#SqsMessageAttribute
interface SqsMessageAttributeSQS message attributes.
| Name | Description |
|---|---|
dataType | — |
stringValue | — |
binaryValue | — |
Properties
- readonly
dataType"String" | "Number" | "Binary" - readonly
stringValue?string - readonly
binaryValue?Uint8Array
#SqsMessages
interface SqsMessages extends ReadonlyArray<SqsMessage>Message array with helper methods.
| Name | Description |
|---|---|
first() | Get the first message or undefined if empty |
firstOrThrow() | Get the first message or throw if empty |
last() | Get the last message or undefined if empty |
lastOrThrow() | Get the last message or throw if empty |
Methods
first(): SqsMessage | undefinedGet the first message or undefined if empty
firstOrThrow(): SqsMessageGet the first message or throw if empty
last(): SqsMessage | undefinedGet the last message or undefined if empty
lastOrThrow(): SqsMessageGet the last message or throw if empty
#SqsReceiveOptions
interface SqsReceiveOptions extends CommonOptionsOptions for receiving messages.
| Name | Description |
|---|---|
maxMessages | Maximum number of messages to receive (1-10, default: 1) |
waitTimeSeconds | Wait time in seconds for long polling (0-20) |
visibilityTimeout | Visibility timeout in seconds (0-43200) |
attributeNames | System attribute names to retrieve |
messageAttributeNames | Message attribute names to retrieve |
Properties
- readonly
maxMessages?numberMaximum number of messages to receive (1-10, default: 1)
- readonly
waitTimeSeconds?numberWait time in seconds for long polling (0-20)
- readonly
visibilityTimeout?numberVisibility timeout in seconds (0-43200)
- readonly
attributeNames?readonly string[]System attribute names to retrieve
- readonly
messageAttributeNames?readonly string[]Message attribute names to retrieve
#SqsReceiveResult
interface SqsReceiveResultResult of receiving messages.
Properties
- readonly
type"sqs:receive" - readonly
okboolean - readonly
durationnumber
#SqsSendBatchResult
interface SqsSendBatchResultResult of batch sending messages.
| Name | Description |
|---|---|
type | — |
ok | — |
successful | — |
failed | — |
duration | — |
Properties
- readonly
type"sqs:send-batch" - readonly
okboolean - readonly
durationnumber
#SqsSendOptions
interface SqsSendOptions extends CommonOptionsOptions for sending a message.
| Name | Description |
|---|---|
delaySeconds | Delay in seconds before the message becomes visible (0-900) |
messageAttributes | Message attributes |
messageGroupId | Message group ID (required for FIFO queues) |
messageDeduplicationId | Message deduplication ID (required for FIFO queues without content-based deduplication) |
Properties
- readonly
delaySeconds?numberDelay in seconds before the message becomes visible (0-900)
Message attributes
- readonly
messageGroupId?stringMessage group ID (required for FIFO queues)
- readonly
messageDeduplicationId?stringMessage deduplication ID (required for FIFO queues without content-based deduplication)
Functions
#createSqsClient
function createSqsClient(config: SqsClientConfig): Promise<SqsClient>Create a new Amazon SQS client instance.
The client provides queue management, message publishing and consumption, batch operations, and supports both standard and FIFO queues via AWS SDK.
Parameters
configSqsClientConfig- SQS client configuration
Returns
Promise<SqsClient> — A promise resolving to a new SQS client instance
Examples
Basic usage with existing queue
const sqs = await createSqsClient({
region: "ap-northeast-1",
queueUrl: "https://sqs.ap-northeast-1.amazonaws.com/123456789/my-queue",
});
// Send a message
const sendResult = await sqs.send(JSON.stringify({
type: "ORDER",
orderId: "123",
}));
console.log("Message ID:", sendResult.messageId);
await sqs.close();
Using LocalStack for local development
const sqs = await createSqsClient({
region: "us-east-1",
url: "http://localhost:4566",
credentials: {
accessKeyId: "test",
secretAccessKey: "test",
},
});
// Create queue dynamically (also sets queueUrl)
const result = await sqs.ensureQueue("test-queue");
console.log(result.queueUrl); // http://localhost:4566/000000000000/test-queue
Receiving messages with long polling
// Long polling waits up to 20 seconds for messages
const receiveResult = await sqs.receive({
maxMessages: 10,
waitTimeSeconds: 20,
visibilityTimeout: 30,
});
console.log("Received:", receiveResult.messages.length);
// Process and acknowledge messages
for (const msg of receiveResult.messages) {
const data = JSON.parse(msg.body);
console.log("Processing:", data);
// Delete after successful processing
await sqs.delete(msg.receiptHandle);
}
Batch operations for high throughput
// Send multiple messages in a single API call
const batchResult = await sqs.sendBatch([
{ id: "1", body: JSON.stringify({ event: "user.created", userId: "a1" }) },
{ id: "2", body: JSON.stringify({ event: "user.created", userId: "a2" }) },
{ id: "3", body: JSON.stringify({ event: "user.updated", userId: "a3" }) },
]);
console.log(`Sent: ${batchResult.successful.length}`);
console.log(`Failed: ${batchResult.failed.length}`);
// Batch delete processed messages
const handles = receiveResult.messages.map(m => m.receiptHandle);
await sqs.deleteBatch(handles);
FIFO queue with deduplication
const sqs = await createSqsClient({
region: "ap-northeast-1",
queueUrl: "https://sqs.ap-northeast-1.amazonaws.com/123456789/orders.fifo",
});
// FIFO queues require MessageGroupId and optionally MessageDeduplicationId
await sqs.send(JSON.stringify({ orderId: "order-123" }), {
messageGroupId: "orders",
messageDeduplicationId: "order-123-v1",
});
Using await using for automatic cleanup
await using sqs = await createSqsClient({
region: "us-east-1",
url: "http://localhost:4566",
});
await sqs.ensureQueue("test-queue");
await sqs.send("Hello, SQS!");
// Client automatically closed when scope exits
#createSqsMessages
function createSqsMessages(messages: SqsMessage[]): SqsMessagesCreate an SqsMessages array with helper methods.
Parameters
messagesSqsMessage[]
Type Aliases
#SqsResult
type SqsResult = SqsSendResult | SqsSendBatchResult | SqsReceiveResult | SqsDeleteResult | SqsDeleteBatchResult | SqsEnsureQueueResult | SqsDeleteQueueResultUnion type of all SQS result types.
