Compare commits

..
2 changed files with 199 additions and 216 deletions
@@ -32,6 +32,13 @@ import { Cordova, CordovaProperty, AwesomeCordovaNativePlugin, Plugin } from '@a
*
* ```
*/
export interface DiagnosticLocalNetworkAuthorizationOptions {
/**
* Override the default fallback timeout (2000ms) before treating a slow response as indeterminate (`UNKNOWN`).
*/
timeoutMs?: number;
}
@Plugin({
pluginName: 'Diagnostic',
plugin: 'cordova.plugins.diagnostic',
@@ -46,6 +53,7 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
ACCESS_BACKGROUND_LOCATION: 'ACCESS_BACKGROUND_LOCATION',
ACCESS_COARSE_LOCATION: 'ACCESS_COARSE_LOCATION',
ACCESS_FINE_LOCATION: 'ACCESS_FINE_LOCATION',
ACCESS_LOCAL_NETWORK: 'ACCESS_LOCAL_NETWORK',
ACCESS_MEDIA_LOCATION: 'ACCESS_MEDIA_LOCATION',
ACTIVITY_RECOGNITION: 'ACTIVITY_RECOGNITION',
ADD_VOICEMAIL: 'ADD_VOICEMAIL',
@@ -61,6 +69,7 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
NEARBY_WIFI_DEVICES: 'NEARBY_WIFI_DEVICES',
POST_NOTIFICATIONS: 'POST_NOTIFICATIONS',
PROCESS_OUTGOING_CALLS: 'PROCESS_OUTGOING_CALLS',
RANGING: 'RANGING',
READ_CALENDAR: 'READ_CALENDAR',
READ_CALL_LOG: 'READ_CALL_LOG',
READ_CONTACTS: 'READ_CONTACTS',
@@ -68,6 +77,7 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
READ_MEDIA_AUDIO: 'READ_MEDIA_AUDIO',
READ_MEDIA_IMAGES: 'READ_MEDIA_IMAGES',
READ_MEDIA_VIDEO: 'READ_MEDIA_VIDEO',
READ_MEDIA_VISUAL_USER_SELECTED: 'READ_MEDIA_VISUAL_USER_SELECTED',
READ_PHONE_NUMBERS: 'READ_PHONE_NUMBERS',
READ_PHONE_STATE: 'READ_PHONE_STATE',
READ_SMS: 'READ_SMS',
@@ -99,6 +109,11 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
EPHEMERAL: string;
PROVISIONAL: string;
LIMITED: string;
/**
* Returned when the underlying OS has not yet provided a concrete status (for example, if an iOS
* Local Network probe timed out). Treat this as a transient state and retry before surfacing a denial to the user.
*/
UNKNOWN: string;
};
locationAuthorizationMode = {
@@ -110,8 +125,22 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
* Location accuracy authorization
*/
locationAccuracyAuthorization = {
/** Alias for BEST. On iOS, sets `kCLLocationAccuracyBest`. */
FULL: 'full',
/** On iOS, sets `kCLLocationAccuracyReduced` - approximate location, no GPS. */
REDUCED: 'reduced',
/** On iOS, sets `kCLLocationAccuracyBest`. May engage GPS hardware. */
BEST: 'best',
/** On iOS, sets `kCLLocationAccuracyBestForNavigation`. Highest accuracy using additional sensor data. */
BEST_FOR_NAVIGATION: 'bestForNavigation',
/** On iOS, sets `kCLLocationAccuracyNearestTenMeters`. */
NEAREST_TEN_METERS: 'nearestTenMeters',
/** On iOS, sets `kCLLocationAccuracyHundredMeters`. */
HUNDRED_METERS: 'hundredMeters',
/** On iOS, sets `kCLLocationAccuracyKilometer`. */
KILOMETER: 'kilometer',
/** On iOS, sets `kCLLocationAccuracyThreeKilometers`. */
THREE_KILOMETERS: 'threeKilometers',
};
permissionGroups = {
@@ -132,7 +161,7 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
SENSORS: ['BODY_SENSORS'],
SMS: ['SEND_SMS', 'RECEIVE_SMS', 'READ_SMS', 'RECEIVE_WAP_PUSH', 'RECEIVE_MMS'],
STORAGE: ['READ_EXTERNAL_STORAGE', 'WRITE_EXTERNAL_STORAGE'],
NEARBY_DEVICES: ["BLUETOOTH_ADVERTISE", "BLUETOOTH_SCAN", "BLUETOOTH_CONNECT"],
NEARBY_DEVICES: ['BLUETOOTH_ADVERTISE', 'BLUETOOTH_SCAN', 'BLUETOOTH_CONNECT'],
};
locationMode = {
@@ -164,21 +193,21 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
@CordovaProperty()
cpuArchitecture: {
MIPS: string;
MIPS_64: string;
UNKNOWN: string;
ARMv6: string;
ARMv7: string;
ARMv8: string;
X86: string;
X86_64: string;
MIPS: string;
MIPS_64: string;
UNKNOWN: string;
ARMv6: string;
ARMv7: string;
ARMv8: string;
X86: string;
X86_64: string;
};
@CordovaProperty()
remoteNotificationType: {
ALERT: string;
SOUND: string;
BADGE: string;
ALERT: string;
SOUND: string;
BADGE: string;
};
@CordovaProperty()
@@ -307,7 +336,6 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
return;
}
// ANDROID AND IOS ONLY
/**
@@ -360,7 +388,6 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
return;
}
/**
* Returns the location authorization status for the application.
* Note for Android: this is intended for Android 6 / API 23 and above. Calling on Android 5 / API 22 and below will always return GRANTED status as permissions are already granted at installation time.
@@ -578,7 +605,7 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
@Cordova({ platforms: ['Android', 'iOS'] })
getArchitecture(): Promise<any> {
return;
}
}
/**
* Returns the current battery level of the device as a percentage.
@@ -588,7 +615,62 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
@Cordova({ platforms: ['Android', 'iOS'] })
getCurrentBatteryLevel(): Promise<any> {
return;
}
}
/**
* Checks if low power mode is currently enabled on the device.
*
* @returns {Promise<boolean>}
*/
@Cordova({ platforms: ['Android', 'iOS'] })
isLowPowerModeEnabled(): Promise<boolean> {
return;
}
/**
* Registers a function to be called whenever the device low power mode status changes.
*
* @param {Function} handler
*/
@Cordova({ platforms: ['Android', 'iOS'], sync: true })
onLowPowerModeChange(handler: Function): void {}
/**
* Checks if currently running app build is a debug build.
*
* @returns {Promise<boolean>}
*/
@Cordova({ platforms: ['Android', 'iOS'] })
isDebugBuild(): Promise<boolean> {
return;
}
/**
* Checks if Accessibility Mode (Talkback on Android, VoiceOver on iOS) is currently enabled on the device.
*
* @returns {Promise<boolean>}
*/
@Cordova({ platforms: ['Android', 'iOS'] })
isAccessibilityModeEnabled(): Promise<boolean> {
return;
}
/**
* Checks if app is able to access device heading.
*
* @returns {Promise<boolean>}
*/
@Cordova({ platforms: ['Android', 'iOS'] })
isCompassAvailable(): Promise<boolean> {
return;
}
/**
* Opens notification settings for your app.
* On Android versions lower than O and on iOS versions lower than 15.4, this will open the same page as `switchToSettings()`.
*/
@Cordova({ platforms: ['Android', 'iOS'], sync: true })
switchToNotificationSettings(): void {}
// ANDROID ONLY
@@ -605,7 +687,6 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
return;
}
/**
* Checks if high-accuracy locations are available to the app from GPS hardware.
* Returns true if Location mode is enabled and is set to "Device only" or "High accuracy" AND if the app is authorized to use location.
@@ -664,7 +745,7 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
return;
}
/**
/**
* Checks if mobile data is enabled on device.
*
* @returns {Promise<any>}
@@ -674,6 +755,37 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
return;
}
/**
* Checks if the app is currently ignoring battery optimizations.
*
* @returns {Promise<boolean>}
*/
@Cordova({ platforms: ['Android'] })
isIgnoringBatteryOptimizations(): Promise<boolean> {
return;
}
/**
* Prompts the user to allow the app to ignore battery optimizations.
* Requires permission `<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />`
*
* @returns {Promise<any>}
*/
@Cordova({ platforms: ['Android'] })
requestIgnoreBatteryOptimizations(): Promise<any> {
return;
}
/**
* Checks if touch exploration (in accessibility mode) is currently enabled on the device.
*
* @returns {Promise<boolean>}
*/
@Cordova({ platforms: ['Android'] })
isTouchExplorationEnabled(): Promise<boolean> {
return;
}
/**
* Returns the current location mode setting for the device.
*
@@ -689,7 +801,7 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
*
* @returns {Promise<any>}
*/
@Cordova({ platforms: ['Android'] })
@Cordova({ platforms: ['Android', 'iOS'] })
getDeviceOSVersion(): Promise<any> {
return;
}
@@ -699,7 +811,7 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
*
* @returns {Promise<any>}
*/
@Cordova({ platforms: ['Android'] })
@Cordova({ platforms: ['Android', 'iOS'] })
getBuildOSVersion(): Promise<any> {
return;
}
@@ -826,7 +938,7 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
getBluetoothAuthorizationStatus(): Promise<any> {
return;
}
/**
* Returns the individual authorization status for each Bluetooth run-time permission on Android 12+ / API 31+
* On Android 11 / API 30 and below, all will be returned as GRANTED if the manifest has BLUETOOTH since they are implicitly granted at build-time.
@@ -838,6 +950,19 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
return;
}
/**
* Returns the individual camera authorization statuses for each of the relevant permissions.
* Note for Android: this is intended for Android 6 / API 23 and above. Calling on Android 5.1 / API 22 and below will always return GRANTED status as permissions are already granted at installation time.
*
* @param {boolean} [storage] Android only: If true, requests storage permissions in addition to CAMERA run-time permission.
* cordova-plugin-camera@2.2+ requires both of these permissions. Defaults to true.
* @returns {Promise<any>}
*/
@Cordova({ platforms: ['Android'], callbackOrder: 'reverse' })
getCameraAuthorizationStatuses(storage?: boolean): Promise<any> {
return;
}
/**
* Checks if the application is authorized to use external storage.
*
@@ -1031,7 +1156,7 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
return;
}
/**
/**
* Presents limited library picker UI on iOS 14+
*
* @returns {Promise<any>}
@@ -1237,4 +1362,53 @@ export class Diagnostic extends AwesomeCordovaNativePlugin {
*/
@Cordova({ platforms: ['iOS'], sync: true })
registerLocationAccuracyAuthorizationChangeHandler(handler: Function): void {}
/**
* Checks if mobile data is authorized for this app.
* Returns true if the per-app Mobile Data setting is set to enabled (regardless of whether the device is currently connected to a cellular network)
*
* @returns {Promise<boolean>}
*/
@Cordova({ platforms: ['iOS'] })
isMobileDataAuthorized(): Promise<boolean> {
return;
}
/**
* Checks if the app is authorised to access devices on the local network (iOS 14+).
* On iOS versions prior to 14 this will always return TRUE as no local network authorization is required.
*
* @param {DiagnosticLocalNetworkAuthorizationOptions} [options] Optional timeout control - provide `timeoutMs` to override the default 2000ms timeout.
* @returns {Promise<boolean>}
*/
@Cordova({ platforms: ['iOS'], callbackOrder: 'reverse' })
isLocalNetworkAuthorized(options?: DiagnosticLocalNetworkAuthorizationOptions): Promise<boolean> {
return;
}
/**
* Returns the app's Local Network authorization status (iOS 14+).
* On iOS 14+ this returns one of: NOT_REQUESTED, GRANTED, DENIED_ALWAYS, UNKNOWN (this.permissionStatus).
* `UNKNOWN` indicates that iOS did not return a definitive answer before the timeout elapsed, so the app can retry before warning the user.
* On iOS versions prior to 14 this will always return GRANTED as no authorization is required.
*
* @param {DiagnosticLocalNetworkAuthorizationOptions} [options] Optional timeout override (defaults to 2000ms).
* @returns {Promise<string>}
*/
@Cordova({ platforms: ['iOS'], callbackOrder: 'reverse' })
getLocalNetworkAuthorizationStatus(options?: DiagnosticLocalNetworkAuthorizationOptions): Promise<string> {
return;
}
/**
* Requests the user to authorise the app to access devices on the local network (iOS 14+).
* On iOS versions prior to 14 this does nothing and will return success as no authorization is required.
* May return UNKNOWN if iOS does not respond before the native APIs time out, allowing the app to retry.
*
* @returns {Promise<string>}
*/
@Cordova({ platforms: ['iOS'] })
requestLocalNetworkAuthorization(): Promise<string> {
return;
}
}
@@ -9,9 +9,6 @@ export type Event =
| 'notificationTapped'
| 'tokenReceived'
| 'registrationUpdated'
/**
* @deprecated No longer part of the supported events list in the upstream SDK (confirmed absent as of v8.6.0, and as far back as v5.0.0).
*/
| 'geofenceEntered'
| 'actionTapped'
| 'installationUpdated'
@@ -21,9 +18,6 @@ export type Event =
| 'inAppChat.availabilityUpdated'
| 'inAppChat.unreadMessageCounterUpdated'
| 'deeplink'
/**
* @deprecated No longer part of the supported events list in the upstream SDK (confirmed absent as of v8.6.0, and as far back as v5.0.0).
*/
| 'inAppChat.viewStateChanged';
export interface CustomEvent {
@@ -40,14 +34,6 @@ export interface Configuration {
geofencingEnabled?: boolean;
inAppChatEnabled?: boolean;
fullFeaturedInAppsEnabled?: boolean | undefined;
/**
* Set to true to enable debug logging.
*/
loggingEnabled?: boolean;
/**
* List of trusted domain strings for web views, e.g. ['example.com', 'trusted.org']
*/
trustedDomains?: string[];
/**
* Message storage save callback
*/
@@ -56,40 +42,12 @@ export interface Configuration {
ios?: {
notificationTypes?: string[]; // ['alert', 'badge', 'sound']
forceCleanup?: boolean;
/**
* @deprecated Removed upstream in v7.3.0. Replaced by the top-level `loggingEnabled` option.
*/
logging?: boolean;
/**
* Set to true to disable automatic registration for remote notifications. Default: false
*/
registeringForRemoteNotificationsDisabled?: boolean;
/**
* Set to true to prevent the SDK from overriding UNUserNotificationCenterDelegate. Default: false
*/
overridingNotificationCenterDelegateDisabled?: boolean;
/**
* Set to true to prevent the SDK from unregistering for remote notifications when stopping the SDK or after depersonalization. Default: false
*/
unregisteringForRemoteNotificationsDisabled?: boolean;
/**
* Settings for web view configuration in in-app messages
*/
webViewSettings?: {
title?: string;
barTintColor?: string;
titleColor?: string;
tintColor?: string;
};
};
android?: {
notificationIcon?: string; // a resource name for a status bar icon (without extension), located in '/platforms/android/app/src/main/res/mipmap'
notificationChannelId?: string; // identifier for notification channel
notificationChannelName?: string; // user visible name for notification channel
notificationSound?: string; // a resource name for a notification sound (without extension), located in '/platforms/android/app/src/main/res/raw'
multipleNotifications?: boolean; // set to 'true' to enable multiple notifications
notificationAccentColor?: string; // set to hex color value in format '#RRGGBB' or '#AARRGGBB'
withBannerForegroundNotificationsEnabled?: boolean; // set to true to always display Push notifications as Banner
firebaseOptions?: {
apiKey: string;
applicationId: string;
@@ -120,9 +78,9 @@ export interface Configuration {
icon?: string;
textInputActionButtonTitle?: string;
textInputPlaceholder?: string;
},
}
];
},
}
];
}
@@ -152,14 +110,7 @@ export interface Installation {
deviceModel?: string;
deviceSecure?: boolean;
language?: string;
/**
* @deprecated Renamed upstream in v7.9.1 to `deviceTimezoneOffset`.
*/
deviceTimezoneId?: string;
/**
* UTC-related timezone offset that identifies the current timezone of a device.
*/
deviceTimezoneOffset?: string;
applicationUserId?: string;
deviceName?: string;
customAttributes?: Record<string, string | number | boolean>;
@@ -178,14 +129,6 @@ export interface PersonalizeContext {
userIdentity: UserIdentity;
userAttributes?: Record<string, string | number | boolean | any[]>;
forceDepersonalize?: boolean;
/**
* Set to true if you want to keep the installation as a lead when personalizing it. Default: false
*/
keepAsLead?: boolean;
/**
* Set to true to mark this installation as primary for the personalized user. Default: false
*/
setDeviceAsPrimary?: boolean;
}
export interface GeoData {
@@ -333,17 +276,6 @@ export interface ChatSettingsIOS {
navigationBarTitleColor: string;
}
/**
* Exception raised by the in-app chat widget and passed to the handler registered via `setChatExceptionHandler`.
*/
export interface ChatException {
code: string;
name: string;
message: string;
origin: string;
platform: string;
}
/**
* @name Mobile Messaging
* @description
@@ -733,7 +665,7 @@ export class MobileMessaging extends AwesomeCordovaNativePlugin {
/**
* Updates JWT used for user data fetching and personalization.
*
*
* @name setUserDataJwt
* @param jwt - JWT in a predefined format
* @param {Function} errorCallback will be called on error
@@ -742,127 +674,4 @@ export class MobileMessaging extends AwesomeCordovaNativePlugin {
setUserDataJwt(jwt: string, errorCallback?: (error: MobileMessagingError) => void) {
return;
}
/**
* Un register all handlers for a MobileMessaging library event.
*
* @name unregisterAllHandlers
* @param event
*/
@Cordova({
sync: true,
})
unregisterAllHandlers(event: Event): void {
return;
}
/**
* Sets the JWT provider used to authenticate in-app chat sessions.
*
* The `jwtProvider` callback returns a JSON Web Token (JWT) used for chat authentication,
* either synchronously (returning a string) or asynchronously (returning a Promise<string>).
* It may be invoked multiple times during the widget's lifecycle, so it should always return
* a fresh and valid JWT.
*
* @param jwtProvider A callback function that returns a JWT string or a Promise that resolves to one.
* @param errorCallback Optional error handler for catching exceptions thrown during JWT generation.
*/
@Cordova({
sync: true,
})
setChatJwtProvider(jwtProvider: () => string | Promise<string>, errorCallback?: (error: any) => void): void {
return;
}
/**
* Sets the chat exception handler in case you want to intercept and display errors coming
* from the chat on your own (instead of relying on the prebuilt error banners).
* Passing `null` removes the previously set handler.
*
* @param exceptionHandler A function called with the chat exception when it is triggered, or `null` to remove the handler.
* @param errorCallback Optional error handler for catching exceptions thrown when handling exceptions from the native side.
*/
@Cordova({
sync: true,
})
setChatExceptionHandler(
exceptionHandler: ((exception: ChatException) => void) | null,
errorCallback?: (error: any) => void
): void {
return;
}
/**
* Checks if in-app chat is currently available.
*
* @name isChatAvailable
* @param resultCallback will be called upon completion with the boolean availability value.
*/
@Cordova({ sync: true })
isChatAvailable(resultCallback: (available: boolean) => void): void {
return;
}
/**
* Sets chat language.
*
* @name setLanguage
* @param language to be set
* @param {Function} errorCallback will be called on error
*/
@Cordova()
setLanguage(language: string, errorCallback?: (error: MobileMessagingError) => void) {
return;
}
/**
* Set contextual data of the widget.
*
* @param data contextual data in the form of a JSON string
* @param allMultiThreadStrategy multi-thread strategy flag, true -> ALL, false -> ACTIVE
* @param {Function} errorCallback will be called on error
*/
@Cordova()
sendContextualData(
data: string,
allMultiThreadStrategy: boolean,
errorCallback?: (error: MobileMessagingError) => void
) {
return;
}
/**
* Cleans up the SDK, removing all data and stopping all services.
* After cleanup, you should call `init()` again with a new configuration to restart the SDK.
* The JWT supplier is also cleared during cleanup.
*
* @name cleanup
*/
@Cordova()
cleanup(): Promise<any> {
return;
}
/**
* Sets chat customization.
*
* @name setChatCustomization
* @param customization Chat customization JSON object.
*/
@Cordova()
setChatCustomization(customization: any): Promise<any> {
return;
}
/**
* Sets widget theme.
*
* @name setWidgetTheme
* @param widgetTheme Widget theme name.
* @param {Function} errorCallback will be called on error
*/
@Cordova()
setWidgetTheme(widgetTheme: string, errorCallback?: (error: MobileMessagingError) => void) {
return;
}
}