UNPKG

notification-kit

Version:

A unified notification library for React + Capacitor apps. One API for push notifications, in-app notifications, and local notifications across Web, iOS, and Android.

215 lines 6.22 kB
import { PushNotificationPayload } from './notification'; import { PermissionStatus } from './permissions'; export interface NotificationProvider { readonly name: string; readonly type: 'firebase' | 'onesignal'; init(config: ProviderConfig): Promise<void>; destroy(): Promise<void>; requestPermission(): Promise<boolean>; checkPermission(): Promise<PermissionStatus>; getToken(): Promise<string>; refreshToken(): Promise<string>; deleteToken(): Promise<void>; subscribe(topic: string): Promise<void>; unsubscribe(topic: string): Promise<void>; getSubscriptions(): Promise<string[]>; sendNotification(payload: PushNotificationPayload): Promise<void>; onMessage(callback: (payload: PushNotificationPayload) => void): () => void; onTokenRefresh(callback: (token: string) => void): () => void; onError(callback: (error: Error) => void): () => void; isSupported(): Promise<boolean>; getCapabilities(): Promise<ProviderCapabilities>; } export type ProviderConfig = FirebaseConfig | OneSignalConfig; export interface FirebaseConfig { apiKey: string; authDomain: string; projectId: string; storageBucket: string; messagingSenderId: string; appId: string; measurementId?: string; vapidKey?: string; serviceAccount?: FirebaseServiceAccount; databaseURL?: string; functionsURL?: string; messagingOptions?: FirebaseMessagingOptions; } export interface FirebaseServiceAccount { type: string; project_id: string; private_key_id: string; private_key: string; client_email: string; client_id: string; auth_uri: string; token_uri: string; auth_provider_x509_cert_url: string; client_x509_cert_url: string; } export interface FirebaseMessagingOptions { vapidKey?: string; serviceWorkerRegistration?: ServiceWorkerRegistration; usePublicVapidKey?: boolean; experimentalUseMessagingInSw?: boolean; } export interface OneSignalConfig { appId: string; apiKey?: string; restApiKey?: string; userAuthKey?: string; safariWebId?: string; autoPrompt?: boolean; autoResubscribe?: boolean; path?: string; serviceWorkerPath?: string; serviceWorkerUpdaterPath?: string; promptOptions?: OneSignalPromptOptions; welcomeNotification?: OneSignalWelcomeNotification; notificationClickHandlerMatch?: 'origin' | 'exact'; notificationClickHandlerAction?: 'focus' | 'navigate' | 'focusOrNavigate'; allowLocalhostAsSecureOrigin?: boolean; } export interface OneSignalPromptOptions { slidedown?: OneSignalSlidedownOptions; fullscreen?: OneSignalFullscreenOptions; autoPrompt?: boolean; customPrompt?: boolean; delay?: number; force?: boolean; } export interface OneSignalSlidedownOptions { enabled?: boolean; actionMessage?: string; acceptButtonText?: string; cancelButtonText?: string; categoryOptions?: OneSignalCategoryOptions[]; } export interface OneSignalFullscreenOptions { enabled?: boolean; title?: string; message?: string; acceptButtonText?: string; cancelButtonText?: string; actionMessage?: string; } export interface OneSignalCategoryOptions { tag: string; label: string; checked?: boolean; } export interface OneSignalWelcomeNotification { disable?: boolean; title?: string; message?: string; url?: string; } export interface ProviderCapabilities { pushNotifications: boolean; topics: boolean; richMedia: boolean; actions: boolean; backgroundSync: boolean; analytics: boolean; segmentation: boolean; scheduling: boolean; geofencing: boolean; inAppMessages: boolean; webPush: boolean; badges: boolean; sounds: boolean; vibration: boolean; lights: boolean; bigText: boolean; bigPicture: boolean; inbox: boolean; progress: boolean; channels: boolean; groups: boolean; categories: boolean; quietHours: boolean; deliveryReceipts: boolean; clickTracking: boolean; impressionTracking: boolean; customData: boolean; multipleDevices: boolean; userTags: boolean; triggers: boolean; templates: boolean; abTesting: boolean; automation: boolean; journeys: boolean; realTimeUpdates: boolean; } export interface ProviderStatistics { totalNotifications: number; deliveredNotifications: number; openedNotifications: number; clickedNotifications: number; subscribedUsers: number; unsubscribedUsers: number; activeUsers: number; deliveryRate: number; openRate: number; clickRate: number; unsubscribeRate: number; } export interface ProviderHealth { status: 'healthy' | 'degraded' | 'unhealthy'; lastCheck: Date; responseTime: number; errorRate: number; uptime: number; issues: ProviderIssue[]; } export interface ProviderIssue { id: string; severity: 'low' | 'medium' | 'high' | 'critical'; message: string; timestamp: Date; resolved: boolean; resolvedAt?: Date; } export interface ProviderMetadata { version: string; platform: string; capabilities: ProviderCapabilities; limits: ProviderLimits; endpoints: ProviderEndpoints; } export interface ProviderLimits { maxNotificationsPerDay?: number; maxTopicsPerUser?: number; maxPayloadSize?: number; maxRetryAttempts?: number; rateLimitPerMinute?: number; maxConcurrentConnections?: number; } export interface ProviderEndpoints { api: string; websocket?: string; webhook?: string; analytics?: string; health?: string; } export interface ProviderAuthentication { type: 'api_key' | 'oauth' | 'jwt' | 'service_account'; credentials: Record<string, any>; expiresAt?: Date; refreshToken?: string; scopes?: string[]; } export interface ProviderWebhook { url: string; events: string[]; secret?: string; headers?: Record<string, string>; retry?: WebhookRetryConfig; } export interface WebhookRetryConfig { maxAttempts: number; backoff: 'linear' | 'exponential'; baseDelay: number; maxDelay: number; } //# sourceMappingURL=providers.d.ts.map