@managesome/knotr-toolkit 0.1.1 → 0.8.5

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 (300) hide show
  1. package/dist/backend/config.d.ts +43 -0
  2. package/dist/backend/config.d.ts.map +1 -0
  3. package/dist/backend/config.js +82 -0
  4. package/dist/backend/config.js.map +1 -0
  5. package/dist/backend/database.d.ts +28 -0
  6. package/dist/backend/database.d.ts.map +1 -0
  7. package/dist/backend/database.js +112 -0
  8. package/dist/backend/database.js.map +1 -0
  9. package/dist/backend/firebase.d.ts +68 -0
  10. package/dist/backend/firebase.d.ts.map +1 -0
  11. package/dist/backend/firebase.js +233 -0
  12. package/dist/backend/firebase.js.map +1 -0
  13. package/dist/backend/index.d.ts +8 -0
  14. package/dist/backend/index.d.ts.map +1 -0
  15. package/dist/backend/index.js +19 -0
  16. package/dist/backend/index.js.map +1 -0
  17. package/dist/backend/logger.d.ts +23 -0
  18. package/dist/backend/logger.d.ts.map +1 -0
  19. package/dist/backend/logger.js +107 -0
  20. package/dist/backend/logger.js.map +1 -0
  21. package/dist/backend/redis.d.ts +59 -0
  22. package/dist/backend/redis.d.ts.map +1 -0
  23. package/dist/backend/redis.js +169 -0
  24. package/dist/backend/redis.js.map +1 -0
  25. package/dist/backend/socket.d.ts +81 -0
  26. package/dist/backend/socket.d.ts.map +1 -0
  27. package/dist/backend/socket.js +132 -0
  28. package/dist/backend/socket.js.map +1 -0
  29. package/dist/backend/worker-queue.d.ts +40 -0
  30. package/dist/backend/worker-queue.d.ts.map +1 -0
  31. package/dist/backend/worker-queue.js +140 -0
  32. package/dist/backend/worker-queue.js.map +1 -0
  33. package/dist/client/api-client.d.ts +101 -0
  34. package/dist/client/api-client.d.ts.map +1 -0
  35. package/dist/client/api-client.js +261 -0
  36. package/dist/client/api-client.js.map +1 -0
  37. package/dist/client/api-error.d.ts +100 -0
  38. package/dist/client/api-error.d.ts.map +1 -0
  39. package/dist/client/api-error.js +111 -0
  40. package/dist/client/api-error.js.map +1 -0
  41. package/dist/client/endpoints.d.ts +510 -0
  42. package/dist/client/endpoints.d.ts.map +1 -0
  43. package/dist/client/endpoints.js +306 -0
  44. package/dist/client/endpoints.js.map +1 -0
  45. package/dist/client/index.d.ts +4 -0
  46. package/dist/client/index.d.ts.map +1 -0
  47. package/dist/client/index.js +7 -0
  48. package/dist/client/index.js.map +1 -0
  49. package/dist/constants/index.d.ts +2 -1
  50. package/dist/constants/index.d.ts.map +1 -1
  51. package/dist/constants/index.js +2 -1
  52. package/dist/constants/index.js.map +1 -1
  53. package/dist/constants/socket.d.ts +165 -0
  54. package/dist/constants/socket.d.ts.map +1 -0
  55. package/dist/constants/socket.js +204 -0
  56. package/dist/constants/socket.js.map +1 -0
  57. package/dist/helpers/ApiError.d.ts +74 -0
  58. package/dist/helpers/ApiError.d.ts.map +1 -0
  59. package/dist/helpers/ApiError.js +105 -0
  60. package/dist/helpers/ApiError.js.map +1 -0
  61. package/dist/helpers/asyncHandler.d.ts +42 -0
  62. package/dist/helpers/asyncHandler.d.ts.map +1 -0
  63. package/dist/helpers/asyncHandler.js +47 -0
  64. package/dist/helpers/asyncHandler.js.map +1 -0
  65. package/dist/helpers/id-generator.d.ts +98 -0
  66. package/dist/helpers/id-generator.d.ts.map +1 -0
  67. package/dist/helpers/id-generator.js +128 -0
  68. package/dist/helpers/id-generator.js.map +1 -0
  69. package/dist/helpers/index.d.ts +5 -0
  70. package/dist/helpers/index.d.ts.map +1 -0
  71. package/dist/helpers/index.js +8 -0
  72. package/dist/helpers/index.js.map +1 -0
  73. package/dist/helpers/response-timing.d.ts +91 -0
  74. package/dist/helpers/response-timing.d.ts.map +1 -0
  75. package/dist/helpers/response-timing.js +176 -0
  76. package/dist/helpers/response-timing.js.map +1 -0
  77. package/dist/index.d.ts +7 -3
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +21 -3
  80. package/dist/index.js.map +1 -1
  81. package/dist/schemas/account.schema.d.ts +4500 -0
  82. package/dist/schemas/account.schema.d.ts.map +1 -0
  83. package/dist/schemas/account.schema.js +123 -0
  84. package/dist/schemas/account.schema.js.map +1 -0
  85. package/dist/schemas/chat.schema.d.ts +4796 -0
  86. package/dist/schemas/chat.schema.d.ts.map +1 -0
  87. package/dist/schemas/chat.schema.js +107 -0
  88. package/dist/schemas/chat.schema.js.map +1 -0
  89. package/dist/schemas/collaboration-request.schema.d.ts +3960 -0
  90. package/dist/schemas/collaboration-request.schema.d.ts.map +1 -0
  91. package/dist/schemas/collaboration-request.schema.js +92 -0
  92. package/dist/schemas/collaboration-request.schema.js.map +1 -0
  93. package/dist/schemas/company-review.schema.d.ts +3465 -0
  94. package/dist/schemas/company-review.schema.d.ts.map +1 -0
  95. package/dist/schemas/company-review.schema.js +73 -0
  96. package/dist/schemas/company-review.schema.js.map +1 -0
  97. package/dist/schemas/company.schema.d.ts +6152 -0
  98. package/dist/schemas/company.schema.d.ts.map +1 -0
  99. package/dist/schemas/company.schema.js +192 -0
  100. package/dist/schemas/company.schema.js.map +1 -0
  101. package/dist/schemas/contract.schema.d.ts +5286 -0
  102. package/dist/schemas/contract.schema.d.ts.map +1 -0
  103. package/dist/schemas/contract.schema.js +115 -0
  104. package/dist/schemas/contract.schema.js.map +1 -0
  105. package/dist/schemas/dispute-evidence.schema.d.ts +3788 -0
  106. package/dist/schemas/dispute-evidence.schema.d.ts.map +1 -0
  107. package/dist/schemas/dispute-evidence.schema.js +71 -0
  108. package/dist/schemas/dispute-evidence.schema.js.map +1 -0
  109. package/dist/schemas/dispute.schema.d.ts +4970 -0
  110. package/dist/schemas/dispute.schema.d.ts.map +1 -0
  111. package/dist/schemas/dispute.schema.js +152 -0
  112. package/dist/schemas/dispute.schema.js.map +1 -0
  113. package/dist/schemas/donation.schema.d.ts +3594 -0
  114. package/dist/schemas/donation.schema.d.ts.map +1 -0
  115. package/dist/schemas/donation.schema.js +95 -0
  116. package/dist/schemas/donation.schema.js.map +1 -0
  117. package/dist/schemas/escrow.schema.d.ts +4322 -0
  118. package/dist/schemas/escrow.schema.d.ts.map +1 -0
  119. package/dist/schemas/escrow.schema.js +93 -0
  120. package/dist/schemas/escrow.schema.js.map +1 -0
  121. package/dist/schemas/flag.schema.d.ts +4375 -0
  122. package/dist/schemas/flag.schema.d.ts.map +1 -0
  123. package/dist/schemas/flag.schema.js +133 -0
  124. package/dist/schemas/flag.schema.js.map +1 -0
  125. package/dist/schemas/index.d.ts +33 -0
  126. package/dist/schemas/index.d.ts.map +1 -0
  127. package/dist/schemas/index.js +39 -0
  128. package/dist/schemas/index.js.map +1 -0
  129. package/dist/schemas/interest.schema.d.ts +3804 -0
  130. package/dist/schemas/interest.schema.d.ts.map +1 -0
  131. package/dist/schemas/interest.schema.js +107 -0
  132. package/dist/schemas/interest.schema.js.map +1 -0
  133. package/dist/schemas/match.schema.d.ts +4013 -0
  134. package/dist/schemas/match.schema.d.ts.map +1 -0
  135. package/dist/schemas/match.schema.js +118 -0
  136. package/dist/schemas/match.schema.js.map +1 -0
  137. package/dist/schemas/message.schema.d.ts +4213 -0
  138. package/dist/schemas/message.schema.d.ts.map +1 -0
  139. package/dist/schemas/message.schema.js +134 -0
  140. package/dist/schemas/message.schema.js.map +1 -0
  141. package/dist/schemas/milestone.schema.d.ts +4310 -0
  142. package/dist/schemas/milestone.schema.d.ts.map +1 -0
  143. package/dist/schemas/milestone.schema.js +99 -0
  144. package/dist/schemas/milestone.schema.js.map +1 -0
  145. package/dist/schemas/notification.schema.d.ts +4641 -0
  146. package/dist/schemas/notification.schema.d.ts.map +1 -0
  147. package/dist/schemas/notification.schema.js +139 -0
  148. package/dist/schemas/notification.schema.js.map +1 -0
  149. package/dist/schemas/profile.schema.d.ts +9589 -0
  150. package/dist/schemas/profile.schema.d.ts.map +1 -0
  151. package/dist/schemas/profile.schema.js +360 -0
  152. package/dist/schemas/profile.schema.js.map +1 -0
  153. package/dist/schemas/profit-share-agreement.schema.d.ts +3789 -0
  154. package/dist/schemas/profit-share-agreement.schema.d.ts.map +1 -0
  155. package/dist/schemas/profit-share-agreement.schema.js +76 -0
  156. package/dist/schemas/profit-share-agreement.schema.js.map +1 -0
  157. package/dist/schemas/profit-share.schema.d.ts +4051 -0
  158. package/dist/schemas/profit-share.schema.d.ts.map +1 -0
  159. package/dist/schemas/profit-share.schema.js +96 -0
  160. package/dist/schemas/profit-share.schema.js.map +1 -0
  161. package/dist/schemas/promo-code.schema.d.ts +3924 -0
  162. package/dist/schemas/promo-code.schema.d.ts.map +1 -0
  163. package/dist/schemas/promo-code.schema.js +112 -0
  164. package/dist/schemas/promo-code.schema.js.map +1 -0
  165. package/dist/schemas/proposal.schema.d.ts +5182 -0
  166. package/dist/schemas/proposal.schema.d.ts.map +1 -0
  167. package/dist/schemas/proposal.schema.js +114 -0
  168. package/dist/schemas/proposal.schema.js.map +1 -0
  169. package/dist/schemas/purchase.schema.d.ts +3724 -0
  170. package/dist/schemas/purchase.schema.d.ts.map +1 -0
  171. package/dist/schemas/purchase.schema.js +89 -0
  172. package/dist/schemas/purchase.schema.js.map +1 -0
  173. package/dist/schemas/requirement-post.schema.d.ts +6315 -0
  174. package/dist/schemas/requirement-post.schema.d.ts.map +1 -0
  175. package/dist/schemas/requirement-post.schema.js +153 -0
  176. package/dist/schemas/requirement-post.schema.js.map +1 -0
  177. package/dist/schemas/review.schema.d.ts +4512 -0
  178. package/dist/schemas/review.schema.d.ts.map +1 -0
  179. package/dist/schemas/review.schema.js +121 -0
  180. package/dist/schemas/review.schema.js.map +1 -0
  181. package/dist/schemas/service-listing.schema.d.ts +5152 -0
  182. package/dist/schemas/service-listing.schema.d.ts.map +1 -0
  183. package/dist/schemas/service-listing.schema.js +137 -0
  184. package/dist/schemas/service-listing.schema.js.map +1 -0
  185. package/dist/schemas/subscription.schema.d.ts +3985 -0
  186. package/dist/schemas/subscription.schema.d.ts.map +1 -0
  187. package/dist/schemas/subscription.schema.js +94 -0
  188. package/dist/schemas/subscription.schema.js.map +1 -0
  189. package/dist/schemas/tmc-application.schema.d.ts +4357 -0
  190. package/dist/schemas/tmc-application.schema.d.ts.map +1 -0
  191. package/dist/schemas/tmc-application.schema.js +96 -0
  192. package/dist/schemas/tmc-application.schema.js.map +1 -0
  193. package/dist/schemas/tmc-membership.schema.d.ts +3985 -0
  194. package/dist/schemas/tmc-membership.schema.d.ts.map +1 -0
  195. package/dist/schemas/tmc-membership.schema.js +84 -0
  196. package/dist/schemas/tmc-membership.schema.js.map +1 -0
  197. package/dist/schemas/trust-badge.schema.d.ts +3919 -0
  198. package/dist/schemas/trust-badge.schema.d.ts.map +1 -0
  199. package/dist/schemas/trust-badge.schema.js +83 -0
  200. package/dist/schemas/trust-badge.schema.js.map +1 -0
  201. package/dist/schemas/verification.schema.d.ts +4606 -0
  202. package/dist/schemas/verification.schema.d.ts.map +1 -0
  203. package/dist/schemas/verification.schema.js +114 -0
  204. package/dist/schemas/verification.schema.js.map +1 -0
  205. package/dist/schemas/webhook-event.schema.d.ts +3534 -0
  206. package/dist/schemas/webhook-event.schema.d.ts.map +1 -0
  207. package/dist/schemas/webhook-event.schema.js +83 -0
  208. package/dist/schemas/webhook-event.schema.js.map +1 -0
  209. package/dist/types/account.d.ts +36 -7
  210. package/dist/types/account.d.ts.map +1 -1
  211. package/dist/types/account.js +3 -1
  212. package/dist/types/account.js.map +1 -1
  213. package/dist/types/admin.d.ts +20 -10
  214. package/dist/types/admin.d.ts.map +1 -1
  215. package/dist/types/admin.js +3 -1
  216. package/dist/types/admin.js.map +1 -1
  217. package/dist/types/api.d.ts +184 -109
  218. package/dist/types/api.d.ts.map +1 -1
  219. package/dist/types/api.js +2 -1
  220. package/dist/types/api.js.map +1 -1
  221. package/dist/types/chat.d.ts +38 -20
  222. package/dist/types/chat.d.ts.map +1 -1
  223. package/dist/types/chat.js +3 -1
  224. package/dist/types/chat.js.map +1 -1
  225. package/dist/types/common.d.ts +39 -12
  226. package/dist/types/common.d.ts.map +1 -1
  227. package/dist/types/common.js +4 -1
  228. package/dist/types/common.js.map +1 -1
  229. package/dist/types/company.d.ts +61 -44
  230. package/dist/types/company.d.ts.map +1 -1
  231. package/dist/types/company.js +3 -1
  232. package/dist/types/company.js.map +1 -1
  233. package/dist/types/flag.d.ts +19 -8
  234. package/dist/types/flag.d.ts.map +1 -1
  235. package/dist/types/flag.js +3 -1
  236. package/dist/types/flag.js.map +1 -1
  237. package/dist/types/forms.d.ts +334 -0
  238. package/dist/types/forms.d.ts.map +1 -0
  239. package/dist/types/forms.js +5 -0
  240. package/dist/types/forms.js.map +1 -0
  241. package/dist/types/index.d.ts +18 -13
  242. package/dist/types/index.d.ts.map +1 -1
  243. package/dist/types/index.js +18 -13
  244. package/dist/types/index.js.map +1 -1
  245. package/dist/types/marketplace.d.ts +174 -104
  246. package/dist/types/marketplace.d.ts.map +1 -1
  247. package/dist/types/marketplace.js +2 -0
  248. package/dist/types/marketplace.js.map +1 -1
  249. package/dist/types/match.d.ts +36 -19
  250. package/dist/types/match.d.ts.map +1 -1
  251. package/dist/types/match.js +3 -1
  252. package/dist/types/match.js.map +1 -1
  253. package/dist/types/navigation.d.ts +305 -0
  254. package/dist/types/navigation.d.ts.map +1 -0
  255. package/dist/types/navigation.js +18 -0
  256. package/dist/types/navigation.js.map +1 -0
  257. package/dist/types/notification.d.ts +92 -0
  258. package/dist/types/notification.d.ts.map +1 -0
  259. package/dist/types/notification.js +5 -0
  260. package/dist/types/notification.js.map +1 -0
  261. package/dist/types/payment.d.ts +70 -38
  262. package/dist/types/payment.d.ts.map +1 -1
  263. package/dist/types/payment.js +3 -1
  264. package/dist/types/payment.js.map +1 -1
  265. package/dist/types/policy.d.ts +174 -81
  266. package/dist/types/policy.d.ts.map +1 -1
  267. package/dist/types/policy.js.map +1 -1
  268. package/dist/types/profile.d.ts +48 -37
  269. package/dist/types/profile.d.ts.map +1 -1
  270. package/dist/types/profile.js +3 -1
  271. package/dist/types/profile.js.map +1 -1
  272. package/dist/types/socket.d.ts +431 -0
  273. package/dist/types/socket.d.ts.map +1 -0
  274. package/dist/types/socket.js +5 -0
  275. package/dist/types/socket.js.map +1 -0
  276. package/dist/types/verification.d.ts +18 -9
  277. package/dist/types/verification.d.ts.map +1 -1
  278. package/dist/types/verification.js +3 -1
  279. package/dist/types/verification.js.map +1 -1
  280. package/dist/types/worker.d.ts +452 -0
  281. package/dist/types/worker.d.ts.map +1 -0
  282. package/dist/types/worker.js +5 -0
  283. package/dist/types/worker.js.map +1 -0
  284. package/dist/validation/index.d.ts +5 -0
  285. package/dist/validation/index.d.ts.map +1 -0
  286. package/dist/validation/index.js +9 -0
  287. package/dist/validation/index.js.map +1 -0
  288. package/dist/validation/messages.d.ts +124 -0
  289. package/dist/validation/messages.d.ts.map +1 -0
  290. package/dist/validation/messages.js +160 -0
  291. package/dist/validation/messages.js.map +1 -0
  292. package/dist/validation/schemas.d.ts +1127 -0
  293. package/dist/validation/schemas.d.ts.map +1 -0
  294. package/dist/validation/schemas.js +376 -0
  295. package/dist/validation/schemas.js.map +1 -0
  296. package/dist/validation/validators.d.ts +229 -0
  297. package/dist/validation/validators.d.ts.map +1 -0
  298. package/dist/validation/validators.js +307 -0
  299. package/dist/validation/validators.js.map +1 -0
  300. package/package.json +37 -3
