import { type NormalizeConstructor } from '@adonisjs/core/types/helpers'; import { type BaseModel } from '@adonisjs/lucid/orm'; export declare function billable(): >(superclass: Model) => { new (...args: any[]): { $attributes: import("@adonisjs/lucid/types/model").ModelObject; $extras: import("@adonisjs/lucid/types/model").ModelObject; $original: import("@adonisjs/lucid/types/model").ModelObject; $preloaded: { [relation: string]: import("@adonisjs/lucid/types/model").LucidRow | import("@adonisjs/lucid/types/model").LucidRow[]; }; $sideloaded: import("@adonisjs/lucid/types/model").ModelObject; $primaryKeyValue?: number | string; $isPersisted: boolean; $isNew: boolean; $isLocal: boolean; $dirty: import("@adonisjs/lucid/types/model").ModelObject; $isDirty: boolean; $isDeleted: boolean; $options?: import("@adonisjs/lucid/types/model").ModelOptions; $trx?: import("@adonisjs/lucid/types/database").TransactionClientContract; $setOptionsAndTrx(options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): void; useTransaction(trx: import("@adonisjs/lucid/types/database").TransactionClientContract): /*elided*/ any; useConnection(connection: string): /*elided*/ any; $getQueryFor(action: "insert", client: import("@adonisjs/lucid/types/database").QueryClientContract): ReturnType; $getQueryFor(action: "update" | "delete" | "refresh", client: import("@adonisjs/lucid/types/database").QueryClientContract): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract; $setAttribute(key: string, value: any): void; $getAttribute(key: string): any; $getAttributeFromCache(key: string, callback: import("@adonisjs/lucid/types/model").CacheNode["getter"]): any; $hasRelated(key: string): boolean; $setRelated(key: string, result: import("@adonisjs/lucid/types/querybuilder").OneOrMany | null): void; $pushRelated(key: string, result: import("@adonisjs/lucid/types/querybuilder").OneOrMany | null): void; $getRelated(key: string, defaultValue?: any): import("@adonisjs/lucid/types/querybuilder").OneOrMany | undefined | null; $consumeAdapterResult(adapterResult: import("@adonisjs/lucid/types/model").ModelObject, sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject): void; $hydrateOriginals(): void; fill(value: Partial>, allowExtraProperties?: boolean): /*elided*/ any; merge(value: Partial>, allowExtraProperties?: boolean): /*elided*/ any; isDirty(fields?: "stripeId" | "trialEndsAt" | "couponId" | "promotionCodeId" | "allowPromotionCodes" | "customerIpAddress" | "estimationBillingAddress" | "collectTaxIds" | "pmType" | "pmLastFour" | ("stripeId" | "trialEndsAt" | "couponId" | "promotionCodeId" | "allowPromotionCodes" | "customerIpAddress" | "estimationBillingAddress" | "collectTaxIds" | "pmType" | "pmLastFour" | undefined)[] | undefined): boolean; enableForceUpdate(): /*elided*/ any; save(): Promise; saveQuietly(): Promise; lockForUpdate(callback: (user: /*elided*/ any) => T | Promise): Promise; delete(): Promise; deleteQuietly(): Promise; refresh(): Promise; load: import("@adonisjs/lucid/types/model").LucidRowPreload; loadOnce: import("@adonisjs/lucid/types/model").LucidRowPreloadOnce; preload: import("@adonisjs/lucid/types/model").LucidRowPreload; loadAggregate: , RelatedBuilder = NonNullable extends import("@adonisjs/lucid/types/relations").ModelRelations ? (import("@adonisjs/lucid/types/relations").ModelRelations & Self[Name] & {})["subQuery"] : never>(name: Name, callback: (builder: RelatedBuilder) => void) => import("@adonisjs/lucid/types/model").LazyLoadAggregatesContract; loadCount: , RelatedBuilder_1 = NonNullable extends import("@adonisjs/lucid/types/relations").ModelRelations ? (import("@adonisjs/lucid/types/relations").ModelRelations & Self[Name_1] & {})["subQuery"] : never>(name: Name_1, callback?: ((builder: RelatedBuilder_1) => void) | undefined) => import("@adonisjs/lucid/types/model").LazyLoadAggregatesContract; serializeAttributes(fields?: import("@adonisjs/lucid/types/model").CherryPickFields, raw?: boolean): import("@adonisjs/lucid/types/model").ModelObject; serializeComputed(fields?: import("@adonisjs/lucid/types/model").CherryPickFields): import("@adonisjs/lucid/types/model").ModelObject; serializeRelations(fields: undefined, raw: true): { [key: string]: import("@adonisjs/lucid/types/model").LucidRow | import("@adonisjs/lucid/types/model").LucidRow[]; }; serializeRelations(cherryPick: import("@adonisjs/lucid/types/model").CherryPick["relations"] | undefined, raw: false | undefined): import("@adonisjs/lucid/types/model").ModelObject; serializeRelations(cherryPick?: import("@adonisjs/lucid/types/model").CherryPick["relations"], raw?: boolean): import("@adonisjs/lucid/types/model").ModelObject; serialize(cherryPick?: import("@adonisjs/lucid/types/model").CherryPick): import("@adonisjs/lucid/types/model").ModelObject; toObject(): import("@adonisjs/lucid/types/model").ModelObject; toJSON(): import("@adonisjs/lucid/types/model").ModelObject; toAttributes(): Record; related>(relation: Name_2): NonNullable extends import("@adonisjs/lucid/types/relations").ModelRelations ? (import("@adonisjs/lucid/types/relations").ModelRelations & /*elided*/ any[Name_2] & {})["client"] : never; stripeId: string | null; hasStripeId(): boolean; stripeIdOrFail(): string; customerIpAddress: string | null; estimationBillingAddress: Partial; collectTaxIds: boolean; withTaxIpAddress(ipAddress: string): void; withTaxAddress(country: string, postalCode?: string, state?: string): void; automaticTaxPayload(): { enabled: boolean; }; isAutomaticTaxEnabled(): boolean; withTaxIdsCollect(): void; createAsStripeCustomer(params?: import("stripe").Stripe.CustomerCreateParams): Promise; updateStripeCustomer(params?: import("stripe").Stripe.CustomerUpdateParams): Promise; createOrGetStripeCustomer(params?: import("stripe").Stripe.CustomerCreateParams): Promise; updateOrCreateStripeCustomer(params?: import("stripe").Stripe.CustomerCreateParams): Promise; syncOrCreateStripeCustomer(params?: import("stripe").Stripe.CustomerCreateParams): Promise; asStripeCustomer(expand?: string[]): Promise; stripeName(): string | undefined; stripeEmail(): string | undefined; stripePhone(): string | undefined; stripeAddress(): import("stripe").Stripe.Emptyable | undefined; stripePreferredLocales(): string[]; stripeMetadata(): Record; syncStripeCustomerDetails(): Promise; discount(): Promise; findPromotionCode(code: string, params?: import("stripe").Stripe.PromotionCodeListParams): Promise; findActivePromotionCode(code: string, params?: import("stripe").Stripe.PromotionCodeListParams): Promise; balance(): Promise; rawBalance(): Promise; balanceTransaction(limit?: number, params?: import("stripe").Stripe.CustomerListBalanceTransactionsParams): Promise; creditBalance(amount: number, description?: string, params?: Partial): Promise; debitBalance(amount: number, description?: string, params?: Partial): Promise; applyBalance(amount: number, description?: string, params?: Partial): Promise; preferredCurrency(): string; formatAmount(amount: number): string; billingPortalUrl(returnUrl?: string, params?: import("stripe").Stripe.BillingPortal.SessionCreateParams): Promise; taxIds(params?: import("stripe").Stripe.CustomerListTaxIdsParams): Promise; findTaxId(id: string): Promise; createTaxId(type: import("stripe").Stripe.CustomerCreateTaxIdParams.Type, value: string): Promise; deleteTaxId(id: string): Promise; isNotTaxExempt(): Promise; isTaxExempt(): Promise; reverseChargeApplies(): Promise; pmType: string | null; pmLastFour: string | null; createSetupIntent(params?: import("stripe").Stripe.SetupIntentCreateParams): Promise; findSetupIntent(id: string, params?: import("stripe").Stripe.SetupIntentRetrieveParams, options?: import("stripe").Stripe.RequestOptions): Promise; hasDefaultPaymentMethod(): boolean; hasPaymentMethod(type?: string): Promise; paymentMethods(type?: import("stripe").Stripe.PaymentMethodListParams.Type, params?: import("stripe").Stripe.PaymentMethodListParams): Promise; addPaymentMethod(paymentMethod: string | import("stripe").Stripe.PaymentMethod): Promise; deletePaymentMethod(paymentMethod: string | import("stripe").Stripe.PaymentMethod): Promise; defaultPaymentMethod(): Promise; updateDefaultPaymentMethod(paymentMethod: string | import("stripe").Stripe.PaymentMethod): Promise; updateDefaultPaymentMethodFromStripe(): Promise; deletePaymentMethods(type?: import("stripe").Stripe.PaymentMethodListParams.Type): Promise; findPaymentMethod(paymentMethod: string): Promise; invoice(): import("../builders/invoice_builder.ts").InvoiceBuilder; upcomingInvoice(params?: import("stripe").Stripe.InvoiceCreatePreviewParams): Promise; findInvoice(id: string): Promise; findInvoiceOrFail(id: string): Promise; invoices(includePending?: boolean, params?: import("stripe").Stripe.InvoiceListParams): Promise; invoicesIncludingPending(params?: import("stripe").Stripe.InvoiceListParams): Promise; trialEndsAt: import("luxon").DateTime | null; subscriptions: import("@adonisjs/lucid/types/relations").HasMany; newSubscription(type: string, prices?: string | string[]): import("../builders/subscription_builder.ts").SubscriptionBuilder; onTrial(type?: string, price?: string): Promise; hasExpiredTrial(type?: string, price?: string): Promise; onGenericTrial(): boolean; hasExpiredGenericTrial(): boolean; getTrialEndsAt(type?: string): Promise; subscribed(type?: string, price?: string): Promise; subscription(type?: string): Promise; subscribedToProduct(products: string[], type: string): Promise; subscribedToPrice(prices: string[], type: string): Promise; taxRates(): string[]; priceTaxRates(): Record; applyCoupon(coupon: string, subscriptionTypes?: string | string[]): Promise; applyPromotionCode(promotionCodeId: string, subscriptionTypes?: string | string[]): Promise; charge(amount: number, paymentMethod: string, params: Partial): Promise; pay(amount: number, params?: Partial>): Promise; payWith(amount: number, paymentMethods: string[], params?: Partial>): Promise; createPayment(amount: number, params?: Partial): Promise; findPayment(id: string): Promise; refund(paymentIntent: string, params?: Omit): Promise; checkout(): import("../builders/checkout_builder.ts").CheckoutBuilder; checkoutCharge(amount: number, name: string, quantity?: number, productData?: Omit): import("../builders/checkout_builder.ts").CheckoutBuilder; couponId?: string; promotionCodeId?: string; allowPromotionCodes: boolean; withCoupon(couponId: string): /*elided*/ any; withPromotionCode(promotionCodeId: string): /*elided*/ any; withAllowPromotionsCodes(): /*elided*/ any; checkoutDiscounts(): import("stripe").Stripe.Checkout.SessionCreateParams.Discount[] | undefined; }; find: (this: T, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise>; readonly booted: boolean; $columnsDefinitions: Map; $relationsDefinitions: Map; $computedDefinitions: Map; primaryKey: string; connection?: string | undefined; namingStrategy: import("@adonisjs/lucid/types/model").NamingStrategyContract; table: string; selfAssignPrimaryKey: boolean; $adapter: import("@adonisjs/lucid/types/model").AdapterContract; useAdapter: (adapter: import("@adonisjs/lucid/types/model").AdapterContract) => void; $hooks: import("@poppinss/hooks").default; $keys: { attributesToColumns: import("@adonisjs/lucid/types/model").ModelKeysContract; attributesToSerialized: import("@adonisjs/lucid/types/model").ModelKeysContract; columnsToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract; columnsToSerialized: import("@adonisjs/lucid/types/model").ModelKeysContract; serializedToColumns: import("@adonisjs/lucid/types/model").ModelKeysContract; serializedToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract; columnAliasesToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract; }; $createFromAdapterResult: (this: T, result?: import("@adonisjs/lucid/types/model").ModelObject, sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => null | InstanceType; $createMultipleFromAdapterResult: (this: T, results: import("@adonisjs/lucid/types/model").ModelObject[], sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => InstanceType[]; $addColumn: (name: string, options: Partial) => import("@adonisjs/lucid/types/model").ColumnOptions; $hasColumn: (name: string) => boolean; $getColumn: (name: string) => import("@adonisjs/lucid/types/model").ModelColumnOptions | undefined; $getColumnAlias: (columnName: string) => string; columnsForSelect: () => Record; $addComputed: (name: string, options: Partial) => import("@adonisjs/lucid/types/model").ComputedOptions; $hasComputed: (name: string) => boolean; $getComputed: (name: string) => import("@adonisjs/lucid/types/model").ComputedOptions | undefined; $addRelation: (name: string, type: import("@adonisjs/lucid/types/relations").ModelRelationTypes["__opaque_type"], relatedModel: () => import("@adonisjs/lucid/types/model").LucidModel, options: import("@adonisjs/lucid/types/model").ModelRelationOptions) => void; $hasRelation: (name: string) => boolean; $getRelation: { >>(this: Model_1, name: Name_2): NonNullable[Name_2]> extends import("@adonisjs/lucid/types/relations").ModelRelations ? NonNullable[Name_2]>["client"]["relation"] : import("@adonisjs/lucid/types/relations").RelationshipsContract; (this: Model_1, name: string): import("@adonisjs/lucid/types/relations").RelationshipsContract; }; $defineProperty: (this: Model_1, propertyName: Prop, defaultValue: Model_1[Prop], strategy: "inherit" | "define" | ((value: Model_1[Prop]) => Model_1[Prop])) => void; boot: () => void; before: { (this: Model_1, event: Event, handler: import("@adonisjs/lucid/types/model").HooksHandler, Event>): void; (this: Model_1, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler<[import("@adonisjs/lucid/types/model").ModelQueryBuilderContract, import("@adonisjs/lucid/types/model").ModelQueryBuilderContract], "paginate">): void; (this: Model_1, event: Event_1, handler: import("@adonisjs/lucid/types/model").HooksHandler, Event_1>): void; }; after: { (this: Model_1, event: "fetch", handler: import("@adonisjs/lucid/types/model").HooksHandler[], "fetch">): void; (this: Model_1, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler>, "paginate">): void; (this: Model_1, event: Event_2, handler: import("@adonisjs/lucid/types/model").HooksHandler, Event_2>): void; }; create: (this: T, values: Partial>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise>; createQuietly: (this: T, values: Partial>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise>; createMany: (this: T, values: Partial>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise[]>; createManyQuietly: (this: T, values: Partial>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise[]>; findOrFail: (this: T, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise>; findBy: { (this: T, clause: Record, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise>; (this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise>; }; findByOrFail: { (this: T, clause: Record, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise>; (this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise>; }; findManyBy: { (this: T, clause: Record, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise[]>; (this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise[]>; }; first: (this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise>; firstOrFail: (this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise>; findMany: (this: T, value: any[], options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise[]>; firstOrNew: (this: T, searchPayload: Partial>>, savePayload?: Partial>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise>; firstOrCreate: (this: T, searchPayload: Partial>>, savePayload?: Partial>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise>; updateOrCreate: (this: T, searchPayload: Partial>>, updatePayload: Partial>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise>; fetchOrNewUpMany: (this: T, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes>)[], payload: Partial>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise[]>; fetchOrCreateMany: (this: T, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes>)[], payload: Partial>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise[]>; updateOrCreateMany: (this: T, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes>)[], payload: Partial>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise[]>; all: (this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise[]>; query: >(this: Model_1, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => import("@adonisjs/lucid/types/model").ModelQueryBuilderContract; transaction: import("@adonisjs/lucid/types/database").TransactionFn; truncate: (cascade?: boolean) => Promise; } & Model;