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.
244 lines • 6.25 kB
TypeScript
import { WeekDay, RepeatInterval } from './notification';
export interface ScheduleOptions {
at?: Date;
in?: TimeInterval;
every?: RepeatOptions;
count?: number;
until?: Date;
on?: DateComponents;
days?: WeekDay[];
timezone?: string;
allowWhileIdle?: boolean;
exact?: boolean;
wakeDevice?: boolean;
priority?: SchedulePriority;
category?: string;
identifier?: string;
triggerInBackground?: boolean;
skipIfBatteryLow?: boolean;
respectQuietHours?: boolean;
}
export interface TimeInterval {
seconds?: number;
minutes?: number;
hours?: number;
days?: number;
weeks?: number;
months?: number;
years?: number;
}
export interface RepeatOptions {
interval: RepeatInterval;
count?: number;
until?: Date;
frequency?: number;
byDay?: WeekDay[];
byMonth?: number[];
byMonthDay?: number[];
byYearDay?: number[];
byWeekNo?: number[];
byHour?: number[];
byMinute?: number[];
bySecond?: number[];
bySetPos?: number[];
wkst?: WeekDay;
}
export interface DateComponents {
year?: number;
month?: number;
day?: number;
hour?: number;
minute?: number;
second?: number;
weekday?: WeekDay;
weekOfYear?: number;
dayOfYear?: number;
quarter?: number;
era?: number;
timeZone?: string;
}
export type SchedulePriority = 'low' | 'normal' | 'high' | 'urgent';
export interface ScheduledNotification {
id: string;
scheduledAt: Date;
nextTrigger?: Date;
lastTrigger?: Date;
triggerCount: number;
status: ScheduleStatus;
options: ScheduleOptions;
notification: any;
error?: string;
metadata?: ScheduleMetadata;
}
export type ScheduleStatus = 'pending' | 'active' | 'paused' | 'completed' | 'cancelled' | 'failed';
export interface ScheduleMetadata {
createdAt: Date;
updatedAt: Date;
createdBy?: string;
tags?: string[];
source?: string;
version?: string;
platform?: string;
deviceId?: string;
userId?: string;
sessionId?: string;
}
export interface ScheduleBatch {
notifications: ScheduledNotification[];
options?: ScheduleBatchOptions;
}
export interface ScheduleBatchOptions {
atomic?: boolean;
continueOnError?: boolean;
maxConcurrency?: number;
timeout?: number;
priority?: SchedulePriority;
metadata?: Record<string, any>;
}
export interface ScheduleQuery {
status?: ScheduleStatus[];
from?: Date;
to?: Date;
tags?: string[];
limit?: number;
offset?: number;
sortBy?: 'createdAt' | 'scheduledAt' | 'nextTrigger';
sortOrder?: 'asc' | 'desc';
includeCompleted?: boolean;
includeMetadata?: boolean;
}
export interface ScheduleStatistics {
total: number;
pending: number;
active: number;
paused: number;
completed: number;
cancelled: number;
failed: number;
triggeredToday: number;
triggeredThisWeek: number;
triggeredThisMonth: number;
averageDelay: number;
successRate: number;
failureRate: number;
nextTriggers: NextTrigger[];
}
export interface NextTrigger {
id: string;
scheduledAt: Date;
title: string;
body: string;
timeUntil: number;
}
export interface ScheduleValidation {
valid: boolean;
errors: ValidationError[];
warnings: ValidationWarning[];
nextTriggers: Date[];
}
export interface ValidationError {
code: string;
message: string;
field?: string;
value?: any;
}
export interface ValidationWarning {
code: string;
message: string;
field?: string;
value?: any;
severity: 'low' | 'medium' | 'high';
}
export interface SchedulePerformance {
processingTime: number;
memoryUsage: number;
cpuUsage: number;
batteryImpact: number;
networkRequests: number;
storageUsage: number;
cacheHitRate: number;
errorRate: number;
}
export interface ScheduleOptimization {
recommendations: OptimizationRecommendation[];
potentialSavings: ResourceSavings;
impact: OptimizationImpact;
}
export interface OptimizationRecommendation {
type: 'batch' | 'timing' | 'frequency' | 'cleanup' | 'caching';
priority: 'low' | 'medium' | 'high';
description: string;
implementation: string;
estimatedBenefit: string;
}
export interface ResourceSavings {
battery: number;
memory: number;
cpu: number;
network: number;
storage: number;
}
export interface OptimizationImpact {
userExperience: 'improved' | 'neutral' | 'degraded';
performance: 'improved' | 'neutral' | 'degraded';
reliability: 'improved' | 'neutral' | 'degraded';
maintenance: 'simplified' | 'neutral' | 'complex';
}
export interface QuietHours {
enabled: boolean;
start: TimeOfDay;
end: TimeOfDay;
timezone?: string;
days?: WeekDay[];
exceptions?: QuietHoursException[];
behavior?: QuietHoursBehavior;
}
export interface TimeOfDay {
hour: number;
minute: number;
second?: number;
}
export interface QuietHoursException {
date: Date;
disabled: boolean;
reason?: string;
}
export interface QuietHoursBehavior {
action: 'suppress' | 'delay' | 'silent';
priority?: SchedulePriority;
allowUrgent?: boolean;
allowInteractive?: boolean;
maxDelay?: number;
}
export interface ScheduleExportOptions {
format: 'json' | 'csv' | 'xml' | 'ical';
includeMetadata?: boolean;
includeHistory?: boolean;
dateRange?: {
from: Date;
to: Date;
};
filter?: ScheduleQuery;
compression?: boolean;
encryption?: boolean;
}
export interface ScheduleImportOptions {
format: 'json' | 'csv' | 'xml' | 'ical';
overwrite?: boolean;
validateOnly?: boolean;
batchSize?: number;
skipInvalid?: boolean;
updateExisting?: boolean;
preserveIds?: boolean;
defaultOptions?: Partial<ScheduleOptions>;
}
export type NotificationSchedule = ScheduleOptions;
export type ScheduleAt = Date;
export type ScheduleOn = DateComponents;
export type ScheduleEvery = RepeatOptions;
export interface ScheduleResult {
notifications: ScheduledNotification[];
success: boolean;
errors?: ValidationError[];
}
//# sourceMappingURL=scheduling.d.ts.map