| 1 | import * as ivsrealtime from "@distilled.cloud/aws/ivs-realtime"; |
| 2 | import * as Effect from "effect/Effect"; |
| 3 | import * as Layer from "effect/Layer"; |
| 4 | import { toWireSeconds } from "../../Util/Duration.ts"; |
| 5 | import { makeIvsRealtimeReplicationHttpBinding } from "./BindingHttp.ts"; |
| 6 | import { |
| 7 | StartParticipantReplication, |
| 8 | type StartParticipantReplicationRequest, |
| 9 | } from "./StartParticipantReplication.ts"; |
| 10 | import type { Stage } from "./Stage.ts"; |
| 11 | |
| 12 | export const StartParticipantReplicationHttp = Layer.effect( |
| 13 | StartParticipantReplication, |
| 14 | Effect.gen(function* () { |
| 15 | const make = yield* makeIvsRealtimeReplicationHttpBinding({ |
| 16 | tag: "AWS.IVSRealtime.StartParticipantReplication", |
| 17 | operation: ivsrealtime.startParticipantReplication, |
| 18 | actions: ["ivs:StartParticipantReplication"], |
| 19 | }); |
| 20 | return Effect.fn(function* (sourceStage: Stage, destinationStage: Stage) { |
| 21 | const startReplication = yield* make(sourceStage, destinationStage); |
| 22 | return ({ |
| 23 | reconnectWindow, |
| 24 | ...request |
| 25 | }: StartParticipantReplicationRequest) => |
| 26 | startReplication({ |
| 27 | ...request, |
| 28 | reconnectWindowSeconds: toWireSeconds(reconnectWindow), |
| 29 | }); |
| 30 | }); |
| 31 | }), |
| 32 | ); |