hey-pharmacist-ecommerce 1.0.0

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 (287) hide show
  1. package/README.md +269 -0
  2. package/dist/index.d.mts +564 -0
  3. package/dist/index.d.ts +564 -0
  4. package/dist/index.js +7541 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/index.mjs +7485 -0
  7. package/dist/index.mjs.map +1 -0
  8. package/package.json +70 -0
  9. package/src/components/CartItem.tsx +103 -0
  10. package/src/components/EmptyState.tsx +27 -0
  11. package/src/components/Footer.tsx +147 -0
  12. package/src/components/Header.tsx +151 -0
  13. package/src/components/OrderCard.tsx +98 -0
  14. package/src/components/ProductCard.tsx +122 -0
  15. package/src/components/ui/Badge.tsx +31 -0
  16. package/src/components/ui/Button.tsx +61 -0
  17. package/src/components/ui/Input.tsx +45 -0
  18. package/src/components/ui/Modal.tsx +79 -0
  19. package/src/components/ui/Skeleton.tsx +46 -0
  20. package/src/hooks/useOrders.ts +98 -0
  21. package/src/hooks/useProducts.ts +125 -0
  22. package/src/index.ts +71 -0
  23. package/src/lib/Apis/api.ts +46 -0
  24. package/src/lib/Apis/apis/addresses-api.ts +1461 -0
  25. package/src/lib/Apis/apis/auth-api.ts +945 -0
  26. package/src/lib/Apis/apis/blogs-api.ts +582 -0
  27. package/src/lib/Apis/apis/cart-api.ts +456 -0
  28. package/src/lib/Apis/apis/categories-api.ts +725 -0
  29. package/src/lib/Apis/apis/chats-api.ts +1101 -0
  30. package/src/lib/Apis/apis/contact-us-api.ts +394 -0
  31. package/src/lib/Apis/apis/discounts-api.ts +763 -0
  32. package/src/lib/Apis/apis/drafts-api.ts +448 -0
  33. package/src/lib/Apis/apis/events-api.ts +1311 -0
  34. package/src/lib/Apis/apis/file-proccesor-api.ts +293 -0
  35. package/src/lib/Apis/apis/health-api.ts +119 -0
  36. package/src/lib/Apis/apis/images-api.ts +271 -0
  37. package/src/lib/Apis/apis/inventory-api.ts +375 -0
  38. package/src/lib/Apis/apis/marketing-api.ts +3099 -0
  39. package/src/lib/Apis/apis/notifications-api.ts +843 -0
  40. package/src/lib/Apis/apis/open-aiapi.ts +513 -0
  41. package/src/lib/Apis/apis/orders-api.ts +1343 -0
  42. package/src/lib/Apis/apis/payment-methods-api.ts +411 -0
  43. package/src/lib/Apis/apis/payments-api.ts +469 -0
  44. package/src/lib/Apis/apis/product-attributes-api.ts +538 -0
  45. package/src/lib/Apis/apis/product-favorite-list-api.ts +321 -0
  46. package/src/lib/Apis/apis/product-variants-api.ts +648 -0
  47. package/src/lib/Apis/apis/products-api.ts +1442 -0
  48. package/src/lib/Apis/apis/review-api.ts +1383 -0
  49. package/src/lib/Apis/apis/roles-api.ts +614 -0
  50. package/src/lib/Apis/apis/shipping-api.ts +703 -0
  51. package/src/lib/Apis/apis/statistics-api.ts +234 -0
  52. package/src/lib/Apis/apis/stores-api.ts +1519 -0
  53. package/src/lib/Apis/apis/sub-categories-api.ts +1208 -0
  54. package/src/lib/Apis/apis/user-groups-api.ts +1198 -0
  55. package/src/lib/Apis/apis/users-api.ts +1403 -0
  56. package/src/lib/Apis/apis/web-hooks-api.ts +198 -0
  57. package/src/lib/Apis/base.ts +70 -0
  58. package/src/lib/Apis/configuration.ts +75 -0
  59. package/src/lib/Apis/index.ts +17 -0
  60. package/src/lib/Apis/models/add-contact-to-list-dto.ts +33 -0
  61. package/src/lib/Apis/models/add-message-dto.ts +56 -0
  62. package/src/lib/Apis/models/address-created-request.ts +134 -0
  63. package/src/lib/Apis/models/address.ts +164 -0
  64. package/src/lib/Apis/models/allow-user-credit-dto.ts +27 -0
  65. package/src/lib/Apis/models/appointment.ts +75 -0
  66. package/src/lib/Apis/models/available-dates-dto.ts +33 -0
  67. package/src/lib/Apis/models/available-suggested-dates-dto.ts +33 -0
  68. package/src/lib/Apis/models/blog.ts +75 -0
  69. package/src/lib/Apis/models/browser-stats-response-dto.ts +40 -0
  70. package/src/lib/Apis/models/bulk-move-subcategories-dto.ts +33 -0
  71. package/src/lib/Apis/models/bulk-unassign-subcategories-dto.ts +27 -0
  72. package/src/lib/Apis/models/campaign-content-response-dto.ts +40 -0
  73. package/src/lib/Apis/models/campaign-draft-dto.ts +175 -0
  74. package/src/lib/Apis/models/campaign-draft-response-dto.ts +40 -0
  75. package/src/lib/Apis/models/campaign-draft-schedule-dto.ts +49 -0
  76. package/src/lib/Apis/models/campaign-draft-schedule-response-dto.ts +40 -0
  77. package/src/lib/Apis/models/campaign-draft-sending-dto.ts +43 -0
  78. package/src/lib/Apis/models/campaign-draft-sending-response-dto.ts +40 -0
  79. package/src/lib/Apis/models/cart-body-dto.ts +40 -0
  80. package/src/lib/Apis/models/cart-body-populated.ts +47 -0
  81. package/src/lib/Apis/models/cart-item-populated.ts +41 -0
  82. package/src/lib/Apis/models/cart-item.ts +33 -0
  83. package/src/lib/Apis/models/cart-response-dto.ts +70 -0
  84. package/src/lib/Apis/models/categories-paginated-response-dto.ts +52 -0
  85. package/src/lib/Apis/models/category-filters.ts +40 -0
  86. package/src/lib/Apis/models/category-populated.ts +106 -0
  87. package/src/lib/Apis/models/category-sub-category-populated.ts +51 -0
  88. package/src/lib/Apis/models/category.ts +99 -0
  89. package/src/lib/Apis/models/categorys-headlines-response-dto.ts +40 -0
  90. package/src/lib/Apis/models/change-user-email-dto.ts +27 -0
  91. package/src/lib/Apis/models/chat.ts +33 -0
  92. package/src/lib/Apis/models/check-notifications-response-dto.ts +33 -0
  93. package/src/lib/Apis/models/contact-aggregated-stats-response-dto.ts +40 -0
  94. package/src/lib/Apis/models/contact-full-dto.ts +93 -0
  95. package/src/lib/Apis/models/contact-full-response-dto.ts +40 -0
  96. package/src/lib/Apis/models/contact-list-stats-response-dto.ts +40 -0
  97. package/src/lib/Apis/models/contact-lists-response-dto.ts +40 -0
  98. package/src/lib/Apis/models/contact-us.ts +81 -0
  99. package/src/lib/Apis/models/country-stats-response-dto.ts +40 -0
  100. package/src/lib/Apis/models/create-address-dto.ts +134 -0
  101. package/src/lib/Apis/models/create-blog-dto.ts +45 -0
  102. package/src/lib/Apis/models/create-category-dto.ts +45 -0
  103. package/src/lib/Apis/models/create-chat-dto.ts +39 -0
  104. package/src/lib/Apis/models/create-contact-dto.ts +39 -0
  105. package/src/lib/Apis/models/create-contact-list-dto.ts +27 -0
  106. package/src/lib/Apis/models/create-discount-dto.ts +208 -0
  107. package/src/lib/Apis/models/create-draft-dto.ts +67 -0
  108. package/src/lib/Apis/models/create-email-template-dto.ts +51 -0
  109. package/src/lib/Apis/models/create-event-dto.ts +52 -0
  110. package/src/lib/Apis/models/create-marketing-campaign-dto.ts +81 -0
  111. package/src/lib/Apis/models/create-message-dto.ts +57 -0
  112. package/src/lib/Apis/models/create-notification-dto.ts +75 -0
  113. package/src/lib/Apis/models/create-product-attribute-dto.ts +33 -0
  114. package/src/lib/Apis/models/create-product-dto.ts +94 -0
  115. package/src/lib/Apis/models/create-review-dto.ts +63 -0
  116. package/src/lib/Apis/models/create-role-dto.ts +57 -0
  117. package/src/lib/Apis/models/create-single-variant-product-dto.ts +155 -0
  118. package/src/lib/Apis/models/create-store-address-dto.ts +134 -0
  119. package/src/lib/Apis/models/create-store-dto.ts +105 -0
  120. package/src/lib/Apis/models/create-sub-category-dto.ts +45 -0
  121. package/src/lib/Apis/models/create-user-dto.ts +89 -0
  122. package/src/lib/Apis/models/create-user-group-dto.ts +39 -0
  123. package/src/lib/Apis/models/create-variant-dto.ts +119 -0
  124. package/src/lib/Apis/models/create-zone-dto.ts +82 -0
  125. package/src/lib/Apis/models/custom-product-dto.ts +63 -0
  126. package/src/lib/Apis/models/default-payment-method-request-dto.ts +27 -0
  127. package/src/lib/Apis/models/delete-file-dto.ts +27 -0
  128. package/src/lib/Apis/models/delete-many-files-dto.ts +27 -0
  129. package/src/lib/Apis/models/discount-paginated-response.ts +52 -0
  130. package/src/lib/Apis/models/discount.ts +245 -0
  131. package/src/lib/Apis/models/discounts-insights-dto.ts +57 -0
  132. package/src/lib/Apis/models/draft.ts +79 -0
  133. package/src/lib/Apis/models/email-invoice-dto.ts +45 -0
  134. package/src/lib/Apis/models/email-template-response-dto.ts +117 -0
  135. package/src/lib/Apis/models/event.ts +76 -0
  136. package/src/lib/Apis/models/extended-product-dto.ts +204 -0
  137. package/src/lib/Apis/models/fileproccesor-upload-body.ts +27 -0
  138. package/src/lib/Apis/models/forget-password.ts +27 -0
  139. package/src/lib/Apis/models/frequently-bought-product-dto.ts +71 -0
  140. package/src/lib/Apis/models/general-stats-response-dto.ts +40 -0
  141. package/src/lib/Apis/models/generate-day-slots-dto.ts +51 -0
  142. package/src/lib/Apis/models/generate-month-slots-dto.ts +57 -0
  143. package/src/lib/Apis/models/generate-week-slots-dto.ts +57 -0
  144. package/src/lib/Apis/models/google-analytics-request-dto.ts +55 -0
  145. package/src/lib/Apis/models/google-analytics-response-dto.ts +39 -0
  146. package/src/lib/Apis/models/group-with-no-users-dto.ts +75 -0
  147. package/src/lib/Apis/models/group-with-users-dto.ts +76 -0
  148. package/src/lib/Apis/models/images-upload-body.ts +27 -0
  149. package/src/lib/Apis/models/index.ts +197 -0
  150. package/src/lib/Apis/models/inventory-paginated-response.ts +75 -0
  151. package/src/lib/Apis/models/link-stats-response-dto.ts +40 -0
  152. package/src/lib/Apis/models/login-dto.ts +33 -0
  153. package/src/lib/Apis/models/manual-discount.ts +49 -0
  154. package/src/lib/Apis/models/manual-order-dto.ts +133 -0
  155. package/src/lib/Apis/models/manual-shipping-dto.ts +45 -0
  156. package/src/lib/Apis/models/marketing-campaign-content-dto.ts +27 -0
  157. package/src/lib/Apis/models/marketing-list-contact-dto.ts +51 -0
  158. package/src/lib/Apis/models/move-subcategory-dto.ts +27 -0
  159. package/src/lib/Apis/models/my-favorite-list-dto.ts +52 -0
  160. package/src/lib/Apis/models/notification.ts +93 -0
  161. package/src/lib/Apis/models/object-id.ts +21 -0
  162. package/src/lib/Apis/models/open-api.ts +33 -0
  163. package/src/lib/Apis/models/order-paginated-response.ts +52 -0
  164. package/src/lib/Apis/models/order.ts +214 -0
  165. package/src/lib/Apis/models/orders-insights-dto.ts +69 -0
  166. package/src/lib/Apis/models/paginated-products-dto.ts +52 -0
  167. package/src/lib/Apis/models/payment-method-data.ts +34 -0
  168. package/src/lib/Apis/models/payment-method.ts +51 -0
  169. package/src/lib/Apis/models/payment-time-line-dto.ts +56 -0
  170. package/src/lib/Apis/models/payment.ts +182 -0
  171. package/src/lib/Apis/models/payments-insights-dto.ts +69 -0
  172. package/src/lib/Apis/models/payments-paginated-response.ts +52 -0
  173. package/src/lib/Apis/models/pick-type-class.ts +51 -0
  174. package/src/lib/Apis/models/populated-chat-dto.ts +95 -0
  175. package/src/lib/Apis/models/populated-discount.ts +246 -0
  176. package/src/lib/Apis/models/populated-order.ts +209 -0
  177. package/src/lib/Apis/models/prefered-pick-or-delivery-time-dto.ts +33 -0
  178. package/src/lib/Apis/models/price-range.ts +33 -0
  179. package/src/lib/Apis/models/product-attribute.ts +57 -0
  180. package/src/lib/Apis/models/product-variant.ts +167 -0
  181. package/src/lib/Apis/models/product.ts +136 -0
  182. package/src/lib/Apis/models/products-insights-dto.ts +45 -0
  183. package/src/lib/Apis/models/rate-dto.ts +123 -0
  184. package/src/lib/Apis/models/refill-request-dto.ts +75 -0
  185. package/src/lib/Apis/models/refill-request.ts +105 -0
  186. package/src/lib/Apis/models/register-or-login-with-gmail.ts +27 -0
  187. package/src/lib/Apis/models/reserve-appointment.ts +261 -0
  188. package/src/lib/Apis/models/review.ts +93 -0
  189. package/src/lib/Apis/models/role.ts +69 -0
  190. package/src/lib/Apis/models/schedule-campaign-draft-dto.ts +27 -0
  191. package/src/lib/Apis/models/send-test-email-dto.ts +28 -0
  192. package/src/lib/Apis/models/shallow-parent-category-dto.ts +33 -0
  193. package/src/lib/Apis/models/shipment-details-dto.ts +88 -0
  194. package/src/lib/Apis/models/shipment-status-dto.ts +117 -0
  195. package/src/lib/Apis/models/shipment-with-order.ts +105 -0
  196. package/src/lib/Apis/models/shipment.ts +104 -0
  197. package/src/lib/Apis/models/shipping-info.ts +88 -0
  198. package/src/lib/Apis/models/single-browser-stats-dto.ts +45 -0
  199. package/src/lib/Apis/models/single-contact-aggregated-stats-dto.ts +129 -0
  200. package/src/lib/Apis/models/single-contact-list-stats-dto.ts +117 -0
  201. package/src/lib/Apis/models/single-country-stats-dto.ts +39 -0
  202. package/src/lib/Apis/models/single-general-stats.ts +153 -0
  203. package/src/lib/Apis/models/single-link-stats-dto.ts +39 -0
  204. package/src/lib/Apis/models/single-message-populated.ts +59 -0
  205. package/src/lib/Apis/models/single-notification-dto.ts +99 -0
  206. package/src/lib/Apis/models/single-product-media.ts +74 -0
  207. package/src/lib/Apis/models/single-recipient-dto.ts +33 -0
  208. package/src/lib/Apis/models/single-suggest-attribute.ts +33 -0
  209. package/src/lib/Apis/models/statistic-dto.ts +171 -0
  210. package/src/lib/Apis/models/store-entity.ts +117 -0
  211. package/src/lib/Apis/models/store.ts +135 -0
  212. package/src/lib/Apis/models/sub-category-headlines-only-response-dto.ts +39 -0
  213. package/src/lib/Apis/models/sub-category.ts +93 -0
  214. package/src/lib/Apis/models/suggest-attributes.ts +28 -0
  215. package/src/lib/Apis/models/suggested-slot.ts +33 -0
  216. package/src/lib/Apis/models/table-cell-dto.ts +33 -0
  217. package/src/lib/Apis/models/table-dto.ts +34 -0
  218. package/src/lib/Apis/models/tadmin-session-data.ts +47 -0
  219. package/src/lib/Apis/models/track-dto.ts +94 -0
  220. package/src/lib/Apis/models/tracking-status-location-base.ts +45 -0
  221. package/src/lib/Apis/models/tracking-status-substatus.ts +39 -0
  222. package/src/lib/Apis/models/tracking-status.ts +71 -0
  223. package/src/lib/Apis/models/transfere-patient-request.ts +123 -0
  224. package/src/lib/Apis/models/transfere-patients-request-dto.ts +99 -0
  225. package/src/lib/Apis/models/tuser-session-data.ts +34 -0
  226. package/src/lib/Apis/models/update-address-dto.ts +134 -0
  227. package/src/lib/Apis/models/update-blog-dto.ts +45 -0
  228. package/src/lib/Apis/models/update-campaign-draft-content-dto.ts +27 -0
  229. package/src/lib/Apis/models/update-category-dto.ts +45 -0
  230. package/src/lib/Apis/models/update-discount-dto.ts +208 -0
  231. package/src/lib/Apis/models/update-event-dto.ts +52 -0
  232. package/src/lib/Apis/models/update-items-order-dto.ts +27 -0
  233. package/src/lib/Apis/models/update-marketing-camp-draft-dto.ts +81 -0
  234. package/src/lib/Apis/models/update-message-dto.ts +57 -0
  235. package/src/lib/Apis/models/update-product-attribute-dto.ts +33 -0
  236. package/src/lib/Apis/models/update-product-dto.ts +96 -0
  237. package/src/lib/Apis/models/update-product-variant-dto.ts +119 -0
  238. package/src/lib/Apis/models/update-refill-request-dto.ts +75 -0
  239. package/src/lib/Apis/models/update-review-dto.ts +63 -0
  240. package/src/lib/Apis/models/update-role-dto.ts +57 -0
  241. package/src/lib/Apis/models/update-store-dto.ts +105 -0
  242. package/src/lib/Apis/models/update-sub-category-dto.ts +45 -0
  243. package/src/lib/Apis/models/update-transfere-patients-request-dto.ts +99 -0
  244. package/src/lib/Apis/models/update-user-dto.ts +239 -0
  245. package/src/lib/Apis/models/update-user-group-dto.ts +39 -0
  246. package/src/lib/Apis/models/update-zone-dto.ts +82 -0
  247. package/src/lib/Apis/models/upload-pdf-body.ts +27 -0
  248. package/src/lib/Apis/models/used-by.ts +87 -0
  249. package/src/lib/Apis/models/user-entity.ts +220 -0
  250. package/src/lib/Apis/models/user-group.ts +75 -0
  251. package/src/lib/Apis/models/user-insights-dto.ts +39 -0
  252. package/src/lib/Apis/models/user-with-no-id.ts +226 -0
  253. package/src/lib/Apis/models/user.ts +232 -0
  254. package/src/lib/Apis/models/users-paginated-response.ts +52 -0
  255. package/src/lib/Apis/models/verify-email-dto.ts +33 -0
  256. package/src/lib/Apis/models/zone-single-size.ts +51 -0
  257. package/src/lib/Apis/models/zone.ts +106 -0
  258. package/src/lib/Apis/wrapper.ts +37 -0
  259. package/src/lib/api/auth.ts +81 -0
  260. package/src/lib/api/cart.ts +42 -0
  261. package/src/lib/api/client.ts +118 -0
  262. package/src/lib/api/orders.ts +53 -0
  263. package/src/lib/api/products.ts +51 -0
  264. package/src/lib/api-adapter/auth-adapter.ts +196 -0
  265. package/src/lib/api-adapter/cart-adapter.ts +193 -0
  266. package/src/lib/api-adapter/config.ts +76 -0
  267. package/src/lib/api-adapter/index.ts +13 -0
  268. package/src/lib/api-adapter/mappers.ts +147 -0
  269. package/src/lib/api-adapter/orders-adapter.ts +195 -0
  270. package/src/lib/api-adapter/products-adapter.ts +194 -0
  271. package/src/lib/types/index.ts +152 -0
  272. package/src/lib/utils/colors.ts +51 -0
  273. package/src/lib/utils/format.ts +48 -0
  274. package/src/providers/AuthProvider.tsx +117 -0
  275. package/src/providers/CartProvider.tsx +131 -0
  276. package/src/providers/EcommerceProvider.tsx +34 -0
  277. package/src/providers/ThemeProvider.tsx +57 -0
  278. package/src/screens/CartScreen.tsx +140 -0
  279. package/src/screens/CheckoutScreen.tsx +340 -0
  280. package/src/screens/CurrentOrdersScreen.tsx +85 -0
  281. package/src/screens/LoginScreen.tsx +149 -0
  282. package/src/screens/OrdersScreen.tsx +86 -0
  283. package/src/screens/ProductDetailScreen.tsx +255 -0
  284. package/src/screens/ProfileScreen.tsx +211 -0
  285. package/src/screens/RegisterScreen.tsx +200 -0
  286. package/src/screens/ShopScreen.tsx +233 -0
  287. package/src/styles/globals.css +51 -0
