| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import { BusEvent } from "@/bus/bus-event"
- import { Bus } from "@/bus"
- import { Instance } from "@/project/instance"
- import z from "zod"
- export namespace SessionStatus {
- export const Info = z
- .union([
- z.object({
- type: z.literal("idle"),
- }),
- z.object({
- type: z.literal("retry"),
- attempt: z.number(),
- message: z.string(),
- next: z.number(),
- }),
- z.object({
- type: z.literal("busy"),
- }),
- ])
- .meta({
- ref: "SessionStatus",
- })
- export type Info = z.infer<typeof Info>
- export const Event = {
- Status: BusEvent.define(
- "session.status",
- z.object({
- sessionID: z.string(),
- status: Info,
- }),
- ),
- // deprecated
- Idle: BusEvent.define(
- "session.idle",
- z.object({
- sessionID: z.string(),
- }),
- ),
- }
- const state = Instance.state(() => {
- const data: Record<string, Info> = {}
- return data
- })
- export function get(sessionID: string) {
- return (
- state()[sessionID] ?? {
- type: "idle",
- }
- )
- }
- export function list() {
- return state()
- }
- export function set(sessionID: string, status: Info) {
- Bus.publish(Event.Status, {
- sessionID,
- status,
- })
- if (status.type === "idle") {
- // deprecated
- Bus.publish(Event.Idle, {
- sessionID,
- })
- delete state()[sessionID]
- return
- }
- state()[sessionID] = status
- }
- }
|