@h-ai/capacitor 0.1.0-alpha.13 → 0.1.0-alpha.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -28,14 +28,14 @@ if (!result.success) {
28
28
  ### 与 api-client 配合的 Token 安全存储
29
29
 
30
30
  ```ts
31
- import { api } from '@h-ai/api-client'
31
+ import { apiClient } from '@h-ai/api-client'
32
32
  import { createCapacitorTokenStorage } from '@h-ai/capacitor'
33
33
 
34
- await api.init({
34
+ await apiClient.init({
35
35
  baseUrl: 'https://api.example.com/v1',
36
36
  auth: {
37
37
  storage: createCapacitorTokenStorage(),
38
- refreshUrl: '/auth/refresh',
38
+ refreshPath: '/auth/refresh',
39
39
  },
40
40
  })
41
41
  ```
package/dist/index.d.ts CHANGED
@@ -201,13 +201,13 @@ declare const capacitor: CapacitorFunctions;
201
201
  * @example
202
202
  * ```ts
203
203
  * import { createCapacitorTokenStorage } from '@h-ai/capacitor'
204
- * import { api } from '@h-ai/api-client'
204
+ * import { apiClient } from '@h-ai/api-client'
205
205
  *
206
- * await api.init({
206
+ * await apiClient.init({
207
207
  * baseUrl: 'https://api.example.com/v1',
208
208
  * auth: {
209
209
  * storage: createCapacitorTokenStorage(),
210
- * refreshUrl: '/auth/refresh',
210
+ * refreshPath: '/auth/refresh',
211
211
  * },
212
212
  * })
213
213
  * ```
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../messages/en-US.json","../messages/zh-CN.json","../src/capacitor-i18n.ts","../src/capacitor-types.ts","../src/capacitor-camera.ts","../src/capacitor-device.ts","../src/capacitor-push.ts","../src/capacitor-status-bar.ts","../src/capacitor-token-storage.ts","../src/capacitor-main.ts"],"names":["core","ok","err","logger"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"capacitor_initFailed\": \"Capacitor initialization failed\",\n \"capacitor_initInProgress\": \"Capacitor initialization is already in progress\",\n \"capacitor_notAvailable\": \"Capacitor is not available in this environment\",\n \"capacitor_preferencesGetFailed\": \"Failed to read from Capacitor Preferences\",\n \"capacitor_preferencesSetFailed\": \"Failed to write to Capacitor Preferences\",\n \"capacitor_preferencesRemoveFailed\": \"Failed to remove from Capacitor Preferences\",\n \"capacitor_deviceInfoFailed\": \"Failed to get device info\",\n \"capacitor_pushRegisterFailed\": \"Failed to register push notifications\",\n \"capacitor_pushListenFailed\": \"Failed to listen for push notifications\",\n \"capacitor_cameraFailed\": \"Failed to access camera\",\n \"capacitor_statusBarFailed\": \"Failed to configure status bar\",\n \"capacitor_notInitialized\": \"Capacitor module is not initialized\"\n}\n","{\n \"capacitor_initFailed\": \"Capacitor 初始化失败\",\n \"capacitor_initInProgress\": \"Capacitor 正在初始化中\",\n \"capacitor_notAvailable\": \"当前环境不支持 Capacitor\",\n \"capacitor_preferencesGetFailed\": \"读取 Capacitor Preferences 失败\",\n \"capacitor_preferencesSetFailed\": \"写入 Capacitor Preferences 失败\",\n \"capacitor_preferencesRemoveFailed\": \"删除 Capacitor Preferences 失败\",\n \"capacitor_deviceInfoFailed\": \"获取设备信息失败\",\n \"capacitor_pushRegisterFailed\": \"注册推送通知失败\",\n \"capacitor_pushListenFailed\": \"监听推送通知失败\",\n \"capacitor_cameraFailed\": \"访问相机失败\",\n \"capacitor_statusBarFailed\": \"配置状态栏失败\",\n \"capacitor_notInitialized\": \"Capacitor 模块未初始化\"\n}\n","/**\n * @h-ai/capacitor — i18n\n *\n * 模块 i18n 文案访问入口。\n * @module capacitor-i18n\n */\n\nimport { core } from '@h-ai/core'\nimport messagesEnUS from '../messages/en-US.json'\nimport messagesZhCN from '../messages/zh-CN.json'\n\ntype CapacitorMessageKey = keyof typeof messagesZhCN\n\n/**\n * capacitor 模块 i18n 文案获取器\n *\n * @param key - 文案 Key\n * @returns 本地化后的文案字符串\n */\nexport const capacitorM = core.i18n.createMessageGetter<CapacitorMessageKey>({\n 'zh-CN': messagesZhCN,\n 'en-US': messagesEnUS,\n})\n","/**\n * @h-ai/capacitor — 类型定义\n *\n * Capacitor 原生桥接模块的公共类型。\n * @module capacitor-types\n */\n\nimport type { ErrorInfo, HaiResult } from '@h-ai/core'\nimport { core } from '@h-ai/core'\n\nconst CapacitorErrorInfo = {\n INIT_FAILED: '001:500',\n NOT_AVAILABLE: '002:400',\n INIT_IN_PROGRESS: '003:409',\n NOT_INITIALIZED: '010:500',\n PREFERENCES_GET_FAILED: '011:500',\n PREFERENCES_SET_FAILED: '012:500',\n PREFERENCES_REMOVE_FAILED: '013:500',\n DEVICE_INFO_FAILED: '020:500',\n PUSH_REGISTER_FAILED: '030:500',\n PUSH_LISTEN_FAILED: '031:500',\n CAMERA_FAILED: '040:500',\n STATUS_BAR_FAILED: '050:500',\n} as const satisfies ErrorInfo\n\nexport const HaiCapacitorError = core.error.buildHaiErrorsDef('capacitor', CapacitorErrorInfo)\n\n// ─── 子操作接口 ───\n\n/** 设备信息操作 */\nexport interface DeviceOperations {\n /** 获取设备信息(平台、型号、系统版本等) */\n getInfo: () => Promise<HaiResult<DeviceInfo>>\n /** 获取应用版本信息 */\n getAppVersion: () => Promise<HaiResult<{ version: string, build: string }>>\n}\n\n/** 相机操作 */\nexport interface CameraOperations {\n /** 拍照或选取相册图片 */\n takePhoto: (options?: PhotoOptions) => Promise<HaiResult<PhotoResult>>\n}\n\n/** 推送通知操作 */\nexport interface PushOperations {\n /** 注册推送通知,返回设备 Token */\n register: () => Promise<HaiResult<PushRegistration>>\n /** 监听推送通知事件,返回清理函数 */\n listen: (callbacks: PushNotificationCallbacks) => Promise<HaiResult<() => Promise<void>>>\n}\n\n/** 状态栏操作 */\nexport interface StatusBarOperations {\n /** 配置状态栏(样式、背景色、沉浸式) */\n configure: (config: StatusBarConfig) => Promise<HaiResult<void>>\n /** 显示状态栏 */\n show: () => Promise<HaiResult<void>>\n /** 隐藏状态栏 */\n hide: () => Promise<HaiResult<void>>\n}\n\n/** Preferences 操作(安全读写,返回 HaiResult) */\nexport interface PreferencesOperations {\n /** 安全读取 Preference 值 */\n get: (key: string) => Promise<HaiResult<string | null>>\n /** 安全写入 Preference 值 */\n set: (key: string, value: string) => Promise<HaiResult<void>>\n /** 安全删除 Preference 值 */\n remove: (key: string) => Promise<HaiResult<void>>\n}\n\n// ─── 函数接口 ───\n\n/** Capacitor 模块服务对象接口 */\nexport interface CapacitorFunctions {\n /** 初始化 Capacitor 模块 */\n init: () => Promise<HaiResult<void>>\n /** 关闭模块,重置状态 */\n close: () => Promise<void>\n /** 获取当前平台 */\n getPlatform: () => string\n /** 是否运行在原生 App 中 */\n isNative: () => boolean\n /** 是否已初始化 */\n readonly isInitialized: boolean\n\n /** 设备信息操作 */\n readonly device: DeviceOperations\n /** 相机操作 */\n readonly camera: CameraOperations\n /** 推送通知操作 */\n readonly push: PushOperations\n /** 状态栏操作 */\n readonly statusBar: StatusBarOperations\n /** Preferences 安全读写操作 */\n readonly preferences: PreferencesOperations\n}\n\n// ─── 设备信息 ───\n\n/** 设备平台 */\nexport type DevicePlatform = 'ios' | 'android' | 'web'\n\n/** 设备信息 */\nexport interface DeviceInfo {\n /** 平台(ios / android / web) */\n platform: DevicePlatform\n /** 操作系统版本(如 '14.5') */\n osVersion: string\n /** 设备型号(如 'iPhone 14 Pro') */\n model: string\n /** 设备制造商 */\n manufacturer: string\n /** 是否为虚拟设备(模拟器) */\n isVirtual: boolean\n /** 应用版本 */\n appVersion?: string\n /** 应用 Build 号 */\n appBuild?: string\n}\n\n// ─── 推送通知 ───\n\n/** 推送通知数据 */\nexport interface PushNotification {\n /** 通知 ID */\n id: string\n /** 标题 */\n title?: string\n /** 正文 */\n body?: string\n /** 附加数据 */\n data?: Record<string, unknown>\n}\n\n/** 推送注册结果 */\nexport interface PushRegistration {\n /** 设备推送 Token */\n token: string\n}\n\n/** 推送通知回调 */\nexport interface PushNotificationCallbacks {\n /** 收到推送时调用 */\n onReceived?: (notification: PushNotification) => void\n /** 用户点击推送时调用 */\n onActionPerformed?: (notification: PushNotification) => void\n}\n\n// ─── 相机 ───\n\n/** 照片来源 */\nexport type PhotoSource = 'camera' | 'photos' | 'prompt'\n\n/** 照片选项 */\nexport interface PhotoOptions {\n /** 来源(默认 'prompt') */\n source?: PhotoSource\n /** 图片质量 0-100(默认 90) */\n quality?: number\n /** 最大宽度(像素) */\n width?: number\n /** 最大高度(像素) */\n height?: number\n /** 返回格式 */\n resultType?: 'uri' | 'base64' | 'dataUrl'\n}\n\n/** 照片结果 */\nexport interface PhotoResult {\n /** 图片路径或 base64 数据 */\n data: string\n /** MIME 类型 */\n format: string\n}\n\n// ─── 状态栏 ───\n\n/** 状态栏样式 */\nexport type StatusBarStyle = 'dark' | 'light' | 'default'\n\n/** 状态栏配置 */\nexport interface StatusBarConfig {\n /** 状态栏文字样式 */\n style?: StatusBarStyle\n /** 背景颜色(十六进制) */\n backgroundColor?: string\n /** 是否覆盖在内容上(沉浸式) */\n overlay?: boolean\n}\n","/**\n * @h-ai/capacitor — 相机 / 相册\n *\n * 封装 `@capacitor/camera` 插件,提供拍照与相册选择能力。\n *\n * @module capacitor-camera\n */\n\nimport type { HaiResult } from '@h-ai/core'\nimport type { PhotoOptions, PhotoResult } from './capacitor-types.js'\nimport { err, ok } from '@h-ai/core'\nimport { capacitorM } from './capacitor-i18n.js'\nimport { HaiCapacitorError } from './capacitor-types.js'\n\n/** 照片来源映射(内部使用) */\nconst SOURCE_MAP = {\n camera: 'Camera',\n photos: 'Photos',\n prompt: 'Prompt',\n} as const\n\n/** 结果类型映射(内部使用) */\nconst RESULT_TYPE_MAP = {\n uri: 'Uri',\n base64: 'Base64',\n dataUrl: 'DataUrl',\n} as const\n\n/**\n * 拍照或选取相册图片\n *\n * 需要安装 `@capacitor/camera` 插件。\n *\n * @param options - 照片选项\n * @returns 照片结果\n *\n * @example\n * ```ts\n * const result = await capacitor.camera.takePhoto({ source: 'camera', quality: 80 })\n * if (result.success) {\n * imageUrl = result.data.data\n * }\n * ```\n */\nexport async function takePhoto(options?: PhotoOptions): Promise<HaiResult<PhotoResult>> {\n try {\n const { Camera, CameraSource, CameraResultType } = await import('@capacitor/camera')\n\n const source = options?.source ?? 'prompt'\n const resultType = options?.resultType ?? 'uri'\n\n const photo = await Camera.getPhoto({\n quality: options?.quality ?? 90,\n source: CameraSource[SOURCE_MAP[source] as keyof typeof CameraSource],\n resultType: CameraResultType[RESULT_TYPE_MAP[resultType] as keyof typeof CameraResultType],\n width: options?.width,\n height: options?.height,\n })\n\n // 根据 resultType 返回对应数据\n let data: string\n if (resultType === 'base64') {\n data = photo.base64String ?? ''\n }\n else if (resultType === 'dataUrl') {\n data = photo.dataUrl ?? ''\n }\n else {\n data = photo.webPath ?? ''\n }\n\n return ok({\n data,\n format: photo.format,\n })\n }\n catch (cause) {\n return err(\n HaiCapacitorError.CAMERA_FAILED,\n capacitorM('capacitor_cameraFailed'),\n cause,\n )\n }\n}\n","/**\n * @h-ai/capacitor — 设备信息\n *\n * 封装 `@capacitor/device` 插件,提供统一的设备信息读取接口。\n *\n * @module capacitor-device\n */\n\nimport type { HaiResult } from '@h-ai/core'\nimport type { DeviceInfo } from './capacitor-types.js'\nimport { err, ok } from '@h-ai/core'\nimport { capacitorM } from './capacitor-i18n.js'\nimport { HaiCapacitorError } from './capacitor-types.js'\n\n/**\n * 获取设备信息\n *\n * 需要安装 `@capacitor/device` 插件。\n *\n * @returns 设备信息(平台、系统版本、型号等)\n *\n * @example\n * ```ts\n * const result = await capacitor.device.getInfo()\n * if (result.success) {\n * result.data.platform // 'android' | 'ios' | 'web'\n * }\n * ```\n */\nexport async function getDeviceInfo(): Promise<HaiResult<DeviceInfo>> {\n try {\n const { Device } = await import('@capacitor/device')\n const info = await Device.getInfo()\n\n return ok({\n platform: info.platform as DeviceInfo['platform'],\n osVersion: info.osVersion,\n model: info.model,\n manufacturer: info.manufacturer,\n isVirtual: info.isVirtual,\n })\n }\n catch (cause) {\n return err(\n HaiCapacitorError.DEVICE_INFO_FAILED,\n capacitorM('capacitor_deviceInfoFailed'),\n cause,\n )\n }\n}\n\n/**\n * 获取应用版本信息\n *\n * @returns appVersion 与 appBuild\n *\n * @example\n * ```ts\n * const result = await capacitor.device.getAppVersion()\n * if (result.success) {\n * result.data.version // '1.0.0'\n * result.data.build // '42'\n * }\n * ```\n */\nexport async function getAppVersion(): Promise<HaiResult<{ version: string, build: string }>> {\n try {\n const { App } = await import('@capacitor/app')\n const info = await App.getInfo()\n\n return ok({\n version: info.version,\n build: info.build,\n })\n }\n catch (cause) {\n return err(\n HaiCapacitorError.DEVICE_INFO_FAILED,\n capacitorM('capacitor_deviceInfoFailed'),\n cause,\n )\n }\n}\n","/**\n * @h-ai/capacitor — 推送通知\n *\n * 封装 `@capacitor/push-notifications` 插件,提供推送注册与消息监听。\n *\n * @module capacitor-push\n */\n\nimport type { HaiResult } from '@h-ai/core'\nimport type { PushNotificationCallbacks, PushRegistration } from './capacitor-types.js'\nimport { err, ok } from '@h-ai/core'\nimport { capacitorM } from './capacitor-i18n.js'\nimport { HaiCapacitorError } from './capacitor-types.js'\n\n/**\n * 注册推送通知\n *\n * 请求推送权限并注册设备 Token。需要安装 `@capacitor/push-notifications`。\n * 注册超过 30 秒未响应时自动超时。\n *\n * @returns 设备推送 Token\n *\n * @example\n * ```ts\n * const result = await capacitor.push.register()\n * if (result.success) {\n * await api.post('/push/register', { token: result.data.token })\n * }\n * ```\n */\nexport async function registerPush(): Promise<HaiResult<PushRegistration>> {\n try {\n const { PushNotifications } = await import('@capacitor/push-notifications')\n\n // 请求权限\n const permResult = await PushNotifications.requestPermissions()\n if (permResult.receive !== 'granted') {\n return err(\n HaiCapacitorError.PUSH_REGISTER_FAILED,\n capacitorM('capacitor_pushRegisterFailed'),\n )\n }\n\n // 注册并等待 Token(带超时防护)\n const REGISTER_TIMEOUT_MS = 30_000\n const token = await new Promise<string>((resolve, reject) => {\n let regListener: { remove: () => Promise<void> } | undefined\n let errListener: { remove: () => Promise<void> } | undefined\n\n const timer = setTimeout(() => {\n cleanup()\n reject(new Error('Push registration timed out'))\n }, REGISTER_TIMEOUT_MS)\n\n function cleanup() {\n clearTimeout(timer)\n regListener?.remove()\n errListener?.remove()\n }\n\n PushNotifications.addListener('registration', (t) => {\n cleanup()\n resolve(t.value)\n }).then((l) => { regListener = l })\n\n PushNotifications.addListener('registrationError', (error) => {\n cleanup()\n reject(error)\n }).then((l) => { errListener = l })\n\n PushNotifications.register()\n })\n\n return ok({ token })\n }\n catch (cause) {\n return err(\n HaiCapacitorError.PUSH_REGISTER_FAILED,\n capacitorM('capacitor_pushRegisterFailed'),\n cause,\n )\n }\n}\n\n/**\n * 监听推送通知事件\n *\n * @param callbacks - 回调配置(收到推送、点击推送)\n * @returns 包含清理函数的 HaiResult\n *\n * @example\n * ```ts\n * const result = await capacitor.push.listen({\n * onReceived: (n) => handlePushReceived(n),\n * onActionPerformed: (n) => router.goto('/notifications'),\n * })\n * if (result.success) {\n * // 停止监听\n * await result.data()\n * }\n * ```\n */\nexport async function listenPush(callbacks: PushNotificationCallbacks): Promise<HaiResult<() => Promise<void>>> {\n try {\n const { PushNotifications } = await import('@capacitor/push-notifications')\n const listeners: Array<{ remove: () => Promise<void> }> = []\n\n if (callbacks.onReceived) {\n const listener = await PushNotifications.addListener(\n 'pushNotificationReceived',\n (notification) => {\n callbacks.onReceived?.({\n id: notification.id,\n title: notification.title,\n body: notification.body,\n data: notification.data as Record<string, unknown>,\n })\n },\n )\n listeners.push(listener)\n }\n\n if (callbacks.onActionPerformed) {\n const listener = await PushNotifications.addListener(\n 'pushNotificationActionPerformed',\n (action) => {\n callbacks.onActionPerformed?.({\n id: action.notification.id,\n title: action.notification.title,\n body: action.notification.body,\n data: action.notification.data as Record<string, unknown>,\n })\n },\n )\n listeners.push(listener)\n }\n\n const cleanup = async () => {\n await Promise.all(listeners.map(l => l.remove()))\n }\n return ok(cleanup)\n }\n catch (cause) {\n return err(\n HaiCapacitorError.PUSH_LISTEN_FAILED,\n capacitorM('capacitor_pushListenFailed'),\n cause,\n )\n }\n}\n","/**\n * @h-ai/capacitor — 状态栏\n *\n * 封装 `@capacitor/status-bar` 插件,支持沉浸式状态栏配置。\n *\n * @module capacitor-status-bar\n */\n\nimport type { HaiResult } from '@h-ai/core'\nimport type { StatusBarConfig } from './capacitor-types.js'\nimport { err, ok } from '@h-ai/core'\nimport { capacitorM } from './capacitor-i18n.js'\nimport { HaiCapacitorError } from './capacitor-types.js'\n\n/**\n * 配置状态栏\n *\n * 需要安装 `@capacitor/status-bar` 插件。\n *\n * @param config - 状态栏配置\n * @returns HaiResult\n *\n * @example\n * ```ts\n * await capacitor.statusBar.configure({\n * style: 'dark',\n * overlay: true,\n * backgroundColor: '#ffffff',\n * })\n * ```\n */\nexport async function configureStatusBar(config: StatusBarConfig): Promise<HaiResult<void>> {\n try {\n const { StatusBar, Style } = await import('@capacitor/status-bar')\n\n // 设置样式\n if (config.style) {\n const styleMap: Record<string, typeof Style[keyof typeof Style]> = {\n dark: Style.Dark,\n light: Style.Light,\n default: Style.Default,\n }\n await StatusBar.setStyle({ style: styleMap[config.style] ?? Style.Default })\n }\n\n // 设置背景色\n if (config.backgroundColor) {\n await StatusBar.setBackgroundColor({ color: config.backgroundColor })\n }\n\n // 设置覆盖模式\n if (config.overlay !== undefined) {\n await StatusBar.setOverlaysWebView({ overlay: config.overlay })\n }\n\n return ok(undefined)\n }\n catch (cause) {\n return err(\n HaiCapacitorError.STATUS_BAR_FAILED,\n capacitorM('capacitor_statusBarFailed'),\n cause,\n )\n }\n}\n\n/**\n * 显示状态栏\n *\n * @returns HaiResult\n *\n * @example\n * ```ts\n * await capacitor.statusBar.show()\n * ```\n */\nexport async function showStatusBar(): Promise<HaiResult<void>> {\n try {\n const { StatusBar } = await import('@capacitor/status-bar')\n await StatusBar.show()\n return ok(undefined)\n }\n catch (cause) {\n return err(\n HaiCapacitorError.STATUS_BAR_FAILED,\n capacitorM('capacitor_statusBarFailed'),\n cause,\n )\n }\n}\n\n/**\n * 隐藏状态栏\n *\n * @returns HaiResult\n *\n * @example\n * ```ts\n * await capacitor.statusBar.hide()\n * ```\n */\nexport async function hideStatusBar(): Promise<HaiResult<void>> {\n try {\n const { StatusBar } = await import('@capacitor/status-bar')\n await StatusBar.hide()\n return ok(undefined)\n }\n catch (cause) {\n return err(\n HaiCapacitorError.STATUS_BAR_FAILED,\n capacitorM('capacitor_statusBarFailed'),\n cause,\n )\n }\n}\n","/**\n * @h-ai/capacitor — Token 存储\n *\n * 基于 Capacitor Preferences 的 TokenStorage 实现,\n * 比浏览器 localStorage 更安全,适用于原生 App 场景。\n *\n * @module capacitor-token-storage\n */\n\nimport type { TokenStorage } from '@h-ai/api-client'\nimport type { HaiResult } from '@h-ai/core'\nimport { Preferences } from '@capacitor/preferences'\nimport { core, err, ok } from '@h-ai/core'\nimport { capacitorM } from './capacitor-i18n.js'\nimport { HaiCapacitorError } from './capacitor-types.js'\n\nconst logger = core.logger.child({ module: 'capacitor', scope: 'token-storage' })\n\n/** Preferences 存储 Key */\nconst PREF_ACCESS_TOKEN = 'hai_access_token'\nconst PREF_REFRESH_TOKEN = 'hai_refresh_token'\n\n/**\n * 创建基于 Capacitor Preferences 的 TokenStorage\n *\n * 使用 `@capacitor/preferences` 插件进行持久化存储,\n * 在 Android 使用 SharedPreferences,iOS 使用 UserDefaults,\n * 比 localStorage 有更好的安全性。\n *\n * @returns TokenStorage 实例\n *\n * @example\n * ```ts\n * import { createCapacitorTokenStorage } from '@h-ai/capacitor'\n * import { api } from '@h-ai/api-client'\n *\n * await api.init({\n * baseUrl: 'https://api.example.com/v1',\n * auth: {\n * storage: createCapacitorTokenStorage(),\n * refreshUrl: '/auth/refresh',\n * },\n * })\n * ```\n */\nexport function createCapacitorTokenStorage(): TokenStorage {\n return {\n async getAccessToken(): Promise<string | null> {\n try {\n const { value } = await Preferences.get({ key: PREF_ACCESS_TOKEN })\n return value\n }\n catch (error) {\n logger.error('Failed to get access token from Preferences', { error })\n return null\n }\n },\n\n async getRefreshToken(): Promise<string | null> {\n try {\n const { value } = await Preferences.get({ key: PREF_REFRESH_TOKEN })\n return value\n }\n catch (error) {\n logger.error('Failed to get refresh token from Preferences', { error })\n return null\n }\n },\n\n async setAccessToken(token: string): Promise<void> {\n try {\n await Preferences.set({ key: PREF_ACCESS_TOKEN, value: token })\n }\n catch (error) {\n logger.error('Failed to set access token in Preferences', { error })\n }\n },\n\n async setRefreshToken(token: string): Promise<void> {\n try {\n await Preferences.set({ key: PREF_REFRESH_TOKEN, value: token })\n }\n catch (error) {\n logger.error('Failed to set refresh token in Preferences', { error })\n }\n },\n\n async clear(): Promise<void> {\n try {\n await Promise.all([\n Preferences.remove({ key: PREF_ACCESS_TOKEN }),\n Preferences.remove({ key: PREF_REFRESH_TOKEN }),\n ])\n }\n catch (error) {\n logger.error('Failed to clear tokens from Preferences', { error })\n }\n },\n }\n}\n\n/**\n * 安全读取 Preference 值(返回 HaiResult)\n *\n * @param key - Preference Key\n * @returns HaiResult 包裹的值\n *\n * @example\n * ```ts\n * const result = await capacitor.preferences.get('my_key')\n * if (result.success) {\n * result.data // 值或 null\n * }\n * ```\n */\nexport async function safeGetPreference(key: string): Promise<HaiResult<string | null>> {\n try {\n const { value } = await Preferences.get({ key })\n return ok(value)\n }\n catch (cause) {\n return err(\n HaiCapacitorError.PREFERENCES_GET_FAILED,\n capacitorM('capacitor_preferencesGetFailed'),\n cause,\n )\n }\n}\n\n/**\n * 安全写入 Preference 值\n *\n * @param key - Preference Key\n * @param value - 要写入的值\n * @returns HaiResult\n *\n * @example\n * ```ts\n * await capacitor.preferences.set('my_key', 'value')\n * ```\n */\nexport async function safeSetPreference(key: string, value: string): Promise<HaiResult<void>> {\n try {\n await Preferences.set({ key, value })\n return ok(undefined)\n }\n catch (cause) {\n return err(\n HaiCapacitorError.PREFERENCES_SET_FAILED,\n capacitorM('capacitor_preferencesSetFailed'),\n cause,\n )\n }\n}\n\n/**\n * 安全删除 Preference 值\n *\n * @param key - Preference Key\n * @returns HaiResult\n *\n * @example\n * ```ts\n * await capacitor.preferences.remove('my_key')\n * ```\n */\nexport async function safeRemovePreference(key: string): Promise<HaiResult<void>> {\n try {\n await Preferences.remove({ key })\n return ok(undefined)\n }\n catch (cause) {\n return err(\n HaiCapacitorError.PREFERENCES_REMOVE_FAILED,\n capacitorM('capacitor_preferencesRemoveFailed'),\n cause,\n )\n }\n}\n","/**\n * @h-ai/capacitor — 模块入口(生命周期管理)\n *\n * 提供 Capacitor 原生桥接的初始化与环境检测。\n * `capacitor.init()` 应在应用启动时调用,用于检测 Capacitor 环境可用性。\n *\n * @module capacitor-main\n */\n\nimport type { HaiResult } from '@h-ai/core'\nimport type { CameraOperations, CapacitorFunctions, DeviceOperations, PreferencesOperations, PushOperations, StatusBarOperations } from './capacitor-types.js'\nimport { core, err, ok } from '@h-ai/core'\nimport { takePhoto } from './capacitor-camera.js'\nimport { getAppVersion, getDeviceInfo } from './capacitor-device.js'\nimport { capacitorM } from './capacitor-i18n.js'\nimport { listenPush, registerPush } from './capacitor-push.js'\nimport { configureStatusBar, hideStatusBar, showStatusBar } from './capacitor-status-bar.js'\nimport { safeGetPreference, safeRemovePreference, safeSetPreference } from './capacitor-token-storage.js'\nimport { HaiCapacitorError } from './capacitor-types.js'\n\nconst logger = core.logger.child({ module: 'capacitor', scope: 'main' })\n\n/** 是否已初始化 */\nlet initialized = false\n\n/** 是否正在初始化中(并发防护) */\nlet initInProgress = false\n\n/** 缓存平台信息 */\nlet cachedPlatform: string | null = null\n\n// ─── 未初始化代理 ───\n\nconst notInitialized = core.module.createNotInitializedKit(\n HaiCapacitorError.NOT_INITIALIZED,\n () => capacitorM('capacitor_notInitialized'),\n)\n\nconst notInitializedDevice = notInitialized.proxy<DeviceOperations>()\nconst notInitializedCamera = notInitialized.proxy<CameraOperations>()\nconst notInitializedPush = notInitialized.proxy<PushOperations>()\nconst notInitializedStatusBar = notInitialized.proxy<StatusBarOperations>()\nconst notInitializedPreferences = notInitialized.proxy<PreferencesOperations>()\n\n// ─── 已初始化时的操作实现 ───\n\nconst deviceOps: DeviceOperations = {\n getInfo: getDeviceInfo,\n getAppVersion,\n}\n\nconst cameraOps: CameraOperations = {\n takePhoto,\n}\n\nconst pushOps: PushOperations = {\n register: registerPush,\n listen: listenPush,\n}\n\nconst statusBarOps: StatusBarOperations = {\n configure: configureStatusBar,\n show: showStatusBar,\n hide: hideStatusBar,\n}\n\nconst preferencesOps: PreferencesOperations = {\n get: safeGetPreference,\n set: safeSetPreference,\n remove: safeRemovePreference,\n}\n\n// ─── 检测 Capacitor 是否可用(模块内部使用) ───\n\nfunction isCapacitorAvailable(): boolean {\n try {\n return typeof window !== 'undefined'\n && (window as unknown as Record<string, unknown>).Capacitor !== undefined\n }\n catch {\n return false\n }\n}\n\n// ─── 服务对象 ───\n\n/**\n * Capacitor 模块服务对象\n *\n * @example\n * ```ts\n * import { capacitor } from '@h-ai/capacitor'\n *\n * const result = await capacitor.init()\n * if (result.success) {\n * const info = await capacitor.device.getInfo()\n * await capacitor.statusBar.configure({ style: 'dark', overlay: true })\n * }\n * ```\n */\nexport const capacitor: CapacitorFunctions = {\n async init(): Promise<HaiResult<void>> {\n // 并发初始化防护:避免多次 init 同时执行导致资源泄漏\n if (initInProgress) {\n logger.warn('Capacitor init already in progress, skipping concurrent call')\n return err(\n HaiCapacitorError.INIT_IN_PROGRESS,\n capacitorM('capacitor_initInProgress'),\n )\n }\n initInProgress = true\n\n try {\n if (initialized) {\n logger.warn('Capacitor module is already initialized, reinitializing')\n await capacitor.close()\n }\n\n logger.info('Initializing capacitor module')\n\n if (!isCapacitorAvailable()) {\n logger.error('Capacitor is not available in current environment')\n return err(\n HaiCapacitorError.NOT_AVAILABLE,\n capacitorM('capacitor_notAvailable'),\n )\n }\n\n const { Capacitor } = await import('@capacitor/core')\n const platform = Capacitor.getPlatform()\n\n if (!platform) {\n logger.error('Capacitor initialization failed, platform not detected')\n return err(\n HaiCapacitorError.INIT_FAILED,\n capacitorM('capacitor_initFailed'),\n )\n }\n\n cachedPlatform = platform\n initialized = true\n logger.info('Capacitor module initialized', { platform })\n return ok(undefined)\n }\n catch (cause) {\n logger.error('Capacitor module initialization failed', { error: cause })\n return err(\n HaiCapacitorError.INIT_FAILED,\n capacitorM('capacitor_initFailed'),\n cause,\n )\n }\n finally {\n initInProgress = false\n }\n },\n\n async close() {\n if (!initialized) {\n logger.info('Capacitor module is already closed, skipping')\n return\n }\n logger.info('Closing capacitor module')\n initialized = false\n cachedPlatform = null\n logger.info('Capacitor module closed')\n },\n\n getPlatform(): string {\n if (cachedPlatform) {\n return cachedPlatform\n }\n try {\n const cap = (window as unknown as Record<string, unknown>).Capacitor as { getPlatform?: () => string } | undefined\n return cap?.getPlatform?.() ?? 'web'\n }\n catch {\n return 'web'\n }\n },\n\n isNative(): boolean {\n try {\n const cap = (window as unknown as Record<string, unknown>).Capacitor as { isNativePlatform?: () => boolean } | undefined\n return cap?.isNativePlatform?.() ?? false\n }\n catch {\n return false\n }\n },\n\n get isInitialized(): boolean {\n return initialized\n },\n\n get device(): DeviceOperations {\n return initialized ? deviceOps : notInitializedDevice\n },\n\n get camera(): CameraOperations {\n return initialized ? cameraOps : notInitializedCamera\n },\n\n get push(): PushOperations {\n return initialized ? pushOps : notInitializedPush\n },\n\n get statusBar(): StatusBarOperations {\n return initialized ? statusBarOps : notInitializedStatusBar\n },\n\n get preferences(): PreferencesOperations {\n return initialized ? preferencesOps : notInitializedPreferences\n },\n}\n"]}
1
+ {"version":3,"sources":["../messages/en-US.json","../messages/zh-CN.json","../src/capacitor-i18n.ts","../src/capacitor-types.ts","../src/capacitor-camera.ts","../src/capacitor-device.ts","../src/capacitor-push.ts","../src/capacitor-status-bar.ts","../src/capacitor-token-storage.ts","../src/capacitor-main.ts"],"names":["core","ok","err","logger"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"capacitor_initFailed\": \"Capacitor initialization failed\",\n \"capacitor_initInProgress\": \"Capacitor initialization is already in progress\",\n \"capacitor_notAvailable\": \"Capacitor is not available in this environment\",\n \"capacitor_preferencesGetFailed\": \"Failed to read from Capacitor Preferences\",\n \"capacitor_preferencesSetFailed\": \"Failed to write to Capacitor Preferences\",\n \"capacitor_preferencesRemoveFailed\": \"Failed to remove from Capacitor Preferences\",\n \"capacitor_deviceInfoFailed\": \"Failed to get device info\",\n \"capacitor_pushRegisterFailed\": \"Failed to register push notifications\",\n \"capacitor_pushListenFailed\": \"Failed to listen for push notifications\",\n \"capacitor_cameraFailed\": \"Failed to access camera\",\n \"capacitor_statusBarFailed\": \"Failed to configure status bar\",\n \"capacitor_notInitialized\": \"Capacitor module is not initialized\"\n}\n","{\n \"capacitor_initFailed\": \"Capacitor 初始化失败\",\n \"capacitor_initInProgress\": \"Capacitor 正在初始化中\",\n \"capacitor_notAvailable\": \"当前环境不支持 Capacitor\",\n \"capacitor_preferencesGetFailed\": \"读取 Capacitor Preferences 失败\",\n \"capacitor_preferencesSetFailed\": \"写入 Capacitor Preferences 失败\",\n \"capacitor_preferencesRemoveFailed\": \"删除 Capacitor Preferences 失败\",\n \"capacitor_deviceInfoFailed\": \"获取设备信息失败\",\n \"capacitor_pushRegisterFailed\": \"注册推送通知失败\",\n \"capacitor_pushListenFailed\": \"监听推送通知失败\",\n \"capacitor_cameraFailed\": \"访问相机失败\",\n \"capacitor_statusBarFailed\": \"配置状态栏失败\",\n \"capacitor_notInitialized\": \"Capacitor 模块未初始化\"\n}\n","/**\n * @h-ai/capacitor — i18n\n *\n * 模块 i18n 文案访问入口。\n * @module capacitor-i18n\n */\n\nimport { core } from '@h-ai/core'\nimport messagesEnUS from '../messages/en-US.json'\nimport messagesZhCN from '../messages/zh-CN.json'\n\ntype CapacitorMessageKey = keyof typeof messagesZhCN\n\n/**\n * capacitor 模块 i18n 文案获取器\n *\n * @param key - 文案 Key\n * @returns 本地化后的文案字符串\n */\nexport const capacitorM = core.i18n.createMessageGetter<CapacitorMessageKey>({\n 'zh-CN': messagesZhCN,\n 'en-US': messagesEnUS,\n})\n","/**\n * @h-ai/capacitor — 类型定义\n *\n * Capacitor 原生桥接模块的公共类型。\n * @module capacitor-types\n */\n\nimport type { ErrorInfo, HaiResult } from '@h-ai/core'\nimport { core } from '@h-ai/core'\n\nconst CapacitorErrorInfo = {\n INIT_FAILED: '001:500',\n NOT_AVAILABLE: '002:400',\n INIT_IN_PROGRESS: '003:409',\n NOT_INITIALIZED: '010:500',\n PREFERENCES_GET_FAILED: '011:500',\n PREFERENCES_SET_FAILED: '012:500',\n PREFERENCES_REMOVE_FAILED: '013:500',\n DEVICE_INFO_FAILED: '020:500',\n PUSH_REGISTER_FAILED: '030:500',\n PUSH_LISTEN_FAILED: '031:500',\n CAMERA_FAILED: '040:500',\n STATUS_BAR_FAILED: '050:500',\n} as const satisfies ErrorInfo\n\nexport const HaiCapacitorError = core.error.buildHaiErrorsDef('capacitor', CapacitorErrorInfo)\n\n// ─── 子操作接口 ───\n\n/** 设备信息操作 */\nexport interface DeviceOperations {\n /** 获取设备信息(平台、型号、系统版本等) */\n getInfo: () => Promise<HaiResult<DeviceInfo>>\n /** 获取应用版本信息 */\n getAppVersion: () => Promise<HaiResult<{ version: string, build: string }>>\n}\n\n/** 相机操作 */\nexport interface CameraOperations {\n /** 拍照或选取相册图片 */\n takePhoto: (options?: PhotoOptions) => Promise<HaiResult<PhotoResult>>\n}\n\n/** 推送通知操作 */\nexport interface PushOperations {\n /** 注册推送通知,返回设备 Token */\n register: () => Promise<HaiResult<PushRegistration>>\n /** 监听推送通知事件,返回清理函数 */\n listen: (callbacks: PushNotificationCallbacks) => Promise<HaiResult<() => Promise<void>>>\n}\n\n/** 状态栏操作 */\nexport interface StatusBarOperations {\n /** 配置状态栏(样式、背景色、沉浸式) */\n configure: (config: StatusBarConfig) => Promise<HaiResult<void>>\n /** 显示状态栏 */\n show: () => Promise<HaiResult<void>>\n /** 隐藏状态栏 */\n hide: () => Promise<HaiResult<void>>\n}\n\n/** Preferences 操作(安全读写,返回 HaiResult) */\nexport interface PreferencesOperations {\n /** 安全读取 Preference 值 */\n get: (key: string) => Promise<HaiResult<string | null>>\n /** 安全写入 Preference 值 */\n set: (key: string, value: string) => Promise<HaiResult<void>>\n /** 安全删除 Preference 值 */\n remove: (key: string) => Promise<HaiResult<void>>\n}\n\n// ─── 函数接口 ───\n\n/** Capacitor 模块服务对象接口 */\nexport interface CapacitorFunctions {\n /** 初始化 Capacitor 模块 */\n init: () => Promise<HaiResult<void>>\n /** 关闭模块,重置状态 */\n close: () => Promise<void>\n /** 获取当前平台 */\n getPlatform: () => string\n /** 是否运行在原生 App 中 */\n isNative: () => boolean\n /** 是否已初始化 */\n readonly isInitialized: boolean\n\n /** 设备信息操作 */\n readonly device: DeviceOperations\n /** 相机操作 */\n readonly camera: CameraOperations\n /** 推送通知操作 */\n readonly push: PushOperations\n /** 状态栏操作 */\n readonly statusBar: StatusBarOperations\n /** Preferences 安全读写操作 */\n readonly preferences: PreferencesOperations\n}\n\n// ─── 设备信息 ───\n\n/** 设备平台 */\nexport type DevicePlatform = 'ios' | 'android' | 'web'\n\n/** 设备信息 */\nexport interface DeviceInfo {\n /** 平台(ios / android / web) */\n platform: DevicePlatform\n /** 操作系统版本(如 '14.5') */\n osVersion: string\n /** 设备型号(如 'iPhone 14 Pro') */\n model: string\n /** 设备制造商 */\n manufacturer: string\n /** 是否为虚拟设备(模拟器) */\n isVirtual: boolean\n /** 应用版本 */\n appVersion?: string\n /** 应用 Build 号 */\n appBuild?: string\n}\n\n// ─── 推送通知 ───\n\n/** 推送通知数据 */\nexport interface PushNotification {\n /** 通知 ID */\n id: string\n /** 标题 */\n title?: string\n /** 正文 */\n body?: string\n /** 附加数据 */\n data?: Record<string, unknown>\n}\n\n/** 推送注册结果 */\nexport interface PushRegistration {\n /** 设备推送 Token */\n token: string\n}\n\n/** 推送通知回调 */\nexport interface PushNotificationCallbacks {\n /** 收到推送时调用 */\n onReceived?: (notification: PushNotification) => void\n /** 用户点击推送时调用 */\n onActionPerformed?: (notification: PushNotification) => void\n}\n\n// ─── 相机 ───\n\n/** 照片来源 */\nexport type PhotoSource = 'camera' | 'photos' | 'prompt'\n\n/** 照片选项 */\nexport interface PhotoOptions {\n /** 来源(默认 'prompt') */\n source?: PhotoSource\n /** 图片质量 0-100(默认 90) */\n quality?: number\n /** 最大宽度(像素) */\n width?: number\n /** 最大高度(像素) */\n height?: number\n /** 返回格式 */\n resultType?: 'uri' | 'base64' | 'dataUrl'\n}\n\n/** 照片结果 */\nexport interface PhotoResult {\n /** 图片路径或 base64 数据 */\n data: string\n /** MIME 类型 */\n format: string\n}\n\n// ─── 状态栏 ───\n\n/** 状态栏样式 */\nexport type StatusBarStyle = 'dark' | 'light' | 'default'\n\n/** 状态栏配置 */\nexport interface StatusBarConfig {\n /** 状态栏文字样式 */\n style?: StatusBarStyle\n /** 背景颜色(十六进制) */\n backgroundColor?: string\n /** 是否覆盖在内容上(沉浸式) */\n overlay?: boolean\n}\n","/**\n * @h-ai/capacitor — 相机 / 相册\n *\n * 封装 `@capacitor/camera` 插件,提供拍照与相册选择能力。\n *\n * @module capacitor-camera\n */\n\nimport type { HaiResult } from '@h-ai/core'\nimport type { PhotoOptions, PhotoResult } from './capacitor-types.js'\nimport { err, ok } from '@h-ai/core'\nimport { capacitorM } from './capacitor-i18n.js'\nimport { HaiCapacitorError } from './capacitor-types.js'\n\n/** 照片来源映射(内部使用) */\nconst SOURCE_MAP = {\n camera: 'Camera',\n photos: 'Photos',\n prompt: 'Prompt',\n} as const\n\n/** 结果类型映射(内部使用) */\nconst RESULT_TYPE_MAP = {\n uri: 'Uri',\n base64: 'Base64',\n dataUrl: 'DataUrl',\n} as const\n\n/**\n * 拍照或选取相册图片\n *\n * 需要安装 `@capacitor/camera` 插件。\n *\n * @param options - 照片选项\n * @returns 照片结果\n *\n * @example\n * ```ts\n * const result = await capacitor.camera.takePhoto({ source: 'camera', quality: 80 })\n * if (result.success) {\n * imageUrl = result.data.data\n * }\n * ```\n */\nexport async function takePhoto(options?: PhotoOptions): Promise<HaiResult<PhotoResult>> {\n try {\n const { Camera, CameraSource, CameraResultType } = await import('@capacitor/camera')\n\n const source = options?.source ?? 'prompt'\n const resultType = options?.resultType ?? 'uri'\n\n const photo = await Camera.getPhoto({\n quality: options?.quality ?? 90,\n source: CameraSource[SOURCE_MAP[source] as keyof typeof CameraSource],\n resultType: CameraResultType[RESULT_TYPE_MAP[resultType] as keyof typeof CameraResultType],\n width: options?.width,\n height: options?.height,\n })\n\n // 根据 resultType 返回对应数据\n let data: string\n if (resultType === 'base64') {\n data = photo.base64String ?? ''\n }\n else if (resultType === 'dataUrl') {\n data = photo.dataUrl ?? ''\n }\n else {\n data = photo.webPath ?? ''\n }\n\n return ok({\n data,\n format: photo.format,\n })\n }\n catch (cause) {\n return err(\n HaiCapacitorError.CAMERA_FAILED,\n capacitorM('capacitor_cameraFailed'),\n cause,\n )\n }\n}\n","/**\n * @h-ai/capacitor — 设备信息\n *\n * 封装 `@capacitor/device` 插件,提供统一的设备信息读取接口。\n *\n * @module capacitor-device\n */\n\nimport type { HaiResult } from '@h-ai/core'\nimport type { DeviceInfo } from './capacitor-types.js'\nimport { err, ok } from '@h-ai/core'\nimport { capacitorM } from './capacitor-i18n.js'\nimport { HaiCapacitorError } from './capacitor-types.js'\n\n/**\n * 获取设备信息\n *\n * 需要安装 `@capacitor/device` 插件。\n *\n * @returns 设备信息(平台、系统版本、型号等)\n *\n * @example\n * ```ts\n * const result = await capacitor.device.getInfo()\n * if (result.success) {\n * result.data.platform // 'android' | 'ios' | 'web'\n * }\n * ```\n */\nexport async function getDeviceInfo(): Promise<HaiResult<DeviceInfo>> {\n try {\n const { Device } = await import('@capacitor/device')\n const info = await Device.getInfo()\n\n return ok({\n platform: info.platform as DeviceInfo['platform'],\n osVersion: info.osVersion,\n model: info.model,\n manufacturer: info.manufacturer,\n isVirtual: info.isVirtual,\n })\n }\n catch (cause) {\n return err(\n HaiCapacitorError.DEVICE_INFO_FAILED,\n capacitorM('capacitor_deviceInfoFailed'),\n cause,\n )\n }\n}\n\n/**\n * 获取应用版本信息\n *\n * @returns appVersion 与 appBuild\n *\n * @example\n * ```ts\n * const result = await capacitor.device.getAppVersion()\n * if (result.success) {\n * result.data.version // '1.0.0'\n * result.data.build // '42'\n * }\n * ```\n */\nexport async function getAppVersion(): Promise<HaiResult<{ version: string, build: string }>> {\n try {\n const { App } = await import('@capacitor/app')\n const info = await App.getInfo()\n\n return ok({\n version: info.version,\n build: info.build,\n })\n }\n catch (cause) {\n return err(\n HaiCapacitorError.DEVICE_INFO_FAILED,\n capacitorM('capacitor_deviceInfoFailed'),\n cause,\n )\n }\n}\n","/**\n * @h-ai/capacitor — 推送通知\n *\n * 封装 `@capacitor/push-notifications` 插件,提供推送注册与消息监听。\n *\n * @module capacitor-push\n */\n\nimport type { HaiResult } from '@h-ai/core'\nimport type { PushNotificationCallbacks, PushRegistration } from './capacitor-types.js'\nimport { err, ok } from '@h-ai/core'\nimport { capacitorM } from './capacitor-i18n.js'\nimport { HaiCapacitorError } from './capacitor-types.js'\n\n/**\n * 注册推送通知\n *\n * 请求推送权限并注册设备 Token。需要安装 `@capacitor/push-notifications`。\n * 注册超过 30 秒未响应时自动超时。\n *\n * @returns 设备推送 Token\n *\n * @example\n * ```ts\n * const result = await capacitor.push.register()\n * if (result.success) {\n * await api.post('/push/register', { token: result.data.token })\n * }\n * ```\n */\nexport async function registerPush(): Promise<HaiResult<PushRegistration>> {\n try {\n const { PushNotifications } = await import('@capacitor/push-notifications')\n\n // 请求权限\n const permResult = await PushNotifications.requestPermissions()\n if (permResult.receive !== 'granted') {\n return err(\n HaiCapacitorError.PUSH_REGISTER_FAILED,\n capacitorM('capacitor_pushRegisterFailed'),\n )\n }\n\n // 注册并等待 Token(带超时防护)\n const REGISTER_TIMEOUT_MS = 30_000\n const token = await new Promise<string>((resolve, reject) => {\n let regListener: { remove: () => Promise<void> } | undefined\n let errListener: { remove: () => Promise<void> } | undefined\n\n const timer = setTimeout(() => {\n cleanup()\n reject(new Error('Push registration timed out'))\n }, REGISTER_TIMEOUT_MS)\n\n function cleanup() {\n clearTimeout(timer)\n regListener?.remove()\n errListener?.remove()\n }\n\n PushNotifications.addListener('registration', (t) => {\n cleanup()\n resolve(t.value)\n }).then((l) => { regListener = l })\n\n PushNotifications.addListener('registrationError', (error) => {\n cleanup()\n reject(error)\n }).then((l) => { errListener = l })\n\n PushNotifications.register()\n })\n\n return ok({ token })\n }\n catch (cause) {\n return err(\n HaiCapacitorError.PUSH_REGISTER_FAILED,\n capacitorM('capacitor_pushRegisterFailed'),\n cause,\n )\n }\n}\n\n/**\n * 监听推送通知事件\n *\n * @param callbacks - 回调配置(收到推送、点击推送)\n * @returns 包含清理函数的 HaiResult\n *\n * @example\n * ```ts\n * const result = await capacitor.push.listen({\n * onReceived: (n) => handlePushReceived(n),\n * onActionPerformed: (n) => router.goto('/notifications'),\n * })\n * if (result.success) {\n * // 停止监听\n * await result.data()\n * }\n * ```\n */\nexport async function listenPush(callbacks: PushNotificationCallbacks): Promise<HaiResult<() => Promise<void>>> {\n try {\n const { PushNotifications } = await import('@capacitor/push-notifications')\n const listeners: Array<{ remove: () => Promise<void> }> = []\n\n if (callbacks.onReceived) {\n const listener = await PushNotifications.addListener(\n 'pushNotificationReceived',\n (notification) => {\n callbacks.onReceived?.({\n id: notification.id,\n title: notification.title,\n body: notification.body,\n data: notification.data as Record<string, unknown>,\n })\n },\n )\n listeners.push(listener)\n }\n\n if (callbacks.onActionPerformed) {\n const listener = await PushNotifications.addListener(\n 'pushNotificationActionPerformed',\n (action) => {\n callbacks.onActionPerformed?.({\n id: action.notification.id,\n title: action.notification.title,\n body: action.notification.body,\n data: action.notification.data as Record<string, unknown>,\n })\n },\n )\n listeners.push(listener)\n }\n\n const cleanup = async () => {\n await Promise.all(listeners.map(l => l.remove()))\n }\n return ok(cleanup)\n }\n catch (cause) {\n return err(\n HaiCapacitorError.PUSH_LISTEN_FAILED,\n capacitorM('capacitor_pushListenFailed'),\n cause,\n )\n }\n}\n","/**\n * @h-ai/capacitor — 状态栏\n *\n * 封装 `@capacitor/status-bar` 插件,支持沉浸式状态栏配置。\n *\n * @module capacitor-status-bar\n */\n\nimport type { HaiResult } from '@h-ai/core'\nimport type { StatusBarConfig } from './capacitor-types.js'\nimport { err, ok } from '@h-ai/core'\nimport { capacitorM } from './capacitor-i18n.js'\nimport { HaiCapacitorError } from './capacitor-types.js'\n\n/**\n * 配置状态栏\n *\n * 需要安装 `@capacitor/status-bar` 插件。\n *\n * @param config - 状态栏配置\n * @returns HaiResult\n *\n * @example\n * ```ts\n * await capacitor.statusBar.configure({\n * style: 'dark',\n * overlay: true,\n * backgroundColor: '#ffffff',\n * })\n * ```\n */\nexport async function configureStatusBar(config: StatusBarConfig): Promise<HaiResult<void>> {\n try {\n const { StatusBar, Style } = await import('@capacitor/status-bar')\n\n // 设置样式\n if (config.style) {\n const styleMap: Record<string, typeof Style[keyof typeof Style]> = {\n dark: Style.Dark,\n light: Style.Light,\n default: Style.Default,\n }\n await StatusBar.setStyle({ style: styleMap[config.style] ?? Style.Default })\n }\n\n // 设置背景色\n if (config.backgroundColor) {\n await StatusBar.setBackgroundColor({ color: config.backgroundColor })\n }\n\n // 设置覆盖模式\n if (config.overlay !== undefined) {\n await StatusBar.setOverlaysWebView({ overlay: config.overlay })\n }\n\n return ok(undefined)\n }\n catch (cause) {\n return err(\n HaiCapacitorError.STATUS_BAR_FAILED,\n capacitorM('capacitor_statusBarFailed'),\n cause,\n )\n }\n}\n\n/**\n * 显示状态栏\n *\n * @returns HaiResult\n *\n * @example\n * ```ts\n * await capacitor.statusBar.show()\n * ```\n */\nexport async function showStatusBar(): Promise<HaiResult<void>> {\n try {\n const { StatusBar } = await import('@capacitor/status-bar')\n await StatusBar.show()\n return ok(undefined)\n }\n catch (cause) {\n return err(\n HaiCapacitorError.STATUS_BAR_FAILED,\n capacitorM('capacitor_statusBarFailed'),\n cause,\n )\n }\n}\n\n/**\n * 隐藏状态栏\n *\n * @returns HaiResult\n *\n * @example\n * ```ts\n * await capacitor.statusBar.hide()\n * ```\n */\nexport async function hideStatusBar(): Promise<HaiResult<void>> {\n try {\n const { StatusBar } = await import('@capacitor/status-bar')\n await StatusBar.hide()\n return ok(undefined)\n }\n catch (cause) {\n return err(\n HaiCapacitorError.STATUS_BAR_FAILED,\n capacitorM('capacitor_statusBarFailed'),\n cause,\n )\n }\n}\n","/**\n * @h-ai/capacitor — Token 存储\n *\n * 基于 Capacitor Preferences 的 TokenStorage 实现,\n * 比浏览器 localStorage 更安全,适用于原生 App 场景。\n *\n * @module capacitor-token-storage\n */\n\nimport type { TokenStorage } from '@h-ai/api-client'\nimport type { HaiResult } from '@h-ai/core'\nimport { Preferences } from '@capacitor/preferences'\nimport { core, err, ok } from '@h-ai/core'\nimport { capacitorM } from './capacitor-i18n.js'\nimport { HaiCapacitorError } from './capacitor-types.js'\n\nconst logger = core.logger.child({ module: 'capacitor', scope: 'token-storage' })\n\n/** Preferences 存储 Key */\nconst PREF_ACCESS_TOKEN = 'hai_access_token'\nconst PREF_REFRESH_TOKEN = 'hai_refresh_token'\n\n/**\n * 创建基于 Capacitor Preferences 的 TokenStorage\n *\n * 使用 `@capacitor/preferences` 插件进行持久化存储,\n * 在 Android 使用 SharedPreferences,iOS 使用 UserDefaults,\n * 比 localStorage 有更好的安全性。\n *\n * @returns TokenStorage 实例\n *\n * @example\n * ```ts\n * import { createCapacitorTokenStorage } from '@h-ai/capacitor'\n * import { apiClient } from '@h-ai/api-client'\n *\n * await apiClient.init({\n * baseUrl: 'https://api.example.com/v1',\n * auth: {\n * storage: createCapacitorTokenStorage(),\n * refreshPath: '/auth/refresh',\n * },\n * })\n * ```\n */\nexport function createCapacitorTokenStorage(): TokenStorage {\n return {\n async getAccessToken(): Promise<string | null> {\n try {\n const { value } = await Preferences.get({ key: PREF_ACCESS_TOKEN })\n return value\n }\n catch (error) {\n logger.error('Failed to get access token from Preferences', { error })\n return null\n }\n },\n\n async getRefreshToken(): Promise<string | null> {\n try {\n const { value } = await Preferences.get({ key: PREF_REFRESH_TOKEN })\n return value\n }\n catch (error) {\n logger.error('Failed to get refresh token from Preferences', { error })\n return null\n }\n },\n\n async setAccessToken(token: string): Promise<void> {\n try {\n await Preferences.set({ key: PREF_ACCESS_TOKEN, value: token })\n }\n catch (error) {\n logger.error('Failed to set access token in Preferences', { error })\n }\n },\n\n async setRefreshToken(token: string): Promise<void> {\n try {\n await Preferences.set({ key: PREF_REFRESH_TOKEN, value: token })\n }\n catch (error) {\n logger.error('Failed to set refresh token in Preferences', { error })\n }\n },\n\n async clear(): Promise<void> {\n try {\n await Promise.all([\n Preferences.remove({ key: PREF_ACCESS_TOKEN }),\n Preferences.remove({ key: PREF_REFRESH_TOKEN }),\n ])\n }\n catch (error) {\n logger.error('Failed to clear tokens from Preferences', { error })\n }\n },\n }\n}\n\n/**\n * 安全读取 Preference 值(返回 HaiResult)\n *\n * @param key - Preference Key\n * @returns HaiResult 包裹的值\n *\n * @example\n * ```ts\n * const result = await capacitor.preferences.get('my_key')\n * if (result.success) {\n * result.data // 值或 null\n * }\n * ```\n */\nexport async function safeGetPreference(key: string): Promise<HaiResult<string | null>> {\n try {\n const { value } = await Preferences.get({ key })\n return ok(value)\n }\n catch (cause) {\n return err(\n HaiCapacitorError.PREFERENCES_GET_FAILED,\n capacitorM('capacitor_preferencesGetFailed'),\n cause,\n )\n }\n}\n\n/**\n * 安全写入 Preference 值\n *\n * @param key - Preference Key\n * @param value - 要写入的值\n * @returns HaiResult\n *\n * @example\n * ```ts\n * await capacitor.preferences.set('my_key', 'value')\n * ```\n */\nexport async function safeSetPreference(key: string, value: string): Promise<HaiResult<void>> {\n try {\n await Preferences.set({ key, value })\n return ok(undefined)\n }\n catch (cause) {\n return err(\n HaiCapacitorError.PREFERENCES_SET_FAILED,\n capacitorM('capacitor_preferencesSetFailed'),\n cause,\n )\n }\n}\n\n/**\n * 安全删除 Preference 值\n *\n * @param key - Preference Key\n * @returns HaiResult\n *\n * @example\n * ```ts\n * await capacitor.preferences.remove('my_key')\n * ```\n */\nexport async function safeRemovePreference(key: string): Promise<HaiResult<void>> {\n try {\n await Preferences.remove({ key })\n return ok(undefined)\n }\n catch (cause) {\n return err(\n HaiCapacitorError.PREFERENCES_REMOVE_FAILED,\n capacitorM('capacitor_preferencesRemoveFailed'),\n cause,\n )\n }\n}\n","/**\n * @h-ai/capacitor — 模块入口(生命周期管理)\n *\n * 提供 Capacitor 原生桥接的初始化与环境检测。\n * `capacitor.init()` 应在应用启动时调用,用于检测 Capacitor 环境可用性。\n *\n * @module capacitor-main\n */\n\nimport type { HaiResult } from '@h-ai/core'\nimport type { CameraOperations, CapacitorFunctions, DeviceOperations, PreferencesOperations, PushOperations, StatusBarOperations } from './capacitor-types.js'\nimport { core, err, ok } from '@h-ai/core'\nimport { takePhoto } from './capacitor-camera.js'\nimport { getAppVersion, getDeviceInfo } from './capacitor-device.js'\nimport { capacitorM } from './capacitor-i18n.js'\nimport { listenPush, registerPush } from './capacitor-push.js'\nimport { configureStatusBar, hideStatusBar, showStatusBar } from './capacitor-status-bar.js'\nimport { safeGetPreference, safeRemovePreference, safeSetPreference } from './capacitor-token-storage.js'\nimport { HaiCapacitorError } from './capacitor-types.js'\n\nconst logger = core.logger.child({ module: 'capacitor', scope: 'main' })\n\n/** 是否已初始化 */\nlet initialized = false\n\n/** 是否正在初始化中(并发防护) */\nlet initInProgress = false\n\n/** 缓存平台信息 */\nlet cachedPlatform: string | null = null\n\n// ─── 未初始化代理 ───\n\nconst notInitialized = core.module.createNotInitializedKit(\n HaiCapacitorError.NOT_INITIALIZED,\n () => capacitorM('capacitor_notInitialized'),\n)\n\nconst notInitializedDevice = notInitialized.proxy<DeviceOperations>()\nconst notInitializedCamera = notInitialized.proxy<CameraOperations>()\nconst notInitializedPush = notInitialized.proxy<PushOperations>()\nconst notInitializedStatusBar = notInitialized.proxy<StatusBarOperations>()\nconst notInitializedPreferences = notInitialized.proxy<PreferencesOperations>()\n\n// ─── 已初始化时的操作实现 ───\n\nconst deviceOps: DeviceOperations = {\n getInfo: getDeviceInfo,\n getAppVersion,\n}\n\nconst cameraOps: CameraOperations = {\n takePhoto,\n}\n\nconst pushOps: PushOperations = {\n register: registerPush,\n listen: listenPush,\n}\n\nconst statusBarOps: StatusBarOperations = {\n configure: configureStatusBar,\n show: showStatusBar,\n hide: hideStatusBar,\n}\n\nconst preferencesOps: PreferencesOperations = {\n get: safeGetPreference,\n set: safeSetPreference,\n remove: safeRemovePreference,\n}\n\n// ─── 检测 Capacitor 是否可用(模块内部使用) ───\n\nfunction isCapacitorAvailable(): boolean {\n try {\n // window 上由 Capacitor 运行时注入 Capacitor 全局对象,lib.dom 未声明该属性,故强转为可查库的 Record\n return typeof window !== 'undefined'\n && (window as unknown as Record<string, unknown>).Capacitor !== undefined\n }\n catch {\n return false\n }\n}\n\n// ─── 服务对象 ───\n\n/**\n * Capacitor 模块服务对象\n *\n * @example\n * ```ts\n * import { capacitor } from '@h-ai/capacitor'\n *\n * const result = await capacitor.init()\n * if (result.success) {\n * const info = await capacitor.device.getInfo()\n * await capacitor.statusBar.configure({ style: 'dark', overlay: true })\n * }\n * ```\n */\nexport const capacitor: CapacitorFunctions = {\n async init(): Promise<HaiResult<void>> {\n // 并发初始化防护:避免多次 init 同时执行导致资源泄漏\n if (initInProgress) {\n logger.warn('Capacitor init already in progress, skipping concurrent call')\n return err(\n HaiCapacitorError.INIT_IN_PROGRESS,\n capacitorM('capacitor_initInProgress'),\n )\n }\n initInProgress = true\n\n try {\n if (initialized) {\n logger.warn('Capacitor module is already initialized, reinitializing')\n await capacitor.close()\n }\n\n logger.info('Initializing capacitor module')\n\n if (!isCapacitorAvailable()) {\n logger.error('Capacitor is not available in current environment')\n return err(\n HaiCapacitorError.NOT_AVAILABLE,\n capacitorM('capacitor_notAvailable'),\n )\n }\n\n const { Capacitor } = await import('@capacitor/core')\n const platform = Capacitor.getPlatform()\n\n if (!platform) {\n logger.error('Capacitor initialization failed, platform not detected')\n return err(\n HaiCapacitorError.INIT_FAILED,\n capacitorM('capacitor_initFailed'),\n )\n }\n\n cachedPlatform = platform\n initialized = true\n logger.info('Capacitor module initialized', { platform })\n return ok(undefined)\n }\n catch (cause) {\n logger.error('Capacitor module initialization failed', { error: cause })\n return err(\n HaiCapacitorError.INIT_FAILED,\n capacitorM('capacitor_initFailed'),\n cause,\n )\n }\n finally {\n initInProgress = false\n }\n },\n\n async close() {\n if (!initialized) {\n logger.info('Capacitor module is already closed, skipping')\n return\n }\n logger.info('Closing capacitor module')\n initialized = false\n cachedPlatform = null\n logger.info('Capacitor module closed')\n },\n\n getPlatform(): string {\n if (cachedPlatform) {\n return cachedPlatform\n }\n try {\n // 同 isCapacitorAvailable:Capacitor 全局仅在运行时由 native bridge 注入,需强转后读取\n const cap = (window as unknown as Record<string, unknown>).Capacitor as { getPlatform?: () => string } | undefined\n return cap?.getPlatform?.() ?? 'web'\n }\n catch {\n return 'web'\n }\n },\n\n isNative(): boolean {\n try {\n const cap = (window as unknown as Record<string, unknown>).Capacitor as { isNativePlatform?: () => boolean } | undefined\n return cap?.isNativePlatform?.() ?? false\n }\n catch {\n return false\n }\n },\n\n get isInitialized(): boolean {\n return initialized\n },\n\n get device(): DeviceOperations {\n return initialized ? deviceOps : notInitializedDevice\n },\n\n get camera(): CameraOperations {\n return initialized ? cameraOps : notInitializedCamera\n },\n\n get push(): PushOperations {\n return initialized ? pushOps : notInitializedPush\n },\n\n get statusBar(): StatusBarOperations {\n return initialized ? statusBarOps : notInitializedStatusBar\n },\n\n get preferences(): PreferencesOperations {\n return initialized ? preferencesOps : notInitializedPreferences\n },\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@h-ai/capacitor",
3
3
  "type": "module",
4
- "version": "0.1.0-alpha.13",
4
+ "version": "0.1.0-alpha.15",
5
5
  "description": "Hai Framework Capacitor bridge module for native mobile capabilities.",
6
6
  "license": "Apache-2.0",
7
7
  "exports": {
@@ -40,8 +40,8 @@
40
40
  }
41
41
  },
42
42
  "dependencies": {
43
- "@h-ai/core": "0.1.0-alpha.13",
44
- "@h-ai/api-client": "0.1.0-alpha.13"
43
+ "@h-ai/api-client": "0.1.0-alpha.15",
44
+ "@h-ai/core": "0.1.0-alpha.15"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@capacitor/app": "^8.0.1",