@instockng/api-client 1.0.21 → 1.0.24

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.
@@ -231,6 +231,297 @@ export declare function useGetCustomerHistory(phone: string, options?: Omit<UseQ
231
231
  flat?: boolean;
232
232
  };
233
233
  };
234
+ media: string | number | boolean | {
235
+ [x: string]: string | number | boolean | /*elided*/ any | {
236
+ [x: number]: string | number | boolean | /*elided*/ any | /*elided*/ any;
237
+ length: number;
238
+ toString: never;
239
+ toLocaleString: never;
240
+ pop: never;
241
+ push: never;
242
+ concat: never;
243
+ join: never;
244
+ reverse: never;
245
+ shift: never;
246
+ slice: never;
247
+ sort: never;
248
+ splice: never;
249
+ unshift: never;
250
+ indexOf: never;
251
+ lastIndexOf: never;
252
+ every: never;
253
+ some: never;
254
+ forEach: never;
255
+ map: never;
256
+ filter: never;
257
+ reduce: never;
258
+ reduceRight: never;
259
+ find: never;
260
+ findIndex: never;
261
+ fill: never;
262
+ copyWithin: never;
263
+ entries: never;
264
+ keys: never;
265
+ values: never;
266
+ includes: never;
267
+ flatMap: never;
268
+ flat: never;
269
+ [Symbol.iterator]: never;
270
+ readonly [Symbol.unscopables]: {
271
+ [x: number]: boolean;
272
+ length?: boolean;
273
+ toString?: boolean;
274
+ toLocaleString?: boolean;
275
+ pop?: boolean;
276
+ push?: boolean;
277
+ concat?: boolean;
278
+ join?: boolean;
279
+ reverse?: boolean;
280
+ shift?: boolean;
281
+ slice?: boolean;
282
+ sort?: boolean;
283
+ splice?: boolean;
284
+ unshift?: boolean;
285
+ indexOf?: boolean;
286
+ lastIndexOf?: boolean;
287
+ every?: boolean;
288
+ some?: boolean;
289
+ forEach?: boolean;
290
+ map?: boolean;
291
+ filter?: boolean;
292
+ reduce?: boolean;
293
+ reduceRight?: boolean;
294
+ find?: boolean;
295
+ findIndex?: boolean;
296
+ fill?: boolean;
297
+ copyWithin?: boolean;
298
+ entries?: boolean;
299
+ keys?: boolean;
300
+ values?: boolean;
301
+ includes?: boolean;
302
+ flatMap?: boolean;
303
+ flat?: boolean;
304
+ };
305
+ };
306
+ } | {
307
+ [x: number]: string | number | boolean | {
308
+ [x: string]: string | number | boolean | /*elided*/ any | /*elided*/ any;
309
+ } | /*elided*/ any;
310
+ length: number;
311
+ toString: never;
312
+ toLocaleString: never;
313
+ pop: never;
314
+ push: never;
315
+ concat: never;
316
+ join: never;
317
+ reverse: never;
318
+ shift: never;
319
+ slice: never;
320
+ sort: never;
321
+ splice: never;
322
+ unshift: never;
323
+ indexOf: never;
324
+ lastIndexOf: never;
325
+ every: never;
326
+ some: never;
327
+ forEach: never;
328
+ map: never;
329
+ filter: never;
330
+ reduce: never;
331
+ reduceRight: never;
332
+ find: never;
333
+ findIndex: never;
334
+ fill: never;
335
+ copyWithin: never;
336
+ entries: never;
337
+ keys: never;
338
+ values: never;
339
+ includes: never;
340
+ flatMap: never;
341
+ flat: never;
342
+ [Symbol.iterator]: never;
343
+ readonly [Symbol.unscopables]: {
344
+ [x: number]: boolean;
345
+ length?: boolean;
346
+ toString?: boolean;
347
+ toLocaleString?: boolean;
348
+ pop?: boolean;
349
+ push?: boolean;
350
+ concat?: boolean;
351
+ join?: boolean;
352
+ reverse?: boolean;
353
+ shift?: boolean;
354
+ slice?: boolean;
355
+ sort?: boolean;
356
+ splice?: boolean;
357
+ unshift?: boolean;
358
+ indexOf?: boolean;
359
+ lastIndexOf?: boolean;
360
+ every?: boolean;
361
+ some?: boolean;
362
+ forEach?: boolean;
363
+ map?: boolean;
364
+ filter?: boolean;
365
+ reduce?: boolean;
366
+ reduceRight?: boolean;
367
+ find?: boolean;
368
+ findIndex?: boolean;
369
+ fill?: boolean;
370
+ copyWithin?: boolean;
371
+ entries?: boolean;
372
+ keys?: boolean;
373
+ values?: boolean;
374
+ includes?: boolean;
375
+ flatMap?: boolean;
376
+ flat?: boolean;
377
+ };
378
+ };
379
+ features: string | null;
380
+ faqs: string | number | boolean | {
381
+ [x: string]: string | number | boolean | /*elided*/ any | {
382
+ [x: number]: string | number | boolean | /*elided*/ any | /*elided*/ any;
383
+ length: number;
384
+ toString: never;
385
+ toLocaleString: never;
386
+ pop: never;
387
+ push: never;
388
+ concat: never;
389
+ join: never;
390
+ reverse: never;
391
+ shift: never;
392
+ slice: never;
393
+ sort: never;
394
+ splice: never;
395
+ unshift: never;
396
+ indexOf: never;
397
+ lastIndexOf: never;
398
+ every: never;
399
+ some: never;
400
+ forEach: never;
401
+ map: never;
402
+ filter: never;
403
+ reduce: never;
404
+ reduceRight: never;
405
+ find: never;
406
+ findIndex: never;
407
+ fill: never;
408
+ copyWithin: never;
409
+ entries: never;
410
+ keys: never;
411
+ values: never;
412
+ includes: never;
413
+ flatMap: never;
414
+ flat: never;
415
+ [Symbol.iterator]: never;
416
+ readonly [Symbol.unscopables]: {
417
+ [x: number]: boolean;
418
+ length?: boolean;
419
+ toString?: boolean;
420
+ toLocaleString?: boolean;
421
+ pop?: boolean;
422
+ push?: boolean;
423
+ concat?: boolean;
424
+ join?: boolean;
425
+ reverse?: boolean;
426
+ shift?: boolean;
427
+ slice?: boolean;
428
+ sort?: boolean;
429
+ splice?: boolean;
430
+ unshift?: boolean;
431
+ indexOf?: boolean;
432
+ lastIndexOf?: boolean;
433
+ every?: boolean;
434
+ some?: boolean;
435
+ forEach?: boolean;
436
+ map?: boolean;
437
+ filter?: boolean;
438
+ reduce?: boolean;
439
+ reduceRight?: boolean;
440
+ find?: boolean;
441
+ findIndex?: boolean;
442
+ fill?: boolean;
443
+ copyWithin?: boolean;
444
+ entries?: boolean;
445
+ keys?: boolean;
446
+ values?: boolean;
447
+ includes?: boolean;
448
+ flatMap?: boolean;
449
+ flat?: boolean;
450
+ };
451
+ };
452
+ } | {
453
+ [x: number]: string | number | boolean | {
454
+ [x: string]: string | number | boolean | /*elided*/ any | /*elided*/ any;
455
+ } | /*elided*/ any;
456
+ length: number;
457
+ toString: never;
458
+ toLocaleString: never;
459
+ pop: never;
460
+ push: never;
461
+ concat: never;
462
+ join: never;
463
+ reverse: never;
464
+ shift: never;
465
+ slice: never;
466
+ sort: never;
467
+ splice: never;
468
+ unshift: never;
469
+ indexOf: never;
470
+ lastIndexOf: never;
471
+ every: never;
472
+ some: never;
473
+ forEach: never;
474
+ map: never;
475
+ filter: never;
476
+ reduce: never;
477
+ reduceRight: never;
478
+ find: never;
479
+ findIndex: never;
480
+ fill: never;
481
+ copyWithin: never;
482
+ entries: never;
483
+ keys: never;
484
+ values: never;
485
+ includes: never;
486
+ flatMap: never;
487
+ flat: never;
488
+ [Symbol.iterator]: never;
489
+ readonly [Symbol.unscopables]: {
490
+ [x: number]: boolean;
491
+ length?: boolean;
492
+ toString?: boolean;
493
+ toLocaleString?: boolean;
494
+ pop?: boolean;
495
+ push?: boolean;
496
+ concat?: boolean;
497
+ join?: boolean;
498
+ reverse?: boolean;
499
+ shift?: boolean;
500
+ slice?: boolean;
501
+ sort?: boolean;
502
+ splice?: boolean;
503
+ unshift?: boolean;
504
+ indexOf?: boolean;
505
+ lastIndexOf?: boolean;
506
+ every?: boolean;
507
+ some?: boolean;
508
+ forEach?: boolean;
509
+ map?: boolean;
510
+ filter?: boolean;
511
+ reduce?: boolean;
512
+ reduceRight?: boolean;
513
+ find?: boolean;
514
+ findIndex?: boolean;
515
+ fill?: boolean;
516
+ copyWithin?: boolean;
517
+ entries?: boolean;
518
+ keys?: boolean;
519
+ values?: boolean;
520
+ includes?: boolean;
521
+ flatMap?: boolean;
522
+ flat?: boolean;
523
+ };
524
+ };
234
525
  };
