@classytic/commerce-sdk 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/LICENSE +14 -0
  2. package/README.md +164 -0
  3. package/dist/adjustment-MNH3AT6S.js +5 -0
  4. package/dist/adjustment-MNH3AT6S.js.map +1 -0
  5. package/dist/analytics/index.d.ts +27 -0
  6. package/dist/analytics/index.js +6 -0
  7. package/dist/analytics/index.js.map +1 -0
  8. package/dist/analytics-DMcD-o8w.d.ts +76 -0
  9. package/dist/api-factory-B_h4RKBm.d.ts +280 -0
  10. package/dist/auth/index.d.ts +39 -0
  11. package/dist/auth/index.js +5 -0
  12. package/dist/auth/index.js.map +1 -0
  13. package/dist/catalog/index.d.ts +571 -0
  14. package/dist/catalog/index.js +9 -0
  15. package/dist/catalog/index.js.map +1 -0
  16. package/dist/chunk-24FDD6UR.js +75 -0
  17. package/dist/chunk-24FDD6UR.js.map +1 -0
  18. package/dist/chunk-2TF7QNYV.js +159 -0
  19. package/dist/chunk-2TF7QNYV.js.map +1 -0
  20. package/dist/chunk-2YAZ5WG6.js +479 -0
  21. package/dist/chunk-2YAZ5WG6.js.map +1 -0
  22. package/dist/chunk-36NLLAVH.js +177 -0
  23. package/dist/chunk-36NLLAVH.js.map +1 -0
  24. package/dist/chunk-3OYSJB3P.js +126 -0
  25. package/dist/chunk-3OYSJB3P.js.map +1 -0
  26. package/dist/chunk-5E57JODA.js +135 -0
  27. package/dist/chunk-5E57JODA.js.map +1 -0
  28. package/dist/chunk-7LZCW4VF.js +13 -0
  29. package/dist/chunk-7LZCW4VF.js.map +1 -0
  30. package/dist/chunk-ANYGZ6O5.js +830 -0
  31. package/dist/chunk-ANYGZ6O5.js.map +1 -0
  32. package/dist/chunk-AQAISI4F.js +183 -0
  33. package/dist/chunk-AQAISI4F.js.map +1 -0
  34. package/dist/chunk-B6MPVOV7.js +328 -0
  35. package/dist/chunk-B6MPVOV7.js.map +1 -0
  36. package/dist/chunk-CILP56G2.js +94 -0
  37. package/dist/chunk-CILP56G2.js.map +1 -0
  38. package/dist/chunk-ERQ52WHY.js +534 -0
  39. package/dist/chunk-ERQ52WHY.js.map +1 -0
  40. package/dist/chunk-FOTUJPM4.js +640 -0
  41. package/dist/chunk-FOTUJPM4.js.map +1 -0
  42. package/dist/chunk-IHCBBLLW.js +198 -0
  43. package/dist/chunk-IHCBBLLW.js.map +1 -0
  44. package/dist/chunk-J4JBQET2.js +76 -0
  45. package/dist/chunk-J4JBQET2.js.map +1 -0
  46. package/dist/chunk-L4OEI4VZ.js +123 -0
  47. package/dist/chunk-L4OEI4VZ.js.map +1 -0
  48. package/dist/chunk-LRV7MWWX.js +616 -0
  49. package/dist/chunk-LRV7MWWX.js.map +1 -0
  50. package/dist/chunk-N43VE355.js +126 -0
  51. package/dist/chunk-N43VE355.js.map +1 -0
  52. package/dist/chunk-PYYLHUV6.js +3 -0
  53. package/dist/chunk-PYYLHUV6.js.map +1 -0
  54. package/dist/chunk-QCTXAMLA.js +261 -0
  55. package/dist/chunk-QCTXAMLA.js.map +1 -0
  56. package/dist/chunk-RIKAPJNG.js +40 -0
  57. package/dist/chunk-RIKAPJNG.js.map +1 -0
  58. package/dist/chunk-U3XT35GZ.js +202 -0
  59. package/dist/chunk-U3XT35GZ.js.map +1 -0
  60. package/dist/chunk-W22WB3WZ.js +148 -0
  61. package/dist/chunk-W22WB3WZ.js.map +1 -0
  62. package/dist/chunk-WTIJMKML.js +27 -0
  63. package/dist/chunk-WTIJMKML.js.map +1 -0
  64. package/dist/chunk-X2CQFJPR.js +75 -0
  65. package/dist/chunk-X2CQFJPR.js.map +1 -0
  66. package/dist/chunk-YYFKLOKO.js +769 -0
  67. package/dist/chunk-YYFKLOKO.js.map +1 -0
  68. package/dist/client-Cs7E_usr.d.ts +113 -0
  69. package/dist/content/index.d.ts +309 -0
  70. package/dist/content/index.js +6 -0
  71. package/dist/content/index.js.map +1 -0
  72. package/dist/core/index.d.ts +166 -0
  73. package/dist/core/index.js +5 -0
  74. package/dist/core/index.js.map +1 -0
  75. package/dist/core/react.d.ts +107 -0
  76. package/dist/core/react.js +5 -0
  77. package/dist/core/react.js.map +1 -0
  78. package/dist/coupon-BZSZ0y3n.d.ts +129 -0
  79. package/dist/coupon-CDzL4bJG.d.ts +655 -0
  80. package/dist/crud.factory-DyKaPHcU.d.ts +181 -0
  81. package/dist/finance/index.d.ts +81 -0
  82. package/dist/finance/index.js +5 -0
  83. package/dist/finance/index.js.map +1 -0
  84. package/dist/finance-BJdfKRw0.d.ts +135 -0
  85. package/dist/index.d.ts +32 -0
  86. package/dist/index.js +29 -0
  87. package/dist/index.js.map +1 -0
  88. package/dist/inventory/index.d.ts +512 -0
  89. package/dist/inventory/index.js +16 -0
  90. package/dist/inventory/index.js.map +1 -0
  91. package/dist/inventory-B5pssqRx.d.ts +748 -0
  92. package/dist/logistics/index.d.ts +248 -0
  93. package/dist/logistics/index.js +7 -0
  94. package/dist/logistics/index.js.map +1 -0
  95. package/dist/logistics-CrpKadKE.d.ts +410 -0
  96. package/dist/media-CNLJK93J.d.ts +721 -0
  97. package/dist/movement-R3CERFAM.js +5 -0
  98. package/dist/movement-R3CERFAM.js.map +1 -0
  99. package/dist/order-B3dCvHgK.d.ts +360 -0
  100. package/dist/payment-BRboLqvU.d.ts +127 -0
  101. package/dist/payments/index.d.ts +55 -0
  102. package/dist/payments/index.js +6 -0
  103. package/dist/payments/index.js.map +1 -0
  104. package/dist/platform/index.d.ts +645 -0
  105. package/dist/platform/index.js +8 -0
  106. package/dist/platform/index.js.map +1 -0
  107. package/dist/pos-BCqkx2-K.d.ts +527 -0
  108. package/dist/product-p09zXkXB.d.ts +260 -0
  109. package/dist/purchase-54PER2PY.js +5 -0
  110. package/dist/purchase-54PER2PY.js.map +1 -0
  111. package/dist/request-MP6NV5ZE.js +5 -0
  112. package/dist/request-MP6NV5ZE.js.map +1 -0
  113. package/dist/sales/index.d.ts +587 -0
  114. package/dist/sales/index.js +9 -0
  115. package/dist/sales/index.js.map +1 -0
  116. package/dist/server.d.ts +23 -0
  117. package/dist/server.js +37 -0
  118. package/dist/server.js.map +1 -0
  119. package/dist/size-guide-DgjzjM5P.d.ts +554 -0
  120. package/dist/stock-2LP4HJSB.js +5 -0
  121. package/dist/stock-2LP4HJSB.js.map +1 -0
  122. package/dist/stock-CfrU5_Wr.d.ts +632 -0
  123. package/dist/supplier-BWJTRZ5Z.js +5 -0
  124. package/dist/supplier-BWJTRZ5Z.js.map +1 -0
  125. package/dist/transaction/index.d.ts +104 -0
  126. package/dist/transaction/index.js +8 -0
  127. package/dist/transaction/index.js.map +1 -0
  128. package/dist/transaction-Bf6WjYCh.d.ts +84 -0
  129. package/dist/transaction-dL3WW-er.d.ts +442 -0
  130. package/dist/transfer-4XSS6HWT.js +5 -0
  131. package/dist/transfer-4XSS6HWT.js.map +1 -0
  132. package/dist/user-data-DdLjAGwO.d.ts +132 -0
  133. package/package.json +147 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/logistics/api/logistics.ts","../src/logistics/hooks/logistics.ts"],"names":[],"mappings":"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","file":"chunk-2YAZ5WG6.js","sourcesContent":["// @/logistics/api/logistics.ts\r\nimport { BaseApi, type RequestOptions, type ApiResponse } from \"../../core/api-factory\";\nimport { handleApiRequest } from \"../../core/api-handler\";\nimport type {\n TrackingResult,\n PickupStore,\n LogisticsConfig,\n ProviderCharges,\n CreateShipmentPayload,\n UpdateShipmentStatusPayload,\n CancelShipmentPayload,\n ProviderName,\n CancelShipmentResult,\n} from \"../types/logistics\";\nimport type { OrderShipping } from \"../../sales/types/order\";\n\r\n// ==================== Request Options ====================\r\n\r\ntype FetchOptions = Omit<RequestOptions, 'token' | 'organizationId'>;\r\n\r\n// ==================== Logistics API ====================\r\n\r\n/**\r\n * Logistics API\n *\n * Manages logistics utilities and delivery charge calculation.\n *\r\n * NOTE: For area data (divisions, districts, areas), use @classytic/bd-areas directly:\r\n * ```typescript\r\n * import { searchAreas, getAreasByDistrict, getArea } from '@classytic/bd-areas';\r\n * ```\r\n *\r\n * Public Endpoints:\r\n * - GET /logistics/charge - Calculate delivery charge via provider (RedX)\r\n *\r\n * Shipping Endpoints (Admin/Store Manager):\n * - POST /orders/:id/shipping - Request shipping (manual or provider API)\n * - PATCH /orders/:id/shipping - Update shipping status\n * - GET /orders/:id/shipping - Get shipping info\n * - GET /logistics/shipments/:id/track - Track shipment\n * - POST /logistics/shipments/:id/cancel - Cancel shipment\n *\r\n * Admin Endpoints:\r\n * - GET /logistics/config - Get config (read-only)\r\n * - GET /logistics/pickup-stores - List pickup stores\r\n * - GET /logistics/health/circuit-status - Get circuit breaker status\r\n * - POST /logistics/health/circuit-reset/:provider - Reset circuit breaker\r\n */\r\nclass LogisticsApi extends BaseApi<OrderShipping, CreateShipmentPayload> {\n constructor(config = {}) {\r\n super('logistics', config);\r\n }\r\n\r\n // ============================================\r\n // CHARGE CALCULATION (Public)\r\n // ============================================\r\n\r\n /**\r\n * Calculate delivery charge via provider API (e.g., RedX)\r\n * GET /logistics/charge\r\n *\r\n * Use this to get real-time delivery charges from the logistics provider\r\n * before creating an order.\r\n *\r\n * @param deliveryAreaId - Area internalId from @classytic/bd-areas\r\n * @param amount - COD amount in BDT (use 0 for prepaid orders)\r\n * @param weight - Parcel weight in grams (default: 500g)\r\n *\r\n * @example\r\n * import { searchAreas } from '@classytic/bd-areas';\r\n *\r\n * // 1. User selects area\r\n * const areas = searchAreas('mohamm');\r\n * const selectedArea = areas[0]; // { internalId: 1206, name: 'Mohammadpur', ... }\r\n *\r\n * // 2. Calculate delivery charge\r\n * const { data } = await logisticsApi.calculateCharge({\r\n * deliveryAreaId: selectedArea.internalId,\r\n * amount: isCOD ? cartTotal : 0,\r\n * });\r\n * // { deliveryCharge: 60, codCharge: 15, totalCharge: 75 }\r\n */\r\n async calculateCharge({\r\n deliveryAreaId,\r\n pickupAreaId,\r\n amount,\r\n weight,\r\n provider,\r\n options = {},\r\n }: {\r\n deliveryAreaId: number;\r\n pickupAreaId?: number;\r\n amount: number;\r\n weight?: number;\r\n provider?: ProviderName;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<ProviderCharges>> {\r\n if (!deliveryAreaId || amount === undefined) {\r\n throw new Error(\"deliveryAreaId and amount are required\");\r\n }\r\n\r\n const queryString = this.createQueryString({\r\n deliveryAreaId,\r\n pickupAreaId,\r\n amount,\r\n weight,\r\n provider,\r\n });\r\n\r\n return handleApiRequest(\"GET\", `${this.baseUrl}/charge?${queryString}`, {\r\n cache: \"no-store\",\r\n ...options,\r\n });\r\n }\r\n\r\n // ============================================\r\n // CONFIG ENDPOINTS (Admin - Read-only)\r\n // ============================================\r\n\r\n /**\r\n * Get logistics configuration (read-only from .env)\r\n * GET /logistics/config\r\n *\r\n * NOTE: Configuration is managed via environment variables.\r\n * To change settings, update .env file and restart server.\r\n */\r\n async getConfig({\r\n token,\r\n options = {},\r\n }: {\r\n token: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<LogisticsConfig>> {\r\n return handleApiRequest(\"GET\", `${this.baseUrl}/config`, {\r\n token,\r\n cache: \"no-store\",\r\n ...options,\r\n });\r\n }\r\n\r\n // ============================================\r\n // PICKUP STORES (Admin)\r\n // ============================================\r\n\r\n /**\r\n * Get pickup stores from RedX API\r\n * GET /logistics/pickup-stores\r\n *\r\n * Pickup stores are created by admin in RedX dashboard.\r\n * Use this to list available pickup locations when creating shipments.\r\n *\r\n * @example\r\n * // Admin: List pickup stores for shipment creation\r\n * const { data: stores } = await logisticsApi.getPickupStores({ token });\r\n *\r\n * // Display in dropdown for admin to select\r\n * stores.forEach(store => {\r\n * console.log(`${store.name} - ${store.areaName} (ID: ${store.id})`);\r\n * });\r\n *\r\n * // Use selected store when creating shipment\r\n * await logisticsApi.createShipment({\r\n * token,\r\n * data: {\r\n * orderId: order._id,\r\n * pickupStoreId: selectedStore.id, // From dropdown\r\n * },\r\n * });\r\n */\r\n async getPickupStores({\r\n token,\r\n provider,\r\n options = {},\r\n }: {\r\n token: string;\r\n provider?: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<PickupStore[]>> {\r\n const queryString = provider ? `?provider=${provider}` : '';\r\n return handleApiRequest(\r\n \"GET\",\r\n `${this.baseUrl}/pickup-stores${queryString}`,\r\n {\r\n token,\r\n cache: \"no-store\",\r\n ...options,\r\n }\r\n );\r\n }\r\n\r\n // ============================================\n // SHIPPING ENDPOINTS (Admin/Store Manager)\n // ============================================\n\n /**\n * Request shipping for an order (manual or provider API)\n * POST /orders/:id/shipping\n *\n * This updates the order.shipping object and optionally triggers\n * provider API shipment creation when useProviderApi=true.\n *\n * @example\n * // Manual: Record tracking details\n * const shipping = await logisticsApi.createShipment({\n * token,\n * orderId: order._id,\n * data: {\n * provider: \"other\",\n * trackingNumber: \"COURIER123456\",\n * trackingUrl: \"https://courier-website.com/track/COURIER123456\",\n * },\n * });\n *\n * @example\n * // Provider API: Create shipment with pickup store\n * const { data: stores } = await logisticsApi.getPickupStores({ token });\n * const shipping = await logisticsApi.createShipment({\n * token,\n * orderId: order._id,\n * data: {\n * provider: \"redx\",\n * useProviderApi: true,\n * pickupStoreId: stores[0].id, // Select pickup location\n * weight: 500, // Parcel weight in grams\n * instructions: 'Handle with care',\n * },\n * });\n */\n async createShipment({\n token,\n orderId,\n data,\n options = {},\n }: {\n token: string;\n orderId: string;\n data: CreateShipmentPayload;\n options?: FetchOptions;\n }): Promise<ApiResponse<OrderShipping>> {\n if (!orderId) throw new Error(\"Order ID is required\");\n\n const response = await handleApiRequest<\n ApiResponse<OrderShipping> | ApiResponse<{ shipping: OrderShipping }>\n >(\"POST\", `${this.config.basePath}/orders/${orderId}/shipping`, {\n token,\n body: data,\n ...options,\n });\n\n const normalizedData =\n response.data && typeof response.data === \"object\" && \"shipping\" in response.data\n ? (response.data as { shipping: OrderShipping }).shipping\n : response.data;\n\n return {\n success: response.success,\n message: response.message,\n ...(normalizedData ? { data: normalizedData as OrderShipping } : {}),\n };\n }\n\n /**\n * Get shipping info for an order\n * GET /orders/:id/shipping\n */\n async getShipment({\n token,\n id,\n options = {},\n }: {\n token: string;\n id: string;\n options?: FetchOptions;\n }): Promise<ApiResponse<OrderShipping | null>> {\n if (!id) throw new Error(\"Order ID is required\");\n\n return handleApiRequest(\"GET\", `${this.config.basePath}/orders/${id}/shipping`, {\n token,\n cache: \"no-store\",\n ...options,\n });\n }\n\r\n /**\n * Track shipment (fetch latest from provider)\n * GET /logistics/shipments/:id/track\n *\n * @param id - Order ID or tracking number\n */\n async trackShipment({\n token,\n id,\n options = {},\n }: {\n token: string;\n id: string;\n options?: FetchOptions;\n }): Promise<ApiResponse<TrackingResult>> {\n if (!id) throw new Error(\"Shipment ID or tracking number is required\");\n\n return handleApiRequest(\"GET\", `${this.baseUrl}/shipments/${id}/track`, {\n token,\n cache: \"no-store\",\n ...options,\n });\r\n }\r\n\r\n /**\n * Update shipping status for an order\n * PATCH /orders/:id/shipping\n */\n async updateShipmentStatus({\n token,\n id,\n data,\n options = {},\n }: {\n token: string;\n id: string;\n data: UpdateShipmentStatusPayload;\n options?: FetchOptions;\n }): Promise<ApiResponse<OrderShipping>> {\n if (!id) throw new Error(\"Order ID is required\");\n if (!data?.status) throw new Error(\"Status is required\");\n\n return handleApiRequest(\"PATCH\", `${this.config.basePath}/orders/${id}/shipping`, {\n token,\n body: data,\n ...options,\n });\n }\n\r\n /**\n * Cancel shipment\n * POST /logistics/shipments/:id/cancel\n *\n * @param id - Order ID or tracking number\n */\n async cancelShipment({\n token,\n id,\n data,\n options = {},\n }: {\n token: string;\n id: string;\n data?: CancelShipmentPayload;\n options?: FetchOptions;\n }): Promise<ApiResponse<CancelShipmentResult>> {\n if (!id) throw new Error(\"Shipment ID or tracking number is required\");\n\n return handleApiRequest(\"POST\", `${this.baseUrl}/shipments/${id}/cancel`, {\n token,\n body: data || {},\r\n ...options,\r\n });\r\n }\r\n\r\n // ============================================\r\n // HEALTH & MONITORING (Admin)\r\n // ============================================\r\n\r\n /**\r\n * Get circuit breaker status for all providers\r\n * GET /logistics/health/circuit-status\r\n */\r\n async getCircuitStatus({\r\n token,\r\n options = {},\r\n }: {\r\n token: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Record<string, { state: string; failureCount: number }>>> {\r\n return handleApiRequest(\"GET\", `${this.baseUrl}/health/circuit-status`, {\r\n token,\r\n cache: \"no-store\",\r\n ...options,\r\n });\r\n }\r\n\r\n /**\r\n * Reset circuit breaker for a provider\r\n * POST /logistics/health/circuit-reset/:provider\r\n */\r\n async resetProviderCircuit({\r\n token,\r\n provider,\r\n options = {},\r\n }: {\r\n token: string;\r\n provider: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<{ message: string }>> {\r\n if (!provider) throw new Error(\"Provider name is required\");\r\n\r\n return handleApiRequest(\r\n \"POST\",\r\n `${this.baseUrl}/health/circuit-reset/${provider}`,\r\n {\r\n token,\r\n body: {},\r\n ...options,\r\n }\r\n );\r\n }\r\n}\r\n\r\n// Create and export singleton instance\r\nexport const logisticsApi = new LogisticsApi();\r\n\r\n// Export class for custom configurations\r\nexport { LogisticsApi };\r\n","\"use client\";\n\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { logisticsApi } from \"../api/logistics\";\nimport { getToastHandler } from \"../../core/react/mutation.factory\";\nimport type {\n PickupStore,\n TrackingResult,\n CreateShipmentPayload,\n ProviderCharges,\n ProviderName,\n CancelShipmentResult,\n} from \"../types/logistics\";\nimport type { OrderShipping, ShippingStatus } from \"../../sales/types/order\";\n\n// ============================================\n// Query Keys\n// ============================================\n\nexport const LOGISTICS_KEYS = {\n all: [\"logistics\"] as const,\n pickupStores: (provider?: string) => [...LOGISTICS_KEYS.all, \"pickup-stores\", provider] as const,\n shipment: (id: string) => [...LOGISTICS_KEYS.all, \"shipment\", id] as const,\n tracking: (id: string) => [...LOGISTICS_KEYS.all, \"tracking\", id] as const,\n charge: (params: { deliveryAreaId: number; amount: number; weight?: number }) =>\n [...LOGISTICS_KEYS.all, \"charge\", params] as const,\n config: () => [...LOGISTICS_KEYS.all, \"config\"] as const,\n};\n\n// ============================================\n// Types\n// ============================================\n\ninterface QueryOptions {\n enabled?: boolean;\n staleTime?: number;\n refetchInterval?: number | false;\n}\n\ninterface ChargeParams {\n deliveryAreaId: number;\n pickupAreaId?: number;\n amount: number;\n weight?: number;\n provider?: ProviderName;\n}\n\ninterface UseDeliveryChargeParams {\n deliveryAreaId: number | null | undefined;\n amount: number;\n weight?: number;\n enabled?: boolean;\n}\n\nexport interface UseDeliveryChargeReturn {\n charges: ProviderCharges | null;\n deliveryCharge: number;\n codCharge: number;\n totalCharge: number;\n isLoading: boolean;\n isFetching: boolean;\n error: Error | null;\n refetch: () => void;\n}\n\nexport interface UseLogisticsActionsReturn {\n createShipment: (params: { orderId: string; data: CreateShipmentPayload }) => Promise<OrderShipping | undefined>;\n isCreatingShipment: boolean;\n cancelShipment: (params: { shipmentId: string; reason?: string }) => Promise<CancelShipmentResult | undefined>;\n isCancellingShipment: boolean;\n updateShipmentStatus: (params: { shipmentId: string; data: UpdateShipmentStatusParams }) => Promise<OrderShipping | undefined>;\n isUpdatingStatus: boolean;\n isLoading: boolean;\n}\n\ninterface UpdateShipmentStatusParams {\n status: ShippingStatus | string;\n note?: string;\n metadata?: Record<string, unknown>;\n}\n\n// ============================================\n// Query Hooks\n// ============================================\n\n/**\n * Fetch pickup stores from logistics provider\n *\n * @param token - Auth token (admin required)\n * @param provider - Optional provider filter\n * @param options - Query options\n *\n * @example\n * ```tsx\n * function PickupStoreSelect() {\n * const { data: stores, isLoading } = usePickupStores(token);\n *\n * return (\n * <Select>\n * {stores?.map(store => (\n * <SelectItem key={store.id} value={store.id.toString()}>\n * {store.name} - {store.areaName}\n * </SelectItem>\n * ))}\n * </Select>\n * );\n * }\n * ```\n */\nexport function usePickupStores(\n token: string,\n provider?: string,\n options: QueryOptions = {}\n) {\n return useQuery({\n queryKey: LOGISTICS_KEYS.pickupStores(provider),\n queryFn: async (): Promise<PickupStore[]> => {\n const response = await logisticsApi.getPickupStores({ token, provider });\n return response.data || [];\n },\n enabled: options.enabled !== false && !!token,\n staleTime: options.staleTime ?? 5 * 60 * 1000,\n });\n}\n\n/**\n * Calculate delivery charge via provider API\n *\n * @param token - Auth token (optional for public)\n * @param params - Charge calculation parameters\n * @param options - Query options\n *\n * @example\n * ```tsx\n * const { data: charges } = useDeliveryChargeCalculation(token, {\n * deliveryAreaId: 1206,\n * amount: isCOD ? cartTotal : 0,\n * });\n * ```\n */\nexport function useDeliveryChargeCalculation(\n token: string | null,\n params: ChargeParams | null,\n options: QueryOptions = {}\n) {\n const hasValidParams = !!params?.deliveryAreaId && params?.amount !== undefined;\n\n return useQuery({\n queryKey: LOGISTICS_KEYS.charge(\n params\n ? { deliveryAreaId: params.deliveryAreaId, amount: params.amount, weight: params.weight }\n : { deliveryAreaId: 0, amount: 0 }\n ),\n queryFn: async (): Promise<ProviderCharges> => {\n if (!params) throw new Error(\"Params required\");\n const response = await logisticsApi.calculateCharge({\n deliveryAreaId: params.deliveryAreaId,\n pickupAreaId: params.pickupAreaId,\n amount: params.amount,\n weight: params.weight,\n provider: params.provider,\n });\n if (!response.data) throw new Error(\"No charge data returned\");\n return response.data;\n },\n enabled: options.enabled !== false && hasValidParams,\n staleTime: options.staleTime ?? 60 * 1000,\n });\n}\n\n/**\n * Convenience hook for delivery charge with extracted values\n *\n * @param params - Delivery charge parameters\n *\n * @example\n * ```tsx\n * function CheckoutDelivery({ areaId, subtotal, isCOD }) {\n * const { deliveryCharge, isLoading } = useDeliveryCharge({\n * deliveryAreaId: areaId,\n * amount: isCOD ? subtotal : 0,\n * });\n *\n * return (\n * <p>Delivery: {isLoading ? \"...\" : `৳${deliveryCharge}`}</p>\n * );\n * }\n * ```\n */\nexport function useDeliveryCharge({\n deliveryAreaId,\n amount,\n weight = 500,\n enabled = true,\n}: UseDeliveryChargeParams): UseDeliveryChargeReturn {\n const { data, isLoading, isFetching, error, refetch } = useQuery<ProviderCharges | null>({\n queryKey: LOGISTICS_KEYS.charge({\n deliveryAreaId: deliveryAreaId || 0,\n amount,\n weight,\n }),\n queryFn: async () => {\n if (!deliveryAreaId) return null;\n\n const response = await logisticsApi.calculateCharge({\n deliveryAreaId,\n amount,\n weight,\n });\n\n return response.data || null;\n },\n enabled: enabled && !!deliveryAreaId,\n staleTime: 5 * 60 * 1000,\n gcTime: 10 * 60 * 1000,\n retry: 1,\n });\n\n return {\n charges: data || null,\n deliveryCharge: data?.deliveryCharge ?? 0,\n codCharge: data?.codCharge ?? 0,\n totalCharge: data?.totalCharge ?? 0,\n isLoading,\n isFetching,\n error: error as Error | null,\n refetch,\n };\n}\n\n/**\n * Get shipping info by order ID\n *\n * @param token - Auth token\n * @param orderId - Order ID\n * @param options - Query options\n */\nexport function useShipment(\n token: string,\n orderId: string | null,\n options: QueryOptions = {}\n) {\n return useQuery({\n queryKey: LOGISTICS_KEYS.shipment(orderId || \"\"),\n queryFn: async (): Promise<OrderShipping> => {\n if (!orderId) throw new Error(\"Order ID required\");\n const response = await logisticsApi.getShipment({ token, id: orderId });\n if (!response.data) throw new Error(\"Shipping info not found\");\n return response.data;\n },\n enabled: options.enabled !== false && !!token && !!orderId,\n staleTime: options.staleTime ?? 30 * 1000,\n });\n}\n\n/**\n * Track shipment - fetches latest status from provider\n *\n * @param token - Auth token\n * @param shipmentId - Order ID or tracking number\n * @param options - Query options (supports refetchInterval for auto-refresh)\n *\n * @example\n * ```tsx\n * function ShipmentTracker({ shipmentId }) {\n * const { data, isLoading } = useTrackShipment(token, shipmentId, {\n * refetchInterval: 5 * 60 * 1000, // Auto-refresh every 5 minutes\n * });\n *\n * return (\n * <Timeline events={data?.tracking?.timeline || []} />\n * );\n * }\n * ```\n */\nexport function useTrackShipment(\n token: string,\n shipmentId: string | null,\n options: QueryOptions = {}\n) {\n return useQuery({\n queryKey: LOGISTICS_KEYS.tracking(shipmentId || \"\"),\n queryFn: async (): Promise<TrackingResult> => {\n if (!shipmentId) throw new Error(\"Order ID or tracking number required\");\n const response = await logisticsApi.trackShipment({ token, id: shipmentId });\n if (!response.data) throw new Error(\"Tracking data not found\");\n return response.data;\n },\n enabled: options.enabled !== false && !!token && !!shipmentId,\n staleTime: options.staleTime ?? 60 * 1000,\n refetchInterval: options.refetchInterval ?? 5 * 60 * 1000,\n });\n}\n\n// ============================================\n// Mutation Hooks\n// ============================================\n\n/**\n * Create shipment mutation\n *\n * @param token - Auth token\n *\n * @example\n * ```tsx\n * function CreateShipmentButton({ order }) {\n * const { mutate, isPending } = useCreateShipment(token);\n *\n * return (\n * <Button\n * onClick={() =>\n * mutate({\n * orderId: order._id,\n * data: { provider: \"redx\", useProviderApi: true },\n * })\n * }\n * disabled={isPending}\n * >\n * Create Shipment\n * </Button>\n * );\n * }\n * ```\n */\nexport function useCreateShipment(token: string) {\n const queryClient = useQueryClient();\n const toast = getToastHandler();\n\n return useMutation({\n mutationFn: async ({ orderId, data }: { orderId: string; data: CreateShipmentPayload }) => {\n const response = await logisticsApi.createShipment({ token, orderId, data });\n return response.data;\n },\n onSuccess: () => {\n toast.success(\"Shipment created successfully\");\n queryClient.invalidateQueries({ queryKey: [\"orders\"] });\n queryClient.invalidateQueries({ queryKey: LOGISTICS_KEYS.all });\n },\n onError: (error: Error) => {\n toast.error(error.message || \"Failed to create shipment\");\n },\n });\n}\n\n/**\n * Cancel shipment mutation\n *\n * @param token - Auth token\n */\nexport function useCancelShipment(token: string) {\n const queryClient = useQueryClient();\n const toast = getToastHandler();\n\n return useMutation({\n mutationFn: async ({ shipmentId, reason }: { shipmentId: string; reason?: string }) => {\n const response = await logisticsApi.cancelShipment({\n token,\n id: shipmentId,\n data: { reason },\n });\n return response.data;\n },\n onSuccess: () => {\n toast.success(\"Shipment cancelled\");\n queryClient.invalidateQueries({ queryKey: [\"orders\"] });\n queryClient.invalidateQueries({ queryKey: LOGISTICS_KEYS.all });\n },\n onError: (error: Error) => {\n toast.error(error.message || \"Failed to cancel shipment\");\n },\n });\n}\n\n/**\n * Update shipment status mutation\n *\n * @param token - Auth token\n */\nexport function useUpdateShipmentStatus(token: string) {\n const queryClient = useQueryClient();\n const toast = getToastHandler();\n\n return useMutation({\n mutationFn: async ({\n shipmentId,\n data,\n }: {\n shipmentId: string;\n data: UpdateShipmentStatusParams;\n }) => {\n const response = await logisticsApi.updateShipmentStatus({\n token,\n id: shipmentId,\n data,\n });\n return response.data;\n },\n onSuccess: () => {\n toast.success(\"Shipment status updated\");\n queryClient.invalidateQueries({ queryKey: [\"orders\"] });\n queryClient.invalidateQueries({ queryKey: LOGISTICS_KEYS.all });\n },\n onError: (error: Error) => {\n toast.error(error.message || \"Failed to update status\");\n },\n });\n}\n\n/**\n * Combined hook for all logistics mutations\n *\n * @param token - Auth token\n *\n * @example\n * ```tsx\n * function ShipmentActions({ order }) {\n * const {\n * createShipment,\n * cancelShipment,\n * isLoading,\n * } = useLogisticsActions(token);\n *\n * return (\n * <>\n * <Button\n * onClick={() =>\n * createShipment({\n * orderId: order._id,\n * data: { provider: \"redx\", useProviderApi: true },\n * })\n * }\n * >\n * Create Shipment\n * </Button>\n * <Button onClick={() => cancelShipment({ shipmentId: order._id })}>\n * Cancel\n * </Button>\n * </>\n * );\n * }\n * ```\n */\nexport function useLogisticsActions(token: string): UseLogisticsActionsReturn {\n const createShipmentMutation = useCreateShipment(token);\n const cancelShipmentMutation = useCancelShipment(token);\n const updateStatusMutation = useUpdateShipmentStatus(token);\n\n return {\n createShipment: createShipmentMutation.mutateAsync,\n isCreatingShipment: createShipmentMutation.isPending,\n cancelShipment: cancelShipmentMutation.mutateAsync,\n isCancellingShipment: cancelShipmentMutation.isPending,\n updateShipmentStatus: updateStatusMutation.mutateAsync,\n isUpdatingStatus: updateStatusMutation.isPending,\n isLoading:\n createShipmentMutation.isPending ||\n cancelShipmentMutation.isPending ||\n updateStatusMutation.isPending,\n };\n}\n"]}
