blob: c979eecf0c661d65df995e0e699722c4c74ea1e6 [file] [log] [blame]
; Open Screen protocol spec: https://webscreens.github.io/openscreenprotocol/#appendix-a
; CDDL spec: https://tools.ietf.org/html/draft-ietf-cbor-cddl-08
; type key 10
agent-info-request = {
request
}
; type key 11
agent-info-response = {
response
1: agent-info ; agent-info
}
agent-info = {
0: text ; friendly-name
1: text ; model-name
; ...
}
; type key 12
agent-status-request = {
request
? 1: status ; status
}
; type key 13
agent-status-response = {
response
? 1: status ; status
}
request = (
0: request-id ; request-id
)
response = (
0: request-id ; request-id
)
request-id = uint
microseconds = uint
; type key 1001
authentication-request = {
request
1: authentication-mechanism ; mechanism
2: bytes ; salt
3: uint ; cost
}
; type key 1002
authentication-response = {
response
1: authentication-response-result ; result
2: bytes ; proof
}
; type key 1003
authentication-result = {
1: authentication-result-result ; result
}
authentication-mechanism = &(
hkdf-of-scrypt-of-psk: 1
)
authentication-response-result = &(
ok: 0
unknown-error: 1
mechanism-unknown: 2
salt-too-small: 3
cost-too-low: 4
cost-too-high: 5
secret-unknown: 6
calculation-took-too-long: 7
)
authentication-result-result = &(
authenticated: 0
unknown-error: 1
proof-invalid: 2
)
; type key 14
presentation-url-availability-request = {
request
1: [* text] ; urls
2: microseconds ; watch-duration
3: uint ; watch-id
}
; type key 15
presentation-url-availability-response = {
response
1: [* url-availability] ; url-availabilities
}
; type key 103
presentation-url-availability-event = {
1: uint ; watch-id
2: [* url-availability] ; url-availabilities
}
; idea: use HTTP response codes?
url-availability = &(
available: 0
unavailable: 1
invalid: 10
)
; type key 104
presentation-start-request = {
request
1: text ; presentation-id
2: text ; url
3: [* http-header] ; headers
}
http-header = [
key: text
value: text
]
; type key 105
presentation-start-response = {
response
1: &result ; result
2: uint ; connection-id
}
; type key 106
presentation-termination-request = {
request
1: text ; presentation-id
2: &(
controller-called-terminate: 10
user-terminated-via-controller: 11
unknown: 255
)
; reason
}
; type key 107
presentation-termination-response = {
response
1: &result ; result
}
; type key 108
presentation-termination-event = {
1: text ; presentation-id
2: &(
receiver-called-terminate: 1
user-terminated-via-receiver: 2
controller-called-terminate: 10
user-terminated-via-controller: 11
receiver-replaced-presentation: 20
receiver-idle-too-long: 30
receiver-attempted-to-navigate: 31
receiver-powering-down: 100
receiver-crashed: 101
unknown: 255
) ; reason
}
; type key 109
presentation-connection-open-request = {
request
1: text ; presentation-id
2: text ; url
}
; type key 110
presentation-connection-open-response = {
response
1: &result ; result
2: uint; connection-id
}
; type key 111
presentation-connection-close-request = {
request
1: uint ; connection-id
}
; type key 112
presentation-connection-close-response = {
response
; TODO(btolsch): Update the spec or revert.
1: &(success: 0, invalid-connection-id: 1) ; result
}
; type key 113
presentation-connection-close-event = {
1: uint; connection-id
2: &(
close-method-called: 1
connection-object-discarded: 10
unrecoverable-error-while-sending-or-receiving-message: 100
) ; reason
? 3: text ; error-message
}
; type key 16
presentation-connection-message = {
1: uint ; connection-id
2: bytes / text ; message
}
status = {
status: text
}
result = (
success: 1
invalid-url: 10
invalid-presentation-id: 11
timeout: 100
transient-error: 101
permanent-error: 102
terminating: 103
unknown-error: 199
)