235
526
  id: string;
236
527
  name: string | null;
@@ -238,6 +529,7 @@ export declare function useGetCustomerHistory(phone: string, options?: Omit<UseQ
238
529
  thumbnailUrl: string | null;
239
530
  productId: string;
240
531
  sku: string;
532
+ compareAtPrice: string;
241
533
  trackInventory: boolean;
242
534
  lowStockThreshold: number | null;
243
535
  };
@@ -1,16 +1,17 @@
1
1
  /**
2
2
  * Type-safe admin RPC hooks
3
3
  *
4
- * Export all admin RPC hooks for use in admin dashboards
4
+ * Export all admin RPC hooks for use in applications
5
5
  */
6
- export * from './orders';
7
6
  export * from './brands';
7
+ export * from './customers';
8
+ export * from './delivery-zones';
9
+ export * from './discount-codes';
10
+ export * from './inventory';
11
+ export * from './orders';
8
12
  export * from './products';
13
+ export * from './stats';
9
14
  export * from './variants';
10
15
  export * from './warehouses';
11
- export * from './inventory';
12
- export * from './customers';
13
- export * from './stats';
14
16
  export * from './abandoned-carts';
15
- export * from './discount-codes';
16
- export * from './delivery-zones';
17
+ export * from './media';
@@ -1,16 +1,17 @@
1
1
  /**
2
2
  * Type-safe admin RPC hooks
3
3
  *
4
- * Export all admin RPC hooks for use in admin dashboards
4
+ * Export all admin RPC hooks for use in applications
5
5
  */
