signalk-server
Version:
An implementation of a [Signal K](http://signalk.org) server for boats.
571 lines • 24.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.autopilotApiRecord = void 0;
const openApiSchemas_1 = require("../openApiSchemas");
const typebox_1 = require("@signalk/server-api/typebox");
const autopilotApiDoc = {
openapi: '3.0.0',
info: {
version: '2.0.0',
title: 'Signal K Autopilot API',
termsOfService: 'http://signalk.org/terms/',
license: {
name: 'Apache 2.0',
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
}
},
externalDocs: {
url: 'http://signalk.org/specification/',
description: 'Signal K specification.'
},
servers: [{ url: '/signalk/v2/api/vessels/self/autopilots' }],
tags: [{ name: 'autopilot', description: 'Signal K Autopilot API' }],
components: {
schemas: (0, openApiSchemas_1.typeboxToOpenApiSchemas)([
typebox_1.AutopilotStateDefSchema,
typebox_1.AutopilotActionDefSchema,
typebox_1.AutopilotOptionsSchema,
typebox_1.AngleInputSchema
]),
responses: {
'200ActionResponse': {
description: 'PUT OK response',
content: {
'application/json': {
schema: {
type: 'object',
properties: {
state: { type: 'string', enum: ['COMPLETED'] },
statusCode: { type: 'number', enum: [200] }
},
required: ['statusCode', 'state']
}
}
}
},
ErrorResponse: {
description: 'Failed operation',
content: {
'application/json': {
schema: {
type: 'object',
description: 'Request error response',
properties: {
state: { type: 'string', enum: ['FAILED'] },
statusCode: { type: 'number', enum: [400, 404] },
message: { type: 'string' }
},
required: ['state', 'statusCode', 'message']
}
}
}
}
},
parameters: {
AutopilotIdParam: {
name: 'id',
in: 'path',
description: 'autopilot id',
required: true,
schema: { type: 'string' }
}
},
securitySchemes: {
bearerAuth: {
type: 'http',
scheme: 'bearer',
bearerFormat: 'JWT'
},
cookieAuth: {
type: 'apiKey',
in: 'cookie',
name: 'JAUTHENTICATION'
}
}
},
security: [{ cookieAuth: [] }, { bearerAuth: [] }],
paths: {
'/': {
get: {
tags: ['autopilot'],
summary: 'Retrieve list of autopilots.',
description: 'Returns a list of autopilots indexed by their identifier.',
responses: {
default: {
description: 'Autopilot device list response.',
content: {
'application/json': {
schema: {
type: 'object',
additionalProperties: {
type: 'object',
required: ['provider', 'isDefault'],
properties: {
provider: {
type: 'string',
description: 'Provider plugin managing the autopilot device.',
example: 'my-pilot-provider'
},
isDefault: {
type: 'boolean',
description: 'Set to true when the autopilot is currently set as the default.',
example: 'false'
}
}
}
}
}
}
},
error: { $ref: '#/components/responses/ErrorResponse' }
}
}
},
'/_providers/_default': {
get: {
tags: ['autopilot'],
summary: 'Get the default autopilot device id.',
description: 'Returns the device id of the autopilot assigned as the default.',
responses: {
default: {
description: 'Autopilot configuration response',
content: {
'application/json': {
schema: {
type: 'object',
required: ['id'],
properties: { id: { type: 'string' } }
}
}
}
}
}
}
},
'/_providers/_default/{id}': {
parameters: [{ $ref: '#/components/parameters/AutopilotIdParam' }],
post: {
tags: ['autopilot'],
summary: 'Set the default autopilot device.',
description: 'Sets the autopilot with the supplied `id` as the default.',
responses: {
'200ActionResponse': {
$ref: '#/components/responses/200ActionResponse'
},
default: { $ref: '#/components/responses/ErrorResponse' }
}
}
},
'/{id}': {
parameters: [{ $ref: '#/components/parameters/AutopilotIdParam' }],
get: {
tags: ['autopilot'],
summary: 'Retrieve autopilot information.',
description: 'Returns the current state autopilot information including the available options for `state` and `mode`.',
responses: {
default: {
description: 'Autopilot configuration response',
content: {
'application/json': {
schema: {
type: 'object',
required: ['state', 'mode', 'target', 'engaged'],
properties: {
engaged: {
type: 'boolean',
description: 'Autopilot is engaged and actively steering the vessel',
example: 'true'
},
state: {
type: 'string',
description: 'Autopilot state',
example: 'auto'
},
mode: {
type: 'string',
description: 'Autopilot operational mode',
example: 'compass'
},
target: {
description: 'Current target value (radians)',
type: 'number',
example: 2.8762
},
options: {
$ref: '#/components/schemas/AutopilotOptions'
}
}
}
}
}
},
error: { $ref: '#/components/responses/ErrorResponse' }
}
}
},
'/{id}/options': {
parameters: [{ $ref: '#/components/parameters/AutopilotIdParam' }],
get: {
tags: ['autopilot'],
summary: 'Retrieve autopilot options.',
description: 'Returns the selectable options and the values that can be applied (e.g. for`state` and `mode`).',
responses: {
default: {
description: 'Autopilot configuration response',
content: {
'application/json': {
schema: {
$ref: '#/components/schemas/AutopilotOptions'
}
}
}
},
error: { $ref: '#/components/responses/ErrorResponse' }
}
}
},
'/{id}/engage': {
parameters: [{ $ref: '#/components/parameters/AutopilotIdParam' }],
post: {
tags: ['autopilot'],
summary: 'Engage autopilot to steer vessel',
description: 'Provider plugin will set the autopilot to a `state` where it is actively steering the vessel. `state` selected is determined by the provider plugin.',
responses: {
'200ActionResponse': {
$ref: '#/components/responses/200ActionResponse'
},
default: { $ref: '#/components/responses/ErrorResponse' }
}
}
},
'/{id}/disengage': {
parameters: [{ $ref: '#/components/parameters/AutopilotIdParam' }],
post: {
tags: ['autopilot'],
summary: 'Disengage autopilot from steering vessel.',
description: 'Provider plugin will set the autopilot to a `state` where it is NOT actively steering the vessel. `state` selected is determined by the provider plugin.',
responses: {
'200ActionResponse': {
$ref: '#/components/responses/200ActionResponse'
},
default: { $ref: '#/components/responses/ErrorResponse' }
}
}
},
'/{id}/state': {
parameters: [{ $ref: '#/components/parameters/AutopilotIdParam' }],
get: {
tags: ['autopilot'],
summary: 'Retrieve the current state.',
description: 'Returns the current `state` value from the autopilot.',
responses: {
default: {
description: 'Autopilot value response',
content: {
'application/json': {
schema: {
type: 'object',
required: ['value'],
properties: {
value: { type: 'string', example: 'standby' }
}
}
}
}
},
error: { $ref: '#/components/responses/ErrorResponse' }
}
},
put: {
tags: ['autopilot'],
summary: 'Set autopilot state.',
description: 'Set the autopilot to the supplied valid `state` value.',
requestBody: {
description: 'Supply valid `state` value (as per response from autopilot information request).',
required: true,
content: {
'application/json': {
schema: {
type: 'object',
properties: {
value: {
type: 'string',
description: 'Value representing the `state` the autopilot is to enter.',
example: 'enabled'
}
}
}
}
}
},
responses: {
'200ActionResponse': {
$ref: '#/components/responses/200ActionResponse'
},
default: { $ref: '#/components/responses/ErrorResponse' }
}
}
},
'/{id}/mode': {
parameters: [{ $ref: '#/components/parameters/AutopilotIdParam' }],
get: {
tags: ['autopilot'],
summary: 'Retrieve the current mode.',
description: 'Returns the current `mode` value from the autopilot.',
responses: {
default: {
description: 'Autopilot value response',
content: {
'application/json': {
schema: {
type: 'object',
required: ['value'],
properties: {
value: { type: 'string', example: 'compass' }
}
}
}
}
},
error: { $ref: '#/components/responses/ErrorResponse' }
}
},
put: {
tags: ['autopilot'],
summary: 'Set autopilot mode',
description: 'Set the autopilot to the supplied valid `mode` value.',
requestBody: {
description: 'Supply valid `mode` value (as per response from autopilot information request).',
required: true,
content: {
'application/json': {
schema: {
type: 'object',
properties: {
value: {
type: 'string',
description: 'Value representing the `mode` the autopilot is to enter.',
example: 'compass'
}
}
}
}
}
},
responses: {
'200ActionResponse': {
$ref: '#/components/responses/200ActionResponse'
},
default: { $ref: '#/components/responses/ErrorResponse' }
}
}
},
'/{id}/target': {
parameters: [{ $ref: '#/components/parameters/AutopilotIdParam' }],
get: {
tags: ['autopilot'],
summary: 'Retrieve the current target value.',
description: 'The current target value in radians.',
responses: {
default: {
description: 'Autopilot value response',
content: {
'application/json': {
schema: {
type: 'object',
required: ['value'],
properties: {
value: {
type: 'number',
description: 'Value in radians',
example: 2.456
}
}
}
}
}
},
error: { $ref: '#/components/responses/ErrorResponse' }
}
},
put: {
tags: ['autopilot'],
summary: 'Set autopilot `target` value.',
description: 'Value supplied must fall within the valid range (-180 & 360 degrees / PI & 2 * PI radians).',
requestBody: {
description: 'Value within the valid range.',
required: true,
content: {
'application/json': {
schema: { $ref: '#/components/schemas/AngleInput' }
}
}
},
responses: {
'200ActionResponse': {
$ref: '#/components/responses/200ActionResponse'
},
default: { $ref: '#/components/responses/ErrorResponse' }
}
}
},
'/{id}/target/adjust': {
parameters: [{ $ref: '#/components/parameters/AutopilotIdParam' }],
put: {
tags: ['autopilot'],
summary: 'Adjust autopilot target value by +/- degrees / radians.',
description: 'Value supplied will be added to the current target. The result must fall within the valid range (-180 & 360 degrees / PI & 2 * PI radians).',
requestBody: {
description: 'Value to add to the current `target`.',
required: true,
content: {
'application/json': {
schema: { $ref: '#/components/schemas/AngleInput' }
}
}
},
responses: {
'200ActionResponse': {
$ref: '#/components/responses/200ActionResponse'
},
default: { $ref: '#/components/responses/ErrorResponse' }
}
}
},
'/{id}/tack/port': {
parameters: [{ $ref: '#/components/parameters/AutopilotIdParam' }],
post: {
tags: ['autopilot'],
summary: 'Tack to port.',
description: 'Execute a port tack.',
responses: {
'200ActionResponse': {
$ref: '#/components/responses/200ActionResponse'
},
default: { $ref: '#/components/responses/ErrorResponse' }
}
}
},
'/{id}/tack/starboard': {
parameters: [{ $ref: '#/components/parameters/AutopilotIdParam' }],
post: {
tags: ['autopilot'],
summary: 'Tack to starboard.',
description: 'Execute a starboard tack.',
responses: {
'200ActionResponse': {
$ref: '#/components/responses/200ActionResponse'
},
default: { $ref: '#/components/responses/ErrorResponse' }
}
}
},
'/{id}/gybe/port': {
parameters: [{ $ref: '#/components/parameters/AutopilotIdParam' }],
post: {
tags: ['autopilot'],
summary: 'Gybe to port.',
description: 'Execute a gybe to port.',
responses: {
'200ActionResponse': {
$ref: '#/components/responses/200ActionResponse'
},
default: { $ref: '#/components/responses/ErrorResponse' }
}
}
},
'/{id}/gybe/starboard': {
parameters: [{ $ref: '#/components/parameters/AutopilotIdParam' }],
post: {
tags: ['autopilot'],
summary: 'Gybe to starboard.',
description: 'Execute a gybe to starboard.',
responses: {
'200ActionResponse': {
$ref: '#/components/responses/200ActionResponse'
},
default: { $ref: '#/components/responses/ErrorResponse' }
}
}
},
'/{id}/dodge': {
parameters: [{ $ref: '#/components/parameters/AutopilotIdParam' }],
post: {
tags: ['autopilot'],
summary: 'Turn on dodge mode.',
description: 'Enter dodge mode at the current course setting.',
responses: {
'200ActionResponse': {
$ref: '#/components/responses/200ActionResponse'
},
default: { $ref: '#/components/responses/ErrorResponse' }
}
},
delete: {
tags: ['autopilot'],
summary: 'Turn Off dodge mode.',
description: 'Resume steering original course.',
responses: {
'200ActionResponse': {
$ref: '#/components/responses/200ActionResponse'
},
default: { $ref: '#/components/responses/ErrorResponse' }
}
},
put: {
tags: ['autopilot'],
summary: 'Steer port / starboard to dodge obstacles.',
description: 'Override the current course to change direction the supplied number of degrees / radians.',
requestBody: {
description: '+/- value to change direction (-ive = port).',
required: true,
content: {
'application/json': {
schema: { $ref: '#/components/schemas/AngleInput' }
}
}
},
responses: {
'200ActionResponse': {
$ref: '#/components/responses/200ActionResponse'
},
default: { $ref: '#/components/responses/ErrorResponse' }
}
}
},
'/{id}/courseCurrentPoint': {
parameters: [{ $ref: '#/components/parameters/AutopilotIdParam' }],
post: {
tags: ['autopilot'],
summary: 'Steer to the currently set destination position',
description: 'Provider plugin will instruct the autopilot to steer to the destination position.',
responses: {
'200ActionResponse': {
$ref: '#/components/responses/200ActionResponse'
},
default: { $ref: '#/components/responses/ErrorResponse' }
}
}
},
'/{id}/courseNextPoint': {
parameters: [{ $ref: '#/components/parameters/AutopilotIdParam' }],
post: {
tags: ['autopilot'],
summary: 'Advance to next waypoint in route',
description: 'Provider plugin will instruct the autopilot to advance to the next waypoint along the route.',
responses: {
'200ActionResponse': {
$ref: '#/components/responses/200ActionResponse'
},
default: { $ref: '#/components/responses/ErrorResponse' }
}
}
}
}
};
exports.autopilotApiRecord = {
name: 'autopilot',
path: '/signalk/v2/api/vessels/self/autopilots',
apiDoc: autopilotApiDoc
};
//# sourceMappingURL=openApi.js.map