1import * as rdsdata from "@distilled.cloud/aws/rds-data";
2import * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { RuntimeContext } from "../../RuntimeContext.ts";
5import type { DBCluster } from "../RDS/DBCluster.ts";
6import type { Secret } from "../SecretsManager/Secret.ts";
7
8export interface RollbackTransactionOptions {
9 secret: Secret;
10}
11
12export interface RollbackTransactionRequest extends Omit<
13 rdsdata.RollbackTransactionRequest,
14 "resourceArn" | "secretArn"
15> {}
16
17/**
18 * Runtime binding for `rds-data:RollbackTransaction` — roll back a Data API
19 * transaction opened with `AWS.RDSData.BeginTransaction`, discarding every
20 * statement executed under its `transactionId`.
21 *
22 * Bind it to the same `DBCluster` and credentials secret as the rest of the
23 * transaction; provide the implementation with
24 * `Effect.provide(AWS.RDSData.RollbackTransactionHttp)`.
25 * ### Transactions
26 * **Example:** Roll Back on Failure
27 * ```typescript
28 * // init
29 * const rollbackTransaction = yield* AWS.RDSData.RollbackTransaction(
30 * db.cluster,
31 * { secret: db.secret },
32 * );
33 *
34 * // runtime — abandon the transaction; its inserts never become visible
35 * const rollback = yield* rollbackTransaction({
36 * transactionId: tx.transactionId!,
37 * });
38 * // rollback.transactionStatus === "Rollback Complete"
39 * ```
40 *
41 * @binding
42 */
43export interface RollbackTransaction extends Binding.Service<
44 RollbackTransaction,
45 "AWS.RDSData.RollbackTransaction",
46 (
47 cluster: DBCluster,
48 options: RollbackTransactionOptions,
49 ) => Effect.Effect<
50 (
51 request: RollbackTransactionRequest,
52 ) => Effect.Effect<
53 rdsdata.RollbackTransactionResponse,
54 rdsdata.RollbackTransactionError,
55 RuntimeContext
56 >
57 >
58> {}
59
60export const RollbackTransaction = Binding.Service<RollbackTransaction>(
61 "AWS.RDSData.RollbackTransaction",
62);