···
} from "@atcute/identity-resolver";
parseCanonicalResourceUri,
} from "@atcute/lexicons/syntax";
import { config } from "./config";
import type {} from "@atcute/atproto";
+
import { is, safeParse } from "@atcute/lexicons";
SystemsGazeBarometerState,
SystemsGazeBarometerHost,
SystemsGazeBarometerService,
SystemsGazeBarometerCheck,
} from "barometer-lexicon";
+
import { err, expect, getRecord, ok, putRecord, type Result } from "./utils";
record: SystemsGazeBarometerCheck.Main;
···
+
interface PushRequest {
+
serviceName?: string; // service manager service name
+
state: SystemsGazeBarometerState.Main;
+
const parsePushRequest = (json: unknown): Result<PushRequest, string> => {
+
if (typeof json !== "object" || json === null) {
+
return err("invalid request");
+
if ("serviceName" in json && typeof json.serviceName !== "string") {
+
return err("serviceName is not a string");
+
const parsed = safeParse(SystemsGazeBarometerState.mainSchema, json.state);
+
return err(`state is invalid: ${parsed.message}`);
+
return err("state not found");
+
return ok(json as PushRequest);
const badRequest = <Error extends { msg: string }>(error: Error) => {
return new Response(JSON.stringify(error), { status: 400 });
···
+
const maybeData = parsePushRequest(await req.json());
+
msg: `invalid request: ${maybeData.error}`,
+
const data = maybeData.value;
const serviceAtUri = expect(
+
parseCanonicalResourceUri(data.state.forService),
let service = services.get(serviceAtUri.rkey);
···
+
msg: `service was not found or is invalid: ${serviceRecord.error}`,
record: serviceRecord.value,
···
services.set(serviceAtUri.rkey, service);
+
if (data.state.generatedBy) {
const checkAtUri = expect(
+
parseCanonicalResourceUri(data.state.generatedBy),
let check = service.checks.get(checkAtUri.rkey);
···
+
msg: `check record not found or is invalid: ${checkRecord.error}`,
record: checkRecord.value,
···
+
const result = await putRecord(data.state);
JSON.stringify({ cid: result.cid, uri: result.uri }),