aboutsummaryrefslogtreecommitdiff
path: root/karld/protocol.d.ts
diff options
context:
space:
mode:
Diffstat (limited to 'karld/protocol.d.ts')
-rw-r--r--karld/protocol.d.ts75
1 files changed, 75 insertions, 0 deletions
diff --git a/karld/protocol.d.ts b/karld/protocol.d.ts
new file mode 100644
index 0000000..a592146
--- /dev/null
+++ b/karld/protocol.d.ts
@@ -0,0 +1,75 @@
+
+// { type: "handshake", version: "10"}
+// { type: "handshake", data: {version: "10"}}
+//! { "handshake": {version: "10"}}
+
+export type ServerboundPacket = Download | UpdateTask | RemoveTask
+export type ClientboundPacket = Handshake | DownloadResponse
+
+interface Handshake {
+ type: "handshake"
+ data: { version: string }
+}
+
+interface Download {
+ type: "download",
+ data: null
+}
+interface DownloadResponse {
+ type: "download_response",
+ data: { tasks: Task[] }
+}
+
+interface UpdateTask {
+ type: "update_task",
+ data: Task
+}
+interface RemoveTask {
+ type: "remove_task",
+ data: Task
+}
+
+interface Task {
+ id: number
+ name: string,
+ description: string,
+
+ tags: string[],
+ priority: number,
+
+ completed?: number,
+ scheduled?: number,
+
+ occurence?: Condition,
+ 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 } }
+
+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 } }
+ ]
+
+*/