@ixo/topic-protocol 1.0.0-rc.3 → 1.0.0-rc.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +12 -1
  2. package/dist/profiles/releases/1.0.0-rc.3.json +8442 -0
  3. package/dist/schemas/project-projection.schema.json +178 -12
  4. package/dist/schemas/topic-operation.schema.json +155 -13
  5. package/dist/schemas/topic-shape.schema.json +1 -1
  6. package/dist/schemas/v2/capsule.schema.json +29 -0
  7. package/dist/schemas/v2/common.schema.json +68 -0
  8. package/dist/schemas/v2/operation.schema.json +308 -0
  9. package/dist/schemas/v2/projection.schema.json +205 -0
  10. package/dist/schemas/v2/record.schema.json +56 -0
  11. package/dist/schemas/v2/topic.schema.json +84 -0
  12. package/dist/src/contracts/schemas.d.ts +8 -0
  13. package/dist/src/contracts/validator.js +34 -3
  14. package/dist/src/contracts/validator.js.map +1 -1
  15. package/dist/src/index.d.ts +7 -0
  16. package/dist/src/index.js +7 -0
  17. package/dist/src/index.js.map +1 -1
  18. package/dist/src/projector/payload.d.ts +6 -2
  19. package/dist/src/projector/payload.js +8 -2
  20. package/dist/src/projector/payload.js.map +1 -1
  21. package/dist/src/projector/state.js +11 -3
  22. package/dist/src/projector/state.js.map +1 -1
  23. package/dist/src/projector/types.d.ts +1 -1
  24. package/dist/src/projector/types.js.map +1 -1
  25. package/dist/src/projects/project.js +55 -19
  26. package/dist/src/projects/project.js.map +1 -1
  27. package/dist/src/projects/types.d.ts +1 -0
  28. package/dist/src/shapes/availability.d.ts +2 -0
  29. package/dist/src/shapes/availability.js +19 -0
  30. package/dist/src/shapes/availability.js.map +1 -0
  31. package/dist/src/shapes/canonical.js +3 -2
  32. package/dist/src/shapes/canonical.js.map +1 -1
  33. package/dist/src/shapes/commands.d.ts +3 -0
  34. package/dist/src/shapes/commands.js +10 -0
  35. package/dist/src/shapes/commands.js.map +1 -0
  36. package/dist/src/shapes/fields.d.ts +9 -0
  37. package/dist/src/shapes/fields.js +41 -0
  38. package/dist/src/shapes/fields.js.map +1 -0
  39. package/dist/src/shapes/now.js +4 -1
  40. package/dist/src/shapes/now.js.map +1 -1
  41. package/dist/src/shapes/progress.d.ts +3 -1
  42. package/dist/src/shapes/progress.js +74 -27
  43. package/dist/src/shapes/progress.js.map +1 -1
  44. package/dist/src/shapes/reachability.d.ts +3 -0
  45. package/dist/src/shapes/reachability.js +29 -0
  46. package/dist/src/shapes/reachability.js.map +1 -0
  47. package/dist/src/shapes/recipes.js +42 -18
  48. package/dist/src/shapes/recipes.js.map +1 -1
  49. package/dist/src/shapes/releases.d.ts +9 -0
  50. package/dist/src/shapes/releases.js +12 -0
  51. package/dist/src/shapes/releases.js.map +1 -0
  52. package/dist/src/shapes/resolver.d.ts +3 -0
  53. package/dist/src/shapes/resolver.js +56 -16
  54. package/dist/src/shapes/resolver.js.map +1 -1
  55. package/dist/src/shapes/types.d.ts +12 -0
  56. package/dist/src/v2/canonical.d.ts +3 -0
  57. package/dist/src/v2/canonical.js +25 -0
  58. package/dist/src/v2/canonical.js.map +1 -0
  59. package/dist/src/v2/capsule.d.ts +10 -0
  60. package/dist/src/v2/capsule.js +46 -0
  61. package/dist/src/v2/capsule.js.map +1 -0
  62. package/dist/src/v2/compat.d.ts +14 -0
  63. package/dist/src/v2/compat.js +96 -0
  64. package/dist/src/v2/compat.js.map +1 -0
  65. package/dist/src/v2/ids.d.ts +3 -0
  66. package/dist/src/v2/ids.js +11 -0
  67. package/dist/src/v2/ids.js.map +1 -0
  68. package/dist/src/v2/index.d.ts +9 -0
  69. package/dist/src/v2/index.js +9 -0
  70. package/dist/src/v2/index.js.map +1 -0
  71. package/dist/src/v2/matrix.d.ts +46 -0
  72. package/dist/src/v2/matrix.js +151 -0
  73. package/dist/src/v2/matrix.js.map +1 -0
  74. package/dist/src/v2/project.d.ts +14 -0
  75. package/dist/src/v2/project.js +268 -0
  76. package/dist/src/v2/project.js.map +1 -0
  77. package/dist/src/v2/types.d.ts +195 -0
  78. package/dist/src/v2/types.js +19 -0
  79. package/dist/src/v2/types.js.map +1 -0
  80. package/dist/src/v2/validate.d.ts +650 -0
  81. package/dist/src/v2/validate.js +45 -0
  82. package/dist/src/v2/validate.js.map +1 -0
  83. package/package.json +7 -1
  84. package/profiles/releases/1.0.0-rc.3.json +8442 -0
  85. package/recipes/agent-delivery.json +54 -4
  86. package/recipes/blueprint-design.json +4 -3
  87. package/recipes/registry.json +12 -12
  88. package/recipes/research-brief.json +53 -2
  89. package/recipes/software-build.json +2 -2
  90. package/recipes/verified-work-payment.json +56 -5
