import { z } from "zod"; import type { ChiBaseApi, ChiModuleDefinition, CohortIdentity, } from "../contract"; import { version } from "../package.json"; export const CHI_BASE_MODULE_ID = "chi-base"; export const identitySchema = z.object({ github: z.string().default(""), displayName: z.string().default(""), team: z.string().default(""), role: z.string().default(""), relayPublicKey: z.string().default(""), }); export function createChiBaseModule(): ChiModuleDefinition< ChiBaseApi, CohortIdentity > { let identity: CohortIdentity = identitySchema.parse({}); const listeners = new Set<(identity: CohortIdentity) => void>(); return { id: CHI_BASE_MODULE_ID, version, api: { getIdentity: () => identity, onIdentityChange(listener) { listeners.add(listener); return () => listeners.delete(listener); }, }, config: { schemaVersion: 1, schema: identitySchema }, initialize(_chi, config) { identity = config; }, onConfigChange(_chi, current) { identity = current; for (const listener of listeners) listener(current); }, }; }