declare module "@sentiance-react-native/smart-geofences" { import { EmitterSubscription } from "react-native"; import { SdkStatus } from "@sentiance-react-native/core"; export type SmartGeofenceEventType = "ENTRY" | "EXIT"; export interface SmartGeofencesRefreshFailureReason { /** * The feature is not enabled for your app. */ FEATURE_NOT_ENABLED: "FEATURE_NOT_ENABLED"; /** * Failed to refresh the monitored geofences due to network usage being restricted. * In most cases, this means the device is connected to a mobile data network, but you have disabled * mobile data network usage using the {@link SentianceCore.setIsAllowedToUseMobileData core module's mobile usage API}. */ NETWORK_USAGE_RESTRICTED: "NETWORK_USAGE_RESTRICTED"; /** * A network error was encountered when attempting to refresh the monitored geofences. */ NETWORK_ERROR: "NETWORK_ERROR"; /** * A server error was encountered when attempting to refresh the monitored geofences. */ SERVER_ERROR: "SERVER_ERROR"; /** * The application tried to refresh the list of monitored geofences more than once within * the last 30 seconds. */ TOO_MANY_FREQUENT_CALLS: "TOO_MANY_FREQUENT_CALLS"; /** * An unexpected error occurred. Check the corresponding {@link SmartGeofencesRefreshError#details} for more info. */ UNEXPECTED_ERROR: "UNEXPECTED_ERROR"; /** * No Sentiance user is present on device. Call {@link SentianceCore.createUser} to create a user. */ NO_USER: "NO_USER"; /** * The user is disabled remotely. */ USER_DISABLED_REMOTELY: "USER_DISABLED_REMOTELY"; } export enum DetectionMode { /** * The Smart Geofences feature is not enabled for your app. */ FEATURE_NOT_ENABLED = "FEATURE_NOT_ENABLED", /** * Geofence entry/exit detections are disabled. Check the {@link SdkStatus } to find out why. */ DISABLED = "DISABLED", /** * Geofence entry/exit detections are limited to when the app is visible in the foreground, * due to restricted location permission. */ FOREGROUND = "FOREGROUND", /** * Geofence entry/exit detections are running unrestricted in the background. */ BACKGROUND = "BACKGROUND" } export interface Location { timestamp: number; latitude: number; longitude: number; accuracy?: number; altitude?: number; provider?: string; // Android only } export interface SmartGeofence { sentianceId: string; latitude: number; longitude: number; radius: number; externalId: string; } export interface SmartGeofenceEvent { timestamp: number; triggeringLocation: Location; eventType: SmartGeofenceEventType; geofences: SmartGeofence[]; } export interface SmartGeofencesRefreshError { reason: SmartGeofencesRefreshFailureReason; details?: string; } export interface SentianceSmartGeofences { /** * Refreshes the list of geofences. * * @returns A Promise that resolves if the refresh was successful. * The Promise does not return any value upon resolution. * * @throws {SmartGeofencesRefreshError} If the refresh fails, the Promise * is rejected with an object of type `SmartGeofencesRefreshError`. * This object contains a `reason` property detailing the nature of the error. * * @example * try { * await refreshGeofences(); * console.log("Geofences refreshed successfully."); * } catch (error) { * const refreshError = error.userInfo as SmartGeofencesRefreshError; * console.error("Error refreshing geofences:", refreshError.reason); * } */ refreshGeofences(): Promise; /** * Registers a listener for smart geofence events. * * This function sets up an event listener that will execute the provided callback * function whenever a smart geofence event occurs (could be an entry, or an exit event). * * @param {Function} onSmartGeofenceEvent - A callback function that is called whenever * a smart geofence event is triggered. The function receives a single argument: * a `SmartGeofenceEvent` object containing details about the event. * * @returns {Promise} A Promise that resolves to an EmitterSubscription. * This subscription object can be used to unsubscribe from the event notifications * in the future, by calling `remove()` on the returned subscription object. * * @example * const subscription = await addSmartGeofenceEventListener(event => { * console.log('Geofence event received:', event); * }); * console.log('Listener registered, subscription:', subscription); */ addSmartGeofenceEventListener(onSmartGeofenceEvent: (smartGeofenceEvent: SmartGeofenceEvent) => void): Promise; /** * Retrieves the geofence entry/exit detection mode. * * @example * const detectionMode = await getDetectionMode(); * console.log('Detection mode is currently:', detectionMode); */ getDetectionMode(): Promise; } const SentianceSmartGeofences: SentianceSmartGeofences; export default SentianceSmartGeofences; }