@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.
- package/lib/core/src/app.d.ts +28 -0
- package/lib/core/src/app.d.ts.map +1 -0
- package/lib/core/src/app.js +188 -0
- package/lib/core/src/app.js.map +1 -0
- package/lib/core/src/base/BaseController.d.ts +108 -0
- package/lib/core/src/base/BaseController.d.ts.map +1 -0
- package/lib/core/src/base/BaseController.js +307 -0
- package/lib/core/src/base/BaseController.js.map +1 -0
- package/lib/core/src/base/BaseEntity.d.ts +92 -0
- package/lib/core/src/base/BaseEntity.d.ts.map +1 -0
- package/lib/core/src/base/BaseEntity.js +143 -0
- package/lib/core/src/base/BaseEntity.js.map +1 -0
- package/lib/core/src/base/BaseRepository.d.ts +124 -0
- package/lib/core/src/base/BaseRepository.d.ts.map +1 -0
- package/lib/core/src/base/BaseRepository.js +414 -0
- package/lib/core/src/base/BaseRepository.js.map +1 -0
- package/lib/core/src/base/BaseService.d.ts +89 -0
- package/lib/core/src/base/BaseService.d.ts.map +1 -0
- package/lib/core/src/base/BaseService.js +342 -0
- package/lib/core/src/base/BaseService.js.map +1 -0
- package/lib/core/src/base/index.d.ts +8 -0
- package/lib/core/src/base/index.d.ts.map +1 -0
- package/lib/core/src/base/index.js +24 -0
- package/lib/core/src/base/index.js.map +1 -0
- package/lib/core/src/config/app.config.d.ts +70 -0
- package/lib/core/src/config/app.config.d.ts.map +1 -0
- package/lib/core/src/config/app.config.js +106 -0
- package/lib/core/src/config/app.config.js.map +1 -0
- package/lib/core/src/config/auth.config.d.ts +54 -0
- package/lib/core/src/config/auth.config.d.ts.map +1 -0
- package/lib/core/src/config/auth.config.js +88 -0
- package/lib/core/src/config/auth.config.js.map +1 -0
- package/lib/core/src/config/cache.config.d.ts +47 -0
- package/lib/core/src/config/cache.config.d.ts.map +1 -0
- package/lib/core/src/config/cache.config.js +225 -0
- package/lib/core/src/config/cache.config.js.map +1 -0
- package/lib/core/src/config/communications.config.d.ts +175 -0
- package/lib/core/src/config/communications.config.d.ts.map +1 -0
- package/lib/core/src/config/communications.config.js +219 -0
- package/lib/core/src/config/communications.config.js.map +1 -0
- package/lib/core/src/config/database.config.d.ts +68 -0
- package/lib/core/src/config/database.config.d.ts.map +1 -0
- package/lib/core/src/config/database.config.js +95 -0
- package/lib/core/src/config/database.config.js.map +1 -0
- package/lib/core/src/config/firebase-event-mapping.config.d.ts +41 -0
- package/lib/core/src/config/firebase-event-mapping.config.d.ts.map +1 -0
- package/lib/core/src/config/firebase-event-mapping.config.js +180 -0
- package/lib/core/src/config/firebase-event-mapping.config.js.map +1 -0
- package/lib/core/src/config/firestore.config.d.ts +61 -0
- package/lib/core/src/config/firestore.config.d.ts.map +1 -0
- package/lib/core/src/config/firestore.config.js +74 -0
- package/lib/core/src/config/firestore.config.js.map +1 -0
- package/lib/core/src/config/index.d.ts +15 -0
- package/lib/core/src/config/index.d.ts.map +1 -0
- package/lib/core/src/config/index.js +41 -0
- package/lib/core/src/config/index.js.map +1 -0
- package/lib/core/src/config/maps.config.d.ts +31 -0
- package/lib/core/src/config/maps.config.d.ts.map +1 -0
- package/lib/core/src/config/maps.config.js +50 -0
- package/lib/core/src/config/maps.config.js.map +1 -0
- package/lib/core/src/config/middleware.config.d.ts +57 -0
- package/lib/core/src/config/middleware.config.d.ts.map +1 -0
- package/lib/core/src/config/middleware.config.js +68 -0
- package/lib/core/src/config/middleware.config.js.map +1 -0
- package/lib/core/src/config/tokens.config.d.ts +53 -0
- package/lib/core/src/config/tokens.config.d.ts.map +1 -0
- package/lib/core/src/config/tokens.config.js +129 -0
- package/lib/core/src/config/tokens.config.js.map +1 -0
- package/lib/core/src/generator/generator.d.ts +38 -0
- package/lib/core/src/generator/generator.d.ts.map +1 -0
- package/lib/core/src/generator/generator.js +159 -0
- package/lib/core/src/generator/generator.js.map +1 -0
- package/lib/core/src/generator/index.d.ts +7 -0
- package/lib/core/src/generator/index.d.ts.map +1 -0
- package/lib/core/src/generator/index.js +23 -0
- package/lib/core/src/generator/index.js.map +1 -0
- package/lib/core/src/generator/parser.d.ts +10 -0
- package/lib/core/src/generator/parser.d.ts.map +1 -0
- package/lib/core/src/generator/parser.js +197 -0
- package/lib/core/src/generator/parser.js.map +1 -0
- package/lib/core/src/generator/types.d.ts +112 -0
- package/lib/core/src/generator/types.d.ts.map +1 -0
- package/lib/core/src/generator/types.js +7 -0
- package/lib/core/src/generator/types.js.map +1 -0
- package/lib/core/src/index.d.ts +19 -0
- package/lib/core/src/index.d.ts.map +1 -0
- package/lib/core/src/index.js +46 -0
- package/lib/core/src/index.js.map +1 -0
- package/lib/core/src/middleware/auth.middleware.d.ts +57 -0
- package/lib/core/src/middleware/auth.middleware.d.ts.map +1 -0
- package/lib/core/src/middleware/auth.middleware.js +256 -0
- package/lib/core/src/middleware/auth.middleware.js.map +1 -0
- package/lib/core/src/middleware/cors.middleware.d.ts +13 -0
- package/lib/core/src/middleware/cors.middleware.d.ts.map +1 -0
- package/lib/core/src/middleware/cors.middleware.js +50 -0
- package/lib/core/src/middleware/cors.middleware.js.map +1 -0
- package/lib/core/src/middleware/error.middleware.d.ts +46 -0
- package/lib/core/src/middleware/error.middleware.d.ts.map +1 -0
- package/lib/core/src/middleware/error.middleware.js +174 -0
- package/lib/core/src/middleware/error.middleware.js.map +1 -0
- package/lib/core/src/middleware/index.d.ts +11 -0
- package/lib/core/src/middleware/index.d.ts.map +1 -0
- package/lib/core/src/middleware/index.js +27 -0
- package/lib/core/src/middleware/index.js.map +1 -0
- package/lib/core/src/middleware/logging.middleware.d.ts +10 -0
- package/lib/core/src/middleware/logging.middleware.d.ts.map +1 -0
- package/lib/core/src/middleware/logging.middleware.js +87 -0
- package/lib/core/src/middleware/logging.middleware.js.map +1 -0
- package/lib/core/src/middleware/rateLimit.middleware.d.ts +26 -0
- package/lib/core/src/middleware/rateLimit.middleware.d.ts.map +1 -0
- package/lib/core/src/middleware/rateLimit.middleware.js +105 -0
- package/lib/core/src/middleware/rateLimit.middleware.js.map +1 -0
- package/lib/core/src/middleware/requestId.middleware.d.ts +11 -0
- package/lib/core/src/middleware/requestId.middleware.d.ts.map +1 -0
- package/lib/core/src/middleware/requestId.middleware.js +26 -0
- package/lib/core/src/middleware/requestId.middleware.js.map +1 -0
- package/lib/core/src/middleware/validation.middleware.d.ts +25 -0
- package/lib/core/src/middleware/validation.middleware.d.ts.map +1 -0
- package/lib/core/src/middleware/validation.middleware.js +133 -0
- package/lib/core/src/middleware/validation.middleware.js.map +1 -0
- package/lib/core/src/types/errors.d.ts +119 -0
- package/lib/core/src/types/errors.d.ts.map +1 -0
- package/lib/core/src/types/errors.js +210 -0
- package/lib/core/src/types/errors.js.map +1 -0
- package/lib/utils-cache-connector/src/cache-connector.d.ts +139 -0
- package/lib/utils-cache-connector/src/cache-connector.d.ts.map +1 -0
- package/lib/utils-cache-connector/src/cache-connector.js +277 -0
- package/lib/utils-cache-connector/src/cache-connector.js.map +1 -0
- package/lib/utils-cache-connector/src/index.d.ts +52 -0
- package/lib/utils-cache-connector/src/index.d.ts.map +1 -0
- package/lib/utils-cache-connector/src/index.js +103 -0
- package/lib/utils-cache-connector/src/index.js.map +1 -0
- package/lib/utils-cache-connector/src/providers/base-cache-provider.d.ts +95 -0
- package/lib/utils-cache-connector/src/providers/base-cache-provider.d.ts.map +1 -0
- package/lib/utils-cache-connector/src/providers/base-cache-provider.js +120 -0
- package/lib/utils-cache-connector/src/providers/base-cache-provider.js.map +1 -0
- package/lib/utils-cache-connector/src/providers/firestore-cache-provider.d.ts +58 -0
- package/lib/utils-cache-connector/src/providers/firestore-cache-provider.d.ts.map +1 -0
- package/lib/utils-cache-connector/src/providers/firestore-cache-provider.js +418 -0
- package/lib/utils-cache-connector/src/providers/firestore-cache-provider.js.map +1 -0
- package/lib/utils-cache-connector/src/providers/memory-cache-provider.d.ts +57 -0
- package/lib/utils-cache-connector/src/providers/memory-cache-provider.d.ts.map +1 -0
- package/lib/utils-cache-connector/src/providers/memory-cache-provider.js +217 -0
- package/lib/utils-cache-connector/src/providers/memory-cache-provider.js.map +1 -0
- package/lib/utils-cache-connector/src/providers/noop-cache-provider.d.ts +21 -0
- package/lib/utils-cache-connector/src/providers/noop-cache-provider.d.ts.map +1 -0
- package/lib/utils-cache-connector/src/providers/noop-cache-provider.js +42 -0
- package/lib/utils-cache-connector/src/providers/noop-cache-provider.js.map +1 -0
- package/lib/utils-cache-connector/src/providers/redis-cache-provider.d.ts +64 -0
- package/lib/utils-cache-connector/src/providers/redis-cache-provider.d.ts.map +1 -0
- package/lib/utils-cache-connector/src/providers/redis-cache-provider.js +414 -0
- package/lib/utils-cache-connector/src/providers/redis-cache-provider.js.map +1 -0
- package/lib/utils-cache-connector/src/types.d.ts +342 -0
- package/lib/utils-cache-connector/src/types.d.ts.map +1 -0
- package/lib/utils-cache-connector/src/types.js +8 -0
- package/lib/utils-cache-connector/src/types.js.map +1 -0
- package/lib/utils-events/src/event-bus.d.ts +42 -0
- package/lib/utils-events/src/event-bus.d.ts.map +1 -0
- package/lib/utils-events/src/event-bus.js +93 -0
- package/lib/utils-events/src/event-bus.js.map +1 -0
- package/lib/utils-events/src/event-types.d.ts +146 -0
- package/lib/utils-events/src/event-types.d.ts.map +1 -0
- package/lib/utils-events/src/event-types.js +49 -0
- package/lib/utils-events/src/event-types.js.map +1 -0
- package/lib/utils-events/src/index.d.ts +7 -0
- package/lib/utils-events/src/index.d.ts.map +1 -0
- package/lib/utils-events/src/index.js +11 -0
- package/lib/utils-events/src/index.js.map +1 -0
- package/lib/utils-logger/src/index.d.ts +12 -0
- package/lib/utils-logger/src/index.d.ts.map +1 -0
- package/lib/utils-logger/src/index.js +29 -0
- package/lib/utils-logger/src/index.js.map +1 -0
- package/lib/utils-logger/src/logger-types.d.ts +32 -0
- package/lib/utils-logger/src/logger-types.d.ts.map +1 -0
- package/lib/utils-logger/src/logger-types.js +17 -0
- package/lib/utils-logger/src/logger-types.js.map +1 -0
- package/lib/utils-logger/src/logger.d.ts +42 -0
- package/lib/utils-logger/src/logger.d.ts.map +1 -0
- package/lib/utils-logger/src/logger.js +123 -0
- package/lib/utils-logger/src/logger.js.map +1 -0
- package/package.json +49 -0
- package/src/templates/controller.hbs +48 -0
- package/src/templates/entity.hbs +80 -0
- package/src/templates/repository.hbs +56 -0
- 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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"}
|