Files
Ekklesia/packages/module-ui-sdk/tests/browser-boundary/supported.tsx
T
ekklesia fc6c8045c4
CI / verify (pull_request) Successful in 37s
CI / infrastructure-smoke (pull_request) Successful in 13s
CI / migration-smoke (pull_request) Successful in 1m7s
feat: add native module realtime transport
2026-08-23 18:47:18 -05:00

34 lines
1.1 KiB
TypeScript

// A module author's supported UI source: it imports the public SDK and must typecheck cleanly
// under the exact browser project a module uses (`browser-react.json`, `"types": []`).
import {
defineModuleUi,
type ModuleUiHostContext,
type ModuleUiPrincipal,
} from "../../src/index.js";
function describePrincipal(principal: ModuleUiPrincipal): string {
return principal.kind === "authenticated" ? principal.userId : "anonymous";
}
export default defineModuleUi({
id: "example",
version: "0.1.0",
mount(container: Element, context: ModuleUiHostContext) {
container.textContent = describePrincipal(context.principal);
void context.api.request("records");
void context.permissions.has("example.records.read");
const subscription = context.realtime.subscribe<{ readonly count: number }>("record-count", {
onSnapshot(state, sequence) {
container.textContent = `${state.count}:${sequence}`;
},
onStatus(status) {
container.setAttribute("data-realtime", status);
},
});
return () => {
subscription.close();
container.textContent = "";
};
},
});