@zssz-soft/firebase-functions-shared 1.4.1 → 1.5.1
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/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/audit/audit.models.d.ts +158 -0
- package/lib/modules/audit/audit.models.d.ts.map +1 -0
- package/lib/modules/audit/audit.models.js +22 -0
- package/lib/modules/audit/audit.models.js.map +1 -0
- package/lib/modules/audit/audit.service.d.ts +126 -0
- package/lib/modules/audit/audit.service.d.ts.map +1 -0
- package/lib/modules/audit/audit.service.js +221 -0
- package/lib/modules/audit/audit.service.js.map +1 -0
- package/lib/modules/audit/index.d.ts +30 -0
- package/lib/modules/audit/index.d.ts.map +1 -0
- package/lib/modules/audit/index.js +46 -0
- package/lib/modules/audit/index.js.map +1 -0
- package/lib/modules/events/booking-event.handlers.d.ts.map +1 -1
- package/lib/modules/events/booking-event.handlers.js +47 -2
- package/lib/modules/events/booking-event.handlers.js.map +1 -1
- package/lib/modules/events/booking-event.triggers.d.ts.map +1 -1
- package/lib/modules/events/booking-event.triggers.js +28 -0
- package/lib/modules/events/booking-event.triggers.js.map +1 -1
- package/package.json +4 -2
package/lib/index.d.ts
CHANGED
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -31,4 +31,5 @@ __exportStar(require("./modules/booking"), exports);
|
|
|
31
31
|
__exportStar(require("./modules/events"), exports);
|
|
32
32
|
__exportStar(require("./modules/error-reporting"), exports);
|
|
33
33
|
__exportStar(require("./modules/health"), exports);
|
|
34
|
+
__exportStar(require("./modules/audit"), exports);
|
|
34
35
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;AAEH,2CAAyB;AACzB,sDAAoC;AACpC,kDAAgC;AAChC,oDAAkC;AAClC,iDAA+B;AAC/B,qDAAmC;AACnC,gDAA8B;AAC9B,oDAAkC;AAClC,mDAAiC;AACjC,4DAA0C;AAC1C,mDAAiC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;AAEH,2CAAyB;AACzB,sDAAoC;AACpC,kDAAgC;AAChC,oDAAkC;AAClC,iDAA+B;AAC/B,qDAAmC;AACnC,gDAA8B;AAC9B,oDAAkC;AAClC,mDAAiC;AACjC,4DAA0C;AAC1C,mDAAiC;AACjC,kDAAgC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-Side Audit Models
|
|
3
|
+
*
|
|
4
|
+
* Extends the core audit models with server-specific types and metadata.
|
|
5
|
+
* These models are used by Firebase Cloud Functions to track operations.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Server-specific audit metadata
|
|
9
|
+
* Extends the base AuditMetadata with Cloud Functions context
|
|
10
|
+
*/
|
|
11
|
+
export interface ServerAuditMetadata {
|
|
12
|
+
/** Cloud Function name */
|
|
13
|
+
functionName: string;
|
|
14
|
+
/** Cloud Function execution ID */
|
|
15
|
+
executionId?: string;
|
|
16
|
+
/** Cloud Function region */
|
|
17
|
+
region?: string;
|
|
18
|
+
/** Function revision/version */
|
|
19
|
+
revision?: string;
|
|
20
|
+
/** Trigger type (http, firestore, pubsub, eventarc, etc.) */
|
|
21
|
+
triggerType?: 'http' | 'firestore' | 'pubsub' | 'eventarc' | 'scheduler' | 'storage' | 'auth';
|
|
22
|
+
/** Document path for Firestore triggers */
|
|
23
|
+
documentPath?: string;
|
|
24
|
+
/** Event type for event-driven triggers */
|
|
25
|
+
eventType?: string;
|
|
26
|
+
/** Request information (for HTTP triggers) */
|
|
27
|
+
request?: {
|
|
28
|
+
method?: string;
|
|
29
|
+
url?: string;
|
|
30
|
+
ip?: string;
|
|
31
|
+
userAgent?: string;
|
|
32
|
+
origin?: string;
|
|
33
|
+
};
|
|
34
|
+
/** Performance metrics */
|
|
35
|
+
performance?: {
|
|
36
|
+
/** Duration in milliseconds */
|
|
37
|
+
durationMs?: number;
|
|
38
|
+
/** Memory usage in MB */
|
|
39
|
+
memoryMb?: number;
|
|
40
|
+
};
|
|
41
|
+
/** Additional custom metadata */
|
|
42
|
+
[key: string]: unknown;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Server-side audit log entry
|
|
46
|
+
*/
|
|
47
|
+
export interface ServerAuditLog {
|
|
48
|
+
/** Unique audit log ID (auto-generated) */
|
|
49
|
+
id?: string;
|
|
50
|
+
/** User ID who triggered the action (or 'system' for automated tasks) */
|
|
51
|
+
userId: string;
|
|
52
|
+
/** Action performed */
|
|
53
|
+
action: ServerAuditAction;
|
|
54
|
+
/** Resource affected by the action */
|
|
55
|
+
resource: ServerAuditResource;
|
|
56
|
+
/** Timestamp when action occurred (ISO string for Firestore) */
|
|
57
|
+
timestamp: string;
|
|
58
|
+
/** Server metadata */
|
|
59
|
+
metadata: ServerAuditMetadata;
|
|
60
|
+
/** Action result */
|
|
61
|
+
result: ServerAuditResult;
|
|
62
|
+
/** Additional context data */
|
|
63
|
+
context?: Record<string, unknown>;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Types of server-side actions that can be audited
|
|
67
|
+
*/
|
|
68
|
+
export type ServerAuditAction = 'data.create' | 'data.read' | 'data.update' | 'data.delete' | 'data.batch_create' | 'data.batch_update' | 'data.batch_delete' | 'email.send' | 'email.send_batch' | 'email.template_render' | 'user.create' | 'user.update' | 'user.delete' | 'user.role_change' | 'user.password_reset' | 'auth.user_created' | 'auth.user_deleted' | 'auth.user_disabled' | 'auth.email_verified' | 'booking.created' | 'booking.updated' | 'booking.status_changed' | 'booking.cancelled' | 'booking.confirmed' | 'booking.completed' | 'workflow.transition' | 'workflow.state_change' | 'event.published' | 'event.received' | 'event.processed' | 'system.bootstrap' | 'system.cleanup' | 'system.migration' | 'system.backup' | 'security.permission_denied' | 'security.unauthorized_access' | 'security.rate_limited' | 'storage.upload' | 'storage.delete' | 'storage.thumbnail_generated' | string;
|
|
69
|
+
/**
|
|
70
|
+
* Resource types that can be audited on the server
|
|
71
|
+
*/
|
|
72
|
+
export interface ServerAuditResource {
|
|
73
|
+
/** Type of resource (e.g., 'booking', 'user', 'apartment') */
|
|
74
|
+
type: string;
|
|
75
|
+
/** Resource identifier */
|
|
76
|
+
id?: string;
|
|
77
|
+
/** Firestore collection path */
|
|
78
|
+
collection?: string;
|
|
79
|
+
/** Parent resource if applicable */
|
|
80
|
+
parent?: {
|
|
81
|
+
type: string;
|
|
82
|
+
id: string;
|
|
83
|
+
};
|
|
84
|
+
/** Additional resource metadata */
|
|
85
|
+
metadata?: Record<string, unknown>;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Result of an audited action
|
|
89
|
+
*/
|
|
90
|
+
export interface ServerAuditResult {
|
|
91
|
+
/** Whether the action was successful */
|
|
92
|
+
success: boolean;
|
|
93
|
+
/** Status code or error code */
|
|
94
|
+
code?: string | number;
|
|
95
|
+
/** Human-readable message */
|
|
96
|
+
message?: string;
|
|
97
|
+
/** Error details if action failed */
|
|
98
|
+
error?: {
|
|
99
|
+
type: string;
|
|
100
|
+
message: string;
|
|
101
|
+
stack?: string;
|
|
102
|
+
};
|
|
103
|
+
/** Changes made (for update actions) */
|
|
104
|
+
changes?: {
|
|
105
|
+
before?: unknown;
|
|
106
|
+
after?: unknown;
|
|
107
|
+
fields?: string[];
|
|
108
|
+
};
|
|
109
|
+
/** Additional result data */
|
|
110
|
+
data?: unknown;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Configuration for the audit service
|
|
114
|
+
*/
|
|
115
|
+
export interface AuditConfig {
|
|
116
|
+
/** Firestore collection name for audit logs */
|
|
117
|
+
collection?: string;
|
|
118
|
+
/** Whether to enable audit logging (default: true) */
|
|
119
|
+
enabled?: boolean;
|
|
120
|
+
/** Default function name to use if not provided */
|
|
121
|
+
defaultFunctionName?: string;
|
|
122
|
+
/** Cloud Functions region */
|
|
123
|
+
region?: string;
|
|
124
|
+
/** Actions to skip (not audit) */
|
|
125
|
+
skipActions?: ServerAuditAction[];
|
|
126
|
+
/** Resource types to skip (not audit) */
|
|
127
|
+
skipResourceTypes?: string[];
|
|
128
|
+
/** Whether to include full error stack traces (default: false in production) */
|
|
129
|
+
includeStackTraces?: boolean;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Default audit configuration
|
|
133
|
+
*/
|
|
134
|
+
export declare const DEFAULT_AUDIT_CONFIG: Required<AuditConfig>;
|
|
135
|
+
/**
|
|
136
|
+
* Options for creating an audit log entry
|
|
137
|
+
*/
|
|
138
|
+
export interface AuditLogOptions {
|
|
139
|
+
/** User ID (defaults to 'system') */
|
|
140
|
+
userId?: string;
|
|
141
|
+
/** Action performed */
|
|
142
|
+
action: ServerAuditAction;
|
|
143
|
+
/** Resource being acted upon */
|
|
144
|
+
resource: ServerAuditResource;
|
|
145
|
+
/** Whether the action was successful */
|
|
146
|
+
success: boolean;
|
|
147
|
+
/** Optional result message */
|
|
148
|
+
message?: string;
|
|
149
|
+
/** Error if action failed */
|
|
150
|
+
error?: Error;
|
|
151
|
+
/** Changes made */
|
|
152
|
+
changes?: ServerAuditResult['changes'];
|
|
153
|
+
/** Additional context */
|
|
154
|
+
context?: Record<string, unknown>;
|
|
155
|
+
/** Performance timing */
|
|
156
|
+
durationMs?: number;
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=audit.models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.models.d.ts","sourceRoot":"","sources":["../../../src/modules/audit/audit.models.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Server-Side Audit Models
|
|
4
|
+
*
|
|
5
|
+
* Extends the core audit models with server-specific types and metadata.
|
|
6
|
+
* These models are used by Firebase Cloud Functions to track operations.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DEFAULT_AUDIT_CONFIG = void 0;
|
|
10
|
+
/**
|
|
11
|
+
* Default audit configuration
|
|
12
|
+
*/
|
|
13
|
+
exports.DEFAULT_AUDIT_CONFIG = {
|
|
14
|
+
collection: 'audit_logs',
|
|
15
|
+
enabled: true,
|
|
16
|
+
defaultFunctionName: 'unknown',
|
|
17
|
+
region: 'europe-west1',
|
|
18
|
+
skipActions: [],
|
|
19
|
+
skipResourceTypes: [],
|
|
20
|
+
includeStackTraces: process.env.NODE_ENV !== 'production',
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=audit.models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.models.js","sourceRoot":"","sources":["../../../src/modules/audit/audit.models.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAiOH;;GAEG;AACU,QAAA,oBAAoB,GAA0B;IACzD,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,IAAI;IACb,mBAAmB,EAAE,SAAS;IAC9B,MAAM,EAAE,cAAc;IACtB,WAAW,EAAE,EAAE;IACf,iBAAiB,EAAE,EAAE;IACrB,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;CAC1D,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-Side Audit Service
|
|
3
|
+
*
|
|
4
|
+
* Provides audit logging for Firebase Cloud Functions.
|
|
5
|
+
* Writes audit logs to Firestore with server-specific metadata.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const auditor = new ServerAuditService({ functionName: 'onBookingCreated' });
|
|
10
|
+
*
|
|
11
|
+
* // Log a successful operation
|
|
12
|
+
* await auditor.logSuccess({
|
|
13
|
+
* action: 'booking.created',
|
|
14
|
+
* resource: { type: 'booking', id: bookingId },
|
|
15
|
+
* userId: userId,
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* // Log a failed operation
|
|
19
|
+
* await auditor.logFailure({
|
|
20
|
+
* action: 'email.send',
|
|
21
|
+
* resource: { type: 'email', id: emailId },
|
|
22
|
+
* error: new Error('SMTP connection failed'),
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import { ServerAuditMetadata, AuditConfig, AuditLogOptions } from './audit.models';
|
|
27
|
+
/**
|
|
28
|
+
* Server-side audit service for Cloud Functions
|
|
29
|
+
*/
|
|
30
|
+
export declare class ServerAuditService {
|
|
31
|
+
private config;
|
|
32
|
+
private db;
|
|
33
|
+
private metadata;
|
|
34
|
+
constructor(options: {
|
|
35
|
+
functionName: string;
|
|
36
|
+
triggerType?: ServerAuditMetadata['triggerType'];
|
|
37
|
+
documentPath?: string;
|
|
38
|
+
eventType?: string;
|
|
39
|
+
config?: Partial<AuditConfig>;
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* Log a successful operation
|
|
43
|
+
*/
|
|
44
|
+
logSuccess(options: Omit<AuditLogOptions, 'success'>): Promise<string | null>;
|
|
45
|
+
/**
|
|
46
|
+
* Log a failed operation
|
|
47
|
+
*/
|
|
48
|
+
logFailure(options: Omit<AuditLogOptions, 'success'> & {
|
|
49
|
+
error: Error;
|
|
50
|
+
}): Promise<string | null>;
|
|
51
|
+
/**
|
|
52
|
+
* Log an audit entry
|
|
53
|
+
*/
|
|
54
|
+
log(options: AuditLogOptions): Promise<string | null>;
|
|
55
|
+
/**
|
|
56
|
+
* Log with HTTP request context
|
|
57
|
+
*/
|
|
58
|
+
withRequest(request: {
|
|
59
|
+
method?: string;
|
|
60
|
+
url?: string;
|
|
61
|
+
ip?: string;
|
|
62
|
+
userAgent?: string;
|
|
63
|
+
origin?: string;
|
|
64
|
+
}): ServerAuditService;
|
|
65
|
+
/**
|
|
66
|
+
* Add performance timing
|
|
67
|
+
*/
|
|
68
|
+
withPerformance(performance: {
|
|
69
|
+
durationMs?: number;
|
|
70
|
+
memoryMb?: number;
|
|
71
|
+
}): ServerAuditService;
|
|
72
|
+
/**
|
|
73
|
+
* Create the audit log object
|
|
74
|
+
*/
|
|
75
|
+
private createAuditLog;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Create an audit service for a specific function
|
|
79
|
+
*
|
|
80
|
+
* @param functionName - Name of the Cloud Function
|
|
81
|
+
* @param options - Additional options
|
|
82
|
+
* @returns ServerAuditService instance
|
|
83
|
+
*/
|
|
84
|
+
export declare function createAuditService(functionName: string, options?: {
|
|
85
|
+
triggerType?: ServerAuditMetadata['triggerType'];
|
|
86
|
+
documentPath?: string;
|
|
87
|
+
eventType?: string;
|
|
88
|
+
config?: Partial<AuditConfig>;
|
|
89
|
+
}): ServerAuditService;
|
|
90
|
+
/**
|
|
91
|
+
* Wrap an async function with automatic audit logging
|
|
92
|
+
*
|
|
93
|
+
* @param functionName - Name of the Cloud Function
|
|
94
|
+
* @param action - The action being performed
|
|
95
|
+
* @param resource - The resource being acted upon
|
|
96
|
+
* @param fn - The async function to wrap
|
|
97
|
+
* @returns Wrapped function with automatic audit logging
|
|
98
|
+
*/
|
|
99
|
+
export declare function withAuditLogging<T extends (...args: unknown[]) => Promise<unknown>>(functionName: string, action: AuditLogOptions['action'], resource: AuditLogOptions['resource'], fn: T, options?: {
|
|
100
|
+
userId?: string;
|
|
101
|
+
config?: Partial<AuditConfig>;
|
|
102
|
+
}): T;
|
|
103
|
+
/**
|
|
104
|
+
* Audit decorator for Firestore triggers
|
|
105
|
+
*
|
|
106
|
+
* Helper to create audit context from Firestore event data
|
|
107
|
+
*/
|
|
108
|
+
export declare function createFirestoreAuditContext(event: {
|
|
109
|
+
params: Record<string, string>;
|
|
110
|
+
data?: {
|
|
111
|
+
before?: {
|
|
112
|
+
data(): Record<string, unknown> | undefined;
|
|
113
|
+
};
|
|
114
|
+
after?: {
|
|
115
|
+
data(): Record<string, unknown> | undefined;
|
|
116
|
+
};
|
|
117
|
+
data(): Record<string, unknown> | undefined;
|
|
118
|
+
};
|
|
119
|
+
}): {
|
|
120
|
+
documentPath: string;
|
|
121
|
+
changes?: {
|
|
122
|
+
before?: Record<string, unknown>;
|
|
123
|
+
after?: Record<string, unknown>;
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=audit.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.service.d.ts","sourceRoot":"","sources":["../../../src/modules/audit/audit.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Server-Side Audit Service
|
|
4
|
+
*
|
|
5
|
+
* Provides audit logging for Firebase Cloud Functions.
|
|
6
|
+
* Writes audit logs to Firestore with server-specific metadata.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const auditor = new ServerAuditService({ functionName: 'onBookingCreated' });
|
|
11
|
+
*
|
|
12
|
+
* // Log a successful operation
|
|
13
|
+
* await auditor.logSuccess({
|
|
14
|
+
* action: 'booking.created',
|
|
15
|
+
* resource: { type: 'booking', id: bookingId },
|
|
16
|
+
* userId: userId,
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* // Log a failed operation
|
|
20
|
+
* await auditor.logFailure({
|
|
21
|
+
* action: 'email.send',
|
|
22
|
+
* resource: { type: 'email', id: emailId },
|
|
23
|
+
* error: new Error('SMTP connection failed'),
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.ServerAuditService = void 0;
|
|
29
|
+
exports.createAuditService = createAuditService;
|
|
30
|
+
exports.withAuditLogging = withAuditLogging;
|
|
31
|
+
exports.createFirestoreAuditContext = createFirestoreAuditContext;
|
|
32
|
+
const firestore_1 = require("firebase-admin/firestore");
|
|
33
|
+
const firebase_functions_1 = require("firebase-functions");
|
|
34
|
+
const audit_models_1 = require("./audit.models");
|
|
35
|
+
/**
|
|
36
|
+
* Server-side audit service for Cloud Functions
|
|
37
|
+
*/
|
|
38
|
+
class ServerAuditService {
|
|
39
|
+
constructor(options) {
|
|
40
|
+
this.config = Object.assign(Object.assign({}, audit_models_1.DEFAULT_AUDIT_CONFIG), options.config);
|
|
41
|
+
this.db = (0, firestore_1.getFirestore)();
|
|
42
|
+
// Build base metadata from Cloud Functions environment
|
|
43
|
+
this.metadata = {
|
|
44
|
+
functionName: options.functionName,
|
|
45
|
+
executionId: process.env.FUNCTION_SIGNATURE_TYPE
|
|
46
|
+
? `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`
|
|
47
|
+
: undefined,
|
|
48
|
+
region: this.config.region || process.env.FUNCTION_REGION,
|
|
49
|
+
revision: process.env.K_REVISION,
|
|
50
|
+
triggerType: options.triggerType,
|
|
51
|
+
documentPath: options.documentPath,
|
|
52
|
+
eventType: options.eventType,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Log a successful operation
|
|
57
|
+
*/
|
|
58
|
+
async logSuccess(options) {
|
|
59
|
+
return this.log(Object.assign(Object.assign({}, options), { success: true }));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Log a failed operation
|
|
63
|
+
*/
|
|
64
|
+
async logFailure(options) {
|
|
65
|
+
return this.log(Object.assign(Object.assign({}, options), { success: false }));
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Log an audit entry
|
|
69
|
+
*/
|
|
70
|
+
async log(options) {
|
|
71
|
+
if (!this.config.enabled) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
// Check if action or resource type should be skipped
|
|
75
|
+
if (this.config.skipActions.includes(options.action)) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
if (this.config.skipResourceTypes.includes(options.resource.type)) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
const auditLog = this.createAuditLog(options);
|
|
83
|
+
const docRef = await this.db.collection(this.config.collection).add(Object.assign(Object.assign({}, auditLog), { createdAt: firestore_1.FieldValue.serverTimestamp() }));
|
|
84
|
+
firebase_functions_1.logger.debug(`[Audit] Logged ${options.action} for ${options.resource.type}`, {
|
|
85
|
+
auditId: docRef.id,
|
|
86
|
+
action: options.action,
|
|
87
|
+
resourceType: options.resource.type,
|
|
88
|
+
resourceId: options.resource.id,
|
|
89
|
+
success: options.success,
|
|
90
|
+
});
|
|
91
|
+
return docRef.id;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
// Don't let audit failures break the main operation
|
|
95
|
+
firebase_functions_1.logger.error('[Audit] Failed to write audit log', {
|
|
96
|
+
error: error instanceof Error ? error.message : String(error),
|
|
97
|
+
action: options.action,
|
|
98
|
+
resource: options.resource,
|
|
99
|
+
});
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Log with HTTP request context
|
|
105
|
+
*/
|
|
106
|
+
withRequest(request) {
|
|
107
|
+
this.metadata.request = request;
|
|
108
|
+
return this;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Add performance timing
|
|
112
|
+
*/
|
|
113
|
+
withPerformance(performance) {
|
|
114
|
+
this.metadata.performance = performance;
|
|
115
|
+
return this;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Create the audit log object
|
|
119
|
+
*/
|
|
120
|
+
createAuditLog(options) {
|
|
121
|
+
const now = new Date().toISOString();
|
|
122
|
+
const auditLog = {
|
|
123
|
+
userId: options.userId || 'system',
|
|
124
|
+
action: options.action,
|
|
125
|
+
resource: options.resource,
|
|
126
|
+
timestamp: now,
|
|
127
|
+
metadata: Object.assign(Object.assign({}, this.metadata), (options.durationMs && {
|
|
128
|
+
performance: Object.assign(Object.assign({}, this.metadata.performance), { durationMs: options.durationMs }),
|
|
129
|
+
})),
|
|
130
|
+
result: {
|
|
131
|
+
success: options.success,
|
|
132
|
+
message: options.message,
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
// Add error details if present
|
|
136
|
+
if (options.error) {
|
|
137
|
+
auditLog.result.error = Object.assign({ type: options.error.name || 'Error', message: options.error.message }, (this.config.includeStackTraces && { stack: options.error.stack }));
|
|
138
|
+
}
|
|
139
|
+
// Add changes if present
|
|
140
|
+
if (options.changes) {
|
|
141
|
+
auditLog.result.changes = options.changes;
|
|
142
|
+
}
|
|
143
|
+
// Add context if present
|
|
144
|
+
if (options.context) {
|
|
145
|
+
auditLog.context = options.context;
|
|
146
|
+
}
|
|
147
|
+
return auditLog;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
exports.ServerAuditService = ServerAuditService;
|
|
151
|
+
/**
|
|
152
|
+
* Create an audit service for a specific function
|
|
153
|
+
*
|
|
154
|
+
* @param functionName - Name of the Cloud Function
|
|
155
|
+
* @param options - Additional options
|
|
156
|
+
* @returns ServerAuditService instance
|
|
157
|
+
*/
|
|
158
|
+
function createAuditService(functionName, options) {
|
|
159
|
+
return new ServerAuditService(Object.assign({ functionName }, options));
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Wrap an async function with automatic audit logging
|
|
163
|
+
*
|
|
164
|
+
* @param functionName - Name of the Cloud Function
|
|
165
|
+
* @param action - The action being performed
|
|
166
|
+
* @param resource - The resource being acted upon
|
|
167
|
+
* @param fn - The async function to wrap
|
|
168
|
+
* @returns Wrapped function with automatic audit logging
|
|
169
|
+
*/
|
|
170
|
+
function withAuditLogging(functionName, action, resource, fn, options) {
|
|
171
|
+
const auditor = createAuditService(functionName, { config: options === null || options === void 0 ? void 0 : options.config });
|
|
172
|
+
return (async (...args) => {
|
|
173
|
+
const startTime = Date.now();
|
|
174
|
+
try {
|
|
175
|
+
const result = await fn(...args);
|
|
176
|
+
const durationMs = Date.now() - startTime;
|
|
177
|
+
await auditor.logSuccess({
|
|
178
|
+
action,
|
|
179
|
+
resource,
|
|
180
|
+
userId: options === null || options === void 0 ? void 0 : options.userId,
|
|
181
|
+
durationMs,
|
|
182
|
+
context: { resultType: typeof result },
|
|
183
|
+
});
|
|
184
|
+
return result;
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
const durationMs = Date.now() - startTime;
|
|
188
|
+
await auditor.logFailure({
|
|
189
|
+
action,
|
|
190
|
+
resource,
|
|
191
|
+
userId: options === null || options === void 0 ? void 0 : options.userId,
|
|
192
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
193
|
+
durationMs,
|
|
194
|
+
});
|
|
195
|
+
throw error;
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Audit decorator for Firestore triggers
|
|
201
|
+
*
|
|
202
|
+
* Helper to create audit context from Firestore event data
|
|
203
|
+
*/
|
|
204
|
+
function createFirestoreAuditContext(event) {
|
|
205
|
+
var _a, _b;
|
|
206
|
+
const pathParts = Object.entries(event.params)
|
|
207
|
+
.map(([key, value]) => `${key}/${value}`)
|
|
208
|
+
.join('/');
|
|
209
|
+
const context = {
|
|
210
|
+
documentPath: pathParts,
|
|
211
|
+
};
|
|
212
|
+
// Extract before/after for update events
|
|
213
|
+
if (((_a = event.data) === null || _a === void 0 ? void 0 : _a.before) && ((_b = event.data) === null || _b === void 0 ? void 0 : _b.after)) {
|
|
214
|
+
context.changes = {
|
|
215
|
+
before: event.data.before.data(),
|
|
216
|
+
after: event.data.after.data(),
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
return context;
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=audit.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.service.js","sourceRoot":"","sources":["../../../src/modules/audit/audit.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-Side Audit Module
|
|
3
|
+
*
|
|
4
|
+
* Provides audit logging capabilities for Firebase Cloud Functions.
|
|
5
|
+
* Tracks operations, errors, and user actions in Firestore.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createAuditService, withAuditLogging } from '@zssz-soft/firebase-functions-shared';
|
|
10
|
+
*
|
|
11
|
+
* // Create an audit service for a function
|
|
12
|
+
* const auditor = createAuditService('onBookingCreated', {
|
|
13
|
+
* triggerType: 'firestore',
|
|
14
|
+
* documentPath: 'booking/{bookingId}',
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* // Log operations
|
|
18
|
+
* await auditor.logSuccess({
|
|
19
|
+
* action: 'booking.created',
|
|
20
|
+
* resource: { type: 'booking', id: bookingId },
|
|
21
|
+
* userId: userId,
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // Or use the wrapper for automatic logging
|
|
25
|
+
* const wrappedFn = withAuditLogging('processBooking', 'booking.created', { type: 'booking' }, myAsyncFn);
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export * from './audit.models';
|
|
29
|
+
export * from './audit.service';
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/audit/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Server-Side Audit Module
|
|
4
|
+
*
|
|
5
|
+
* Provides audit logging capabilities for Firebase Cloud Functions.
|
|
6
|
+
* Tracks operations, errors, and user actions in Firestore.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { createAuditService, withAuditLogging } from '@zssz-soft/firebase-functions-shared';
|
|
11
|
+
*
|
|
12
|
+
* // Create an audit service for a function
|
|
13
|
+
* const auditor = createAuditService('onBookingCreated', {
|
|
14
|
+
* triggerType: 'firestore',
|
|
15
|
+
* documentPath: 'booking/{bookingId}',
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* // Log operations
|
|
19
|
+
* await auditor.logSuccess({
|
|
20
|
+
* action: 'booking.created',
|
|
21
|
+
* resource: { type: 'booking', id: bookingId },
|
|
22
|
+
* userId: userId,
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // Or use the wrapper for automatic logging
|
|
26
|
+
* const wrappedFn = withAuditLogging('processBooking', 'booking.created', { type: 'booking' }, myAsyncFn);
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
30
|
+
if (k2 === undefined) k2 = k;
|
|
31
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
32
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
33
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
34
|
+
}
|
|
35
|
+
Object.defineProperty(o, k2, desc);
|
|
36
|
+
}) : (function(o, m, k, k2) {
|
|
37
|
+
if (k2 === undefined) k2 = k;
|
|
38
|
+
o[k2] = m[k];
|
|
39
|
+
}));
|
|
40
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
41
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
42
|
+
};
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
__exportStar(require("./audit.models"), exports);
|
|
45
|
+
__exportStar(require("./audit.service"), exports);
|
|
46
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/audit/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;;;;;;;;;;;;;;;;AAEH,iDAA+B;AAC/B,kDAAgC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"booking-event.handlers.d.ts","sourceRoot":"","sources":["../../../src/modules/events/booking-event.handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"booking-event.handlers.d.ts","sourceRoot":"","sources":["../../../src/modules/events/booking-event.handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAoBH,OAAO,EACL,kBAAkB,EAKnB,MAAM,wBAAwB,CAAC;AAwGhC;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM;IAqK/E;;;;;OAKG;;IAqBH;;;OAGG;;;;;;;EAmEN"}
|
|
@@ -17,6 +17,7 @@ const eventarc_1 = require("firebase-functions/v2/eventarc");
|
|
|
17
17
|
const email_service_1 = require("../email/email.service");
|
|
18
18
|
const email_validator_1 = require("../email/email.validator");
|
|
19
19
|
const error_reporting_1 = require("../error-reporting");
|
|
20
|
+
const audit_1 = require("../audit");
|
|
20
21
|
const booking_email_templates_1 = require("../booking/booking-email.templates");
|
|
21
22
|
const booking_event_models_1 = require("./booking-event.models");
|
|
22
23
|
/**
|
|
@@ -110,6 +111,10 @@ function getAdminEmail(booking, cfg) {
|
|
|
110
111
|
function createBookingEmailHandlers(config = {}) {
|
|
111
112
|
const cfg = Object.assign(Object.assign({}, booking_event_models_1.DEFAULT_BOOKING_EVENT_CONFIG), config);
|
|
112
113
|
const errorReporter = (0, error_reporting_1.createErrorReporter)('BookingEmailHandler');
|
|
114
|
+
const auditor = (0, audit_1.createAuditService)('BookingEmailHandler', {
|
|
115
|
+
triggerType: 'eventarc',
|
|
116
|
+
config: { region: cfg.region },
|
|
117
|
+
});
|
|
113
118
|
/**
|
|
114
119
|
* Send email using the email service
|
|
115
120
|
*/
|
|
@@ -133,7 +138,7 @@ function createBookingEmailHandlers(config = {}) {
|
|
|
133
138
|
* Handle a booking event and send appropriate notifications
|
|
134
139
|
*/
|
|
135
140
|
async function handleBookingEvent(eventType, payload) {
|
|
136
|
-
var _a, _b;
|
|
141
|
+
var _a, _b, _c;
|
|
137
142
|
const notificationConfig = NotificationMatrix[eventType];
|
|
138
143
|
if (!notificationConfig) {
|
|
139
144
|
firebase_functions_1.logger.info(`[EmailHandler] No notification config for event: ${eventType}`);
|
|
@@ -145,16 +150,33 @@ function createBookingEmailHandlers(config = {}) {
|
|
|
145
150
|
sendToGuest: notificationConfig.sendToGuest,
|
|
146
151
|
sendToAdmin: notificationConfig.sendToAdmin,
|
|
147
152
|
});
|
|
153
|
+
// Audit: Event received
|
|
154
|
+
await auditor.logSuccess({
|
|
155
|
+
action: 'event.received',
|
|
156
|
+
resource: { type: 'booking', id: bookingId, collection: cfg.bookingCollection },
|
|
157
|
+
context: { eventType, transitionId: (_b = payload.transition) === null || _b === void 0 ? void 0 : _b.transitionId },
|
|
158
|
+
});
|
|
148
159
|
// Send guest email
|
|
149
160
|
if (notificationConfig.sendToGuest && notificationConfig.guestTemplate) {
|
|
150
|
-
const guestEmail = (
|
|
161
|
+
const guestEmail = (_c = booking.guest) === null || _c === void 0 ? void 0 : _c.email;
|
|
151
162
|
if (guestEmail && (0, email_validator_1.validateEmail)(guestEmail)) {
|
|
152
163
|
try {
|
|
153
164
|
const success = await sendEmail(guestEmail, notificationConfig.guestTemplate, booking, context);
|
|
154
165
|
if (success) {
|
|
155
166
|
firebase_functions_1.logger.info(`[EmailHandler] Guest email sent for ${eventType}: ${bookingId}`);
|
|
167
|
+
await auditor.logSuccess({
|
|
168
|
+
action: 'email.send',
|
|
169
|
+
resource: { type: 'booking', id: bookingId, collection: cfg.bookingCollection },
|
|
170
|
+
context: { eventType, recipient: 'guest', email: guestEmail },
|
|
171
|
+
});
|
|
156
172
|
}
|
|
157
173
|
else {
|
|
174
|
+
await auditor.logFailure({
|
|
175
|
+
action: 'email.send',
|
|
176
|
+
resource: { type: 'booking', id: bookingId, collection: cfg.bookingCollection },
|
|
177
|
+
error: new Error('Email send returned false'),
|
|
178
|
+
context: { eventType, recipient: 'guest', email: guestEmail },
|
|
179
|
+
});
|
|
158
180
|
errorReporter.warn(new Error('Guest email send returned false'), {
|
|
159
181
|
requestId: bookingId,
|
|
160
182
|
metadata: { type: 'guest_email_failed', eventType, email: guestEmail },
|
|
@@ -162,6 +184,12 @@ function createBookingEmailHandlers(config = {}) {
|
|
|
162
184
|
}
|
|
163
185
|
}
|
|
164
186
|
catch (error) {
|
|
187
|
+
await auditor.logFailure({
|
|
188
|
+
action: 'email.send',
|
|
189
|
+
resource: { type: 'booking', id: bookingId, collection: cfg.bookingCollection },
|
|
190
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
191
|
+
context: { eventType, recipient: 'guest', email: guestEmail },
|
|
192
|
+
});
|
|
165
193
|
errorReporter.report(error, {
|
|
166
194
|
requestId: bookingId,
|
|
167
195
|
metadata: { type: 'guest_email_error', eventType, email: guestEmail },
|
|
@@ -182,8 +210,19 @@ function createBookingEmailHandlers(config = {}) {
|
|
|
182
210
|
const success = await sendEmail(adminEmail, notificationConfig.adminTemplate, booking, context);
|
|
183
211
|
if (success) {
|
|
184
212
|
firebase_functions_1.logger.info(`[EmailHandler] Admin email sent for ${eventType}: ${bookingId}`);
|
|
213
|
+
await auditor.logSuccess({
|
|
214
|
+
action: 'email.send',
|
|
215
|
+
resource: { type: 'booking', id: bookingId, collection: cfg.bookingCollection },
|
|
216
|
+
context: { eventType, recipient: 'admin', email: adminEmail },
|
|
217
|
+
});
|
|
185
218
|
}
|
|
186
219
|
else {
|
|
220
|
+
await auditor.logFailure({
|
|
221
|
+
action: 'email.send',
|
|
222
|
+
resource: { type: 'booking', id: bookingId, collection: cfg.bookingCollection },
|
|
223
|
+
error: new Error('Email send returned false'),
|
|
224
|
+
context: { eventType, recipient: 'admin', email: adminEmail },
|
|
225
|
+
});
|
|
187
226
|
errorReporter.warn(new Error('Admin email send returned false'), {
|
|
188
227
|
requestId: bookingId,
|
|
189
228
|
metadata: { type: 'admin_email_failed', eventType, email: adminEmail },
|
|
@@ -191,6 +230,12 @@ function createBookingEmailHandlers(config = {}) {
|
|
|
191
230
|
}
|
|
192
231
|
}
|
|
193
232
|
catch (error) {
|
|
233
|
+
await auditor.logFailure({
|
|
234
|
+
action: 'email.send',
|
|
235
|
+
resource: { type: 'booking', id: bookingId, collection: cfg.bookingCollection },
|
|
236
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
237
|
+
context: { eventType, recipient: 'admin', email: adminEmail },
|
|
238
|
+
});
|
|
194
239
|
errorReporter.report(error, {
|
|
195
240
|
requestId: bookingId,
|
|
196
241
|
metadata: { type: 'admin_email_error', eventType, email: adminEmail },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"booking-event.handlers.js","sourceRoot":"","sources":["../../../src/modules/events/booking-event.handlers.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;
|
|
1
|
+
{"version":3,"file":"booking-event.handlers.js","sourceRoot":"","sources":["../../../src/modules/events/booking-event.handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"booking-event.triggers.d.ts","sourceRoot":"","sources":["../../../src/modules/events/booking-event.triggers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"booking-event.triggers.d.ts","sourceRoot":"","sources":["../../../src/modules/events/booking-event.triggers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,EACL,kBAAkB,EAOnB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM;IA+F/E;;;;;;OAMG;;;;IA4CH;;;;;OAKG;;;;EA0DN"}
|
|
@@ -15,6 +15,7 @@ const firebase_functions_1 = require("firebase-functions");
|
|
|
15
15
|
const firestore_1 = require("firebase-functions/v2/firestore");
|
|
16
16
|
const eventarc_1 = require("firebase-admin/eventarc");
|
|
17
17
|
const error_reporting_1 = require("../error-reporting");
|
|
18
|
+
const audit_1 = require("../audit");
|
|
18
19
|
const booking_event_models_1 = require("./booking-event.models");
|
|
19
20
|
/**
|
|
20
21
|
* Create booking event publisher triggers
|
|
@@ -32,6 +33,10 @@ const booking_event_models_1 = require("./booking-event.models");
|
|
|
32
33
|
function createBookingEventTriggers(config = {}) {
|
|
33
34
|
const cfg = Object.assign(Object.assign({}, booking_event_models_1.DEFAULT_BOOKING_EVENT_CONFIG), config);
|
|
34
35
|
const errorReporter = (0, error_reporting_1.createErrorReporter)('BookingEventPublisher');
|
|
36
|
+
const auditor = (0, audit_1.createAuditService)('BookingEventPublisher', {
|
|
37
|
+
triggerType: 'firestore',
|
|
38
|
+
config: { region: cfg.region },
|
|
39
|
+
});
|
|
35
40
|
/**
|
|
36
41
|
* Publish a booking event to Eventarc
|
|
37
42
|
*/
|
|
@@ -48,8 +53,31 @@ function createBookingEventTriggers(config = {}) {
|
|
|
48
53
|
from: payload.transition.from,
|
|
49
54
|
to: payload.transition.to,
|
|
50
55
|
});
|
|
56
|
+
// Audit: Event published successfully
|
|
57
|
+
await auditor.logSuccess({
|
|
58
|
+
action: 'event.published',
|
|
59
|
+
resource: { type: 'booking', id: payload.bookingId, collection: cfg.bookingCollection },
|
|
60
|
+
userId: payload.transition.triggeredBy,
|
|
61
|
+
context: {
|
|
62
|
+
eventType,
|
|
63
|
+
transitionId: payload.transition.transitionId,
|
|
64
|
+
from: payload.transition.from,
|
|
65
|
+
to: payload.transition.to,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
51
68
|
}
|
|
52
69
|
catch (error) {
|
|
70
|
+
// Audit: Event publish failed
|
|
71
|
+
await auditor.logFailure({
|
|
72
|
+
action: 'event.published',
|
|
73
|
+
resource: { type: 'booking', id: payload.bookingId, collection: cfg.bookingCollection },
|
|
74
|
+
userId: payload.transition.triggeredBy,
|
|
75
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
76
|
+
context: {
|
|
77
|
+
eventType,
|
|
78
|
+
transitionId: payload.transition.transitionId,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
53
81
|
// Log but don't throw - we don't want to fail the Firestore operation
|
|
54
82
|
errorReporter.report(error, {
|
|
55
83
|
requestId: payload.bookingId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"booking-event.triggers.js","sourceRoot":"","sources":["../../../src/modules/events/booking-event.triggers.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;
|
|
1
|
+
{"version":3,"file":"booking-event.triggers.js","sourceRoot":"","sources":["../../../src/modules/events/booking-event.triggers.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AA+BH,gEAgNC;AA7OD,2DAA4C;AAC5C,+DAAuF;AACvF,sDAAsD;AACtD,wDAAyD;AACzD,oCAA8C;AAE9C,iEAQgC;AAEhC;;;;;;;;;;;;GAYG;AACH,SAAgB,0BAA0B,CAAC,SAAsC,EAAE;IACjF,MAAM,GAAG,mCAA4B,mDAA4B,GAAK,MAAM,CAAE,CAAC;IAC/E,MAAM,aAAa,GAAG,IAAA,qCAAmB,EAAC,uBAAuB,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,IAAA,0BAAkB,EAAC,uBAAuB,EAAE;QAC1D,WAAW,EAAE,WAAW;QACxB,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;KAC/B,CAAC,CAAC;IAEH;;OAEG;IACH,KAAK,UAAU,mBAAmB,CAChC,SAAiB,EACjB,OAA4B;QAE5B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAA,sBAAW,GAAE,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAExD,MAAM,OAAO,CAAC,OAAO,CAAC;gBACpB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,WAAW,OAAO,CAAC,SAAS,EAAE;gBACvC,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;YAEH,2BAAM,CAAC,IAAI,CAAC,4BAA4B,SAAS,gBAAgB,OAAO,CAAC,SAAS,EAAE,EAAE;gBACpF,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY;gBAC7C,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI;gBAC7B,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE;aAC1B,CAAC,CAAC;YAEH,sCAAsC;YACtC,MAAM,OAAO,CAAC,UAAU,CAAC;gBACvB,MAAM,EAAE,iBAAiB;gBACzB,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,iBAAiB,EAAE;gBACvF,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,WAAW;gBACtC,OAAO,EAAE;oBACP,SAAS;oBACT,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY;oBAC7C,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI;oBAC7B,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE;iBAC1B;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,8BAA8B;YAC9B,MAAM,OAAO,CAAC,UAAU,CAAC;gBACvB,MAAM,EAAE,iBAAiB;gBACzB,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,iBAAiB,EAAE;gBACvF,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,WAAW;gBACtC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChE,OAAO,EAAE;oBACP,SAAS;oBACT,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY;iBAC9C;aACF,CAAC,CAAC;YAEH,sEAAsE;YACtE,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE;gBAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,QAAQ,EAAE;oBACR,IAAI,EAAE,qBAAqB;oBAC3B,SAAS;oBACT,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY;iBAC9C;aACF,CAAC,CAAC;YACH,MAAM,KAAK,CAAC,CAAC,4BAA4B;QAC3C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,aAAa,CACpB,SAAiB,EACjB,OAAyB,EACzB,YAAoB,EACpB,IAAY,EACZ,EAAU;;QAEV,OAAO;YACL,SAAS;YACT,OAAO,kCAAO,OAAO,KAAE,GAAG,EAAE,SAAS,GAAE;YACvC,UAAU,EAAE;gBACV,YAAY;gBACZ,IAAI;gBACJ,EAAE;gBACF,WAAW,EACT,CAAA,MAAC,OAAe,CAAC,QAAQ,0CAAE,gBAAgB;qBAC3C,MAAC,OAAe,CAAC,IAAI,0CAAE,SAAS,CAAA;oBAChC,QAAQ;gBACV,WAAW,EAAE,CAAA,MAAC,OAAe,CAAC,QAAQ,0CAAE,gBAAgB,KAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACrF;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL;;;;;;WAMG;QACH,qBAAqB,EAAE,IAAA,6BAAiB,EACtC;YACE,QAAQ,EAAE,GAAG,GAAG,CAAC,iBAAiB,cAAc;YAChD,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,YAAY,EAAE,GAAG,CAAC,YAAY;SAC/B,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;;YACd,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;YACzC,MAAM,WAAW,GAAG,MAAA,KAAK,CAAC,IAAI,0CAAE,IAAI,EAAkC,CAAC;YAEvE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,2BAAM,CAAC,IAAI,CAAC,0CAA0C,SAAS,EAAE,CAAC,CAAC;gBACnE,OAAO;YACT,CAAC;YAED,MAAM,aAAa,GAAG,MAAA,WAAW,CAAC,QAAQ,0CAAE,YAAY,CAAC;YAEzD,uDAAuD;YACvD,IAAI,SAAS,GAAkB,IAAI,CAAC;YACpC,IAAI,YAAoB,CAAC;YAEzB,IAAI,aAAa,KAAK,kBAAkB,EAAE,CAAC;gBACzC,SAAS,GAAG,wCAAiB,CAAC,iBAAiB,CAAC;gBAChD,YAAY,GAAG,qBAAqB,CAAC;YACvC,CAAC;iBAAM,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;gBACzC,4CAA4C;gBAC5C,SAAS,GAAG,wCAAiB,CAAC,yBAAyB,CAAC;gBACxD,YAAY,GAAG,iBAAiB,CAAC;YACnC,CAAC;iBAAM,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;gBACrC,gDAAgD;gBAChD,2BAAM,CAAC,IAAI,CAAC,yCAAyC,SAAS,EAAE,CAAC,CAAC;gBAClE,OAAO;YACT,CAAC;iBAAM,CAAC;gBACN,2BAAM,CAAC,IAAI,CAAC,mCAAmC,SAAS,gBAAgB,aAAa,EAAE,CAAC,CAAC;gBACzF,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;YAE5F,MAAM,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC,CACF;QAED;;;;;WAKG;QACH,qBAAqB,EAAE,IAAA,6BAAiB,EACtC;YACE,QAAQ,EAAE,GAAG,GAAG,CAAC,iBAAiB,cAAc;YAChD,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,YAAY,EAAE,GAAG,CAAC,YAAY;SAC/B,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;;YACd,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;YACzC,MAAM,MAAM,GAAG,MAAA,KAAK,CAAC,IAAI,0CAAE,MAAM,CAAC,IAAI,EAAkC,CAAC;YACzE,MAAM,KAAK,GAAG,MAAA,KAAK,CAAC,IAAI,0CAAE,KAAK,CAAC,IAAI,EAAkC,CAAC;YAEvE,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;gBACtB,2BAAM,CAAC,IAAI,CAAC,wDAAwD,SAAS,EAAE,CAAC,CAAC;gBACjF,OAAO;YACT,CAAC;YAED,kCAAkC;YAClC,MAAM,WAAW,GAAG,MAAA,MAAM,CAAC,QAAQ,0CAAE,YAAY,CAAC;YAClD,MAAM,UAAU,GAAG,MAAA,KAAK,CAAC,QAAQ,0CAAE,YAAY,CAAC;YAEhD,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;gBAC9D,kCAAkC;gBAClC,OAAO;YACT,CAAC;YAED,2BAAM,CAAC,IAAI,CACT,4CAA4C,SAAS,KAAK,WAAW,MAAM,UAAU,EAAE,CACxF,CAAC;YAEF,wCAAwC;YACxC,MAAM,YAAY,GAAG,IAAA,wCAAiB,EAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YAEhE,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,2BAAM,CAAC,IAAI,CAAC,sCAAsC,WAAW,MAAM,UAAU,EAAE,CAAC,CAAC;gBACjF,OAAO;YACT,CAAC;YAED,qDAAqD;YACrD,IAAI,CAAC,IAAA,mCAAY,EAAC,YAAY,CAAC,EAAE,CAAC;gBAChC,2BAAM,CAAC,IAAI,CAAC,oCAAoC,YAAY,kBAAkB,CAAC,CAAC;gBAChF,OAAO;YACT,CAAC;YAED,qCAAqC;YACrC,MAAM,SAAS,GAAG,2CAAoB,CAAC,YAAY,CAAC,CAAC;YAErD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,2BAAM,CAAC,IAAI,CAAC,mDAAmD,YAAY,EAAE,CAAC,CAAC;gBAC/E,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;YAEvF,MAAM,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC,CACF;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zssz-soft/firebase-functions-shared",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"description": "Shared Firebase Cloud Functions modules for LodgeFlow applications",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -29,7 +29,9 @@
|
|
|
29
29
|
"authentication",
|
|
30
30
|
"permissions",
|
|
31
31
|
"security",
|
|
32
|
-
"rbac"
|
|
32
|
+
"rbac",
|
|
33
|
+
"audit",
|
|
34
|
+
"logging"
|
|
33
35
|
],
|
|
34
36
|
"author": "ZS-Soft <contact@zs-soft.hu>",
|
|
35
37
|
"license": "UNLICENSED",
|