{"openapi":"3.0.0","info":{"version":"0.0.1","title":"Nix Casks API","description":"API for creating/updating Nix derivations from Homebrew Casks","license":{"name":"MIT","url":"https://opensource.org/licenses/MIT"}},"components":{"schemas":{"NixPackage":{"type":"object","properties":{"pname":{"type":"string","description":"Name of the package","example":"visual-studio-code"},"version":{"type":"string","description":"Version of the package","example":"1.94.2"},"src":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"URL to the source code, binary or archive","example":"https://update.code.visualstudio.com/1.94.2/darwin-arm64/stable"},"sha256":{"type":"string","description":"SHA256 hash of the source code, binary or archive","example":"fQ9l6WwYpzypwEOS4LxER0QDg87BBYHxnyiNUsYcDgU"}},"required":["url","sha256"]},"installPhase":{"type":"array","items":{"type":"string"},"description":"Installation steps to be executed"},"meta":{"type":"object","properties":{"description":{"type":"string","description":"Short description of the package","example":"Open-source code editor"},"homepage":{"type":"string","format":"uri","description":"URL to the homepage of the package","example":"https://code.visualstudio.com/"}}}},"required":["pname","version","src","installPhase","meta"],"description":"JSON representation of"},"ArchiveManifest":{"type":"object","properties":{"url":{"type":"string","description":"URL of archive containing package definitions"},"sha256":{"type":"string","description":"SHA256 checksum of the archive"}},"required":["url","sha256"],"description":"Manifest containing URL and SHA256 checksum for package definitions"}},"parameters":{}},"paths":{"/api/package":{"get":{"description":"Get latest version of all packages","responses":{"200":{"description":"List of packages","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NixPackage"},"description":"List of packages"}}}}}},"post":{"description":"Add a new package","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"URL of the package to add","example":"https://formulae.brew.sh/api/cask/visual-studio-code.json"}},"required":["url"]}}}},"responses":{"200":{"description":"Package found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NixPackage"}}}},"201":{"description":"New package created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NixPackage"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Error message","examples":["Package doesn't have a valid version.","Package doesn't have a valid checksum."]}},"required":["message"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"Unauthorized"}},"required":["message"]}}}}}}},"/api/package/{pname}":{"get":{"description":"Get latest version of a package by its name","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9-_]+$","title":"NixPackageName","description":"Package name used to identify the package","example":"visual-studio-code"},"required":true,"description":"Package name used to identify the package","name":"pname","in":"path"}],"responses":{"200":{"description":"Package found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NixPackage"}}}},"404":{"description":"Package not found","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"Package not found"}},"required":["message"]}}}}}}},"/api/package/{pname}/{version}":{"get":{"description":"Get a package by its name and version","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9-_]+$","title":"NixPackageName","description":"Package name used to identify the package","example":"visual-studio-code"},"required":true,"description":"Package name used to identify the package","name":"pname","in":"path"},{"schema":{"type":"string","description":"Version of the package","example":"1.94.2"},"required":true,"description":"Version of the package","name":"version","in":"path"}],"responses":{"200":{"description":"Package found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NixPackage"}}}},"404":{"description":"Package not found","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"Package not found"}},"required":["message"]}}}}}}},"/api/package/{pname}/update":{"post":{"description":"Update a package by its package name","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9-_]+$","title":"NixPackageName","description":"Package name used to identify the package","example":"visual-studio-code"},"required":true,"description":"Package name used to identify the package","name":"pname","in":"path"}],"responses":{"200":{"description":"Package found and up to date","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NixPackage"}}}},"201":{"description":"New version of the package created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NixPackage"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Error message","examples":["Package doesn't have a valid version.","Package doesn't have a valid checksum."]}},"required":["message"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"Unauthorized"}},"required":["message"]}}}},"404":{"description":"Package not found","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"Package not found"}},"required":["message"]}}}}}}},"/api/package/homebrew":{"post":{"description":"Update packages from Homebrew","responses":{"200":{"description":"Packages updated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NixPackage"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"Unauthorized"}},"required":["message"]}}}}}}},"/api/archive":{"post":{"description":"Upload the latest package definitions as an archive","responses":{"200":{"description":"Packages uploaded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArchiveManifest"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"Unauthorized"}},"required":["message"]}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"Package archive already exists"}},"required":["message"]}}}}}}},"/api/archive/latest":{"get":{"description":"Get the latest archive with latest package definitions","responses":{"200":{"description":"Latest package definitions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArchiveManifest"}}}}}}}}}