@sovereignbase/explorer
    Preparing search index...

    Class Explorer

    Provides authentication, encrypted object storage, and access to the database's synchronized entries.

    Maintains the authenticated database context and exposes static methods for managing stored objects, observing entries, and applying remote deltas.

    Index
    cipherKeyCache: Map<string, CipherKey> = ...

    Caches cipher keys by object identifier.

    Existing entries are preserved when an object is accessed with a cipher key.

    databaseID: string

    The identifier of the authenticated database.

    isAuthenticated: boolean

    Indicates whether the database has been authenticated.

    • Registers an event listener for the specified event type.

      Type Parameters

      Parameters

      • type: K

        The event type.

      • listener: ExplorerEventListenerFor<K> | null

        The event listener, or null.

      • Optionaloptions: boolean | AddEventListenerOptions

        The event listener options.

      Returns void

    • Schedules the application of a synchronized Explorer delta.

      Recognized deltas are forwarded to their corresponding entries list. Invalid or unrecognized delta types are ignored.

      Processing is scheduled in a microtask and is not awaited by the caller.

      Parameters

      • data: unknown

        The delta to apply.

      Returns void

    • Authenticates a database using a data PIN and device-bound entropy.

      Derives the credential and database identifiers from cryptographic secrets. When setup parameters are provided, creates and stores a new credential. Otherwise, loads the existing credential.

      Records the authenticated credential in the database's credential list.

      Parameters

      • dataPIN: string

        The PIN used to derive the credential and database secrets.

      • storageURL: `http://${string}` | `https://${string}`

        The base URL used to access persisted database objects.

      • OptionalsetupParams: Readonly<{ bindingStorage: DeviceBindingStorage; credentialName: string }>

        Optional parameters for creating a new credential.

      Returns Promise<AuthenticationResult>

      The authentication result.

    • Deletes a persisted object using its identifier.

      Parameters

      • id: string

        The identifier of the object to delete.

      Returns Promise<void>

    • Returns the registered credentials and optionally observes their changes.

      The returned tuple contains a cleanup function, the current credential entries, and the identifier of the current session's credential.

      The cleanup function removes the registered change listener, if any.

      Parameters

      • OptionalonChange: (
            splice: readonly (
                readonly [
                    number,
                    number,
                    | readonly (
                        | {
                            credentialID: string;
                            entropy: {
                                "[toStringTag]": "Uint8Array";
                                buffer: | {
                                    "[toStringTag]": ...;
                                    byteLength: ...;
                                    detached: ...;
                                    maxByteLength: ...;
                                    resizable: ...;
                                    resize(newByteLength?: ...): ...;
                                    slice(begin?: ..., end?: ...): ...;
                                    transfer(newByteLength?: ...): ...;
                                    transferToFixedLength(newByteLength?: ...): ...;
                                }
                                | {
                                    "[toStringTag]": ...;
                                    byteLength: ...;
                                    growable: ...;
                                    maxByteLength: ...;
                                    grow(newByteLength?: ...): ...;
                                    slice(begin?: ..., end?: ...): ...;
                                };
                                byteLength: number;
                                byteOffset: number;
                                BYTES_PER_ELEMENT: number;
                                length: number;
                                "[iterator]"(): ArrayIterator<number>;
                                at(index: number): number | undefined;
                                copyWithin(target: number, start: number, end?: number): this;
                                entries(): ArrayIterator<[(...), (...)]>;
                                every(
                                    predicate: (value: number, index: number, array: this) => unknown,
                                    thisArg?: any,
                                ): boolean;
                                fill(value: number, start?: number, end?: number): this;
                                filter(
                                    predicate: (value: number, index: number, array: this) => any,
                                    thisArg?: any,
                                ): Uint8Array<ArrayBuffer>;
                                find(
                                    predicate: (value: number, index: number, obj: this) => boolean,
                                    thisArg?: any,
                                ): number | undefined;
                                findIndex(
                                    predicate: (value: number, index: number, obj: this) => boolean,
                                    thisArg?: any,
                                ): number;
                                findLast<S extends number>(
                                    predicate: (
                                        value: number,
                                        index: number,
                                        array: this,
                                    ) => value is S,
                                    thisArg?: any,
                                ): S | undefined;
                                findLast(
                                    predicate: (value: number, index: number, array: this) => unknown,
                                    thisArg?: any,
                                ): number | undefined;
                                findLastIndex(
                                    predicate: (value: number, index: number, array: this) => unknown,
                                    thisArg?: any,
                                ): number;
                                forEach(
                                    callbackfn: (value: number, index: number, array: this) => void,
                                    thisArg?: any,
                                ): void;
                                includes(searchElement: number, fromIndex?: number): boolean;
                                indexOf(searchElement: number, fromIndex?: number): number;
                                join(separator?: string): string;
                                keys(): ArrayIterator<number>;
                                lastIndexOf(searchElement: number, fromIndex?: number): number;
                                map(
                                    callbackfn: (value: number, index: number, array: this) => number,
                                    thisArg?: any,
                                ): Uint8Array<ArrayBuffer>;
                                reduce(
                                    callbackfn: (
                                        previousValue: number,
                                        currentValue: number,
                                        currentIndex: number,
                                        array: this,
                                    ) => number,
                                ): number;
                                reduce(
                                    callbackfn: (
                                        previousValue: number,
                                        currentValue: number,
                                        currentIndex: number,
                                        array: this,
                                    ) => number,
                                    initialValue: number,
                                ): number;
                                reduce<U>(
                                    callbackfn: (
                                        previousValue: U,
                                        currentValue: number,
                                        currentIndex: number,
                                        array: this,
                                    ) => U,
                                    initialValue: U,
                                ): U;
                                reduceRight(
                                    callbackfn: (
                                        previousValue: number,
                                        currentValue: number,
                                        currentIndex: number,
                                        array: this,
                                    ) => number,
                                ): number;
                                reduceRight(
                                    callbackfn: (
                                        previousValue: number,
                                        currentValue: number,
                                        currentIndex: number,
                                        array: this,
                                    ) => number,
                                    initialValue: number,
                                ): number;
                                reduceRight<U>(
                                    callbackfn: (
                                        previousValue: U,
                                        currentValue: number,
                                        currentIndex: number,
                                        array: this,
                                    ) => U,
                                    initialValue: U,
                                ): U;
                                reverse(): this;
                                set(array: ArrayLike<number>, offset?: number): void;
                                slice(start?: number, end?: number): Uint8Array<ArrayBuffer>;
                                some(
                                    predicate: (value: number, index: number, array: this) => unknown,
                                    thisArg?: any,
                                ): boolean;
                                sort(compareFn?: (a: ..., b: ...) => ...): this;
                                subarray(begin?: number, end?: number): Uint8Array<ArrayBufferLike>;
                                toLocaleString(): string;
                                toLocaleString(
                                    locales: string | (...)[],
                                    options?: NumberFormatOptions,
                                ): string;
                                toReversed(): Uint8Array<ArrayBuffer>;
                                toSorted(compareFn?: (a: ..., b: ...) => ...): Uint8Array<ArrayBuffer>;
                                toString(): string;
                                valueOf(): this;
                                values(): ArrayIterator<number>;
                                with(index: number, value: number): Uint8Array<ArrayBuffer>;
                                readonly [key: number]: number;
                            };
                            lastUsed: number;
                            name: string;
                            objectID: string;
                            storage: DeviceBindingStorage;
                            userAgents: readonly { lastSeen: number; name: string }[];
                        }
                        | undefined
                    )[]
                    | undefined,
                ]
            )[],
        ) => void

        An optional callback invoked when the entries change.

      Returns Promise<
          [
              cleanup: () => void,
              entries: readonly {
                  credentialID: string;
                  entropy: {
                      "[toStringTag]": "Uint8Array";
                      buffer:
                          | {
                              "[toStringTag]": "ArrayBuffer";
                              byteLength: number;
                              detached: boolean;
                              maxByteLength: number;
                              resizable: boolean;
                              resize(newByteLength?: number): void;
                              slice(begin?: number, end?: number): ArrayBuffer;
                              transfer(newByteLength?: number): ArrayBuffer;
                              transferToFixedLength(newByteLength?: number): ArrayBuffer;
                          }
                          | {
                              "[toStringTag]": "SharedArrayBuffer";
                              byteLength: number;
                              growable: boolean;
                              maxByteLength: number;
                              grow(newByteLength?: number): void;
                              slice(begin?: number, end?: number): SharedArrayBuffer;
                          };
                      byteLength: number;
                      byteOffset: number;
                      BYTES_PER_ELEMENT: number;
                      length: number;
                      "[iterator]"(): ArrayIterator<number>;
                      at(index: number): number | undefined;
                      copyWithin(target: number, start: number, end?: number): this;
                      entries(): ArrayIterator<[number, number]>;
                      every(
                          predicate: (value: number, index: number, array: this) => unknown,
                          thisArg?: any,
                      ): boolean;
                      fill(value: number, start?: number, end?: number): this;
                      filter(
                          predicate: (value: number, index: number, array: this) => any,
                          thisArg?: any,
                      ): Uint8Array<ArrayBuffer>;
                      find(
                          predicate: (value: number, index: number, obj: this) => boolean,
                          thisArg?: any,
                      ): number | undefined;
                      findIndex(
                          predicate: (value: number, index: number, obj: this) => boolean,
                          thisArg?: any,
                      ): number;
                      findLast<S extends number>(
                          predicate: (value: number, index: number, array: this) => value is S,
                          thisArg?: any,
                      ): S | undefined;
                      findLast(
                          predicate: (value: number, index: number, array: this) => unknown,
                          thisArg?: any,
                      ): number | undefined;
                      findLastIndex(
                          predicate: (value: number, index: number, array: this) => unknown,
                          thisArg?: any,
                      ): number;
                      forEach(
                          callbackfn: (value: number, index: number, array: this) => void,
                          thisArg?: any,
                      ): void;
                      includes(searchElement: number, fromIndex?: number): boolean;
                      indexOf(searchElement: number, fromIndex?: number): number;
                      join(separator?: string): string;
                      keys(): ArrayIterator<number>;
                      lastIndexOf(searchElement: number, fromIndex?: number): number;
                      map(
                          callbackfn: (value: number, index: number, array: this) => number,
                          thisArg?: any,
                      ): Uint8Array<ArrayBuffer>;
                      reduce(
                          callbackfn: (
                              previousValue: number,
                              currentValue: number,
                              currentIndex: number,
                              array: this,
                          ) => number,
                      ): number;
                      reduce(
                          callbackfn: (
                              previousValue: number,
                              currentValue: number,
                              currentIndex: number,
                              array: this,
                          ) => number,
                          initialValue: number,
                      ): number;
                      reduce<U>(
                          callbackfn: (
                              previousValue: U,
                              currentValue: number,
                              currentIndex: number,
                              array: this,
                          ) => U,
                          initialValue: U,
                      ): U;
                      reduceRight(
                          callbackfn: (
                              previousValue: number,
                              currentValue: number,
                              currentIndex: number,
                              array: this,
                          ) => number,
                      ): number;
                      reduceRight(
                          callbackfn: (
                              previousValue: number,
                              currentValue: number,
                              currentIndex: number,
                              array: this,
                          ) => number,
                          initialValue: number,
                      ): number;
                      reduceRight<U>(
                          callbackfn: (
                              previousValue: U,
                              currentValue: number,
                              currentIndex: number,
                              array: this,
                          ) => U,
                          initialValue: U,
                      ): U;
                      reverse(): this;
                      set(array: ArrayLike<number>, offset?: number): void;
                      slice(start?: number, end?: number): Uint8Array<ArrayBuffer>;
                      some(
                          predicate: (value: number, index: number, array: this) => unknown,
                          thisArg?: any,
                      ): boolean;
                      sort(compareFn?: (a: number, b: number) => number): this;
                      subarray(begin?: number, end?: number): Uint8Array<ArrayBufferLike>;
                      toLocaleString(): string;
                      toLocaleString(
                          locales: string | string[],
                          options?: NumberFormatOptions,
                      ): string;
                      toReversed(): Uint8Array<ArrayBuffer>;
                      toSorted(
                          compareFn?: (a: number, b: number) => number,
                      ): Uint8Array<ArrayBuffer>;
                      toString(): string;
                      valueOf(): this;
                      values(): ArrayIterator<number>;
                      with(index: number, value: number): Uint8Array<ArrayBuffer>;
                      readonly [key: number]: number;
                  };
                  lastUsed: number;
                  name: string;
                  objectID: string;
                  storage: DeviceBindingStorage;
                  userAgents: readonly { lastSeen: number; name: string }[];
              }[],
              sessionCredentialID: string,
          ],
      >

      The cleanup function, credential entries, and session credential ID.

      If the database is not authenticated.

    • Returns the recently accessed objects and optionally observes their changes.

      The returned tuple contains a cleanup function and the current recent entries. The cleanup function removes the registered change listener, if any.

      Parameters

      • OptionalonChange: (
            splice: readonly (
                readonly [
                    number,
                    number,
                    | readonly (
                        | {
                            cipherKey: | {
                                alg: "A256CTR";
                                crv?: undefined;
                                d?: undefined;
                                dp?: undefined;
                                dq?: undefined;
                                e?: undefined;
                                ext?: (...)
                                | (...)
                                | (...);
                                k: string;
                                key_ops: (...) & (...);
                                kty: "oct";
                                n?: undefined;
                                oth?: undefined;
                                p?: undefined;
                                q?: undefined;
                                qi?: undefined;
                                use: "enc";
                                x?: undefined;
                                y?: undefined;
                            }
                            | {
                                alg: "A256GCM";
                                crv?: undefined;
                                d?: undefined;
                                dp?: undefined;
                                dq?: undefined;
                                e?: undefined;
                                ext?: (...)
                                | (...)
                                | (...);
                                k: string;
                                key_ops: (...) & (...);
                                kty: "oct";
                                n?: undefined;
                                oth?: undefined;
                                p?: undefined;
                                q?: undefined;
                                qi?: undefined;
                                use: "enc";
                                x?: undefined;
                                y?: undefined;
                            };
                            dateAccessed: number;
                            id: string;
                            name: string;
                        }
                        | undefined
                    )[]
                    | undefined,
                ]
            )[],
        ) => void

        An optional callback invoked when the entries change.

      Returns Promise<
          [
              cleanup: () => void,
              entries: readonly {
                  cipherKey:
                      | {
                          alg: "A256CTR";
                          crv?: undefined;
                          d?: undefined;
                          dp?: undefined;
                          dq?: undefined;
                          e?: undefined;
                          ext?: boolean;
                          k: string;
                          key_ops: readonly string[] & readonly ("encrypt" | "decrypt")[];
                          kty: "oct";
                          n?: undefined;
                          oth?: undefined;
                          p?: undefined;
                          q?: undefined;
                          qi?: undefined;
                          use: "enc";
                          x?: undefined;
                          y?: undefined;
                      }
                      | {
                          alg: "A256GCM";
                          crv?: undefined;
                          d?: undefined;
                          dp?: undefined;
                          dq?: undefined;
                          e?: undefined;
                          ext?: boolean;
                          k: string;
                          key_ops: readonly string[] & readonly ("encrypt" | "decrypt")[];
                          kty: "oct";
                          n?: undefined;
                          oth?: undefined;
                          p?: undefined;
                          q?: undefined;
                          qi?: undefined;
                          use: "enc";
                          x?: undefined;
                          y?: undefined;
                      };
                  dateAccessed: number;
                  id: string;
                  name: string;
              }[],
          ],
      >

      The cleanup function and recent entries.

      If the database is not authenticated.

    • Loads an encrypted object using its identifier and cipher key.

      Caches the cipher key if the identifier has not been encountered before.

      Type Parameters

      • T

        The expected type of the loaded object.

      Parameters

      • id: string

        The identifier of the object to load.

      • cipherKey: CipherKey

        The key used to decrypt the object.

      • OptionalonNetworkResponse: (data: unknown) => void | Promise<void>

        An optional callback for network responses.

      Returns Promise<T | undefined>

      The loaded object, or undefined if no object is available.

    • Permanently revokes a credential and deletes its persisted data.

      Removes the credential from the database's registered credentials.

      Parameters

      • credentialID: string

        The identifier of the credential to revoke.

      Returns Promise<void>

      If the database is not authenticated.

    • Encrypts and stores an object using its identifier and cipher key.

      Caches the cipher key if the identifier has not been encountered before.

      Type Parameters

      • T

        The type of the object to store.

      Parameters

      • id: string

        The identifier of the object to store.

      • object: T

        The object to encrypt and store.

      • cipherKey: CipherKey

        The key used to encrypt the object.

      Returns Promise<void>