{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:oprp:experimental:0.1:migration",
  "title": "OPRP experimental coordinated Host migration",
  "description": "Structural format. Signed historical credentials/status, proof kind/signer/keys, plan/receipt/archive digest bindings, owner admission, transaction fencing and publication state must be verified separately.",
  "$ref": "#/$defs/handoff",
  "$defs": {
    "proof": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "payload",
        "signature",
        "credential",
        "status_evidence"
      ],
      "properties": {
        "payload": {
          "$ref": "./exchange.schema.json#/$defs/base64url",
          "maxLength": 8000
        },
        "signature": {
          "$ref": "./exchange.schema.json#/$defs/base64url",
          "minLength": 4412,
          "maxLength": 4412
        },
        "credential": {
          "$ref": "./exchange.schema.json#/$defs/credential"
        },
        "status_evidence": {
          "$ref": "./trust.schema.json#/$defs/signedStatus"
        }
      }
    },
    "planBody": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "v",
        "kind",
        "transfer_id",
        "patient",
        "source",
        "destination",
        "source_signing_kid",
        "source_encryption_kid",
        "destination_signing_kid",
        "destination_encryption_kid",
        "address",
        "destination_endpoint",
        "from_generation",
        "to_generation",
        "created_at",
        "expires_at"
      ],
      "properties": {
        "v": {
          "const": "0.1"
        },
        "kind": {
          "const": "plan"
        },
        "transfer_id": {
          "$ref": "./exchange.schema.json#/$defs/identifier"
        },
        "patient": {
          "$ref": "./exchange.schema.json#/$defs/identifier"
        },
        "source": {
          "$ref": "./exchange.schema.json#/$defs/identifier"
        },
        "destination": {
          "$ref": "./exchange.schema.json#/$defs/identifier"
        },
        "source_signing_kid": {
          "$ref": "./exchange.schema.json#/$defs/identifier"
        },
        "source_encryption_kid": {
          "$ref": "./exchange.schema.json#/$defs/identifier"
        },
        "destination_signing_kid": {
          "$ref": "./exchange.schema.json#/$defs/identifier"
        },
        "destination_encryption_kid": {
          "$ref": "./exchange.schema.json#/$defs/identifier"
        },
        "address": {
          "type": "string",
          "maxLength": 259
        },
        "destination_endpoint": {
          "type": "string",
          "format": "uri",
          "maxLength": 2000
        },
        "from_generation": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991
        },
        "to_generation": {
          "type": "integer",
          "minimum": 2,
          "maximum": 9007199254740991
        },
        "created_at": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "expires_at": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        }
      }
    },
    "receiptBody": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "v",
            "kind",
            "transfer_id",
            "plan_digest",
            "created_at",
            "archive_digest"
          ],
          "properties": {
            "v": {
              "const": "0.1"
            },
            "kind": {
              "const": "ready"
            },
            "transfer_id": {
              "$ref": "./exchange.schema.json#/$defs/identifier"
            },
            "plan_digest": {
              "$ref": "./exchange.schema.json#/$defs/identifier"
            },
            "created_at": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "archive_digest": {
              "$ref": "./exchange.schema.json#/$defs/identifier"
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "v",
            "kind",
            "transfer_id",
            "plan_digest",
            "created_at",
            "archive_digest",
            "ready_digest"
          ],
          "properties": {
            "v": {
              "const": "0.1"
            },
            "kind": {
              "const": "release"
            },
            "transfer_id": {
              "$ref": "./exchange.schema.json#/$defs/identifier"
            },
            "plan_digest": {
              "$ref": "./exchange.schema.json#/$defs/identifier"
            },
            "created_at": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "archive_digest": {
              "$ref": "./exchange.schema.json#/$defs/identifier"
            },
            "ready_digest": {
              "$ref": "./exchange.schema.json#/$defs/identifier"
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "v",
            "kind",
            "transfer_id",
            "plan_digest",
            "created_at",
            "archive_digest",
            "release_digest"
          ],
          "properties": {
            "v": {
              "const": "0.1"
            },
            "kind": {
              "const": "activation"
            },
            "transfer_id": {
              "$ref": "./exchange.schema.json#/$defs/identifier"
            },
            "plan_digest": {
              "$ref": "./exchange.schema.json#/$defs/identifier"
            },
            "created_at": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "archive_digest": {
              "$ref": "./exchange.schema.json#/$defs/identifier"
            },
            "release_digest": {
              "$ref": "./exchange.schema.json#/$defs/identifier"
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "v",
            "kind",
            "transfer_id",
            "plan_digest",
            "created_at"
          ],
          "properties": {
            "v": {
              "const": "0.1"
            },
            "kind": {
              "const": "abort"
            },
            "transfer_id": {
              "$ref": "./exchange.schema.json#/$defs/identifier"
            },
            "plan_digest": {
              "$ref": "./exchange.schema.json#/$defs/identifier"
            },
            "created_at": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          }
        }
      ]
    },
    "handoff": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "plan",
        "ready",
        "release",
        "activation"
      ],
      "properties": {
        "plan": {
          "$ref": "#/$defs/proof"
        },
        "ready": {
          "$ref": "#/$defs/proof"
        },
        "release": {
          "$ref": "#/$defs/proof"
        },
        "activation": {
          "$ref": "#/$defs/proof"
        }
      }
    }
  }
}
