@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,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Firestore Configuration
|
|
3
|
+
*
|
|
4
|
+
* Multi-database Firestore setup. Customize the DatabaseName type and
|
|
5
|
+
* FIRESTORE_CONFIG map to match your application's database structure.
|
|
6
|
+
*
|
|
7
|
+
* The boilerplate ships with two databases (main + analytics) as a
|
|
8
|
+
* starting point. Add or remove databases to fit your domain:
|
|
9
|
+
*
|
|
10
|
+
* 1. Add the name to the DatabaseName union type.
|
|
11
|
+
* 2. Add the config entry to FIRESTORE_CONFIG.
|
|
12
|
+
* 3. Add the matching env var to .env (the setup wizard handles the
|
|
13
|
+
* two defaults automatically).
|
|
14
|
+
*
|
|
15
|
+
* For single-database mode, set every firestoreName to "(default)".
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Database names — extend this type as your project grows.
|
|
19
|
+
*/
|
|
20
|
+
export type DatabaseName = 'main' | 'analytics';
|
|
21
|
+
/**
|
|
22
|
+
* Database configuration interface
|
|
23
|
+
*/
|
|
24
|
+
export interface FirestoreDatabaseConfig {
|
|
25
|
+
/** Firestore database name (for named databases in production) */
|
|
26
|
+
firestoreName: string;
|
|
27
|
+
/** Collections that exist in this database */
|
|
28
|
+
collections: string[];
|
|
29
|
+
/** Whether this database should be available in emulator mode */
|
|
30
|
+
emulatorSupport: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Firestore configuration type
|
|
34
|
+
*/
|
|
35
|
+
export type FirestoreConfig = {
|
|
36
|
+
[K in DatabaseName]: FirestoreDatabaseConfig;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Firestore configuration.
|
|
40
|
+
*
|
|
41
|
+
* Collections listed here are framework-level only. Entity-specific
|
|
42
|
+
* collections are created by the code generator via repository classes.
|
|
43
|
+
*/
|
|
44
|
+
export declare const FIRESTORE_CONFIG: FirestoreConfig;
|
|
45
|
+
/**
|
|
46
|
+
* Get Firestore database name
|
|
47
|
+
*/
|
|
48
|
+
export declare function getFirestoreDatabaseName(database: DatabaseName): string;
|
|
49
|
+
/**
|
|
50
|
+
* Get collections for a database
|
|
51
|
+
*/
|
|
52
|
+
export declare function getDatabaseCollections(database: DatabaseName): string[];
|
|
53
|
+
/**
|
|
54
|
+
* Check if database supports emulator
|
|
55
|
+
*/
|
|
56
|
+
export declare function isDatabaseEmulatorSupported(database: DatabaseName): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Validate Firestore configuration
|
|
59
|
+
*/
|
|
60
|
+
export declare function validateFirestoreConfig(): void;
|
|
61
|
+
//# sourceMappingURL=firestore.config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firestore.config.d.ts","sourceRoot":"","sources":["../../../../src/config/firestore.config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,WAAW,CAAC;AAEhB;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iEAAiE;IACjE,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;KAC3B,CAAC,IAAI,YAAY,GAAG,uBAAuB;CAC7C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAW9B,CAAC;AAEF;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAEvE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE,CAEvE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAE3E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAY9C"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Firestore Configuration
|
|
4
|
+
*
|
|
5
|
+
* Multi-database Firestore setup. Customize the DatabaseName type and
|
|
6
|
+
* FIRESTORE_CONFIG map to match your application's database structure.
|
|
7
|
+
*
|
|
8
|
+
* The boilerplate ships with two databases (main + analytics) as a
|
|
9
|
+
* starting point. Add or remove databases to fit your domain:
|
|
10
|
+
*
|
|
11
|
+
* 1. Add the name to the DatabaseName union type.
|
|
12
|
+
* 2. Add the config entry to FIRESTORE_CONFIG.
|
|
13
|
+
* 3. Add the matching env var to .env (the setup wizard handles the
|
|
14
|
+
* two defaults automatically).
|
|
15
|
+
*
|
|
16
|
+
* For single-database mode, set every firestoreName to "(default)".
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.FIRESTORE_CONFIG = void 0;
|
|
20
|
+
exports.getFirestoreDatabaseName = getFirestoreDatabaseName;
|
|
21
|
+
exports.getDatabaseCollections = getDatabaseCollections;
|
|
22
|
+
exports.isDatabaseEmulatorSupported = isDatabaseEmulatorSupported;
|
|
23
|
+
exports.validateFirestoreConfig = validateFirestoreConfig;
|
|
24
|
+
/**
|
|
25
|
+
* Firestore configuration.
|
|
26
|
+
*
|
|
27
|
+
* Collections listed here are framework-level only. Entity-specific
|
|
28
|
+
* collections are created by the code generator via repository classes.
|
|
29
|
+
*/
|
|
30
|
+
exports.FIRESTORE_CONFIG = {
|
|
31
|
+
main: {
|
|
32
|
+
firestoreName: process.env.MAIN_DATABASE_ID || '(default)',
|
|
33
|
+
collections: ['sessions', 'token_blacklist', 'audit_logs'],
|
|
34
|
+
emulatorSupport: true,
|
|
35
|
+
},
|
|
36
|
+
analytics: {
|
|
37
|
+
firestoreName: process.env.ANALYTICS_DATABASE_ID || 'analytics',
|
|
38
|
+
collections: [],
|
|
39
|
+
emulatorSupport: true,
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Get Firestore database name
|
|
44
|
+
*/
|
|
45
|
+
function getFirestoreDatabaseName(database) {
|
|
46
|
+
return exports.FIRESTORE_CONFIG[database].firestoreName;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get collections for a database
|
|
50
|
+
*/
|
|
51
|
+
function getDatabaseCollections(database) {
|
|
52
|
+
return exports.FIRESTORE_CONFIG[database].collections;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Check if database supports emulator
|
|
56
|
+
*/
|
|
57
|
+
function isDatabaseEmulatorSupported(database) {
|
|
58
|
+
return exports.FIRESTORE_CONFIG[database].emulatorSupport;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Validate Firestore configuration
|
|
62
|
+
*/
|
|
63
|
+
function validateFirestoreConfig() {
|
|
64
|
+
const errors = [];
|
|
65
|
+
Object.entries(exports.FIRESTORE_CONFIG).forEach(([dbName, config]) => {
|
|
66
|
+
if (!config.firestoreName) {
|
|
67
|
+
errors.push(`Firestore name is required for database: ${dbName}`);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
if (errors.length > 0) {
|
|
71
|
+
throw new Error(`Firestore configuration validation failed:\n${errors.join('\n')}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=firestore.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firestore.config.js","sourceRoot":"","sources":["../../../../src/config/firestore.config.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAkDH,4DAEC;AAKD,wDAEC;AAKD,kEAEC;AAKD,0DAYC;AAvDD;;;;;GAKG;AACU,QAAA,gBAAgB,GAAoB;IAC/C,IAAI,EAAE;QACJ,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,WAAW;QAC1D,WAAW,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,YAAY,CAAC;QAC1D,eAAe,EAAE,IAAI;KACtB;IACD,SAAS,EAAE;QACT,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,WAAW;QAC/D,WAAW,EAAE,EAAE;QACf,eAAe,EAAE,IAAI;KACtB;CACF,CAAC;AAEF;;GAEG;AACH,SAAgB,wBAAwB,CAAC,QAAsB;IAC7D,OAAO,wBAAgB,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CAAC,QAAsB;IAC3D,OAAO,wBAAgB,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B,CAAC,QAAsB;IAChE,OAAO,wBAAgB,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB;IACrC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,MAAM,CAAC,OAAO,CAAC,wBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE;QAC5D,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,4CAA4C,MAAM,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,+CAA+C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration barrel export
|
|
3
|
+
* Single entry point for all configuration
|
|
4
|
+
*/
|
|
5
|
+
export * from './app.config';
|
|
6
|
+
export * from './database.config';
|
|
7
|
+
export * from './auth.config';
|
|
8
|
+
export * from './middleware.config';
|
|
9
|
+
export * from './communications.config';
|
|
10
|
+
export * from './cache.config';
|
|
11
|
+
/**
|
|
12
|
+
* Validate all configuration on startup
|
|
13
|
+
*/
|
|
14
|
+
export declare function validateAllConfig(): void;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAO/B;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration barrel export
|
|
4
|
+
* Single entry point for all configuration
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
18
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.validateAllConfig = validateAllConfig;
|
|
22
|
+
__exportStar(require("./app.config"), exports);
|
|
23
|
+
__exportStar(require("./database.config"), exports);
|
|
24
|
+
__exportStar(require("./auth.config"), exports);
|
|
25
|
+
__exportStar(require("./middleware.config"), exports);
|
|
26
|
+
__exportStar(require("./communications.config"), exports);
|
|
27
|
+
__exportStar(require("./cache.config"), exports);
|
|
28
|
+
const app_config_1 = require("./app.config");
|
|
29
|
+
const auth_config_1 = require("./auth.config");
|
|
30
|
+
const communications_config_1 = require("./communications.config");
|
|
31
|
+
const cache_config_1 = require("./cache.config");
|
|
32
|
+
/**
|
|
33
|
+
* Validate all configuration on startup
|
|
34
|
+
*/
|
|
35
|
+
function validateAllConfig() {
|
|
36
|
+
(0, app_config_1.validateAppConfig)();
|
|
37
|
+
(0, auth_config_1.validateAuthConfig)();
|
|
38
|
+
(0, communications_config_1.validateCommunicationsConfig)();
|
|
39
|
+
(0, cache_config_1.validateCacheConfig)();
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/config/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAiBH,8CAKC;AApBD,+CAA6B;AAC7B,oDAAkC;AAClC,gDAA8B;AAC9B,sDAAoC;AACpC,0DAAwC;AACxC,iDAA+B;AAE/B,6CAAiD;AACjD,+CAAmD;AACnD,mEAAuE;AACvE,iDAAqD;AAErD;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,IAAA,8BAAiB,GAAE,CAAC;IACpB,IAAA,gCAAkB,GAAE,CAAC;IACrB,IAAA,oDAA4B,GAAE,CAAC;IAC/B,IAAA,kCAAmB,GAAE,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Maps API Configuration
|
|
3
|
+
* Used for address validation and geocoding services
|
|
4
|
+
*/
|
|
5
|
+
export interface MapsConfig {
|
|
6
|
+
apiKey: string;
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
timeout: number;
|
|
9
|
+
rateLimits?: {
|
|
10
|
+
requestsPerSecond?: number;
|
|
11
|
+
requestsPerDay?: number;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Load Google Maps configuration from environment
|
|
16
|
+
*/
|
|
17
|
+
export declare const MAPS_CONFIG: MapsConfig;
|
|
18
|
+
/**
|
|
19
|
+
* Get Google Maps API key
|
|
20
|
+
* @throws Error if API key is not configured
|
|
21
|
+
*/
|
|
22
|
+
export declare function getGoogleMapsApiKey(): string;
|
|
23
|
+
/**
|
|
24
|
+
* Check if Google Maps is configured
|
|
25
|
+
*/
|
|
26
|
+
export declare function isGoogleMapsConfigured(): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Validate Google Maps configuration
|
|
29
|
+
*/
|
|
30
|
+
export declare function validateMapsConfig(): void;
|
|
31
|
+
//# sourceMappingURL=maps.config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maps.config.d.ts","sourceRoot":"","sources":["../../../../src/config/maps.config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE;QACX,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,UAQzB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAK5C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAQzC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Google Maps API Configuration
|
|
4
|
+
* Used for address validation and geocoding services
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.MAPS_CONFIG = void 0;
|
|
8
|
+
exports.getGoogleMapsApiKey = getGoogleMapsApiKey;
|
|
9
|
+
exports.isGoogleMapsConfigured = isGoogleMapsConfigured;
|
|
10
|
+
exports.validateMapsConfig = validateMapsConfig;
|
|
11
|
+
/**
|
|
12
|
+
* Load Google Maps configuration from environment
|
|
13
|
+
*/
|
|
14
|
+
exports.MAPS_CONFIG = {
|
|
15
|
+
apiKey: process.env.GOOGLE_MAPS_API_KEY || '',
|
|
16
|
+
enabled: !!process.env.GOOGLE_MAPS_API_KEY,
|
|
17
|
+
timeout: parseInt(process.env.GOOGLE_MAPS_TIMEOUT || '5000', 10),
|
|
18
|
+
rateLimits: {
|
|
19
|
+
requestsPerSecond: parseInt(process.env.GOOGLE_MAPS_RATE_LIMIT_PER_SECOND || '50', 10),
|
|
20
|
+
requestsPerDay: parseInt(process.env.GOOGLE_MAPS_RATE_LIMIT_PER_DAY || '100000', 10),
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Get Google Maps API key
|
|
25
|
+
* @throws Error if API key is not configured
|
|
26
|
+
*/
|
|
27
|
+
function getGoogleMapsApiKey() {
|
|
28
|
+
if (!exports.MAPS_CONFIG.apiKey) {
|
|
29
|
+
throw new Error('Google Maps API key is not configured. Set GOOGLE_MAPS_API_KEY environment variable.');
|
|
30
|
+
}
|
|
31
|
+
return exports.MAPS_CONFIG.apiKey;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Check if Google Maps is configured
|
|
35
|
+
*/
|
|
36
|
+
function isGoogleMapsConfigured() {
|
|
37
|
+
return exports.MAPS_CONFIG.enabled;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Validate Google Maps configuration
|
|
41
|
+
*/
|
|
42
|
+
function validateMapsConfig() {
|
|
43
|
+
if (exports.MAPS_CONFIG.enabled && !exports.MAPS_CONFIG.apiKey) {
|
|
44
|
+
throw new Error('Google Maps API key is required when GOOGLE_MAPS_API_KEY is set');
|
|
45
|
+
}
|
|
46
|
+
if (exports.MAPS_CONFIG.timeout < 1000 || exports.MAPS_CONFIG.timeout > 30000) {
|
|
47
|
+
throw new Error('Google Maps timeout must be between 1000 and 30000 milliseconds');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=maps.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maps.config.js","sourceRoot":"","sources":["../../../../src/config/maps.config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AA6BH,kDAKC;AAKD,wDAEC;AAKD,gDAQC;AA1CD;;GAEG;AACU,QAAA,WAAW,GAAe;IACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE;IAC7C,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB;IAC1C,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,MAAM,EAAE,EAAE,CAAC;IAChE,UAAU,EAAE;QACV,iBAAiB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,IAAI,EAAE,EAAE,CAAC;QACtF,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,QAAQ,EAAE,EAAE,CAAC;KACrF;CACF,CAAC;AAEF;;;GAGG;AACH,SAAgB,mBAAmB;IACjC,IAAI,CAAC,mBAAW,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;IAC1G,CAAC;IACD,OAAO,mBAAW,CAAC,MAAM,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB;IACpC,OAAO,mBAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB;IAChC,IAAI,mBAAW,CAAC,OAAO,IAAI,CAAC,mBAAW,CAAC,MAAM,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,mBAAW,CAAC,OAAO,GAAG,IAAI,IAAI,mBAAW,CAAC,OAAO,GAAG,KAAK,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware Configuration
|
|
3
|
+
* Pipeline setup and ordering
|
|
4
|
+
*/
|
|
5
|
+
export interface MiddlewareConfig {
|
|
6
|
+
cors: {
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
credentials: boolean;
|
|
9
|
+
maxAge: number;
|
|
10
|
+
};
|
|
11
|
+
helmet: {
|
|
12
|
+
enabled: boolean;
|
|
13
|
+
contentSecurityPolicy: boolean;
|
|
14
|
+
crossOriginEmbedderPolicy: boolean;
|
|
15
|
+
};
|
|
16
|
+
rateLimit: {
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
windowMs: number;
|
|
19
|
+
max: number;
|
|
20
|
+
skipSuccessfulRequests: boolean;
|
|
21
|
+
skipFailedRequests: boolean;
|
|
22
|
+
};
|
|
23
|
+
compression: {
|
|
24
|
+
enabled: boolean;
|
|
25
|
+
level: number;
|
|
26
|
+
threshold: number;
|
|
27
|
+
};
|
|
28
|
+
bodyParser: {
|
|
29
|
+
json: {
|
|
30
|
+
limit: string;
|
|
31
|
+
strict: boolean;
|
|
32
|
+
};
|
|
33
|
+
urlencoded: {
|
|
34
|
+
limit: string;
|
|
35
|
+
extended: boolean;
|
|
36
|
+
parameterLimit: number;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
requestId: {
|
|
40
|
+
enabled: boolean;
|
|
41
|
+
headerName: string;
|
|
42
|
+
};
|
|
43
|
+
logging: {
|
|
44
|
+
enabled: boolean;
|
|
45
|
+
logBody: boolean;
|
|
46
|
+
logHeaders: boolean;
|
|
47
|
+
sensitiveHeaders: string[];
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export declare const MIDDLEWARE_CONFIG: MiddlewareConfig;
|
|
51
|
+
/**
|
|
52
|
+
* Middleware execution order
|
|
53
|
+
* Order matters! Earlier middleware run first
|
|
54
|
+
*/
|
|
55
|
+
export declare const MIDDLEWARE_ORDER: readonly ["helmet", "cors", "requestId", "logging", "compression", "bodyParser", "rateLimit", "authentication", "validation"];
|
|
56
|
+
export type MiddlewareType = typeof MIDDLEWARE_ORDER[number];
|
|
57
|
+
//# sourceMappingURL=middleware.config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.config.d.ts","sourceRoot":"","sources":["../../../../src/config/middleware.config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,EAAE,OAAO,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAC;QACjB,qBAAqB,EAAE,OAAO,CAAC;QAC/B,yBAAyB,EAAE,OAAO,CAAC;KACpC,CAAC;IAEF,SAAS,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;QACZ,sBAAsB,EAAE,OAAO,CAAC;QAChC,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;IAEF,WAAW,EAAE;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,OAAO,CAAC;SACjB,CAAC;QACF,UAAU,EAAE;YACV,KAAK,EAAE,MAAM,CAAC;YACd,QAAQ,EAAE,OAAO,CAAC;YAClB,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;KACH,CAAC;IAEF,SAAS,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,OAAO,CAAC;QACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;CACH;AAED,eAAO,MAAM,iBAAiB,EAAE,gBAkD/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,+HAUnB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Middleware Configuration
|
|
4
|
+
* Pipeline setup and ordering
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.MIDDLEWARE_ORDER = exports.MIDDLEWARE_CONFIG = void 0;
|
|
8
|
+
exports.MIDDLEWARE_CONFIG = {
|
|
9
|
+
cors: {
|
|
10
|
+
enabled: true,
|
|
11
|
+
credentials: true,
|
|
12
|
+
maxAge: parseInt(process.env.CORS_MAX_AGE || '86400', 10), // 24 hours
|
|
13
|
+
},
|
|
14
|
+
helmet: {
|
|
15
|
+
enabled: process.env.NODE_ENV === 'production',
|
|
16
|
+
contentSecurityPolicy: process.env.NODE_ENV === 'production',
|
|
17
|
+
crossOriginEmbedderPolicy: false,
|
|
18
|
+
},
|
|
19
|
+
rateLimit: {
|
|
20
|
+
enabled: process.env.RATE_LIMIT_ENABLED !== 'false',
|
|
21
|
+
windowMs: parseInt(process.env.RATE_LIMIT_WINDOW_MS || '900000', 10), // 15 minutes
|
|
22
|
+
max: parseInt(process.env.RATE_LIMIT_MAX || '100', 10),
|
|
23
|
+
skipSuccessfulRequests: false,
|
|
24
|
+
skipFailedRequests: false,
|
|
25
|
+
},
|
|
26
|
+
compression: {
|
|
27
|
+
enabled: process.env.COMPRESSION_ENABLED !== 'false',
|
|
28
|
+
level: parseInt(process.env.COMPRESSION_LEVEL || '6', 10),
|
|
29
|
+
threshold: parseInt(process.env.COMPRESSION_THRESHOLD || '1024', 10), // 1KB
|
|
30
|
+
},
|
|
31
|
+
bodyParser: {
|
|
32
|
+
json: {
|
|
33
|
+
limit: process.env.JSON_BODY_LIMIT || '10mb',
|
|
34
|
+
strict: true,
|
|
35
|
+
},
|
|
36
|
+
urlencoded: {
|
|
37
|
+
limit: process.env.URLENCODED_BODY_LIMIT || '10mb',
|
|
38
|
+
extended: true,
|
|
39
|
+
parameterLimit: parseInt(process.env.PARAMETER_LIMIT || '1000', 10),
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
requestId: {
|
|
43
|
+
enabled: true,
|
|
44
|
+
headerName: 'X-Request-ID',
|
|
45
|
+
},
|
|
46
|
+
logging: {
|
|
47
|
+
enabled: true,
|
|
48
|
+
logBody: process.env.NODE_ENV === 'development',
|
|
49
|
+
logHeaders: process.env.NODE_ENV === 'development',
|
|
50
|
+
sensitiveHeaders: ['authorization', 'cookie', 'x-api-key'],
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Middleware execution order
|
|
55
|
+
* Order matters! Earlier middleware run first
|
|
56
|
+
*/
|
|
57
|
+
exports.MIDDLEWARE_ORDER = [
|
|
58
|
+
'helmet',
|
|
59
|
+
'cors',
|
|
60
|
+
'requestId',
|
|
61
|
+
'logging',
|
|
62
|
+
'compression',
|
|
63
|
+
'bodyParser',
|
|
64
|
+
'rateLimit',
|
|
65
|
+
'authentication',
|
|
66
|
+
'validation',
|
|
67
|
+
];
|
|
68
|
+
//# sourceMappingURL=middleware.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.config.js","sourceRoot":"","sources":["../../../../src/config/middleware.config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAsDU,QAAA,iBAAiB,GAAqB;IACjD,IAAI,EAAE;QACJ,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,EAAE,EAAE,CAAC,EAAE,WAAW;KACvE;IAED,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QAC9C,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QAC5D,yBAAyB,EAAE,KAAK;KACjC;IAED,SAAS,EAAE;QACT,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,OAAO;QACnD,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,QAAQ,EAAE,EAAE,CAAC,EAAE,aAAa;QACnF,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,KAAK,EAAE,EAAE,CAAC;QACtD,sBAAsB,EAAE,KAAK;QAC7B,kBAAkB,EAAE,KAAK;KAC1B;IAED,WAAW,EAAE;QACX,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,OAAO;QACpD,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,GAAG,EAAE,EAAE,CAAC;QACzD,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM;KAC7E;IAED,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,MAAM;YAC5C,MAAM,EAAE,IAAI;SACb;QACD,UAAU,EAAE;YACV,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,MAAM;YAClD,QAAQ,EAAE,IAAI;YACd,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,MAAM,EAAE,EAAE,CAAC;SACpE;KACF;IAED,SAAS,EAAE;QACT,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,cAAc;KAC3B;IAED,OAAO,EAAE;QACP,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa;QAC/C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa;QAClD,gBAAgB,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,WAAW,CAAC;KAC3D;CACF,CAAC;AAEF;;;GAGG;AACU,QAAA,gBAAgB,GAAG;IAC9B,QAAQ;IACR,MAAM;IACN,WAAW;IACX,SAAS;IACT,aAAa;IACb,YAAY;IACZ,WAAW;IACX,gBAAgB;IAChB,YAAY;CACJ,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Configuration
|
|
3
|
+
* Generic token handler configuration for boilerplate backend
|
|
4
|
+
*
|
|
5
|
+
* NOTE: This is a generic configuration. When using this boilerplate for your
|
|
6
|
+
* specific project, customize the custom claims interface and blacklist reasons
|
|
7
|
+
* to match your application's requirements.
|
|
8
|
+
*/
|
|
9
|
+
import type { ITokenHandler } from '@xbg/utils-token-handler';
|
|
10
|
+
import type { TokenBlacklistManager } from '@xbg/utils-token-handler';
|
|
11
|
+
/**
|
|
12
|
+
* Generic custom claims interface
|
|
13
|
+
* Customize this for your specific application needs
|
|
14
|
+
*/
|
|
15
|
+
export interface CustomClaims {
|
|
16
|
+
userUID: string | null;
|
|
17
|
+
role?: string;
|
|
18
|
+
emailVerified?: boolean;
|
|
19
|
+
[key: string]: any;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Generic blacklist reasons
|
|
23
|
+
* Customize these for your application's specific use cases
|
|
24
|
+
*/
|
|
25
|
+
export declare enum BlacklistReason {
|
|
26
|
+
LOGOUT = "LOGOUT",
|
|
27
|
+
PASSWORD_CHANGE = "PASSWORD_CHANGE",
|
|
28
|
+
SECURITY_BREACH = "SECURITY_BREACH",
|
|
29
|
+
ACCOUNT_DELETION = "ACCOUNT_DELETION",
|
|
30
|
+
ADMIN_REVOCATION = "ADMIN_REVOCATION"
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create configured token handler
|
|
34
|
+
*/
|
|
35
|
+
export declare function createProjectTokenHandler(): ITokenHandler<CustomClaims>;
|
|
36
|
+
/**
|
|
37
|
+
* Get or create token handler singleton
|
|
38
|
+
*/
|
|
39
|
+
export declare function getTokenHandler(): ITokenHandler<CustomClaims>;
|
|
40
|
+
/**
|
|
41
|
+
* Get or create token blacklist manager singleton
|
|
42
|
+
*/
|
|
43
|
+
export declare function getTokenBlacklist(): TokenBlacklistManager;
|
|
44
|
+
/**
|
|
45
|
+
* Export singleton instances for convenience
|
|
46
|
+
*/
|
|
47
|
+
export declare const tokenHandler: ITokenHandler<CustomClaims>;
|
|
48
|
+
export declare const tokenBlacklist: TokenBlacklistManager;
|
|
49
|
+
/**
|
|
50
|
+
* Reset singletons (useful for testing)
|
|
51
|
+
*/
|
|
52
|
+
export declare function resetTokenHandlerSingletons(): void;
|
|
53
|
+
//# sourceMappingURL=tokens.config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.config.d.ts","sourceRoot":"","sources":["../../../../src/config/tokens.config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtE;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;GAGG;AACH,oBAAY,eAAe;IACzB,MAAM,WAAW;IACjB,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IACrC,gBAAgB,qBAAqB;CACtC;AAQD;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,aAAa,CAAC,YAAY,CAAC,CA0DvE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,aAAa,CAAC,YAAY,CAAC,CAK7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,qBAAqB,CAwBzD;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,6BAAoB,CAAC;AAC9C,eAAO,MAAM,cAAc,uBAAsB,CAAC;AAElD;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAGlD"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Token Configuration
|
|
4
|
+
* Generic token handler configuration for boilerplate backend
|
|
5
|
+
*
|
|
6
|
+
* NOTE: This is a generic configuration. When using this boilerplate for your
|
|
7
|
+
* specific project, customize the custom claims interface and blacklist reasons
|
|
8
|
+
* to match your application's requirements.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.tokenBlacklist = exports.tokenHandler = exports.BlacklistReason = void 0;
|
|
12
|
+
exports.createProjectTokenHandler = createProjectTokenHandler;
|
|
13
|
+
exports.getTokenHandler = getTokenHandler;
|
|
14
|
+
exports.getTokenBlacklist = getTokenBlacklist;
|
|
15
|
+
exports.resetTokenHandlerSingletons = resetTokenHandlerSingletons;
|
|
16
|
+
const utils_token_handler_1 = require("@xbg/utils-token-handler");
|
|
17
|
+
const utils_firestore_connector_1 = require("@xbg/utils-firestore-connector");
|
|
18
|
+
/**
|
|
19
|
+
* Generic blacklist reasons
|
|
20
|
+
* Customize these for your application's specific use cases
|
|
21
|
+
*/
|
|
22
|
+
var BlacklistReason;
|
|
23
|
+
(function (BlacklistReason) {
|
|
24
|
+
BlacklistReason["LOGOUT"] = "LOGOUT";
|
|
25
|
+
BlacklistReason["PASSWORD_CHANGE"] = "PASSWORD_CHANGE";
|
|
26
|
+
BlacklistReason["SECURITY_BREACH"] = "SECURITY_BREACH";
|
|
27
|
+
BlacklistReason["ACCOUNT_DELETION"] = "ACCOUNT_DELETION";
|
|
28
|
+
BlacklistReason["ADMIN_REVOCATION"] = "ADMIN_REVOCATION";
|
|
29
|
+
})(BlacklistReason || (exports.BlacklistReason = BlacklistReason = {}));
|
|
30
|
+
/**
|
|
31
|
+
* Token handler singleton instance
|
|
32
|
+
*/
|
|
33
|
+
let tokenHandlerInstance = null;
|
|
34
|
+
let tokenBlacklistInstance = null;
|
|
35
|
+
/**
|
|
36
|
+
* Create configured token handler
|
|
37
|
+
*/
|
|
38
|
+
function createProjectTokenHandler() {
|
|
39
|
+
// Get Firestore instance
|
|
40
|
+
const db = (0, utils_firestore_connector_1.getFirestore)();
|
|
41
|
+
// Create database adapter
|
|
42
|
+
const tokenDatabase = (0, utils_token_handler_1.createFirestoreTokenDatabase)(db, process.env.TOKEN_BLACKLIST_COLLECTION || 'tokenBlacklist');
|
|
43
|
+
// Create auth adapter with CustomClaims type
|
|
44
|
+
const authAdapter = (0, utils_token_handler_1.createFirebaseAuthAdapter)();
|
|
45
|
+
// Build configuration
|
|
46
|
+
const config = {
|
|
47
|
+
customClaims: {
|
|
48
|
+
extract: (token) => ({
|
|
49
|
+
userUID: token.userUID || null,
|
|
50
|
+
role: token.role || 'user',
|
|
51
|
+
emailVerified: token.email_verified || false,
|
|
52
|
+
}),
|
|
53
|
+
validate: (claims) => {
|
|
54
|
+
// Add your custom validation logic here
|
|
55
|
+
if (claims.userUID !== null && typeof claims.userUID !== 'string') {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
return true;
|
|
59
|
+
},
|
|
60
|
+
defaults: {
|
|
61
|
+
userUID: null,
|
|
62
|
+
role: 'user',
|
|
63
|
+
emailVerified: false,
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
blacklist: {
|
|
67
|
+
storage: {
|
|
68
|
+
database: 'main',
|
|
69
|
+
collection: process.env.TOKEN_BLACKLIST_COLLECTION || 'tokenBlacklist',
|
|
70
|
+
},
|
|
71
|
+
retention: {
|
|
72
|
+
cleanupRetentionDays: parseInt(process.env.TOKEN_BLACKLIST_RETENTION_DAYS || '30', 10),
|
|
73
|
+
globalRevocationRetentionDays: parseInt(process.env.TOKEN_GLOBAL_REVOCATION_RETENTION_DAYS || '30', 10),
|
|
74
|
+
},
|
|
75
|
+
reasons: Object.values(BlacklistReason),
|
|
76
|
+
},
|
|
77
|
+
provider: {
|
|
78
|
+
type: 'firebase',
|
|
79
|
+
firebase: {
|
|
80
|
+
projectId: process.env.FIREBASE_PROJECT_ID,
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
database: tokenDatabase,
|
|
84
|
+
};
|
|
85
|
+
return (0, utils_token_handler_1.createTokenHandler)(config, authAdapter);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get or create token handler singleton
|
|
89
|
+
*/
|
|
90
|
+
function getTokenHandler() {
|
|
91
|
+
if (!tokenHandlerInstance) {
|
|
92
|
+
tokenHandlerInstance = createProjectTokenHandler();
|
|
93
|
+
}
|
|
94
|
+
return tokenHandlerInstance;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get or create token blacklist manager singleton
|
|
98
|
+
*/
|
|
99
|
+
function getTokenBlacklist() {
|
|
100
|
+
if (!tokenBlacklistInstance) {
|
|
101
|
+
const db = (0, utils_firestore_connector_1.getFirestore)();
|
|
102
|
+
const tokenDatabase = (0, utils_token_handler_1.createFirestoreTokenDatabase)(db, process.env.TOKEN_BLACKLIST_COLLECTION || 'tokenBlacklist');
|
|
103
|
+
tokenBlacklistInstance = (0, utils_token_handler_1.createTokenBlacklistManager)(tokenDatabase, {
|
|
104
|
+
storage: {
|
|
105
|
+
database: 'main',
|
|
106
|
+
collection: process.env.TOKEN_BLACKLIST_COLLECTION || 'tokenBlacklist',
|
|
107
|
+
},
|
|
108
|
+
retention: {
|
|
109
|
+
cleanupRetentionDays: parseInt(process.env.TOKEN_BLACKLIST_RETENTION_DAYS || '30', 10),
|
|
110
|
+
globalRevocationRetentionDays: parseInt(process.env.TOKEN_GLOBAL_REVOCATION_RETENTION_DAYS || '30', 10),
|
|
111
|
+
},
|
|
112
|
+
reasons: Object.values(BlacklistReason),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
return tokenBlacklistInstance;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Export singleton instances for convenience
|
|
119
|
+
*/
|
|
120
|
+
exports.tokenHandler = getTokenHandler();
|
|
121
|
+
exports.tokenBlacklist = getTokenBlacklist();
|
|
122
|
+
/**
|
|
123
|
+
* Reset singletons (useful for testing)
|
|
124
|
+
*/
|
|
125
|
+
function resetTokenHandlerSingletons() {
|
|
126
|
+
tokenHandlerInstance = null;
|
|
127
|
+
tokenBlacklistInstance = null;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=tokens.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.config.js","sourceRoot":"","sources":["../../../../src/config/tokens.config.ts"],"names":[],"mappings":"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"}
|