aboutsummaryrefslogtreecommitdiff
path: root/karlcommon/protocol.d.ts
diff options
context:
space:
mode:
Diffstat (limited to 'karlcommon/protocol.d.ts')
-rw-r--r--karlcommon/protocol.d.ts60
1 files changed, 60 insertions, 0 deletions
diff --git a/karlcommon/protocol.d.ts b/karlcommon/protocol.d.ts
new file mode 100644
index 0000000..f48b283
--- /dev/null
+++ b/karlcommon/protocol.d.ts
@@ -0,0 +1,60 @@
+
+export type ServerboundPacket = Sync | Handshake | ListTasks | ListInstances | UpdateTask | RemoveTask
+export type ClientboundPacket = Handshake | Error | TaskList | InstanceList | Sync
+
+export interface Sync { type: "sync", data: null }
+export interface Error { type: "error", data: { kind: "unknown_task", details: null } | { kind: "format_error", details: string } }
+export interface Handshake { type: "handshake", data: { version: string } }
+export interface ListTasks { type: "list_tasks", data: null }
+export interface TaskList { type: "task_list", data: Task[] }
+export interface ListInstances { type: "list_instances", data: { task: number, range: Range } }
+export interface InstanceList { type: "instance_list", data: Instance[] }
+export interface UpdateTask { type: "update_task", data: Task }
+export interface RemoveTask { type: "remove_task", data: number }
+
+export interface Instance { of: number, at: Range }
+
+export interface Range { start?: number, end?: number }
+
+export interface Task {
+ id: number
+ name: string,
+ description: string,
+ tags: string[],
+ schedule: Schedule
+}
+
+export type Schedule = { type: "never" }
+ | { type: "static", options: Range }
+ | { type: "condition", options: Condition }
+ | { type: "dynamic", options: { priority: number, scheduled?: number, deadline?: Condition } }
+
+export type Condition = { from?: Condition }
+ | { or?: Condition[] }
+ | { and?: Condition[] }
+ | { equal?: { prop: Thing, value: number, mod?: number } }
+ | { range?: { prop: Thing, min: number, max: number, mod?: number } }
+
+export type Thing = "year"
+ | "monthofyear"
+ | "weekofmonth"
+ | "dayofyear"
+ | "dayofmonth"
+ | "dayofweek"
+ | "hour"
+ | "minute"
+ | "second"
+ | "unix"
+
+/*
+ examples:
+
+ 11:00 - 12:00 every first monday of the month
+
+ and: [
+ { range: { prop: "hour", min: 11, max: 12 } },
+ { equal: { prop: "dayofweek", value: 0 } },
+ { equal: { prop: "weekofmonth", value: 0 } }
+ ]
+
+*/