@instockng/api-client 1.0.0 → 1.0.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 (86) hide show
  1. package/dist/backend-types.d.ts +10 -0
  2. package/dist/backend-types.js +10 -0
  3. package/dist/client.d.ts +20 -0
  4. package/dist/client.js +40 -0
  5. package/dist/fetchers/carts.d.ts +2330 -0
  6. package/dist/fetchers/carts.js +167 -0
  7. package/dist/fetchers/delivery-zones.d.ts +28 -0
  8. package/{src/fetchers/delivery-zones.ts → dist/fetchers/delivery-zones.js} +9 -12
  9. package/{src/fetchers/index.ts → dist/fetchers/index.d.ts} +0 -1
  10. package/dist/fetchers/index.js +21 -0
  11. package/dist/fetchers/orders.d.ts +282 -0
  12. package/dist/fetchers/orders.js +44 -0
  13. package/dist/fetchers/products.d.ts +384 -0
  14. package/dist/fetchers/products.js +42 -0
  15. package/dist/hooks/admin/abandoned-carts.d.ts +533 -0
  16. package/dist/hooks/admin/abandoned-carts.js +79 -0
  17. package/dist/hooks/admin/brands.d.ts +75 -0
  18. package/dist/hooks/admin/brands.js +103 -0
  19. package/dist/hooks/admin/customers.d.ts +277 -0
  20. package/dist/hooks/admin/customers.js +25 -0
  21. package/dist/hooks/admin/delivery-zones.d.ts +266 -0
  22. package/dist/hooks/admin/delivery-zones.js +168 -0
  23. package/dist/hooks/admin/discount-codes.d.ts +294 -0
  24. package/dist/hooks/admin/discount-codes.js +157 -0
  25. package/{src/hooks/admin/index.ts → dist/hooks/admin/index.d.ts} +0 -1
  26. package/dist/hooks/admin/index.js +16 -0
  27. package/dist/hooks/admin/inventory.d.ts +224 -0
  28. package/dist/hooks/admin/inventory.js +102 -0
  29. package/dist/hooks/admin/orders.d.ts +1375 -0
  30. package/dist/hooks/admin/orders.js +169 -0
  31. package/dist/hooks/admin/products.d.ts +372 -0
  32. package/dist/hooks/admin/products.js +84 -0
  33. package/dist/hooks/admin/stats.d.ts +276 -0
  34. package/dist/hooks/admin/stats.js +24 -0
  35. package/dist/hooks/admin/variants.d.ts +115 -0
  36. package/dist/hooks/admin/variants.js +121 -0
  37. package/dist/hooks/admin/warehouses.d.ts +276 -0
  38. package/dist/hooks/admin/warehouses.js +103 -0
  39. package/dist/hooks/public/carts.d.ts +2398 -0
  40. package/dist/hooks/public/carts.js +213 -0
  41. package/dist/hooks/public/delivery-zones.d.ts +34 -0
  42. package/{src/hooks/public/delivery-zones.ts → dist/hooks/public/delivery-zones.js} +6 -12
  43. package/{src/hooks/public/index.ts → dist/hooks/public/index.d.ts} +0 -1
  44. package/dist/hooks/public/index.js +9 -0
  45. package/dist/hooks/public/orders.d.ts +301 -0
  46. package/{src/hooks/public/orders.ts → dist/hooks/public/orders.js} +12 -28
  47. package/dist/hooks/public/products.d.ts +396 -0
  48. package/{src/hooks/public/products.ts → dist/hooks/public/products.js} +12 -22
  49. package/dist/hooks/use-query-unwrapped.d.ts +20 -0
  50. package/dist/hooks/use-query-unwrapped.js +22 -0
  51. package/dist/hooks/useApiConfig.d.ts +11 -0
  52. package/dist/hooks/useApiConfig.js +14 -0
  53. package/dist/index.d.ts +20 -0
  54. package/{src/index.ts → dist/index.js} +0 -17
  55. package/dist/provider.d.ts +33 -0
  56. package/dist/provider.js +52 -0
  57. package/dist/rpc-client.d.ts +8966 -0
  58. package/dist/rpc-client.js +79 -0
  59. package/{src/rpc-types.ts → dist/rpc-types.d.ts} +35 -80
  60. package/dist/rpc-types.js +7 -0
  61. package/{src/types.ts → dist/types.d.ts} +0 -6
  62. package/dist/types.js +16 -0
  63. package/dist/utils/query-keys.d.ts +102 -0
  64. package/dist/utils/query-keys.js +104 -0
  65. package/package.json +20 -13
  66. package/src/client.ts +0 -57
  67. package/src/fetchers/carts.ts +0 -202
  68. package/src/fetchers/orders.ts +0 -48
  69. package/src/fetchers/products.ts +0 -46
  70. package/src/hooks/admin/abandoned-carts.ts +0 -102
  71. package/src/hooks/admin/brands.ts +0 -134
  72. package/src/hooks/admin/customers.ts +0 -31
  73. package/src/hooks/admin/delivery-zones.ts +0 -236
  74. package/src/hooks/admin/discount-codes.ts +0 -222
  75. package/src/hooks/admin/inventory.ts +0 -137
  76. package/src/hooks/admin/orders.ts +0 -229
  77. package/src/hooks/admin/products.ts +0 -116
  78. package/src/hooks/admin/stats.ts +0 -30
  79. package/src/hooks/admin/variants.ts +0 -173
  80. package/src/hooks/admin/warehouses.ts +0 -143
  81. package/src/hooks/public/carts.ts +0 -298
  82. package/src/hooks/use-query-unwrapped.ts +0 -30
  83. package/src/hooks/useApiConfig.ts +0 -22
  84. package/src/provider.tsx +0 -89
  85. package/src/rpc-client.ts +0 -106
  86. package/src/utils/query-keys.ts +0 -121
