Files
cfw-autumn/vite/src/services/customers/CusService.tsx
2026-06-04 12:34:07 +01:00

129 lines
2.6 KiB
TypeScript

import type {
DbOverageAllowed,
DbSpendLimit,
DbUsageAlert,
} from "@autumn/shared";
import type { AxiosInstance } from "axios";
export class CusService {
static async createCustomer(axios: AxiosInstance, data: any) {
return await axios.post("/v1/customers?with_autumn_id=true", data);
}
static async deleteCustomer(axios: AxiosInstance, customer_id: any) {
await axios.delete(`/v1/customers/${customer_id}`);
}
static async attach(axios: AxiosInstance, data: any) {
return await axios.post(`/v1/attach`, {
...data,
});
}
static async updateCustomer({
axios,
customer_id,
data,
}: {
axios: AxiosInstance;
customer_id: string;
data: any;
}) {
return await axios.post(`/v1/customers/${customer_id}`, data);
}
static async updateEntity({
axios,
customerId,
entityId,
billingControls,
}: {
axios: AxiosInstance;
customerId: string;
entityId: string;
billingControls: {
spend_limits?: DbSpendLimit[];
usage_alerts?: DbUsageAlert[];
overage_allowed?: DbOverageAllowed[];
};
}) {
return await axios.post("/v1/entities.update", {
customer_id: customerId,
entity_id: entityId,
billing_controls: billingControls,
});
}
static async getProductOptions(axios: AxiosInstance, data: any) {
return await axios.post(`/customers/product_options`, {
...data,
});
}
static async updateCusEntitlement(
axios: AxiosInstance,
customer_id: string,
customer_entitlement_id: string,
data: any,
) {
return await axios.post(
`/v1/customers/${customer_id}/entitlements/${customer_entitlement_id}`,
data,
);
}
static async updateCusProductStatus(
axios: AxiosInstance,
customer_product_id: string,
data: any,
) {
return await axios.post(
`/v1/customers/customer_products/${customer_product_id}`,
data,
);
}
static async addCouponToCustomer({
axios,
customer_id,
coupon_id,
promo_code,
}: {
axios: AxiosInstance;
customer_id: string;
coupon_id: string;
promo_code?: string;
}) {
return await axios.post(
`/v1/customers/${customer_id}/coupons/${coupon_id}`,
promo_code ? { promo_code } : {},
);
}
static async createBillingPortalSession({
axios,
customer_id,
}: {
axios: AxiosInstance;
customer_id: string;
}): Promise<{ customer_id: string | null; url: string }> {
const { data } = await axios.post(
`/v1/customers/${customer_id}/billing_portal`,
);
return data;
}
static async clearCache({
axios,
customer_id,
}: {
axios: AxiosInstance;
customer_id: string;
}): Promise<{ success: boolean }> {
const { data } = await axios.post(`/v1/customers/clear_cache`, {
customer_id,
});
return data;
}
}