@zssz-soft/firebase-functions-shared 1.3.0 → 1.4.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/config/app.config.d.ts +6 -0
- package/lib/config/app.config.d.ts.map +1 -1
- package/lib/config/app.config.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/modules/booking/booking-email.templates.d.ts +52 -0
- package/lib/modules/booking/booking-email.templates.d.ts.map +1 -1
- package/lib/modules/booking/booking-email.templates.js +768 -0
- package/lib/modules/booking/booking-email.templates.js.map +1 -1
- package/lib/modules/booking/booking-email.triggers.d.ts.map +1 -1
- package/lib/modules/booking/booking-email.triggers.js.map +1 -1
- package/lib/modules/events/booking-event.handlers.d.ts +44 -0
- package/lib/modules/events/booking-event.handlers.d.ts.map +1 -0
- package/lib/modules/events/booking-event.handlers.js +274 -0
- package/lib/modules/events/booking-event.handlers.js.map +1 -0
- package/lib/modules/events/booking-event.models.d.ts +109 -0
- package/lib/modules/events/booking-event.models.d.ts.map +1 -0
- package/lib/modules/events/booking-event.models.js +110 -0
- package/lib/modules/events/booking-event.models.js.map +1 -0
- package/lib/modules/events/booking-event.triggers.d.ts +46 -0
- package/lib/modules/events/booking-event.triggers.d.ts.map +1 -0
- package/lib/modules/events/booking-event.triggers.js +178 -0
- package/lib/modules/events/booking-event.triggers.js.map +1 -0
- package/lib/modules/events/event.models.d.ts +53 -0
- package/lib/modules/events/event.models.d.ts.map +1 -0
- package/lib/modules/events/event.models.js +18 -0
- package/lib/modules/events/event.models.js.map +1 -0
- package/lib/modules/events/index.d.ts +29 -0
- package/lib/modules/events/index.d.ts.map +1 -0
- package/lib/modules/events/index.js +49 -0
- package/lib/modules/events/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Booking Event Models
|
|
4
|
+
*
|
|
5
|
+
* Event types and payloads for booking workflow transitions.
|
|
6
|
+
* Used by Eventarc publishers and subscribers.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.SILENT_TRANSITIONS = exports.DEFAULT_BOOKING_EVENT_CONFIG = exports.StateChangeToTransitionMap = exports.TransitionToEventMap = exports.BookingEventTypes = void 0;
|
|
10
|
+
exports.shouldNotify = shouldNotify;
|
|
11
|
+
exports.inferTransitionId = inferTransitionId;
|
|
12
|
+
const booking_email_models_1 = require("../booking/booking-email.models");
|
|
13
|
+
/**
|
|
14
|
+
* All booking workflow transition event types
|
|
15
|
+
*
|
|
16
|
+
* Naming convention: com.lodgeflow.booking.{action}
|
|
17
|
+
*/
|
|
18
|
+
exports.BookingEventTypes = {
|
|
19
|
+
// Standard Workflow Events
|
|
20
|
+
/** draft → pending_approval: New booking submitted for approval */
|
|
21
|
+
BOOKING_SUBMITTED: 'com.lodgeflow.booking.submitted',
|
|
22
|
+
/** pending_approval → confirmed: Admin approved the booking */
|
|
23
|
+
BOOKING_APPROVED: 'com.lodgeflow.booking.approved',
|
|
24
|
+
/** confirmed → ready: All conditions met for check-in */
|
|
25
|
+
BOOKING_READY: 'com.lodgeflow.booking.ready',
|
|
26
|
+
/** pending_approval → cancelled: Admin rejected the booking */
|
|
27
|
+
BOOKING_REJECTED: 'com.lodgeflow.booking.rejected',
|
|
28
|
+
/** ready → completed: Guest checked out */
|
|
29
|
+
BOOKING_COMPLETED: 'com.lodgeflow.booking.completed',
|
|
30
|
+
/** confirmed/ready → cancelled: Admin cancelled the booking */
|
|
31
|
+
BOOKING_CANCELLED: 'com.lodgeflow.booking.cancelled',
|
|
32
|
+
/** pending_approval/confirmed → cancelled: User cancelled their booking */
|
|
33
|
+
BOOKING_USER_CANCELLED: 'com.lodgeflow.booking.user_cancelled',
|
|
34
|
+
// Express Workflow Events (VIP)
|
|
35
|
+
/** draft → confirmed: Instant VIP confirmation */
|
|
36
|
+
BOOKING_INSTANT_CONFIRMED: 'com.lodgeflow.booking.instant_confirmed',
|
|
37
|
+
/** VIP booking cancelled */
|
|
38
|
+
BOOKING_VIP_CANCELLED: 'com.lodgeflow.booking.vip_cancelled',
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Mapping from workflow transition IDs to event types
|
|
42
|
+
*
|
|
43
|
+
* Used to determine which event to publish based on the transition
|
|
44
|
+
*/
|
|
45
|
+
exports.TransitionToEventMap = {
|
|
46
|
+
// Standard workflow transitions
|
|
47
|
+
submit_for_approval: exports.BookingEventTypes.BOOKING_SUBMITTED,
|
|
48
|
+
approve_booking: exports.BookingEventTypes.BOOKING_APPROVED,
|
|
49
|
+
mark_ready: exports.BookingEventTypes.BOOKING_READY,
|
|
50
|
+
reject_booking: exports.BookingEventTypes.BOOKING_REJECTED,
|
|
51
|
+
complete_booking: exports.BookingEventTypes.BOOKING_COMPLETED,
|
|
52
|
+
cancel_ready_booking: exports.BookingEventTypes.BOOKING_CANCELLED,
|
|
53
|
+
cancel_confirmed_booking: exports.BookingEventTypes.BOOKING_CANCELLED,
|
|
54
|
+
user_cancel_pending: exports.BookingEventTypes.BOOKING_USER_CANCELLED,
|
|
55
|
+
user_cancel_confirmed: exports.BookingEventTypes.BOOKING_USER_CANCELLED,
|
|
56
|
+
// Express workflow transitions
|
|
57
|
+
instant_confirm: exports.BookingEventTypes.BOOKING_INSTANT_CONFIRMED,
|
|
58
|
+
cancel_vip_booking: exports.BookingEventTypes.BOOKING_VIP_CANCELLED,
|
|
59
|
+
// Draft cancellation - no event needed
|
|
60
|
+
// cancel_draft: null,
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Reverse mapping: state transitions to transition IDs
|
|
64
|
+
* Used when we only have before/after states
|
|
65
|
+
*/
|
|
66
|
+
exports.StateChangeToTransitionMap = {
|
|
67
|
+
draft: {
|
|
68
|
+
pending_approval: 'submit_for_approval',
|
|
69
|
+
confirmed: 'instant_confirm', // Express workflow
|
|
70
|
+
cancelled: 'cancel_draft',
|
|
71
|
+
},
|
|
72
|
+
pending_approval: {
|
|
73
|
+
confirmed: 'approve_booking',
|
|
74
|
+
cancelled: 'reject_booking', // Could also be user_cancel_pending
|
|
75
|
+
},
|
|
76
|
+
confirmed: {
|
|
77
|
+
ready: 'mark_ready',
|
|
78
|
+
cancelled: 'cancel_confirmed_booking', // Could also be user_cancel_confirmed
|
|
79
|
+
},
|
|
80
|
+
ready: {
|
|
81
|
+
completed: 'complete_booking',
|
|
82
|
+
cancelled: 'cancel_ready_booking',
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Default configuration for booking events
|
|
87
|
+
*/
|
|
88
|
+
exports.DEFAULT_BOOKING_EVENT_CONFIG = Object.assign(Object.assign({}, booking_email_models_1.DEFAULT_BOOKING_EMAIL_CONFIG), { eventChannel: 'firebase' });
|
|
89
|
+
/**
|
|
90
|
+
* Transitions that should NOT trigger email notifications
|
|
91
|
+
*/
|
|
92
|
+
exports.SILENT_TRANSITIONS = new Set(['cancel_draft']);
|
|
93
|
+
/**
|
|
94
|
+
* Check if a transition should trigger notifications
|
|
95
|
+
*/
|
|
96
|
+
function shouldNotify(transitionId) {
|
|
97
|
+
return !exports.SILENT_TRANSITIONS.has(transitionId);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Infer transition ID from state change
|
|
101
|
+
* Falls back to generic transition if exact match not found
|
|
102
|
+
*/
|
|
103
|
+
function inferTransitionId(fromState, toState) {
|
|
104
|
+
const transitions = exports.StateChangeToTransitionMap[fromState];
|
|
105
|
+
if (transitions && transitions[toState]) {
|
|
106
|
+
return transitions[toState];
|
|
107
|
+
}
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=booking-event.models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"booking-event.models.js","sourceRoot":"","sources":["../../../src/modules/events/booking-event.models.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AA2KH,oCAEC;AAMD,8CAMC;AAvLD,0EAIyC;AAEzC;;;;GAIG;AACU,QAAA,iBAAiB,GAAG;IAC/B,2BAA2B;IAC3B,mEAAmE;IACnE,iBAAiB,EAAE,iCAAiC;IAEpD,+DAA+D;IAC/D,gBAAgB,EAAE,gCAAgC;IAElD,yDAAyD;IACzD,aAAa,EAAE,6BAA6B;IAE5C,+DAA+D;IAC/D,gBAAgB,EAAE,gCAAgC;IAElD,2CAA2C;IAC3C,iBAAiB,EAAE,iCAAiC;IAEpD,+DAA+D;IAC/D,iBAAiB,EAAE,iCAAiC;IAEpD,2EAA2E;IAC3E,sBAAsB,EAAE,sCAAsC;IAE9D,gCAAgC;IAChC,kDAAkD;IAClD,yBAAyB,EAAE,yCAAyC;IAEpE,4BAA4B;IAC5B,qBAAqB,EAAE,qCAAqC;CACpD,CAAC;AAuDX;;;;GAIG;AACU,QAAA,oBAAoB,GAAqC;IACpE,gCAAgC;IAChC,mBAAmB,EAAE,yBAAiB,CAAC,iBAAiB;IACxD,eAAe,EAAE,yBAAiB,CAAC,gBAAgB;IACnD,UAAU,EAAE,yBAAiB,CAAC,aAAa;IAC3C,cAAc,EAAE,yBAAiB,CAAC,gBAAgB;IAClD,gBAAgB,EAAE,yBAAiB,CAAC,iBAAiB;IACrD,oBAAoB,EAAE,yBAAiB,CAAC,iBAAiB;IACzD,wBAAwB,EAAE,yBAAiB,CAAC,iBAAiB;IAC7D,mBAAmB,EAAE,yBAAiB,CAAC,sBAAsB;IAC7D,qBAAqB,EAAE,yBAAiB,CAAC,sBAAsB;IAE/D,+BAA+B;IAC/B,eAAe,EAAE,yBAAiB,CAAC,yBAAyB;IAC5D,kBAAkB,EAAE,yBAAiB,CAAC,qBAAqB;IAE3D,uCAAuC;IACvC,sBAAsB;CACvB,CAAC;AAEF;;;GAGG;AACU,QAAA,0BAA0B,GAA2C;IAChF,KAAK,EAAE;QACL,gBAAgB,EAAE,qBAAqB;QACvC,SAAS,EAAE,iBAAiB,EAAE,mBAAmB;QACjD,SAAS,EAAE,cAAc;KAC1B;IACD,gBAAgB,EAAE;QAChB,SAAS,EAAE,iBAAiB;QAC5B,SAAS,EAAE,gBAAgB,EAAE,oCAAoC;KAClE;IACD,SAAS,EAAE;QACT,KAAK,EAAE,YAAY;QACnB,SAAS,EAAE,0BAA0B,EAAE,sCAAsC;KAC9E;IACD,KAAK,EAAE;QACL,SAAS,EAAE,kBAAkB;QAC7B,SAAS,EAAE,sBAAsB;KAClC;CACF,CAAC;AAWF;;GAEG;AACU,QAAA,4BAA4B,mCACpC,mDAA4B,KAC/B,YAAY,EAAE,UAAU,IACxB;AAEF;;GAEG;AACU,QAAA,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AAE5D;;GAEG;AACH,SAAgB,YAAY,CAAC,YAAoB;IAC/C,OAAO,CAAC,0BAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,SAAiB,EAAE,OAAe;IAClE,MAAM,WAAW,GAAG,kCAA0B,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Booking Event Publisher Triggers
|
|
3
|
+
*
|
|
4
|
+
* Publishes CloudEvents to Eventarc when booking documents are created or updated.
|
|
5
|
+
* These events are consumed by subscriber handlers (email, audit, analytics).
|
|
6
|
+
*
|
|
7
|
+
* Architecture:
|
|
8
|
+
* - onDocumentCreated: Publishes BOOKING_SUBMITTED or BOOKING_INSTANT_CONFIRMED
|
|
9
|
+
* - onDocumentUpdated: Publishes events based on workflow state transitions
|
|
10
|
+
*/
|
|
11
|
+
import { BookingEventConfig } from './booking-event.models';
|
|
12
|
+
/**
|
|
13
|
+
* Create booking event publisher triggers
|
|
14
|
+
*
|
|
15
|
+
* @param config - Configuration options
|
|
16
|
+
* @returns Object containing trigger functions
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const triggers = createBookingEventTriggers({ region: 'europe-west1' });
|
|
21
|
+
* export const onBookingCreatedEvent = triggers.onBookingCreatedEvent;
|
|
22
|
+
* export const onBookingUpdatedEvent = triggers.onBookingUpdatedEvent;
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function createBookingEventTriggers(config?: Partial<BookingEventConfig>): {
|
|
26
|
+
/**
|
|
27
|
+
* Trigger when a new booking is created
|
|
28
|
+
*
|
|
29
|
+
* Publishes:
|
|
30
|
+
* - BOOKING_SUBMITTED: When workflow state is 'pending_approval' (user booking)
|
|
31
|
+
* - BOOKING_INSTANT_CONFIRMED: When workflow state is 'confirmed' (admin/VIP booking)
|
|
32
|
+
*/
|
|
33
|
+
onBookingCreatedEvent: import("firebase-functions").CloudFunction<import("firebase-functions/v2/firestore").FirestoreEvent<import("firebase-functions/v2/firestore").QueryDocumentSnapshot | undefined, {
|
|
34
|
+
bookingId: string;
|
|
35
|
+
}>>;
|
|
36
|
+
/**
|
|
37
|
+
* Trigger when a booking is updated
|
|
38
|
+
*
|
|
39
|
+
* Publishes events based on workflow state transitions.
|
|
40
|
+
* Only triggers when workflow.currentState changes.
|
|
41
|
+
*/
|
|
42
|
+
onBookingUpdatedEvent: import("firebase-functions").CloudFunction<import("firebase-functions/v2/firestore").FirestoreEvent<import("firebase-functions").Change<import("firebase-functions/v2/firestore").QueryDocumentSnapshot> | undefined, {
|
|
43
|
+
bookingId: string;
|
|
44
|
+
}>>;
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=booking-event.triggers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"booking-event.triggers.d.ts","sourceRoot":"","sources":["../../../src/modules/events/booking-event.triggers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,EACL,kBAAkB,EAOnB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM;IAkE/E;;;;;;OAMG;;;;IA4CH;;;;;OAKG;;;;EA0DN"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Booking Event Publisher Triggers
|
|
4
|
+
*
|
|
5
|
+
* Publishes CloudEvents to Eventarc when booking documents are created or updated.
|
|
6
|
+
* These events are consumed by subscriber handlers (email, audit, analytics).
|
|
7
|
+
*
|
|
8
|
+
* Architecture:
|
|
9
|
+
* - onDocumentCreated: Publishes BOOKING_SUBMITTED or BOOKING_INSTANT_CONFIRMED
|
|
10
|
+
* - onDocumentUpdated: Publishes events based on workflow state transitions
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.createBookingEventTriggers = createBookingEventTriggers;
|
|
14
|
+
const firebase_functions_1 = require("firebase-functions");
|
|
15
|
+
const firestore_1 = require("firebase-functions/v2/firestore");
|
|
16
|
+
const eventarc_1 = require("firebase-admin/eventarc");
|
|
17
|
+
const error_reporting_1 = require("../error-reporting");
|
|
18
|
+
const booking_event_models_1 = require("./booking-event.models");
|
|
19
|
+
/**
|
|
20
|
+
* Create booking event publisher triggers
|
|
21
|
+
*
|
|
22
|
+
* @param config - Configuration options
|
|
23
|
+
* @returns Object containing trigger functions
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const triggers = createBookingEventTriggers({ region: 'europe-west1' });
|
|
28
|
+
* export const onBookingCreatedEvent = triggers.onBookingCreatedEvent;
|
|
29
|
+
* export const onBookingUpdatedEvent = triggers.onBookingUpdatedEvent;
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
function createBookingEventTriggers(config = {}) {
|
|
33
|
+
const cfg = Object.assign(Object.assign({}, booking_event_models_1.DEFAULT_BOOKING_EVENT_CONFIG), config);
|
|
34
|
+
const errorReporter = (0, error_reporting_1.createErrorReporter)('BookingEventPublisher');
|
|
35
|
+
/**
|
|
36
|
+
* Publish a booking event to Eventarc
|
|
37
|
+
*/
|
|
38
|
+
async function publishBookingEvent(eventType, payload) {
|
|
39
|
+
try {
|
|
40
|
+
const channel = (0, eventarc_1.getEventarc)().channel(cfg.eventChannel);
|
|
41
|
+
await channel.publish({
|
|
42
|
+
type: eventType,
|
|
43
|
+
subject: `booking/${payload.bookingId}`,
|
|
44
|
+
data: payload,
|
|
45
|
+
});
|
|
46
|
+
firebase_functions_1.logger.info(`[BookingEvent] Published ${eventType} for booking ${payload.bookingId}`, {
|
|
47
|
+
transitionId: payload.transition.transitionId,
|
|
48
|
+
from: payload.transition.from,
|
|
49
|
+
to: payload.transition.to,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
// Log but don't throw - we don't want to fail the Firestore operation
|
|
54
|
+
errorReporter.report(error, {
|
|
55
|
+
requestId: payload.bookingId,
|
|
56
|
+
metadata: {
|
|
57
|
+
type: 'event_publish_error',
|
|
58
|
+
eventType,
|
|
59
|
+
transitionId: payload.transition.transitionId,
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
throw error; // Re-throw to trigger retry
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Create event payload from booking data
|
|
67
|
+
*/
|
|
68
|
+
function createPayload(bookingId, booking, transitionId, from, to) {
|
|
69
|
+
var _a, _b, _c;
|
|
70
|
+
return {
|
|
71
|
+
bookingId,
|
|
72
|
+
booking: Object.assign(Object.assign({}, booking), { uid: bookingId }),
|
|
73
|
+
transition: {
|
|
74
|
+
transitionId,
|
|
75
|
+
from,
|
|
76
|
+
to,
|
|
77
|
+
triggeredBy: ((_a = booking.workflow) === null || _a === void 0 ? void 0 : _a.lastTransitionBy) ||
|
|
78
|
+
((_b = booking.meta) === null || _b === void 0 ? void 0 : _b.createdBy) ||
|
|
79
|
+
'system',
|
|
80
|
+
triggeredAt: ((_c = booking.workflow) === null || _c === void 0 ? void 0 : _c.lastTransitionAt) || new Date().toISOString(),
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
/**
|
|
86
|
+
* Trigger when a new booking is created
|
|
87
|
+
*
|
|
88
|
+
* Publishes:
|
|
89
|
+
* - BOOKING_SUBMITTED: When workflow state is 'pending_approval' (user booking)
|
|
90
|
+
* - BOOKING_INSTANT_CONFIRMED: When workflow state is 'confirmed' (admin/VIP booking)
|
|
91
|
+
*/
|
|
92
|
+
onBookingCreatedEvent: (0, firestore_1.onDocumentCreated)({
|
|
93
|
+
document: `${cfg.bookingCollection}/{bookingId}`,
|
|
94
|
+
region: cfg.region,
|
|
95
|
+
maxInstances: cfg.maxInstances,
|
|
96
|
+
}, async (event) => {
|
|
97
|
+
var _a, _b;
|
|
98
|
+
const bookingId = event.params.bookingId;
|
|
99
|
+
const bookingData = (_a = event.data) === null || _a === void 0 ? void 0 : _a.data();
|
|
100
|
+
if (!bookingData) {
|
|
101
|
+
firebase_functions_1.logger.warn(`[BookingEvent] No data for new booking ${bookingId}`);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const workflowState = (_b = bookingData.workflow) === null || _b === void 0 ? void 0 : _b.currentState;
|
|
105
|
+
// Determine event type based on initial workflow state
|
|
106
|
+
let eventType = null;
|
|
107
|
+
let transitionId;
|
|
108
|
+
if (workflowState === 'pending_approval') {
|
|
109
|
+
eventType = booking_event_models_1.BookingEventTypes.BOOKING_SUBMITTED;
|
|
110
|
+
transitionId = 'submit_for_approval';
|
|
111
|
+
}
|
|
112
|
+
else if (workflowState === 'confirmed') {
|
|
113
|
+
// Express workflow or admin-created booking
|
|
114
|
+
eventType = booking_event_models_1.BookingEventTypes.BOOKING_INSTANT_CONFIRMED;
|
|
115
|
+
transitionId = 'instant_confirm';
|
|
116
|
+
}
|
|
117
|
+
else if (workflowState === 'draft') {
|
|
118
|
+
// Draft state - no event needed until submitted
|
|
119
|
+
firebase_functions_1.logger.info(`[BookingEvent] Skipping draft booking ${bookingId}`);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
firebase_functions_1.logger.info(`[BookingEvent] Skipping booking ${bookingId} with state: ${workflowState}`);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const payload = createPayload(bookingId, bookingData, transitionId, 'draft', workflowState);
|
|
127
|
+
await publishBookingEvent(eventType, payload);
|
|
128
|
+
}),
|
|
129
|
+
/**
|
|
130
|
+
* Trigger when a booking is updated
|
|
131
|
+
*
|
|
132
|
+
* Publishes events based on workflow state transitions.
|
|
133
|
+
* Only triggers when workflow.currentState changes.
|
|
134
|
+
*/
|
|
135
|
+
onBookingUpdatedEvent: (0, firestore_1.onDocumentUpdated)({
|
|
136
|
+
document: `${cfg.bookingCollection}/{bookingId}`,
|
|
137
|
+
region: cfg.region,
|
|
138
|
+
maxInstances: cfg.maxInstances,
|
|
139
|
+
}, async (event) => {
|
|
140
|
+
var _a, _b, _c, _d;
|
|
141
|
+
const bookingId = event.params.bookingId;
|
|
142
|
+
const before = (_a = event.data) === null || _a === void 0 ? void 0 : _a.before.data();
|
|
143
|
+
const after = (_b = event.data) === null || _b === void 0 ? void 0 : _b.after.data();
|
|
144
|
+
if (!before || !after) {
|
|
145
|
+
firebase_functions_1.logger.warn(`[BookingEvent] Missing before/after data for booking ${bookingId}`);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
// Check for workflow state change
|
|
149
|
+
const stateBefore = (_c = before.workflow) === null || _c === void 0 ? void 0 : _c.currentState;
|
|
150
|
+
const stateAfter = (_d = after.workflow) === null || _d === void 0 ? void 0 : _d.currentState;
|
|
151
|
+
if (!stateBefore || !stateAfter || stateBefore === stateAfter) {
|
|
152
|
+
// No workflow state change - skip
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
firebase_functions_1.logger.info(`[BookingEvent] State change detected for ${bookingId}: ${stateBefore} → ${stateAfter}`);
|
|
156
|
+
// Infer transition ID from state change
|
|
157
|
+
const transitionId = (0, booking_event_models_1.inferTransitionId)(stateBefore, stateAfter);
|
|
158
|
+
if (!transitionId) {
|
|
159
|
+
firebase_functions_1.logger.warn(`[BookingEvent] Unknown transition: ${stateBefore} → ${stateAfter}`);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
// Check if this transition should send notifications
|
|
163
|
+
if (!(0, booking_event_models_1.shouldNotify)(transitionId)) {
|
|
164
|
+
firebase_functions_1.logger.info(`[BookingEvent] Silent transition ${transitionId}, skipping event`);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
// Get event type for this transition
|
|
168
|
+
const eventType = booking_event_models_1.TransitionToEventMap[transitionId];
|
|
169
|
+
if (!eventType) {
|
|
170
|
+
firebase_functions_1.logger.warn(`[BookingEvent] No event mapping for transition: ${transitionId}`);
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const payload = createPayload(bookingId, after, transitionId, stateBefore, stateAfter);
|
|
174
|
+
await publishBookingEvent(eventType, payload);
|
|
175
|
+
}),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=booking-event.triggers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"booking-event.triggers.js","sourceRoot":"","sources":["../../../src/modules/events/booking-event.triggers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Event Models for LodgeFlow Eventarc Integration
|
|
3
|
+
*
|
|
4
|
+
* CloudEvents specification v1.0 compliant event types for
|
|
5
|
+
* the event-driven notification architecture.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Base CloudEvent structure for LodgeFlow events
|
|
9
|
+
* Follows CloudEvents specification v1.0
|
|
10
|
+
* @see https://cloudevents.io/
|
|
11
|
+
*/
|
|
12
|
+
export interface LodgeFlowCloudEvent<T = unknown> {
|
|
13
|
+
/** CloudEvents specification version */
|
|
14
|
+
specversion: '1.0';
|
|
15
|
+
/** Event type identifier (e.g., 'com.lodgeflow.booking.approved') */
|
|
16
|
+
type: string;
|
|
17
|
+
/** Event source identifier */
|
|
18
|
+
source: string;
|
|
19
|
+
/** Unique event ID */
|
|
20
|
+
id: string;
|
|
21
|
+
/** Event timestamp in ISO 8601 format */
|
|
22
|
+
time?: string;
|
|
23
|
+
/** Subject of the event (e.g., 'booking/abc123') */
|
|
24
|
+
subject?: string;
|
|
25
|
+
/** Content type of the data field */
|
|
26
|
+
datacontenttype?: 'application/json';
|
|
27
|
+
/** Event payload */
|
|
28
|
+
data: T;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Event categories for routing and filtering
|
|
32
|
+
*/
|
|
33
|
+
export type EventCategory = 'booking' | 'user' | 'payment' | 'system';
|
|
34
|
+
/**
|
|
35
|
+
* Event severity levels for alerting
|
|
36
|
+
*/
|
|
37
|
+
export type EventSeverity = 'info' | 'warning' | 'critical';
|
|
38
|
+
/**
|
|
39
|
+
* Base configuration for event triggers
|
|
40
|
+
*/
|
|
41
|
+
export interface EventTriggerConfig {
|
|
42
|
+
/** Cloud Functions deployment region */
|
|
43
|
+
region: string;
|
|
44
|
+
/** Eventarc channel name (default: 'firebase') */
|
|
45
|
+
eventChannel: string;
|
|
46
|
+
/** Maximum number of concurrent function instances */
|
|
47
|
+
maxInstances?: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Default event trigger configuration
|
|
51
|
+
*/
|
|
52
|
+
export declare const DEFAULT_EVENT_TRIGGER_CONFIG: EventTriggerConfig;
|
|
53
|
+
//# sourceMappingURL=event.models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.models.d.ts","sourceRoot":"","sources":["../../../src/modules/events/event.models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC,GAAG,OAAO;IAC9C,wCAAwC;IACxC,WAAW,EAAE,KAAK,CAAC;IAEnB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IAEb,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IAEf,sBAAsB;IACtB,EAAE,EAAE,MAAM,CAAC;IAEX,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qCAAqC;IACrC,eAAe,CAAC,EAAE,kBAAkB,CAAC;IAErC,oBAAoB;IACpB,IAAI,EAAE,CAAC,CAAC;CACT;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEtE;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IAEf,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IAErB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,kBAI1C,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Base Event Models for LodgeFlow Eventarc Integration
|
|
4
|
+
*
|
|
5
|
+
* CloudEvents specification v1.0 compliant event types for
|
|
6
|
+
* the event-driven notification architecture.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DEFAULT_EVENT_TRIGGER_CONFIG = void 0;
|
|
10
|
+
/**
|
|
11
|
+
* Default event trigger configuration
|
|
12
|
+
*/
|
|
13
|
+
exports.DEFAULT_EVENT_TRIGGER_CONFIG = {
|
|
14
|
+
region: 'europe-west1',
|
|
15
|
+
eventChannel: 'firebase',
|
|
16
|
+
maxInstances: 10,
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=event.models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.models.js","sourceRoot":"","sources":["../../../src/modules/events/event.models.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAyDH;;GAEG;AACU,QAAA,4BAA4B,GAAuB;IAC9D,MAAM,EAAE,cAAc;IACtB,YAAY,EAAE,UAAU;IACxB,YAAY,EAAE,EAAE;CACjB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Events Module
|
|
3
|
+
*
|
|
4
|
+
* Provides Eventarc-based event-driven architecture for the booking system.
|
|
5
|
+
*
|
|
6
|
+
* Architecture:
|
|
7
|
+
* - Publishers: Firestore triggers that emit CloudEvents to Eventarc
|
|
8
|
+
* - Subscribers: Event handlers that process events (email, audit, etc.)
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import {
|
|
13
|
+
* createBookingEventTriggers,
|
|
14
|
+
* createBookingEmailHandlers,
|
|
15
|
+
* } from '@zssz-soft/firebase-functions-shared';
|
|
16
|
+
*
|
|
17
|
+
* const triggers = createBookingEventTriggers({ region: 'europe-west1' });
|
|
18
|
+
* const handlers = createBookingEmailHandlers({ region: 'europe-west1' });
|
|
19
|
+
*
|
|
20
|
+
* export const onBookingCreatedEvent = triggers.onBookingCreatedEvent;
|
|
21
|
+
* export const onBookingUpdatedEvent = triggers.onBookingUpdatedEvent;
|
|
22
|
+
* export const onBookingEmailHandler = handlers.onBookingEvent;
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export * from './event.models';
|
|
26
|
+
export * from './booking-event.models';
|
|
27
|
+
export * from './booking-event.triggers';
|
|
28
|
+
export * from './booking-event.handlers';
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/events/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,cAAc,gBAAgB,CAAC;AAG/B,cAAc,wBAAwB,CAAC;AAGvC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Events Module
|
|
4
|
+
*
|
|
5
|
+
* Provides Eventarc-based event-driven architecture for the booking system.
|
|
6
|
+
*
|
|
7
|
+
* Architecture:
|
|
8
|
+
* - Publishers: Firestore triggers that emit CloudEvents to Eventarc
|
|
9
|
+
* - Subscribers: Event handlers that process events (email, audit, etc.)
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import {
|
|
14
|
+
* createBookingEventTriggers,
|
|
15
|
+
* createBookingEmailHandlers,
|
|
16
|
+
* } from '@zssz-soft/firebase-functions-shared';
|
|
17
|
+
*
|
|
18
|
+
* const triggers = createBookingEventTriggers({ region: 'europe-west1' });
|
|
19
|
+
* const handlers = createBookingEmailHandlers({ region: 'europe-west1' });
|
|
20
|
+
*
|
|
21
|
+
* export const onBookingCreatedEvent = triggers.onBookingCreatedEvent;
|
|
22
|
+
* export const onBookingUpdatedEvent = triggers.onBookingUpdatedEvent;
|
|
23
|
+
* export const onBookingEmailHandler = handlers.onBookingEvent;
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
27
|
+
if (k2 === undefined) k2 = k;
|
|
28
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
29
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
30
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
31
|
+
}
|
|
32
|
+
Object.defineProperty(o, k2, desc);
|
|
33
|
+
}) : (function(o, m, k, k2) {
|
|
34
|
+
if (k2 === undefined) k2 = k;
|
|
35
|
+
o[k2] = m[k];
|
|
36
|
+
}));
|
|
37
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
38
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
39
|
+
};
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
// Base event models
|
|
42
|
+
__exportStar(require("./event.models"), exports);
|
|
43
|
+
// Booking event models and types
|
|
44
|
+
__exportStar(require("./booking-event.models"), exports);
|
|
45
|
+
// Booking event publishers (Firestore → Eventarc)
|
|
46
|
+
__exportStar(require("./booking-event.triggers"), exports);
|
|
47
|
+
// Booking event handlers (Eventarc → Email)
|
|
48
|
+
__exportStar(require("./booking-event.handlers"), exports);
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/events/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;;;;;;;;;;;;;;AAEH,oBAAoB;AACpB,iDAA+B;AAE/B,iCAAiC;AACjC,yDAAuC;AAEvC,kDAAkD;AAClD,2DAAyC;AAEzC,4CAA4C;AAC5C,2DAAyC"}
|