@@ -0,0 +1,533 @@
1
+ /**
2
+ * Type-safe admin RPC hooks for abandoned cart management
3
+ */
4
+ import { UseQueryOptions, UseMutationOptions } from '@tanstack/react-query';
5
+ import { createAdminRpcClients } from '../../rpc-client';
6
+ /**
7
+ * Hook to list abandoned carts using admin RPC
8
+ */
9
+ export declare function useListAbandonedCarts(params?: {
10
+ brandId?: string;
11
+ hoursInactive?: number;
12
+ }, options?: Omit<UseQueryOptions<Awaited<ReturnType<Awaited<ReturnType<ReturnType<typeof createAdminRpcClients>['abandonedCarts']['index']['$get']>>['json']>>, Error>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
13
+ carts: {
14
+ id: string;
15
+ brand: {
16
+ createdAt: string;
17
+ updatedAt: string;
18
+ deletedAt: string;
19
+ name: string;
20
+ id: string;
21
+ slug: string;
22
+ logoUrl: string | null;
23
+ siteUrl: string;
24
+ domain: string;
25
+ };
26
+ customerPhone: string;
27
+ customerEmail: string;
28
+ customerFirstName: string;
29
+ customerLastName: string;
30
+ availablePaymentMethods: import("@prisma/client").$Enums.PaymentMethod[];
31
+ deliveryZone: {
32
+ id: string;
33
+ name: string;
34
+ };
35
+ recoveryAttempts: number;
36
+ lastRecoveryAttemptAt: string;
37
+ recoveryDiscountCode: {
38
+ id: string;
39
+ createdAt: string;
40
+ updatedAt: string;
41
+ deletedAt: string;
42
+ brandId: string | null;
43
+ isActive: boolean;
44
+ code: string;
45
+ type: string;
46
+ value: string;
47
+ minPurchase: string;
48
+ maxDiscount: string;
49
+ usageLimit: number | null;
50
+ usageCount: number;
51
+ perCustomerLimit: number | null;
52
+ validFrom: string;
53
+ validUntil: string;
54
+ isAutoApply: boolean;
55
+ description: string | null;
56
+ category: string;
57
+ createdBy: string | null;
58
+ };
59
+ items: {
60
+ id: string;
61
+ variant: {
62
+ price: number;
63
+ product: {
64
+ name: string;
65
+ id: string;
66
+ slug: string;
67
+ createdAt: string;
68
+ updatedAt: string;
69
+ deletedAt: string;
70
+ brandId: string;
71
+ isActive: boolean;
72
+ description: string | null;
73
+ thumbnailUrl: string | null;
74
+ quantityDiscounts: string | number | boolean | {
75
+ [x: string]: string | number | boolean | /*elided*/ any | {
76
+ [x: number]: string | number | boolean | /*elided*/ any | /*elided*/ any;
77
+ length: number;
78
+ toString: never;
79
+ toLocaleString: never;
80
+ pop: never;
81
+ push: never;
82
+ concat: never;
83
+ join: never;
84
+ reverse: never;
85
+ shift: never;
86
+ slice: never;
87
+ sort: never;
88
+ splice: never;
89
+ unshift: never;
90
+ indexOf: never;
91
+ lastIndexOf: never;
92
+ every: never;
93
+ some: never;
94
+ forEach: never;
95
+ map: never;
96
+ filter: never;
97
+ reduce: never;
98
+ reduceRight: never;
99
+ find: never;
100
+ findIndex: never;
101
+ fill: never;
102
+ copyWithin: never;
103
+ entries: never;
104
+ keys: never;
105
+ values: never;
106
+ includes: never;
107
+ flatMap: never;
108
+ flat: never;
109
+ [Symbol.iterator]: never;
110
+ readonly [Symbol.unscopables]: {
111
+ [x: number]: boolean;
112
+ length?: boolean;
113
+ toString?: boolean;
114
+ toLocaleString?: boolean;
115
+ pop?: boolean;
116
+ push?: boolean;
117
+ concat?: boolean;
118
+ join?: boolean;
119
+ reverse?: boolean;
120
+ shift?: boolean;
121
+ slice?: boolean;
122
+ sort?: boolean;
123
+ splice?: boolean;
124
+ unshift?: boolean;
125
+ indexOf?: boolean;
126
+ lastIndexOf?: boolean;
127
+ every?: boolean;
128
+ some?: boolean;
129
+ forEach?: boolean;
130
+ map?: boolean;
131
+ filter?: boolean;
132
+ reduce?: boolean;
133
+ reduceRight?: boolean;
134
+ find?: boolean;
135
+ findIndex?: boolean;
136
+ fill?: boolean;
137
+ copyWithin?: boolean;
138
+ entries?: boolean;
139
+ keys?: boolean;
140
+ values?: boolean;
141
+ includes?: boolean;
142
+ flatMap?: boolean;
143
+ flat?: boolean;
144
+ };
145
+ };
146
+ } | {
147
+ [x: number]: string | number | boolean | {
148
+ [x: string]: string | number | boolean | /*elided*/ any | /*elided*/ any;
149
+ } | /*elided*/ any;
150
+ length: number;
151
+ toString: never;
152
+ toLocaleString: never;
153
+ pop: never;
154
+ push: never;
155
+ concat: never;
156
+ join: never;
157
+ reverse: never;
158
+ shift: never;
159
+ slice: never;
160
+ sort: never;
161
+ splice: never;
162
+ unshift: never;
163
+ indexOf: never;
164
+ lastIndexOf: never;
165
+ every: never;
166
+ some: never;
167
+ forEach: never;
168
+ map: never;
169
+ filter: never;
170
+ reduce: never;
171
+ reduceRight: never;
172
+ find: never;
173
+ findIndex: never;
174
+ fill: never;
175
+ copyWithin: never;
176
+ entries: never;
177
+ keys: never;
178
+ values: never;
179
+ includes: never;
180
+ flatMap: never;
181
+ flat: never;
182
+ [Symbol.iterator]: never;
183
+ readonly [Symbol.unscopables]: {
184
+ [x: number]: boolean;
185
+ length?: boolean;
186
+ toString?: boolean;
187
+ toLocaleString?: boolean;
188
+ pop?: boolean;
189
+ push?: boolean;
190
+ concat?: boolean;
191
+ join?: boolean;
192
+ reverse?: boolean;
193
+ shift?: boolean;
194
+ slice?: boolean;
195
+ sort?: boolean;
196
+ splice?: boolean;
197
+ unshift?: boolean;
198
+ indexOf?: boolean;
199
+ lastIndexOf?: boolean;
200
+ every?: boolean;
201
+ some?: boolean;
202
+ forEach?: boolean;
203
+ map?: boolean;
204
+ filter?: boolean;
205
+ reduce?: boolean;
206
+ reduceRight?: boolean;
207
+ find?: boolean;
208
+ findIndex?: boolean;
209
+ fill?: boolean;
210
+ copyWithin?: boolean;
211
+ entries?: boolean;
212
+ keys?: boolean;
213
+ values?: boolean;
214
+ includes?: boolean;
215
+ flatMap?: boolean;
216
+ flat?: boolean;
217
+ };
218
+ };
219
+ };
220
+ name: string | null;
221
+ id: string;
222
+ createdAt: string;
223
+ updatedAt: string;
224
+ deletedAt: string;
225
+ isActive: boolean;
226
+ thumbnailUrl: string | null;
227
+ productId: string;
228
+ sku: string;
229
+ trackInventory: boolean;
230
+ lowStockThreshold: number | null;
231
+ };
232
+ quantity: number;
233
+ basePrice: number;
234
+ discountPercent: number;
235
+ finalPrice: number;
236
+ subtotal: number;
237
+ }[];
238
+ pricing: {
239
+ subtotal: number;
240
+ deliveryCharge: number;
241
+ discount: {
242
+ code: string;
243
+ type: "percentage" | "fixed";
244
+ value: number;
245
+ amount: number;
246
+ description: string | null;
247
+ };
248
+ total: number;
249
+ };
250
+ createdAt: string;
251
+ updatedAt: string;
252
+ expiresAt: string;
253
+ convertedToOrderId: string;
254
+ wasRecovered: boolean;
255
+ recoveryUrl: string;
256
+ }[];
257
+ total: number;
258
+ }, Error>;
259
+ /**
260
+ * Hook to get abandoned cart statistics using admin RPC
261
+ */
262
+ export declare function useGetAbandonedCartStats(params?: {
263
+ brandId?: string;
264
+ }, options?: Omit<UseQueryOptions<Awaited<ReturnType<Awaited<ReturnType<ReturnType<typeof createAdminRpcClients>['abandonedCarts']['stats']['$get']>>['json']>>, Error>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
265
+ totalAbandoned: number;
266
+ abandonedLast7Days: number;
267
+ activeCarts: number;
268
+ totalValue: number;
269
+ averageValue: number;
270
+ totalRecovered: number;
271
+ recoveryRate: number;
272
+ revenueRecovered: number;
273
+ totalDiscountGiven: number;
274
+ }, Error>;
275
+ /**
276
+ * Hook to get specific abandoned cart details using admin RPC
277
+ */
278
+ export declare function useGetAbandonedCart(cartId: string, options?: Omit<UseQueryOptions<Awaited<ReturnType<Awaited<ReturnType<ReturnType<typeof createAdminRpcClients>['abandonedCarts'][':id']['$get']>>['json']>>, Error>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
279
+ id: string;
280
+ brand: {
281
+ createdAt: string;
282
+ updatedAt: string;
283
+ deletedAt: string;
284
+ name: string;
285
+ id: string;
286
+ slug: string;
287
+ logoUrl: string | null;
288
+ siteUrl: string;
289
+ domain: string;
290
+ };
291
+ customerPhone: string;
292
+ customerEmail: string;
293
+ customerFirstName: string;
294
+ customerLastName: string;
295
+ availablePaymentMethods: import("@prisma/client").$Enums.PaymentMethod[];
296
+ deliveryZone: {
297
+ id: string;
298
+ name: string;
299
+ };
300
+ recoveryAttempts: number;
301
+ lastRecoveryAttemptAt: string;
302
+ recoveryDiscountCode: {
303
+ id: string;
304
+ createdAt: string;
305
+ updatedAt: string;
306
+ deletedAt: string;
307
+ brandId: string | null;
308
+ isActive: boolean;
309
+ code: string;
310
+ type: string;
311
+ value: string;
312
+ minPurchase: string;
313
+ maxDiscount: string;
314
+ usageLimit: number | null;
315
+ usageCount: number;
316
+ perCustomerLimit: number | null;
317
+ validFrom: string;
318
+ validUntil: string;
319
+ isAutoApply: boolean;
320
+ description: string | null;
321
+ category: string;
322
+ createdBy: string | null;
323
+ };
324
+ items: {
325
+ id: string;
326
+ variant: {
327
+ price: number;
328
+ product: {
329
+ name: string;
330
+ id: string;
331
+ slug: string;
332
+ createdAt: string;
333
+ updatedAt: string;
334
+ deletedAt: string;
335
+ brandId: string;
336
+ isActive: boolean;
337
+ description: string | null;
338
+ thumbnailUrl: string | null;
339
+ quantityDiscounts: string | number | boolean | {
340
+ [x: string]: string | number | boolean | /*elided*/ any | {
341
+ [x: number]: string | number | boolean | /*elided*/ any | /*elided*/ any;
342
+ length: number;
343
+ toString: never;
344
+ toLocaleString: never;
345
+ pop: never;
346
+ push: never;
347
+ concat: never;
348
+ join: never;
349
+ reverse: never;
350
+ shift: never;
351
+ slice: never;
352
+ sort: never;
353
+ splice: never;
354
+ unshift: never;
355
+ indexOf: never;
356
+ lastIndexOf: never;
357
+ every: never;
358
+ some: never;
359
+ forEach: never;
360
+ map: never;
361
+ filter: never;
362
+ reduce: never;
363
+ reduceRight: never;
364
+ find: never;
365
+ findIndex: never;
366
+ fill: never;
367
+ copyWithin: never;
368
+ entries: never;
369
+ keys: never;
370
+ values: never;
371
+ includes: never;
372
+ flatMap: never;
373
+ flat: never;
374
+ [Symbol.iterator]: never;
375
+ readonly [Symbol.unscopables]: {
376
+ [x: number]: boolean;
377
+ length?: boolean;
378
+ toString?: boolean;
379
+ toLocaleString?: boolean;
380
+ pop?: boolean;
381
+ push?: boolean;
382
+ concat?: boolean;
383
+ join?: boolean;
384
+ reverse?: boolean;
385
+ shift?: boolean;
386
+ slice?: boolean;
387
+ sort?: boolean;
388
+ splice?: boolean;
389
+ unshift?: boolean;
390
+ indexOf?: boolean;
391
+ lastIndexOf?: boolean;
392
+ every?: boolean;
393
+ some?: boolean;
394
+ forEach?: boolean;
395
+ map?: boolean;
396
+ filter?: boolean;
397
+ reduce?: boolean;
398
+ reduceRight?: boolean;
399
+ find?: boolean;
400
+ findIndex?: boolean;
401
+ fill?: boolean;
402
+ copyWithin?: boolean;
403
+ entries?: boolean;
404
+ keys?: boolean;
405
+ values?: boolean;
406
+ includes?: boolean;
407
+ flatMap?: boolean;
408
+ flat?: boolean;
409
+ };
410
+ };
411
+ } | {
412
+ [x: number]: string | number | boolean | {
413
+ [x: string]: string | number | boolean | /*elided*/ any | /*elided*/ any;
414
+ } | /*elided*/ any;
415
+ length: number;
416
+ toString: never;
417
+ toLocaleString: never;
418
+ pop: never;
419
+ push: never;
420
+ concat: never;
421
+ join: never;
422
+ reverse: never;
423
+ shift: never;
424
+ slice: never;
425
+ sort: never;
426
+ splice: never;
427
+ unshift: never;
428
+ indexOf: never;
429
+ lastIndexOf: never;
430
+ every: never;
431
+ some: never;
432
+ forEach: never;
433
+ map: never;
434
+ filter: never;
435
+ reduce: never;
436
+ reduceRight: never;
437
+ find: never;
438
+ findIndex: never;
439
+ fill: never;
440
+ copyWithin: never;
441
+ entries: never;
442
+ keys: never;
443
+ values: never;
444
+ includes: never;
445
+ flatMap: never;
446
+ flat: never;
447
+ [Symbol.iterator]: never;
448
+ readonly [Symbol.unscopables]: {
449
+ [x: number]: boolean;
450
+ length?: boolean;
451
+ toString?: boolean;
452
+ toLocaleString?: boolean;
453
+ pop?: boolean;
454
+ push?: boolean;
455
+ concat?: boolean;
456
+ join?: boolean;
457
+ reverse?: boolean;
458
+ shift?: boolean;
459
+ slice?: boolean;
460
+ sort?: boolean;
461
+ splice?: boolean;
462
+ unshift?: boolean;
463
+ indexOf?: boolean;
464
+ lastIndexOf?: boolean;
465
+ every?: boolean;
466
+ some?: boolean;
467
+ forEach?: boolean;
468
+ map?: boolean;
469
+ filter?: boolean;
470
+ reduce?: boolean;
471
+ reduceRight?: boolean;
472
+ find?: boolean;
473
+ findIndex?: boolean;
474
+ fill?: boolean;
475
+ copyWithin?: boolean;
476
+ entries?: boolean;
477
+ keys?: boolean;
478
+ values?: boolean;
479
+ includes?: boolean;
480
+ flatMap?: boolean;
481
+ flat?: boolean;
482
+ };
483
+ };
484
+ };
485
+ name: string | null;
486
+ id: string;
487
+ createdAt: string;
488
+ updatedAt: string;
489
+ deletedAt: string;
490
+ isActive: boolean;
491
+ thumbnailUrl: string | null;
492
+ productId: string;
493
+ sku: string;
494
+ trackInventory: boolean;
495
+ lowStockThreshold: number | null;
496
+ };
497
+ quantity: number;
498
+ basePrice: number;
499
+ discountPercent: number;
500
+ finalPrice: number;
501
+ subtotal: number;
502
+ }[];
503
+ pricing: {
504
+ subtotal: number;
505
+ deliveryCharge: number;
506
+ discount: {
507
+ code: string;
508
+ type: "percentage" | "fixed";
509
+ value: number;
510
+ amount: number;
511
+ description: string | null;
512
+ };
513
+ total: number;
514
+ };
515
+ createdAt: string;
516
+ updatedAt: string;
517
+ expiresAt: string;
518
+ convertedToOrderId: string;
519
+ wasRecovered: boolean;
520
+ recoveryUrl: string;
521
+ }, Error>;
522
+ /**
523
+ * Hook to clean up expired carts using admin RPC
524
+ */
525
+ export declare function useCleanupExpiredCarts(options?: UseMutationOptions<Awaited<ReturnType<Awaited<ReturnType<ReturnType<typeof createAdminRpcClients>['abandonedCarts']['cleanup']['$post']>>['json']>>, Error, void>): import("@tanstack/react-query").UseMutationResult<{
526
+ deletedCount: number;
527
+ message: string;
528
+ } | {
529
+ error: {
530
+ code: string;
531
+ message: any;
532
+ };
533
+ }, Error, void, unknown>;
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Type-safe admin RPC hooks for abandoned cart management
3
+ */
4
+ import { useMutation, useQueryClient } from '@tanstack/react-query';
5
+ import { useQueryUnwrapped } from '../use-query-unwrapped';
6
+ import { createAdminRpcClients, authHeaders } from '../../rpc-client';
7
+ import { queryKeys } from '../../utils/query-keys';
8
+ import { useApiConfig } from '../useApiConfig';
9
+ /**
10
+ * Hook to list abandoned carts using admin RPC
11
+ */
12
+ export function useListAbandonedCarts(params, options) {
13
+ const { baseURL, authToken } = useApiConfig();
14
+ return useQueryUnwrapped({
15
+ queryKey: queryKeys.admin.abandonedCarts.list(params),
16
+ queryFn: async () => {
17
+ const clients = createAdminRpcClients(baseURL);
18
+ const res = await clients.abandonedCarts.index.$get({ query: params }, authHeaders(authToken));
19
+ if (!res.ok)
20
+ throw new Error(`Failed to fetch abandoned carts: ${res.statusText}`);
21
+ return res.json();
22
+ },
23
+ ...options,
24
+ });
25
+ }
26
+ /**
27
+ * Hook to get abandoned cart statistics using admin RPC
28
+ */
29
+ export function useGetAbandonedCartStats(params, options) {
30
+ const { baseURL, authToken } = useApiConfig();
31
+ return useQueryUnwrapped({
32
+ queryKey: queryKeys.admin.abandonedCarts.stats(params?.brandId),
33
+ queryFn: async () => {
34
+ const clients = createAdminRpcClients(baseURL);
35
+ const res = await clients.abandonedCarts.stats.$get({ query: params }, authHeaders(authToken));
36
+ if (!res.ok)
37
+ throw new Error(`Failed to fetch abandoned cart stats: ${res.statusText}`);
38
+ return res.json();
39
+ },
40
+ ...options,
41
+ });
42
+ }
43
+ /**
44
+ * Hook to get specific abandoned cart details using admin RPC
45
+ */
46
+ export function useGetAbandonedCart(cartId, options) {
47
+ const { baseURL, authToken } = useApiConfig();
48
+ return useQueryUnwrapped({
49
+ queryKey: queryKeys.admin.abandonedCarts.detail(cartId),
50
+ queryFn: async () => {
51
+ const clients = createAdminRpcClients(baseURL);
52
+ const res = await clients.abandonedCarts[':id'].$get({ param: { id: cartId } }, authHeaders(authToken));
53
+ if (!res.ok)
54
+ throw new Error(`Failed to fetch abandoned cart: ${res.statusText}`);
55
+ return res.json();
56
+ },
57
+ ...options,
58
+ });
59
+ }
60
+ /**
61
+ * Hook to clean up expired carts using admin RPC
62
+ */
63
+ export function useCleanupExpiredCarts(options) {
64
+ const { baseURL, authToken } = useApiConfig();
65
+ const queryClient = useQueryClient();
66
+ return useMutation({
67
+ mutationFn: async () => {
68
+ const clients = createAdminRpcClients(baseURL);
69
+ const res = await clients.abandonedCarts.cleanup.$post({}, authHeaders(authToken));
70
+ if (!res.ok)
71
+ throw new Error(`Failed to cleanup expired carts: ${res.statusText}`);
72
+ return res.json();
73
+ },
74
+ onSuccess: () => {
75
+ queryClient.invalidateQueries({ queryKey: queryKeys.admin.abandonedCarts.all });
76
+ },
77
+ ...options,
78
+ });
79
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Type-safe admin RPC hooks for brand management
3
+ */
4
+ import { UseQueryOptions, UseMutationOptions } from '@tanstack/react-query';
5
+ import { createAdminRpcClients } from '../../rpc-client';
6
+ /**
7
+ * Hook to list all brands using admin RPC
8
+ */
9
+ export declare function useListBrands(options?: Omit<UseQueryOptions<Awaited<ReturnType<Awaited<ReturnType<ReturnType<typeof createAdminRpcClients>['brands']['index']['$get']>>['json']>>, Error>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
10
+ name: string;
11
+ id: string;
12
+ slug: string;
13
+ logoUrl: string | null;
14
+ siteUrl: string;
15
+ domain: string;
16
+ createdAt: string;
17
+ updatedAt: string;
18
+ deletedAt: string;
19
+ }[], Error>;
20
+ /**
21
+ * Hook to get brand by ID using admin RPC
22
+ */
23
+ export declare function useGetBrand(brandId: string, options?: Omit<UseQueryOptions<Awaited<ReturnType<Awaited<ReturnType<ReturnType<typeof createAdminRpcClients>['brands'][':id']['$get']>>['json']>>, Error>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
24
+ name: string;
25
+ id: string;
26
+ slug: string;
27
+ logoUrl: string | null;
28
+ siteUrl: string;
29
+ domain: string;
30
+ createdAt: string;
31
+ updatedAt: string;
32
+ deletedAt: string;
33
+ }, Error>;
34
+ /**
35
+ * Hook to create a brand using admin RPC
36
+ */
37
+ export declare function useCreateBrand(options?: UseMutationOptions<Awaited<ReturnType<Awaited<ReturnType<ReturnType<typeof createAdminRpcClients>['brands']['index']['$post']>>['json']>>, Error, any>): import("@tanstack/react-query").UseMutationResult<{
38
+ name: string;
39
+ id: string;
40
+ slug: string;
41
+ logoUrl: string | null;
42
+ siteUrl: string;
43
+ domain: string;
44
+ createdAt: string;
45
+ updatedAt: string;
46
+ deletedAt: string;
47
+ } | {
48
+ error: {
49
+ code: string;
50
+ message: string;
51
+ };
52
+ }, Error, any, unknown>;
53
+ /**
54
+ * Hook to update a brand using admin RPC
55
+ */
56
+ export declare function useUpdateBrand(brandId: string, options?: UseMutationOptions<Awaited<ReturnType<Awaited<ReturnType<ReturnType<typeof createAdminRpcClients>['brands'][':id']['$patch']>>['json']>>, Error, any>): import("@tanstack/react-query").UseMutationResult<{
57
+ name: string;
58
+ id: string;
59
+ slug: string;
60
+ logoUrl: string | null;
61
+ siteUrl: string;
62
+ domain: string;
63
+ createdAt: string;
64
+ updatedAt: string;
65
+ deletedAt: string;
66
+ } | {
67
+ error: {
68
+ code: string;
69
+ message: string;
70
+ };
71
+ }, Error, any, unknown>;
72
+ /**
73
+ * Hook to delete a brand using admin RPC
74
+ */
75
+ export declare function useDeleteBrand(brandId: string, options?: UseMutationOptions<Awaited<ReturnType<Awaited<ReturnType<ReturnType<typeof createAdminRpcClients>['brands'][':id']['$delete']>>['json']>>, Error, void>): import("@tanstack/react-query").UseMutationResult<unknown, Error, void, unknown>;