@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,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.storesRelationsExtended = exports.marketRegionsRelations = exports.storeSettingsRelations = exports.marketRegions = exports.storeSettings = void 0;
4
+ const cuid2_1 = require("@paralleldrive/cuid2");
5
+ const drizzle_orm_1 = require("drizzle-orm");
6
+ const pg_core_1 = require("drizzle-orm/pg-core");
7
+ const store_schema_1 = require("./store-schema");
8
+ exports.storeSettings = (0, pg_core_1.pgTable)("store_settings", {
9
+ id: (0, pg_core_1.text)("id")
10
+ .primaryKey()
11
+ .$defaultFn(() => (0, cuid2_1.createId)()),
12
+ storeId: (0, pg_core_1.text)("store_id")
13
+ .notNull()
14
+ .references(() => store_schema_1.stores.id, { onDelete: "cascade" }),
15
+ storeCountry: (0, pg_core_1.varchar)("store_country", { length: 100 })
16
+ .notNull()
17
+ .default("Ethiopia"),
18
+ storeCurrency: (0, pg_core_1.varchar)("store_currency", { length: 3 })
19
+ .notNull()
20
+ .default("ETB"),
21
+ storeLanguage: (0, pg_core_1.varchar)("store_language", { length: 10 })
22
+ .notNull()
23
+ .default("en"),
24
+ supportedLanguages: (0, pg_core_1.jsonb)("supported_languages")
25
+ .$type()
26
+ .notNull()
27
+ .default(["en"]),
28
+ supportedCurrencies: (0, pg_core_1.jsonb)("supported_currencies")
29
+ .$type()
30
+ .notNull()
31
+ .default(["ETB"]),
32
+ localizationSettings: (0, pg_core_1.jsonb)("localization_settings")
33
+ .$type()
34
+ .default({
35
+ dateFormat: "DD/MM/YYYY",
36
+ timeFormat: "HH:mm",
37
+ numberFormat: "1,234.56",
38
+ firstDayOfWeek: 0,
39
+ weightUnit: "kg",
40
+ dimensionUnit: "cm",
41
+ }),
42
+ generalSettings: (0, pg_core_1.jsonb)("general_settings")
43
+ .$type()
44
+ .default({
45
+ autoApplyTax: true,
46
+ pricesIncludeTax: false,
47
+ enableMultiCurrency: false,
48
+ enableMultiLanguage: false,
49
+ currencyDisplayFormat: "symbol",
50
+ }),
51
+ metadata: (0, pg_core_1.jsonb)("metadata").$type().default({}),
52
+ createdAt: (0, pg_core_1.timestamp)("created_at", { withTimezone: true })
53
+ .defaultNow()
54
+ .notNull(),
55
+ updatedAt: (0, pg_core_1.timestamp)("updated_at", { withTimezone: true })
56
+ .defaultNow()
57
+ .notNull(),
58
+ }, (table) => ({
59
+ storeIdIndex: (0, pg_core_1.index)("idx_store_settings_store_id").on(table.storeId),
60
+ storeIdUnique: (0, pg_core_1.unique)("idx_store_settings_store_unique").on(table.storeId),
61
+ countryIndex: (0, pg_core_1.index)("idx_store_settings_country").on(table.storeCountry),
62
+ }));
63
+ exports.marketRegions = (0, pg_core_1.pgTable)("market_regions", {
64
+ id: (0, pg_core_1.text)("id")
65
+ .primaryKey()
66
+ .$defaultFn(() => (0, cuid2_1.createId)()),
67
+ storeId: (0, pg_core_1.text)("store_id")
68
+ .notNull()
69
+ .references(() => store_schema_1.stores.id, { onDelete: "cascade" }),
70
+ regionName: (0, pg_core_1.varchar)("region_name", { length: 100 }).notNull(),
71
+ regionCode: (0, pg_core_1.varchar)("region_code", { length: 10 }).notNull(),
72
+ country: (0, pg_core_1.varchar)("country", { length: 100 }).notNull().default("Ethiopia"),
73
+ countryCode: (0, pg_core_1.varchar)("country_code", { length: 2 })
74
+ .notNull()
75
+ .default("ET"),
76
+ currency: (0, pg_core_1.varchar)("currency", { length: 3 }).notNull().default("ETB"),
77
+ language: (0, pg_core_1.varchar)("language", { length: 10 }).notNull().default("en"),
78
+ taxEnabled: (0, pg_core_1.boolean)("tax_enabled").notNull().default(true),
79
+ taxPercentage: (0, pg_core_1.decimal)("tax_percentage", { precision: 5, scale: 2 })
80
+ .notNull()
81
+ .default("15.00"),
82
+ taxName: (0, pg_core_1.varchar)("tax_name", { length: 50 }).default("VAT"),
83
+ taxConfiguration: (0, pg_core_1.jsonb)("tax_configuration")
84
+ .$type()
85
+ .default({
86
+ taxType: "VAT",
87
+ includeTaxInPrice: false,
88
+ compoundTax: false,
89
+ exemptCategories: [],
90
+ reducedRates: [],
91
+ }),
92
+ isDefault: (0, pg_core_1.boolean)("is_default").notNull().default(false),
93
+ isActive: (0, pg_core_1.boolean)("is_active").notNull().default(true),
94
+ shippingSettings: (0, pg_core_1.jsonb)("shipping_settings")
95
+ .$type()
96
+ .default({
97
+ enableShipping: true,
98
+ freeShippingThreshold: 0,
99
+ defaultShippingRate: 0,
100
+ shippingZones: [],
101
+ }),
102
+ paymentSettings: (0, pg_core_1.jsonb)("payment_settings")
103
+ .$type()
104
+ .default({
105
+ enabledPaymentMethods: ["cash", "card"],
106
+ preferredPaymentMethod: "cash",
107
+ paymentProcessingFee: 0,
108
+ }),
109
+ metadata: (0, pg_core_1.jsonb)("metadata").$type().default({}),
110
+ createdAt: (0, pg_core_1.timestamp)("created_at", { withTimezone: true })
111
+ .defaultNow()
112
+ .notNull(),
113
+ updatedAt: (0, pg_core_1.timestamp)("updated_at", { withTimezone: true })
114
+ .defaultNow()
115
+ .notNull(),
116
+ }, (table) => ({
117
+ storeIdIndex: (0, pg_core_1.index)("idx_market_regions_store_id").on(table.storeId),
118
+ regionCodeIndex: (0, pg_core_1.index)("idx_market_regions_code").on(table.storeId, table.regionCode),
119
+ defaultIndex: (0, pg_core_1.index)("idx_market_regions_default").on(table.storeId, table.isDefault),
120
+ activeIndex: (0, pg_core_1.index)("idx_market_regions_active").on(table.storeId, table.isActive),
121
+ uniqueRegionCode: (0, pg_core_1.unique)("idx_market_regions_unique_code").on(table.storeId, table.regionCode),
122
+ }));
123
+ exports.storeSettingsRelations = (0, drizzle_orm_1.relations)(exports.storeSettings, ({ one, many }) => ({
124
+ store: one(store_schema_1.stores, {
125
+ fields: [exports.storeSettings.storeId],
126
+ references: [store_schema_1.stores.id],
127
+ }),
128
+ }));
129
+ exports.marketRegionsRelations = (0, drizzle_orm_1.relations)(exports.marketRegions, ({ one }) => ({
130
+ store: one(store_schema_1.stores, {
131
+ fields: [exports.marketRegions.storeId],
132
+ references: [store_schema_1.stores.id],
133
+ }),
134
+ }));
135
+ exports.storesRelationsExtended = (0, drizzle_orm_1.relations)(store_schema_1.stores, ({ one, many }) => ({
136
+ settings: one(exports.storeSettings, {
137
+ fields: [store_schema_1.stores.id],
138
+ references: [exports.storeSettings.storeId],
139
+ }),
140
+ marketRegions: many(exports.marketRegions),
141
+ }));
@@ -0,0 +1,50 @@
1
+ export interface OperationResult<T = unknown> {
2
+ success: boolean;
3
+ data?: T;
4
+ error?: string;
5
+ metadata?: Record<string, unknown>;
6
+ }
7
+ export interface PaginatedResult<T> {
8
+ items: T[];
9
+ pagination: {
10
+ page: number;
11
+ limit: number;
12
+ total: number;
13
+ pages: number;
14
+ hasNext: boolean;
15
+ hasPrev: boolean;
16
+ };
17
+ }
18
+ export interface TenantContext {
19
+ tenantId: string;
20
+ storeId: string;
21
+ userId?: string;
22
+ userRole?: string;
23
+ }
24
+ export interface UserContext {
25
+ userId: string;
26
+ userName: string;
27
+ userRole: string;
28
+ permissions: string[];
29
+ tenantId: string;
30
+ storeId: string;
31
+ }
32
+ export interface BaseFilter {
33
+ page?: number;
34
+ limit?: number;
35
+ sortBy?: string;
36
+ sortOrder?: "asc" | "desc";
37
+ search?: string;
38
+ }
39
+ export interface DateRangeFilter {
40
+ startDate?: string;
41
+ endDate?: string;
42
+ }
43
+ export interface StatusFilter {
44
+ status?: string | string[];
45
+ }
46
+ export interface LocationFilter {
47
+ locationId?: string;
48
+ locationType?: "warehouse" | "pos";
49
+ locationIds?: string[];
50
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ // Core types used across all schemas
3
+ Object.defineProperty(exports, "__esModule", { value: true });