From 8ec8a7217e33a2496a4921b5fb185c4154170d3b Mon Sep 17 00:00:00 2001 From: Charlie Lamb Date: Fri, 2 Jan 2026 21:59:02 +0000 Subject: [PATCH] chore: add new params to list customer endpoint --- package/src/sdk/customers/cusMethods.ts | 200 +++++++++--------- package/src/sdk/customers/cusTypes.ts | 262 ++++++++++++------------ 2 files changed, 236 insertions(+), 226 deletions(-) diff --git a/package/src/sdk/customers/cusMethods.ts b/package/src/sdk/customers/cusMethods.ts index 4b83f8c1..acca3bfb 100644 --- a/package/src/sdk/customers/cusMethods.ts +++ b/package/src/sdk/customers/cusMethods.ts @@ -1,146 +1,148 @@ -import { Autumn } from "../client"; -import { - Customer, - CreateCustomerParams, - UpdateCustomerParams, - BillingPortalParams, - BillingPortalResult, - GetCustomerParams, - UpdateBalancesParams, - UpdateBalancesResult, - DeleteCustomerParams, - ListCustomersParams, -} from "./cusTypes"; -import { staticWrapper, buildPathWithQuery } from "../utils"; -import { AutumnPromise } from "../response"; +import type { Autumn } from "../client"; import { AutumnError } from "../error"; +import type { AutumnPromise } from "../response"; +import { buildPathWithQuery, staticWrapper } from "../utils"; +import type { + BillingPortalParams, + BillingPortalResult, + CreateCustomerParams, + Customer, + DeleteCustomerParams, + GetCustomerParams, + ListCustomersParams, + UpdateBalancesParams, + UpdateBalancesResult, + UpdateCustomerParams, +} from "./cusTypes"; export const customerMethods = (instance?: Autumn) => { - return { - list: (params?: ListCustomersParams) => staticWrapper(listCustomers, instance, { params }), - get: (id: string, params?: GetCustomerParams) => - staticWrapper(getCustomer, instance, { id, params }), - create: (params?: CreateCustomerParams) => - staticWrapper(createCustomer, instance, { params }), - update: (id: string, params: UpdateCustomerParams) => - staticWrapper(updateCustomer, instance, { id, params }), + return { + list: (params?: ListCustomersParams) => + staticWrapper(listCustomers, instance, { params }), + get: (id: string, params?: GetCustomerParams) => + staticWrapper(getCustomer, instance, { id, params }), + create: (params?: CreateCustomerParams) => + staticWrapper(createCustomer, instance, { params }), + update: (id: string, params: UpdateCustomerParams) => + staticWrapper(updateCustomer, instance, { id, params }), - delete: (id: string, params?: DeleteCustomerParams) => staticWrapper(deleteCustomer, instance, { id, params }), + delete: (id: string, params?: DeleteCustomerParams) => + staticWrapper(deleteCustomer, instance, { id, params }), - billingPortal: (id: string, params?: BillingPortalParams) => - staticWrapper(billingPortal, instance, { id, params }), + billingPortal: (id: string, params?: BillingPortalParams) => + staticWrapper(billingPortal, instance, { id, params }), - updateBalances: (id: string, params: UpdateBalancesParams) => - staticWrapper(updateBalances, instance, { id, params }), - }; + updateBalances: (id: string, params: UpdateBalancesParams) => + staticWrapper(updateBalances, instance, { id, params }), + }; }; - export const getExpandStr = (expand?: string[]) => { - if (!expand) { - return ""; - } - return `expand=${expand.join(",")}`; + if (!expand) { + return ""; + } + return `expand=${expand.join(",")}`; }; export const listCustomers = async ({ - instance, - params, + instance, + params, }: { - instance: Autumn; - params?: ListCustomersParams; + instance: Autumn; + params?: ListCustomersParams; }): AutumnPromise<{ - list: Customer[]; - total: number; - limit: number; - offset: number; + list: Customer[]; + total: number; + limit: number; + offset: number; }> => { - const path = buildPathWithQuery("/customers", params); - return instance.get(path); + return instance.post("/customers/list", params ?? {}); }; export const getCustomer = async ({ - instance, - id, - params, + instance, + id, + params, }: { - instance: Autumn; - id: string; - params?: GetCustomerParams; + instance: Autumn; + id: string; + params?: GetCustomerParams; }): AutumnPromise => { - if (!id) { - return { - data: null, - error: new AutumnError({ - message: "Customer ID is required", - code: "CUSTOMER_ID_REQUIRED", - }), - }; - } + if (!id) { + return { + data: null, + error: new AutumnError({ + message: "Customer ID is required", + code: "CUSTOMER_ID_REQUIRED", + }), + }; + } - return instance.get(`/customers/${id}?${getExpandStr(params?.expand)}`); + return instance.get(`/customers/${id}?${getExpandStr(params?.expand)}`); }; export const createCustomer = async ({ - instance, - params, + instance, + params, }: { - instance: Autumn; - params?: CreateCustomerParams; + instance: Autumn; + params?: CreateCustomerParams; }): AutumnPromise => { - return instance.post(`/customers?${getExpandStr(params?.expand)}`, params); + return instance.post(`/customers?${getExpandStr(params?.expand)}`, params); }; export const updateCustomer = async ({ - instance, - id, - params, + instance, + id, + params, }: { - instance: Autumn; - id: string; - params: UpdateCustomerParams; + instance: Autumn; + id: string; + params: UpdateCustomerParams; }): AutumnPromise => { - return instance.post(`/customers/${id}`, params); + return instance.post(`/customers/${id}`, params); }; export const deleteCustomer = async ({ - instance, - id, - params, + instance, + id, + params, }: { - instance: Autumn; - id: string; - params?: DeleteCustomerParams; + instance: Autumn; + id: string; + params?: DeleteCustomerParams; }): AutumnPromise => { - return instance.delete(`/customers/${id}${params?.delete_in_stripe ? "?delete_in_stripe=true" : ""}`); + return instance.delete( + `/customers/${id}${params?.delete_in_stripe ? "?delete_in_stripe=true" : ""}`, + ); }; export const billingPortal = async ({ - instance, - id, - params, + instance, + id, + params, }: { - instance: Autumn; - id: string; - params?: BillingPortalParams; + instance: Autumn; + id: string; + params?: BillingPortalParams; }): AutumnPromise => { - const finalParams = { - ...params, - return_url: params?.return_url ?? instance.defaultReturnUrl, - }; - return instance.post(`/customers/${id}/billing_portal`, finalParams); + const finalParams = { + ...params, + return_url: params?.return_url ?? instance.defaultReturnUrl, + }; + return instance.post(`/customers/${id}/billing_portal`, finalParams); }; export const updateBalances = async ({ - instance, - id, - params, + instance, + id, + params, }: { - instance: Autumn; - id: string; - params: UpdateBalancesParams; + instance: Autumn; + id: string; + params: UpdateBalancesParams; }): AutumnPromise => { - return instance.post(`/customers/${id}/balances`, { - balances: Array.isArray(params) ? params : [params], - }); + return instance.post(`/customers/${id}/balances`, { + balances: Array.isArray(params) ? params : [params], + }); }; diff --git a/package/src/sdk/customers/cusTypes.ts b/package/src/sdk/customers/cusTypes.ts index 6dfcb216..fed775df 100644 --- a/package/src/sdk/customers/cusTypes.ts +++ b/package/src/sdk/customers/cusTypes.ts @@ -1,133 +1,133 @@ import type { ProductItem } from "@sdk/products/prodTypes"; +import { z } from "zod/v4"; import type { AppEnv } from "../general/genEnums"; import { ProductItemInterval } from "../products/prodEnums"; import { - CustomerExpandEnum, - type CustomerExpandOption, - type ProductStatus, + CustomerExpandEnum, + type CustomerExpandOption, + type ProductStatus, } from "./cusEnums"; -import { z } from "zod/v4"; export const CoreCusFeatureSchema = z.object({ - unlimited: z.boolean().optional(), - interval: z.enum(ProductItemInterval).optional(), - balance: z.number().nullish(), - usage: z.number().optional(), - included_usage: z.number().optional(), - next_reset_at: z.number().nullish(), - overage_allowed: z.boolean().optional(), - usage_limit: z.number().optional(), - - rollovers: z - .object({ - balance: z.number(), - expires_at: z.number(), - }) - .optional(), - - breakdown: z - .array( - z.object({ - interval: z.enum(ProductItemInterval), - balance: z.number().optional(), - usage: z.number().optional(), - included_usage: z.number().optional(), - next_reset_at: z.number().optional(), - }) - ) - .optional(), - - credit_schema: z - .array( - z.object({ - feature_id: z.string(), - credit_amount: z.number(), - }) - ) - .optional(), + unlimited: z.boolean().optional(), + interval: z.enum(ProductItemInterval).optional(), + balance: z.number().nullish(), + usage: z.number().optional(), + included_usage: z.number().optional(), + next_reset_at: z.number().nullish(), + overage_allowed: z.boolean().optional(), + usage_limit: z.number().optional(), + + rollovers: z + .object({ + balance: z.number(), + expires_at: z.number(), + }) + .optional(), + + breakdown: z + .array( + z.object({ + interval: z.enum(ProductItemInterval), + balance: z.number().optional(), + usage: z.number().optional(), + included_usage: z.number().optional(), + next_reset_at: z.number().optional(), + }), + ) + .optional(), + + credit_schema: z + .array( + z.object({ + feature_id: z.string(), + credit_amount: z.number(), + }), + ) + .optional(), }); export type CoreCustomerFeature = z.infer; export interface CustomerFeature extends CoreCustomerFeature { - id: string; - name: string; - type: "static" | "single_use" | "continuous_use"; + id: string; + name: string; + type: "static" | "single_use" | "continuous_use"; } export interface CustomerReferral { - program_id: string; - customer: { - id: string; - name: string | null; - email: string | null; - }; - reward_applied: boolean; - created_at: number; + program_id: string; + customer: { + id: string; + name: string | null; + email: string | null; + }; + reward_applied: boolean; + created_at: number; } export interface CustomerProduct { - id: string; - name: string | null; - group: string | null; - status: ProductStatus; - started_at: number; - canceled_at: number | null; - version: number; + id: string; + name: string | null; + group: string | null; + status: ProductStatus; + started_at: number; + canceled_at: number | null; + version: number; - subscription_ids?: string[] | null; - current_period_start?: number | null; - current_period_end?: number | null; + subscription_ids?: string[] | null; + current_period_start?: number | null; + current_period_end?: number | null; - trial_ends_at?: number; - entity_id?: string; + trial_ends_at?: number; + entity_id?: string; - is_add_on: boolean; - is_default: boolean; + is_add_on: boolean; + is_default: boolean; - items: ProductItem[]; + items: ProductItem[]; } export interface Customer { - // Internal fields - id: string | null; - created_at: number; - name: string | null; - email: string | null; - fingerprint: string | null; - stripe_id: string | null; - env: AppEnv; - metadata: Record; - - products: CustomerProduct[]; - features: Record; - - // Expanded fields - invoices?: CustomerInvoice[]; - payment_method?: any; - referrals?: CustomerReferral[]; + // Internal fields + id: string | null; + created_at: number; + name: string | null; + email: string | null; + fingerprint: string | null; + stripe_id: string | null; + env: AppEnv; + metadata: Record; + + products: CustomerProduct[]; + features: Record; + + // Expanded fields + invoices?: CustomerInvoice[]; + payment_method?: any; + referrals?: CustomerReferral[]; } export const CustomerDataSchema = z.object({ - name: z.string().nullish(), - email: z.string().nullish(), - fingerprint: z.string().nullish(), + name: z.string().nullish(), + email: z.string().nullish(), + fingerprint: z.string().nullish(), }); export type CustomerData = z.infer; export interface GetCustomerParams { - expand?: CustomerExpandOption[]; + expand?: CustomerExpandOption[]; } export const CreateCustomerParamsSchema = z.object({ - id: z.string().nullish(), - email: z.string().nullish(), - name: z.string().nullish(), - fingerprint: z.string().nullish(), - metadata: z.record(z.string(), z.any()).optional(), - expand: z.array(CustomerExpandEnum).optional(), - stripe_id: z.string().nullish(), + id: z.string().nullish(), + email: z.string().nullish(), + name: z.string().nullish(), + fingerprint: z.string().nullish(), + metadata: z.record(z.string(), z.any()).optional(), + expand: z.array(CustomerExpandEnum).optional(), + stripe_id: z.string().nullish(), }); export type CreateCustomerParams = z.infer; @@ -142,61 +142,69 @@ export type CreateCustomerParams = z.infer; // } export interface UpdateCustomerParams { - id?: string | null; - name?: string | null; - email?: string | null; - fingerprint?: string | null; - metadata?: Record; - stripe_id?: string; + id?: string | null; + name?: string | null; + email?: string | null; + fingerprint?: string | null; + metadata?: Record; + stripe_id?: string; } export const BillingPortalParamsSchema = z.object({ - return_url: z.string().optional(), + return_url: z.string().optional(), }); export type BillingPortalParams = z.infer; export interface BillingPortalResult { - customer_id: string; - url: string; + customer_id: string; + url: string; } export interface CustomerInvoice { - product_ids: string[]; - stripe_id: string; - status: string; - total: number; - currency: string; - created_at: number; - hosted_invoice_url: string; + product_ids: string[]; + stripe_id: string; + status: string; + total: number; + currency: string; + created_at: number; + hosted_invoice_url: string; } export const UpdateBalancesParamsSchema = z - .object({ - feature_id: z.string(), - balance: z.number(), - }) - .or( - z.array( - z.object({ - feature_id: z.string(), - balance: z.number(), - }) - ) - ); + .object({ + feature_id: z.string(), + balance: z.number(), + }) + .or( + z.array( + z.object({ + feature_id: z.string(), + balance: z.number(), + }), + ), + ); export const DeleteCustomerParamsSchema = z.object({ - delete_in_stripe: z.boolean().optional(), + delete_in_stripe: z.boolean().optional(), }); export const ListCustomersParamsSchema = z.object({ - limit: z.number().optional(), - offset: z.number().optional(), + limit: z.number().optional(), + offset: z.number().optional(), + plans: z + .array( + z.object({ + id: z.string(), + versions: z.array(z.number()).optional(), + }), + ) + .optional(), + subscription_status: z.array(z.enum(["active", "scheduled"])).optional(), + search: z.string().optional(), }); export type ListCustomersParams = z.infer; export type DeleteCustomerParams = z.infer; export type UpdateBalancesParams = z.infer; export type UpdateBalancesResult = { success: boolean }; - -