recorded-websocket.ts 1019 B

123456789101112131415161718192021222324252627
  1. import { Cassette, makeWebSocketExecutor } from "@opencode-ai/http-recorder"
  2. import { Effect, Layer } from "effect"
  3. import { WebSocketExecutor } from "../src/route"
  4. import type { Service as WebSocketExecutorService } from "../src/route/transport/websocket"
  5. const liveWebSocket = WebSocketExecutor.open
  6. type Mode = "record" | "replay" | "passthrough"
  7. export const webSocketCassetteLayer = (
  8. cassette: string,
  9. input: { readonly metadata?: Record<string, unknown>; readonly mode: Mode },
  10. ): Layer.Layer<WebSocketExecutorService, never, Cassette.Service> =>
  11. Layer.effect(
  12. WebSocketExecutor.Service,
  13. Effect.gen(function* () {
  14. const cassetteService = yield* Cassette.Service
  15. const executor = yield* makeWebSocketExecutor({
  16. name: cassette,
  17. mode: input.mode,
  18. metadata: input.metadata,
  19. cassette: cassetteService,
  20. live: { open: liveWebSocket },
  21. compareClientMessagesAsJson: true,
  22. })
  23. return WebSocketExecutor.Service.of(executor)
  24. }),
  25. )