You've already forked AstralRinth
forked from didirus/AstralRinth
7ccc32675b
* feat: abstract api-client DI into ui package * feat: cross platform page system * feat: tanstack as cross platform useAsyncData * feat: archon servers routes + labrinth billing routes * fix: dont use partial * feat: migrate server list page to tanstack + api-client + re-enabled broken features! * feat: migrate servers manage page to api-client before page system * feat: migrate manage page to page system * fix: type issues * fix: upgrade wrapper bugs * refactor: move state types into api-client * feat: disable financial stuff on app frontend * feat: finalize cross platform page system for now * fix: lint * fix: build issues * feat: remove papaparse * fix: lint * fix: interface error --------- Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
190 lines
4.6 KiB
TypeScript
190 lines
4.6 KiB
TypeScript
import { AbstractModule } from '../../../core/abstract-module'
|
|
import type { Labrinth } from '../types'
|
|
|
|
export class LabrinthBillingInternalModule extends AbstractModule {
|
|
public getModuleID(): string {
|
|
return 'labrinth_billing_internal'
|
|
}
|
|
|
|
/**
|
|
* Get user's subscriptions
|
|
* GET /_internal/billing/subscriptions
|
|
*/
|
|
public async getSubscriptions(
|
|
userId?: string,
|
|
): Promise<Labrinth.Billing.Internal.UserSubscription[]> {
|
|
const params = userId ? `?user_id=${userId}` : ''
|
|
|
|
return this.client.request<Labrinth.Billing.Internal.UserSubscription[]>(
|
|
`/billing/subscriptions${params}`,
|
|
{
|
|
api: 'labrinth',
|
|
version: 'internal',
|
|
method: 'GET',
|
|
},
|
|
)
|
|
}
|
|
|
|
/**
|
|
* Get available products for purchase
|
|
* GET /_internal/billing/products
|
|
*/
|
|
public async getProducts(): Promise<Labrinth.Billing.Internal.Product[]> {
|
|
return this.client.request<Labrinth.Billing.Internal.Product[]>('/billing/products', {
|
|
api: 'labrinth',
|
|
version: 'internal',
|
|
method: 'GET',
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Get Stripe customer information
|
|
* GET /_internal/billing/customer
|
|
*/
|
|
public async getCustomer(): Promise<unknown> {
|
|
return this.client.request<unknown>('/billing/customer', {
|
|
api: 'labrinth',
|
|
version: 'internal',
|
|
method: 'GET',
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Edit a subscription (change product, interval, cancel, etc.)
|
|
* PATCH /_internal/billing/subscription/{id}
|
|
*/
|
|
public async editSubscription(
|
|
id: string,
|
|
edit: Labrinth.Billing.Internal.EditSubscriptionRequest,
|
|
dry?: boolean,
|
|
): Promise<Labrinth.Billing.Internal.EditSubscriptionResponse | void> {
|
|
const params = dry ? '?dry=true' : ''
|
|
|
|
return this.client.request<Labrinth.Billing.Internal.EditSubscriptionResponse | void>(
|
|
`/billing/subscription/${id}${params}`,
|
|
{
|
|
api: 'labrinth',
|
|
version: 'internal',
|
|
method: 'PATCH',
|
|
body: edit,
|
|
},
|
|
)
|
|
}
|
|
|
|
/**
|
|
* Get user's payment methods
|
|
* GET /_internal/billing/payment_methods
|
|
*/
|
|
public async getPaymentMethods(): Promise<unknown[]> {
|
|
return this.client.request<unknown[]>('/billing/payment_methods', {
|
|
api: 'labrinth',
|
|
version: 'internal',
|
|
method: 'GET',
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Initiate flow to add a new payment method
|
|
* POST /_internal/billing/payment_method
|
|
*/
|
|
public async addPaymentMethodFlow(): Promise<Labrinth.Billing.Internal.AddPaymentMethodFlowResponse> {
|
|
return this.client.request<Labrinth.Billing.Internal.AddPaymentMethodFlowResponse>(
|
|
'/billing/payment_method',
|
|
{
|
|
api: 'labrinth',
|
|
version: 'internal',
|
|
method: 'POST',
|
|
},
|
|
)
|
|
}
|
|
|
|
/**
|
|
* Edit a payment method (set as primary)
|
|
* PATCH /_internal/billing/payment_method/{id}
|
|
*/
|
|
public async editPaymentMethod(
|
|
id: string,
|
|
body: Labrinth.Billing.Internal.EditPaymentMethodRequest,
|
|
): Promise<void> {
|
|
return this.client.request<void>(`/billing/payment_method/${id}`, {
|
|
api: 'labrinth',
|
|
version: 'internal',
|
|
method: 'PATCH',
|
|
body,
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Remove a payment method
|
|
* DELETE /_internal/billing/payment_method/{id}
|
|
*/
|
|
public async removePaymentMethod(id: string): Promise<void> {
|
|
return this.client.request<void>(`/billing/payment_method/${id}`, {
|
|
api: 'labrinth',
|
|
version: 'internal',
|
|
method: 'DELETE',
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Get payment history (charges)
|
|
* GET /_internal/billing/payments
|
|
*/
|
|
public async getPayments(userId?: string): Promise<Labrinth.Billing.Internal.Charge[]> {
|
|
const params = userId ? `?user_id=${userId}` : ''
|
|
|
|
return this.client.request<Labrinth.Billing.Internal.Charge[]>(`/billing/payments${params}`, {
|
|
api: 'labrinth',
|
|
version: 'internal',
|
|
method: 'GET',
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Initiate a payment
|
|
* POST /_internal/billing/payment
|
|
*/
|
|
public async initiatePayment(
|
|
request: Labrinth.Billing.Internal.InitiatePaymentRequest,
|
|
): Promise<Labrinth.Billing.Internal.InitiatePaymentResponse> {
|
|
return this.client.request<Labrinth.Billing.Internal.InitiatePaymentResponse>(
|
|
'/billing/payment',
|
|
{
|
|
api: 'labrinth',
|
|
version: 'internal',
|
|
method: 'POST',
|
|
body: request,
|
|
},
|
|
)
|
|
}
|
|
|
|
/**
|
|
* Refund a charge (Admin only)
|
|
* POST /_internal/billing/charge/{id}/refund
|
|
*/
|
|
public async refundCharge(
|
|
id: string,
|
|
refund: Labrinth.Billing.Internal.RefundChargeRequest,
|
|
): Promise<void> {
|
|
return this.client.request<void>(`/billing/charge/${id}/refund`, {
|
|
api: 'labrinth',
|
|
version: 'internal',
|
|
method: 'POST',
|
|
body: refund,
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Credit subscriptions (Admin only)
|
|
* POST /_internal/billing/credit
|
|
*/
|
|
public async credit(request: Labrinth.Billing.Internal.CreditRequest): Promise<void> {
|
|
return this.client.request<void>('/billing/credit', {
|
|
api: 'labrinth',
|
|
version: 'internal',
|
|
method: 'POST',
|
|
body: request,
|
|
})
|
|
}
|
|
}
|