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