@duongthiu/onex-core 0.1.0 → 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 (190) hide show
  1. package/README.md +44 -65
  2. package/THEME_API.md +36 -33
  3. package/dist/api.js +14 -0
  4. package/dist/api.js.map +1 -0
  5. package/dist/api.mjs +5 -0
  6. package/dist/api.mjs.map +1 -0
  7. package/dist/auth.js +23 -0
  8. package/dist/auth.js.map +1 -0
  9. package/dist/auth.mjs +6 -0
  10. package/dist/auth.mjs.map +1 -0
  11. package/dist/blog.js +22 -0
  12. package/dist/blog.js.map +1 -0
  13. package/dist/blog.mjs +5 -0
  14. package/dist/blog.mjs.map +1 -0
  15. package/dist/cart.js +27 -0
  16. package/dist/cart.js.map +1 -0
  17. package/dist/cart.mjs +6 -0
  18. package/dist/cart.mjs.map +1 -0
  19. package/dist/chunk-2CSWHI3L.js +210 -0
  20. package/dist/chunk-2CSWHI3L.js.map +1 -0
  21. package/dist/chunk-2FGHIDUV.js +99 -0
  22. package/dist/chunk-2FGHIDUV.js.map +1 -0
  23. package/dist/chunk-2NMEKWO5.js +40 -0
  24. package/dist/chunk-2NMEKWO5.js.map +1 -0
  25. package/dist/chunk-43BVHGDT.mjs +131 -0
  26. package/dist/chunk-43BVHGDT.mjs.map +1 -0
  27. package/dist/chunk-4JVQJI3I.mjs +290 -0
  28. package/dist/chunk-4JVQJI3I.mjs.map +1 -0
  29. package/dist/chunk-5N2EKK5O.js +9550 -0
  30. package/dist/chunk-5N2EKK5O.js.map +1 -0
  31. package/dist/chunk-5T6NDVSN.js +76 -0
  32. package/dist/chunk-5T6NDVSN.js.map +1 -0
  33. package/dist/chunk-73AINNCI.mjs +201 -0
  34. package/dist/chunk-73AINNCI.mjs.map +1 -0
  35. package/dist/chunk-AIXBDAVP.mjs +61 -0
  36. package/dist/chunk-AIXBDAVP.mjs.map +1 -0
  37. package/dist/chunk-ALYN5HAC.js +210 -0
  38. package/dist/chunk-ALYN5HAC.js.map +1 -0
  39. package/dist/chunk-AREMJR3Q.js +36 -0
  40. package/dist/chunk-AREMJR3Q.js.map +1 -0
  41. package/dist/chunk-DXAI6XOI.mjs +33 -0
  42. package/dist/chunk-DXAI6XOI.mjs.map +1 -0
  43. package/dist/chunk-F5TFNWFJ.mjs +257 -0
  44. package/dist/chunk-F5TFNWFJ.mjs.map +1 -0
  45. package/dist/chunk-FQ7FWUZN.js +265 -0
  46. package/dist/chunk-FQ7FWUZN.js.map +1 -0
  47. package/dist/{chunk-3SZX6LHT.js → chunk-J27VGXJH.js} +2 -24
  48. package/dist/chunk-J27VGXJH.js.map +1 -0
  49. package/dist/chunk-JZ46LLTZ.js +121 -0
  50. package/dist/chunk-JZ46LLTZ.js.map +1 -0
  51. package/dist/chunk-K24UHN6G.mjs +76 -0
  52. package/dist/chunk-K24UHN6G.mjs.map +1 -0
  53. package/dist/chunk-KCQGGU5R.mjs +344 -0
  54. package/dist/chunk-KCQGGU5R.mjs.map +1 -0
  55. package/dist/chunk-MT22NYKT.mjs +117 -0
  56. package/dist/chunk-MT22NYKT.mjs.map +1 -0
  57. package/dist/chunk-NDD472IZ.js +85 -0
  58. package/dist/chunk-NDD472IZ.js.map +1 -0
  59. package/dist/chunk-NHOIGGYU.mjs +833 -0
  60. package/dist/chunk-NHOIGGYU.mjs.map +1 -0
  61. package/dist/chunk-O3XR7TW3.mjs +12 -0
  62. package/dist/chunk-O3XR7TW3.mjs.map +1 -0
  63. package/dist/chunk-OAPYSC2X.mjs +206 -0
  64. package/dist/chunk-OAPYSC2X.mjs.map +1 -0
  65. package/dist/{chunk-XE4EOKS4.mjs → chunk-ONJREDYY.mjs} +3 -23
  66. package/dist/chunk-ONJREDYY.mjs.map +1 -0
  67. package/dist/chunk-OVT2LUAM.js +197 -0
  68. package/dist/chunk-OVT2LUAM.js.map +1 -0
  69. package/dist/chunk-OWNGNGKL.js +331 -0
  70. package/dist/chunk-OWNGNGKL.js.map +1 -0
  71. package/dist/chunk-P7SXNZSV.js +298 -0
  72. package/dist/chunk-P7SXNZSV.js.map +1 -0
  73. package/dist/chunk-PFJOL3HI.mjs +71 -0
  74. package/dist/chunk-PFJOL3HI.mjs.map +1 -0
  75. package/dist/chunk-PPULMWJ6.js +295 -0
  76. package/dist/chunk-PPULMWJ6.js.map +1 -0
  77. package/dist/chunk-RGIVKACG.js +359 -0
  78. package/dist/chunk-RGIVKACG.js.map +1 -0
  79. package/dist/chunk-RPP5K2LP.js +870 -0
  80. package/dist/chunk-RPP5K2LP.js.map +1 -0
  81. package/dist/{chunk-7EON6Q4L.mjs → chunk-RUCHWUD7.mjs} +7651 -6370
  82. package/dist/chunk-RUCHWUD7.mjs.map +1 -0
  83. package/dist/chunk-SEVUIX4H.js +137 -0
  84. package/dist/chunk-SEVUIX4H.js.map +1 -0
  85. package/dist/chunk-SK2FSHFM.mjs +208 -0
  86. package/dist/chunk-SK2FSHFM.mjs.map +1 -0
  87. package/dist/chunk-T6EJ2GAV.mjs +294 -0
  88. package/dist/chunk-T6EJ2GAV.mjs.map +1 -0
  89. package/dist/chunk-ULBDOFZI.mjs +302 -0
  90. package/dist/chunk-ULBDOFZI.mjs.map +1 -0
  91. package/dist/chunk-V3JIELNV.js +241 -0
  92. package/dist/chunk-V3JIELNV.js.map +1 -0
  93. package/dist/chunk-V5E2KWMA.mjs +238 -0
  94. package/dist/chunk-V5E2KWMA.mjs.map +1 -0
  95. package/dist/chunk-VJA3ER6A.js +14 -0
  96. package/dist/chunk-VJA3ER6A.js.map +1 -0
  97. package/dist/chunk-VLI7ULX5.js +66 -0
  98. package/dist/chunk-VLI7ULX5.js.map +1 -0
  99. package/dist/chunk-WFGS5OFH.mjs +189 -0
  100. package/dist/chunk-WFGS5OFH.mjs.map +1 -0
  101. package/dist/chunk-WVC5GP24.mjs +96 -0
  102. package/dist/chunk-WVC5GP24.mjs.map +1 -0
  103. package/dist/chunk-YOSPWY5K.mjs +36 -0
  104. package/dist/chunk-YOSPWY5K.mjs.map +1 -0
  105. package/dist/chunk-ZFFXXLX7.js +205 -0
  106. package/dist/chunk-ZFFXXLX7.js.map +1 -0
  107. package/dist/client.js +512 -249
  108. package/dist/client.mjs +21 -2
  109. package/dist/components.js +393 -0
  110. package/dist/components.js.map +1 -0
  111. package/dist/components.mjs +8 -0
  112. package/dist/components.mjs.map +1 -0
  113. package/dist/config.js +17 -0
  114. package/dist/config.js.map +1 -0
  115. package/dist/config.mjs +4 -0
  116. package/dist/config.mjs.map +1 -0
  117. package/dist/contact.js +22 -0
  118. package/dist/contact.js.map +1 -0
  119. package/dist/contact.mjs +5 -0
  120. package/dist/contact.mjs.map +1 -0
  121. package/dist/contexts.js +51 -0
  122. package/dist/contexts.js.map +1 -0
  123. package/dist/contexts.mjs +6 -0
  124. package/dist/contexts.mjs.map +1 -0
  125. package/dist/finance.js +26 -0
  126. package/dist/finance.js.map +1 -0
  127. package/dist/finance.mjs +5 -0
  128. package/dist/finance.mjs.map +1 -0
  129. package/dist/icons.js +15 -0
  130. package/dist/icons.js.map +1 -0
  131. package/dist/icons.mjs +4 -0
  132. package/dist/icons.mjs.map +1 -0
  133. package/dist/index.js +512 -249
  134. package/dist/index.js.map +1 -1
  135. package/dist/index.mjs +21 -2
  136. package/dist/index.mjs.map +1 -1
  137. package/dist/internal.js +1437 -0
  138. package/dist/internal.js.map +1 -0
  139. package/dist/internal.mjs +1404 -0
  140. package/dist/internal.mjs.map +1 -0
  141. package/dist/motion.js +51 -0
  142. package/dist/motion.js.map +1 -0
  143. package/dist/motion.mjs +38 -0
  144. package/dist/motion.mjs.map +1 -0
  145. package/dist/orders.js +22 -0
  146. package/dist/orders.js.map +1 -0
  147. package/dist/orders.mjs +5 -0
  148. package/dist/orders.mjs.map +1 -0
  149. package/dist/products.js +27 -0
  150. package/dist/products.js.map +1 -0
  151. package/dist/products.mjs +6 -0
  152. package/dist/products.mjs.map +1 -0
  153. package/dist/registry.js +44 -0
  154. package/dist/registry.js.map +1 -0
  155. package/dist/registry.mjs +7 -0
  156. package/dist/registry.mjs.map +1 -0
  157. package/dist/renderers.js +51 -0
  158. package/dist/renderers.js.map +1 -0
  159. package/dist/renderers.mjs +6 -0
  160. package/dist/renderers.mjs.map +1 -0
  161. package/dist/server.js +11 -189
  162. package/dist/server.js.map +1 -1
  163. package/dist/server.mjs +3 -186
  164. package/dist/server.mjs.map +1 -1
  165. package/dist/types.js +37 -0
  166. package/dist/types.js.map +1 -0
  167. package/dist/types.mjs +4 -0
  168. package/dist/types.mjs.map +1 -0
  169. package/dist/utils.js +160 -0
  170. package/dist/utils.js.map +1 -0
  171. package/dist/utils.mjs +7 -0
  172. package/dist/utils.mjs.map +1 -0
  173. package/dist/wrappers.js +104 -0
  174. package/dist/wrappers.js.map +1 -0
  175. package/dist/wrappers.mjs +96 -0
  176. package/dist/wrappers.mjs.map +1 -0
  177. package/package.json +112 -9
  178. package/dist/api-vuL1Eg5L.d.mts +0 -2961
  179. package/dist/api-vuL1Eg5L.d.ts +0 -2961
  180. package/dist/chunk-3SZX6LHT.js.map +0 -1
  181. package/dist/chunk-7EON6Q4L.mjs.map +0 -1
  182. package/dist/chunk-WDY773GJ.js +0 -8308
  183. package/dist/chunk-WDY773GJ.js.map +0 -1
  184. package/dist/chunk-XE4EOKS4.mjs.map +0 -1
  185. package/dist/client.d.mts +0 -1461
  186. package/dist/client.d.ts +0 -1461
  187. package/dist/index.d.mts +0 -125
  188. package/dist/index.d.ts +0 -125
  189. package/dist/server.d.mts +0 -70
  190. package/dist/server.d.ts +0 -70
