# GENERATED FILE - do not edit by hand.
#
# Sveltia CMS config over the scraper config tree, both families.
# Generated from scrapers/config/books/ and
# scrapers/config/services/, bounded by the manifests under
# scrapers/books/ and scrapers/services/, by
# scrapers/generator/generate_sveltia_config.py.
#
# Sveltia rewrites a whole file on save and keeps only the keys modeled
# here, so every key in every config file is modeled below. Regenerate with:
#
#     python3 scrapers/generator/generate_sveltia_config.py
#
# CI fails red when this file is stale relative to the config tree.

backend:
  name: github
  repo: SmartStakeApp/SmartStake-Backend
  branch: master
  base_url: https://sveltia-cms-auth.cold-sky-d009.workers.dev
media_folder: scrapers/console/sveltia/media
output:
  omit_empty_optional_fields: false
collections:
- name: scraper_books
  label: Scraper books
  description: 'Operator knobs for the scraper fleet, one file per book under scrapers/config/books/.
    Generated: every key of every file is modeled, because a save rewrites the whole file and keeps only
    what is modeled here.'
  files:
  - name: betano
    label: betano
    file: scrapers/config/books/betano.yaml
    format: yaml
    description: betano (slot shape).
    fields:
    - name: book
      label: Book slug
      widget: string
      required: true
      hint: Identity key. It has to match the file name - a different value here renders this file as
        a different book.
    - name: enabled
      label: Book enabled
      widget: boolean
      hint: The master switch for every slot of this book.
    - name: deployment_target
      label: Deployment target
      widget: select
      options:
      - k3s
      required: true
      hint: Where this book's Deployments are rendered for.
    - name: egress_exception
      label: Egress exception
      widget: hidden
      required: false
      hint: Null in every book today. Carried through the CMS untouched so that null stays null; set one
        in git, not here.
    - name: leagues
      label: Leagues
      widget: object
      collapsed: false
      fields:
      - name: atp
        label: atp
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for atp/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for atp/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: bsa
        label: bsa
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for bsa/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for bsa/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: cfl
        label: cfl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for cfl/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for cfl/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: epl
        label: epl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for epl/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for epl/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: eurob
        label: eurob
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for eurob/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for eurob/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: fcwc
        label: fcwc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for fcwc/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for fcwc/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: fl1
        label: fl1
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for fl1/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for fl1/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: fom
        label: fom
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for fom/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for fom/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: fow
        label: fow
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for fow/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for fow/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: fwc
        label: fwc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for fwc/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for fwc/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: gb
        label: gb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for gb/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for gb/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: isa
        label: isa
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for isa/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for isa/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: jbb
        label: jbb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for jbb/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for jbb/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: kbo
        label: kbo
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for kbo/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for kbo/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: mlb
        label: mlb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for mlb/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for mlb/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: mls
        label: mls
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for mls/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for mls/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: nba
        label: nba
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for nba/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for nba/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: ncaab
        label: ncaab
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for ncaab/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for ncaab/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: ncaabbm
        label: ncaabbm
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for ncaabbm/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for ncaabbm/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: ncaaf
        label: ncaaf
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for ncaaf/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for ncaaf/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: nfl
        label: nfl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for nfl/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for nfl/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: nhl
        label: nhl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for nhl/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for nhl/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: olhw
        label: olhw
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for olhw/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for olhw/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: sll
        label: sll
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for sll/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for sll/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: uefa
        label: uefa
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for uefa/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for uefa/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: ufc
        label: ufc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for ufc/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for ufc/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: wbm
        label: wbm
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for wbm/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for wbm/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: wbw
        label: wbw
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for wbw/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for wbw/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: wnba
        label: wnba
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for wnba/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for wnba/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
      - name: wta
        label: wta
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for wta/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app betano declares for wta/live.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 5
            required: true
            hint: Seconds between passes. The book declares a 5s floor for this phase and the render step
              refuses anything faster.
  - name: betmgm
    label: betmgm
    file: scrapers/config/books/betmgm.yaml
    format: yaml
    description: betmgm (slot shape).
    fields:
    - name: book
      label: Book slug
      widget: string
      required: true
      hint: Identity key. It has to match the file name - a different value here renders this file as
        a different book.
    - name: enabled
      label: Book enabled
      widget: boolean
      hint: The master switch for every slot of this book.
    - name: deployment_target
      label: Deployment target
      widget: select
      options:
      - k3s
      required: true
      hint: Where this book's Deployments are rendered for.
    - name: egress_exception
      label: Egress exception
      widget: hidden
      required: false
      hint: Null in every book today. Carried through the CMS untouched so that null stays null; set one
        in git, not here.
    - name: leagues
      label: Leagues
      widget: object
      collapsed: false
      fields:
      - name: atp
        label: atp
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for atp/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for atp/live.
      - name: bsa
        label: bsa
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for bsa/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for bsa/live.
      - name: cfl
        label: cfl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for cfl/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for cfl/live.
      - name: epl
        label: epl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for epl/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for epl/live.
      - name: fcwc
        label: fcwc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for fcwc/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for fcwc/live.
      - name: fl1
        label: fl1
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for fl1/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for fl1/live.
      - name: fom
        label: fom
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for fom/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for fom/live.
      - name: fow
        label: fow
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for fow/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for fow/live.
      - name: fwc
        label: fwc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for fwc/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for fwc/live.
      - name: gb
        label: gb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for gb/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for gb/live.
      - name: isa
        label: isa
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for isa/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for isa/live.
      - name: itfm
        label: itfm
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for itfm/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for itfm/live.
      - name: itfw
        label: itfw
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for itfw/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for itfw/live.
      - name: jbb
        label: jbb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for jbb/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for jbb/live.
      - name: kbo
        label: kbo
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for kbo/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for kbo/live.
      - name: mbl
        label: mbl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for mbl/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for mbl/live.
      - name: mlb
        label: mlb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for mlb/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for mlb/live.
      - name: mls
        label: mls
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for mls/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for mls/live.
      - name: nba
        label: nba
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for nba/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for nba/live.
      - name: ncaab
        label: ncaab
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for ncaab/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for ncaab/live.
      - name: ncaabbm
        label: ncaabbm
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for ncaabbm/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for ncaabbm/live.
      - name: ncaaf
        label: ncaaf
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for ncaaf/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for ncaaf/live.
      - name: nfl
        label: nfl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for nfl/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for nfl/live.
      - name: nhl
        label: nhl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for nhl/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for nhl/live.
      - name: sll
        label: sll
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for sll/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for sll/live.
      - name: uefa
        label: uefa
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for uefa/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for uefa/live.
      - name: ufc
        label: ufc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for ufc/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for ufc/live.
      - name: usopenm
        label: usopenm
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for usopenm/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for usopenm/live.
      - name: usopenw
        label: usopenw
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for usopenw/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for usopenw/live.
      - name: wbm
        label: wbm
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for wbm/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for wbm/live.
      - name: wbw
        label: wbw
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for wbw/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for wbw/live.
      - name: wewc
        label: wewc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for wewc/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for wewc/live.
      - name: wnba
        label: wnba
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for wnba/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for wnba/live.
      - name: wta
        label: wta
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for wta/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app betmgm declares for wta/live.
  - name: betonline
    label: betonline
    file: scrapers/config/books/betonline.yaml
    format: yaml
    description: betonline (flat shape).
    fields:
    - name: book
      label: Book slug
      widget: string
      required: true
      hint: Identity key. It has to match the file name - a different value here renders this file as
        a different book.
    - name: enabled
      label: Book enabled
      widget: boolean
      hint: The master switch for every slot of this book.
    - name: image
      label: Image
      widget: object
      collapsed: false
      fields:
      - name: repository
        label: Repository
        widget: string
        required: true
      - name: tag
        label: Tag
        widget: string
        required: true
        hint: CI pins this to an immutable git-SHA tag.
    - name: deployment_target
      label: Deployment target
      widget: select
      options:
      - k3s
      required: true
      hint: Where this book's Deployments are rendered for.
    - name: egress_exception
      label: Egress exception
      widget: hidden
      required: false
      hint: Null in every book today. Carried through the CMS untouched so that null stays null; set one
        in git, not here.
    - name: proxy_pool
      label: Proxy pool
      widget: select
      options:
      - decodo_dc_all
      - decodo_dc_au
      - decodo_dc_ca
      - decodo_dc_gb
      - decodo_dc_us
      - decodo_residential_all
      - decodo_residential_ca
      - decodo_residential_us
      - decodo_rotational_all
      - decodo_rotational_ca
      - decodo_rotational_us
      - direct
      - evomi_residential_us
      - evomi_rotational_ca
      - evomi_rotational_us
      - ovh_qc
      - oxylabs_dc_all
      - oxylabs_dc_ca
      - oxylabs_dc_us
      - oxylabs_residential_all
      - oxylabs_residential_ca
      - oxylabs_residential_us
      - per_host
      required: true
      hint: The key this book's proxy credentials are looked up under. A name the cluster secrets do not
        carry is a pod that cannot leave the cluster.
    - name: leagues
      label: Leagues
      widget: object
      collapsed: false
      fields:
      - name: atp
        label: atp
        widget: object
        collapsed: true
        fields:
        - name: enabled
          label: Enabled
          widget: boolean
          hint: Off scales this league's Deployment to zero.
        - name: live
          label: Live
          widget: boolean
          hint: Whether this league runs the book's live pass rather than its pregame one.
        - name: interval_seconds
          label: Interval (seconds)
          widget: number
          value_type: int
          min: 1
          required: true
          hint: Seconds between passes. This book declares no interval floor, so the render step accepts
            any positive integer.
      - name: cfl
        label: cfl
        widget: object
        collapsed: true
        fields:
        - name: enabled
          label: Enabled
          widget: boolean
          hint: Off scales this league's Deployment to zero.
        - name: live
          label: Live
          widget: boolean
          hint: Whether this league runs the book's live pass rather than its pregame one.
        - name: interval_seconds
          label: Interval (seconds)
          widget: number
          value_type: int
          min: 1
          required: true
          hint: Seconds between passes. This book declares no interval floor, so the render step accepts
            any positive integer.
      - name: jbb
        label: jbb
        widget: object
        collapsed: true
        fields:
        - name: enabled
          label: Enabled
          widget: boolean
          hint: Off scales this league's Deployment to zero.
        - name: live
          label: Live
          widget: boolean
          hint: Whether this league runs the book's live pass rather than its pregame one.
        - name: interval_seconds
          label: Interval (seconds)
          widget: number
          value_type: int
          min: 1
          required: true
          hint: Seconds between passes. This book declares no interval floor, so the render step accepts
            any positive integer.
      - name: kbo
        label: kbo
        widget: object
        collapsed: true
        fields:
        - name: enabled
          label: Enabled
          widget: boolean
          hint: Off scales this league's Deployment to zero.
        - name: live
          label: Live
          widget: boolean
          hint: Whether this league runs the book's live pass rather than its pregame one.
        - name: interval_seconds
          label: Interval (seconds)
          widget: number
          value_type: int
          min: 1
          required: true
          hint: Seconds between passes. This book declares no interval floor, so the render step accepts
            any positive integer.
      - name: mlb
        label: mlb
        widget: object
        collapsed: true
        fields:
        - name: enabled
          label: Enabled
          widget: boolean
          hint: Off scales this league's Deployment to zero.
        - name: live
          label: Live
          widget: boolean
          hint: Whether this league runs the book's live pass rather than its pregame one.
        - name: interval_seconds
          label: Interval (seconds)
          widget: number
          value_type: int
          min: 1
          required: true
          hint: Seconds between passes. This book declares no interval floor, so the render step accepts
            any positive integer.
      - name: nfl
        label: nfl
        widget: object
        collapsed: true
        fields:
        - name: enabled
          label: Enabled
          widget: boolean
          hint: Off scales this league's Deployment to zero.
        - name: live
          label: Live
          widget: boolean
          hint: Whether this league runs the book's live pass rather than its pregame one.
        - name: interval_seconds
          label: Interval (seconds)
          widget: number
          value_type: int
          min: 1
          required: true
          hint: Seconds between passes. This book declares no interval floor, so the render step accepts
            any positive integer.
      - name: ufc
        label: ufc
        widget: object
        collapsed: true
        fields:
        - name: enabled
          label: Enabled
          widget: boolean
          hint: Off scales this league's Deployment to zero.
        - name: live
          label: Live
          widget: boolean
          hint: Whether this league runs the book's live pass rather than its pregame one.
        - name: interval_seconds
          label: Interval (seconds)
          widget: number
          value_type: int
          min: 1
          required: true
          hint: Seconds between passes. This book declares no interval floor, so the render step accepts
            any positive integer.
      - name: wbm
        label: wbm
        widget: object
        collapsed: true
        fields:
        - name: enabled
          label: Enabled
          widget: boolean
          hint: Off scales this league's Deployment to zero.
        - name: live
          label: Live
          widget: boolean
          hint: Whether this league runs the book's live pass rather than its pregame one.
        - name: interval_seconds
          label: Interval (seconds)
          widget: number
          value_type: int
          min: 1
          required: true
          hint: Seconds between passes. This book declares no interval floor, so the render step accepts
            any positive integer.
      - name: wbw
        label: wbw
        widget: object
        collapsed: true
        fields:
        - name: enabled
          label: Enabled
          widget: boolean
          hint: Off scales this league's Deployment to zero.
        - name: live
          label: Live
          widget: boolean
          hint: Whether this league runs the book's live pass rather than its pregame one.
        - name: interval_seconds
          label: Interval (seconds)
          widget: number
          value_type: int
          min: 1
          required: true
          hint: Seconds between passes. This book declares no interval floor, so the render step accepts
            any positive integer.
      - name: wnba
        label: wnba
        widget: object
        collapsed: true
        fields:
        - name: enabled
          label: Enabled
          widget: boolean
          hint: Off scales this league's Deployment to zero.
        - name: live
          label: Live
          widget: boolean
          hint: Whether this league runs the book's live pass rather than its pregame one.
        - name: interval_seconds
          label: Interval (seconds)
          widget: number
          value_type: int
          min: 1
          required: true
          hint: Seconds between passes. This book declares no interval floor, so the render step accepts
            any positive integer.
      - name: wta
        label: wta
        widget: object
        collapsed: true
        fields:
        - name: enabled
          label: Enabled
          widget: boolean
          hint: Off scales this league's Deployment to zero.
        - name: live
          label: Live
          widget: boolean
          hint: Whether this league runs the book's live pass rather than its pregame one.
        - name: interval_seconds
          label: Interval (seconds)
          widget: number
          value_type: int
          min: 1
          required: true
          hint: Seconds between passes. This book declares no interval floor, so the render step accepts
            any positive integer.
  - name: draftkings
    label: draftkings
    file: scrapers/config/books/draftkings.yaml
    format: yaml
    description: draftkings (slot shape).
    fields:
    - name: book
      label: Book slug
      widget: string
      required: true
      hint: Identity key. It has to match the file name - a different value here renders this file as
        a different book.
    - name: enabled
      label: Book enabled
      widget: boolean
      hint: The master switch for every slot of this book.
    - name: deployment_target
      label: Deployment target
      widget: select
      options:
      - k3s
      required: true
      hint: Where this book's Deployments are rendered for.
    - name: egress_exception
      label: Egress exception
      widget: hidden
      required: false
      hint: Null in every book today. Carried through the CMS untouched so that null stays null; set one
        in git, not here.
    - name: twin
      label: Dev twin
      widget: object
      collapsed: false
      fields:
      - name: emitted_book_slug
        label: Emitted book slug
        widget: string
        required: true
        hint: The internal slug the twin publishes under. It needs a registry.bookmakers row before the
          twin can run.
      - name: enabled
        label: Twin enabled
        widget: boolean
        hint: Whether pull requests against this book build and deploy a twin at all. It does not bring
          one up on its own.
      - name: league
        label: League
        widget: select
        options:
        - atp
        - auopenm
        - auopenw
        - bsa
        - cfl
        - epl
        - fcwc
        - fl1
        - fom
        - fow
        - fwc
        - gb
        - isa
        - itfm
        - itfw
        - jbb
        - kbo
        - mlb
        - mls
        - nba
        - ncaab
        - ncaaf
        - nfl
        - nhl
        - olhm
        - olhw
        - sll
        - uefa
        - ufc
        - usopenm
        - usopenw
        - wbm
        - wbw
        - wewc
        - wnba
        - wta
        required: true
      - name: phase
        label: Phase
        widget: select
        options:
        - pregame
        - live
        required: true
      - name: app
        label: App
        widget: select
        options:
        - scrapy
        - websocket
        required: true
    - name: leagues
      label: Leagues
      widget: object
      collapsed: false
      fields:
      - name: bsa
        label: bsa
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for bsa/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for bsa/live.
      - name: cfl
        label: cfl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for cfl/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for cfl/live.
      - name: epl
        label: epl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for epl/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for epl/live.
      - name: fcwc
        label: fcwc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for fcwc/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for fcwc/live.
      - name: fl1
        label: fl1
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for fl1/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for fl1/live.
      - name: fwc
        label: fwc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for fwc/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for fwc/live.
      - name: gb
        label: gb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for gb/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for gb/live.
      - name: isa
        label: isa
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for isa/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for isa/live.
      - name: jbb
        label: jbb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for jbb/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for jbb/live.
      - name: kbo
        label: kbo
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for kbo/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for kbo/live.
      - name: mlb
        label: mlb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for mlb/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for mlb/live.
      - name: mls
        label: mls
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for mls/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for mls/live.
      - name: nba
        label: nba
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for nba/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for nba/live.
      - name: nhl
        label: nhl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for nhl/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for nhl/live.
      - name: sll
        label: sll
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for sll/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for sll/live.
      - name: uefa
        label: uefa
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for uefa/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for uefa/live.
      - name: ufc
        label: ufc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for ufc/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for ufc/live.
      - name: wewc
        label: wewc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for wewc/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for wewc/live.
      - name: wnba
        label: wnba
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for wnba/pregame.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            - websocket
            required: true
            hint: The apps draftkings declares for wnba/live.
  - name: polymarket
    label: polymarket
    file: scrapers/config/books/polymarket.yaml
    format: yaml
    description: polymarket (slot shape).
    fields:
    - name: book
      label: Book slug
      widget: string
      required: true
      hint: Identity key. It has to match the file name - a different value here renders this file as
        a different book.
    - name: enabled
      label: Book enabled
      widget: boolean
      hint: The master switch for every slot of this book.
    - name: deployment_target
      label: Deployment target
      widget: select
      options:
      - k3s
      required: true
      hint: Where this book's Deployments are rendered for.
    - name: egress_exception
      label: Egress exception
      widget: hidden
      required: false
      hint: Null in every book today. Carried through the CMS untouched so that null stays null; set one
        in git, not here.
    - name: leagues
      label: Leagues
      widget: object
      collapsed: false
      fields:
      - name: atp
        label: atp
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for atp/live.
      - name: cs2
        label: cs2
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for cs2/live.
      - name: dota2
        label: dota2
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for dota2/live.
      - name: epl
        label: epl
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for epl/live.
      - name: fl1
        label: fl1
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for fl1/live.
      - name: fwc
        label: fwc
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for fwc/live.
      - name: gb
        label: gb
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for gb/live.
      - name: isa
        label: isa
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for isa/live.
      - name: lol
        label: lol
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for lol/live.
      - name: mlb
        label: mlb
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for mlb/live.
      - name: mls
        label: mls
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for mls/live.
      - name: nba
        label: nba
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for nba/live.
      - name: ncaab
        label: ncaab
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for ncaab/live.
      - name: ncaaf
        label: ncaaf
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for ncaaf/live.
      - name: nfl
        label: nfl
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for nfl/live.
      - name: nhl
        label: nhl
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for nhl/live.
      - name: olhm
        label: olhm
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for olhm/live.
      - name: olhw
        label: olhw
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for olhw/live.
      - name: sll
        label: sll
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for sll/live.
      - name: uefa
        label: uefa
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for uefa/live.
      - name: valorant
        label: valorant
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for valorant/live.
      - name: wnba
        label: wnba
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for wnba/live.
      - name: wta
        label: wta
        widget: object
        collapsed: true
        fields:
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app polymarket declares for wta/live.
  - name: schedule
    label: schedule
    file: scrapers/config/books/schedule.yaml
    format: yaml
    description: schedule (slot shape).
    fields:
    - name: book
      label: Book slug
      widget: string
      required: true
      hint: Identity key. It has to match the file name - a different value here renders this file as
        a different book.
    - name: enabled
      label: Book enabled
      widget: boolean
      hint: The master switch for every slot of this book.
    - name: deployment_target
      label: Deployment target
      widget: select
      options:
      - k3s
      required: true
      hint: Where this book's Deployments are rendered for.
    - name: egress_exception
      label: Egress exception
      widget: hidden
      required: false
      hint: Null in every book today. Carried through the CMS untouched so that null stays null; set one
        in git, not here.
    - name: leagues
      label: Leagues
      widget: object
      collapsed: false
      fields:
      - name: atp
        label: atp
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for atp/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: bsa
        label: bsa
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for bsa/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: cfl
        label: cfl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for cfl/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: cs2
        label: cs2
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for cs2/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: epl
        label: epl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for epl/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: fl1
        label: fl1
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for fl1/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: fom
        label: fom
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for fom/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: fow
        label: fow
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for fow/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: fwc
        label: fwc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for fwc/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: gb
        label: gb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for gb/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: isa
        label: isa
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for isa/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: itf
        label: itf
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for itf/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: jbb
        label: jbb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for jbb/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: kbo
        label: kbo
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for kbo/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: lol
        label: lol
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for lol/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: mlb
        label: mlb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for mlb/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: mls
        label: mls
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for mls/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: nba
        label: nba
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for nba/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: ncaab
        label: ncaab
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for ncaab/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: ncaabbm
        label: ncaabbm
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for ncaabbm/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: ncaaf
        label: ncaaf
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for ncaaf/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: nfl
        label: nfl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for nfl/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: nhl
        label: nhl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for nhl/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: sll
        label: sll
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for sll/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: uefa
        label: uefa
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for uefa/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: ufc
        label: ufc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for ufc/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: utrm
        label: utrm
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for utrm/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: utrw
        label: utrw
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for utrw/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: valorant
        label: valorant
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for valorant/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: wbm
        label: wbm
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for wbm/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: wbw
        label: wbw
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for wbw/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: wnba
        label: wnba
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for wnba/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
      - name: wta
        label: wta
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - polling
            required: true
            hint: The only app schedule declares for wta/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 900
            required: true
            hint: Seconds between passes. The book declares a 900s floor for this phase and the render
              step refuses anything faster.
  - name: splashsports
    label: splashsports
    file: scrapers/config/books/splashsports.yaml
    format: yaml
    description: splashsports (slot shape).
    fields:
    - name: book
      label: Book slug
      widget: string
      required: true
      hint: Identity key. It has to match the file name - a different value here renders this file as
        a different book.
    - name: enabled
      label: Book enabled
      widget: boolean
      hint: The master switch for every slot of this book.
    - name: deployment_target
      label: Deployment target
      widget: select
      options:
      - k3s
      required: true
      hint: Where this book's Deployments are rendered for.
    - name: egress_exception
      label: Egress exception
      widget: hidden
      required: false
      hint: Null in every book today. Carried through the CMS untouched so that null stays null; set one
        in git, not here.
    - name: leagues
      label: Leagues
      widget: object
      collapsed: false
      fields:
      - name: fwc
        label: fwc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app splashsports declares for fwc/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
      - name: mlb
        label: mlb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app splashsports declares for mlb/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
      - name: nba
        label: nba
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app splashsports declares for nba/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
      - name: ncaab
        label: ncaab
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app splashsports declares for ncaab/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
      - name: nhl
        label: nhl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app splashsports declares for nhl/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 30
            required: true
            hint: Seconds between passes. The book declares a 30s floor for this phase and the render
              step refuses anything faster.
  - name: thescore
    label: thescore
    file: scrapers/config/books/thescore.yaml
    format: yaml
    description: thescore (slot shape).
    fields:
    - name: book
      label: Book slug
      widget: string
      required: true
      hint: Identity key. It has to match the file name - a different value here renders this file as
        a different book.
    - name: enabled
      label: Book enabled
      widget: boolean
      hint: The master switch for every slot of this book.
    - name: deployment_target
      label: Deployment target
      widget: select
      options:
      - k3s
      required: true
      hint: Where this book's Deployments are rendered for.
    - name: egress_exception
      label: Egress exception
      widget: hidden
      required: false
      hint: Null in every book today. Carried through the CMS untouched so that null stays null; set one
        in git, not here.
    - name: leagues
      label: Leagues
      widget: object
      collapsed: false
      fields:
      - name: mlb
        label: mlb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for mlb/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app thescore declares for mlb/live.
      - name: kbo
        label: kbo
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for kbo/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: jbb
        label: jbb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for jbb/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: nba
        label: nba
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for nba/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app thescore declares for nba/live.
      - name: wnba
        label: wnba
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for wnba/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app thescore declares for wnba/live.
      - name: nhl
        label: nhl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for nhl/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app thescore declares for nhl/live.
      - name: nfl
        label: nfl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for nfl/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app thescore declares for nfl/live.
      - name: cfl
        label: cfl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for cfl/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: mls
        label: mls
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for mls/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app thescore declares for mls/live.
      - name: fwc
        label: fwc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for fwc/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app thescore declares for fwc/live.
      - name: bsa
        label: bsa
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for bsa/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: epl
        label: epl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for epl/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: fl1
        label: fl1
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for fl1/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: isa
        label: isa
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for isa/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: sll
        label: sll
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for sll/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: uefa
        label: uefa
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for uefa/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: atp
        label: atp
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for atp/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app thescore declares for atp/live.
      - name: wta
        label: wta
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for wta/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app thescore declares for wta/live.
      - name: wbm
        label: wbm
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for wbm/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app thescore declares for wbm/live.
      - name: wbw
        label: wbw
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for wbw/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app thescore declares for wbw/live.
      - name: itfm
        label: itfm
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for itfm/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app thescore declares for itfm/live.
      - name: itfw
        label: itfw
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for itfw/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
        - name: live
          label: live
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - websocket
            required: true
            hint: The only app thescore declares for itfw/live.
      - name: fom
        label: fom
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for fom/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: fow
        label: fow
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for fow/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: usopenm
        label: usopenm
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for usopenm/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: usopenw
        label: usopenw
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for usopenw/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: ufc
        label: ufc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app thescore declares for ufc/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
  - name: tonybet
    label: tonybet
    file: scrapers/config/books/tonybet.yaml
    format: yaml
    description: tonybet (slot shape).
    fields:
    - name: book
      label: Book slug
      widget: string
      required: true
      hint: Identity key. It has to match the file name - a different value here renders this file as
        a different book.
    - name: enabled
      label: Book enabled
      widget: boolean
      hint: The master switch for every slot of this book.
    - name: deployment_target
      label: Deployment target
      widget: select
      options:
      - k3s
      required: true
      hint: Where this book's Deployments are rendered for.
    - name: egress_exception
      label: Egress exception
      widget: hidden
      required: false
      hint: Null in every book today. Carried through the CMS untouched so that null stays null; set one
        in git, not here.
    - name: leagues
      label: Leagues
      widget: object
      collapsed: false
      fields:
      - name: atp
        label: atp
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app tonybet declares for atp/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: cfl
        label: cfl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app tonybet declares for cfl/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: fwc
        label: fwc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app tonybet declares for fwc/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: jbb
        label: jbb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app tonybet declares for jbb/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: mlb
        label: mlb
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app tonybet declares for mlb/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: nba
        label: nba
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app tonybet declares for nba/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: ncaab
        label: ncaab
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app tonybet declares for ncaab/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: ncaaf
        label: ncaaf
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app tonybet declares for ncaaf/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: nfl
        label: nfl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app tonybet declares for nfl/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: nhl
        label: nhl
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app tonybet declares for nhl/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: ufc
        label: ufc
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app tonybet declares for ufc/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: wnba
        label: wnba
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app tonybet declares for wnba/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
      - name: wta
        label: wta
        widget: object
        collapsed: true
        fields:
        - name: pregame
          label: pregame
          widget: object
          collapsed: false
          fields:
          - name: enabled
            label: Enabled
            widget: boolean
            hint: Off scales this slot's Deployment to zero. Render refuses to enable a slot the book
              declares blocked, whatever this says.
          - name: app
            label: App
            widget: select
            options:
            - scrapy
            required: true
            hint: The only app tonybet declares for wta/pregame.
          - name: interval_seconds
            label: Interval (seconds)
            widget: number
            value_type: int
            min: 60
            required: true
            hint: Seconds between passes. The book declares a 60s floor for this phase and the render
              step refuses anything faster.
- name: scraper_services
  label: Scraper services
  description: 'Operator knobs for the fleet workloads that are not bookmaker odds scrapers, one file
    per service under scrapers/config/services/. A service has instances rather than slots and no phase
    at all. Generated on the same terms as the books collection: every key of every file is modeled, because
    a save rewrites the whole file and keeps only what is modeled here. No service is configured yet,
    so this collection is empty; it fills in the day the first service file lands and the config is regenerated.'
  files: []