@@ -0,0 +1,177 @@
1
+ import { BaseApi } from './chunk-QCTXAMLA.js';
2
+ import { handleApiRequest } from './chunk-IHCBBLLW.js';
3
+
4
+ // src/inventory/api/transfer.ts
5
+ var TransferApi = class extends BaseApi {
6
+ constructor(config = {}) {
7
+ super("inventory/transfers", config);
8
+ }
9
+ /**
10
+ * List transfers with filtering
11
+ * GET /inventory/transfers
12
+ */
13
+ async list({
14
+ token,
15
+ params = {},
16
+ options = {}
17
+ }) {
18
+ const processedParams = this.prepareParams(params);
19
+ const queryString = this.createQueryString(processedParams);
20
+ return handleApiRequest("GET", `${this.baseUrl}?${queryString}`, {
21
+ token,
22
+ cache: this.config.cache,
23
+ ...options
24
+ });
25
+ }
26
+ /**
27
+ * Get transfer by ID or challan number
28
+ * GET /inventory/transfers/:id
29
+ */
30
+ async getById({
31
+ token,
32
+ id,
33
+ options = {}
34
+ }) {
35
+ if (!id) {
36
+ throw new Error("Transfer ID or challan number is required");
37
+ }
38
+ return handleApiRequest("GET", `${this.baseUrl}/${id}`, {
39
+ token,
40
+ cache: this.config.cache,
41
+ ...options
42
+ });
43
+ }
44
+ /**
45
+ * Create a new transfer (draft)
46
+ * POST /inventory/transfers
47
+ */
48
+ async create({
49
+ token,
50
+ data,
51
+ options = {}
52
+ }) {
53
+ return handleApiRequest("POST", this.baseUrl, {
54
+ token,
55
+ body: data,
56
+ cache: this.config.cache,
57
+ ...options
58
+ });
59
+ }
60
+ /**
61
+ * Update a draft transfer
62
+ * PATCH /inventory/transfers/:id
63
+ */
64
+ async update({
65
+ token,
66
+ id,
67
+ data,
68
+ options = {}
69
+ }) {
70
+ if (!id) {
71
+ throw new Error("Transfer ID is required");
72
+ }
73
+ return handleApiRequest("PATCH", `${this.baseUrl}/${id}`, {
74
+ token,
75
+ body: data,
76
+ cache: this.config.cache,
77
+ ...options
78
+ });
79
+ }
80
+ /**
81
+ * Get transfer statistics
82
+ * GET /inventory/transfers/stats
83
+ */
84
+ async stats({
85
+ token,
86
+ params = {},
87
+ options = {}
88
+ }) {
89
+ const queryString = this.createQueryString(params);
90
+ const url = queryString ? `${this.baseUrl}/stats?${queryString}` : `${this.baseUrl}/stats`;
91
+ return handleApiRequest("GET", url, {
92
+ token,
93
+ cache: this.config.cache,
94
+ ...options
95
+ });
96
+ }
97
+ // ==================== Transfer Actions (Stripe Pattern) ====================
98
+ /**
99
+ * Generic action endpoint
100
+ * POST /inventory/transfers/:id/action
101
+ */
102
+ async action({
103
+ token,
104
+ id,
105
+ action,
106
+ data = {},
107
+ options = {}
108
+ }) {
109
+ if (!id) {
110
+ throw new Error("Transfer ID is required");
111
+ }
112
+ return handleApiRequest("POST", `${this.baseUrl}/${id}/action`, {
113
+ token,
114
+ body: { action, ...data },
115
+ cache: this.config.cache,
116
+ ...options
117
+ });
118
+ }
119
+ /**
120
+ * Approve a transfer (validates stock availability)
121
+ */
122
+ async approve({
123
+ token,
124
+ id,
125
+ options = {}
126
+ }) {
127
+ return this.action({ token, id, action: "approve", options });
128
+ }
129
+ /**
130
+ * Dispatch a transfer (decrements sender stock)
131
+ */
132
+ async dispatch({
133
+ token,
134
+ id,
135
+ data,
136
+ options = {}
137
+ }) {
138
+ return this.action({ token, id, action: "dispatch", data, options });
139
+ }
140
+ /**
141
+ * Mark transfer as in-transit
142
+ */
143
+ async markInTransit({
144
+ token,
145
+ id,
146
+ options = {}
147
+ }) {
148
+ return this.action({ token, id, action: "in-transit", options });
149
+ }
150
+ /**
151
+ * Receive a transfer (increments receiver stock)
152
+ */
153
+ async receive({
154
+ token,
155
+ id,
156
+ data,
157
+ options = {}
158
+ }) {
159
+ return this.action({ token, id, action: "receive", data, options });
160
+ }
161
+ /**
162
+ * Cancel a transfer
163
+ */
164
+ async cancel({
165
+ token,
166
+ id,
167
+ reason,
168
+ options = {}
169
+ }) {
170
+ return this.action({ token, id, action: "cancel", data: { reason }, options });
171
+ }
172
+ };
173
+ var transferApi = new TransferApi();
174
+
175
+ export { TransferApi, transferApi };
176
+ //# sourceMappingURL=chunk-36NLLAVH.js.map
177
+ //# sourceMappingURL=chunk-36NLLAVH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/inventory/api/transfer.ts"],"names":[],"mappings":"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","file":"chunk-36NLLAVH.js","sourcesContent":["/**\r\n * Transfer API - Inter-branch Stock Movement\r\n *\r\n * Handles challan/transfer documents following the Stripe action-based pattern.\r\n * Status flow: draft -> approved -> dispatched -> in_transit -> received\r\n */\r\n\r\nimport { BaseApi, type ApiResponse, type PaginatedResponse, type RequestOptions } from \"../../core/api-factory\";\r\nimport { handleApiRequest } from \"../../core/api-handler\";\r\nimport type {\r\n Transfer,\r\n CreateTransferPayload,\r\n UpdateTransferPayload,\r\n DispatchTransferPayload,\r\n ReceiveTransferPayload,\r\n TransferStats,\r\n} from \"../types\";\r\n\r\ntype FetchOptions = Omit<RequestOptions, \"token\" | \"organizationId\">;\r\n\r\nclass TransferApi extends BaseApi<Transfer, CreateTransferPayload, UpdateTransferPayload> {\r\n constructor(config = {}) {\r\n super(\"inventory/transfers\", config);\r\n }\r\n\r\n /**\r\n * List transfers with filtering\r\n * GET /inventory/transfers\r\n */\r\n async list({\r\n token,\r\n params = {},\r\n options = {},\r\n }: {\r\n token: string;\r\n params?: Record<string, unknown>;\r\n options?: FetchOptions;\r\n }): Promise<PaginatedResponse<Transfer>> {\r\n const processedParams = this.prepareParams(params);\r\n const queryString = this.createQueryString(processedParams);\r\n\r\n return handleApiRequest(\"GET\", `${this.baseUrl}?${queryString}`, {\r\n token,\r\n cache: this.config.cache,\r\n ...options,\r\n });\r\n }\r\n\r\n /**\r\n * Get transfer by ID or challan number\r\n * GET /inventory/transfers/:id\r\n */\r\n async getById({\r\n token,\r\n id,\r\n options = {},\r\n }: {\r\n token: string;\r\n id: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n if (!id) {\r\n throw new Error(\"Transfer ID or challan number is required\");\r\n }\r\n\r\n return handleApiRequest(\"GET\", `${this.baseUrl}/${id}`, {\r\n token,\r\n cache: this.config.cache,\r\n ...options,\r\n });\r\n }\r\n\r\n /**\r\n * Create a new transfer (draft)\r\n * POST /inventory/transfers\r\n */\r\n async create({\r\n token,\r\n data,\r\n options = {},\r\n }: {\r\n token: string;\r\n data: CreateTransferPayload;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n return handleApiRequest(\"POST\", this.baseUrl, {\r\n token,\r\n body: data,\r\n cache: this.config.cache,\r\n ...options,\r\n });\r\n }\r\n\r\n /**\r\n * Update a draft transfer\r\n * PATCH /inventory/transfers/:id\r\n */\r\n async update({\r\n token,\r\n id,\r\n data,\r\n options = {},\r\n }: {\r\n token: string;\r\n id: string;\r\n data: UpdateTransferPayload;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n if (!id) {\r\n throw new Error(\"Transfer ID is required\");\r\n }\r\n\r\n return handleApiRequest(\"PATCH\", `${this.baseUrl}/${id}`, {\r\n token,\r\n body: data,\r\n cache: this.config.cache,\r\n ...options,\r\n });\r\n }\r\n\r\n /**\r\n * Get transfer statistics\r\n * GET /inventory/transfers/stats\r\n */\r\n async stats({\r\n token,\r\n params = {},\r\n options = {},\r\n }: {\r\n token: string;\r\n params?: { branchId?: string };\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<TransferStats>> {\r\n const queryString = this.createQueryString(params);\r\n const url = queryString ? `${this.baseUrl}/stats?${queryString}` : `${this.baseUrl}/stats`;\r\n\r\n return handleApiRequest(\"GET\", url, {\r\n token,\r\n cache: this.config.cache,\r\n ...options,\r\n });\r\n }\r\n\r\n // ==================== Transfer Actions (Stripe Pattern) ====================\r\n\r\n /**\r\n * Generic action endpoint\r\n * POST /inventory/transfers/:id/action\r\n */\r\n async action({\r\n token,\r\n id,\r\n action,\r\n data = {},\r\n options = {},\r\n }: {\r\n token: string;\r\n id: string;\r\n action: \"approve\" | \"dispatch\" | \"in-transit\" | \"receive\" | \"cancel\";\r\n data?: Record<string, unknown>;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n if (!id) {\r\n throw new Error(\"Transfer ID is required\");\r\n }\r\n\r\n return handleApiRequest(\"POST\", `${this.baseUrl}/${id}/action`, {\r\n token,\r\n body: { action, ...data },\r\n cache: this.config.cache,\r\n ...options,\r\n });\r\n }\r\n\r\n /**\r\n * Approve a transfer (validates stock availability)\r\n */\r\n async approve({\r\n token,\r\n id,\r\n options = {},\r\n }: {\r\n token: string;\r\n id: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n return this.action({ token, id, action: \"approve\", options });\r\n }\r\n\r\n /**\r\n * Dispatch a transfer (decrements sender stock)\r\n */\r\n async dispatch({\r\n token,\r\n id,\r\n data,\r\n options = {},\r\n }: {\r\n token: string;\r\n id: string;\r\n data?: DispatchTransferPayload;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n return this.action({ token, id, action: \"dispatch\", data: data as Record<string, unknown>, options });\r\n }\r\n\r\n /**\r\n * Mark transfer as in-transit\r\n */\r\n async markInTransit({\r\n token,\r\n id,\r\n options = {},\r\n }: {\r\n token: string;\r\n id: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n return this.action({ token, id, action: \"in-transit\", options });\r\n }\r\n\r\n /**\r\n * Receive a transfer (increments receiver stock)\r\n */\r\n async receive({\r\n token,\r\n id,\r\n data,\r\n options = {},\r\n }: {\r\n token: string;\r\n id: string;\r\n data?: ReceiveTransferPayload;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n return this.action({ token, id, action: \"receive\", data: data as Record<string, unknown>, options });\r\n }\r\n\r\n /**\r\n * Cancel a transfer\r\n */\r\n async cancel({\r\n token,\r\n id,\r\n reason,\r\n options = {},\r\n }: {\r\n token: string;\r\n id: string;\r\n reason?: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n return this.action({ token, id, action: \"cancel\", data: { reason }, options });\r\n }\r\n}\r\n\r\nexport const transferApi = new TransferApi();\r\nexport { TransferApi };\r\n"]}
@@ -0,0 +1,126 @@
1
+ import { BaseApi } from './chunk-QCTXAMLA.js';
2
+ import { handleApiRequest } from './chunk-IHCBBLLW.js';
3
+
4
+ // src/inventory/api/adjustment.ts
5
+ var AdjustmentApi = class extends BaseApi {
6
+ constructor(config = {}) {
7
+ super("inventory/adjustments", config);
8
+ }
9
+ /**
10
+ * Create a manual stock adjustment
11
+ * POST /inventory/adjustments
12
+ *
13
+ * @example Single item adjustment
14
+ * adjustmentApi.create({
15
+ * token,
16
+ * data: {
17
+ * productId: '...',
18
+ * variantSku: 'SKU-RED-M',
19
+ * quantity: 5,
20
+ * mode: 'remove',
21
+ * reason: 'damaged',
22
+ * lostAmount: 2500 // Creates expense transaction (opt-in)
23
+ * }
24
+ * })
25
+ *
26
+ * @example Bulk adjustment
27
+ * adjustmentApi.create({
28
+ * token,
29
+ * data: {
30
+ * adjustments: [
31
+ * { productId: '...', quantity: 5, mode: 'add' },
32
+ * { productId: '...', quantity: 3, mode: 'remove' }
33
+ * ],
34
+ * reason: 'inventory recount'
35
+ * }
36
+ * })
37
+ */
38
+ async create({
39
+ token,
40
+ data,
41
+ options = {}
42
+ }) {
43
+ return handleApiRequest("POST", this.baseUrl, {
44
+ token,
45
+ body: data,
46
+ cache: this.config.cache,
47
+ ...options
48
+ });
49
+ }
50
+ /**
51
+ * Adjust stock (single item, POS format)
52
+ * POST /inventory/adjustments
53
+ */
54
+ async adjustStock({
55
+ token,
56
+ data,
57
+ options = {}
58
+ }) {
59
+ return handleApiRequest("POST", this.baseUrl, {
60
+ token,
61
+ body: data,
62
+ cache: this.config.cache,
63
+ ...options
64
+ });
65
+ }
66
+ /**
67
+ * Add stock to a product
68
+ */
69
+ async addStock({
70
+ token,
71
+ productId,
72
+ variantSku,
73
+ quantity,
74
+ branchId,
75
+ reason,
76
+ options = {}
77
+ }) {
78
+ return this.adjustStock({
79
+ token,
80
+ data: { productId, variantSku, quantity, mode: "add", branchId, reason },
81
+ options
82
+ });
83
+ }
84
+ /**
85
+ * Remove stock from a product
86
+ */
87
+ async removeStock({
88
+ token,
89
+ productId,
90
+ variantSku,
91
+ quantity,
92
+ branchId,
93
+ reason,
94
+ lostAmount,
95
+ options = {}
96
+ }) {
97
+ return this.create({
98
+ token,
99
+ data: { productId, variantSku, quantity, mode: "remove", branchId, reason, lostAmount },
100
+ options
101
+ });
102
+ }
103
+ /**
104
+ * Set stock to a specific quantity
105
+ */
106
+ async setStock({
107
+ token,
108
+ productId,
109
+ variantSku,
110
+ quantity,
111
+ branchId,
112
+ reason,
113
+ options = {}
114
+ }) {
115
+ return this.adjustStock({
116
+ token,
117
+ data: { productId, variantSku, quantity, mode: "set", branchId, reason },
118
+ options
119
+ });
120
+ }
121
+ };
122
+ var adjustmentApi = new AdjustmentApi();
123
+
124
+ export { AdjustmentApi, adjustmentApi };
125
+ //# sourceMappingURL=chunk-3OYSJB3P.js.map
126
+ //# sourceMappingURL=chunk-3OYSJB3P.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/inventory/api/adjustment.ts"],"names":[],"mappings":";;;;AAiBA,IAAM,aAAA,GAAN,cAA4B,OAAA,CAAoD;AAAA,EAC9E,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACvB,IAAA,KAAA,CAAM,yBAAyB,MAAM,CAAA;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+BA,MAAM,MAAA,CAAO;AAAA,IACX,KAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAU;AAAC,GACb,EAI4C;AAC1C,IAAA,OAAO,gBAAA,CAAiB,MAAA,EAAQ,IAAA,CAAK,OAAA,EAAS;AAAA,MAC5C,KAAA;AAAA,MACA,IAAA,EAAM,IAAA;AAAA,MACN,KAAA,EAAO,KAAK,MAAA,CAAO,KAAA;AAAA,MACnB,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,WAAA,CAAY;AAAA,IAChB,KAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAU;AAAC,GACb,EAI4C;AAC1C,IAAA,OAAO,gBAAA,CAAiB,MAAA,EAAQ,IAAA,CAAK,OAAA,EAAS;AAAA,MAC5C,KAAA;AAAA,MACA,IAAA,EAAM,IAAA;AAAA,MACN,KAAA,EAAO,KAAK,MAAA,CAAO,KAAA;AAAA,MACnB,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,CAAS;AAAA,IACb,KAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAU;AAAC,GACb,EAQ4C;AAC1C,IAAA,OAAO,KAAK,WAAA,CAAY;AAAA,MACtB,KAAA;AAAA,MACA,IAAA,EAAM,EAAE,SAAA,EAAW,UAAA,EAAY,UAAU,IAAA,EAAM,KAAA,EAAO,UAAU,MAAA,EAAO;AAAA,MACvE;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CAAY;AAAA,IAChB,KAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAU;AAAC,GACb,EAS4C;AAC1C,IAAA,OAAO,KAAK,MAAA,CAAO;AAAA,MACjB,KAAA;AAAA,MACA,IAAA,EAAM,EAAE,SAAA,EAAW,UAAA,EAAY,UAAU,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAW;AAAA,MACtF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,CAAS;AAAA,IACb,KAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAU;AAAC,GACb,EAQ4C;AAC1C,IAAA,OAAO,KAAK,WAAA,CAAY;AAAA,MACtB,KAAA;AAAA,MACA,IAAA,EAAM,EAAE,SAAA,EAAW,UAAA,EAAY,UAAU,IAAA,EAAM,KAAA,EAAO,UAAU,MAAA,EAAO;AAAA,MACvE;AAAA,KACD,CAAA;AAAA,EACH;AACF;AAEO,IAAM,aAAA,GAAgB,IAAI,aAAA","file":"chunk-3OYSJB3P.js","sourcesContent":["/**\r\n * Adjustment API - Manual Stock Corrections\r\n *\r\n * Handles manual stock adjustments (add, remove, set).\r\n * Creates adjustment movements and optionally expense transactions.\r\n */\r\n\r\nimport { BaseApi, type ApiResponse, type RequestOptions } from \"../../core/api-factory\";\r\nimport { handleApiRequest } from \"../../core/api-handler\";\r\nimport type {\r\n CreateAdjustmentPayload,\r\n AdjustStockPayload,\r\n AdjustStockResult,\r\n} from \"../types\";\r\n\r\ntype FetchOptions = Omit<RequestOptions, \"token\" | \"organizationId\">;\r\n\r\nclass AdjustmentApi extends BaseApi<AdjustStockResult, CreateAdjustmentPayload> {\r\n constructor(config = {}) {\r\n super(\"inventory/adjustments\", config);\r\n }\r\n\r\n /**\r\n * Create a manual stock adjustment\r\n * POST /inventory/adjustments\r\n *\r\n * @example Single item adjustment\r\n * adjustmentApi.create({\r\n * token,\r\n * data: {\r\n * productId: '...',\r\n * variantSku: 'SKU-RED-M',\r\n * quantity: 5,\r\n * mode: 'remove',\r\n * reason: 'damaged',\r\n * lostAmount: 2500 // Creates expense transaction (opt-in)\r\n * }\r\n * })\r\n *\r\n * @example Bulk adjustment\r\n * adjustmentApi.create({\r\n * token,\r\n * data: {\r\n * adjustments: [\r\n * { productId: '...', quantity: 5, mode: 'add' },\r\n * { productId: '...', quantity: 3, mode: 'remove' }\r\n * ],\r\n * reason: 'inventory recount'\r\n * }\r\n * })\r\n */\r\n async create({\r\n token,\r\n data,\r\n options = {},\r\n }: {\r\n token: string;\r\n data: CreateAdjustmentPayload;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<AdjustStockResult>> {\r\n return handleApiRequest(\"POST\", this.baseUrl, {\r\n token,\r\n body: data,\r\n cache: this.config.cache,\r\n ...options,\r\n });\r\n }\r\n\r\n /**\r\n * Adjust stock (single item, POS format)\r\n * POST /inventory/adjustments\r\n */\r\n async adjustStock({\r\n token,\r\n data,\r\n options = {},\r\n }: {\r\n token: string;\r\n data: AdjustStockPayload;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<AdjustStockResult>> {\r\n return handleApiRequest(\"POST\", this.baseUrl, {\r\n token,\r\n body: data,\r\n cache: this.config.cache,\r\n ...options,\r\n });\r\n }\r\n\r\n /**\r\n * Add stock to a product\r\n */\r\n async addStock({\r\n token,\r\n productId,\r\n variantSku,\r\n quantity,\r\n branchId,\r\n reason,\r\n options = {},\r\n }: {\r\n token: string;\r\n productId: string;\r\n variantSku?: string;\r\n quantity: number;\r\n branchId?: string;\r\n reason?: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<AdjustStockResult>> {\r\n return this.adjustStock({\r\n token,\r\n data: { productId, variantSku, quantity, mode: \"add\", branchId, reason },\r\n options,\r\n });\r\n }\r\n\r\n /**\r\n * Remove stock from a product\r\n */\r\n async removeStock({\r\n token,\r\n productId,\r\n variantSku,\r\n quantity,\r\n branchId,\r\n reason,\r\n lostAmount,\r\n options = {},\r\n }: {\r\n token: string;\r\n productId: string;\r\n variantSku?: string;\r\n quantity: number;\r\n branchId?: string;\r\n reason?: string;\r\n lostAmount?: number;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<AdjustStockResult>> {\r\n return this.create({\r\n token,\r\n data: { productId, variantSku, quantity, mode: \"remove\", branchId, reason, lostAmount },\r\n options,\r\n });\r\n }\r\n\r\n /**\r\n * Set stock to a specific quantity\r\n */\r\n async setStock({\r\n token,\r\n productId,\r\n variantSku,\r\n quantity,\r\n branchId,\r\n reason,\r\n options = {},\r\n }: {\r\n token: string;\r\n productId: string;\r\n variantSku?: string;\r\n quantity: number;\r\n branchId?: string;\r\n reason?: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<AdjustStockResult>> {\r\n return this.adjustStock({\r\n token,\r\n data: { productId, variantSku, quantity, mode: \"set\", branchId, reason },\r\n options,\r\n });\r\n }\r\n}\r\n\r\nexport const adjustmentApi = new AdjustmentApi();\r\nexport { AdjustmentApi };\r\n"]}
@@ -0,0 +1,135 @@
1
+ import { getToastHandler } from './chunk-U3XT35GZ.js';
2
+ import { handleApiRequest } from './chunk-IHCBBLLW.js';
3
+ import { useQueryClient, useMutation } from '@tanstack/react-query';
4
+
5
+ // src/payments/api/payment.ts
6
+ var PaymentApi = class {
7
+ constructor() {
8
+ this.baseUrl = "/webhooks/payments";
9
+ }
10
+ /**
11
+ * Verify a manual payment (Admin/Superadmin only)
12
+ * POST /webhooks/payments/manual/verify
13
+ *
14
+ * Use this when admin confirms a customer's manual payment
15
+ * (bKash, Nagad, bank transfer, cash, etc.)
16
+ *
17
+ * After verification:
18
+ * - Transaction status → 'verified'
19
+ * - Order payment status → 'verified'
20
+ * - Order status → 'confirmed' (if was 'pending')
21
+ *
22
+ * @example
23
+ * const result = await paymentApi.verifyPayment({
24
+ * token: adminToken,
25
+ * data: {
26
+ * transactionId: '507f1f77bcf86cd799439011',
27
+ * notes: 'Verified bKash payment TrxID: ABC123'
28
+ * }
29
+ * });
30
+ */
31
+ async verifyPayment({
32
+ token,
33
+ data,
34
+ options = {}
35
+ }) {
36
+ if (!data.transactionId) {
37
+ throw new Error("Transaction ID is required");
38
+ }
39
+ return handleApiRequest("POST", `${this.baseUrl}/manual/verify`, {
40
+ token,
41
+ body: {
42
+ transactionId: data.transactionId,
43
+ ...data.notes && { notes: data.notes }
44
+ },
45
+ cache: "no-store",
46
+ ...options
47
+ });
48
+ }
49
+ /**
50
+ * Reject a manual payment (Admin/Superadmin only)
51
+ * POST /webhooks/payments/manual/reject
52
+ *
53
+ * Use this when admin rejects a customer's payment claim
54
+ * (invalid reference, insufficient amount, fraud, etc.)
55
+ *
56
+ * After rejection:
57
+ * - Transaction status → 'failed'
58
+ * - Order payment status → 'failed'
59
+ * - Reason recorded in transaction
60
+ *
61
+ * @example
62
+ * const result = await paymentApi.rejectPayment({
63
+ * token: adminToken,
64
+ * data: {
65
+ * transactionId: '507f1f77bcf86cd799439011',
66
+ * reason: 'Invalid bKash TrxID - payment not found'
67
+ * }
68
+ * });
69
+ */
70
+ async rejectPayment({
71
+ token,
72
+ data,
73
+ options = {}
74
+ }) {
75
+ if (!data.transactionId) {
76
+ throw new Error("Transaction ID is required");
77
+ }
78
+ if (!data.reason) {
79
+ throw new Error("Rejection reason is required");
80
+ }
81
+ return handleApiRequest("POST", `${this.baseUrl}/manual/reject`, {
82
+ token,
83
+ body: {
84
+ transactionId: data.transactionId,
85
+ reason: data.reason
86
+ },
87
+ cache: "no-store",
88
+ ...options
89
+ });
90
+ }
91
+ };
92
+ var paymentApi = new PaymentApi();
93
+ function usePaymentActions(token) {
94
+ const queryClient = useQueryClient();
95
+ const toast = getToastHandler();
96
+ const verifyMutation = useMutation({
97
+ mutationFn: (data) => paymentApi.verifyPayment({ token, data }),
98
+ onSuccess: () => {
99
+ toast.success("Payment verified successfully");
100
+ queryClient.invalidateQueries({ queryKey: ["orders"] });
101
+ queryClient.invalidateQueries({ queryKey: ["transactions"] });
102
+ },
103
+ onError: (error) => {
104
+ toast.error(error.message || "Failed to verify payment");
105
+ }
106
+ });
107
+ const rejectMutation = useMutation({
108
+ mutationFn: (data) => paymentApi.rejectPayment({ token, data }),
109
+ onSuccess: () => {
110
+ toast.success("Payment rejected");
111
+ queryClient.invalidateQueries({ queryKey: ["orders"] });
112
+ queryClient.invalidateQueries({ queryKey: ["transactions"] });
113
+ },
114
+ onError: (error) => {
115
+ toast.error(error.message || "Failed to reject payment");
116
+ }
117
+ });
118
+ return {
119
+ verifyPayment: async (data) => {
120
+ const result = await verifyMutation.mutateAsync(data);
121
+ return result.data;
122
+ },
123
+ isVerifying: verifyMutation.isPending,
124
+ rejectPayment: async (data) => {
125
+ const result = await rejectMutation.mutateAsync(data);
126
+ return result.data;
127
+ },
128
+ isRejecting: rejectMutation.isPending,
129
+ isLoading: verifyMutation.isPending || rejectMutation.isPending
130
+ };
131
+ }
132
+
133
+ export { PaymentApi, paymentApi, usePaymentActions };
134
+ //# sourceMappingURL=chunk-5E57JODA.js.map
135
+ //# sourceMappingURL=chunk-5E57JODA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/payments/api/payment.ts","../src/payments/hooks/payment.ts"],"names":[],"mappings":"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","file":"chunk-5E57JODA.js","sourcesContent":["// @/payments/api/payment.ts\r\nimport { handleApiRequest } from \"../../core/api-handler\";\r\nimport type { ApiResponse } from \"../../core/api-factory\";\r\nimport type {\r\n VerificationResult,\r\n RejectResult,\r\n VerifyPaymentPayload,\r\n RejectPaymentPayload,\r\n} from \"../types\";\r\n\r\n// ==================== Request Options ====================\r\n\r\ninterface FetchOptions {\r\n cache?: RequestCache;\r\n revalidate?: number;\r\n tags?: string[];\r\n}\r\n\r\n// ==================== Payment API ====================\r\n\r\n/**\r\n * Payment API for admin payment management\r\n *\r\n * Manual Payment Verification Flow:\r\n * 1. Customer places order → Transaction created with status 'pending'\r\n * 2. Customer pays via bKash/Nagad/bank transfer/cash\r\n * 3. Admin verifies payment via verifyPayment() endpoint\r\n * 4. Backend updates transaction to 'verified'\r\n * 5. Order status auto-updates to 'confirmed', payment status to 'verified'\r\n *\r\n * Endpoints:\r\n * - POST /webhooks/payments/manual/verify - Verify pending payment (superadmin)\r\n * - POST /webhooks/payments/manual/reject - Reject pending payment (superadmin)\r\n */\r\nclass PaymentApi {\r\n private baseUrl = \"/webhooks/payments\";\r\n\r\n /**\r\n * Verify a manual payment (Admin/Superadmin only)\r\n * POST /webhooks/payments/manual/verify\r\n *\r\n * Use this when admin confirms a customer's manual payment\r\n * (bKash, Nagad, bank transfer, cash, etc.)\r\n *\r\n * After verification:\r\n * - Transaction status → 'verified'\r\n * - Order payment status → 'verified'\r\n * - Order status → 'confirmed' (if was 'pending')\r\n *\r\n * @example\r\n * const result = await paymentApi.verifyPayment({\r\n * token: adminToken,\r\n * data: {\r\n * transactionId: '507f1f77bcf86cd799439011',\r\n * notes: 'Verified bKash payment TrxID: ABC123'\r\n * }\r\n * });\r\n */\r\n async verifyPayment({\r\n token,\r\n data,\r\n options = {},\r\n }: {\r\n token: string;\r\n data: VerifyPaymentPayload;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<VerificationResult>> {\r\n if (!data.transactionId) {\r\n throw new Error(\"Transaction ID is required\");\r\n }\r\n\r\n return handleApiRequest(\"POST\", `${this.baseUrl}/manual/verify`, {\r\n token,\r\n body: {\r\n transactionId: data.transactionId,\r\n ...(data.notes && { notes: data.notes }),\r\n },\r\n cache: \"no-store\",\r\n ...options,\r\n });\r\n }\r\n\r\n /**\r\n * Reject a manual payment (Admin/Superadmin only)\r\n * POST /webhooks/payments/manual/reject\r\n *\r\n * Use this when admin rejects a customer's payment claim\r\n * (invalid reference, insufficient amount, fraud, etc.)\r\n *\r\n * After rejection:\r\n * - Transaction status → 'failed'\r\n * - Order payment status → 'failed'\r\n * - Reason recorded in transaction\r\n *\r\n * @example\r\n * const result = await paymentApi.rejectPayment({\r\n * token: adminToken,\r\n * data: {\r\n * transactionId: '507f1f77bcf86cd799439011',\r\n * reason: 'Invalid bKash TrxID - payment not found'\r\n * }\r\n * });\r\n */\r\n async rejectPayment({\r\n token,\r\n data,\r\n options = {},\r\n }: {\r\n token: string;\r\n data: RejectPaymentPayload;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<RejectResult>> {\r\n if (!data.transactionId) {\r\n throw new Error(\"Transaction ID is required\");\r\n }\r\n if (!data.reason) {\r\n throw new Error(\"Rejection reason is required\");\r\n }\r\n\r\n return handleApiRequest(\"POST\", `${this.baseUrl}/manual/reject`, {\r\n token,\r\n body: {\r\n transactionId: data.transactionId,\r\n reason: data.reason,\r\n },\r\n cache: \"no-store\",\r\n ...options,\r\n });\r\n }\r\n}\r\n\r\n// Create and export singleton instance\r\nexport const paymentApi = new PaymentApi();\r\nexport { PaymentApi };\r\n","\"use client\";\n\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { paymentApi } from \"../api\";\nimport { getToastHandler } from \"../../core/react/mutation.factory\";\nimport type {\n VerificationResult,\n RejectResult,\n VerifyPaymentPayload,\n RejectPaymentPayload,\n} from \"../types\";\n\n// ============================================\n// Types\n// ============================================\n\nexport interface UsePaymentActionsReturn {\n verifyPayment: (data: VerifyPaymentPayload) => Promise<VerificationResult>;\n isVerifying: boolean;\n rejectPayment: (data: RejectPaymentPayload) => Promise<RejectResult>;\n isRejecting: boolean;\n isLoading: boolean;\n}\n\n// Re-export types from types for convenience\nexport type { VerificationResult, RejectResult, VerifyPaymentPayload, RejectPaymentPayload };\n\n// ============================================\n// Hooks\n// ============================================\n\n/**\n * Payment verification actions for admin\n *\n * Manual Payment Verification Flow:\n * 1. Customer places order → Transaction created with status 'pending'\n * 2. Customer pays via bKash/Nagad/bank transfer/cash\n * 3. Admin verifies payment via verifyPayment()\n * 4. Backend updates transaction to 'verified'\n * 5. Order status auto-updates to 'confirmed', payment status to 'verified'\n *\n * @param token - Auth token (admin/superadmin)\n *\n * @example\n * ```tsx\n * function PaymentVerifier({ transaction }) {\n * const { verifyPayment, rejectPayment, isLoading } = usePaymentActions(token);\n *\n * const handleVerify = async () => {\n * await verifyPayment({\n * transactionId: transaction._id,\n * notes: 'Verified bKash payment TrxID: ABC123',\n * });\n * };\n *\n * const handleReject = async () => {\n * await rejectPayment({\n * transactionId: transaction._id,\n * reason: 'Invalid bKash TrxID - payment not found',\n * });\n * };\n *\n * return (\n * <>\n * <Button onClick={handleVerify} disabled={isLoading}>Verify</Button>\n * <Button onClick={handleReject} disabled={isLoading}>Reject</Button>\n * </>\n * );\n * }\n * ```\n */\nexport function usePaymentActions(token: string): UsePaymentActionsReturn {\n const queryClient = useQueryClient();\n const toast = getToastHandler();\n\n const verifyMutation = useMutation({\n mutationFn: (data: VerifyPaymentPayload) => paymentApi.verifyPayment({ token, data }),\n onSuccess: () => {\n toast.success(\"Payment verified successfully\");\n // Invalidate related queries\n queryClient.invalidateQueries({ queryKey: [\"orders\"] });\n queryClient.invalidateQueries({ queryKey: [\"transactions\"] });\n },\n onError: (error: Error) => {\n toast.error(error.message || \"Failed to verify payment\");\n },\n });\n\n const rejectMutation = useMutation({\n mutationFn: (data: RejectPaymentPayload) => paymentApi.rejectPayment({ token, data }),\n onSuccess: () => {\n toast.success(\"Payment rejected\");\n // Invalidate related queries\n queryClient.invalidateQueries({ queryKey: [\"orders\"] });\n queryClient.invalidateQueries({ queryKey: [\"transactions\"] });\n },\n onError: (error: Error) => {\n toast.error(error.message || \"Failed to reject payment\");\n },\n });\n\n return {\n verifyPayment: async (data) => {\n const result = await verifyMutation.mutateAsync(data);\n return result.data as VerificationResult;\n },\n isVerifying: verifyMutation.isPending,\n rejectPayment: async (data) => {\n const result = await rejectMutation.mutateAsync(data);\n return result.data as RejectResult;\n },\n isRejecting: rejectMutation.isPending,\n isLoading: verifyMutation.isPending || rejectMutation.isPending,\n };\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import { BaseApi } from './chunk-QCTXAMLA.js';
2
+
3
+ // src/inventory/api/supplier.ts
4
+ var SupplierApi = class extends BaseApi {
5
+ constructor(config = {}) {
6
+ super("inventory/suppliers", config);
7
+ }
8
+ };
9
+ var supplierApi = new SupplierApi();
10
+
11
+ export { SupplierApi, supplierApi };
12
+ //# sourceMappingURL=chunk-7LZCW4VF.js.map
13
+ //# sourceMappingURL=chunk-7LZCW4VF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/inventory/api/supplier.ts"],"names":[],"mappings":";;;AAqBA,IAAM,WAAA,GAAN,cAA0B,OAAA,CAAgE;AAAA,EACxF,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACvB,IAAA,KAAA,CAAM,uBAAuB,MAAM,CAAA;AAAA,EACrC;AACF;AAEO,IAAM,WAAA,GAAc,IAAI,WAAA","file":"chunk-7LZCW4VF.js","sourcesContent":["/**\r\n * Supplier (Vendor) API\r\n *\r\n * Base path: /api/v1/inventory/suppliers\r\n *\r\n * Standard CRUD (inherited from BaseApi):\r\n * - getAll({ token, params }) - list with filtering/search/pagination\r\n * - getById({ token, id }) - get by ID\r\n * - create({ token, data }) - create supplier\r\n * - update({ token, id, data }) - update supplier\r\n * - delete({ token, id }) - deactivate supplier (soft delete)\r\n */\r\n\r\nimport { BaseApi } from \"../../core/api-factory\";\r\nimport type {\r\n Supplier,\r\n SupplierCreatePayload,\r\n SupplierUpdatePayload,\r\n SupplierQueryParams,\r\n} from \"../types\";\r\n\r\nclass SupplierApi extends BaseApi<Supplier, SupplierCreatePayload, SupplierUpdatePayload> {\r\n constructor(config = {}) {\r\n super(\"inventory/suppliers\", config);\r\n }\r\n}\r\n\r\nexport const supplierApi = new SupplierApi();\r\nexport { SupplierApi };\r\nexport type { SupplierQueryParams };\r\n"]}