import Plugin from './Plugin.js'
import { BASE_URL, checkResponse } from './Common.js'
/**
* Capture Bridge
*
* @classdesc Class for interacting with the HTTP API's base methods.
*/
class CaptureBridge {
baseUrl
/**
* Instantiate a client for interacting with the Capture Bridge service.
* @constructor
* @param {string} [baseURL] - Protocol, domain, and port for the service.
* @example
* const captureBridge = new CaptureBridge()
*/
constructor (baseUrl = BASE_URL) {
this.baseUrl = baseUrl
}
/**
* Get service version info
* @method
* @async
* @returns {object} Service version info.
* @see {@link https://local.capturebridge.net:9001/doc/#api-Service-GetVersion|API Endpoint (/version)}
* @example
* const captureBridge = new CaptureBridge()
* const {version} = await captureBridge.version()
* console.log(version)
*/
async version () {
const response = await fetch(`${this.baseUrl}/version`)
return await response.json()
}
/**
* Get service status information
* @method
* @async
* @see {@link https://local.capturebridge.net:9001/doc/#api-Service-GetStatus|API Endpoint (/status)}
* @returns {object} Service status information.
* @example
* const captureBridge = new CaptureBridge()
* const statusInfo = await captureBridge.status()
* console.log(statusInfo)
*/
async status () {
const response = await fetch(`${this.baseUrl}/status`)
return await response.json()
}
/**
* Get instance configuration details
* @method
* @async
* @see {@link https://local.capturebridge.net:9001/doc/#api-Service-GetConfig|API Endpoint (/config)}
* @returns {object} Instance configuration information.
* @example
* const captureBridge = new CaptureBridge()
* const configInfo = await captureBridge.config()
* console.log(configInfo)
*/
async config () {
const response = await fetch(`${this.baseUrl}/config`)
return await response.json()
}
/**
* Get all installed plugins
* @method
* @async
* @see {@link https://local.capturebridge.net:9001/doc/#api-Plugin-GetPlugins|API Endpoint (/plugin)}
* @see {@link Plugin}
* @returns {object[]} Array of {@link Plugin} objects.
* @example
* const plugins = await captureBridge.plugins()
*/
async plugins () {
const response = await fetch(`${this.baseUrl}/plugin`)
const plugins = await response.json()
return plugins.map(p => new Plugin(p, this.baseUrl))
}
/**
* Get a single plugin by ID
* @method
* @async
* @see {@link https://local.capturebridge.net:9001/doc/#api-Plugin-GetPlugins|API Endpoint (/plugin)}
* @see {@link Plugin}
* @param {string} id - Plugin ID
* @returns {object?} {@link Plugin} object or null
* @example
* const plugin = await captureBridge.plugin('capture_camera_canon')
*/
async plugin (id) {
const response = await fetch(`${this.baseUrl}/plugin/${id}`)
await checkResponse(response)
const pluginJSON = await response.json()
return new Plugin(pluginJSON)
}
}
export default CaptureBridge