1import * as sqs from "@distilled.cloud/aws/sqs";
2import * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { Queue } from "./Queue.ts";
5
6export interface DeleteMessageRequest extends Omit<
7 sqs.DeleteMessageRequest,
8 "QueueUrl"
9> {}
10
11/**
12 * Runtime binding for `sqs:DeleteMessage`.
13 *
14 * Bind this operation to a {@link Queue} inside a function runtime to delete
15 * a message after it has been received and processed. The binding grants the
16 * host function `sqs:DeleteMessage` on the queue. Provide the
17 * `DeleteMessageHttp` layer on the Function to implement the binding.
18 * ### Deleting Messages
19 * **Example:** Delete a Processed Message
20 * ```typescript
21 * // init (provide SQS.DeleteMessageHttp on the Function)
22 * const deleteMessage = yield* SQS.DeleteMessage(queue);
23 *
24 * // runtime: acknowledge a message received via ReceiveMessage
25 * const result = yield* receiveMessage({ MaxNumberOfMessages: 1 });
26 * const [message] = result.Messages ?? [];
27 * if (message?.ReceiptHandle) {
28 * yield* deleteMessage({ ReceiptHandle: message.ReceiptHandle });
29 * }
30 * ```
31 *
32 * @binding
33 */
34export interface DeleteMessage extends Binding.Service<
35 DeleteMessage,
36 "AWS.SQS.DeleteMessage",
37 (
38 queue: Queue,
39 ) => Effect.Effect<
40 (
41 request: DeleteMessageRequest,
42 ) => Effect.Effect<sqs.DeleteMessageResponse, sqs.DeleteMessageError>
43 >
44> {}
45
46export const DeleteMessage = Binding.Service<DeleteMessage>(
47 "AWS.SQS.DeleteMessage",
48);