openvibe-sdk/core

Generated at from openvibe-contracts v0.33.0 and openvibe-sdk v0.5.0.

From types/core.d.ts (both). Declarations are shown verbatim.

re-export SubjectRef, ServiceTokenClaims, EntityRef, Problem, ServiceManifest, Capability, EventEnvelope, ModuleNamespace, ModuleRecord, AppManifest

export type { SubjectRef, ServiceTokenClaims, EntityRef, Problem, ServiceManifest, Capability, EventEnvelope, ModuleNamespace, ModuleRecord, AppManifest } from './contracts';

type FetchLike

export type FetchLike = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;

interface TokenContext

export interface TokenContext { service?: string; audience?: string; scope?: string | string[]; }

interface TokenProvider

export interface TokenProvider {
    getToken(ctx?: TokenContext): Promise<string | null | undefined> | string | null | undefined;
    invalidate?(ctx?: TokenContext): void | Promise<void>;
}

interface ClientOptions

export interface ClientOptions {
    /** Network origin: discovery (/.well-known/openvibe), registry, identity, modules. Default https://openvibe.network */
    network?: string;
    discoveryUrl?: string;
    /** Explicit origins per service id; win over discovery (e.g. host-internal http://127.0.0.1:4100 for media). */
    baseUrls?: Record<string, string>;
    /** Token audience per service; default `openvibe.<service>`. */
    audiences?: Record<string, string>;
    fetch?: FetchLike;
    /** Per attempt, default 10000. */
    timeoutMs?: number;
    /** Whole call including retries, default 30000. */
    deadlineMs?: number;
    /** Default 2. */
    retries?: number;
    retryDelayMs?: number;
    maxRetryDelayMs?: number;
    /** One of: a fixed Bearer token (user JWT, app key), a function, or a provider (createServiceTokenClient). */
    token?: string;
    getToken?: (ctx: TokenContext) => Promise<string | null | undefined> | string | null | undefined;
    tokenProvider?: TokenProvider;
    invalidateToken?: (ctx: TokenContext) => void | Promise<void>;
    headers?: Record<string, string>;
    /** Browser: 'include' sends the Network session cookie. */
    credentials?: RequestCredentials;
    discoveryTtlMs?: number;
    autoDiscover?: boolean;
    /** Contracts releases accepted from discovery; default CONTRACTS_RANGE. */
    contractsRange?: string;
    /** Throw sdk.incompatible_contracts instead of warning. */
    strictContracts?: boolean;
    /** Parent trace for calls without their own: a traceparent string or a getter (e.g. from AsyncLocalStorage). */
    traceparent?: string | (() => string | null | undefined) | null;
    onWarning?: (message: string) => void;
}

interface RequestOptions

export interface RequestOptions {
    service?: string;
    baseUrl?: string;
    url?: string;
    path?: string;
    method?: string;
    query?: Record<string, string | number | boolean | string[] | null | undefined>;
    json?: unknown;
    form?: FormData;
    urlencoded?: Record<string, string | number | boolean | null | undefined> | URLSearchParams;
    body?: BodyInit;
    headers?: Record<string, string | undefined>;
    /** Per-call token; null sends none. */
    token?: string | null;
    /** false: never send Authorization. */
    auth?: boolean;
    audience?: string;
    /** A key makes a mutation retryable; false = never generate one (and never retry the mutation). */
    idempotencyKey?: string | false;
    /** The server dedupes this mutation by itself: retry without a key. */
    idempotent?: boolean;
    retries?: number;
    timeoutMs?: number;
    deadlineMs?: number;
    signal?: AbortSignal;
    traceparent?: string;
    requestId?: string;
    credentials?: RequestCredentials;
    /** 'response': a 2xx resolves with the raw fetch Response (body unread) as `data` and `response`. */
    responseType?: 'json' | 'text' | 'arrayBuffer' | 'response';
}

interface ClientResponse

export interface ClientResponse<T = any> {
    status: number;
    headers: Headers;
    data: T;
    requestId: string;
    traceId: string;
    traceparent: string;
    attempts: number;
    /** Only with responseType 'response': the raw Response (same as data). */
    response?: Response;
}

