import { SessionManager } from '@chargify/session-manager'; import { HttpMethod, CustomerDetails, Allocation, InvoicesParams } from './types'; import { CustomFieldUpdate } from './types/customField'; import { SubscriptionResumptionCharge } from './types/subscription'; export interface DataAccessOptions { baseUrl?: string; sessionManager: SessionManager; } declare class DataAccess { baseUrl: string; sessionManager: SessionManager; constructor({ baseUrl, sessionManager }: DataAccessOptions); performRequest(url: string, body?: Record, method?: HttpMethod): Promise; getProductsCatalog(): Promise<{ items: { id: number; name: string; }[]; }>; getBillingPortalSettings(): Promise<{ componentsAllocation: { visible: boolean; editAllowed: boolean; }; paymentProfile: { visible: boolean; editAllowed: boolean; }; customerProfile: { editAllowed: boolean; }; subscription: { churnReasonCodes: boolean; coupons: boolean; referrals: boolean; scopes: ("subscription:pause" | "subscription:resume" | "subscription:cancel-immediate" | "subscription:cancel-delayed" | "subscription:cancel-scheduled" | "subscription:reactivate" | "subscription:plan-change")[]; }; }>; getProducts(productFamilyId: number): Promise<{ items: { id: number; name: string; priceInCents: number; interval: number; intervalUnit: "day" | "month"; trialPriceInCents: number; trialInterval: string; trialIntervalUnit: string; }[]; }>; previewProductMigration(subscriptionId: number, productId: number): Promise<{ items: { id: number; name: string; priceInCents: number; interval: number; intervalUnit: "day" | "month"; trialPriceInCents: number; trialInterval: string; trialIntervalUnit: string; }[]; }>; migrateProduct(subscriptionId: number, productId: number): Promise<{ id: number; productFamilyId: number; state: string; balanceInCents: number; referralCode: string; currentPeriodEndsAt: string; nextAssessmentAt: string; nextProductId?: number; currentBillingAmountInCents: number; automaticallyResumeAt: string; expiresAt: string; canceledAt: string; scheduledCancellationAt: string; currency: string; threeDsActionLink: string; billing: { paymentProfileConnected: boolean; bankAccount: { bankName: string; maskedAccountNumber: string; maskedRoutingNumber: string; firstName: string; lastName: string; }; creditCard: { firstName: string; lastName: string; cardType: string; maskedNumber: string; expirationMonth: number; expirationYear: number; expired: boolean; }; address: { address: string; address2: string; city: string; country: string; state: string; zip: string; }; }; product: { id: number; name: string; priceInCents: number; interval: number; intervalUnit: "day" | "month"; trialPriceInCents: number; trialInterval: string; trialIntervalUnit: string; }; components: { updatesAllowed: boolean; usedInBilling: boolean; }; customFields: { updatesAllowed: boolean; visible: boolean; }; }>; getComponents(subscriptionId: number): Promise<{ items: { id: number; name: string; type: "quantity" | "metered" | "on_off" | "prepaid"; allocatedQuantity?: number; enabled?: boolean; recurring?: boolean; description: string; updatesAllowed: boolean; allowFractionalQuantities: boolean; pricePoint: { id: number; type: "per_unit" | "stairstep" | "volume" | "tiered"; prices: { id: number; startingQuantity: number; endingQuantity: number; priceInCents: number; currency: string; }[]; renewPrepaidAllocation?: boolean; rolloverPrepaidRemainder?: boolean; expirationInterval?: number; expirationIntervalUnit?: "day" | "month"; }; unit: { name: string; balance?: number; overageBalance?: number; }; }[]; }>; getGatewayConfig(): Promise<{ vaultCurrencies: {}; requiredFields: { creditCard: string[]; }; serverHost: string; publicKey: string; secureToken: string; defaultVaults: {}; threeDSecure: { enabled: boolean; }; }>; createPaymentProfile(token: string): Promise<{ bankAccount: { bankName: string; maskedAccountNumber: string; maskedRoutingNumber: string; firstName: string; lastName: string; }; creditCard: { firstName: string; lastName: string; cardType: string; maskedNumber: string; expirationMonth: number; expirationYear: number; expired: boolean; }; address: { address: string; address2: string; city: string; country: string; state: string; zip: string; }; }>; updateSubscriptionPaymentProfile(paymentProfileId: number, subscriptionId: number): Promise<{}>; replacePaymentProfiles(paymentProfileIdsForReplacement: number[], newPaymentProfileId: number): Promise<{}>; resumeSubscription(subscriptionId: number): Promise<{}>; getSubscriptionResumptionConfig(): Promise<{ resumptionCharge: SubscriptionResumptionCharge; }>; updateSubscriptionResumptionDate(subscriptionId: number, autoResumeDate: string): Promise<{ resumptionCharge: SubscriptionResumptionCharge; }>; getSubscriptions(): Promise<{ items: { id: number; productFamilyId: number; state: string; balanceInCents: number; referralCode: string; currentPeriodEndsAt: string; nextAssessmentAt: string; nextProductId?: number; currentBillingAmountInCents: number; automaticallyResumeAt: string; expiresAt: string; canceledAt: string; scheduledCancellationAt: string; currency: string; threeDsActionLink: string; billing: { paymentProfileConnected: boolean; bankAccount: { bankName: string; maskedAccountNumber: string; maskedRoutingNumber: string; firstName: string; lastName: string; }; creditCard: { firstName: string; lastName: string; cardType: string; maskedNumber: string; expirationMonth: number; expirationYear: number; expired: boolean; }; address: { address: string; address2: string; city: string; country: string; state: string; zip: string; }; }; product: { id: number; name: string; priceInCents: number; interval: number; intervalUnit: "day" | "month"; trialPriceInCents: number; trialInterval: string; trialIntervalUnit: string; }; components: { updatesAllowed: boolean; usedInBilling: boolean; }; customFields: { updatesAllowed: boolean; visible: boolean; }; }[]; }>; getSubscriptionDetails(subscriptionId: number): Promise<{ id: number; productFamilyId: number; state: string; balanceInCents: number; referralCode: string; currentPeriodEndsAt: string; nextAssessmentAt: string; nextProductId?: number; currentBillingAmountInCents: number; automaticallyResumeAt: string; expiresAt: string; canceledAt: string; scheduledCancellationAt: string; currency: string; threeDsActionLink: string; billing: { paymentProfileConnected: boolean; bankAccount: { bankName: string; maskedAccountNumber: string; maskedRoutingNumber: string; firstName: string; lastName: string; }; creditCard: { firstName: string; lastName: string; cardType: string; maskedNumber: string; expirationMonth: number; expirationYear: number; expired: boolean; }; address: { address: string; address2: string; city: string; country: string; state: string; zip: string; }; }; product: { id: number; name: string; priceInCents: number; interval: number; intervalUnit: "day" | "month"; trialPriceInCents: number; trialInterval: string; trialIntervalUnit: string; }; components: { updatesAllowed: boolean; usedInBilling: boolean; }; customFields: { updatesAllowed: boolean; visible: boolean; }; coupons: { amountInCents: number; code: string; expiresAt: string; recurring: boolean; percentage: number; }[]; }>; addCoupon(subscriptionId: number, couponCode: string): Promise<{ id: number; productFamilyId: number; state: string; balanceInCents: number; referralCode: string; currentPeriodEndsAt: string; nextAssessmentAt: string; nextProductId?: number; currentBillingAmountInCents: number; automaticallyResumeAt: string; expiresAt: string; canceledAt: string; scheduledCancellationAt: string; currency: string; threeDsActionLink: string; billing: { paymentProfileConnected: boolean; bankAccount: { bankName: string; maskedAccountNumber: string; maskedRoutingNumber: string; firstName: string; lastName: string; }; creditCard: { firstName: string; lastName: string; cardType: string; maskedNumber: string; expirationMonth: number; expirationYear: number; expired: boolean; }; address: { address: string; address2: string; city: string; country: string; state: string; zip: string; }; }; product: { id: number; name: string; priceInCents: number; interval: number; intervalUnit: "day" | "month"; trialPriceInCents: number; trialInterval: string; trialIntervalUnit: string; }; components: { updatesAllowed: boolean; usedInBilling: boolean; }; customFields: { updatesAllowed: boolean; visible: boolean; }; coupons: { amountInCents: number; code: string; expiresAt: string; recurring: boolean; percentage: number; }[]; }>; getCustomerDetails(): Promise<{ address: string; address2: string; ccEmails: string[]; city: string; country: string; email: string; firstName: string; lastName: string; organization: string; state: string; vatNumber: string; zip: string; phoneNumber: string; }>; updateCustomerDetails(customerDetails: CustomerDetails): Promise<{ address: string; address2: string; ccEmails: string[]; city: string; country: string; email: string; firstName: string; lastName: string; organization: string; state: string; vatNumber: string; zip: string; phoneNumber: string; }>; getCountrySubdivisions(countryCode: string): Promise<{ items: { name: string; code: string; }[]; }>; getCountries(): Promise<{ items: { name: string; code: string; }[]; }>; getInvoices(requestParams: InvoicesParams): Promise<{ pagination: { totalItems: number; totalPages: number; itemsPerPage: number; }; items: { id: number; number: string; issueDate: string; dueDate: string; status: import("./types/invoicesList").InvoiceStatus; totalAmountInCents: number; amountDueInCents: number; currency: string; invoiceUrl: string; consolidationLevel: import("./types/invoicesList").InvoiceConsolidationLevel; }[]; }>; getInvoiceFilters(): Promise<{ productNames: { id: number; name: string; }[]; }>; previewComponentAllocations(subscriptionId: number, body: { allocations: Allocation[]; }): Promise<{ allocationsPreview: { startDate: string; endDate: string; periodType: string; totalInCents: number; totalDiscountInCents: number; totalTaxInCents: number; subtotalInCents: number; existingBalanceInCents: number; accrueCharge: boolean; currency: string; componentsAllocations: { id: number; direction: "upgrade" | "downgrade"; transactionType: "credit" | "charge"; type: "quantity" | "metered" | "on_off" | "prepaid" | "event"; amountInCents: number; taxableAmountInCents: number; discountAmountInCents: number; previousQuantity: number; quantity: number; memo: string; componentHandle: string; }[]; }; }>; updateComponentAllocations(subscriptionId: number, body: { allocations: Allocation[]; }): Promise<{ allocations: { id: number; memo: string; quantity: number; }[]; subscription: { id: number; balanceInCents: number; currentBillingAmountInCents: number; }; }>; getSubscriptionCustomFields(subscriptionId: number): Promise<{ items: { id: number; name: string; value: string; visible: boolean; fieldType: "text" | "radio" | "dropdown"; enum: string[]; }[]; }>; getCustomerCustomFields(): Promise<{ items: { id: number; name: string; value: string; visible: boolean; fieldType: "text" | "radio" | "dropdown"; enum: string[]; }[]; }>; updateCustomerCustomFields(customFields: CustomFieldUpdate[]): Promise<{ fields: { id: number; value: string; }[]; }>; updateSubscriptionCustomFields(subscriptionId: number, customFields: CustomFieldUpdate[]): Promise<{ fields: { id: number; value: string; }[]; }>; pauseSubscription(subscriptionId: number, automaticallyResumeAt: Date | null): Promise<{ subscriptionId: number; automaticallyResumeAt: string; state: string; }>; cancelSubscription({ subscriptionId, ...rest }: { subscriptionId: number; cancellationMessage?: string; scheduledCancellationAt?: string | null; cancelAtEndOfPeriod?: boolean; churnReasonCode?: string; }): Promise<{ canceledAt?: string; subscriptionId: number; scheduledCancellationAt: string; state: string; }>; getPaymentProfiles(): Promise<{ id: number; expired?: boolean; type: import("./types/paymentProfiles").PaymentProfileType; requiredFields: string[]; vault: string; bankAccount?: { bankName: string; maskedAccountNumber: string; maskedRoutingNumber: string; firstName: string; lastName: string; }; creditCard?: { firstName: string; lastName: string; cardType: string; maskedNumber: string; expirationMonth: number; expirationYear: number; expired: boolean; }; address?: { address: string; address2: string; city: string; country: string; state: string; zip: string; }; }[]>; deletePaymentProfile(paymentProfileId: number): Promise<{ id: number; expired?: boolean; type: import("./types/paymentProfiles").PaymentProfileType; requiredFields: string[]; vault: string; bankAccount?: { bankName: string; maskedAccountNumber: string; maskedRoutingNumber: string; firstName: string; lastName: string; }; creditCard?: { firstName: string; lastName: string; cardType: string; maskedNumber: string; expirationMonth: number; expirationYear: number; expired: boolean; }; address?: { address: string; address2: string; city: string; country: string; state: string; zip: string; }; }[]>; undoCancelation(subscriptionId: number): Promise<{}>; getChurnReasonCodes(): Promise<{ items: { id: number; code: string; description: string; position: number; }[]; }>; getInvoicePDF(invoiceId: string): Promise; reactivateSubscription(subscriptionId: number, couponCode?: string): Promise<{ id: number; currentBillingAmountInCents: number; nextAssessmentAt: string; currentPeriodEndsAt: string; }>; } export default DataAccess;