mirror of
https://github.com/git-pkgs/proxy.git
synced 2026-06-02 08:38:17 -04:00
The UI now lives under /ui so reverse proxies can apply different access rules to it (e.g. require auth) while leaving the package endpoints (/npm, /pypi, /v2, ...) open to build machines. - GET / redirects to /ui/ - /api/browse and /api/compare move to /ui/api/browse and /ui/api/compare since only the browser JS calls them - /health, /stats, /metrics, /openapi.json and /api/* stay at root
752 lines
No EOL
24 KiB
JSON
752 lines
No EOL
24 KiB
JSON
{
|
|
"swagger": "2.0",
|
|
"info": {
|
|
"description": "HTTP API for package enrichment, vulnerability lookup, cache stats, and source browsing.",
|
|
"title": "git-pkgs proxy API",
|
|
"contact": {},
|
|
"version": "0.1.0"
|
|
},
|
|
"basePath": "/",
|
|
"paths": {
|
|
"/api/bulk": {
|
|
"post": {
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"api"
|
|
],
|
|
"summary": "Bulk package lookup by PURL",
|
|
"parameters": [
|
|
{
|
|
"description": "PURLs",
|
|
"name": "request",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/server.BulkRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.BulkResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/outdated": {
|
|
"post": {
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"api"
|
|
],
|
|
"summary": "Check outdated packages",
|
|
"parameters": [
|
|
{
|
|
"description": "Packages to check",
|
|
"name": "request",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/server.OutdatedRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.OutdatedResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/packages": {
|
|
"get": {
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"api"
|
|
],
|
|
"summary": "List cached packages",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Ecosystem",
|
|
"name": "ecosystem",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"enum": [
|
|
"hits",
|
|
"name",
|
|
"size",
|
|
"cached_at",
|
|
"ecosystem",
|
|
"vulns"
|
|
],
|
|
"type": "string",
|
|
"description": "Sort",
|
|
"name": "sort",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.PackagesListResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/search": {
|
|
"get": {
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"api"
|
|
],
|
|
"summary": "Search cached packages",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Query",
|
|
"name": "q",
|
|
"in": "query",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Ecosystem",
|
|
"name": "ecosystem",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.SearchResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/health": {
|
|
"get": {
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"meta"
|
|
],
|
|
"summary": "Health check",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.HealthResponse"
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Service Unavailable",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.HealthResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/stats": {
|
|
"get": {
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"meta"
|
|
],
|
|
"summary": "Cache statistics",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.StatsResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/ui/api/browse/{ecosystem}/{name}/{version}": {
|
|
"get": {
|
|
"description": "Lists files from the first cached artifact for a package version.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"browse"
|
|
],
|
|
"summary": "List files inside a cached artifact",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Ecosystem",
|
|
"name": "ecosystem",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Package name",
|
|
"name": "name",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Version",
|
|
"name": "version",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Directory path inside the archive",
|
|
"name": "path",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.BrowseListResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/ui/api/browse/{ecosystem}/{name}/{version}/file/{filepath}": {
|
|
"get": {
|
|
"description": "Streams a single file from the cached artifact. The file path may contain slashes.",
|
|
"produces": [
|
|
"application/octet-stream"
|
|
],
|
|
"tags": [
|
|
"browse"
|
|
],
|
|
"summary": "Fetch a file inside a cached artifact",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Ecosystem",
|
|
"name": "ecosystem",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Package name",
|
|
"name": "name",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Version",
|
|
"name": "version",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "File path inside the archive",
|
|
"name": "filepath",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "file"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/ui/api/compare/{ecosystem}/{name}/{fromVersion}/{toVersion}": {
|
|
"get": {
|
|
"description": "Returns a structured diff for two cached versions.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"browse"
|
|
],
|
|
"summary": "Compare two cached versions",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Ecosystem",
|
|
"name": "ecosystem",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Package name",
|
|
"name": "name",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "From version",
|
|
"name": "fromVersion",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "To version",
|
|
"name": "toVersion",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/server.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"definitions": {
|
|
"server.BrowseFileInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"is_dir": {
|
|
"type": "boolean"
|
|
},
|
|
"mod_time": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"path": {
|
|
"type": "string"
|
|
},
|
|
"size": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"server.BrowseListResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"files": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/server.BrowseFileInfo"
|
|
}
|
|
},
|
|
"path": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"server.BulkRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"purls": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"server.BulkResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"packages": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"$ref": "#/definitions/server.PackageResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"server.ErrorResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"code": {
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"server.HealthCheck": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"type": "string"
|
|
},
|
|
"step": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"server.HealthResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"checks": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"$ref": "#/definitions/server.HealthCheck"
|
|
}
|
|
},
|
|
"status": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"server.OutdatedPackage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"ecosystem": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"server.OutdatedRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"packages": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/server.OutdatedPackage"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"server.OutdatedResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/server.OutdatedResult"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"server.OutdatedResult": {
|
|
"type": "object",
|
|
"properties": {
|
|
"ecosystem": {
|
|
"type": "string"
|
|
},
|
|
"is_outdated": {
|
|
"type": "boolean"
|
|
},
|
|
"latest_version": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"server.PackageListResult": {
|
|
"type": "object",
|
|
"properties": {
|
|
"cached_at": {
|
|
"type": "string"
|
|
},
|
|
"ecosystem": {
|
|
"type": "string"
|
|
},
|
|
"hits": {
|
|
"type": "integer"
|
|
},
|
|
"latest_version": {
|
|
"type": "string"
|
|
},
|
|
"license": {
|
|
"type": "string"
|
|
},
|
|
"license_category": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"size": {
|
|
"type": "integer"
|
|
},
|
|
"vuln_count": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"server.PackageResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"ecosystem": {
|
|
"type": "string"
|
|
},
|
|
"homepage": {
|
|
"type": "string"
|
|
},
|
|
"latest_version": {
|
|
"type": "string"
|
|
},
|
|
"license": {
|
|
"type": "string"
|
|
},
|
|
"license_category": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"registry_url": {
|
|
"type": "string"
|
|
},
|
|
"repository": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"server.PackagesListResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "integer"
|
|
},
|
|
"ecosystem": {
|
|
"type": "string"
|
|
},
|
|
"page": {
|
|
"type": "integer"
|
|
},
|
|
"per_page": {
|
|
"type": "integer"
|
|
},
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/server.PackageListResult"
|
|
}
|
|
},
|
|
"sort_by": {
|
|
"type": "string"
|
|
},
|
|
"total": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"server.SearchPackageResult": {
|
|
"type": "object",
|
|
"properties": {
|
|
"cached_at": {
|
|
"type": "string"
|
|
},
|
|
"ecosystem": {
|
|
"type": "string"
|
|
},
|
|
"hits": {
|
|
"type": "integer"
|
|
},
|
|
"latest_version": {
|
|
"type": "string"
|
|
},
|
|
"license": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"size": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"server.SearchResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "integer"
|
|
},
|
|
"query": {
|
|
"type": "string"
|
|
},
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/server.SearchPackageResult"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"server.StatsResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"cached_artifacts": {
|
|
"type": "integer"
|
|
},
|
|
"database_path": {
|
|
"type": "string"
|
|
},
|
|
"storage_url": {
|
|
"type": "string"
|
|
},
|
|
"total_size": {
|
|
"type": "string"
|
|
},
|
|
"total_size_bytes": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |