{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "profile": {
      "type": "string",
      "const": "owp-market-local/0.2"
    },
    "match_id": {
      "type": "string",
      "allOf": [
        {
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "pattern": "^[a-f0-9-]+$"
        }
      ]
    },
    "content": {
      "anyOf": [
        {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "media_type": {
                  "type": "string",
                  "const": "text/plain"
                },
                "text": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 4096
                }
              },
              "required": [
                "media_type",
                "text"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "media_type": {
                  "type": "string",
                  "const": "text/markdown"
                },
                "text": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 4096
                }
              },
              "required": [
                "media_type",
                "text"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "media_type": {
                  "type": "string",
                  "const": "application/json"
                },
                "data": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "garden": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        "day": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        "activity": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        }
                      },
                      "required": [
                        "garden",
                        "day",
                        "activity"
                      ],
                      "additionalProperties": false,
                      "description": "The JSON deliverable for the fictional garden job. No real user data."
                    },
                    {
                      "type": "object",
                      "properties": {
                        "area": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 80
                        },
                        "temperature_c": {
                          "type": "number",
                          "minimum": -100,
                          "maximum": 70
                        },
                        "condition": {
                          "type": "string",
                          "enum": [
                            "clear",
                            "cloudy",
                            "rain",
                            "snow"
                          ]
                        },
                        "observed_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                        }
                      },
                      "required": [
                        "area",
                        "temperature_c",
                        "condition",
                        "observed_at"
                      ],
                      "additionalProperties": false,
                      "description": "JSON weather deliverable. Plain text and Markdown remain supported."
                    }
                  ]
                }
              },
              "required": [
                "media_type",
                "data"
              ],
              "additionalProperties": false
            }
          ],
          "description": "Work may be ordinary text or Markdown. JSON jobs require the named GardenFacts or WeatherFacts schema. The transport envelope remains JSON. UTF-8 content must also fit the job byte limit."
        },
        {
          "type": "object",
          "properties": {
            "media_type": {
              "type": "string",
              "const": "application/owp-encrypted+json"
            },
            "box": {
              "type": "object",
              "properties": {
                "enc": {
                  "type": "string",
                  "pattern": "^[A-Za-z0-9+/]{87}=$"
                },
                "ciphertext": {
                  "type": "string",
                  "minLength": 24,
                  "maxLength": 20000,
                  "pattern": "^[A-Za-z0-9+/]+={0,2}$"
                }
              },
              "required": [
                "enc",
                "ciphertext"
              ],
              "additionalProperties": false,
              "description": "HPKE P-256/HKDF-SHA256/AES-256-GCM. Standard padded base64, not base64url. AAD binds profile, instance, agent, session, request, path, target and direction."
            }
          },
          "required": [
            "media_type",
            "box"
          ],
          "additionalProperties": false,
          "description": "Weather submissions are encrypted to the context adapter. The requested deliverable format is inside the box."
        }
      ]
    }
  },
  "required": [
    "profile",
    "match_id",
    "content"
  ],
  "additionalProperties": false,
  "title": "SubmitRequest",
  "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
}
