430 lines
8.4 KiB
JSON
430 lines
8.4 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://jos.local/schemas/clan-consent-event.schema.json",
|
|
"title": "CLAN ConsentEvent Schema",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"consent_event_id",
|
|
"ts",
|
|
"scope",
|
|
"decision",
|
|
"target",
|
|
"confirmations",
|
|
"quorum",
|
|
"provenance",
|
|
"versions"
|
|
],
|
|
"properties": {
|
|
"consent_event_id": {
|
|
"type": "string",
|
|
"minLength": 3,
|
|
"maxLength": 128,
|
|
"pattern": "^ce_[A-Za-z0-9_-]+$"
|
|
},
|
|
"ts": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"scope": {
|
|
"$ref": "#/$defs/scope"
|
|
},
|
|
"decision": {
|
|
"$ref": "#/$defs/decision"
|
|
},
|
|
"target": {
|
|
"$ref": "#/$defs/target"
|
|
},
|
|
"confirmations": {
|
|
"type": "array",
|
|
"minItems": 0,
|
|
"maxItems": 256,
|
|
"items": {
|
|
"$ref": "#/$defs/confirmation"
|
|
}
|
|
},
|
|
"quorum": {
|
|
"$ref": "#/$defs/quorum"
|
|
},
|
|
"provenance": {
|
|
"$ref": "#/$defs/event_provenance"
|
|
},
|
|
"versions": {
|
|
"$ref": "#/$defs/versions"
|
|
},
|
|
"integrity": {
|
|
"$ref": "#/$defs/integrity"
|
|
}
|
|
},
|
|
"allOf": [
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"decision": {
|
|
"properties": {
|
|
"type": {
|
|
"enum": [
|
|
"approve",
|
|
"reject"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"type"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"decision"
|
|
]
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"confirmations": {
|
|
"minItems": 1
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"decision": {
|
|
"properties": {
|
|
"type": {
|
|
"const": "revoke"
|
|
}
|
|
},
|
|
"required": [
|
|
"type"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"decision"
|
|
]
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"confirmations": {
|
|
"minItems": 1
|
|
}
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"$defs": {
|
|
"nonEmptyString": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"unixTimeInt": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"sha256Ref": {
|
|
"type": "string",
|
|
"pattern": "^(sha256:)?[A-Fa-f0-9]{12,64}$"
|
|
},
|
|
"visibilityLevel": {
|
|
"type": "string",
|
|
"enum": [
|
|
"public",
|
|
"interclan",
|
|
"incircle",
|
|
"soulsafe",
|
|
"sacred"
|
|
]
|
|
},
|
|
"consentDecisionType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"approve",
|
|
"reject",
|
|
"revoke"
|
|
]
|
|
},
|
|
"targetType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"artifact",
|
|
"policy",
|
|
"bridge_request",
|
|
"allocation",
|
|
"core_change"
|
|
]
|
|
},
|
|
"operationType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"execute",
|
|
"export",
|
|
"grant_access",
|
|
"change_visibility",
|
|
"merge_offline",
|
|
"publish",
|
|
"transfer",
|
|
"dao_action",
|
|
"core_update"
|
|
]
|
|
},
|
|
"channelType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ui",
|
|
"api",
|
|
"telegram",
|
|
"matrix",
|
|
"internal",
|
|
"webhook",
|
|
"bridge"
|
|
]
|
|
},
|
|
"confirmationMethod": {
|
|
"type": "string",
|
|
"enum": [
|
|
"voice",
|
|
"biometric",
|
|
"key_signature",
|
|
"in_person"
|
|
]
|
|
},
|
|
"scope": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"circle_id",
|
|
"visibility_level"
|
|
],
|
|
"properties": {
|
|
"circle_id": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/$defs/nonEmptyString"
|
|
},
|
|
{
|
|
"maxLength": 128
|
|
}
|
|
]
|
|
},
|
|
"gate_level": {
|
|
"type": "string",
|
|
"maxLength": 64
|
|
},
|
|
"visibility_level": {
|
|
"$ref": "#/$defs/visibilityLevel"
|
|
}
|
|
}
|
|
},
|
|
"decision": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"type"
|
|
],
|
|
"properties": {
|
|
"type": {
|
|
"$ref": "#/$defs/consentDecisionType"
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"maxLength": 240
|
|
},
|
|
"expires_at": {
|
|
"$ref": "#/$defs/unixTimeInt"
|
|
}
|
|
}
|
|
},
|
|
"target": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"target_type",
|
|
"artifact_ids",
|
|
"operation"
|
|
],
|
|
"properties": {
|
|
"target_type": {
|
|
"$ref": "#/$defs/targetType"
|
|
},
|
|
"artifact_ids": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"maxItems": 512,
|
|
"items": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/$defs/nonEmptyString"
|
|
},
|
|
{
|
|
"maxLength": 128
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"operation": {
|
|
"$ref": "#/$defs/operationType"
|
|
},
|
|
"intent": {
|
|
"type": "string",
|
|
"maxLength": 200
|
|
}
|
|
}
|
|
},
|
|
"confirmation": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"actor",
|
|
"method",
|
|
"step_up",
|
|
"ts"
|
|
],
|
|
"properties": {
|
|
"actor": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"type",
|
|
"id"
|
|
],
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"const": "human"
|
|
},
|
|
"id": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/$defs/nonEmptyString"
|
|
},
|
|
{
|
|
"maxLength": 128
|
|
}
|
|
]
|
|
},
|
|
"display": {
|
|
"type": "string",
|
|
"maxLength": 120
|
|
}
|
|
}
|
|
},
|
|
"method": {
|
|
"$ref": "#/$defs/confirmationMethod"
|
|
},
|
|
"step_up": {
|
|
"type": "boolean"
|
|
},
|
|
"proof_ref": {
|
|
"type": "string",
|
|
"maxLength": 256
|
|
},
|
|
"ts": {
|
|
"$ref": "#/$defs/unixTimeInt"
|
|
}
|
|
}
|
|
},
|
|
"quorum": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"rule",
|
|
"required",
|
|
"present"
|
|
],
|
|
"properties": {
|
|
"rule": {
|
|
"type": "string",
|
|
"enum": [
|
|
"unanimous",
|
|
"majority",
|
|
"custom"
|
|
]
|
|
},
|
|
"required": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"maximum": 1024
|
|
},
|
|
"present": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 1024
|
|
}
|
|
}
|
|
},
|
|
"event_provenance": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"channel",
|
|
"request_id",
|
|
"input_hash"
|
|
],
|
|
"properties": {
|
|
"channel": {
|
|
"$ref": "#/$defs/channelType"
|
|
},
|
|
"request_id": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/$defs/nonEmptyString"
|
|
},
|
|
{
|
|
"maxLength": 128
|
|
}
|
|
]
|
|
},
|
|
"input_hash": {
|
|
"$ref": "#/$defs/sha256Ref"
|
|
}
|
|
}
|
|
},
|
|
"versions": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"constitution_version",
|
|
"protocol_version"
|
|
],
|
|
"properties": {
|
|
"constitution_version": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/$defs/nonEmptyString"
|
|
},
|
|
{
|
|
"maxLength": 128
|
|
}
|
|
]
|
|
},
|
|
"protocol_version": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/$defs/nonEmptyString"
|
|
},
|
|
{
|
|
"maxLength": 128
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"integrity": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"event_hash"
|
|
],
|
|
"properties": {
|
|
"event_hash": {
|
|
"$ref": "#/$defs/sha256Ref"
|
|
},
|
|
"prev_hash": {
|
|
"$ref": "#/$defs/sha256Ref"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|