mirror of https://github.com/requarks/wiki
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
2.5 KiB
108 lines
2.5 KiB
import type { FastifyInstance } from 'fastify'
|
|
import { HOOK_EVENTS } from '../../models/hooks.ts'
|
|
|
|
export async function registerSchemas(app: FastifyInstance): Promise<void> {
|
|
/**
|
|
* HOOK INPUT - The writable fields, used for both create and update
|
|
*/
|
|
app.addSchema({
|
|
$id: 'HookInput',
|
|
type: 'object',
|
|
properties: {
|
|
name: {
|
|
type: 'string',
|
|
minLength: 1,
|
|
maxLength: 255
|
|
},
|
|
events: {
|
|
type: 'array',
|
|
minItems: 1,
|
|
items: {
|
|
type: 'string',
|
|
enum: HOOK_EVENTS
|
|
}
|
|
},
|
|
url: {
|
|
type: 'string',
|
|
maxLength: 2048,
|
|
description: 'Where to POST the event. Must be an http or https address.'
|
|
},
|
|
includeMetadata: {
|
|
type: 'boolean',
|
|
description: 'Include the event metadata, such as a page title and author.'
|
|
},
|
|
includeContent: {
|
|
type: 'boolean',
|
|
description: 'Include the full content, e.g. a page body. Payloads can get large.'
|
|
},
|
|
acceptUntrusted: {
|
|
type: 'boolean',
|
|
description: 'Skip TLS certificate validation for this endpoint.'
|
|
},
|
|
authHeader: {
|
|
type: 'string',
|
|
maxLength: 2048,
|
|
description: 'Sent verbatim as the Authorization header.'
|
|
}
|
|
}
|
|
})
|
|
|
|
/**
|
|
* HOOK - A webhook with the outcome of its last delivery
|
|
*/
|
|
app.addSchema({
|
|
$id: 'Hook',
|
|
type: 'object',
|
|
properties: {
|
|
id: {
|
|
type: 'string',
|
|
format: 'uuid'
|
|
},
|
|
name: {
|
|
type: 'string'
|
|
},
|
|
events: {
|
|
type: 'array',
|
|
items: { type: 'string' }
|
|
},
|
|
url: {
|
|
type: 'string'
|
|
},
|
|
includeMetadata: {
|
|
type: 'boolean'
|
|
},
|
|
includeContent: {
|
|
type: 'boolean'
|
|
},
|
|
acceptUntrusted: {
|
|
type: 'boolean'
|
|
},
|
|
authHeader: {
|
|
type: 'string',
|
|
nullable: true
|
|
},
|
|
state: {
|
|
type: 'string',
|
|
enum: ['pending', 'success', 'error'],
|
|
description:
|
|
'`pending` until an event reaches it, then the outcome of the most recent delivery.'
|
|
},
|
|
lastErrorMessage: {
|
|
type: 'string',
|
|
nullable: true,
|
|
description: 'Why the last delivery failed. Null unless the state is `error`.'
|
|
},
|
|
createdAt: {
|
|
type: 'string',
|
|
format: 'date-time',
|
|
description: 'RFC 3339 Date Time'
|
|
},
|
|
updatedAt: {
|
|
type: 'string',
|
|
format: 'date-time',
|
|
description: 'RFC 3339 Date Time'
|
|
}
|
|
}
|
|
})
|
|
}
|