{"version":3,"file":"index.cjs","sources":["../src/BaseApiClient.js","../src/displaySurface.js","../src/utilitySurface.js","../src/ConsentManager.js","../src/DataSanitizer.js","../src/PrivacyOrchestrator.js","../src/index.js"],"sourcesContent":["/**\n * @quantabit/sdk-config - BaseApiClient\n * \n * SDK API 客户端基类\n * 封装所有通用的配置、请求、Token 管理逻辑\n * \n * 使用方式：\n * ```javascript\n * import { BaseApiClient } from '@quantabit/sdk-config';\n * \n * class MyApiClient extends BaseApiClient {\n *   constructor(config = {}) {\n *     super('/my-module', config);  // 只需传入模块路径\n *   }\n *   \n *   // 专注于业务方法\n *   async getList() {\n *     return this.request('/list');\n *   }\n * }\n * ```\n */\n\nimport {\n  getConfig,\n  subscribeConfig,\n  getToken as getStoredToken,\n  logger,\n} from './index.js';\n\nfunction joinUrlSegments(baseUrl = '', path = '') {\n  const cleanBase = String(baseUrl || '').replace(/\\/+$/, '');\n  const cleanPath = String(path || '').replace(/^\\/+/, '');\n\n  if (!cleanBase) {\n    return cleanPath ? `/${cleanPath}` : '';\n  }\n\n  if (!cleanPath) {\n    return cleanBase;\n  }\n\n  return `${cleanBase}/${cleanPath}`;\n}\n\nasync function parseResponseBody(response) {\n  if (response.status === 204 || response.status === 205) {\n    return null;\n  }\n\n  const contentType = response.headers.get('content-type') || '';\n  if (contentType.includes('application/json')) {\n    return response.json();\n  }\n\n  const text = await response.text();\n  if (!text) {\n    return null;\n  }\n\n  try {\n    return JSON.parse(text);\n  } catch {\n    return text;\n  }\n}\n\n/**\n * SDK API 客户端基类\n * 所有 SDK 的 API 客户端都应继承此类\n */\nexport class BaseApiClient {\n  /**\n   * 构造函数\n   * @param {string} modulePath - 模块路径，如 '/auth', '/points', '/wallet'\n   * @param {Object} config - 配置选项\n   * @param {string} config.baseUrl - 自定义基础 URL（覆盖全局配置）\n   * @param {number} config.timeout - 自定义超时时间（毫秒）\n   * @param {number} config.maxRetries - 最大重试次数（默认 0 不重试）\n   * @param {number} config.retryDelay - 重试间隔基数毫秒（默认 1000，指数退避）\n   * @param {Function} config.onError - 错误回调\n   * @param {Function} config.getLanguage - 获取语言的函数\n   */\n  constructor(modulePath = '', config = {}) {\n    this.modulePath = modulePath;\n    this._customBaseUrl = config.baseUrl;\n    this._customTimeout = config.timeout;\n    this.maxRetries = config.maxRetries || 0;\n    this.retryDelay = config.retryDelay || 1000;\n    this.token = null;\n    this.onError = config.onError;\n    this.getLanguage = config.getLanguage || (() => 'zh');\n\n    // 从全局配置初始化\n    this._updateFromGlobalConfig(getConfig());\n\n    // 订阅配置变更（使用 WeakRef 避免内存泄漏）\n    if (typeof WeakRef !== 'undefined') {\n      const weakSelf = new WeakRef(this);\n      let unsubscribe;\n      const listener = (newConfig) => {\n        const self = weakSelf.deref();\n        if (self) {\n          self._updateFromGlobalConfig(newConfig);\n        } else if (unsubscribe) {\n          unsubscribe();\n        }\n      };\n      unsubscribe = subscribeConfig(listener);\n      this._unsubscribe = unsubscribe;\n    } else {\n      this._unsubscribe = subscribeConfig((newConfig) => {\n        this._updateFromGlobalConfig(newConfig);\n      });\n    }\n  }\n\n  /**\n   * 从全局配置更新本地配置\n   * @private\n   */\n  _updateFromGlobalConfig(globalConfig) {\n    // 只有未自定义时才使用全局配置\n    if (!this._customBaseUrl) {\n      let base = globalConfig.apiBaseUrl || '/api/v1';\n      const isAbsolute = /^https?:\\/\\//i.test(base);\n      const isServer = typeof window === 'undefined';\n      if (!isAbsolute && isServer) {\n        // 如果是 Server 端或 Node.js 环境，将相对路径补全为完整品牌域名路径\n        const fullUrl = globalConfig.apiFullUrl || 'https://api.qbitchain.io';\n        base = joinUrlSegments(fullUrl, base);\n      }\n      this.baseUrl = joinUrlSegments(base, this.modulePath);\n    } else {\n      this.baseUrl = joinUrlSegments(this._customBaseUrl, '');\n    }\n\n    if (!this._customTimeout) {\n      this.timeout = globalConfig.timeout || 30000;\n    } else {\n      this.timeout = this._customTimeout;\n    }\n  }\n\n  /**\n   * 设置 Token\n   * @param {string} token - 访问令牌\n   */\n  setToken(token) {\n    this.token = token;\n  }\n\n  /**\n   * 设置基础 URL\n   * @param {string} url - 新的基础 URL\n   */\n  setBaseUrl(url) {\n    this._customBaseUrl = url;\n    this.baseUrl = joinUrlSegments(url, '');\n  }\n\n  /**\n   * 获取当前使用的 Token\n   * 优先使用实例 Token，否则从存储获取\n   * @returns {string|null}\n   */\n  getToken() {\n    return this.token || getStoredToken();\n  }\n\n  /**\n   * 发送 HTTP 请求\n   * @param {string} endpoint - API 端点（相对于 baseUrl）\n   * @param {Object} options - fetch 选项\n   * @returns {Promise<any>} 响应数据\n   */\n  async request(endpoint, options = {}) {\n    const url = /^https?:\\/\\//i.test(endpoint) ? endpoint : `${this.baseUrl}${endpoint}`;\n    const retryCount = options._retryCount || 0;\n\n    // 构建请求头\n    const headers = {\n      'Content-Type': 'application/json',\n      'Accept-Language': this.getLanguage(),\n      ...options.headers,\n    };\n\n    // 添加认证头\n    const token = this.getToken();\n    if (token) {\n      headers['Authorization'] = `Bearer ${token}`;\n    }\n\n    // 超时控制\n    const controller = new AbortController();\n    const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n    try {\n      const response = await fetch(url, {\n        ...options,\n        headers,\n        signal: controller.signal,\n      });\n\n      clearTimeout(timeoutId);\n\n      // 5xx 服务端错误 — 可重试\n      if (response.status >= 500 && retryCount < this.maxRetries) {\n        const delay = this.retryDelay * Math.pow(2, retryCount);\n        logger.warn(`${this.constructor.name} 5xx error, retrying in ${delay}ms... (${retryCount + 1}/${this.maxRetries})`);\n        await new Promise(r => setTimeout(r, delay));\n        return this.request(endpoint, { ...options, _retryCount: retryCount + 1 });\n      }\n\n      // 解析响应\n      const data = await parseResponseBody(response);\n\n      // 处理错误响应\n      if (!response.ok) {\n        let errorMsg =\n          (data && typeof data === 'object' ? data.message || data.detail : null) ||\n          (typeof data === 'string' ? data : null);\n        if (Array.isArray(errorMsg)) {\n          errorMsg = errorMsg[0]?.msg || errorMsg[0]?.message || JSON.stringify(errorMsg);\n        } else if (typeof errorMsg === 'object' && errorMsg !== null) {\n          errorMsg = errorMsg.msg || errorMsg.message || JSON.stringify(errorMsg);\n        }\n\n        const error = new Error(errorMsg || `HTTP ${response.status}`);\n        error.code = data?.code || `HTTP_${response.status}`;\n        error.status = response.status;\n        error.data = data;\n\n        this.onError?.(error);\n        logger.error(`${this.constructor.name} Error:`, error.message);\n        throw error;\n      }\n\n      return data;\n    } catch (error) {\n      clearTimeout(timeoutId);\n\n      // 处理超时错误\n      if (error.name === 'AbortError') {\n        const timeoutError = new Error('Request timeout');\n        timeoutError.code = 'TIMEOUT';\n        this.onError?.(timeoutError);\n        throw timeoutError;\n      }\n\n      // 处理网络错误 — 可重试\n      if (error.name === 'TypeError' && error.message.includes('fetch')) {\n        if (retryCount < this.maxRetries) {\n          const delay = this.retryDelay * Math.pow(2, retryCount);\n          logger.warn(`${this.constructor.name} Network error, retrying in ${delay}ms...`);\n          await new Promise(r => setTimeout(r, delay));\n          return this.request(endpoint, { ...options, _retryCount: retryCount + 1 });\n        }\n        const networkError = new Error('Network error');\n        networkError.code = 'NETWORK_ERROR';\n        this.onError?.(networkError);\n        throw networkError;\n      }\n\n      throw error;\n    }\n  }\n\n  /**\n   * GET 请求便捷方法\n   * @param {string} endpoint - API 端点\n   * @param {Object} params - 查询参数\n   */\n  async get(endpoint, params = {}) {\n    const query = new URLSearchParams(params).toString();\n    const url = query ? `${endpoint}?${query}` : endpoint;\n    return this.request(url, { method: 'GET' });\n  }\n\n  /**\n   * POST 请求便捷方法\n   * @param {string} endpoint - API 端点\n   * @param {Object} data - 请求体数据\n   */\n  async post(endpoint, data = {}) {\n    return this.request(endpoint, {\n      method: 'POST',\n      body: JSON.stringify(data),\n    });\n  }\n\n  /**\n   * PUT 请求便捷方法\n   * @param {string} endpoint - API 端点\n   * @param {Object} data - 请求体数据\n   */\n  async put(endpoint, data = {}) {\n    return this.request(endpoint, {\n      method: 'PUT',\n      body: JSON.stringify(data),\n    });\n  }\n\n  /**\n   * DELETE 请求便捷方法\n   * @param {string} endpoint - API 端点\n   * @param {Object} data - 请求体数据（可选）\n   */\n  async delete(endpoint, data = null) {\n    const options = { method: 'DELETE' };\n    if (data) {\n      options.body = JSON.stringify(data);\n    }\n    return this.request(endpoint, options);\n  }\n\n  /**\n   * PATCH 请求便捷方法\n   * @param {string} endpoint - API 端点\n   * @param {Object} data - 请求体数据\n   */\n  async patch(endpoint, data = {}) {\n    return this.request(endpoint, {\n      method: 'PATCH',\n      body: JSON.stringify(data),\n    });\n  }\n\n  /**\n   * 销毁实例，取消配置订阅\n   */\n  destroy() {\n    if (this._unsubscribe) {\n      this._unsubscribe();\n      this._unsubscribe = null;\n    }\n  }\n}\n\n/**\n * 创建 API 客户端的工厂函数\n * 用于快速创建简单的 API 客户端\n * \n * @param {string} modulePath - 模块路径\n * @param {Object} methods - 方法定义对象\n * @returns {BaseApiClient} API 客户端实例\n * \n * @example\n * const myApi = createApiClient('/my-module', {\n *   getList: (client) => client.get('/list'),\n *   create: (client, data) => client.post('/', data),\n * });\n */\nexport function createApiClient(modulePath, methods = {}) {\n  const client = new BaseApiClient(modulePath);\n\n  // 绑定自定义方法\n  Object.entries(methods).forEach(([name, fn]) => {\n    client[name] = (...args) => fn(client, ...args);\n  });\n\n  return client;\n}\n\nexport default BaseApiClient;\n","/**\n * 统一展示面（Display Surface）\n *\n * 供帮助 / 反馈 / 客服 / AI 等实用 SDK 共用：\n * - DisplayMode: link | new_tab | popup | redirect | modal\n * - 自动识别当前页面 URL / 域名 / 标题等上下文\n * - 参数拼装（手动 params + 自动 page context）\n * - 打开链接或 iframe 弹窗\n */\n\n/** @typedef {'link'|'new_tab'|'popup'|'redirect'|'modal'|'iframe'} DisplayModeValue */\n\n/**\n * 展示模式\n * - link / new_tab: 新标签打开\n * - popup: 居中小窗\n * - redirect: 当前页跳转\n * - modal / iframe: 全屏 iframe 遮罩弹层\n */\nexport const DisplayMode = Object.freeze({\n  LINK: 'link',\n  NEW_TAB: 'new_tab',\n  POPUP: 'popup',\n  REDIRECT: 'redirect',\n  MODAL: 'modal',\n  IFRAME: 'iframe',\n});\n\n/** 打开 URL 时默认注入的页面上下文字段（查询参数名） */\nexport const DEFAULT_PAGE_CONTEXT_QUERY_KEYS = Object.freeze([\n  'page_url',\n  'domain',\n  'path',\n  'title',\n  'platform',\n  'app_id',\n  'language',\n  'referrer',\n]);\n\nconst SURFACE_IFRAME_ID = 'qbit-display-surface-iframe';\nconst SURFACE_OVERLAY_ID = 'qbit-display-surface-overlay';\n\nlet _activeMessageHandler = null;\n\n/**\n * 采集当前页面上下文（浏览器环境）\n *\n * @param {Object} [overrides={}] - 覆盖字段（platform / appId / appName 等）\n * @returns {{\n *   page_url: string,\n *   domain: string,\n *   path: string,\n *   title: string,\n *   referrer: string,\n *   platform: string,\n *   app_id: string,\n *   app_name: string,\n *   language: string,\n *   screen: string,\n *   user_agent: string,\n * }}\n */\nexport function getPageContext(overrides = {}) {\n  const hasWindow = typeof window !== 'undefined';\n  const loc = hasWindow ? window.location : null;\n  const doc = hasWindow ? document : null;\n  const nav = hasWindow ? navigator : null;\n\n  const platform = overrides.platform\n    ?? overrides.platformId\n    ?? 'qbit_open';\n  const appId = overrides.appId\n    ?? overrides.app_id\n    ?? (loc ? loc.pathname : '');\n  const appName = overrides.appName\n    ?? overrides.app_name\n    ?? (doc ? doc.title : '');\n\n  return {\n    page_url: overrides.page_url ?? overrides.pageUrl ?? (loc ? loc.href : ''),\n    domain: overrides.domain ?? (loc ? loc.host : ''),\n    path: overrides.path ?? (loc ? loc.pathname : ''),\n    title: overrides.title ?? (doc ? doc.title : ''),\n    referrer: overrides.referrer ?? (doc ? doc.referrer : ''),\n    platform,\n    app_id: appId,\n    app_name: appName,\n    language: overrides.language\n      ?? (nav ? nav.language : 'zh'),\n    screen: overrides.screen\n      ?? (hasWindow && window.screen\n        ? `${window.screen.width}x${window.screen.height}`\n        : ''),\n    user_agent: overrides.user_agent\n      ?? overrides.userAgent\n      ?? (nav ? nav.userAgent : ''),\n  };\n}\n\n/**\n * 将对象转为查询参数（跳过 null/undefined/空字符串）\n * @param {Record<string, any>} params\n * @returns {URLSearchParams}\n */\nexport function toSearchParams(params = {}) {\n  const search = new URLSearchParams();\n  Object.entries(params || {}).forEach(([key, value]) => {\n    if (value === undefined || value === null || value === '') return;\n    if (typeof value === 'object') {\n      search.set(key, JSON.stringify(value));\n      return;\n    }\n    search.set(key, String(value));\n  });\n  return search;\n}\n\n/**\n * 合并手动参数与页面上下文\n *\n * @param {Record<string, any>} [params={}] - 显式参数（优先级最高）\n * @param {Object} [options={}]\n * @param {boolean} [options.autoPageContext=true] - 是否自动注入页面上下文\n * @param {string[]} [options.pageContextKeys] - 要注入的上下文字段\n * @param {Object} [options.pageContext] - 覆盖 getPageContext 结果\n * @returns {Record<string, any>}\n */\nexport function mergeSurfaceParams(params = {}, options = {}) {\n  const {\n    autoPageContext = true,\n    pageContextKeys = DEFAULT_PAGE_CONTEXT_QUERY_KEYS,\n    pageContext: pageContextOverride,\n  } = options;\n\n  const merged = {};\n\n  if (autoPageContext) {\n    const ctx = pageContextOverride || getPageContext(options);\n    pageContextKeys.forEach((key) => {\n      if (ctx[key] !== undefined && ctx[key] !== null && ctx[key] !== '') {\n        merged[key] = ctx[key];\n      }\n    });\n  }\n\n  Object.assign(merged, params || {});\n  return merged;\n}\n\n/**\n * 构建带参数的完整 URL\n *\n * @param {string} baseUrl - 基础 URL（可含已有 query）\n * @param {Record<string, any>} [params={}] - 查询参数\n * @param {Object} [options={}] - 同 mergeSurfaceParams\n * @returns {string}\n */\nexport function buildUrl(baseUrl, params = {}, options = {}) {\n  if (!baseUrl) {\n    throw new Error('[DisplaySurface] baseUrl 是必填参数');\n  }\n\n  const merged = mergeSurfaceParams(params, options);\n  const search = toSearchParams(merged);\n  const query = search.toString();\n  if (!query) return baseUrl;\n\n  const hasQuery = baseUrl.includes('?');\n  const joiner = hasQuery\n    ? (baseUrl.endsWith('?') || baseUrl.endsWith('&') ? '' : '&')\n    : '?';\n  return `${baseUrl}${joiner}${query}`;\n}\n\n/**\n * 规范化展示模式（link → new_tab，iframe → modal）\n * @param {string} mode\n * @returns {string}\n */\nexport function normalizeDisplayMode(mode = DisplayMode.LINK) {\n  const value = String(mode || DisplayMode.LINK).toLowerCase();\n  if (value === DisplayMode.LINK || value === 'open') return DisplayMode.NEW_TAB;\n  if (value === DisplayMode.IFRAME) return DisplayMode.MODAL;\n  return value;\n}\n\nfunction cleanupSurfaceListeners() {\n  if (_activeMessageHandler && typeof window !== 'undefined') {\n    window.removeEventListener('message', _activeMessageHandler);\n    _activeMessageHandler = null;\n  }\n}\n\n/**\n * 关闭 modal / iframe 展示面\n */\nexport function closeSurface() {\n  cleanupSurfaceListeners();\n  if (typeof document === 'undefined') return;\n\n  const overlay = document.getElementById(SURFACE_OVERLAY_ID);\n  if (overlay) overlay.remove();\n\n  const iframe = document.getElementById(SURFACE_IFRAME_ID);\n  if (iframe) iframe.remove();\n}\n\n/**\n * 打开统一展示面（链接或弹窗）\n *\n * @param {Object} options\n * @param {string} options.url - 目标 URL（或 path）\n * @param {DisplayModeValue} [options.mode='link'] - 展示模式\n * @param {Record<string, any>} [options.params] - 额外查询参数\n * @param {boolean} [options.autoPageContext=true] - 自动填充当前页 URL 等\n * @param {string[]} [options.pageContextKeys] - 注入的上下文字段\n * @param {Object} [options.pageContext] - 覆盖页面上下文\n * @param {Object} [options.popupOptions] - popup 尺寸\n * @param {string} [options.popupName='qbit_surface'] - popup 窗口名\n * @param {string} [options.title] - modal 标题（可选）\n * @param {boolean} [options.showClose=true] - modal 是否显示关闭按钮\n * @param {string} [options.completeType='qbit_surface_complete'] - postMessage 完成类型\n * @param {string} [options.cancelType='qbit_surface_cancel'] - postMessage 取消类型\n * @param {Function} [options.onComplete] - 完成回调\n * @param {Function} [options.onCancel] - 取消回调\n * @param {Function} [options.onOpen] - 打开后回调\n * @returns {Window|HTMLElement|null}\n *\n * @example\n * openSurface({\n *   url: '/help',\n *   mode: 'modal',\n *   params: { topic: 'billing' },\n * });\n *\n * @example\n * openSurface({\n *   url: 'https://support.example.com',\n *   mode: 'link',\n *   params: { from: 'header' },\n * });\n */\nexport function openSurface(options = {}) {\n  if (typeof window === 'undefined') {\n    throw new Error('[DisplaySurface] openSurface 仅可在浏览器环境调用');\n  }\n\n  const {\n    url,\n    mode = DisplayMode.LINK,\n    params = {},\n    autoPageContext = true,\n    pageContextKeys,\n    pageContext,\n    popupOptions = {},\n    popupName = 'qbit_surface',\n    title,\n    showClose = true,\n    completeType = 'qbit_surface_complete',\n    cancelType = 'qbit_surface_cancel',\n    onComplete,\n    onCancel,\n    onOpen,\n    ...pageOverrides\n  } = options;\n\n  if (!url) {\n    throw new Error('[DisplaySurface] url 是必填参数');\n  }\n\n  const finalUrl = buildUrl(url, params, {\n    autoPageContext,\n    pageContextKeys,\n    pageContext,\n    ...pageOverrides,\n  });\n\n  const normalized = normalizeDisplayMode(mode);\n\n  switch (normalized) {\n    case DisplayMode.NEW_TAB: {\n      const win = window.open(finalUrl, '_blank', 'noopener,noreferrer');\n      onOpen?.(win, finalUrl);\n      return win;\n    }\n\n    case DisplayMode.REDIRECT: {\n      onOpen?.(null, finalUrl);\n      window.location.href = finalUrl;\n      return null;\n    }\n\n    case DisplayMode.POPUP: {\n      const width = popupOptions.width || 480;\n      const height = popupOptions.height || 720;\n      const left = (window.innerWidth - width) / 2 + (window.screenX || 0);\n      const top = (window.innerHeight - height) / 2 + (window.screenY || 0);\n\n      const popup = window.open(\n        finalUrl,\n        popupName,\n        `width=${width},height=${height},left=${left},top=${top},scrollbars=yes,resizable=yes`\n      );\n\n      if (popup && (onComplete || onCancel)) {\n        const timer = setInterval(() => {\n          if (popup.closed) {\n            clearInterval(timer);\n            cleanupSurfaceListeners();\n            onCancel?.();\n          }\n        }, 500);\n\n        cleanupSurfaceListeners();\n        _activeMessageHandler = (event) => {\n          try {\n            const origin = new URL(finalUrl, window.location.href).origin;\n            if (event.origin !== origin && event.origin !== window.location.origin) return;\n          } catch {\n            // ignore URL parse errors for relative paths already resolved\n          }\n\n          const data = event.data;\n          if (data?.type === completeType) {\n            clearInterval(timer);\n            cleanupSurfaceListeners();\n            onComplete?.(data.result ?? data.payload ?? data);\n            popup.close();\n          } else if (data?.type === cancelType) {\n            clearInterval(timer);\n            cleanupSurfaceListeners();\n            onCancel?.(data);\n            popup.close();\n          }\n        };\n        window.addEventListener('message', _activeMessageHandler);\n      }\n\n      onOpen?.(popup, finalUrl);\n      return popup;\n    }\n\n    case DisplayMode.MODAL: {\n      closeSurface();\n\n      const overlay = document.createElement('div');\n      overlay.id = SURFACE_OVERLAY_ID;\n      overlay.setAttribute('role', 'dialog');\n      overlay.setAttribute('aria-modal', 'true');\n      if (title) overlay.setAttribute('aria-label', title);\n\n      overlay.style.cssText = [\n        'position:fixed',\n        'inset:0',\n        'z-index:999999',\n        'display:flex',\n        'align-items:center',\n        'justify-content:center',\n        'background:rgba(15,23,42,0.55)',\n        'backdrop-filter:blur(4px)',\n        'padding:16px',\n        'box-sizing:border-box',\n      ].join(';');\n\n      const panel = document.createElement('div');\n      panel.style.cssText = [\n        'position:relative',\n        'width:min(960px,100%)',\n        'height:min(860px,92vh)',\n        'background:#fff',\n        'border-radius:16px',\n        'overflow:hidden',\n        'box-shadow:0 25px 50px -12px rgba(0,0,0,0.35)',\n        'display:flex',\n        'flex-direction:column',\n      ].join(';');\n\n      if (showClose || title) {\n        const header = document.createElement('div');\n        header.style.cssText = [\n          'display:flex',\n          'align-items:center',\n          'justify-content:space-between',\n          'gap:12px',\n          'padding:12px 16px',\n          'border-bottom:1px solid #e2e8f0',\n          'background:#f8fafc',\n          'flex-shrink:0',\n        ].join(';');\n\n        const titleEl = document.createElement('div');\n        titleEl.textContent = title || '';\n        titleEl.style.cssText = 'font:600 14px/1.4 system-ui,sans-serif;color:#0f172a;';\n        header.appendChild(titleEl);\n\n        if (showClose) {\n          const closeBtn = document.createElement('button');\n          closeBtn.type = 'button';\n          closeBtn.setAttribute('aria-label', 'Close');\n          closeBtn.textContent = '×';\n          closeBtn.style.cssText = [\n            'border:none',\n            'background:transparent',\n            'font-size:24px',\n            'line-height:1',\n            'cursor:pointer',\n            'color:#64748b',\n            'padding:0 4px',\n          ].join(';');\n          closeBtn.onclick = () => {\n            closeSurface();\n            onCancel?.();\n          };\n          header.appendChild(closeBtn);\n        }\n\n        panel.appendChild(header);\n      }\n\n      const iframe = document.createElement('iframe');\n      iframe.id = SURFACE_IFRAME_ID;\n      iframe.src = finalUrl;\n      iframe.title = title || 'QBit Surface';\n      iframe.allow = 'clipboard-write; fullscreen';\n      iframe.style.cssText = 'flex:1;width:100%;border:none;background:#fff;';\n\n      cleanupSurfaceListeners();\n      _activeMessageHandler = (event) => {\n        const data = event.data;\n        if (data?.type === completeType) {\n          closeSurface();\n          onComplete?.(data.result ?? data.payload ?? data);\n        } else if (data?.type === cancelType) {\n          closeSurface();\n          onCancel?.(data);\n        }\n      };\n      window.addEventListener('message', _activeMessageHandler);\n\n      overlay.addEventListener('click', (e) => {\n        if (e.target === overlay) {\n          closeSurface();\n          onCancel?.();\n        }\n      });\n\n      panel.appendChild(iframe);\n      overlay.appendChild(panel);\n      document.body.appendChild(overlay);\n\n      onOpen?.(overlay, finalUrl);\n      return overlay;\n    }\n\n    default:\n      throw new Error(`[DisplaySurface] 不支持的模式: ${mode}`);\n  }\n}\n\n/**\n * 创建可复用的展示面助手（面向对象风格）\n */\nexport class DisplaySurfaceHelper {\n  /**\n   * @param {Object} [defaults={}] - 默认 openSurface 选项\n   */\n  constructor(defaults = {}) {\n    this.defaults = defaults;\n  }\n\n  /**\n   * @param {Object} [options={}]\n   * @returns {Window|HTMLElement|null}\n   */\n  open(options = {}) {\n    return openSurface({ ...this.defaults, ...options });\n  }\n\n  /**\n   * @param {string} url\n   * @param {Record<string, any>} [params]\n   * @param {Object} [options]\n   * @returns {string}\n   */\n  buildUrl(url, params = {}, options = {}) {\n    return buildUrl(url, params, { ...this.defaults, ...options });\n  }\n\n  close() {\n    closeSurface();\n  }\n}\n\n/**\n * @param {Object} [defaults]\n * @returns {DisplaySurfaceHelper}\n */\nexport function createDisplaySurfaceHelper(defaults) {\n  return new DisplaySurfaceHelper(defaults);\n}\n\nexport default {\n  DisplayMode,\n  DEFAULT_PAGE_CONTEXT_QUERY_KEYS,\n  getPageContext,\n  toSearchParams,\n  mergeSurfaceParams,\n  buildUrl,\n  normalizeDisplayMode,\n  openSurface,\n  closeSurface,\n  DisplaySurfaceHelper,\n  createDisplaySurfaceHelper,\n};\n","/**\n * 实用能力展示入口（帮助 / 反馈 / 客服 / AI）\n * 基于 DisplaySurface，统一 link | modal 等模式与 page_url 自动填充\n */\n\nimport {\n  DisplayMode,\n  openSurface,\n  closeSurface,\n  buildUrl,\n  getPageContext,\n  mergeSurfaceParams,\n} from './displaySurface.js';\n\n/**\n * @param {Object} options\n * @param {string} options.url\n * @param {string} [options.mode='modal']\n * @param {Record<string, any>} [options.params]\n * @param {boolean} [options.autoPageContext=true]\n */\nexport function openUtilitySurface(options = {}) {\n  const {\n    url,\n    mode = DisplayMode.MODAL,\n    params = {},\n    autoPageContext = true,\n    title,\n    ...rest\n  } = options;\n\n  return openSurface({\n    url,\n    mode,\n    params,\n    autoPageContext,\n    title,\n    ...rest,\n  });\n}\n\nexport function openFeedbackSurface(options = {}) {\n  const {\n    url = '/feedback',\n    mode = DisplayMode.MODAL,\n    title = 'Feedback',\n    params = {},\n    ...rest\n  } = options;\n\n  return openUtilitySurface({ url, mode, title, params, ...rest });\n}\n\nexport function openHelpSurface(options = {}) {\n  const {\n    url = '/help',\n    mode = DisplayMode.MODAL,\n    title = 'Help',\n    params = {},\n    ...rest\n  } = options;\n\n  return openUtilitySurface({ url, mode, title, params, ...rest });\n}\n\nexport function openHelpdeskSurface(options = {}) {\n  const {\n    url = '/helpdesk',\n    mode = DisplayMode.MODAL,\n    title = 'Support',\n    params = {},\n    ...rest\n  } = options;\n\n  return openUtilitySurface({ url, mode, title, params, ...rest });\n}\n\nexport function openAISurface(options = {}) {\n  const {\n    url = '/ai',\n    mode = DisplayMode.MODAL,\n    title = 'AI Assistant',\n    params = {},\n    ...rest\n  } = options;\n\n  return openUtilitySurface({ url, mode, title, params, ...rest });\n}\n\nexport function openReportSurface(options = {}) {\n  const {\n    url = '/report',\n    mode = DisplayMode.MODAL,\n    title = 'Report',\n    params = {},\n    ...rest\n  } = options;\n\n  return openUtilitySurface({ url, mode, title, params, ...rest });\n}\n\nexport function openSubscriptionSurface(options = {}) {\n  const {\n    url = '/subscription',\n    mode = DisplayMode.MODAL,\n    title = 'Subscription',\n    params = {},\n    ...rest\n  } = options;\n\n  return openUtilitySurface({ url, mode, title, params, ...rest });\n}\n\nexport function openCheckinSurface(options = {}) {\n  const {\n    url = '/checkin',\n    mode = DisplayMode.MODAL,\n    title = 'Check-in',\n    params = {},\n    ...rest\n  } = options;\n\n  return openUtilitySurface({ url, mode, title, params, ...rest });\n}\n\nexport function openInviteSurface(options = {}) {\n  const {\n    url = '/invite',\n    mode = DisplayMode.MODAL,\n    title = 'Invite',\n    params = {},\n    ...rest\n  } = options;\n\n  return openUtilitySurface({ url, mode, title, params, ...rest });\n}\n\nexport function openShareSurface(options = {}) {\n  const {\n    url = '/share',\n    mode = DisplayMode.POPUP,\n    title = 'Share',\n    params = {},\n    popupOptions = { width: 600, height: 480 },\n    ...rest\n  } = options;\n\n  return openUtilitySurface({\n    url,\n    mode,\n    title,\n    params,\n    popupOptions,\n    ...rest,\n  });\n}\n\nexport function openTipSurface(options = {}) {\n  const {\n    url = '/tip',\n    mode = DisplayMode.MODAL,\n    title = 'Tip',\n    params = {},\n    ...rest\n  } = options;\n\n  return openUtilitySurface({ url, mode, title, params, ...rest });\n}\n\nexport function openChatSurface(options = {}) {\n  const {\n    url = '/chat',\n    mode = DisplayMode.MODAL,\n    title = 'Chat',\n    params = {},\n    ...rest\n  } = options;\n\n  return openUtilitySurface({ url, mode, title, params, ...rest });\n}\n\nexport function openAIAgentSurface(options = {}) {\n  const {\n    url = '/ai-agent',\n    mode = DisplayMode.MODAL,\n    title = 'AI Agent',\n    params = {},\n    ...rest\n  } = options;\n\n  return openUtilitySurface({ url, mode, title, params, ...rest });\n}\n\nexport function openDonateSurface(options = {}) {\n  const {\n    url = '/donate',\n    mode = DisplayMode.MODAL,\n    title = 'Donate',\n    params = {},\n    ...rest\n  } = options;\n\n  return openUtilitySurface({ url, mode, title, params, ...rest });\n}\n\n/**\n * 为 API 提交载荷自动合并页面上下文\n * @param {Record<string, any>} [payload={}]\n * @param {Object} [options={}]\n * @returns {Record<string, any>}\n */\nexport function withPageContext(payload = {}, options = {}) {\n  const ctx = getPageContext(options);\n  const {\n    extra_data: extraData,\n    ...restPayload\n  } = payload || {};\n\n  return {\n    platform: ctx.platform,\n    app_id: ctx.app_id,\n    app_name: ctx.app_name,\n    domain: ctx.domain,\n    page_url: ctx.page_url,\n    ...restPayload,\n    extra_data: {\n      screenResolution: ctx.screen,\n      language: ctx.language,\n      path: ctx.path,\n      title: ctx.title,\n      referrer: ctx.referrer,\n      ...(extraData || {}),\n    },\n  };\n}\n\nexport {\n  DisplayMode,\n  openSurface,\n  closeSurface,\n  buildUrl,\n  getPageContext,\n  mergeSurfaceParams,\n};\n\nexport default {\n  DisplayMode,\n  openUtilitySurface,\n  openFeedbackSurface,\n  openHelpSurface,\n  openHelpdeskSurface,\n  openAISurface,\n  openReportSurface,\n  openSubscriptionSurface,\n  openCheckinSurface,\n  openInviteSurface,\n  openShareSurface,\n  openTipSurface,\n  openChatSurface,\n  openAIAgentSurface,\n  openDonateSurface,\n  withPageContext,\n};\n","/**\n * @quantabit/sdk-config - ConsentManager\n * \n * 全局隐私同意管理器\n * 统一管理所有 SDK 的数据采集同意状态\n * \n * 隐私等级:\n * - essential:   核心功能（无需同意，如认证、安全）\n * - functional:  功能增强（如语言偏好、主题设置）\n * - analytics:   数据分析（如页面浏览、点击追踪）\n * - marketing:   营销推广（如广告追踪、再营销）\n * \n * 合规标准: GDPR, CCPA, ePrivacy\n */\n\nimport { logger } from './index.js';\n\n// ============ 隐私等级定义 ============\n\nexport const PrivacyLevel = {\n  ESSENTIAL: 'essential',       // 核心必需 — 不可关闭\n  FUNCTIONAL: 'functional',     // 功能性 — 可选\n  ANALYTICS: 'analytics',       // 数据分析 — 需同意\n  MARKETING: 'marketing',       // 营销追踪 — 需同意\n};\n\n// ============ 同意状态 ============\n\nexport const ConsentStatus = {\n  UNKNOWN: 'unknown',           // 用户尚未做出选择\n  GRANTED: 'granted',           // 用户已同意\n  DENIED: 'denied',             // 用户已拒绝\n  WITHDRAWN: 'withdrawn',       // 用户撤回同意\n};\n\n// ============ 存储键 ============\n\nconst CONSENT_STORAGE_KEY = 'qbit_privacy_consent';\nconst CONSENT_TIMESTAMP_KEY = 'qbit_privacy_consent_ts';\nconst CONSENT_VERSION_KEY = 'qbit_privacy_consent_ver';\n\n// 当前隐私政策版本 — 版本变更时会要求用户重新同意\nconst CURRENT_PRIVACY_VERSION = '1.0.0';\n\n// ============ ConsentManager ============\n\nclass ConsentManagerClass {\n  constructor() {\n    this._consent = {\n      [PrivacyLevel.ESSENTIAL]: ConsentStatus.GRANTED,   // 核心永远同意\n      [PrivacyLevel.FUNCTIONAL]: ConsentStatus.UNKNOWN,\n      [PrivacyLevel.ANALYTICS]: ConsentStatus.UNKNOWN,\n      [PrivacyLevel.MARKETING]: ConsentStatus.UNKNOWN,\n    };\n    this._listeners = new Set();\n    this._initialized = false;\n    this._blockedCallbacks = new Map(); // SDK 名称 -> 被阻塞的回调列表\n  }\n\n  /**\n   * 初始化同意管理器\n   * 从 localStorage 恢复已保存的同意状态\n   */\n  init() {\n    if (this._initialized) return this;\n    \n    // 初始化审计日志\n    this._auditLog = [];\n\n    if (typeof window !== 'undefined') {\n      try {\n        // 检查 GPC (Global Privacy Control) 信号 — CCPA §999.315\n        if (navigator.globalPrivacyControl === true) {\n          logger.info('[ConsentManager] GPC 信号检测到 — 自动拒绝非必要追踪');\n          this._consent[PrivacyLevel.ANALYTICS] = ConsentStatus.DENIED;\n          this._consent[PrivacyLevel.MARKETING] = ConsentStatus.DENIED;\n          this._consent[PrivacyLevel.FUNCTIONAL] = ConsentStatus.GRANTED; // GPC 不影响功能性\n          this._gpcDetected = true;\n          this._persistConsent();\n          this._addAuditEntry('gpc_detected', 'analytics,marketing auto-denied by GPC signal');\n          this._initialized = true;\n          return this;\n        }\n\n        // 检查隐私政策版本是否变更\n        const savedVersion = localStorage.getItem(CONSENT_VERSION_KEY);\n        if (savedVersion !== CURRENT_PRIVACY_VERSION) {\n          // 隐私政策更新，需要用户重新同意\n          logger.info('隐私政策版本已更新，需要重新同意');\n          this._addAuditEntry('policy_version_change', `${savedVersion} → ${CURRENT_PRIVACY_VERSION}`);\n          this._clearStoredConsent();\n        } else {\n          // 恢复已保存的同意状态\n          const saved = localStorage.getItem(CONSENT_STORAGE_KEY);\n          if (saved) {\n            const parsed = JSON.parse(saved);\n            Object.assign(this._consent, parsed);\n            // 核心同意永远保持\n            this._consent[PrivacyLevel.ESSENTIAL] = ConsentStatus.GRANTED;\n          }\n        }\n      } catch (e) {\n        logger.warn('无法恢复隐私同意状态:', e);\n      }\n    }\n\n    this._initialized = true;\n    return this;\n  }\n\n  /**\n   * 获取指定等级的同意状态\n   * @param {string} level - 隐私等级\n   * @returns {string} 同意状态\n   */\n  getConsent(level) {\n    return this._consent[level] || ConsentStatus.UNKNOWN;\n  }\n\n  /**\n   * 获取所有同意状态\n   * @returns {object} 完整的同意状态对象\n   */\n  getAllConsent() {\n    return { ...this._consent };\n  }\n\n  /**\n   * 检查是否已同意指定等级\n   * @param {string} level - 隐私等级\n   * @returns {boolean}\n   */\n  hasConsent(level) {\n    if (level === PrivacyLevel.ESSENTIAL) return true;\n    return this._consent[level] === ConsentStatus.GRANTED;\n  }\n\n  /**\n   * 检查用户是否已做出选择（非 unknown 状态）\n   * @returns {boolean}\n   */\n  hasUserDecided() {\n    return Object.keys(this._consent)\n      .filter(k => k !== PrivacyLevel.ESSENTIAL)\n      .some(k => this._consent[k] !== ConsentStatus.UNKNOWN);\n  }\n\n  /**\n   * 设置同意状态\n   * @param {string} level - 隐私等级\n   * @param {boolean} granted - 是否同意\n   */\n  setConsent(level, granted) {\n    if (level === PrivacyLevel.ESSENTIAL) {\n      logger.warn('核心功能同意不能被修改');\n      return;\n    }\n\n    const newStatus = granted ? ConsentStatus.GRANTED : ConsentStatus.DENIED;\n    const oldStatus = this._consent[level];\n    this._consent[level] = newStatus;\n\n    // 持久化\n    this._persistConsent();\n\n    // 审计日志\n    this._addAuditEntry('consent_change', `${level}: ${oldStatus} → ${newStatus}`);\n\n    // 通知监听器\n    this._notifyListeners(level, newStatus, oldStatus);\n\n    // 如果同意了，执行被阻塞的回调\n    if (granted) {\n      this._executeBlockedCallbacks(level);\n    }\n\n    logger.info(`隐私同意已更新: ${level} = ${newStatus}`);\n  }\n\n  /**\n   * 接受所有\n   */\n  acceptAll() {\n    [PrivacyLevel.FUNCTIONAL, PrivacyLevel.ANALYTICS, PrivacyLevel.MARKETING]\n      .forEach(level => {\n        this._consent[level] = ConsentStatus.GRANTED;\n      });\n    this._persistConsent();\n    this._notifyListeners('all', ConsentStatus.GRANTED);\n\n    // 执行所有被阻塞的回调\n    for (const level of Object.keys(this._consent)) {\n      this._executeBlockedCallbacks(level);\n    }\n\n    logger.info('用户已接受所有隐私同意');\n  }\n\n  /**\n   * 仅接受必需项\n   */\n  acceptEssentialOnly() {\n    [PrivacyLevel.FUNCTIONAL, PrivacyLevel.ANALYTICS, PrivacyLevel.MARKETING]\n      .forEach(level => {\n        this._consent[level] = ConsentStatus.DENIED;\n      });\n    this._persistConsent();\n    this._notifyListeners('all', ConsentStatus.DENIED);\n\n    logger.info('用户仅接受必要隐私同意');\n  }\n\n  /**\n   * 撤回所有同意\n   */\n  withdrawAll() {\n    [PrivacyLevel.FUNCTIONAL, PrivacyLevel.ANALYTICS, PrivacyLevel.MARKETING]\n      .forEach(level => {\n        this._consent[level] = ConsentStatus.WITHDRAWN;\n      });\n    this._persistConsent();\n    this._notifyListeners('all', ConsentStatus.WITHDRAWN);\n\n    logger.info('用户已撤回所有隐私同意');\n  }\n\n  /**\n   * 在获得同意后执行回调\n   * 如果已同意则立即执行，否则挂起等待同意\n   * \n   * @param {string} level - 所需的隐私等级\n   * @param {function} callback - 回调函数\n   * @param {string} sdkName - SDK 标识 (用于调试)\n   */\n  withConsent(level, callback, sdkName = 'unknown') {\n    if (this.hasConsent(level)) {\n      callback();\n    } else {\n      // 挂起回调，等待同意\n      if (!this._blockedCallbacks.has(level)) {\n        this._blockedCallbacks.set(level, []);\n      }\n      this._blockedCallbacks.get(level).push({ callback, sdkName });\n      logger.debug(`[${sdkName}] 功能已挂起，等待 ${level} 隐私同意`);\n    }\n  }\n\n  /**\n   * 订阅同意变更\n   * @param {function} listener - (level, newStatus, oldStatus) => void\n   * @returns {function} 取消订阅函数\n   */\n  subscribe(listener) {\n    this._listeners.add(listener);\n    return () => this._listeners.delete(listener);\n  }\n\n  /**\n   * 按隐私等级订阅同意变更\n   * 比 subscribe 更精准 — 只在指定等级变更时触发\n   * \n   * @param {string} level - 隐私等级 (analytics/functional/marketing)\n   * @param {function} callback - (granted: boolean) => void\n   * @returns {function} 取消订阅函数\n   * \n   * @example\n   * consentManager.onConsentChange('analytics', (granted) => {\n   *   if (granted) startTracking();\n   *   else stopTracking();\n   * });\n   */\n  onConsentChange(level, callback) {\n    const wrapper = (changedLevel, newStatus) => {\n      // 精确匹配 或 全局变更(acceptAll/withdrawAll)\n      if (changedLevel === level || changedLevel === 'all') {\n        const granted = changedLevel === 'all' \n          ? this.hasConsent(level) \n          : newStatus === ConsentStatus.GRANTED;\n        try {\n          callback(granted);\n        } catch (e) {\n          logger.error(`[ConsentManager] onConsentChange 回调错误 (${level}):`, e);\n        }\n      }\n    };\n    this._listeners.add(wrapper);\n    return () => this._listeners.delete(wrapper);\n  }\n\n  /**\n   * 获取隐私摘要 — 用于展示给用户\n   * @returns {object} \n   */\n  getPrivacySummary() {\n    return {\n      version: CURRENT_PRIVACY_VERSION,\n      consent: this.getAllConsent(),\n      decided: this.hasUserDecided(),\n      timestamp: typeof window !== 'undefined' \n        ? localStorage.getItem(CONSENT_TIMESTAMP_KEY) \n        : null,\n      categories: {\n        [PrivacyLevel.ESSENTIAL]: {\n          label: 'Essential',\n          labelZh: '核心必需',\n          description: 'Required for basic functionality like security and authentication.',\n          descriptionZh: '安全认证等基础功能所必需，不可关闭。',\n          required: true,\n        },\n        [PrivacyLevel.FUNCTIONAL]: {\n          label: 'Functional',\n          labelZh: '功能增强',\n          description: 'Enables enhanced features like language preferences and theme settings.',\n          descriptionZh: '语言偏好、主题设置等功能增强。',\n          required: false,\n        },\n        [PrivacyLevel.ANALYTICS]: {\n          label: 'Analytics',\n          labelZh: '数据分析',\n          description: 'Helps us understand usage patterns to improve the product.',\n          descriptionZh: '帮助我们了解使用模式以改进产品。',\n          required: false,\n        },\n        [PrivacyLevel.MARKETING]: {\n          label: 'Marketing',\n          labelZh: '营销推广',\n          description: 'Used for personalized content and advertising.',\n          descriptionZh: '用于个性化内容和广告推送。',\n          required: false,\n        },\n      },\n    };\n  }\n\n  // ============ 内部方法 ============\n\n  _persistConsent() {\n    if (typeof window === 'undefined') return;\n    try {\n      localStorage.setItem(CONSENT_STORAGE_KEY, JSON.stringify(this._consent));\n      localStorage.setItem(CONSENT_TIMESTAMP_KEY, new Date().toISOString());\n      localStorage.setItem(CONSENT_VERSION_KEY, CURRENT_PRIVACY_VERSION);\n    } catch (e) {\n      logger.warn('无法持久化隐私同意:', e);\n    }\n  }\n\n  _clearStoredConsent() {\n    if (typeof window === 'undefined') return;\n    try {\n      localStorage.removeItem(CONSENT_STORAGE_KEY);\n      localStorage.removeItem(CONSENT_TIMESTAMP_KEY);\n      localStorage.removeItem(CONSENT_VERSION_KEY);\n    } catch (e) { /* ignore */ }\n  }\n\n  _notifyListeners(level, newStatus, oldStatus) {\n    this._listeners.forEach(listener => {\n      try {\n        listener(level, newStatus, oldStatus);\n      } catch (e) {\n        logger.error('隐私同意监听器执行错误:', e);\n      }\n    });\n\n    // 触发全局事件\n    if (typeof window !== 'undefined') {\n      try {\n        window.dispatchEvent(new CustomEvent('qbit:consent-change', {\n          detail: { level, status: newStatus, previousStatus: oldStatus }\n        }));\n      } catch (e) { /* ignore */ }\n    }\n  }\n\n  _executeBlockedCallbacks(level) {\n    const callbacks = this._blockedCallbacks.get(level) || [];\n    callbacks.forEach(({ callback, sdkName }) => {\n      try {\n        logger.debug(`[${sdkName}] 同意已获得，执行挂起的功能`);\n        callback();\n      } catch (e) {\n        logger.error(`[${sdkName}] 挂起回调执行错误:`, e);\n      }\n    });\n    this._blockedCallbacks.delete(level);\n  }\n\n  // ============ 审计日志 ============\n\n  /**\n   * 添加审计条目\n   * @param {string} action - 操作类型\n   * @param {string} detail - 详细信息\n   * @private\n   */\n  _addAuditEntry(action, detail) {\n    if (!this._auditLog) this._auditLog = [];\n    this._auditLog.push({\n      action,\n      detail,\n      timestamp: new Date().toISOString(),\n      consent: { ...this._consent },\n    });\n    // 保留最近 50 条\n    if (this._auditLog.length > 50) {\n      this._auditLog = this._auditLog.slice(-50);\n    }\n  }\n\n  /**\n   * 获取同意审计日志 — 用于 GDPR 数据导出\n   * @returns {Array} 审计条目\n   */\n  getConsentLog() {\n    return this._auditLog || [];\n  }\n\n  /**\n   * 是否检测到 GPC 信号\n   * @returns {boolean}\n   */\n  get isGPCDetected() {\n    return this._gpcDetected === true;\n  }\n\n  /**\n   * 是否检测到 DNT 信号\n   * @returns {boolean}\n   */\n  get isDNTDetected() {\n    if (typeof navigator === 'undefined') return false;\n    return navigator.doNotTrack === '1' || navigator.doNotTrack === 'yes';\n  }\n}\n\n// ============ 单例导出 ============\n\nexport const consentManager = new ConsentManagerClass();\n\n// ============ React Hook ============\n\nimport { useState, useEffect, useCallback } from 'react';\n\n/**\n * React Hook: 隐私同意管理\n * \n * @example\n * const { consent, hasConsent, setConsent, acceptAll } = useConsent();\n * \n * if (hasConsent('analytics')) {\n *   // 可以进行数据追踪\n * }\n */\nexport function useConsent() {\n  const [consent, setConsentState] = useState(() => consentManager.getAllConsent());\n\n  useEffect(() => {\n    consentManager.init();\n    setConsentState(consentManager.getAllConsent());\n\n    const unsubscribe = consentManager.subscribe(() => {\n      setConsentState(consentManager.getAllConsent());\n    });\n    return unsubscribe;\n  }, []);\n\n  const setConsentLevel = useCallback((level, granted) => {\n    consentManager.setConsent(level, granted);\n  }, []);\n\n  const acceptAllFn = useCallback(() => {\n    consentManager.acceptAll();\n  }, []);\n\n  const acceptEssentialFn = useCallback(() => {\n    consentManager.acceptEssentialOnly();\n  }, []);\n\n  const withdrawFn = useCallback(() => {\n    consentManager.withdrawAll();\n  }, []);\n\n  return {\n    consent,\n    hasConsent: (level) => consentManager.hasConsent(level),\n    hasUserDecided: consentManager.hasUserDecided(),\n    setConsent: setConsentLevel,\n    acceptAll: acceptAllFn,\n    acceptEssentialOnly: acceptEssentialFn,\n    withdrawAll: withdrawFn,\n    summary: consentManager.getPrivacySummary(),\n  };\n}\n","/**\n * @quantabit/sdk-config - DataSanitizer\n * \n * 数据脱敏工具\n * 自动检测和脱敏 PII (个人身份信息)\n * 用于日志、错误报告、分析数据中的隐私保护\n */\n\n// ============ PII 检测模式 ============\n\nconst PII_PATTERNS = {\n  // 邮箱地址\n  email: {\n    regex: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}/g,\n    mask: (match) => {\n      const [local, domain] = match.split('@');\n      return `${local[0]}***@${domain}`;\n    },\n  },\n  // 手机号码 (国际格式)\n  phone: {\n    regex: /(\\+?\\d{1,4}[-.\\s]?)?\\(?\\d{2,4}\\)?[-.\\s]?\\d{3,4}[-.\\s]?\\d{3,4}/g,\n    mask: (match) => {\n      const digits = match.replace(/\\D/g, '');\n      if (digits.length < 7) return match; // 太短不是手机号\n      return `${digits.slice(0, 3)}****${digits.slice(-4)}`;\n    },\n  },\n  // 身份证号 (中国)\n  idCard: {\n    regex: /\\d{6}(19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]/g,\n    mask: (match) => `${match.slice(0, 6)}********${match.slice(-4)}`,\n  },\n  // 钱包地址 (Ethereum-style)\n  walletAddress: {\n    regex: /0x[a-fA-F0-9]{40}/g,\n    mask: (match) => `${match.slice(0, 6)}...${match.slice(-4)}`,\n  },\n  // IP 地址\n  ipAddress: {\n    regex: /\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b/g,\n    mask: (match) => {\n      const parts = match.split('.');\n      return `${parts[0]}.${parts[1]}.*.*`;\n    },\n  },\n  // JWT Token\n  jwtToken: {\n    regex: /eyJ[a-zA-Z0-9_-]+\\.eyJ[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+/g,\n    mask: () => '[REDACTED_TOKEN]',\n  },\n  // API Key patterns\n  apiKey: {\n    regex: /(api[_-]?key|apikey|secret|password|token|auth)[=:]\\s*['\"]?([a-zA-Z0-9_\\-./+]{20,})['\"]?/gi,\n    mask: (match) => {\n      const colonIdx = match.indexOf(':');\n      const equalIdx = match.indexOf('=');\n      const sepIdx = colonIdx >= 0 ? colonIdx : equalIdx;\n      const key = match.slice(0, sepIdx + 1);\n      return `${key} [REDACTED]`;\n    },\n  },\n  // 信用卡号 (Visa/MC/Amex 等常见格式)\n  creditCard: {\n    regex: /\\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|6(?:011|5[0-9]{2})[0-9]{12})\\b/g,\n    mask: (match) => `****-****-****-${match.slice(-4)}`,\n  },\n  // DID (去中心化身份标识符)\n  did: {\n    regex: /did:[a-z]+:[a-zA-Z0-9._%-]+/g,\n    mask: (match) => {\n      const parts = match.split(':');\n      if (parts.length >= 3) {\n        const id = parts[2];\n        return `${parts[0]}:${parts[1]}:${id.slice(0, 6)}...${id.slice(-4)}`;\n      }\n      return `${match.slice(0, 12)}...`;\n    },\n  },\n  // SSN (美国社会安全号)\n  ssn: {\n    regex: /\\b\\d{3}-\\d{2}-\\d{4}\\b/g,\n    mask: () => '***-**-****',\n  },\n};\n\n// ============ 敏感字段名 ============\n\nconst SENSITIVE_FIELDS = new Set([\n  'password', 'passwd', 'secret', 'token', 'accessToken', 'refreshToken',\n  'access_token', 'refresh_token', 'api_key', 'apiKey', 'privateKey',\n  'private_key', 'ssn', 'socialSecurityNumber', 'creditCard', 'credit_card',\n  'cardNumber', 'card_number', 'cvv', 'pin', 'otp', 'mnemonic', 'seed',\n  'seedPhrase', 'seed_phrase', 'idNumber', 'id_number', 'passport',\n  // Web3 / DeFi 扩展\n  'keystore', 'encryptedKey', 'encrypted_key', 'recoveryPhrase', 'recovery_phrase',\n  'walletSeed', 'wallet_seed', 'derivationPath', 'derivation_path',\n  'secretKey', 'secret_key', 'signingKey', 'signing_key',\n  // 支付安全\n  'cardCvv', 'card_cvv', 'securityCode', 'security_code',\n  'expiryDate', 'expiry_date', 'paymentPassword', 'payment_password',\n]);\n\n// ============ DataSanitizer ============\n\nclass DataSanitizerClass {\n  constructor() {\n    this._customRules = [];\n    this._whitelistFields = new Set();\n  }\n\n  /**\n   * 脱敏文本内容 — 自动检测并掩码 PII\n   * @param {string} text - 原始文本\n   * @param {string[]} types - 要检测的 PII 类型 (默认全部)\n   * @returns {string} 脱敏后的文本\n   */\n  sanitizeText(text, types = null) {\n    if (typeof text !== 'string') return text;\n\n    let result = text;\n    const patterns = types \n      ? Object.entries(PII_PATTERNS).filter(([key]) => types.includes(key))\n      : Object.entries(PII_PATTERNS);\n\n    for (const [, { regex, mask }] of patterns) {\n      // 因为 regex 有 /g 标志，需要重置 lastIndex\n      regex.lastIndex = 0;\n      result = result.replace(regex, mask);\n    }\n\n    // 应用自定义规则\n    for (const rule of this._customRules) {\n      rule.regex.lastIndex = 0;\n      result = result.replace(rule.regex, rule.mask);\n    }\n\n    return result;\n  }\n\n  /**\n   * 脱敏对象 — 递归处理所有字段\n   * @param {object} obj - 原始对象\n   * @param {object} options - 选项\n   * @returns {object} 脱敏后的深拷贝对象\n   */\n  sanitizeObject(obj, options = {}) {\n    if (obj === null || obj === undefined) return obj;\n    if (typeof obj !== 'object') return obj;\n    if (Array.isArray(obj)) {\n      return obj.map(item => this.sanitizeObject(item, options));\n    }\n\n    const maxDepth = options.maxDepth || 10;\n    const currentDepth = options._currentDepth || 0;\n\n    if (currentDepth >= maxDepth) {\n      return '[MAX_DEPTH_REACHED]';\n    }\n\n    const result = {};\n    for (const [key, value] of Object.entries(obj)) {\n      // 白名单字段跳过\n      if (this._whitelistFields.has(key)) {\n        result[key] = value;\n        continue;\n      }\n\n      // 检查是否为敏感字段\n      if (SENSITIVE_FIELDS.has(key) || SENSITIVE_FIELDS.has(key.toLowerCase())) {\n        result[key] = typeof value === 'string' && value.length > 0 \n          ? '[REDACTED]' \n          : value;\n        continue;\n      }\n\n      // 递归处理对象\n      if (typeof value === 'object' && value !== null) {\n        result[key] = this.sanitizeObject(value, {\n          ...options,\n          _currentDepth: currentDepth + 1,\n        });\n      } else if (typeof value === 'string') {\n        result[key] = this.sanitizeText(value);\n      } else {\n        result[key] = value;\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * 脱敏 URL — 移除查询参数中的敏感信息\n   * @param {string} url - 原始 URL\n   * @returns {string} 脱敏后的 URL\n   */\n  sanitizeUrl(url) {\n    if (typeof url !== 'string') return url;\n\n    try {\n      const parsed = new URL(url, 'https://placeholder.com');\n      const sensitiveParams = ['token', 'key', 'secret', 'password', 'auth', 'api_key', 'access_token'];\n      \n      for (const param of sensitiveParams) {\n        if (parsed.searchParams.has(param)) {\n          parsed.searchParams.set(param, '[REDACTED]');\n        }\n      }\n\n      // 如果原始 URL 是相对路径\n      if (!url.startsWith('http')) {\n        return parsed.pathname + parsed.search + parsed.hash;\n      }\n      return parsed.toString();\n    } catch {\n      // URL 解析失败，使用文本脱敏\n      return this.sanitizeText(url);\n    }\n  }\n\n  /**\n   * 创建安全的日志对象\n   * 用于错误报告和审计日志\n   * \n   * @param {object} data - 原始数据\n   * @returns {object} 安全的日志数据\n   */\n  createSafeLogEntry(data) {\n    return this.sanitizeObject(data);\n  }\n\n  /**\n   * 添加自定义脱敏规则\n   * @param {string} name - 规则名称\n   * @param {RegExp} regex - 匹配正则 (必须有 /g 标志)\n   * @param {function} mask - 掩码函数 (match) => maskedString\n   */\n  addRule(name, regex, mask) {\n    this._customRules.push({ name, regex, mask });\n  }\n\n  /**\n   * 添加白名单字段 — 这些字段不会被脱敏\n   * @param {string[]} fields - 字段名列表\n   */\n  addWhitelist(fields) {\n    fields.forEach(f => this._whitelistFields.add(f));\n  }\n\n  /**\n   * 匿名化用户数据\n   * 用于分析统计时的数据处理\n   * \n   * @param {object} userData - 用户数据\n   * @returns {object} 匿名化后的数据\n   */\n  anonymize(userData) {\n    if (!userData || typeof userData !== 'object') return userData;\n\n    const anonymized = { ...userData };\n\n    // 替换直接标识符\n    if (anonymized.email) anonymized.email = this._hashString(anonymized.email);\n    if (anonymized.phone) anonymized.phone = this._hashString(anonymized.phone);\n    if (anonymized.name) delete anonymized.name;\n    if (anonymized.realName) delete anonymized.realName;\n    if (anonymized.real_name) delete anonymized.real_name;\n    if (anonymized.address) delete anonymized.address;\n    if (anonymized.ip) anonymized.ip = this._anonymizeIp(anonymized.ip);\n    if (anonymized.walletAddress) {\n      anonymized.walletAddress = anonymized.walletAddress.slice(0, 6) + '...';\n    }\n\n    // 保留非标识性数据用于分析\n    // 如：国家、语言、设备类型、浏览器类型等\n\n    return anonymized;\n  }\n\n  // ============ 内部方法 ============\n\n  /**\n   * 简单哈希 — 用于匿名化（非加密安全）\n   */\n  _hashString(str) {\n    let hash = 0;\n    for (let i = 0; i < str.length; i++) {\n      const char = str.charCodeAt(i);\n      hash = ((hash << 5) - hash) + char;\n      hash = hash & hash; // Convert to 32bit integer\n    }\n    return `anon_${Math.abs(hash).toString(36)}`;\n  }\n\n  _anonymizeIp(ip) {\n    if (typeof ip !== 'string') return ip;\n    const parts = ip.split('.');\n    if (parts.length === 4) {\n      return `${parts[0]}.${parts[1]}.0.0`;\n    }\n    return ip;\n  }\n\n  /**\n   * 一键日志脱敏 — 所有 SDK 通用的日志安全输出\n   * 自动检测并脱敏 PII、Token、API Key 等敏感数据\n   * \n   * @param {...*} args - 任意数量的日志参数\n   * @returns {string[]} 脱敏后的日志参数数组\n   * \n   * @example\n   * // 替代 console.log(user.email, token)\n   * console.log(...dataSanitizer.sanitizeForLogging(user.email, token));\n   */\n  sanitizeForLogging(...args) {\n    return args.map(arg => {\n      if (typeof arg === 'string') {\n        return this.sanitizeText(arg);\n      }\n      if (arg && typeof arg === 'object') {\n        try {\n          return JSON.parse(JSON.stringify(arg, (key, value) => {\n            if (typeof value === 'string') {\n              return this.sanitizeText(value);\n            }\n            // 脱敏常见敏感字段名\n            const sensitiveKeys = ['password', 'secret', 'token', 'apiKey', 'api_key', \n                                   'authorization', 'cookie', 'session', 'private_key',\n                                   'mnemonic', 'seed', 'passphrase'];\n            if (sensitiveKeys.includes(key.toLowerCase())) {\n              return '[REDACTED]';\n            }\n            return value;\n          }));\n        } catch {\n          return '[Object - sanitize failed]';\n        }\n      }\n      return arg;\n    });\n  }\n\n  /**\n   * 完全移除所有 PII — GDPR 数据删除场景\n   * 比 sanitizeText 更激进，直接替换为占位符\n   * \n   * @param {*} data - 任意数据\n   * @returns {*} PII 完全移除后的数据\n   */\n  redactAllPII(data) {\n    if (typeof data === 'string') {\n      let result = data;\n      for (const { regex } of Object.values(PII_PATTERNS)) {\n        const freshRegex = new RegExp(regex.source, regex.flags);\n        result = result.replace(freshRegex, '[PII_REMOVED]');\n      }\n      return result;\n    }\n    if (Array.isArray(data)) {\n      return data.map(item => this.redactAllPII(item));\n    }\n    if (data && typeof data === 'object') {\n      const result = {};\n      for (const [key, value] of Object.entries(data)) {\n        result[key] = this.redactAllPII(value);\n      }\n      return result;\n    }\n    return data;\n  }\n}\n\n// ============ 单例导出 ============\n\nexport const dataSanitizer = new DataSanitizerClass();\nexport default dataSanitizer;\n","/**\n * Privacy Orchestrator — 统一隐私合规编排器\n * \n * 跨所有 SDK 的一站式隐私操作：\n * - 一键数据删除 (GDPR 第17条: 被遗忘权)\n * - 一键数据导出 (GDPR 第20条: 数据可携带性)\n * - 统一同意管理\n * - 全平台数据声明\n * \n * 使用场景:\n *   import { privacyOrchestrator } from '@quantabit/sdk-config';\n *   await privacyOrchestrator.deleteAllUserData(); // GDPR 数据删除\n *   const exportData = await privacyOrchestrator.exportAllUserData(); // 数据导出\n */\n\nimport { consentManager } from './ConsentManager';\n\n/**\n * 隐私编排器\n */\nclass PrivacyOrchestratorClass {\n  constructor() {\n    // 注册的 SDK 清理器\n    this._cleaners = new Map();\n    // 注册的 SDK 数据导出器\n    this._exporters = new Map();\n    // 注册的 SDK 数据声明\n    this._disclosures = new Map();\n  }\n\n  /**\n   * 注册 SDK 的隐私操作\n   * 各 SDK 在初始化时调用此方法注册自己的隐私处理函数\n   * \n   * @param {string} sdkName - SDK 名称\n   * @param {object} handlers - 隐私处理器\n   * @param {function} handlers.clean - 数据清理函数 (应返回 boolean)\n   * @param {function} handlers.export - 数据导出函数 (应返回 object)\n   * @param {function} handlers.getDisclosure - 数据声明函数\n   */\n  register(sdkName, handlers = {}) {\n    if (handlers.clean) this._cleaners.set(sdkName, handlers.clean);\n    if (handlers.export) this._exporters.set(sdkName, handlers.export);\n    if (handlers.getDisclosure) this._disclosures.set(sdkName, handlers.getDisclosure);\n  }\n\n  /**\n   * 注销 SDK\n   */\n  unregister(sdkName) {\n    this._cleaners.delete(sdkName);\n    this._exporters.delete(sdkName);\n    this._disclosures.delete(sdkName);\n  }\n\n  /**\n   * 一键删除所有用户数据 — GDPR 第17条: 被遗忘权\n   * 调用所有已注册 SDK 的数据清理函数\n   * \n   * @returns {Promise<object>} 每个 SDK 的清理结果\n   */\n  async deleteAllUserData() {\n    const results = {};\n    const errors = [];\n\n    for (const [sdkName, cleanFn] of this._cleaners) {\n      try {\n        const result = await cleanFn();\n        results[sdkName] = { success: true, result };\n      } catch (error) {\n        results[sdkName] = { success: false, error: error.message };\n        errors.push({ sdk: sdkName, error: error.message });\n      }\n    }\n\n    // 清除通用 localStorage 数据\n    this._clearGenericLocalStorage();\n\n    // 撤销所有同意\n    consentManager.init();\n    consentManager.acceptEssentialOnly();\n\n    return {\n      timestamp: new Date().toISOString(),\n      action: 'delete_all_user_data',\n      gdprArticle: 'Art. 17 - Right to erasure',\n      sdkResults: results,\n      errors,\n      localStorageCleared: true,\n      consentReset: true,\n    };\n  }\n\n  /**\n   * 一键导出所有用户数据 — GDPR 第20条: 数据可携带性\n   * 调用所有已注册 SDK 的数据导出函数\n   * \n   * @param {object} options - 导出选项\n   * @param {string} options.format - 导出格式 (json/csv)\n   * @returns {Promise<object>} 合并的导出数据\n   */\n  async exportAllUserData(options = {}) {\n    const exportData = {\n      exportDate: new Date().toISOString(),\n      format: 'QBit Platform Data Export (GDPR Art. 20)',\n      platform: 'QuantaBit',\n      sdkData: {},\n      errors: [],\n    };\n\n    for (const [sdkName, exportFn] of this._exporters) {\n      try {\n        const data = await exportFn(options);\n        exportData.sdkData[sdkName] = data;\n      } catch (error) {\n        exportData.errors.push({ sdk: sdkName, error: error.message });\n      }\n    }\n\n    // 添加同意记录\n    exportData.consentHistory = consentManager.getConsentLog?.() || 'Not available';\n\n    return exportData;\n  }\n\n  /**\n   * 获取全平台数据使用声明\n   * 汇总所有 SDK 的数据收集声明\n   * \n   * @returns {object} 统一的数据声明\n   */\n  getFullDataDisclosure() {\n    const disclosure = {\n      platform: 'QuantaBit',\n      lastUpdated: new Date().toISOString(),\n      sdks: {},\n      consentLevels: {\n        essential: '核心安全功能（身份验证、防欺诈），无需同意。',\n        functional: '增强体验（推送通知、钱包功能），需要用户同意。',\n        analytics: '使用分析和行为追踪，需要用户明确同意。',\n        marketing: '营销和广告定向，需要用户明确同意。',\n      },\n    };\n\n    for (const [sdkName, disclosureFn] of this._disclosures) {\n      try {\n        disclosure.sdks[sdkName] = disclosureFn();\n      } catch (e) {\n        disclosure.sdks[sdkName] = { error: e.message };\n      }\n    }\n\n    return disclosure;\n  }\n\n  /**\n   * 撤销所有同意并停止所有追踪\n   */\n  revokeAllConsent() {\n    consentManager.init();\n    consentManager.acceptEssentialOnly();\n    return { success: true, timestamp: new Date().toISOString() };\n  }\n\n  /**\n   * 获取已注册的 SDK 数量\n   */\n  get registeredSDKs() {\n    return {\n      cleaners: [...this._cleaners.keys()],\n      exporters: [...this._exporters.keys()],\n      disclosures: [...this._disclosures.keys()],\n    };\n  }\n\n  /**\n   * 清除通用 localStorage 数据\n   * @private\n   */\n  _clearGenericLocalStorage() {\n    if (typeof localStorage === 'undefined') return;\n    \n    const prefixes = [\n      'qbit_', 'im_', 'tracking_', 'analytics_', \n      'wallet_', 'push_', 'notification_',\n    ];\n    \n    const keysToRemove = [];\n    for (let i = 0; i < localStorage.length; i++) {\n      const key = localStorage.key(i);\n      if (key && prefixes.some(prefix => key.startsWith(prefix))) {\n        keysToRemove.push(key);\n      }\n    }\n    \n    keysToRemove.forEach(key => localStorage.removeItem(key));\n  }\n\n  // ============ 自动注册辅助 ============\n\n  /**\n   * 从 SDK 实例自动注册隐私处理器\n   * SDK 只需实现 clearAllUserData/exportXxxData/getDataDisclosure 任一方法即可\n   * \n   * @param {string} sdkName - SDK 名称\n   * @param {object} instance - SDK 实例\n   * \n   * @example\n   * // 在 SDK 初始化时自动注册\n   * privacyOrchestrator.registerFromInstance('search-sdk', searchApi);\n   */\n  registerFromInstance(sdkName, instance) {\n    const handlers = {};\n    \n    // 自动检测清理方法\n    const cleanMethods = ['clearAllUserData', 'clearData', 'clearLocal', 'gdprClear'];\n    for (const method of cleanMethods) {\n      if (typeof instance[method] === 'function') {\n        handlers.clean = () => instance[method]();\n        break;\n      }\n    }\n\n    // 自动检测导出方法\n    const exportMethods = [\n      'exportMyData', 'exportSearchData', 'exportPushData',\n      'exportPaymentData', 'exportKycData', 'exportChatData',\n      'exportData',\n    ];\n    for (const method of exportMethods) {\n      if (typeof instance[method] === 'function') {\n        handlers.export = (opts) => instance[method](opts);\n        break;\n      }\n    }\n\n    // 自动检测声明方法 \n    if (typeof instance.getDataDisclosure === 'function') {\n      handlers.getDisclosure = () => instance.getDataDisclosure();\n    }\n\n    if (Object.keys(handlers).length > 0) {\n      this.register(sdkName, handlers);\n    }\n  }\n\n  /**\n   * 批量注册多个 SDK\n   * @param {Object<string, object>} sdkMap - { sdkName: instance }\n   */\n  registerBatch(sdkMap) {\n    for (const [name, instance] of Object.entries(sdkMap)) {\n      this.registerFromInstance(name, instance);\n    }\n  }\n}\n\nexport const privacyOrchestrator = new PrivacyOrchestratorClass();\n\nexport { PrivacyOrchestratorClass };\n\nexport default privacyOrchestrator;\n","/**\n * @quantabit/sdk-config\n * \n * QuantaBit SDK Unified Config\n * \n * All SDKs share this config - single point of modification for global effect:\n * - API base URL\n * - Timeout\n * - Auth configuration\n * - Debug mode\n * \n * Usage:\n * 1. Use default configuration directly\n *    import { getConfig } from '@quantabit/sdk-config';\n *    const config = getConfig();\n * \n * 2. Initialize config at app startup\n *    import { initConfig } from '@quantabit/sdk-config';\n *    initConfig({ apiBaseUrl: 'https://api.example.com' });\n * \n * 3. 使用 React Hook\n *    import { useSDKConfig } from '@quantabit/sdk-config';\n *    const { config, setApiBaseUrl } = useSDKConfig();\n */\n\n// ============ 默认配置 ============\n\n/**\n * 默认 API 配置\n * 注意：生产环境应通过 initConfig 覆盖这些值\n */\nconst DEFAULT_CONFIG = {\n  // === API 配置 ===\n  apiBaseUrl: '/api/v1',           // API 基础路径（相对路径，由后端代理）\n  apiFullUrl: (typeof process !== 'undefined' && process.env?.QBIT_API_URL) ||\n    (typeof window !== 'undefined' && window.location?.origin?.includes('dev')\n      ? 'https://api.dev.qbitwallet.io'\n      : 'https://api.qbitwallet.io'), // 完整 API URL Fallback 品牌域名\n\n  // === 超时配置 ===\n  timeout: 30000,                   // 请求超时（毫秒）\n  retryCount: 3,                    // 重试次数\n  retryDelay: 1000,                 // 重试延迟（毫秒）\n\n  // === Auth configuration ===\n  tokenStorageKey: 'qbit_did_access_token',\n  refreshTokenStorageKey: 'qbit_did_refresh_token',\n  currentSessionKey: 'qbit_did_current',\n  autoRefreshToken: true,           // 自动刷新 Token\n\n  // === WebSocket 配置 ===\n  enableWs: typeof process !== 'undefined'\n    ? (process.env?.NEXT_PUBLIC_ENABLE_WS !== 'false' && process.env?.NEXT_PUBLIC_ENABLE_WS !== false)\n    : true,\n  wsBaseUrl: '',                     // WebSocket URL（需通过 initConfig 配置）\n  wsReconnect: true,\n  wsReconnectInterval: 3000,\n\n  // === 收银台配置 ===\n  checkoutUrl: (typeof process !== 'undefined' && process.env?.CHECKOUT_URL) || 'https://pay.qbitwallet.io',\n  checkoutSandboxUrl: (typeof process !== 'undefined' && process.env?.CHECKOUT_SANDBOX_URL) || 'https://sandbox-pay.qbitwallet.io',\n\n  // === 各子系统入口 URL ===\n  merchantUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_MERCHANT_URL) || 'https://merchant.qbitwallet.io',\n  adminUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ADMIN_URL) || 'https://admin.qbitwallet.io',\n  payUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_PAY_URL) || 'https://pay.qbitwallet.io',\n  walletUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_WALLET_URL) || 'https://wallet.qbitwallet.io',\n  didApiUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_DID_API_URL) || 'https://did.qbitwallet.io',\n  analyticsUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ANALYTICS_URL) || 'https://analytics.mydc.space',\n  analyticsApiUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ANALYTICS_API_URL) || 'https://analytics-api.mydc.space',\n  analyticsCollectorUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ANALYTICS_COLLECTOR_URL) || 'https://analytics.mydc.space',\n\n  // === 调试配置 ===\n  debug: process.env.NODE_ENV !== 'production',\n  logLevel: 'info',                 // 'debug' | 'info' | 'warn' | 'error'\n\n  // === 环境配置 ===\n  environment: process.env.NODE_ENV || 'development',\n\n  // === QBit Chain 链配置 ===\n  chainNetwork: 'mainnet',            // 当前链网络: 'mainnet' | 'testnet' | 'devnet'\n  chainEndpoint: 'https://api.mainnet.qbitchain.io/',  // RPC 端点\n  chainWsEndpoint: 'wss://api.mainnet.qbitchain.io/',  // WebSocket RPC 端点\n  chainCommitment: 'confirmed',       // 确认级别: 'processed' | 'confirmed' | 'finalized'\n  chainTimeoutMs: 30000,              // 链交互超时（毫秒）\n  // 顶层浏览器/存储入口，供 explorer-sdk / ipfs-sdk 等直接读取；切换网络时由 setChainNetwork 同步 explorerUrl\n  explorerUrl: 'https://explorer.mg.qbitchain.io',\n  ipfsGateway: 'https://ipfs.io/ipfs',\n\n  // === Name Service ===\n  nameService: {\n    tld: '.qbit',\n    apiPrefix: '/ns',\n    anchorNamespace: 'qbit_ns',\n  },\n\n  // === 语言配置 ===\n  language: 'zh',                    // 默认语言\n  fallbackLanguage: 'en',            // 回退语言\n  supportedLanguages: ['zh', 'en', 'ja', 'ko'],  // Supported Languages\n  languageStorageKey: 'qbit_did_language',        // localStorage key\n};\n\nfunction isAbsoluteUrl(value = '') {\n  return /^https?:\\/\\//i.test(value);\n}\n\nfunction trimTrailingSlash(value = '') {\n  return value.endsWith('/') ? value.slice(0, -1) : value;\n}\n\nfunction deriveApiFullUrl(apiBaseUrl) {\n  if (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_API_URL) {\n    return trimTrailingSlash(process.env.NEXT_PUBLIC_API_URL);\n  }\n  if (isAbsoluteUrl(apiBaseUrl)) {\n    return trimTrailingSlash(apiBaseUrl);\n  }\n  // 自适应判断正式域名\n  if (typeof window !== 'undefined') {\n    const isIcenter = window.location?.host?.includes('icenter.space') || window.location?.host?.includes('xwin.live') || window.location?.host?.includes('xwin.live');\n    if (isIcenter) {\n      return 'https://im.icenter.space';\n    }\n  }\n  return '';\n}\n\nfunction deriveWsBaseUrl(apiBaseUrl, currentWsBaseUrl = '') {\n  if (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_WS_URL) {\n    return trimTrailingSlash(process.env.NEXT_PUBLIC_WS_URL);\n  }\n  if (currentWsBaseUrl) {\n    return trimTrailingSlash(currentWsBaseUrl);\n  }\n\n  // 自适应判断正式域名\n  if (typeof window !== 'undefined') {\n    const isIcenter = window.location?.host?.includes('icenter.space') || window.location?.host?.includes('xwin.live') || window.location?.host?.includes('xwin.live');\n    if (isIcenter) {\n      return 'wss://im.icenter.space/ws';\n    }\n  }\n\n  if (!isAbsoluteUrl(apiBaseUrl)) {\n    return '';\n  }\n\n  return trimTrailingSlash(apiBaseUrl).replace(/^http/i, 'ws');\n}\n\n\n// ============ QBit Chain 网络配置 ============\n\n/**\n * QBit Chain 规范程序地址（重新创世后与 Solana 规范地址对齐）\n * 单一来源，供所有 SDK / web 引用，杜绝散落硬编码。\n * 与 qbit_webs/qbit-chain.config.json 及 configs/qbit_program_registry.json 保持一致。\n */\nexport const CANONICAL_PROGRAMS = {\n  system: '11111111111111111111111111111111',\n  token: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',\n  token2022: 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb',\n  associatedToken: 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL',\n  memo: 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr',\n  tokenMetadata: 'metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s',\n  mplCore: 'CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d',\n  raydiumCpmm: 'CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C',\n  raydiumCpSwap: 'CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C', // 别名(向后兼容)\n  raydiumAmmV4: '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8',\n  raydiumClmm: 'CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK',\n  squadsV4: 'SQDS4ep65T869zMMBKyuUq6aD6EgTu8psMjkvj52pCf',\n  orcaWhirlpool: 'whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc',\n  openbookV2: 'opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb',\n  mplBubblegum: 'BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY',\n  mplCandyGuard: 'Guard1JwRhJkVH6XZhzoYxeBVQe872VH6QggF4BWmS9g',\n};\n\n/**\n * QBit 代币 mint（非 program_id）。\n * ⚠️ XWIN 当前为旧链 mint，重新创世后需在规范 TokenkegQ 下重发并回填新 mint。\n */\nexport const CANONICAL_TOKENS = {\n  wQBT: { mint: 'So11111111111111111111111111111111111111112', decimals: 9, symbol: 'wQBT', name: 'Wrapped QBT' },\n  XWIN: { mint: 'Gw3veigZZ9FYfhixrQkD8hLUGUGq88AbTgnu7Ay3WwBa', decimals: 6, symbol: 'XWIN', name: 'XWIN', status: 'pending_reissue_on_new_genesis' },\n};\n\n/**\n * QBit Chain 网络端点配置\n * 基于 Solana 改编，RPC 接口完全兼容\n */\nexport const CHAIN_NETWORKS = {\n  mainnet: {\n    name: 'QBit Mainnet',\n    rpcEndpoint: 'https://api.mainnet.qbitchain.io/',\n    wsEndpoint: 'wss://api.mainnet.qbitchain.io/',\n    explorerUrl: 'https://explorer.mg.qbitchain.io',\n    genesisHash: 'ABQCTh13HE4NvKGCjppZn5KajNpm35yqQMUXosVacAyR',\n    nativeToken: { symbol: 'QBT', decimals: 9, name: 'QBit Token' },\n    programs: { ...CANONICAL_PROGRAMS },\n    tokens: { ...CANONICAL_TOKENS },\n  },\n  testnet: {\n    name: 'QBit Testnet',\n    rpcEndpoint: 'https://api.testnet.qbitchain.io/',\n    wsEndpoint: 'wss://api.testnet.qbitchain.io/',\n    explorerUrl: 'https://explorer.testnet.qbitchain.io',\n    genesisHash: '',\n    nativeToken: { symbol: 'QBT', decimals: 9, name: 'QBit Token (Test)' },\n    programs: { ...CANONICAL_PROGRAMS },\n    tokens: { ...CANONICAL_TOKENS },\n  },\n  devnet: {\n    name: 'QBit Devnet',\n    rpcEndpoint: 'https://api.devnet.qbitchain.io/',\n    wsEndpoint: 'wss://api.devnet.qbitchain.io/',\n    explorerUrl: 'https://explorer.devnet.qbitchain.io',\n    genesisHash: '',\n    nativeToken: { symbol: 'QBT', decimals: 9, name: 'QBit Token (Dev)' },\n    programs: { ...CANONICAL_PROGRAMS },\n    tokens: { ...CANONICAL_TOKENS },\n  },\n};\n\n// ============ 环境预设 ============\n\n/**\n * 环境预设配置\n * 快速切换不同环境的配置\n */\nexport const ENVIRONMENT_PRESETS = {\n  development: {\n    apiBaseUrl: '/api/v1',\n    apiFullUrl: '',\n    wsBaseUrl: '',\n    chainNetwork: 'devnet',\n    chainEndpoint: CHAIN_NETWORKS.devnet.rpcEndpoint,\n    chainWsEndpoint: CHAIN_NETWORKS.devnet.wsEndpoint,\n    explorerUrl: CHAIN_NETWORKS.devnet.explorerUrl,\n    ipfsGateway: 'https://ipfs.io/ipfs',\n    debug: true,\n    logLevel: 'debug',\n    merchantUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_MERCHANT_URL) || 'http://127.0.0.1:3501',\n    adminUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ADMIN_URL) || 'http://127.0.0.1:3400',\n    payUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_PAY_URL) || 'http://127.0.0.1:3502',\n    walletUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_WALLET_URL) || 'http://127.0.0.1:3503',\n    didApiUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_DID_API_URL) || 'http://127.0.0.1:8102',\n    analyticsUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ANALYTICS_URL) || 'http://127.0.0.1:8381',\n    analyticsApiUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ANALYTICS_API_URL) || 'http://127.0.0.1:8381',\n    analyticsCollectorUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ANALYTICS_COLLECTOR_URL) || 'http://127.0.0.1:8380',\n  },\n  staging: {\n    apiBaseUrl: '/api/v1',\n    apiFullUrl: '',\n    wsBaseUrl: '',\n    chainNetwork: 'testnet',\n    chainEndpoint: CHAIN_NETWORKS.testnet.rpcEndpoint,\n    chainWsEndpoint: CHAIN_NETWORKS.testnet.wsEndpoint,\n    explorerUrl: CHAIN_NETWORKS.testnet.explorerUrl,\n    ipfsGateway: 'https://ipfs.io/ipfs',\n    debug: true,\n    logLevel: 'info',\n    merchantUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_MERCHANT_URL) || 'https://merchant.qbitwallet.io',\n    adminUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ADMIN_URL) || 'https://admin.qbitwallet.io',\n    payUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_PAY_URL) || 'https://pay.qbitwallet.io',\n    walletUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_WALLET_URL) || 'https://wallet.qbitwallet.io',\n    didApiUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_DID_API_URL) || 'https://did.qbitwallet.io',\n    analyticsUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ANALYTICS_URL) || 'https://analytics.mydc.space',\n    analyticsApiUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ANALYTICS_API_URL) || 'https://analytics-api.mydc.space',\n    analyticsCollectorUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ANALYTICS_COLLECTOR_URL) || 'https://analytics.mydc.space',\n  },\n  production: {\n    apiBaseUrl: '/api/v1',\n    apiFullUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_API_URL) || '',\n    wsBaseUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_WS_URL) || '',\n    chainNetwork: 'mainnet',\n    chainEndpoint: CHAIN_NETWORKS.mainnet.rpcEndpoint,\n    chainWsEndpoint: CHAIN_NETWORKS.mainnet.wsEndpoint,\n    explorerUrl: CHAIN_NETWORKS.mainnet.explorerUrl,\n    ipfsGateway: 'https://ipfs.io/ipfs',\n    debug: false,\n    logLevel: 'error',\n    merchantUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_MERCHANT_URL) || 'https://merchant.qbitwallet.io',\n    adminUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ADMIN_URL) || 'https://admin.qbitwallet.io',\n    payUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_PAY_URL) || 'https://pay.qbitwallet.io',\n    walletUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_WALLET_URL) || 'https://wallet.qbitwallet.io',\n    didApiUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_DID_API_URL) || 'https://did.qbitwallet.io',\n    analyticsUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ANALYTICS_URL) || 'https://analytics.mydc.space',\n    analyticsApiUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ANALYTICS_API_URL) || 'https://analytics-api.mydc.space',\n    analyticsCollectorUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ANALYTICS_COLLECTOR_URL) || 'https://analytics.mydc.space',\n  },\n  icenter: {\n    apiBaseUrl: '/api/v1',\n    apiFullUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_API_URL) || 'https://im.icenter.space',\n    wsBaseUrl: (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_WS_URL) || 'wss://im.icenter.space/ws',\n    chainNetwork: 'mainnet',\n    chainEndpoint: CHAIN_NETWORKS.mainnet.rpcEndpoint,\n    chainWsEndpoint: CHAIN_NETWORKS.mainnet.wsEndpoint,\n    explorerUrl: CHAIN_NETWORKS.mainnet.explorerUrl,\n    ipfsGateway: 'https://ipfs.io/ipfs',\n    debug: false,\n    logLevel: 'error',\n    merchantUrl: 'https://xwin.live/merchant',\n    adminUrl: 'https://xwin.live/admin',\n    payUrl: 'https://xwin.live/pay',\n    walletUrl: 'https://xwin.live/wallet',\n    didApiUrl: 'https://xwin.live/did-api',\n    analyticsUrl: 'https://analytics.mydc.space',\n    analyticsApiUrl: 'https://analytics-api.mydc.space',\n    analyticsCollectorUrl: 'https://analytics.mydc.space',\n  },\n};\n\n// ============ 配置状态 ============\n\n\nconst getInitialConfig = () => {\n  const env = (typeof process !== 'undefined' && process.env?.NODE_ENV) || 'development';\n  const preset = ENVIRONMENT_PRESETS[env] || ENVIRONMENT_PRESETS.development;\n  return {\n    ...DEFAULT_CONFIG,\n    ...preset,\n    environment: env,\n  };\n};\n\nlet _config = getInitialConfig();\nlet _listeners = new Set();\nlet _languageListeners = new Set();  // 语言变更监听器\n\n// ============ 核心函数 ============\n\n/**\n * 获取当前配置\n * @returns {object} 当前配置对象\n */\nexport function getConfig() {\n  return { ..._config };\n}\n\n/**\n * 根据服务名称获取端点 URL\n * @param {string} name - 服务名称，如 'ANALYTICS_COLLECTOR' | 'ANALYTICS_API' | 'DID_API'\n * @returns {string} 端点 URL\n */\nexport function getEndpoint(name) {\n  const config = getConfig();\n  switch (name) {\n    case 'ANALYTICS_COLLECTOR':\n      return config.analyticsCollectorUrl || 'https://analytics.mydc.space';\n    case 'ANALYTICS_API':\n      return config.analyticsApiUrl || 'https://analytics-api.mydc.space';\n    case 'DID_API':\n      return config.didApiUrl || 'https://did.qbitwallet.io';\n    default:\n      return '';\n  }\n}\n\n/**\n * 初始化 SDK 配置\n * 应在应用启动时调用一次\n * \n * @param {object} options - 配置选项\n * @param {string} options.apiBaseUrl - API base URL（如 '/api/v1' 或完整 URL）\n * @param {number} options.timeout - 请求Timeout（毫秒）\n * @param {boolean} options.debug - 是否开启Debug mode\n * @param {string} options.environment - 环境标识\n */\nexport function initConfig(options = {}) {\n  _config = {\n    ..._config,\n    ...options,\n  };\n\n  if (Object.prototype.hasOwnProperty.call(options, 'apiBaseUrl')) {\n    _config.apiFullUrl = deriveApiFullUrl(_config.apiBaseUrl);\n    if (!Object.prototype.hasOwnProperty.call(options, 'wsBaseUrl')) {\n      _config.wsBaseUrl = deriveWsBaseUrl(_config.apiBaseUrl, '');\n    }\n  }\n\n  if (Object.prototype.hasOwnProperty.call(options, 'wsBaseUrl')) {\n    _config.wsBaseUrl = deriveWsBaseUrl(_config.apiBaseUrl, options.wsBaseUrl);\n  }\n\n  // 通知所有监听者\n  _notifyListeners();\n\n  if (_config.debug) {\n    console.log('[SDK Config] 配置已初始化:', _config);\n  }\n\n  return _config;\n}\n\n/**\n * 设置 API base URL\n * 便捷方法，用于动态切换 API 地址\n * \n * @param {string} url - 新的 API URL\n */\nexport function setApiBaseUrl(url) {\n  _config.apiBaseUrl = url;\n  _config.apiFullUrl = deriveApiFullUrl(url);\n  _config.wsBaseUrl = deriveWsBaseUrl(url, '');\n  _notifyListeners();\n\n  if (_config.debug) {\n    console.log('[SDK Config] API URL 已更新:', url);\n  }\n}\n\n/**\n * 设置链网络\n * 便捷方法，切换 mainnet/testnet/devnet\n * \n * @param {string} network - 网络名称 ('mainnet' | 'testnet' | 'devnet')\n */\nexport function setChainNetwork(network) {\n  const endpoints = CHAIN_NETWORKS[network];\n  if (!endpoints) {\n    console.warn(`[SDK Config] 未知链网络: ${network}，支持: mainnet, testnet, devnet`);\n    return;\n  }\n  _config.chainNetwork = network;\n  _config.chainEndpoint = endpoints.rpcEndpoint;\n  _config.chainWsEndpoint = endpoints.wsEndpoint || '';\n  if (endpoints.explorerUrl) {\n    _config.explorerUrl = endpoints.explorerUrl;\n  }\n  _notifyListeners();\n\n  if (_config.debug) {\n    console.log(`[SDK Config] 链网络已切换: ${network} -> ${endpoints.rpcEndpoint}`);\n  }\n}\n\n/**\n * 获取当前链配置\n * @returns {object} 链配置对象\n */\nexport function getChainConfig() {\n  return {\n    network: _config.chainNetwork,\n    endpoint: _config.chainEndpoint,\n    wsEndpoint: _config.chainWsEndpoint,\n    commitment: _config.chainCommitment,\n    timeoutMs: _config.chainTimeoutMs,\n    ...CHAIN_NETWORKS[_config.chainNetwork],\n  };\n}\n\n/**\n * 设置 WebSocket URL\n * \n * @param {string} url - 新的 WebSocket URL\n */\nexport function setWsBaseUrl(url) {\n  _config.wsBaseUrl = deriveWsBaseUrl(_config.apiBaseUrl, url);\n  _notifyListeners();\n}\n\n/**\n * 设置Debug mode\n * \n * @param {boolean} debug - 是否开启调试\n */\nexport function setDebug(debug) {\n  _config.debug = debug;\n  _notifyListeners();\n}\n\n/**\n * 重置为默认配置\n */\nexport function resetConfig() {\n  _config = getInitialConfig();\n  _notifyListeners();\n}\n\n// ============ 配置监听 ============\n\n/**\n * 订阅配置变更\n * \n * @param {function} listener - 监听回调\n * @returns {function} 取消订阅函数\n */\nexport function subscribeConfig(listener) {\n  _listeners.add(listener);\n  return () => _listeners.delete(listener);\n}\n\nfunction _notifyListeners() {\n  const config = getConfig();\n  _listeners.forEach(listener => {\n    try {\n      listener(config);\n    } catch (err) {\n      console.error('[SDK Config] 监听器执行错误:', err);\n    }\n  });\n}\n\n// CANONICAL_PROGRAMS, CANONICAL_TOKENS, CHAIN_NETWORKS, ENVIRONMENT_PRESETS relocated to top of file\n\n/**\n * 使用环境预设初始化配置\n * \n * @param {string} env - 环境名称 ('development' | 'staging' | 'production')\n * @param {object} overrides - 额外覆盖配置\n */\nexport function initWithEnvironment(env, overrides = {}) {\n  const preset = ENVIRONMENT_PRESETS[env];\n  if (!preset) {\n    console.warn(`[SDK Config] 未知环境: ${env}, 使用默认配置`);\n    return initConfig(overrides);\n  }\n\n  return initConfig({\n    ...preset,\n    environment: env,\n    ...overrides,\n  });\n}\n\n// ============ React Hook ============\n\nimport { useState, useEffect, useCallback } from 'react';\n\n/**\n * React Hook: 获取和管理 SDK 配置\n * \n * @example\n * const { config, setApiBaseUrl, initConfig } = useSDKConfig();\n * \n * // 读取配置\n * console.log(config.apiBaseUrl);\n * \n * // 动态修改 API URL\n * setApiBaseUrl('https://new-api.example.com');\n */\nexport function useSDKConfig() {\n  const [config, setConfigState] = useState(getConfig);\n\n  useEffect(() => {\n    const unsubscribe = subscribeConfig(setConfigState);\n    return unsubscribe;\n  }, []);\n\n  const updateConfig = useCallback((options) => {\n    initConfig(options);\n  }, []);\n\n  const updateApiUrl = useCallback((url) => {\n    setApiBaseUrl(url);\n  }, []);\n\n  const updateWsUrl = useCallback((url) => {\n    setWsBaseUrl(url);\n  }, []);\n\n  const reset = useCallback(() => {\n    resetConfig();\n  }, []);\n\n  return {\n    config,\n    initConfig: updateConfig,\n    setApiBaseUrl: updateApiUrl,\n    setWsBaseUrl: updateWsUrl,\n    resetConfig: reset,\n    initWithEnvironment,\n  };\n}\n\n/**\n * React Hook: 获取和管理 QBit Chain 配置\n * \n * @example\n * const { chainConfig, setNetwork } = useChainConfig();\n * console.log(chainConfig.endpoint);\n * setNetwork('testnet');\n */\nexport function useChainConfig() {\n  const [chainConfig, setChainState] = useState(getChainConfig);\n\n  useEffect(() => {\n    const unsubscribe = subscribeConfig(() => {\n      setChainState(getChainConfig());\n    });\n    return unsubscribe;\n  }, []);\n\n  const setNetwork = useCallback((network) => {\n    setChainNetwork(network);\n  }, []);\n\n  return {\n    chainConfig,\n    setNetwork,\n    networks: CHAIN_NETWORKS,\n  };\n}\n\n// ============ Request Utilities ============\n\n/**\n * 构建完整的 API URL\n * \n * @param {string} endpoint - API 端点（如 '/auth/login'）\n * @param {boolean} useFullUrl - 是否使用完整 URL\n * @returns {string} 完整的 URL\n */\nexport function buildApiUrl(endpoint, useFullUrl = false) {\n  const baseUrl = useFullUrl ? _config.apiFullUrl : _config.apiBaseUrl;\n  if (!baseUrl) {\n    return endpoint.startsWith('/') ? endpoint : `/${endpoint}`;\n  }\n  if (isAbsoluteUrl(endpoint)) {\n    return endpoint;\n  }\n  // 确保不会出现双斜杠\n  const cleanEndpoint = endpoint.startsWith('/') ? endpoint : `/${endpoint}`;\n  const cleanBase = trimTrailingSlash(baseUrl);\n  return `${cleanBase}${cleanEndpoint}`;\n}\n\n/**\n * 获取认证 Token\n * \n * @returns {string|null} Token 或 null\n */\nexport function getToken() {\n  if (typeof window === 'undefined') return null;\n  return localStorage.getItem(_config.tokenStorageKey);\n}\n\n/**\n * 获取刷新 Token\n * \n * @returns {string|null} Refresh Token 或 null\n */\nexport function getRefreshToken() {\n  if (typeof window === 'undefined') return null;\n  return localStorage.getItem(_config.refreshTokenStorageKey);\n}\n\n/**\n * 保存认证 Token\n * \n * @param {string} accessToken - Access Token\n * @param {string} refreshToken - Refresh Token（可选）\n */\nexport function saveTokens(accessToken, refreshToken) {\n  if (typeof window === 'undefined') return;\n  localStorage.setItem(_config.tokenStorageKey, accessToken);\n  if (refreshToken) {\n    localStorage.setItem(_config.refreshTokenStorageKey, refreshToken);\n  }\n}\n\n/**\n * 清除所有 Token\n */\nexport function clearTokens() {\n  if (typeof window === 'undefined') return;\n  localStorage.removeItem(_config.tokenStorageKey);\n  localStorage.removeItem(_config.refreshTokenStorageKey);\n  localStorage.removeItem(_config.currentSessionKey);\n}\n\n/**\n * 检查是否已认证\n * \n * @returns {boolean} 是否有有效 Token\n */\nexport function isAuthenticated() {\n  return !!getToken();\n}\n\n// ============ Logger ============\n\nconst LOG_LEVELS = { debug: 0, info: 1, warn: 2, error: 3 };\n\n/**\n * SDK 日志工具\n * 根据配置的日志级别输出日志\n */\nexport const logger = {\n  debug: (...args) => {\n    if (_config.debug && LOG_LEVELS[_config.logLevel] <= LOG_LEVELS.debug) {\n      console.debug('[SDK]', ...args);\n    }\n  },\n  info: (...args) => {\n    if (_config.debug && LOG_LEVELS[_config.logLevel] <= LOG_LEVELS.info) {\n      console.info('[SDK]', ...args);\n    }\n  },\n  warn: (...args) => {\n    if (LOG_LEVELS[_config.logLevel] <= LOG_LEVELS.warn) {\n      console.warn('[SDK]', ...args);\n    }\n  },\n  error: (...args) => {\n    console.error('[SDK]', ...args);\n  },\n};\n\n// ============ Language Management ============\n\n/**\n * 获取当前语言\n * 优先从 localStorage 读取，否则使用默认配置\n * \n * @returns {string} 当前语言代码\n */\nexport function getLanguage() {\n  // SSR 安全检查\n  if (typeof window === 'undefined') {\n    return _config.language;\n  }\n\n  // 尝试从 localStorage 读取\n  const stored = localStorage.getItem(_config.languageStorageKey);\n  if (stored && _config.supportedLanguages.includes(stored)) {\n    return stored;\n  }\n\n  // 尝试从浏览器获取\n  const browserLang = navigator.language?.split('-')[0];\n  if (browserLang && _config.supportedLanguages.includes(browserLang)) {\n    return browserLang;\n  }\n\n  return _config.language;\n}\n\n/**\n * 设置全局语言\n * 会通知所有订阅的 SDK 和组件\n * \n * @param {string} lang - 语言代码 ('zh' | 'en' | 'ja' | 'ko')\n * @returns {boolean} 是否设置成功\n */\nexport function setLanguage(lang) {\n  // 验证语言代码\n  if (!_config.supportedLanguages.includes(lang)) {\n    logger.warn(`不Supported Languages: ${lang}, Supported Languages: ${_config.supportedLanguages.join(', ')}`);\n    return false;\n  }\n\n  const previousLang = _config.language;\n  _config.language = lang;\n\n  // 持久化到 localStorage\n  if (typeof window !== 'undefined') {\n    localStorage.setItem(_config.languageStorageKey, lang);\n\n    // 触发全局 CustomEvent，让不直接依赖此模块的 SDK 也能收到通知\n    try {\n      const event = new CustomEvent('qbit-did:language-change', {\n        detail: { language: lang, oldLanguage: previousLang }\n      });\n      window.dispatchEvent(event);\n    } catch (e) {\n      // 忽略事件触发错误\n    }\n  }\n\n  // 通知所有语言监听器\n  _notifyLanguageListeners(lang, previousLang);\n\n  if (_config.debug) {\n    console.log(`[SDK Config] 语言已切换: ${previousLang} -> ${lang}`);\n  }\n\n  return true;\n}\n\n/**\n * 初始化语言（应用启动时调用）\n * 从 localStorage 或浏览器偏好读取\n */\nexport function initLanguage() {\n  const detectedLang = getLanguage();\n  _config.language = detectedLang;\n\n  if (_config.debug) {\n    console.log(`[SDK Config] 语言已初始化: ${detectedLang}`);\n  }\n\n  return detectedLang;\n}\n\n/**\n * 订阅语言变更\n * \n * @param {function} listener - 回调函数 (newLang, oldLang) => void\n * @returns {function} 取消订阅函数\n */\nexport function subscribeLanguage(listener) {\n  _languageListeners.add(listener);\n  return () => _languageListeners.delete(listener);\n}\n\nfunction _notifyLanguageListeners(newLang, oldLang) {\n  _languageListeners.forEach(listener => {\n    try {\n      listener(newLang, oldLang);\n    } catch (err) {\n      console.error('[SDK Config] 语言监听器执行错误:', err);\n    }\n  });\n}\n\n/**\n * React Hook: 获取和管理语言\n * \n * @example\n * const { language, setLanguage, supportedLanguages } = useLanguage();\n * \n * // 切换语言\n * setLanguage('en');\n */\nexport function useLanguage() {\n  const [language, setLangState] = useState(getLanguage);\n\n  useEffect(() => {\n    // 初始化语言\n    const currentLang = getLanguage();\n    setLangState(currentLang);\n\n    // 订阅语言变更\n    const unsubscribe = subscribeLanguage((newLang) => {\n      setLangState(newLang);\n    });\n\n    return unsubscribe;\n  }, []);\n\n  const updateLanguage = useCallback((lang) => {\n    setLanguage(lang);\n  }, []);\n\n  return {\n    language,\n    setLanguage: updateLanguage,\n    supportedLanguages: _config.supportedLanguages,\n    fallbackLanguage: _config.fallbackLanguage,\n  };\n}\n\n/**\n * Resolves the analytics site_id dynamically based on current host or environment variable\n * with fallbacks for local dev environments.\n * \n * @param {string} host - window.location.host\n * @param {string} legacyAppId - fallback identifier if no host match is found\n * @returns {string} resolved site_id\n */\nexport function resolveSiteId(host, legacyAppId) {\n  if (typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_ANALYTICS_SITE_ID) {\n    return process.env.NEXT_PUBLIC_ANALYTICS_SITE_ID;\n  }\n  if (!host) return legacyAppId;\n  const h = host.toLowerCase();\n\n  // 1. PlayXWin Casino\n  if (h.includes(\"playxwin\")) {\n    return \"playxwin_prod\";\n  }\n  // 2. XWin Official Center\n  if (h.includes(\"xwin.live\") || h.includes(\"icenter.space\") || h.includes(\"xwin.live\")) {\n    return \"xwin_icenter_prod\";\n  }\n  // 3. QBit Wallet\n  if (h.includes(\"wallet.qbitchain\") || h.includes(\"wallet.qbitwallet.io\")) {\n    return \"qbit_wallet_prod\";\n  }\n  // 4. QBit Open Platform (Developer Portal)\n  if (h.includes(\"open.qbitchain\") || h.includes(\"open.qbitwallet.io\")) {\n    return \"1d3908a3b7d3937a\";\n  }\n  // 5. QBit Merchant Platform (Merchant Portal)\n  if (h.includes(\"merchant.qbitchain\") || h.includes(\"merchant.qbitwallet.io\") || h.includes(\"qbit-merchant-portal\")) {\n    return \"qbit_merchant_prod\";\n  }\n  // 6. QBit Pay Platform\n  if (h.includes(\"pay.qbitchain\") || h.includes(\"pay.qbitwallet.io\")) {\n    return \"c73456fadabe8f10\";\n  }\n  // 7. QBit Ad Network\n  if (h.includes(\"ad.qbitchain\")) {\n    return \"f78ac2dc0f8a2e15\";\n  }\n  // 8. Quantabit Analytics Core\n  if (h.includes(\"mydc.space\")) {\n    return \"qbit_mydc_prod\";\n  }\n  // 9. XKol 平台\n  if (h.includes(\"xkol.net\") || h.includes(\"xkol.qbitchain\")) {\n    return \"xkol_prod\";\n  }\n  // 10. AnyAffair 平台\n  if (h.includes(\"anyaffair\")) {\n    return \"anyaffair_prod\";\n  }\n  // 11. XKol Shop 平台\n  if (h.includes(\"xkolshop\")) {\n    return \"xkolshop_prod\";\n  }\n  // 12. AIVtLink 平台\n  if (h.includes(\"aivtlink\")) {\n    return \"aivtlink_prod\";\n  }\n  // 13. StartupOS 平台\n  if (h.includes(\"startup.qbitchain\")) {\n    return \"startup_prod\";\n  }\n  // 14. DreamLadder 平台\n  if (h.includes(\"dreamladder\")) {\n    return \"dreamladder_prod\";\n  }\n  // 15. QCard 平台\n  if (h.includes(\"qcard\")) {\n    return \"qcard_prod\";\n  }\n  // 16. IdeaForge 平台\n  if (h.includes(\"ideaforge\")) {\n    return \"ideaforge_prod\";\n  }\n  // 17. DigiShop 平台\n  if (h.includes(\"digishop\")) {\n    return \"digishop_prod\";\n  }\n  // 18. XCoFound 平台\n  if (h.includes(\"xcofound\")) {\n    return \"xcofound_prod\";\n  }\n  // 19. ImJob 平台\n  if (h.includes(\"imjob\")) {\n    return \"imjob_prod\";\n  }\n\n  // 127.0.0.1/dev fallback based on legacy appId\n  if (!legacyAppId) return \"qbit_mydc_prod\";\n  const appId = legacyAppId.toLowerCase();\n  if (appId.includes(\"playxwin\")) {\n    return \"playxwin_prod\";\n  }\n  if (appId.includes(\"xwin\")) {\n    return \"xwin_icenter_prod\";\n  }\n  if (appId.includes(\"wallet-portal\") || appId.includes(\"wallet\")) {\n    return \"qbit_wallet_prod\";\n  }\n  if (appId.includes(\"merchant-portal\") || appId.includes(\"merchant-pay-portal\")) {\n    return \"qbit_merchant_prod\";\n  }\n  if (appId.includes(\"developer-portal\") || appId.includes(\"open\") || appId.includes(\"developer\")) {\n    return \"1d3908a3b7d3937a\";\n  }\n  if (appId.includes(\"pay-portal\") || appId.includes(\"pay_portal\") || appId.includes(\"pay\")) {\n    return \"c73456fadabe8f10\";\n  }\n  if (appId.includes(\"xkolshop\")) {\n    return \"xkolshop_prod\";\n  }\n  if (appId.includes(\"xkol\")) {\n    return \"xkol_prod\";\n  }\n  if (appId.includes(\"anyaffair\")) {\n    return \"anyaffair_prod\";\n  }\n  if (appId.includes(\"aivtlink\")) {\n    return \"aivtlink_prod\";\n  }\n  if (appId.includes(\"startup\")) {\n    return \"startup_prod\";\n  }\n  if (appId.includes(\"dreamladder\")) {\n    return \"dreamladder_prod\";\n  }\n  if (appId.includes(\"qcard\")) {\n    return \"qcard_prod\";\n  }\n  if (appId.includes(\"ideaforge\")) {\n    return \"ideaforge_prod\";\n  }\n  if (appId.includes(\"digishop\")) {\n    return \"digishop_prod\";\n  }\n  if (appId.includes(\"xcofound\")) {\n    return \"xcofound_prod\";\n  }\n  if (appId.includes(\"imjob\")) {\n    return \"imjob_prod\";\n  }\n\n  return \"qbit_mydc_prod\";\n}\n\n// ============ Export BaseApiClient ============\n\nexport { BaseApiClient, createApiClient } from './BaseApiClient.js';\n\n// ============ Display Surface (link / modal) ============\n\nimport {\n  DisplayMode,\n  DEFAULT_PAGE_CONTEXT_QUERY_KEYS,\n  getPageContext,\n  toSearchParams,\n  mergeSurfaceParams,\n  buildUrl,\n  normalizeDisplayMode,\n  openSurface,\n  closeSurface,\n  DisplaySurfaceHelper,\n  createDisplaySurfaceHelper,\n} from './displaySurface.js';\n\nimport {\n  openUtilitySurface,\n  openFeedbackSurface,\n  openHelpSurface,\n  openHelpdeskSurface,\n  openAISurface,\n  openReportSurface,\n  openSubscriptionSurface,\n  openCheckinSurface,\n  openInviteSurface,\n  openShareSurface,\n  openTipSurface,\n  openChatSurface,\n  openAIAgentSurface,\n  openDonateSurface,\n  withPageContext,\n} from './utilitySurface.js';\n\nexport {\n  DisplayMode,\n  DEFAULT_PAGE_CONTEXT_QUERY_KEYS,\n  getPageContext,\n  toSearchParams,\n  mergeSurfaceParams,\n  buildUrl,\n  normalizeDisplayMode,\n  openSurface,\n  closeSurface,\n  DisplaySurfaceHelper,\n  createDisplaySurfaceHelper,\n  openUtilitySurface,\n  openFeedbackSurface,\n  openHelpSurface,\n  openHelpdeskSurface,\n  openAISurface,\n  openReportSurface,\n  openSubscriptionSurface,\n  openCheckinSurface,\n  openInviteSurface,\n  openShareSurface,\n  openTipSurface,\n  openChatSurface,\n  openAIAgentSurface,\n  openDonateSurface,\n  withPageContext,\n};\n\n// ============ Privacy & Consent ============\n\nexport {\n  consentManager,\n  PrivacyLevel,\n  ConsentStatus,\n  useConsent,\n} from './ConsentManager.js';\n\nexport { dataSanitizer } from './DataSanitizer.js';\n\nexport { privacyOrchestrator, PrivacyOrchestratorClass } from './PrivacyOrchestrator.js';\n\n// ============ Exports ============\n\nexport default {\n  getConfig,\n  getEndpoint,\n  initConfig,\n  setApiBaseUrl,\n  setWsBaseUrl,\n  setDebug,\n  resetConfig,\n  subscribeConfig,\n  initWithEnvironment,\n  ENVIRONMENT_PRESETS,\n  buildApiUrl,\n  getToken,\n  getRefreshToken,\n  saveTokens,\n  clearTokens,\n  isAuthenticated,\n  logger,\n  useSDKConfig,\n  // 链配置\n  CHAIN_NETWORKS,\n  CANONICAL_PROGRAMS,\n  CANONICAL_TOKENS,\n  setChainNetwork,\n  getChainConfig,\n  useChainConfig,\n  // 语言管理\n  getLanguage,\n  setLanguage,\n  initLanguage,\n  subscribeLanguage,\n  useLanguage,\n  resolveSiteId,\n  // 展示面\n  DisplayMode,\n  getPageContext,\n  buildUrl,\n  openSurface,\n  closeSurface,\n  createDisplaySurfaceHelper,\n  openUtilitySurface,\n  openFeedbackSurface,\n  openHelpSurface,\n  openHelpdeskSurface,\n  openAISurface,\n  openReportSurface,\n  openSubscriptionSurface,\n  openCheckinSurface,\n  openInviteSurface,\n  openShareSurface,\n  openTipSurface,\n  openChatSurface,\n  openAIAgentSurface,\n  openDonateSurface,\n  withPageContext,\n};\n"],"names":["getStoredToken","useState","useEffect","useCallback"],"mappings":"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"}