{"version":3,"file":"fetch-DcGZzMm-.mjs","names":["headers: Record<string, string>"],"sources":["../src/lib/fetch.ts"],"sourcesContent":["import { ofetch } from 'ofetch';\nimport { io, type Socket } from 'socket.io-client';\n\nexport interface ApiAuthOptions {\n  token?: string;\n  // apiKey?: string;\n}\n\ntype SocketCreator = (\n  namespace: string,\n  rooms?: string[]\n) => Socket | undefined;\n\nconst sockets = new Map<string, { con: Socket; rooms?: string[] }>();\n\n/**\n * Client for the API\n */\nexport const client = {\n  token: '',\n  fetch: ofetch.create({}),\n  socket: (() => {\n    // Will be init later\n  }) as SocketCreator,\n};\n\nconst prepareSocketCreator = (\n  baseURL: URL,\n  auth?: ApiAuthOptions\n): SocketCreator => {\n  const wsURL = new URL(baseURL);\n  wsURL.protocol = wsURL.protocol.replace('http', 'ws');\n  // Ensure URL ends with / so we'll respect the baseURL when getting socket.io path\n  if (wsURL.href.at(-1) !== '/') {\n    wsURL.href = `${wsURL.href}/`;\n  }\n  // Respect baseURL for socket.io (allows running behind reverse proxy)\n  const socketIoPath = new URL('socket.io/', wsURL).pathname;\n\n  return (namespaceName, rooms) => {\n    let namespace = sockets.get(namespaceName);\n    const haveSameRooms = (namespace?.rooms ?? []).every((rs) =>\n      (rooms ?? []).includes(rs)\n    );\n    if (!haveSameRooms) {\n      namespace?.con.disconnect();\n      namespace = undefined;\n    }\n    if (!namespace) {\n      const url = new URL(namespaceName, wsURL);\n\n      try {\n        namespace = {\n          con: io(url.href, {\n            path: socketIoPath,\n            auth: auth || undefined,\n            query: rooms ? { rooms } : undefined,\n          }),\n          rooms,\n        };\n        sockets.set(namespaceName, namespace);\n      } catch (error) {\n        // oxlint-disable-next-line no-console\n        console.error(\n          `[ezreeport-sdk-js] Couldn't create socket for ${namespaceName}`,\n          error\n        );\n        return;\n      }\n    }\n\n    return namespace.con;\n  };\n};\n\n/**\n * Prepare the client for the rest of the SDK, will update config if needed\n *\n * @param baseURL Base HTTP URL of the API\n * @param auth Auth options to be authenticated\n */\nexport function prepareClient(\n  baseURL: string | URL,\n  auth?: ApiAuthOptions\n): void {\n  // Create HTTP client\n  const headers: Record<string, string> = {};\n\n  if (auth?.token) {\n    headers.Authorization = `Bearer ${auth.token}`;\n  }\n  // if (auth?.apiKey) {\n  //   headers['X-Api-Key'] = auth.apiKey;\n  // }\n\n  let href;\n  let url;\n  if (typeof baseURL === 'string') {\n    href = baseURL;\n    url = new URL(baseURL);\n  } else {\n    href = baseURL.href;\n    url = baseURL;\n  }\n\n  client.fetch = ofetch.create({\n    baseURL: href,\n    headers,\n  });\n\n  // Set function to handle sockets\n  client.socket = prepareSocketCreator(url, auth);\n}\n"],"mappings":";;;;AAaA,MAAM,0BAAU,IAAI,KAAgD;;;;AAKpE,MAAa,SAAS;CACpB,OAAO;CACP,OAAO,OAAO,OAAO,EAAE,CAAC;CACxB,eAAe;CAGhB;AAED,MAAM,wBACJ,SACA,SACkB;CAClB,MAAM,QAAQ,IAAI,IAAI,QAAQ;AAC9B,OAAM,WAAW,MAAM,SAAS,QAAQ,QAAQ,KAAK;AAErD,KAAI,MAAM,KAAK,GAAG,GAAG,KAAK,IACxB,OAAM,OAAO,GAAG,MAAM,KAAK;CAG7B,MAAM,eAAe,IAAI,IAAI,cAAc,MAAM,CAAC;AAElD,SAAQ,eAAe,UAAU;;EAC/B,IAAI,YAAY,QAAQ,IAAI,cAAc;AAI1C,MAAI,4EAHmB,UAAW,oEAAS,EAAE,EAAE,OAAO,QACnD,6CAAS,EAAE,EAAE,SAAS,GAAG,CAC3B,EACmB;AAClB,2DAAW,IAAI,YAAY;AAC3B,eAAY;;AAEd,MAAI,CAAC,WAAW;GACd,MAAM,MAAM,IAAI,IAAI,eAAe,MAAM;AAEzC,OAAI;AACF,gBAAY;KACV,KAAK,GAAG,IAAI,MAAM;MAChB,MAAM;MACN,MAAM,QAAQ;MACd,OAAO,QAAQ,EAAE,OAAO,GAAG;MAC5B,CAAC;KACF;KACD;AACD,YAAQ,IAAI,eAAe,UAAU;YAC9B,OAAO;AAEd,YAAQ,MACN,iDAAiD,iBACjD,MACD;AACD;;;AAIJ,SAAO,UAAU;;;;;;;;;AAUrB,SAAgB,cACd,SACA,MACM;CAEN,MAAMA,UAAkC,EAAE;AAE1C,iDAAI,KAAM,MACR,SAAQ,gBAAgB,UAAU,KAAK;CAMzC,IAAI;CACJ,IAAI;AACJ,KAAI,OAAO,YAAY,UAAU;AAC/B,SAAO;AACP,QAAM,IAAI,IAAI,QAAQ;QACjB;AACL,SAAO,QAAQ;AACf,QAAM;;AAGR,QAAO,QAAQ,OAAO,OAAO;EAC3B,SAAS;EACT;EACD,CAAC;AAGF,QAAO,SAAS,qBAAqB,KAAK,KAAK"}