lib/nzb (buildNzb, parseNzb) from the current app; NzbService builds a release's NZB from its chunks; GET /api/v1/releases?q= (every word of the name) and GET /api/v1/releases/:id/nzb behind the api guard. A test stores a batch, finds the release and reads its NZB back. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
155 lines
5.8 KiB
TypeScript
155 lines
5.8 KiB
TypeScript
/* eslint-disable prettier/prettier */
|
|
/// <reference path="../manifest.d.ts" />
|
|
|
|
import type { ExtractBody, ExtractErrorResponse, ExtractQuery, ExtractQueryForGet, ExtractResponse } from '@tuyau/core/types'
|
|
import type { InferInput, SimpleError } from '@vinejs/vine/types'
|
|
|
|
export type ParamValue = string | number | bigint | boolean
|
|
|
|
export interface Registry {
|
|
'auth.new_account.store': {
|
|
methods: ["POST"]
|
|
pattern: '/api/v1/auth/signup'
|
|
types: {
|
|
body: ExtractBody<InferInput<(typeof import('#validators/user').signupValidator)>>
|
|
paramsTuple: []
|
|
params: {}
|
|
query: ExtractQuery<InferInput<(typeof import('#validators/user').signupValidator)>>
|
|
response: ExtractResponse<Awaited<ReturnType<import('#controllers/new_account_controller').default['store']>>>
|
|
errorResponse: ExtractErrorResponse<Awaited<ReturnType<import('#controllers/new_account_controller').default['store']>>> | { status: 422; response: { errors: SimpleError[] } }
|
|
}
|
|
}
|
|
'auth.access_tokens.store': {
|
|
methods: ["POST"]
|
|
pattern: '/api/v1/auth/login'
|
|
types: {
|
|
body: ExtractBody<InferInput<(typeof import('#validators/user').loginValidator)>>
|
|
paramsTuple: []
|
|
params: {}
|
|
query: ExtractQuery<InferInput<(typeof import('#validators/user').loginValidator)>>
|
|
response: ExtractResponse<Awaited<ReturnType<import('#controllers/access_tokens_controller').default['store']>>>
|
|
errorResponse: ExtractErrorResponse<Awaited<ReturnType<import('#controllers/access_tokens_controller').default['store']>>> | { status: 422; response: { errors: SimpleError[] } }
|
|
}
|
|
}
|
|
'profile.profile.show': {
|
|
methods: ["GET","HEAD"]
|
|
pattern: '/api/v1/account/profile'
|
|
types: {
|
|
body: {}
|
|
paramsTuple: []
|
|
params: {}
|
|
query: {}
|
|
response: ExtractResponse<Awaited<ReturnType<import('#controllers/profile_controller').default['show']>>>
|
|
errorResponse: ExtractErrorResponse<Awaited<ReturnType<import('#controllers/profile_controller').default['show']>>>
|
|
}
|
|
}
|
|
'profile.access_tokens.destroy': {
|
|
methods: ["POST"]
|
|
pattern: '/api/v1/account/logout'
|
|
types: {
|
|
body: {}
|
|
paramsTuple: []
|
|
params: {}
|
|
query: {}
|
|
response: ExtractResponse<Awaited<ReturnType<import('#controllers/access_tokens_controller').default['destroy']>>>
|
|
errorResponse: ExtractErrorResponse<Awaited<ReturnType<import('#controllers/access_tokens_controller').default['destroy']>>>
|
|
}
|
|
}
|
|
'releases.index': {
|
|
methods: ["GET","HEAD"]
|
|
pattern: '/api/v1/releases'
|
|
types: {
|
|
body: {}
|
|
paramsTuple: []
|
|
params: {}
|
|
query: {}
|
|
response: ExtractResponse<Awaited<ReturnType<import('#controllers/releases_controller').default['index']>>>
|
|
errorResponse: ExtractErrorResponse<Awaited<ReturnType<import('#controllers/releases_controller').default['index']>>>
|
|
}
|
|
}
|
|
'releases.nzb': {
|
|
methods: ["GET","HEAD"]
|
|
pattern: '/api/v1/releases/:id/nzb'
|
|
types: {
|
|
body: {}
|
|
paramsTuple: [ParamValue]
|
|
params: { id: ParamValue }
|
|
query: {}
|
|
response: ExtractResponse<Awaited<ReturnType<import('#controllers/releases_controller').default['nzb']>>>
|
|
errorResponse: ExtractErrorResponse<Awaited<ReturnType<import('#controllers/releases_controller').default['nzb']>>>
|
|
}
|
|
}
|
|
'node.node.lease': {
|
|
methods: ["POST"]
|
|
pattern: '/api/v1/node/lease'
|
|
types: {
|
|
body: {}
|
|
paramsTuple: []
|
|
params: {}
|
|
query: {}
|
|
response: ExtractResponse<Awaited<ReturnType<import('#controllers/node_controller').default['lease']>>>
|
|
errorResponse: ExtractErrorResponse<Awaited<ReturnType<import('#controllers/node_controller').default['lease']>>>
|
|
}
|
|
}
|
|
'node.node.stream': {
|
|
methods: ["GET","HEAD"]
|
|
pattern: '/api/v1/node/ranges/:id/stream'
|
|
types: {
|
|
body: {}
|
|
paramsTuple: [ParamValue]
|
|
params: { id: ParamValue }
|
|
query: {}
|
|
response: ExtractResponse<Awaited<ReturnType<import('#controllers/node_controller').default['stream']>>>
|
|
errorResponse: ExtractErrorResponse<Awaited<ReturnType<import('#controllers/node_controller').default['stream']>>>
|
|
}
|
|
}
|
|
'node.node.batch': {
|
|
methods: ["POST"]
|
|
pattern: '/api/v1/node/ranges/:id/batches'
|
|
types: {
|
|
body: {}
|
|
paramsTuple: [ParamValue]
|
|
params: { id: ParamValue }
|
|
query: {}
|
|
response: ExtractResponse<Awaited<ReturnType<import('#controllers/node_controller').default['batch']>>>
|
|
errorResponse: ExtractErrorResponse<Awaited<ReturnType<import('#controllers/node_controller').default['batch']>>>
|
|
}
|
|
}
|
|
'node.node.heartbeat': {
|
|
methods: ["POST"]
|
|
pattern: '/api/v1/node/ranges/:id/heartbeat'
|
|
types: {
|
|
body: {}
|
|
paramsTuple: [ParamValue]
|
|
params: { id: ParamValue }
|
|
query: {}
|
|
response: ExtractResponse<Awaited<ReturnType<import('#controllers/node_controller').default['heartbeat']>>>
|
|
errorResponse: ExtractErrorResponse<Awaited<ReturnType<import('#controllers/node_controller').default['heartbeat']>>>
|
|
}
|
|
}
|
|
'node.node.finish': {
|
|
methods: ["POST"]
|
|
pattern: '/api/v1/node/ranges/:id/finish'
|
|
types: {
|
|
body: {}
|
|
paramsTuple: [ParamValue]
|
|
params: { id: ParamValue }
|
|
query: {}
|
|
response: ExtractResponse<Awaited<ReturnType<import('#controllers/node_controller').default['finish']>>>
|
|
errorResponse: ExtractErrorResponse<Awaited<ReturnType<import('#controllers/node_controller').default['finish']>>>
|
|
}
|
|
}
|
|
'node.node.release': {
|
|
methods: ["POST"]
|
|
pattern: '/api/v1/node/ranges/:id/release'
|
|
types: {
|
|
body: {}
|
|
paramsTuple: [ParamValue]
|
|
params: { id: ParamValue }
|
|
query: {}
|
|
response: ExtractResponse<Awaited<ReturnType<import('#controllers/node_controller').default['release']>>>
|
|
errorResponse: ExtractErrorResponse<Awaited<ReturnType<import('#controllers/node_controller').default['release']>>>
|
|
}
|
|
}
|
|
}
|