- groups:add / ranges:plan / nodes:create / coordinator:run commands - the node API: lease, the range's chunks as one framed stream from the spool, batches, heartbeat, finish, release (node guard, token per node) - edge:node: needs COORDINATOR_URL and NODE_TOKEN only (placeholders for the rest), posts a batch every 10 chunks, gives its range back on SIGTERM - releases are gathered per batch: 1.04 chunk rows per release at 10 chunks per batch (1.35 when built per XOVER chunk) - partitions are checked per batch instead of remembered Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
131 lines
5.0 KiB
TypeScript
131 lines
5.0 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']>>>
|
|
}
|
|
}
|
|
'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']>>>
|
|
}
|
|
}
|
|
}
|