@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,23 @@
1
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
2
+ export interface LogEntry {
3
+ level: LogLevel;
4
+ message: string;
5
+ timestamp: string;
6
+ service?: string;
7
+ [key: string]: unknown;
8
+ }
9
+ export interface Logger {
10
+ debug(message: string, meta?: Record<string, unknown>): void;
11
+ info(message: string, meta?: Record<string, unknown>): void;
12
+ warn(message: string, meta?: Record<string, unknown>): void;
13
+ error(message: string, meta?: Record<string, unknown>): void;
14
+ }
15
+ /**
16
+ * Structured logger for backend services
17
+ */
18
+ export declare const logger: Logger;
19
+ /**
20
+ * Create a child logger with preset metadata
21
+ */
22
+ export declare function createLogger(defaultMeta: Record<string, unknown>): Logger;
23
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/backend/logger.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC9D;AA+ED;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,MAapB,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAezE"}
@@ -0,0 +1,107 @@
1
+ // ============================================
2
+ // Logger Utility
3
+ // Backend-only structured logging
4
+ // ============================================
5
+ // Get log level from environment
6
+ function getLogLevel() {
7
+ const envLevel = process.env.LOG_LEVEL?.toLowerCase();
8
+ if (envLevel === 'debug' || envLevel === 'info' || envLevel === 'warn' || envLevel === 'error') {
9
+ return envLevel;
10
+ }
11
+ return process.env.NODE_ENV === 'production' ? 'info' : 'debug';
12
+ }
13
+ // Determine if we should use JSON format (production) or human-readable (development)
14
+ function useJsonFormat() {
15
+ return process.env.NODE_ENV === 'production' || process.env.LOG_FORMAT === 'json';
16
+ }
17
+ // Log level priority
18
+ const levelPriority = {
19
+ debug: 0,
20
+ info: 1,
21
+ warn: 2,
22
+ error: 3,
23
+ };
24
+ // Get service name from environment or default
25
+ function getServiceName() {
26
+ return process.env.SERVICE_NAME || process.env.npm_package_name || 'knotr-service';
27
+ }
28
+ // Format log entry for output
29
+ function formatLogEntry(level, message, meta) {
30
+ const entry = {
31
+ level,
32
+ message,
33
+ timestamp: new Date().toISOString(),
34
+ service: getServiceName(),
35
+ ...meta,
36
+ };
37
+ if (useJsonFormat()) {
38
+ return JSON.stringify(entry);
39
+ }
40
+ // Human-readable format for development
41
+ const metaStr = meta && Object.keys(meta).length > 0 ? ` ${JSON.stringify(meta)}` : '';
42
+ const levelUpper = level.toUpperCase().padEnd(5);
43
+ return `[${entry.timestamp}] ${levelUpper} ${message}${metaStr}`;
44
+ }
45
+ // Output log to console
46
+ function log(level, message, meta) {
47
+ const currentLevel = getLogLevel();
48
+ if (levelPriority[level] < levelPriority[currentLevel]) {
49
+ return;
50
+ }
51
+ const formattedEntry = formatLogEntry(level, message, meta);
52
+ // tslint:disable-next-line:no-console
53
+ switch (level) {
54
+ case 'error':
55
+ // tslint:disable-next-line:no-console
56
+ console.error(formattedEntry);
57
+ break;
58
+ case 'warn':
59
+ // tslint:disable-next-line:no-console
60
+ console.warn(formattedEntry);
61
+ break;
62
+ case 'debug':
63
+ // tslint:disable-next-line:no-console
64
+ console.debug(formattedEntry);
65
+ break;
66
+ default:
67
+ // tslint:disable-next-line:no-console
68
+ console.log(formattedEntry);
69
+ }
70
+ }
71
+ /**
72
+ * Structured logger for backend services
73
+ */
74
+ export const logger = {
75
+ debug(message, meta) {
76
+ log('debug', message, meta);
77
+ },
78
+ info(message, meta) {
79
+ log('info', message, meta);
80
+ },
81
+ warn(message, meta) {
82
+ log('warn', message, meta);
83
+ },
84
+ error(message, meta) {
85
+ log('error', message, meta);
86
+ },
87
+ };
88
+ /**
89
+ * Create a child logger with preset metadata
90
+ */
91
+ export function createLogger(defaultMeta) {
92
+ return {
93
+ debug(message, meta) {
94
+ log('debug', message, { ...defaultMeta, ...meta });
95
+ },
96
+ info(message, meta) {
97
+ log('info', message, { ...defaultMeta, ...meta });
98
+ },
99
+ warn(message, meta) {
100
+ log('warn', message, { ...defaultMeta, ...meta });
101
+ },
102
+ error(message, meta) {
103
+ log('error', message, { ...defaultMeta, ...meta });
104
+ },
105
+ };
106
+ }
107
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/backend/logger.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,iBAAiB;AACjB,kCAAkC;AAClC,+CAA+C;AAmB/C,iCAAiC;AACjC,SAAS,WAAW;IAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC;IACtD,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC/F,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAClE,CAAC;AAED,sFAAsF;AACtF,SAAS,aAAa;IACpB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,CAAC;AACpF,CAAC;AAED,qBAAqB;AACrB,MAAM,aAAa,GAA6B;IAC9C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,+CAA+C;AAC/C,SAAS,cAAc;IACrB,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,eAAe,CAAC;AACrF,CAAC;AAED,8BAA8B;AAC9B,SAAS,cAAc,CAAC,KAAe,EAAE,OAAe,EAAE,IAA8B;IACtF,MAAM,KAAK,GAAa;QACtB,KAAK;QACL,OAAO;QACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO,EAAE,cAAc,EAAE;QACzB,GAAG,IAAI;KACR,CAAC;IAEF,IAAI,aAAa,EAAE,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,wCAAwC;IACxC,MAAM,OAAO,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACjD,OAAO,IAAI,KAAK,CAAC,SAAS,KAAK,UAAU,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC;AACnE,CAAC;AAED,wBAAwB;AACxB,SAAS,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,IAA8B;IAC3E,MAAM,YAAY,GAAG,WAAW,EAAE,CAAC;IAEnC,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC;QACvD,OAAO;IACT,CAAC;IAED,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAE5D,sCAAsC;IACtC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO;YACV,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC9B,MAAM;QACR,KAAK,MAAM;YACT,sCAAsC;YACtC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,OAAO;YACV,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC9B,MAAM;QACR;YACE,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAW;IAC5B,KAAK,CAAC,OAAe,EAAE,IAA8B;QACnD,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC,OAAe,EAAE,IAA8B;QAClD,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,CAAC,OAAe,EAAE,IAA8B;QAClD,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,KAAK,CAAC,OAAe,EAAE,IAA8B;QACnD,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,WAAoC;IAC/D,OAAO;QACL,KAAK,CAAC,OAAe,EAAE,IAA8B;YACnD,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,WAAW,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,OAAe,EAAE,IAA8B;YAClD,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,WAAW,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,OAAe,EAAE,IAA8B;YAClD,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,WAAW,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,KAAK,CAAC,OAAe,EAAE,IAA8B;YACnD,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,WAAW,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Set the Redis client instances
3
+ */
4
+ export declare function setRedisClients(options: {
5
+ client?: unknown;
6
+ pubClient?: unknown;
7
+ subClient?: unknown;
8
+ }): void;
9
+ /**
10
+ * Get the main Redis client
11
+ */
12
+ export declare function getRedisClient<T = unknown>(): T;
13
+ /**
14
+ * Get the Redis pub client
15
+ */
16
+ export declare function getRedisPubClient<T = unknown>(): T;
17
+ /**
18
+ * Get the Redis sub client
19
+ */
20
+ export declare function getRedisSubClient<T = unknown>(): T;
21
+ /**
22
+ * Create Redis clients using ioredis
23
+ * Returns raw clients that can be used with setRedisClients
24
+ * @param RedisConstructor - The Redis constructor from ioredis
25
+ * @param redisUrl - The Redis connection URL
26
+ */
27
+ export declare function createRedisClients(RedisConstructor: any, redisUrl?: string): Promise<{
28
+ client: unknown;
29
+ pubClient: unknown;
30
+ subClient: unknown;
31
+ }>;
32
+ /**
33
+ * Publish a message to a Redis channel
34
+ */
35
+ export declare function redisPublish(channel: string, message: unknown): Promise<void>;
36
+ /**
37
+ * Subscribe to a Redis channel
38
+ */
39
+ export declare function redisSubscribe(channel: string, callback: (message: string, channel: string) => void): Promise<void>;
40
+ /**
41
+ * Get a value from Redis
42
+ */
43
+ export declare function redisGet(key: string): Promise<string | null>;
44
+ /**
45
+ * Set a value in Redis
46
+ */
47
+ export declare function redisSet(key: string, value: string, options?: {
48
+ ex?: number;
49
+ px?: number;
50
+ }): Promise<void>;
51
+ /**
52
+ * Delete keys from Redis
53
+ */
54
+ export declare function redisDel(...keys: string[]): Promise<number>;
55
+ /**
56
+ * Close all Redis connections gracefully
57
+ */
58
+ export declare function closeRedisConnections(): Promise<void>;
59
+ //# sourceMappingURL=redis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/backend/redis.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAI7G;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAK/C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAKlD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAKlD;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAEtC,gBAAgB,EAAE,GAAG,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAgCtE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAInF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GACnD,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGlE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAahH;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAGjE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgC3D"}
@@ -0,0 +1,169 @@
1
+ // ============================================
2
+ // Redis Client Utilities
3
+ // Backend-only Redis connection and pub/sub
4
+ // ============================================
5
+ import { getConfig, isConfigInitialized } from './config.js';
6
+ import { logger } from './logger.js';
7
+ // Store Redis client instances
8
+ let redisClient = null;
9
+ let redisPubClient = null;
10
+ let redisSubClient = null;
11
+ /**
12
+ * Set the Redis client instances
13
+ */
14
+ export function setRedisClients(options) {
15
+ if (options.client)
16
+ redisClient = options.client;
17
+ if (options.pubClient)
18
+ redisPubClient = options.pubClient;
19
+ if (options.subClient)
20
+ redisSubClient = options.subClient;
21
+ }
22
+ /**
23
+ * Get the main Redis client
24
+ */
25
+ export function getRedisClient() {
26
+ if (!redisClient) {
27
+ throw new Error('Redis client not initialized. Call setRedisClients() first.');
28
+ }
29
+ return redisClient;
30
+ }
31
+ /**
32
+ * Get the Redis pub client
33
+ */
34
+ export function getRedisPubClient() {
35
+ if (!redisPubClient) {
36
+ throw new Error('Redis pub client not initialized. Call setRedisClients() first.');
37
+ }
38
+ return redisPubClient;
39
+ }
40
+ /**
41
+ * Get the Redis sub client
42
+ */
43
+ export function getRedisSubClient() {
44
+ if (!redisSubClient) {
45
+ throw new Error('Redis sub client not initialized. Call setRedisClients() first.');
46
+ }
47
+ return redisSubClient;
48
+ }
49
+ /**
50
+ * Create Redis clients using ioredis
51
+ * Returns raw clients that can be used with setRedisClients
52
+ * @param RedisConstructor - The Redis constructor from ioredis
53
+ * @param redisUrl - The Redis connection URL
54
+ */
55
+ export async function createRedisClients(
56
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
+ RedisConstructor, redisUrl) {
58
+ const url = redisUrl || (isConfigInitialized() ? getConfig().redisUrl : undefined);
59
+ if (!url) {
60
+ throw new Error('No Redis URL provided. Either pass a URL or set REDIS_URL in config.');
61
+ }
62
+ try {
63
+ const client = new RedisConstructor(url);
64
+ const pubClient = new RedisConstructor(url);
65
+ const subClient = new RedisConstructor(url);
66
+ // Set up error handlers
67
+ [client, pubClient, subClient].forEach((c, i) => {
68
+ const name = ['client', 'pubClient', 'subClient'][i];
69
+ c.on('error', (err) => {
70
+ logger.error(`Redis ${name} error`, { error: err.message });
71
+ });
72
+ c.on('connect', () => {
73
+ logger.debug(`Redis ${name} connected`);
74
+ });
75
+ });
76
+ logger.info('Redis clients created');
77
+ return { client, pubClient, subClient };
78
+ }
79
+ catch (error) {
80
+ logger.error('Failed to create Redis clients', {
81
+ error: error instanceof Error ? error.message : String(error),
82
+ });
83
+ throw error;
84
+ }
85
+ }
86
+ /**
87
+ * Publish a message to a Redis channel
88
+ */
89
+ export async function redisPublish(channel, message) {
90
+ const pub = getRedisPubClient();
91
+ const payload = typeof message === 'string' ? message : JSON.stringify(message);
92
+ await pub.publish(channel, payload);
93
+ }
94
+ /**
95
+ * Subscribe to a Redis channel
96
+ */
97
+ export async function redisSubscribe(channel, callback) {
98
+ const sub = getRedisSubClient();
99
+ await sub.subscribe(channel);
100
+ sub.on('message', (ch, msg) => {
101
+ if (ch === channel) {
102
+ callback(msg, ch);
103
+ }
104
+ });
105
+ }
106
+ /**
107
+ * Get a value from Redis
108
+ */
109
+ export async function redisGet(key) {
110
+ const client = getRedisClient();
111
+ return client.get(key);
112
+ }
113
+ /**
114
+ * Set a value in Redis
115
+ */
116
+ export async function redisSet(key, value, options) {
117
+ const client = getRedisClient();
118
+ const args = [];
119
+ if (options?.ex) {
120
+ args.push('EX', options.ex);
121
+ }
122
+ else if (options?.px) {
123
+ args.push('PX', options.px);
124
+ }
125
+ await client.set(key, value, ...args);
126
+ }
127
+ /**
128
+ * Delete keys from Redis
129
+ */
130
+ export async function redisDel(...keys) {
131
+ const client = getRedisClient();
132
+ return client.del(...keys);
133
+ }
134
+ /**
135
+ * Close all Redis connections gracefully
136
+ */
137
+ export async function closeRedisConnections() {
138
+ const closeClient = async (client, name) => {
139
+ if (!client)
140
+ return;
141
+ try {
142
+ const c = client;
143
+ if (typeof c.quit === 'function') {
144
+ await c.quit();
145
+ logger.debug(`Redis ${name} closed via quit()`);
146
+ }
147
+ else if (typeof c.disconnect === 'function') {
148
+ c.disconnect();
149
+ logger.debug(`Redis ${name} closed via disconnect()`);
150
+ }
151
+ }
152
+ catch (error) {
153
+ logger.warn(`Error closing Redis ${name}`, {
154
+ error: error instanceof Error ? error.message : String(error),
155
+ });
156
+ }
157
+ };
158
+ await Promise.all([
159
+ closeClient(redisClient, 'client'),
160
+ closeClient(redisPubClient, 'pubClient'),
161
+ closeClient(redisSubClient, 'subClient'),
162
+ ]);
163
+ // Reset references
164
+ redisClient = null;
165
+ redisPubClient = null;
166
+ redisSubClient = null;
167
+ logger.info('All Redis connections closed');
168
+ }
169
+ //# sourceMappingURL=redis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/backend/redis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Set the Socket.IO server instance
3
+ */
4
+ export declare function setSocketServer(io: unknown): void;
5
+ /**
6
+ * Get the Socket.IO server instance
7
+ */
8
+ export declare function getSocketServer<T = unknown>(): T;
9
+ /**
10
+ * Check if Socket.IO server is available
11
+ */
12
+ export declare function hasSocketServer(): boolean;
13
+ /**
14
+ * Socket event payload for cross-service communication
15
+ */
16
+ interface SocketEventPayload {
17
+ room: string;
18
+ event: string;
19
+ data: unknown;
20
+ broadcast?: boolean;
21
+ }
22
+ /**
23
+ * Emit an event to a specific user (by userId/accountId)
24
+ */
25
+ export declare function ioEmitToUser(userId: string, event: string, data: unknown): Promise<void>;
26
+ /**
27
+ * Emit an event to all members of an account
28
+ */
29
+ export declare function ioEmitToAccount(accountId: string, event: string, data: unknown): Promise<void>;
30
+ /**
31
+ * Emit an event to all participants in a chat
32
+ */
33
+ export declare function ioEmitToChat(chatId: string, event: string, data: unknown): Promise<void>;
34
+ /**
35
+ * Emit an event to all participants in a match
36
+ */
37
+ export declare function ioEmitToMatch(matchId: string, event: string, data: unknown): Promise<void>;
38
+ /**
39
+ * Chat message payload interface
40
+ */
41
+ export interface ChatMessagePayload {
42
+ messageId: string;
43
+ senderId: string;
44
+ content: string;
45
+ contentType: string;
46
+ mediaUrl?: string;
47
+ createdAt: Date;
48
+ }
49
+ /**
50
+ * Emit a new chat message event
51
+ */
52
+ export declare function emitChatMessage(chatId: string, message: ChatMessagePayload): Promise<void>;
53
+ /**
54
+ * Emit a read receipt event
55
+ */
56
+ export declare function emitReadReceipt(chatId: string, readerId: string, messageId: string): Promise<void>;
57
+ /**
58
+ * Emit a typing indicator event
59
+ */
60
+ export declare function emitTypingIndicator(chatId: string, userId: string, isTyping: boolean): Promise<void>;
61
+ /**
62
+ * New match payload interface
63
+ */
64
+ export interface NewMatchPayload {
65
+ matchId: string;
66
+ matchedAccountId: string;
67
+ matchedProfileName?: string;
68
+ matchType: string;
69
+ matchedAt: Date;
70
+ }
71
+ /**
72
+ * Emit a new match event
73
+ */
74
+ export declare function emitNewMatch(accountId: string, payload: NewMatchPayload): Promise<void>;
75
+ /**
76
+ * Subscribe to socket events from Redis
77
+ * This is used by the listener-service to receive events from other services
78
+ */
79
+ export declare function subscribeToSocketEvents(handler: (payload: SocketEventPayload) => void): Promise<void>;
80
+ export {};
81
+ //# sourceMappingURL=socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/backend/socket.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAKhD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAoBD;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9F;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpG;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9F;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhG;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhG;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxG;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1G;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7F;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAe3G"}
@@ -0,0 +1,132 @@
1
+ // ============================================
2
+ // Socket.IO Emit Utilities
3
+ // Backend-only real-time event emission
4
+ // ============================================
5
+ import { SOCKET_EVENTS } from '../constants/socket.js';
6
+ import { logger } from './logger.js';
7
+ import { redisPublish } from './redis.js';
8
+ // Store Socket.IO server instance
9
+ let ioServer = null;
10
+ // Redis channel for cross-service socket events
11
+ const SOCKET_REDIS_CHANNEL = 'knotr:socket:events';
12
+ /**
13
+ * Set the Socket.IO server instance
14
+ */
15
+ export function setSocketServer(io) {
16
+ ioServer = io;
17
+ }
18
+ /**
19
+ * Get the Socket.IO server instance
20
+ */
21
+ export function getSocketServer() {
22
+ if (!ioServer) {
23
+ throw new Error('Socket.IO server not initialized. Call setSocketServer() first.');
24
+ }
25
+ return ioServer;
26
+ }
27
+ /**
28
+ * Check if Socket.IO server is available
29
+ */
30
+ export function hasSocketServer() {
31
+ return ioServer !== null;
32
+ }
33
+ /**
34
+ * Emit an event to a specific room
35
+ * If Socket.IO is not available, publishes via Redis for other services to handle
36
+ */
37
+ async function emitToRoom(room, event, data) {
38
+ if (ioServer) {
39
+ // Direct emit if we have the Socket.IO server
40
+ const io = ioServer;
41
+ io.to(room).emit(event, data);
42
+ logger.debug('Socket event emitted', { room, event });
43
+ }
44
+ else {
45
+ // Publish via Redis for other services (like listener-service) to handle
46
+ const payload = { room, event, data };
47
+ await redisPublish(SOCKET_REDIS_CHANNEL, payload);
48
+ logger.debug('Socket event published to Redis', { room, event });
49
+ }
50
+ }
51
+ /**
52
+ * Emit an event to a specific user (by userId/accountId)
53
+ */
54
+ export async function ioEmitToUser(userId, event, data) {
55
+ const room = `user:${userId}`;
56
+ await emitToRoom(room, event, data);
57
+ }
58
+ /**
59
+ * Emit an event to all members of an account
60
+ */
61
+ export async function ioEmitToAccount(accountId, event, data) {
62
+ const room = `account:${accountId}`;
63
+ await emitToRoom(room, event, data);
64
+ }
65
+ /**
66
+ * Emit an event to all participants in a chat
67
+ */
68
+ export async function ioEmitToChat(chatId, event, data) {
69
+ const room = `chat:${chatId}`;
70
+ await emitToRoom(room, event, data);
71
+ }
72
+ /**
73
+ * Emit an event to all participants in a match
74
+ */
75
+ export async function ioEmitToMatch(matchId, event, data) {
76
+ const room = `match:${matchId}`;
77
+ await emitToRoom(room, event, data);
78
+ }
79
+ /**
80
+ * Emit a new chat message event
81
+ */
82
+ export async function emitChatMessage(chatId, message) {
83
+ await ioEmitToChat(chatId, SOCKET_EVENTS.MESSAGE_RECEIVED, message);
84
+ }
85
+ /**
86
+ * Emit a read receipt event
87
+ */
88
+ export async function emitReadReceipt(chatId, readerId, messageId) {
89
+ await ioEmitToChat(chatId, SOCKET_EVENTS.MESSAGE_READ, {
90
+ chatId,
91
+ readerId,
92
+ messageId,
93
+ readAt: new Date(),
94
+ });
95
+ }
96
+ /**
97
+ * Emit a typing indicator event
98
+ */
99
+ export async function emitTypingIndicator(chatId, userId, isTyping) {
100
+ const event = isTyping ? SOCKET_EVENTS.TYPING_START : SOCKET_EVENTS.TYPING_STOP;
101
+ await ioEmitToChat(chatId, event, {
102
+ chatId,
103
+ userId,
104
+ timestamp: new Date(),
105
+ });
106
+ }
107
+ /**
108
+ * Emit a new match event
109
+ */
110
+ export async function emitNewMatch(accountId, payload) {
111
+ await ioEmitToAccount(accountId, SOCKET_EVENTS.MATCH_CREATED, payload);
112
+ }
113
+ /**
114
+ * Subscribe to socket events from Redis
115
+ * This is used by the listener-service to receive events from other services
116
+ */
117
+ export async function subscribeToSocketEvents(handler) {
118
+ const { redisSubscribe } = await import('./redis.js');
119
+ await redisSubscribe(SOCKET_REDIS_CHANNEL, (message) => {
120
+ try {
121
+ const payload = JSON.parse(message);
122
+ handler(payload);
123
+ }
124
+ catch (error) {
125
+ logger.error('Failed to parse socket event from Redis', {
126
+ error: error instanceof Error ? error.message : String(error),
127
+ });
128
+ }
129
+ });
130
+ logger.info('Subscribed to socket events channel');
131
+ }
132
+ //# sourceMappingURL=socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/backend/socket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Set the Cloud Tasks client instance
3
+ */
4
+ export declare function setCloudTasksClient(client: unknown): void;
5
+ /**
6
+ * Worker request payload interface
7
+ */
8
+ export interface WorkerRequestPayload {
9
+ type: string;
10
+ [key: string]: unknown;
11
+ }
12
+ /**
13
+ * Options for scheduling a worker request
14
+ */
15
+ export interface WorkerRequestOptions {
16
+ /** Delay in seconds before the task should execute */
17
+ delaySeconds?: number;
18
+ /** Absolute Unix timestamp (seconds) when the task should execute */
19
+ scheduleTime?: number;
20
+ /** Queue name override */
21
+ queue?: string;
22
+ }
23
+ /**
24
+ * Post a request to the workers service via Cloud Tasks
25
+ * Falls back to HTTP POST in development mode
26
+ *
27
+ * @param endpoint - The worker endpoint (e.g., "process-matching")
28
+ * @param payload - The request payload
29
+ * @param options - Optional scheduling options
30
+ */
31
+ export declare function postWorkerRequest(endpoint: string, payload: WorkerRequestPayload, options?: WorkerRequestOptions): Promise<void>;
32
+ /**
33
+ * Convenience function for scheduling a delayed worker request
34
+ */
35
+ export declare function scheduleWorkerRequest(endpoint: string, payload: WorkerRequestPayload, delaySeconds: number): Promise<void>;
36
+ /**
37
+ * Convenience function for scheduling a worker request at a specific time
38
+ */
39
+ export declare function scheduleWorkerRequestAt(endpoint: string, payload: WorkerRequestPayload, scheduledTime: Date): Promise<void>;
40
+ //# sourceMappingURL=worker-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-queue.d.ts","sourceRoot":"","sources":["../../src/backend/worker-queue.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAEzD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,EAC7B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAYf;AAiHD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,EAC7B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,EAC7B,aAAa,EAAE,IAAI,GAClB,OAAO,CAAC,IAAI,CAAC,CAIf"}