Skip to content

Where people and agents ship software together. The open-source git platform for the whole job: issues, agents, checks and deploys to the edge.

g1t.sh
67 linesCodeBlameRaw
1/**
2 * The folio RPC: every method in FOLIO_RPC_METHODS (packages/contracts
3 * folios.ts) and the Folios method that answers it. Typed against the
4 * contract's list, so a method added there and not here fails the
5 * typecheck. src/index.ts asks this table first, then Docs' own switch.
6 */
7import type { FolioRpcMethod } from "@g1t/contracts";
8
9import type { Folios } from "./service.ts";
10
11// Bodies come from other services as JSON; each method checks its own.
12// eslint-disable-next-line @typescript-eslint/no-explicit-any
13type Handler = (service: Folios, args: any) => Promise<unknown>;
14
15/**
16 * Methods workspace agents called, which g1t no longer has. The contract
17 * may still list them until it is trimmed; nothing here answers them.
18 */
19type RetiredMethod = Extract<FolioRpcMethod, `${string}_for_agent` | `${string}_as_agent`>;
20
21export const FOLIO_RPC: Record<Exclude<FolioRpcMethod, RetiredMethod>, Handler> = {
22 folio_list: (s, a) => s.list(a),
23 folio_sidebar: (s, a) => s.sidebar(a),
24 folio: (s, a) => s.folio(a),
25 folio_page: (s, a) => s.page(a),
26 create_folio: (s, a) => s.create(a),
27 update_folio: (s, a) => s.update(a),
28 move_folio: (s, a) => s.move(a),
29 duplicate_folio: (s, a) => s.duplicate(a),
30 trash_folio: (s, a) => s.trash(a),
31 restore_folio: (s, a) => s.restore(a),
32 delete_folio: (s, a) => s.delete(a),
33 folio_trash: (s, a) => s.trashed(a),
34 empty_folio_trash: (s, a) => s.emptyTrash(a),
35 favorite_folio: (s, a) => s.favorite(a),
36 folio_content: (s, a) => s.content(a),
37 edit_folio: (s, a) => s.edit(a),
38 folio_access: (s, a) => s.access(a),
39 set_folio_grant: (s, a) => s.setGrant(a),
40 set_folio_general_access: (s, a) => s.setGeneralAccess(a),
41 request_folio_access: (s, a) => s.requestAccess(a),
42 join_space: (s, a) => s.joinSpace(a),
43 leave_space: (s, a) => s.leaveSpace(a),
44 delete_space: (s, a) => s.deleteSpace(a),
45 search_folios: (s, a) => s.search(a),
46 folio_versions: (s, a) => s.versions(a),
47 folio_version: (s, a) => s.version(a),
48 restore_folio_version: (s, a) => s.restoreVersion(a),
49 folio_templates: (s, a) => s.templates(a),
50 save_folio_template: (s, a) => s.saveTemplate(a),
51 delete_folio_template: (s, a) => s.deleteTemplate(a),
52 export_folio: (s, a) => s.export(a),
53 folio_suggestions: (s, a) => s.suggestions(a),
54 decide_folio_suggestion: (s, a) => s.decideSuggestion(a),
55 folio_proposals: (s, a) => s.proposals(a),
56 decide_folio_proposal: (s, a) => s.decideProposal(a),
57 folio_thread: (s, a) => s.thread(a),
58 folio_threads: (s, a) => s.threads(a),
59 query_tile: (s, a) => s.queryTile(a),
60 query_dataset: (s, a) => s.queryDataset(a),
61 mark_folio_current: (s, a) => s.markCurrent(a),
62 reindex_folios: (s, a) => s.reindex(a),
63};
64
65export function folioHandler(method: string): Handler | null {
66 return Object.prototype.hasOwnProperty.call(FOLIO_RPC, method) ? FOLIO_RPC[method as keyof typeof FOLIO_RPC] : null;
67}