@axova/shared 1.0.0

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 (112) hide show
  1. package/CONFIGURATION_GUIDE.md +1 -0
  2. package/README.md +384 -0
  3. package/SCHEMA_ORGANIZATION.md +209 -0
  4. package/dist/configs/index.d.ts +85 -0
  5. package/dist/configs/index.js +555 -0
  6. package/dist/events/kafka.d.ts +40 -0
  7. package/dist/events/kafka.js +311 -0
  8. package/dist/index.d.ts +13 -0
  9. package/dist/index.js +41 -0
  10. package/dist/interfaces/customer-events.d.ts +85 -0
  11. package/dist/interfaces/customer-events.js +2 -0
  12. package/dist/interfaces/inventory-events.d.ts +453 -0
  13. package/dist/interfaces/inventory-events.js +3 -0
  14. package/dist/interfaces/inventory-types.d.ts +894 -0
  15. package/dist/interfaces/inventory-types.js +3 -0
  16. package/dist/interfaces/order-events.d.ts +320 -0
  17. package/dist/interfaces/order-events.js +3 -0
  18. package/dist/lib/auditLogger.d.ts +162 -0
  19. package/dist/lib/auditLogger.js +626 -0
  20. package/dist/lib/authOrganization.d.ts +24 -0
  21. package/dist/lib/authOrganization.js +110 -0
  22. package/dist/lib/db.d.ts +6 -0
  23. package/dist/lib/db.js +88 -0
  24. package/dist/middleware/serviceAuth.d.ts +60 -0
  25. package/dist/middleware/serviceAuth.js +272 -0
  26. package/dist/middleware/storeOwnership.d.ts +15 -0
  27. package/dist/middleware/storeOwnership.js +156 -0
  28. package/dist/middleware/storeValidationMiddleware.d.ts +44 -0
  29. package/dist/middleware/storeValidationMiddleware.js +180 -0
  30. package/dist/middleware/userAuth.d.ts +27 -0
  31. package/dist/middleware/userAuth.js +218 -0
  32. package/dist/schemas/admin/admin-schema.d.ts +741 -0
  33. package/dist/schemas/admin/admin-schema.js +111 -0
  34. package/dist/schemas/ai-moderation/ai-moderation-schema.d.ts +648 -0
  35. package/dist/schemas/ai-moderation/ai-moderation-schema.js +88 -0
  36. package/dist/schemas/common/common-schemas.d.ts +436 -0
  37. package/dist/schemas/common/common-schemas.js +94 -0
  38. package/dist/schemas/compliance/compliance-schema.d.ts +3388 -0
  39. package/dist/schemas/compliance/compliance-schema.js +472 -0
  40. package/dist/schemas/compliance/kyc-schema.d.ts +2642 -0
  41. package/dist/schemas/compliance/kyc-schema.js +361 -0
  42. package/dist/schemas/customer/customer-schema.d.ts +2727 -0
  43. package/dist/schemas/customer/customer-schema.js +399 -0
  44. package/dist/schemas/index.d.ts +27 -0
  45. package/dist/schemas/index.js +138 -0
  46. package/dist/schemas/inventory/inventory-tables.d.ts +9476 -0
  47. package/dist/schemas/inventory/inventory-tables.js +1470 -0
  48. package/dist/schemas/inventory/lot-tables.d.ts +3281 -0
  49. package/dist/schemas/inventory/lot-tables.js +608 -0
  50. package/dist/schemas/order/order-schema.d.ts +5825 -0
  51. package/dist/schemas/order/order-schema.js +954 -0
  52. package/dist/schemas/product/discount-relations.d.ts +15 -0
  53. package/dist/schemas/product/discount-relations.js +34 -0
  54. package/dist/schemas/product/discount-schema.d.ts +1975 -0
  55. package/dist/schemas/product/discount-schema.js +297 -0
  56. package/dist/schemas/product/product-relations.d.ts +41 -0
  57. package/dist/schemas/product/product-relations.js +133 -0
  58. package/dist/schemas/product/product-schema.d.ts +4544 -0
  59. package/dist/schemas/product/product-schema.js +671 -0
  60. package/dist/schemas/store/store-audit-schema.d.ts +4135 -0
  61. package/dist/schemas/store/store-audit-schema.js +556 -0
  62. package/dist/schemas/store/store-schema.d.ts +3100 -0
  63. package/dist/schemas/store/store-schema.js +381 -0
  64. package/dist/schemas/store/store-settings-schema.d.ts +665 -0
  65. package/dist/schemas/store/store-settings-schema.js +141 -0
  66. package/dist/schemas/types.d.ts +50 -0
  67. package/dist/schemas/types.js +3 -0
  68. package/dist/types/events.d.ts +2396 -0
  69. package/dist/types/events.js +505 -0
  70. package/dist/utils/errorHandler.d.ts +12 -0
  71. package/dist/utils/errorHandler.js +36 -0
  72. package/dist/utils/subdomain.d.ts +6 -0
  73. package/dist/utils/subdomain.js +20 -0
  74. package/nul +8 -0
  75. package/package.json +43 -0
  76. package/src/configs/index.ts +654 -0
  77. package/src/events/kafka.ts +429 -0
  78. package/src/index.ts +26 -0
  79. package/src/interfaces/customer-events.ts +106 -0
  80. package/src/interfaces/inventory-events.ts +545 -0
  81. package/src/interfaces/inventory-types.ts +1004 -0
  82. package/src/interfaces/order-events.ts +381 -0
  83. package/src/lib/auditLogger.ts +1117 -0
  84. package/src/lib/authOrganization.ts +153 -0
  85. package/src/lib/db.ts +64 -0
  86. package/src/middleware/serviceAuth.ts +328 -0
  87. package/src/middleware/storeOwnership.ts +199 -0
  88. package/src/middleware/storeValidationMiddleware.ts +247 -0
  89. package/src/middleware/userAuth.ts +248 -0
  90. package/src/schemas/admin/admin-schema.ts +208 -0
  91. package/src/schemas/ai-moderation/ai-moderation-schema.ts +180 -0
  92. package/src/schemas/common/common-schemas.ts +108 -0
  93. package/src/schemas/compliance/compliance-schema.ts +927 -0
  94. package/src/schemas/compliance/kyc-schema.ts +649 -0
  95. package/src/schemas/customer/customer-schema.ts +576 -0
  96. package/src/schemas/index.ts +189 -0
  97. package/src/schemas/inventory/inventory-tables.ts +1927 -0
  98. package/src/schemas/inventory/lot-tables.ts +799 -0
  99. package/src/schemas/order/order-schema.ts +1400 -0
  100. package/src/schemas/product/discount-relations.ts +44 -0
  101. package/src/schemas/product/discount-schema.ts +464 -0
  102. package/src/schemas/product/product-relations.ts +187 -0
  103. package/src/schemas/product/product-schema.ts +955 -0
  104. package/src/schemas/store/ethiopian_business_api.md.resolved +212 -0
  105. package/src/schemas/store/store-audit-schema.ts +1257 -0
  106. package/src/schemas/store/store-schema.ts +661 -0
  107. package/src/schemas/store/store-settings-schema.ts +231 -0
  108. package/src/schemas/types.ts +67 -0
  109. package/src/types/events.ts +646 -0
  110. package/src/utils/errorHandler.ts +44 -0
  111. package/src/utils/subdomain.ts +19 -0
  112. package/tsconfig.json +21 -0