interface Discovery

export interface Discovery {
    issuer: string | null;
    tokenEndpoint: string | null;
    jwksUri: string | null;
    registry: string | null;
    services: Array<{ id: string; status: string; origin: string | null }>;
    origins: Record<string, string>;
    contractsVersion: string | null;
    contractsRange: string;
    compatible: boolean;
    fetchedAt: string;
    raw: any;
}

interface OpenVibeClient

export interface OpenVibeClient {
    request<T = any>(opts: RequestOptions): Promise<ClientResponse<T>>;
    json<T = any>(opts: RequestOptions): Promise<T>;
    discover(opts?: { force?: boolean }): Promise<Discovery>;
    discovery(): Discovery | null;
    origin(service: string): Promise<string>;
    supports(service: string): Promise<boolean>;
    url(opts: Pick<RequestOptions, 'url' | 'service' | 'baseUrl' | 'path' | 'query'>): Promise<string>;
    audienceOf(service: string): string;
    traceparent(): string | null | undefined;
    withContext(ctx: { traceparent?: string; requestId?: string; headers?: Record<string, string> }): OpenVibeClient;
    fromRequest(req: { headers: any } | Headers | Record<string, any>): OpenVibeClient;
    readonly options: Readonly<Required<Pick<ClientOptions, 'network' | 'timeoutMs' | 'deadlineMs' | 'retries'>>> & Readonly<ClientOptions>;
}

function createClient

export declare function createClient(options?: ClientOptions): OpenVibeClient;

class OpenVibeError

export declare class OpenVibeError extends Error {
    name: 'OpenVibeError';
    /** Stable code: problem `code`, OAuth `error`, `http.<status>`, or `sdk.*`. */
    code: string;
    /** HTTP status; 0 for failures without a response. */
    status: number;
    title?: string;
    detail?: string;
    type?: string;
    requestId: string | null;
    traceId: string | null;
    errors?: Array<{ path?: string; message: string }>;
    problem: Problem | null;
    retryable: boolean;
    method?: string;
    url?: string;
    constructor(init?: Partial<Omit<OpenVibeError, 'name'>> & { message?: string; cause?: unknown });
    static fromResponse(init: { status: number; body: unknown; requestId?: string; traceId?: string; method?: string; url?: string; retryable?: boolean }): OpenVibeError;
    toJSON(): Record<string, unknown>;
}

function isOpenVibeError

export declare function isOpenVibeError(err: unknown): err is OpenVibeError;

interface Page

export interface Page<T, C = unknown> { items: T[]; next?: C | null; }

function paginate

export declare function paginate<T, C = unknown>(fetchPage: (cursor: C) => Promise<Page<T, C>>, opts?: { cursor?: C; maxPages?: number; maxItems?: number }): AsyncGenerator<T, void, unknown>;

function offsetPager

export declare function offsetPager<T>(load: (offset: number, limit: number) => Promise<{ items: T[]; total?: number }>, opts?: { limit?: number }): (offset?: number) => Promise<Page<T, number>>;

function parseTraceparent

export declare function parseTraceparent(value: unknown): { traceId: string; parentId: string; flags: string } | null;

function startSpan

export declare function startSpan(parent?: string | null): { traceId: string; spanId: string; parentId: string | null; traceparent: string };

function contextFromHeaders

export declare function contextFromHeaders(headers: any): { traceparent?: string; requestId?: string };

function ulid

export declare function ulid(now?: number): string;

function newEventId

export declare function newEventId(now?: number): string;

function newIdempotencyKey

export declare function newIdempotencyKey(): string;

function isActingSubjectId

export declare function isActingSubjectId(id: unknown): boolean;

function satisfiesRange

export declare function satisfiesRange(version: string, range: string): boolean;

function compareVersions

export declare function compareVersions(a: string, b: string): -1 | 0 | 1;

const CONTRACTS_RANGE

export declare const CONTRACTS_RANGE: string;

const DEFAULT_NETWORK

export declare const DEFAULT_NETWORK: string;

const SDK_VERSION

export declare const SDK_VERSION: string;