@inweb/client
Version:
JavaScript REST API client for the Open Cloud Server
242 lines (217 loc) • 6.79 kB
text/typescript
///////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2002-2026, Open Design Alliance (the "Alliance").
// All rights reserved.
//
// This software and its documentation and related materials are owned by
// the Alliance. The software may only be incorporated into application
// programs owned by members of the Alliance, subject to a signed
// Membership Agreement and Supplemental Software License Agreement with the
// Alliance. The structure and organization of this software are the valuable
// trade secrets of the Alliance and its suppliers. The software is also
// protected by copyright law and international treaty provisions. Application
// programs incorporating this software must include the following statement
// with their copyright notices:
//
// This application incorporates Open Design Alliance software pursuant to a
// license agreement with Open Design Alliance.
// Open Design Alliance Copyright (C) 2002-2026 by Open Design Alliance.
// All rights reserved.
//
// By use of this software, its documentation or related materials, you
// acknowledge and accept the above terms.
///////////////////////////////////////////////////////////////////////////////
import { IHttpClient } from "./IHttpClient";
import { Endpoint } from "./Endpoint";
/**
* Provides properties and methods for obtaining information about a server plugin on the Open Cloud
* Server and managing its data.
*/
export class Plugin extends Endpoint {
private _data: any;
/**
* @param data - Raw plugin data received from the server. For more information, see
* {@link https://cloud.opendesign.com/docs//pages/server/api.html#Plugin | Open Cloud Plugins API}.
* @param httpClient - HTTP client instance used to send requests to the REST API server.
*/
constructor(data: any, httpClient: IHttpClient) {
super(`/plugins/${data.name}/${data.version}`, httpClient);
this.data = data;
}
/**
* Plugin author information. The `author` is an object with a `name` field and optionally `url` and
* `email`. Or it can be shorten that all into a single string.
*
* @readonly
*/
get author(): any {
return this.data.author;
}
/**
* Raw plugin data received from the server. For more information, see
* {@link https://cloud.opendesign.com/docs//pages/server/api.html#Plugin | Open Cloud Plugins API}.
*/
get data(): any {
return this._data;
}
set data(value: any) {
this._data = value;
}
/**
* Short description of the plugin.
*
* @readonly
*/
get description(): string {
return this.data.description;
}
/**
* Plugin state.
*
* @readonly
*/
get enabled(): boolean {
return this.data.enabled;
}
/**
* The URL to the plugin homepage.
*
* @readonly
*/
get homepage(): string {
return this.data.homepage;
}
/**
* Unique plugin ID.
*
* @readonly
*/
get id(): string {
return this.data.id;
}
/**
* A license for the plugin.
*
* @readonly
*/
get license(): string {
return this.data.license;
}
/**
* Plugin name.
*
* @readonly
*/
get name(): string {
return this.data.name;
}
/**
* API permissions required.
*
* @readonly
*/
get permissions(): string[] {
return this.data.permissions;
}
/**
* Plugin type. Can be set of:
*
* - `app` - Viewer plugin, the client‑side web app that the server hosts and serves as static content.
* - `server` - Binary dll that extends server functionality.
* - `jobrunner` - Binary dll that adds a new Job Runner on the server.
*
* @readonly
*/
get pluginType(): string[] {
return this.data.pluginType;
}
/**
* {@link https://semver.org/ | SemVer} compatible version of the plugin.
*
* @readonly
*/
get version(): number {
return this.data.version;
}
/**
* Reloads plugin data from the server.
*/
async checkout(): Promise<this> {
const response = await this.get("");
this.data = await response.json();
return this;
}
/**
* Uninstalls and deletes a plugin from the server.
*
* @returns Returns the raw data of a deleted plugin. For more information, see
* {@link https://cloud.opendesign.com/docs//pages/server/api.html#Plugin | Open Cloud Plugins API}.
*/
override delete(): Promise<any> {
return super.delete("").then((response) => response.json());
}
/**
* Enables a plugin.
*/
async enable(): Promise<this> {
const response = await this.put("/enable");
this.data = await response.json();
return this;
}
/**
* Disables a plugin.
*/
async disable(): Promise<this> {
const response = await this.put("/disable");
this.data = await response.json();
return this;
}
/**
* Downloads the plugins package from the server.
*
* @param onProgress - Download progress callback.
* @param signal - An
* {@link https://developer.mozilla.org/docs/Web/API/AbortController | AbortController} signal. Allows
* to communicate with a fetch request and abort it if desired.
*/
download(onProgress?: (progress: number) => void, signal?: AbortSignal): Promise<ArrayBuffer> {
return this.httpClient
.downloadFile(this.getEndpointPath("/download"), onProgress, { signal, headers: this.headers })
.then((response) => response.arrayBuffer());
}
/**
* Returns a plugin manfest.
*/
getManifest(): Promise<any> {
return this.get("/manifest").then((response) => response.json());
}
/**
* Returns the plugin settings.
*
* @returns Returns an object with plugin settings.
*/
getSettings(): Promise<any> {
return this.get("/settings").then((response) => response.json());
}
/**
* Changes the plugin settings.
*
* @param settings - An object with the new plugin settings or part of the settings.
* @returns Returns an object with updated plugin settings.
*/
updateSettings(settings: any): Promise<any> {
return this.post("/settings", settings).then((response) => response.json());
}
/**
* Executes a plugin command.
*
* This method executes the command for the current version of the plugin. To execute a command for the
* latest installed version of the plugin, use the {@link Client.executePluginCommand}.
*
* @param command - Command to execute.
* @param parameters - Command parameters. Command-dependent.
*/
executeCommand(command: string, parameters?: BodyInit | object): Promise<any> {
const commands = new Endpoint(`/plugins/${this.name}/commands`, this.httpClient, this.headers);
return commands.post(`/${command}?version=${this.version}`, parameters).then((response) => response.json());
}
}