// Types for liseuse-pdf.mjs 1.1 (Node.js SDK) · https://liseuse-pdf.com/docs/sdk-serveur
export type Acces = "abonnes" | "libre";
export interface Lien { url: string; expire_le: string; iframe: string }
export interface Numero {
  id: string; titre: string; publication: { code: string; nom: string }; date: string | null; pages: number | null;
  acces: Acces; page_publique: string; lecture_libre: string | null; couverture: string | null; en_ligne?: boolean;
  statut?: "en_ligne" | "programme" | "retire"; publier_le?: string | null;
}
export interface Statistiques {
  id: string; depuis: string; lectures: number; lectures_depuis_publication: number;
  par_jour: { jour: string; lectures: number }[]; temps_moyen_secondes: number | null; lu_jusqu_a_la_fin: number | null;
  sources: { source: string; lectures: number }[];
}
export interface Compte {
  id?: string; nom?: string; type?: "agence"; formule?: "essentiel" | "pro" | "editeur"; facturation?: "month" | "year" | null;
  statut?: "trialing" | "active" | "past_due" | "canceled" | "expired"; fin_essai?: string | null; prochaine_echeance?: string | null;
  resiliation_programmee?: boolean;
  limites?: { publications: number; numeros: number; taille_pdf_mo: number; utilisateurs: number };
  utilisation?: { publications: number; numeros: number; utilisateurs: number };
}
export interface ChampsNumero {
  titre?: string; publication?: string; nouvelle_publication?: string; parution?: string; acces?: Acces; lien_achat?: string | null;
  telechargement?: boolean; impression?: boolean; domaine?: "liseuse-pdf.com" | "liseuse-pdf.fr"; adresse?: string; remplace?: string;
  /** ISO 8601, scheduled publication */ publier_le?: string;
}
export interface EvenementWebhook<T = unknown> { id: string; type: "numero.publie" | "numero.remplace" | "numero.retire" | "numero.remis_en_ligne" | "test"; cree_le: string; donnees: T }

export class LiseuseError extends Error { status: number; code: string }
export class LiseusePDF {
  constructor(options: { cleApi: string; base?: string; delai?: number });
  creerLien(options: { id: string; jours?: number; page?: number; reference?: string; idempotence?: string }): Promise<Lien>;
  revoquerLiens(reference: string): Promise<{ reference: string; revoque_le: string }>;
  publications(options?: { publication?: string; limite?: number }): Promise<Numero[]>;
  numero(id: string): Promise<Numero>;
  publier(options: ChampsNumero & { fichier: string | Uint8Array; titre: string; couverture?: string | Uint8Array; idempotence?: string }): Promise<{ numero: Numero; couverture: "prete" | "en_preparation" }>;
  modifierNumero(id: string, champs: ChampsNumero & { en_ligne?: boolean }): Promise<Numero>;
  statistiques(options: { id: string; depuis?: string }): Promise<Statistiques>;
  compte(): Promise<Compte>;
  static verifierWebhook<T = unknown>(corpsBrut: string | Uint8Array, entete: string, secret: string, tolerance?: number): EvenementWebhook<T>;
}
export default LiseusePDF;