@@ -0,0 +1,210 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var zustand = require('zustand');
5
+
6
+ // src/features/blog/use-blog.ts
7
+ var blogService = null;
8
+ var useBlog = zustand.create((set) => ({
9
+ // Initial state
10
+ blogs: [],
11
+ currentBlog: null,
12
+ categories: [],
13
+ tags: [],
14
+ isLoading: false,
15
+ error: null,
16
+ total: 0,
17
+ totalPages: 0,
18
+ currentPage: 1,
19
+ /**
20
+ * Fetch blogs list
21
+ */
22
+ fetchBlogs: async (params) => {
23
+ if (!blogService) {
24
+ throw new Error(
25
+ "Blog service not initialized. Call initializeOnex() first."
26
+ );
27
+ }
28
+ set({ isLoading: true, error: null });
29
+ try {
30
+ const response = await blogService.getBlogs(params);
31
+ set({
32
+ blogs: response.items,
33
+ total: response.total,
34
+ totalPages: Math.ceil(response.total / response.limit),
35
+ currentPage: response.page,
36
+ isLoading: false
37
+ });
38
+ } catch (error) {
39
+ set({ error: error.message, isLoading: false });
40
+ }
41
+ },
42
+ /**
43
+ * Fetch blog by ID
44
+ */
45
+ fetchBlogById: async (blogId) => {
46
+ if (!blogService) {
47
+ throw new Error(
48
+ "Blog service not initialized. Call initializeOnex() first."
49
+ );
50
+ }
51
+ set({ isLoading: true, error: null });
52
+ try {
53
+ const blog = await blogService.getBlogById(blogId);
54
+ set({ currentBlog: blog, isLoading: false });
55
+ } catch (error) {
56
+ set({ error: error.message, isLoading: false });
57
+ }
58
+ },
59
+ /**
60
+ * Fetch blog by slug
61
+ */
62
+ fetchBlogBySlug: async (slug) => {
63
+ if (!blogService) {
64
+ throw new Error(
65
+ "Blog service not initialized. Call initializeOnex() first."
66
+ );
67
+ }
68
+ set({ isLoading: true, error: null });
69
+ try {
70
+ const blog = await blogService.getBlogBySlug(slug);
71
+ set({ currentBlog: blog, isLoading: false });
72
+ } catch (error) {
73
+ set({ error: error.message, isLoading: false });
74
+ }
75
+ },
76
+ /**
77
+ * Fetch blog categories
78
+ */
79
+ fetchCategories: async () => {
80
+ if (!blogService) {
81
+ throw new Error(
82
+ "Blog service not initialized. Call initializeOnex() first."
83
+ );
84
+ }
85
+ set({ isLoading: true, error: null });
86
+ try {
87
+ const categories = await blogService.getCategories();
88
+ set({ categories, isLoading: false });
89
+ } catch (error) {
90
+ set({ error: error.message, isLoading: false });
91
+ }
92
+ },
93
+ /**
94
+ * Fetch blogs by category
95
+ */
96
+ fetchBlogsByCategory: async (categoryId, params) => {
97
+ if (!blogService) {
98
+ throw new Error(
99
+ "Blog service not initialized. Call initializeOnex() first."
100
+ );
101
+ }
102
+ set({ isLoading: true, error: null });
103
+ try {
104
+ const response = await blogService.getBlogsByCategory(categoryId, params);
105
+ set({
106
+ blogs: response.items,
107
+ total: response.total,
108
+ totalPages: Math.ceil(response.total / response.limit),
109
+ currentPage: response.page,
110
+ isLoading: false
111
+ });
112
+ } catch (error) {
113
+ set({ error: error.message, isLoading: false });
114
+ }
115
+ },
116
+ /**
117
+ * Fetch blog tags
118
+ */
119
+ fetchTags: async () => {
120
+ if (!blogService) {
121
+ throw new Error(
122
+ "Blog service not initialized. Call initializeOnex() first."
123
+ );
124
+ }
125
+ set({ isLoading: true, error: null });
126
+ try {
127
+ const tags = await blogService.getTags();
128
+ set({ tags, isLoading: false });
129
+ } catch (error) {
130
+ set({ error: error.message, isLoading: false });
131
+ }
132
+ },
133
+ /**
134
+ * Clear error
135
+ */
136
+ clearError: () => {
137
+ set({ error: null });
138
+ },
139
+ /**
140
+ * Clear current blog
141
+ */
142
+ clearCurrentBlog: () => {
143
+ set({ currentBlog: null });
144
+ }
145
+ }));
146
+ function initializeBlogService(service) {
147
+ blogService = service;
148
+ }
149
+
150
+ // src/features/blog/blog-service.ts
151
+ var BlogService = class {
152
+ constructor(api, companyId) {
153
+ this.api = api;
154
+ this.companyId = companyId;
155
+ }
156
+ /**
157
+ * Get list of blogs
158
+ */
159
+ async getBlogs(params) {
160
+ const endpoint = `/blog/public/${this.companyId}/blogs`;
161
+ return await this.api.get(
162
+ endpoint,
163
+ params
164
+ );
165
+ }
166
+ /**
167
+ * Get blog by ID
168
+ */
169
+ async getBlogById(blogId) {
170
+ const endpoint = `/blog/public/${this.companyId}/blogs/${blogId}`;
171
+ return await this.api.get(endpoint);
172
+ }
173
+ /**
174
+ * Get blog by slug
175
+ */
176
+ async getBlogBySlug(slug) {
177
+ const endpoint = `/blog/public/${this.companyId}/blogs/slug/${slug}`;
178
+ return await this.api.get(endpoint);
179
+ }
180
+ /**
181
+ * Get blog categories
182
+ */
183
+ async getCategories() {
184
+ const endpoint = `/blog/public/${this.companyId}/categories`;
185
+ return await this.api.get(endpoint);
186
+ }
187
+ /**
188
+ * Get blogs by category
189
+ */
190
+ async getBlogsByCategory(categoryId, params) {
191
+ const endpoint = `/blog/public/${this.companyId}/blogs/category/${categoryId}`;
192
+ return await this.api.get(
193
+ endpoint,
194
+ params
195
+ );
196
+ }
197
+ /**
198
+ * Get blog tags
199
+ */
200
+ async getTags() {
201
+ const endpoint = `/blog/public/${this.companyId}/blog_tags`;
202
+ return await this.api.get(endpoint);
203
+ }
204
+ };
205
+
206
+ exports.BlogService = BlogService;
207
+ exports.initializeBlogService = initializeBlogService;
208
+ exports.useBlog = useBlog;
209
+ //# sourceMappingURL=chunk-2CSWHI3L.js.map
210
+ //# sourceMappingURL=chunk-2CSWHI3L.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/features/blog/use-blog.ts","../src/features/blog/blog-service.ts"],"names":["create"],"mappings":"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","file":"chunk-2CSWHI3L.js","sourcesContent":["/**\n * Blog Hook\n * Zustand store for blog state and actions\n */\n\nimport { create } from \"zustand\";\nimport { BlogService } from \"./blog-service\";\nimport type { Blog, BlogListParams, BlogCategory } from \"./types\";\n\ninterface BlogState {\n // State\n blogs: Blog[];\n currentBlog: Blog | null;\n categories: BlogCategory[];\n tags: string[];\n isLoading: boolean;\n error: string | null;\n total: number;\n totalPages: number;\n currentPage: number;\n\n // Actions\n fetchBlogs: (params?: BlogListParams) => Promise<void>;\n fetchBlogById: (blogId: string) => Promise<void>;\n fetchBlogBySlug: (slug: string) => Promise<void>;\n fetchCategories: () => Promise<void>;\n fetchBlogsByCategory: (\n categoryId: string,\n params?: BlogListParams\n ) => Promise<void>;\n fetchTags: () => Promise<void>;\n clearError: () => void;\n clearCurrentBlog: () => void;\n}\n\nlet blogService: BlogService | null = null;\n\nexport const useBlog = create<BlogState>((set) => ({\n // Initial state\n blogs: [],\n currentBlog: null,\n categories: [],\n tags: [],\n isLoading: false,\n error: null,\n total: 0,\n totalPages: 0,\n currentPage: 1,\n\n /**\n * Fetch blogs list\n */\n fetchBlogs: async (params) => {\n if (!blogService) {\n throw new Error(\n \"Blog service not initialized. Call initializeOnex() first.\"\n );\n }\n\n set({ isLoading: true, error: null });\n try {\n const response = await blogService.getBlogs(params);\n set({\n blogs: response.items,\n total: response.total,\n totalPages: Math.ceil(response.total / response.limit),\n currentPage: response.page,\n isLoading: false,\n });\n } catch (error) {\n set({ error: (error as Error).message, isLoading: false });\n }\n },\n\n /**\n * Fetch blog by ID\n */\n fetchBlogById: async (blogId) => {\n if (!blogService) {\n throw new Error(\n \"Blog service not initialized. Call initializeOnex() first.\"\n );\n }\n\n set({ isLoading: true, error: null });\n try {\n const blog = await blogService.getBlogById(blogId);\n set({ currentBlog: blog, isLoading: false });\n } catch (error) {\n set({ error: (error as Error).message, isLoading: false });\n }\n },\n\n /**\n * Fetch blog by slug\n */\n fetchBlogBySlug: async (slug) => {\n if (!blogService) {\n throw new Error(\n \"Blog service not initialized. Call initializeOnex() first.\"\n );\n }\n\n set({ isLoading: true, error: null });\n try {\n const blog = await blogService.getBlogBySlug(slug);\n set({ currentBlog: blog, isLoading: false });\n } catch (error) {\n set({ error: (error as Error).message, isLoading: false });\n }\n },\n\n /**\n * Fetch blog categories\n */\n fetchCategories: async () => {\n if (!blogService) {\n throw new Error(\n \"Blog service not initialized. Call initializeOnex() first.\"\n );\n }\n\n set({ isLoading: true, error: null });\n try {\n const categories = await blogService.getCategories();\n set({ categories, isLoading: false });\n } catch (error) {\n set({ error: (error as Error).message, isLoading: false });\n }\n },\n\n /**\n * Fetch blogs by category\n */\n fetchBlogsByCategory: async (categoryId, params) => {\n if (!blogService) {\n throw new Error(\n \"Blog service not initialized. Call initializeOnex() first.\"\n );\n }\n\n set({ isLoading: true, error: null });\n try {\n const response = await blogService.getBlogsByCategory(categoryId, params);\n set({\n blogs: response.items,\n total: response.total,\n totalPages: Math.ceil(response.total / response.limit),\n currentPage: response.page,\n isLoading: false,\n });\n } catch (error) {\n set({ error: (error as Error).message, isLoading: false });\n }\n },\n\n /**\n * Fetch blog tags\n */\n fetchTags: async () => {\n if (!blogService) {\n throw new Error(\n \"Blog service not initialized. Call initializeOnex() first.\"\n );\n }\n\n set({ isLoading: true, error: null });\n try {\n const tags = await blogService.getTags();\n set({ tags, isLoading: false });\n } catch (error) {\n set({ error: (error as Error).message, isLoading: false });\n }\n },\n\n /**\n * Clear error\n */\n clearError: () => {\n set({ error: null });\n },\n\n /**\n * Clear current blog\n */\n clearCurrentBlog: () => {\n set({ currentBlog: null });\n },\n}));\n\n/**\n * Initialize blog service\n * @internal Called by initializeOnex()\n */\nexport function initializeBlogService(service: BlogService): void {\n blogService = service;\n}\n","/**\n * Blog Service\n * Handles blog-related API calls\n */\n\nimport { ApiClient } from \"../../api/client\";\nimport type {\n Blog,\n BlogListResponse,\n BlogListParams,\n BlogCategory,\n} from \"./types\";\n\nexport class BlogService {\n constructor(\n private api: ApiClient,\n private companyId: string\n ) {}\n\n /**\n * Get list of blogs\n */\n async getBlogs(params?: BlogListParams): Promise<BlogListResponse> {\n const endpoint = `/blog/public/${this.companyId}/blogs`;\n return await this.api.get<BlogListResponse>(\n endpoint,\n params as Record<string, unknown>\n );\n }\n\n /**\n * Get blog by ID\n */\n async getBlogById(blogId: string): Promise<Blog> {\n const endpoint = `/blog/public/${this.companyId}/blogs/${blogId}`;\n return await this.api.get<Blog>(endpoint);\n }\n\n /**\n * Get blog by slug\n */\n async getBlogBySlug(slug: string): Promise<Blog> {\n const endpoint = `/blog/public/${this.companyId}/blogs/slug/${slug}`;\n return await this.api.get<Blog>(endpoint);\n }\n\n /**\n * Get blog categories\n */\n async getCategories(): Promise<BlogCategory[]> {\n const endpoint = `/blog/public/${this.companyId}/categories`;\n return await this.api.get<BlogCategory[]>(endpoint);\n }\n\n /**\n * Get blogs by category\n */\n async getBlogsByCategory(\n categoryId: string,\n params?: BlogListParams\n ): Promise<BlogListResponse> {\n const endpoint = `/blog/public/${this.companyId}/blogs/category/${categoryId}`;\n return await this.api.get<BlogListResponse>(\n endpoint,\n params as Record<string, unknown>\n );\n }\n\n /**\n * Get blog tags\n */\n async getTags(): Promise<string[]> {\n const endpoint = `/blog/public/${this.companyId}/blog_tags`;\n return await this.api.get<string[]>(endpoint);\n }\n}\n"]}
@@ -0,0 +1,99 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunk2NMEKWO5_js = require('./chunk-2NMEKWO5.js');
5
+ var react = require('react');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ var CartContext = react.createContext(void 0);
9
+ var CART_STORAGE_KEY = "onex-cart";
10
+ function getInitialCart() {
11
+ if (typeof window === "undefined") return [];
12
+ try {
13
+ const savedCart = localStorage.getItem(CART_STORAGE_KEY);
14
+ if (savedCart) {
15
+ return JSON.parse(savedCart);
16
+ }
17
+ } catch (error) {
18
+ console.error(
19
+ "[CartContext] Failed to load cart from localStorage:",
20
+ error
21
+ );
22
+ }
23
+ return [];
24
+ }
25
+ function CartProvider({ children }) {
26
+ const [items, setItems] = react.useState(() => getInitialCart());
27
+ react.useEffect(() => {
28
+ localStorage.setItem(CART_STORAGE_KEY, JSON.stringify(items));
29
+ }, [items]);
30
+ const addItem = (newItem) => {
31
+ setItems((currentItems) => {
32
+ const existingItem = currentItems.find(
33
+ (item) => item.productId === newItem.productId && (item.size || "") === (newItem.size || "") && (item.color || "") === (newItem.color || "") && (item.locationId || "") === (newItem.locationId || "")
34
+ );
35
+ if (existingItem) {
36
+ return currentItems.map(
37
+ (item) => item.id === existingItem.id ? chunk2NMEKWO5_js.__spreadProps(chunk2NMEKWO5_js.__spreadValues({}, item), { quantity: item.quantity + 1 }) : item
38
+ );
39
+ } else {
40
+ return [
41
+ ...currentItems,
42
+ chunk2NMEKWO5_js.__spreadProps(chunk2NMEKWO5_js.__spreadValues({}, newItem), {
43
+ id: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
44
+ quantity: 1
45
+ })
46
+ ];
47
+ }
48
+ });
49
+ };
50
+ const removeItem = (id) => {
51
+ setItems((currentItems) => currentItems.filter((item) => item.id !== id));
52
+ };
53
+ const updateQuantity = (id, quantity) => {
54
+ if (quantity < 1) {
55
+ removeItem(id);
56
+ return;
57
+ }
58
+ setItems(
59
+ (currentItems) => currentItems.map(
60
+ (item) => item.id === id ? chunk2NMEKWO5_js.__spreadProps(chunk2NMEKWO5_js.__spreadValues({}, item), { quantity }) : item
61
+ )
62
+ );
63
+ };
64
+ const clearCart = () => {
65
+ setItems([]);
66
+ };
67
+ const itemCount = items.reduce((sum, item) => sum + item.quantity, 0);
68
+ const subtotal = items.reduce(
69
+ (sum, item) => sum + item.price * item.quantity,
70
+ 0
71
+ );
72
+ return /* @__PURE__ */ jsxRuntime.jsx(
73
+ CartContext.Provider,
74
+ {
75
+ value: {
76
+ items,
77
+ addItem,
78
+ removeItem,
79
+ updateQuantity,
80
+ clearCart,
81
+ itemCount,
82
+ subtotal
83
+ },
84
+ children
85
+ }
86
+ );
87
+ }
88
+ function useCart() {
89
+ const context = react.useContext(CartContext);
90
+ if (context === void 0) {
91
+ throw new Error("useCart must be used within a CartProvider");
92
+ }
93
+ return context;
94
+ }
95
+
96
+ exports.CartProvider = CartProvider;
97
+ exports.useCart = useCart;
98
+ //# sourceMappingURL=chunk-2FGHIDUV.js.map
99
+ //# sourceMappingURL=chunk-2FGHIDUV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/contexts/cart-context.tsx"],"names":["createContext","useState","useEffect","__spreadProps","__spreadValues","jsx","useContext"],"mappings":"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","file":"chunk-2FGHIDUV.js","sourcesContent":["\"use client\";\n\n/**\n * Cart Context\n * Full shopping cart functionality with localStorage persistence\n * Supports product variants (size, color, SKU, location)\n */\n\nimport React, { createContext, useContext, useState, useEffect } from \"react\";\nimport type { CartItem, CartContextType } from \"../types\";\n\nconst CartContext = createContext<CartContextType | undefined>(undefined);\n\nconst CART_STORAGE_KEY = \"onex-cart\";\n\n/**\n * Load cart from localStorage (client-side only)\n */\nfunction getInitialCart(): CartItem[] {\n if (typeof window === \"undefined\") return [];\n\n try {\n const savedCart = localStorage.getItem(CART_STORAGE_KEY);\n if (savedCart) {\n return JSON.parse(savedCart);\n }\n } catch (error) {\n console.error(\n \"[CartContext] Failed to load cart from localStorage:\",\n error\n );\n }\n return [];\n}\n\nexport function CartProvider({ children }: { children: React.ReactNode }) {\n // Use lazy initialization to load from localStorage\n const [items, setItems] = useState<CartItem[]>(() => getInitialCart());\n\n // Save cart to localStorage whenever it changes\n useEffect(() => {\n localStorage.setItem(CART_STORAGE_KEY, JSON.stringify(items));\n }, [items]);\n\n /**\n * Add item to cart\n * Checks for duplicates based on productId, size, color, and locationId\n */\n const addItem = (newItem: Omit<CartItem, \"id\" | \"quantity\">) => {\n setItems((currentItems) => {\n // Check if item already exists (same product, size, color, and location)\n const existingItem = currentItems.find(\n (item) =>\n item.productId === newItem.productId &&\n (item.size || \"\") === (newItem.size || \"\") &&\n (item.color || \"\") === (newItem.color || \"\") &&\n (item.locationId || \"\") === (newItem.locationId || \"\")\n );\n\n if (existingItem) {\n // Increase quantity\n return currentItems.map((item) =>\n item.id === existingItem.id\n ? { ...item, quantity: item.quantity + 1 }\n : item\n );\n } else {\n // Add new item\n return [\n ...currentItems,\n {\n ...newItem,\n id: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n quantity: 1,\n },\n ];\n }\n });\n };\n\n /**\n * Remove item from cart by ID\n */\n const removeItem = (id: string) => {\n setItems((currentItems) => currentItems.filter((item) => item.id !== id));\n };\n\n /**\n * Update item quantity\n * Removes item if quantity < 1\n */\n const updateQuantity = (id: string, quantity: number) => {\n if (quantity < 1) {\n removeItem(id);\n return;\n }\n\n setItems((currentItems) =>\n currentItems.map((item) =>\n item.id === id ? { ...item, quantity } : item\n )\n );\n };\n\n /**\n * Clear all items from cart\n */\n const clearCart = () => {\n setItems([]);\n };\n\n // Calculate totals\n const itemCount = items.reduce((sum, item) => sum + item.quantity, 0);\n const subtotal = items.reduce(\n (sum, item) => sum + item.price * item.quantity,\n 0\n );\n\n return (\n <CartContext.Provider\n value={{\n items,\n addItem,\n removeItem,\n updateQuantity,\n clearCart,\n itemCount,\n subtotal,\n }}\n >\n {children}\n </CartContext.Provider>\n );\n}\n\n/**\n * Hook to access cart context\n */\nexport function useCart() {\n const context = useContext(CartContext);\n if (context === undefined) {\n throw new Error(\"useCart must be used within a CartProvider\");\n }\n return context;\n}\n\n// Re-export types for convenience\nexport type { CartItem, CartContextType };\n"]}
@@ -0,0 +1,40 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var __defProp = Object.defineProperty;
5
+ var __defProps = Object.defineProperties;
6
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
7
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
10
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
+ var __spreadValues = (a, b) => {
12
+ for (var prop in b || (b = {}))
13
+ if (__hasOwnProp.call(b, prop))
14
+ __defNormalProp(a, prop, b[prop]);
15
+ if (__getOwnPropSymbols)
16
+ for (var prop of __getOwnPropSymbols(b)) {
17
+ if (__propIsEnum.call(b, prop))
18
+ __defNormalProp(a, prop, b[prop]);
19
+ }
20
+ return a;
21
+ };
22
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
23
+ var __objRest = (source, exclude) => {
24
+ var target = {};
25
+ for (var prop in source)
26
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
27
+ target[prop] = source[prop];
28
+ if (source != null && __getOwnPropSymbols)
29
+ for (var prop of __getOwnPropSymbols(source)) {
30
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
31
+ target[prop] = source[prop];
32
+ }
33
+ return target;
34
+ };
35
+
36
+ exports.__objRest = __objRest;
37
+ exports.__spreadProps = __spreadProps;
38
+ exports.__spreadValues = __spreadValues;
39
+ //# sourceMappingURL=chunk-2NMEKWO5.js.map
40
+ //# sourceMappingURL=chunk-2NMEKWO5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-2NMEKWO5.js"}
@@ -0,0 +1,131 @@
1
+ "use client";
2
+ import { __spreadValues } from './chunk-YOSPWY5K.mjs';
3
+ import axios from 'axios';
4
+
5
+ var ApiClient = class {
6
+ constructor(config) {
7
+ this.memoryToken = null;
8
+ this.config = __spreadValues({
9
+ tokenStorage: "localStorage",
10
+ tokenKey: "auth_token"
11
+ }, config);
12
+ this.client = axios.create({
13
+ baseURL: config.baseURL,
14
+ headers: __spreadValues({
15
+ "Content-Type": "application/json"
16
+ }, config.headers),
17
+ timeout: 3e4
18
+ // 30 seconds
19
+ });
20
+ this.setupInterceptors();
21
+ }
22
+ setupInterceptors() {
23
+ this.client.interceptors.request.use(
24
+ (config) => {
25
+ const token = this.getToken();
26
+ if (token) {
27
+ config.headers.Authorization = `Bearer ${token}`;
28
+ }
29
+ return config;
30
+ },
31
+ (error) => {
32
+ return Promise.reject(error);
33
+ }
34
+ );
35
+ this.client.interceptors.response.use(
36
+ (response) => response,
37
+ (error) => {
38
+ var _a, _b, _c, _d, _e;
39
+ if (((_a = error.response) == null ? void 0 : _a.status) === 401) {
40
+ this.clearToken();
41
+ (_c = (_b = this.config).onUnauthorized) == null ? void 0 : _c.call(_b);
42
+ }
43
+ const message = ((_e = (_d = error.response) == null ? void 0 : _d.data) == null ? void 0 : _e.message) || error.message || "An error occurred";
44
+ return Promise.reject(new Error(message));
45
+ }
46
+ );
47
+ }
48
+ /**
49
+ * GET request
50
+ */
51
+ async get(url, params) {
52
+ const response = await this.client.get(url, { params });
53
+ return response.data.data;
54
+ }
55
+ /**
56
+ * POST request
57
+ */
58
+ async post(url, data) {
59
+ const response = await this.client.post(url, data);
60
+ return response.data.data;
61
+ }
62
+ /**
63
+ * PUT request
64
+ */
65
+ async put(url, data) {
66
+ const response = await this.client.put(url, data);
67
+ return response.data.data;
68
+ }
69
+ /**
70
+ * PATCH request
71
+ */
72
+ async patch(url, data) {
73
+ const response = await this.client.patch(url, data);
74
+ return response.data.data;
75
+ }
76
+ /**
77
+ * DELETE request
78
+ */
79
+ async delete(url) {
80
+ const response = await this.client.delete(url);
81
+ return response.data.data;
82
+ }
83
+ /**
84
+ * Set authentication token
85
+ */
86
+ setToken(token) {
87
+ if (this.config.tokenStorage === "localStorage") {
88
+ if (typeof window !== "undefined") {
89
+ localStorage.setItem(this.config.tokenKey, token);
90
+ }
91
+ } else if (this.config.tokenStorage === "memory") {
92
+ this.memoryToken = token;
93
+ }
94
+ }
95
+ /**
96
+ * Get authentication token
97
+ */
98
+ getToken() {
99
+ if (this.config.tokenStorage === "localStorage") {
100
+ if (typeof window !== "undefined") {
101
+ return localStorage.getItem(this.config.tokenKey);
102
+ }
103
+ return null;
104
+ } else if (this.config.tokenStorage === "memory") {
105
+ return this.memoryToken;
106
+ }
107
+ return null;
108
+ }
109
+ /**
110
+ * Clear authentication token
111
+ */
112
+ clearToken() {
113
+ if (this.config.tokenStorage === "localStorage") {
114
+ if (typeof window !== "undefined") {
115
+ localStorage.removeItem(this.config.tokenKey);
116
+ }
117
+ } else if (this.config.tokenStorage === "memory") {
118
+ this.memoryToken = null;
119
+ }
120
+ }
121
+ /**
122
+ * Check if user is authenticated
123
+ */
124
+ isAuthenticated() {
125
+ return !!this.getToken();
126
+ }
127
+ };
128
+
129
+ export { ApiClient };
130
+ //# sourceMappingURL=chunk-43BVHGDT.mjs.map
131
+ //# sourceMappingURL=chunk-43BVHGDT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/client.ts"],"names":[],"mappings":";;;AAqBO,IAAM,YAAN,MAAgB;AAAA,EAKrB,YAAY,MAAA,EAAmB;AAF/B,IAAA,IAAA,CAAQ,WAAA,GAA6B,IAAA;AAGnC,IAAA,IAAA,CAAK,MAAA,GAAS,cAAA,CAAA;AAAA,MACZ,YAAA,EAAc,cAAA;AAAA,MACd,QAAA,EAAU;AAAA,KAAA,EACP,MAAA,CAAA;AAGL,IAAA,IAAA,CAAK,MAAA,GAAS,MAAM,MAAA,CAAO;AAAA,MACzB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,OAAA,EAAS,cAAA,CAAA;AAAA,QACP,cAAA,EAAgB;AAAA,OAAA,EACb,MAAA,CAAO,OAAA,CAAA;AAAA,MAEZ,OAAA,EAAS;AAAA;AAAA,KACV,CAAA;AAED,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,EACzB;AAAA,EAEQ,iBAAA,GAAoB;AAE1B,IAAA,IAAA,CAAK,MAAA,CAAO,aAAa,OAAA,CAAQ,GAAA;AAAA,MAC/B,CAAC,MAAA,KAAW;AACV,QAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,EAAS;AAC5B,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAA,CAAO,OAAA,CAAQ,aAAA,GAAgB,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA;AAAA,QAChD;AACA,QAAA,OAAO,MAAA;AAAA,MACT,CAAA;AAAA,MACA,CAAC,KAAA,KAAU;AACT,QAAA,OAAO,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,MAC7B;AAAA,KACF;AAGA,IAAA,IAAA,CAAK,MAAA,CAAO,aAAa,QAAA,CAAS,GAAA;AAAA,MAChC,CAAC,QAAA,KAAa,QAAA;AAAA,MACd,CAAC,KAAA,KAAmC;AA/D1C,QAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAiEQ,QAAA,IAAA,CAAA,CAAI,EAAA,GAAA,KAAA,CAAM,QAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,MAAA,MAAW,GAAA,EAAK;AAClC,UAAA,IAAA,CAAK,UAAA,EAAW;AAChB,UAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,QAAO,cAAA,KAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;AAAA,QACF;AAGA,QAAA,MAAM,OAAA,GAAA,CAAA,CACJ,iBAAM,QAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,SAAhB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,OAAA,KAAW,MAAM,OAAA,IAAW,mBAAA;AAEpD,QAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,IAAI,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,MAC1C;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,GAAA,CAAO,GAAA,EAAa,MAAA,EAA8C;AACtE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,IAAoB,GAAA,EAAK,EAAE,QAAQ,CAAA;AACtE,IAAA,OAAO,SAAS,IAAA,CAAK,IAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAA,CAAQ,GAAA,EAAa,IAAA,EAA4B;AACrD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAqB,KAAK,IAAI,CAAA;AACjE,IAAA,OAAO,SAAS,IAAA,CAAK,IAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,GAAA,CAAO,GAAA,EAAa,IAAA,EAA4B;AACpD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAoB,KAAK,IAAI,CAAA;AAChE,IAAA,OAAO,SAAS,IAAA,CAAK,IAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAA,CAAS,GAAA,EAAa,IAAA,EAA4B;AACtD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAsB,KAAK,IAAI,CAAA;AAClE,IAAA,OAAO,SAAS,IAAA,CAAK,IAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAU,GAAA,EAAyB;AACvC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAuB,GAAG,CAAA;AAC7D,IAAA,OAAO,SAAS,IAAA,CAAK,IAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,KAAA,EAAqB;AAC5B,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,YAAA,KAAiB,cAAA,EAAgB;AAC/C,MAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,QAAA,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,QAAA,EAAW,KAAK,CAAA;AAAA,MACnD;AAAA,IACF,CAAA,MAAA,IAAW,IAAA,CAAK,MAAA,CAAO,YAAA,KAAiB,QAAA,EAAU;AAChD,MAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AAAA,IACrB;AAAA,EAEF;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAA0B;AACxB,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,YAAA,KAAiB,cAAA,EAAgB;AAC/C,MAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,QAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,QAAS,CAAA;AAAA,MACnD;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,MAAA,IAAW,IAAA,CAAK,MAAA,CAAO,YAAA,KAAiB,QAAA,EAAU;AAChD,MAAA,OAAO,IAAA,CAAK,WAAA;AAAA,IACd;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAmB;AACjB,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,YAAA,KAAiB,cAAA,EAAgB;AAC/C,MAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,QAAA,YAAA,CAAa,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,QAAS,CAAA;AAAA,MAC/C;AAAA,IACF,CAAA,MAAA,IAAW,IAAA,CAAK,MAAA,CAAO,YAAA,KAAiB,QAAA,EAAU;AAChD,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,eAAA,GAA2B;AACzB,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,QAAA,EAAS;AAAA,EACzB;AACF","file":"chunk-43BVHGDT.mjs","sourcesContent":["/**\n * API Client\n * HTTP client with authentication, interceptors, and error handling\n */\n\nimport axios, { AxiosInstance, AxiosError } from \"axios\";\n\nexport interface ApiConfig {\n baseURL: string;\n tokenStorage?: \"localStorage\" | \"cookie\" | \"memory\";\n tokenKey?: string;\n onUnauthorized?: () => void;\n headers?: Record<string, string>;\n}\n\nexport interface ApiResponse<T = unknown> {\n data: T;\n message?: string;\n success: boolean;\n}\n\nexport class ApiClient {\n private client: AxiosInstance;\n private config: ApiConfig;\n private memoryToken: string | null = null;\n\n constructor(config: ApiConfig) {\n this.config = {\n tokenStorage: \"localStorage\",\n tokenKey: \"auth_token\",\n ...config,\n };\n\n this.client = axios.create({\n baseURL: config.baseURL,\n headers: {\n \"Content-Type\": \"application/json\",\n ...config.headers,\n },\n timeout: 30000, // 30 seconds\n });\n\n this.setupInterceptors();\n }\n\n private setupInterceptors() {\n // Request interceptor - add auth token\n this.client.interceptors.request.use(\n (config) => {\n const token = this.getToken();\n if (token) {\n config.headers.Authorization = `Bearer ${token}`;\n }\n return config;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n\n // Response interceptor - handle errors\n this.client.interceptors.response.use(\n (response) => response,\n (error: AxiosError<ApiResponse>) => {\n // Handle 401 Unauthorized\n if (error.response?.status === 401) {\n this.clearToken();\n this.config.onUnauthorized?.();\n }\n\n // Transform error\n const message =\n error.response?.data?.message || error.message || \"An error occurred\";\n\n return Promise.reject(new Error(message));\n }\n );\n }\n\n /**\n * GET request\n */\n async get<T>(url: string, params?: Record<string, unknown>): Promise<T> {\n const response = await this.client.get<ApiResponse<T>>(url, { params });\n return response.data.data;\n }\n\n /**\n * POST request\n */\n async post<T>(url: string, data?: unknown): Promise<T> {\n const response = await this.client.post<ApiResponse<T>>(url, data);\n return response.data.data;\n }\n\n /**\n * PUT request\n */\n async put<T>(url: string, data?: unknown): Promise<T> {\n const response = await this.client.put<ApiResponse<T>>(url, data);\n return response.data.data;\n }\n\n /**\n * PATCH request\n */\n async patch<T>(url: string, data?: unknown): Promise<T> {\n const response = await this.client.patch<ApiResponse<T>>(url, data);\n return response.data.data;\n }\n\n /**\n * DELETE request\n */\n async delete<T>(url: string): Promise<T> {\n const response = await this.client.delete<ApiResponse<T>>(url);\n return response.data.data;\n }\n\n /**\n * Set authentication token\n */\n setToken(token: string): void {\n if (this.config.tokenStorage === \"localStorage\") {\n if (typeof window !== \"undefined\") {\n localStorage.setItem(this.config.tokenKey!, token);\n }\n } else if (this.config.tokenStorage === \"memory\") {\n this.memoryToken = token;\n }\n // TODO: Implement cookie storage\n }\n\n /**\n * Get authentication token\n */\n getToken(): string | null {\n if (this.config.tokenStorage === \"localStorage\") {\n if (typeof window !== \"undefined\") {\n return localStorage.getItem(this.config.tokenKey!);\n }\n return null;\n } else if (this.config.tokenStorage === \"memory\") {\n return this.memoryToken;\n }\n return null;\n }\n\n /**\n * Clear authentication token\n */\n clearToken(): void {\n if (this.config.tokenStorage === \"localStorage\") {\n if (typeof window !== \"undefined\") {\n localStorage.removeItem(this.config.tokenKey!);\n }\n } else if (this.config.tokenStorage === \"memory\") {\n this.memoryToken = null;\n }\n }\n\n /**\n * Check if user is authenticated\n */\n isAuthenticated(): boolean {\n return !!this.getToken();\n }\n}\n"]}