Client→server. Set the full collaborator allowlist for one block on this connection. Each frame is a complete replacement: the `dids` array becomes the active set for the named `blockId`, dropping anything sent previously for the same block. An empty `dids` array clears the filter for that block (no allowlist; all authors pass, matching the default when no `#include` has been sent). Filters are per-block — there is no global allowlist. Sending an `#include` for a block the connection is not currently `#subscribe`d to is permitted; the filter applies as soon as a matching `#subscribe` is active.
Properties
The block id this allowlist applies to.
Full set of DIDs whose ops should be delivered for this block on this connection. Replaces any prior set. Empty array clears the filter for this block.
View raw schema
{
"description": "Client→server. Set the full collaborator allowlist for one block on this connection. Each frame is a complete replacement: the `dids` array becomes the active set for the named `blockId`, dropping anything sent previously for the same block. An empty `dids` array clears the filter for that block (no allowlist; all authors pass, matching the default when no `#include` has been sent). Filters are per-block — there is no global allowlist. Sending an `#include` for a block the connection is not currently `#subscribe`d to is permitted; the filter applies as soon as a matching `#subscribe` is active.",
"properties": {
"blockId": {
"description": "The block id this allowlist applies to.",
"format": "at-uri",
"type": "string"
},
"dids": {
"description": "Full set of DIDs whose ops should be delivered for this block on this connection. Replaces any prior set. Empty array clears the filter for this block.",
"items": {
"format": "did",
"type": "string"
},
"type": "array"
}
},
"required": [
"blockId",
"dids"
],
"type": "object"
}
Client→server. Submit one op to the op stream
Properties
The block id of the block that the op was applied to
No description available.
View raw schema
{
"description": "Client→server. Submit one op to the op stream",
"properties": {
"blockId": {
"description": "The block id of the block that the op was applied to",
"format": "at-uri",
"type": "string"
},
"op": {
"closed": true,
"refs": [
"page.corvus.block#create",
"page.corvus.block#insert",
"page.corvus.block#delete",
"page.corvus.block#set",
"page.corvus.block#increment",
"page.corvus.block#add",
"page.corvus.block#remove"
],
"type": "union"
}
},
"required": [
"op"
],
"type": "object"
}
Client→server. Start receiving ops for one block on this connection. The server validates that the authed DID has any effective `write`/`suggest` grant under `page.corvus.aclGrant` (or is a project root); failure is signaled by a `page.corvus.subscribeOps#error` frame carrying the offending `blockId` and no `opId`.
No descent — the server does not walk child references. To watch a tree, the client reads child block ids out of materialized data and sends another `#subscribe` per id.
Duplicate `#subscribe` for an already-active block is idempotent and may be used to advance the resume cursor.
Properties
The block id to subscribe to.
Resume from cursor > N for this block. The server replays every op for this `blockId` with cursor strictly greater than `N`, then transitions to live tail. Omit to start at live tail with no catch-up.
View raw schema
{
"description": "Client→server. Start receiving ops for one block on this connection. The server validates that the authed DID has any effective `write`/`suggest` grant under `page.corvus.aclGrant` (or is a project root); failure is signaled by a `page.corvus.subscribeOps#error` frame carrying the offending `blockId` and no `opId`.\n\nNo descent — the server does not walk child references. To watch a tree, the client reads child block ids out of materialized data and sends another `#subscribe` per id.\n\nDuplicate `#subscribe` for an already-active block is idempotent and may be used to advance the resume cursor.",
"properties": {
"blockId": {
"description": "The block id to subscribe to.",
"format": "at-uri",
"type": "string"
},
"cursor": {
"description": "Resume from cursor > N for this block. The server replays every op for this `blockId` with cursor strictly greater than `N`, then transitions to live tail. Omit to start at live tail with no catch-up.",
"type": "integer"
}
},
"required": [
"blockId"
],
"type": "object"
}
Client→server. Stop receiving the op stream for one project on this connection. The server stops emitting `#op` / `#info` / `#heartbeat` frames for the project. Idempotent — unsubscribing from a project that isn't subscribed is a no-op.
Properties
The block id of the root block that you want to stop viewing items beneath
View raw schema
{
"description": "Client→server. Stop receiving the op stream for one project on this connection. The server stops emitting `#op` / `#info` / `#heartbeat` frames for the project. Idempotent — unsubscribing from a project that isn't subscribed is a no-op.",
"properties": {
"blockId": {
"description": "The block id of the root block that you want to stop viewing items beneath",
"format": "at-uri",
"type": "string"
}
},
"required": [
"blockId"
],
"type": "object"
}