mirror of
https://github.com/l0ng-ai/openidea.git
synced 2026-11-14 16:07:52 +00:00
Plugins get a host-owned WebSocket resource (net.websocket-connect → websocket with id/send/drain/close; dropping it closes the transport). The connection is bound to the project it was opened for, needs the endpoint's net:<host> grant, uses WSS outside loopback with the shared rustls config, and is capped at eight per plugin. Request headers (secret placeholders expanded) go with the handshake, except the ones the handshake owns; an empty subprotocol requests none; the handshake is bounded by the call's I/O budget. Incoming frames queue in a bounded FIFO, signalled by the websocket-ready event. Checked-in components are rebuilt for API 1.6. Co-authored-by: SorPuti <56741582+SorPuti@users.noreply.github.com>
35 lines
1.8 KiB
Plaintext
35 lines
1.8 KiB
Plaintext
package openidea:plugin@1.6.0;
|
||
|
||
/// Plugin-owned project data sources. Requires database.sources and project trust.
|
||
/// Runs on the Database subsystem's host, including on remote project servers.
|
||
interface database {
|
||
use types.{error};
|
||
use workspace.{project};
|
||
/// Non-secret connection settings. Id is private to this plugin (1–128 bytes).
|
||
/// Drivers: sqlite, postgres, mysql, sqlServer, clickhouse, oracle.
|
||
/// SQLite uses database as its file path, or a sqlite: URL. Options are driver properties.
|
||
/// URLs and options must not contain passwords, tokens or other credentials.
|
||
record data-source {
|
||
id: string,
|
||
name: string,
|
||
driver: string,
|
||
host: option<string>,
|
||
port: option<u16>,
|
||
database: option<string>,
|
||
user: option<string>,
|
||
url: option<string>,
|
||
options: list<tuple<string, string>>,
|
||
}
|
||
/// Creates or replaces only this plugin's source; unrelated file entries are preserved.
|
||
upsert-source: func(project: borrow<project>, source: data-source) -> result<_, error>;
|
||
/// Removes an owned source and its credentials; not-found for every other id.
|
||
remove-source: func(project: borrow<project>, id: string) -> result<_, error>;
|
||
/// Lists only this plugin's private ids, never connection settings or credentials.
|
||
sources: func(project: borrow<project>) -> result<list<string>, error>;
|
||
/// Writes an owned source's password directly to the Database secure store. Never readable.
|
||
set-credential: func(project: borrow<project>, id: string, password: string) -> result<_, error>;
|
||
/// Requests the project's usual connection/introspection in the invoking window.
|
||
/// Invalid outside a command/event of that project's window.
|
||
connect: func(project: borrow<project>, id: string) -> result<_, error>;
|
||
}
|