UNPKG

@sourceregistry/node-ovsdb

Version:
502 lines 15.1 kB
/** * 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