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.
- package/README.md +269 -0
- package/dist/index.d.mts +564 -0
- package/dist/index.d.ts +564 -0
- package/dist/index.js +7541 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +7485 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +70 -0
- package/src/components/CartItem.tsx +103 -0
- package/src/components/EmptyState.tsx +27 -0
- package/src/components/Footer.tsx +147 -0
- package/src/components/Header.tsx +151 -0
- package/src/components/OrderCard.tsx +98 -0
- package/src/components/ProductCard.tsx +122 -0
- package/src/components/ui/Badge.tsx +31 -0
- package/src/components/ui/Button.tsx +61 -0
- package/src/components/ui/Input.tsx +45 -0
- package/src/components/ui/Modal.tsx +79 -0
- package/src/components/ui/Skeleton.tsx +46 -0
- package/src/hooks/useOrders.ts +98 -0
- package/src/hooks/useProducts.ts +125 -0
- package/src/index.ts +71 -0
- package/src/lib/Apis/api.ts +46 -0
- package/src/lib/Apis/apis/addresses-api.ts +1461 -0
- package/src/lib/Apis/apis/auth-api.ts +945 -0
- package/src/lib/Apis/apis/blogs-api.ts +582 -0
- package/src/lib/Apis/apis/cart-api.ts +456 -0
- package/src/lib/Apis/apis/categories-api.ts +725 -0
- package/src/lib/Apis/apis/chats-api.ts +1101 -0
- package/src/lib/Apis/apis/contact-us-api.ts +394 -0
- package/src/lib/Apis/apis/discounts-api.ts +763 -0
- package/src/lib/Apis/apis/drafts-api.ts +448 -0
- package/src/lib/Apis/apis/events-api.ts +1311 -0
- package/src/lib/Apis/apis/file-proccesor-api.ts +293 -0
- package/src/lib/Apis/apis/health-api.ts +119 -0
- package/src/lib/Apis/apis/images-api.ts +271 -0
- package/src/lib/Apis/apis/inventory-api.ts +375 -0
- package/src/lib/Apis/apis/marketing-api.ts +3099 -0
- package/src/lib/Apis/apis/notifications-api.ts +843 -0
- package/src/lib/Apis/apis/open-aiapi.ts +513 -0
- package/src/lib/Apis/apis/orders-api.ts +1343 -0
- package/src/lib/Apis/apis/payment-methods-api.ts +411 -0
- package/src/lib/Apis/apis/payments-api.ts +469 -0
- package/src/lib/Apis/apis/product-attributes-api.ts +538 -0
- package/src/lib/Apis/apis/product-favorite-list-api.ts +321 -0
- package/src/lib/Apis/apis/product-variants-api.ts +648 -0
- package/src/lib/Apis/apis/products-api.ts +1442 -0
- package/src/lib/Apis/apis/review-api.ts +1383 -0
- package/src/lib/Apis/apis/roles-api.ts +614 -0
- package/src/lib/Apis/apis/shipping-api.ts +703 -0
- package/src/lib/Apis/apis/statistics-api.ts +234 -0
- package/src/lib/Apis/apis/stores-api.ts +1519 -0
- package/src/lib/Apis/apis/sub-categories-api.ts +1208 -0
- package/src/lib/Apis/apis/user-groups-api.ts +1198 -0
- package/src/lib/Apis/apis/users-api.ts +1403 -0
- package/src/lib/Apis/apis/web-hooks-api.ts +198 -0
- package/src/lib/Apis/base.ts +70 -0
- package/src/lib/Apis/configuration.ts +75 -0
- package/src/lib/Apis/index.ts +17 -0
- package/src/lib/Apis/models/add-contact-to-list-dto.ts +33 -0
- package/src/lib/Apis/models/add-message-dto.ts +56 -0
- package/src/lib/Apis/models/address-created-request.ts +134 -0
- package/src/lib/Apis/models/address.ts +164 -0
- package/src/lib/Apis/models/allow-user-credit-dto.ts +27 -0
- package/src/lib/Apis/models/appointment.ts +75 -0
- package/src/lib/Apis/models/available-dates-dto.ts +33 -0
- package/src/lib/Apis/models/available-suggested-dates-dto.ts +33 -0
- package/src/lib/Apis/models/blog.ts +75 -0
- package/src/lib/Apis/models/browser-stats-response-dto.ts +40 -0
- package/src/lib/Apis/models/bulk-move-subcategories-dto.ts +33 -0
- package/src/lib/Apis/models/bulk-unassign-subcategories-dto.ts +27 -0
- package/src/lib/Apis/models/campaign-content-response-dto.ts +40 -0
- package/src/lib/Apis/models/campaign-draft-dto.ts +175 -0
- package/src/lib/Apis/models/campaign-draft-response-dto.ts +40 -0
- package/src/lib/Apis/models/campaign-draft-schedule-dto.ts +49 -0
- package/src/lib/Apis/models/campaign-draft-schedule-response-dto.ts +40 -0
- package/src/lib/Apis/models/campaign-draft-sending-dto.ts +43 -0
- package/src/lib/Apis/models/campaign-draft-sending-response-dto.ts +40 -0
- package/src/lib/Apis/models/cart-body-dto.ts +40 -0
- package/src/lib/Apis/models/cart-body-populated.ts +47 -0
- package/src/lib/Apis/models/cart-item-populated.ts +41 -0
- package/src/lib/Apis/models/cart-item.ts +33 -0
- package/src/lib/Apis/models/cart-response-dto.ts +70 -0
- package/src/lib/Apis/models/categories-paginated-response-dto.ts +52 -0
- package/src/lib/Apis/models/category-filters.ts +40 -0
- package/src/lib/Apis/models/category-populated.ts +106 -0
- package/src/lib/Apis/models/category-sub-category-populated.ts +51 -0
- package/src/lib/Apis/models/category.ts +99 -0
- package/src/lib/Apis/models/categorys-headlines-response-dto.ts +40 -0
- package/src/lib/Apis/models/change-user-email-dto.ts +27 -0
- package/src/lib/Apis/models/chat.ts +33 -0
- package/src/lib/Apis/models/check-notifications-response-dto.ts +33 -0
- package/src/lib/Apis/models/contact-aggregated-stats-response-dto.ts +40 -0
- package/src/lib/Apis/models/contact-full-dto.ts +93 -0
- package/src/lib/Apis/models/contact-full-response-dto.ts +40 -0
- package/src/lib/Apis/models/contact-list-stats-response-dto.ts +40 -0
- package/src/lib/Apis/models/contact-lists-response-dto.ts +40 -0
- package/src/lib/Apis/models/contact-us.ts +81 -0
- package/src/lib/Apis/models/country-stats-response-dto.ts +40 -0
- package/src/lib/Apis/models/create-address-dto.ts +134 -0
- package/src/lib/Apis/models/create-blog-dto.ts +45 -0
- package/src/lib/Apis/models/create-category-dto.ts +45 -0
- package/src/lib/Apis/models/create-chat-dto.ts +39 -0
- package/src/lib/Apis/models/create-contact-dto.ts +39 -0
- package/src/lib/Apis/models/create-contact-list-dto.ts +27 -0
- package/src/lib/Apis/models/create-discount-dto.ts +208 -0
- package/src/lib/Apis/models/create-draft-dto.ts +67 -0
- package/src/lib/Apis/models/create-email-template-dto.ts +51 -0
- package/src/lib/Apis/models/create-event-dto.ts +52 -0
- package/src/lib/Apis/models/create-marketing-campaign-dto.ts +81 -0
- package/src/lib/Apis/models/create-message-dto.ts +57 -0
- package/src/lib/Apis/models/create-notification-dto.ts +75 -0
- package/src/lib/Apis/models/create-product-attribute-dto.ts +33 -0
- package/src/lib/Apis/models/create-product-dto.ts +94 -0
- package/src/lib/Apis/models/create-review-dto.ts +63 -0
- package/src/lib/Apis/models/create-role-dto.ts +57 -0
- package/src/lib/Apis/models/create-single-variant-product-dto.ts +155 -0
- package/src/lib/Apis/models/create-store-address-dto.ts +134 -0
- package/src/lib/Apis/models/create-store-dto.ts +105 -0
- package/src/lib/Apis/models/create-sub-category-dto.ts +45 -0
- package/src/lib/Apis/models/create-user-dto.ts +89 -0
- package/src/lib/Apis/models/create-user-group-dto.ts +39 -0
- package/src/lib/Apis/models/create-variant-dto.ts +119 -0
- package/src/lib/Apis/models/create-zone-dto.ts +82 -0
- package/src/lib/Apis/models/custom-product-dto.ts +63 -0
- package/src/lib/Apis/models/default-payment-method-request-dto.ts +27 -0
- package/src/lib/Apis/models/delete-file-dto.ts +27 -0
- package/src/lib/Apis/models/delete-many-files-dto.ts +27 -0
- package/src/lib/Apis/models/discount-paginated-response.ts +52 -0
- package/src/lib/Apis/models/discount.ts +245 -0
- package/src/lib/Apis/models/discounts-insights-dto.ts +57 -0
- package/src/lib/Apis/models/draft.ts +79 -0
- package/src/lib/Apis/models/email-invoice-dto.ts +45 -0
- package/src/lib/Apis/models/email-template-response-dto.ts +117 -0
- package/src/lib/Apis/models/event.ts +76 -0
- package/src/lib/Apis/models/extended-product-dto.ts +204 -0
- package/src/lib/Apis/models/fileproccesor-upload-body.ts +27 -0
- package/src/lib/Apis/models/forget-password.ts +27 -0
- package/src/lib/Apis/models/frequently-bought-product-dto.ts +71 -0
- package/src/lib/Apis/models/general-stats-response-dto.ts +40 -0
- package/src/lib/Apis/models/generate-day-slots-dto.ts +51 -0
- package/src/lib/Apis/models/generate-month-slots-dto.ts +57 -0
- package/src/lib/Apis/models/generate-week-slots-dto.ts +57 -0
- package/src/lib/Apis/models/google-analytics-request-dto.ts +55 -0
- package/src/lib/Apis/models/google-analytics-response-dto.ts +39 -0
- package/src/lib/Apis/models/group-with-no-users-dto.ts +75 -0
- package/src/lib/Apis/models/group-with-users-dto.ts +76 -0
- package/src/lib/Apis/models/images-upload-body.ts +27 -0
- package/src/lib/Apis/models/index.ts +197 -0
- package/src/lib/Apis/models/inventory-paginated-response.ts +75 -0
- package/src/lib/Apis/models/link-stats-response-dto.ts +40 -0
- package/src/lib/Apis/models/login-dto.ts +33 -0
- package/src/lib/Apis/models/manual-discount.ts +49 -0
- package/src/lib/Apis/models/manual-order-dto.ts +133 -0
- package/src/lib/Apis/models/manual-shipping-dto.ts +45 -0
- package/src/lib/Apis/models/marketing-campaign-content-dto.ts +27 -0
- package/src/lib/Apis/models/marketing-list-contact-dto.ts +51 -0
- package/src/lib/Apis/models/move-subcategory-dto.ts +27 -0
- package/src/lib/Apis/models/my-favorite-list-dto.ts +52 -0
- package/src/lib/Apis/models/notification.ts +93 -0
- package/src/lib/Apis/models/object-id.ts +21 -0
- package/src/lib/Apis/models/open-api.ts +33 -0
- package/src/lib/Apis/models/order-paginated-response.ts +52 -0
- package/src/lib/Apis/models/order.ts +214 -0
- package/src/lib/Apis/models/orders-insights-dto.ts +69 -0
- package/src/lib/Apis/models/paginated-products-dto.ts +52 -0
- package/src/lib/Apis/models/payment-method-data.ts +34 -0
- package/src/lib/Apis/models/payment-method.ts +51 -0
- package/src/lib/Apis/models/payment-time-line-dto.ts +56 -0
- package/src/lib/Apis/models/payment.ts +182 -0
- package/src/lib/Apis/models/payments-insights-dto.ts +69 -0
- package/src/lib/Apis/models/payments-paginated-response.ts +52 -0
- package/src/lib/Apis/models/pick-type-class.ts +51 -0
- package/src/lib/Apis/models/populated-chat-dto.ts +95 -0
- package/src/lib/Apis/models/populated-discount.ts +246 -0
- package/src/lib/Apis/models/populated-order.ts +209 -0
- package/src/lib/Apis/models/prefered-pick-or-delivery-time-dto.ts +33 -0
- package/src/lib/Apis/models/price-range.ts +33 -0
- package/src/lib/Apis/models/product-attribute.ts +57 -0
- package/src/lib/Apis/models/product-variant.ts +167 -0
- package/src/lib/Apis/models/product.ts +136 -0
- package/src/lib/Apis/models/products-insights-dto.ts +45 -0
- package/src/lib/Apis/models/rate-dto.ts +123 -0
- package/src/lib/Apis/models/refill-request-dto.ts +75 -0
- package/src/lib/Apis/models/refill-request.ts +105 -0
- package/src/lib/Apis/models/register-or-login-with-gmail.ts +27 -0
- package/src/lib/Apis/models/reserve-appointment.ts +261 -0
- package/src/lib/Apis/models/review.ts +93 -0
- package/src/lib/Apis/models/role.ts +69 -0
- package/src/lib/Apis/models/schedule-campaign-draft-dto.ts +27 -0
- package/src/lib/Apis/models/send-test-email-dto.ts +28 -0
- package/src/lib/Apis/models/shallow-parent-category-dto.ts +33 -0
- package/src/lib/Apis/models/shipment-details-dto.ts +88 -0
- package/src/lib/Apis/models/shipment-status-dto.ts +117 -0
- package/src/lib/Apis/models/shipment-with-order.ts +105 -0
- package/src/lib/Apis/models/shipment.ts +104 -0
- package/src/lib/Apis/models/shipping-info.ts +88 -0
- package/src/lib/Apis/models/single-browser-stats-dto.ts +45 -0
- package/src/lib/Apis/models/single-contact-aggregated-stats-dto.ts +129 -0
- package/src/lib/Apis/models/single-contact-list-stats-dto.ts +117 -0
- package/src/lib/Apis/models/single-country-stats-dto.ts +39 -0
- package/src/lib/Apis/models/single-general-stats.ts +153 -0
- package/src/lib/Apis/models/single-link-stats-dto.ts +39 -0
- package/src/lib/Apis/models/single-message-populated.ts +59 -0
- package/src/lib/Apis/models/single-notification-dto.ts +99 -0
- package/src/lib/Apis/models/single-product-media.ts +74 -0
- package/src/lib/Apis/models/single-recipient-dto.ts +33 -0
- package/src/lib/Apis/models/single-suggest-attribute.ts +33 -0
- package/src/lib/Apis/models/statistic-dto.ts +171 -0
- package/src/lib/Apis/models/store-entity.ts +117 -0
- package/src/lib/Apis/models/store.ts +135 -0
- package/src/lib/Apis/models/sub-category-headlines-only-response-dto.ts +39 -0
- package/src/lib/Apis/models/sub-category.ts +93 -0
- package/src/lib/Apis/models/suggest-attributes.ts +28 -0
- package/src/lib/Apis/models/suggested-slot.ts +33 -0
- package/src/lib/Apis/models/table-cell-dto.ts +33 -0
- package/src/lib/Apis/models/table-dto.ts +34 -0
- package/src/lib/Apis/models/tadmin-session-data.ts +47 -0
- package/src/lib/Apis/models/track-dto.ts +94 -0
- package/src/lib/Apis/models/tracking-status-location-base.ts +45 -0
- package/src/lib/Apis/models/tracking-status-substatus.ts +39 -0
- package/src/lib/Apis/models/tracking-status.ts +71 -0
- package/src/lib/Apis/models/transfere-patient-request.ts +123 -0
- package/src/lib/Apis/models/transfere-patients-request-dto.ts +99 -0
- package/src/lib/Apis/models/tuser-session-data.ts +34 -0
- package/src/lib/Apis/models/update-address-dto.ts +134 -0
- package/src/lib/Apis/models/update-blog-dto.ts +45 -0
- package/src/lib/Apis/models/update-campaign-draft-content-dto.ts +27 -0
- package/src/lib/Apis/models/update-category-dto.ts +45 -0
- package/src/lib/Apis/models/update-discount-dto.ts +208 -0
- package/src/lib/Apis/models/update-event-dto.ts +52 -0
- package/src/lib/Apis/models/update-items-order-dto.ts +27 -0
- package/src/lib/Apis/models/update-marketing-camp-draft-dto.ts +81 -0
- package/src/lib/Apis/models/update-message-dto.ts +57 -0
- package/src/lib/Apis/models/update-product-attribute-dto.ts +33 -0
- package/src/lib/Apis/models/update-product-dto.ts +96 -0
- package/src/lib/Apis/models/update-product-variant-dto.ts +119 -0
- package/src/lib/Apis/models/update-refill-request-dto.ts +75 -0
- package/src/lib/Apis/models/update-review-dto.ts +63 -0
- package/src/lib/Apis/models/update-role-dto.ts +57 -0
- package/src/lib/Apis/models/update-store-dto.ts +105 -0
- package/src/lib/Apis/models/update-sub-category-dto.ts +45 -0
- package/src/lib/Apis/models/update-transfere-patients-request-dto.ts +99 -0
- package/src/lib/Apis/models/update-user-dto.ts +239 -0
- package/src/lib/Apis/models/update-user-group-dto.ts +39 -0
- package/src/lib/Apis/models/update-zone-dto.ts +82 -0
- package/src/lib/Apis/models/upload-pdf-body.ts +27 -0
- package/src/lib/Apis/models/used-by.ts +87 -0
- package/src/lib/Apis/models/user-entity.ts +220 -0
- package/src/lib/Apis/models/user-group.ts +75 -0
- package/src/lib/Apis/models/user-insights-dto.ts +39 -0
- package/src/lib/Apis/models/user-with-no-id.ts +226 -0
- package/src/lib/Apis/models/user.ts +232 -0
- package/src/lib/Apis/models/users-paginated-response.ts +52 -0
- package/src/lib/Apis/models/verify-email-dto.ts +33 -0
- package/src/lib/Apis/models/zone-single-size.ts +51 -0
- package/src/lib/Apis/models/zone.ts +106 -0
- package/src/lib/Apis/wrapper.ts +37 -0
- package/src/lib/api/auth.ts +81 -0
- package/src/lib/api/cart.ts +42 -0
- package/src/lib/api/client.ts +118 -0
- package/src/lib/api/orders.ts +53 -0
- package/src/lib/api/products.ts +51 -0
- package/src/lib/api-adapter/auth-adapter.ts +196 -0
- package/src/lib/api-adapter/cart-adapter.ts +193 -0
- package/src/lib/api-adapter/config.ts +76 -0
- package/src/lib/api-adapter/index.ts +13 -0
- package/src/lib/api-adapter/mappers.ts +147 -0
- package/src/lib/api-adapter/orders-adapter.ts +195 -0
- package/src/lib/api-adapter/products-adapter.ts +194 -0
- package/src/lib/types/index.ts +152 -0
- package/src/lib/utils/colors.ts +51 -0
- package/src/lib/utils/format.ts +48 -0
- package/src/providers/AuthProvider.tsx +117 -0
- package/src/providers/CartProvider.tsx +131 -0
- package/src/providers/EcommerceProvider.tsx +34 -0
- package/src/providers/ThemeProvider.tsx +57 -0
- package/src/screens/CartScreen.tsx +140 -0
- package/src/screens/CheckoutScreen.tsx +340 -0
- package/src/screens/CurrentOrdersScreen.tsx +85 -0
- package/src/screens/LoginScreen.tsx +149 -0
- package/src/screens/OrdersScreen.tsx +86 -0
- package/src/screens/ProductDetailScreen.tsx +255 -0
- package/src/screens/ProfileScreen.tsx +211 -0
- package/src/screens/RegisterScreen.tsx +200 -0
- package/src/screens/ShopScreen.tsx +233 -0
- 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
|
+
|