6
- export * from './orders';
7
6
  export * from './brands';
7
+ export * from './customers';
8
+ export * from './delivery-zones';
9
+ export * from './discount-codes';
10
+ export * from './inventory';
11
+ export * from './orders';
8
12
  export * from './products';
13
+ export * from './stats';
9
14
  export * from './variants';
10
15
  export * from './warehouses';
11
- export * from './inventory';
12
- export * from './customers';
13
- export * from './stats';
14
16
  export * from './abandoned-carts';
15
- export * from './discount-codes';
16
- export * from './delivery-zones';
17
+ export * from './media';
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Type-safe admin RPC hooks for media management
3
+ */
4
+ import { UseQueryOptions, UseMutationOptions } from '@tanstack/react-query';
5
+ export interface MediaItem {
6
+ id: string;
7
+ url: string;
8
+ thumbnailUrl: string;
9
+ filename: string;
10
+ uploadedAt: string;
11
+ type: 'image' | 'video';
12
+ size: number;
13
+ }
14
+ export interface MediaListResponse {
15
+ media: MediaItem[];
16
+ }
17
+ export interface MediaUploadResponse {
18
+ media: Array<{
19
+ id: string;
20
+ url: string;
21
+ thumbnailUrl: string;
22
+ filename: string;
23
+ type: 'image' | 'video';
24
+ }>;
25
+ }
26
+ /**
27
+ * Hook to list media files from R2
28
+ */
29
+ export declare function useListMedia(options?: {
30
+ type?: 'image' | 'video' | 'all';
31
+ } & Omit<UseQueryOptions<MediaListResponse, Error>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<MediaListResponse, Error>;
32
+ /**
33
+ * Hook to upload media files to R2
34
+ * Note: File upload uses FormData, not JSON
35
+ */
36
+ export declare function useUploadMedia(options?: UseMutationOptions<MediaUploadResponse, Error, any>): import("@tanstack/react-query").UseMutationResult<MediaUploadResponse, Error, any, unknown>;
37
+ /**
38
+ * Hook to delete media from R2
39
+ */
40
+ export declare function useDeleteMedia(options?: UseMutationOptions<{
41
+ success: boolean;
42
+ }, Error, string>): import("@tanstack/react-query").UseMutationResult<{
43
+ success: boolean;
44
+ }, Error, string, unknown>;
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Type-safe admin RPC hooks for media 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 media files from R2
11
+ */
12
+ export function useListMedia(options) {
13
+ const { baseURL, getAuthToken } = useApiConfig();
14
+ const { type, ...queryOptions } = options || {};
15
+ return useQueryUnwrapped({
16
+ queryKey: queryKeys.admin.media.list(type),
17
+ queryFn: async () => {
18
+ const token = await getAuthToken();
19
+ const clients = createAdminRpcClients(baseURL);
20
+ const queryParams = {};
21
+ if (type && type !== 'all') {
22
+ queryParams.type = type;
23
+ }
24
+ const res = await clients.media.index.$get({ query: queryParams }, authHeaders(token));
25
+ if (!res.ok)
26
+ throw new Error(`Failed to fetch media: ${res.statusText}`);
27
+ return res.json();
28
+ },
29
+ ...queryOptions,
30
+ });
31
+ }
32
+ /**
33
+ * Hook to upload media files to R2
34
+ * Note: File upload uses FormData, not JSON
35
+ */
36
+ export function useUploadMedia(options) {
37
+ const { baseURL, getAuthToken } = useApiConfig();
38
+ const queryClient = useQueryClient();
39
+ return useMutation({
40
+ mutationFn: async (files) => {
41
+ const token = await getAuthToken();
42
+ const formData = new FormData();
43
+ const fileArray = Array.isArray(files) ? files : Array.from(files);
44
+ for (const file of fileArray) {
45
+ // @ts-ignore
46
+ formData.append('files', file);
47
+ }
48
+ // Direct fetch for file upload (FormData doesn't work well with hc client)
49
+ const res = await fetch(`${baseURL}/v1/admin/media/upload`, {
50
+ method: 'POST',
51
+ headers: {
52
+ Authorization: `Bearer ${token}`,
53
+ },
54
+ body: formData,
55
+ });
56
+ if (!res.ok)
57
+ throw new Error(`Failed to upload media: ${res.statusText}`);
58
+ return res.json();
59
+ },
60
+ onSuccess: () => {
61
+ queryClient.invalidateQueries({ queryKey: queryKeys.admin.media.all });
62
+ },
63
+ ...options,
64
+ });
65
+ }
66
+ /**
67
+ * Hook to delete media from R2
68
+ */
69
+ export function useDeleteMedia(options) {
70
+ const { baseURL, getAuthToken } = useApiConfig();
71
+ const queryClient = useQueryClient();
72
+ return useMutation({
73
+ mutationFn: async (key) => {
74
+ const token = await getAuthToken();
75
+ const clients = createAdminRpcClients(baseURL);
76
+ const res = await clients.media[':key'].$delete({ param: { key } }, authHeaders(token));
77
+ if (!res.ok)
78
+ throw new Error(`Failed to delete media: ${res.statusText}`);
79
+ return res.json();
80
+ },
81
+ onSuccess: () => {
82
+ queryClient.invalidateQueries({ queryKey: queryKeys.admin.media.all });
83
+ },
84
+ ...options,
85
+ });
86
+ }