From f0188a46d131049119acc13c44880ca5f63026f7 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Mon, 18 May 2015 15:48:46 +0100 Subject: [PATCH 01/10] Add event-schema directory and m.room.message schema. --- event-schemas/core | 35 +++++++++++++++++++++++++++++++++++ event-schemas/m.room.message | 21 +++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 event-schemas/core create mode 100644 event-schemas/m.room.message diff --git a/event-schemas/core b/event-schemas/core new file mode 100644 index 00000000..5747de97 --- /dev/null +++ b/event-schemas/core @@ -0,0 +1,35 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "definitions": { + "event": { + "type": "object", + "properties": { + "event_id": { + "type": "string" + }, + "user_id": { + "type": "string" + }, + "content": { + "type": "object" + }, + "type": { + "type": "string" + } + }, + "required": ["event_id", "user_id", "content", "type"] + }, + "room_event": { + "type": "object", + "allOf":[{ + "$ref": "#/definitions/event" + }], + "properties": { + "room_id": { + "type": "string" + } + }, + "required": ["room_id"] + } + } +} diff --git a/event-schemas/m.room.message b/event-schemas/m.room.message new file mode 100644 index 00000000..0b22ca9d --- /dev/null +++ b/event-schemas/m.room.message @@ -0,0 +1,21 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "allOf": [{ + "$ref": "core#/definitions/room_event" + }], + "properties": { + "content": { + "type": "object", + "properties": { + "msgtype": { + "type": "string" + }, + "body": { + "type": "string" + } + }, + "required": ["msgtype", "body"] + } + } +} From c370599a17a52efc87726562fd515eeef7830a03 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Mon, 18 May 2015 16:00:26 +0100 Subject: [PATCH 02/10] Add README --- event-schemas/README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 event-schemas/README.md diff --git a/event-schemas/README.md b/event-schemas/README.md new file mode 100644 index 00000000..05ae743a --- /dev/null +++ b/event-schemas/README.md @@ -0,0 +1,13 @@ +Testing a schema +---------------- +There are [many](http://json-schema.org/implementations.html) JSON Schema +validators you can use to validate incoming events. Not all of them support +JSON Schema v4, and some of them have bugs which prevent ``$ref`` from being +resolved correctly. For basic CLI testing, we recommend and have verified they +work with the Node.js package [z-schema](https://github.com/zaggino/z-schema): +``` + $ npm install -g z-schema + $ z-schema m.room.message /path/to/json/file.json + schema validation passed + json #1 validation passed +``` From a8af9bef298bc09221f4209d743be8d62ddf84c4 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Mon, 18 May 2015 16:13:41 +0100 Subject: [PATCH 03/10] Add example events. These can be used for assertions as well as drop ins for the spec. --- event-schemas/README.md | 2 +- event-schemas/examples/m.room.message_m.emote | 12 ++++++++++++ event-schemas/examples/m.room.message_m.image | 19 +++++++++++++++++++ .../examples/m.room.message_m.notice | 12 ++++++++++++ event-schemas/examples/m.room.message_m.text | 12 ++++++++++++ 5 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 event-schemas/examples/m.room.message_m.emote create mode 100644 event-schemas/examples/m.room.message_m.image create mode 100644 event-schemas/examples/m.room.message_m.notice create mode 100644 event-schemas/examples/m.room.message_m.text diff --git a/event-schemas/README.md b/event-schemas/README.md index 05ae743a..81d86a9a 100644 --- a/event-schemas/README.md +++ b/event-schemas/README.md @@ -7,7 +7,7 @@ resolved correctly. For basic CLI testing, we recommend and have verified they work with the Node.js package [z-schema](https://github.com/zaggino/z-schema): ``` $ npm install -g z-schema - $ z-schema m.room.message /path/to/json/file.json + $ z-schema m.room.message examples/m.room.message_m.text schema validation passed json #1 validation passed ``` diff --git a/event-schemas/examples/m.room.message_m.emote b/event-schemas/examples/m.room.message_m.emote new file mode 100644 index 00000000..bd984831 --- /dev/null +++ b/event-schemas/examples/m.room.message_m.emote @@ -0,0 +1,12 @@ +{ + "age": 242352, + "content": { + "body": "thinks this is an example emote", + "msgtype": "m.emote" + }, + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.room.message", + "room_id": "!Cuyf34gef24t:localhost", + "user_id": "@example:localhost" +} diff --git a/event-schemas/examples/m.room.message_m.image b/event-schemas/examples/m.room.message_m.image new file mode 100644 index 00000000..ba405a1a --- /dev/null +++ b/event-schemas/examples/m.room.message_m.image @@ -0,0 +1,19 @@ +{ + "age": 242352, + "content": { + "body": "filename.jpg", + "info": { + "h": 398, + "w": 394, + "mimetype": "image/jpeg", + "size": 31037 + }, + "url": "mxc://localhost/JWEIFJgwEIhweiWJE", + "msgtype": "m.image" + }, + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.room.message", + "room_id": "!Cuyf34gef24t:localhost", + "user_id": "@example:localhost" +} diff --git a/event-schemas/examples/m.room.message_m.notice b/event-schemas/examples/m.room.message_m.notice new file mode 100644 index 00000000..2e5fff97 --- /dev/null +++ b/event-schemas/examples/m.room.message_m.notice @@ -0,0 +1,12 @@ +{ + "age": 242352, + "content": { + "body": "This is an example notice", + "msgtype": "m.notice" + }, + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.room.message", + "room_id": "!Cuyf34gef24t:localhost", + "user_id": "@example:localhost" +} diff --git a/event-schemas/examples/m.room.message_m.text b/event-schemas/examples/m.room.message_m.text new file mode 100644 index 00000000..d877ee64 --- /dev/null +++ b/event-schemas/examples/m.room.message_m.text @@ -0,0 +1,12 @@ +{ + "age": 242352, + "content": { + "body": "This is an example text message", + "msgtype": "m.text" + }, + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.room.message", + "room_id": "!Cuyf34gef24t:localhost", + "user_id": "@example:localhost" +} From 8ec10bbdf215009cedcaeb537e083d8950112b54 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Mon, 18 May 2015 16:21:09 +0100 Subject: [PATCH 04/10] Add m.room.name and state_key core schema. --- event-schemas/core | 12 ++++++++++++ event-schemas/examples/m.room.name | 12 ++++++++++++ event-schemas/m.room.name | 22 ++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 event-schemas/examples/m.room.name create mode 100644 event-schemas/m.room.name diff --git a/event-schemas/core b/event-schemas/core index 5747de97..277ff768 100644 --- a/event-schemas/core +++ b/event-schemas/core @@ -30,6 +30,18 @@ } }, "required": ["room_id"] + }, + "state_event": { + "type": "object", + "allOf":[{ + "$ref": "#/definitions/room_event" + }], + "properties": { + "state_key": { + "type": "string" + } + }, + "required": ["state_key"] } } } diff --git a/event-schemas/examples/m.room.name b/event-schemas/examples/m.room.name new file mode 100644 index 00000000..636119b8 --- /dev/null +++ b/event-schemas/examples/m.room.name @@ -0,0 +1,12 @@ +{ + "age": 242352, + "content": { + "name": "The room name" + }, + "state_key": "", + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.room.name", + "room_id": "!Cuyf34gef24t:localhost", + "user_id": "@example:localhost" +} diff --git a/event-schemas/m.room.name b/event-schemas/m.room.name new file mode 100644 index 00000000..bfcd509b --- /dev/null +++ b/event-schemas/m.room.name @@ -0,0 +1,22 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "allOf": [{ + "$ref": "core#/definitions/state_event" + }], + "properties": { + "content": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + }, + "required": ["name"] + }, + "state_key": { + "type": "string", + "pattern": "^$" + } + } +} From 809ec63b9c6367872a89c4c8063659b2f4a6fc1b Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Mon, 18 May 2015 16:23:32 +0100 Subject: [PATCH 05/10] Dump schema in a subdir for purity. --- event-schemas/README.md | 2 +- event-schemas/{ => schema}/core | 0 event-schemas/{ => schema}/m.room.message | 0 event-schemas/{ => schema}/m.room.name | 0 4 files changed, 1 insertion(+), 1 deletion(-) rename event-schemas/{ => schema}/core (100%) rename event-schemas/{ => schema}/m.room.message (100%) rename event-schemas/{ => schema}/m.room.name (100%) diff --git a/event-schemas/README.md b/event-schemas/README.md index 81d86a9a..950c3018 100644 --- a/event-schemas/README.md +++ b/event-schemas/README.md @@ -7,7 +7,7 @@ resolved correctly. For basic CLI testing, we recommend and have verified they work with the Node.js package [z-schema](https://github.com/zaggino/z-schema): ``` $ npm install -g z-schema - $ z-schema m.room.message examples/m.room.message_m.text + $ z-schema schema/m.room.message examples/m.room.message_m.text schema validation passed json #1 validation passed ``` diff --git a/event-schemas/core b/event-schemas/schema/core similarity index 100% rename from event-schemas/core rename to event-schemas/schema/core diff --git a/event-schemas/m.room.message b/event-schemas/schema/m.room.message similarity index 100% rename from event-schemas/m.room.message rename to event-schemas/schema/m.room.message diff --git a/event-schemas/m.room.name b/event-schemas/schema/m.room.name similarity index 100% rename from event-schemas/m.room.name rename to event-schemas/schema/m.room.name From 5216b1ac8a1063b0394cddada401985d69963f91 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Mon, 18 May 2015 16:52:03 +0100 Subject: [PATCH 06/10] Add m.room.topic. Add title/descs. Add 'type' key checking. --- event-schemas/examples/m.room.topic | 12 ++++++++++++ event-schemas/schema/core | 22 ++++++++++++++++++---- event-schemas/schema/m.room.message | 4 ++++ event-schemas/schema/m.room.name | 4 ++++ event-schemas/schema/m.room.topic | 26 ++++++++++++++++++++++++++ 5 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 event-schemas/examples/m.room.topic create mode 100644 event-schemas/schema/m.room.topic diff --git a/event-schemas/examples/m.room.topic b/event-schemas/examples/m.room.topic new file mode 100644 index 00000000..8a469122 --- /dev/null +++ b/event-schemas/examples/m.room.topic @@ -0,0 +1,12 @@ +{ + "age": 242352, + "content": { + "topic": "A room topic" + }, + "state_key": "", + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.room.topic", + "room_id": "!Cuyf34gef24t:localhost", + "user_id": "@example:localhost" +} diff --git a/event-schemas/schema/core b/event-schemas/schema/core index 277ff768..11d931d5 100644 --- a/event-schemas/schema/core +++ b/event-schemas/schema/core @@ -2,25 +2,32 @@ "$schema": "http://json-schema.org/draft-04/schema#", "definitions": { "event": { + "title": "Event", + "description": "The basic set of fields all events must have.", "type": "object", "properties": { "event_id": { - "type": "string" + "type": "string", + "description": "The globally unique event identifier." }, "user_id": { "type": "string" }, "content": { - "type": "object" + "type": "object", + "description": "The fields in this object will vary depending on the type of event." }, "type": { - "type": "string" + "type": "string", + "description": "The type of event. This SHOULD be namespaced similar to Java package naming conventions e.g. 'com.example.subdomain.event.type'" } }, "required": ["event_id", "user_id", "content", "type"] }, "room_event": { "type": "object", + "title": "Room Event", + "description": "The basic set of fields all room events must have.", "allOf":[{ "$ref": "#/definitions/event" }], @@ -33,12 +40,19 @@ }, "state_event": { "type": "object", + "title": "State Event", + "description": "The basic set of fields which define a room state event.", "allOf":[{ "$ref": "#/definitions/room_event" }], "properties": { "state_key": { - "type": "string" + "type": "string", + "description": "A unique key which defines the overwriting semantics for this piece of room state. This value is often a 0-length string." + }, + "prev_content": { + "type": "object", + "description": "The previous content if this event has overwritten another event." } }, "required": ["state_key"] diff --git a/event-schemas/schema/m.room.message b/event-schemas/schema/m.room.message index 0b22ca9d..2b00dfd0 100644 --- a/event-schemas/schema/m.room.message +++ b/event-schemas/schema/m.room.message @@ -16,6 +16,10 @@ } }, "required": ["msgtype", "body"] + }, + "type": { + "type": "string", + "enum": ["m.room.message"] } } } diff --git a/event-schemas/schema/m.room.name b/event-schemas/schema/m.room.name index bfcd509b..6dca3b14 100644 --- a/event-schemas/schema/m.room.name +++ b/event-schemas/schema/m.room.name @@ -17,6 +17,10 @@ "state_key": { "type": "string", "pattern": "^$" + }, + "type": { + "type": "string", + "enum": ["m.room.name"] } } } diff --git a/event-schemas/schema/m.room.topic b/event-schemas/schema/m.room.topic new file mode 100644 index 00000000..80ae1191 --- /dev/null +++ b/event-schemas/schema/m.room.topic @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "allOf": [{ + "$ref": "core#/definitions/state_event" + }], + "properties": { + "content": { + "type": "object", + "properties": { + "topic": { + "type": "string" + } + }, + "required": ["topic"] + }, + "state_key": { + "type": "string", + "pattern": "^$" + }, + "type": { + "type": "string", + "enum": ["m.room.topic"] + } + } +} From c78088cfd175df23a05b2a0d2c165b78b22f69b8 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Mon, 18 May 2015 17:10:11 +0100 Subject: [PATCH 07/10] Add m.room.aliases/create/join_rules/member/power_levels --- event-schemas/examples/m.room.aliases | 12 +++++++ event-schemas/examples/m.room.create | 12 +++++++ event-schemas/examples/m.room.join_rules | 12 +++++++ event-schemas/examples/m.room.member | 12 +++++++ event-schemas/examples/m.room.power_levels | 24 +++++++++++++ event-schemas/schema/m.room.aliases | 25 +++++++++++++ event-schemas/schema/m.room.create | 26 ++++++++++++++ event-schemas/schema/m.room.join_rules | 27 ++++++++++++++ event-schemas/schema/m.room.member | 26 ++++++++++++++ event-schemas/schema/m.room.power_levels | 42 ++++++++++++++++++++++ 10 files changed, 218 insertions(+) create mode 100644 event-schemas/examples/m.room.aliases create mode 100644 event-schemas/examples/m.room.create create mode 100644 event-schemas/examples/m.room.join_rules create mode 100644 event-schemas/examples/m.room.member create mode 100644 event-schemas/examples/m.room.power_levels create mode 100644 event-schemas/schema/m.room.aliases create mode 100644 event-schemas/schema/m.room.create create mode 100644 event-schemas/schema/m.room.join_rules create mode 100644 event-schemas/schema/m.room.member create mode 100644 event-schemas/schema/m.room.power_levels diff --git a/event-schemas/examples/m.room.aliases b/event-schemas/examples/m.room.aliases new file mode 100644 index 00000000..07b4b330 --- /dev/null +++ b/event-schemas/examples/m.room.aliases @@ -0,0 +1,12 @@ +{ + "age": 242352, + "content": { + "aliases": ["#somewhere:localhost", "#another:localhost"] + }, + "state_key": "localhost", + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.room.aliases", + "room_id": "!Cuyf34gef24t:localhost", + "user_id": "@example:localhost" +} diff --git a/event-schemas/examples/m.room.create b/event-schemas/examples/m.room.create new file mode 100644 index 00000000..a3598853 --- /dev/null +++ b/event-schemas/examples/m.room.create @@ -0,0 +1,12 @@ +{ + "age": 242352, + "content": { + "creator": "@example:localhost" + }, + "state_key": "", + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.room.create", + "room_id": "!Cuyf34gef24t:localhost", + "user_id": "@example:localhost" +} diff --git a/event-schemas/examples/m.room.join_rules b/event-schemas/examples/m.room.join_rules new file mode 100644 index 00000000..f22ad97e --- /dev/null +++ b/event-schemas/examples/m.room.join_rules @@ -0,0 +1,12 @@ +{ + "age": 242352, + "content": { + "join_rule": "public" + }, + "state_key": "", + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.room.join_rules", + "room_id": "!Cuyf34gef24t:localhost", + "user_id": "@example:localhost" +} diff --git a/event-schemas/examples/m.room.member b/event-schemas/examples/m.room.member new file mode 100644 index 00000000..abfd89ce --- /dev/null +++ b/event-schemas/examples/m.room.member @@ -0,0 +1,12 @@ +{ + "age": 242352, + "content": { + "membership": "join" + }, + "state_key": "@alice:localhost", + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.room.member", + "room_id": "!Cuyf34gef24t:localhost", + "user_id": "@example:localhost" +} diff --git a/event-schemas/examples/m.room.power_levels b/event-schemas/examples/m.room.power_levels new file mode 100644 index 00000000..8278597a --- /dev/null +++ b/event-schemas/examples/m.room.power_levels @@ -0,0 +1,24 @@ +{ + "age": 242352, + "content": { + "ban": 50, + "events": { + "m.room.name": 100, + "m.room.power_levels": 100 + }, + "events_default": 0, + "kick": 50, + "redact": 50, + "state_default": 50, + "users": { + "@example:localhost": 100 + }, + "users_default": 0 + }, + "state_key": "", + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.room.power_levels", + "room_id": "!Cuyf34gef24t:localhost", + "user_id": "@example:localhost" +} diff --git a/event-schemas/schema/m.room.aliases b/event-schemas/schema/m.room.aliases new file mode 100644 index 00000000..6c91eed7 --- /dev/null +++ b/event-schemas/schema/m.room.aliases @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "allOf": [{ + "$ref": "core#/definitions/state_event" + }], + "properties": { + "content": { + "type": "object", + "properties": { + "aliases": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["aliases"] + }, + "type": { + "type": "string", + "enum": ["m.room.aliases"] + } + } +} diff --git a/event-schemas/schema/m.room.create b/event-schemas/schema/m.room.create new file mode 100644 index 00000000..9e6e83bd --- /dev/null +++ b/event-schemas/schema/m.room.create @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "allOf": [{ + "$ref": "core#/definitions/state_event" + }], + "properties": { + "content": { + "type": "object", + "properties": { + "creator": { + "type": "string" + } + }, + "required": ["creator"] + }, + "state_key": { + "type": "string", + "pattern": "^$" + }, + "type": { + "type": "string", + "enum": ["m.room.create"] + } + } +} diff --git a/event-schemas/schema/m.room.join_rules b/event-schemas/schema/m.room.join_rules new file mode 100644 index 00000000..3954a962 --- /dev/null +++ b/event-schemas/schema/m.room.join_rules @@ -0,0 +1,27 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "allOf": [{ + "$ref": "core#/definitions/state_event" + }], + "properties": { + "content": { + "type": "object", + "properties": { + "join_rule": { + "type": "string", + "enum": ["public","knock","invite","private"] + } + }, + "required": ["join_rule"] + }, + "state_key": { + "type": "string", + "pattern": "^$" + }, + "type": { + "type": "string", + "enum": ["m.room.join_rules"] + } + } +} diff --git a/event-schemas/schema/m.room.member b/event-schemas/schema/m.room.member new file mode 100644 index 00000000..8f5291b3 --- /dev/null +++ b/event-schemas/schema/m.room.member @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "allOf": [{ + "$ref": "core#/definitions/state_event" + }], + "properties": { + "content": { + "type": "object", + "properties": { + "membership": { + "type": "string", + "enum": ["invite","join","leave","ban"] + } + }, + "required": ["membership"] + }, + "state_key": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["m.room.member"] + } + } +} diff --git a/event-schemas/schema/m.room.power_levels b/event-schemas/schema/m.room.power_levels new file mode 100644 index 00000000..91621149 --- /dev/null +++ b/event-schemas/schema/m.room.power_levels @@ -0,0 +1,42 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "allOf": [{ + "$ref": "core#/definitions/state_event" + }], + "properties": { + "content": { + "type": "object", + "properties": { + "ban": { "type": "number" }, + "events_default": { "type": "number" }, + "kick": { "type": "number" }, + "redact": { "type": "number" }, + "state_default": { "type": "number" }, + "users_default": { "type": "number" }, + "events": { + "type": "object", + "additionalProperties": { + "type": "number" + } + }, + "users": { + "type": "object", + "additionalProperties": { + "type": "number" + } + } + }, + "required": ["ban","events","events_default","kick","redact", + "state_default","users","users_default"] + }, + "state_key": { + "type": "string", + "pattern": "^$" + }, + "type": { + "type": "string", + "enum": ["m.room.power_levels"] + } + } +} From 6f842da22798b7b370b993b048b572ea7c3a223e Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Mon, 18 May 2015 17:28:38 +0100 Subject: [PATCH 08/10] Add redaction, feedback and presence events. --- event-schemas/examples/m.presence | 10 ++++++ .../examples/m.room.message.feedback | 12 +++++++ event-schemas/examples/m.room.redaction | 10 ++++++ event-schemas/schema/m.presence | 36 +++++++++++++++++++ event-schemas/schema/m.room.member | 2 +- event-schemas/schema/m.room.message.feedback | 26 ++++++++++++++ event-schemas/schema/m.room.redaction | 25 +++++++++++++ 7 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 event-schemas/examples/m.presence create mode 100644 event-schemas/examples/m.room.message.feedback create mode 100644 event-schemas/examples/m.room.redaction create mode 100644 event-schemas/schema/m.presence create mode 100644 event-schemas/schema/m.room.message.feedback create mode 100644 event-schemas/schema/m.room.redaction diff --git a/event-schemas/examples/m.presence b/event-schemas/examples/m.presence new file mode 100644 index 00000000..695bd99b --- /dev/null +++ b/event-schemas/examples/m.presence @@ -0,0 +1,10 @@ +{ + "content": { + "avatar_url": "mxc://localhost:wefuiwegh8742w", + "last_active_ago": 2478593, + "presence": "online", + "user_id": "@example:localhost" + }, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.presence" +} diff --git a/event-schemas/examples/m.room.message.feedback b/event-schemas/examples/m.room.message.feedback new file mode 100644 index 00000000..6282305b --- /dev/null +++ b/event-schemas/examples/m.room.message.feedback @@ -0,0 +1,12 @@ +{ + "age": 242352, + "content": { + "type": "delivered", + "target_event_id": "$WEIGFHFW:localhost" + }, + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.room.message.feedback", + "room_id": "!Cuyf34gef24t:localhost", + "user_id": "@example:localhost" +} diff --git a/event-schemas/examples/m.room.redaction b/event-schemas/examples/m.room.redaction new file mode 100644 index 00000000..dd56e97c --- /dev/null +++ b/event-schemas/examples/m.room.redaction @@ -0,0 +1,10 @@ +{ + "age": 242352, + "content": {}, + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.room.redaction", + "room_id": "!Cuyf34gef24t:localhost", + "redacts": "!fukweghifu23:localhost", + "user_id": "@example:localhost" +} diff --git a/event-schemas/schema/m.presence b/event-schemas/schema/m.presence new file mode 100644 index 00000000..815c6af9 --- /dev/null +++ b/event-schemas/schema/m.presence @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "content": { + "type": "object", + "properties": { + "avatar_url": { + "type": "string" + }, + "displayname": { + "type": "string" + }, + "last_active_ago": { + "type": "number" + }, + "presence": { + "type": "string", + "enum": ["online", "offline", "unavailable", "free_for_chat", "hidden"] + }, + "user_id": { + "type": "string" + } + }, + "required": ["presence", "user_id"] + }, + "type": { + "type": "string", + "enum": ["m.presence"] + }, + "event_id": { + "type": "string" + } + }, + "required": ["event_id", "type", "content"] +} diff --git a/event-schemas/schema/m.room.member b/event-schemas/schema/m.room.member index 8f5291b3..76b4c360 100644 --- a/event-schemas/schema/m.room.member +++ b/event-schemas/schema/m.room.member @@ -10,7 +10,7 @@ "properties": { "membership": { "type": "string", - "enum": ["invite","join","leave","ban"] + "enum": ["invite","join","knock","leave","ban"] } }, "required": ["membership"] diff --git a/event-schemas/schema/m.room.message.feedback b/event-schemas/schema/m.room.message.feedback new file mode 100644 index 00000000..392e630d --- /dev/null +++ b/event-schemas/schema/m.room.message.feedback @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "allOf": [{ + "$ref": "core#/definitions/room_event" + }], + "properties": { + "content": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["delivered", "read"] + }, + "target_event_id": { + "type": "string" + } + }, + "required": ["type", "target_event_id"] + }, + "type": { + "type": "string", + "enum": ["m.room.message.feedback"] + } + } +} diff --git a/event-schemas/schema/m.room.redaction b/event-schemas/schema/m.room.redaction new file mode 100644 index 00000000..5b5dd6db --- /dev/null +++ b/event-schemas/schema/m.room.redaction @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "allOf": [{ + "$ref": "core#/definitions/room_event" + }], + "properties": { + "content": { + "type": "object", + "properties": { + "reason": { + "type": "string" + } + } + }, + "redacts": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["m.room.redaction"] + } + }, + "required": ["redacts"] +} From b4d245bce3e5ac0ba84f0547d50d62c98a66f792 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Mon, 18 May 2015 17:54:17 +0100 Subject: [PATCH 09/10] Add m.call.invite/candidates/answer/hangup --- event-schemas/examples/m.call.answer | 17 ++++++++++ event-schemas/examples/m.call.candidates | 19 +++++++++++ event-schemas/examples/m.call.hangup | 12 +++++++ event-schemas/examples/m.call.invite | 17 ++++++++++ event-schemas/schema/m.call.answer | 38 +++++++++++++++++++++ event-schemas/schema/m.call.candidates | 43 ++++++++++++++++++++++++ event-schemas/schema/m.call.hangup | 25 ++++++++++++++ event-schemas/schema/m.call.invite | 38 +++++++++++++++++++++ 8 files changed, 209 insertions(+) create mode 100644 event-schemas/examples/m.call.answer create mode 100644 event-schemas/examples/m.call.candidates create mode 100644 event-schemas/examples/m.call.hangup create mode 100644 event-schemas/examples/m.call.invite create mode 100644 event-schemas/schema/m.call.answer create mode 100644 event-schemas/schema/m.call.candidates create mode 100644 event-schemas/schema/m.call.hangup create mode 100644 event-schemas/schema/m.call.invite diff --git a/event-schemas/examples/m.call.answer b/event-schemas/examples/m.call.answer new file mode 100644 index 00000000..0301fb3b --- /dev/null +++ b/event-schemas/examples/m.call.answer @@ -0,0 +1,17 @@ +{ + "age": 242352, + "content": { + "version" : 0, + "call_id": "12345", + "lifetime": 60000, + "answer": { + "type" : "answer", + "sdp" : "v=0\r\no=- 6584580628695956864 2 IN IP4 127.0.0.1[...]" + } + }, + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.call.answer", + "room_id": "!Cuyf34gef24t:localhost", + "user_id": "@example:localhost" +} diff --git a/event-schemas/examples/m.call.candidates b/event-schemas/examples/m.call.candidates new file mode 100644 index 00000000..389d2271 --- /dev/null +++ b/event-schemas/examples/m.call.candidates @@ -0,0 +1,19 @@ +{ + "age": 242352, + "content": { + "version" : 0, + "call_id": "12345", + "candidates": [ + { + "sdpMid": "audio", + "sdpMLineIndex": 0, + "candidate": "candidate:863018703 1 udp 2122260223 10.9.64.156 43670 typ host generation 0" + } + ] + }, + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.call.candidates", + "room_id": "!Cuyf34gef24t:localhost", + "user_id": "@example:localhost" +} diff --git a/event-schemas/examples/m.call.hangup b/event-schemas/examples/m.call.hangup new file mode 100644 index 00000000..52ddad16 --- /dev/null +++ b/event-schemas/examples/m.call.hangup @@ -0,0 +1,12 @@ +{ + "age": 242352, + "content": { + "version" : 0, + "call_id": "12345" + }, + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.call.hangup", + "room_id": "!Cuyf34gef24t:localhost", + "user_id": "@example:localhost" +} diff --git a/event-schemas/examples/m.call.invite b/event-schemas/examples/m.call.invite new file mode 100644 index 00000000..2df25929 --- /dev/null +++ b/event-schemas/examples/m.call.invite @@ -0,0 +1,17 @@ +{ + "age": 242352, + "content": { + "version" : 0, + "call_id": "12345", + "lifetime": 60000, + "offer": { + "type" : "offer", + "sdp" : "v=0\r\no=- 6584580628695956864 2 IN IP4 127.0.0.1[...]" + } + }, + "origin_server_ts": 1431961217939, + "event_id": "$WLGTSEFSEF:localhost", + "type": "m.call.invite", + "room_id": "!Cuyf34gef24t:localhost", + "user_id": "@example:localhost" +} diff --git a/event-schemas/schema/m.call.answer b/event-schemas/schema/m.call.answer new file mode 100644 index 00000000..8976aa33 --- /dev/null +++ b/event-schemas/schema/m.call.answer @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "allOf": [{ + "$ref": "core#/definitions/room_event" + }], + "properties": { + "content": { + "type": "object", + "properties": { + "call_id": { + "type": "string" + }, + "answer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["answer"] + }, + "sdp": { + "type": "string" + } + }, + "required": ["type", "sdp"] + }, + "version": { + "type": "number" + } + }, + "required": ["call_id", "answer", "version"] + }, + "type": { + "type": "string", + "enum": ["m.call.answer"] + } + } +} diff --git a/event-schemas/schema/m.call.candidates b/event-schemas/schema/m.call.candidates new file mode 100644 index 00000000..0a2937a1 --- /dev/null +++ b/event-schemas/schema/m.call.candidates @@ -0,0 +1,43 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "allOf": [{ + "$ref": "core#/definitions/room_event" + }], + "properties": { + "content": { + "type": "object", + "properties": { + "call_id": { + "type": "string" + }, + "candidates": { + "type": "array", + "items": { + "type": "object", + "properties": { + "sdpMid": { + "type": "string" + }, + "sdpMLineIndex": { + "type": "number" + }, + "candidate": { + "type": "string" + } + }, + "required": ["candidate", "sdpMLineIndex", "sdpMid"] + } + }, + "version": { + "type": "number" + } + }, + "required": ["call_id", "candidates", "version"] + }, + "type": { + "type": "string", + "enum": ["m.call.candidates"] + } + } +} diff --git a/event-schemas/schema/m.call.hangup b/event-schemas/schema/m.call.hangup new file mode 100644 index 00000000..48d008b9 --- /dev/null +++ b/event-schemas/schema/m.call.hangup @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "allOf": [{ + "$ref": "core#/definitions/room_event" + }], + "properties": { + "content": { + "type": "object", + "properties": { + "call_id": { + "type": "string" + }, + "version": { + "type": "number" + } + }, + "required": ["call_id", "version"] + }, + "type": { + "type": "string", + "enum": ["m.call.hangup"] + } + } +} diff --git a/event-schemas/schema/m.call.invite b/event-schemas/schema/m.call.invite new file mode 100644 index 00000000..4bdbccab --- /dev/null +++ b/event-schemas/schema/m.call.invite @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "allOf": [{ + "$ref": "core#/definitions/room_event" + }], + "properties": { + "content": { + "type": "object", + "properties": { + "call_id": { + "type": "string" + }, + "offer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["offer"] + }, + "sdp": { + "type": "string" + } + }, + "required": ["type", "sdp"] + }, + "version": { + "type": "number" + } + }, + "required": ["call_id", "offer", "version"] + }, + "type": { + "type": "string", + "enum": ["m.call.invite"] + } + } +} From 9fd57c6fe634cd38a59da0cb8b9b0580aa705ac9 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Tue, 19 May 2015 15:28:08 +0100 Subject: [PATCH 10/10] Namespace all the things to v1. --- event-schemas/README.md | 2 +- event-schemas/examples/{ => v1}/m.call.answer | 0 event-schemas/examples/{ => v1}/m.call.candidates | 0 event-schemas/examples/{ => v1}/m.call.hangup | 0 event-schemas/examples/{ => v1}/m.call.invite | 0 event-schemas/examples/{ => v1}/m.presence | 0 event-schemas/examples/{ => v1}/m.room.aliases | 0 event-schemas/examples/{ => v1}/m.room.create | 0 event-schemas/examples/{ => v1}/m.room.join_rules | 0 event-schemas/examples/{ => v1}/m.room.member | 0 event-schemas/examples/{ => v1}/m.room.message.feedback | 0 event-schemas/examples/{ => v1}/m.room.message_m.emote | 0 event-schemas/examples/{ => v1}/m.room.message_m.image | 0 event-schemas/examples/{ => v1}/m.room.message_m.notice | 0 event-schemas/examples/{ => v1}/m.room.message_m.text | 0 event-schemas/examples/{ => v1}/m.room.name | 0 event-schemas/examples/{ => v1}/m.room.power_levels | 0 event-schemas/examples/{ => v1}/m.room.redaction | 0 event-schemas/examples/{ => v1}/m.room.topic | 0 event-schemas/schema/{ => v1}/core | 0 event-schemas/schema/{ => v1}/m.call.answer | 0 event-schemas/schema/{ => v1}/m.call.candidates | 0 event-schemas/schema/{ => v1}/m.call.hangup | 0 event-schemas/schema/{ => v1}/m.call.invite | 0 event-schemas/schema/{ => v1}/m.presence | 0 event-schemas/schema/{ => v1}/m.room.aliases | 0 event-schemas/schema/{ => v1}/m.room.create | 0 event-schemas/schema/{ => v1}/m.room.join_rules | 0 event-schemas/schema/{ => v1}/m.room.member | 0 event-schemas/schema/{ => v1}/m.room.message | 0 event-schemas/schema/{ => v1}/m.room.message.feedback | 0 event-schemas/schema/{ => v1}/m.room.name | 0 event-schemas/schema/{ => v1}/m.room.power_levels | 0 event-schemas/schema/{ => v1}/m.room.redaction | 0 event-schemas/schema/{ => v1}/m.room.topic | 0 35 files changed, 1 insertion(+), 1 deletion(-) rename event-schemas/examples/{ => v1}/m.call.answer (100%) rename event-schemas/examples/{ => v1}/m.call.candidates (100%) rename event-schemas/examples/{ => v1}/m.call.hangup (100%) rename event-schemas/examples/{ => v1}/m.call.invite (100%) rename event-schemas/examples/{ => v1}/m.presence (100%) rename event-schemas/examples/{ => v1}/m.room.aliases (100%) rename event-schemas/examples/{ => v1}/m.room.create (100%) rename event-schemas/examples/{ => v1}/m.room.join_rules (100%) rename event-schemas/examples/{ => v1}/m.room.member (100%) rename event-schemas/examples/{ => v1}/m.room.message.feedback (100%) rename event-schemas/examples/{ => v1}/m.room.message_m.emote (100%) rename event-schemas/examples/{ => v1}/m.room.message_m.image (100%) rename event-schemas/examples/{ => v1}/m.room.message_m.notice (100%) rename event-schemas/examples/{ => v1}/m.room.message_m.text (100%) rename event-schemas/examples/{ => v1}/m.room.name (100%) rename event-schemas/examples/{ => v1}/m.room.power_levels (100%) rename event-schemas/examples/{ => v1}/m.room.redaction (100%) rename event-schemas/examples/{ => v1}/m.room.topic (100%) rename event-schemas/schema/{ => v1}/core (100%) rename event-schemas/schema/{ => v1}/m.call.answer (100%) rename event-schemas/schema/{ => v1}/m.call.candidates (100%) rename event-schemas/schema/{ => v1}/m.call.hangup (100%) rename event-schemas/schema/{ => v1}/m.call.invite (100%) rename event-schemas/schema/{ => v1}/m.presence (100%) rename event-schemas/schema/{ => v1}/m.room.aliases (100%) rename event-schemas/schema/{ => v1}/m.room.create (100%) rename event-schemas/schema/{ => v1}/m.room.join_rules (100%) rename event-schemas/schema/{ => v1}/m.room.member (100%) rename event-schemas/schema/{ => v1}/m.room.message (100%) rename event-schemas/schema/{ => v1}/m.room.message.feedback (100%) rename event-schemas/schema/{ => v1}/m.room.name (100%) rename event-schemas/schema/{ => v1}/m.room.power_levels (100%) rename event-schemas/schema/{ => v1}/m.room.redaction (100%) rename event-schemas/schema/{ => v1}/m.room.topic (100%) diff --git a/event-schemas/README.md b/event-schemas/README.md index 950c3018..1030a04c 100644 --- a/event-schemas/README.md +++ b/event-schemas/README.md @@ -7,7 +7,7 @@ resolved correctly. For basic CLI testing, we recommend and have verified they work with the Node.js package [z-schema](https://github.com/zaggino/z-schema): ``` $ npm install -g z-schema - $ z-schema schema/m.room.message examples/m.room.message_m.text + $ z-schema schema/v1/m.room.message examples/v1/m.room.message_m.text schema validation passed json #1 validation passed ``` diff --git a/event-schemas/examples/m.call.answer b/event-schemas/examples/v1/m.call.answer similarity index 100% rename from event-schemas/examples/m.call.answer rename to event-schemas/examples/v1/m.call.answer diff --git a/event-schemas/examples/m.call.candidates b/event-schemas/examples/v1/m.call.candidates similarity index 100% rename from event-schemas/examples/m.call.candidates rename to event-schemas/examples/v1/m.call.candidates diff --git a/event-schemas/examples/m.call.hangup b/event-schemas/examples/v1/m.call.hangup similarity index 100% rename from event-schemas/examples/m.call.hangup rename to event-schemas/examples/v1/m.call.hangup diff --git a/event-schemas/examples/m.call.invite b/event-schemas/examples/v1/m.call.invite similarity index 100% rename from event-schemas/examples/m.call.invite rename to event-schemas/examples/v1/m.call.invite diff --git a/event-schemas/examples/m.presence b/event-schemas/examples/v1/m.presence similarity index 100% rename from event-schemas/examples/m.presence rename to event-schemas/examples/v1/m.presence diff --git a/event-schemas/examples/m.room.aliases b/event-schemas/examples/v1/m.room.aliases similarity index 100% rename from event-schemas/examples/m.room.aliases rename to event-schemas/examples/v1/m.room.aliases diff --git a/event-schemas/examples/m.room.create b/event-schemas/examples/v1/m.room.create similarity index 100% rename from event-schemas/examples/m.room.create rename to event-schemas/examples/v1/m.room.create diff --git a/event-schemas/examples/m.room.join_rules b/event-schemas/examples/v1/m.room.join_rules similarity index 100% rename from event-schemas/examples/m.room.join_rules rename to event-schemas/examples/v1/m.room.join_rules diff --git a/event-schemas/examples/m.room.member b/event-schemas/examples/v1/m.room.member similarity index 100% rename from event-schemas/examples/m.room.member rename to event-schemas/examples/v1/m.room.member diff --git a/event-schemas/examples/m.room.message.feedback b/event-schemas/examples/v1/m.room.message.feedback similarity index 100% rename from event-schemas/examples/m.room.message.feedback rename to event-schemas/examples/v1/m.room.message.feedback diff --git a/event-schemas/examples/m.room.message_m.emote b/event-schemas/examples/v1/m.room.message_m.emote similarity index 100% rename from event-schemas/examples/m.room.message_m.emote rename to event-schemas/examples/v1/m.room.message_m.emote diff --git a/event-schemas/examples/m.room.message_m.image b/event-schemas/examples/v1/m.room.message_m.image similarity index 100% rename from event-schemas/examples/m.room.message_m.image rename to event-schemas/examples/v1/m.room.message_m.image diff --git a/event-schemas/examples/m.room.message_m.notice b/event-schemas/examples/v1/m.room.message_m.notice similarity index 100% rename from event-schemas/examples/m.room.message_m.notice rename to event-schemas/examples/v1/m.room.message_m.notice diff --git a/event-schemas/examples/m.room.message_m.text b/event-schemas/examples/v1/m.room.message_m.text similarity index 100% rename from event-schemas/examples/m.room.message_m.text rename to event-schemas/examples/v1/m.room.message_m.text diff --git a/event-schemas/examples/m.room.name b/event-schemas/examples/v1/m.room.name similarity index 100% rename from event-schemas/examples/m.room.name rename to event-schemas/examples/v1/m.room.name diff --git a/event-schemas/examples/m.room.power_levels b/event-schemas/examples/v1/m.room.power_levels similarity index 100% rename from event-schemas/examples/m.room.power_levels rename to event-schemas/examples/v1/m.room.power_levels diff --git a/event-schemas/examples/m.room.redaction b/event-schemas/examples/v1/m.room.redaction similarity index 100% rename from event-schemas/examples/m.room.redaction rename to event-schemas/examples/v1/m.room.redaction diff --git a/event-schemas/examples/m.room.topic b/event-schemas/examples/v1/m.room.topic similarity index 100% rename from event-schemas/examples/m.room.topic rename to event-schemas/examples/v1/m.room.topic diff --git a/event-schemas/schema/core b/event-schemas/schema/v1/core similarity index 100% rename from event-schemas/schema/core rename to event-schemas/schema/v1/core diff --git a/event-schemas/schema/m.call.answer b/event-schemas/schema/v1/m.call.answer similarity index 100% rename from event-schemas/schema/m.call.answer rename to event-schemas/schema/v1/m.call.answer diff --git a/event-schemas/schema/m.call.candidates b/event-schemas/schema/v1/m.call.candidates similarity index 100% rename from event-schemas/schema/m.call.candidates rename to event-schemas/schema/v1/m.call.candidates diff --git a/event-schemas/schema/m.call.hangup b/event-schemas/schema/v1/m.call.hangup similarity index 100% rename from event-schemas/schema/m.call.hangup rename to event-schemas/schema/v1/m.call.hangup diff --git a/event-schemas/schema/m.call.invite b/event-schemas/schema/v1/m.call.invite similarity index 100% rename from event-schemas/schema/m.call.invite rename to event-schemas/schema/v1/m.call.invite diff --git a/event-schemas/schema/m.presence b/event-schemas/schema/v1/m.presence similarity index 100% rename from event-schemas/schema/m.presence rename to event-schemas/schema/v1/m.presence diff --git a/event-schemas/schema/m.room.aliases b/event-schemas/schema/v1/m.room.aliases similarity index 100% rename from event-schemas/schema/m.room.aliases rename to event-schemas/schema/v1/m.room.aliases diff --git a/event-schemas/schema/m.room.create b/event-schemas/schema/v1/m.room.create similarity index 100% rename from event-schemas/schema/m.room.create rename to event-schemas/schema/v1/m.room.create diff --git a/event-schemas/schema/m.room.join_rules b/event-schemas/schema/v1/m.room.join_rules similarity index 100% rename from event-schemas/schema/m.room.join_rules rename to event-schemas/schema/v1/m.room.join_rules diff --git a/event-schemas/schema/m.room.member b/event-schemas/schema/v1/m.room.member similarity index 100% rename from event-schemas/schema/m.room.member rename to event-schemas/schema/v1/m.room.member diff --git a/event-schemas/schema/m.room.message b/event-schemas/schema/v1/m.room.message similarity index 100% rename from event-schemas/schema/m.room.message rename to event-schemas/schema/v1/m.room.message diff --git a/event-schemas/schema/m.room.message.feedback b/event-schemas/schema/v1/m.room.message.feedback similarity index 100% rename from event-schemas/schema/m.room.message.feedback rename to event-schemas/schema/v1/m.room.message.feedback diff --git a/event-schemas/schema/m.room.name b/event-schemas/schema/v1/m.room.name similarity index 100% rename from event-schemas/schema/m.room.name rename to event-schemas/schema/v1/m.room.name diff --git a/event-schemas/schema/m.room.power_levels b/event-schemas/schema/v1/m.room.power_levels similarity index 100% rename from event-schemas/schema/m.room.power_levels rename to event-schemas/schema/v1/m.room.power_levels diff --git a/event-schemas/schema/m.room.redaction b/event-schemas/schema/v1/m.room.redaction similarity index 100% rename from event-schemas/schema/m.room.redaction rename to event-schemas/schema/v1/m.room.redaction diff --git a/event-schemas/schema/m.room.topic b/event-schemas/schema/v1/m.room.topic similarity index 100% rename from event-schemas/schema/m.room.topic rename to event-schemas/schema/v1/m.room.topic