@xbg.solutions/backend-core 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 (185) hide show
  1. package/lib/core/src/app.d.ts +28 -0
  2. package/lib/core/src/app.d.ts.map +1 -0
  3. package/lib/core/src/app.js +188 -0
  4. package/lib/core/src/app.js.map +1 -0
  5. package/lib/core/src/base/BaseController.d.ts +108 -0
  6. package/lib/core/src/base/BaseController.d.ts.map +1 -0
  7. package/lib/core/src/base/BaseController.js +307 -0
  8. package/lib/core/src/base/BaseController.js.map +1 -0
  9. package/lib/core/src/base/BaseEntity.d.ts +92 -0
  10. package/lib/core/src/base/BaseEntity.d.ts.map +1 -0
  11. package/lib/core/src/base/BaseEntity.js +143 -0
  12. package/lib/core/src/base/BaseEntity.js.map +1 -0
  13. package/lib/core/src/base/BaseRepository.d.ts +124 -0
  14. package/lib/core/src/base/BaseRepository.d.ts.map +1 -0
  15. package/lib/core/src/base/BaseRepository.js +414 -0
  16. package/lib/core/src/base/BaseRepository.js.map +1 -0
  17. package/lib/core/src/base/BaseService.d.ts +89 -0
  18. package/lib/core/src/base/BaseService.d.ts.map +1 -0
  19. package/lib/core/src/base/BaseService.js +342 -0
  20. package/lib/core/src/base/BaseService.js.map +1 -0
  21. package/lib/core/src/base/index.d.ts +8 -0
  22. package/lib/core/src/base/index.d.ts.map +1 -0
  23. package/lib/core/src/base/index.js +24 -0
  24. package/lib/core/src/base/index.js.map +1 -0
  25. package/lib/core/src/config/app.config.d.ts +70 -0
  26. package/lib/core/src/config/app.config.d.ts.map +1 -0
  27. package/lib/core/src/config/app.config.js +106 -0
  28. package/lib/core/src/config/app.config.js.map +1 -0
  29. package/lib/core/src/config/auth.config.d.ts +54 -0
  30. package/lib/core/src/config/auth.config.d.ts.map +1 -0
  31. package/lib/core/src/config/auth.config.js +88 -0
  32. package/lib/core/src/config/auth.config.js.map +1 -0
  33. package/lib/core/src/config/cache.config.d.ts +47 -0
  34. package/lib/core/src/config/cache.config.d.ts.map +1 -0
  35. package/lib/core/src/config/cache.config.js +225 -0
  36. package/lib/core/src/config/cache.config.js.map +1 -0
  37. package/lib/core/src/config/communications.config.d.ts +175 -0
  38. package/lib/core/src/config/communications.config.d.ts.map +1 -0
  39. package/lib/core/src/config/communications.config.js +219 -0
  40. package/lib/core/src/config/communications.config.js.map +1 -0
  41. package/lib/core/src/config/database.config.d.ts +68 -0
  42. package/lib/core/src/config/database.config.d.ts.map +1 -0
  43. package/lib/core/src/config/database.config.js +95 -0
  44. package/lib/core/src/config/database.config.js.map +1 -0
  45. package/lib/core/src/config/firebase-event-mapping.config.d.ts +41 -0
  46. package/lib/core/src/config/firebase-event-mapping.config.d.ts.map +1 -0
  47. package/lib/core/src/config/firebase-event-mapping.config.js +180 -0
  48. package/lib/core/src/config/firebase-event-mapping.config.js.map +1 -0
  49. package/lib/core/src/config/firestore.config.d.ts +61 -0
  50. package/lib/core/src/config/firestore.config.d.ts.map +1 -0
  51. package/lib/core/src/config/firestore.config.js +74 -0
  52. package/lib/core/src/config/firestore.config.js.map +1 -0
  53. package/lib/core/src/config/index.d.ts +15 -0
  54. package/lib/core/src/config/index.d.ts.map +1 -0
  55. package/lib/core/src/config/index.js +41 -0
  56. package/lib/core/src/config/index.js.map +1 -0
  57. package/lib/core/src/config/maps.config.d.ts +31 -0
  58. package/lib/core/src/config/maps.config.d.ts.map +1 -0
  59. package/lib/core/src/config/maps.config.js +50 -0
  60. package/lib/core/src/config/maps.config.js.map +1 -0
  61. package/lib/core/src/config/middleware.config.d.ts +57 -0
  62. package/lib/core/src/config/middleware.config.d.ts.map +1 -0
  63. package/lib/core/src/config/middleware.config.js +68 -0
  64. package/lib/core/src/config/middleware.config.js.map +1 -0
  65. package/lib/core/src/config/tokens.config.d.ts +53 -0
  66. package/lib/core/src/config/tokens.config.d.ts.map +1 -0
  67. package/lib/core/src/config/tokens.config.js +129 -0
  68. package/lib/core/src/config/tokens.config.js.map +1 -0
  69. package/lib/core/src/generator/generator.d.ts +38 -0
  70. package/lib/core/src/generator/generator.d.ts.map +1 -0
  71. package/lib/core/src/generator/generator.js +159 -0
  72. package/lib/core/src/generator/generator.js.map +1 -0
  73. package/lib/core/src/generator/index.d.ts +7 -0
  74. package/lib/core/src/generator/index.d.ts.map +1 -0
  75. package/lib/core/src/generator/index.js +23 -0
  76. package/lib/core/src/generator/index.js.map +1 -0
  77. package/lib/core/src/generator/parser.d.ts +10 -0
  78. package/lib/core/src/generator/parser.d.ts.map +1 -0
  79. package/lib/core/src/generator/parser.js +197 -0
  80. package/lib/core/src/generator/parser.js.map +1 -0
  81. package/lib/core/src/generator/types.d.ts +112 -0
  82. package/lib/core/src/generator/types.d.ts.map +1 -0
  83. package/lib/core/src/generator/types.js +7 -0
  84. package/lib/core/src/generator/types.js.map +1 -0
  85. package/lib/core/src/index.d.ts +19 -0
  86. package/lib/core/src/index.d.ts.map +1 -0
  87. package/lib/core/src/index.js +46 -0
  88. package/lib/core/src/index.js.map +1 -0
  89. package/lib/core/src/middleware/auth.middleware.d.ts +57 -0
  90. package/lib/core/src/middleware/auth.middleware.d.ts.map +1 -0
  91. package/lib/core/src/middleware/auth.middleware.js +256 -0
  92. package/lib/core/src/middleware/auth.middleware.js.map +1 -0
  93. package/lib/core/src/middleware/cors.middleware.d.ts +13 -0
  94. package/lib/core/src/middleware/cors.middleware.d.ts.map +1 -0
  95. package/lib/core/src/middleware/cors.middleware.js +50 -0
  96. package/lib/core/src/middleware/cors.middleware.js.map +1 -0
  97. package/lib/core/src/middleware/error.middleware.d.ts +46 -0
  98. package/lib/core/src/middleware/error.middleware.d.ts.map +1 -0
  99. package/lib/core/src/middleware/error.middleware.js +174 -0
  100. package/lib/core/src/middleware/error.middleware.js.map +1 -0
  101. package/lib/core/src/middleware/index.d.ts +11 -0
  102. package/lib/core/src/middleware/index.d.ts.map +1 -0
  103. package/lib/core/src/middleware/index.js +27 -0
  104. package/lib/core/src/middleware/index.js.map +1 -0
  105. package/lib/core/src/middleware/logging.middleware.d.ts +10 -0
  106. package/lib/core/src/middleware/logging.middleware.d.ts.map +1 -0
  107. package/lib/core/src/middleware/logging.middleware.js +87 -0
  108. package/lib/core/src/middleware/logging.middleware.js.map +1 -0
  109. package/lib/core/src/middleware/rateLimit.middleware.d.ts +26 -0
  110. package/lib/core/src/middleware/rateLimit.middleware.d.ts.map +1 -0
  111. package/lib/core/src/middleware/rateLimit.middleware.js +105 -0
  112. package/lib/core/src/middleware/rateLimit.middleware.js.map +1 -0
  113. package/lib/core/src/middleware/requestId.middleware.d.ts +11 -0
  114. package/lib/core/src/middleware/requestId.middleware.d.ts.map +1 -0
  115. package/lib/core/src/middleware/requestId.middleware.js +26 -0
  116. package/lib/core/src/middleware/requestId.middleware.js.map +1 -0
  117. package/lib/core/src/middleware/validation.middleware.d.ts +25 -0
  118. package/lib/core/src/middleware/validation.middleware.d.ts.map +1 -0
  119. package/lib/core/src/middleware/validation.middleware.js +133 -0
  120. package/lib/core/src/middleware/validation.middleware.js.map +1 -0
  121. package/lib/core/src/types/errors.d.ts +119 -0
  122. package/lib/core/src/types/errors.d.ts.map +1 -0
  123. package/lib/core/src/types/errors.js +210 -0
  124. package/lib/core/src/types/errors.js.map +1 -0
  125. package/lib/utils-cache-connector/src/cache-connector.d.ts +139 -0
  126. package/lib/utils-cache-connector/src/cache-connector.d.ts.map +1 -0
  127. package/lib/utils-cache-connector/src/cache-connector.js +277 -0
  128. package/lib/utils-cache-connector/src/cache-connector.js.map +1 -0
  129. package/lib/utils-cache-connector/src/index.d.ts +52 -0
  130. package/lib/utils-cache-connector/src/index.d.ts.map +1 -0
  131. package/lib/utils-cache-connector/src/index.js +103 -0
  132. package/lib/utils-cache-connector/src/index.js.map +1 -0
  133. package/lib/utils-cache-connector/src/providers/base-cache-provider.d.ts +95 -0
  134. package/lib/utils-cache-connector/src/providers/base-cache-provider.d.ts.map +1 -0
  135. package/lib/utils-cache-connector/src/providers/base-cache-provider.js +120 -0
  136. package/lib/utils-cache-connector/src/providers/base-cache-provider.js.map +1 -0
  137. package/lib/utils-cache-connector/src/providers/firestore-cache-provider.d.ts +58 -0
  138. package/lib/utils-cache-connector/src/providers/firestore-cache-provider.d.ts.map +1 -0
  139. package/lib/utils-cache-connector/src/providers/firestore-cache-provider.js +418 -0
  140. package/lib/utils-cache-connector/src/providers/firestore-cache-provider.js.map +1 -0
  141. package/lib/utils-cache-connector/src/providers/memory-cache-provider.d.ts +57 -0
  142. package/lib/utils-cache-connector/src/providers/memory-cache-provider.d.ts.map +1 -0
  143. package/lib/utils-cache-connector/src/providers/memory-cache-provider.js +217 -0
  144. package/lib/utils-cache-connector/src/providers/memory-cache-provider.js.map +1 -0
  145. package/lib/utils-cache-connector/src/providers/noop-cache-provider.d.ts +21 -0
  146. package/lib/utils-cache-connector/src/providers/noop-cache-provider.d.ts.map +1 -0
  147. package/lib/utils-cache-connector/src/providers/noop-cache-provider.js +42 -0
  148. package/lib/utils-cache-connector/src/providers/noop-cache-provider.js.map +1 -0
  149. package/lib/utils-cache-connector/src/providers/redis-cache-provider.d.ts +64 -0
  150. package/lib/utils-cache-connector/src/providers/redis-cache-provider.d.ts.map +1 -0
  151. package/lib/utils-cache-connector/src/providers/redis-cache-provider.js +414 -0
  152. package/lib/utils-cache-connector/src/providers/redis-cache-provider.js.map +1 -0
  153. package/lib/utils-cache-connector/src/types.d.ts +342 -0
  154. package/lib/utils-cache-connector/src/types.d.ts.map +1 -0
  155. package/lib/utils-cache-connector/src/types.js +8 -0
  156. package/lib/utils-cache-connector/src/types.js.map +1 -0
  157. package/lib/utils-events/src/event-bus.d.ts +42 -0
  158. package/lib/utils-events/src/event-bus.d.ts.map +1 -0
  159. package/lib/utils-events/src/event-bus.js +93 -0
  160. package/lib/utils-events/src/event-bus.js.map +1 -0
  161. package/lib/utils-events/src/event-types.d.ts +146 -0
  162. package/lib/utils-events/src/event-types.d.ts.map +1 -0
  163. package/lib/utils-events/src/event-types.js +49 -0
  164. package/lib/utils-events/src/event-types.js.map +1 -0
  165. package/lib/utils-events/src/index.d.ts +7 -0
  166. package/lib/utils-events/src/index.d.ts.map +1 -0
  167. package/lib/utils-events/src/index.js +11 -0
  168. package/lib/utils-events/src/index.js.map +1 -0
  169. package/lib/utils-logger/src/index.d.ts +12 -0
  170. package/lib/utils-logger/src/index.d.ts.map +1 -0
  171. package/lib/utils-logger/src/index.js +29 -0
  172. package/lib/utils-logger/src/index.js.map +1 -0
  173. package/lib/utils-logger/src/logger-types.d.ts +32 -0
  174. package/lib/utils-logger/src/logger-types.d.ts.map +1 -0
  175. package/lib/utils-logger/src/logger-types.js +17 -0
  176. package/lib/utils-logger/src/logger-types.js.map +1 -0
  177. package/lib/utils-logger/src/logger.d.ts +42 -0
  178. package/lib/utils-logger/src/logger.d.ts.map +1 -0
  179. package/lib/utils-logger/src/logger.js +123 -0
  180. package/lib/utils-logger/src/logger.js.map +1 -0
  181. package/package.json +49 -0
  182. package/src/templates/controller.hbs +48 -0
  183. package/src/templates/entity.hbs +80 -0
  184. package/src/templates/repository.hbs +56 -0
  185. package/src/templates/service.hbs +108 -0
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ /**
3
+ * Communications Configuration
4
+ * Settings for Email, SMS, CRM, Realtime, Push Notifications, Journeys, ERP, Work Management, Survey, and Document integrations
5
+ */
6
+ var _a;
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.COMMUNICATIONS_CONFIG = void 0;
9
+ exports.validateCommunicationsConfig = validateCommunicationsConfig;
10
+ exports.COMMUNICATIONS_CONFIG = {
11
+ email: {
12
+ enabled: process.env.EMAIL_ENABLED === 'true',
13
+ provider: process.env.EMAIL_PROVIDER || 'mailjet',
14
+ fromAddress: process.env.EMAIL_FROM_ADDRESS || 'noreply@example.com',
15
+ fromName: process.env.EMAIL_FROM_NAME || 'Application',
16
+ providers: {
17
+ mailjet: {
18
+ apiKey: process.env.MAILJET_API_KEY || '',
19
+ secretKey: process.env.MAILJET_SECRET_KEY || '',
20
+ },
21
+ ortto: {
22
+ apiKey: process.env.ORTTO_API_KEY || '',
23
+ region: process.env.ORTTO_REGION || 'us',
24
+ },
25
+ },
26
+ defaults: {
27
+ replyTo: process.env.EMAIL_REPLY_TO,
28
+ trackOpens: process.env.EMAIL_TRACK_OPENS !== 'false',
29
+ trackClicks: process.env.EMAIL_TRACK_CLICKS !== 'false',
30
+ },
31
+ },
32
+ sms: {
33
+ enabled: process.env.SMS_ENABLED === 'true',
34
+ provider: process.env.SMS_PROVIDER || 'twilio',
35
+ providers: {
36
+ twilio: {
37
+ accountSid: process.env.TWILIO_ACCOUNT_SID || '',
38
+ authToken: process.env.TWILIO_AUTH_TOKEN || '',
39
+ fromNumber: process.env.TWILIO_FROM_NUMBER || '',
40
+ },
41
+ messagebird: {
42
+ apiKey: process.env.MESSAGEBIRD_API_KEY || '',
43
+ originator: process.env.MESSAGEBIRD_ORIGINATOR || '',
44
+ fromNumber: process.env.MESSAGEBIRD_FROM_NUMBER || '',
45
+ },
46
+ },
47
+ defaults: {
48
+ validityPeriod: 3600,
49
+ enableDeliveryReports: true,
50
+ },
51
+ },
52
+ crm: {
53
+ enabled: process.env.CRM_ENABLED === 'true',
54
+ provider: process.env.CRM_PROVIDER || 'hubspot',
55
+ syncOnEvents: ((_a = process.env.CRM_SYNC_EVENTS) === null || _a === void 0 ? void 0 : _a.split(',')) || ['USER_CREATED', 'ORDER_COMPLETED'],
56
+ providers: {
57
+ hubspot: {
58
+ apiKey: process.env.HUBSPOT_API_KEY || '',
59
+ },
60
+ salesforce: {
61
+ clientId: process.env.SALESFORCE_CLIENT_ID || '',
62
+ clientSecret: process.env.SALESFORCE_CLIENT_SECRET || '',
63
+ loginUrl: process.env.SALESFORCE_LOGIN_URL || 'https://login.salesforce.com',
64
+ apiVersion: process.env.SALESFORCE_API_VERSION || '58.0',
65
+ },
66
+ attio: {
67
+ apiKey: process.env.ATTIO_API_KEY || '',
68
+ },
69
+ },
70
+ sync: {
71
+ batchSize: parseInt(process.env.CRM_BATCH_SIZE || '100', 10),
72
+ retryAttempts: parseInt(process.env.CRM_RETRY_ATTEMPTS || '3', 10),
73
+ retryDelay: parseInt(process.env.CRM_RETRY_DELAY || '1000', 10),
74
+ },
75
+ },
76
+ realtime: {
77
+ enabled: process.env.REALTIME_ENABLED === 'true',
78
+ provider: process.env.REALTIME_PROVIDER || 'sse',
79
+ providers: {
80
+ sse: {
81
+ heartbeatInterval: parseInt(process.env.SSE_HEARTBEAT_INTERVAL || '30000', 10),
82
+ reconnectDelay: parseInt(process.env.SSE_RECONNECT_DELAY || '3000', 10),
83
+ },
84
+ websocket: {
85
+ port: parseInt(process.env.WS_PORT || '8080', 10),
86
+ path: process.env.WS_PATH || '/ws',
87
+ pingInterval: parseInt(process.env.WS_PING_INTERVAL || '30000', 10),
88
+ pongTimeout: parseInt(process.env.WS_PONG_TIMEOUT || '5000', 10),
89
+ },
90
+ },
91
+ },
92
+ pushNotifications: {
93
+ enabled: process.env.PUSH_NOTIFICATIONS_ENABLED === 'true',
94
+ provider: 'fcm',
95
+ providers: {
96
+ fcm: {
97
+ projectId: process.env.FIREBASE_PROJECT_ID || '',
98
+ serviceAccountPath: process.env.FCM_SERVICE_ACCOUNT_PATH,
99
+ },
100
+ },
101
+ },
102
+ journey: {
103
+ enabled: process.env.JOURNEY_ENABLED === 'true',
104
+ provider: 'ortto',
105
+ providers: {
106
+ ortto: {
107
+ apiKey: process.env.ORTTO_API_KEY || '',
108
+ region: process.env.ORTTO_REGION || 'us',
109
+ },
110
+ },
111
+ },
112
+ erp: {
113
+ enabled: process.env.ERP_ENABLED === 'true',
114
+ provider: 'workday',
115
+ providers: {
116
+ workday: {
117
+ tenant: process.env.WORKDAY_TENANT || '',
118
+ clientId: process.env.WORKDAY_CLIENT_ID || '',
119
+ clientSecret: process.env.WORKDAY_CLIENT_SECRET || '',
120
+ apiVersion: process.env.WORKDAY_API_VERSION || 'v1',
121
+ },
122
+ },
123
+ },
124
+ workManagement: {
125
+ enabled: process.env.WORK_MGMT_ENABLED === 'true',
126
+ provider: process.env.WORK_MGMT_PROVIDER || 'clickup',
127
+ providers: {
128
+ clickup: {
129
+ apiKey: process.env.CLICKUP_API_KEY || '',
130
+ teamId: process.env.CLICKUP_TEAM_ID,
131
+ },
132
+ monday: {
133
+ apiKey: process.env.MONDAY_API_KEY || '',
134
+ },
135
+ notion: {
136
+ apiKey: process.env.NOTION_API_KEY || '',
137
+ databaseId: process.env.NOTION_DATABASE_ID,
138
+ },
139
+ },
140
+ },
141
+ survey: {
142
+ enabled: process.env.SURVEY_ENABLED === 'true',
143
+ provider: process.env.SURVEY_PROVIDER || 'surveymonkey',
144
+ providers: {
145
+ surveymonkey: {
146
+ apiKey: process.env.SURVEYMONKEY_API_KEY || '',
147
+ accessToken: process.env.SURVEYMONKEY_ACCESS_TOKEN || '',
148
+ },
149
+ typeform: {
150
+ apiKey: process.env.TYPEFORM_API_KEY || '',
151
+ accessToken: process.env.TYPEFORM_ACCESS_TOKEN || '',
152
+ },
153
+ },
154
+ },
155
+ document: {
156
+ enabled: process.env.DOCUMENT_ENABLED === 'true',
157
+ provider: 'pandadoc',
158
+ providers: {
159
+ pandadoc: {
160
+ apiKey: process.env.PANDADOC_API_KEY || '',
161
+ },
162
+ },
163
+ },
164
+ };
165
+ /**
166
+ * Validate communications configuration
167
+ */
168
+ function validateCommunicationsConfig() {
169
+ const errors = [];
170
+ // Validate Email
171
+ if (exports.COMMUNICATIONS_CONFIG.email.enabled) {
172
+ const provider = exports.COMMUNICATIONS_CONFIG.email.provider;
173
+ const providerConfig = exports.COMMUNICATIONS_CONFIG.email.providers[provider];
174
+ if (!providerConfig || !providerConfig.apiKey) {
175
+ errors.push(`${provider.toUpperCase()} API key is required when email is enabled`);
176
+ }
177
+ }
178
+ // Validate SMS
179
+ if (exports.COMMUNICATIONS_CONFIG.sms.enabled) {
180
+ const provider = exports.COMMUNICATIONS_CONFIG.sms.provider;
181
+ const providerConfig = exports.COMMUNICATIONS_CONFIG.sms.providers[provider];
182
+ if (!providerConfig) {
183
+ errors.push(`${provider.toUpperCase()} configuration is required when SMS is enabled`);
184
+ }
185
+ }
186
+ // Validate CRM
187
+ if (exports.COMMUNICATIONS_CONFIG.crm.enabled) {
188
+ const provider = exports.COMMUNICATIONS_CONFIG.crm.provider;
189
+ const providerConfig = exports.COMMUNICATIONS_CONFIG.crm.providers[provider];
190
+ if (!providerConfig || Object.values(providerConfig).every((v) => !v)) {
191
+ errors.push(`${provider.toUpperCase()} configuration is required when CRM is enabled`);
192
+ }
193
+ }
194
+ // Validate Push Notifications (FCM)
195
+ if (exports.COMMUNICATIONS_CONFIG.pushNotifications.enabled) {
196
+ const fcm = exports.COMMUNICATIONS_CONFIG.pushNotifications.providers.fcm;
197
+ if (!(fcm === null || fcm === void 0 ? void 0 : fcm.projectId)) {
198
+ errors.push('FIREBASE_PROJECT_ID is required when push notifications are enabled');
199
+ }
200
+ }
201
+ // Validate Journey
202
+ if (exports.COMMUNICATIONS_CONFIG.journey.enabled) {
203
+ const ortto = exports.COMMUNICATIONS_CONFIG.journey.providers.ortto;
204
+ if (!(ortto === null || ortto === void 0 ? void 0 : ortto.apiKey)) {
205
+ errors.push('ORTTO_API_KEY is required when journey is enabled');
206
+ }
207
+ }
208
+ // Validate ERP
209
+ if (exports.COMMUNICATIONS_CONFIG.erp.enabled) {
210
+ const workday = exports.COMMUNICATIONS_CONFIG.erp.providers.workday;
211
+ if (!(workday === null || workday === void 0 ? void 0 : workday.tenant) || !(workday === null || workday === void 0 ? void 0 : workday.clientId) || !(workday === null || workday === void 0 ? void 0 : workday.clientSecret)) {
212
+ errors.push('WORKDAY configuration (tenant, clientId, clientSecret) is required when ERP is enabled');
213
+ }
214
+ }
215
+ if (errors.length > 0) {
216
+ throw new Error(`Communications configuration validation failed:\n${errors.join('\n')}`);
217
+ }
218
+ }
219
+ //# sourceMappingURL=communications.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"communications.config.js","sourceRoot":"","sources":["../../../../src/config/communications.config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Database Configuration
3
+ *
4
+ * Multi-database setup with connection pooling and retry logic.
5
+ *
6
+ * This boilerplate encourages multi-database by default — separating
7
+ * concerns (e.g. main data vs analytics) into different Firestore
8
+ * databases gives you independent scaling and regional control.
9
+ *
10
+ * Single-database mode is also supported: set MAIN_DATABASE_ID and
11
+ * ANALYTICS_DATABASE_ID both to "(default)".
12
+ *
13
+ * ─── Collections ──────────────────────────────────────────────────────
14
+ *
15
+ * Entity collections are NOT hard-coded here. The code generator creates
16
+ * per-entity repository classes that specify their own collection names.
17
+ * The collections map below is only for framework-level collections
18
+ * (sessions, token blacklist, audit logs) that exist regardless of
19
+ * which entities you generate.
20
+ */
21
+ export interface DatabaseConfig {
22
+ databases: {
23
+ [key: string]: {
24
+ projectId?: string;
25
+ databaseId?: string;
26
+ emulator?: {
27
+ host: string;
28
+ port: number;
29
+ };
30
+ };
31
+ };
32
+ defaults: {
33
+ retryAttempts: number;
34
+ retryDelay: number;
35
+ timeout: number;
36
+ enableCache: boolean;
37
+ };
38
+ collections: {
39
+ [key: string]: {
40
+ database: string;
41
+ name: string;
42
+ };
43
+ };
44
+ }
45
+ export declare const DATABASE_CONFIG: DatabaseConfig;
46
+ /**
47
+ * Get database configuration by name
48
+ */
49
+ export declare function getDatabaseConfig(name: string): {
50
+ projectId?: string;
51
+ databaseId?: string;
52
+ emulator?: {
53
+ host: string;
54
+ port: number;
55
+ };
56
+ };
57
+ /**
58
+ * Get collection configuration
59
+ */
60
+ export declare function getCollectionConfig(collectionKey: string): {
61
+ database: string;
62
+ name: string;
63
+ };
64
+ /**
65
+ * Check if using Firestore emulator
66
+ */
67
+ export declare function isUsingEmulator(): boolean;
68
+ //# sourceMappingURL=database.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.config.d.ts","sourceRoot":"","sources":["../../../../src/config/database.config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE;QACT,CAAC,GAAG,EAAE,MAAM,GAAG;YACb,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,QAAQ,CAAC,EAAE;gBACT,IAAI,EAAE,MAAM,CAAC;gBACb,IAAI,EAAE,MAAM,CAAC;aACd,CAAC;SACH,CAAC;KACH,CAAC;IAEF,QAAQ,EAAE;QACR,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IAEF,WAAW,EAAE;QACX,CAAC,GAAG,EAAE,MAAM,GAAG;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;KACH,CAAC;CACH;AAED,eAAO,MAAM,eAAe,EAAE,cA2C7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM;gBAxE5B,MAAM;iBACL,MAAM;eACR;QACT,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd;EAyEN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM;cAjEzC,MAAM;UACV,MAAM;EAsEjB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ /**
3
+ * Database Configuration
4
+ *
5
+ * Multi-database setup with connection pooling and retry logic.
6
+ *
7
+ * This boilerplate encourages multi-database by default — separating
8
+ * concerns (e.g. main data vs analytics) into different Firestore
9
+ * databases gives you independent scaling and regional control.
10
+ *
11
+ * Single-database mode is also supported: set MAIN_DATABASE_ID and
12
+ * ANALYTICS_DATABASE_ID both to "(default)".
13
+ *
14
+ * ─── Collections ──────────────────────────────────────────────────────
15
+ *
16
+ * Entity collections are NOT hard-coded here. The code generator creates
17
+ * per-entity repository classes that specify their own collection names.
18
+ * The collections map below is only for framework-level collections
19
+ * (sessions, token blacklist, audit logs) that exist regardless of
20
+ * which entities you generate.
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.DATABASE_CONFIG = void 0;
24
+ exports.getDatabaseConfig = getDatabaseConfig;
25
+ exports.getCollectionConfig = getCollectionConfig;
26
+ exports.isUsingEmulator = isUsingEmulator;
27
+ exports.DATABASE_CONFIG = {
28
+ databases: {
29
+ main: {
30
+ projectId: process.env.FIREBASE_PROJECT_ID,
31
+ databaseId: process.env.MAIN_DATABASE_ID || '(default)',
32
+ emulator: process.env.FIRESTORE_EMULATOR_HOST ? {
33
+ host: process.env.FIRESTORE_EMULATOR_HOST.split(':')[0],
34
+ port: parseInt(process.env.FIRESTORE_EMULATOR_HOST.split(':')[1] || '8080', 10),
35
+ } : undefined,
36
+ },
37
+ analytics: {
38
+ projectId: process.env.FIREBASE_PROJECT_ID,
39
+ databaseId: process.env.ANALYTICS_DATABASE_ID || 'analytics',
40
+ emulator: process.env.FIRESTORE_EMULATOR_HOST ? {
41
+ host: process.env.FIRESTORE_EMULATOR_HOST.split(':')[0],
42
+ port: parseInt(process.env.FIRESTORE_EMULATOR_HOST.split(':')[1] || '8080', 10),
43
+ } : undefined,
44
+ },
45
+ },
46
+ defaults: {
47
+ retryAttempts: parseInt(process.env.DB_RETRY_ATTEMPTS || '3', 10),
48
+ retryDelay: parseInt(process.env.DB_RETRY_DELAY || '1000', 10),
49
+ timeout: parseInt(process.env.DB_TIMEOUT || '10000', 10),
50
+ enableCache: process.env.DB_ENABLE_CACHE !== 'false',
51
+ },
52
+ // Framework-level collections only.
53
+ // Entity collections are defined by generated repository classes.
54
+ collections: {
55
+ sessions: {
56
+ database: 'main',
57
+ name: 'sessions',
58
+ },
59
+ tokenBlacklist: {
60
+ database: 'main',
61
+ name: 'token_blacklist',
62
+ },
63
+ auditLogs: {
64
+ database: 'main',
65
+ name: 'audit_logs',
66
+ },
67
+ },
68
+ };
69
+ /**
70
+ * Get database configuration by name
71
+ */
72
+ function getDatabaseConfig(name) {
73
+ const config = exports.DATABASE_CONFIG.databases[name];
74
+ if (!config) {
75
+ throw new Error(`Database configuration not found for: ${name}`);
76
+ }
77
+ return config;
78
+ }
79
+ /**
80
+ * Get collection configuration
81
+ */
82
+ function getCollectionConfig(collectionKey) {
83
+ const config = exports.DATABASE_CONFIG.collections[collectionKey];
84
+ if (!config) {
85
+ throw new Error(`Collection configuration not found for: ${collectionKey}`);
86
+ }
87
+ return config;
88
+ }
89
+ /**
90
+ * Check if using Firestore emulator
91
+ */
92
+ function isUsingEmulator() {
93
+ return !!process.env.FIRESTORE_EMULATOR_HOST;
94
+ }
95
+ //# sourceMappingURL=database.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.config.js","sourceRoot":"","sources":["../../../../src/config/database.config.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AA6EH,8CAMC;AAKD,kDAMC;AAKD,0CAEC;AAxEY,QAAA,eAAe,GAAmB;IAC7C,SAAS,EAAE;QACT,IAAI,EAAE;YACJ,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;YAC1C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,WAAW;YACvD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;gBAC9C,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACvD,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC;aAChF,CAAC,CAAC,CAAC,SAAS;SACd;QACD,SAAS,EAAE;YACT,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;YAC1C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,WAAW;YAC5D,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;gBAC9C,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACvD,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC;aAChF,CAAC,CAAC,CAAC,SAAS;SACd;KACF;IAED,QAAQ,EAAE;QACR,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,GAAG,EAAE,EAAE,CAAC;QACjE,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,MAAM,EAAE,EAAE,CAAC;QAC9D,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,EAAE,EAAE,CAAC;QACxD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,OAAO;KACrD;IAED,oCAAoC;IACpC,kEAAkE;IAClE,WAAW,EAAE;QACX,QAAQ,EAAE;YACR,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,UAAU;SACjB;QACD,cAAc,EAAE;YACd,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,iBAAiB;SACxB;QACD,SAAS,EAAE;YACT,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,YAAY;SACnB;KACF;CACF,CAAC;AAEF;;GAEG;AACH,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,MAAM,MAAM,GAAG,uBAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,aAAqB;IACvD,MAAM,MAAM,GAAG,uBAAe,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,aAAa,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Firebase Event to Domain Event Mapping Configuration
3
+ *
4
+ * Maps Firebase-specific events (Firestore, Auth, Storage) to domain events.
5
+ *
6
+ * ─── How it works ─────────────────────────────────────────────────────
7
+ *
8
+ * Firestore events are mapped dynamically:
9
+ * firestore.{collection}.{operation} → {COLLECTION}_CREATED / UPDATED / DELETED
10
+ *
11
+ * This means any collection automatically gets CRUD events on the event bus
12
+ * without needing an explicit mapping here.
13
+ *
14
+ * Auth and Storage events are mapped to the standard EventType members.
15
+ *
16
+ * To add custom mappings (e.g. a specific collection should publish a
17
+ * specialised event), add an entry to CUSTOM_FIRESTORE_MAPPINGS below.
18
+ */
19
+ import { EventType, BaseEventPayload } from '@xbg/utils-events';
20
+ import { NormalizedFirebaseEvent } from '@xbg/utils-firebase-event-bridge';
21
+ /**
22
+ * Event mapping result
23
+ */
24
+ export interface EventMapping {
25
+ domainEvent: EventType;
26
+ domainPayload: BaseEventPayload;
27
+ }
28
+ /**
29
+ * Map a Firebase event to a domain event.
30
+ *
31
+ * @param firebaseEventName - e.g. 'firestore.users.created', 'auth.user.created'
32
+ * @param event - Normalized Firebase event with full context
33
+ * @returns Event mapping or null if no mapping exists
34
+ */
35
+ export declare function mapFirebaseEventToDomain(firebaseEventName: string, event: NormalizedFirebaseEvent): EventMapping | null;
36
+ /**
37
+ * Validate event mapping configuration.
38
+ * Run during application startup to surface issues early.
39
+ */
40
+ export declare function validateEventMappings(): void;
41
+ //# sourceMappingURL=firebase-event-mapping.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase-event-mapping.config.d.ts","sourceRoot":"","sources":["../../../../src/config/firebase-event-mapping.config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,SAAS,CAAC;IACvB,aAAa,EAAE,gBAAgB,CAAC;CACjC;AAiBD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,uBAAuB,GAC7B,YAAY,GAAG,IAAI,CAcrB;AA+HD;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAW5C"}
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ /**
3
+ * Firebase Event to Domain Event Mapping Configuration
4
+ *
5
+ * Maps Firebase-specific events (Firestore, Auth, Storage) to domain events.
6
+ *
7
+ * ─── How it works ─────────────────────────────────────────────────────
8
+ *
9
+ * Firestore events are mapped dynamically:
10
+ * firestore.{collection}.{operation} → {COLLECTION}_CREATED / UPDATED / DELETED
11
+ *
12
+ * This means any collection automatically gets CRUD events on the event bus
13
+ * without needing an explicit mapping here.
14
+ *
15
+ * Auth and Storage events are mapped to the standard EventType members.
16
+ *
17
+ * To add custom mappings (e.g. a specific collection should publish a
18
+ * specialised event), add an entry to CUSTOM_FIRESTORE_MAPPINGS below.
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.mapFirebaseEventToDomain = mapFirebaseEventToDomain;
22
+ exports.validateEventMappings = validateEventMappings;
23
+ const utils_events_1 = require("@xbg/utils-events");
24
+ /**
25
+ * Optional per-collection overrides.
26
+ * Key: collection name, Value: partial map of operation → EventType.
27
+ *
28
+ * Example – to map 'users' collection create events to USER_CREATED:
29
+ * users: { created: EventType.USER_CREATED }
30
+ */
31
+ const CUSTOM_FIRESTORE_MAPPINGS = {
32
+ users: {
33
+ created: utils_events_1.EventType.USER_CREATED,
34
+ updated: utils_events_1.EventType.USER_UPDATED,
35
+ deleted: utils_events_1.EventType.USER_DELETED,
36
+ },
37
+ };
38
+ /**
39
+ * Map a Firebase event to a domain event.
40
+ *
41
+ * @param firebaseEventName - e.g. 'firestore.users.created', 'auth.user.created'
42
+ * @param event - Normalized Firebase event with full context
43
+ * @returns Event mapping or null if no mapping exists
44
+ */
45
+ function mapFirebaseEventToDomain(firebaseEventName, event) {
46
+ if (firebaseEventName.startsWith('firestore.')) {
47
+ return mapFirestoreEvent(firebaseEventName, event);
48
+ }
49
+ if (firebaseEventName.startsWith('auth.')) {
50
+ return mapAuthEvent(firebaseEventName, event);
51
+ }
52
+ if (firebaseEventName.startsWith('storage.')) {
53
+ return mapStorageEvent(firebaseEventName, event);
54
+ }
55
+ return null;
56
+ }
57
+ /**
58
+ * Map Firestore events to domain events.
59
+ *
60
+ * If a custom mapping exists for the collection + operation, use it.
61
+ * Otherwise, fall back to EXTERNAL_DATA_CHANGE with full metadata
62
+ * so subscribers can still react to any collection change.
63
+ */
64
+ function mapFirestoreEvent(eventName, event) {
65
+ var _a;
66
+ const parts = eventName.split('.');
67
+ if (parts.length !== 3)
68
+ return null;
69
+ const [, collection, operation] = parts;
70
+ // Check custom mappings first
71
+ const customMapping = (_a = CUSTOM_FIRESTORE_MAPPINGS[collection]) === null || _a === void 0 ? void 0 : _a[operation];
72
+ if (customMapping) {
73
+ return {
74
+ domainEvent: customMapping,
75
+ domainPayload: {
76
+ documentId: event.normalized.documentId || '',
77
+ collection,
78
+ operation,
79
+ timestamp: event.timestamp,
80
+ },
81
+ };
82
+ }
83
+ // Dynamic mapping: cast "{COLLECTION}_{OPERATION}" as EventType.
84
+ // BaseService publishes events in this same format, so subscribers
85
+ // that listen for e.g. "ORDER_CREATED" will receive both API-driven
86
+ // and Firestore-trigger-driven events.
87
+ const dynamicEventType = `${collection}.${operation}`;
88
+ return {
89
+ domainEvent: dynamicEventType,
90
+ domainPayload: {
91
+ documentId: event.normalized.documentId || '',
92
+ collection,
93
+ operation,
94
+ timestamp: event.timestamp,
95
+ },
96
+ };
97
+ }
98
+ /**
99
+ * Map Auth events to domain events
100
+ */
101
+ function mapAuthEvent(eventName, event) {
102
+ if (eventName === 'auth.user.created') {
103
+ return {
104
+ domainEvent: utils_events_1.EventType.USER_CREATED,
105
+ domainPayload: {
106
+ userUID: event.normalized.userId || '',
107
+ timestamp: event.timestamp,
108
+ },
109
+ };
110
+ }
111
+ if (eventName === 'auth.user.deleted') {
112
+ return {
113
+ domainEvent: utils_events_1.EventType.USER_DELETED,
114
+ domainPayload: {
115
+ userUID: event.normalized.userId || '',
116
+ timestamp: event.timestamp,
117
+ },
118
+ };
119
+ }
120
+ return {
121
+ domainEvent: utils_events_1.EventType.EXTERNAL_DATA_CHANGE,
122
+ domainPayload: {
123
+ source: 'auth',
124
+ userId: event.normalized.userId,
125
+ operation: event.normalized.operation,
126
+ timestamp: event.timestamp,
127
+ },
128
+ };
129
+ }
130
+ /**
131
+ * Map Storage events to domain events
132
+ */
133
+ function mapStorageEvent(eventName, event) {
134
+ var _a, _b, _c;
135
+ if (eventName === 'storage.object.finalized') {
136
+ return {
137
+ domainEvent: utils_events_1.EventType.FILE_UPLOADED,
138
+ domainPayload: {
139
+ filePath: event.normalized.filePath || '',
140
+ contentType: (_a = event.raw) === null || _a === void 0 ? void 0 : _a.contentType,
141
+ size: (_b = event.raw) === null || _b === void 0 ? void 0 : _b.size,
142
+ bucket: (_c = event.raw) === null || _c === void 0 ? void 0 : _c.bucket,
143
+ timestamp: event.timestamp,
144
+ },
145
+ };
146
+ }
147
+ if (eventName === 'storage.object.deleted') {
148
+ return {
149
+ domainEvent: utils_events_1.EventType.FILE_DELETED,
150
+ domainPayload: {
151
+ filePath: event.normalized.filePath || '',
152
+ timestamp: event.timestamp,
153
+ },
154
+ };
155
+ }
156
+ return {
157
+ domainEvent: utils_events_1.EventType.EXTERNAL_DATA_CHANGE,
158
+ domainPayload: {
159
+ source: 'storage',
160
+ filePath: event.normalized.filePath,
161
+ operation: event.normalized.operation,
162
+ timestamp: event.timestamp,
163
+ },
164
+ };
165
+ }
166
+ /**
167
+ * Validate event mapping configuration.
168
+ * Run during application startup to surface issues early.
169
+ */
170
+ function validateEventMappings() {
171
+ // Verify custom mappings reference valid EventType values
172
+ for (const [collection, ops] of Object.entries(CUSTOM_FIRESTORE_MAPPINGS)) {
173
+ for (const [operation, eventType] of Object.entries(ops)) {
174
+ if (!Object.values(utils_events_1.EventType).includes(eventType)) {
175
+ console.warn(`Custom event mapping for ${collection}.${operation} references unknown EventType: ${eventType}`);
176
+ }
177
+ }
178
+ }
179
+ }
180
+ //# sourceMappingURL=firebase-event-mapping.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase-event-mapping.config.js","sourceRoot":"","sources":["../../../../src/config/firebase-event-mapping.config.ts"],"names":[],"mappings":"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"}