@sourceregistry/node-ovsdb
Version:
TypeScript OVSDB client for Node.js
502 lines • 15.1 kB
TypeScript
/**
* JSON primitive values.
*/
export type JsonPrimitive = string | number | boolean | null;
/**
* A JSON object value.
*/
export interface JsonObject {
[key: string]: JsonValue;
}
/**
* Any JSON-compatible value.
*/
export type JsonValue = JsonPrimitive | JsonValue[] | JsonObject;
/**
* A UUID wrapper used by OVSDB atoms and transaction results.
*/
export type Uuid = ["uuid", string];
/**
* A named UUID wrapper used to reference values created earlier in a transaction.
*/
export type NamedUuid = ["named-uuid", string];
/**
* An OVSDB set value.
*/
export type OvsSet<T = JsonValue> = ["set", T[]];
/**
* An OVSDB map value.
*/
export type OvsMap<TKey = JsonValue, TValue = JsonValue> = ["map", Array<[TKey, TValue]>];
/**
* Any commonly exchanged OVSDB value.
*/
export type OvsdbValue = JsonValue | Uuid | NamedUuid | OvsSet | OvsMap;
/**
* A generic row shape for application-level table typing.
*/
export type RowRecord = Record<string, OvsdbValue>;
/**
* A generic table map keyed by table name.
*/
export type DatabaseTableMap = Record<string, RowRecord>;
/**
* Extracts valid table names from a database type.
*/
export type TableName<TDatabase extends DatabaseTableMap> = Extract<keyof TDatabase, string>;
/**
* Extracts the row type for a table in a database type.
*/
export type TableRow<TDatabase extends DatabaseTableMap, TTable extends TableName<TDatabase>> = TDatabase[TTable];
/**
* Extracts valid column names for a table in a database type.
*/
export type ColumnName<TDatabase extends DatabaseTableMap, TTable extends TableName<TDatabase>> = Extract<keyof TableRow<TDatabase, TTable>, string>;
/**
* OVSDB operation and RPC errors.
*/
export interface OvsdbError {
error: string;
details?: string | null;
[key: string]: JsonValue | undefined;
}
/**
* A successful JSON-RPC response envelope.
*/
export interface OvsdbSuccessResponse<TResult = JsonValue> {
result: TResult;
error: null;
id: JsonValue;
}
/**
* A failed JSON-RPC response envelope.
*/
export interface OvsdbErrorResponse {
result?: null;
error: OvsdbError;
id: JsonValue;
}
/**
* A JSON-RPC response returned by an OVSDB server.
*/
export type OvsdbResponse<TResult = JsonValue> = OvsdbSuccessResponse<TResult> | OvsdbErrorResponse;
/**
* A JSON-RPC notification emitted by the server.
*/
export interface OvsdbNotificationBase<TMethod extends string, TParams extends unknown[]> {
method: TMethod;
params: TParams;
id: null;
}
/**
* RFC 7047 condition operators plus Open vSwitch extensions used by monitor condition APIs.
*/
export type ConditionFunction = "<" | "<=" | "==" | "!=" | ">" | ">=" | "includes" | "excludes";
/**
* OVSDB mutation operators.
*/
export type MutationOperator = "+=" | "-=" | "*=" | "/=" | "%=" | "insert" | "delete";
/**
* A column condition for a specific table.
*/
export type ConditionForTable<TDatabase extends DatabaseTableMap, TTable extends TableName<TDatabase>> = {
[TColumn in ColumnName<TDatabase, TTable>]: [
TColumn,
ConditionFunction,
TableRow<TDatabase, TTable>[TColumn] | OvsdbValue
];
}[ColumnName<TDatabase, TTable>] | [string, ConditionFunction, OvsdbValue];
/**
* A column mutation for a specific table.
*/
export type MutationForTable<TDatabase extends DatabaseTableMap, TTable extends TableName<TDatabase>> = {
[TColumn in ColumnName<TDatabase, TTable>]: [
TColumn,
MutationOperator,
TableRow<TDatabase, TTable>[TColumn] | OvsdbValue
];
}[ColumnName<TDatabase, TTable>] | [string, MutationOperator, OvsdbValue];
/**
* Select clauses for monitor requests.
*/
export interface MonitorSelect {
initial?: boolean;
insert?: boolean;
delete?: boolean;
modify?: boolean;
}
/**
* A standard OVSDB monitor request for a table.
*/
export interface MonitorRequest<TDatabase extends DatabaseTableMap = DatabaseTableMap, TTable extends TableName<TDatabase> = TableName<TDatabase>> {
columns?: Array<ColumnName<TDatabase, TTable> | string>;
select?: MonitorSelect;
}
/**
* A conditional monitor request for a table.
*/
export interface MonitorCondRequest<TDatabase extends DatabaseTableMap = DatabaseTableMap, TTable extends TableName<TDatabase> = TableName<TDatabase>> extends MonitorRequest<TDatabase, TTable> {
where?: Array<ConditionForTable<TDatabase, TTable>>;
}
/**
* Table update payload used by RFC 7047 monitor notifications.
*/
export type TableUpdate<TDatabase extends DatabaseTableMap = DatabaseTableMap, TTable extends TableName<TDatabase> = TableName<TDatabase>> = Record<string, RowUpdate<TableRow<TDatabase, TTable>>>;
/**
* RFC 7047 row update payload.
*/
export interface RowUpdate<TRow extends RowRecord = RowRecord> {
old?: Partial<TRow>;
new?: Partial<TRow>;
}
/**
* Open vSwitch conditional monitor update payload.
*/
export type TableUpdate2<TDatabase extends DatabaseTableMap = DatabaseTableMap, TTable extends TableName<TDatabase> = TableName<TDatabase>> = Record<string, RowUpdate2<TableRow<TDatabase, TTable>>>;
/**
* Open vSwitch conditional row update payload.
*/
export interface RowUpdate2<TRow extends RowRecord = RowRecord> {
initial?: Partial<TRow>;
insert?: Partial<TRow>;
modify?: Partial<TRow>;
delete?: Partial<TRow>;
old?: Partial<TRow>;
new?: Partial<TRow>;
}
/**
* Multi-table update payload returned by RFC 7047 `monitor`.
*/
export type TableUpdates<TDatabase extends DatabaseTableMap = DatabaseTableMap> = Partial<{
[TTable in TableName<TDatabase>]: TableUpdate<TDatabase, TTable>;
}> & Record<string, TableUpdate>;
/**
* Multi-table update payload returned by conditional monitor extensions.
*/
export type TableUpdates2<TDatabase extends DatabaseTableMap = DatabaseTableMap> = Partial<{
[TTable in TableName<TDatabase>]: TableUpdate2<TDatabase, TTable>;
}> & Record<string, TableUpdate2>;
/**
* OVSDB schema response payload.
*/
export interface DatabaseSchema {
name: string;
version: string;
cksum?: string;
tables: Record<string, TableSchema>;
}
/**
* Table schema metadata.
*/
export interface TableSchema {
columns: Record<string, ColumnSchema>;
maxRows?: number;
isRoot?: boolean;
indexes?: string[][];
}
/**
* Column schema metadata.
*/
export interface ColumnSchema {
type: Type;
ephemeral?: boolean;
mutable?: boolean;
}
/**
* OVSDB type metadata.
*/
export type Type = AtomicType | {
key: BaseType;
value?: BaseType;
min?: number;
max?: number | "unlimited";
};
/**
* OVSDB atomic types.
*/
export type AtomicType = "integer" | "real" | "boolean" | "string" | "uuid";
/**
* OVSDB base type metadata.
*/
export type BaseType = AtomicType | {
type: AtomicType;
enum?: JsonValue;
minInteger?: number;
maxInteger?: number;
minReal?: number;
maxReal?: number;
minLength?: number;
maxLength?: number;
refTable?: string;
refType?: "strong" | "weak";
};
/**
* Insert operation.
*/
export type InsertOperation<TDatabase extends DatabaseTableMap, TTable extends TableName<TDatabase> = TableName<TDatabase>> = {
op: "insert";
table: TTable;
row: Partial<TableRow<TDatabase, TTable>> & RowRecord;
uuidName?: string;
};
/**
* Select operation.
*/
export type SelectOperation<TDatabase extends DatabaseTableMap, TTable extends TableName<TDatabase> = TableName<TDatabase>> = {
op: "select";
table: TTable;
where: Array<ConditionForTable<TDatabase, TTable>>;
columns?: Array<ColumnName<TDatabase, TTable> | string>;
};
/**
* Update operation.
*/
export type UpdateOperation<TDatabase extends DatabaseTableMap, TTable extends TableName<TDatabase> = TableName<TDatabase>> = {
op: "update";
table: TTable;
where: Array<ConditionForTable<TDatabase, TTable>>;
row: Partial<TableRow<TDatabase, TTable>> & RowRecord;
};
/**
* Mutate operation.
*/
export type MutateOperation<TDatabase extends DatabaseTableMap, TTable extends TableName<TDatabase> = TableName<TDatabase>> = {
op: "mutate";
table: TTable;
where: Array<ConditionForTable<TDatabase, TTable>>;
mutations: Array<MutationForTable<TDatabase, TTable>>;
};
/**
* Delete operation.
*/
export type DeleteOperation<TDatabase extends DatabaseTableMap, TTable extends TableName<TDatabase> = TableName<TDatabase>> = {
op: "delete";
table: TTable;
where: Array<ConditionForTable<TDatabase, TTable>>;
};
/**
* Wait operation.
*/
export type WaitOperation<TDatabase extends DatabaseTableMap, TTable extends TableName<TDatabase> = TableName<TDatabase>> = {
op: "wait";
timeout?: number;
table: TTable;
where: Array<ConditionForTable<TDatabase, TTable>>;
columns: Array<ColumnName<TDatabase, TTable> | string>;
until: "==" | "!=";
rows: Array<Partial<TableRow<TDatabase, TTable>> & RowRecord>;
};
/**
* Commit operation.
*/
export interface CommitOperation {
op: "commit";
durable: boolean;
}
/**
* Abort operation.
*/
export interface AbortOperation {
op: "abort";
}
/**
* Comment operation.
*/
export interface CommentOperation {
op: "comment";
comment: string;
}
/**
* Assert operation.
*/
export interface AssertOperation {
op: "assert";
lock: string;
}
/**
* Any OVSDB transaction operation.
*/
export type DatabaseOperation<TDatabase extends DatabaseTableMap = DatabaseTableMap> = InsertOperation<TDatabase> | SelectOperation<TDatabase> | UpdateOperation<TDatabase> | MutateOperation<TDatabase> | DeleteOperation<TDatabase> | WaitOperation<TDatabase> | CommitOperation | AbortOperation | CommentOperation | AssertOperation;
/**
* Insert operation result.
*/
export interface InsertResult {
uuid: Uuid;
}
/**
* Count-based operation result.
*/
export interface CountResult {
count: number;
}
/**
* Select operation result.
*/
export interface SelectResult<TRow extends RowRecord = RowRecord> {
rows: TRow[];
}
/**
* Acknowledge-style operation result.
*/
export type EmptyResult = Record<string, never>;
/**
* Maps a transaction operation type to its result payload.
*/
export type OperationResult<TDatabase extends DatabaseTableMap, TOperation extends DatabaseOperation<TDatabase>> = TOperation extends InsertOperation<TDatabase> ? InsertResult : TOperation extends SelectOperation<TDatabase, infer TTable> ? SelectResult<TableRow<TDatabase, TTable>> : TOperation extends UpdateOperation<TDatabase> ? CountResult : TOperation extends MutateOperation<TDatabase> ? CountResult : TOperation extends DeleteOperation<TDatabase> ? CountResult : TOperation extends WaitOperation<TDatabase> ? EmptyResult : TOperation extends CommitOperation ? EmptyResult : TOperation extends AbortOperation ? EmptyResult : TOperation extends CommentOperation ? EmptyResult : TOperation extends AssertOperation ? EmptyResult : never;
/**
* Maps a transaction tuple to its response tuple.
*/
export type OperationResults<TDatabase extends DatabaseTableMap, TOperations extends readonly DatabaseOperation<TDatabase>[]> = {
[TIndex in keyof TOperations]: TOperations[TIndex] extends DatabaseOperation<TDatabase> ? OperationResult<TDatabase, TOperations[TIndex]> | OvsdbError : never;
};
/**
* `list_dbs` response payload.
*/
export type ListDbsResult = string[];
/**
* `monitor_cond_since` response payload.
*/
export type MonitorCondSinceResult<TDatabase extends DatabaseTableMap = DatabaseTableMap> = [
found: boolean,
lastTransactionId: string | null,
updates: TableUpdates2<TDatabase>
];
/**
* `list_dbs` request envelope.
*/
export interface ListDbsRequest {
method: "list_dbs";
params: [];
id: JsonValue;
}
/**
* `get_schema` request envelope.
*/
export interface GetSchemaRequest {
method: "get_schema";
params: [string];
id: JsonValue;
}
/**
* `transact` request envelope.
*/
export interface TransactRequest<TDatabase extends DatabaseTableMap = DatabaseTableMap> {
method: "transact";
params: [string, ...DatabaseOperation<TDatabase>[]];
id: JsonValue;
}
/**
* `cancel` request envelope.
*/
export interface CancelRequest {
method: "cancel";
params: [JsonValue];
id: JsonValue;
}
/**
* `monitor` request envelope.
*/
export interface MonitorRpcRequest<TDatabase extends DatabaseTableMap = DatabaseTableMap> {
method: "monitor";
params: [string, JsonValue, Record<string, MonitorRequest<TDatabase>>];
id: JsonValue;
}
/**
* `monitor_cond` request envelope.
*/
export interface MonitorCondRpcRequest<TDatabase extends DatabaseTableMap = DatabaseTableMap> {
method: "monitor_cond";
params: [string, JsonValue, Record<string, MonitorCondRequest<TDatabase>>];
id: JsonValue;
}
/**
* `monitor_cond_since` request envelope.
*/
export interface MonitorCondSinceRpcRequest<TDatabase extends DatabaseTableMap = DatabaseTableMap> {
method: "monitor_cond_since";
params: [string, JsonValue, Record<string, MonitorCondRequest<TDatabase>>, string | null];
id: JsonValue;
}
/**
* `monitor_cancel` request envelope.
*/
export interface MonitorCancelRequest {
method: "monitor_cancel";
params: [JsonValue];
id: JsonValue;
}
/**
* `lock` request envelope.
*/
export interface LockRequest {
method: "lock";
params: [string];
id: JsonValue;
}
/**
* `steal` request envelope.
*/
export interface StealRequest {
method: "steal";
params: [string];
id: JsonValue;
}
/**
* `unlock` request envelope.
*/
export interface UnlockRequest {
method: "unlock";
params: [string];
id: JsonValue;
}
/**
* `echo` request envelope.
*/
export interface EchoRequest {
method: "echo";
params: JsonValue[];
id: JsonValue;
}
/**
* Open vSwitch `set_db_change_aware` request envelope.
*/
export interface SetDbChangeAwareRequest {
method: "set_db_change_aware";
params: [boolean];
id: JsonValue;
}
/**
* RFC 7047 `update` notification payload.
*/
export type UpdateNotification<TDatabase extends DatabaseTableMap = DatabaseTableMap> = OvsdbNotificationBase<"update", [
JsonValue,
TableUpdates<TDatabase>
]>;
/**
* Open vSwitch `update2` notification payload.
*/
export type Update2Notification<TDatabase extends DatabaseTableMap = DatabaseTableMap> = OvsdbNotificationBase<"update2", [
JsonValue,
TableUpdates2<TDatabase>
]>;
/**
* Open vSwitch `update3` notification payload.
*/
export type Update3Notification<TDatabase extends DatabaseTableMap = DatabaseTableMap> = OvsdbNotificationBase<"update3", [
JsonValue,
TableUpdates2<TDatabase>,
string | null
]>;
/**
* Lock acquisition notification payload.
*/
export type LockedNotification = OvsdbNotificationBase<"locked", [string]>;
/**
* Lock stolen notification payload.
*/
export type StolenNotification = OvsdbNotificationBase<"stolen", [string]>;
/**
* Any server notification emitted by the client.
*/
export type OvsdbNotification<TDatabase extends DatabaseTableMap = DatabaseTableMap> = UpdateNotification<TDatabase> | Update2Notification<TDatabase> | Update3Notification<TDatabase> | LockedNotification | StolenNotification;
//# sourceMappingURL=index.d.ts.map