{"version":3,"sources":["../src/rpc/proto/databeat.gen.ts","../src/rpc/proto/index.ts","../src/index.ts"],"sourcesContent":["/* eslint-disable */\n// databeat v0.1.0 f99550b11883527a9ba7db8f8371c616a50f0dd3\n// --\n// Code generated by webrpc-gen@v0.18.6 with typescript generator. DO NOT EDIT.\n//\n// webrpc-gen -schema=databeat.ridl -target=typescript -client -out=./clients/databeat.gen.ts\n\n// WebRPC description and code-gen version\nexport const WebRPCVersion = \"v1\"\n\n// Schema version of your RIDL schema\nexport const WebRPCSchemaVersion = \"v0.1.0\"\n\n// Schema hash generated from your RIDL schema\nexport const WebRPCSchemaHash = \"f99550b11883527a9ba7db8f8371c616a50f0dd3\"\n\n//\n// Types\n//\n\n\nexport enum EventType {\n  INIT = 'INIT',\n  VIEW = 'VIEW',\n  REQUEST = 'REQUEST'\n}\n\nexport enum Ident {\n  ANONYMOUS = 'ANONYMOUS',\n  PRIVATE = 'PRIVATE',\n  USER = 'USER',\n  SERVICE = 'SERVICE'\n}\n\nexport interface Version {\n  webrpcVersion: string\n  schemaVersion: string\n  schemaHash: string\n  appVersion: string\n}\n\nexport interface RuntimeStatus {\n  healthOK: boolean\n  startTime: string\n  uptime: number\n  ver: string\n  branch: string\n  commitHash: string\n  sinkStats: SinkStats\n  pipelineStats: {[key: string]: any}\n  gcpPubSub: boolean\n}\n\nexport interface SinkStats {\n  numEvents: number\n  numFails: number\n}\n\nexport interface App {\n  uid: string\n  name: string\n  domains: Array<string>\n  disabled: boolean\n}\n\nexport interface Event {\n  event: string\n  projectId?: number\n  source?: string\n  ident?: number\n  userId?: string\n  sessionId?: string\n  device?: Device\n  countryCode?: string\n  props?: {[key: string]: string}\n  nums?: {[key: string]: number}\n}\n\nexport interface Device {\n  type: string\n  os: string\n  osVersion: string\n  browser: string\n  browserVersion: string\n}\n\nexport interface RawEvent {\n  app?: string\n  ts?: string\n  event: string\n  projectId?: number\n  source: string\n  ident?: number\n  userId?: string\n  sessionId?: string\n  countryCode?: string\n  deviceType?: string\n  deviceOs?: string\n  deviceOsVersion?: string\n  deviceBrowser?: string\n  deviceBrowserVersion?: string\n  props?: {[key: string]: string}\n  nums?: {[key: string]: number}\n}\n\nexport interface Databeat {\n  ping(headers?: object, signal?: AbortSignal): Promise<PingReturn>\n  version(headers?: object, signal?: AbortSignal): Promise<VersionReturn>\n  runtimeStatus(headers?: object, signal?: AbortSignal): Promise<RuntimeStatusReturn>\n  tick(args: TickArgs, headers?: object, signal?: AbortSignal): Promise<TickReturn>\n  rawEvents(args: RawEventsArgs, headers?: object, signal?: AbortSignal): Promise<RawEventsReturn>\n}\n\nexport interface PingArgs {\n}\n\nexport interface PingReturn {\n  status: boolean  \n}\nexport interface VersionArgs {\n}\n\nexport interface VersionReturn {\n  version: Version  \n}\nexport interface RuntimeStatusArgs {\n}\n\nexport interface RuntimeStatusReturn {\n  status: RuntimeStatus  \n}\nexport interface TickArgs {\n  events: Array<Event>\n}\n\nexport interface TickReturn {\n  ok: boolean  \n}\nexport interface RawEventsArgs {\n  events: Array<RawEvent>\n}\n\nexport interface RawEventsReturn {\n  ok: boolean  \n}\n\nexport interface DatabeatAdmin {\n  listApps(headers?: object, signal?: AbortSignal): Promise<ListAppsReturn>\n  createApp(args: CreateAppArgs, headers?: object, signal?: AbortSignal): Promise<CreateAppReturn>\n  getApp(args: GetAppArgs, headers?: object, signal?: AbortSignal): Promise<GetAppReturn>\n  updateApp(args: UpdateAppArgs, headers?: object, signal?: AbortSignal): Promise<UpdateAppReturn>\n  disableApp(args: DisableAppArgs, headers?: object, signal?: AbortSignal): Promise<DisableAppReturn>\n}\n\nexport interface ListAppsArgs {\n}\n\nexport interface ListAppsReturn {\n  apps: Array<App>  \n}\nexport interface CreateAppArgs {\n  uid: string\n  name: string\n  domains: Array<string>\n}\n\nexport interface CreateAppReturn {\n  app: App  \n}\nexport interface GetAppArgs {\n  appUid: string\n}\n\nexport interface GetAppReturn {\n  app: App  \n}\nexport interface UpdateAppArgs {\n  app: App\n}\n\nexport interface UpdateAppReturn {\n  updated: boolean  \n}\nexport interface DisableAppArgs {\n  appUid: string\n  disabled: boolean\n}\n\nexport interface DisableAppReturn {\n  disabled: boolean  \n}\n\n\n  \n//\n// Client\n//\nexport class Databeat implements Databeat {\n  protected hostname: string\n  protected fetch: Fetch\n  protected path = '/rpc/Databeat/'\n\n  constructor(hostname: string, fetch: Fetch) {\n    this.hostname = hostname\n    this.fetch = (input: RequestInfo, init?: RequestInit) => fetch(input, init)\n  }\n\n  private url(name: string): string {\n    return this.hostname + this.path + name\n  }\n  \n  ping = (headers?: object, signal?: AbortSignal): Promise<PingReturn> => {\n    return this.fetch(\n      this.url('Ping'),\n      createHTTPRequest({}, headers, signal)\n      ).then((res) => {\n      return buildResponse(res).then(_data => {\n        return {\n          status: <boolean>(_data.status),\n        }\n      })\n    }, (error) => {\n      throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error.message || ''}` })\n    })\n  }\n  \n  version = (headers?: object, signal?: AbortSignal): Promise<VersionReturn> => {\n    return this.fetch(\n      this.url('Version'),\n      createHTTPRequest({}, headers, signal)\n      ).then((res) => {\n      return buildResponse(res).then(_data => {\n        return {\n          version: <Version>(_data.version),\n        }\n      })\n    }, (error) => {\n      throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error.message || ''}` })\n    })\n  }\n  \n  runtimeStatus = (headers?: object, signal?: AbortSignal): Promise<RuntimeStatusReturn> => {\n    return this.fetch(\n      this.url('RuntimeStatus'),\n      createHTTPRequest({}, headers, signal)\n      ).then((res) => {\n      return buildResponse(res).then(_data => {\n        return {\n          status: <RuntimeStatus>(_data.status),\n        }\n      })\n    }, (error) => {\n      throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error.message || ''}` })\n    })\n  }\n  \n  tick = (args: TickArgs, headers?: object, signal?: AbortSignal): Promise<TickReturn> => {\n    return this.fetch(\n      this.url('Tick'),\n      createHTTPRequest(args, headers, signal)).then((res) => {\n      return buildResponse(res).then(_data => {\n        return {\n          ok: <boolean>(_data.ok),\n        }\n      })\n    }, (error) => {\n      throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error.message || ''}` })\n    })\n  }\n  \n  rawEvents = (args: RawEventsArgs, headers?: object, signal?: AbortSignal): Promise<RawEventsReturn> => {\n    return this.fetch(\n      this.url('RawEvents'),\n      createHTTPRequest(args, headers, signal)).then((res) => {\n      return buildResponse(res).then(_data => {\n        return {\n          ok: <boolean>(_data.ok),\n        }\n      })\n    }, (error) => {\n      throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error.message || ''}` })\n    })\n  }\n  \n}\nexport class DatabeatAdmin implements DatabeatAdmin {\n  protected hostname: string\n  protected fetch: Fetch\n  protected path = '/rpc/DatabeatAdmin/'\n\n  constructor(hostname: string, fetch: Fetch) {\n    this.hostname = hostname\n    this.fetch = (input: RequestInfo, init?: RequestInit) => fetch(input, init)\n  }\n\n  private url(name: string): string {\n    return this.hostname + this.path + name\n  }\n  \n  listApps = (headers?: object, signal?: AbortSignal): Promise<ListAppsReturn> => {\n    return this.fetch(\n      this.url('ListApps'),\n      createHTTPRequest({}, headers, signal)\n      ).then((res) => {\n      return buildResponse(res).then(_data => {\n        return {\n          apps: <Array<App>>(_data.apps),\n        }\n      })\n    }, (error) => {\n      throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error.message || ''}` })\n    })\n  }\n  \n  createApp = (args: CreateAppArgs, headers?: object, signal?: AbortSignal): Promise<CreateAppReturn> => {\n    return this.fetch(\n      this.url('CreateApp'),\n      createHTTPRequest(args, headers, signal)).then((res) => {\n      return buildResponse(res).then(_data => {\n        return {\n          app: <App>(_data.app),\n        }\n      })\n    }, (error) => {\n      throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error.message || ''}` })\n    })\n  }\n  \n  getApp = (args: GetAppArgs, headers?: object, signal?: AbortSignal): Promise<GetAppReturn> => {\n    return this.fetch(\n      this.url('GetApp'),\n      createHTTPRequest(args, headers, signal)).then((res) => {\n      return buildResponse(res).then(_data => {\n        return {\n          app: <App>(_data.app),\n        }\n      })\n    }, (error) => {\n      throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error.message || ''}` })\n    })\n  }\n  \n  updateApp = (args: UpdateAppArgs, headers?: object, signal?: AbortSignal): Promise<UpdateAppReturn> => {\n    return this.fetch(\n      this.url('UpdateApp'),\n      createHTTPRequest(args, headers, signal)).then((res) => {\n      return buildResponse(res).then(_data => {\n        return {\n          updated: <boolean>(_data.updated),\n        }\n      })\n    }, (error) => {\n      throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error.message || ''}` })\n    })\n  }\n  \n  disableApp = (args: DisableAppArgs, headers?: object, signal?: AbortSignal): Promise<DisableAppReturn> => {\n    return this.fetch(\n      this.url('DisableApp'),\n      createHTTPRequest(args, headers, signal)).then((res) => {\n      return buildResponse(res).then(_data => {\n        return {\n          disabled: <boolean>(_data.disabled),\n        }\n      })\n    }, (error) => {\n      throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error.message || ''}` })\n    })\n  }\n  \n}\n\n  const createHTTPRequest = (body: object = {}, headers: object = {}, signal: AbortSignal | null = null): object => {\n  return {\n    method: 'POST',\n    headers: { ...headers, 'Content-Type': 'application/json' },\n    body: JSON.stringify(body || {}),\n    signal\n  }\n}\n\nconst buildResponse = (res: Response): Promise<any> => {\n  return res.text().then(text => {\n    let data\n    try {\n      data = JSON.parse(text)\n    } catch(error) {\n      let message = ''\n      if (error instanceof Error)  {\n        message = error.message\n      }\n      throw WebrpcBadResponseError.new({\n        status: res.status,\n        cause: `JSON.parse(): ${message}: response text: ${text}`},\n      )\n    }\n    if (!res.ok) {\n      const code: number = (typeof data.code === 'number') ? data.code : 0\n      throw (webrpcErrorByCode[code] || WebrpcError).new(data)\n    }\n    return data\n  })\n}\n\n//\n// Errors\n//\n\nexport class WebrpcError extends Error {\n  name: string\n  code: number\n  message: string\n  status: number\n  cause?: string\n\n  /** @deprecated Use message instead of msg. Deprecated in webrpc v0.11.0. */\n  msg: string\n\n  constructor(name: string, code: number, message: string, status: number, cause?: string) {\n    super(message)\n    this.name = name || 'WebrpcError'\n    this.code = typeof code === 'number' ? code : 0\n    this.message = message || `endpoint error ${this.code}`\n    this.msg = this.message\n    this.status = typeof status === 'number' ? status : 0\n    this.cause = cause\n    Object.setPrototypeOf(this, WebrpcError.prototype)\n  }\n\n  static new(payload: any): WebrpcError {\n    return new this(payload.error, payload.code, payload.message || payload.msg, payload.status, payload.cause)\n  }\n}\n\n// Webrpc errors\n\nexport class WebrpcEndpointError extends WebrpcError {\n  constructor(\n    name: string = 'WebrpcEndpoint',\n    code: number = 0,\n    message: string = 'endpoint error',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, WebrpcEndpointError.prototype)\n  }\n}\n\nexport class WebrpcRequestFailedError extends WebrpcError {\n  constructor(\n    name: string = 'WebrpcRequestFailed',\n    code: number = -1,\n    message: string = 'request failed',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, WebrpcRequestFailedError.prototype)\n  }\n}\n\nexport class WebrpcBadRouteError extends WebrpcError {\n  constructor(\n    name: string = 'WebrpcBadRoute',\n    code: number = -2,\n    message: string = 'bad route',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, WebrpcBadRouteError.prototype)\n  }\n}\n\nexport class WebrpcBadMethodError extends WebrpcError {\n  constructor(\n    name: string = 'WebrpcBadMethod',\n    code: number = -3,\n    message: string = 'bad method',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, WebrpcBadMethodError.prototype)\n  }\n}\n\nexport class WebrpcBadRequestError extends WebrpcError {\n  constructor(\n    name: string = 'WebrpcBadRequest',\n    code: number = -4,\n    message: string = 'bad request',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, WebrpcBadRequestError.prototype)\n  }\n}\n\nexport class WebrpcBadResponseError extends WebrpcError {\n  constructor(\n    name: string = 'WebrpcBadResponse',\n    code: number = -5,\n    message: string = 'bad response',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, WebrpcBadResponseError.prototype)\n  }\n}\n\nexport class WebrpcServerPanicError extends WebrpcError {\n  constructor(\n    name: string = 'WebrpcServerPanic',\n    code: number = -6,\n    message: string = 'server panic',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, WebrpcServerPanicError.prototype)\n  }\n}\n\nexport class WebrpcInternalErrorError extends WebrpcError {\n  constructor(\n    name: string = 'WebrpcInternalError',\n    code: number = -7,\n    message: string = 'internal error',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, WebrpcInternalErrorError.prototype)\n  }\n}\n\nexport class WebrpcClientDisconnectedError extends WebrpcError {\n  constructor(\n    name: string = 'WebrpcClientDisconnected',\n    code: number = -8,\n    message: string = 'client disconnected',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, WebrpcClientDisconnectedError.prototype)\n  }\n}\n\nexport class WebrpcStreamLostError extends WebrpcError {\n  constructor(\n    name: string = 'WebrpcStreamLost',\n    code: number = -9,\n    message: string = 'stream lost',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, WebrpcStreamLostError.prototype)\n  }\n}\n\nexport class WebrpcStreamFinishedError extends WebrpcError {\n  constructor(\n    name: string = 'WebrpcStreamFinished',\n    code: number = -10,\n    message: string = 'stream finished',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, WebrpcStreamFinishedError.prototype)\n  }\n}\n\n\n// Schema errors\n\nexport class UnauthorizedError extends WebrpcError {\n  constructor(\n    name: string = 'Unauthorized',\n    code: number = 1000,\n    message: string = 'Unauthorized access',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, UnauthorizedError.prototype)\n  }\n}\n\nexport class PermissionDeniedError extends WebrpcError {\n  constructor(\n    name: string = 'PermissionDenied',\n    code: number = 2000,\n    message: string = 'Permission denied',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, PermissionDeniedError.prototype)\n  }\n}\n\nexport class SessionExpiredError extends WebrpcError {\n  constructor(\n    name: string = 'SessionExpired',\n    code: number = 2001,\n    message: string = 'Session expired',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, SessionExpiredError.prototype)\n  }\n}\n\nexport class NotFoundError extends WebrpcError {\n  constructor(\n    name: string = 'NotFound',\n    code: number = 3000,\n    message: string = 'Resource not found',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, NotFoundError.prototype)\n  }\n}\n\nexport class InvalidAppKeyError extends WebrpcError {\n  constructor(\n    name: string = 'InvalidAppKey',\n    code: number = 4000,\n    message: string = 'Invalid app key',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, InvalidAppKeyError.prototype)\n  }\n}\n\nexport class QueryFailedError extends WebrpcError {\n  constructor(\n    name: string = 'QueryFailed',\n    code: number = 4001,\n    message: string = 'DB query failed',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, QueryFailedError.prototype)\n  }\n}\n\nexport class InvalidProjectIdError extends WebrpcError {\n  constructor(\n    name: string = 'InvalidProjectId',\n    code: number = 4002,\n    message: string = 'Invalid project id',\n    status: number = 0,\n    cause?: string\n  ) {\n    super(name, code, message, status, cause)\n    Object.setPrototypeOf(this, InvalidProjectIdError.prototype)\n  }\n}\n\n\nexport enum errors {\n  WebrpcEndpoint = 'WebrpcEndpoint',\n  WebrpcRequestFailed = 'WebrpcRequestFailed',\n  WebrpcBadRoute = 'WebrpcBadRoute',\n  WebrpcBadMethod = 'WebrpcBadMethod',\n  WebrpcBadRequest = 'WebrpcBadRequest',\n  WebrpcBadResponse = 'WebrpcBadResponse',\n  WebrpcServerPanic = 'WebrpcServerPanic',\n  WebrpcInternalError = 'WebrpcInternalError',\n  WebrpcClientDisconnected = 'WebrpcClientDisconnected',\n  WebrpcStreamLost = 'WebrpcStreamLost',\n  WebrpcStreamFinished = 'WebrpcStreamFinished',\n  Unauthorized = 'Unauthorized',\n  PermissionDenied = 'PermissionDenied',\n  SessionExpired = 'SessionExpired',\n  NotFound = 'NotFound',\n  InvalidAppKey = 'InvalidAppKey',\n  QueryFailed = 'QueryFailed',\n  InvalidProjectId = 'InvalidProjectId',\n}\n\nconst webrpcErrorByCode: { [code: number]: any } = {\n  [0]: WebrpcEndpointError,\n  [-1]: WebrpcRequestFailedError,\n  [-2]: WebrpcBadRouteError,\n  [-3]: WebrpcBadMethodError,\n  [-4]: WebrpcBadRequestError,\n  [-5]: WebrpcBadResponseError,\n  [-6]: WebrpcServerPanicError,\n  [-7]: WebrpcInternalErrorError,\n  [-8]: WebrpcClientDisconnectedError,\n  [-9]: WebrpcStreamLostError,\n  [-10]: WebrpcStreamFinishedError,\n  [1000]: UnauthorizedError,\n  [2000]: PermissionDeniedError,\n  [2001]: SessionExpiredError,\n  [3000]: NotFoundError,\n  [4000]: InvalidAppKeyError,\n  [4001]: QueryFailedError,\n  [4002]: InvalidProjectIdError,\n}\n\nexport type Fetch = (input: RequestInfo, init?: RequestInit) => Promise<Response>\n\n","import { Databeat as DatabeatRpc } from './databeat.gen'\nexport type { EventType, Event, Device, RawEvent } from './databeat.gen'\n\nexport interface Auth {\n  jwt?: string\n  headers?: { [key: string]: string }\n}\n\nexport class DatabeatRpcClient extends DatabeatRpc {\n  private _globalFetch: any\n\n  constructor(hostname: string, public auth?: Auth) {\n    const globalFetch = globalThis.fetch.bind(globalThis)\n\n    super(hostname.endsWith('/') ? hostname.slice(0, -1) : hostname, globalFetch)\n\n    this._globalFetch = globalFetch\n    this.fetch = this._fetch\n  }\n\n  _fetch = (input: RequestInfo, init?: RequestInit): Promise<Response> => {\n    // automatically include jwt auth header to requests\n    // if its been set on the api client\n    if (this.auth) {\n      let headers: { [key: string]: any } = {}\n      if (this.auth.jwt?.length > 0) {\n        headers['Authorization'] = `BEARER ${this.auth.jwt}`\n      }\n\n      // set other custom auth headers\n      if (this.auth.headers) {\n        headers = { ...headers, ...this.auth.headers }\n      }\n\n      // before the request is made\n      init!.headers = { ...init!.headers, ...headers }\n    }\n\n    return this._globalFetch(input, init)\n  }\n}\n","import { DatabeatRpcClient, Auth, Event as DatabeatEvent, EventType } from './rpc/proto'\n\nexport type { Auth }\n\nimport { sha256 } from '@noble/hashes/sha256'\nimport { bytesToHex } from '@noble/hashes/utils'\n\nexport interface Event<K extends string = any> extends DatabeatEvent {\n  event: keyof typeof EventType | K\n}\n\n// Databeat tracker options. See defaults below.\n//\n// Common setups:\n//   a.) privacy preserving with user-tracking disabled. All user events\n//       will be sent as hashed user-ids on the client-side.\n//      - options: <defaultDatabeatOptions>, see below\n//\n//   b.) dual mode, privacy preserving + user-tracking, where privacy\n//       preserving mode is used but tracks user-ids if user has permitted\n//       it via `allowTracking(true)`.\n//       - options: { ..., userIdentTracking: true }\n//\n//   c.) classic / traditional tracking mode, user must permit or\n//       no events are sent.\n//       - options: { ..., strictMode: true }\n//\nexport interface DatabeatOptions {\n  // defaultEnabled will enable tracking by default. This field\n  // does not inform privacy preserving mode or not, see below.\n  //\n  // Default: true\n  defaultEnabled?: boolean\n\n  // project id related to the databeat events. This can be set\n  // at the options level and always used, of passed directly to an event.\n  projectId?: number\n\n  // privacy options of the user_id field to offer privacy-preserving\n  // tracking features. NOTE: there is an additional privacy-preserving\n  // parameter available on the databeat-server itself called `server_user_id_salt`\n  // which adds extra salt + hashes value before ingesting into the sink\n  // on the server side.\n  //\n  // Default: all privacy options are enabled.\n  privacy?: PrivacyOptions\n\n  // userIdentTracking will enable user tracking if the user has\n  // allowed it (see allowTracking() method). When disabled, the ident\n  // of a user will always remain private even if allowTracking(true)\n  // is called.\n  //\n  // Default: false\n  userIdentTracking?: boolean\n\n  // strictMode will require allowTracking(true) call before any events\n  // will be sent, including privacy preserving events.\n  //\n  // Default: false\n  strictMode?: boolean\n\n  // flushInterval is the time in milliseconds to wait before sending\n  // events to the sink server.\n  //\n  // Default: 500\n  flushInterval?: number\n\n  // noop will inform the tracker to skip sending events to the sink.\n  // this is similar to enable/disable, but its not persisted in storage.\n  // it also acts as an override and takes precedence over enable/disable.\n  noop?: boolean\n\n  // initProps is a function that returns a map of properties to be\n  // set on all events. This is useful for setting properties that\n  // are common to all events.\n  //\n  // Default: {}\n  initProps?: () => {}\n}\n\nexport interface PrivacyOptions {\n  userIdHash?: boolean\n  userAgentSalt?: boolean\n  extraSalt?: string\n}\n\nexport enum Ident {\n  ANON = 0,\n  PRIVATE = 1,\n  USER = 2,\n}\n\nconst MAX_QUEUE_SIZE = 150\n\nconst defaultDatabeatOptions: DatabeatOptions = {\n  defaultEnabled: true,\n  noop: false,\n  privacy: { userIdHash: true, userAgentSalt: false },\n  userIdentTracking: false,\n  strictMode: false,\n  flushInterval: 500,\n  initProps: () => {\n    return {}\n  },\n}\n\nexport class Databeat<K extends string> {\n  private rpc: DatabeatRpcClient\n  private auth: Auth\n  private options: DatabeatOptions\n  private enabled: boolean\n  private ident: Ident\n  private userId: string | null\n  private sessionId: string | null\n  private allowUserTracking: boolean\n  private projectId: number | null\n  private queue: Event<K>[]\n  private flushTimeout: NodeJS.Timeout | null\n  private defaultProps: {}\n  private dedupeIdentKey: string | null\n  private dedupeViewKey: string | null\n  private ts?: number\n\n  constructor(host: string, auth: Auth | string, options?: DatabeatOptions) {\n    if (typeof auth === 'string') {\n      this.auth = { jwt: auth }\n    } else {\n      this.auth = auth\n    }\n    this.rpc = new DatabeatRpcClient(host, this.auth)\n    this.options = defaultDatabeatOptions\n    if (options) {\n      this.options = {\n        defaultEnabled: options.defaultEnabled || defaultDatabeatOptions.defaultEnabled,\n        projectId: options.projectId || null,\n        privacy: options.privacy || defaultDatabeatOptions.privacy,\n        userIdentTracking: options.userIdentTracking || defaultDatabeatOptions.userIdentTracking,\n        strictMode: options.strictMode || defaultDatabeatOptions.strictMode,\n        flushInterval: options.flushInterval || defaultDatabeatOptions.flushInterval,\n        noop: options.noop || false,\n        initProps: options.initProps || defaultDatabeatOptions.initProps,\n      }\n    }\n    this.init()\n  }\n\n  // init is called on load by the constructor and also by reset().\n  private init() {\n    this.enabled = isEnabled(this.options.defaultEnabled, this.auth)\n    this.projectId = this.options.projectId || null\n    this.userId = null\n    this.sessionId = genSessionId()\n    this.queue = []\n    this.flushTimeout = null\n    this.defaultProps = { ...getDefaultProps(), ...this.options.initProps() }\n    this.identify()\n  }\n\n  // reset will reset the user_id and session_id details. Similar to a \"logout\" action.\n  reset(skipInit?: boolean) {\n    this.enabled = isEnabled(this.options.defaultEnabled, this.auth)\n    if (this.userId && !this.isAnon()) {\n      this.userId = null\n    }\n    this.ident = Ident.ANON\n    this.ts = setStorageVal({ on: this.enabled, id: this.userId, it: this.ident, ut: this.allowUserTracking })\n\n    if (skipInit === true) {\n      return\n    }\n    this.init()\n  }\n\n  // identify can be called to seed the userId, where the behaviour changes\n  // depending on privacy or strict modes. identify is also called on init,\n  // where we load the data from localStorage.\n  identify(userId?: string, options?: PrivacyOptions & { allowTracking?: boolean }) {\n    // skip method when used with node\n    if (!isBrowser()) return\n\n    // check if allow tracking option passed, which is a syntax sugar to calling\n    // allowTracking(..) method.\n    if (options && options.allowTracking !== undefined) {\n      this.allowTracking(options.allowTracking)\n    }\n\n    // attempt to find userId if one isn't provided\n    if (!userId) {\n      const val = getStorageVal()\n      if (val !== null && val.id !== null) {\n        this.userId = val.id\n        this.ident = val.it\n        this.allowUserTracking = val.ut\n\n        // migrate from earlier when `val.it` didn't exist\n        if (val.it === undefined) {\n          if (this.userId.startsWith('anon:')) {\n            this.ident = Ident.ANON\n          } else {\n            this.ident = Ident.PRIVATE\n          }\n          this.ts = setStorageVal({ on: this.enabled, id: this.userId, it: this.ident, ut: this.allowUserTracking })\n        } else {\n          this.ident = val.it\n        }\n      }\n    }\n\n    // update userId or gen new one\n    if (userId || this.userId === null) {\n      const v = genUserId(userId, this.allowUserTracking, this.options)\n      this.userId = v.userId\n      this.ident = v.ident\n      this.ts = setStorageVal({ on: this.enabled, id: this.userId, it: this.ident, ut: this.allowUserTracking })\n    }\n\n    // simple dedupe of consecutive calls to identify()\n    const dedupeIdentKey = `${this.userId}:${this.sessionId}`\n    if (this.dedupeIdentKey === dedupeIdentKey) return\n    this.dedupeIdentKey = dedupeIdentKey\n\n\n    // track init and flush it right away\n    this.track({ event: 'INIT', source: getPagePath(), props: this.defaultProps })\n\n    // flush queued events\n    // NOTE: we do not call this.trackView() at this point, as we expect the webapp to do so.\n    this.flush()\n  }\n\n  // allowTracking is used by strict mode to enable/disable tracking.\n  allowTracking(allowTracking: boolean) {\n    this.allowUserTracking = allowTracking\n    setStorageVal({ on: this.enabled, id: this.userId, it: this.ident, ut: this.allowUserTracking })\n\n    // in strict mode, we enable/disable tracking\n    if (this.options.strictMode) {\n      if (allowTracking) {\n        this.enable()\n      } else {\n        this.disable()\n      }\n    }\n  }\n\n  async track(events: Event<K> | Event<K>[], options?: { flush?: boolean }) {\n    if (isBrowser() && this.userId === null) {\n      throw new Error('databeat: init first')\n    }\n\n    if (Array.isArray(events)) {\n      for (let i = 0; i < events.length; i++) {\n        events[i].ident = this.ident\n        events[i].userId = this.userId\n        events[i].sessionId = this.sessionId\n        if (!events[i].projectId && this.projectId) {\n          events[i].projectId = this.projectId\n        }\n      }\n      this.queue.push(...events)\n    } else {\n      events.ident = this.ident\n      events.userId = this.userId\n      events.sessionId = this.sessionId\n      if (!events.projectId && this.projectId) {\n        events.projectId = this.projectId\n      }\n      this.queue.push(events)\n    }\n\n    // Limit the queue size\n    if (this.queue.length > MAX_QUEUE_SIZE) {\n      this.queue = this.queue.splice(this.queue.length - MAX_QUEUE_SIZE)\n    }\n\n    // flush\n    if (!this.enabled) return\n    if (options && options.flush) {\n      // flush events right away\n      await this.flush()\n    } else if (this.flushTimeout === null) {\n      // flush events in the future (which will auto-batch)\n      this.flushTimeout = setTimeout(() => {\n        this.flush()\n      }, this.options.flushInterval)\n    }\n  }\n\n  trackView(props: { [key: string]: string } = {}) {\n    const eventProps = { ...this.defaultProps, ...props }\n    const eventSource = getPagePath()\n\n    // simple dedupe -- skip if we're already on this page\n    // NOTE: even though we dedupe in the flush() method, we do it here in case of timing\n    // between flushes on the same page.\n    const pageKey = `${eventSource}:${JSON.stringify(eventProps)}:${this.userId}:${this.sessionId}`\n    if (this.dedupeViewKey === pageKey) return\n    this.dedupeViewKey = pageKey\n\n    // track the page view\n    this.track({ event: 'VIEW', source: eventSource, props: eventProps })\n  }\n\n  flush = async () => {\n    if (this.flushTimeout !== null) {\n      clearTimeout(this.flushTimeout)\n      this.flushTimeout = null\n    }\n\n    if (!this.enabled) return\n    if (this.options.noop) return\n    if (this.options.strictMode && !this.allowUserTracking) return\n    if (this.queue.length === 0) return\n\n    // dedupe the queue\n    const events = this.dedupedQueue()\n    this.queue = []\n\n    // send the events\n    try {\n      await this.rpc.tick({ events: events })\n    } catch (err) {\n      console.warn(`databeat flush failed: ${err}`)\n    }\n  }\n\n  isEnabled() {\n    return this.enabled\n  }\n\n  isAnon() {\n    return this.ident === Ident.ANON\n  }\n\n  getIdent() {\n    return this.ident\n  }\n\n  getUserId() {\n    return this.userId\n  }\n\n  getSessionId() {\n    return this.sessionId\n  }\n\n  getStorageTS(): number | undefined {\n    if (this.ts) {\n      return this.ts\n    }\n    const val = getStorageVal()\n    if (val === undefined || val === null || val.id === null) {\n      return undefined\n    }\n    this.ts = val.ts\n    return this.ts\n  }\n\n  enable() {\n    if (!isAuthEnabled(this.auth)) {\n      this.enabled = false\n      return\n    }\n    if (!isBrowser()) return\n    this.enabled = true\n    this.ts = setStorageVal({ on: this.enabled, id: this.userId, it: this.ident, ut: this.allowUserTracking })\n    this.identify()\n  }\n\n  disable() {\n    if (!isBrowser()) return\n    this.enabled = false\n    this.ts = setStorageVal({ on: this.enabled, id: this.userId, it: this.ident, ut: this.allowUserTracking })\n  }\n\n  private dedupedQueue = () => {\n    const uniqEvents = new Map()\n    for (let i = 0; i < this.queue.length; i++) {\n      const ev = this.queue[i]\n      const key = `${ev.event}:${ev.source}:${ev.userId}:${ev.sessionId}:${JSON.stringify(ev.props)}:${JSON.stringify(ev.nums)}`\n      if (!uniqEvents.has(key)) {\n        uniqEvents.set(key, ev)\n      }\n    }\n    return Array.from(uniqEvents.values())\n  }\n}\n\nexport const isBrowser = () => {\n  return (\n    typeof window === 'object' &&\n    typeof window.localStorage === 'object' &&\n    typeof window.localStorage.getItem === 'function' &&\n    typeof window.localStorage.setItem === 'function'\n  )\n}\n\nconst isEnabled = (defaultEnabled?: boolean, auth?: Auth) => {\n  if (!isAuthEnabled(auth)) {\n    return false\n  }\n  if (!isBrowser()) {\n    return true\n  }\n  const val = getStorageVal()\n  if (val === null) {\n    if (defaultEnabled !== null && defaultEnabled !== undefined) {\n      return defaultEnabled\n    } else {\n      return true\n    }\n  } else {\n    return val.on\n  }\n}\n\nconst isAuthEnabled = (auth?: Auth) => {\n  if (auth?.jwt?.length > 0) {\n    return true\n  }\n  if (auth?.headers && Object.keys(auth.headers).length > 0) {\n    return true\n  }\n  return false\n}\n\nconst getPagePath = () => {\n  try {\n    return window.location.pathname\n  } catch (err) {\n    return ''\n  }\n}\n\nconst getDefaultProps = () => {\n  if (!isBrowser()) return {}\n\n  const params = new URL(window.location.href).searchParams\n  const props = {}\n\n  props['origin'] = window.location.origin\n\n  if (params.get('ref') && params.get('ref') !== '') {\n    props['ref'] = params.get('ref') || ''\n  }\n  if (params.get('source') && params.get('source') !== '') {\n    props['source'] = params.get('source') || ''\n  }\n  if (params.get('utm_source') && params.get('utm_source') !== '') {\n    props['utmSource'] = params.get('utm_source') || ''\n  }\n  if (params.get('utm_campaign') && params.get('utm_campaign') !== '') {\n    props['utmCampaign'] = params.get('utm_campaign') || ''\n  }\n  if (params.get('utm_medium') && params.get('utm_medium') !== '') {\n    props['utmMedium'] = params.get('utm_medium') || ''\n  }\n  if (params.get('utm_content') && params.get('utm_content') !== '') {\n    props['utmContent'] = params.get('utm_content') || ''\n  }\n  if (params.get('utm_term') && params.get('utm_term') !== '') {\n    props['utmTerm'] = params.get('utm_term') || ''\n  }\n  if (document.referrer && document.referrer !== '') {\n    props['referrer'] = document.referrer\n  }\n  if (params.get('gclid') && params.get('gclid') !== '') {\n    props['gclid'] = params.get('gclid') || ''\n  }\n  if (params.get('wbraid') && params.get('wbraid') !== '') {\n    props['wbraid'] = params.get('wbraid') || ''\n  }\n\n  return props\n}\n\nconst storageKey = '_dbeat'\n\ninterface StorageVal {\n  on: boolean\n  id: string | null\n  it: Ident\n  ut: boolean | null\n  ts?: number\n}\n\nexport const getStorageVal = (): StorageVal | null => {\n  try {\n    return JSON.parse(window.localStorage.getItem(storageKey))\n  } catch (err) {\n    return null\n  }\n}\n\nconst setStorageVal = (val: StorageVal): number | undefined => {\n  try {\n    if (!val.ts) {\n      val.ts = Math.floor(Date.now() / 1000)\n    }\n    window.localStorage.setItem(storageKey, JSON.stringify(val))\n    return val.ts\n  } catch (err) {\n    return\n  }\n}\n\nexport const genUserId = (seed: string, allowUserTracking: boolean, options: DatabeatOptions) => {\n  // Generate user id based on random number\n  if (!seed || seed === null || seed === '') {\n    const id = Math.floor(Math.random() * 100000000000000)\n    return { userId: `${id}`, ident: Ident.ANON }\n  }\n\n  // in `userIdentTracking` mode when the user has allowed tracking,\n  // we can pass the user id as is, with ident of USER.\n  if (options.userIdentTracking && allowUserTracking) {\n    return { userId: seed, ident: Ident.USER }\n  }\n\n  // Generate user id based on hash of seed + optional extra salt\n  if (options.privacy.userIdHash === true || !options.userIdentTracking || !allowUserTracking) {\n    if (isBrowser() && options.privacy.userAgentSalt === true) {\n      seed = seed + ':' + navigator.userAgent\n    }\n    if (options.privacy.extraSalt && options.privacy.extraSalt.length > 0) {\n      seed = seed + ':' + options.privacy.extraSalt\n    }\n    return { userId: bytesToHex(sha256(seed)).substring(0, 50), ident: Ident.PRIVATE }\n  } else {\n    throw new Error('invalid configuration')\n  }\n}\n\nexport const genSessionId = () => {\n  const isSessionStorageAvail =\n    isBrowser() &&\n    typeof window.sessionStorage === 'object' &&\n    typeof window.sessionStorage.getItem === 'function' &&\n    typeof window.sessionStorage.setItem === 'function'\n\n  if (!isSessionStorageAvail) {\n    return genRandHex(16)\n  } else {\n    const sid = window.sessionStorage.getItem(storageKey)\n    if (!!sid && sid.length > 0) {\n      return sid\n    } else {\n      const sid = genRandHex(16)\n      window.sessionStorage.setItem(storageKey, sid)\n      return sid\n    }\n  }\n}\n\nconst genRandHex = (n: number) => {\n  let hexString = ''\n  for (let i = 0; i < n; i++) {\n    hexString += Math.floor(Math.random() * 16).toString(16)\n  }\n  return '0x' + hexString\n}\n\nif (typeof process === 'object' && process.version && process.version < 'v18') {\n  console.error(`ERROR! expecting node v18+ but your node version is reporting ${process.version}`)\n  if (process && process.exit) {\n    process.exit(1)\n  }\n}\n"],"mappings":"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","names":["Ident","Databeat","sid"]}