@@ -0,0 +1,106 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * Hey Pharamcist API
5
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
6
+ *
7
+ * OpenAPI spec version: 1.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by the swagger code generator program.
11
+ * https://github.com/swagger-api/swagger-codegen.git
12
+ * Do not edit the class manually.
13
+ */
14
+ import { ZoneSingleSize } from './zone-single-size';
15
+ /**
16
+ *
17
+ * @export
18
+ * @interface Zone
19
+ */
20
+ export interface Zone {
21
+ _id?: string;
22
+ /**
23
+ *
24
+ * @type {string}
25
+ * @memberof Zone
26
+ */
27
+ id: string;
28
+ /**
29
+ *
30
+ * @type {string}
31
+ * @memberof Zone
32
+ */
33
+ name: string;
34
+ /**
35
+ *
36
+ * @type {string}
37
+ * @memberof Zone
38
+ */
39
+ description: string;
40
+ /**
41
+ *
42
+ * @type {Array<string>}
43
+ * @memberof Zone
44
+ */
45
+ zipCodes: Array<string>;
46
+ /**
47
+ *
48
+ * @type {number}
49
+ * @memberof Zone
50
+ */
51
+ cost: number;
52
+ /**
53
+ *
54
+ * @type {boolean}
55
+ * @memberof Zone
56
+ */
57
+ isFreeShipping: boolean;
58
+ /**
59
+ *
60
+ * @type {number}
61
+ * @memberof Zone
62
+ */
63
+ estimatedDeliveryTime: number;
64
+ /**
65
+ *
66
+ * @type {boolean}
67
+ * @memberof Zone
68
+ */
69
+ active: boolean;
70
+ /**
71
+ *
72
+ * @type {boolean}
73
+ * @memberof Zone
74
+ */
75
+ deleted: boolean;
76
+ /**
77
+ *
78
+ * @type {string}
79
+ * @memberof Zone
80
+ */
81
+ storeId: string;
82
+ /**
83
+ *
84
+ * @type {string}
85
+ * @memberof Zone
86
+ */
87
+ storeAddressId: string;
88
+ /**
89
+ *
90
+ * @type {Date}
91
+ * @memberof Zone
92
+ */
93
+ createdAt: Date;
94
+ /**
95
+ *
96
+ * @type {Date}
97
+ * @memberof Zone
98
+ */
99
+ updatedAt: Date;
100
+ /**
101
+ *
102
+ * @type {Array<ZoneSingleSize>}
103
+ * @memberof Zone
104
+ */
105
+ sizes: Array<ZoneSingleSize>;
106
+ }
@@ -0,0 +1,37 @@
1
+ import globalAxios from "axios";
2
+ import { Configuration } from "./configuration";
3
+ import { getCookie } from 'cookies-next';
4
+
5
+
6
+ // export const BaseUrl = "http://localhost:3333"; // local
7
+ export const BaseUrl = "https://api.heypharmacist.com"; // Prod
8
+
9
+ globalAxios.interceptors.request.use(async (config) => {
10
+
11
+ if (!config?.headers) {
12
+ throw new Error(
13
+ `Expected 'config' and 'config.headers' not to be undefined`
14
+ );
15
+ }
16
+
17
+ if (typeof window !== 'undefined') {
18
+ const token = getCookie('hey-pharmacist-token')
19
+ const storeId = getCookie('x-store-key')
20
+ if (token)
21
+ config.headers.Authorization = `Bearer ${token}`
22
+ if (storeId)
23
+ config.headers["x-store-key"] = storeId;
24
+ }
25
+
26
+ return config;
27
+ });
28
+
29
+ const ABORT_CONTROLLER = new AbortController();
30
+
31
+ export const AXIOS_CONFIG = new Configuration({
32
+ basePath: BaseUrl,
33
+ baseOptions: {
34
+ signal: ABORT_CONTROLLER.signal,
35
+ timeout: 20000,
36
+ },
37
+ });
@@ -0,0 +1,81 @@
1
+ import { authAdapter } from '@/lib/api-adapter';
2
+ import { User, ApiResponse, LoginCredentials, RegisterData, AuthTokens } from '@/lib/types';
3
+
4
+ export const authApi = {
5
+ /**
6
+ * Register a new user
7
+ */
8
+ async register(data: RegisterData): Promise<ApiResponse<{ user: User; tokens: AuthTokens }>> {
9
+ const response = await authAdapter.register(data);
10
+ return {
11
+ ...response,
12
+ data: {
13
+ user: response.data.user,
14
+ tokens: {
15
+ accessToken: response.data.token,
16
+ refreshToken: response.data.token, // Backend uses single token
17
+ },
18
+ },
19
+ };
20
+ },
21
+
22
+ /**
23
+ * Login user
24
+ */
25
+ async login(credentials: LoginCredentials): Promise<ApiResponse<{ user: User; tokens: AuthTokens }>> {
26
+ const response = await authAdapter.login(credentials);
27
+ return {
28
+ ...response,
29
+ data: {
30
+ user: response.data.user,
31
+ tokens: {
32
+ accessToken: response.data.token,
33
+ refreshToken: response.data.token, // Backend uses single token
34
+ },
35
+ },
36
+ };
37
+ },
38
+
39
+ /**
40
+ * Logout user
41
+ */
42
+ async logout(): Promise<void> {
43
+ await authAdapter.logout();
44
+ },
45
+
46
+ /**
47
+ * Get current user
48
+ */
49
+ async getCurrentUser(): Promise<ApiResponse<User>> {
50
+ return await authAdapter.getCurrentUser();
51
+ },
52
+
53
+ /**
54
+ * Update user profile
55
+ */
56
+ async updateProfile(data: Partial<User>): Promise<ApiResponse<User>> {
57
+ return await authAdapter.updateProfile(data);
58
+ },
59
+
60
+ /**
61
+ * Change password
62
+ */
63
+ async changePassword(currentPassword: string, newPassword: string): Promise<ApiResponse<void>> {
64
+ return await authAdapter.changePassword(currentPassword, newPassword);
65
+ },
66
+
67
+ /**
68
+ * Request password reset
69
+ */
70
+ async forgotPassword(email: string): Promise<ApiResponse<void>> {
71
+ return await authAdapter.forgotPassword(email);
72
+ },
73
+
74
+ /**
75
+ * Reset password with token
76
+ */
77
+ async resetPassword(token: string, newPassword: string): Promise<ApiResponse<void>> {
78
+ return await authAdapter.resetPassword(token, newPassword);
79
+ },
80
+ };
81
+
@@ -0,0 +1,42 @@
1
+ import { cartAdapter } from '@/lib/api-adapter';
2
+ import { Cart, ApiResponse } from '@/lib/types';
3
+
4
+ export const cartApi = {
5
+ /**
6
+ * Get user's cart
7
+ */
8
+ async getCart(): Promise<ApiResponse<Cart>> {
9
+ return await cartAdapter.getCart();
10
+ },
11
+
12
+ /**
13
+ * Add item to cart
14
+ * Note: Backend uses product variants. If variant ID not provided, uses product ID as variant
15
+ */
16
+ async addToCart(productId: string, quantity: number = 1): Promise<ApiResponse<Cart>> {
17
+ // Use product ID as variant ID for simplified products
18
+ return await cartAdapter.addToCart(productId, productId, quantity);
19
+ },
20
+
21
+ /**
22
+ * Update cart item quantity
23
+ */
24
+ async updateCartItem(productId: string, quantity: number): Promise<ApiResponse<Cart>> {
25
+ return await cartAdapter.updateCartItem(productId, productId, quantity);
26
+ },
27
+
28
+ /**
29
+ * Remove item from cart
30
+ */
31
+ async removeFromCart(productId: string): Promise<ApiResponse<Cart>> {
32
+ return await cartAdapter.removeFromCart(productId, productId);
33
+ },
34
+
35
+ /**
36
+ * Clear cart
37
+ */
38
+ async clearCart(): Promise<ApiResponse<void>> {
39
+ return await cartAdapter.clearCart();
40
+ },
41
+ };
42
+
@@ -0,0 +1,118 @@
1
+ import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';
2
+ import { EcommerceConfig } from '@/lib/types';
3
+
4
+ let apiClient: AxiosInstance | null = null;
5
+ let currentConfig: EcommerceConfig | null = null;
6
+
7
+ export function initializeApiClient(config: EcommerceConfig): AxiosInstance {
8
+ currentConfig = config;
9
+
10
+ apiClient = axios.create({
11
+ baseURL: config.apiBaseUrl,
12
+ headers: {
13
+ 'Content-Type': 'application/json',
14
+ },
15
+ });
16
+
17
+ // Request interceptor to add auth token and storeId
18
+ apiClient.interceptors.request.use(
19
+ (config) => {
20
+ // Add storeId to all requests
21
+ if (currentConfig) {
22
+ config.headers['X-Store-Id'] = currentConfig.storeId;
23
+ }
24
+
25
+ // Add auth token if available
26
+ const token = getAuthToken();
27
+ if (token) {
28
+ config.headers.Authorization = `Bearer ${token}`;
29
+ }
30
+
31
+ return config;
32
+ },
33
+ (error) => {
34
+ return Promise.reject(error);
35
+ }
36
+ );
37
+
38
+ // Response interceptor for error handling
39
+ apiClient.interceptors.response.use(
40
+ (response) => response,
41
+ async (error) => {
42
+ if (error.response?.status === 401) {
43
+ // Token expired, try to refresh
44
+ const refreshToken = getRefreshToken();
45
+ if (refreshToken) {
46
+ try {
47
+ const response = await axios.post(`${currentConfig?.apiBaseUrl}/auth/refresh`, {
48
+ refreshToken,
49
+ });
50
+
51
+ const { accessToken } = response.data;
52
+ setAuthToken(accessToken);
53
+
54
+ // Retry the original request
55
+ error.config.headers.Authorization = `Bearer ${accessToken}`;
56
+ return apiClient!(error.config);
57
+ } catch (refreshError) {
58
+ // Refresh failed, clear tokens and redirect to login
59
+ clearAuthTokens();
60
+ window.location.href = '/login';
61
+ }
62
+ } else {
63
+ clearAuthTokens();
64
+ window.location.href = '/login';
65
+ }
66
+ }
67
+
68
+ return Promise.reject(error);
69
+ }
70
+ );
71
+
72
+ return apiClient;
73
+ }
74
+
75
+ export function getApiClient(): AxiosInstance {
76
+ if (!apiClient) {
77
+ throw new Error('API client not initialized. Call initializeApiClient first.');
78
+ }
79
+ return apiClient;
80
+ }
81
+
82
+ // Token management utilities
83
+ const TOKEN_KEY = 'ecommerce_access_token';
84
+ const REFRESH_TOKEN_KEY = 'ecommerce_refresh_token';
85
+
86
+ export function setAuthToken(token: string): void {
87
+ if (typeof window !== 'undefined') {
88
+ localStorage.setItem(TOKEN_KEY, token);
89
+ }
90
+ }
91
+
92
+ export function setRefreshToken(token: string): void {
93
+ if (typeof window !== 'undefined') {
94
+ localStorage.setItem(REFRESH_TOKEN_KEY, token);
95
+ }
96
+ }
97
+
98
+ export function getAuthToken(): string | null {
99
+ if (typeof window !== 'undefined') {
100
+ return localStorage.getItem(TOKEN_KEY);
101
+ }
102
+ return null;
103
+ }
104
+
105
+ export function getRefreshToken(): string | null {
106
+ if (typeof window !== 'undefined') {
107
+ return localStorage.getItem(REFRESH_TOKEN_KEY);
108
+ }
109
+ return null;
110
+ }
111
+
112
+ export function clearAuthTokens(): void {
113
+ if (typeof window !== 'undefined') {
114
+ localStorage.removeItem(TOKEN_KEY);
115
+ localStorage.removeItem(REFRESH_TOKEN_KEY);
116
+ }
117
+ }
118
+
@@ -0,0 +1,53 @@
1
+ import { ordersAdapter, CreateOrderData as AdapterCreateOrderData } from '@/lib/api-adapter';
2
+ import { Order, ApiResponse, PaginatedResponse, Address } from '@/lib/types';
3
+
4
+ export interface CreateOrderData {
5
+ shippingAddress: Address;
6
+ billingAddress: Address;
7
+ sameAsShipping?: boolean;
8
+ }
9
+
10
+ export const ordersApi = {
11
+ /**
12
+ * Get user's orders with pagination
13
+ */
14
+ async getOrders(page: number = 1, limit: number = 10): Promise<PaginatedResponse<Order>> {
15
+ return await ordersAdapter.getOrders(page, limit);
16
+ },
17
+
18
+ /**
19
+ * Get current/active orders
20
+ */
21
+ async getCurrentOrders(): Promise<ApiResponse<Order[]>> {
22
+ return await ordersAdapter.getCurrentOrders();
23
+ },
24
+
25
+ /**
26
+ * Get a single order by ID
27
+ */
28
+ async getOrder(id: string): Promise<ApiResponse<Order>> {
29
+ return await ordersAdapter.getOrder(id);
30
+ },
31
+
32
+ /**
33
+ * Create a new order
34
+ */
35
+ async createOrder(data: CreateOrderData): Promise<ApiResponse<Order>> {
36
+ return await ordersAdapter.createOrder(data);
37
+ },
38
+
39
+ /**
40
+ * Cancel an order
41
+ */
42
+ async cancelOrder(id: string): Promise<ApiResponse<Order>> {
43
+ return await ordersAdapter.cancelOrder(id);
44
+ },
45
+
46
+ /**
47
+ * Get order tracking information
48
+ */
49
+ async getOrderTracking(id: string): Promise<ApiResponse<any>> {
50
+ return await ordersAdapter.getOrderTracking(id);
51
+ },
52
+ };
53
+
@@ -0,0 +1,51 @@
1
+ import { productsAdapter } from '@/lib/api-adapter';
2
+ import { Product, ApiResponse, PaginatedResponse, ProductFilters, Category } from '@/lib/types';
3
+
4
+ export const productsApi = {
5
+ /**
6
+ * Get all products with optional filters and pagination
7
+ */
8
+ async getProducts(
9
+ filters?: ProductFilters,
10
+ page: number = 1,
11
+ limit: number = 20
12
+ ): Promise<PaginatedResponse<Product>> {
13
+ return await productsAdapter.getProducts(filters, page, limit);
14
+ },
15
+
16
+ /**
17
+ * Get a single product by ID
18
+ */
19
+ async getProduct(id: string): Promise<ApiResponse<Product>> {
20
+ return await productsAdapter.getProduct(id);
21
+ },
22
+
23
+ /**
24
+ * Get featured products
25
+ */
26
+ async getFeaturedProducts(limit: number = 8): Promise<ApiResponse<Product[]>> {
27
+ return await productsAdapter.getFeaturedProducts(limit);
28
+ },
29
+
30
+ /**
31
+ * Get related products
32
+ */
33
+ async getRelatedProducts(productId: string, limit: number = 4): Promise<ApiResponse<Product[]>> {
34
+ return await productsAdapter.getRelatedProducts(productId, limit);
35
+ },
36
+
37
+ /**
38
+ * Get all categories
39
+ */
40
+ async getCategories(): Promise<ApiResponse<Category[]>> {
41
+ return await productsAdapter.getCategories();
42
+ },
43
+
44
+ /**
45
+ * Search products
46
+ */
47
+ async searchProducts(query: string, limit: number = 10): Promise<ApiResponse<Product[]>> {
48
+ return await productsAdapter.searchProducts(query, limit);
49
+ },
50
+ };
51
+
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Auth API Adapter
3
+ * Connects frontend auth to real backend auth APIs
4
+ */
5
+
6
+ import { AuthApi } from '../Apis/apis/auth-api';
7
+ import { UsersApi } from '../Apis/apis/users-api';
8
+ import { LoginDto, CreateUserDto } from '../Apis/models';
9
+ import { getApiConfiguration, setAuthToken, clearAuthToken } from './config';
10
+ import { mapSessionData, mapUser } from './mappers';
11
+ import { User, LoginCredentials, RegisterData, ApiResponse } from '../types';
12
+
13
+ export const authAdapter = {
14
+ /**
15
+ * Register a new user
16
+ */
17
+ async register(data: RegisterData): Promise<ApiResponse<{ user: User; token: string }>> {
18
+ try {
19
+ const authApi = new AuthApi(getApiConfiguration());
20
+
21
+ // Note: CreateUserDto doesn't include password
22
+ // Password is sent via LoginDto in signup endpoint
23
+ const loginDto: LoginDto = {
24
+ email: data.email,
25
+ password: data.password,
26
+ };
27
+
28
+ // Try signing up - backend signup uses email/password in LoginDto format
29
+ const response = await authApi.signup(loginDto as any);
30
+ const { user, token } = mapSessionData(response.data);
31
+
32
+ setAuthToken(token);
33
+
34
+ return {
35
+ success: true,
36
+ data: { user, token },
37
+ };
38
+ } catch (error: any) {
39
+ return {
40
+ success: false,
41
+ message: error.response?.data?.message || 'Registration failed',
42
+ data: { user: {} as User, token: '' },
43
+ };
44
+ }
45
+ },
46
+
47
+ /**
48
+ * Login user
49
+ */
50
+ async login(credentials: LoginCredentials): Promise<ApiResponse<{ user: User; token: string }>> {
51
+ try {
52
+ const authApi = new AuthApi(getApiConfiguration());
53
+
54
+ const loginDto: LoginDto = {
55
+ email: credentials.email,
56
+ password: credentials.password,
57
+ };
58
+
59
+ const response = await authApi.signin(loginDto);
60
+ const { user, token } = mapSessionData(response.data);
61
+
62
+ setAuthToken(token);
63
+
64
+ return {
65
+ success: true,
66
+ data: { user, token },
67
+ };
68
+ } catch (error: any) {
69
+ return {
70
+ success: false,
71
+ message: error.response?.data?.message || 'Login failed',
72
+ data: { user: {} as User, token: '' },
73
+ };
74
+ }
75
+ },
76
+
77
+ /**
78
+ * Logout user
79
+ */
80
+ async logout(): Promise<void> {
81
+ clearAuthToken();
82
+ },
83
+
84
+ /**
85
+ * Get current user
86
+ */
87
+ async getCurrentUser(): Promise<ApiResponse<User>> {
88
+ try {
89
+ const usersApi = new UsersApi(getApiConfiguration());
90
+ const response = await usersApi.getMyProfile();
91
+
92
+ return {
93
+ success: true,
94
+ data: mapUser(response.data),
95
+ };
96
+ } catch (error: any) {
97
+ return {
98
+ success: false,
99
+ message: error.response?.data?.message || 'Failed to get user',
100
+ data: {} as User,
101
+ };
102
+ }
103
+ },
104
+
105
+ /**
106
+ * Update user profile
107
+ */
108
+ async updateProfile(data: Partial<User>): Promise<ApiResponse<User>> {
109
+ try {
110
+ const usersApi = new UsersApi(getApiConfiguration());
111
+
112
+ const updateData: any = {};
113
+ if (data.firstName) updateData.firstname = data.firstName;
114
+ if (data.lastName) updateData.lastname = data.lastName;
115
+ if (data.phone) updateData.phoneNumber = data.phone;
116
+ if (data.email) updateData.email = data.email;
117
+
118
+ const response = await usersApi.updateMyProfile(updateData);
119
+
120
+ return {
121
+ success: true,
122
+ data: mapUser(response.data),
123
+ };
124
+ } catch (error: any) {
125
+ return {
126
+ success: false,
127
+ message: error.response?.data?.message || 'Failed to update profile',
128
+ data: {} as User,
129
+ };
130
+ }
131
+ },
132
+
133
+ /**
134
+ * Change password
135
+ */
136
+ async changePassword(currentPassword: string, newPassword: string): Promise<ApiResponse<void>> {
137
+ try {
138
+ const authApi = new AuthApi(getApiConfiguration());
139
+ await authApi.changePassword(currentPassword, newPassword);
140
+
141
+ return {
142
+ success: true,
143
+ data: undefined,
144
+ };
145
+ } catch (error: any) {
146
+ return {
147
+ success: false,
148
+ message: error.response?.data?.message || 'Failed to change password',
149
+ data: undefined,
150
+ };
151
+ }
152
+ },
153
+
154
+ /**
155
+ * Request password reset
156
+ */
157
+ async forgotPassword(email: string): Promise<ApiResponse<void>> {
158
+ try {
159
+ const authApi = new AuthApi(getApiConfiguration());
160
+ await authApi.sendForgetPasswordEmail({ email });
161
+
162
+ return {
163
+ success: true,
164
+ data: undefined,
165
+ };
166
+ } catch (error: any) {
167
+ return {
168
+ success: false,
169
+ message: error.response?.data?.message || 'Failed to send reset email',
170
+ data: undefined,
171
+ };
172
+ }
173
+ },
174
+
175
+ /**
176
+ * Reset password with token
177
+ */
178
+ async resetPassword(token: string, newPassword: string): Promise<ApiResponse<void>> {
179
+ try {
180
+ const authApi = new AuthApi(getApiConfiguration());
181
+ await authApi.resetPassword(newPassword, token);
182
+
183
+ return {
184
+ success: true,
185
+ data: undefined,
186
+ };
187
+ } catch (error: any) {
188
+ return {
189
+ success: false,
190
+ message: error.response?.data?.message || 'Failed to reset password',
191
+ data: undefined,
192
+ };
193
+ }
194
+ },
195
+ };
196
+