@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 AsyncDisposable for 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
Package Description
@probitas/client Core utilities and types
@probitas/client-rabbitmq RabbitMQ client

Installation

deno add jsr:@probitas/client-sqs

Classes

class

#SqsBatchError

class SqsBatchError extends SqsError
ExtendsSqsError

Error thrown when a batch operation partially fails.

NameDescription
name
kind
failedCount
Constructor
new SqsBatchError(message: string, failedCount: number, options?: SqsErrorOptions)
Properties
  • readonlynamestring
  • readonlykind"batch"
  • readonlyfailedCountnumber
class

#SqsCommandError

class SqsCommandError extends SqsError
ExtendsSqsError

Error thrown when an SQS command fails.

NameDescription
name
kind
operation
Constructor
new SqsCommandError(message: string, options: SqsCommandErrorOptions)
Properties
  • readonlynamestring
  • readonlykind"command"
  • readonlyoperationstring
class

#SqsConnectionError

class SqsConnectionError extends SqsError
ExtendsSqsError

Error thrown when an SQS connection cannot be established.

NameDescription
name
kind
Constructor
new SqsConnectionError(message: string, options?: SqsErrorOptions)
Properties
  • readonlynamestring
  • readonlykind"connection"
class

#SqsError

class SqsError extends ClientError

Base error class for SQS client errors.

NameDescription
name
code
Constructor
new SqsError(message: string, _: unknown, options?: SqsErrorOptions)
Properties
  • readonlynamestring
  • readonlycode?string
class

#SqsMessageNotFoundError

class SqsMessageNotFoundError extends SqsError
ExtendsSqsError

Error thrown when a message is not found or receipt handle is invalid.

NameDescription
name
kind
Constructor
new SqsMessageNotFoundError(message: string, options?: SqsErrorOptions)
Properties
  • readonlynamestring
  • readonlykind"message_not_found"
class

#SqsMessageTooLargeError

class SqsMessageTooLargeError extends SqsError
ExtendsSqsError

Error thrown when a message exceeds the size limit.

NameDescription
name
kind
size
maxSize
Constructor
new SqsMessageTooLargeError(message: string, size: number, maxSize: number, options?: SqsErrorOptions)
Properties
  • readonlynamestring
  • readonlykind"message_too_large"
  • readonlysizenumber
  • readonlymaxSizenumber
class

#SqsQueueNotFoundError

class SqsQueueNotFoundError extends SqsError
ExtendsSqsError

Error thrown when a queue is not found.

NameDescription
name
kind
queueUrl
Constructor
new SqsQueueNotFoundError(message: string, queueUrl: string, options?: SqsErrorOptions)
Properties
  • readonlynamestring
  • readonlykind"queue_not_found"
  • readonlyqueueUrlstring

Interfaces

interface

#SqsBatchFailedEntry

interface SqsBatchFailedEntry

Failed batch entry.

NameDescription
id
code
message
Properties
  • readonlyidstring
  • readonlycodestring
  • readonlymessagestring
interface

#SqsBatchMessage

interface SqsBatchMessage

Batch message for sendBatch.

NameDescription
id
body
delaySeconds
messageAttributes
Properties
  • readonlyidstring
  • readonlybodystring
  • readonlydelaySeconds?number
  • readonlymessageAttributes?Record<string, SqsMessageAttribute>
interface

#SqsBatchSuccessEntry

interface SqsBatchSuccessEntry

Successful batch send entry.

NameDescription
messageId
id
Properties
  • readonlymessageIdstring
  • readonlyidstring
interface

#SqsClient

interface SqsClient extends AsyncDisposable

SQS client interface.

NameDescription
config
queueUrlThe 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
  • readonlyconfigSqsClientConfig
  • readonlyqueueUrlstring | undefined

    The current queue URL. Can be set via config, ensureQueue(), or setQueueUrl().

Methods
setQueueUrl(queueUrl: string): void

Set 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
deleteQueue(queueUrl: string, options?: CommonOptions): Promise<SqsDeleteQueueResult>

Delete a queue by URL.

