Buckets:
| import { EventV2 } from "@opencode-ai/core/event" | |
| import { Location } from "@opencode-ai/core/location" | |
| import { Effect, Stream } from "effect" | |
| import { HttpServerResponse } from "effect/unstable/http" | |
| import { HttpApiBuilder } from "effect/unstable/httpapi" | |
| import * as Sse from "effect/unstable/encoding/Sse" | |
| import { Api } from "../api" | |
| function eventData(data: unknown): Sse.Event { | |
| return { | |
| _tag: "Event", | |
| event: "message", | |
| id: undefined, | |
| data: JSON.stringify(data), | |
| } | |
| } | |
| export const EventHandler = HttpApiBuilder.group(Api, "server.event", (handlers) => | |
| Effect.gen(function* () { | |
| const events = yield* EventV2.Service | |
| return handlers.handleRaw("event.subscribe", () => | |
| Effect.gen(function* () { | |
| const location = yield* Location.Service | |
| const connected = { | |
| id: EventV2.ID.create(), | |
| type: "server.connected", | |
| location: new Location.Info({ | |
| directory: location.directory, | |
| workspaceID: location.workspaceID, | |
| project: location.project, | |
| }), | |
| data: {}, | |
| } | |
| return HttpServerResponse.stream( | |
| Stream.make(connected).pipe( | |
| Stream.concat( | |
| events | |
| .all() | |
| .pipe( | |
| Stream.filter( | |
| (event) => | |
| event.location?.directory === location.directory && | |
| event.location.workspaceID === location.workspaceID, | |
| ), | |
| ), | |
| ), | |
| Stream.map(eventData), | |
| Stream.pipeThroughChannel(Sse.encode()), | |
| Stream.encodeText, | |
| ), | |
| { | |
| contentType: "text/event-stream", | |
| headers: { | |
| "Cache-Control": "no-cache, no-transform", | |
| "X-Accel-Buffering": "no", | |
| "X-Content-Type-Options": "nosniff", | |
| }, | |
| }, | |
| ) | |
| }), | |
| ) | |
| }), | |
| ) | |
Xet Storage Details
- Size:
- 1.97 kB
- Xet hash:
- c952bc6b5ae2608d26e8ab012529c90b8720ec277de7ef40d7f1f2f4f10f5357
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.