recorded-websocket.ts 1006 B

1234567891011121314151617181920212223242526
  1. import { Cassette, makeWebSocketExecutor, type RecordReplayMode } 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. export const webSocketCassetteLayer = (
  7. cassette: string,
  8. input: { readonly metadata?: Record<string, unknown>; readonly mode: RecordReplayMode },
  9. ): Layer.Layer<WebSocketExecutorService, never, Cassette.Service> =>
  10. Layer.effect(
  11. WebSocketExecutor.Service,
  12. Effect.gen(function* () {
  13. const cassetteService = yield* Cassette.Service
  14. const executor = yield* makeWebSocketExecutor({
  15. name: cassette,
  16. mode: input.mode,
  17. metadata: input.metadata,
  18. cassette: cassetteService,
  19. live: { open: liveWebSocket },
  20. compareClientMessagesAsJson: true,
  21. })
  22. return WebSocketExecutor.Service.of(executor)
  23. }),
  24. )