Skip to content

Bridge between web and native iOS and Android via JSON RPC

License

Notifications You must be signed in to change notification settings

podium-lib/bridge

Repository files navigation

@podium/bridge

This package is a bridge designed to pass JSON-RPC 2.0 messages between a web application and a native web view.

Usage

To install:

npm install @podium/bridge

Import the bridge in your client-side bundle:

import '@podium/bridge';

You should probably send messages via @podium/browser. That said, the bridge is available on window['@podium'].bridge.

/** @type {import("@podium/bridge").PodiumBridge} */
const bridge = window['@podium'].bridge;

// You can listen for incoming messages, which can either be RpcRequest or RpcResponse
bridge.on('global/authentication', (message) => {
	const request =
		/** @type {import("@podium/bridge").RpcRequest<{ token?: string }>} */ (
			message
		);

	if (typeof request.token === 'string') {
		// logged in
	} else {
		// logged out
	}
});

// You can trigger notifications (one-way messages)
bridge.notification({
	method: 'global/authentication',
	params: { token: null },
});

// And you can call methods and await the response
/** @type {import("@podium/bridge").RpcResponse<{ c: string }>} */
const response = await bridge.call({
	method: 'document/native-feature',
	params: { a: 'foo', b: 'bar' },
});

API

bridge.on

Add a listener for incoming messages for a given method name.

import '@podium/bridge';

/** @type {import("@podium/bridge").PodiumBridge} */
const bridge = window['@podium'].bridge;

bridge.on('global/authentication', (message) => {
	const request =
		/** @type {import("@podium/bridge").RpcRequest<{ token?: string }>} */ (
			message
		);

	if (typeof request.token === 'string') {
		// logged in
	} else {
		// logged out
	}
});

bridge.notification

Send a notification (one-way message).

import '@podium/bridge';

/** @type {import("@podium/bridge").PodiumBridge} */
const bridge = window['@podium'].bridge;

bridge.notification({
	method: 'global/authentication',
	params: { token: null },
});

bridge.call

Send a request and await a response.

import '@podium/bridge';

/** @type {import("@podium/bridge").PodiumBridge} */
const bridge = window['@podium'].bridge;

/** @type {import("@podium/bridge").RpcResponse<{ c: string }>} */
const response = await bridge.call({
	method: 'document/native-feature',
	params: { a: 'foo', b: 'bar' },
});

About

Bridge between web and native iOS and Android via JSON RPC

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •