import { SentlyError } from "../core/errors.js"; import type { PushOptions, PushSendResult, PushTransport } from "../core/push-types.js"; import type { VerifyResult } from "../core/types.js"; /** Firebase service-account credentials for FCM HTTP v1. */ export interface FcmConfig { /** Firebase / GCP project ID. */ projectId: string; /** * Service account `client_email`. * Store in environment variables — never hardcode. */ clientEmail: string; /** * Service account PEM private key (`-----BEGIN PRIVATE KEY-----`…). * Treat as a tier-1 secret — inject from env / secrets manager only. * Literal `\n` sequences in env strings are normalized to newlines. */ privateKey: string; /** * Optional injectable access-token provider (testing / custom auth). * When set, service-account JWT exchange is skipped. */ getAccessToken?: () => Promise; } /** Error thrown when the FCM HTTP v1 API rejects a request. */ export declare class FcmError extends SentlyError { readonly statusCode: number; readonly apiError: unknown; /** Creates an FCM API error with status code and response payload. */ constructor(message: string, statusCode: number, apiError: unknown); } /** * FCM HTTP v1 transport — device-token push for Android / iOS / web clients. */ export declare class FcmTransport implements PushTransport { readonly provider = "fcm"; private readonly projectId; private readonly clientEmail; private readonly privateKeyPem; private readonly getAccessTokenOverride; private cached; private cryptoKey; /** Creates an FCM transport from service-account credentials. */ constructor(config: FcmConfig); /** * Sends via `POST https://fcm.googleapis.com/v1/projects/{projectId}/messages:send`. * Requires {@link FcmPushOptions} (`token`). */ send(options: PushOptions): Promise; /** Lightweight credential check (does not call Google). */ verify(): Promise; private getAccessToken; private signServiceAccountJwt; private getCryptoKey; }