oss.sarwagya.wtf

API

Every public export, one page.

createDurable(options?)

function createDurable(options?: {
  namespace?: string;
}): Durable;

Returns a Durable instance. namespace defaults to "default". Two instances with different namespaces cannot collide, even for slots with the same name.

Durable

interface Durable {
  readonly namespace: string;
  open<T>(name: string, options: OpenSlotOptions<T>): Promise<Slot<T>>;
  storage(): Promise<DurabilityStatus>;
  requestPersistence(): Promise<boolean>;
}

Durable.open(name, options)

interface OpenSlotOptions<T> {
  initial: T;
  version?: number;              // default: 1
  migrations?: MigrationMap;
  validate?: (value: unknown) => T;
}

Returns a Slot<T> after storage has opened, the value has been read, any needed migrations have run, and validation has succeeded.

Slot<T>

interface Slot<T> {
  readonly name: string;
  readonly stateVersion: number;
  readonly value: T;
  readonly revision: number;
 
  set(next: T): Promise<void>;
  update(updater: (current: T) => T): Promise<void>;
  subscribe(listener: (value: T, event: SubscribeEvent) => void): () => void;
  reset(): Promise<void>;
  destroy(): Promise<void>;
}

SubscribeEvent:

interface SubscribeEvent {
  revision: number;
  source: "local" | "external" | "migration" | "reset";
}

Durable.storage()

interface DurabilityStatus {
  persistent: boolean;
  quotaBytes: number | null;
  usageBytes: number | null;
  quotaRounded: boolean;
  privateMode: "unknown" | "likely" | "no";
  evictionRisk: "session" | "ephemeral" | "best-effort" | "persistent" | "ios-capped";
  engine: "chromium" | "gecko" | "webkit" | "unknown";
  installedWebApp: boolean;
}

Durable.requestPersistence()

Asks the browser to move this origin to persistent storage mode. Returns whether the browser granted the request. Semantics vary by engine — see durability.

Errors

Everything the library throws is a DurableError:

class DurableError extends Error {
  readonly code: DurableErrorCode;
  readonly operation: DurableOperation;
  readonly slot: string | undefined;
}
 
function isDurableError(value: unknown): value is DurableError;

Codes: see errors.