@xbg.solutions/backend-core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/lib/core/src/app.d.ts +28 -0
  2. package/lib/core/src/app.d.ts.map +1 -0
  3. package/lib/core/src/app.js +188 -0
  4. package/lib/core/src/app.js.map +1 -0
  5. package/lib/core/src/base/BaseController.d.ts +108 -0
  6. package/lib/core/src/base/BaseController.d.ts.map +1 -0
  7. package/lib/core/src/base/BaseController.js +307 -0
  8. package/lib/core/src/base/BaseController.js.map +1 -0
  9. package/lib/core/src/base/BaseEntity.d.ts +92 -0
  10. package/lib/core/src/base/BaseEntity.d.ts.map +1 -0
  11. package/lib/core/src/base/BaseEntity.js +143 -0
  12. package/lib/core/src/base/BaseEntity.js.map +1 -0
  13. package/lib/core/src/base/BaseRepository.d.ts +124 -0
  14. package/lib/core/src/base/BaseRepository.d.ts.map +1 -0
  15. package/lib/core/src/base/BaseRepository.js +414 -0
  16. package/lib/core/src/base/BaseRepository.js.map +1 -0
  17. package/lib/core/src/base/BaseService.d.ts +89 -0
  18. package/lib/core/src/base/BaseService.d.ts.map +1 -0
  19. package/lib/core/src/base/BaseService.js +342 -0
  20. package/lib/core/src/base/BaseService.js.map +1 -0
  21. package/lib/core/src/base/index.d.ts +8 -0
  22. package/lib/core/src/base/index.d.ts.map +1 -0
  23. package/lib/core/src/base/index.js +24 -0
  24. package/lib/core/src/base/index.js.map +1 -0
  25. package/lib/core/src/config/app.config.d.ts +70 -0
  26. package/lib/core/src/config/app.config.d.ts.map +1 -0
  27. package/lib/core/src/config/app.config.js +106 -0
  28. package/lib/core/src/config/app.config.js.map +1 -0
  29. package/lib/core/src/config/auth.config.d.ts +54 -0
  30. package/lib/core/src/config/auth.config.d.ts.map +1 -0
  31. package/lib/core/src/config/auth.config.js +88 -0
  32. package/lib/core/src/config/auth.config.js.map +1 -0
  33. package/lib/core/src/config/cache.config.d.ts +47 -0
  34. package/lib/core/src/config/cache.config.d.ts.map +1 -0
  35. package/lib/core/src/config/cache.config.js +225 -0
  36. package/lib/core/src/config/cache.config.js.map +1 -0
  37. package/lib/core/src/config/communications.config.d.ts +175 -0
  38. package/lib/core/src/config/communications.config.d.ts.map +1 -0
  39. package/lib/core/src/config/communications.config.js +219 -0
  40. package/lib/core/src/config/communications.config.js.map +1 -0
  41. package/lib/core/src/config/database.config.d.ts +68 -0
  42. package/lib/core/src/config/database.config.d.ts.map +1 -0
  43. package/lib/core/src/config/database.config.js +95 -0
  44. package/lib/core/src/config/database.config.js.map +1 -0
  45. package/lib/core/src/config/firebase-event-mapping.config.d.ts +41 -0
  46. package/lib/core/src/config/firebase-event-mapping.config.d.ts.map +1 -0
  47. package/lib/core/src/config/firebase-event-mapping.config.js +180 -0
  48. package/lib/core/src/config/firebase-event-mapping.config.js.map +1 -0
  49. package/lib/core/src/config/firestore.config.d.ts +61 -0
  50. package/lib/core/src/config/firestore.config.d.ts.map +1 -0
  51. package/lib/core/src/config/firestore.config.js +74 -0
  52. package/lib/core/src/config/firestore.config.js.map +1 -0
  53. package/lib/core/src/config/index.d.ts +15 -0
  54. package/lib/core/src/config/index.d.ts.map +1 -0
  55. package/lib/core/src/config/index.js +41 -0
  56. package/lib/core/src/config/index.js.map +1 -0
  57. package/lib/core/src/config/maps.config.d.ts +31 -0
  58. package/lib/core/src/config/maps.config.d.ts.map +1 -0
  59. package/lib/core/src/config/maps.config.js +50 -0
  60. package/lib/core/src/config/maps.config.js.map +1 -0
  61. package/lib/core/src/config/middleware.config.d.ts +57 -0
  62. package/lib/core/src/config/middleware.config.d.ts.map +1 -0
  63. package/lib/core/src/config/middleware.config.js +68 -0
  64. package/lib/core/src/config/middleware.config.js.map +1 -0
  65. package/lib/core/src/config/tokens.config.d.ts +53 -0
  66. package/lib/core/src/config/tokens.config.d.ts.map +1 -0
  67. package/lib/core/src/config/tokens.config.js +129 -0
  68. package/lib/core/src/config/tokens.config.js.map +1 -0
  69. package/lib/core/src/generator/generator.d.ts +38 -0
  70. package/lib/core/src/generator/generator.d.ts.map +1 -0
  71. package/lib/core/src/generator/generator.js +159 -0
  72. package/lib/core/src/generator/generator.js.map +1 -0
  73. package/lib/core/src/generator/index.d.ts +7 -0
  74. package/lib/core/src/generator/index.d.ts.map +1 -0
  75. package/lib/core/src/generator/index.js +23 -0
  76. package/lib/core/src/generator/index.js.map +1 -0
  77. package/lib/core/src/generator/parser.d.ts +10 -0
  78. package/lib/core/src/generator/parser.d.ts.map +1 -0
  79. package/lib/core/src/generator/parser.js +197 -0
  80. package/lib/core/src/generator/parser.js.map +1 -0
  81. package/lib/core/src/generator/types.d.ts +112 -0
  82. package/lib/core/src/generator/types.d.ts.map +1 -0
  83. package/lib/core/src/generator/types.js +7 -0
  84. package/lib/core/src/generator/types.js.map +1 -0
  85. package/lib/core/src/index.d.ts +19 -0
  86. package/lib/core/src/index.d.ts.map +1 -0
  87. package/lib/core/src/index.js +46 -0
  88. package/lib/core/src/index.js.map +1 -0
  89. package/lib/core/src/middleware/auth.middleware.d.ts +57 -0
  90. package/lib/core/src/middleware/auth.middleware.d.ts.map +1 -0
  91. package/lib/core/src/middleware/auth.middleware.js +256 -0
  92. package/lib/core/src/middleware/auth.middleware.js.map +1 -0
  93. package/lib/core/src/middleware/cors.middleware.d.ts +13 -0
  94. package/lib/core/src/middleware/cors.middleware.d.ts.map +1 -0
  95. package/lib/core/src/middleware/cors.middleware.js +50 -0
  96. package/lib/core/src/middleware/cors.middleware.js.map +1 -0
  97. package/lib/core/src/middleware/error.middleware.d.ts +46 -0
  98. package/lib/core/src/middleware/error.middleware.d.ts.map +1 -0
  99. package/lib/core/src/middleware/error.middleware.js +174 -0
  100. package/lib/core/src/middleware/error.middleware.js.map +1 -0
  101. package/lib/core/src/middleware/index.d.ts +11 -0
  102. package/lib/core/src/middleware/index.d.ts.map +1 -0
  103. package/lib/core/src/middleware/index.js +27 -0
  104. package/lib/core/src/middleware/index.js.map +1 -0
  105. package/lib/core/src/middleware/logging.middleware.d.ts +10 -0
  106. package/lib/core/src/middleware/logging.middleware.d.ts.map +1 -0
  107. package/lib/core/src/middleware/logging.middleware.js +87 -0
  108. package/lib/core/src/middleware/logging.middleware.js.map +1 -0
  109. package/lib/core/src/middleware/rateLimit.middleware.d.ts +26 -0
  110. package/lib/core/src/middleware/rateLimit.middleware.d.ts.map +1 -0
  111. package/lib/core/src/middleware/rateLimit.middleware.js +105 -0
  112. package/lib/core/src/middleware/rateLimit.middleware.js.map +1 -0
  113. package/lib/core/src/middleware/requestId.middleware.d.ts +11 -0
  114. package/lib/core/src/middleware/requestId.middleware.d.ts.map +1 -0
  115. package/lib/core/src/middleware/requestId.middleware.js +26 -0
  116. package/lib/core/src/middleware/requestId.middleware.js.map +1 -0
  117. package/lib/core/src/middleware/validation.middleware.d.ts +25 -0
  118. package/lib/core/src/middleware/validation.middleware.d.ts.map +1 -0
  119. package/lib/core/src/middleware/validation.middleware.js +133 -0
  120. package/lib/core/src/middleware/validation.middleware.js.map +1 -0
  121. package/lib/core/src/types/errors.d.ts +119 -0
  122. package/lib/core/src/types/errors.d.ts.map +1 -0
  123. package/lib/core/src/types/errors.js +210 -0
  124. package/lib/core/src/types/errors.js.map +1 -0
  125. package/lib/utils-cache-connector/src/cache-connector.d.ts +139 -0
  126. package/lib/utils-cache-connector/src/cache-connector.d.ts.map +1 -0
  127. package/lib/utils-cache-connector/src/cache-connector.js +277 -0
  128. package/lib/utils-cache-connector/src/cache-connector.js.map +1 -0
  129. package/lib/utils-cache-connector/src/index.d.ts +52 -0
  130. package/lib/utils-cache-connector/src/index.d.ts.map +1 -0
  131. package/lib/utils-cache-connector/src/index.js +103 -0
  132. package/lib/utils-cache-connector/src/index.js.map +1 -0
  133. package/lib/utils-cache-connector/src/providers/base-cache-provider.d.ts +95 -0
  134. package/lib/utils-cache-connector/src/providers/base-cache-provider.d.ts.map +1 -0
  135. package/lib/utils-cache-connector/src/providers/base-cache-provider.js +120 -0
  136. package/lib/utils-cache-connector/src/providers/base-cache-provider.js.map +1 -0
  137. package/lib/utils-cache-connector/src/providers/firestore-cache-provider.d.ts +58 -0
  138. package/lib/utils-cache-connector/src/providers/firestore-cache-provider.d.ts.map +1 -0
  139. package/lib/utils-cache-connector/src/providers/firestore-cache-provider.js +418 -0
  140. package/lib/utils-cache-connector/src/providers/firestore-cache-provider.js.map +1 -0
  141. package/lib/utils-cache-connector/src/providers/memory-cache-provider.d.ts +57 -0
  142. package/lib/utils-cache-connector/src/providers/memory-cache-provider.d.ts.map +1 -0
  143. package/lib/utils-cache-connector/src/providers/memory-cache-provider.js +217 -0
  144. package/lib/utils-cache-connector/src/providers/memory-cache-provider.js.map +1 -0
  145. package/lib/utils-cache-connector/src/providers/noop-cache-provider.d.ts +21 -0
  146. package/lib/utils-cache-connector/src/providers/noop-cache-provider.d.ts.map +1 -0
  147. package/lib/utils-cache-connector/src/providers/noop-cache-provider.js +42 -0
  148. package/lib/utils-cache-connector/src/providers/noop-cache-provider.js.map +1 -0
  149. package/lib/utils-cache-connector/src/providers/redis-cache-provider.d.ts +64 -0
  150. package/lib/utils-cache-connector/src/providers/redis-cache-provider.d.ts.map +1 -0
  151. package/lib/utils-cache-connector/src/providers/redis-cache-provider.js +414 -0
  152. package/lib/utils-cache-connector/src/providers/redis-cache-provider.js.map +1 -0
  153. package/lib/utils-cache-connector/src/types.d.ts +342 -0
  154. package/lib/utils-cache-connector/src/types.d.ts.map +1 -0
  155. package/lib/utils-cache-connector/src/types.js +8 -0
  156. package/lib/utils-cache-connector/src/types.js.map +1 -0
  157. package/lib/utils-events/src/event-bus.d.ts +42 -0
  158. package/lib/utils-events/src/event-bus.d.ts.map +1 -0
  159. package/lib/utils-events/src/event-bus.js +93 -0
  160. package/lib/utils-events/src/event-bus.js.map +1 -0
  161. package/lib/utils-events/src/event-types.d.ts +146 -0
  162. package/lib/utils-events/src/event-types.d.ts.map +1 -0
  163. package/lib/utils-events/src/event-types.js +49 -0
  164. package/lib/utils-events/src/event-types.js.map +1 -0
  165. package/lib/utils-events/src/index.d.ts +7 -0
  166. package/lib/utils-events/src/index.d.ts.map +1 -0
  167. package/lib/utils-events/src/index.js +11 -0
  168. package/lib/utils-events/src/index.js.map +1 -0
  169. package/lib/utils-logger/src/index.d.ts +12 -0
  170. package/lib/utils-logger/src/index.d.ts.map +1 -0
  171. package/lib/utils-logger/src/index.js +29 -0
  172. package/lib/utils-logger/src/index.js.map +1 -0
  173. package/lib/utils-logger/src/logger-types.d.ts +32 -0
  174. package/lib/utils-logger/src/logger-types.d.ts.map +1 -0
  175. package/lib/utils-logger/src/logger-types.js +17 -0
  176. package/lib/utils-logger/src/logger-types.js.map +1 -0
  177. package/lib/utils-logger/src/logger.d.ts +42 -0
  178. package/lib/utils-logger/src/logger.d.ts.map +1 -0
  179. package/lib/utils-logger/src/logger.js +123 -0
  180. package/lib/utils-logger/src/logger.js.map +1 -0
  181. package/package.json +49 -0
  182. package/src/templates/controller.hbs +48 -0
  183. package/src/templates/entity.hbs +80 -0
  184. package/src/templates/repository.hbs +56 -0
  185. package/src/templates/service.hbs +108 -0
@@ -0,0 +1,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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"}