147 lines
8.3 KiB
TypeScript

import type { ApiClientOptions } from "./infra/client"
import { AuthClient } from "./clients/auth"
import { CustomersClient } from "./clients/customers"
import { ReferralSourcesClient } from "./clients/referral-sources"
import { VehiclesClient } from "./clients/vehicles"
import { VehicleAttributesClient } from "./clients/vehicle-attributes"
import { VehicleDocumentsClient } from "./clients/vehicle-documents"
import { DepartmentsClient } from "./clients/departments"
import { EmployeesClient } from "./clients/employees"
import { GeoClient } from "./clients/geo"
import { PaymentTermsClient } from "./clients/payment-terms"
import { ShopTypesClient } from "./clients/shop-types"
import { InventoryClient } from "./clients/inventory"
import { VendorsClient } from "./clients/vendors"
import { InspectionsClient } from "./clients/inspections"
import { InspectionTemplatesClient } from "./clients/inspection-templates"
import { LabelsClient } from "./clients/labels"
import { InsuranceTypesClient } from "./clients/insurance-types"
import { EstimatesClient } from "./clients/estimates"
import { QuickRemarksClient } from "./clients/quick-remarks"
import { QuickNotesClient } from "./clients/quick-notes"
import { ShopRecommendationsClient } from "./clients/shop-recommendations"
import { JobCardsClient } from "./clients/job-cards"
import { PaymentModesClient } from "./clients/payment-modes"
import { PaymentReceivedClient } from "./clients/payment-received"
import { PartsClient } from "./clients/parts"
import { PurchaseOrdersClient } from "./clients/purchase-orders"
import { ServicesClient } from "./clients/services"
import { ServiceGroupsClient } from "./clients/service-groups"
import { ExpensesClient } from "./clients/expenses"
import { TasksClient } from "./clients/tasks"
import { TaskTypesClient } from "./clients/task-types"
import { TaskSectionsClient } from "./clients/task-sections"
import { AppointmentsClient } from "./clients/appointments"
import { ShopTimingsClient } from "./clients/shop-timings"
import { ShopCalendarsClient } from "./clients/shop-calendars"
import { HolidayYearsClient } from "./clients/holiday-years"
import { TaxesClient } from "./clients/taxes"
import { InvoicesClient } from "./clients/invoices"
import { HomeClient } from "./clients/home"
import { BillsClient } from "./clients/bills"
import { ReasonsClient } from "./clients/reasons"
import { HolidaysClient } from "./clients/holidays"
import { MakeAndModelsClient } from "./clients/make-and-models"
import { TimeSheetsClient } from "./clients/time-sheets"
import { InvoiceSequencesClient } from "./clients/invoice-sequences"
import { CreditNotesClient } from "./clients/credit-notes"
import { PaymentMadesClient } from "./clients/payment-mades"
import { VendorCreditsClient } from "./clients/vendor-credits"
import { InventoryAdjustmentsClient } from "./clients/inventory-adjustments"
import { ServiceGroupIncludesClient } from "./clients/service-group-includes"
import { ServiceGroupPricingsClient } from "./clients/service-group-pricings"
import { ServiceGroupServicesClient } from "./clients/service-group-services"
import { ServiceGroupPartsClient } from "./clients/service-group-parts"
import { SettingsClient } from "./clients/settings"
import { ConfigurationsClient } from "./clients/configurations"
import { AutoGenerateClient } from "./clients/auto-generate"
import { ExpenseItemsClient } from "./clients/expense-items"
import { InventoryCategoriesClient } from "./clients/inventory-categories"
import { DocumentPrintClient } from "./clients/document-print"
import { DocumentShareClient } from "./clients/document-share"
export type CreateApiOptions = ApiClientOptions & { baseUrl?: string }
/**
* Default base URL used when no explicit override is passed. The dashboard
* runs every browser call through the Next.js server proxy at /api/proxy so
* the build-time NEXT_PUBLIC_API_URL never reaches the client.
*
* Server-side callers (server actions, RSC) can opt out by passing
* `{ baseUrl: <absolute api URL> }` from a cookie.
*/
const DEFAULT_BASE_URL = "/api/proxy"
export function createApi(options?: CreateApiOptions) {
const baseUrl = options?.baseUrl ?? DEFAULT_BASE_URL
const restOptions: ApiClientOptions | undefined = options?.headers
? { headers: options.headers }
: undefined
return {
auth: new AuthClient(baseUrl, restOptions),
customers: new CustomersClient(baseUrl, restOptions),
referralSources: new ReferralSourcesClient(baseUrl, restOptions),
vehicles: new VehiclesClient(baseUrl, restOptions),
vehicleAttributes: new VehicleAttributesClient(baseUrl, restOptions),
vehicleDocuments: new VehicleDocumentsClient(baseUrl, restOptions),
departments: new DepartmentsClient(baseUrl, restOptions),
employees: new EmployeesClient(baseUrl, restOptions),
geo: new GeoClient(baseUrl, restOptions),
paymentTerms: new PaymentTermsClient(baseUrl, restOptions),
shopTypes: new ShopTypesClient(baseUrl, restOptions),
inventory: new InventoryClient(baseUrl, restOptions),
vendors: new VendorsClient(baseUrl, restOptions),
inspections: new InspectionsClient(baseUrl, restOptions),
inspectionTemplates: new InspectionTemplatesClient(baseUrl, restOptions),
labels: new LabelsClient(baseUrl, restOptions),
insuranceTypes: new InsuranceTypesClient(baseUrl, restOptions),
estimates: new EstimatesClient(baseUrl, restOptions),
quickRemarks: new QuickRemarksClient(baseUrl, restOptions),
quickNotes: new QuickNotesClient(baseUrl, restOptions),
shopRecommendations: new ShopRecommendationsClient(baseUrl, restOptions),
jobCards: new JobCardsClient(baseUrl, restOptions),
paymentModes: new PaymentModesClient(baseUrl, restOptions),
paymentReceived: new PaymentReceivedClient(baseUrl, restOptions),
parts: new PartsClient(baseUrl, restOptions),
purchaseOrders: new PurchaseOrdersClient(baseUrl, restOptions),
services: new ServicesClient(baseUrl, restOptions),
serviceGroups: new ServiceGroupsClient(baseUrl, restOptions),
expenses: new ExpensesClient(baseUrl, restOptions),
tasks: new TasksClient(baseUrl, restOptions),
taskTypes: new TaskTypesClient(baseUrl, restOptions),
taskSections: new TaskSectionsClient(baseUrl, restOptions),
appointments: new AppointmentsClient(baseUrl, restOptions),
shopTimings: new ShopTimingsClient(baseUrl, restOptions),
shopCalendars: new ShopCalendarsClient(baseUrl, restOptions),
holidayYears: new HolidayYearsClient(baseUrl, restOptions),
taxes: new TaxesClient(baseUrl, restOptions),
invoices: new InvoicesClient(baseUrl, restOptions),
home: new HomeClient(baseUrl, restOptions),
bills: new BillsClient(baseUrl, restOptions),
reasons: new ReasonsClient(baseUrl, restOptions),
holidays: new HolidaysClient(baseUrl, restOptions),
makeAndModels: new MakeAndModelsClient(baseUrl, restOptions),
timeSheets: new TimeSheetsClient(baseUrl, restOptions),
invoiceSequences: new InvoiceSequencesClient(baseUrl, restOptions),
creditNotes: new CreditNotesClient(baseUrl, restOptions),
paymentMades: new PaymentMadesClient(baseUrl, restOptions),
vendorCredits: new VendorCreditsClient(baseUrl, restOptions),
inventoryAdjustments: new InventoryAdjustmentsClient(baseUrl, restOptions),
serviceGroupIncludes: new ServiceGroupIncludesClient(baseUrl, restOptions),
serviceGroupPricings: new ServiceGroupPricingsClient(baseUrl, restOptions),
serviceGroupServices: new ServiceGroupServicesClient(baseUrl, restOptions),
serviceGroupParts: new ServiceGroupPartsClient(baseUrl, restOptions),
settings: new SettingsClient(baseUrl, restOptions),
configurations: new ConfigurationsClient(baseUrl, restOptions),
autoGenerate: new AutoGenerateClient(baseUrl, restOptions),
expenseItems: new ExpenseItemsClient(baseUrl, restOptions),
inventoryCategories: new InventoryCategoriesClient(baseUrl, restOptions),
documentPrint: new DocumentPrintClient(baseUrl, restOptions),
documentShare: new DocumentShareClient(baseUrl, restOptions),
}
}
/** Unauthenticated singleton — use for public calls (login, register). */
export const api = createApi()