expo-geofencing
Version: 
Production-ready geofencing and activity recognition for Expo React Native with offline support, security features, and enterprise-grade reliability
122 lines (121 loc) • 3.42 kB
TypeScript
export interface PrivacyZone {
    id: string;
    name: string;
    type: 'hospital' | 'government' | 'school' | 'religious' | 'residential' | 'custom';
    center: {
        latitude: number;
        longitude: number;
    };
    radius: number;
    bufferZone?: number;
    isActive: boolean;
    metadata?: Record<string, any>;
}
export interface SecurityConfig {
    encryptionEnabled: boolean;
    encryptionKey?: string;
    dataAnonymization: boolean;
    privacyZonesEnabled: boolean;
    minAccuracy: number;
    locationPrecisionReduction: number;
    auditLogging: boolean;
    sensitiveDataMasking: boolean;
    certificatePinning?: {
        domains: string[];
        certificates: string[];
    };
}
export interface AuditLogEntry {
    id: string;
    timestamp: number;
    action: string;
    userId?: string;
    locationData?: {
        latitude: number;
        longitude: number;
        accuracy: number;
    };
    metadata?: Record<string, any>;
    hash: string;
}
export interface LocationProcessingResult {
    allowed: boolean;
    processedLocation?: {
        latitude: number;
        longitude: number;
        accuracy: number;
    };
    violations: string[];
    appliedPolicies: string[];
}
export declare class SecurityManager {
    private config;
    private privacyZones;
    private auditLog;
    private encryptionKey;
    constructor(config?: Partial<SecurityConfig>);
    addPrivacyZone(zone: Omit<PrivacyZone, 'id'>): string;
    removePrivacyZone(zoneId: string): boolean;
    updatePrivacyZone(zoneId: string, updates: Partial<PrivacyZone>): boolean;
    getPrivacyZones(): PrivacyZone[];
    getActivePrivacyZones(): PrivacyZone[];
    processLocation(location: {
        latitude: number;
        longitude: number;
        accuracy: number;
        timestamp?: number;
        userId?: string;
    }): LocationProcessingResult;
    private checkPrivacyZoneViolations;
    private applyLocationProcessingPolicies;
    private shouldProcessDespiteViolations;
    private getAppliedPolicies;
    encryptData(data: any): string;
    decryptData<T>(encryptedData: string): T;
    anonymizeLocation(location: {
        latitude: number;
        longitude: number;
        accuracy: number;
    }): {
        latitude: number;
        longitude: number;
        accuracy: number;
    };
    reducePrecision(location: {
        latitude: number;
        longitude: number;
        accuracy: number;
    }, decimalPlaces: number): {
        latitude: number;
        longitude: number;
        accuracy: number;
    };
    private calculatePrecisionAccuracy;
    maskSensitiveData(data: any): any;
    private maskValue;
    private logAuditEvent;
    getAuditLog(filter?: {
        action?: string;
        userId?: string;
        startTime?: number;
        endTime?: number;
    }): AuditLogEntry[];
    verifyAuditLogIntegrity(): {
        valid: boolean;
        corruptedEntries: string[];
    };
    private generateAuditHash;
    validateCertificate(domain: string, certificate: string): boolean;
    private calculateDistance;
    private toRadians;
    private generateId;
    private generateEncryptionKey;
    private initializeDefaultPrivacyZones;
    updateConfig(updates: Partial<SecurityConfig>): void;
    getConfig(): SecurityConfig;
    performSecurityHealthCheck(): {
        score: number;
        recommendations: string[];
        issues: string[];
    };
}