58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import { Type } from "@sinclair/typebox";
|
|
import { NonEmptyString } from "./primitives.js";
|
|
|
|
export const PresenceEntrySchema = Type.Object(
|
|
{
|
|
host: Type.Optional(NonEmptyString),
|
|
ip: Type.Optional(NonEmptyString),
|
|
version: Type.Optional(NonEmptyString),
|
|
platform: Type.Optional(NonEmptyString),
|
|
deviceFamily: Type.Optional(NonEmptyString),
|
|
modelIdentifier: Type.Optional(NonEmptyString),
|
|
mode: Type.Optional(NonEmptyString),
|
|
lastInputSeconds: Type.Optional(Type.Integer({ minimum: 0 })),
|
|
reason: Type.Optional(NonEmptyString),
|
|
tags: Type.Optional(Type.Array(NonEmptyString)),
|
|
text: Type.Optional(Type.String()),
|
|
ts: Type.Integer({ minimum: 0 }),
|
|
deviceId: Type.Optional(NonEmptyString),
|
|
roles: Type.Optional(Type.Array(NonEmptyString)),
|
|
scopes: Type.Optional(Type.Array(NonEmptyString)),
|
|
instanceId: Type.Optional(NonEmptyString),
|
|
},
|
|
{ additionalProperties: false },
|
|
);
|
|
|
|
export const HealthSnapshotSchema = Type.Any();
|
|
|
|
export const SessionDefaultsSchema = Type.Object(
|
|
{
|
|
defaultAgentId: NonEmptyString,
|
|
mainKey: NonEmptyString,
|
|
mainSessionKey: NonEmptyString,
|
|
scope: Type.Optional(NonEmptyString),
|
|
},
|
|
{ additionalProperties: false },
|
|
);
|
|
|
|
export const StateVersionSchema = Type.Object(
|
|
{
|
|
presence: Type.Integer({ minimum: 0 }),
|
|
health: Type.Integer({ minimum: 0 }),
|
|
},
|
|
{ additionalProperties: false },
|
|
);
|
|
|
|
export const SnapshotSchema = Type.Object(
|
|
{
|
|
presence: Type.Array(PresenceEntrySchema),
|
|
health: HealthSnapshotSchema,
|
|
stateVersion: StateVersionSchema,
|
|
uptimeMs: Type.Integer({ minimum: 0 }),
|
|
configPath: Type.Optional(NonEmptyString),
|
|
stateDir: Type.Optional(NonEmptyString),
|
|
sessionDefaults: Type.Optional(SessionDefaultsSchema),
|
|
},
|
|
{ additionalProperties: false },
|
|
);
|