UNPKG

expo-geofencing

Version:

Production-ready geofencing and activity recognition for Expo React Native with offline support, security features, and enterprise-grade reliability

116 lines (115 loc) 3.79 kB
import { GeofenceEvent, ActivityRecognitionResult, HealthAlert } from './index'; export interface WebhookConfig { id: string; name: string; url: string; method: 'POST' | 'PUT' | 'PATCH'; headers: Record<string, string>; events: WebhookEventType[]; isActive: boolean; retryConfig: { maxRetries: number; backoffStrategy: 'linear' | 'exponential'; baseDelay: number; maxDelay: number; }; filterConfig?: { regions?: string[]; activities?: string[]; severities?: string[]; conditions?: Record<string, any>; }; authConfig?: { type: 'none' | 'bearer' | 'api_key' | 'basic' | 'custom'; credentials: Record<string, string>; }; timeout: number; rateLimit?: { maxRequests: number; windowMs: number; }; metadata?: Record<string, any>; } export type WebhookEventType = 'geofence.enter' | 'geofence.exit' | 'activity.change' | 'health.alert' | 'system.status' | 'location.update'; export interface WebhookPayload { event: WebhookEventType; timestamp: number; webhookId: string; data: any; metadata?: Record<string, any>; signature?: string; } export interface WebhookDeliveryAttempt { id: string; webhookId: string; payload: WebhookPayload; attempt: number; timestamp: number; status: 'pending' | 'success' | 'failed' | 'retrying'; responseStatus?: number; responseBody?: string; error?: string; nextRetryAt?: number; } export interface WebhookStats { webhookId: string; totalAttempts: number; successfulDeliveries: number; failedDeliveries: number; averageResponseTime: number; lastDeliveryAt?: number; lastSuccessAt?: number; lastFailureAt?: number; errorRate: number; } export declare class WebhookManager { private webhooks; private deliveryQueue; private stats; private rateLimitTracking; private isProcessing; private processingInterval?; private secretKey; constructor(secretKey?: string); addWebhook(config: Omit<WebhookConfig, 'id'>): string; removeWebhook(webhookId: string): boolean; updateWebhook(webhookId: string, updates: Partial<WebhookConfig>): boolean; getWebhook(webhookId: string): WebhookConfig | undefined; getAllWebhooks(): WebhookConfig[]; getActiveWebhooks(): WebhookConfig[]; triggerGeofenceEvent(event: GeofenceEvent): Promise<void>; triggerActivityEvent(event: ActivityRecognitionResult): Promise<void>; triggerHealthAlert(alert: HealthAlert): Promise<void>; triggerLocationUpdate(location: any): Promise<void>; triggerSystemStatus(status: any): Promise<void>; private triggerWebhooks; private getWebhooksForEvent; private applyFilters; private queueDelivery; private processDeliveryQueue; private attemptDelivery; private makeHttpRequest; private addAuthHeaders; private checkRateLimit; private initializeStats; private updateStats; getWebhookStats(webhookId: string): WebhookStats | undefined; getAllWebhookStats(): WebhookStats[]; private calculateNextRetryTime; private generateSignature; verifySignature(payload: string, signature: string): boolean; private hmacSha256; private startProcessing; stopProcessing(): void; retryFailedDeliveries(webhookId?: string): Promise<number>; getPendingDeliveries(webhookId?: string): WebhookDeliveryAttempt[]; getDeliveryHistory(webhookId: string, limit?: number): WebhookDeliveryAttempt[]; testWebhook(webhookId: string): Promise<{ success: boolean; responseTime: number; error?: string; }>; private generateId; private generateSecretKey; cleanup(): void; }