@instockng/api-client 1.0.7 → 1.0.9

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 (70) hide show
  1. package/dist/apps/backend/src/http-app.js +28 -0
  2. package/dist/apps/backend/src/lib/brand-response.d.ts +1 -1
  3. package/dist/apps/backend/src/lib/cart-helpers.d.ts +13 -11
  4. package/dist/apps/backend/src/lib/cart-helpers.js +28 -0
  5. package/dist/apps/backend/src/lib/cart-response.d.ts +5 -5
  6. package/dist/apps/backend/src/lib/clerk.js +23 -0
  7. package/dist/apps/backend/src/lib/delivery-zone-response.d.ts +6 -4
  8. package/dist/apps/backend/src/lib/discount-code-response.d.ts +2 -2
  9. package/dist/apps/backend/src/lib/meta-capi.d.ts +5 -0
  10. package/dist/apps/backend/src/lib/meta-capi.js +33 -2
  11. package/dist/apps/backend/src/lib/order-recovery.d.ts +30 -24
  12. package/dist/apps/backend/src/lib/order-response.d.ts +9 -7
  13. package/dist/apps/backend/src/lib/product-response.d.ts +4 -4
  14. package/dist/apps/backend/src/lib/sentry.d.ts +48 -0
  15. package/dist/apps/backend/src/lib/sentry.js +180 -0
  16. package/dist/apps/backend/src/lib/utils.d.ts +1 -1
  17. package/dist/apps/backend/src/lib/utils.js +1 -1
  18. package/dist/apps/backend/src/notifications/producers/meta-capi-producer.js +18 -4
  19. package/dist/apps/backend/src/routes/admin/abandoned-carts.d.ts +18 -10
  20. package/dist/apps/backend/src/routes/admin/brands.d.ts +4 -4
  21. package/dist/apps/backend/src/routes/admin/customers.d.ts +13 -7
  22. package/dist/apps/backend/src/routes/admin/delivery-zones.d.ts +23 -15
  23. package/dist/apps/backend/src/routes/admin/discount-codes.d.ts +10 -10
  24. package/dist/apps/backend/src/routes/admin/inventory.d.ts +4 -0
  25. package/dist/apps/backend/src/routes/admin/inventory.js +10 -0
  26. package/dist/apps/backend/src/routes/admin/orders.d.ts +78 -42
  27. package/dist/apps/backend/src/routes/admin/orders.js +25 -0
  28. package/dist/apps/backend/src/routes/admin/products.d.ts +28 -12
  29. package/dist/apps/backend/src/routes/admin/products.js +34 -15
  30. package/dist/apps/backend/src/routes/admin/stats.d.ts +13 -7
  31. package/dist/apps/backend/src/routes/admin/variants.d.ts +5 -5
  32. package/dist/apps/backend/src/routes/admin/variants.js +42 -18
  33. package/dist/apps/backend/src/routes/admin/warehouses.d.ts +11 -7
  34. package/dist/apps/backend/src/routes/public/brands.d.ts +1 -1
  35. package/dist/apps/backend/src/routes/public/carts.d.ts +85 -47
  36. package/dist/apps/backend/src/routes/public/carts.js +148 -1
  37. package/dist/apps/backend/src/routes/public/delivery-zones.d.ts +2 -0
  38. package/dist/apps/backend/src/routes/public/delivery-zones.js +2 -0
  39. package/dist/apps/backend/src/routes/public/orders.d.ts +26 -14
  40. package/dist/apps/backend/src/routes/public/orders.js +24 -0
  41. package/dist/apps/backend/src/routes/public/products.d.ts +14 -6
  42. package/dist/apps/backend/src/types/index.d.ts +1 -0
  43. package/dist/apps/backend/src/validators/delivery-zone.d.ts +4 -0
  44. package/dist/apps/backend/src/validators/delivery-zone.js +4 -0
  45. package/dist/apps/backend/src/validators/discount-code.d.ts +3 -3
  46. package/dist/apps/backend/src/validators/order.d.ts +3 -1
  47. package/dist/apps/backend/src/validators/order.js +3 -1
  48. package/dist/packages/api-client/src/fetchers/brands.d.ts +1 -1
  49. package/dist/packages/api-client/src/fetchers/carts.d.ts +85 -47
  50. package/dist/packages/api-client/src/fetchers/delivery-zones.d.ts +2 -0
  51. package/dist/packages/api-client/src/fetchers/orders.d.ts +26 -14
  52. package/dist/packages/api-client/src/fetchers/products.d.ts +14 -6
  53. package/dist/packages/api-client/src/hooks/admin/abandoned-carts.d.ts +18 -10
  54. package/dist/packages/api-client/src/hooks/admin/brands.d.ts +4 -4
  55. package/dist/packages/api-client/src/hooks/admin/customers.d.ts +13 -7
  56. package/dist/packages/api-client/src/hooks/admin/delivery-zones.d.ts +23 -15
  57. package/dist/packages/api-client/src/hooks/admin/discount-codes.d.ts +10 -10
  58. package/dist/packages/api-client/src/hooks/admin/inventory.d.ts +4 -0
  59. package/dist/packages/api-client/src/hooks/admin/orders.d.ts +78 -42
  60. package/dist/packages/api-client/src/hooks/admin/products.d.ts +14 -6
  61. package/dist/packages/api-client/src/hooks/admin/stats.d.ts +13 -7
  62. package/dist/packages/api-client/src/hooks/admin/variants.d.ts +5 -5
  63. package/dist/packages/api-client/src/hooks/admin/warehouses.d.ts +11 -7
  64. package/dist/packages/api-client/src/hooks/public/brands.d.ts +1 -1
  65. package/dist/packages/api-client/src/hooks/public/carts.d.ts +85 -47
  66. package/dist/packages/api-client/src/hooks/public/delivery-zones.d.ts +2 -0
  67. package/dist/packages/api-client/src/hooks/public/orders.d.ts +26 -14
  68. package/dist/packages/api-client/src/hooks/public/products.d.ts +14 -6
  69. package/dist/packages/api-client/src/rpc-client.d.ts +335 -187
  70. package/package.json +1 -1
