{"version":3,"file":"pocketbase.mjs","sources":["../src/auth/utils.ts","../src/auth/base.ts","../src/auth/index.ts","../src/utils.ts","../src/collection/utils.ts","../src/collection/index.ts","../src/collection/auth.ts","../src/realtime/index.ts","../src/client/index.ts"],"sourcesContent":["let atobPolyfill: Function;\nif (typeof atob === \"function\") {\n  atobPolyfill = atob;\n} else {\n  atobPolyfill = (input: any) => {\n    const chars =\n      \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n    let str = String(input).replace(/=+$/, \"\");\n    if (str.length % 4 == 1) {\n      throw new Error(\n        \"'atob' failed: The string to be decoded is not correctly encoded.\"\n      );\n    }\n\n    for (\n      var bc = 0, bs, buffer, idx = 0, output = \"\";\n      (buffer = str.charAt(idx++));\n      ~buffer && ((bs = bc % 4 ? (bs as any) * 64 + buffer : buffer), bc++ % 4)\n        ? (output += String.fromCharCode(255 & (bs >> ((-2 * bc) & 6))))\n        : 0\n    ) {\n      buffer = chars.indexOf(buffer);\n    }\n\n    return output;\n  };\n}\n\nexport function getTokenPayload(token: string): { [key: string]: any } {\n  if (token) {\n    try {\n      const encodedPayload = decodeURIComponent(\n        atobPolyfill(token.split(\".\")[1])\n          .split(\"\")\n          .map(function (c: string) {\n            return \"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2);\n          })\n          .join(\"\")\n      );\n\n      return JSON.parse(encodedPayload) || {};\n    } catch (e) {}\n  }\n\n  return {};\n}\n\nexport function isTokenExpired(\n  token: string,\n  expirationThreshold = 0\n): boolean {\n  let payload = getTokenPayload(token);\n\n  if (\n    Object.keys(payload).length > 0 &&\n    (!payload.exp || payload.exp - expirationThreshold > Date.now() / 1000)\n  ) {\n    return false;\n  }\n\n  return true;\n}\n\nconst fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\nexport interface ParseOptions {\n  decode?: (val: string) => string;\n}\n\nexport function cookieParse(\n  str: string,\n  options?: ParseOptions\n): { [key: string]: any } {\n  const result: { [key: string]: any } = {};\n\n  if (typeof str !== \"string\") {\n    return result;\n  }\n\n  const opt = Object.assign({}, options || {});\n  const decode = opt.decode || defaultDecode;\n\n  let index = 0;\n  while (index < str.length) {\n    const eqIdx = str.indexOf(\"=\", index);\n\n    if (eqIdx === -1) {\n      break;\n    }\n\n    let endIdx = str.indexOf(\";\", index);\n\n    if (endIdx === -1) {\n      endIdx = str.length;\n    } else if (endIdx < eqIdx) {\n      index = str.lastIndexOf(\";\", eqIdx - 1) + 1;\n      continue;\n    }\n\n    const key = str.slice(index, eqIdx).trim();\n\n    if (undefined === result[key]) {\n      let val = str.slice(eqIdx + 1, endIdx).trim();\n\n      if (val.charCodeAt(0) === 0x22) {\n        val = val.slice(1, -1);\n      }\n\n      try {\n        result[key] = decode(val);\n      } catch (_) {\n        result[key] = val;\n      }\n    }\n\n    index = endIdx + 1;\n  }\n\n  return result;\n}\n\nexport interface SerializeOptions {\n  encode?: (val: string | number | boolean) => string;\n  maxAge?: number;\n  domain?: string;\n  path?: string;\n  expires?: Date;\n  httpOnly?: boolean;\n  secure?: boolean;\n  priority?: string;\n  sameSite?: boolean | string;\n}\n\nexport function cookieSerialize(\n  name: string,\n  val: string,\n  options?: SerializeOptions\n): string {\n  const opt = Object.assign({}, options || {});\n  const encode = opt.encode || defaultEncode;\n\n  if (!fieldContentRegExp.test(name)) {\n    throw new TypeError(\"argument name is invalid\");\n  }\n\n  const value = encode(val);\n\n  if (value && !fieldContentRegExp.test(value)) {\n    throw new TypeError(\"argument val is invalid\");\n  }\n\n  let result = name + \"=\" + value;\n\n  if (opt.maxAge != null) {\n    const maxAge = opt.maxAge - 0;\n\n    if (isNaN(maxAge) || !isFinite(maxAge)) {\n      throw new TypeError(\"option maxAge is invalid\");\n    }\n\n    result += \"; Max-Age=\" + Math.floor(maxAge);\n  }\n\n  if (opt.domain) {\n    if (!fieldContentRegExp.test(opt.domain)) {\n      throw new TypeError(\"option domain is invalid\");\n    }\n\n    result += \"; Domain=\" + opt.domain;\n  }\n\n  if (opt.path) {\n    if (!fieldContentRegExp.test(opt.path)) {\n      throw new TypeError(\"option path is invalid\");\n    }\n\n    result += \"; Path=\" + opt.path;\n  }\n\n  if (opt.expires) {\n    if (!isDate(opt.expires) || isNaN(opt.expires.valueOf())) {\n      throw new TypeError(\"option expires is invalid\");\n    }\n\n    result += \"; Expires=\" + opt.expires.toUTCString();\n  }\n\n  if (opt.httpOnly) {\n    result += \"; HttpOnly\";\n  }\n\n  if (opt.secure) {\n    result += \"; Secure\";\n  }\n\n  if (opt.priority) {\n    const priority =\n      typeof opt.priority === \"string\"\n        ? opt.priority.toLowerCase()\n        : opt.priority;\n\n    switch (priority) {\n      case \"low\":\n        result += \"; Priority=Low\";\n        break;\n      case \"medium\":\n        result += \"; Priority=Medium\";\n        break;\n      case \"high\":\n        result += \"; Priority=High\";\n        break;\n      default:\n        throw new TypeError(\"option priority is invalid\");\n    }\n  }\n\n  if (opt.sameSite) {\n    const sameSite =\n      typeof opt.sameSite === \"string\"\n        ? opt.sameSite.toLowerCase()\n        : opt.sameSite;\n\n    switch (sameSite) {\n      case true:\n        result += \"; SameSite=Strict\";\n        break;\n      case \"lax\":\n        result += \"; SameSite=Lax\";\n        break;\n      case \"strict\":\n        result += \"; SameSite=Strict\";\n        break;\n      case \"none\":\n        result += \"; SameSite=None\";\n        break;\n      default:\n        throw new TypeError(\"option sameSite is invalid\");\n    }\n  }\n\n  return result;\n}\n\nfunction defaultDecode(val: string): string {\n  return val.indexOf(\"%\") !== -1 ? decodeURIComponent(val) : val;\n}\n\nfunction defaultEncode(val: string | number | boolean): string {\n  return encodeURIComponent(val);\n}\n\nfunction isDate(val: any): boolean {\n  return (\n    Object.prototype.toString.call(val) === \"[object Date]\" ||\n    val instanceof Date\n  );\n}\n","import { AuthData, AuthRecord, ReturnRecord } from \"../types\";\nimport {\n  cookieParse,\n  cookieSerialize,\n  getTokenPayload,\n  isTokenExpired,\n  SerializeOptions,\n} from \"./utils\";\n\nconst defaultCookieKey = \"pb_auth\";\n\nexport default class BaseAuth<T extends AuthRecord> {\n  protected baseToken: string = \"\";\n  protected baseRecord: T | null = null;\n\n  private _onChangeCallbacks: Array<(data: AuthData<T>) => {}> = [];\n\n  get token(): string {\n    return this.baseToken;\n  }\n\n  get record(): T | null {\n    return this.baseRecord;\n  }\n\n  /**\n   * Check if the current user is still valid (based on the JWT token of the user).\n   */\n  get isValid(): boolean {\n    return !isTokenExpired(this.token);\n  }\n\n  save(token: string, record: T | null): void {\n    this.baseToken = token || \"\";\n\n    if (record !== null && typeof record === \"object\") {\n      this.baseRecord = record;\n    } else {\n      this.baseRecord = null;\n    }\n\n    this.triggerChange();\n  }\n\n  clear(): void {\n    this.baseToken = \"\";\n    this.baseRecord = null;\n    this.triggerChange();\n  }\n\n  /**\n   * Load user from the provided cookie string.\n   * @param cookie - The cookie string.\n   * @param key - The cookie key.\n   */\n  loadFromCookie(cookie: string, key = defaultCookieKey): void {\n    const rawData = cookieParse(cookie || \"\")[key] || \"\";\n\n    let data: Partial<AuthData<T>> = {};\n    try {\n      data = JSON.parse(rawData);\n      if (\n        typeof data === null ||\n        typeof data !== \"object\" ||\n        Array.isArray(data)\n      ) {\n        data = {};\n      }\n    } catch (_) {}\n\n    this.save(data.token || \"\", (data.record as T) || null);\n  }\n\n  /**\n   * Export the current user to a cookie.\n   * @param options - Serializing options for the cookie\n   * @param key - The cookie key.\n   * @returns {string} The cookie string.\n   */\n  exportToCookie(options?: SerializeOptions, key = defaultCookieKey): string {\n    const defaultOptions: SerializeOptions = {\n      secure: true,\n      sameSite: true,\n      httpOnly: true,\n      path: \"/\",\n    };\n\n    const payload = getTokenPayload(this.token);\n    if (payload?.exp) {\n      defaultOptions.expires = new Date(payload.exp * 1000);\n    } else {\n      defaultOptions.expires = new Date(\"1970-01-01\");\n    }\n\n    options = Object.assign({}, defaultOptions, options);\n\n    const rawData: {\n      token: string;\n      record: Partial<T>;\n    } = {\n      token: this.token,\n      record: Object.assign({}, this.record) || null,\n    };\n\n    let result = cookieSerialize(key, JSON.stringify(rawData), options);\n\n    const resultLength =\n      typeof Blob !== \"undefined\" ? new Blob([result]).size : result.length;\n\n    if (rawData.record && resultLength > 4096) {\n      rawData.record = {\n        id: rawData.record.id,\n        email: rawData.record.email,\n      } as Partial<T>;\n      if (this.record !== null) {\n        rawData.record.username = this.record.username;\n        rawData.record.verified = this.record.verified;\n        rawData.record.collectionId = this.record.collectionId;\n      }\n      result = cookieSerialize(key, JSON.stringify(rawData), options);\n    }\n\n    return result;\n  }\n\n  /**\n   * Subscribe to auth changes with a callback function.\n   * @param callback - The callback function\n   * @param fireImmediately - If the function should be called immediately\n   * @returns A function you can use to unsubscribe from changes.\n   */\n  onChange(\n    callback: (data: Partial<AuthData<T>>) => any,\n    fireImmediately = false\n  ): () => void {\n    this._onChangeCallbacks.push(callback);\n\n    if (fireImmediately) {\n      callback({ token: this.token, record: this.record as ReturnRecord<T> });\n    }\n\n    return () => {\n      for (let i = this._onChangeCallbacks.length - 1; i >= 0; i--) {\n        if (this._onChangeCallbacks[i] == callback) {\n          delete this._onChangeCallbacks[i];\n          this._onChangeCallbacks.splice(i, 1);\n          return;\n        }\n      }\n    };\n  }\n\n  protected triggerChange(): void {\n    for (const callback of this._onChangeCallbacks) {\n      callback &&\n        callback({ token: this.token, record: this.record as ReturnRecord<T> });\n    }\n  }\n}\n","import { AuthRecord } from \"../types\";\nimport BaseAuth from \"./base\";\n\nexport default class Auth<T extends AuthRecord> extends BaseAuth<T> {\n  private storageFallback: { [key: string]: any } = {};\n  private storageKey: string;\n\n  /**\n   * New local auth instance.\n   * @constructor\n   */\n  constructor(storageKey = \"pocketbase_auth\") {\n    super();\n\n    this.storageKey = storageKey;\n  }\n\n  /**\n   * JWT of the current logged in user (returns empty string if not logged in).\n   * @readonly\n   */\n  get token(): string {\n    const data = this._storageGet(this.storageKey) || {};\n\n    return data.token || \"\";\n  }\n\n  /**\n   * Record of the current logged user (returns null if not logged in).\n   * @readonly\n   */\n  get record(): T | null {\n    const data = this._storageGet(this.storageKey) || {};\n\n    if (\n      data === null ||\n      typeof data !== \"object\" ||\n      data.record === null ||\n      typeof data.record !== \"object\"\n    ) {\n      return null;\n    }\n\n    return data.record;\n  }\n\n  /**\n   * Save new user in local storage.\n   * @param token - JWT token of the user.\n   * @param record - The user record.\n   */\n  save(token: string, record: T | null) {\n    this._storageSet(this.storageKey, {\n      token: token,\n      record: record,\n    });\n\n    super.save(token, record);\n  }\n\n  /**\n   * Clear the current user from local storage (or log out).\n   */\n  clear() {\n    this._storageRemove(this.storageKey);\n\n    super.clear();\n  }\n\n  private _storageGet(key: string): any {\n    if (typeof window !== \"undefined\" && window?.localStorage) {\n      const rawValue = window.localStorage.getItem(key) || \"\";\n      try {\n        return JSON.parse(rawValue);\n      } catch (e) {\n        return rawValue;\n      }\n    }\n    return this.storageFallback[key];\n  }\n\n  private _storageSet(key: string, value: any) {\n    if (typeof window !== \"undefined\" && window?.localStorage) {\n      let normalizedVal = value;\n      if (typeof value !== \"string\") {\n        normalizedVal = JSON.stringify(value);\n      }\n      window.localStorage.setItem(key, normalizedVal);\n    } else {\n      this.storageFallback[key] = value;\n    }\n  }\n\n  private _storageRemove(key: string) {\n    if (typeof window !== \"undefined\" && window?.localStorage) {\n      window.localStorage?.removeItem(key);\n    }\n\n    delete this.storageFallback[key];\n  }\n}\n","import { AxiosError } from \"axios\";\n\nexport class RequestError extends Error {\n  constructor(error: AxiosError) {\n    super(error.message);\n    this.name = \"RequestError\";\n    this.cause = (error.response?.data as any).data;\n  }\n}\n","import { BaseRecord, QueryParams } from \"../types\";\n\nexport function setQuery<T extends BaseRecord>(\n  query: QueryParams<T> | undefined,\n  searchParams: URLSearchParams\n) {\n  if (!query) return \"\";\n\n  let { sort, expand, filter, page, perPage } = query;\n\n  if (sort) {\n    let sortQuery = Object.keys(sort)\n      .map(\n        (key) => `${sort![key as keyof typeof sort] === \"+\" ? \"\" : \"-\"}${key}`\n      )\n      .join(\",\");\n    searchParams.append(\"sort\", sortQuery);\n  }\n\n  if (expand) {\n    searchParams.append(\"expand\", expand.join(\",\"));\n  }\n\n  if (filter) {\n    searchParams.append(\"filter\", `(${filter})`);\n  }\n\n  if (page || perPage) {\n    searchParams.append(\"page\", String(page));\n    searchParams.append(\"perPage\", String(perPage));\n  } else {\n    searchParams.append(\"page\", \"1\");\n    searchParams.append(\"perPage\", String(999));\n  }\n}\n","import axios from \"axios\";\nimport * as path from \"path-browserify\";\nimport Client from \"../client\";\nimport {\n  BaseRecord,\n  CreateParams,\n  Expand,\n  ListReturn,\n  QueryParams,\n  RealtimeResponse,\n  ReturnRecord,\n  UpdateParams,\n} from \"../types\";\nimport { RequestError } from \"../utils\";\nimport { setQuery } from \"./utils\";\n\n/**\n * @class Collection\n * @typedef {Collection}\n * @template T extends BaseRecord\n */\nexport default class Collection<T extends BaseRecord> {\n  protected readonly name: string;\n  protected readonly client: Client<any>;\n  protected readonly recordsUrl: string;\n\n  /**\n   * Instance of a collection from the database.\n   * @constructor\n   * @param {Client<any>} client - The PocketBase Client instance.\n   * @param {string} name - The name of the collection.\n   */\n  constructor(client: Client<any>, name: string) {\n    if (name.trim() === \"\") throw new Error(\"Name cannot be an empty string.\");\n    this.name = name;\n    this.client = client;\n    this.recordsUrl = path.join(\n      client.apiURL,\n      \"/collections\",\n      name,\n      \"/records\"\n    );\n  }\n\n  /**\n   * Get a paginated list with all the records from the collection.\n   * @async\n   * @param query - Query parameters for the request.\n   * @returns List with all records from the collection.\n   */\n  async getList(query?: QueryParams<T>) {\n    const apiURL = new URL(this.recordsUrl);\n    setQuery(query, apiURL.searchParams);\n    const res = await axios({\n      url: apiURL.toString(),\n      headers: {\n        Authorization: this.client.auth.token,\n      },\n    }).catch((err) => {\n      throw new RequestError(err);\n    });\n    const data = await res.data;\n    return data as ListReturn<T>;\n  }\n\n  /**\n   * Get a single record from the collection.\n   * @async\n   * @param id - ID of the record.\n   * @param [expand] - Auto expand record relations.\n   */\n  async get(id: string, expand?: Expand<T>) {\n    const apiURL = new URL(path.join(this.recordsUrl, id));\n    setQuery({ expand }, apiURL.searchParams);\n    const res = await axios({\n      url: apiURL.toString(),\n      headers: {\n        Authorization: this.client.auth.token,\n      },\n    }).catch((err) => {\n      throw new RequestError(err);\n    });\n    const data = await res.data;\n    return data as ReturnRecord<T>;\n  }\n\n  /**\n   * Create a record in the collection.\n   * @async\n   * @param data - Data for the record in `JSON` or `FormData` format.\n   * @param [expand] - Auto expand relations when returning the created record.\n   * @returns The record created.\n   */\n  async create(data: CreateParams<T> | FormData, expand?: Expand<T>) {\n    const apiURL = new URL(this.recordsUrl);\n    setQuery({ expand }, apiURL.searchParams);\n    const res = await axios({\n      url: apiURL.toString(),\n      method: \"POST\",\n      data: data,\n      headers: {\n        \"Content-Type\":\n          data instanceof FormData ? \"multipart/form-data\" : \"application/json\",\n        Authorization: this.client.auth.token,\n      },\n    }).catch((err) => {\n      throw new RequestError(err);\n    });\n    return res.data as ReturnRecord<T>;\n  }\n\n  /**\n   * Update a record in the collection.\n   * @async\n   * @param id - ID of the record you want to update.\n   * @param data - Fields you want to update in `JSON` or `FormData` format.\n   * @param expand - Auto expand relations when returning the updated record.\n   * @returns The updated record.\n   */\n  async update(\n    id: string,\n    data: UpdateParams<T> | FormData,\n    expand?: Expand<T>\n  ) {\n    const apiURL = new URL(path.join(this.recordsUrl, id));\n    setQuery({ expand }, apiURL.searchParams);\n    const res = await axios({\n      url: apiURL.toString(),\n      method: \"PATCH\",\n      data: data,\n      headers: {\n        \"Content-Type\":\n          data instanceof FormData ? \"multipart/form-data\" : \"application/json\",\n        Authorization: this.client.auth.token,\n      },\n    }).catch((err) => {\n      throw new RequestError(err);\n    });\n    return res.data as ReturnRecord<T>;\n  }\n\n  /**\n   * Delete a record from the collection.\n   * @async\n   * @param id - ID of the record you want to delete.\n   */\n  async delete(id: string) {\n    await axios({\n      url: new URL(path.join(this.recordsUrl, id)).toString(),\n      method: \"DELETE\",\n      headers: {\n        Authorization: this.client.auth.token,\n      },\n    }).catch((err) => {\n      throw new RequestError(err);\n    });\n  }\n\n  /**\n   * Subscribe to a topic.\n   * @async\n   * @param topic - The topic you want to subscribe to. (`*` for all records in the collection or the ID of the record you want to subscribe to)\n   * @param callback - The callback function you want to be called when an event occurs.\n   * @param keepAlive - If the realtime SSE instance should be kept alive after unsubscribing if there are no more callbacks existing. (default is `false`)\n   * @returns An unsubscribe function.\n   */\n  async subscribe(\n    topic: string,\n    callback: (data: RealtimeResponse<T>) => any,\n    keepAlive = false\n  ) {\n    if (topic === \"*\") {\n      return await this.client.realtime.subscribe(\n        this.name,\n        callback,\n        keepAlive\n      );\n    } else {\n      return await this.client.realtime.subscribe(\n        path.join(this.name, topic),\n        callback,\n        keepAlive\n      );\n    }\n  }\n\n  /**\n   * Unsubscribe from a topic/certain topics/all topics.\n   * @async\n   * @param topic - Topic(s) you want to unsubscribe from (`*` for all `*` subscriptions / `undefined` for all topics from the collection).\n   * @param keepAlive - If the realtime SSE instance should be kept alive after unsubscribing if there are no more callbacks existing. (default is `false`)\n   */\n  async unsubscribe(topic?: string, keepAlive = false) {\n    if (typeof topic === \"string\") {\n      if (topic === \"*\") {\n        return await this.client.realtime.unsubscribe(this.name, keepAlive);\n      } else {\n        return await this.client.realtime.unsubscribe(\n          path.join(this.name, topic),\n          keepAlive\n        );\n      }\n    } else if (typeof topic === \"undefined\") {\n      return await this.client.realtime.unsubscribe(this.name, keepAlive, true);\n    }\n  }\n}\n","import axios from \"axios\";\nimport * as path from \"path-browserify\";\nimport Collection from \".\";\nimport Client from \"../client\";\nimport {\n  AuthCreateParams,\n  AuthData,\n  AuthRecord,\n  AuthUpdateParams,\n  Expand,\n  ReturnRecord,\n} from \"../types\";\nimport { RequestError } from \"../utils\";\nimport { setQuery } from \"./utils\";\n\nexport default class AuthCollection<\n  T extends AuthRecord\n> extends Collection<T> {\n  protected readonly url: string;\n\n  /**\n   * Instance of an auth collection from the database.\n   * @constructor\n   * @param {Client<any>} client - The PocketBase Client instance.\n   * @param {string} name - The name of the collection.\n   */\n  constructor(client: Client<any>, name: string) {\n    super(client, name);\n    this.url = path.join(client.apiURL, \"/collections\", name);\n  }\n\n  /**\n   * Create an user in the collection.\n   * @async\n   * @param data - The data for the user in `JSON` of `FormData` format.\n   * @returns The user created.\n   */\n  async create(data: AuthCreateParams<T> | FormData) {\n    if (data instanceof FormData) {\n      if (!data.get(\"passwordConfirm\")) {\n        data.set(\"passwordConfirm\", data.get(\"password\")!);\n      }\n    } else {\n      if (!data.passwordConfirm) data.passwordConfirm = data.password;\n    }\n    const res = await axios({\n      url: this.recordsUrl,\n      method: \"POST\",\n      data: data,\n      headers: {\n        \"Content-Type\":\n          data instanceof FormData ? \"multipart/form-data\" : \"application/json\",\n        Authorization: this.client.auth.token,\n      },\n    }).catch((err) => {\n      throw new RequestError(err);\n    });\n    return res.data as ReturnRecord<T>;\n  }\n\n  async update(\n    id: string,\n    data: FormData | AuthUpdateParams<T>,\n    expand?: Expand<T>\n  ) {\n    const apiURL = new URL(path.join(this.recordsUrl, id));\n    setQuery({ expand }, apiURL.searchParams);\n    const res = await axios({\n      url: apiURL.toString(),\n      method: \"PATCH\",\n      data: data,\n      headers: {\n        \"Content-Type\":\n          data instanceof FormData ? \"multipart/form-data\" : \"application/json\",\n        Authorization: this.client.auth.token,\n      },\n    }).catch((err) => {\n      throw new RequestError(err);\n    });\n    return res.data as ReturnRecord<T>;\n  }\n\n  /**\n   * Authenticate using password.\n   * @async\n   * @param identity - The identity of the user (username or email).\n   * @param password - The password of the user.\n   * @returns The token and record of the user.\n   */\n  async authWithPassword(identity: string, password: string) {\n    const res = await axios({\n      url: new URL(path.join(this.url, \"auth-with-password\")).toString(),\n      method: \"POST\",\n      data: {\n        identity,\n        password,\n      },\n      headers: {\n        \"Content-Type\": \"application/json\",\n      },\n    }).catch((err) => {\n      throw new RequestError(err);\n    });\n    const data = res.data as AuthData<T>;\n    this.client.auth.save(data.token, data.record);\n    return data;\n  }\n\n  /**\n   * Refreshes the token and record of the current user.\n   * @async\n   * @returns The updated token and record of the user.\n   */\n  async authRefresh() {\n    const res = await axios({\n      url: new URL(path.join(this.url, \"auth-refresh\")).toString(),\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: this.client.auth.token,\n      },\n    }).catch((err) => {\n      throw new RequestError(err);\n    });\n    const data = res.data as AuthData<T>;\n    this.client.auth.save(data.token, data.record);\n    return data;\n  }\n}\n","import axios from \"axios\";\nimport { EventSourcePolyfill, NativeEventSource } from \"event-source-polyfill\";\nimport * as path from \"path-browserify\";\nimport Client from \"../client\";\nimport { AnyRecord, BaseRecord, RealtimeResponse } from \"../types\";\nimport { RequestError } from \"../utils\";\n\nconst EventSource = NativeEventSource || EventSourcePolyfill;\n\nexport default class Realtime {\n  private readonly client: Client<any>;\n  private realtimeInstance: EventSource | undefined;\n  private clientID: string | undefined;\n  private subscribedTopics: string[];\n  private subscribedCallbacks: {\n    topic: string;\n    callback: (data: MessageEvent) => any;\n  }[];\n\n  constructor(client: Client<any>) {\n    this.client = client;\n    this.subscribedTopics = [];\n    this.subscribedCallbacks = [];\n  }\n\n  private async updateTopics() {\n    await axios({\n      url: new URL(path.join(this.client.apiURL, \"realtime\")).toString(),\n      method: \"POST\",\n      data: {\n        clientId: this.clientID,\n        subscriptions: this.subscribedTopics,\n      },\n      headers: {\n        Authorization: this.client.auth.token,\n      },\n    }).catch((err) => {\n      throw new RequestError(err);\n    });\n  }\n\n  private async removeTopic(topic: string, matching = false) {\n    this.subscribedTopics = this.subscribedTopics.filter((value) => {\n      if (matching) {\n        return !new RegExp(`^${topic}/?([a-zA-Z0-9_-]+)?`, \"g\").test(value);\n      } else {\n        return value !== topic;\n      }\n    });\n    this.subscribedCallbacks\n      .filter((value) => {\n        if (matching) {\n          return new RegExp(`^${topic}/?([a-zA-Z0-9_-]+)?`, \"g\").test(\n            value.topic\n          );\n        } else {\n          return value.topic === topic;\n        }\n      })\n      .forEach((listener) => {\n        this.realtimeInstance?.removeEventListener(\n          listener.topic,\n          listener.callback\n        );\n      });\n    this.subscribedCallbacks = this.subscribedCallbacks.filter((value) => {\n      if (matching) {\n        return !new RegExp(`^${topic}/?([a-zA-Z0-9_-]+)?`, \"g\").test(\n          value.topic\n        );\n      } else {\n        return value.topic !== topic;\n      }\n    });\n  }\n\n  private async unsubscribeByTopicAndListener(\n    topic: string,\n    listener: (data: any) => any,\n    keepAlive = false\n  ) {\n    this.realtimeInstance?.removeEventListener(topic, listener);\n\n    this.subscribedCallbacks = this.subscribedCallbacks.filter((value) => {\n      return value.callback !== listener;\n    });\n\n    if (\n      this.subscribedCallbacks.filter((value) => {\n        value.topic === topic;\n      }).length === 0\n    ) {\n      this.subscribedTopics = this.subscribedTopics.filter(\n        (value) => value !== topic\n      );\n    }\n\n    if (this.subscribedCallbacks.length === 0 && !keepAlive) this.disconnect();\n  }\n\n  /**\n   * Initialize a realtime SSE connection.\n   */\n  async initialize() {\n    await new Promise<void>((resolve) => {\n      this.realtimeInstance = new EventSource(\n        new URL(path.join(this.client.apiURL, \"realtime\")).toString()\n      );\n\n      this.realtimeInstance.addEventListener(\"PB_CONNECT\", async (data) => {\n        this.clientID = JSON.parse(data.data).clientId;\n        await this.updateTopics();\n        resolve();\n      });\n    });\n  }\n\n  /**\n   * Disconnect from the realtime SSE connection (if exists).\n   */\n  disconnect() {\n    this.realtimeInstance?.close();\n    this.realtimeInstance = undefined;\n    this.clientID = undefined;\n    this.subscribedCallbacks = [];\n    this.subscribedTopics = [];\n  }\n\n  /**\n   * Subscribe to a database topic.\n   * @param topic - The topic you want to subscribe to.\n   * @param callback - The callback function you want to be called when an event occurs.\n   * @param keepAlive - If the realtime SSE instance should be kept alive after unsubscribing if there are no more callbacks existing. (default is `false`)\n   * @returns An unsubscribe function.\n   */\n  async subscribe<T extends BaseRecord = AnyRecord>(\n    topic: string,\n    callback: (data: RealtimeResponse<T>) => any,\n    keepAlive = false\n  ) {\n    if (!this.realtimeInstance) {\n      await this.initialize();\n    }\n\n    if (!this.subscribedTopics.includes(topic)) {\n      this.subscribedTopics.push(topic);\n    }\n\n    await this.updateTopics();\n\n    const listener = (data: MessageEvent) => {\n      callback(JSON.parse(data.data));\n    };\n\n    this.subscribedCallbacks.push({\n      topic,\n      callback: listener,\n    });\n\n    this.realtimeInstance?.addEventListener(topic, listener);\n\n    return async () => {\n      await this.unsubscribeByTopicAndListener(topic, listener, keepAlive);\n    };\n  }\n\n  /**\n   * Unsubscribe from a topic/certain topics/all topics.\n   * @param topics - Topic(s) you want to unsubscribe from (empty string/undefined or `*` for all topics).\n   * @param keepAlive - If the realtime SSE instance should be kept alive after unsubscribing if there are no more callbacks existing. (default is `false`)\n   * @param matching - If the topic should be unsubscribed from if it begins with the name provided. (default is `false`)\n   */\n  async unsubscribe(\n    topics?: string | string[],\n    keepAlive = false,\n    matching = false\n  ) {\n    if (typeof topics === \"undefined\" || topics === \"\" || topics === \"*\") {\n      this.subscribedCallbacks = [];\n      this.subscribedTopics = [];\n    } else if (typeof topics === \"string\") {\n      await this.removeTopic(topics, matching);\n    } else if (Array.isArray(topics)) {\n      for (let topic in topics) {\n        await this.removeTopic(topic, matching);\n      }\n    }\n\n    await this.updateTopics();\n\n    if (this.subscribedCallbacks.length === 0 && !keepAlive) this.disconnect();\n  }\n}\n","import * as path from \"path-browserify\";\nimport Auth from \"../auth\";\nimport Collection from \"../collection\";\nimport AuthCollection from \"../collection/auth\";\nimport Realtime from \"../realtime\";\nimport { AnyAuthRecord, AnyRecord, AuthRecord, BaseRecord } from \"../types\";\n\nexport default class Client<T extends AuthRecord> {\n  /**\n   * Base URL of the PocketBase instance.\n   */\n  readonly baseURL: string;\n\n  /**\n   * Base URL of the PocketBase API.\n   */\n  readonly apiURL: string;\n\n  /**\n   * Local auth instance for the PocketBase instance.\n   */\n  readonly auth: Auth<T>;\n\n  /**\n   * Realtime client instance.\n   */\n  readonly realtime: Realtime;\n\n  /**\n   * Create a new PocketBase client.\n   * @constructor\n   * @param {string} baseURL - Base URL of the PocketBase instance.\n   * @template T extends AuthRecord - Type of the default user record.\n   */\n  constructor(baseURL: string) {\n    this.baseURL = baseURL;\n    this.apiURL = path.join(baseURL, \"api\");\n    this.auth = new Auth<T>();\n    this.realtime = new Realtime(this);\n  }\n\n  /**\n   * Instance of a collection from the database.\n   * @param {string} name - The name of the collection.\n   * @template T extends BaseRecord - Type of the records inside the collection.\n   */\n  collection<T extends BaseRecord = AnyRecord>(name: string) {\n    return new Collection<T>(this, name);\n  }\n\n  /**\n   * Instance of an auth collection from the database.\n   * @param {string} name - The name of the collection.\n   * @template T extends AuthRecord - Type of the records inside the collection.\n   */\n  authCollection<T extends AuthRecord = AnyAuthRecord>(name: string) {\n    return new AuthCollection<T>(this, name);\n  }\n}\n"],"names":[],"mappings":"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"}