{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:marketplace:distribution:v1",
  "title": "Marketplace S3 distribution v1",
  "$defs": {
    "RevisionId": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$",
      "minLength": 64,
      "maxLength": 64
    },
    "Sequence": {
      "type": "string",
      "pattern": "^(0|[1-9][0-9]{0,19})$",
      "maxLength": 20
    },
    "Channel": {
      "enum": ["stable", "preview"]
    },
    "Family": {
      "enum": ["agent-plugin", "runtime-components", "preset"]
    },
    "PackageName": {
      "allOf": [
        {
          "type": "string",
          "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*/[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
        },
        {
          "type": "string",
          "pattern": "^[^/]{1,63}/[^/]{1,63}$",
          "maxLength": 127
        }
      ]
    },
    "SnapshotCursor": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schema_version": {
          "const": "marketplace.cursor/v1"
        },
        "revision_id": {
          "$ref": "#/$defs/RevisionId"
        },
        "criteria_sha256": {
          "$ref": "#/$defs/RevisionId"
        },
        "offset": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100000000
        }
      },
      "required": ["schema_version", "revision_id", "criteria_sha256", "offset"]
    },
    "Version": {
      "type": "string",
      "minLength": 5,
      "maxLength": 256,
      "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(?:-(?:0|[1-9][0-9]*|[0-9]*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9][0-9]*|[0-9]*[a-zA-Z-][0-9a-zA-Z-]*))*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$"
    },
    "PublicPath": {
      "type": "string",
      "maxLength": 1024,
      "pattern": "^(?:data|artifacts)/[a-zA-Z0-9_-]+(?:[./-][a-zA-Z0-9_-]+)*$"
    },
    "ObjectDescriptor": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "path": {
          "$ref": "#/$defs/PublicPath"
        },
        "sha256": {
          "$ref": "#/$defs/RevisionId"
        },
        "size_bytes": {
          "type": "integer",
          "minimum": 1,
          "maximum": 16777216
        }
      },
      "required": ["path", "sha256", "size_bytes"]
    },
    "Snapshot": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schema_version": {
          "const": "marketplace.snapshot/v1"
        },
        "authority_id": {
          "type": "string",
          "format": "uuid"
        },
        "channel": {
          "$ref": "#/$defs/Channel"
        },
        "source_sequence": {
          "$ref": "#/$defs/Sequence"
        },
        "catalog": {
          "$ref": "#/$defs/ObjectDescriptor"
        },
        "packages": {
          "$ref": "#/$defs/ObjectDescriptor"
        },
        "renderer_build_id": {
          "$ref": "#/$defs/RevisionId"
        },
        "impacts": {
          "$ref": "#/$defs/ObjectDescriptor"
        }
      },
      "required": [
        "schema_version",
        "authority_id",
        "channel",
        "source_sequence",
        "catalog",
        "packages",
        "renderer_build_id"
      ]
    },
    "IndexShard": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "lower_bound": {
          "$ref": "#/$defs/PackageName"
        },
        "upper_bound": {
          "$ref": "#/$defs/PackageName"
        },
        "document": {
          "$ref": "#/$defs/ObjectDescriptor"
        }
      },
      "required": ["lower_bound", "upper_bound", "document"]
    },
    "CatalogIndex": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schema_version": {
          "const": "marketplace.catalog-index/v1"
        },
        "shards": {
          "type": "array",
          "maxItems": 10000,
          "items": {
            "$ref": "#/$defs/IndexShard"
          }
        }
      },
      "required": ["schema_version", "shards"]
    },
    "PackageIndex": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schema_version": {
          "const": "marketplace.package-index/v1"
        },
        "shards": {
          "type": "array",
          "maxItems": 10000,
          "items": {
            "$ref": "#/$defs/IndexShard"
          }
        }
      },
      "required": ["schema_version", "shards"]
    },
    "PackageLookup": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "package_id": {
          "type": "string",
          "format": "uuid"
        },
        "name": {
          "$ref": "#/$defs/PackageName"
        },
        "document": {
          "$ref": "#/$defs/ObjectDescriptor"
        }
      },
      "required": ["package_id", "name", "document"]
    },
    "CatalogEntry": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "package_id": {
          "type": "string",
          "format": "uuid"
        },
        "name": {
          "$ref": "#/$defs/PackageName"
        },
        "document": {
          "$ref": "#/$defs/ObjectDescriptor"
        },
        "family": {
          "$ref": "#/$defs/Family"
        },
        "display_name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        },
        "summary": {
          "type": "string",
          "maxLength": 500
        },
        "enabled": {
          "type": "boolean"
        },
        "targets": {
          "type": "array",
          "maxItems": 7,
          "uniqueItems": true,
          "items": {
            "$ref": "urn:marketplace:ui-support-proposal:v1#/$defs/Platform"
          }
        }
      },
      "required": [
        "package_id",
        "name",
        "document",
        "family",
        "display_name",
        "summary",
        "enabled",
        "targets"
      ]
    },
    "CatalogShard": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schema_version": {
          "const": "marketplace.catalog-shard/v1"
        },
        "items": {
          "type": "array",
          "maxItems": 10000,
          "items": {
            "$ref": "#/$defs/CatalogEntry"
          }
        }
      },
      "required": ["schema_version", "items"]
    },
    "PackageShard": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schema_version": {
          "const": "marketplace.package-shard/v1"
        },
        "items": {
          "type": "array",
          "maxItems": 10000,
          "items": {
            "$ref": "#/$defs/PackageLookup"
          }
        }
      },
      "required": ["schema_version", "items"]
    },
    "PublicListing": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "revision": {
          "type": "integer",
          "minimum": 1,
          "maximum": 2147483647
        },
        "metadata": {
          "$ref": "urn:marketplace:ui-support-proposal:v1#/$defs/Metadata"
        }
      },
      "required": ["revision", "metadata"]
    },
    "ReleaseLink": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "release_id": {
          "type": "string",
          "format": "uuid"
        },
        "version": {
          "$ref": "#/$defs/Version"
        },
        "digest": {
          "type": "string",
          "pattern": "^sha256:[a-f0-9]{64}$",
          "minLength": 71,
          "maxLength": 71
        },
        "document": {
          "$ref": "#/$defs/ObjectDescriptor"
        }
      },
      "required": ["release_id", "version", "digest", "document"]
    },
    "PublicPackage": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schema_version": {
          "const": "marketplace.package/v1"
        },
        "package_id": {
          "type": "string",
          "format": "uuid"
        },
        "name": {
          "$ref": "#/$defs/PackageName"
        },
        "family": {
          "$ref": "#/$defs/Family"
        },
        "enabled": {
          "type": "boolean"
        },
        "listing": {
          "anyOf": [
            {
              "$ref": "#/$defs/PublicListing"
            },
            {
              "type": "null"
            }
          ]
        },
        "releases": {
          "type": "array",
          "minItems": 1,
          "maxItems": 100000,
          "items": {
            "$ref": "#/$defs/ReleaseLink"
          }
        },
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "updated_at": {
          "type": "string",
          "format": "date-time"
        }
      },
      "required": [
        "schema_version",
        "package_id",
        "name",
        "family",
        "enabled",
        "listing",
        "releases",
        "created_at",
        "updated_at"
      ]
    },
    "PublicArtifact": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "platform": {
          "$ref": "urn:marketplace:ui-support-proposal:v1#/$defs/Platform"
        },
        "sha256": {
          "$ref": "#/$defs/RevisionId"
        },
        "size_bytes": {
          "type": "integer",
          "minimum": 1,
          "maximum": 536870912
        },
        "path": {
          "$ref": "#/$defs/PublicPath"
        },
        "manifest": {
          "$ref": "urn:marketplace:ui-support-proposal:v1#/$defs/Manifest"
        }
      },
      "required": ["platform", "sha256", "size_bytes", "path", "manifest"]
    },
    "Dependency": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "relation": {
          "enum": ["include", "pin"]
        },
        "reference": {
          "type": "string",
          "maxLength": 256,
          "pattern": "^[^@]+@[^#]+#sha256:[a-f0-9]{64}$"
        }
      },
      "required": ["relation", "reference"]
    },
    "WebObjectPath": {
      "type": "string",
      "maxLength": 2048,
      "pattern": "^(?:web|assets)/[a-f0-9]{64}/[A-Za-z0-9_-][A-Za-z0-9_.-]*(?:/[A-Za-z0-9_-][A-Za-z0-9_.-]*)*$"
    },
    "WebEntryPath": {
      "type": "string",
      "maxLength": 1024,
      "pattern": "^[A-Za-z0-9_-][A-Za-z0-9_.-]*(?:/[A-Za-z0-9_-][A-Za-z0-9_.-]*)*$"
    },
    "WebPage": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "entry_path": {
          "$ref": "#/$defs/WebEntryPath"
        },
        "path": {
          "$ref": "#/$defs/WebObjectPath"
        },
        "sha256": {
          "$ref": "#/$defs/RevisionId"
        },
        "size_bytes": {
          "type": "integer",
          "minimum": 1,
          "maximum": 16777216
        },
        "content_type": {
          "enum": [
            "text/html; charset=utf-8",
            "text/plain; charset=utf-8",
            "text/markdown; charset=utf-8",
            "application/json; charset=utf-8",
            "application/graphql; charset=utf-8"
          ]
        }
      },
      "required": ["entry_path", "path", "sha256", "size_bytes", "content_type"]
    },
    "WebAsset": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "path": {
          "$ref": "#/$defs/WebObjectPath"
        },
        "sha256": {
          "$ref": "#/$defs/RevisionId"
        },
        "size_bytes": {
          "type": "integer",
          "minimum": 1,
          "maximum": 67108864
        },
        "content_type": {
          "type": "string",
          "minLength": 1,
          "maxLength": 128,
          "pattern": "^[A-Za-z0-9.+/_;= -]+$"
        }
      },
      "required": ["path", "sha256", "size_bytes", "content_type"]
    },
    "WebManifest": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schema_version": {
          "const": "marketplace.web/v1"
        },
        "revision_id": {
          "$ref": "#/$defs/RevisionId"
        },
        "source_sequence": {
          "$ref": "#/$defs/Sequence"
        },
        "channel": {
          "$ref": "#/$defs/Channel"
        },
        "renderer_build_id": {
          "$ref": "#/$defs/RevisionId"
        },
        "pages": {
          "type": "array",
          "minItems": 1,
          "maxItems": 65536,
          "items": {
            "$ref": "#/$defs/WebPage"
          }
        },
        "assets": {
          "type": "array",
          "maxItems": 1000,
          "items": {
            "$ref": "#/$defs/WebAsset"
          }
        }
      },
      "required": [
        "schema_version",
        "revision_id",
        "source_sequence",
        "channel",
        "renderer_build_id",
        "pages",
        "assets"
      ]
    },
    "PublicRelease": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schema_version": {
          "const": "marketplace.release/v1"
        },
        "release_id": {
          "type": "string",
          "format": "uuid"
        },
        "package_id": {
          "type": "string",
          "format": "uuid"
        },
        "name": {
          "$ref": "#/$defs/PackageName"
        },
        "family": {
          "$ref": "#/$defs/Family"
        },
        "version": {
          "$ref": "#/$defs/Version"
        },
        "digest": {
          "type": "string",
          "pattern": "^sha256:[a-f0-9]{64}$",
          "minLength": 71,
          "maxLength": 71
        },
        "status": {
          "enum": ["published", "yanked"]
        },
        "artifacts": {
          "type": "array",
          "minItems": 1,
          "maxItems": 6,
          "items": {
            "$ref": "#/$defs/PublicArtifact"
          }
        },
        "dependencies": {
          "type": "array",
          "maxItems": 272,
          "uniqueItems": true,
          "items": {
            "$ref": "#/$defs/Dependency"
          }
        },
        "created_at": {
          "type": "string",
          "format": "date-time"
        }
      },
      "required": [
        "schema_version",
        "release_id",
        "package_id",
        "name",
        "family",
        "version",
        "digest",
        "status",
        "artifacts",
        "dependencies",
        "created_at"
      ]
    },
    "Provenance": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "authority_id": {
          "type": "string",
          "format": "uuid"
        },
        "channel": {
          "$ref": "#/$defs/Channel"
        },
        "revision_id": {
          "$ref": "#/$defs/RevisionId"
        },
        "source_sequence": {
          "$ref": "#/$defs/Sequence"
        }
      },
      "required": ["authority_id", "channel", "revision_id", "source_sequence"]
    },
    "CountPair": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "preset_package_count": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100000000
        },
        "preset_release_count": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100000000
        }
      },
      "required": ["preset_package_count", "preset_release_count"]
    },
    "ImpactEntry": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "package_id": {
          "type": "string",
          "format": "uuid"
        },
        "name": {
          "$ref": "#/$defs/PackageName"
        },
        "direct": {
          "$ref": "#/$defs/CountPair"
        },
        "transitive": {
          "$ref": "#/$defs/CountPair"
        }
      },
      "required": ["package_id", "name", "direct", "transitive"]
    },
    "ImpactsIndex": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schema_version": {
          "const": "marketplace.impacts-index/v1"
        },
        "shards": {
          "type": "array",
          "maxItems": 10000,
          "items": {
            "$ref": "#/$defs/IndexShard"
          }
        }
      },
      "required": ["schema_version", "shards"]
    },
    "ImpactsShard": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schema_version": {
          "const": "marketplace.impacts-shard/v1"
        },
        "items": {
          "type": "array",
          "maxItems": 10000,
          "items": {
            "$ref": "#/$defs/ImpactEntry"
          }
        }
      },
      "required": ["schema_version", "items"]
    }
  },
  "oneOf": [
    {
      "$ref": "#/$defs/Snapshot"
    },
    {
      "$ref": "#/$defs/CatalogIndex"
    },
    {
      "$ref": "#/$defs/PackageIndex"
    },
    {
      "$ref": "#/$defs/CatalogShard"
    },
    {
      "$ref": "#/$defs/PackageShard"
    },
    {
      "$ref": "#/$defs/PublicPackage"
    },
    {
      "$ref": "#/$defs/PublicRelease"
    },
    {
      "$ref": "#/$defs/WebManifest"
    },
    {
      "$ref": "#/$defs/ImpactsIndex"
    },
    {
      "$ref": "#/$defs/ImpactsShard"
    }
  ]
}