@@ -34,8 +34,8 @@ export declare function formatOrderResponse(order: OrderDBResponse): {
34
34
  createdAt: string;
35
35
  updatedAt: string;
36
36
  deletedAt: string;
37
- name: string;
38
37
  id: string;
38
+ name: string;
39
39
  slug: string;
40
40
  logoUrl: string | null;
41
41
  siteUrl: string;
@@ -52,18 +52,20 @@ export declare function formatOrderResponse(order: OrderDBResponse): {
52
52
  createdAt: string;
53
53
  updatedAt: string;
54
54
  deletedAt: string;
55
- name: string;
56
55
  id: string;
56
+ name: string;
57
57
  isActive: boolean;
58
58
  };
59
- name: string;
60
59
  id: string;
60
+ name: string;
61
61
  brandId: string | null;
62
62
  stateId: string;
63
63
  allowCOD: boolean;
64
64
  allowOnline: boolean;
65
65
  waybillOnly: boolean;
66
66
  estimatedDays: number | null;
67
+ noteTitle: string | null;
68
+ noteContent: string | null;
67
69
  isActive: boolean;
68
70
  };
69
71
  items: {
@@ -77,8 +79,8 @@ export declare function formatOrderResponse(order: OrderDBResponse): {
77
79
  createdAt: string;
78
80
  updatedAt: string;
79
81
  deletedAt: string;
80
- name: string;
81
82
  id: string;
83
+ name: string;
82
84
  slug: string;
83
85
  brandId: string;
84
86
  isActive: boolean;
@@ -86,8 +88,8 @@ export declare function formatOrderResponse(order: OrderDBResponse): {
86
88
  thumbnailUrl: string | null;
87
89
  quantityDiscounts: Prisma.JsonValue | null;
88
90
  };
89
- name: string | null;
90
91
  id: string;
92
+ name: string | null;
91
93
  isActive: boolean;
92
94
  thumbnailUrl: string | null;
93
95
  productId: string;
@@ -99,8 +101,8 @@ export declare function formatOrderResponse(order: OrderDBResponse): {
99
101
  createdAt: string;
100
102
  updatedAt: string;
101
103
  deletedAt: string;
102
- name: string;
103
104
  id: string;
105
+ name: string;
104
106
  isActive: boolean;
105
107
  address: string | null;
106
108
  city: string | null;
@@ -112,8 +114,8 @@ export declare function formatOrderResponse(order: OrderDBResponse): {
112
114
  warehouseId: string | null;
113
115
  quantity: number;
114
116
  }[];
115
- id: string;
116
117
  email: string | null;
118
+ id: string;
117
119
  brandId: string;
118
120
  deliveryZoneId: string;
119
121
  recoveryAttempts: number;
@@ -32,8 +32,8 @@ export declare function formatProductResponse(product: ProductDBResponse): {
32
32
  createdAt: string;
33
33
  updatedAt: string;
34
34
  deletedAt: string;
35
- name: string;
36
35
  id: string;
36
+ name: string;
37
37
  slug: string;
38
38
  logoUrl: string | null;
39
39
  siteUrl: string;
@@ -45,8 +45,8 @@ export declare function formatProductResponse(product: ProductDBResponse): {
45
45
  updatedAt: string;
46
46
  price: number;
47
47
  deletedAt: string;
48
- name: string | null;
49
48
  id: string;
49
+ name: string | null;
50
50
  isActive: boolean;
51
51
  thumbnailUrl: string | null;
52
52
  productId: string;
@@ -54,8 +54,8 @@ export declare function formatProductResponse(product: ProductDBResponse): {
54
54
  trackInventory: boolean;
55
55
  lowStockThreshold: number | null;
56
56
  }[];
57
- name: string;
58
57
  id: string;
58
+ name: string;
59
59
  slug: string;
60
60
  createdAt: Date;
61
61
  updatedAt: Date;
@@ -71,8 +71,8 @@ export declare function formatProductVariantResponse(variant: ProductVariantDBRe
71
71
  updatedAt: string;
72
72
  price: number;
73
73
  deletedAt: string;
74
- name: string | null;
75
74
  id: string;
75
+ name: string | null;
76
76
  isActive: boolean;
77
77
  thumbnailUrl: string | null;
78
78
  productId: string;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Sentry error tracking for Cloudflare Workers
3
+ *
4
+ * This module provides utilities for capturing errors, exceptions, and messages
5
+ * with proper context and sampling rates.
6
+ *
7
+ * Sentry is initialized via withSentry() wrapper in index.ts
8
+ */
9
+ import type { Context } from 'hono';
10
+ /**
11
+ * Capture an exception with request context
12
+ */
13
+ export declare function captureException(error: Error | unknown, context?: {
14
+ level?: 'fatal' | 'error' | 'warning';
15
+ tags?: Record<string, string>;
16
+ extra?: Record<string, any>;
17
+ fingerprint?: string[];
18
+ honoContext?: Context<any>;
19
+ }): void;
20
+ /**
21
+ * Capture a message with context (for non-exception events)
22
+ */
23
+ export declare function captureMessage(message: string, context?: {
24
+ level?: 'fatal' | 'error' | 'warning' | 'info' | 'debug';
25
+ tags?: Record<string, string>;
26
+ extra?: Record<string, any>;
27
+ sampleRate?: number;
28
+ }): void;
29
+ /**
30
+ * Add breadcrumb for tracing event flow
31
+ */
32
+ export declare function addBreadcrumb(message: string, data?: Record<string, any>, category?: string): void;
33
+ /**
34
+ * Wrap a function with Sentry error capturing
35
+ */
36
+ export declare function withSentry<T extends (...args: any[]) => any>(fn: T, context?: {
37
+ tags?: Record<string, string>;
38
+ extra?: Record<string, any>;
39
+ }): T;
40
+ /**
41
+ * Helper to determine if an error should be tracked in Sentry
42
+ * based on its characteristics (e.g., status code, error code)
43
+ */
44
+ export declare function shouldTrackError(statusCode: number, errorCode?: string): boolean;
45
+ /**
46
+ * Get sample rate for different error types
47
+ */
48
+ export declare function getSampleRate(errorCode: string): number;
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Sentry error tracking for Cloudflare Workers
3
+ *
4
+ * This module provides utilities for capturing errors, exceptions, and messages
5
+ * with proper context and sampling rates.
6
+ *
7
+ * Sentry is initialized via withSentry() wrapper in index.ts
8
+ */
9
+ import * as Sentry from '@sentry/cloudflare';
10
+ /**
11
+ * Capture an exception with request context
12
+ */
13
+ export function captureException(error, context) {
14
+ Sentry.withScope((scope) => {
15
+ // Set severity level
16
+ if (context?.level) {
17
+ scope.setLevel(context.level);
18
+ }
19
+ // Add tags for filtering/grouping
20
+ if (context?.tags) {
21
+ Object.entries(context.tags).forEach(([key, value]) => {
22
+ scope.setTag(key, value);
23
+ });
24
+ }
25
+ // Add extra context data
26
+ if (context?.extra) {
27
+ Object.entries(context.extra).forEach(([key, value]) => {
28
+ scope.setExtra(key, value);
29
+ });
30
+ }
31
+ // Custom fingerprint for grouping
32
+ if (context?.fingerprint) {
33
+ scope.setFingerprint(context.fingerprint);
34
+ }
35
+ // Add request context from Hono if available
36
+ if (context?.honoContext) {
37
+ const c = context.honoContext;
38
+ const req = c.req;
39
+ // Set request context
40
+ scope.setContext('request', {
41
+ url: req.url,
42
+ method: req.method,
43
+ headers: sanitizeHeaders(req.header()),
44
+ });
45
+ // Add user context if authenticated
46
+ const user = c.get('user');
47
+ if (user) {
48
+ scope.setUser({
49
+ id: user.id,
50
+ email: user.email,
51
+ username: user.name,
52
+ });
53
+ }
54
+ // Add brand context if available
55
+ const brandSlug = req.param('brandSlug') || req.query('brandSlug');
56
+ if (brandSlug) {
57
+ scope.setTag('brand', brandSlug);
58
+ }
59
+ }
60
+ // Capture the exception
61
+ Sentry.captureException(error);
62
+ });
63
+ }
64
+ /**
65
+ * Capture a message with context (for non-exception events)
66
+ */
67
+ export function captureMessage(message, context) {
68
+ // Apply sampling if specified
69
+ if (context?.sampleRate !== undefined && Math.random() > context.sampleRate) {
70
+ return; // Skip this capture based on sample rate
71
+ }
72
+ Sentry.withScope((scope) => {
73
+ if (context?.level) {
74
+ scope.setLevel(context.level);
75
+ }
76
+ if (context?.tags) {
77
+ Object.entries(context.tags).forEach(([key, value]) => {
78
+ scope.setTag(key, value);
79
+ });
80
+ }
81
+ if (context?.extra) {
82
+ Object.entries(context.extra).forEach(([key, value]) => {
83
+ scope.setExtra(key, value);
84
+ });
85
+ }
86
+ Sentry.captureMessage(message, context?.level || 'info');
87
+ });
88
+ }
89
+ /**
90
+ * Add breadcrumb for tracing event flow
91
+ */
92
+ export function addBreadcrumb(message, data, category) {
93
+ Sentry.addBreadcrumb({
94
+ message,
95
+ data,
96
+ category: category || 'default',
97
+ level: 'info',
98
+ });
99
+ }
100
+ /**
101
+ * Wrap a function with Sentry error capturing
102
+ */
103
+ export function withSentry(fn, context) {
104
+ return ((...args) => {
105
+ try {
106
+ const result = fn(...args);
107
+ // Handle async functions
108
+ if (result instanceof Promise) {
109
+ return result.catch((error) => {
110
+ captureException(error, context);
111
+ throw error;
112
+ });
113
+ }
114
+ return result;
115
+ }
116
+ catch (error) {
117
+ captureException(error, context);
118
+ throw error;
119
+ }
120
+ });
121
+ }
122
+ /**
123
+ * Sanitize headers to remove sensitive data
124
+ */
125
+ function sanitizeHeaders(headers) {
126
+ const sanitized = {};
127
+ const sensitiveHeaders = ['authorization', 'cookie', 'x-api-key'];
128
+ Object.entries(headers).forEach(([key, value]) => {
129
+ if (sensitiveHeaders.includes(key.toLowerCase())) {
130
+ sanitized[key] = '[REDACTED]';
131
+ }
132
+ else {
133
+ sanitized[key] = value;
134
+ }
135
+ });
136
+ return sanitized;
137
+ }
138
+ /**
139
+ * Helper to determine if an error should be tracked in Sentry
140
+ * based on its characteristics (e.g., status code, error code)
141
+ */
142
+ export function shouldTrackError(statusCode, errorCode) {
143
+ // Always track 500 errors
144
+ if (statusCode >= 500) {
145
+ return true;
146
+ }
147
+ // Don't track expected client errors
148
+ const expectedErrors = ['UNAUTHORIZED', 'NOT_FOUND'];
149
+ if (errorCode && expectedErrors.includes(errorCode)) {
150
+ return false;
151
+ }
152
+ // Track other 4xx errors with sampling
153
+ return statusCode >= 400;
154
+ }
155
+ /**
156
+ * Get sample rate for different error types
157
+ */
158
+ export function getSampleRate(errorCode) {
159
+ const sampleRates = {
160
+ // High-volume, expected errors - low sample rate
161
+ CART_EXPIRED: 0.1,
162
+ NOT_FOUND: 0.05,
163
+ CART_NOT_FOUND: 0.05,
164
+ ORDER_NOT_FOUND: 0.05,
165
+ VARIANT_NOT_FOUND: 0.05,
166
+ // Medium-volume errors - moderate sample rate
167
+ INVALID_DISCOUNT_CODE: 0.2,
168
+ MIN_PURCHASE_NOT_MET: 0.15,
169
+ PAYMENT_METHOD_NOT_AVAILABLE: 0.25,
170
+ INVALID_DELIVERY_ZONE: 0.3,
171
+ PRECONDITION_FAILED: 0.5,
172
+ // Low-volume errors - higher sample rate
173
+ BAD_REQUEST: 0.1,
174
+ CODE_EXISTS: 1.0,
175
+ STATE_EXISTS: 1.0,
176
+ // Default for unknown errors
177
+ DEFAULT: 1.0,
178
+ };
179
+ return sampleRates[errorCode] ?? sampleRates.DEFAULT;
180
+ }
@@ -1,5 +1,5 @@
1
1
  import { Decimal } from '@prisma/client/runtime/library';
2
- export { WHATSAPP_HELP_NUMBER, WHATSAPP_HELP_NUMBER_FORMATTED, WHATSAPP_HELP_LINK } from '@oms/shared';
2
+ export { WHATSAPP_HELP_NUMBER, WHATSAPP_HELP_NUMBER_FORMATTED, WHATSAPP_HELP_LINK } from '@instockng/shared';
3
3
  /**
4
4
  * Convert Decimal to number for JSON responses
5
5
  */
@@ -1,5 +1,5 @@
1
1
  // Re-export shared constants
2
- export { WHATSAPP_HELP_NUMBER, WHATSAPP_HELP_NUMBER_FORMATTED, WHATSAPP_HELP_LINK } from '@oms/shared';
2
+ export { WHATSAPP_HELP_NUMBER, WHATSAPP_HELP_NUMBER_FORMATTED, WHATSAPP_HELP_LINK } from '@instockng/shared';
3
3
  /**
4
4
  * Convert Decimal to number for JSON responses
5
5
  */
@@ -31,9 +31,13 @@ export async function enqueueAddToCartEvent(env, data) {
31
31
  fbp: data.fbp,
32
32
  },
33
33
  customData: {
34
- value: data.price, // Unit price, not total
34
+ value: data.price * data.quantity, // Total value
35
35
  currency: 'NGN',
36
- contentIds: [data.sku],
36
+ contents: [{
37
+ id: data.sku,
38
+ quantity: data.quantity,
39
+ item_price: data.price,
40
+ }],
37
41
  contentName: data.productName,
38
42
  contentType: 'product',
39
43
  numItems: data.quantity,
@@ -106,6 +110,7 @@ export async function enqueuePurchaseEvent(env, order, options) {
106
110
  firstName: order.firstName,
107
111
  lastName: order.lastName,
108
112
  city: order.city,
113
+ state: order.deliveryZone.state.name,
109
114
  country: 'ng', // Nigeria
110
115
  clientIpAddress: options?.clientIpAddress,
111
116
  clientUserAgent: options?.clientUserAgent,
@@ -115,7 +120,11 @@ export async function enqueuePurchaseEvent(env, order, options) {
115
120
  customData: {
116
121
  value: Number(order.totalPrice),
117
122
  currency: 'NGN',
118
- contentIds: order.items.map((item) => item.variant.sku),
123
+ contents: order.items.map((item) => ({
124
+ id: item.variant.sku,
125
+ quantity: item.quantity,
126
+ item_price: Number(item.priceAtPurchase),
127
+ })),
119
128
  contentType: 'product',
120
129
  numItems: order.items.reduce((sum, item) => sum + item.quantity, 0),
121
130
  },
@@ -151,12 +160,17 @@ export async function enqueueConfirmedPurchaseEvent(env, order) {
151
160
  firstName: order.firstName,
152
161
  lastName: order.lastName,
153
162
  city: order.city,
163
+ state: order.deliveryZone.state.name,
154
164
  country: 'ng', // Nigeria
155
165
  },
156
166
  customData: {
157
167
  value: Number(order.totalPrice),
158
168
  currency: 'NGN',
159
- contentIds: order.items.map((item) => item.variant.sku),
169
+ contents: order.items.map((item) => ({
170
+ id: item.variant.sku,
171
+ quantity: item.quantity,
172
+ item_price: Number(item.priceAtPurchase),
173
+ })),
160
174
  contentType: 'product',
161
175
  numItems: order.items.reduce((sum, item) => sum + item.quantity, 0),
162
176
  },
@@ -10,8 +10,8 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
10
10
  createdAt: string;
11
11
  updatedAt: string;
12
12
  deletedAt: string;
13
- name: string;
14
13
  id: string;
14
+ name: string;
15
15
  slug: string;
16
16
  logoUrl: string | null;
17
17
  siteUrl: string;
@@ -31,14 +31,14 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
31
31
  lastRecoveryAttemptAt: string;
32
32
  recoveryDiscountCode: {
33
33
  id: string;
34
+ type: string;
35
+ value: string;
34
36
  createdAt: string;
35
37
  updatedAt: string;
36
38
  deletedAt: string;
37
39
  brandId: string | null;
38
40
  isActive: boolean;
39
41
  code: string;
40
- type: string;
41
- value: string;
42
42
  minPurchase: string;
43
43
  maxDiscount: string;
44
44
  usageLimit: number | null;
@@ -56,8 +56,8 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
56
56
  variant: {
57
57
  price: number;
58
58
  product: {
59
- name: string;
60
59
  id: string;
60
+ name: string;
61
61
  slug: string;
62
62
  createdAt: string;
63
63
  updatedAt: string;
@@ -136,7 +136,9 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
136
136
  includes?: boolean;
137
137
  flatMap?: boolean;
138
138
  flat?: boolean;
139
+ at?: boolean;
139
140
  };
141
+ at: never;
140
142
  };
141
143
  } | {
142
144
  [x: number]: string | number | boolean | {
@@ -209,11 +211,13 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
209
211
  includes?: boolean;
210
212
  flatMap?: boolean;
211
213
  flat?: boolean;
214
+ at?: boolean;
212
215
  };
216
+ at: never;
213
217
  };
214
218
  };
215
- name: string | null;
216
219
  id: string;
220
+ name: string | null;
217
221
  createdAt: string;
218
222
  updatedAt: string;
219
223
  deletedAt: string;
@@ -344,8 +348,8 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
344
348
  createdAt: string;
345
349
  updatedAt: string;
346
350
  deletedAt: string;
347
- name: string;
348
351
  id: string;
352
+ name: string;
349
353
  slug: string;
350
354
  logoUrl: string | null;
351
355
  siteUrl: string;
@@ -365,14 +369,14 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
365
369
  lastRecoveryAttemptAt: string;
366
370
  recoveryDiscountCode: {
367
371
  id: string;
372
+ type: string;
373
+ value: string;
368
374
  createdAt: string;
369
375
  updatedAt: string;
370
376
  deletedAt: string;
371
377
  brandId: string | null;
372
378
  isActive: boolean;
373
379
  code: string;
374
- type: string;
375
- value: string;
376
380
  minPurchase: string;
377
381
  maxDiscount: string;
378
382
  usageLimit: number | null;
@@ -390,8 +394,8 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
390
394
  variant: {
391
395
  price: number;
392
396
  product: {
393
- name: string;
394
397
  id: string;
398
+ name: string;
395
399
  slug: string;
396
400
  createdAt: string;
397
401
  updatedAt: string;
@@ -470,7 +474,9 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
470
474
  includes?: boolean;
471
475
  flatMap?: boolean;
472
476
  flat?: boolean;
477
+ at?: boolean;
473
478
  };
479
+ at: never;
474
480
  };
475
481
  } | {
476
482
  [x: number]: string | number | boolean | {
@@ -543,11 +549,13 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
543
549
  includes?: boolean;
544
550
  flatMap?: boolean;
545
551
  flat?: boolean;
552
+ at?: boolean;
546
553
  };
554
+ at: never;
547
555
  };
548
556
  };
549
- name: string | null;
550
557
  id: string;
558
+ name: string | null;
551
559
  createdAt: string;
552
560
  updatedAt: string;
553
561
  deletedAt: string;
@@ -4,8 +4,8 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
4
4
  $get: {
5
5
  input: {};
6
6
  output: {
7
- name: string;
8
7
  id: string;
8
+ name: string;
9
9
  slug: string;
10
10
  logoUrl: string | null;
11
11
  siteUrl: string;
@@ -52,8 +52,8 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
52
52
  };
53
53
  };
54
54
  output: {
55
- name: string;
56
55
  id: string;
56
+ name: string;
57
57
  slug: string;
58
58
  logoUrl: string | null;
59
59
  siteUrl: string;
@@ -86,8 +86,8 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
86
86
  $post: {
87
87
  input: {};
88
88
  output: {
89
- name: string;
90
89
  id: string;
90
+ name: string;
91
91
  slug: string;
92
92
  logoUrl: string | null;
93
93
  siteUrl: string;
@@ -120,8 +120,8 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
120
120
  };
121
121
  };
122
122
  output: {
123
- name: string;
124
123
  id: string;
124
+ name: string;
125
125
  slug: string;
126
126
  logoUrl: string | null;
127
127
  siteUrl: string;
@@ -43,8 +43,8 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
43
43
  createdAt: string;
44
44
  updatedAt: string;
45
45
  deletedAt: string;
46
- name: string;
47
46
  id: string;
47
+ name: string;
48
48
  slug: string;
49
49
  logoUrl: string | null;
50
50
  siteUrl: string;
@@ -61,18 +61,20 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
61
61
  createdAt: string;
62
62
  updatedAt: string;
63
63
  deletedAt: string;
64
- name: string;
65
64
  id: string;
65
+ name: string;
66
66
  isActive: boolean;
67
67
  };
68
- name: string;
69
68
  id: string;
69
+ name: string;
70
70
  brandId: string | null;
71
71
  stateId: string;
72
72
  allowCOD: boolean;
73
73
  allowOnline: boolean;
74
74
  waybillOnly: boolean;
75
75
  estimatedDays: number | null;
76
+ noteTitle: string | null;
77
+ noteContent: string | null;
76
78
  isActive: boolean;
77
79
  };
78
80
  items: {
@@ -86,8 +88,8 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
86
88
  createdAt: string;
87
89
  updatedAt: string;
88
90
  deletedAt: string;
89
- name: string;
90
91
  id: string;
92
+ name: string;
91
93
  slug: string;
92
94
  brandId: string;
93
95
  isActive: boolean;
@@ -163,7 +165,9 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
163
165
  includes?: boolean;
164
166
  flatMap?: boolean;
165
167
  flat?: boolean;
168
+ at?: boolean;
166
169
  };
170
+ at: never;
167
171
  };
168
172
  } | {
169
173
  [x: number]: string | number | boolean | {
@@ -236,11 +240,13 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
236
240
  includes?: boolean;
237
241
  flatMap?: boolean;
238
242
  flat?: boolean;
243
+ at?: boolean;
239
244
  };
245
+ at: never;
240
246
  };
241
247
  };
242
- name: string | null;
243
248
  id: string;
249
+ name: string | null;
244
250
  isActive: boolean;
245
251
  thumbnailUrl: string | null;
246
252
  productId: string;
@@ -252,8 +258,8 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
252
258
  createdAt: string;
253
259
  updatedAt: string;
254
260
  deletedAt: string;
255
- name: string;
256
261
  id: string;
262
+ name: string;
257
263
  isActive: boolean;
258
264
  address: string | null;
259
265
  city: string | null;
@@ -265,8 +271,8 @@ declare const app: import("hono/hono-base").HonoBase<AppContext, {
265
271
  warehouseId: string | null;
266
272
  quantity: number;
267
273
  }[];
268
- id: string;
269
274
  email: string | null;
275
+ id: string;
270
276
  brandId: string;
271
277
  deliveryZoneId: string;
272
278
  recoveryAttempts: number;