import { canIUseNative, createAPI, registerCanIUse, t } from './base'; import { invokeNative } from '@jolibox/native-bridge'; import { UserCustomError } from '@jolibox/common'; import { createCommands } from '@jolibox/common'; import { context } from '@/common/context'; const commands = createCommands(); const callHostMethodAsync = createAPI('callHostMethod', { paramsSchema: t.tuple( t.object({ method: t.string(), params: t.object().optional().default({}) }) ), implement: async ({ method, params }) => { if (!canIUseNative(method)) { throw new UserCustomError('Method not supported', 10001); } const { errNo, errMsg, data } = await invokeNative('callHostMethodAsync', { method, params: { ...params } }); if (errNo !== 0) { throw new UserCustomError(errMsg, errNo); } const { callHostMethodId, ...rest } = data; return { ...rest }; } }); commands.registerCommand('API.callHostMethod', callHostMethodAsync); registerCanIUse('callHostMethod', { version: '1.1.49' }); //user track const userTrackAsync = createAPI('userTrackAsync', { paramsSchema: t.tuple( t.object({ event: t.string(), eventType: t.number(), params: t.object().optional().default({}) }) ), implement: async ({ event, eventType, params }) => { if (!canIUseNative('userTrackAsync')) { throw new UserCustomError('Method not supported', 10001); } const { errNo, errMsg } = await invokeNative('trackAsync', { event, eventType, data: { ...params }, webviewId: context.webviewId }); if (errNo !== 0) { throw new UserCustomError(errMsg, errNo); } return; } }); commands.registerCommand('API.track', userTrackAsync); registerCanIUse('track', { version: '1.1.53' });