import { createCommands, hostEmitter, UserCustomError } from '@jolibox/common'; import { invokeNative } from '@jolibox/native-bridge'; import { createSyncAPI, t, registerCanIUse } from './base'; import { context } from '@/common/context'; import { reportError } from '@/common/report/errors/report'; const commands = createCommands(); const openSchemaSync = createSyncAPI('openSchemaSync', { paramsSchema: t.tuple(t.string()), implement: (schema) => { // Add compatibility logic for incomplete URLs let finalSchema = schema; if (!schema.match(/^https?:\/\//)) { finalSchema = `https://${context.mpId}.app.jolibox.com${schema.startsWith('/') ? '' : '/'}${schema}`; } const res = invokeNative('openSchemaSync', { schema: finalSchema }); if (res.errNo !== 0) { throw new UserCustomError(res.errMsg, res.errNo); } } }); const openPageSync = createSyncAPI('openPageSync', { paramsSchema: t.tuple(t.string()), implement: (page) => { const { errNo, errMsg, data } = invokeNative('openPageSync', { url: page }); if (errNo !== 0 || !data) { throw new UserCustomError(errMsg, errNo); } return { webviewId: data.webviewId }; } }); const closePageSync = createSyncAPI('closePageSync', { paramsSchema: t.tuple(t.number()), implement: (webviewId) => { const { errNo, errMsg } = invokeNative('closePageSync', { webviewId }); if (errNo !== 0) { throw new UserCustomError(errMsg, errNo); } } }); const interceptSystemExitSync = createSyncAPI('interceptSystemExitSync', { paramsSchema: t.tuple(t.boolean()), implement: (intercept) => { hostEmitter.emit('onInterceptSystemExit', { intercept }); // 同步拦截物理退出 hostEmitter.emit('onInterceptBackPress', { intercept }); } }); const navigateToNativePage = createSyncAPI('navigateToNativePage', { paramsSchema: t.tuple( t.enum( 'openHistory', 'openDiscover', 'openDiscover', 'openGame', 'openDrama', 'openTopup', 'openFeed', 'openRewards' ), t.object() ), implement: (path, params) => { invokeNative('callHostMethodAsync', { method: path, params: { ...params } }); } }); commands.registerCommand('RouterSDK.openSchema', openSchemaSync); commands.registerCommand('RouterSDK.openPage', openPageSync); commands.registerCommand('RouterSDK.closePage', closePageSync); commands.registerCommand('RouterSDK.interceptSystemExit', interceptSystemExitSync); commands.registerCommand('RouterSDK.navigateToNativePage', navigateToNativePage); registerCanIUse('router.openSchema', { version: '1.1.10' }); registerCanIUse('router.openPage', { version: '1.1.10' }); registerCanIUse('router.closePage', { version: '1.1.10' }); registerCanIUse('router.interceptSystemExit', { version: '1.1.18' }); registerCanIUse('router.navigateToNativePage', { version: '1.1.19' });