nostrbasedocs
Start building
API reference
.md

Read the errors and receipts guide. Signatures below come from the published SDK declarations. Access SDK services through db; use their constructors only when integrating at a lower level.

DatabaseSchema

type DatabaseSchema = Record<string, object>;

SchemaShape

type SchemaShape<DB> = {
  [K in keyof DB]: object;
};

DefaultSchema

type DefaultSchema = Record<string, Record<string, unknown>>;

RecordMetadata

interface RecordMetadata {
  pubkey: string;
  eventId: string;
  createdAt: number;
  updatedAt: number;
}

Row

type Row<T extends object> = T & {
  id: string;
  _nostr: RecordMetadata;
};

Insert

type Insert<T extends object> = T & {
  id?: string;
};

RelayResult

interface RelayResult {
  url: string;
  ok: boolean;
  message?: string;
}

WriteReceipt

interface WriteReceipt {
  id: string;
  eventId: string;
  relays: RelayResult[];
  queued?: boolean;
}

ResultMeta

interface ResultMeta {
  relays: RelayResult[];
  partial: boolean;
  receipts?: WriteReceipt[];
  nextCursor?: string;
  cached?: boolean;
  queued?: boolean;
}

Result

interface Result<T> {
  data: T | null;
  error: NostrbaseError | null;
  count?: number;
  meta?: ResultMeta;
}

TableDefinition

interface TableDefinition<T extends object> {
  indexes?: readonly (keyof T & string)[];
  validate?: (data: unknown) => data is T;
}

TransportRead

interface TransportRead {
  events: NostrEvent[];
  relays: RelayResult[];
}

Transport

/** Implement this interface to use a custom transport. Incoming events are verified by the SDK. */
interface Transport {
  request(
    relays: string[],
    filters: Filter[],
    options: {
      timeout: number;
      signal: AbortSignal;
    },
  ): Promise<TransportRead>;
  publish(
    relays: string[],
    event: NostrEvent,
    options: {
      timeout: number;
      signal: AbortSignal;
    },
  ): Promise<RelayResult[]>;
  subscribe(relays: string[], filters: Filter[]): Observable<NostrEvent>;
}

ClientOptions

interface ClientOptions<DB extends SchemaShape<DB>> {
  /** A stable application namespace. It is part of every record address. */
  namespace: string;
  relays: readonly string[];
  signer?: ISigner;
  schema?: {
    [K in keyof DB]: TableDefinition<DB[K]>;
  };
  timeout?: number;
  /** Minimum relay acknowledgements required for a successful write (default: 1). */
  minWriteAcks?: number;
  pool?: RelayPool;
  eventStore?: EventStore;
  relayOptions?: RelayOptions;
  transport?: Transport;
  persistence?: PersistenceOptions;
  offline?: OfflineOptions;
  sync?: SyncOptions;
  storage?: StorageOptions;
  diagnostics?: DiagnosticsOptions;
  groups?: GroupsOptions;
}

User

interface User {
  id: string;
  pubkey: string;
}

Session

interface Session {
  user: User;
}

AuthChange

type AuthChange = "INITIAL_SESSION" | "SIGNED_IN" | "SIGNED_OUT";

ChangeEvent

type ChangeEvent = "INSERT" | "UPDATE" | "DELETE";

ChangePayload

interface ChangePayload<T extends object> {
  eventType: ChangeEvent;
  table: string;
  new: Row<T> | null;
  old: Row<T> | null;
  event: NostrEvent;
}

ChangeFilter

interface ChangeFilter {
  table: string;
  event?: ChangeEvent | "*";
  author?: string /** Supabase-style equality: "done=eq.false". */;
  filter?: string;
}

ChannelStatus

type ChannelStatus = "SUBSCRIBED" | "CHANNEL_ERROR" | "CLOSED";

Signer

type Signer = ISigner;

Selection

type Selection<T, C extends string> = string extends C
  ? C
  : C extends "*"
    ? C
    : Exclude<Columns<C>, keyof T> extends never
      ? C
      : never;

Projection

type Projection<T, C extends string> = C extends "*"
  ? T
  : string extends C
    ? Partial<T>
    : Pick<T, Extract<Columns<C>, keyof T>>;

Cardinality

type Cardinality = "many" | "one" | "maybe";

QueryData

type QueryData<T, C extends Cardinality> = C extends "many"
  ? T[]
  : C extends "one"
    ? T
    : T | null;

Supporting declarations

These types appear in public signatures but are not package exports.

Trim

type Trim<S extends string> = S extends ` ${infer R}`
  ? Trim<R>
  : S extends `${infer R} `
    ? Trim<R>
    : S;

Columns

type Columns<S extends string> = S extends `${infer L},${infer R}`
  ? Trim<L> | Columns<R>
  : Trim<S>;

Search guides, API methods, and protocols.