import type { AxiosInstance } from 'axios' import type { AuthEventMap, AuthState } from './types' import axios from 'axios' export function createAxiosInstance(baseURL: string): AxiosInstance { return axios.create({ baseURL, withCredentials: true, headers: { 'Content-Type': 'application/json', }, }) } export class EventEmitter { private listeners: Map void>> = new Map() on(event: K, handler: AuthEventMap[K]): void { if (!this.listeners.has(event)) { this.listeners.set(event, new Set()) } const listeners = this.listeners.get(event) if (listeners !== undefined) { listeners.add(handler) } } off(event: K, handler: AuthEventMap[K]): void { const eventListeners = this.listeners.get(event) if (eventListeners) { eventListeners.delete(handler) } } emit(event: K): void { const eventListeners = this.listeners.get(event) if (eventListeners) { eventListeners.forEach((handler) => { handler() }) } } removeAllListeners(event?: K): void { if (event !== undefined) { this.listeners.delete(event) } else { this.listeners.clear() } } } export function queryParams(): Record { if (typeof window === 'undefined' || !window.location.search) { return {} } const params = new URLSearchParams(window.location.search) const result: Record = {} params.forEach((value, key) => { result[key] = value }) return result }