////////////////////////////////////////////////////////////////////////////
//
// Copyright 2024 Realm Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
////////////////////////////////////////////////////////////////////////////
import { Decimal128, ObjectId, UUID } from "bson";
import {
  AppCacheMode,
  AuthProvider,
  ClientResetMode,
  DataType,
  Float,
  HttpMethod,
  LoggerLevel,
  MetadataMode,
  ProgressDirection,
  PropertyType,
  ProxyType,
  SchemaMode,
  Status,
  SyncErrorAction,
  SyncSessionConnectionState,
  SyncSessionState,
  SyncSessionStopPolicy,
  SyncSubscriptionSetState,
  SyncUserState,
  TableType,
  WatchStreamState,
} from "../dist/core";
export * from "../dist/core";
// Utilities
export type AppError = Error & { code: number };
export type CppErrorCode = Error & { code: number; category: string };

// WeakRef polyfill for Hermes.
export class WeakRef<T extends object> {
  constructor(obj: T);
  deref(): T | undefined;
}

export const enum Int64Type {} // This shouldn't need to be exported, but rollup complains if it isn't.
export type Int64 = Int64Type;
export const Int64: {
  add(a: Int64, b: Int64): Int64;
  equals(a: Int64, b: Int64 | number | string): boolean;
  isInt(a: unknown): a is Int64;
  numToInt(a: number): Int64;
  strToInt(a: string): Int64;
  intToNum(a: Int64): number;
};

// Mixed types

export type Mixed =
  | null
  | Int64
  | boolean
  | Float
  | number
  | string
  | ArrayBuffer
  | Timestamp
  | Decimal128
  | ObjectId
  | UUID
  | ObjLink
  | ObjKey;
export type MixedArg =
  | null
  | Obj
  | Geospatial
  | Int64
  | boolean
  | Float
  | number
  | string
  | ArrayBuffer
  | Timestamp
  | Decimal128
  | ObjectId
  | UUID
  | ObjLink
  | ObjKey;

