@tef-novum/webview-bridge
Version:
JavaScript library to access to native functionality. Requires a webview with a postMessage bridge.
660 lines (659 loc) • 17.1 kB
TypeScript
/**
* There are two possible kind of messages we can receive from native app:
* - RequestsFromNativeApp: native app initiates the dialog
* - ResponsesFromNativeApp: native app responds to a request initiated by the web
*/
declare type RequestsFromNativeApp = {
SESSION_RENEWED: {
type: 'SESSION_RENEWED';
id: string;
payload: {
accessToken: string;
};
};
/** https://confluence.tid.es/display/CTO/%5BAPPS%5D+Shared+Spec%3A+Top+Bar+customization#id-[APPS]SharedSpec:TopBarcustomization-Iconclickedcallbackbridgemethod */
NAVIGATION_BAR_ICON_CLICKED: {
type: 'NAVIGATION_BAR_ICON_CLICKED';
id: string;
payload: {
id: string;
};
};
};
export declare type SheetResponse = {
action: 'SUBMIT' | 'DISMISS';
result: Array<{
id: string;
selectedIds: Array<string>;
}>;
};
export declare type SnackbarResponse = {
action: 'DISMISS' | 'BUTTON' | 'TIMEOUT' | 'CONSECUTIVE';
};
declare type DataConnectionResponse = {
connectionType: 'MOBILE' | 'WIFI ' | 'OTHER' | 'NONE';
mobileConnectionType?: '2G' | '3G' | '4G' | '5G' | 'OTHER' | 'PERMISSION_REQUIRED' | null;
mobileCarrier?: string | null;
mobileSignalStrength?: 'NONE' | 'POOR' | 'MODERATE' | 'GOOD' | 'GREAT' | null;
};
export declare type ResponsesFromNativeApp = {
SIM_ICC: {
id: string;
type: 'SIM_ICC';
payload: {
icc: string;
};
};
IMEI: {
id: string;
type: 'IMEI';
payload: {
imei: string;
};
};
TAC: {
id: string;
type: 'TAC';
payload: {
tac: string | null;
};
};
IMSI: {
id: string;
type: 'IMSI';
payload: {
imsi: string;
};
};
ATTACH_TO_EMAIL: {
id: string;
type: 'ATTACH_TO_EMAIL';
payload: void;
};
SET_TITLE: {
id: string;
type: 'SET_TITLE';
payload: void;
};
PAGE_LOADED: {
id: string;
type: 'PAGE_LOADED';
payload: void;
};
BRIDGE_READY: {
id: string;
type: 'BRIDGE_READY';
payload: void;
};
ALERT: {
id: string;
type: 'ALERT';
payload: void;
};
MESSAGE: {
id: string;
type: 'MESSAGE';
payload: SnackbarResponse;
};
CONFIRM: {
id: string;
type: 'CONFIRM';
payload: {
result: boolean;
};
};
CREATE_CALENDAR_EVENT: {
id: string;
type: 'CREATE_CALENDAR_EVENT';
payload: void;
};
GET_CONTACT_DATA: {
id: string;
type: 'GET_CONTACT_DATA';
payload: {
name?: string;
email?: string;
phoneNumber?: string;
address?: {
street?: string;
city?: string;
country?: string;
postalCode?: string;
};
};
};
NAVIGATION_BAR: {
id: string;
type: 'NAVIGATION_BAR';
payload: void;
};
SHARE: {
id: string;
type: 'SHARE';
payload: void;
};
ERROR: {
id: string;
type: 'ERROR';
payload: {
code: number;
reason: string;
};
};
GET_REMOTE_CONFIG: {
id: string;
type: 'GET_REMOTE_CONFIG';
payload: {
result: {
[s: string]: string;
};
};
};
STATUS_REPORT: {
id: string;
type: 'STATUS_REPORT';
payload: void;
};
FETCH: {
id: string;
type: 'FETCH';
payload: {
status: number;
headers: {
[key: string]: string;
};
body: string;
};
};
OS_PERMISSION_STATUS: {
id: string;
type: 'OS_PERMISSION_STATUS';
payload: {
granted: boolean;
};
};
REQUEST_PERMISSION_LOCATION: {
id: string;
type: 'REQUEST_PERMISSION_LOCATION';
payload: {
status: 'granted' | 'denied';
};
};
REQUEST_PERMISSION_BACKGROUND_LOCATION: {
id: string;
type: 'REQUEST_PERMISSION_BACKGROUND_LOCATION';
payload: {
status: 'granted' | 'denied';
};
};
REQUEST_PERMISSION_MICROPHONE: {
id: string;
type: 'REQUEST_PERMISSION_MICROPHONE';
payload: {
status: 'granted' | 'denied';
};
};
REQUEST_PERMISSION_NOTIFICATIONS: {
id: string;
type: 'REQUEST_PERMISSION_NOTIFICATIONS';
payload: {
status: 'granted' | 'denied';
};
};
REQUEST_PERMISSION_CRITICAL_ALERTS: {
id: string;
type: 'REQUEST_PERMISSION_CRITICAL_ALERTS';
payload: {
status: 'granted' | 'denied';
};
};
REQUEST_PERMISSION_BATTERY_OPTIMIZATION: {
id: string;
type: 'REQUEST_PERMISSION_BATTERY_OPTIMIZATION';
payload: {
status: 'granted' | 'denied';
};
};
INTERNAL_NAVIGATION: {
type: 'INTERNAL_NAVIGATION';
id: string;
payload: void;
};
DISMISS: {
type: 'DISMISS';
id: string;
payload: void;
};
VIBRATION: {
type: 'VIBRATION';
id: string;
payload: void;
};
FETCH_CONTACTS_DATA: {
id: string;
type: 'FETCH_CONTACTS_DATA';
payload: Array<{
phoneNumber: string;
firstName?: string;
middleName?: string;
lastName?: string;
encodedAvatar?: string;
}>;
};
ADD_OR_EDIT_CONTACT: {
id: string;
type: 'ADD_OR_EDIT_CONTACT';
payload: {
phoneNumber?: string;
firstName?: string;
middleName?: string;
lastName?: string;
encodedAvatar?: string;
};
};
RENEW_SESSION: {
type: 'RENEW_SESSION';
id: string;
payload: {
accessToken: string;
};
};
GET_APP_METADATA: {
type: 'GET_APP_METADATA';
id: string;
payload: {
isInstalled: boolean;
marketUrl: string;
appUrl: string;
};
};
GET_DISK_SPACE_INFO: {
type: 'GET_DISK_SPACE_INFO';
id: string;
payload: {
availableBytes: number;
totalBytes: number;
};
};
GET_ESIM_INFO: {
type: 'GET_ESIM_INFO';
id: string;
payload: {
supportsEsim: boolean;
eid?: string | null;
};
};
SET_TRACKING_PROPERTY: {
type: 'SET_TRACKING_PROPERTY';
id: string;
payload: void;
};
SET_ACTION_BEHAVIOR: {
type: 'SET_ACTION_BEHAVIOR';
id: string;
payload: void;
};
HIGHLIGHT_TAB: {
type: 'HIGHLIGHT_TAB';
id: string;
payload: void;
};
GET_TOPAZ_TOKEN: {
type: 'GET_TOPAZ_TOKEN';
id: string;
payload: {
token: string;
};
};
GET_TOPAZ_VALUES: {
type: 'GET_TOPAZ_VALUES';
id: string;
payload: {
syncId?: string;
};
};
LOG_OUT: {
type: 'LOG_OUT';
id: string;
payload: {
success: boolean;
};
};
SHOW_APP_RATING: {
type: 'SHOW_APP_RATING';
id: string;
payload: void;
};
SHEET: {
type: 'SHEET';
id: string;
payload: SheetResponse;
};
FETCH_PHONE_NUMBERS: {
type: 'FETCH_PHONE_NUMBERS';
id: string;
payload: Array<{
id: string;
value: string;
}>;
};
UPDATE_PHONE_NUMBERS: {
type: 'UPDATE_PHONE_NUMBERS';
id: string;
payload: void;
};
GET_ATT_STATUS: {
type: 'GET_ATT_STATUS';
id: string;
payload: {
status: 'granted' | 'denied' | 'unknown';
};
};
MODEL: {
type: 'MODEL';
id: string;
payload: {
model: string;
};
};
OPEN_ONBOARDING: {
type: 'OPEN_ONBOARDING';
id: string;
payload: void;
};
DATA_CONNECTION_INFO: {
type: 'DATA_CONNECTION_INFO';
id: string;
payload: DataConnectionResponse;
};
GET_PINCODE_INFO: {
type: 'GET_PINCODE_INFO';
id: string;
payload: {
status: 'enabled' | 'disabled';
};
};
GET_PROFILE_IMAGE: {
type: 'GET_PROFILE_IMAGE';
id: string;
payload: {
image: string | null;
};
};
START_PROFILE_IMAGE_FLOW: {
type: 'START_PROFILE_IMAGE_FLOW';
id: string;
payload: {
image: string | null;
isCancelled: boolean;
};
};
SHOW_LINE_SELECTOR: {
type: 'SHOW_LINE_SELECTOR';
id: string;
payload: void;
};
TRIGGER_PIN_OR_BIOMETRIC_AUTHENTICATION: {
type: 'TRIGGER_PIN_OR_BIOMETRIC_AUTHENTICATION';
id: string;
payload: {
result: 'USER_AUTHENTICATED' | 'USER_ENABLED_AUTHENTICATION' | 'LAST_AUTHENTICATION_STILL_VALID' | 'DEVICE_HAS_NO_AUTHENTICATION';
};
};
FOCUS_NAVBAR: {
type: 'FOCUS_NAVBAR';
id: string;
payload: {
focused: boolean;
};
};
SHARE_BASE64: {
type: 'SHARE_BASE64';
id: string;
payload: void;
};
DOWNLOAD_BASE64: {
type: 'DOWNLOAD_BASE64';
id: string;
payload: void;
};
GET_BATTERY_INFO: {
type: 'GET_BATTERY_INFO';
id: string;
payload: {
batteryLevel: number | null;
isPowerSafeMode: boolean;
};
};
CLIPBOARD_READ_TEXT: {
type: 'CLIPBOARD_READ_TEXT';
id: string;
payload: string;
};
CLIPBOARD_WRITE_TEXT: {
type: 'CLIPBOARD_WRITE_TEXT';
id: string;
payload: void;
};
SHOW_LOADING_OVERLAY: {
type: 'SHOW_LOADING_OVERLAY';
id: string;
payload: void;
};
HIDE_LOADING_OVERLAY: {
type: 'HIDE_LOADING_OVERLAY';
id: string;
payload: void;
};
GET_INSTALLATION_ID: {
type: 'GET_INSTALLATION_ID';
id: string;
payload: {
installationId: string;
};
};
GET_UNSEEN_NOTIFICATIONS_BADGE: {
type: 'GET_UNSEEN_NOTIFICATIONS_BADGE';
id: string;
payload: {
unseenNotificationCounter: number;
lastUpdated: number;
};
};
SET_UNSEEN_NOTIFICATIONS_BADGE: {
type: 'SET_UNSEEN_NOTIFICATIONS_BADGE';
id: string;
payload: void;
};
REQUEST_DATAMOB_DEVICE_ADMIN: {
type: 'REQUEST_DATAMOB_DEVICE_ADMIN';
id: string;
payload: {
isAdmin: boolean;
};
};
REGISTER_DATAMOB_USER: {
type: 'REGISTER_DATAMOB_USER';
id: string;
payload: void;
};
VALIDATE_DATAMOB_REQUIREMENTS: {
type: 'VALIDATE_DATAMOB_REQUIREMENTS';
id: string;
payload: {
deviceAdmin: boolean;
lockPassword: boolean;
accessibilityOption: boolean;
invalidPhoneNumber: boolean;
invalidToken: boolean;
};
};
UNREGISTER_DATAMOB_DEVICE_ADMIN: {
type: 'UNREGISTER_DATAMOB_DEVICE_ADMIN';
id: string;
payload: void;
};
DISPLAY_QUALTRICS_INTERCEPT: {
type: 'DISPLAY_QUALTRICS_INTERCEPT';
id: string;
payload: {
displayed: true;
};
};
SET_QUALTRICS_PROPERTIES: {
type: 'SET_QUALTRICS_PROPERTIES';
id: string;
payload: void;
};
IS_QUALTRICS_INTERCEPT_AVAILABLE_FOR_USER: {
type: 'IS_QUALTRICS_INTERCEPT_AVAILABLE_FOR_USER';
id: string;
payload: {
isAvailable: boolean;
surveyUrl?: string | null;
};
};
REFRESH_NAV_BAR: {
type: 'REFRESH_NAV_BAR';
id: string;
payload: void;
};
GET_APP_DOMAIN: {
type: 'GET_APP_DOMAIN';
id: string;
payload: {
domain: string;
};
};
SETUP_LOCATOR_SDK_CONFIG: {
type: 'SETUP_LOCATOR_SDK_CONFIG';
id: string;
payload: void;
};
GET_LOCATOR_SDK_STATE: {
type: 'GET_LOCATOR_SDK_STATE';
id: string;
payload: {
state: string;
};
};
SET_LOCATOR_SDK_MODE: {
type: 'SET_LOCATOR_SDK_MODE';
id: string;
payload: void;
};
GET_LOCATOR_JWT_TOKEN: {
type: 'GET_LOCATOR_JWT_TOKEN';
id: string;
payload: {
token: string;
};
};
GET_LOCATOR_PENDING_PERMISSIONS: {
type: 'GET_LOCATOR_PENDING_PERMISSIONS';
id: string;
payload: {
permissions: Array<string>;
};
};
GET_LOCATOR_SDK_VERSION: {
type: 'GET_LOCATOR_SDK_VERSION';
id: string;
payload: {
version: string;
};
};
GET_LOCATOR_SDK_SESSION: {
type: 'GET_LOCATOR_SDK_SESSION';
id: string;
payload: {
session: {
id: string;
startAt: number;
endAt: number | null;
};
};
};
GET_LOCATOR_SDK_MODE: {
type: 'GET_LOCATOR_SDK_MODE';
id: string;
payload: {
mode: string;
};
};
GET_LOCATOR_SDK_CONFIG: {
type: 'GET_LOCATOR_SDK_CONFIG';
id: string;
payload: {
config: Record<string, unknown> | null;
};
};
REQUEST_ALLOWME_BIOMETRICS: {
type: 'REQUEST_ALLOWME_BIOMETRICS';
id: string;
payload: {
result?: string;
images: Array<string>;
};
};
INCREASE_APP_RATING_TRIGGER: {
type: 'INCREASE_APP_RATING_TRIGGER';
id: string;
payload: void;
};
RESET_APP_RATING_TRIGGER: {
type: 'RESET_APP_RATING_TRIGGER';
id: string;
payload: void;
};
APP_RATING_REMIND_ME_LATER: {
type: 'APP_RATING_REMIND_ME_LATER';
id: string;
payload: void;
};
GET_BIOMETRICS_AUTHENTICATION_STATUS: {
type: 'GET_BIOMETRICS_AUTHENTICATION_STATUS';
id: string;
payload: {
result: 'DISABLED' | 'ENABLED' | 'DEVICE_HAS_NO_AUTHENTICATION';
};
};
SET_BIOMETRICS_AUTHENTICATION_STATUS: {
type: 'SET_BIOMETRICS_AUTHENTICATION_STATUS';
id: string;
payload: void;
};
OPEN_OCR_SCANNER: {
type: 'OPEN_OCR_SCANNER';
id: string;
payload: {
scannedText: string;
};
};
};
export declare type NativeAppResponsePayload<Type extends keyof ResponsesFromNativeApp> = ResponsesFromNativeApp[Type]['payload'];
declare type NativeAppRequestPayload<Type extends keyof RequestsFromNativeApp> = RequestsFromNativeApp[Type]['payload'];
declare let log: undefined | ((...args: Array<any>) => void);
export declare const setLogger: (logger: typeof log) => void;
/**
* Returns true if there is a WebView Bridge installed
*/
export declare const isWebViewBridgeAvailable: () => boolean;
/**
* Send message to native app and waits for response
*/
export declare const postMessageToNativeApp: <T extends keyof ResponsesFromNativeApp>({ type, id, payload }: {
type: T;
id?: string | undefined;
payload?: Object | undefined;
}, timeout?: number | undefined) => Promise<NativeAppResponsePayload<T>>;
export declare type NativeEventHandler = ({ event }: {
event: string;
}) => {
action: 'default';
};
export declare const listenToNativeMessage: <T extends keyof RequestsFromNativeApp>(type: T, handler: (payload: NativeAppRequestPayload<T>) => Object | void | Promise<Object>) => (() => void);
export declare const onSessionRenewal: (handler: (payload: {
accessToken: string;
}) => void) => (() => void);
export {};