@@ -3,19 +3,185 @@
3
3
  "$id": "https://topic-protocol.ixo.world/schemas/project-projection.schema.json",
4
4
  "title": "Projected Project state v1",
5
5
  "type": "object",
6
- "required": ["version", "lifecycle", "milestones", "childObligations"],
6
+ "required": [
7
+ "version",
8
+ "lifecycle",
9
+ "milestones",
10
+ "childObligations"
11
+ ],
7
12
  "properties": {
8
- "version": { "const": 1 },
9
- "lifecycle": { "enum": ["proposed", "effective", "closing", "closed"] },
10
- "lead": { "type": "object", "required": ["kind", "id"], "properties": { "kind": { "enum": ["actor", "role"] }, "id": { "type": "string", "minLength": 1 } }, "additionalProperties": false },
11
- "closer": { "type": "object", "required": ["kind", "id"], "properties": { "kind": { "enum": ["actor", "role"] }, "id": { "type": "string", "minLength": 1 } }, "additionalProperties": false },
12
- "milestones": { "type": "array", "items": { "type": "object", "required": ["id", "name", "status", "evidenceRefs"], "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "status": { "enum": ["pending", "in-progress", "met", "waived"] }, "evidenceRequired": { "type": "array", "items": { "type": "string" } }, "evidenceRefs": { "type": "array", "items": { "type": "string" } }, "lastOperationId": { "type": "string" } }, "additionalProperties": false }, "uniqueItemProperty": "id" },
13
- "childObligations": { "type": "array", "items": { "type": "object", "required": ["id", "title", "status"], "properties": { "id": { "type": "string" }, "title": { "type": "string" }, "kind": { "enum": ["task", "agent_task", "proposal", "evaluation", "claims", "incident", "question", "discussion"] }, "topicId": { "type": "string" }, "status": { "enum": ["unmet", "linked", "complete", "waived"] }, "childRevision": { "type": "string" }, "childShapeDigest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }, "sourceEventId": { "type": "string" }, "lastOperationId": { "type": "string" } }, "additionalProperties": false }, "uniqueItemProperty": "id" },
14
- "currentBlockingChildObligationId": { "type": "string" },
15
- "methodManifestRef": { "type": "object" },
16
- "closeRequest": { "type": "object" },
17
- "closeAcceptance": { "type": "object" },
18
- "sourceContractRevision": { "type": "string" }
13
+ "version": {
14
+ "const": 1
15
+ },
16
+ "lifecycle": {
17
+ "enum": [
18
+ "proposed",
19
+ "effective",
20
+ "closing",
21
+ "closed"
22
+ ]
23
+ },
24
+ "lead": {
25
+ "type": "object",
26
+ "required": [
27
+ "kind",
28
+ "id"
29
+ ],
30
+ "properties": {
31
+ "kind": {
32
+ "enum": [
33
+ "actor",
34
+ "role"
35
+ ]
36
+ },
37
+ "id": {
38
+ "type": "string",
39
+ "minLength": 1
40
+ }
41
+ },
42
+ "additionalProperties": false
43
+ },
44
+ "closer": {
45
+ "type": "object",
46
+ "required": [
47
+ "kind",
48
+ "id"
49
+ ],
50
+ "properties": {
51
+ "kind": {
52
+ "enum": [
53
+ "actor",
54
+ "role"
55
+ ]
56
+ },
57
+ "id": {
58
+ "type": "string",
59
+ "minLength": 1
60
+ }
61
+ },
62
+ "additionalProperties": false
63
+ },
64
+ "milestones": {
65
+ "type": "array",
66
+ "items": {
67
+ "type": "object",
68
+ "required": [
69
+ "id",
70
+ "name",
71
+ "status",
72
+ "evidenceRefs"
73
+ ],
74
+ "properties": {
75
+ "id": {
76
+ "type": "string"
77
+ },
78
+ "name": {
79
+ "type": "string"
80
+ },
81
+ "status": {
82
+ "enum": [
83
+ "pending",
84
+ "in-progress",
85
+ "met",
86
+ "waived"
87
+ ]
88
+ },
89
+ "evidenceRequired": {
90
+ "type": "array",
91
+ "items": {
92
+ "type": "string"
93
+ }
94
+ },
95
+ "evidenceRefs": {
96
+ "type": "array",
97
+ "items": {
98
+ "type": "string"
99
+ }
100
+ },
101
+ "lastOperationId": {
102
+ "type": "string"
103
+ }
104
+ },
105
+ "additionalProperties": false
106
+ },
107
+ "uniqueItemProperty": "id"
108
+ },
109
+ "childObligations": {
110
+ "type": "array",
111
+ "items": {
112
+ "type": "object",
113
+ "required": [
114
+ "id",
115
+ "title",
116
+ "status"
117
+ ],
118
+ "properties": {
119
+ "id": {
120
+ "type": "string"
121
+ },
122
+ "title": {
123
+ "type": "string"
124
+ },
125
+ "kind": {
126
+ "enum": [
127
+ "task",
128
+ "agent_task",
129
+ "proposal",
130
+ "evaluation",
131
+ "claims",
132
+ "incident",
133
+ "question",
134
+ "discussion"
135
+ ]
136
+ },
137
+ "topicId": {
138
+ "type": "string"
139
+ },
140
+ "status": {
141
+ "enum": [
142
+ "unmet",
143
+ "linked",
144
+ "complete",
145
+ "waived"
146
+ ]
147
+ },
148
+ "childRevision": {
149
+ "type": "string"
150
+ },
151
+ "childShapeDigest": {
152
+ "type": "string",
153
+ "pattern": "^sha256:[0-9a-f]{64}$"
154
+ },
155
+ "sourceEventId": {
156
+ "type": "string"
157
+ },
158
+ "lastOperationId": {
159
+ "type": "string"
160
+ },
161
+ "waiverReason": {
162
+ "type": "string",
163
+ "minLength": 1
164
+ }
165
+ },
166
+ "additionalProperties": false
167
+ },
168
+ "uniqueItemProperty": "id"
169
+ },
170
+ "currentBlockingChildObligationId": {
171
+ "type": "string"
172
+ },
173
+ "methodManifestRef": {
174
+ "type": "object"
175
+ },
176
+ "closeRequest": {
177
+ "type": "object"
178
+ },
179
+ "closeAcceptance": {
180
+ "type": "object"
181
+ },
182
+ "sourceContractRevision": {
183
+ "type": "string"
184
+ }
19
185
  },
20
186
  "additionalProperties": false
21
187
  }
@@ -3,28 +3,170 @@
3
3
  "$id": "https://topic-protocol.ixo.world/schemas/topic-operation.schema.json",
4
4
  "title": "Topic operation",
5
5
  "type": "object",
6
- "required": ["version", "operationId", "topicId", "type", "previousRevision", "actor", "createdAt", "payload"],
6
+ "required": [
7
+ "version",
8
+ "operationId",
9
+ "topicId",
10
+ "type",
11
+ "previousRevision",
12
+ "actor",
13
+ "createdAt",
14
+ "payload"
15
+ ],
7
16
  "properties": {
8
- "version": { "enum": [1, 2] },
9
- "operationId": { "type": "string", "minLength": 1 },
10
- "topicId": { "type": "string", "pattern": "^ixo:topic:[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" },
11
- "type": { "type": "string", "enum": ["rename", "change-status", "update-overview", "link-context", "unlink-context", "attach-files", "detach-files", "record-decision", "record-outcome", "propose-contract", "update-contract", "accept-contract", "confirm-setup", "withdraw-setup-confirmation", "record-assent", "withdraw-assent", "raise-dispute", "resolve-dispute", "supersede-contract", "bind-automation", "update-automation", "pause-automation", "remove-automation", "bind-flow", "update-flow-binding", "unbind-flow", "request-action", "cancel-action", "record-action-receipt", "bind-external-work", "sync-external-work", "unlink-external-work", "submit-delivery", "record-delivery-decision", "record-evaluation", "record-approval", "record-claim", "record-settlement", "record-project-milestone", "link-project-child", "unlink-project-child", "record-project-child-status", "waive-project-child", "set-project-blocker", "request-project-close", "close-project", "redirect", "branch", "merge", "resolve-conflict"] },
12
- "previousRevision": { "type": "string", "minLength": 1 },
13
- "actor": { "type": "string", "minLength": 1 },
14
- "createdAt": { "type": "string", "format": "date-time" },
15
- "payload": { "type": "object" },
16
- "capability": { "type": "string" }
17
+ "version": {
18
+ "enum": [
19
+ 1,
20
+ 2
21
+ ]
22
+ },
23
+ "operationId": {
24
+ "type": "string",
25
+ "minLength": 1
26
+ },
27
+ "topicId": {
28
+ "type": "string",
29
+ "pattern": "^ixo:topic:[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
30
+ },
31
+ "type": {
32
+ "type": "string",
33
+ "enum": [
34
+ "rename",
35
+ "change-status",
36
+ "change-progress",
37
+ "answer-question",
38
+ "change-due-date",
39
+ "unblock-topic",
40
+ "complete-topic",
41
+ "update-overview",
42
+ "link-context",
43
+ "unlink-context",
44
+ "attach-files",
45
+ "detach-files",
46
+ "record-decision",
47
+ "record-outcome",
48
+ "propose-contract",
49
+ "update-contract",
50
+ "accept-contract",
51
+ "confirm-setup",
52
+ "withdraw-setup-confirmation",
53
+ "record-assent",
54
+ "withdraw-assent",
55
+ "raise-dispute",
56
+ "resolve-dispute",
57
+ "supersede-contract",
58
+ "bind-automation",
59
+ "update-automation",
60
+ "pause-automation",
61
+ "remove-automation",
62
+ "bind-flow",
63
+ "update-flow-binding",
64
+ "unbind-flow",
65
+ "request-action",
66
+ "cancel-action",
67
+ "record-action-receipt",
68
+ "bind-external-work",
69
+ "sync-external-work",
70
+ "unlink-external-work",
71
+ "submit-delivery",
72
+ "record-delivery-decision",
73
+ "record-evaluation",
74
+ "record-approval",
75
+ "record-claim",
76
+ "record-settlement",
77
+ "record-project-milestone",
78
+ "link-project-child",
79
+ "unlink-project-child",
80
+ "record-project-child-status",
81
+ "waive-project-child",
82
+ "set-project-blocker",
83
+ "request-project-close",
84
+ "close-project",
85
+ "redirect",
86
+ "branch",
87
+ "merge",
88
+ "resolve-conflict",
89
+ "record-review"
90
+ ]
91
+ },
92
+ "previousRevision": {
93
+ "type": "string",
94
+ "minLength": 1
95
+ },
96
+ "actor": {
97
+ "type": "string",
98
+ "minLength": 1
99
+ },
100
+ "createdAt": {
101
+ "type": "string",
102
+ "format": "date-time"
103
+ },
104
+ "payload": {
105
+ "type": "object"
106
+ },
107
+ "capability": {
108
+ "type": "string"
109
+ }
17
110
  },
18
111
  "additionalProperties": true,
19
112
  "allOf": [
20
113
  {
21
114
  "if": {
22
115
  "properties": {
23
- "type": { "enum": ["record-outcome", "propose-contract", "update-contract", "accept-contract", "confirm-setup", "withdraw-setup-confirmation", "record-assent", "withdraw-assent", "raise-dispute", "resolve-dispute", "supersede-contract", "bind-automation", "update-automation", "pause-automation", "remove-automation", "bind-flow", "update-flow-binding", "unbind-flow", "request-action", "cancel-action", "record-action-receipt", "bind-external-work", "sync-external-work", "unlink-external-work", "submit-delivery", "record-delivery-decision", "record-evaluation", "record-approval", "record-claim", "record-settlement", "record-project-milestone", "link-project-child", "unlink-project-child", "record-project-child-status", "waive-project-child", "set-project-blocker", "request-project-close", "close-project"] }
116
+ "type": {
117
+ "enum": [
118
+ "record-outcome",
119
+ "propose-contract",
120
+ "update-contract",
121
+ "accept-contract",
122
+ "confirm-setup",
123
+ "withdraw-setup-confirmation",
124
+ "record-assent",
125
+ "withdraw-assent",
126
+ "raise-dispute",
127
+ "resolve-dispute",
128
+ "supersede-contract",
129
+ "bind-automation",
130
+ "update-automation",
131
+ "pause-automation",
132
+ "remove-automation",
133
+ "bind-flow",
134
+ "update-flow-binding",
135
+ "unbind-flow",
136
+ "request-action",
137
+ "cancel-action",
138
+ "record-action-receipt",
139
+ "bind-external-work",
140
+ "sync-external-work",
141
+ "unlink-external-work",
142
+ "submit-delivery",
143
+ "record-delivery-decision",
144
+ "record-evaluation",
145
+ "record-approval",
146
+ "record-claim",
147
+ "record-settlement",
148
+ "record-project-milestone",
149
+ "link-project-child",
150
+ "unlink-project-child",
151
+ "record-project-child-status",
152
+ "waive-project-child",
153
+ "set-project-blocker",
154
+ "request-project-close",
155
+ "close-project"
156
+ ]
157
+ }
24
158
  },
25
- "required": ["type"]
159
+ "required": [
160
+ "type"
161
+ ]
26
162
  },
27
- "then": { "properties": { "version": { "const": 2 } } }
163
+ "then": {
164
+ "properties": {
165
+ "version": {
166
+ "const": 2
167
+ }
168
+ }
169
+ }
28
170
  }
29
171
  ]
30
172
  }
@@ -59,7 +59,7 @@
59
59
  "gates": { "type": "array", "items": { "type": "object", "required": ["kind"], "properties": { "kind": { "enum": ["field", "field-any", "record", "receipt", "axis", "binding", "condition"] }, "requirement": { "$ref": "#/$defs/requirement" } }, "additionalProperties": true } },
60
60
  "confirmation": { "enum": ["none", "viewer", "authority"] },
61
61
  "consequence": { "enum": ["none", "shared-state", "external-effect", "settlement"] },
62
- "evidence": { "type": "object", "required": ["kind", "type"], "properties": { "kind": { "enum": ["operation", "record", "receipt"] }, "type": { "type": "string", "minLength": 1 }, "finality": { "enum": ["observed", "accepted", "verified", "final"] } }, "additionalProperties": false },
62
+ "evidence": { "type": "object", "required": ["kind", "type"], "properties": { "kind": { "enum": ["operation", "record", "receipt"] }, "type": { "type": "string", "minLength": 1 }, "finality": { "enum": ["observed", "accepted", "verified", "final"] }, "status": { "type": "string", "minLength": 1 } }, "additionalProperties": false },
63
63
  "completesTopic": { "type": "boolean" },
64
64
  "handoff": { "type": "object", "required": ["kind", "binding"], "properties": { "kind": { "enum": ["flow", "resource"] }, "binding": { "type": "string", "minLength": 1 } }, "additionalProperties": false },
65
65
  "presentation": { "type": "object", "required": ["reasonCode", "actionLabelKey", "bodyKey", "purposeKey", "unlocksKey", "priority"], "properties": { "reasonCode": { "type": "string", "minLength": 1 }, "actionLabelKey": { "type": "string", "minLength": 1 }, "bodyKey": { "type": "string", "minLength": 1 }, "purposeKey": { "type": "string", "minLength": 1 }, "unlocksKey": { "type": "string", "minLength": 1 }, "priority": { "type": "integer" }, "focusPath": { "type": "string" } }, "additionalProperties": false }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://topic-protocol.ixo.world/schemas/v2/capsule.schema.json",
4
+ "title": "Topic capsule (Protocol 2.0)",
5
+ "description": "The bounded context handed to an agent: the current projection, the most recent thread messages, and one plain-language hint about what would move the Topic forward.",
6
+ "type": "object",
7
+ "required": ["version", "topic", "messages", "hint"],
8
+ "properties": {
9
+ "version": { "const": 2 },
10
+ "topic": { "$ref": "projection.schema.json" },
11
+ "messages": {
12
+ "type": "array",
13
+ "maxItems": 50,
14
+ "items": {
15
+ "type": "object",
16
+ "required": ["eventId", "sender", "body", "at"],
17
+ "properties": {
18
+ "eventId": { "$ref": "common.schema.json#/$defs/eventId" },
19
+ "sender": { "$ref": "common.schema.json#/$defs/actor" },
20
+ "body": { "type": "string" },
21
+ "at": { "$ref": "common.schema.json#/$defs/dateTime" }
22
+ },
23
+ "additionalProperties": false
24
+ }
25
+ },
26
+ "hint": { "type": "string", "minLength": 1 }
27
+ },
28
+ "additionalProperties": false
29
+ }
@@ -0,0 +1,68 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://topic-protocol.ixo.world/schemas/v2/common.schema.json",
4
+ "title": "Topic Protocol 2.0 shared definitions",
5
+ "$defs": {
6
+ "topicId": { "type": "string", "pattern": "^ixo:topic:[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" },
7
+ "eventId": { "type": "string", "minLength": 1 },
8
+ "actor": { "type": "string", "minLength": 1 },
9
+ "dateTime": { "type": "string", "format": "date-time" },
10
+ "text": { "type": "string", "minLength": 1, "maxLength": 2000 },
11
+ "title": { "type": "string", "minLength": 1, "maxLength": 200 },
12
+ "kind": {
13
+ "type": "string",
14
+ "oneOf": [
15
+ { "enum": ["discussion", "question", "task", "project"] },
16
+ { "pattern": "^(?!ixo\\.)[a-z][a-z0-9-]*(\\.[a-z][a-z0-9-]*)+$" }
17
+ ]
18
+ },
19
+ "baseKind": { "type": "string", "enum": ["discussion", "question", "task", "project"] },
20
+ "status": { "type": "string", "enum": ["open", "active", "waiting", "done", "dropped"] },
21
+ "recordType": { "type": "string", "enum": ["decision", "outcome", "artifact", "receipt"] },
22
+ "relation": { "type": "string", "enum": ["branches_from", "merged_into", "redirects_to", "references"] },
23
+ "ref": {
24
+ "type": "object",
25
+ "required": ["type", "id"],
26
+ "properties": {
27
+ "type": { "type": "string", "pattern": "^[a-z][a-z0-9-]*(\\.[a-z][a-z0-9-]*)+$" },
28
+ "id": { "type": "string", "minLength": 1 }
29
+ },
30
+ "additionalProperties": false
31
+ },
32
+ "file": {
33
+ "type": "object",
34
+ "required": ["provider", "resource", "fileId", "version", "cid", "name"],
35
+ "properties": {
36
+ "provider": { "const": "ixo.vfs" },
37
+ "resource": { "type": "string", "minLength": 1 },
38
+ "fileId": { "type": "string", "minLength": 1 },
39
+ "version": { "type": "integer", "minimum": 1 },
40
+ "cid": { "type": "string", "minLength": 1 },
41
+ "name": { "type": "string", "minLength": 1 },
42
+ "mimeType": { "type": "string", "minLength": 1 },
43
+ "size": { "type": "integer", "minimum": 0 }
44
+ },
45
+ "additionalProperties": false
46
+ },
47
+ "block": {
48
+ "type": "object",
49
+ "required": ["reason", "by", "since"],
50
+ "properties": {
51
+ "reason": { "$ref": "#/$defs/text" },
52
+ "on": { "type": "string", "minLength": 1 },
53
+ "by": { "$ref": "#/$defs/actor" },
54
+ "since": { "$ref": "#/$defs/dateTime" }
55
+ },
56
+ "additionalProperties": false
57
+ },
58
+ "anchor": {
59
+ "type": "object",
60
+ "required": ["roomId", "rootEventId"],
61
+ "properties": {
62
+ "roomId": { "type": "string", "pattern": "^!.+" },
63
+ "rootEventId": { "type": "string", "pattern": "^\\$.+" }
64
+ },
65
+ "additionalProperties": false
66
+ }
67
+ }
68
+ }