export type EJson = null | string | number | boolean | EJson[] | { [name: string]: EJson };
// Opaque types (including Key types)
/** Using an empty enum to express a nominal type */
export enum Schema {}
/** Using an empty enum to express a nominal type */
export enum Group {}
/** Using an empty enum to express a nominal type */
export enum AuditInterface {}
/** Using an empty enum to express a nominal type */
export enum ColKey {}
/** Using an empty enum to express a nominal type */
export enum ObjKey {}
/** Using an empty enum to express a nominal type */
export enum TableKey {}
// Records
export type Property = {
  name: string;
  publicName: string;
  type: PropertyType;
  objectType: string;
  linkOriginPropertyName: string;
  /** @default false */
  isPrimary: boolean;
  /** @default false */
  isIndexed: boolean;
  /** @default false */
  isFulltextIndexed: boolean;
  columnKey: ColKey;
};
export type Property_Relaxed = {
  name: string;
  publicName?: string;
  type: PropertyType;
  objectType?: string;
  linkOriginPropertyName?: string;
  /** @default false */
  isPrimary?: boolean;
  /** @default false */
  isIndexed?: boolean;
  /** @default false */
  isFulltextIndexed?: boolean;
  columnKey?: ColKey;
};
export type VersionId = {
  /**
   * @deprecated Add `version` to your opt-in list (under `records/VersionID/fields/`) to use this.
   * @default 0x7FFF_FFFF_FFFF_FFFF
   */
  version: Int64;
  /**
   * @deprecated Add `index` to your opt-in list (under `records/VersionID/fields/`) to use this.
   * @default 0
   */
  index: number;
};
export type VersionId_Relaxed = {
  /**
   * @deprecated Add `version` to your opt-in list (under `records/VersionID/fields/`) to use this.
   * @default 0x7FFF_FFFF_FFFF_FFFF
   */
  version?: Int64;
  /**
   * @deprecated Add `index` to your opt-in list (under `records/VersionID/fields/`) to use this.
   * @default 0
   */
  index?: number;
};
export type ObjectSchema = {
  name: string;
  persistedProperties: Array<Property>;
  computedProperties: Array<Property>;
  primaryKey: string;
  tableKey: TableKey;
  /** @default TopLevel */
  tableType: TableType;
  /** @deprecated Add `alias` to your opt-in list (under `records/ObjectSchema/fields/`) to use this. */
  alias: string;
};
export type ObjectSchema_Relaxed = {
  name: string;
  persistedProperties?: Array<Property_Relaxed>;
  computedProperties?: Array<Property_Relaxed>;
  primaryKey?: string;
  tableKey?: TableKey;
  /** @default TopLevel */
  tableType?: TableType;
  /** @deprecated Add `alias` to your opt-in list (under `records/ObjectSchema/fields/`) to use this. */
  alias?: string;
};
export type GeoPoint = {
  longitude: number;
  latitude: number;
  /** @default std::numeric_limits<double>::quiet_NaN() */
  altitude: number;
};
export type GeoPoint_Relaxed = {
  longitude: number;
  latitude: number;
  /** @default std::numeric_limits<double>::quiet_NaN() */
  altitude?: number;
};
export type GeoCircle = {
  radiusRadians: number;
  center: GeoPoint;
};
export type GeoCircle_Relaxed = {
  radiusRadians: number;
  center: GeoPoint_Relaxed;
};
export type GeoBox = {
  lo: GeoPoint;
  hi: GeoPoint;
};
export type GeoBox_Relaxed = {
  lo: GeoPoint_Relaxed;
  hi: GeoPoint_Relaxed;
};
export type GeoPolygon = {
  points: Array<Array<GeoPoint>>;
};
export type GeoPolygon_Relaxed = {
  points: Array<Array<GeoPoint_Relaxed>>;
};
export type RealmConfig = {
  path: string;
  /** @default false */
  cache: boolean;
  encryptionKey: ArrayBuffer;
  fifoFilesFallbackPath: string;
  /** @default false */
  inMemory: boolean;
  schema: undefined | Array<ObjectSchema>;
  /** @default -1 */
  schemaVersion: Int64;
  /** @default SchemaMode::Automatic */
  schemaMode: SchemaMode;
  /** @default false */
  disableFormatUpgrade: boolean;
  syncConfig: null | SyncConfig;
  /** @default false */
  forceSyncHistory: boolean;
  /** @default false */
  automaticallyHandleBacklinksInMigrations: boolean;
};
export type RealmConfig_Relaxed = {
  path: string;
  /** @default false */
  cache?: boolean;
  encryptionKey?: ArrayBuffer;
  fifoFilesFallbackPath?: string;
  /** @default false */
  inMemory?: boolean;
  schema?: undefined | Array<ObjectSchema_Relaxed>;
  /** @default -1 */
  schemaVersion?: Int64;
  /** @default SchemaMode::Automatic */
  schemaMode?: SchemaMode;
  /** @default false */
  disableFormatUpgrade?: boolean;
  syncConfig?: null | SyncConfig_Relaxed;
  /** @default false */
  forceSyncHistory?: boolean;
  migrationFunction?: null | ((old_realm: Realm, new_realm: Realm) => void);
  initializationFunction?: null | ((realm: Realm) => void);
  shouldCompactOnLaunchFunction?: null | ((total_bytes: Int64, used_bytes: Int64) => boolean);
  /** @default false */
  automaticallyHandleBacklinksInMigrations?: boolean;
};
export type UserIdentity = {
  id: string;
  providerType: string;
};
export type UserIdentity_Relaxed = {
  id: string;
  providerType: string;
};
export type UserApiKey = {
  id: ObjectId;
  key: undefined | string;
  name: string;
  disabled: boolean;
};
export type UserApiKey_Relaxed = {
  id: ObjectId;
  key?: undefined | string;
  name: string;
  disabled: boolean;
};
export type SyncProxyConfig = {
  address: string;
  port: number;
  type: ProxyType;
};
export type SyncProxyConfig_Relaxed = {
  address: string;
  port: number;
  type: ProxyType;
};
export type SyncConfig = {
  user: SyncUser;
  partitionValue: string;
  /** @default AfterChangesUploaded */
  stopPolicy: SyncSessionStopPolicy;
  /** @default false */
  flxSyncRequested: boolean;
  customHttpHeaders: Record<string, string>;
  /** @default true */
  clientValidateSsl: boolean;
  sslTrustCertificatePath: undefined | string;
  sslVerifyCallback: null | SslVerifyCallback;
  /** @default ClientResyncMode::Manual; */
  clientResyncMode: ClientResetMode;
  /** @default false */
  cancelWaitsOnNonfatalError: boolean;
  proxyConfig: undefined | SyncProxyConfig;
};
export type SyncConfig_Relaxed = {
  user: SyncUser;
  partitionValue?: string;
  /** @default AfterChangesUploaded */
  stopPolicy?: SyncSessionStopPolicy;
  /** @default false */
  flxSyncRequested?: boolean;
  errorHandler?: null | ((session: SyncSession, error: SyncError) => void);
  customHttpHeaders?: Record<string, string>;
  /** @default true */
  clientValidateSsl?: boolean;
  sslTrustCertificatePath?: undefined | string;
  sslVerifyCallback?: null | SslVerifyCallback;
  /** @default ClientResyncMode::Manual; */
  clientResyncMode?: ClientResetMode;
  notifyBeforeClientReset?: null | ((before_frozen: Realm) => void);
  notifyAfterClientReset?: null | ((before_frozen: Realm, after: ThreadSafeReference, did_recover: boolean) => void);
  /** @default false */
  cancelWaitsOnNonfatalError?: boolean;
  proxyConfig?: undefined | SyncProxyConfig_Relaxed;
};
export type SyncSubscription = {
  id: ObjectId;
  createdAt: Timestamp;
  updatedAt: Timestamp;
  name: undefined | string;
  objectClassName: string;
  queryString: string;
};
export type SyncSubscription_Relaxed = {
  id: ObjectId;
  createdAt: Timestamp;
  updatedAt: Timestamp;
  name?: undefined | string;
  objectClassName: string;
  queryString: string;
};
export type ObjectChangeSet = {
  isDeleted: boolean;
  changedColumns: Array<ColKey>;
};
export type ObjectChangeSet_Relaxed = {
  isDeleted: boolean;
  changedColumns: Array<ColKey>;
};
export type CollectionChangeSetMove = {
  /** @deprecated Add `from` to your opt-in list (under `records/CollectionChangeSetMove/fields/`) to use this. */
  from: number;
  /** @deprecated Add `to` to your opt-in list (under `records/CollectionChangeSetMove/fields/`) to use this. */
  to: number;
};
export type CollectionChangeSetMove_Relaxed = {
  /** @deprecated Add `from` to your opt-in list (under `records/CollectionChangeSetMove/fields/`) to use this. */
  from: number;
  /** @deprecated Add `to` to your opt-in list (under `records/CollectionChangeSetMove/fields/`) to use this. */
  to: number;
};
export type CollectionChangeSet = {
  deletions: IndexSet;
  insertions: IndexSet;
  modifications: IndexSet;
  modificationsNew: IndexSet;
  /** @deprecated Add `moves` to your opt-in list (under `records/CollectionChangeSet/fields/`) to use this. */
  moves: Array<CollectionChangeSetMove>;
  /** @deprecated Add `collection_root_was_deleted` to your opt-in list (under `records/CollectionChangeSet/fields/`) to use this. */
  collectionRootWasDeleted: boolean;
  /** @deprecated Add `collection_was_cleared` to your opt-in list (under `records/CollectionChangeSet/fields/`) to use this. */
  collectionWasCleared: boolean;
};
export type CollectionChangeSet_Relaxed = {
  deletions: IndexSet;
  insertions: IndexSet;
  modifications: IndexSet;
  modificationsNew: IndexSet;
  /** @deprecated Add `moves` to your opt-in list (under `records/CollectionChangeSet/fields/`) to use this. */
  moves: Array<CollectionChangeSetMove_Relaxed>;
  /** @deprecated Add `collection_root_was_deleted` to your opt-in list (under `records/CollectionChangeSet/fields/`) to use this. */
  collectionRootWasDeleted: boolean;
  /** @deprecated Add `collection_was_cleared` to your opt-in list (under `records/CollectionChangeSet/fields/`) to use this. */
  collectionWasCleared: boolean;
};
export type DictionaryChangeSet = {
  deletions: Array<Mixed>;
  insertions: Array<Mixed>;
  modifications: Array<Mixed>;
  /** @deprecated Add `collection_root_was_deleted` to your opt-in list (under `records/DictionaryChangeSet/fields/`) to use this. */
  collectionRootWasDeleted: boolean;
};
export type DictionaryChangeSet_Relaxed = {
  deletions: Array<MixedArg>;
  insertions: Array<MixedArg>;
  modifications: Array<MixedArg>;
  /** @deprecated Add `collection_root_was_deleted` to your opt-in list (under `records/DictionaryChangeSet/fields/`) to use this. */
  collectionRootWasDeleted: boolean;
};
export type BindingContext = Record<string, never>;
export type BindingContext_Relaxed = {
  didChange?: null | ((r: Realm) => void);
  beforeNotify?: null | ((r: Realm) => void);
  schemaDidChange?: null | ((r: Realm) => void);
};
export type SyncClientTimeouts = {
  /**
   * @deprecated Add `connect_timeout` to your opt-in list (under `records/SyncClientTimeouts/fields/`) to use this.
   * @default 120000
   */
  connectTimeout: Int64;
  /**
   * @deprecated Add `connection_linger_time` to your opt-in list (under `records/SyncClientTimeouts/fields/`) to use this.
   * @default 30000
   */
  connectionLingerTime: Int64;
  /**
   * @deprecated Add `ping_keepalive_period` to your opt-in list (under `records/SyncClientTimeouts/fields/`) to use this.
   * @default 60000
   */
  pingKeepalivePeriod: Int64;
  /**
   * @deprecated Add `pong_keepalive_timeout` to your opt-in list (under `records/SyncClientTimeouts/fields/`) to use this.
   * @default 120000
   */
  pongKeepaliveTimeout: Int64;
  /**
   * @deprecated Add `fast_reconnect_limit` to your opt-in list (under `records/SyncClientTimeouts/fields/`) to use this.
   * @default 60000
   */
  fastReconnectLimit: Int64;
};
export type SyncClientTimeouts_Relaxed = {
  /**
   * @deprecated Add `connect_timeout` to your opt-in list (under `records/SyncClientTimeouts/fields/`) to use this.
   * @default 120000
   */
  connectTimeout?: Int64;
  /**
   * @deprecated Add `connection_linger_time` to your opt-in list (under `records/SyncClientTimeouts/fields/`) to use this.
   * @default 30000
   */
  connectionLingerTime?: Int64;
  /**
   * @deprecated Add `ping_keepalive_period` to your opt-in list (under `records/SyncClientTimeouts/fields/`) to use this.
   * @default 60000
   */
  pingKeepalivePeriod?: Int64;
  /**
   * @deprecated Add `pong_keepalive_timeout` to your opt-in list (under `records/SyncClientTimeouts/fields/`) to use this.
   * @default 120000
   */
  pongKeepaliveTimeout?: Int64;
  /**
   * @deprecated Add `fast_reconnect_limit` to your opt-in list (under `records/SyncClientTimeouts/fields/`) to use this.
   * @default 60000
   */
  fastReconnectLimit?: Int64;
};
export type SyncClientConfig = {
  baseFilePath: string;
  /** @default MetadataMode::Encryption */
  metadataMode: MetadataMode;
  customEncryptionKey: undefined | ArrayBuffer;
  /** @deprecated Add `logger_factory` to your opt-in list (under `records/SyncClientConfig/fields/`) to use this. */
  loggerFactory: null | LoggerFactory;
  /**
   * @deprecated Add `log_level` to your opt-in list (under `records/SyncClientConfig/fields/`) to use this.
   * @default LoggerLevel::info
   */
  logLevel: LoggerLevel;
  /** @default false */
  multiplexSessions: boolean;
  userAgentBindingInfo: string;
  /** @deprecated Add `user_agent_application_info` to your opt-in list (under `records/SyncClientConfig/fields/`) to use this. */
  userAgentApplicationInfo: string;
  /** @deprecated Add `timeouts` to your opt-in list (under `records/SyncClientConfig/fields/`) to use this. */
  timeouts: SyncClientTimeouts;
};
export type SyncClientConfig_Relaxed = {
  baseFilePath: string;
  /** @default MetadataMode::Encryption */
  metadataMode?: MetadataMode;
  customEncryptionKey?: undefined | ArrayBuffer;
  /** @deprecated Add `logger_factory` to your opt-in list (under `records/SyncClientConfig/fields/`) to use this. */
  loggerFactory?: null | LoggerFactory;
  /**
   * @deprecated Add `log_level` to your opt-in list (under `records/SyncClientConfig/fields/`) to use this.
   * @default LoggerLevel::info
   */
  logLevel?: LoggerLevel;
  /** @default false */
  multiplexSessions?: boolean;
  userAgentBindingInfo?: string;
  /** @deprecated Add `user_agent_application_info` to your opt-in list (under `records/SyncClientConfig/fields/`) to use this. */
  userAgentApplicationInfo?: string;
  /** @deprecated Add `timeouts` to your opt-in list (under `records/SyncClientConfig/fields/`) to use this. */
  timeouts?: SyncClientTimeouts_Relaxed;
};
export type SyncError = {
  status: Status;
  isFatal: boolean;
  simpleMessage: string;
  logUrl: string;
  userInfo: Record<string, string>;
  /**
   * @deprecated Add `is_unrecognized_by_client` to your opt-in list (under `records/SyncError/fields/`) to use this.
   * @default false
   */
  isUnrecognizedByClient: boolean;
  isClientResetRequested: boolean;
  /**
   * @deprecated Add `server_requests_action` to your opt-in list (under `records/SyncError/fields/`) to use this.
   * @default NoAction
   */
  serverRequestsAction: SyncErrorAction;
  compensatingWritesInfo: Array<CompensatingWriteErrorInfo>;
};
export type SyncError_Relaxed = {
  status: Status;
  isFatal: boolean;
  simpleMessage: string;
  logUrl: string;
  userInfo: Record<string, string>;
  /**
   * @deprecated Add `is_unrecognized_by_client` to your opt-in list (under `records/SyncError/fields/`) to use this.
   * @default false
   */
  isUnrecognizedByClient?: boolean;
  isClientResetRequested: boolean;
  /**
   * @deprecated Add `server_requests_action` to your opt-in list (under `records/SyncError/fields/`) to use this.
   * @default NoAction
   */
  serverRequestsAction?: SyncErrorAction;
  compensatingWritesInfo: Array<CompensatingWriteErrorInfo_Relaxed>;
};
export type Request = {
  method: HttpMethod;
  url: string;
  timeoutMs: Int64;
  headers: Record<string, string>;
  body: string;
  /** @deprecated Add `uses_refresh_token` to your opt-in list (under `records/Request/fields/`) to use this. */
  usesRefreshToken: boolean;
};
export type Request_Relaxed = {
  method: HttpMethod;
  url: string;
  timeoutMs: Int64;
  headers: Record<string, string>;
  body: string;
  /** @deprecated Add `uses_refresh_token` to your opt-in list (under `records/Request/fields/`) to use this. */
  usesRefreshToken: boolean;
};
export type Response = {
  httpStatusCode: number;
  customStatusCode: number;
  headers: Record<string, string>;
  body: string;
};
export type Response_Relaxed = {
  httpStatusCode: number;
  customStatusCode: number;
  headers: Record<string, string>;
  body: string;
};
export type DeviceInfo = {
  platformVersion: string;
  sdkVersion: string;
  sdk: string;
  deviceName: string;
  deviceVersion: string;
  frameworkName: string;
  frameworkVersion: string;
  bundleId: string;
};
export type DeviceInfo_Relaxed = {
  platformVersion: string;
  sdkVersion: string;
  sdk: string;
  deviceName: string;
  deviceVersion: string;
  frameworkName: string;
  frameworkVersion: string;
  bundleId: string;
};
export type AppConfig = {
  appId: string;
  transport: GenericNetworkTransport;
  baseUrl: undefined | string;
  defaultRequestTimeoutMs: undefined | Int64;
  deviceInfo: DeviceInfo;
};
export type AppConfig_Relaxed = {
  appId: string;
  transport: GenericNetworkTransport;
  baseUrl?: undefined | string;
  defaultRequestTimeoutMs?: undefined | Int64;
  deviceInfo: DeviceInfo_Relaxed;
};
export type CompensatingWriteErrorInfo = {
  objectName: string;
  reason: string;
  primaryKey: Mixed;
};
export type CompensatingWriteErrorInfo_Relaxed = {
  objectName: string;
  reason: string;
  primaryKey: MixedArg;
};
// Classes
export class Helpers {
  private brandForHelpers;
  private constructor();
  static getTable(r: Realm, key: TableKey): TableRef;
  /** @deprecated Add `get_table_by_name` to your opt-in list (under `classes/Helpers/methods/`) to use this. */
  static getTableByName(r: Realm, name: string): TableRef;
  static getKeypathMapping(r: Realm): KeyPathMapping;
  /** @deprecated Add `results_from_query` to your opt-in list (under `classes/Helpers/methods/`) to use this. */
  static resultsFromQuery(r: Realm, q: Query): Results;
  static resultsAppendQuery(results: Results, query: Query): Results;
  static makeObjectNotifier(r: Realm, o: Obj): ObjectNotifier;
  /** @deprecated Add `has_binding_context` to your opt-in list (under `classes/Helpers/methods/`) to use this. */
  static hasBindingContext(r: Realm): boolean;
  static setBindingContext(r: Realm, methods: BindingContext_Relaxed): void;
  static getOrCreateObjectWithPrimaryKey(t: TableRef, pk: MixedArg): [Obj, boolean];
  static makeNetworkTransport(
    runRequest: (request: Readonly<Request>, callback: (response: Response_Relaxed) => void) => void,
  ): GenericNetworkTransport;
  static deleteDataForObject(realm: Realm, object_type: string): void;
  static base64Decode(input: string): ArrayBuffer;
  static makeLoggerFactory(log: (level: LoggerLevel, message: Readonly<string>) => void): LoggerFactory;
  static makeLogger(log: (level: LoggerLevel, message: Readonly<string>) => void): Logger;
  static simulateSyncError(
    session: SyncSession,
    code: Readonly<number>,
    message: Readonly<string>,
    type: Readonly<string>,
    is_fatal: boolean,
  ): void;
  static consumeThreadSafeReferenceToSharedRealm(tsr: ThreadSafeReference): Realm;
  static fileExists(path: string): boolean;
  static eraseSubscription(
    subs: MutableSyncSubscriptionSet,
    sub_to_remove: Readonly<SyncSubscription_Relaxed>,
  ): boolean;
  static getResultsDescription(results: Readonly<Results>): string;
  static feedBuffer(ws: WatchStream, buffer: ArrayBuffer): void;
  static makeSslVerifyCallback(
    callback: (
      server_address: Readonly<string>,
      server_port: number,
      pem_data: string,
      preverify_ok: number,
      depth: number,
    ) => boolean,
  ): SslVerifyCallback;
}
export class Logger {
  private brandForLogger;
  private constructor();
  static setDefaultLogger(logger: Logger): void;
  static setDefaultLevelThreshold(level: LoggerLevel): void;
  /** @deprecated Add `get_default_logger` to your opt-in list (under `classes/Logger/methods/`) to use this. */
  readonly defaultLogger: Logger;
  /** @deprecated Add `get_default_level_threshold` to your opt-in list (under `classes/Logger/methods/`) to use this. */
  readonly defaultLevelThreshold: LoggerLevel;
  /** @deprecated Add `DOLLAR_addr` to your opt-in list (under `classes/Logger/methods/`) to use this. */
  readonly $addr: number;
  /** @deprecated Add `DOLLAR_resetSharedPtr` to your opt-in list (under `classes/Logger/methods/`) to use this. */
  $resetSharedPtr(): void;
}
export class ConstTableRef {
  private brandForConstTableRef;
  protected constructor();
  /** @deprecated Add `is_embedded` to your opt-in list (under `classes/ConstTableRef/methods/`) to use this. */
  isEmbedded(): boolean;
  getColumnType(column: ColKey): DataType;
  getLinkTarget(column: ColKey): ConstTableRef;
  getObject(key: ObjKey): Obj;
  tryGetObject(key: ObjKey): null | Obj;
  query(query_string: string, args: Array<MixedArg | MixedArg[]>, mapping: KeyPathMapping): Query;
  findPrimaryKey(pk: MixedArg): ObjKey;
  /** @deprecated Add `get_name` to your opt-in list (under `classes/ConstTableRef/methods/`) to use this. */
  readonly name: string;
  /** @deprecated Add `get_column_count` to your opt-in list (under `classes/ConstTableRef/methods/`) to use this. */
  readonly columnCount: number;
  readonly key: TableKey;
  [Symbol.iterator](): Iterator<Obj>;
}
export class TableRef extends ConstTableRef {
  private brandForTableRef;
  private constructor();
  createObject(): Obj;
  /** @deprecated Add `create_object_with_primary_key` to your opt-in list (under `classes/TableRef/methods/`) to use this. */
  createObjectWithPrimaryKey(pk: MixedArg): Obj;
  removeObject(key: ObjKey): void;
  getLinkTarget(column: ColKey): TableRef;
  clear(): void;
  getPrimaryKeyColumn(): ColKey;
}
export class Obj {
  private brandForObj;
  private constructor();
  getAny(column: ColKey): Mixed;
  /** @deprecated Add `get_any_by_name` to your opt-in list (under `classes/Obj/methods/`) to use this. */
  getAnyByName(column: string): Mixed;
  /** @deprecated Add `is_null` to your opt-in list (under `classes/Obj/methods/`) to use this. */
  isNull(column: ColKey): boolean;
  /** @deprecated Add `is_null_by_name` to your opt-in list (under `classes/Obj/methods/`) to use this. */
  isNullByName(column: string): boolean;
  setAny(column: ColKey, value: MixedArg): void;
  /** @deprecated Add `set_any_with_default` to your opt-in list (under `classes/Obj/methods/`) to use this. */
  setAnyWithDefault(column: ColKey, value: MixedArg, is_default: boolean): void;
  getLinkedObject(column: ColKey): null | Obj;
  /** @deprecated Add `to_string` to your opt-in list (under `classes/Obj/methods/`) to use this. */
  toString(): string;
  getBacklinkCount(): number;
  getBacklinkView(src_table: TableRef, src_col_key: ColKey): TableView;
  createAndSetLinkedObject(column: ColKey): Obj;
  readonly isValid: boolean;
  readonly table: TableRef;
  readonly key: ObjKey;
  /** @deprecated Add `get_link` to your opt-in list (under `classes/Obj/methods/`) to use this. */
  readonly link: ObjLink;
  /** @deprecated Add `get_primary_key` to your opt-in list (under `classes/Obj/methods/`) to use this. */
  readonly primaryKey: Mixed;
}
export class Transaction {
  private brandForTransaction;
  private constructor();
  /** @deprecated Add `DOLLAR_addr` to your opt-in list (under `classes/Transaction/methods/`) to use this. */
  readonly $addr: number;
  /** @deprecated Add `DOLLAR_resetSharedPtr` to your opt-in list (under `classes/Transaction/methods/`) to use this. */
  $resetSharedPtr(): void;
}
export class ObjectStore {
  private brandForObjectStore;
  private constructor();
  /** @deprecated Add `get_schema_version` to your opt-in list (under `classes/ObjectStore/methods/`) to use this. */
  static getSchemaVersion(group: Group): Int64;
  /** @deprecated Add `set_schema_version` to your opt-in list (under `classes/ObjectStore/methods/`) to use this. */
  static setSchemaVersion(group: Group, version: Int64): void;
  /** @deprecated Add `schema_from_group` to your opt-in list (under `classes/ObjectStore/methods/`) to use this. */
  static schemaFromGroup(group: Group): Array<ObjectSchema>;
}
export class Timestamp {
  private brandForTimestamp;
  private constructor();
  static make(seconds: Int64, nanoseconds: number): Timestamp;
  readonly seconds: Int64;
  readonly nanoseconds: number;
}
export class Geospatial {
  private brandForGeospatial;
  private constructor();
  static makeFromCircle(circle: GeoCircle_Relaxed): Geospatial;
  static makeFromBox(box: GeoBox_Relaxed): Geospatial;
  static makeFromPolygon(polygon: GeoPolygon_Relaxed): Geospatial;
}
export class ObjLink {
  private brandForObjLink;
  private constructor();
  /** @deprecated Add `is_null` to your opt-in list (under `classes/ObjLink/methods/`) to use this. */
  readonly isNull: boolean;
  /** @deprecated Add `is_unresolved` to your opt-in list (under `classes/ObjLink/methods/`) to use this. */
  readonly isUnresolved: boolean;
  readonly tableKey: TableKey;
  readonly objKey: ObjKey;
}
export class KeyPathMapping {
  private brandForKeyPathMapping;
  private constructor();
}
export class Query {
  private brandForQuery;
  private constructor();
  /** @deprecated Add `count` to your opt-in list (under `classes/Query/methods/`) to use this. */
  count(): number;
  readonly table: ConstTableRef;
  readonly description: string;
}
export class SortDescriptor {
  private brandForSortDescriptor;
  private constructor();
  /** @deprecated Add `make_empty` to your opt-in list (under `classes/SortDescriptor/methods/`) to use this. */
  static makeEmpty(): SortDescriptor;
  /** @deprecated Add `make` to your opt-in list (under `classes/SortDescriptor/methods/`) to use this. */
  static make(column_indices: Array<Array<ColKey>>, ascending: Array<boolean>): SortDescriptor;
  /** @deprecated Add `is_valid` to your opt-in list (under `classes/SortDescriptor/methods/`) to use this. */
  readonly isValid: boolean;
}
export class TableView {
  private brandForTableView;
  private constructor();
}
export class Results {
  private brandForResults;
  private constructor();
  size(): number;
  indexOf(value: MixedArg): number;
  indexOfObj(obj: Obj): number;
  getObj(index: number): Obj;
  getAny(index: number): Mixed;
  /** @deprecated Add `get_dictionary_element` to your opt-in list (under `classes/Results/methods/`) to use this. */
  getDictionaryElement(index: number): [string, Mixed];
  /** @deprecated Add `filter` to your opt-in list (under `classes/Results/methods/`) to use this. */
  filter(query: Query): Results;
  /** @deprecated Add `sort` to your opt-in list (under `classes/Results/methods/`) to use this. */
  sort(order: SortDescriptor): Results;
  sortByNames(order: Array<[string, boolean]>): Results;
  /** @deprecated Add `limit` to your opt-in list (under `classes/Results/methods/`) to use this. */
  limit(max_count: number): Results;
  snapshot(): Results;
  /** @deprecated Add `freeze` to your opt-in list (under `classes/Results/methods/`) to use this. */
  freeze(frozen_realm: Realm): Results;
  max(column: ColKey): undefined | Mixed;
  min(column: ColKey): undefined | Mixed;
  average(column: ColKey): undefined | Mixed;
  sum(column: ColKey): undefined | Mixed;
  clear(): void;
  addNotificationCallback(
    cb: (changes: Readonly<CollectionChangeSet>) => void,
    keyPaths: undefined | Array<Array<[TableKey, ColKey]>>,
  ): NotificationToken;
  /** @deprecated Add `make_empty` to your opt-in list (under `classes/Results/methods/`) to use this. */
  static makeEmpty(): Results;
  static fromTable(r: Realm, table: ConstTableRef): Results;
  static fromTableView(r: Realm, table: TableView): Results;
  /** @deprecated Add `is_frozen` to your opt-in list (under `classes/Results/methods/`) to use this. */
  readonly isFrozen: boolean;
  readonly isValid: boolean;
  readonly query: Query;
  readonly objectType: string;
  readonly type: PropertyType;
}
export class Realm {
  private brandForRealm;
  private constructor();
  beginTransaction(): void;
  commitTransaction(): void;
  cancelTransaction(): void;
  /** @deprecated Add `freeze` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  freeze(): Realm;
  /** @deprecated Add `last_seen_transaction_version` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  lastSeenTransactionVersion(): Int64;
  /** @deprecated Add `read_group` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  readGroup(): Group;
  /** @deprecated Add `duplicate` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  duplicate(): Transaction;
  updateSchema(
    schema: Array<ObjectSchema_Relaxed>,
    version: Int64,
    migration_function: null | ((old_realm: Realm, new_realm: Realm) => void),
    initialization_function: null | ((realm: Realm) => void),
    in_transaction: boolean,
  ): void;
  /** @deprecated Add `enable_wait_for_change` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  enableWaitForChange(): void;
  /** @deprecated Add `wait_for_change` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  waitForChange(): boolean;
  /** @deprecated Add `wait_for_change_release` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  waitForChangeRelease(): void;
  /** @deprecated Add `refresh` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  refresh(): boolean;
  /** @deprecated Add `set_auto_refresh` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  setAutoRefresh(auto_refresh: boolean): void;
  /** @deprecated Add `notify` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  notify(): void;
  /** @deprecated Add `invalidate` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  invalidate(): void;
  compact(): boolean;
  /** @deprecated Add `write_copy` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  writeCopy(): ArrayBuffer;
  convert(config: RealmConfig_Relaxed): void;
  /** @deprecated Add `verify_thread` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  verifyThread(): void;
  /** @deprecated Add `verify_in_write` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  verifyInWrite(): void;
  verifyOpen(): void;
  /** @deprecated Add `verify_notifications_available` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  verifyNotificationsAvailable(): void;
  /** @deprecated Add `verify_notifications_available_maybe_throw` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  verifyNotificationsAvailableMaybeThrow(throw_on_error: boolean): void;
  createKeyPathArray(table_name: string, key_paths: Readonly<Array<string>>): Array<Array<[TableKey, ColKey]>>;
  close(): void;
  static getSharedRealm(config: RealmConfig_Relaxed): Realm;
  static getSynchronizedRealm(config: RealmConfig_Relaxed): AsyncOpenTask;
  static getSchemaVersion(config: Readonly<RealmConfig_Relaxed>): Int64;
  readonly config: Readonly<RealmConfig>;
  readonly schema: Readonly<Array<ObjectSchema>>;
  readonly schemaVersion: Int64;
  readonly isInTransaction: boolean;
  /** @deprecated Add `is_frozen` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  readonly isFrozen: boolean;
  readonly isInMigration: boolean;
  readonly isEmpty: boolean;
  /** @deprecated Add `get_number_of_versions` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  readonly numberOfVersions: Int64;
  /** @deprecated Add `read_transaction_version` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  readonly readTransactionVersion: VersionId;
  /** @deprecated Add `current_transaction_version` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  readonly currentTransactionVersion: undefined | VersionId;
  /** @deprecated Add `auto_refresh` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  readonly autoRefresh: boolean;
  /** @deprecated Add `can_deliver_notifications` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  readonly canDeliverNotifications: boolean;
  /** @deprecated Add `scheduler` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  readonly scheduler: Scheduler;
  readonly isClosed: boolean;
  /** @deprecated Add `audit_context` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  readonly auditContext: null | AuditInterface;
  readonly syncSession: null | SyncSession;
  readonly latestSubscriptionSet: SyncSubscriptionSet;
  /** @deprecated Add `get_active_subscription_set` to your opt-in list (under `classes/Realm/methods/`) to use this. */
  readonly activeSubscriptionSet: SyncSubscriptionSet;
  readonly $addr: number;
  $resetSharedPtr(): void;
}
export class RealmCoordinator {
  private brandForRealmCoordinator;
  private constructor();
  static clearAllCaches(): void;
  /** @deprecated Add `DOLLAR_addr` to your opt-in list (under `classes/RealmCoordinator/methods/`) to use this. */
  readonly $addr: number;
  /** @deprecated Add `DOLLAR_resetSharedPtr` to your opt-in list (under `classes/RealmCoordinator/methods/`) to use this. */
  $resetSharedPtr(): void;
}
export class ObjectNotifier {
  private brandForObjectNotifier;
  private constructor();
  addCallback(cb: (changes: ObjectChangeSet) => void, keyPaths: undefined | Array<Array<[TableKey, ColKey]>>): Int64;
  /** @deprecated Add `remove_callback` to your opt-in list (under `classes/ObjectNotifier/methods/`) to use this. */
  removeCallback(token: Int64): void;
  /** @deprecated Add `make` to your opt-in list (under `classes/ObjectNotifier/methods/`) to use this. */
  static make(realm: Realm, obj: Obj): ObjectNotifier;
  /** @deprecated Add `DOLLAR_addr` to your opt-in list (under `classes/ObjectNotifier/methods/`) to use this. */
  readonly $addr: number;
  /** @deprecated Add `DOLLAR_resetSharedPtr` to your opt-in list (under `classes/ObjectNotifier/methods/`) to use this. */
  $resetSharedPtr(): void;
}
export class NotificationToken {
  private brandForNotificationToken;
  private constructor();
  /** @deprecated Add `suppress_next` to your opt-in list (under `classes/NotificationToken/methods/`) to use this. */
  suppressNext(): void;
  unregister(): void;
  static forObject(notifier: ObjectNotifier, token: Int64): NotificationToken;
}
export class IndexSet {
  private brandForIndexSet;
  private constructor();
  [Symbol.iterator](): Iterator<[number, number]>;
}
export class Collection {
  private brandForCollection;
  protected constructor();
  getAny(ndx: number): Mixed;
  /** @deprecated Add `find_any` to your opt-in list (under `classes/Collection/methods/`) to use this. */
  findAny(value: MixedArg): number;
  /** @deprecated Add `verify_attached` to your opt-in list (under `classes/Collection/methods/`) to use this. */
  verifyAttached(): void;
  /** @deprecated Add `verify_in_transaction` to your opt-in list (under `classes/Collection/methods/`) to use this. */
  verifyInTransaction(): void;
  asResults(): Results;
  /** @deprecated Add `snapshot` to your opt-in list (under `classes/Collection/methods/`) to use this. */
  snapshot(): Results;
  /** @deprecated Add `sort` to your opt-in list (under `classes/Collection/methods/`) to use this. */
  sort(order: SortDescriptor): Results;
  /** @deprecated Add `sort_by_name` to your opt-in list (under `classes/Collection/methods/`) to use this. */
  sortByName(keyPaths: Readonly<Array<[string, boolean]>>): Results;
  /** @deprecated Add `add_notification_callback` to your opt-in list (under `classes/Collection/methods/`) to use this. */
  addNotificationCallback(
    cb: (changes: Readonly<CollectionChangeSet>) => void,
    keyPaths: undefined | Array<Array<[TableKey, ColKey]>>,
  ): NotificationToken;
  /** @deprecated Add `get_type` to your opt-in list (under `classes/Collection/methods/`) to use this. */
  readonly type: PropertyType;
  /** @deprecated Add `get_realm` to your opt-in list (under `classes/Collection/methods/`) to use this. */
  readonly realm: Realm;
  /** @deprecated Add `get_parent_column_key` to your opt-in list (under `classes/Collection/methods/`) to use this. */
  readonly parentColumnKey: ColKey;
  /** @deprecated Add `get_parent_object_key` to your opt-in list (under `classes/Collection/methods/`) to use this. */
  readonly parentObjectKey: ObjKey;
  /** @deprecated Add `get_parent_table_key` to your opt-in list (under `classes/Collection/methods/`) to use this. */
  readonly parentTableKey: TableKey;
  readonly objectSchema: Readonly<ObjectSchema>;
  readonly size: number;
  readonly isValid: boolean;
  /** @deprecated Add `is_frozen` to your opt-in list (under `classes/Collection/methods/`) to use this. */
  readonly isFrozen: boolean;
}
export class List extends Collection {
  private brandForList;
  private constructor();
  /** @deprecated Add `get` to your opt-in list (under `classes/List/methods/`) to use this. */
  get(ndx: number): Obj;
  move(source_ndx: number, dest_ndx: number): void;
  remove(ndx: number): void;
  removeAll(): void;
  swap(ndx1: number, ndx2: number): void;
  /** @deprecated Add `delete_at` to your opt-in list (under `classes/List/methods/`) to use this. */
  deleteAt(ndx: number): void;
  deleteAll(): void;
  insertAny(list_ndx: number, value: MixedArg): void;
  insertEmbedded(ndx: number): Obj;
  setAny(list_ndx: number, value: MixedArg): void;
  setEmbedded(list_ndx: number): Obj;
  /** @deprecated Add `filter` to your opt-in list (under `classes/List/methods/`) to use this. */
  filter(q: Query): Results;
  /** @deprecated Add `freeze` to your opt-in list (under `classes/List/methods/`) to use this. */
  freeze(frozen_realm: Readonly<Realm>): List;
  /** @deprecated Add `max` to your opt-in list (under `classes/List/methods/`) to use this. */
  max(): undefined | Mixed;
  /** @deprecated Add `max_of` to your opt-in list (under `classes/List/methods/`) to use this. */
  maxOf(column: ColKey): undefined | Mixed;
  /** @deprecated Add `min` to your opt-in list (under `classes/List/methods/`) to use this. */
  min(): undefined | Mixed;
  /** @deprecated Add `min_of` to your opt-in list (under `classes/List/methods/`) to use this. */
  minOf(column: ColKey): undefined | Mixed;
  /** @deprecated Add `average` to your opt-in list (under `classes/List/methods/`) to use this. */
  average(): undefined | Mixed;
  /** @deprecated Add `average_of` to your opt-in list (under `classes/List/methods/`) to use this. */
  averageOf(column: ColKey): undefined | Mixed;
  /** @deprecated Add `sum` to your opt-in list (under `classes/List/methods/`) to use this. */
  sum(): Mixed;
  /** @deprecated Add `sum_of` to your opt-in list (under `classes/List/methods/`) to use this. */
  sumOf(column: ColKey): Mixed;
  static make(r: Realm, parent: Readonly<Obj>, col: ColKey): List;
}
export class Set extends Collection {
  private brandForSet;
  private constructor();
  /** @deprecated Add `get` to your opt-in list (under `classes/Set/methods/`) to use this. */
  get(ndx: number): Obj;
  insertAny(val: MixedArg): [number, boolean];
  removeAny(val: MixedArg): [number, boolean];
  removeAll(): void;
  deleteAll(): void;
  /** @deprecated Add `filter` to your opt-in list (under `classes/Set/methods/`) to use this. */
  filter(q: Query): Results;
  /** @deprecated Add `max` to your opt-in list (under `classes/Set/methods/`) to use this. */
  max(): undefined | Mixed;
  /** @deprecated Add `max_of` to your opt-in list (under `classes/Set/methods/`) to use this. */
  maxOf(column: ColKey): undefined | Mixed;
  /** @deprecated Add `min` to your opt-in list (under `classes/Set/methods/`) to use this. */
  min(): undefined | Mixed;
  /** @deprecated Add `min_of` to your opt-in list (under `classes/Set/methods/`) to use this. */
  minOf(column: ColKey): undefined | Mixed;
  /** @deprecated Add `average` to your opt-in list (under `classes/Set/methods/`) to use this. */
  average(): undefined | Mixed;
  /** @deprecated Add `average_of` to your opt-in list (under `classes/Set/methods/`) to use this. */
  averageOf(column: ColKey): undefined | Mixed;
  /** @deprecated Add `sum` to your opt-in list (under `classes/Set/methods/`) to use this. */
  sum(): Mixed;
  /** @deprecated Add `sum_of` to your opt-in list (under `classes/Set/methods/`) to use this. */
  sumOf(column: ColKey): Mixed;
  static make(r: Realm, parent: Readonly<Obj>, col: ColKey): Set;
}
export class Dictionary extends Collection {
  private brandForDictionary;
  private constructor();
  /** @deprecated Add `get` to your opt-in list (under `classes/Dictionary/methods/`) to use this. */
  get(key: string): Obj;
  /** @deprecated Add `get_pair` to your opt-in list (under `classes/Dictionary/methods/`) to use this. */
  getPair(ndx: number): [string, Mixed];
  contains(key: string): boolean;
  /** @deprecated Add `freeze` to your opt-in list (under `classes/Dictionary/methods/`) to use this. */
  freeze(frozen_realm: Readonly<Realm>): Dictionary;
  addKeyBasedNotificationCallback(
    cb: (changes: DictionaryChangeSet) => void,
    keyPaths: undefined | Array<Array<[TableKey, ColKey]>>,
  ): NotificationToken;
  insertAny(key: string, value: MixedArg): [number, boolean];
  insertEmbedded(key: string): Obj;
  tryGetAny(key: string): undefined | Mixed;
  removeAll(): void;
  tryErase(key: string): boolean;
  static make(r: Realm, parent: Readonly<Obj>, col: ColKey): Dictionary;
  readonly keys: Results;
  readonly values: Results;
  [Symbol.iterator](): Iterator<[Readonly<Mixed>, Mixed]>;
}
export class GoogleAuthCode {
  private brandForGoogleAuthCode;
  private constructor();
  static make(code: string): GoogleAuthCode;
}
export class GoogleIdToken {
  private brandForGoogleIdToken;
  private constructor();
  static make(token: string): GoogleIdToken;
}
export class AppCredentials {
  private brandForAppCredentials;
  private constructor();
  static facebook(access_token: Readonly<string>): AppCredentials;
  static anonymous(reuse_anonymous_credentials: boolean): AppCredentials;
  static apple(id_token: Readonly<string>): AppCredentials;
  static googleAuth(id_token: GoogleAuthCode): AppCredentials;
  static googleId(id_token: GoogleIdToken): AppCredentials;
  static custom(token: Readonly<string>): AppCredentials;
  static usernamePassword(username: string, password: string): AppCredentials;
  static function(serialized_payload: Readonly<Record<string, EJson>>): AppCredentials;
  /** @deprecated Add `function_bson` to your opt-in list (under `classes/AppCredentials/methods/`) to use this. */
  static functionBson(payload: Readonly<Record<string, EJson>>): AppCredentials;
  static apiKey(api_key: string): AppCredentials;
  /** @deprecated Add `provider` to your opt-in list (under `classes/AppCredentials/methods/`) to use this. */
  readonly provider: AuthProvider;
  /** @deprecated Add `provider_as_string` to your opt-in list (under `classes/AppCredentials/methods/`) to use this. */
  readonly providerAsString: string;
}
export class SyncUserSubscriptionToken {
  private brandForSyncUserSubscriptionToken;
  private constructor();
}
export class SyncUser {
  private brandForSyncUser;
  private constructor();
  /** @deprecated Add `log_out` to your opt-in list (under `classes/SyncUser/methods/`) to use this. */
  logOut(): void;
  sessionForOnDiskPath(path: string): null | SyncSession;
  subscribe(observer: () => void): SyncUserSubscriptionToken;
  unsubscribe(token: SyncUserSubscriptionToken): void;
  readonly allSessions: Array<SyncSession>;
  readonly isLoggedIn: boolean;
  readonly identity: Readonly<string>;
  /** @deprecated Add `provider_type` to your opt-in list (under `classes/SyncUser/methods/`) to use this. */
  readonly providerType: Readonly<string>;
  /** @deprecated Add `local_identity` to your opt-in list (under `classes/SyncUser/methods/`) to use this. */
  readonly localIdentity: Readonly<string>;
  readonly accessToken: string;
  readonly refreshToken: string;
  readonly deviceId: string;
  /** @deprecated Add `has_device_id` to your opt-in list (under `classes/SyncUser/methods/`) to use this. */
  readonly hasDeviceId: boolean;
  readonly userProfile: UserProfile;
  readonly identities: Array<UserIdentity>;
  readonly customData: undefined | Record<string, EJson>;
  readonly syncManager: SyncManager;
  readonly state: SyncUserState;
  /** @deprecated Add `subscribers_count` to your opt-in list (under `classes/SyncUser/methods/`) to use this. */
  readonly subscribersCount: number;
  /** @deprecated Add `DOLLAR_addr` to your opt-in list (under `classes/SyncUser/methods/`) to use this. */
  readonly $addr: number;
  /** @deprecated Add `DOLLAR_resetSharedPtr` to your opt-in list (under `classes/SyncUser/methods/`) to use this. */
  $resetSharedPtr(): void;
}
export class UserProfile {
  private brandForUserProfile;
  private constructor();
  /** @deprecated Add `name` to your opt-in list (under `classes/UserProfile/methods/`) to use this. */
  name(): undefined | string;
  /** @deprecated Add `email` to your opt-in list (under `classes/UserProfile/methods/`) to use this. */
  email(): undefined | string;
  /** @deprecated Add `picture_url` to your opt-in list (under `classes/UserProfile/methods/`) to use this. */
  pictureUrl(): undefined | string;
  /** @deprecated Add `first_name` to your opt-in list (under `classes/UserProfile/methods/`) to use this. */
  firstName(): undefined | string;
  /** @deprecated Add `last_name` to your opt-in list (under `classes/UserProfile/methods/`) to use this. */
  lastName(): undefined | string;
  /** @deprecated Add `gender` to your opt-in list (under `classes/UserProfile/methods/`) to use this. */
  gender(): undefined | string;
  /** @deprecated Add `birthday` to your opt-in list (under `classes/UserProfile/methods/`) to use this. */
  birthday(): undefined | string;
  /** @deprecated Add `min_age` to your opt-in list (under `classes/UserProfile/methods/`) to use this. */
  minAge(): undefined | string;
  /** @deprecated Add `max_age` to your opt-in list (under `classes/UserProfile/methods/`) to use this. */
  maxAge(): undefined | string;
  data(): Record<string, EJson>;
}
export class AppSubscriptionToken {
  private brandForAppSubscriptionToken;
  private constructor();
}
export class App {
  private brandForApp;
  private constructor();
  logInWithCredentials(credentials: AppCredentials): Promise<SyncUser>;
  /** @deprecated Add `log_out` to your opt-in list (under `classes/App/methods/`) to use this. */
  logOut(): Promise<void>;
  logOutUser(user: SyncUser): Promise<void>;
  refreshCustomData(user: SyncUser): Promise<void>;
  linkUser(user: SyncUser, credentials: Readonly<AppCredentials>): Promise<SyncUser>;
  switchUser(user: SyncUser): void;
  removeUser(user: SyncUser): Promise<void>;
  deleteUser(user: SyncUser): Promise<void>;
  usernamePasswordProviderClient(): UsernamePasswordProviderClient;
  userApiKeyProviderClient(): UserApiKeyProviderClient;
  pushNotificationClient(service_name: Readonly<string>): PushClient;
  subscribe(observer: () => void): AppSubscriptionToken;
  unsubscribe(token: AppSubscriptionToken): void;
  callFunction(
    user: Readonly<SyncUser>,
    name: string,
    args: EJson[],
    service_name: undefined | string,
  ): Promise<Readonly<EJson>>;
  makeStreamingRequest(user: SyncUser, name: string, args: EJson[], service_name: undefined | string): Request;
  /** @deprecated Add `update_base_url` to your opt-in list (under `classes/App/methods/`) to use this. */
  updateBaseUrl(base_url: undefined | string): Promise<void>;
  /** @deprecated Add `get_base_url` to your opt-in list (under `classes/App/methods/`) to use this. */
  getBaseUrl(): string;
  static getApp(mode: AppCacheMode, config: AppConfig_Relaxed, sync_client_config: SyncClientConfig_Relaxed): App;
  /** @deprecated Add `get_cached_app` to your opt-in list (under `classes/App/methods/`) to use this. */
  static getCachedApp(app_id: Readonly<string>): App;
  static clearCachedApps(): void;
  /** @deprecated Add `close_all_sync_sessions` to your opt-in list (under `classes/App/methods/`) to use this. */
  static closeAllSyncSessions(): void;
  readonly config: Readonly<AppConfig>;
  readonly currentUser: null | SyncUser;
  readonly allUsers: Array<SyncUser>;
  readonly syncManager: SyncManager;
  /** @deprecated Add `subscribers_count` to your opt-in list (under `classes/App/methods/`) to use this. */
  readonly subscribersCount: number;
  /** @deprecated Add `DOLLAR_addr` to your opt-in list (under `classes/App/methods/`) to use this. */
  readonly $addr: number;
  /** @deprecated Add `DOLLAR_resetSharedPtr` to your opt-in list (under `classes/App/methods/`) to use this. */
  $resetSharedPtr(): void;
}
export class WatchStream {
  private brandForWatchStream;
  private constructor();
  nextEvent(): Record<string, EJson>;
  static make(): WatchStream;
  readonly state: WatchStreamState;
  readonly error: AppError;
}
export class PushClient {
  private brandForPushClient;
  private constructor();
  registerDevice(registration_token: Readonly<string>, sync_user: Readonly<SyncUser>): Promise<void>;
  deregisterDevice(sync_user: Readonly<SyncUser>): Promise<void>;
}
export class UsernamePasswordProviderClient {
  private brandForUsernamePasswordProviderClient;
  private constructor();
  registerEmail(email: Readonly<string>, password: Readonly<string>): Promise<void>;
  retryCustomConfirmation(email: Readonly<string>): Promise<void>;
  confirmUser(token: Readonly<string>, token_id: Readonly<string>): Promise<void>;
  resendConfirmationEmail(email: Readonly<string>): Promise<void>;
  resetPassword(password: Readonly<string>, token: Readonly<string>, token_id: Readonly<string>): Promise<void>;
  sendResetPasswordEmail(email: Readonly<string>): Promise<void>;
  callResetPasswordFunction(
    email: Readonly<string>,
    password: Readonly<string>,
    args: Readonly<EJson[]>,
  ): Promise<void>;
}
export class UserApiKeyProviderClient {
  private brandForUserApiKeyProviderClient;
  private constructor();
  createApiKey(name: Readonly<string>, user: SyncUser): Promise<UserApiKey>;
  fetchApiKey(id: ObjectId, user: Readonly<SyncUser>): Promise<UserApiKey>;
  fetchApiKeys(user: Readonly<SyncUser>): Promise<Array<UserApiKey>>;
  deleteApiKey(id: ObjectId, user: Readonly<SyncUser>): Promise<void>;
  enableApiKey(id: ObjectId, user: Readonly<SyncUser>): Promise<void>;
  disableApiKey(id: ObjectId, user: Readonly<SyncUser>): Promise<void>;
}
export class LoggerFactory {
  private brandForLoggerFactory;
  private constructor();
}
export class SyncManager {
  private brandForSyncManager;
  private constructor();
  immediatelyRunFileActions(original_name: string): boolean;
  setSessionMultiplexing(allowed: boolean): void;
  setLogLevel(level: LoggerLevel): void;
  setLoggerFactory(factory: LoggerFactory): void;
  setUserAgent(user_agent: string): void;
  /** @deprecated Add `set_timeouts` to your opt-in list (under `classes/SyncManager/methods/`) to use this. */
  setTimeouts(timeouts: SyncClientTimeouts_Relaxed): void;
  reconnect(): void;
  /** @deprecated Add `wait_for_sessions_to_terminate` to your opt-in list (under `classes/SyncManager/methods/`) to use this. */
  waitForSessionsToTerminate(): void;
  pathForRealm(config: SyncConfig_Relaxed, custom_file_name: undefined | string): string;
  /** @deprecated Add `get_existing_active_session` to your opt-in list (under `classes/SyncManager/methods/`) to use this. */
  getExistingActiveSession(path: Readonly<string>): SyncSession;
  /** @deprecated Add `log_level` to your opt-in list (under `classes/SyncManager/methods/`) to use this. */
  readonly logLevel: LoggerLevel;
  readonly hasExistingSessions: boolean;
  /** @deprecated Add `DOLLAR_addr` to your opt-in list (under `classes/SyncManager/methods/`) to use this. */
  readonly $addr: number;
  /** @deprecated Add `DOLLAR_resetSharedPtr` to your opt-in list (under `classes/SyncManager/methods/`) to use this. */
  $resetSharedPtr(): void;
}
export class ThreadSafeReference {
  private brandForThreadSafeReference;
  private constructor();
}
export class AsyncOpenTask {
  private brandForAsyncOpenTask;
  private constructor();
  start(): Promise<ThreadSafeReference>;
  cancel(): void;
  registerDownloadProgressNotifier(callback: (transferred_bytes: Int64, transferrable_bytes: Int64) => void): Int64;
  /** @deprecated Add `unregister_download_progress_notifier` to your opt-in list (under `classes/AsyncOpenTask/methods/`) to use this. */
  unregisterDownloadProgressNotifier(token: Int64): void;
  /** @deprecated Add `DOLLAR_addr` to your opt-in list (under `classes/AsyncOpenTask/methods/`) to use this. */
  readonly $addr: number;
  $resetSharedPtr(): void;
}
export class SyncSession {
  private brandForSyncSession;
  private constructor();
  waitForUploadCompletion(): Promise<void>;
  waitForDownloadCompletion(): Promise<void>;
  registerProgressNotifier(
    callback: (transferred_bytes: Int64, transferrable_bytes: Int64) => void,
    direction: ProgressDirection,
    is_streaming: boolean,
  ): Int64;
  unregisterProgressNotifier(token: Int64): void;
  registerConnectionChangeCallback(
    callback: (old_state: SyncSessionConnectionState, new_state: SyncSessionConnectionState) => void,
  ): Int64;
  unregisterConnectionChangeCallback(token: Int64): void;
  reviveIfNeeded(): void;
  handleReconnect(): void;
  /** @deprecated Add `close` to your opt-in list (under `classes/SyncSession/methods/`) to use this. */
  close(): void;
  forceClose(): void;
  /** @deprecated Add `shutdown_and_wait` to your opt-in list (under `classes/SyncSession/methods/`) to use this. */
  shutdownAndWait(): void;
  /** @deprecated Add `update_configuration` to your opt-in list (under `classes/SyncSession/methods/`) to use this. */
  updateConfiguration(config: SyncConfig_Relaxed): void;
  readonly state: SyncSessionState;
  readonly connectionState: SyncSessionConnectionState;
  /** @deprecated Add `path` to your opt-in list (under `classes/SyncSession/methods/`) to use this. */
  readonly path: string;
  readonly user: SyncUser;
  readonly config: SyncConfig;
  readonly fullRealmUrl: undefined | string;
  /** @deprecated Add `DOLLAR_addr` to your opt-in list (under `classes/SyncSession/methods/`) to use this. */
  readonly $addr: number;
  $resetSharedPtr(): void;
}
export class SslVerifyCallback {
  private brandForSslVerifyCallback;
  private constructor();
}
export class SyncSubscriptionSet {
  private brandForSyncSubscriptionSet;
  protected constructor();
  makeMutableCopy(): MutableSyncSubscriptionSet;
  getStateChangeNotification(notify_when: SyncSubscriptionSetState): Promise<SyncSubscriptionSetState>;
  /** @deprecated Add `at` to your opt-in list (under `classes/SyncSubscriptionSet/methods/`) to use this. */
  at(index: number): Readonly<SyncSubscription>;
  findByName(name: string): null | Readonly<SyncSubscription>;
  findByQuery(query: Readonly<Query>): null | Readonly<SyncSubscription>;
  refresh(): void;
  readonly version: Int64;
  readonly state: SyncSubscriptionSetState;
  readonly errorStr: string;
  readonly size: number;
  [Symbol.iterator](): Iterator<Readonly<SyncSubscription>>;
}
export class MutableSyncSubscriptionSet extends SyncSubscriptionSet {
  private brandForMutableSyncSubscriptionSet;
  private constructor();
  clear(): void;
  insertOrAssignByName(name: string, query: Readonly<Query>): [Readonly<SyncSubscription>, boolean];
  insertOrAssignByQuery(query: Readonly<Query>): [Readonly<SyncSubscription>, boolean];
  eraseByName(name: string): boolean;
  eraseByQuery(query: Readonly<Query>): boolean;
  commit(): SyncSubscriptionSet;
}
export class Scheduler {
  private brandForScheduler;
  private constructor();
  /** @deprecated Add `invoke` to your opt-in list (under `classes/Scheduler/methods/`) to use this. */
  invoke(callback: () => void): void;
  /** @deprecated Add `is_on_thread` to your opt-in list (under `classes/Scheduler/methods/`) to use this. */
  isOnThread(): boolean;
  /** @deprecated Add `is_same_as` to your opt-in list (under `classes/Scheduler/methods/`) to use this. */
  isSameAs(other: Readonly<Scheduler>): boolean;
  /** @deprecated Add `can_invoke` to your opt-in list (under `classes/Scheduler/methods/`) to use this. */
  canInvoke(): boolean;
  /** @deprecated Add `make_frozen` to your opt-in list (under `classes/Scheduler/methods/`) to use this. */
  static makeFrozen(version: VersionId_Relaxed): Scheduler;
  /** @deprecated Add `make_default` to your opt-in list (under `classes/Scheduler/methods/`) to use this. */
  static makeDefault(): Scheduler;
  /** @deprecated Add `set_default_factory` to your opt-in list (under `classes/Scheduler/methods/`) to use this. */
  static setDefaultFactory(factory: () => Scheduler): void;
  /** @deprecated Add `DOLLAR_addr` to your opt-in list (under `classes/Scheduler/methods/`) to use this. */
  readonly $addr: number;
  /** @deprecated Add `DOLLAR_resetSharedPtr` to your opt-in list (under `classes/Scheduler/methods/`) to use this. */
  $resetSharedPtr(): void;
}
export class GenericNetworkTransport {
  private brandForGenericNetworkTransport;
  private constructor();
  /** @deprecated Add `send_request_to_server` to your opt-in list (under `classes/GenericNetworkTransport/methods/`) to use this. */
  sendRequestToServer(request: Request_Relaxed, completionBlock: (response: Readonly<Response>) => void): void;
  /** @deprecated Add `DOLLAR_addr` to your opt-in list (under `classes/GenericNetworkTransport/methods/`) to use this. */
  readonly $addr: number;
  /** @deprecated Add `DOLLAR_resetSharedPtr` to your opt-in list (under `classes/GenericNetworkTransport/methods/`) to use this. */
  $resetSharedPtr(): void;
}
export class JsPlatformHelpers {
  private brandForJsPlatformHelpers;
  private constructor();
  static setDefaultRealmFileDirectory(dir: string): void;
  static defaultRealmFileDirectory(): string;
  static ensureDirectoryExistsForFile(file: Readonly<string>): void;
  static copyBundledRealmFiles(): void;
  static removeRealmFilesFromDirectory(directory: Readonly<string>): void;
  static removeFile(path: Readonly<string>): void;
  static removeDirectory(path: Readonly<string>): void;
  static getCpuArch(): string;
}
export class WeakSyncSession {
  private brandForWeakSyncSession;
  private constructor();
  rawDereference(): null | SyncSession;
  static weakCopyOf(shared: SyncSession): WeakSyncSession;
}
