sdk.tsx 1015 B

12345678910111213141516171819202122232425262728293031323334353637
  1. import { createOpencodeClient, type Event } from "@opencode-ai/sdk/client"
  2. import { createSimpleContext } from "./helper"
  3. import { createGlobalEmitter } from "@solid-primitives/event-bus"
  4. import { onCleanup } from "solid-js"
  5. export const { use: useSDK, provider: SDKProvider } = createSimpleContext({
  6. name: "SDK",
  7. init: (props: { url: string }) => {
  8. const abort = new AbortController()
  9. const sdk = createOpencodeClient({
  10. baseUrl: props.url,
  11. signal: abort.signal,
  12. fetch: (req) => {
  13. // @ts-ignore
  14. req.timeout = false
  15. return fetch(req)
  16. },
  17. })
  18. const emitter = createGlobalEmitter<{
  19. [key in Event["type"]]: Extract<Event, { type: key }>
  20. }>()
  21. sdk.event.subscribe().then(async (events) => {
  22. for await (const event of events.stream) {
  23. console.log("event", event.type)
  24. emitter.emit(event.type, event)
  25. }
  26. })
  27. onCleanup(() => {
  28. abort.abort()
  29. })
  30. return { client: sdk, event: emitter }
  31. },
  32. })