Action<{ method: string; initiator: "frontend" | "backend" | "both"; side_effects: boolean; input: ZodType<unknown, unknown, $ZodTypeInternals<unknown, unknown>>; output: ZodType<unknown, unknown, $ZodTypeInternals<unknown, unknown>>; ... 6 more ...; rate_limit?: "both" | ... 2 more ... | undefined; } | { ...; } | {... type Action<ActionSpecUnion>
import {cancel_action} from '@fuzdev/fuz_app/actions/cancel.js'; Protocol-action tuple — spread into the server's actions array (or via
protocol_actions from actions/protocol.ts) so the dispatcher registers the
spec for input validation and so create_rpc_client codegen sees the
method. The client doesn't need to call it directly;
FrontendWebsocketClient.request({signal}) sends the cancel notification
automatically when the signal fires.