import { JsonApiDataInterface, JsonApiService } from "../../../core/jsonapi"; import { StripeCustomerRepository } from "../../stripe-customer/repositories/stripe-customer.repository"; import { StripeSubscriptionRepository } from "../../stripe-subscription/repositories/stripe-subscription.repository"; import { StripeInvoiceStatus } from "../entities/stripe-invoice.entity"; import { StripeInvoiceRepository } from "../repositories/stripe-invoice.repository"; import { StripeInvoiceApiService } from "./stripe-invoice-api.service"; /** * StripeInvoiceAdminService * * Manages invoice retrieval and synchronization for billing customers. * Provides access to invoice history, upcoming invoices, and maintains sync with Stripe. * * Key Features: * - List customer invoices with filtering by status * - Retrieve individual invoices * - Preview upcoming invoices for subscriptions * - Sync invoice data from Stripe webhooks * - Support for Stripe v20 API invoice structure * * Invoices are automatically created and synced via webhooks when Stripe generates them * for subscriptions or one-time charges. */ export declare class StripeInvoiceAdminService { private readonly stripeInvoiceRepository; private readonly stripeCustomerRepository; private readonly subscriptionRepository; private readonly stripeInvoiceApiService; private readonly jsonApiService; constructor(stripeInvoiceRepository: StripeInvoiceRepository, stripeCustomerRepository: StripeCustomerRepository, subscriptionRepository: StripeSubscriptionRepository, stripeInvoiceApiService: StripeInvoiceApiService, jsonApiService: JsonApiService); /** * List invoices for a company * * @param params - Parameters * @param params.companyId - Company identifier * @param params.query - JSON:API query parameters for pagination * @param params.status - Optional filter by invoice status * @returns JSON:API formatted list of invoices * @throws {HttpException} NOT_FOUND if billing customer not found * * @example * ```typescript * const invoices = await stripeInvoiceAdminService.listInvoices({ * companyId: 'company_123', * query: { page: { number: 1, size: 10 } }, * status: 'paid' * }); * ``` */ listInvoices(params: { companyId: string; query: any; status?: StripeInvoiceStatus; }): Promise; /** * Get a single invoice by ID * * @param params - Parameters * @param params.id - Invoice ID * @param params.companyId - Company identifier * @returns JSON:API formatted invoice data * @throws {HttpException} NOT_FOUND if invoice not found * @throws {HttpException} FORBIDDEN if invoice doesn't belong to company */ getInvoice(params: { id: string; companyId: string; }): Promise; /** * Preview the upcoming invoice for a customer * * Retrieves the next invoice that will be charged for a customer or specific subscription. * This is useful for showing customers what they will be charged before the invoice is finalized. * * @param params - Parameters * @param params.companyId - Company identifier * @param params.subscriptionId - Optional subscription ID to preview * @returns Upcoming invoice preview with amounts and line items * @throws {HttpException} NOT_FOUND if billing customer or subscription not found * * @example * ```typescript * const upcoming = await stripeInvoiceAdminService.getUpcomingInvoice({ * companyId: 'company_123', * subscriptionId: 'sub_456' * }); * console.info(`Next charge: ${upcoming.amountDue}`); * ``` */ getUpcomingInvoice(params: { companyId: string; subscriptionId?: string; }): Promise; /** * Sync invoice data from Stripe to local database * * Fetches the latest invoice data from Stripe and updates or creates the local database record. * Handles Stripe v20 API structure including parent subscription details and tax calculations. * Used primarily by webhook handlers to keep invoice data in sync. * * @param params - Parameters * @param params.stripeInvoiceId - Stripe invoice ID to sync * @returns Promise that resolves when sync is complete * * @example * ```typescript * // Called from webhook handler * await stripeInvoiceAdminService.syncInvoiceFromStripe({ * stripeInvoiceId: 'in_1234567890' * }); * ``` */ syncInvoiceFromStripe(params: { stripeInvoiceId: string; }): Promise; } //# sourceMappingURL=stripe-invoice-admin.service.d.ts.map