Darochin's picture
Mirror OpenSkyNet workspace snapshot from Git HEAD
fc93158 verified
import { Type } from "@sinclair/typebox";
import { NonEmptyString } from "./primitives.js";
const NodePendingWorkTypeSchema = Type.String({
enum: ["status.request", "location.request"],
});
const NodePendingWorkPrioritySchema = Type.String({
enum: ["normal", "high"],
});
export const NodePairRequestParamsSchema = Type.Object(
{
nodeId: NonEmptyString,
displayName: Type.Optional(NonEmptyString),
platform: Type.Optional(NonEmptyString),
version: Type.Optional(NonEmptyString),
coreVersion: Type.Optional(NonEmptyString),
uiVersion: Type.Optional(NonEmptyString),
deviceFamily: Type.Optional(NonEmptyString),
modelIdentifier: Type.Optional(NonEmptyString),
caps: Type.Optional(Type.Array(NonEmptyString)),
commands: Type.Optional(Type.Array(NonEmptyString)),
remoteIp: Type.Optional(NonEmptyString),
silent: Type.Optional(Type.Boolean()),
},
{ additionalProperties: false },
);
export const NodePairListParamsSchema = Type.Object({}, { additionalProperties: false });
export const NodePairApproveParamsSchema = Type.Object(
{ requestId: NonEmptyString },
{ additionalProperties: false },
);
export const NodePairRejectParamsSchema = Type.Object(
{ requestId: NonEmptyString },
{ additionalProperties: false },
);
export const NodePairVerifyParamsSchema = Type.Object(
{ nodeId: NonEmptyString, token: NonEmptyString },
{ additionalProperties: false },
);
export const NodeRenameParamsSchema = Type.Object(
{ nodeId: NonEmptyString, displayName: NonEmptyString },
{ additionalProperties: false },
);
export const NodeListParamsSchema = Type.Object({}, { additionalProperties: false });
export const NodePendingAckParamsSchema = Type.Object(
{
ids: Type.Array(NonEmptyString, { minItems: 1 }),
},
{ additionalProperties: false },
);
export const NodeDescribeParamsSchema = Type.Object(
{ nodeId: NonEmptyString },
{ additionalProperties: false },
);
export const NodeInvokeParamsSchema = Type.Object(
{
nodeId: NonEmptyString,
command: NonEmptyString,
params: Type.Optional(Type.Unknown()),
timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
idempotencyKey: NonEmptyString,
},
{ additionalProperties: false },
);
export const NodeInvokeResultParamsSchema = Type.Object(
{
id: NonEmptyString,
nodeId: NonEmptyString,
ok: Type.Boolean(),
payload: Type.Optional(Type.Unknown()),
payloadJSON: Type.Optional(Type.String()),
error: Type.Optional(
Type.Object(
{
code: Type.Optional(NonEmptyString),
message: Type.Optional(NonEmptyString),
},
{ additionalProperties: false },
),
),
},
{ additionalProperties: false },
);
export const NodeEventParamsSchema = Type.Object(
{
event: NonEmptyString,
payload: Type.Optional(Type.Unknown()),
payloadJSON: Type.Optional(Type.String()),
},
{ additionalProperties: false },
);
export const NodePendingDrainParamsSchema = Type.Object(
{
maxItems: Type.Optional(Type.Integer({ minimum: 1, maximum: 10 })),
},
{ additionalProperties: false },
);
export const NodePendingDrainItemSchema = Type.Object(
{
id: NonEmptyString,
type: NodePendingWorkTypeSchema,
priority: Type.String({ enum: ["default", "normal", "high"] }),
createdAtMs: Type.Integer({ minimum: 0 }),
expiresAtMs: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
payload: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
},
{ additionalProperties: false },
);
export const NodePendingDrainResultSchema = Type.Object(
{
nodeId: NonEmptyString,
revision: Type.Integer({ minimum: 0 }),
items: Type.Array(NodePendingDrainItemSchema),
hasMore: Type.Boolean(),
},
{ additionalProperties: false },
);
export const NodePendingEnqueueParamsSchema = Type.Object(
{
nodeId: NonEmptyString,
type: NodePendingWorkTypeSchema,
priority: Type.Optional(NodePendingWorkPrioritySchema),
expiresInMs: Type.Optional(Type.Integer({ minimum: 1_000, maximum: 86_400_000 })),
wake: Type.Optional(Type.Boolean()),
},
{ additionalProperties: false },
);
export const NodePendingEnqueueResultSchema = Type.Object(
{
nodeId: NonEmptyString,
revision: Type.Integer({ minimum: 0 }),
queued: NodePendingDrainItemSchema,
wakeTriggered: Type.Boolean(),
},
{ additionalProperties: false },
);
export const NodeInvokeRequestEventSchema = Type.Object(
{
id: NonEmptyString,
nodeId: NonEmptyString,
command: NonEmptyString,
paramsJSON: Type.Optional(Type.String()),
timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
idempotencyKey: Type.Optional(NonEmptyString),
},
{ additionalProperties: false },
);