openvibe-sdk/assertions

Generated at from openvibe-contracts v0.419.0 and openvibe-sdk v0.161.0.

From types/assertions.d.ts (server only). Declarations are shown verbatim.

interface SubjectAssertionClaims

The claims of a subject assertion (ADR-003, the 2026-11-06 amendment; plan H1).

export interface SubjectAssertionClaims {
    /** The Network issuer. */
    iss: string;
    /** The person: usr_… */
    sub: string;
    /** The service the assertion is for (openvibe.billing). */
    aud: string | string[];
    /** The service the assertion was minted for (svc:live). */
    act?: string;
    /** Unique per assertion; a replayed one is refused. */
    jti: string;
    iat: number;
    exp: number;
    nbf?: number;
}

type SubjectAssertionResult

export type SubjectAssertionResult = { ok: true; claims: SubjectAssertionClaims } | { ok: false; code: string; reason: string };

interface RequestSubjectAssertionOptions

export interface RequestSubjectAssertionOptions {
    /** The person's own Network access token (their session). Without it Network signs nothing. */
    userToken: string;
    /** The service the assertion is for (openvibe.billing), or a list when it travels a chain. */
    audience: string | string[];
    /** The services that may carry it (the minting service is always in it). */
    for?: string | string[];
    /** Where Network lives (public URL). */
    network?: string;
    /** Where Network's /internal lives (loopback, same host). */
    internalUrl?: string;
    /** The whole endpoint, when it is neither of the two above. */
    url?: string;
    /** The caller's own service token (Bearer). */
    token?: string;
    /** Or a client with getToken() (the SDK's createServiceTokenClient). */
    tokenClient?: { getToken(ctx?: { audience?: string; scope?: string }): Promise<string> };
    /** The person the caller says it acts for; Network checks it against the token. */
    subject?: string;
    fetch?: FetchLike;
    timeoutMs?: number;
    log?: JwksClientOptions['log'];
}

interface SubjectAssertion

export interface SubjectAssertion {
    /** The signed JWT, to be sent as X-OV-Subject-Assertion. */
    assertion: string;
    /** The person the assertion names. */
    subject: string | null;
    audience: string | string[];
    jti: string | null;
    expires_at: string | null;
    expires_in: number;
}

function requestSubjectAssertion

Ask Network to sign the person's own token into an assertion for one audience.

export declare function requestSubjectAssertion(opts: RequestSubjectAssertionOptions): Promise<SubjectAssertion>;

interface VerifySubjectAssertionOptions

export interface VerifySubjectAssertionOptions {
    /** Network's JWKS (a URL, a document or a client), or the EC public key. */
    jwks?: { keys?: object[]; public_key?: string } | string | JwksClient;
    publicKey?: string | object;
    /** The audience this service answers for (openvibe.billing). */
    audience?: string | string[];
    issuer?: string;
    /** The service presenting the assertion (svc:live): it must be one the assertion names. */
    caller?: string;
    clockSkewSec?: number;
    now?: number;
    /** A Map or Set of jtis already used: a replay is refused. */
    seen?: Set<string> | Map<string, number> | { has(jti: string): boolean };
    log?: JwksClientOptions['log'];
}

function verifySubjectAssertion

Check a subject assertion: signature, audience, expiry, the service it was minted for, the jti.

export declare function verifySubjectAssertion(assertion: string, opts?: VerifySubjectAssertionOptions): Promise<SubjectAssertionResult>;

interface SubjectAssertionVerifier

export interface SubjectAssertionVerifier {
    verify(assertion: string, opts?: { caller?: string; seen?: Set<string> | Map<string, number> | { has(jti: string): boolean } }): Promise<SubjectAssertionResult>;
    /** How many jtis are remembered (the replay window). */
    size(): number;
}

function createSubjectAssertionVerifier

A verifier that remembers the jtis it has seen, so a replayed assertion is refused.

export declare function createSubjectAssertionVerifier(opts: { jwks?: VerifySubjectAssertionOptions['jwks']; audience?: string | string[]; issuer?: string; clockSkewSec?: number; replayWindowMs?: number; log?: JwksClientOptions['log'] }): SubjectAssertionVerifier;

function subjectAssertionHeader

The header a money call carries the assertion in.

export declare function subjectAssertionHeader(assertion: string): { 'x-ov-subject-assertion': string };

interface SubjectAssertionMinterOptions

export interface SubjectAssertionMinterOptions {
    /** Where Network lives (public URL). */
    network?: string | { internalUrl?: string; url?: string };
    /** Where Network's /internal lives (loopback, same host). */
    internalUrl?: string;
    /** The whole endpoint, when it is neither of the two above. */
    url?: string;
    /** The caller's own OAuth client: the service token it presents to Network. */
    oauth?: { clientId?: string; clientSecret?: string };
    /** The audience of that service token (openvibe.network). */
    audience?: string;
    scope?: string | string[];
    fetch?: FetchLike;
    timeoutMs?: number;
    log?: JwksClientOptions['log'];
}

interface SubjectAssertionMinter

export interface SubjectAssertionMinter {
    /** The assertion for a person, or null when it cannot be had (never throws). */
    mint(opts: { userToken?: string | null; subject?: string; audience: string | string[]; for?: string | string[] }): Promise<string | null>;
    /** Where the assertions are asked for. */
    endpoint: string;
}

function createSubjectAssertionMinter

The caller's own minter: ask Network to sign the person's token into an assertion.

export declare function createSubjectAssertionMinter(opts?: SubjectAssertionMinterOptions): SubjectAssertionMinter;

const ASSERTION_HEADER

The header a money call carries the assertion in.

export declare const ASSERTION_HEADER: string;

const ASSERTION_TTL_S

How long an assertion lives (seconds).

export declare const ASSERTION_TTL_S: number;

const REPLAY_WINDOW_MS

The default replay window (milliseconds).

export declare const REPLAY_WINDOW_MS: number;

const CLOCK_SKEW_SEC

How much clock difference is forgiven (seconds).

export declare const CLOCK_SKEW_SEC: number;