@instockng/api-client 1.0.6 → 1.0.8

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 (178) hide show
  1. package/dist/apps/backend/src/generated/zod/index.d.ts +1114 -0
  2. package/dist/apps/backend/src/generated/zod/index.js +670 -0
  3. package/dist/apps/backend/src/http-app.d.ts +40 -0
  4. package/dist/apps/backend/src/http-app.js +134 -0
  5. package/dist/apps/backend/src/lib/brand-response.d.ts +14 -0
  6. package/dist/apps/backend/src/lib/brand-response.js +8 -0
  7. package/dist/apps/backend/src/lib/cart-helpers.d.ts +282 -0
  8. package/dist/apps/backend/src/lib/cart-helpers.js +121 -0
  9. package/dist/apps/backend/src/lib/cart-recovery.d.ts +30 -0
  10. package/dist/apps/backend/src/lib/cart-recovery.js +147 -0
  11. package/dist/apps/backend/src/lib/cart-response.d.ts +121 -0
  12. package/dist/apps/backend/src/lib/cart-response.js +150 -0
  13. package/dist/apps/backend/src/lib/clerk.d.ts +18 -0
  14. package/dist/apps/backend/src/lib/clerk.js +190 -0
  15. package/dist/apps/backend/src/lib/delivery-zone-response.d.ts +64 -0
  16. package/dist/apps/backend/src/lib/delivery-zone-response.js +24 -0
  17. package/dist/apps/backend/src/lib/discount-code-response.d.ts +42 -0
  18. package/dist/apps/backend/src/lib/discount-code-response.js +19 -0
  19. package/dist/apps/backend/src/lib/discount.d.ts +20 -0
  20. package/dist/apps/backend/src/lib/discount.js +35 -0
  21. package/dist/apps/backend/src/lib/inventory.d.ts +26 -0
  22. package/dist/apps/backend/src/lib/inventory.js +160 -0
  23. package/dist/apps/backend/src/lib/meta-capi.d.ts +53 -0
  24. package/dist/apps/backend/src/lib/meta-capi.js +151 -0
  25. package/dist/apps/backend/src/lib/openapi.d.ts +36 -0
  26. package/dist/apps/backend/src/lib/openapi.js +69 -0
  27. package/dist/apps/backend/src/lib/order-recovery.d.ts +459 -0
  28. package/dist/apps/backend/src/lib/order-recovery.js +378 -0
  29. package/dist/apps/backend/src/lib/order-response.d.ts +138 -0
  30. package/dist/apps/backend/src/lib/order-response.js +61 -0
  31. package/dist/apps/backend/src/lib/pricing.d.ts +39 -0
  32. package/dist/apps/backend/src/lib/pricing.js +62 -0
  33. package/dist/apps/backend/src/lib/prisma.d.ts +9 -0
  34. package/dist/apps/backend/src/lib/prisma.js +30 -0
  35. package/dist/apps/backend/src/lib/product-response.d.ts +82 -0
  36. package/dist/apps/backend/src/lib/product-response.js +29 -0
  37. package/dist/apps/backend/src/lib/sentry.d.ts +48 -0
  38. package/dist/apps/backend/src/lib/sentry.js +180 -0
  39. package/dist/apps/backend/src/lib/utils.d.ts +32 -0
  40. package/dist/apps/backend/src/lib/utils.js +63 -0
  41. package/dist/apps/backend/src/middleware/clerk-auth.d.ts +8 -0
  42. package/dist/apps/backend/src/middleware/clerk-auth.js +89 -0
  43. package/dist/apps/backend/src/middleware/cors.d.ts +8 -0
  44. package/dist/apps/backend/src/middleware/cors.js +11 -0
  45. package/dist/apps/backend/src/notifications/producers/meta-capi-producer.d.ts +62 -0
  46. package/dist/apps/backend/src/notifications/producers/meta-capi-producer.js +180 -0
  47. package/dist/apps/backend/src/notifications/producers/order-notification.d.ts +9 -0
  48. package/dist/apps/backend/src/notifications/producers/order-notification.js +18 -0
  49. package/dist/apps/backend/src/notifications/producers/prospect-recovery-notification.d.ts +10 -0
  50. package/dist/apps/backend/src/notifications/producers/prospect-recovery-notification.js +11 -0
  51. package/dist/apps/backend/src/routes/admin/abandoned-carts.d.ts +605 -0
  52. package/dist/apps/backend/src/routes/admin/abandoned-carts.js +194 -0
  53. package/dist/apps/backend/src/routes/admin/brands.d.ts +175 -0
  54. package/dist/apps/backend/src/routes/admin/brands.js +118 -0
  55. package/dist/apps/backend/src/routes/admin/customers.d.ts +308 -0
  56. package/dist/apps/backend/src/routes/admin/customers.js +39 -0
  57. package/dist/apps/backend/src/routes/admin/delivery-zones.d.ts +446 -0
  58. package/dist/apps/backend/src/routes/admin/delivery-zones.js +300 -0
  59. package/dist/apps/backend/src/routes/admin/discount-codes.d.ts +478 -0
  60. package/dist/apps/backend/src/routes/admin/discount-codes.js +418 -0
  61. package/dist/apps/backend/src/routes/admin/inventory.d.ts +273 -0
  62. package/dist/apps/backend/src/routes/admin/inventory.js +199 -0
  63. package/dist/apps/backend/src/routes/admin/orders.d.ts +1780 -0
  64. package/dist/apps/backend/src/routes/admin/orders.js +552 -0
  65. package/dist/apps/backend/src/routes/admin/products.d.ts +860 -0
  66. package/dist/apps/backend/src/routes/admin/products.js +126 -0
  67. package/dist/apps/backend/src/routes/admin/stats.d.ts +290 -0
  68. package/dist/apps/backend/src/routes/admin/stats.js +55 -0
  69. package/dist/apps/backend/src/routes/admin/variants.d.ts +239 -0
  70. package/dist/apps/backend/src/routes/admin/variants.js +197 -0
  71. package/dist/apps/backend/src/routes/admin/warehouses.d.ts +373 -0
  72. package/dist/apps/backend/src/routes/admin/warehouses.js +123 -0
  73. package/dist/apps/backend/src/routes/public/brands.d.ts +40 -0
  74. package/dist/apps/backend/src/routes/public/brands.js +38 -0
  75. package/dist/apps/backend/src/routes/public/carts.d.ts +2657 -0
  76. package/dist/apps/backend/src/routes/public/carts.js +778 -0
  77. package/dist/apps/backend/src/routes/public/delivery-zones.d.ts +37 -0
  78. package/dist/apps/backend/src/routes/public/delivery-zones.js +64 -0
  79. package/dist/apps/backend/src/routes/public/orders.d.ts +609 -0
  80. package/dist/apps/backend/src/routes/public/orders.js +184 -0
  81. package/dist/apps/backend/src/routes/public/products.d.ts +449 -0
  82. package/dist/apps/backend/src/routes/public/products.js +133 -0
  83. package/dist/apps/backend/src/types/index.d.ts +43 -0
  84. package/dist/apps/backend/src/types/index.js +2 -0
  85. package/dist/apps/backend/src/validators/brand.d.ts +17 -0
  86. package/dist/apps/backend/src/validators/brand.js +15 -0
  87. package/dist/apps/backend/src/validators/delivery-zone.d.ts +35 -0
  88. package/dist/apps/backend/src/validators/delivery-zone.js +55 -0
  89. package/dist/apps/backend/src/validators/discount-code.d.ts +74 -0
  90. package/dist/apps/backend/src/validators/discount-code.js +50 -0
  91. package/dist/apps/backend/src/validators/inventory.d.ts +20 -0
  92. package/dist/apps/backend/src/validators/inventory.js +15 -0
  93. package/dist/apps/backend/src/validators/order.d.ts +58 -0
  94. package/dist/apps/backend/src/validators/order.js +62 -0
  95. package/dist/apps/backend/src/validators/product.d.ts +18 -0
  96. package/dist/apps/backend/src/validators/product.js +19 -0
  97. package/dist/apps/backend/src/validators/variant.d.ts +19 -0
  98. package/dist/apps/backend/src/validators/variant.js +19 -0
  99. package/dist/apps/backend/src/validators/warehouse.d.ts +15 -0
  100. package/dist/apps/backend/src/validators/warehouse.js +15 -0
  101. package/dist/fetchers/orders.d.ts +258 -1
  102. package/dist/hooks/admin/orders.d.ts +285 -3
  103. package/dist/hooks/admin/orders.js +7 -4
  104. package/dist/hooks/public/orders.d.ts +258 -1
  105. package/dist/packages/api-client/src/backend-types.d.ts +10 -0
  106. package/dist/packages/api-client/src/backend-types.js +10 -0
  107. package/dist/packages/api-client/src/client.d.ts +20 -0
  108. package/dist/packages/api-client/src/client.js +40 -0
  109. package/dist/packages/api-client/src/enum-types.d.ts +8 -0
  110. package/dist/packages/api-client/src/enum-types.js +5 -0
  111. package/dist/packages/api-client/src/fetchers/brands.d.ts +25 -0
  112. package/dist/packages/api-client/src/fetchers/brands.js +26 -0
  113. package/dist/packages/api-client/src/fetchers/carts.d.ts +2337 -0
  114. package/dist/packages/api-client/src/fetchers/carts.js +174 -0
  115. package/dist/packages/api-client/src/fetchers/delivery-zones.d.ts +30 -0
  116. package/dist/packages/api-client/src/fetchers/delivery-zones.js +26 -0
  117. package/dist/packages/api-client/src/fetchers/index.d.ts +22 -0
  118. package/dist/packages/api-client/src/fetchers/index.js +22 -0
  119. package/dist/packages/api-client/src/fetchers/orders.d.ts +544 -0
  120. package/dist/packages/api-client/src/fetchers/orders.js +44 -0
  121. package/dist/packages/api-client/src/fetchers/products.d.ts +386 -0
  122. package/dist/packages/api-client/src/fetchers/products.js +42 -0
  123. package/dist/packages/api-client/src/hooks/admin/abandoned-carts.d.ts +535 -0
  124. package/dist/packages/api-client/src/hooks/admin/abandoned-carts.js +83 -0
  125. package/dist/packages/api-client/src/hooks/admin/brands.d.ts +79 -0
  126. package/dist/packages/api-client/src/hooks/admin/brands.js +108 -0
  127. package/dist/packages/api-client/src/hooks/admin/customers.d.ts +280 -0
  128. package/dist/packages/api-client/src/hooks/admin/customers.js +26 -0
  129. package/dist/packages/api-client/src/hooks/admin/delivery-zones.d.ts +278 -0
  130. package/dist/packages/api-client/src/hooks/admin/delivery-zones.js +176 -0
  131. package/dist/packages/api-client/src/hooks/admin/discount-codes.d.ts +299 -0
  132. package/dist/packages/api-client/src/hooks/admin/discount-codes.js +165 -0
  133. package/dist/packages/api-client/src/hooks/admin/index.d.ts +16 -0
  134. package/dist/packages/api-client/src/hooks/admin/index.js +16 -0
  135. package/dist/packages/api-client/src/hooks/admin/inventory.d.ts +224 -0
  136. package/dist/packages/api-client/src/hooks/admin/inventory.js +107 -0
  137. package/dist/packages/api-client/src/hooks/admin/orders.d.ts +1674 -0
  138. package/dist/packages/api-client/src/hooks/admin/orders.js +178 -0
  139. package/dist/packages/api-client/src/hooks/admin/products.d.ts +374 -0
  140. package/dist/packages/api-client/src/hooks/admin/products.js +89 -0
  141. package/dist/packages/api-client/src/hooks/admin/stats.d.ts +279 -0
  142. package/dist/packages/api-client/src/hooks/admin/stats.js +25 -0
  143. package/dist/packages/api-client/src/hooks/admin/variants.d.ts +115 -0
  144. package/dist/packages/api-client/src/hooks/admin/variants.js +127 -0
  145. package/dist/packages/api-client/src/hooks/admin/warehouses.d.ts +277 -0
  146. package/dist/packages/api-client/src/hooks/admin/warehouses.js +108 -0
  147. package/dist/packages/api-client/src/hooks/public/brands.d.ts +33 -0
  148. package/dist/packages/api-client/src/hooks/public/brands.js +30 -0
  149. package/dist/packages/api-client/src/hooks/public/carts.d.ts +2407 -0
  150. package/dist/packages/api-client/src/hooks/public/carts.js +213 -0
  151. package/dist/packages/api-client/src/hooks/public/delivery-zones.d.ts +36 -0
  152. package/dist/packages/api-client/src/hooks/public/delivery-zones.js +28 -0
  153. package/dist/packages/api-client/src/hooks/public/index.d.ts +10 -0
  154. package/dist/packages/api-client/src/hooks/public/index.js +10 -0
  155. package/dist/packages/api-client/src/hooks/public/orders.d.ts +563 -0
  156. package/dist/packages/api-client/src/hooks/public/orders.js +50 -0
  157. package/dist/packages/api-client/src/hooks/public/products.d.ts +398 -0
  158. package/dist/packages/api-client/src/hooks/public/products.js +47 -0
  159. package/dist/packages/api-client/src/hooks/use-query-unwrapped.d.ts +20 -0
  160. package/dist/packages/api-client/src/hooks/use-query-unwrapped.js +22 -0
  161. package/dist/packages/api-client/src/hooks/useApiConfig.d.ts +12 -0
  162. package/dist/packages/api-client/src/hooks/useApiConfig.js +14 -0
  163. package/dist/packages/api-client/src/index.d.ts +20 -0
  164. package/dist/packages/api-client/src/index.js +25 -0
  165. package/dist/packages/api-client/src/provider.d.ts +36 -0
  166. package/dist/packages/api-client/src/provider.js +54 -0
  167. package/dist/packages/api-client/src/rpc-client.d.ts +9639 -0
  168. package/dist/packages/api-client/src/rpc-client.js +78 -0
  169. package/dist/packages/api-client/src/rpc-types.d.ts +76 -0
  170. package/dist/packages/api-client/src/rpc-types.js +7 -0
  171. package/dist/packages/api-client/src/types.d.ts +34 -0
  172. package/dist/packages/api-client/src/types.js +16 -0
  173. package/dist/packages/api-client/src/utils/query-keys.d.ts +106 -0
  174. package/dist/packages/api-client/src/utils/query-keys.js +108 -0
  175. package/dist/rpc-client.d.ts +891 -319
  176. package/dist/utils/query-keys.d.ts +1 -1
  177. package/dist/utils/query-keys.js +1 -1
  178. package/package.json +1 -1
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Meta Conversions API Event Producer
3
+ *
4
+ * Queues Meta CAPI events for processing by the queue consumer.
5
+ */
6
+ import { generateEventId } from '../../lib/meta-capi';
7
+ /**
8
+ * Queue an AddToCart event
9
+ */
10
+ export async function enqueueAddToCartEvent(env, data) {
11
+ if (!env.META_CAPI_QUEUE) {
12
+ console.warn('[Meta CAPI] Queue not configured, skipping AddToCart event');
13
+ return;
14
+ }
15
+ if (!data.pixelId) {
16
+ console.log('[Meta CAPI] No pixel ID, skipping AddToCart event');
17
+ return;
18
+ }
19
+ const message = {
20
+ pixelId: data.pixelId,
21
+ eventName: 'AddToCart',
22
+ eventId: generateEventId('cart', data.cartId, `item_${data.itemId}`),
23
+ eventTime: Math.floor(Date.now() / 1000),
24
+ eventSourceUrl: `${data.brandSiteUrl}/product/${data.productSlug}`,
25
+ userData: {
26
+ email: data.customerEmail || undefined,
27
+ phone: data.customerPhone || undefined,
28
+ clientIpAddress: data.clientIpAddress,
29
+ clientUserAgent: data.clientUserAgent,
30
+ fbc: data.fbc,
31
+ fbp: data.fbp,
32
+ },
33
+ customData: {
34
+ value: data.price * data.quantity, // Total value
35
+ currency: 'NGN',
36
+ contents: [{
37
+ id: data.sku,
38
+ quantity: data.quantity,
39
+ item_price: data.price,
40
+ }],
41
+ contentName: data.productName,
42
+ contentType: 'product',
43
+ numItems: data.quantity,
44
+ },
45
+ };
46
+ await env.META_CAPI_QUEUE.send(message);
47
+ console.log(`[Meta CAPI] Queued AddToCart event: ${message.eventId}`);
48
+ }
49
+ /**
50
+ * Queue an InitiateCheckout event
51
+ */
52
+ export async function enqueueInitiateCheckoutEvent(env, data) {
53
+ if (!env.META_CAPI_QUEUE) {
54
+ console.warn('[Meta CAPI] Queue not configured, skipping InitiateCheckout event');
55
+ return;
56
+ }
57
+ if (!data.pixelId) {
58
+ console.log('[Meta CAPI] No pixel ID, skipping InitiateCheckout event');
59
+ return;
60
+ }
61
+ const message = {
62
+ pixelId: data.pixelId,
63
+ eventName: 'InitiateCheckout',
64
+ eventId: generateEventId('cart', data.cartId, 'checkout'),
65
+ eventTime: Math.floor(Date.now() / 1000),
66
+ eventSourceUrl: `${data.brandSiteUrl}/checkout`,
67
+ userData: {
68
+ email: data.customerEmail || undefined,
69
+ phone: data.customerPhone || undefined,
70
+ clientIpAddress: data.clientIpAddress,
71
+ clientUserAgent: data.clientUserAgent,
72
+ fbc: data.fbc,
73
+ fbp: data.fbp,
74
+ },
75
+ customData: {
76
+ value: data.cartTotal,
77
+ currency: 'NGN',
78
+ numItems: data.itemCount,
79
+ },
80
+ };
81
+ await env.META_CAPI_QUEUE.send(message);
82
+ console.log(`[Meta CAPI] Queued InitiateCheckout event: ${message.eventId}`);
83
+ }
84
+ /**
85
+ * Queue a Purchase event from an order
86
+ *
87
+ * For orders with multiple products, uses the brand's homepage
88
+ * since there's no single product page to reference.
89
+ */
90
+ export async function enqueuePurchaseEvent(env, order, options) {
91
+ if (!env.META_CAPI_QUEUE) {
92
+ console.warn('[Meta CAPI] Queue not configured, skipping Purchase event');
93
+ return;
94
+ }
95
+ const pixelId = order.brand.metaPixelId;
96
+ if (!pixelId) {
97
+ console.log('[Meta CAPI] No pixel ID for brand, skipping Purchase event');
98
+ return;
99
+ }
100
+ const message = {
101
+ pixelId,
102
+ eventName: 'Purchase',
103
+ eventId: generateEventId('order', order.id),
104
+ eventTime: Math.floor(Date.now() / 1000),
105
+ // Use brand homepage for multi-product orders
106
+ eventSourceUrl: order.brand.siteUrl,
107
+ userData: {
108
+ email: order.email || undefined,
109
+ phone: order.phone,
110
+ firstName: order.firstName,
111
+ lastName: order.lastName,
112
+ city: order.city,
113
+ state: order.deliveryZone.state.name,
114
+ country: 'ng', // Nigeria
115
+ clientIpAddress: options?.clientIpAddress,
116
+ clientUserAgent: options?.clientUserAgent,
117
+ fbc: options?.fbc,
118
+ fbp: options?.fbp,
119
+ },
120
+ customData: {
121
+ value: Number(order.totalPrice),
122
+ currency: 'NGN',
123
+ contents: order.items.map((item) => ({
124
+ id: item.variant.sku,
125
+ quantity: item.quantity,
126
+ item_price: Number(item.priceAtPurchase),
127
+ })),
128
+ contentType: 'product',
129
+ numItems: order.items.reduce((sum, item) => sum + item.quantity, 0),
130
+ },
131
+ };
132
+ await env.META_CAPI_QUEUE.send(message);
133
+ console.log(`[Meta CAPI] Queued Purchase event: ${message.eventId}`);
134
+ }
135
+ /**
136
+ * Queue a ConfirmedPurchase event when order is delivered & paid
137
+ *
138
+ * This event tracks successful order completion (delivered + paid),
139
+ * which is a higher value conversion signal than initial purchase.
140
+ */
141
+ export async function enqueueConfirmedPurchaseEvent(env, order) {
142
+ if (!env.META_CAPI_QUEUE) {
143
+ console.warn('[Meta CAPI] Queue not configured, skipping ConfirmedPurchase event');
144
+ return;
145
+ }
146
+ const pixelId = order.brand.metaPixelId;
147
+ if (!pixelId) {
148
+ console.log('[Meta CAPI] No pixel ID for brand, skipping ConfirmedPurchase event');
149
+ return;
150
+ }
151
+ const message = {
152
+ pixelId,
153
+ eventName: 'ConfirmedPurchase',
154
+ eventId: generateEventId('order', order.id, 'confirmed'),
155
+ eventTime: Math.floor(Date.now() / 1000),
156
+ eventSourceUrl: order.brand.siteUrl,
157
+ userData: {
158
+ email: order.email || undefined,
159
+ phone: order.phone,
160
+ firstName: order.firstName,
161
+ lastName: order.lastName,
162
+ city: order.city,
163
+ state: order.deliveryZone.state.name,
164
+ country: 'ng', // Nigeria
165
+ },
166
+ customData: {
167
+ value: Number(order.totalPrice),
168
+ currency: 'NGN',
169
+ contents: order.items.map((item) => ({
170
+ id: item.variant.sku,
171
+ quantity: item.quantity,
172
+ item_price: Number(item.priceAtPurchase),
173
+ })),
174
+ contentType: 'product',
175
+ numItems: order.items.reduce((sum, item) => sum + item.quantity, 0),
176
+ },
177
+ };
178
+ await env.META_CAPI_QUEUE.send(message);
179
+ console.log(`[Meta CAPI] Queued ConfirmedPurchase event: ${message.eventId}`);
180
+ }
@@ -0,0 +1,9 @@
1
+ import type { Env } from '../../types';
2
+ export type OrderNotificationType = 'order_confirmation' | 'order_shipped' | 'order_delivered' | 'order_cancelled';
3
+ export type MessageType = {
4
+ messageType: 'order_notification';
5
+ type: OrderNotificationType;
6
+ orderId: string;
7
+ timestamp: string;
8
+ };
9
+ export declare function enqueueOrderNotification(env: Env, type: OrderNotificationType, orderId: string): Promise<void>;
@@ -0,0 +1,18 @@
1
+ export async function enqueueOrderNotification(env, type, orderId) {
2
+ if (env.WHATSAPP_QUEUE) {
3
+ await env.WHATSAPP_QUEUE.send({
4
+ messageType: 'order_notification',
5
+ type,
6
+ orderId,
7
+ timestamp: new Date().toISOString(),
8
+ });
9
+ }
10
+ if (env.EMAIL_QUEUE) {
11
+ await env.EMAIL_QUEUE.send({
12
+ messageType: 'order_notification',
13
+ type,
14
+ orderId,
15
+ timestamp: new Date().toISOString(),
16
+ });
17
+ }
18
+ }
@@ -0,0 +1,10 @@
1
+ import type { Env } from '../../types';
2
+ export type ProspectRecoveryNotificationType = 'prospect_recovery_reminder' | 'prospect_recovery' | 'prospect_recovery_final';
3
+ export type MessageType = {
4
+ messageType: 'prospect_recovery';
5
+ type: ProspectRecoveryNotificationType;
6
+ orderId: string;
7
+ attemptNumber: number;
8
+ timestamp: string;
9
+ };
10
+ export declare function enqueueProspectRecoveryNotification(env: Env, type: ProspectRecoveryNotificationType, orderId: string, attemptNumber: number): Promise<void>;
@@ -0,0 +1,11 @@
1
+ export async function enqueueProspectRecoveryNotification(env, type, orderId, attemptNumber) {
2
+ if (env.EMAIL_QUEUE) {
3
+ await env.EMAIL_QUEUE.send({
4
+ messageType: 'prospect_recovery',
5
+ type,
6
+ orderId,
7
+ attemptNumber,
8
+ timestamp: new Date().toISOString(),
9
+ });
10
+ }
11
+ }