- XoverClient.bodies: PROBE_PIPELINE (8) BODY commands per connection at once, replies read in order (one at a time it ran 3-10 articles/s on 6 connections against a queue of 1M). - Claims in tiers: lone files first, then par2 sets and archives of releases without a readable name (what the par2 merge needs), then those of readable releases. - probe_cache: final answers by message-id (status, inspection with the 16 KiB hash and par2 file list), PROBE_VERSION 2. A reset empties the probe queue, not the cache; recreated candidates of probed articles are answered from it without the news server. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
414 lines
12 KiB
TypeScript
414 lines
12 KiB
TypeScript
/**
|
|
* This file is automatically generated
|
|
* DO NOT EDIT manually
|
|
* Run "node ace migration:run" command to re-generate this file
|
|
*/
|
|
|
|
import { BaseModel, column } from '@adonisjs/lucid/orm'
|
|
import { DateTime } from 'luxon'
|
|
|
|
export class AuthAccessTokenSchema extends BaseModel {
|
|
static $columns = ['abilities', 'createdAt', 'expiresAt', 'hash', 'id', 'lastUsedAt', 'name', 'tokenableId', 'type', 'updatedAt'] as const
|
|
$columns = AuthAccessTokenSchema.$columns
|
|
@column()
|
|
declare abilities: string
|
|
@column.dateTime({ autoCreate: true })
|
|
declare createdAt: DateTime | null
|
|
@column.dateTime()
|
|
declare expiresAt: DateTime | null
|
|
@column()
|
|
declare hash: string
|
|
@column({ isPrimary: true })
|
|
declare id: number
|
|
@column.dateTime()
|
|
declare lastUsedAt: DateTime | null
|
|
@column()
|
|
declare name: string | null
|
|
@column()
|
|
declare tokenableId: number
|
|
@column()
|
|
declare type: string
|
|
@column.dateTime({ autoCreate: true, autoUpdate: true })
|
|
declare updatedAt: DateTime | null
|
|
}
|
|
|
|
export class FileHashSchema extends BaseModel {
|
|
static $columns = ['candidateId', 'createdAt', 'hash16K', 'releaseId', 'size'] as const
|
|
$columns = FileHashSchema.$columns
|
|
@column({ isPrimary: true })
|
|
declare candidateId: bigint | number
|
|
@column.dateTime({ autoCreate: true })
|
|
declare createdAt: DateTime
|
|
@column()
|
|
declare hash16K: string
|
|
@column()
|
|
declare releaseId: bigint | number
|
|
@column()
|
|
declare size: bigint | number
|
|
}
|
|
|
|
export class FragmentSchema extends BaseModel {
|
|
static $columns = ['articleNumber', 'fileKey', 'fragment', 'id', 'rangeId', 'segments'] as const
|
|
$columns = FragmentSchema.$columns
|
|
@column()
|
|
declare articleNumber: bigint | number
|
|
@column()
|
|
declare fileKey: string
|
|
@column()
|
|
declare fragment: any
|
|
@column({ isPrimary: true })
|
|
declare id: bigint | number
|
|
@column()
|
|
declare rangeId: bigint | number
|
|
@column()
|
|
declare segments: number
|
|
}
|
|
|
|
export class GroupSchema extends BaseModel {
|
|
static $columns = ['active', 'createdAt', 'high', 'id', 'low', 'name', 'plannedAt', 'priority', 'tail'] as const
|
|
$columns = GroupSchema.$columns
|
|
@column()
|
|
declare active: boolean
|
|
@column.dateTime({ autoCreate: true })
|
|
declare createdAt: DateTime
|
|
@column()
|
|
declare high: bigint | number | null
|
|
@column({ isPrimary: true })
|
|
declare id: number
|
|
@column()
|
|
declare low: bigint | number | null
|
|
@column()
|
|
declare name: string
|
|
@column.dateTime()
|
|
declare plannedAt: DateTime | null
|
|
@column()
|
|
declare priority: number
|
|
@column()
|
|
declare tail: boolean
|
|
}
|
|
|
|
export class NodeAccessTokenSchema extends BaseModel {
|
|
static $columns = ['abilities', 'createdAt', 'expiresAt', 'hash', 'id', 'lastUsedAt', 'name', 'tokenableId', 'type', 'updatedAt'] as const
|
|
$columns = NodeAccessTokenSchema.$columns
|
|
@column()
|
|
declare abilities: string
|
|
@column.dateTime({ autoCreate: true })
|
|
declare createdAt: DateTime | null
|
|
@column.dateTime()
|
|
declare expiresAt: DateTime | null
|
|
@column()
|
|
declare hash: string
|
|
@column({ isPrimary: true })
|
|
declare id: number
|
|
@column.dateTime()
|
|
declare lastUsedAt: DateTime | null
|
|
@column()
|
|
declare name: string | null
|
|
@column()
|
|
declare tokenableId: number
|
|
@column()
|
|
declare type: string
|
|
@column.dateTime({ autoCreate: true, autoUpdate: true })
|
|
declare updatedAt: DateTime | null
|
|
}
|
|
|
|
export class NodeSchema extends BaseModel {
|
|
static $columns = ['createdAt', 'id', 'lastSeenAt', 'name'] as const
|
|
$columns = NodeSchema.$columns
|
|
@column.dateTime({ autoCreate: true })
|
|
declare createdAt: DateTime
|
|
@column({ isPrimary: true })
|
|
declare id: number
|
|
@column.dateTime()
|
|
declare lastSeenAt: DateTime | null
|
|
@column()
|
|
declare name: string
|
|
}
|
|
|
|
export class Par2FileSchema extends BaseModel {
|
|
static $columns = ['fileId', 'hash16K', 'length', 'name', 'setId'] as const
|
|
$columns = Par2FileSchema.$columns
|
|
@column()
|
|
declare fileId: string
|
|
@column()
|
|
declare hash16K: string
|
|
@column()
|
|
declare length: bigint | number
|
|
@column()
|
|
declare name: string
|
|
@column({ isPrimary: true })
|
|
declare setId: string
|
|
}
|
|
|
|
export class Par2SetSchema extends BaseModel {
|
|
static $columns = ['createdAt', 'files', 'releaseId', 'setId'] as const
|
|
$columns = Par2SetSchema.$columns
|
|
@column.dateTime({ autoCreate: true })
|
|
declare createdAt: DateTime
|
|
@column()
|
|
declare files: number
|
|
@column()
|
|
declare releaseId: bigint | number
|
|
@column({ isPrimary: true })
|
|
declare setId: string
|
|
}
|
|
|
|
export class ProbeCacheSchema extends BaseModel {
|
|
static $columns = ['createdAt', 'messageId', 'result', 'status', 'version'] as const
|
|
$columns = ProbeCacheSchema.$columns
|
|
@column.dateTime({ autoCreate: true })
|
|
declare createdAt: DateTime
|
|
@column({ isPrimary: true })
|
|
declare messageId: string
|
|
@column()
|
|
declare result: any | null
|
|
@column()
|
|
declare status: string
|
|
@column()
|
|
declare version: number
|
|
}
|
|
|
|
export class ProbeCandidateSchema extends BaseModel {
|
|
static $columns = ['createdAt', 'file', 'id', 'kind', 'messageId', 'releaseId', 'status'] as const
|
|
$columns = ProbeCandidateSchema.$columns
|
|
@column.dateTime({ autoCreate: true })
|
|
declare createdAt: DateTime
|
|
@column()
|
|
declare file: string
|
|
@column({ isPrimary: true })
|
|
declare id: bigint | number
|
|
@column()
|
|
declare kind: string
|
|
@column()
|
|
declare messageId: string
|
|
@column()
|
|
declare releaseId: bigint | number
|
|
@column()
|
|
declare status: string
|
|
}
|
|
|
|
export class RangeSchema extends BaseModel {
|
|
static $columns = ['attempts', 'capture', 'doneAt', 'endId', 'error', 'groupId', 'headers', 'heartbeatAt', 'id', 'leasedAt', 'nextId', 'nodeId', 'plainChunks', 'priority', 'ruleVersion', 'spooledAt', 'spooledChunks', 'startId', 'status'] as const
|
|
$columns = RangeSchema.$columns
|
|
@column()
|
|
declare attempts: number
|
|
@column()
|
|
declare capture: boolean
|
|
@column.dateTime()
|
|
declare doneAt: DateTime | null
|
|
@column()
|
|
declare endId: bigint | number
|
|
@column()
|
|
declare error: string | null
|
|
@column()
|
|
declare groupId: number
|
|
@column()
|
|
declare headers: bigint | number
|
|
@column.dateTime()
|
|
declare heartbeatAt: DateTime | null
|
|
@column({ isPrimary: true })
|
|
declare id: bigint | number
|
|
@column.dateTime()
|
|
declare leasedAt: DateTime | null
|
|
@column()
|
|
declare nextId: bigint | number
|
|
@column()
|
|
declare nodeId: number | null
|
|
@column()
|
|
declare plainChunks: any
|
|
@column()
|
|
declare priority: number
|
|
@column()
|
|
declare ruleVersion: number | null
|
|
@column.dateTime()
|
|
declare spooledAt: DateTime | null
|
|
@column()
|
|
declare spooledChunks: number
|
|
@column()
|
|
declare startId: bigint | number
|
|
@column()
|
|
declare status: string
|
|
}
|
|
|
|
export class ReleaseChunkSchema extends BaseModel {
|
|
static $columns = ['batchFrom', 'createdAt', 'files', 'id', 'payload', 'rangeId', 'releaseId', 'segments'] as const
|
|
$columns = ReleaseChunkSchema.$columns
|
|
@column()
|
|
declare batchFrom: bigint | number
|
|
@column.dateTime({ autoCreate: true })
|
|
declare createdAt: DateTime
|
|
@column()
|
|
declare files: number
|
|
@column({ isPrimary: true })
|
|
declare id: bigint | number
|
|
@column()
|
|
declare payload: Buffer
|
|
@column()
|
|
declare rangeId: bigint | number
|
|
@column()
|
|
declare releaseId: bigint | number
|
|
@column()
|
|
declare segments: number
|
|
}
|
|
|
|
export class ReleaseInspectionSchema extends BaseModel {
|
|
static $columns = ['candidateId', 'createdAt', 'kind', 'releaseId', 'result'] as const
|
|
$columns = ReleaseInspectionSchema.$columns
|
|
@column()
|
|
declare candidateId: bigint | number
|
|
@column.dateTime({ autoCreate: true })
|
|
declare createdAt: DateTime
|
|
@column()
|
|
declare kind: string
|
|
@column({ isPrimary: true })
|
|
declare releaseId: bigint | number
|
|
@column()
|
|
declare result: any
|
|
}
|
|
|
|
export class ReleaseMergeSchema extends BaseModel {
|
|
static $columns = ['createdAt', 'files', 'fromId', 'fromKey', 'id', 'intoId', 'setId'] as const
|
|
$columns = ReleaseMergeSchema.$columns
|
|
@column.dateTime({ autoCreate: true })
|
|
declare createdAt: DateTime
|
|
@column()
|
|
declare files: number
|
|
@column()
|
|
declare fromId: bigint | number
|
|
@column()
|
|
declare fromKey: string
|
|
@column({ isPrimary: true })
|
|
declare id: bigint | number
|
|
@column()
|
|
declare intoId: bigint | number
|
|
@column()
|
|
declare setId: string
|
|
}
|
|
|
|
export class ReleaseSchema extends BaseModel {
|
|
static $columns = ['bytes', 'category', 'chunks', 'complete', 'fileTotal', 'files', 'firstArticle', 'firstSeenAt', 'groupId', 'groups', 'hasPar2', 'id', 'identityKey', 'innerName', 'inspectedAt', 'lastArticle', 'lastPostedAt', 'lastSeenAt', 'name', 'passworded', 'postedAt', 'poster', 'readable', 'releaseKey', 'segments', 'settledAt', 'source'] as const
|
|
$columns = ReleaseSchema.$columns
|
|
@column()
|
|
declare bytes: bigint | number
|
|
@column()
|
|
declare category: number | null
|
|
@column()
|
|
declare chunks: number
|
|
@column()
|
|
declare complete: boolean | null
|
|
@column()
|
|
declare fileTotal: number | null
|
|
@column()
|
|
declare files: number
|
|
@column()
|
|
declare firstArticle: bigint | number | null
|
|
@column.dateTime()
|
|
declare firstSeenAt: DateTime
|
|
@column()
|
|
declare groupId: number | null
|
|
@column()
|
|
declare groups: any
|
|
@column()
|
|
declare hasPar2: boolean
|
|
@column({ isPrimary: true })
|
|
declare id: bigint | number
|
|
@column()
|
|
declare identityKey: string
|
|
@column()
|
|
declare innerName: string | null
|
|
@column.dateTime()
|
|
declare inspectedAt: DateTime | null
|
|
@column()
|
|
declare lastArticle: bigint | number | null
|
|
@column.dateTime()
|
|
declare lastPostedAt: DateTime | null
|
|
@column.dateTime()
|
|
declare lastSeenAt: DateTime
|
|
@column()
|
|
declare name: string
|
|
@column()
|
|
declare passworded: boolean | null
|
|
@column.dateTime()
|
|
declare postedAt: DateTime | null
|
|
@column()
|
|
declare poster: string | null
|
|
@column()
|
|
declare readable: boolean
|
|
@column()
|
|
declare releaseKey: string
|
|
@column()
|
|
declare segments: bigint | number
|
|
@column.dateTime()
|
|
declare settledAt: DateTime | null
|
|
@column()
|
|
declare source: string
|
|
}
|
|
|
|
export class RuleCountSchema extends BaseModel {
|
|
static $columns = ['articles', 'files', 'key', 'rangeId', 'rule'] as const
|
|
$columns = RuleCountSchema.$columns
|
|
@column()
|
|
declare articles: bigint | number
|
|
@column()
|
|
declare files: bigint | number
|
|
@column()
|
|
declare key: string
|
|
@column({ isPrimary: true })
|
|
declare rangeId: bigint | number
|
|
@column()
|
|
declare rule: string
|
|
}
|
|
|
|
export class RuleSampleSchema extends BaseModel {
|
|
static $columns = ['files', 'id', 'name', 'payload', 'rangeId', 'releaseKey', 'rule', 'ruleKey', 'segments'] as const
|
|
$columns = RuleSampleSchema.$columns
|
|
@column()
|
|
declare files: number
|
|
@column({ isPrimary: true })
|
|
declare id: bigint | number
|
|
@column()
|
|
declare name: string
|
|
@column()
|
|
declare payload: Buffer
|
|
@column()
|
|
declare rangeId: bigint | number
|
|
@column()
|
|
declare releaseKey: string
|
|
@column()
|
|
declare rule: string
|
|
@column()
|
|
declare ruleKey: string
|
|
@column()
|
|
declare segments: number
|
|
}
|
|
|
|
export class RuleSetSchema extends BaseModel {
|
|
static $columns = ['createdAt', 'note', 'rules', 'version'] as const
|
|
$columns = RuleSetSchema.$columns
|
|
@column.dateTime({ autoCreate: true })
|
|
declare createdAt: DateTime
|
|
@column()
|
|
declare note: string | null
|
|
@column()
|
|
declare rules: any
|
|
@column({ isPrimary: true })
|
|
declare version: number
|
|
}
|
|
|
|
export class UserSchema extends BaseModel {
|
|
static $columns = ['createdAt', 'email', 'fullName', 'id', 'password', 'updatedAt'] as const
|
|
$columns = UserSchema.$columns
|
|
@column.dateTime({ autoCreate: true })
|
|
declare createdAt: DateTime
|
|
@column()
|
|
declare email: string
|
|
@column()
|
|
declare fullName: string | null
|
|
@column({ isPrimary: true })
|
|
declare id: number
|
|
@column({ serializeAs: null })
|
|
declare password: string
|
|
@column.dateTime({ autoCreate: true, autoUpdate: true })
|
|
declare updatedAt: DateTime | null
|
|
}
|