{"version":3,"sources":["../../../node_modules/.pnpm/@noble+hashes@1.5.0/node_modules/@noble/hashes/src/_assert.ts","../../../node_modules/.pnpm/@noble+hashes@1.5.0/node_modules/@noble/hashes/src/_u64.ts","../../../node_modules/.pnpm/@noble+hashes@1.5.0/node_modules/@noble/hashes/src/crypto.ts","../../../node_modules/.pnpm/@noble+hashes@1.5.0/node_modules/@noble/hashes/src/utils.ts","../../../node_modules/.pnpm/@noble+hashes@1.5.0/node_modules/@noble/hashes/src/sha3.ts","../../../node_modules/.pnpm/@orama+cuid2@2.2.3/node_modules/@orama/cuid2/src/index.js","../../../node_modules/.pnpm/@orama+cuid2@2.2.3/node_modules/@orama/cuid2/index.js","../src/index.ts","../src/client.ts","../../../node_modules/.pnpm/@orama+orama@3.0.1/node_modules/@orama/orama/src/components/tokenizer/languages.ts","../../../node_modules/.pnpm/@orama+orama@3.0.1/node_modules/@orama/orama/src/utils.ts","../../../node_modules/.pnpm/@orama+orama@3.0.1/node_modules/@orama/orama/src/errors.ts","../../../node_modules/.pnpm/@orama+orama@3.0.1/node_modules/@orama/orama/src/components/defaults.ts","../../../node_modules/.pnpm/@orama+orama@3.0.1/node_modules/@orama/orama/src/components/tokenizer/english-stemmer.ts","../package.json","../src/answerSession.ts","../src/constants.ts","../src/utils.ts","../src/cache.ts","../src/sendBeacon.ts","../src/collector.ts","../src/heartbeat.ts","../src/profile.ts","../src/manager/constants.ts","../src/manager/index-manager.ts","../src/manager/index.ts"],"sourcesContent":["function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`positive integer expected, not ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`boolean expected, not ${b}`);\n}\n\n// copied from utils\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!isBytes(b)) throw new Error('Uint8Array expected');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Uint8Array expected of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(h: Hash) {\n  if (typeof h !== 'function' || typeof h.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(h.outputLen);\n  number(h.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\n\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n","const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n: bigint, le = false) {\n  if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n  return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false) {\n  let Ah = new Uint32Array(lst.length);\n  let Al = new Uint32Array(lst.length);\n  for (let i = 0; i < lst.length; i++) {\n    const { h, l } = fromBig(lst[i], le);\n    [Ah[i], Al[i]] = [h, l];\n  }\n  return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number) => h >>> s;\nconst shrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number) => l;\nconst rotr32L = (h: number, _l: number) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number) => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah: number, Al: number, Bh: number, Bl: number) {\n  const l = (Al >>> 0) + (Bl >>> 0);\n  return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number) =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number) =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\n// prettier-ignore\nconst u64 = {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n","// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nexport const crypto =\n  typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nimport { bytes as abytes } from './_assert.js';\n// export { isBytes } from './_assert.js';\n// We can't reuse isBytes from _assert, because somehow this causes huge perf issues\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n// The rotate left (circular left shift) operation for uint32\nexport const rotl = (word: number, shift: number) =>\n  (word << shift) | ((word >>> (32 - shift)) >>> 0);\n\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// The byte swap operation for uint32\nexport const byteSwap = (word: number) =>\n  ((word << 24) & 0xff000000) |\n  ((word << 8) & 0xff0000) |\n  ((word >>> 8) & 0xff00) |\n  ((word >>> 24) & 0xff);\n// Conditionally byte swap if on a big-endian platform\nexport const byteSwapIfBE = isLE ? (n: number) => n : (n: number) => byteSwap(n);\n\n// In place byte swap for Uint32Array\nexport function byteSwap32(arr: Uint32Array) {\n  for (let i = 0; i < arr.length; i++) {\n    arr[i] = byteSwap(arr[i]);\n  }\n}\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  abytes(data);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\nconst toStr = {}.toString;\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\n  const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n  const tmp = hashCons();\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = () => hashCons();\n  return hashC;\n}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  // Legacy Node.js compatibility\n  if (crypto && typeof crypto.randomBytes === 'function') {\n    return crypto.randomBytes(bytesLength);\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n","import { bytes, exists, number, output } from './_assert.js';\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.js';\nimport {\n  Hash,\n  u32,\n  Input,\n  toBytes,\n  wrapConstructor,\n  wrapXOFConstructorWithOpts,\n  HashXOF,\n  isLE,\n  byteSwap32,\n} from './utils.js';\n\n// SHA3 (keccak) is based on a new design: basically, the internal state is bigger than output size.\n// It's called a sponge function.\n\n// Various per round constants calculations\nconst SHA3_PI: number[] = [];\nconst SHA3_ROTL: number[] = [];\nconst _SHA3_IOTA: bigint[] = [];\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nconst _7n = /* @__PURE__ */ BigInt(7);\nconst _256n = /* @__PURE__ */ BigInt(256);\nconst _0x71n = /* @__PURE__ */ BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n  // Pi\n  [x, y] = [y, (2 * x + 3 * y) % 5];\n  SHA3_PI.push(2 * (5 * y + x));\n  // Rotational\n  SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n  // Iota\n  let t = _0n;\n  for (let j = 0; j < 7; j++) {\n    R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n    if (R & _2n) t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n  }\n  _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ split(_SHA3_IOTA, true);\n\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h: number, l: number, s: number) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h: number, l: number, s: number) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s: Uint32Array, rounds: number = 24) {\n  const B = new Uint32Array(5 * 2);\n  // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n  for (let round = 24 - rounds; round < 24; round++) {\n    // Theta θ\n    for (let x = 0; x < 10; x++) B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n    for (let x = 0; x < 10; x += 2) {\n      const idx1 = (x + 8) % 10;\n      const idx0 = (x + 2) % 10;\n      const B0 = B[idx0];\n      const B1 = B[idx0 + 1];\n      const Th = rotlH(B0, B1, 1) ^ B[idx1];\n      const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n      for (let y = 0; y < 50; y += 10) {\n        s[x + y] ^= Th;\n        s[x + y + 1] ^= Tl;\n      }\n    }\n    // Rho (ρ) and Pi (π)\n    let curH = s[2];\n    let curL = s[3];\n    for (let t = 0; t < 24; t++) {\n      const shift = SHA3_ROTL[t];\n      const Th = rotlH(curH, curL, shift);\n      const Tl = rotlL(curH, curL, shift);\n      const PI = SHA3_PI[t];\n      curH = s[PI];\n      curL = s[PI + 1];\n      s[PI] = Th;\n      s[PI + 1] = Tl;\n    }\n    // Chi (χ)\n    for (let y = 0; y < 50; y += 10) {\n      for (let x = 0; x < 10; x++) B[x] = s[y + x];\n      for (let x = 0; x < 10; x++) s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n    }\n    // Iota (ι)\n    s[0] ^= SHA3_IOTA_H[round];\n    s[1] ^= SHA3_IOTA_L[round];\n  }\n  B.fill(0);\n}\n\nexport class Keccak extends Hash<Keccak> implements HashXOF<Keccak> {\n  protected state: Uint8Array;\n  protected pos = 0;\n  protected posOut = 0;\n  protected finished = false;\n  protected state32: Uint32Array;\n  protected destroyed = false;\n  // NOTE: we accept arguments in bytes instead of bits here.\n  constructor(\n    public blockLen: number,\n    public suffix: number,\n    public outputLen: number,\n    protected enableXOF = false,\n    protected rounds: number = 24\n  ) {\n    super();\n    // Can be passed from user as dkLen\n    number(outputLen);\n    // 1600 = 5x5 matrix of 64bit.  1600 bits === 200 bytes\n    if (0 >= this.blockLen || this.blockLen >= 200)\n      throw new Error('Sha3 supports only keccak-f1600 function');\n    this.state = new Uint8Array(200);\n    this.state32 = u32(this.state);\n  }\n  protected keccak() {\n    if (!isLE) byteSwap32(this.state32);\n    keccakP(this.state32, this.rounds);\n    if (!isLE) byteSwap32(this.state32);\n    this.posOut = 0;\n    this.pos = 0;\n  }\n  update(data: Input) {\n    exists(this);\n    const { blockLen, state } = this;\n    data = toBytes(data);\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      for (let i = 0; i < take; i++) state[this.pos++] ^= data[pos++];\n      if (this.pos === blockLen) this.keccak();\n    }\n    return this;\n  }\n  protected finish() {\n    if (this.finished) return;\n    this.finished = true;\n    const { state, suffix, pos, blockLen } = this;\n    // Do the padding\n    state[pos] ^= suffix;\n    if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n    state[blockLen - 1] ^= 0x80;\n    this.keccak();\n  }\n  protected writeInto(out: Uint8Array): Uint8Array {\n    exists(this, false);\n    bytes(out);\n    this.finish();\n    const bufferOut = this.state;\n    const { blockLen } = this;\n    for (let pos = 0, len = out.length; pos < len; ) {\n      if (this.posOut >= blockLen) this.keccak();\n      const take = Math.min(blockLen - this.posOut, len - pos);\n      out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n      this.posOut += take;\n      pos += take;\n    }\n    return out;\n  }\n  xofInto(out: Uint8Array): Uint8Array {\n    // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n    if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n    return this.writeInto(out);\n  }\n  xof(bytes: number): Uint8Array {\n    number(bytes);\n    return this.xofInto(new Uint8Array(bytes));\n  }\n  digestInto(out: Uint8Array) {\n    output(out, this);\n    if (this.finished) throw new Error('digest() was already called');\n    this.writeInto(out);\n    this.destroy();\n    return out;\n  }\n  digest() {\n    return this.digestInto(new Uint8Array(this.outputLen));\n  }\n  destroy() {\n    this.destroyed = true;\n    this.state.fill(0);\n  }\n  _cloneInto(to?: Keccak): Keccak {\n    const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n    to ||= new Keccak(blockLen, suffix, outputLen, enableXOF, rounds);\n    to.state32.set(this.state32);\n    to.pos = this.pos;\n    to.posOut = this.posOut;\n    to.finished = this.finished;\n    to.rounds = rounds;\n    // Suffix can change in cSHAKE\n    to.suffix = suffix;\n    to.outputLen = outputLen;\n    to.enableXOF = enableXOF;\n    to.destroyed = this.destroyed;\n    return to;\n  }\n}\n\nconst gen = (suffix: number, blockLen: number, outputLen: number) =>\n  wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\n\nexport const sha3_224 = /* @__PURE__ */ gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = /* @__PURE__ */ gen(0x06, 136, 256 / 8);\nexport const sha3_384 = /* @__PURE__ */ gen(0x06, 104, 384 / 8);\nexport const sha3_512 = /* @__PURE__ */ gen(0x06, 72, 512 / 8);\nexport const keccak_224 = /* @__PURE__ */ gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = /* @__PURE__ */ gen(0x01, 136, 256 / 8);\nexport const keccak_384 = /* @__PURE__ */ gen(0x01, 104, 384 / 8);\nexport const keccak_512 = /* @__PURE__ */ gen(0x01, 72, 512 / 8);\n\nexport type ShakeOpts = { dkLen?: number };\n\nconst genShake = (suffix: number, blockLen: number, outputLen: number) =>\n  wrapXOFConstructorWithOpts<HashXOF<Keccak>, ShakeOpts>(\n    (opts: ShakeOpts = {}) =>\n      new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true)\n  );\n\nexport const shake128 = /* @__PURE__ */ genShake(0x1f, 168, 128 / 8);\nexport const shake256 = /* @__PURE__ */ genShake(0x1f, 136, 256 / 8);\n","/* global global, window, module */\nconst { sha3_512: sha3 } = require(\"@noble/hashes/sha3\");\n\nconst defaultLength = 24;\nconst bigLength = 32;\n\nconst createEntropy = (length = 4, random = Math.random) => {\n  let entropy = \"\";\n\n  while (entropy.length < length) {\n    entropy = entropy + Math.floor(random() * 36).toString(36);\n  }\n  return entropy;\n};\n\n/*\n * Adapted from https://github.com/juanelas/bigint-conversion\n * MIT License Copyright (c) 2018 Juan Hernández Serrano\n */\nfunction bufToBigInt(buf) {\n  let bits = BigInt(8);\n\n  let value = BigInt(0);\n  for (const i of buf.values()) {\n    const bi = BigInt(i);\n    value = (value << bits) + bi;\n  }\n  return value;\n}\n\nconst hash = (input = \"\") => {\n  // Drop the first character because it will bias the histogram\n  // to the left.\n  return bufToBigInt(sha3(input)).toString(36).slice(1);\n};\n\nconst alphabet = Array.from({ length: 26 }, (x, i) =>\n  String.fromCharCode(i + 97)\n);\n\nconst randomLetter = (random) =>\n  alphabet[Math.floor(random() * alphabet.length)];\n\n/*\nThis is a fingerprint of the host environment. It is used to help\nprevent collisions when generating ids in a distributed system.\nIf no global object is available, you can pass in your own, or fall back\non a random string.\n*/\nconst createFingerprint = ({\n  globalObj = typeof global !== \"undefined\"\n    ? global\n    : typeof window !== \"undefined\"\n    ? window\n    : {},\n  random = Math.random,\n} = {}) => {\n  const globals = Object.keys(globalObj).toString();\n  const sourceString = globals.length\n    ? globals + createEntropy(bigLength, random)\n    : createEntropy(bigLength, random);\n\n  return hash(sourceString).substring(0, bigLength);\n};\n\nconst createCounter = (count) => () => {\n  return count++;\n};\n\n// ~22k hosts before 50% chance of initial counter collision\n// with a remaining counter range of 9.0e+15 in JavaScript.\nconst initialCountMax = 476782367;\n\nconst init = ({\n  // Fallback if the user does not pass in a CSPRNG. This should be OK\n  // because we don't rely solely on the random number generator for entropy.\n  // We also use the host fingerprint, current time, and a session counter.\n  random = Math.random,\n  counter = createCounter(Math.floor(random() * initialCountMax)),\n  length = defaultLength,\n  fingerprint = createFingerprint({ random }),\n} = {}) => {\n  return function cuid2() {\n    const firstLetter = randomLetter(random);\n\n    // If we're lucky, the `.toString(36)` calls may reduce hashing rounds\n    // by shortening the input to the hash function a little.\n    const time = Date.now().toString(36);\n    const count = counter().toString(36);\n\n    // The salt should be long enough to be globally unique across the full\n    // length of the hash. For simplicity, we use the same length as the\n    // intended id output.\n    const salt = createEntropy(length, random);\n    const hashInput = `${time + salt + count + fingerprint}`;\n\n    return `${firstLetter + hash(hashInput).substring(1, length)}`;\n  };\n};\n\nconst createId = init();\n\nconst isCuid = (id, { minLength = 2, maxLength = bigLength } = {}) => {\n  const length = id.length;\n  const regex = /^[a-z][0-9a-z]+$/;\n\n  try {\n    if (\n      typeof id === \"string\" &&\n      length >= minLength &&\n      length <= maxLength &&\n      regex.test(id)\n    )\n      return true;\n  } finally {\n  }\n\n  return false;\n};\n\nmodule.exports.getConstants = () => ({ defaultLength, bigLength });\nmodule.exports.init = init;\nmodule.exports.createId = createId;\nmodule.exports.bufToBigInt = bufToBigInt;\nmodule.exports.createCounter = createCounter;\nmodule.exports.createFingerprint = createFingerprint;\nmodule.exports.isCuid = isCuid;\n","const { createId, init, getConstants, isCuid } = require(\"./src/index\");\n\nmodule.exports.createId = createId;\nmodule.exports.init = init;\nmodule.exports.getConstants = getConstants;\nmodule.exports.isCuid = isCuid;\n","export * from './client.js'\nexport * from './manager/index.js'\nexport * from './answerSession.js'\nexport type * from './types.js'\n","import { createId } from '@orama/cuid2'\nimport type { AnyDocument, AnyOrama, InternalTypedDocument, Nullable, Results, SearchParams } from '@orama/orama'\nimport { formatElapsedTime } from '@orama/orama/components'\nimport type { InferenceType, Interaction, Message } from './answerSession.js'\nimport type { Endpoint, HeartBeatConfig, IOramaClient, IOramaClientMultiSearch, Method, OramaError, OramaInitResponse, Override } from './types.js'\n\nimport { version } from '../package.json'\nimport { AnswerSession } from './answerSession.js'\nimport { Cache } from './cache.js'\nimport { Collector } from './collector.js'\nimport * as CONST from './constants.js'\nimport { MULTI_INDEX_BASE } from './constants.js'\nimport { HeartBeat } from './heartbeat.js'\nimport { Profile } from './profile.js'\n\nexport interface SearchConfig {\n  abortController?: AbortController\n  abortSignal?: AbortSignal\n  fresh?: boolean\n  debounce?: number\n}\n\nexport type SearchMode = 'fulltext' | 'vector' | 'hybrid'\n\ntype AdditionalSearchParams = {\n  mode?: SearchMode\n  returning?: string[]\n  mergeResults?: boolean\n}\n\n// export type AnswerParams = {\n//   type: 'documentation'\n//   query: string\n//   messages: Array<{ role: 'user' | 'system'; content: string }>\n//   context: Results<any>['hits']\n// }\n\nexport type SortByClauseUnion = SortByClause | SortByClause[]\n\ntype Order = 'ASC' | 'DESC' | 'asc' | 'desc'\n\ntype SortByClause = {\n  property: string\n  order?: Order\n}\n\nexport type ClientSearchParams = Override<SearchParams<AnyOrama>, { sortBy?: SortByClauseUnion }> & AdditionalSearchParams\nexport type OramaClientSearchResult<M> = M extends true ? Results<AnyDocument> : Results<AnyDocument>[]\n\nexport type AnswerSessionParams = {\n  inferenceType?: InferenceType\n  initialMessages?: Message[]\n  userContext?: unknown\n  events?: {\n    onMessageChange?: (messages: Message[]) => void\n    onMessageLoading?: (receivingMessage: boolean) => void\n    onAnswerAborted?: (aborted: true) => void\n    onSourceChange?: <T = AnyDocument>(sources: Results<T>) => void\n    onQueryTranslated?: (query: SearchParams<AnyOrama>) => void\n    onRelatedQueries?: (relatedQueries: string[]) => void\n    onNewInteractionStarted?: (interactionId: string) => void\n    onStateChange?: (state: Interaction[]) => void\n  }\n  systemPrompts?: string[]\n}\n\nexport { AnswerSession, type Message }\n\nfunction isAbortController(signal: AbortSignal | AbortController | undefined): signal is AbortController {\n  return signal !== undefined && (signal as AbortController)?.signal !== undefined\n}\n\nexport class OramaClient<M extends boolean = true> {\n  private readonly id = createId()\n  private readonly api_key: string\n  private readonly endpoint: string\n  private readonly multiIndexSearch: boolean\n  private readonly mergeResults: M\n  private readonly multiIndexIndexes?: IOramaClientMultiSearch<M>['indexes']\n  private readonly answersApiBaseURL: string | undefined\n  private readonly collector?: Collector\n  private readonly cache?: Cache<OramaClientSearchResult<M>>\n  private readonly profile: Profile\n  private searchDebounceTimer?: any // NodeJS.Timer\n  private searchRequestCounter = 0\n  private blockSearchTillAuth = false\n\n  private heartbeat?: HeartBeat\n  private initPromise?: Promise<OramaInitResponse | null>\n\n  constructor(params: IOramaClient | IOramaClientMultiSearch<M>) {\n    //TODO: fix this once we can handle multi search telemetry\n    if ('indexes' in params) {\n      //this telemetry will be wrong\n      this.api_key = params.indexes[0].api_key\n      this.multiIndexIndexes = params.indexes\n\n      //check indexes for endpoint\n      const firstEndpointOrigin = new URL(params.indexes[0].endpoint).origin\n      if (params.indexes.some((i) => new URL(i.endpoint).origin !== firstEndpointOrigin)) {\n        throw new Error('All indexes must have the same endpoint origin')\n      }\n      this.endpoint = firstEndpointOrigin + MULTI_INDEX_BASE\n      this.multiIndexSearch = true\n      this.mergeResults = params.mergeResults ?? (true as M)\n    } else {\n      this.api_key = params.api_key\n      this.endpoint = params.endpoint\n      this.multiIndexSearch = false\n      //shouldn't matter for single results\n      this.mergeResults = true as M\n    }\n\n    this.answersApiBaseURL = params.answersApiBaseURL\n\n    // Enable profile tracking\n    this.profile = new Profile({ endpoint: this.endpoint, apiKey: this.api_key })\n\n    // Telemetry is enabled by default\n    if (params.telemetry !== false) {\n      const telementryConfig = {\n        id: this.id,\n        api_key: this.api_key,\n        flushInterval: params.telemetry?.flushInterval ?? CONST.DEFAULT_TELEMETRY_FLUSH_INTERVAL,\n        flushSize: params.telemetry?.flushSize ?? CONST.DEFAULT_TELEMETRY_FLUSH_SIZE\n      }\n      this.collector = Collector.create(telementryConfig, this.profile)\n    }\n\n    // Cache is enabled by default\n    if (params.cache !== false) {\n      const cacheParams = {}\n      this.cache = new Cache<OramaClientSearchResult<M>>(cacheParams)\n    }\n\n    this.init()\n  }\n\n  private customerUserToken: string | undefined = undefined\n  private searchToken: string | undefined = undefined\n  public setAuthToken(customerAuthToken: string | null) {\n    if (customerAuthToken === null) {\n      // unlogged user\n      this.customerUserToken = undefined\n      this.searchToken = undefined\n    } else {\n      this.customerUserToken = customerAuthToken\n      // forgot the previous search token\n      this.searchToken = undefined\n    }\n    // Re-do the init\n    this.init()\n  }\n\n  private onAuthTokenExpired?: (token: string) => void\n  public setOnAuthTokenExpired(onAuthTokenExpired: (token: string) => void) {\n    this.onAuthTokenExpired = onAuthTokenExpired\n  }\n\n  private addSearchResultsToCollector(searchResults: Nullable<OramaClientSearchResult<M>>, roundTripTime: number, query: ClientSearchParams, cached: boolean) {\n    if (this.collector) {\n      if (Array.isArray(searchResults)) {\n        for (const sr of searchResults) {\n          this.collector.add({\n            rawSearchString: query.term,\n            resultsCount: sr.hits?.length ?? 0,\n            roundTripTime,\n            query,\n            cached,\n            searchedAt: new Date(),\n            userId: this.profile.getUserId()\n          })\n        }\n      } else {\n        this.collector.add({\n          rawSearchString: query.term,\n          resultsCount: searchResults?.hits?.length ?? 0,\n          roundTripTime,\n          query,\n          cached,\n          searchedAt: new Date(),\n          userId: this.profile.getUserId()\n        })\n      }\n    }\n  }\n\n  public async search(query: ClientSearchParams, config?: SearchConfig): Promise<Nullable<OramaClientSearchResult<M>>>\n  public async search(\n    query: ClientSearchParams,\n    config?: SearchConfig\n  ): Promise<Nullable<OramaClientSearchResult<M>>> {\n    await this.initPromise\n\n    // Avoid perform search if the user is not authenticated yet\n    if (this.blockSearchTillAuth) {\n      console.warn('Search request blocked until user is authenticated')\n      return null\n    }\n\n    const currentRequestNumber = ++this.searchRequestCounter\n    const cacheKey = `search-${JSON.stringify(query)}`\n\n    let searchResults: Nullable<OramaClientSearchResult<M>> = null\n    let roundTripTime: number\n    let cached = false\n    const shouldUseCache = config?.fresh !== true && this.cache?.has(cacheKey)\n\n    const performSearch = async () => {\n      try {\n        const timeStart = Date.now()\n        if (this.multiIndexSearch) {\n          searchResults = await this.fetch<OramaClientSearchResult<M>>(\n            'multi_search',\n            'POST',\n            { q: { ...query, mergeResults: this.mergeResults }, sst: this.searchToken, indexes: this.multiIndexIndexes },\n            config?.abortController\n          )\n        } else {\n          searchResults = await this.fetch<OramaClientSearchResult<M>>('search', 'POST', { q: query, sst: this.searchToken }, config?.abortController)\n        }\n        const timeEnd = Date.now()\n        roundTripTime = timeEnd - timeStart\n        const elapsed = await formatElapsedTime(BigInt(timeEnd * CONST.MICROSECONDS_BASE - timeStart * CONST.MICROSECONDS_BASE))\n        if (!Array.isArray(searchResults)) {\n          searchResults.elapsed = elapsed\n        } else {\n          for (const sr of searchResults) {\n            sr.elapsed = elapsed\n          }\n        }\n        this.cache?.set(cacheKey, searchResults)\n      } catch (error: any) {\n        if (error.name !== 'AbortError') {\n          console.error('Search request failed', error)\n          throw error\n        }\n      }\n      this.addSearchResultsToCollector(searchResults, roundTripTime, query, cached)\n\n      return searchResults\n    }\n\n    if (shouldUseCache && this.cache) {\n      roundTripTime = 0\n      searchResults = this.cache.get(cacheKey) as OramaClientSearchResult<M>\n      cached = true\n      this.addSearchResultsToCollector(searchResults, roundTripTime, query, cached)\n    } else {\n      if (config?.debounce) {\n        return new Promise((resolve, reject) => {\n          clearTimeout(this.searchDebounceTimer)\n          this.searchDebounceTimer = setTimeout(async () => {\n            try {\n              await performSearch()\n              resolve(searchResults)\n            } catch (error) {\n              if ((error as any).name !== 'AbortError') {\n                console.error('Search request failed', error)\n                reject(error)\n              }\n            }\n          }, config?.debounce || 300)\n          if ('unref' in this.searchDebounceTimer) {\n            this.searchDebounceTimer.unref()\n          }\n        })\n      }\n      return performSearch()\n    }\n\n    if (currentRequestNumber === this.searchRequestCounter) {\n      return searchResults\n    }\n\n    return null\n  }\n\n  public async vectorSearch(query: ClientSearchParams, config?: SearchConfig): Promise<Pick<Results<AnyDocument>, 'hits' | 'elapsed'>> {\n    await this.initPromise\n\n    const cacheKey = `vectorSearch-${JSON.stringify(query)}`\n\n    let roundTripTime: number\n    let searchResults: Results<AnyDocument>\n    let cached = false\n\n    const shouldUseCache = config?.fresh !== true && this.cache?.has(cacheKey)\n    if (shouldUseCache === true && this.cache != null) {\n      roundTripTime = 0\n      searchResults = this.cache.get(cacheKey) as Results<AnyDocument>\n      cached = true\n    } else {\n      const timeStart = Date.now()\n      searchResults = await this.fetch<Results<AnyDocument>>('vector-search2', 'POST', { q: query }, config?.abortSignal ?? config?.abortController)\n      const timeEnd = Date.now()\n\n      searchResults.elapsed = await formatElapsedTime(BigInt(timeEnd * CONST.MICROSECONDS_BASE - timeStart * CONST.MICROSECONDS_BASE))\n      roundTripTime = timeEnd - timeStart\n\n      this.cache?.set(cacheKey, searchResults as OramaClientSearchResult<M>)\n    }\n\n    if (this.collector != null) {\n      this.collector.add({\n        rawSearchString: query.term,\n        resultsCount: searchResults.hits?.length ?? 0,\n        roundTripTime,\n        query,\n        cached,\n        searchedAt: new Date(),\n        userId: this.profile.getUserId()\n      })\n    }\n\n    return searchResults\n  }\n\n  public createAnswerSession(params?: AnswerSessionParams) {\n    return new AnswerSession({\n      inferenceType: params?.inferenceType || 'documentation',\n      initialMessages: params?.initialMessages || [],\n      oramaClient: this,\n      events: params?.events,\n      userContext: params?.userContext,\n      systemPrompts: params?.systemPrompts ?? []\n    })\n  }\n\n  public startHeartBeat(config: HeartBeatConfig): void {\n    this.heartbeat?.stop()\n    this.heartbeat = new HeartBeat({\n      ...config,\n      endpoint: `${this.endpoint}/health?api-key=${this.api_key}`\n    })\n    this.heartbeat.start()\n  }\n\n  public stopHeartBeat(): void {\n    this.heartbeat?.stop()\n  }\n\n  public async getPop(): Promise<string> {\n    const g = await this.initPromise\n    return g?.pop ?? ''\n  }\n\n  private expirationTimer: ReturnType<typeof setTimeout> | undefined\n  private init(): void {\n    let fetchParams: [Endpoint, Method, object?, AbortController?, Record<string, any>?] = [\n      'init',\n      'GET',\n      undefined,\n      undefined,\n      { token: this.customerUserToken }\n    ]\n\n    if (this.multiIndexSearch) {\n      fetchParams = ['init_multi_search', 'POST', { indexes: this.multiIndexIndexes }, undefined, { token: this.customerUserToken }]\n    }\n    this.initPromise = this.fetch<OramaInitResponse>(...fetchParams)\n      .then((b: OramaInitResponse) => {\n        this.collector?.setParams({\n          endpoint: b.collectUrl,\n          deploymentID: b.deploymentID,\n          index: b.index\n        })\n\n        this.profile?.setParams({\n          identifyUrl: b.collectUrl,\n          index: b.index\n        })\n\n        if (b.searchSession) {\n          if ('required' in b.searchSession && b.searchSession.required === true) {\n            this.blockSearchTillAuth = true\n          } else if ('token' in b.searchSession) {\n            const searchToken = b.searchSession.token\n            this.searchToken = searchToken\n            const maxAge = b.searchSession.maxAge\n            this.blockSearchTillAuth = false\n\n            if (this.expirationTimer) {\n              clearTimeout(this.expirationTimer)\n            }\n            this.expirationTimer = setTimeout(() => {\n              if (this.searchToken === searchToken) {\n                this.searchToken = undefined\n                this.blockSearchTillAuth = true\n                this.onAuthTokenExpired?.(searchToken)\n              }\n            }, maxAge * 1000)\n            if ('unref' in this.expirationTimer) {\n              this.expirationTimer.unref()\n            }\n          }\n        }\n\n        return b\n      })\n      .catch((err) => {\n        console.log(err)\n        return null\n      })\n  }\n\n  private async fetch<T = unknown>(\n    path: Endpoint,\n    method: Method,\n    body?: object,\n    abort?: AbortController | AbortSignal,\n    queryParams?: Record<string, string | undefined>\n  ): Promise<T> {\n    const abortSignal = isAbortController(abort) ? abort?.signal : abort\n    if (abortSignal?.aborted === true) {\n      throw new Error('Request aborted')\n    }\n\n    const requestOptions: RequestInit = {\n      method,\n      headers: {\n        'Content-Type': 'application/x-www-form-urlencoded'\n        // Unfortunatelly we can't send this headers otherwise we should pay CORS preflight request\n        // 'x-orama-instance-id': this.id,\n        // 'x-orama-version': version\n      },\n      signal: abortSignal\n    }\n\n    if (method === 'POST' && body !== undefined) {\n      const b = body as any\n      b.version = version\n      b.id = this.id\n      b.visitorId = this.profile.getUserId()\n\n      requestOptions.body = Object.entries(b)\n        .filter(([_, value]) => !!value)\n        .map(([key, value]) => `${key}=${encodeURIComponent(JSON.stringify(value))}`)\n        .join('&')\n    }\n\n    const url = new URL(`${this.endpoint}/${path}`)\n    if (!this.multiIndexSearch) {\n      url.searchParams.append('api-key', this.api_key)\n    }\n    if (queryParams) {\n      for (const [key, value] of Object.entries(queryParams)) {\n        if (value) {\n          url.searchParams.append(key, value)\n        }\n      }\n    }\n    const res: Response = await fetch(url, requestOptions)\n\n    if (!res.ok) {\n      const error = new Error() as OramaError\n      error.httpResponse = res\n      throw error\n    }\n\n    return await res.json()\n  }\n\n  /**\n   * Methods associated with profile tracking\n   */\n  public getIdentity(): string | undefined {\n    return this.profile.getIdentity()\n  }\n\n  public getUserId(): string {\n    return this.profile.getUserId()\n  }\n\n  public getAlias(): string | undefined {\n    return this.profile.getAlias()\n  }\n\n  public async identify(identity: string): Promise<void> {\n    if (this.initPromise === undefined) {\n      throw new Error('OramaClient not initialized')\n    }\n\n    await this.profile.identify(this.initPromise, identity)\n  }\n\n  public async alias(alias: string): Promise<void> {\n    if (this.initPromise === undefined) {\n      throw new Error('OramaClient not initialized')\n    }\n\n    await this.profile.alias(this.initPromise, alias)\n  }\n\n  public reset(): void {\n    this.profile.reset()\n  }\n}\n",null,null,null,null,null,"{\n  \"name\": \"@oramacloud/client\",\n  \"version\": \"2.1.4\",\n  \"description\": \"Orama SDK client for Node.js, Deno, and Browsers\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"main\": \"./dist/index.js\",\n  \"module\": \"./dist/index.js\",\n  \"types\": \"./dist/index.d.ts\",\n  \"runkitExampleFilename\": \"./example/runkit.js\",\n  \"exports\": {\n    \"types\": \"./dist/index.d.ts\",\n    \"browser\": {\n      \"import\": \"./dist/index.js\",\n      \"require\": \"./dist/index.global.js\"\n    },\n    \"import\": \"./dist/index.js\",\n    \"require\": \"./dist/index.cjs\",\n    \"default\": \"./dist/index.js\"\n  },\n  \"scripts\": {\n    \"watch\": \"tsup --config tsup.lib.js --watch src\",\n    \"build\": \"tsup --config tsup.lib.js\",\n    \"test\": \"glob -c \\\"node --import tsx --no-warnings --test\\\" \\\"./tests/**/*.test.ts\\\"\",\n    \"serve:example\": \"esbuild src/index.ts --bundle --outfile=example/out.js --format=esm --watch --servedir=example\"\n  },\n  \"keywords\": [\n    \"orama\",\n    \"search engine\",\n    \"sdk\"\n  ],\n  \"files\": [\n    \"dist\",\n    \"example/runkit.js\"\n  ],\n  \"author\": {\n    \"name\": \"Michele Riva\",\n    \"email\": \"michele.riva@oramasearch.com\",\n    \"url\": \"https://github.com/MicheleRiva\"\n  },\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"@orama/cuid2\": \"^2.2.3\",\n    \"@orama/orama\": \"^3.0.0\",\n    \"lodash\": \"^4.17.21\"\n  },\n  \"devDependencies\": {\n    \"@fastify/formbody\": \"^7.4.0\",\n    \"@types/lodash\": \"^4.14.202\",\n    \"@types/node\": \"^20.3.1\",\n    \"dotenv\": \"^16.3.1\",\n    \"esbuild\": \"0.18.5\",\n    \"fastify\": \"^4.19.2\",\n    \"glob\": \"^11.0.0\",\n    \"husky\": \"^8.0.3\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"ts-standard\": \"^12.0.2\",\n    \"tsup\": \"^8.3.0\",\n    \"tsx\": \"^4.7.0\",\n    \"typescript\": \"^5.1.3\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"ts-standard\": {\n    \"ignore\": [\n      \"dist\",\n      \"node_modules\"\n    ]\n  }\n}","import { createId } from '@orama/cuid2'\nimport type { AnyDocument, AnyOrama, Nullable, Results, SearchParams } from '@orama/orama'\nimport type { OramaClient } from './client.js'\nimport { ORAMA_ANSWER_ENDPOINT } from './constants.js'\nimport { parseSSE, serializeUserContext } from './utils.js'\n\nexport type Context = Results<AnyDocument>['hits']\n\nexport type Message = {\n  role: 'user' | 'assistant'\n  content: string\n}\n\nexport type InferenceType = 'documentation'\n\nexport type AnswerParams<M extends boolean, UserContext = unknown> = {\n  initialMessages: Message[]\n  inferenceType: InferenceType\n  oramaClient: OramaClient<M>\n  userContext?: UserContext\n  events?: {\n    onMessageChange?: (messages: Message[]) => void\n    onMessageLoading?: (receivingMessage: boolean) => void\n    onAnswerAborted?: (aborted: true) => void\n    onSourceChange?: <T = AnyDocument>(sources: Results<T>) => void\n    onQueryTranslated?: (query: SearchParams<AnyOrama>) => void\n    onRelatedQueries?: (relatedQueries: string[]) => void\n    onNewInteractionStarted?: (interactionId: string) => void\n    onStateChange?: (state: Interaction[]) => void\n    onInteractionDone?: (interaction: Interaction) => void\n  }\n  systemPrompts?: string[]\n}\n\nexport type Interaction<T = AnyDocument> = {\n  interactionId: string\n  query: string\n  response: string\n  relatedQueries: Nullable<string[]>\n  sources: Nullable<Results<T>>\n  translatedQuery: Nullable<SearchParams<AnyOrama>>\n  segment: Nullable<string>\n  trigger: Nullable<string>\n  aborted: boolean\n  loading: boolean\n  error: boolean\n  errorMessage: string | null\n}\n\nexport type AskParams = SearchParams<AnyOrama> & {\n  userData?: unknown\n  related?: {\n    howMany?: 1 | 2 | 3 | 4 | 5\n    format?: 'question' | 'query'\n  }\n}\n\nexport class AnswerSession<M extends boolean> {\n  private messages: Message[]\n  private inferenceType: InferenceType\n  private oramaClient: OramaClient<M>\n  private endpoint: string\n  private abortController?: AbortController\n  private events: AnswerParams<M>['events']\n  private userContext?: AnswerParams<M>['userContext']\n  private conversationID: string\n  private lastInteractionParams?: AskParams\n  public state: Interaction[] = []\n  private systemPrompts?: string[]\n\n  constructor(params: AnswerParams<M>) {\n    // @ts-expect-error - sorry again TypeScript :-)\n    const oaramaAnswerHostAddress = params.oramaClient.answersApiBaseURL || ORAMA_ANSWER_ENDPOINT\n\n    this.messages = params.initialMessages || []\n    this.inferenceType = params.inferenceType\n    this.oramaClient = params.oramaClient\n    // @ts-expect-error - sorry TypeScript\n    this.endpoint = `${oaramaAnswerHostAddress}/v1/answer?api-key=${this.oramaClient.api_key}`\n    this.events = params.events\n    this.conversationID = createId()\n    this.userContext = params.userContext\n  }\n\n  public async askStream(params: AskParams): Promise<AsyncGenerator<string>> {\n    this.messages.push({ role: 'user', content: params.term ?? '' })\n    return this.fetchAnswer(params)\n  }\n\n  public async ask(params: AskParams): Promise<string> {\n    const generator = await this.askStream(params)\n    let result = ''\n    for await (const message of generator) {\n      result = message\n    }\n\n    if (this.events?.onMessageChange) {\n      this.events.onMessageChange(this.messages)\n    }\n\n    return result\n  }\n\n  public getMessages(): Message[] {\n    return this.messages\n  }\n\n  public clearSession(): void {\n    this.messages = []\n    this.state = []\n\n    if (this.events?.onMessageChange) {\n      this.events.onMessageChange(this.messages)\n    }\n\n    if (this.events?.onStateChange) {\n      this.events.onStateChange(this.state)\n    }\n  }\n\n  public abortAnswer() {\n    if (!this.abortController) {\n      throw new Error('AbortController is not ready')\n    }\n\n    this.abortController.abort()\n    this.abortController = undefined\n    this.state[this.state.length - 1].aborted = true\n  }\n\n  public async regenerateLast({ stream = true } = {}): Promise<string | AsyncGenerator<string>> {\n    if (this.state.length === 0 || this.messages.length === 0) {\n      throw new Error('No messages to regenerate')\n    }\n\n    const isLastMessageAssistant = this.messages.at(-1)?.role === 'assistant'\n\n    if (!isLastMessageAssistant) {\n      throw new Error('Last message is not an assistant message')\n    }\n\n    this.messages.pop()\n    this.state.pop()\n\n    if (stream) {\n      return this.askStream(this.lastInteractionParams as AskParams)\n    }\n\n    return this.ask(this.lastInteractionParams as AskParams)\n  }\n\n  private addNewEmptyAssistantMessage(): void {\n    this.messages.push({ role: 'assistant', content: '' })\n  }\n\n  private async *fetchAnswer(params: AskParams): AsyncGenerator<string> {\n    this.abortController = new AbortController()\n    this.lastInteractionParams = params\n    const interactionId = createId()\n\n    let reader: ReadableStreamDefaultReader | null = null\n\n    const currentStateIndex = this.state.length\n\n    this.state.push({\n      interactionId,\n      query: params.term ?? '',\n      response: '',\n      relatedQueries: null,\n      sources: null,\n      translatedQuery: null,\n      segment: null,\n      trigger: null,\n      aborted: false,\n      loading: true,\n      error: false,\n      errorMessage: null\n    })\n\n    try {\n      if (this.events?.onNewInteractionStarted) {\n        this.events.onNewInteractionStarted(interactionId)\n      }\n\n      if (this.events?.onStateChange) {\n        this.events.onStateChange(this.state)\n      }\n\n      const requestBody = new URLSearchParams()\n      requestBody.append('type', this.inferenceType)\n      requestBody.append('messages', JSON.stringify(this.messages))\n      requestBody.append('query', params.term ?? '')\n      requestBody.append('conversationId', this.conversationID)\n      requestBody.append('userId', this.oramaClient.getUserId())\n      // @ts-expect-error - yeah it's private but we need it here\n      requestBody.append('endpoint', this.oramaClient.endpoint)\n      requestBody.append('searchParams', JSON.stringify(params))\n      requestBody.append('identity', this.oramaClient.getIdentity() ?? '')\n      requestBody.append('interactionId', interactionId)\n      requestBody.append('alias', this.oramaClient.getAlias() ?? '')\n\n      const systemPromptConfiguration = this.getSystemPromptConfiguration()\n      if (systemPromptConfiguration) {\n        requestBody.append('systemPrompts', JSON.stringify(systemPromptConfiguration))\n      }\n\n      if (this.userContext) {\n        requestBody.append('userContext', serializeUserContext(this.userContext))\n      }\n\n      if (params.userData) {\n        requestBody.append('userData', serializeUserContext(params.userData))\n      }\n\n      if (params.related) {\n        if (params.related?.howMany && params.related?.howMany > 5) {\n          throw new Error('Can generate at most 5 related queries')\n        }\n\n        requestBody.append('related', JSON.stringify({ enabled: true, howMany: params.related.howMany ?? 3, format: params.related.format ?? 'question' }))\n      }\n\n      const response = await fetch(this.endpoint, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/x-www-form-urlencoded'\n        },\n        body: requestBody.toString(),\n        signal: this.abortController.signal\n      })\n\n      if (!response.ok || !response.body) {\n        throw new Error(response.statusText)\n      }\n\n      reader = response.body.getReader()\n      const decoder = new TextDecoder()\n      const messageQueue: string[] = []\n      let buffer = ''\n\n      if (this.events?.onMessageLoading) {\n        this.events.onMessageLoading(true)\n      }\n\n      this.addNewEmptyAssistantMessage()\n\n      const lastMessage = this.messages.at(-1) as Message\n\n      while (true) {\n        const { value, done } = await reader.read()\n        if (done) break\n        buffer += decoder.decode(value, { stream: true })\n\n        // biome-ignore lint/suspicious/noImplicitAnyLet: <explanation>\n        let endOfMessageIndex\n\n        // biome-ignore lint/suspicious/noAssignInExpressions: this saves a variable allocation on each iteration\n        while ((endOfMessageIndex = buffer.indexOf('\\n\\n')) !== -1) {\n          const rawMessage = buffer.slice(0, endOfMessageIndex)\n          buffer = buffer.slice(endOfMessageIndex + 2)\n\n          try {\n            const event = parseSSE(rawMessage)\n            const parsedMessage = JSON.parse(event.data)\n\n            // MANAGE INCOMING SOURCES\n            if (parsedMessage.type === 'sources') {\n              this.state[currentStateIndex].sources = parsedMessage.message\n\n              if (this.events?.onSourceChange) {\n                this.events.onSourceChange(parsedMessage.message)\n              }\n\n              if (this.events?.onStateChange) {\n                this.events.onStateChange(this.state)\n              }\n\n              // MANAGE INCOMING TRANSLATED QUERY\n            } else if (parsedMessage.type === 'query-translated') {\n              this.state[currentStateIndex].translatedQuery = parsedMessage.message\n\n              if (this.events?.onQueryTranslated) {\n                this.events.onQueryTranslated(parsedMessage.message)\n              }\n\n              if (this.events?.onStateChange) {\n                this.events.onStateChange(this.state)\n              }\n\n              // MANAGE INCOMING METADATA\n            } else if (parsedMessage.type === 'conversation-metadata') {\n              const { segment, trigger } = parsedMessage.message\n              if (segment) {\n                this.state[currentStateIndex].segment = segment\n              }\n\n              if (trigger) {\n                this.state[currentStateIndex].trigger = trigger\n              }\n\n              if (this.events?.onStateChange) {\n                this.events.onStateChange(this.state)\n              }\n\n              // MANAGE INCOMING RELATED QUERIES\n            } else if (parsedMessage.type === 'related-queries') {\n              this.state[currentStateIndex].relatedQueries = parsedMessage.message\n\n              if (this.events?.onRelatedQueries) {\n                this.events.onRelatedQueries(parsedMessage.message)\n              }\n\n              if (this.events?.onStateChange) {\n                this.events.onStateChange(this.state)\n              }\n\n              // MANAGE INCOMING MESSAGE CHUNK\n            } else if (parsedMessage.type === 'text') {\n              messageQueue.push(parsedMessage.message)\n\n              // Process the message queue immediately, regardless of endOfBlock\n              while (messageQueue.length > 0) {\n                lastMessage.content += messageQueue.shift()\n                this.state[currentStateIndex].response = lastMessage.content\n\n                if (this.events?.onStateChange) {\n                  this.events.onStateChange(this.state)\n                }\n\n                if (this.events?.onMessageChange) {\n                  this.events.onMessageChange(this.messages)\n                }\n\n                yield lastMessage.content\n              }\n\n              // ALL OTHER CASES\n            } else {\n              // https://shorturl.at/PlUKm\n            }\n          } catch (e) {\n            console.error('Error parsing SSE event:', e)\n            console.error('Raw message:', rawMessage)\n          }\n        }\n      }\n    } catch (err: any) {\n      if (err.name === 'AbortError') {\n        this.state[currentStateIndex].aborted = true\n\n        if (this.events?.onAnswerAborted) {\n          this.events.onAnswerAborted(true)\n        }\n      } else {\n        this.state[currentStateIndex].error = true\n        this.state[currentStateIndex].errorMessage = err.message ?? 'Unknown error'\n        throw err\n      }\n    } finally {\n      reader?.releaseLock()\n      this.state[currentStateIndex].loading = false\n\n      if (this.events?.onStateChange) {\n        this.events.onStateChange(this.state)\n      }\n\n      if (this.events?.onInteractionDone) {\n        this.events.onInteractionDone(this.state[currentStateIndex])\n      }\n\n      if (this.events?.onMessageLoading) {\n        this.events.onMessageLoading(false)\n      }\n    }\n  }\n\n  /**\n   * Methods associated with custom system prompts\n   */\n  public setSystemPromptConfiguration(config: { systemPrompts: string[] }) {\n    if (Array.isArray(config.systemPrompts)) {\n      if (!config.systemPrompts.every((prompt) => typeof prompt === 'string')) {\n        throw new Error('Invalid system prompt configuration')\n      }\n\n      this.systemPrompts = config.systemPrompts\n    }\n\n    return this\n  }\n\n  public getSystemPromptConfiguration(): string[] | undefined {\n    return this.systemPrompts\n  }\n}\n","export const MICROSECONDS_BASE = 1_000_000\n\nexport const DEFAULT_TELEMETRY_FLUSH_INTERVAL = 5000\n\nexport const DEFAULT_TELEMETRY_FLUSH_SIZE = 25\n\nexport const ORAMA_ANSWER_ENDPOINT = 'https://answer.api.orama.com'\n\nexport const MULTI_INDEX_BASE = '/v1/indexes'\n\nexport const LOCAL_STORAGE_USER_ID_KEY = 'orama_user_id'\nexport const LOCAL_STORAGE_SERVER_SIDE_SESSION_KEY = 'server-side-session'\n","export const hasLocalStorage = typeof localStorage !== 'undefined'\n\ntype SSESourcePayload = {\n  type: 'sources'\n  message: object\n}\n\ntype SSETextStreamPayload = {\n  type: 'text'\n  message: string\n  endOfBlock: boolean\n}\n\ntype SSEParsedPayload = SSESourcePayload | SSETextStreamPayload\n\ntype SSEPayload = {\n  data: string\n  event: string\n}\n\nexport function throttle(func: (...args: any[]) => any, limit: number) {\n  let inThrottle: boolean\n  return function (...args: any[]) {\n    if (!inThrottle) {\n      func.apply(this, args)\n      inThrottle = true\n      // biome-ignore lint/suspicious/noAssignInExpressions: saves variable declaration\n      setTimeout(() => (inThrottle = false), limit)\n    }\n  }\n}\n\nexport function debounce(func: (...args: any[]) => any, delay: number) {\n  let debounceTimer: NodeJS.Timeout\n  return function (...args: any[]) {\n    clearTimeout(debounceTimer)\n    debounceTimer = setTimeout(() => func.apply(this, args), delay)\n  }\n}\n\nexport function parseSSE(input: string): SSEPayload {\n  const [event, ...data] = input.split('\\n')\n  const eventData = data.join('\\n').replace('data: ', '')\n\n  return {\n    event: event.replace('event: ', ''),\n    data: eventData\n  }\n}\n\nexport function serializeUserContext(userContext: unknown): string {\n  if (typeof userContext === 'object') {\n    return JSON.stringify(userContext)\n  }\n\n  return `${userContext}`\n}\n","import type { CacheConfig, Optional } from './types.js'\n\ntype CacheMap<T = unknown> = Map<string, T>\n\nexport class Cache<V = unknown> {\n  private readonly cache: CacheMap<V>\n  private readonly config: CacheConstructorParams\n\n  constructor(config: CacheConstructorParams) {\n    this.cache = new Map()\n    this.config = config\n  }\n\n  public set(key: string, value: V): void {\n    this.cache.set(key, value)\n  }\n\n  public get(key: string): Optional<V> {\n    return this.cache.get(key)\n  }\n\n  public has(key: string): boolean {\n    return this.cache.has(key)\n  }\n\n  public delete(key: string): boolean {\n    return this.cache.delete(key)\n  }\n\n  public clear(): void {\n    this.cache.clear()\n  }\n\n  public size(): number {\n    return this.cache.size\n  }\n}\n\nexport interface CacheConstructorParams extends CacheConfig {}\n","export default function sendBeacon(endpoint: string, body?: string): Promise<Response> | undefined {\n  if (typeof navigator !== 'undefined') {\n    if (typeof navigator.sendBeacon !== 'undefined') {\n      navigator.sendBeacon(endpoint, body)\n    }\n    return\n  }\n\n  fetch(endpoint, {\n    method: 'POST',\n    body,\n    headers: {\n      'Content-Type': 'application/json'\n    }\n  }).then(\n    () => {},\n    (e) => console.log(e)\n  )\n}\n","import pkg from '../package.json'\nimport type { Profile } from './profile.js'\nimport sendBeacon from './sendBeacon.js'\nimport type { ICollector, SearchEvent, TelemetryConfig } from './types.js'\n\ntype Data = any[]\n\nexport class Collector {\n  private data: Data\n  private params?: ICollector\n  private readonly config: CollectorConstructor\n  private readonly profile: Profile\n\n  private constructor(config: CollectorConstructor, profile: Profile) {\n    this.data = []\n    this.config = config\n    this.profile = profile\n  }\n\n  public setParams(params: ICollector): void {\n    this.params = params\n  }\n\n  public static create(config: CollectorConstructor, profile: Profile): Collector {\n    const collector = new Collector(config, profile)\n    collector.start()\n    return collector\n  }\n\n  public add(data: SearchEvent): void {\n    this.data.push({\n      rawSearchString: data.rawSearchString,\n      query: data.query,\n      resultsCount: data.resultsCount,\n      roundTripTime: data.roundTripTime,\n      searchedAt: data.searchedAt,\n      userId: this.profile.getUserId(),\n      identity: this.profile.getIdentity(),\n      alias: this.profile.getAlias(),\n      // The referer is different for every event:\n      // the user can search in different pages of the website\n      // and the referer will be different for each page\n      referer: typeof location !== 'undefined' ? location.toString() : undefined\n    })\n\n    if (this.params != null && this.data.length >= this.config.flushSize) {\n      this.flush()\n    }\n  }\n\n  public flush(): void {\n    if (this.params == null || this.data.length === 0) {\n      return\n    }\n\n    // Swap out the data array *sync*\n    // so that we can continue to collect events\n    const data = this.data\n    this.data = []\n\n    const body = {\n      source: 'fe',\n      deploymentID: this.params.deploymentID,\n      index: this.params.index,\n      oramaId: this.config.id,\n      oramaVersion: pkg.version,\n      // The user agent is the same for every event\n      // Because we use \"application/x-www-form-urlencoded\",\n      // the browser doens't send the user agent automatically\n      userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : undefined,\n      events: data\n    }\n\n    sendBeacon(`${this.params.endpoint}?api-key=${this.config.api_key}`, JSON.stringify(body))?.catch((err) => console.log(err))\n  }\n\n  private start(): void {\n    const interval = setInterval(this.flush.bind(this), this.config.flushInterval)\n    if (interval.unref != null) {\n      interval.unref()\n    }\n  }\n}\n\nexport interface CollectorConstructor extends TelemetryConfig {\n  id: string\n  api_key: string\n}\n","import sendBeacon from './sendBeacon.js'\nimport type { HeartBeatConfig } from './types.js'\n\nexport class HeartBeat {\n  private intervalId?: number\n\n  constructor(private readonly params: HeartBeatConstructor) {}\n\n  public start(): void {\n    this.stop()\n    // @ts-expect-error - setInterval ID is actually a number\n    this.intervalId = setInterval(this.beat.bind(this), this.params.frequency)\n  }\n\n  public stop(): void {\n    if (this.intervalId !== undefined) {\n      clearInterval(this.intervalId)\n    }\n  }\n\n  private beat(): void {\n    sendBeacon(this.params.endpoint)?.catch((err) => console.log(err))\n  }\n}\n\nexport interface HeartBeatConstructor extends HeartBeatConfig {\n  endpoint: string\n}\n","import { createId } from '@orama/cuid2'\nimport { LOCAL_STORAGE_USER_ID_KEY } from './constants.js'\nimport sendBeacon from './sendBeacon.js'\nimport type { OramaInitResponse } from './types.js'\n\ntype ProfileConstructor = {\n  endpoint: string\n  apiKey: string\n}\n\ntype ProfileParams = {\n  identifyUrl: string\n  index: string\n}\n\nexport class Profile {\n  private readonly endpoint: string\n  private readonly apiKey: string\n\n  private userId: string\n  private identity?: string\n  private userAlias?: string\n  private params?: ProfileParams\n\n  constructor({ endpoint, apiKey }: ProfileConstructor) {\n    if (!endpoint || !apiKey) {\n      throw new Error('Endpoint and API Key are required to create a Profile')\n    }\n\n    if (typeof endpoint !== 'string' || typeof apiKey !== 'string') {\n      throw new Error('Endpoint and API Key must be strings')\n    }\n\n    if (typeof localStorage !== 'undefined') {\n      // Browser side\n      const userId = localStorage.getItem(LOCAL_STORAGE_USER_ID_KEY)\n\n      if (userId) {\n        this.userId = userId\n      } else {\n        this.userId = createId()\n        localStorage.setItem(LOCAL_STORAGE_USER_ID_KEY, this.userId)\n      }\n    } else {\n      // Server side\n      this.userId = createId()\n    }\n\n    this.endpoint = endpoint\n    this.apiKey = apiKey\n  }\n\n  setParams(params: ProfileParams) {\n    const { protocol, host } = new URL(params.identifyUrl)\n    const telemetryDomain = `${protocol}//${host}/identify`\n\n    this.params = {\n      identifyUrl: telemetryDomain,\n      index: params.index\n    }\n  }\n\n  getIdentity() {\n    return this.identity\n  }\n\n  getUserId() {\n    return this.userId\n  }\n\n  getAlias() {\n    return this.userAlias\n  }\n\n  private async sendProfileData(data: Record<string, any>) {\n    if (!this.params) {\n      throw new Error('Orama Profile is not initialized')\n    }\n\n    const body = JSON.stringify({\n      ...data,\n      visitorId: this.getUserId(),\n      index: this.params.index\n    })\n\n    await sendBeacon(`${this.params?.identifyUrl}?api-key=${this.apiKey}`, body)\n  }\n\n  async identify(initPromise: Promise<OramaInitResponse | null>, identity: string) {\n    if (typeof identity !== 'string') {\n      throw new Error('Identity must be a string')\n    }\n\n    await initPromise\n\n    await this.sendProfileData({\n      entity: 'identity',\n      id: identity\n    })\n\n    this.identity = identity\n  }\n\n  async alias(initPromise: Promise<OramaInitResponse | null>, alias: string) {\n    if (typeof alias !== 'string') {\n      throw new Error('Identity must be a string')\n    }\n\n    await initPromise\n\n    await this.sendProfileData({\n      entity: 'alias',\n      id: alias\n    })\n\n    this.userAlias = alias\n  }\n\n  reset() {\n    this.userId = createId()\n    this.identity = undefined\n    this.userAlias = undefined\n  }\n}\n","export const ENDPOINT_SNAPSHOT = 'snapshot'\nexport const ENDPOINT_NOTIFY = 'notify'\nexport const ENDPOINT_DEPLOY = 'deploy'\nexport const ENDPOINT_HAS_DATA = 'has-data'\nexport const ENDPOINT_UPDATE_SCHEMA = 'update-schema'\n\nexport const METHOD_POST = 'POST'\nexport const METHOD_GET = 'GET'\nexport const METHOD_PUT = 'PUT'\nexport const METHOD_DELETE = 'DELETE'\n\nexport const API_BASE_URL = 'https://api.askorama.ai'\nexport const API_V1_BASE_URL = `${API_BASE_URL}/api/v1`\n","import type { Nullable } from '@orama/orama'\nimport * as CONST from './constants.js'\nimport type { CloudManager } from './index.js'\nimport type { Endpoint, EndpointDeploy, EndpointHasData, EndpointNotify, EndpointSnapshot, EndpointUpdateSchema } from './types.js'\n\ntype IndexManagerParams = {\n  manager: CloudManager\n  indexID: string\n}\n\ntype SnapshotData = any[] | object | unknown\n\ntype CallWebhookPayload<E extends Endpoint> = E extends EndpointSnapshot\n  ? SnapshotData\n  : E extends EndpointNotify\n    ? any[]\n    : E extends EndpointDeploy\n      ? undefined\n      : E extends EndpointUpdateSchema\n        ? { schema: { [key: string]: any }; embeddings?: any }\n        : never\n\nexport class IndexManager {\n  private manager: CloudManager\n  private indexId: Nullable<string> = null\n\n  constructor(params: IndexManagerParams) {\n    this.manager = params.manager\n    this.indexId = params.indexID\n\n    this.manager.setIndexID(params.indexID)\n  }\n\n  public async empty(): Promise<boolean> {\n    const resp = await this.callIndexWebhook<EndpointSnapshot>(CONST.ENDPOINT_SNAPSHOT, [])\n    return (resp as any).success\n  }\n\n  public async snapshot(data: CallWebhookPayload<EndpointSnapshot>): Promise<boolean> {\n    const resp = await this.callIndexWebhook<EndpointSnapshot>(CONST.ENDPOINT_SNAPSHOT, data)\n    return (resp as any).success\n  }\n\n  public async insert(data: CallWebhookPayload<EndpointNotify>): Promise<boolean> {\n    const resp = await this.callIndexWebhook<EndpointNotify>(CONST.ENDPOINT_NOTIFY, { upsert: data } as any)\n    return (resp as any).success\n  }\n\n  public async update(data: CallWebhookPayload<EndpointNotify>): Promise<boolean> {\n    const resp = await this.callIndexWebhook<EndpointNotify>(CONST.ENDPOINT_NOTIFY, { upsert: data } as any)\n    return (resp as any).success\n  }\n\n  public async delete(data: CallWebhookPayload<EndpointNotify>): Promise<boolean> {\n    try {\n      await this.callIndexWebhook<EndpointNotify>(CONST.ENDPOINT_NOTIFY, { remove: data } as any)\n    } catch (e) {\n      console.error(e)\n      return false\n    }\n\n    return true\n  }\n\n  public async updateSchema(schema: CallWebhookPayload<EndpointUpdateSchema>): Promise<boolean> {\n    try {\n      await this.callIndexWebhook<EndpointUpdateSchema>(CONST.ENDPOINT_UPDATE_SCHEMA, schema)\n    } catch (e) {\n      console.error(e)\n      return false\n    }\n    return true\n  }\n\n  public async deploy(): Promise<boolean> {\n    try {\n      const resp = await this.callIndexWebhook<EndpointDeploy>(CONST.ENDPOINT_DEPLOY)\n    } catch (e) {\n      console.error(e)\n      return false\n    }\n\n    return true\n  }\n\n  public async hasPendingOperations(): Promise<boolean> {\n    const resp = await this.callIndexWebhook<EndpointHasData>(CONST.ENDPOINT_HAS_DATA)\n    return (resp as any).hasData\n  }\n\n  private checkIndexID() {\n    if (!this.indexId) {\n      throw new Error('Index ID is not set')\n    }\n  }\n\n  private callIndexWebhook<E extends Endpoint>(endpoint: E, payload?: CallWebhookPayload<E>) {\n    this.checkIndexID()\n    return this.manager.callIndexWebhook(endpoint, payload)\n  }\n}\n","import type { Nullable, insert } from '@orama/orama'\nimport { API_V1_BASE_URL } from './constants.js'\nimport { IndexManager } from './index-manager.js'\nimport type { Endpoint, Method } from './types.js'\n\ntype CloudManagerConfig = {\n  api_key: string\n  baseURL?: string\n}\n\ntype CallConfig = {\n  method: Method\n  headers: {\n    'Content-Type': string\n    Authorization: string\n  }\n  body?: string\n}\n\ntype Payload = UpsertPayload | RemovePayload | InsertPayload\n\ntype UpsertPayload = {\n  upsert: any[]\n}\n\ntype RemovePayload = {\n  remove: any[]\n}\n\ntype InsertPayload = {\n  insert: any[]\n}\n\nexport class CloudManager {\n  private indexId: Nullable<string> = null\n  private apiKey: string\n  private baseURL: string\n\n  constructor(config: CloudManagerConfig) {\n    this.apiKey = config.api_key\n    this.baseURL = config?.baseURL || API_V1_BASE_URL\n  }\n\n  index(indexId: string): IndexManager {\n    return new IndexManager({ manager: this, indexID: indexId })\n  }\n\n  setIndexID(id: string) {\n    this.indexId = id\n  }\n\n  async callIndexWebhook<T = unknown>(endpoint: Endpoint, payload?: T): Promise<Response> {\n    const config: CallConfig = {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        Authorization: `Bearer ${this.apiKey}`\n      }\n    }\n\n    if (payload) {\n      config.body = JSON.stringify(payload)\n    }\n\n    const resp = await fetch(`${this.baseURL}/webhooks/${this.indexId}/${endpoint}`, config)\n\n    return resp.json()\n  }\n}\n"],"mappings":"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","names":["exports","isBytes","number","bool","bytes","hash","exists","output","n","b","a","lengths","h","instance","checkFinished","out","min","assert","exports","fromBig","split","add","U32_MASK64","_32n","n","le","lst","Ah","Al","i","h","l","toBig","shrSH","_l","s","shrSL","rotrSH","rotrSL","rotrBH","rotrBL","rotr32H","_h","rotr32L","rotlSH","rotlSL","rotlBH","rotlBL","Bh","Bl","add3L","Cl","add3H","low","Ch","add4L","Dl","add4H","Dh","add5L","El","add5H","Eh","u64","exports","exports","isBytes","byteSwap32","bytesToHex","hexToBytes","asyncLoop","utf8ToBytes","toBytes","concatBytes","checkOpts","wrapConstructor","wrapConstructorWithOpts","wrapXOFConstructorWithOpts","randomBytes","crypto_1","_assert_js_1","a","u8","arr","u32","createView","rotr","word","shift","rotl","byteSwap","n","i","hexes","_","bytes","hex","asciis","asciiToBase16","char","hl","al","array","ai","hi","n1","n2","nextTick","iters","tick","cb","ts","diff","str","data","arrays","sum","res","pad","Hash","toStr","defaults","opts","hashCons","hashC","msg","tmp","bytesLength","exports","keccakP","_assert_js_1","_u64_js_1","utils_js_1","SHA3_PI","SHA3_ROTL","_SHA3_IOTA","_0n","_1n","_2n","_7n","_256n","_0x71n","round","R","x","y","t","j","SHA3_IOTA_H","SHA3_IOTA_L","rotlH","h","l","s","rotlL","rounds","B","idx1","idx0","B0","B1","Th","Tl","curH","curL","shift","PI","Keccak","_Keccak","blockLen","suffix","outputLen","enableXOF","data","state","len","pos","take","i","out","bufferOut","bytes","to","gen","genShake","opts","require_src","__commonJSMin","exports","module","sha3","defaultLength","bigLength","createEntropy","length","random","entropy","bufToBigInt","buf","bits","value","i","bi","hash","input","alphabet","x","randomLetter","createFingerprint","globalObj","globals","sourceString","createCounter","count","initialCountMax","init","counter","fingerprint","firstLetter","time","salt","hashInput","createId","isCuid","id","minLength","maxLength","regex","require_cuid2","__commonJSMin","exports","module","createId","init","getConstants","isCuid","src_exports","__export","AnswerSession","CloudManager","OramaClient","__toCommonJS","import_cuid2","STEMMERS","SUPPORTED_LANGUAGES","STEMMERS","baseId","nano","milli","second","formatNanoseconds","value","nano","milli","second","withIntersection","withUnion","allLanguages","SUPPORTED_LANGUAGES","errors","formatElapsedTime","n","formatNanoseconds","c","v","C","V","mgr0","meq1","mgr1","s_v","version","package_default","version","import_cuid2","ORAMA_ANSWER_ENDPOINT","MULTI_INDEX_BASE","LOCAL_STORAGE_USER_ID_KEY","parseSSE","input","event","data","eventData","serializeUserContext","userContext","AnswerSession","params","oaramaAnswerHostAddress","ORAMA_ANSWER_ENDPOINT","generator","result","message","stream","interactionId","reader","currentStateIndex","requestBody","systemPromptConfiguration","serializeUserContext","response","decoder","messageQueue","buffer","lastMessage","value","done","endOfMessageIndex","rawMessage","event","parseSSE","parsedMessage","segment","trigger","e","err","config","prompt","Cache","config","key","value","sendBeacon","endpoint","body","e","Collector","_Collector","config","profile","params","collector","data","body","package_default","sendBeacon","err","interval","HeartBeat","params","sendBeacon","err","import_cuid2","Profile","endpoint","apiKey","userId","LOCAL_STORAGE_USER_ID_KEY","params","protocol","host","telemetryDomain","data","body","sendBeacon","initPromise","identity","alias","isAbortController","signal","OramaClient","params","firstEndpointOrigin","i","MULTI_INDEX_BASE","Profile","telementryConfig","Collector","cacheParams","Cache","customerAuthToken","onAuthTokenExpired","searchResults","roundTripTime","query","cached","sr","config","currentRequestNumber","cacheKey","shouldUseCache","performSearch","timeStart","timeEnd","elapsed","formatElapsedTime","error","resolve","reject","AnswerSession","HeartBeat","fetchParams","b","searchToken","maxAge","err","path","method","body","abort","queryParams","abortSignal","requestOptions","version","_","value","key","url","res","identity","alias","ENDPOINT_SNAPSHOT","ENDPOINT_NOTIFY","ENDPOINT_DEPLOY","ENDPOINT_HAS_DATA","ENDPOINT_UPDATE_SCHEMA","API_BASE_URL","API_V1_BASE_URL","IndexManager","params","ENDPOINT_SNAPSHOT","data","ENDPOINT_NOTIFY","e","schema","ENDPOINT_UPDATE_SCHEMA","resp","ENDPOINT_DEPLOY","ENDPOINT_HAS_DATA","endpoint","payload","CloudManager","config","API_V1_BASE_URL","indexId","IndexManager","id","endpoint","payload"]}