Parameters
send(body: string, options?: SqsSendOptions): Promise<SqsSendResult>

Send a message to the queue.

Parameters
sendBatch(messages: SqsBatchMessage[]): Promise<SqsSendBatchResult>

Send multiple messages to the queue in a single request.

Parameters
receive(options?: SqsReceiveOptions): Promise<SqsReceiveResult>

Receive messages from the queue.

Parameters
delete(receiptHandle: string, options?: CommonOptions): Promise<SqsDeleteResult>

Delete a message from the queue.

Parameters
deleteBatch(receiptHandles: string[], options?: CommonOptions): Promise<SqsDeleteBatchResult>

Delete multiple messages from the queue in a single request.

Parameters
purge(options?: CommonOptions): Promise<SqsDeleteResult>

Purge all messages from the queue.

Parameters
close(): Promise<void>

Close the client and release resources.

interface

#SqsClientConfig

interface SqsClientConfig extends CommonOptions

SQS client configuration.

NameDescription
regionAWS region
credentialsAWS credentials
queueUrlSQS queue URL (optional - can be set later or used with ensureQueue)
urlSQS endpoint URL (e.g., "http://localhost:4566" for LocalStack).
Properties
  • readonlyregionstring

    AWS region

  • readonlycredentials?{ accessKeyId: string; secretAccessKey: string }

    AWS credentials

  • readonlyqueueUrl?string

    SQS queue URL (optional - can be set later or used with ensureQueue)

  • readonlyurl?string | SqsConnectionConfig

    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.

interface

#SqsCommandErrorOptions

interface SqsCommandErrorOptions extends SqsErrorOptions

Options for SQS command errors.

NameDescription
operation
Properties
  • readonlyoperationstring
interface

#SqsConnectionConfig

interface SqsConnectionConfig extends CommonConnectionConfig

SQS connection configuration.

Extends CommonConnectionConfig with SQS-specific options.

NameDescription
protocolProtocol to use.
pathCustom path (for LocalStack or custom endpoints).
regionAWS region (required for AWS, optional for LocalStack).
Properties
  • readonlyprotocol?"http" | "https"

    Protocol to use.

  • readonlypath?string

    Custom path (for LocalStack or custom endpoints).

  • readonlyregion?string

    AWS region (required for AWS, optional for LocalStack).

interface

#SqsDeleteBatchResult

interface SqsDeleteBatchResult

Result of batch deleting messages.

NameDescription
type
ok
successful
failed
duration
Properties
  • readonlytype"sqs:delete-batch"
  • readonlyokboolean
  • readonlysuccessfulreadonly string[]
  • readonlyfailedreadonly SqsBatchFailedEntry[]
  • readonlydurationnumber
interface

#SqsDeleteQueueResult

interface SqsDeleteQueueResult

Result of deleting a queue.

NameDescription
type
ok
duration
Properties
  • readonlytype"sqs:delete-queue"
  • readonlyokboolean
  • readonlydurationnumber
interface

#SqsDeleteResult

interface SqsDeleteResult

Result of deleting a message.

NameDescription
type
ok
duration
Properties
  • readonlytype"sqs:delete"
  • readonlyokboolean
  • readonlydurationnumber
interface

#SqsEnsureQueueOptions

interface SqsEnsureQueueOptions extends CommonOptions

Options for ensuring a queue exists.

NameDescription
attributesQueue attributes (e.g., DelaySeconds, MessageRetentionPeriod)
tagsQueue tags
Properties
  • readonlyattributes?Record<string, string>

    Queue attributes (e.g., DelaySeconds, MessageRetentionPeriod)

  • readonlytags?Record<string, string>

    Queue tags

interface

#SqsEnsureQueueResult

interface SqsEnsureQueueResult

Result of ensuring a queue exists.

NameDescription
type
ok
queueUrl
duration
Properties
  • readonlytype"sqs:ensure-queue"
  • readonlyokboolean
  • readonlyqueueUrlstring
  • readonlydurationnumber
interface

#SqsErrorOptions

interface SqsErrorOptions extends ErrorOptions

