{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://docs.xaere.io/schemas/xr-resolution-v1.schema.json",
  "title": "Xaere receiver resolution response v1",
  "type": "object",
  "required": ["xr_id", "signature_status", "intent", "policy"],
  "additionalProperties": false,
  "properties": {
    "xr_id": { "type": "string", "pattern": "^xr_[A-Za-z0-9_-]{16,}$" },
    "signature_status": { "const": "verified" },
    "intent": {
      "type": "object",
      "required": ["type", "action", "resource"],
      "additionalProperties": false,
      "properties": {
        "type": { "type": "string", "minLength": 1, "maxLength": 160 },
        "action": { "type": "string", "minLength": 1, "maxLength": 160 },
        "resource": { "type": "object" }
      }
    },
    "policy": {
      "type": "object",
      "required": ["audience_measurement", "audience_integration_id"],
      "additionalProperties": false,
      "properties": {
        "audience_measurement": { "type": "boolean" },
        "audience_integration_id": { "type": ["string", "null"], "pattern": "^int_[A-Za-z0-9_-]{8,}$" }
      }
    },
    "measurement_proof": { "$ref": "#/$defs/measurementProof" },
    "resolution_proof": { "$ref": "#/$defs/resolutionProof" }
  },
  "allOf": [
    {
      "if": { "properties": { "policy": { "type": "object", "properties": { "audience_measurement": { "const": true } }, "required": ["audience_measurement"] } } },
      "then": {
        "required": ["measurement_proof"],
        "properties": {
          "measurement_proof": { "$ref": "#/$defs/measurementProof" },
          "policy": {
            "type": "object",
            "properties": { "audience_integration_id": { "type": "string" } }
          }
        }
      }
    },
    {
      "if": { "properties": { "policy": { "type": "object", "properties": { "audience_measurement": { "const": false } }, "required": ["audience_measurement"] } } },
      "then": {
      "not": {
        "type": "object",
        "properties": { "measurement_proof": {} },
        "required": ["measurement_proof"]
      },
        "properties": {
          "policy": {
            "type": "object",
            "properties": { "audience_integration_id": { "type": "null" } }
          }
        }
      }
    }
  ],
  "$defs": {
    "resolutionProof": {
      "type": "object",
      "required": ["version", "key_id", "issued_at", "expires_at", "payload", "signature"],
      "additionalProperties": false,
      "properties": {
        "version": { "const": 1 },
        "key_id": { "type": "string", "minLength": 1, "maxLength": 160 },
        "issued_at": { "type": "string", "format": "date-time" },
        "expires_at": { "type": "string", "format": "date-time" },
        "payload": { "type": "string", "pattern": "^[A-Za-z0-9_-]{64,}$", "maxLength": 65536 },
        "signature": { "type": "string", "pattern": "^[A-Za-z0-9_-]{86}$" }
      }
    },
    "measurementProof": {
      "type": "object",
      "required": ["xr_id", "integration_id", "campaign_id", "issued_at", "expires_at", "key_id", "signature"],
      "additionalProperties": false,
      "properties": {
        "proof_id": { "type": "string", "pattern": "^prf_[A-Za-z0-9_-]{16,}$" },
        "xr_id": { "type": "string", "pattern": "^xr_[A-Za-z0-9_-]{16,}$" },
        "integration_id": { "type": "string", "pattern": "^int_[A-Za-z0-9_-]{8,}$" },
        "campaign_id": { "type": ["string", "null"], "pattern": "^cmp_[A-Za-z0-9_-]{16,}$" },
        "issued_at": { "type": "string", "format": "date-time" },
        "expires_at": { "type": "string", "format": "date-time" },
        "key_id": { "type": "string", "minLength": 1, "maxLength": 160 },
        "signature": { "type": "string", "pattern": "^[A-Za-z0-9_-]{43,}$" }
      }
    }
  }
}
