@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,545 @@
1
+ // Inventory service events and configuration interfaces
2
+
3
+ // =====================================================
4
+ // EVENT SYSTEM INTERFACES
5
+ // =====================================================
6
+
7
+ export interface ServiceEvents {
8
+ // Inventory events
9
+ "inventory.item.created": {
10
+ inventoryItemId: string;
11
+ sku: string;
12
+ locationId: string;
13
+ initialQuantity: number;
14
+ };
15
+
16
+ "inventory.item.updated": {
17
+ inventoryItemId: string;
18
+ sku: string;
19
+ changes: Record<string, unknown>;
20
+ };
21
+
22
+ "inventory.quantity.changed": {
23
+ inventoryItemId: string;
24
+ sku: string;
25
+ locationId: string;
26
+ previousQuantity: number;
27
+ newQuantity: number;
28
+ changeType: string;
29
+ reason: string;
30
+ };
31
+
32
+ "inventory.low_stock.detected": {
33
+ inventoryItemId: string;
34
+ sku: string;
35
+ locationId: string;
36
+ currentQuantity: number;
37
+ reorderPoint: number;
38
+ severity: "low" | "medium" | "high" | "critical";
39
+ };
40
+
41
+ "inventory.out_of_stock.detected": {
42
+ inventoryItemId: string;
43
+ sku: string;
44
+ locationId: string;
45
+ lastAvailableDate: Date;
46
+ };
47
+
48
+ // Transfer events
49
+ "transfer.created": {
50
+ transferId: string;
51
+ transferNumber: string;
52
+ sourceLocationId: string;
53
+ destinationLocationId: string;
54
+ totalItems: number;
55
+ priority: string;
56
+ };
57
+
58
+ "transfer.status.changed": {
59
+ transferId: string;
60
+ transferNumber: string;
61
+ fromStatus: string;
62
+ toStatus: string;
63
+ changedBy: string;
64
+ };
65
+
66
+ "transfer.completed": {
67
+ transferId: string;
68
+ transferNumber: string;
69
+ sourceLocationId: string;
70
+ destinationLocationId: string;
71
+ totalItems: number;
72
+ totalValue: number;
73
+ hasDiscrepancies: boolean;
74
+ };
75
+
76
+ // Cycle count events
77
+ "cycle_count.created": {
78
+ cycleCountId: string;
79
+ countNumber: string;
80
+ countType: string;
81
+ scheduledDate: Date;
82
+ totalItems: number;
83
+ };
84
+
85
+ "cycle_count.completed": {
86
+ cycleCountId: string;
87
+ countNumber: string;
88
+ totalItemsCounted: number;
89
+ accuracyPercentage: number;
90
+ discrepanciesFound: number;
91
+ };
92
+
93
+ "cycle_count.discrepancy.detected": {
94
+ cycleCountId: string;
95
+ cycleCountItemId: string;
96
+ sku: string;
97
+ systemQuantity: number;
98
+ countedQuantity: number;
99
+ variance: number;
100
+ severity: string;
101
+ };
102
+
103
+ // Batch tracking events
104
+ "batch.created": {
105
+ batchId: string;
106
+ batchNumber: string;
107
+ sku: string;
108
+ initialQuantity: number;
109
+ expiryDate?: Date;
110
+ };
111
+
112
+ "batch.expiry.warning": {
113
+ batchId: string;
114
+ batchNumber: string;
115
+ sku: string;
116
+ expiryDate: Date;
117
+ daysUntilExpiry: number;
118
+ currentQuantity: number;
119
+ };
120
+
121
+ "batch.expired": {
122
+ batchId: string;
123
+ batchNumber: string;
124
+ sku: string;
125
+ expiryDate: Date;
126
+ currentQuantity: number;
127
+ estimatedLoss: number;
128
+ };
129
+
130
+ // Automation events
131
+ "automation.rule.triggered": {
132
+ ruleId: string;
133
+ ruleName: string;
134
+ triggerCondition: string;
135
+ affectedItems: string[];
136
+ };
137
+
138
+ "automation.rule.executed": {
139
+ ruleId: string;
140
+ ruleName: string;
141
+ executionId: string;
142
+ status: "success" | "failure" | "partial";
143
+ itemsProcessed: number;
144
+ duration: number;
145
+ };
146
+
147
+ "automation.recommendation.generated": {
148
+ recommendationType: string;
149
+ confidence: number;
150
+ affectedItems: string[];
151
+ estimatedImpact: number;
152
+ };
153
+
154
+ // Warehouse events
155
+ "warehouse.capacity.warning": {
156
+ warehouseId: string;
157
+ warehouseName: string;
158
+ currentCapacity: number;
159
+ maxCapacity: number;
160
+ utilizationPercentage: number;
161
+ };
162
+
163
+ "warehouse.zone.full": {
164
+ warehouseId: string;
165
+ zoneId: string;
166
+ zoneName: string;
167
+ utilizationPercentage: number;
168
+ };
169
+
170
+ // Alert events
171
+ "alert.created": {
172
+ alertId: string;
173
+ alertType: string;
174
+ severity: string;
175
+ message: string;
176
+ affectedItems: string[];
177
+ };
178
+
179
+ "alert.resolved": {
180
+ alertId: string;
181
+ alertType: string;
182
+ resolvedBy: string;
183
+ resolutionNotes?: string;
184
+ };
185
+
186
+ // Audit events
187
+ "audit.log.created": {
188
+ auditLogId: string;
189
+ eventType: string;
190
+ inventoryItemId: string;
191
+ quantityChange: number;
192
+ userId: string;
193
+ };
194
+
195
+ "audit.export.requested": {
196
+ exportId: string;
197
+ exportType: string;
198
+ requestedBy: string;
199
+ dateRange: {
200
+ startDate: Date;
201
+ endDate: Date;
202
+ };
203
+ };
204
+
205
+ "audit.export.completed": {
206
+ exportId: string;
207
+ exportType: string;
208
+ recordCount: number;
209
+ fileSize: number;
210
+ downloadUrl: string;
211
+ };
212
+ }
213
+
214
+ // =====================================================
215
+ // SERVICE CONFIGURATION
216
+ // =====================================================
217
+
218
+ export interface ServiceConfig {
219
+ // Database configuration
220
+ database: {
221
+ host: string;
222
+ port: number;
223
+ name: string;
224
+ user: string;
225
+ password: string;
226
+ ssl: boolean;
227
+ poolSize: number;
228
+ connectionTimeout: number;
229
+ idleTimeout: number;
230
+ };
231
+
232
+ // Redis configuration
233
+ redis: {
234
+ host: string;
235
+ port: number;
236
+ password?: string;
237
+ db: number;
238
+ keyPrefix: string;
239
+ ttl: {
240
+ default: number;
241
+ short: number;
242
+ long: number;
243
+ };
244
+ };
245
+
246
+ // Kafka configuration
247
+ kafka: {
248
+ brokers: string[];
249
+ clientId: string;
250
+ groupId: string;
251
+ topics: {
252
+ inventory: string;
253
+ transfers: string;
254
+ cycleCounts: string;
255
+ batches: string;
256
+ automation: string;
257
+ alerts: string;
258
+ audit: string;
259
+ };
260
+ retryConfig: {
261
+ retries: number;
262
+ retryDelay: number;
263
+ maxRetryDelay: number;
264
+ };
265
+ };
266
+
267
+ // Service configuration
268
+ service: {
269
+ port: number;
270
+ host: string;
271
+ name: string;
272
+ version: string;
273
+ environment: "development" | "staging" | "production";
274
+ logLevel: "debug" | "info" | "warn" | "error";
275
+ corsOrigins: string[];
276
+ rateLimiting: {
277
+ windowMs: number;
278
+ maxRequests: number;
279
+ skipSuccessfulRequests: boolean;
280
+ };
281
+ };
282
+
283
+ // Feature flags
284
+ features: {
285
+ batchTracking: boolean;
286
+ serialNumberTracking: boolean;
287
+ aiRecommendations: boolean;
288
+ automation: boolean;
289
+ advancedAnalytics: boolean;
290
+ realTimeSync: boolean;
291
+ mobileApp: boolean;
292
+ apiDocumentation: boolean;
293
+ };
294
+
295
+ // Business rules
296
+ businessRules: {
297
+ inventory: {
298
+ allowNegativeStock: boolean;
299
+ autoCreateItems: boolean;
300
+ defaultReorderPoint: number;
301
+ defaultSafetyStock: number;
302
+ lowStockThreshold: number;
303
+ criticalStockThreshold: number;
304
+ };
305
+
306
+ transfers: {
307
+ requireApprovalAboveValue: number;
308
+ requireApprovalForUrgent: boolean;
309
+ autoApproveInternal: boolean;
310
+ maxPartialTransfers: number;
311
+ defaultLeadTime: number;
312
+ };
313
+
314
+ cycleCounts: {
315
+ defaultTolerancePercentage: number;
316
+ requireApprovalForAdjustments: boolean;
317
+ autoReconcileWithinTolerance: boolean;
318
+ maxCountsPerDay: number;
319
+ requiredPhotosForDiscrepancies: boolean;
320
+ };
321
+
322
+ batches: {
323
+ expiryWarningDays: number;
324
+ criticalExpiryDays: number;
325
+ autoQuarantineExpired: boolean;
326
+ requireQualityApproval: boolean;
327
+ fifoEnforcement: boolean;
328
+ };
329
+
330
+ automation: {
331
+ maxRulesPerTenant: number;
332
+ maxExecutionsPerDay: number;
333
+ requireApprovalForHighValue: boolean;
334
+ enableMachineLearning: boolean;
335
+ confidenceThreshold: number;
336
+ };
337
+ };
338
+
339
+ // Integration settings
340
+ integrations: {
341
+ erp: {
342
+ enabled: boolean;
343
+ endpoint: string;
344
+ apiKey: string;
345
+ syncInterval: number;
346
+ timeout: number;
347
+ };
348
+
349
+ pos: {
350
+ enabled: boolean;
351
+ syncInterval: number;
352
+ offlineThreshold: number;
353
+ conflictResolution: "server_wins" | "client_wins" | "manual";
354
+ };
355
+
356
+ ecommerce: {
357
+ enabled: boolean;
358
+ realTimeInventory: boolean;
359
+ reservationTimeout: number;
360
+ stockBuffer: number;
361
+ };
362
+
363
+ wms: {
364
+ enabled: boolean;
365
+ endpoint: string;
366
+ autoReceiveTransfers: boolean;
367
+ binLocationSync: boolean;
368
+ };
369
+
370
+ notifications: {
371
+ email: {
372
+ enabled: boolean;
373
+ smtpHost: string;
374
+ smtpPort: number;
375
+ username: string;
376
+ password: string;
377
+ fromAddress: string;
378
+ };
379
+
380
+ sms: {
381
+ enabled: boolean;
382
+ provider: string;
383
+ apiKey: string;
384
+ fromNumber: string;
385
+ };
386
+
387
+ webhook: {
388
+ enabled: boolean;
389
+ endpoints: Array<{
390
+ url: string;
391
+ events: string[];
392
+ authentication: {
393
+ type: "none" | "api_key" | "bearer_token";
394
+ credentials: Record<string, string>;
395
+ };
396
+ }>;
397
+ };
398
+ };
399
+ };
400
+
401
+ // Security settings
402
+ security: {
403
+ jwt: {
404
+ secret: string;
405
+ expiresIn: string;
406
+ issuer: string;
407
+ audience: string;
408
+ };
409
+
410
+ encryption: {
411
+ algorithm: string;
412
+ keySize: number;
413
+ saltRounds: number;
414
+ };
415
+
416
+ rateLimiting: {
417
+ enabled: boolean;
418
+ windowMs: number;
419
+ maxRequests: number;
420
+ skipSuccessfulRequests: boolean;
421
+ };
422
+
423
+ auditLogging: {
424
+ enabled: boolean;
425
+ logAllRequests: boolean;
426
+ retentionDays: number;
427
+ complianceMode: boolean;
428
+ };
429
+ };
430
+
431
+ // Performance settings
432
+ performance: {
433
+ caching: {
434
+ enabled: boolean;
435
+ defaultTtl: number;
436
+ inventoryTtl: number;
437
+ analyticsTtl: number;
438
+ };
439
+
440
+ pagination: {
441
+ defaultLimit: number;
442
+ maxLimit: number;
443
+ };
444
+
445
+ backgroundJobs: {
446
+ enabled: boolean;
447
+ concurrency: number;
448
+ retryAttempts: number;
449
+ retryDelay: number;
450
+ };
451
+ };
452
+
453
+ // Monitoring and observability
454
+ monitoring: {
455
+ healthChecks: {
456
+ enabled: boolean;
457
+ interval: number;
458
+ timeout: number;
459
+ };
460
+
461
+ metrics: {
462
+ enabled: boolean;
463
+ endpoint: string;
464
+ interval: number;
465
+ };
466
+
467
+ tracing: {
468
+ enabled: boolean;
469
+ serviceName: string;
470
+ endpoint: string;
471
+ sampleRate: number;
472
+ };
473
+
474
+ logging: {
475
+ level: string;
476
+ format: "json" | "text";
477
+ destination: "console" | "file" | "both";
478
+ maxFileSize: string;
479
+ maxFiles: number;
480
+ };
481
+ };
482
+ }
483
+
484
+ // Event payload types
485
+ export type EventPayload<T extends keyof ServiceEvents> = ServiceEvents[T];
486
+
487
+ // Event handler type
488
+ export type EventHandler<T extends keyof ServiceEvents> = (
489
+ payload: EventPayload<T>,
490
+ ) => Promise<void> | void;
491
+
492
+ // Event emitter interface
493
+ export interface EventEmitter {
494
+ emit<T extends keyof ServiceEvents>(
495
+ event: T,
496
+ payload: EventPayload<T>,
497
+ ): Promise<void>;
498
+ on<T extends keyof ServiceEvents>(event: T, handler: EventHandler<T>): void;
499
+ off<T extends keyof ServiceEvents>(event: T, handler: EventHandler<T>): void;
500
+ }
501
+
502
+ // Health check interface
503
+ export interface HealthCheckResult {
504
+ status: "healthy" | "unhealthy" | "degraded";
505
+ timestamp: Date;
506
+ duration: number;
507
+ checks: {
508
+ database: {
509
+ status: "healthy" | "unhealthy";
510
+ latency: number;
511
+ error?: string;
512
+ };
513
+ redis: {
514
+ status: "healthy" | "unhealthy";
515
+ latency: number;
516
+ error?: string;
517
+ };
518
+ kafka: {
519
+ status: "healthy" | "unhealthy";
520
+ latency: number;
521
+ error?: string;
522
+ };
523
+ externalServices: {
524
+ status: "healthy" | "unhealthy" | "degraded";
525
+ services: Array<{
526
+ name: string;
527
+ status: "healthy" | "unhealthy";
528
+ latency: number;
529
+ error?: string;
530
+ }>;
531
+ };
532
+ };
533
+ metadata: {
534
+ version: string;
535
+ uptime: number;
536
+ memory: {
537
+ used: number;
538
+ total: number;
539
+ percentage: number;
540
+ };
541
+ cpu: {
542
+ usage: number;
543
+ };
544
+ };
545
+ }