expo-geofencing
Version:
Production-ready geofencing and activity recognition for Expo React Native with offline support, security features, and enterprise-grade reliability
119 lines (118 loc) • 3.35 kB
TypeScript
export interface GeofenceEvent {
id: string;
regionId: string;
eventType: 'enter' | 'exit';
timestamp: number;
latitude: number;
longitude: number;
accuracy?: number;
userId?: string;
metadata?: Record<string, any>;
}
export interface ActivityEvent {
id: string;
activity: string;
confidence: number;
timestamp: number;
latitude?: number;
longitude?: number;
userId?: string;
}
export interface SystemHealthEvent {
id: string;
type: 'health_alert' | 'status_change' | 'error';
title: string;
message: string;
timestamp: number;
severity: 'low' | 'medium' | 'high' | 'critical';
metadata?: Record<string, any>;
}
export interface AnalyticsData {
events: GeofenceEvent[];
activities: ActivityEvent[];
healthEvents: SystemHealthEvent[];
summary: {
totalEvents: number;
totalActivities: number;
totalHealthEvents: number;
dateRange: {
start: number;
end: number;
};
mostActiveRegions: {
regionId: string;
count: number;
}[];
mostCommonActivities: {
activity: string;
count: number;
}[];
};
}
export interface DataManagerConfig {
encryptData: boolean;
encryptionKey?: string;
maxEvents: number;
maxActivities: number;
maxHealthEvents: number;
retentionDays: number;
exportFormats: ('json' | 'csv')[];
anonymizeData: boolean;
autoCleanup: boolean;
}
export declare class DataManager {
private config;
private encryptionKey;
private static readonly STORAGE_KEYS;
constructor(config?: Partial<DataManagerConfig>);
storeGeofenceEvent(event: Omit<GeofenceEvent, 'id'>): Promise<string>;
storeActivityEvent(event: Omit<ActivityEvent, 'id'>): Promise<string>;
storeHealthEvent(event: Omit<SystemHealthEvent, 'id'>): Promise<string>;
getGeofenceEvents(filter?: {
regionId?: string;
eventType?: 'enter' | 'exit';
startTime?: number;
endTime?: number;
userId?: string;
}): Promise<GeofenceEvent[]>;
getActivityEvents(filter?: {
activity?: string;
startTime?: number;
endTime?: number;
userId?: string;
}): Promise<ActivityEvent[]>;
getHealthEvents(filter?: {
type?: string;
severity?: string;
startTime?: number;
endTime?: number;
}): Promise<SystemHealthEvent[]>;
generateAnalytics(timeRange?: {
start: number;
end: number;
}): Promise<AnalyticsData>;
exportData(format: 'json' | 'csv', timeRange?: {
start: number;
end: number;
}): Promise<string>;
clearAllData(): Promise<void>;
clearExpiredData(): Promise<void>;
queueForSync(type: string, data: any): Promise<void>;
getSyncQueue(): Promise<any[]>;
clearSyncQueue(): Promise<void>;
setUserConsent(consent: {
location: boolean;
analytics: boolean;
storage: boolean;
timestamp: number;
version: string;
}): Promise<void>;
getUserConsent(): Promise<any>;
private saveData;
private loadData;
private generateId;
private generateEncryptionKey;
private anonymizeCoordinate;
private convertToCSV;
private setupAutoCleanup;
}