Options for SQS errors.

NameDescription
code
Properties
  • readonlycode?string
interface

#SqsMessage

interface SqsMessage

SQS message received from a queue.

Properties
  • readonlymessageIdstring
  • readonlybodystring
  • readonlyreceiptHandlestring
  • readonlyattributesRecord<string, string>
  • readonlymessageAttributes?Record<string, SqsMessageAttribute>
  • readonlymd5OfBodystring
interface

#SqsMessageAttribute

interface SqsMessageAttribute

SQS message attributes.

NameDescription
dataType
stringValue
binaryValue
Properties
  • readonlydataType"String" | "Number" | "Binary"
  • readonlystringValue?string
  • readonlybinaryValue?Uint8Array
interface

#SqsMessages

interface SqsMessages extends ReadonlyArray<SqsMessage>

Message array with helper methods.

NameDescription
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 | undefined

Get the first message or undefined if empty

firstOrThrow(): SqsMessage

Get the first message or throw if empty

last(): SqsMessage | undefined

Get the last message or undefined if empty

lastOrThrow(): SqsMessage

Get the last message or throw if empty

interface

#SqsReceiveOptions

interface SqsReceiveOptions extends CommonOptions

Options for receiving messages.

NameDescription
maxMessagesMaximum number of messages to receive (1-10, default: 1)
waitTimeSecondsWait time in seconds for long polling (0-20)
visibilityTimeoutVisibility timeout in seconds (0-43200)
attributeNamesSystem attribute names to retrieve
messageAttributeNamesMessage attribute names to retrieve
Properties
  • readonlymaxMessages?number

    Maximum number of messages to receive (1-10, default: 1)

  • readonlywaitTimeSeconds?number

    Wait time in seconds for long polling (0-20)

  • readonlyvisibilityTimeout?number

    Visibility timeout in seconds (0-43200)

  • readonlyattributeNames?readonly string[]

    System attribute names to retrieve

  • readonlymessageAttributeNames?readonly string[]

    Message attribute names to retrieve

interface

#SqsReceiveResult

interface SqsReceiveResult

Result of receiving messages.

NameDescription
type
ok
messages
duration
Properties
  • readonlytype"sqs:receive"
  • readonlyokboolean
  • readonlymessagesSqsMessages
  • readonlydurationnumber
interface

#SqsSendBatchResult

interface SqsSendBatchResult

Result of batch sending messages.

NameDescription
type
ok
successful
failed
duration
Properties
interface

#SqsSendOptions

interface SqsSendOptions extends CommonOptions

Options for sending a message.

NameDescription
delaySecondsDelay in seconds before the message becomes visible (0-900)
messageAttributesMessage attributes
messageGroupIdMessage group ID (required for FIFO queues)
messageDeduplicationIdMessage deduplication ID (required for FIFO queues without content-based deduplication)
Properties
  • readonlydelaySeconds?number

    Delay in seconds before the message becomes visible (0-900)

  • readonlymessageAttributes?Record<string, SqsMessageAttribute>

    Message attributes

  • readonlymessageGroupId?string

    Message group ID (required for FIFO queues)

  • readonlymessageDeduplicationId?string

    Message deduplication ID (required for FIFO queues without content-based deduplication)

interface

#SqsSendResult

interface SqsSendResult

Result of sending a message.

NameDescription
type
ok
messageId
md5OfBody
sequenceNumber
duration
Properties
  • readonlytype"sqs:send"
  • readonlyokboolean
  • readonlymessageIdstring
  • readonlymd5OfBodystring
  • readonlysequenceNumber?string
  • readonlydurationnumber

Functions

function

#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
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
function

#createSqsMessages

function createSqsMessages(messages: SqsMessage[]): SqsMessages

Create an SqsMessages array with helper methods.

Parameters

Type Aliases

type

#SqsResult

type SqsResult = SqsSendResult | SqsSendBatchResult | SqsReceiveResult | SqsDeleteResult | SqsDeleteBatchResult | SqsEnsureQueueResult | SqsDeleteQueueResult

Union type of all SQS result types.

Search Documentation