miniapp-runtime - Mini-App Runtime
Runtime for managing lifecycle and loading of mini-apps in the host app.
Overview
miniapp-runtime is responsible for:
- Load mini-app bundles dynamically
- Manage mini-app lifecycle (mount/unmount)
- Handle bridge communication
- Manage permissions
- Cache and version control
MiniAppProvider
import { MiniAppProvider } from '@54vie/miniapp-runtime';
function App() {
return (
<MiniAppProvider
config={{
cdnUrl: 'https://cdn.54vie.vn/mini-apps',
cacheStrategy: 'cache-first',
maxCacheSize: 100 * 1024 * 1024, // 100MB
preloadApps: ['dashboard'],
timeout: 30000,
retryAttempts: 3,
}}
>
<MainApp />
</MiniAppProvider>
);
}
serviceRouter
Bridge for communication between mini-app and host:
import { serviceRouter } from '@54vie/miniapp-runtime';
// Register handler (in host)
serviceRouter.register('myService', {
doSomething: async (params) => {
return { result: 'success' };
},
});
// Call from mini-app (via SDK)
const result = await serviceRouter.invoke('myService', 'doSomething', {
param1: 'value',
});
Lifecycle Hooks
import { useMiniAppLifecycle } from '@54vie/miniapp-runtime';
function MiniAppContainer({ appId }) {
useMiniAppLifecycle(appId, {
onLoad: () => console.log('Mini-app loaded'),
onMount: () => console.log('Mini-app mounted'),
onUnmount: () => console.log('Mini-app unmounted'),
onError: (error) => console.error('Error:', error),
});
}
Permission Manager
import { permissionManager } from '@54vie/miniapp-runtime';
// Check permission
const hasStorage = await permissionManager.check('com.54vie.shopping', 'storage');
// Request permission
const granted = await permissionManager.request(
'com.54vie.shopping',
'camera',
'Need camera for scanning products'
);
// Get all permissions for app
const permissions = permissionManager.getAppPermissions('com.54vie.shopping');
Bundle Loading
import { loadRemote } from '@54vie/miniapp-runtime';
// Load mini-app component
const MiniApp = await loadRemote('dashboard/App');
// Render
<MiniApp {...props} />