appId: com.aerofetch.app
productName: AeroFetch
copyright: Copyright © 2026 AeroFetch

# Lets a browser/another app hand AeroFetch a link via aerofetch://download?url=<encoded>
# (src/main/deeplink.ts) — the closest Windows analog to Android's share-to-app intent.
# The NSIS installer registers this at install time; main/index.ts's
# app.setAsDefaultProtocolClient call additionally covers the portable build and dev.
protocols:
  - name: AeroFetch
    schemes:
      - aerofetch

directories:
  buildResources: build
  output: dist

# Generate a <installer>.exe.sha256 next to every built .exe (H8). The updater
# hard-requires this checksum asset or it refuses to install the update.
afterAllArtifactBuild: ./scripts/generate-checksums.cjs

files:
  - '!**/.vscode/*'
  - '!src/*'
  - '!electron.vite.config.{js,ts,mjs,cjs}'
  - '!{eslint.config.js,.prettierrc,dev-app-update.yml,CHANGELOG.md,README.md}'
  - '!{.env,.env.*,.npmrc,pnpm-lock.yaml,package-lock.json}'
  - '!{tsconfig.json,tsconfig.node.json,tsconfig.web.json}'
  - '!*.tsbuildinfo'

# yt-dlp.exe (+ optional aria2c.exe) ship outside the asar archive so they can be spawned
# directly, landing in <install>/resources/bin (reachable via process.resourcesPath).
# ffmpeg.exe/ffprobe.exe are deliberately EXCLUDED — they're the bulk of the installer, so
# they're fetched on first run into userData/bin instead (src/main/ffmpegSetup.ts). The
# excludes also keep a developer's local resources/bin copies (used only for the dev seed)
# out of the shipped build.
extraResources:
  - from: resources/bin
    to: bin
    filter:
      - '**/*'
      - '!ffmpeg.exe'
      - '!ffprobe.exe'
  # The app icon, copied so the runtime (system tray) can load it at
  # <resources>/icon.ico — build/ itself isn't bundled into the app.
  - from: build/icon.ico
    to: icon.ico

win:
  # Two artifacts:
  #   - nsis     → regular installer (Start-menu shortcut + uninstaller). Per-user
  #                (installs to %LOCALAPPDATA%), so it needs NO admin rights.
  #   - portable → single self-contained .exe. No install, no admin; runs from a
  #                USB stick / Downloads folder on a locked-down public PC.
  target:
    - nsis
    - portable
  # Never request admin elevation.
  requestedExecutionLevel: asInvoker
  # App icon (audit W14): white download glyph on the teal brand square with a
  # top-lit gradient. Generated from build/icon.svg as a multi-size .ico
  # (256/128/64/48/32/16). After editing the SVG, regenerate with:
  #   magick -background none build/icon.svg -define icon:auto-resize=256,128,64,48,32,16 build/icon.ico
  icon: build/icon.ico

portable:
  artifactName: ${productName}-${version}-portable.${ext}
  # Fixed extraction dir name so repeated launches reuse it instead of re-extracting.
  unpackDirName: AeroFetch
  requestExecutionLevel: user

nsis:
  oneClick: false
  perMachine: false
  allowToChangeInstallationDirectory: true
  deleteAppDataOnUninstall: false
  # The custom updater (src/main/updater.ts) does a full download and never consumes
  # the differential .blockmap, so don't emit it (audit L83 — dead build artifact).
  differentialPackage: false
  # Flip perMachine to true for an all-users install to Program Files (requires admin).