@@ -0,0 +1,43 @@
1
+ export interface ServiceConfig {
2
+ serviceName: string;
3
+ nodeEnv: string;
4
+ port: number;
5
+ apiVersion: string;
6
+ mongoUri: string;
7
+ redisUrl?: string;
8
+ firebaseProjectId?: string;
9
+ firebaseDatabaseUrl?: string;
10
+ firebaseStorageBucket?: string;
11
+ jwtSecret: string;
12
+ jwtExpiresIn: string;
13
+ mainServiceUrl?: string;
14
+ workersServiceUrl?: string;
15
+ listenerServiceUrl?: string;
16
+ cloudTasksProject?: string;
17
+ cloudTasksLocation?: string;
18
+ cloudTasksQueue?: string;
19
+ corsOrigins?: string;
20
+ socketPingTimeout?: number;
21
+ socketPingInterval?: number;
22
+ [key: string]: string | number | boolean | undefined;
23
+ }
24
+ /**
25
+ * Initialize configuration from environment variables
26
+ * @param serviceName - The name of the service for logging
27
+ */
28
+ export declare function initConfig(serviceName: string): Promise<void>;
29
+ /**
30
+ * Get the current configuration
31
+ * @returns The service configuration
32
+ * @throws Error if config has not been initialized
33
+ */
34
+ export declare function getConfig(): ServiceConfig;
35
+ /**
36
+ * Check if configuration has been initialized
37
+ */
38
+ export declare function isConfigInitialized(): boolean;
39
+ /**
40
+ * Get a specific config value with a fallback
41
+ */
42
+ export declare function getConfigValue<T extends string | number | boolean>(key: keyof ServiceConfig, fallback: T): T;
43
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/backend/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAE5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IAGnB,QAAQ,EAAE,MAAM,CAAC;IAGjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAG/B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IAGrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACtD;AAKD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDnE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,aAAa,CAKzC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAM5G"}
@@ -0,0 +1,82 @@
1
+ // ============================================
2
+ // Configuration Management
3
+ // Backend-only utility for environment configuration
4
+ // ============================================
5
+ // Global config instance
6
+ let config = null;
7
+ /**
8
+ * Initialize configuration from environment variables
9
+ * @param serviceName - The name of the service for logging
10
+ */
11
+ export async function initConfig(serviceName) {
12
+ const nodeEnv = process.env.NODE_ENV || 'development';
13
+ config = {
14
+ // Service identification
15
+ serviceName,
16
+ nodeEnv,
17
+ port: parseInt(process.env.PORT || '3000', 10),
18
+ apiVersion: process.env.API_VERSION || 'v1',
19
+ // Database
20
+ mongoUri: process.env.MONGO_URI || process.env.DATABASE_URL || 'mongodb://localhost:27017/knotr',
21
+ // Redis
22
+ redisUrl: process.env.REDIS_URL,
23
+ // Firebase
24
+ firebaseProjectId: process.env.FIREBASE_PROJECT_ID || process.env.GOOGLE_CLOUD_PROJECT,
25
+ firebaseDatabaseUrl: process.env.FIREBASE_DATABASE_URL,
26
+ firebaseStorageBucket: process.env.FIREBASE_STORAGE_BUCKET,
27
+ // JWT
28
+ jwtSecret: process.env.JWT_SECRET || 'development-secret-change-in-production',
29
+ jwtExpiresIn: process.env.JWT_EXPIRES_IN || '7d',
30
+ // API URLs
31
+ mainServiceUrl: process.env.MAIN_SERVICE_URL,
32
+ workersServiceUrl: process.env.WORKERS_SERVICE_URL,
33
+ listenerServiceUrl: process.env.LISTENER_SERVICE_URL,
34
+ // Cloud Tasks
35
+ cloudTasksProject: process.env.GOOGLE_CLOUD_PROJECT,
36
+ cloudTasksLocation: process.env.CLOUD_TASKS_LOCATION || 'us-central1',
37
+ cloudTasksQueue: process.env.CLOUD_TASKS_QUEUE || 'default',
38
+ // CORS
39
+ corsOrigins: process.env.CORS_ORIGINS,
40
+ // Socket.IO
41
+ socketPingTimeout: parseInt(process.env.SOCKET_PING_TIMEOUT || '60000', 10),
42
+ socketPingInterval: parseInt(process.env.SOCKET_PING_INTERVAL || '25000', 10),
43
+ };
44
+ // Load additional env vars with KNOTR_ prefix
45
+ Object.keys(process.env).forEach((key) => {
46
+ if (key.startsWith('KNOTR_') && config) {
47
+ const configKey = key
48
+ .replace('KNOTR_', '')
49
+ .toLowerCase()
50
+ .replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
51
+ config[configKey] = process.env[key];
52
+ }
53
+ });
54
+ }
55
+ /**
56
+ * Get the current configuration
57
+ * @returns The service configuration
58
+ * @throws Error if config has not been initialized
59
+ */
60
+ export function getConfig() {
61
+ if (!config) {
62
+ throw new Error('Configuration not initialized. Call initConfig() first.');
63
+ }
64
+ return config;
65
+ }
66
+ /**
67
+ * Check if configuration has been initialized
68
+ */
69
+ export function isConfigInitialized() {
70
+ return config !== null;
71
+ }
72
+ /**
73
+ * Get a specific config value with a fallback
74
+ */
75
+ export function getConfigValue(key, fallback) {
76
+ if (!config) {
77
+ return fallback;
78
+ }
79
+ const value = config[key];
80
+ return (value !== undefined ? value : fallback);
81
+ }
82
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/backend/config.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,2BAA2B;AAC3B,qDAAqD;AACrD,+CAA+C;AA6C/C,yBAAyB;AACzB,IAAI,MAAM,GAAyB,IAAI,CAAC;AAExC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAmB;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;IAEtD,MAAM,GAAG;QACP,yBAAyB;QACzB,WAAW;QACX,OAAO;QACP,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC;QAC9C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI;QAE3C,WAAW;QACX,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,iCAAiC;QAEhG,QAAQ;QACR,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;QAE/B,WAAW;QACX,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB;QACtF,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;QACtD,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;QAE1D,MAAM;QACN,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,yCAAyC;QAC9E,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI;QAEhD,WAAW;QACX,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;QAC5C,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;QAClD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;QAEpD,cAAc;QACd,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;QACnD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,aAAa;QACrE,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,SAAS;QAE3D,OAAO;QACP,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QAErC,YAAY;QACZ,iBAAiB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,EAAE,EAAE,CAAC;QAC3E,kBAAkB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,EAAE,EAAE,CAAC;KAC9E,CAAC;IAEF,8CAA8C;IAC9C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACvC,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,GAAG;iBAClB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;iBACrB,WAAW,EAAE;iBACb,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7D,MAAM,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,MAAM,KAAK,IAAI,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAsC,GAAwB,EAAE,QAAW;IACvG,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAM,CAAC;AACvD,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Set the mongoose instance to use for database connections
3
+ * This should be called before using any database functions
4
+ */
5
+ export declare function setMongoose(mongoose: typeof import('mongoose')): void;
6
+ /**
7
+ * Get the mongoose instance
8
+ */
9
+ export declare function getMongoose(): typeof import('mongoose');
10
+ /**
11
+ * Connect to MongoDB database
12
+ * @param uri - Optional custom connection URI (defaults to config)
13
+ * @param options - Optional mongoose connection options
14
+ */
15
+ export declare function connectDatabase(uri?: string, options?: Record<string, unknown>): Promise<void>;
16
+ /**
17
+ * Disconnect from MongoDB database
18
+ */
19
+ export declare function disconnectDatabase(): Promise<void>;
20
+ /**
21
+ * Check if database is connected
22
+ */
23
+ export declare function isDatabaseConnected(): boolean;
24
+ /**
25
+ * Get the current database connection
26
+ */
27
+ export declare function getDatabaseConnection(): import('mongoose').Connection | null;
28
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/backend/database.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,UAAU,CAAC,GAAG,IAAI,CAErE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,cAAc,UAAU,CAAC,CAKvD;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDpG;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAcxD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAK7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,UAAU,EAAE,UAAU,GAAG,IAAI,CAK5E"}
@@ -0,0 +1,112 @@
1
+ // ============================================
2
+ // Database Connection Utility
3
+ // Backend-only MongoDB connection management
4
+ // ============================================
5
+ import { getConfig, isConfigInitialized } from './config.js';
6
+ import { logger } from './logger.js';
7
+ // Store mongoose instance to avoid importing it directly
8
+ // This allows the toolkit to work without mongoose as a hard dependency
9
+ let mongooseInstance = null;
10
+ /**
11
+ * Set the mongoose instance to use for database connections
12
+ * This should be called before using any database functions
13
+ */
14
+ export function setMongoose(mongoose) {
15
+ mongooseInstance = mongoose;
16
+ }
17
+ /**
18
+ * Get the mongoose instance
19
+ */
20
+ export function getMongoose() {
21
+ if (!mongooseInstance) {
22
+ throw new Error('Mongoose not initialized. Call setMongoose() first.');
23
+ }
24
+ return mongooseInstance;
25
+ }
26
+ /**
27
+ * Connect to MongoDB database
28
+ * @param uri - Optional custom connection URI (defaults to config)
29
+ * @param options - Optional mongoose connection options
30
+ */
31
+ export async function connectDatabase(uri, options) {
32
+ if (!mongooseInstance) {
33
+ throw new Error('Mongoose not initialized. Call setMongoose() first.');
34
+ }
35
+ const connectionUri = uri || (isConfigInitialized() ? getConfig().mongoUri : undefined);
36
+ if (!connectionUri) {
37
+ throw new Error('No MongoDB URI provided. Either pass a URI or initialize config first.');
38
+ }
39
+ const defaultOptions = {
40
+ autoIndex: process.env.NODE_ENV !== 'production',
41
+ autoCreate: process.env.NODE_ENV !== 'production',
42
+ maxPoolSize: parseInt(process.env.MONGO_POOL_SIZE || '10', 10),
43
+ minPoolSize: parseInt(process.env.MONGO_MIN_POOL_SIZE || '2', 10),
44
+ serverSelectionTimeoutMS: 5000,
45
+ socketTimeoutMS: 45000,
46
+ family: 4, // Use IPv4
47
+ };
48
+ const connectionOptions = { ...defaultOptions, ...options };
49
+ try {
50
+ // Set mongoose options
51
+ mongooseInstance.set('strictQuery', true);
52
+ // Connect
53
+ await mongooseInstance.connect(connectionUri, connectionOptions);
54
+ // Log connection events
55
+ mongooseInstance.connection.on('connected', () => {
56
+ logger.info('MongoDB connected');
57
+ });
58
+ mongooseInstance.connection.on('error', (err) => {
59
+ logger.error('MongoDB connection error', { error: String(err) });
60
+ });
61
+ mongooseInstance.connection.on('disconnected', () => {
62
+ logger.warn('MongoDB disconnected');
63
+ });
64
+ logger.info('MongoDB connection established', {
65
+ database: mongooseInstance.connection.name,
66
+ host: mongooseInstance.connection.host,
67
+ });
68
+ }
69
+ catch (error) {
70
+ logger.error('Failed to connect to MongoDB', {
71
+ error: error instanceof Error ? error.message : String(error),
72
+ });
73
+ throw error;
74
+ }
75
+ }
76
+ /**
77
+ * Disconnect from MongoDB database
78
+ */
79
+ export async function disconnectDatabase() {
80
+ if (!mongooseInstance) {
81
+ return;
82
+ }
83
+ try {
84
+ await mongooseInstance.disconnect();
85
+ logger.info('MongoDB disconnected gracefully');
86
+ }
87
+ catch (error) {
88
+ logger.error('Error disconnecting from MongoDB', {
89
+ error: error instanceof Error ? error.message : String(error),
90
+ });
91
+ throw error;
92
+ }
93
+ }
94
+ /**
95
+ * Check if database is connected
96
+ */
97
+ export function isDatabaseConnected() {
98
+ if (!mongooseInstance) {
99
+ return false;
100
+ }
101
+ return mongooseInstance.connection.readyState === 1;
102
+ }
103
+ /**
104
+ * Get the current database connection
105
+ */
106
+ export function getDatabaseConnection() {
107
+ if (!mongooseInstance) {
108
+ return null;
109
+ }
110
+ return mongooseInstance.connection;
111
+ }
112
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/backend/database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Set the firebase-admin instance to use
3
+ * This should be called before using any Firebase functions
4
+ */
5
+ export declare function setFirebaseAdmin(admin: any): void;
6
+ /**
7
+ * Get the firebase-admin instance
8
+ */
9
+ export declare function getFirebaseAdmin(): any;
10
+ /**
11
+ * Initialize Firebase Admin SDK
12
+ * Uses Application Default Credentials when running on Google Cloud
13
+ */
14
+ export declare function initFirebase(): Promise<void>;
15
+ /**
16
+ * Check if Firebase is initialized
17
+ */
18
+ export declare function isFirebaseInitialized(): boolean;
19
+ /**
20
+ * Get Firebase Auth instance
21
+ */
22
+ export declare function getFirebaseAuth(): any;
23
+ /**
24
+ * Get Firebase Firestore instance
25
+ */
26
+ export declare function getFirestore(): any;
27
+ /**
28
+ * Get Firebase Storage instance
29
+ */
30
+ export declare function getFirebaseStorage(): any;
31
+ /**
32
+ * Get Firebase Messaging (FCM) instance
33
+ */
34
+ export declare function getFirebaseMessaging(): any;
35
+ /**
36
+ * Get Firebase Realtime Database instance
37
+ */
38
+ export declare function getRealtimeDatabase(): any;
39
+ export interface PushNotificationData {
40
+ title: string;
41
+ body: string;
42
+ imageUrl?: string;
43
+ data?: Record<string, string>;
44
+ }
45
+ /**
46
+ * Send a push notification to a single device
47
+ */
48
+ export declare function sendPushNotification(token: string, notification: PushNotificationData): Promise<string>;
49
+ /**
50
+ * Send push notifications to multiple devices
51
+ */
52
+ export declare function sendMulticastNotification(tokens: string[], notification: PushNotificationData): Promise<{
53
+ successCount: number;
54
+ failureCount: number;
55
+ }>;
56
+ /**
57
+ * Emit a notification via Socket.IO (wrapper around ioEmitToUser)
58
+ */
59
+ export declare function emitNotification(userId: string, notification: {
60
+ notificationId: string;
61
+ type: string;
62
+ title: string;
63
+ body: string;
64
+ data?: Record<string, unknown>;
65
+ priority?: 'low' | 'normal' | 'high';
66
+ createdAt?: Date;
67
+ }): Promise<void>;
68
+ //# sourceMappingURL=firebase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase.d.ts","sourceRoot":"","sources":["../../src/backend/firebase.ts"],"names":[],"mappings":"AAcA;;;GAGG;AAEH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAEjD;AAED;;GAEG;AAEH,wBAAgB,gBAAgB,IAAI,GAAG,CAKtC;AAED;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAmDlD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;GAEG;AAEH,wBAAgB,eAAe,IAAI,GAAG,CAKrC;AAED;;GAEG;AAEH,wBAAgB,YAAY,IAAI,GAAG,CAKlC;AAED;;GAEG;AAEH,wBAAgB,kBAAkB,IAAI,GAAG,CAKxC;AAED;;GAEG;AAEH,wBAAgB,oBAAoB,IAAI,GAAG,CAK1C;AAED;;GAEG;AAEH,wBAAgB,mBAAmB,IAAI,GAAG,CAKzC;AAMD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsC7G;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,EAAE,EAChB,YAAY,EAAE,oBAAoB,GACjC,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CA8CzD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB,GACA,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -0,0 +1,233 @@
1
+ // ============================================
2
+ // Firebase Admin SDK Initialization
3
+ // Backend-only Firebase setup
4
+ // ============================================
5
+ import { getConfig, isConfigInitialized } from './config.js';
6
+ import { logger } from './logger.js';
7
+ // Store firebase-admin instance to avoid importing it directly
8
+ // This allows the toolkit to work without firebase-admin as a hard dependency
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ let firebaseAdminInstance = null;
11
+ let initialized = false;
12
+ /**
13
+ * Set the firebase-admin instance to use
14
+ * This should be called before using any Firebase functions
15
+ */
16
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
+ export function setFirebaseAdmin(admin) {
18
+ firebaseAdminInstance = admin;
19
+ }
20
+ /**
21
+ * Get the firebase-admin instance
22
+ */
23
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
+ export function getFirebaseAdmin() {
25
+ if (!firebaseAdminInstance) {
26
+ throw new Error('Firebase Admin not initialized. Call setFirebaseAdmin() first.');
27
+ }
28
+ return firebaseAdminInstance;
29
+ }
30
+ /**
31
+ * Initialize Firebase Admin SDK
32
+ * Uses Application Default Credentials when running on Google Cloud
33
+ */
34
+ export async function initFirebase() {
35
+ if (!firebaseAdminInstance) {
36
+ throw new Error('Firebase Admin not initialized. Call setFirebaseAdmin() first.');
37
+ }
38
+ if (initialized) {
39
+ logger.debug('Firebase already initialized, skipping');
40
+ return;
41
+ }
42
+ try {
43
+ const config = isConfigInitialized() ? getConfig() : null;
44
+ // Check if already initialized
45
+ if (firebaseAdminInstance.apps.length > 0) {
46
+ initialized = true;
47
+ logger.debug('Firebase already has initialized apps');
48
+ return;
49
+ }
50
+ // Initialize with project config
51
+ const initOptions = {};
52
+ if (config?.firebaseProjectId) {
53
+ initOptions.projectId = config.firebaseProjectId;
54
+ }
55
+ if (config?.firebaseStorageBucket) {
56
+ initOptions.storageBucket = config.firebaseStorageBucket;
57
+ }
58
+ if (config?.firebaseDatabaseUrl) {
59
+ initOptions.databaseURL = config.firebaseDatabaseUrl;
60
+ }
61
+ // Use application default credentials (works on Google Cloud)
62
+ // For local development, set GOOGLE_APPLICATION_CREDENTIALS env var
63
+ firebaseAdminInstance.initializeApp(initOptions);
64
+ initialized = true;
65
+ logger.info('Firebase Admin SDK initialized', {
66
+ projectId: config?.firebaseProjectId,
67
+ hasStorage: !!config?.firebaseStorageBucket,
68
+ hasDatabase: !!config?.firebaseDatabaseUrl,
69
+ });
70
+ }
71
+ catch (error) {
72
+ logger.error('Failed to initialize Firebase', {
73
+ error: error instanceof Error ? error.message : String(error),
74
+ });
75
+ throw error;
76
+ }
77
+ }
78
+ /**
79
+ * Check if Firebase is initialized
80
+ */
81
+ export function isFirebaseInitialized() {
82
+ return initialized && firebaseAdminInstance !== null && firebaseAdminInstance.apps.length > 0;
83
+ }
84
+ /**
85
+ * Get Firebase Auth instance
86
+ */
87
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
88
+ export function getFirebaseAuth() {
89
+ if (!firebaseAdminInstance || !initialized) {
90
+ throw new Error('Firebase not initialized. Call initFirebase() first.');
91
+ }
92
+ return firebaseAdminInstance.auth();
93
+ }
94
+ /**
95
+ * Get Firebase Firestore instance
96
+ */
97
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
98
+ export function getFirestore() {
99
+ if (!firebaseAdminInstance || !initialized) {
100
+ throw new Error('Firebase not initialized. Call initFirebase() first.');
101
+ }
102
+ return firebaseAdminInstance.firestore();
103
+ }
104
+ /**
105
+ * Get Firebase Storage instance
106
+ */
107
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
108
+ export function getFirebaseStorage() {
109
+ if (!firebaseAdminInstance || !initialized) {
110
+ throw new Error('Firebase not initialized. Call initFirebase() first.');
111
+ }
112
+ return firebaseAdminInstance.storage();
113
+ }
114
+ /**
115
+ * Get Firebase Messaging (FCM) instance
116
+ */
117
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
118
+ export function getFirebaseMessaging() {
119
+ if (!firebaseAdminInstance || !initialized) {
120
+ throw new Error('Firebase not initialized. Call initFirebase() first.');
121
+ }
122
+ return firebaseAdminInstance.messaging();
123
+ }
124
+ /**
125
+ * Get Firebase Realtime Database instance
126
+ */
127
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
128
+ export function getRealtimeDatabase() {
129
+ if (!firebaseAdminInstance || !initialized) {
130
+ throw new Error('Firebase not initialized. Call initFirebase() first.');
131
+ }
132
+ return firebaseAdminInstance.database();
133
+ }
134
+ /**
135
+ * Send a push notification to a single device
136
+ */
137
+ export async function sendPushNotification(token, notification) {
138
+ const messaging = getFirebaseMessaging();
139
+ const message = {
140
+ token,
141
+ notification: {
142
+ title: notification.title,
143
+ body: notification.body,
144
+ ...(notification.imageUrl && { imageUrl: notification.imageUrl }),
145
+ },
146
+ ...(notification.data && { data: notification.data }),
147
+ android: {
148
+ priority: 'high',
149
+ notification: {
150
+ sound: 'default',
151
+ clickAction: 'FLUTTER_NOTIFICATION_CLICK',
152
+ },
153
+ },
154
+ apns: {
155
+ payload: {
156
+ aps: {
157
+ sound: 'default',
158
+ badge: 1,
159
+ },
160
+ },
161
+ },
162
+ };
163
+ try {
164
+ const result = await messaging.send(message);
165
+ logger.debug('Push notification sent', { token: token.substring(0, 10) + '...', result });
166
+ return result;
167
+ }
168
+ catch (error) {
169
+ logger.error('Failed to send push notification', {
170
+ error: error instanceof Error ? error.message : String(error),
171
+ });
172
+ throw error;
173
+ }
174
+ }
175
+ /**
176
+ * Send push notifications to multiple devices
177
+ */
178
+ export async function sendMulticastNotification(tokens, notification) {
179
+ if (tokens.length === 0) {
180
+ return { successCount: 0, failureCount: 0 };
181
+ }
182
+ const messaging = getFirebaseMessaging();
183
+ const message = {
184
+ tokens,
185
+ notification: {
186
+ title: notification.title,
187
+ body: notification.body,
188
+ ...(notification.imageUrl && { imageUrl: notification.imageUrl }),
189
+ },
190
+ ...(notification.data && { data: notification.data }),
191
+ android: {
192
+ priority: 'high',
193
+ notification: {
194
+ sound: 'default',
195
+ },
196
+ },
197
+ apns: {
198
+ payload: {
199
+ aps: {
200
+ sound: 'default',
201
+ },
202
+ },
203
+ },
204
+ };
205
+ try {
206
+ const result = await messaging.sendEachForMulticast(message);
207
+ logger.debug('Multicast notification sent', {
208
+ successCount: result.successCount,
209
+ failureCount: result.failureCount,
210
+ });
211
+ return {
212
+ successCount: result.successCount,
213
+ failureCount: result.failureCount,
214
+ };
215
+ }
216
+ catch (error) {
217
+ logger.error('Failed to send multicast notification', {
218
+ error: error instanceof Error ? error.message : String(error),
219
+ });
220
+ throw error;
221
+ }
222
+ }
223
+ /**
224
+ * Emit a notification via Socket.IO (wrapper around ioEmitToUser)
225
+ */
226
+ export async function emitNotification(userId, notification) {
227
+ const { ioEmitToUser } = await import('./socket.js');
228
+ await ioEmitToUser(userId, 'notification:new', {
229
+ ...notification,
230
+ createdAt: notification.createdAt || new Date(),
231
+ });
232
+ }
233
+ //# sourceMappingURL=firebase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase.js","sourceRoot":"","sources":["../../src/backend/firebase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { getConfig, getConfigValue, initConfig, isConfigInitialized, type ServiceConfig } from './config.js';
2
+ export { createLogger, logger, type LogEntry, type LogLevel, type Logger } from './logger.js';
3
+ export { connectDatabase, disconnectDatabase, getDatabaseConnection, getMongoose, isDatabaseConnected, setMongoose, } from './database.js';
4
+ export { emitNotification, getFirebaseAdmin, getFirebaseAuth, getFirebaseMessaging, getFirebaseStorage, getFirestore, getRealtimeDatabase, initFirebase, isFirebaseInitialized, sendMulticastNotification, sendPushNotification, setFirebaseAdmin, type PushNotificationData, } from './firebase.js';
5
+ export { postWorkerRequest, scheduleWorkerRequest, scheduleWorkerRequestAt, setCloudTasksClient, type WorkerRequestOptions, type WorkerRequestPayload, } from './worker-queue.js';
6
+ export { closeRedisConnections, createRedisClients, getRedisClient, getRedisPubClient, getRedisSubClient, redisDel, redisGet, redisPublish, redisSet, redisSubscribe, setRedisClients, } from './redis.js';
7
+ export { emitChatMessage, emitNewMatch, emitReadReceipt, emitTypingIndicator, getSocketServer, hasSocketServer, ioEmitToAccount, ioEmitToChat, ioEmitToMatch, ioEmitToUser, setSocketServer, subscribeToSocketEvents, type ChatMessagePayload, type NewMatchPayload, } from './socket.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/backend/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAG7G,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAG9F,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,WAAW,GACZ,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,eAAe,EACf,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,19 @@
1
+ // ============================================
2
+ // Backend Utilities - Barrel Export
3
+ // These utilities are for backend services only
4
+ // ============================================
5
+ // Configuration
6
+ export { getConfig, getConfigValue, initConfig, isConfigInitialized } from './config.js';
7
+ // Logging
8
+ export { createLogger, logger } from './logger.js';
9
+ // Database
10
+ export { connectDatabase, disconnectDatabase, getDatabaseConnection, getMongoose, isDatabaseConnected, setMongoose, } from './database.js';
11
+ // Firebase
12
+ export { emitNotification, getFirebaseAdmin, getFirebaseAuth, getFirebaseMessaging, getFirebaseStorage, getFirestore, getRealtimeDatabase, initFirebase, isFirebaseInitialized, sendMulticastNotification, sendPushNotification, setFirebaseAdmin, } from './firebase.js';
13
+ // Worker Queue / Cloud Tasks
14
+ export { postWorkerRequest, scheduleWorkerRequest, scheduleWorkerRequestAt, setCloudTasksClient, } from './worker-queue.js';
15
+ // Redis
16
+ export { closeRedisConnections, createRedisClients, getRedisClient, getRedisPubClient, getRedisSubClient, redisDel, redisGet, redisPublish, redisSet, redisSubscribe, setRedisClients, } from './redis.js';
17
+ // Socket.IO
18
+ export { emitChatMessage, emitNewMatch, emitReadReceipt, emitTypingIndicator, getSocketServer, hasSocketServer, ioEmitToAccount, ioEmitToChat, ioEmitToMatch, ioEmitToUser, setSocketServer, subscribeToSocketEvents, } from './socket.js';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/backend/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,oCAAoC;AACpC,gDAAgD;AAChD,+CAA+C;AAE/C,gBAAgB;AAChB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,EAAsB,MAAM,aAAa,CAAC;AAE7G,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,EAA6C,MAAM,aAAa,CAAC;AAE9F,WAAW;AACX,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,WAAW;AACX,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,gBAAgB,GAEjB,MAAM,eAAe,CAAC;AAEvB,6BAA6B;AAC7B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,GAGpB,MAAM,mBAAmB,CAAC;AAE3B,QAAQ;AACR,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,YAAY;AACZ,OAAO,EACL,eAAe,EACf,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,eAAe,EACf,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,uBAAuB,GAGxB,MAAM,aAAa,CAAC"}