export interface APNsConfig {
    /** APNs Key ID from Apple Developer Portal */
    keyId: string;
    /** Team ID from Apple Developer Portal */
    teamId: string;
    /** Private key content (p8 file content) */
    privateKey: string;
    /** iOS app bundle ID (e.g., com.example.app) */
    bundleId: string;
    /** Use production APNs server (default: false) */
    production?: boolean;
}
export interface APNsNotification {
    /** Device token to send to */
    deviceToken: string;
    /** Alert title */
    title?: string;
    /** Alert subtitle */
    subtitle?: string;
    /** Alert body */
    body?: string;
    /** Badge number to display on app icon */
    badge?: number;
    /** Sound to play (use 'default' for default sound) */
    sound?: string | {
        name: string;
        critical?: number;
        volume?: number;
    };
    /** Category identifier for actionable notifications */
    category?: string;
    /** Thread identifier for grouping notifications */
    threadId?: string;
    /** Custom data payload */
    data?: Record<string, any>;
    /** Content available flag for background updates */
    contentAvailable?: boolean;
    /** Mutable content flag for notification service extension */
    mutableContent?: boolean;
    /** Push type (default: 'alert') */
    pushType?: 'alert' | 'background' | 'voip' | 'complication' | 'fileprovider' | 'mdm' | 'liveactivity';
    /** Notification priority (10 = immediate, 5 = can be delayed) */
    priority?: 5 | 10;
    /** Expiration timestamp (Unix time in seconds) */
    expiration?: number;
    /** Collapse identifier for coalescing notifications */
    collapseId?: string;
    /** Target content id for live activities */
    targetContentId?: string;
}
export interface APNsSendResult {
    success: boolean;
    deviceToken: string;
    apnsId?: string;
    statusCode?: number;
    error?: string;
    reason?: string;
    timestamp?: number;
}
export interface APNsBatchResult {
    sent: number;
    failed: number;
    results: APNsSendResult[];
}
/**
 * Apple Push Notification Service client
 */
export declare class APNsClient {
    private config;
    private token;
    private tokenGeneratedAt;
    private client;
    private host;
    constructor(config: APNsConfig);
    /**
     * Generate a new JWT token for APNs authentication
     */
    private generateToken;
    /**
     * Convert DER encoded ECDSA signature to raw format
     */
    private derToRaw;
    /**
     * Get or create HTTP/2 client connection
     */
    private getClient;
    /**
     * Build APNs payload from notification options
     */
    private buildPayload;
    /**
     * Send a push notification to a single device
     */
    send(notification: APNsNotification): Promise<APNsSendResult>;
    /**
     * Send push notifications to multiple devices
     */
    sendBatch(notifications: APNsNotification[], options?: {
        concurrency?: number;
    }): Promise<APNsBatchResult>;
    /**
     * Send a simple notification (convenience method)
     */
    sendSimple(deviceToken: string, title: string, body: string, data?: Record<string, any>): Promise<APNsSendResult>;
    /**
     * Send a silent/background notification
     */
    sendSilent(deviceToken: string, data?: Record<string, any>): Promise<APNsSendResult>;
    /**
     * Close the HTTP/2 connection
     */
    close(): void;
}
export default APNsClient;