@@ -0,0 +1,381 @@
1
+ // Order Service Event Interfaces
2
+
3
+ // Service Configuration
4
+ export interface OrderServiceConfig {
5
+ serviceName: string;
6
+ version: string;
7
+ kafkaTopics: {
8
+ orderCreated: string;
9
+ orderUpdated: string;
10
+ orderStatusChanged: string;
11
+ orderPaymentProcessed: string;
12
+ orderShipped: string;
13
+ orderDelivered: string;
14
+ orderCancelled: string;
15
+ orderRefunded: string;
16
+ orderNoteAdded: string;
17
+ orderItemAdded: string;
18
+ orderItemRemoved: string;
19
+ orderDiscountApplied: string;
20
+ };
21
+ features: {
22
+ multiOrderTypes: boolean;
23
+ advancedPayments: boolean;
24
+ realTimeTracking: boolean;
25
+ inventoryIntegration: boolean;
26
+ advancedDiscounts: boolean;
27
+ fraudDetection: boolean;
28
+ subscriptionSupport: boolean;
29
+ marketplaceIntegration: boolean;
30
+ };
31
+ limits: {
32
+ maxOrderValue: number;
33
+ maxItemsPerOrder: number;
34
+ maxAddressesPerOrder: number;
35
+ maxNotesPerOrder: number;
36
+ orderRetentionDays: number;
37
+ };
38
+ }
39
+
40
+ // Order Event Payloads
41
+ export interface OrderCreatedEvent {
42
+ orderId: string;
43
+ orderNumber: string;
44
+ storeId: string;
45
+ customerId?: string;
46
+ userId?: string;
47
+ orderType: string;
48
+ orderSource: string;
49
+ status: string;
50
+ totalAmount: string;
51
+ currency: string;
52
+ itemCount: number;
53
+ isGuestOrder: boolean;
54
+ paymentMethod?: string;
55
+ shippingRequired: boolean;
56
+ priority: string;
57
+ }
58
+
59
+ export interface OrderUpdatedEvent {
60
+ orderId: string;
61
+ orderNumber: string;
62
+ storeId: string;
63
+ customerId?: string;
64
+ changes: Record<string, unknown>;
65
+ previousValues: Record<string, unknown>;
66
+ statusChanged: boolean;
67
+ paymentStatusChanged: boolean;
68
+ fulfillmentStatusChanged: boolean;
69
+ amountChanged: boolean;
70
+ }
71
+
72
+ export interface OrderStatusChangedEvent {
73
+ orderId: string;
74
+ orderNumber: string;
75
+ storeId: string;
76
+ customerId?: string;
77
+ fromStatus: string;
78
+ toStatus: string;
79
+ reason?: string;
80
+ actorId: string;
81
+ actorType: string;
82
+ timestamp: string;
83
+ }
84
+
85
+ export interface OrderPaymentProcessedEvent {
86
+ orderId: string;
87
+ paymentId: string;
88
+ transactionId?: string;
89
+ paymentMethod: string;
90
+ paymentProvider?: string;
91
+ amount: string;
92
+ currency: string;
93
+ status: string;
94
+ isSuccessful: boolean;
95
+ failureReason?: string;
96
+ }
97
+
98
+ export interface OrderShippedEvent {
99
+ orderId: string;
100
+ fulfillmentId: string;
101
+ trackingNumber?: string;
102
+ trackingUrl?: string;
103
+ shippingCarrier?: string;
104
+ shippingService?: string;
105
+ estimatedDeliveryDate?: string;
106
+ packedBy?: string;
107
+ shippedBy?: string;
108
+ }
109
+
110
+ export interface OrderDeliveredEvent {
111
+ orderId: string;
112
+ fulfillmentId: string;
113
+ deliveredAt: string;
114
+ deliveredBy?: string;
115
+ signedBy?: string;
116
+ deliveryLocation?: string;
117
+ proofOfDelivery?: Record<string, unknown>;
118
+ }
119
+
120
+ export interface OrderCancelledEvent {
121
+ orderId: string;
122
+ orderNumber: string;
123
+ storeId: string;
124
+ customerId?: string;
125
+ cancellationReason: string;
126
+ cancelledBy: string;
127
+ cancelledByType: string;
128
+ refundRequired: boolean;
129
+ refundAmount?: string;
130
+ inventoryReleased: boolean;
131
+ }
132
+
133
+ export interface OrderRefundedEvent {
134
+ orderId: string;
135
+ paymentId: string;
136
+ refundId: string;
137
+ refundAmount: string;
138
+ refundReason: string;
139
+ refundMethod: string;
140
+ isPartialRefund: boolean;
141
+ processedBy: string;
142
+ customerNotified: boolean;
143
+ }
144
+
145
+ export interface OrderNoteAddedEvent {
146
+ orderId: string;
147
+ noteId: string;
148
+ noteType: string;
149
+ content: string;
150
+ isCustomerVisible: boolean;
151
+ priority: string;
152
+ createdBy: string;
153
+ createdByName: string;
154
+ requiresFollowUp: boolean;
155
+ }
156
+
157
+ export interface OrderItemAddedEvent {
158
+ orderId: string;
159
+ itemId: string;
160
+ productId: string;
161
+ variantId?: string;
162
+ sku: string;
163
+ productTitle: string;
164
+ quantity: number;
165
+ unitPrice: string;
166
+ totalPrice: string;
167
+ addedBy: string;
168
+ }
169
+
170
+ export interface OrderItemRemovedEvent {
171
+ orderId: string;
172
+ itemId: string;
173
+ productId: string;
174
+ sku: string;
175
+ productTitle: string;
176
+ quantity: number;
177
+ removedBy: string;
178
+ removalReason?: string;
179
+ }
180
+
181
+ export interface OrderDiscountAppliedEvent {
182
+ orderId: string;
183
+ discountId: string;
184
+ discountCode?: string;
185
+ discountType: string;
186
+ discountAmount: string;
187
+ discountPercentage?: number;
188
+ appliedBy?: string;
189
+ campaignId?: string;
190
+ }
191
+
192
+ // Service Event Types
193
+ export type OrderServiceEvent =
194
+ | OrderCreatedEvent
195
+ | OrderUpdatedEvent
196
+ | OrderStatusChangedEvent
197
+ | OrderPaymentProcessedEvent
198
+ | OrderShippedEvent
199
+ | OrderDeliveredEvent
200
+ | OrderCancelledEvent
201
+ | OrderRefundedEvent
202
+ | OrderNoteAddedEvent
203
+ | OrderItemAddedEvent
204
+ | OrderItemRemovedEvent
205
+ | OrderDiscountAppliedEvent;
206
+
207
+ // Event Handler Types
208
+ export interface OrderEventHandler<T = OrderServiceEvent> {
209
+ handle(event: T): Promise<void>;
210
+ canHandle(eventType: string): boolean;
211
+ priority: number;
212
+ }
213
+
214
+ export interface OrderEventEmitter {
215
+ emit(eventType: string, data: OrderServiceEvent): Promise<void>;
216
+ on(eventType: string, handler: OrderEventHandler): void;
217
+ off(eventType: string, handler: OrderEventHandler): void;
218
+ removeAllListeners(): void;
219
+ }
220
+
221
+ // Business Logic Interfaces
222
+ export interface OrderCalculation {
223
+ subtotal: string;
224
+ taxAmount: string;
225
+ shippingAmount: string;
226
+ discountAmount: string;
227
+ totalAmount: string;
228
+ currency: string;
229
+ }
230
+
231
+ export interface OrderValidation {
232
+ isValid: boolean;
233
+ errors: string[];
234
+ warnings: string[];
235
+ }
236
+
237
+ export interface OrderInventoryCheck {
238
+ isAvailable: boolean;
239
+ unavailableItems: Array<{
240
+ productId: string;
241
+ variantId?: string;
242
+ requestedQuantity: number;
243
+ availableQuantity: number;
244
+ reason: string;
245
+ }>;
246
+ }
247
+
248
+ export interface OrderFraudCheck {
249
+ riskScore: number;
250
+ riskLevel: "LOW" | "MEDIUM" | "HIGH" | "CRITICAL";
251
+ fraudIndicators: string[];
252
+ recommendation: "APPROVE" | "REVIEW" | "DECLINE";
253
+ requiresManualReview: boolean;
254
+ }
255
+
256
+ export interface OrderShippingCalculation {
257
+ rates: Array<{
258
+ carrier: string;
259
+ service: string;
260
+ cost: string;
261
+ estimatedDays: number;
262
+ estimatedDeliveryDate: string;
263
+ }>;
264
+ recommendedRate?: {
265
+ carrier: string;
266
+ service: string;
267
+ cost: string;
268
+ };
269
+ }
270
+
271
+ // Advanced Features
272
+ export interface OrderSplitRequest {
273
+ originalOrderId: string;
274
+ splitReason: string;
275
+ splits: Array<{
276
+ items: Array<{
277
+ orderItemId: string;
278
+ quantity: number;
279
+ }>;
280
+ shippingAddress?: Record<string, unknown>;
281
+ fulfillmentType?: string;
282
+ priority?: string;
283
+ }>;
284
+ }
285
+
286
+ export interface OrderMergeRequest {
287
+ orderIds: string[];
288
+ mergeReason: string;
289
+ newShippingAddress?: Record<string, unknown>;
290
+ newPaymentMethod?: string;
291
+ }
292
+
293
+ export interface OrderModificationRequest {
294
+ orderId: string;
295
+ modificationType:
296
+ | "ADD_ITEM"
297
+ | "REMOVE_ITEM"
298
+ | "UPDATE_QUANTITY"
299
+ | "CHANGE_ADDRESS"
300
+ | "CHANGE_PAYMENT";
301
+ modifications: Record<string, unknown>;
302
+ reason: string;
303
+ requestedBy: string;
304
+ }
305
+
306
+ export interface OrderEscalationRequest {
307
+ orderId: string;
308
+ escalationType:
309
+ | "PAYMENT_ISSUE"
310
+ | "SHIPPING_DELAY"
311
+ | "QUALITY_ISSUE"
312
+ | "CUSTOMER_COMPLAINT"
313
+ | "FRAUD_ALERT";
314
+ priority: "LOW" | "MEDIUM" | "HIGH" | "URGENT";
315
+ description: string;
316
+ assignedTo?: string;
317
+ department?: string;
318
+ }
319
+
320
+ // Reporting and Analytics
321
+ export interface OrderMetrics {
322
+ totalOrders: number;
323
+ totalRevenue: string;
324
+ averageOrderValue: string;
325
+ ordersByStatus: Record<string, number>;
326
+ ordersByType: Record<string, number>;
327
+ ordersBySource: Record<string, number>;
328
+ conversionRate: number;
329
+ cancelationRate: number;
330
+ refundRate: number;
331
+ averageProcessingTime: number;
332
+ customerSatisfactionScore?: number;
333
+ }
334
+
335
+ export interface OrderReportFilter {
336
+ dateRange?: {
337
+ start: string;
338
+ end: string;
339
+ };
340
+ storeIds?: string[];
341
+ orderTypes?: string[];
342
+ orderSources?: string[];
343
+ customerTypes?: string[];
344
+ paymentMethods?: string[];
345
+ statuses?: string[];
346
+ minAmount?: number;
347
+ maxAmount?: number;
348
+ includeTestOrders?: boolean;
349
+ }
350
+
351
+ // Integration Interfaces
352
+ export interface MarketplaceOrderSync {
353
+ marketplacePlatform: string;
354
+ externalOrderId: string;
355
+ syncStatus: "PENDING" | "SUCCESS" | "FAILED";
356
+ lastSyncAt?: string;
357
+ syncErrors?: string[];
358
+ marketplaceData?: Record<string, unknown>;
359
+ }
360
+
361
+ export interface InventoryReservation {
362
+ orderId: string;
363
+ reservations: Array<{
364
+ productId: string;
365
+ variantId?: string;
366
+ quantity: number;
367
+ locationId: string;
368
+ reservedAt: string;
369
+ expiresAt: string;
370
+ }>;
371
+ }
372
+
373
+ export interface PaymentIntentRequest {
374
+ orderId: string;
375
+ amount: string;
376
+ currency: string;
377
+ paymentMethod: string;
378
+ customerInfo: Record<string, unknown>;
379
+ billingAddress: Record<string, unknown>;
380
+ metadata?: Record<string, unknown>;
381
+ }