@resolveio/server-lib 22.2.32 → 22.2.34

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 (649) hide show
  1. package/.github/workflows/ai-assistant-nightly-eval.yml +224 -0
  2. package/.github/workflows/ai-assistant-pr-guardrails.yml +60 -0
  3. package/.nodemon.json +5 -0
  4. package/.vscode/settings.json +21 -0
  5. package/AGENTS.md +179 -0
  6. package/README.md +22 -0
  7. package/build_package.sh +5 -0
  8. package/compileDTS.pl +64 -0
  9. package/docs/ai-assistant-nightly-eval.md +65 -0
  10. package/docs/ai-assistant-preflight-checklist.md +23 -0
  11. package/docs/ai-assistant-report-builder-bridge-playbook.md +115 -0
  12. package/eslint-plugin-custom/index.js +7 -0
  13. package/eslint-plugin-custom/rules/no-filter-zero-index.js +44 -0
  14. package/eslint.config.js +103 -0
  15. package/gulpfile.js +216 -0
  16. package/methodAndPublicationListGenerator.py +319 -0
  17. package/mongodbensurers.js +2 -0
  18. package/mongostop.js +3 -0
  19. package/package.json +1 -1
  20. package/settings.development.json +25 -0
  21. package/settings.development.redacted.json +25 -0
  22. package/src/.env +12 -0
  23. package/src/ai/assistant-core-heuristics.ts +577 -0
  24. package/src/client-server-app.ts +12 -0
  25. package/src/collections/ai-terminal-conversation.collection.ts +91 -0
  26. package/src/collections/ai-terminal-issue-report.collection.ts +99 -0
  27. package/src/collections/ai-terminal-message.collection.ts +77 -0
  28. package/src/collections/app-setting.collection.ts +104 -0
  29. package/src/collections/app-status.collection.ts +58 -0
  30. package/src/collections/communication-metric.collection.ts +84 -0
  31. package/src/collections/counter.collection.ts +56 -0
  32. package/src/collections/cron-job-history.collection.ts +94 -0
  33. package/src/collections/cron-job.collection.ts +92 -0
  34. package/src/collections/customer-notification.collection.ts +131 -0
  35. package/src/collections/customer-portal-password.collection.ts +76 -0
  36. package/src/collections/email-history.collection.ts +121 -0
  37. package/src/collections/email-verified.collection.ts +61 -0
  38. package/src/collections/file.collection.ts +74 -0
  39. package/src/collections/flag-update.collection.ts +57 -0
  40. package/src/collections/flag.collection.ts +57 -0
  41. package/src/collections/log-method-latency.collection.ts +77 -0
  42. package/src/collections/log-subscription.collection.ts +80 -0
  43. package/src/collections/log.collection.ts +93 -0
  44. package/src/collections/logged-in-users.collection.ts +67 -0
  45. package/src/collections/monitor-cpu.collection.ts +65 -0
  46. package/src/collections/monitor-function.collection.ts +74 -0
  47. package/src/collections/monitor-memory.collection.ts +77 -0
  48. package/src/collections/monitor-mongo.collection.ts +71 -0
  49. package/src/collections/notification.collection.ts +57 -0
  50. package/src/collections/openai-usage-ledger.collection.ts +77 -0
  51. package/src/collections/report-builder-dashboard-builder.collection.ts +109 -0
  52. package/src/collections/report-builder-library.collection.ts +89 -0
  53. package/src/collections/report-builder-report.collection.ts +180 -0
  54. package/src/collections/user-group.collection.ts +89 -0
  55. package/src/collections/user-guide.collection.ts +57 -0
  56. package/src/collections/user.collection.ts +181 -0
  57. package/src/cron/cron.ts +117 -0
  58. package/src/fixtures/cron-jobs.ts +95 -0
  59. package/src/fixtures/init.ts +35 -0
  60. package/src/http/auth.ts +764 -0
  61. package/src/http/health.ts +7 -0
  62. package/src/http/home.ts +90 -0
  63. package/src/http/slow-query-publication.ts +49 -0
  64. package/src/index.ts +1 -0
  65. package/src/managers/communication-metric.manager.ts +82 -0
  66. package/src/managers/cron.manager.ts +333 -0
  67. package/src/managers/customer-notification-content.manager.ts +236 -0
  68. package/src/managers/diagnostic-manager-bootstrap.ts +165 -0
  69. package/src/managers/error-auto-fix.manager.ts +2767 -0
  70. package/src/managers/local-log.manager.ts +113 -0
  71. package/src/managers/method.manager.ts +1557 -0
  72. package/src/managers/mongo.manager.ts +4566 -0
  73. package/src/managers/monitor.manager.ts +489 -0
  74. package/src/managers/openai-usage-ledger.manager.ts +116 -0
  75. package/src/managers/slow-query-verifier.manager.ts +3590 -0
  76. package/src/managers/slow-query.manager.ts +519 -0
  77. package/src/managers/subscription.manager.ts +3120 -0
  78. package/src/managers/websocket.manager.ts +746 -0
  79. package/src/managers/worker-dispatcher.manager.ts +1318 -0
  80. package/src/managers/worker-server.manager.ts +468 -0
  81. package/src/methods/accounts.ts +532 -0
  82. package/src/methods/ai-terminal.ts +25505 -0
  83. package/src/methods/app-settings.ts +114 -0
  84. package/src/methods/aws.ts +646 -0
  85. package/src/methods/collections.ts +544 -0
  86. package/src/methods/counters.ts +67 -0
  87. package/src/methods/cron-jobs.ts +2610 -0
  88. package/src/methods/customer-notifications.ts +458 -0
  89. package/src/methods/diagnostics.ts +447 -0
  90. package/src/methods/flag-updates.ts +7 -0
  91. package/src/methods/flags.ts +7 -0
  92. package/src/methods/logs.ts +656 -0
  93. package/src/methods/mongo-explorer.ts +1883 -0
  94. package/src/methods/monitor.ts +540 -0
  95. package/src/methods/pdf.ts +1210 -0
  96. package/src/methods/publications.ts +128 -0
  97. package/src/methods/report-builder.ts +3305 -0
  98. package/src/methods/support.ts +210 -0
  99. package/src/models/ai-terminal-conversation.model.ts +19 -0
  100. package/src/models/ai-terminal-issue-report.model.ts +21 -0
  101. package/src/models/ai-terminal-message.model.ts +24 -0
  102. package/src/models/app-setting.model.ts +17 -0
  103. package/{models/app-status.model.d.ts → src/models/app-status.model.ts} +3 -2
  104. package/{models/billing-logged-in-users.model.d.ts → src/models/billing-logged-in-users.model.ts} +5 -4
  105. package/src/models/collection-document.model.ts +24 -0
  106. package/src/models/communication-metric.model.ts +23 -0
  107. package/{models/counter.model.d.ts → src/models/counter.model.ts} +4 -3
  108. package/src/models/cron-job-history.model.ts +16 -0
  109. package/src/models/cron-job.model.ts +15 -0
  110. package/src/models/customer-notification.model.ts +28 -0
  111. package/src/models/customer-portal-password.model.ts +12 -0
  112. package/src/models/dialog.model.ts +25 -0
  113. package/{models/email-history.model.js → src/models/email-history.model.ts} +34 -4
  114. package/{models/email-verified.model.d.ts → src/models/email-verified.model.ts} +6 -5
  115. package/{models/file.model.d.ts → src/models/file.model.ts} +8 -7
  116. package/{models/flag-update.model.d.ts → src/models/flag-update.model.ts} +4 -3
  117. package/{models/flag.model.d.ts → src/models/flag.model.ts} +4 -3
  118. package/src/models/log-method-latency.model.ts +11 -0
  119. package/{models/log-subscription.model.d.ts → src/models/log-subscription.model.ts} +11 -9
  120. package/src/models/log.model.ts +19 -0
  121. package/{models/logged-in-users.model.d.ts → src/models/logged-in-users.model.ts} +6 -5
  122. package/{models/method-response.model.d.ts → src/models/method-response.model.ts} +7 -6
  123. package/src/models/method.model.ts +23 -0
  124. package/{models/monitor-cpu.model.d.ts → src/models/monitor-cpu.model.ts} +9 -7
  125. package/src/models/monitor-function.model.ts +16 -0
  126. package/src/models/monitor-memory.model.ts +17 -0
  127. package/src/models/monitor-mongo.model.ts +15 -0
  128. package/{models/notification.model.d.ts → src/models/notification.model.ts} +6 -4
  129. package/src/models/openai-usage-ledger.model.ts +16 -0
  130. package/src/models/pagination.model.ts +35 -0
  131. package/src/models/permission.model.ts +14 -0
  132. package/src/models/report-builder-dashboard-builder.model.ts +29 -0
  133. package/src/models/report-builder-library.model.ts +20 -0
  134. package/src/models/report-builder-report.model.ts +135 -0
  135. package/src/models/report-builder.model.ts +68 -0
  136. package/src/models/select-data-label.model.ts +9 -0
  137. package/src/models/server-message.model.ts +31 -0
  138. package/src/models/slow-query-report.model.ts +23 -0
  139. package/src/models/subscription.model.ts +73 -0
  140. package/src/models/support-ticket.model.ts +96 -0
  141. package/src/models/user-group.model.ts +24 -0
  142. package/{models/user-guide.model.d.ts → src/models/user-guide.model.ts} +5 -4
  143. package/src/models/user.model.ts +96 -0
  144. package/src/private/images/ResolveIO.png +0 -0
  145. package/src/publications/ai-terminal.ts +73 -0
  146. package/src/publications/app-settings.ts +25 -0
  147. package/src/publications/app-status.ts +13 -0
  148. package/src/publications/cron-jobs.ts +29 -0
  149. package/src/publications/customer-notifications.ts +101 -0
  150. package/src/publications/files.ts +33 -0
  151. package/src/publications/flags-update.ts +19 -0
  152. package/src/publications/flags.ts +19 -0
  153. package/src/publications/logs.ts +163 -0
  154. package/src/publications/notifications.ts +13 -0
  155. package/src/publications/report-builder-dashboard-builders.ts +39 -0
  156. package/src/publications/report-builder-libraries.ts +41 -0
  157. package/src/publications/report-builder-reports.ts +47 -0
  158. package/src/publications/super-admin.ts +13 -0
  159. package/src/publications/user-groups.ts +12 -0
  160. package/src/publications/user-guides.ts +12 -0
  161. package/src/resolveio-server-app.ts +617 -0
  162. package/src/server-app.ts +2616 -0
  163. package/src/services/codex-client.ts +1117 -0
  164. package/src/services/openai-client.ts +265 -0
  165. package/src/types/error-report.ts +26 -0
  166. package/src/types/js-tiktoken.d.ts +11 -0
  167. package/src/types/slow-query-report.ts +28 -0
  168. package/src/util/common.ts +649 -0
  169. package/src/util/customer-portal-password.ts +183 -0
  170. package/src/util/error-reporter.ts +332 -0
  171. package/src/util/error-tracking.ts +79 -0
  172. package/src/util/report-builder-unwinds.ts +180 -0
  173. package/src/util/schema-report-builder.ts +448 -0
  174. package/src/util/slow-query-reporter.ts +216 -0
  175. package/src/util/subscription-dependency-context.ts +1096 -0
  176. package/src/util/tokenizer.ts +38 -0
  177. package/src/workers/codex-runner.worker.ts +142 -0
  178. package/start_server.sh +5 -0
  179. package/tests/ai-assistant-corpus-build.ts +484 -0
  180. package/tests/ai-assistant-corpus-replay-e2e.ts +773 -0
  181. package/tests/ai-assistant-data-parity-e2e.ts +2018 -0
  182. package/tests/ai-assistant-eval-triage.ts +831 -0
  183. package/tests/ai-assistant-openai-e2e.ts +1061 -0
  184. package/tests/ai-assistant-openai-git-e2e.ts +155 -0
  185. package/tests/ai-assistant-preflight-matrix.ts +215 -0
  186. package/tests/ai-assistant-routing-eval.test.ts +560 -0
  187. package/tests/ai-assistant-snf-live-eval.ts +921 -0
  188. package/tests/ai-assistant-utils.test.ts +2165 -0
  189. package/tests/error-reporter.test.ts +145 -0
  190. package/tests/report-builder-linking.test.ts +79 -0
  191. package/tests/subscription-connect-race.test.ts +157 -0
  192. package/tests/subscription-dependency-context.test.ts +324 -0
  193. package/tests/subscription-manager-collection-tracking.test.ts +86 -0
  194. package/tests/subscription-manager-invalidation.test.ts +85 -0
  195. package/tsconfig.json +34 -0
  196. package/ai/assistant-core-heuristics.d.ts +0 -11
  197. package/ai/assistant-core-heuristics.js +0 -531
  198. package/ai/assistant-core-heuristics.js.map +0 -1
  199. package/client-server-app.d.ts +0 -1
  200. package/client-server-app.js +0 -68
  201. package/client-server-app.js.map +0 -1
  202. package/collections/ai-terminal-conversation.collection.d.ts +0 -2
  203. package/collections/ai-terminal-conversation.collection.js +0 -140
  204. package/collections/ai-terminal-conversation.collection.js.map +0 -1
  205. package/collections/ai-terminal-issue-report.collection.d.ts +0 -2
  206. package/collections/ai-terminal-issue-report.collection.js +0 -148
  207. package/collections/ai-terminal-issue-report.collection.js.map +0 -1
  208. package/collections/ai-terminal-message.collection.d.ts +0 -2
  209. package/collections/ai-terminal-message.collection.js +0 -121
  210. package/collections/ai-terminal-message.collection.js.map +0 -1
  211. package/collections/app-setting.collection.d.ts +0 -3
  212. package/collections/app-setting.collection.js +0 -103
  213. package/collections/app-setting.collection.js.map +0 -1
  214. package/collections/app-status.collection.d.ts +0 -3
  215. package/collections/app-status.collection.js +0 -57
  216. package/collections/app-status.collection.js.map +0 -1
  217. package/collections/communication-metric.collection.d.ts +0 -2
  218. package/collections/communication-metric.collection.js +0 -133
  219. package/collections/communication-metric.collection.js.map +0 -1
  220. package/collections/counter.collection.d.ts +0 -3
  221. package/collections/counter.collection.js +0 -56
  222. package/collections/counter.collection.js.map +0 -1
  223. package/collections/cron-job-history.collection.d.ts +0 -3
  224. package/collections/cron-job-history.collection.js +0 -137
  225. package/collections/cron-job-history.collection.js.map +0 -1
  226. package/collections/cron-job.collection.d.ts +0 -3
  227. package/collections/cron-job.collection.js +0 -92
  228. package/collections/cron-job.collection.js.map +0 -1
  229. package/collections/customer-notification.collection.d.ts +0 -3
  230. package/collections/customer-notification.collection.js +0 -130
  231. package/collections/customer-notification.collection.js.map +0 -1
  232. package/collections/customer-portal-password.collection.d.ts +0 -3
  233. package/collections/customer-portal-password.collection.js +0 -75
  234. package/collections/customer-portal-password.collection.js.map +0 -1
  235. package/collections/email-history.collection.d.ts +0 -3
  236. package/collections/email-history.collection.js +0 -121
  237. package/collections/email-history.collection.js.map +0 -1
  238. package/collections/email-verified.collection.d.ts +0 -3
  239. package/collections/email-verified.collection.js +0 -61
  240. package/collections/email-verified.collection.js.map +0 -1
  241. package/collections/file.collection.d.ts +0 -3
  242. package/collections/file.collection.js +0 -74
  243. package/collections/file.collection.js.map +0 -1
  244. package/collections/flag-update.collection.d.ts +0 -3
  245. package/collections/flag-update.collection.js +0 -57
  246. package/collections/flag-update.collection.js.map +0 -1
  247. package/collections/flag.collection.d.ts +0 -3
  248. package/collections/flag.collection.js +0 -57
  249. package/collections/flag.collection.js.map +0 -1
  250. package/collections/log-method-latency.collection.d.ts +0 -3
  251. package/collections/log-method-latency.collection.js +0 -77
  252. package/collections/log-method-latency.collection.js.map +0 -1
  253. package/collections/log-subscription.collection.d.ts +0 -3
  254. package/collections/log-subscription.collection.js +0 -80
  255. package/collections/log-subscription.collection.js.map +0 -1
  256. package/collections/log.collection.d.ts +0 -3
  257. package/collections/log.collection.js +0 -93
  258. package/collections/log.collection.js.map +0 -1
  259. package/collections/logged-in-users.collection.d.ts +0 -3
  260. package/collections/logged-in-users.collection.js +0 -67
  261. package/collections/logged-in-users.collection.js.map +0 -1
  262. package/collections/monitor-cpu.collection.d.ts +0 -3
  263. package/collections/monitor-cpu.collection.js +0 -65
  264. package/collections/monitor-cpu.collection.js.map +0 -1
  265. package/collections/monitor-function.collection.d.ts +0 -3
  266. package/collections/monitor-function.collection.js +0 -74
  267. package/collections/monitor-function.collection.js.map +0 -1
  268. package/collections/monitor-memory.collection.d.ts +0 -3
  269. package/collections/monitor-memory.collection.js +0 -77
  270. package/collections/monitor-memory.collection.js.map +0 -1
  271. package/collections/monitor-mongo.collection.d.ts +0 -3
  272. package/collections/monitor-mongo.collection.js +0 -71
  273. package/collections/monitor-mongo.collection.js.map +0 -1
  274. package/collections/notification.collection.d.ts +0 -3
  275. package/collections/notification.collection.js +0 -57
  276. package/collections/notification.collection.js.map +0 -1
  277. package/collections/openai-usage-ledger.collection.d.ts +0 -2
  278. package/collections/openai-usage-ledger.collection.js +0 -124
  279. package/collections/openai-usage-ledger.collection.js.map +0 -1
  280. package/collections/report-builder-dashboard-builder.collection.d.ts +0 -3
  281. package/collections/report-builder-dashboard-builder.collection.js +0 -109
  282. package/collections/report-builder-dashboard-builder.collection.js.map +0 -1
  283. package/collections/report-builder-library.collection.d.ts +0 -3
  284. package/collections/report-builder-library.collection.js +0 -87
  285. package/collections/report-builder-library.collection.js.map +0 -1
  286. package/collections/report-builder-report.collection.d.ts +0 -4
  287. package/collections/report-builder-report.collection.js +0 -180
  288. package/collections/report-builder-report.collection.js.map +0 -1
  289. package/collections/user-group.collection.d.ts +0 -4
  290. package/collections/user-group.collection.js +0 -89
  291. package/collections/user-group.collection.js.map +0 -1
  292. package/collections/user-guide.collection.d.ts +0 -3
  293. package/collections/user-guide.collection.js +0 -57
  294. package/collections/user-guide.collection.js.map +0 -1
  295. package/collections/user.collection.d.ts +0 -4
  296. package/collections/user.collection.js +0 -180
  297. package/collections/user.collection.js.map +0 -1
  298. package/cron/cron.d.ts +0 -14
  299. package/cron/cron.js +0 -216
  300. package/cron/cron.js.map +0 -1
  301. package/fixtures/cron-jobs.d.ts +0 -1
  302. package/fixtures/cron-jobs.js +0 -150
  303. package/fixtures/cron-jobs.js.map +0 -1
  304. package/fixtures/init.d.ts +0 -1
  305. package/fixtures/init.js +0 -91
  306. package/fixtures/init.js.map +0 -1
  307. package/http/auth.d.ts +0 -2
  308. package/http/auth.js +0 -903
  309. package/http/auth.js.map +0 -1
  310. package/http/health.d.ts +0 -1
  311. package/http/health.js +0 -11
  312. package/http/health.js.map +0 -1
  313. package/http/home.d.ts +0 -1
  314. package/http/home.js +0 -134
  315. package/http/home.js.map +0 -1
  316. package/http/slow-query-publication.d.ts +0 -2
  317. package/http/slow-query-publication.js +0 -99
  318. package/http/slow-query-publication.js.map +0 -1
  319. package/index.d.ts +0 -1
  320. package/index.js +0 -19
  321. package/index.js.map +0 -1
  322. package/managers/communication-metric.manager.d.ts +0 -16
  323. package/managers/communication-metric.manager.js +0 -134
  324. package/managers/communication-metric.manager.js.map +0 -1
  325. package/managers/cron.manager.d.ts +0 -20
  326. package/managers/cron.manager.js +0 -534
  327. package/managers/cron.manager.js.map +0 -1
  328. package/managers/customer-notification-content.manager.d.ts +0 -55
  329. package/managers/customer-notification-content.manager.js +0 -158
  330. package/managers/customer-notification-content.manager.js.map +0 -1
  331. package/managers/diagnostic-manager-bootstrap.d.ts +0 -9
  332. package/managers/diagnostic-manager-bootstrap.js +0 -260
  333. package/managers/diagnostic-manager-bootstrap.js.map +0 -1
  334. package/managers/error-auto-fix.manager.d.ts +0 -149
  335. package/managers/error-auto-fix.manager.js +0 -3064
  336. package/managers/error-auto-fix.manager.js.map +0 -1
  337. package/managers/local-log.manager.d.ts +0 -18
  338. package/managers/local-log.manager.js +0 -88
  339. package/managers/local-log.manager.js.map +0 -1
  340. package/managers/method.manager.d.ts +0 -77
  341. package/managers/method.manager.js +0 -1701
  342. package/managers/method.manager.js.map +0 -1
  343. package/managers/mongo.manager.d.ts +0 -222
  344. package/managers/mongo.manager.js +0 -4984
  345. package/managers/mongo.manager.js.map +0 -1
  346. package/managers/monitor.manager.d.ts +0 -69
  347. package/managers/monitor.manager.js +0 -534
  348. package/managers/monitor.manager.js.map +0 -1
  349. package/managers/openai-usage-ledger.manager.d.ts +0 -15
  350. package/managers/openai-usage-ledger.manager.js +0 -144
  351. package/managers/openai-usage-ledger.manager.js.map +0 -1
  352. package/managers/slow-query-verifier.manager.d.ts +0 -144
  353. package/managers/slow-query-verifier.manager.js +0 -3857
  354. package/managers/slow-query-verifier.manager.js.map +0 -1
  355. package/managers/slow-query.manager.d.ts +0 -28
  356. package/managers/slow-query.manager.js +0 -468
  357. package/managers/slow-query.manager.js.map +0 -1
  358. package/managers/subscription.manager.d.ts +0 -169
  359. package/managers/subscription.manager.js +0 -3422
  360. package/managers/subscription.manager.js.map +0 -1
  361. package/managers/websocket.manager.d.ts +0 -73
  362. package/managers/websocket.manager.js +0 -673
  363. package/managers/websocket.manager.js.map +0 -1
  364. package/managers/worker-dispatcher.manager.d.ts +0 -117
  365. package/managers/worker-dispatcher.manager.js +0 -1210
  366. package/managers/worker-dispatcher.manager.js.map +0 -1
  367. package/managers/worker-server.manager.d.ts +0 -16
  368. package/managers/worker-server.manager.js +0 -530
  369. package/managers/worker-server.manager.js.map +0 -1
  370. package/methods/accounts.d.ts +0 -2
  371. package/methods/accounts.js +0 -624
  372. package/methods/accounts.js.map +0 -1
  373. package/methods/ai-terminal.d.ts +0 -298
  374. package/methods/ai-terminal.js +0 -24872
  375. package/methods/ai-terminal.js.map +0 -1
  376. package/methods/app-settings.d.ts +0 -2
  377. package/methods/app-settings.js +0 -169
  378. package/methods/app-settings.js.map +0 -1
  379. package/methods/aws.d.ts +0 -2
  380. package/methods/aws.js +0 -874
  381. package/methods/aws.js.map +0 -1
  382. package/methods/collections.d.ts +0 -2
  383. package/methods/collections.js +0 -626
  384. package/methods/collections.js.map +0 -1
  385. package/methods/counters.d.ts +0 -2
  386. package/methods/counters.js +0 -111
  387. package/methods/counters.js.map +0 -1
  388. package/methods/cron-jobs.d.ts +0 -2
  389. package/methods/cron-jobs.js +0 -2471
  390. package/methods/cron-jobs.js.map +0 -1
  391. package/methods/customer-notifications.d.ts +0 -2
  392. package/methods/customer-notifications.js +0 -528
  393. package/methods/customer-notifications.js.map +0 -1
  394. package/methods/diagnostics.d.ts +0 -2
  395. package/methods/diagnostics.js +0 -514
  396. package/methods/diagnostics.js.map +0 -1
  397. package/methods/flag-updates.d.ts +0 -2
  398. package/methods/flag-updates.js +0 -8
  399. package/methods/flag-updates.js.map +0 -1
  400. package/methods/flags.d.ts +0 -2
  401. package/methods/flags.js +0 -8
  402. package/methods/flags.js.map +0 -1
  403. package/methods/logs.d.ts +0 -2
  404. package/methods/logs.js +0 -750
  405. package/methods/logs.js.map +0 -1
  406. package/methods/mongo-explorer.d.ts +0 -2
  407. package/methods/mongo-explorer.js +0 -1811
  408. package/methods/mongo-explorer.js.map +0 -1
  409. package/methods/monitor.d.ts +0 -2
  410. package/methods/monitor.js +0 -543
  411. package/methods/monitor.js.map +0 -1
  412. package/methods/pdf.d.ts +0 -2
  413. package/methods/pdf.js +0 -1195
  414. package/methods/pdf.js.map +0 -1
  415. package/methods/publications.d.ts +0 -1
  416. package/methods/publications.js +0 -183
  417. package/methods/publications.js.map +0 -1
  418. package/methods/report-builder.d.ts +0 -2
  419. package/methods/report-builder.js +0 -2960
  420. package/methods/report-builder.js.map +0 -1
  421. package/methods/support.d.ts +0 -2
  422. package/methods/support.js +0 -313
  423. package/methods/support.js.map +0 -1
  424. package/models/ai-terminal-conversation.model.d.ts +0 -17
  425. package/models/ai-terminal-conversation.model.js +0 -4
  426. package/models/ai-terminal-conversation.model.js.map +0 -1
  427. package/models/ai-terminal-issue-report.model.d.ts +0 -19
  428. package/models/ai-terminal-issue-report.model.js +0 -4
  429. package/models/ai-terminal-issue-report.model.js.map +0 -1
  430. package/models/ai-terminal-message.model.d.ts +0 -22
  431. package/models/ai-terminal-message.model.js +0 -4
  432. package/models/ai-terminal-message.model.js.map +0 -1
  433. package/models/app-setting.model.d.ts +0 -16
  434. package/models/app-setting.model.js +0 -4
  435. package/models/app-setting.model.js.map +0 -1
  436. package/models/app-status.model.js +0 -4
  437. package/models/app-status.model.js.map +0 -1
  438. package/models/billing-logged-in-users.model.js +0 -4
  439. package/models/billing-logged-in-users.model.js.map +0 -1
  440. package/models/collection-document.model.d.ts +0 -21
  441. package/models/collection-document.model.js +0 -4
  442. package/models/collection-document.model.js.map +0 -1
  443. package/models/communication-metric.model.d.ts +0 -20
  444. package/models/communication-metric.model.js +0 -4
  445. package/models/communication-metric.model.js.map +0 -1
  446. package/models/counter.model.js +0 -4
  447. package/models/counter.model.js.map +0 -1
  448. package/models/cron-job-history.model.d.ts +0 -15
  449. package/models/cron-job-history.model.js +0 -4
  450. package/models/cron-job-history.model.js.map +0 -1
  451. package/models/cron-job.model.d.ts +0 -14
  452. package/models/cron-job.model.js +0 -4
  453. package/models/cron-job.model.js.map +0 -1
  454. package/models/customer-notification.model.d.ts +0 -26
  455. package/models/customer-notification.model.js +0 -4
  456. package/models/customer-notification.model.js.map +0 -1
  457. package/models/customer-portal-password.model.d.ts +0 -11
  458. package/models/customer-portal-password.model.js +0 -4
  459. package/models/customer-portal-password.model.js.map +0 -1
  460. package/models/dialog.model.d.ts +0 -23
  461. package/models/dialog.model.js +0 -4
  462. package/models/dialog.model.js.map +0 -1
  463. package/models/email-history.model.d.ts +0 -30
  464. package/models/email-history.model.js.map +0 -1
  465. package/models/email-verified.model.js +0 -4
  466. package/models/email-verified.model.js.map +0 -1
  467. package/models/file.model.js +0 -4
  468. package/models/file.model.js.map +0 -1
  469. package/models/flag-update.model.js +0 -4
  470. package/models/flag-update.model.js.map +0 -1
  471. package/models/flag.model.js +0 -4
  472. package/models/flag.model.js.map +0 -1
  473. package/models/log-method-latency.model.d.ts +0 -10
  474. package/models/log-method-latency.model.js +0 -4
  475. package/models/log-method-latency.model.js.map +0 -1
  476. package/models/log-subscription.model.js +0 -4
  477. package/models/log-subscription.model.js.map +0 -1
  478. package/models/log.model.d.ts +0 -17
  479. package/models/log.model.js +0 -4
  480. package/models/log.model.js.map +0 -1
  481. package/models/logged-in-users.model.js +0 -4
  482. package/models/logged-in-users.model.js.map +0 -1
  483. package/models/method-response.model.js +0 -4
  484. package/models/method-response.model.js.map +0 -1
  485. package/models/method.model.d.ts +0 -24
  486. package/models/method.model.js +0 -4
  487. package/models/method.model.js.map +0 -1
  488. package/models/monitor-cpu.model.js +0 -4
  489. package/models/monitor-cpu.model.js.map +0 -1
  490. package/models/monitor-function.model.d.ts +0 -14
  491. package/models/monitor-function.model.js +0 -4
  492. package/models/monitor-function.model.js.map +0 -1
  493. package/models/monitor-memory.model.d.ts +0 -15
  494. package/models/monitor-memory.model.js +0 -4
  495. package/models/monitor-memory.model.js.map +0 -1
  496. package/models/monitor-mongo.model.d.ts +0 -13
  497. package/models/monitor-mongo.model.js +0 -4
  498. package/models/monitor-mongo.model.js.map +0 -1
  499. package/models/notification.model.js +0 -4
  500. package/models/notification.model.js.map +0 -1
  501. package/models/openai-usage-ledger.model.d.ts +0 -15
  502. package/models/openai-usage-ledger.model.js +0 -4
  503. package/models/openai-usage-ledger.model.js.map +0 -1
  504. package/models/pagination.model.d.ts +0 -11
  505. package/models/pagination.model.js +0 -28
  506. package/models/pagination.model.js.map +0 -1
  507. package/models/permission.model.d.ts +0 -12
  508. package/models/permission.model.js +0 -4
  509. package/models/permission.model.js.map +0 -1
  510. package/models/report-builder-dashboard-builder.model.d.ts +0 -25
  511. package/models/report-builder-dashboard-builder.model.js +0 -4
  512. package/models/report-builder-dashboard-builder.model.js.map +0 -1
  513. package/models/report-builder-library.model.d.ts +0 -17
  514. package/models/report-builder-library.model.js +0 -4
  515. package/models/report-builder-library.model.js.map +0 -1
  516. package/models/report-builder-report.model.d.ts +0 -120
  517. package/models/report-builder-report.model.js +0 -4
  518. package/models/report-builder-report.model.js.map +0 -1
  519. package/models/report-builder.model.d.ts +0 -61
  520. package/models/report-builder.model.js +0 -4
  521. package/models/report-builder.model.js.map +0 -1
  522. package/models/select-data-label.model.d.ts +0 -9
  523. package/models/select-data-label.model.js +0 -4
  524. package/models/select-data-label.model.js.map +0 -1
  525. package/models/server-message.model.d.ts +0 -32
  526. package/models/server-message.model.js +0 -4
  527. package/models/server-message.model.js.map +0 -1
  528. package/models/slow-query-report.model.d.ts +0 -23
  529. package/models/slow-query-report.model.js +0 -4
  530. package/models/slow-query-report.model.js.map +0 -1
  531. package/models/subscription.model.d.ts +0 -31
  532. package/models/subscription.model.js +0 -4
  533. package/models/subscription.model.js.map +0 -1
  534. package/models/support-ticket.model.d.ts +0 -86
  535. package/models/support-ticket.model.js +0 -4
  536. package/models/support-ticket.model.js.map +0 -1
  537. package/models/user-group.model.d.ts +0 -20
  538. package/models/user-group.model.js +0 -4
  539. package/models/user-group.model.js.map +0 -1
  540. package/models/user-guide.model.js +0 -4
  541. package/models/user-guide.model.js.map +0 -1
  542. package/models/user.model.d.ts +0 -84
  543. package/models/user.model.js +0 -4
  544. package/models/user.model.js.map +0 -1
  545. package/private/images/ResolveIO.png +0 -0
  546. package/public_api.js +0 -107
  547. package/public_api.js.map +0 -1
  548. package/publications/ai-terminal.d.ts +0 -1
  549. package/publications/ai-terminal.js +0 -122
  550. package/publications/ai-terminal.js.map +0 -1
  551. package/publications/app-settings.d.ts +0 -2
  552. package/publications/app-settings.js +0 -28
  553. package/publications/app-settings.js.map +0 -1
  554. package/publications/app-status.d.ts +0 -2
  555. package/publications/app-status.js +0 -16
  556. package/publications/app-status.js.map +0 -1
  557. package/publications/cron-jobs.d.ts +0 -2
  558. package/publications/cron-jobs.js +0 -32
  559. package/publications/cron-jobs.js.map +0 -1
  560. package/publications/customer-notifications.d.ts +0 -2
  561. package/publications/customer-notifications.js +0 -161
  562. package/publications/customer-notifications.js.map +0 -1
  563. package/publications/files.d.ts +0 -2
  564. package/publications/files.js +0 -36
  565. package/publications/files.js.map +0 -1
  566. package/publications/flags-update.d.ts +0 -2
  567. package/publications/flags-update.js +0 -22
  568. package/publications/flags-update.js.map +0 -1
  569. package/publications/flags.d.ts +0 -2
  570. package/publications/flags.js +0 -22
  571. package/publications/flags.js.map +0 -1
  572. package/publications/logs.d.ts +0 -2
  573. package/publications/logs.js +0 -164
  574. package/publications/logs.js.map +0 -1
  575. package/publications/notifications.d.ts +0 -2
  576. package/publications/notifications.js +0 -16
  577. package/publications/notifications.js.map +0 -1
  578. package/publications/report-builder-dashboard-builders.d.ts +0 -2
  579. package/publications/report-builder-dashboard-builders.js +0 -42
  580. package/publications/report-builder-dashboard-builders.js.map +0 -1
  581. package/publications/report-builder-libraries.d.ts +0 -2
  582. package/publications/report-builder-libraries.js +0 -90
  583. package/publications/report-builder-libraries.js.map +0 -1
  584. package/publications/report-builder-reports.d.ts +0 -2
  585. package/publications/report-builder-reports.js +0 -50
  586. package/publications/report-builder-reports.js.map +0 -1
  587. package/publications/super-admin.d.ts +0 -2
  588. package/publications/super-admin.js +0 -16
  589. package/publications/super-admin.js.map +0 -1
  590. package/publications/user-groups.d.ts +0 -1
  591. package/publications/user-groups.js +0 -16
  592. package/publications/user-groups.js.map +0 -1
  593. package/publications/user-guides.d.ts +0 -1
  594. package/publications/user-guides.js +0 -16
  595. package/publications/user-guides.js.map +0 -1
  596. package/resolveio-server-app.d.ts +0 -70
  597. package/resolveio-server-app.js +0 -801
  598. package/resolveio-server-app.js.map +0 -1
  599. package/server-app.d.ts +0 -167
  600. package/server-app.js +0 -2784
  601. package/server-app.js.map +0 -1
  602. package/services/codex-client.d.ts +0 -119
  603. package/services/codex-client.js +0 -1470
  604. package/services/codex-client.js.map +0 -1
  605. package/services/openai-client.d.ts +0 -46
  606. package/services/openai-client.js +0 -318
  607. package/services/openai-client.js.map +0 -1
  608. package/types/error-report.d.ts +0 -25
  609. package/types/error-report.js +0 -4
  610. package/types/error-report.js.map +0 -1
  611. package/types/slow-query-report.d.ts +0 -27
  612. package/types/slow-query-report.js +0 -6
  613. package/types/slow-query-report.js.map +0 -1
  614. package/util/common.d.ts +0 -31
  615. package/util/common.js +0 -683
  616. package/util/common.js.map +0 -1
  617. package/util/customer-portal-password.d.ts +0 -13
  618. package/util/customer-portal-password.js +0 -209
  619. package/util/customer-portal-password.js.map +0 -1
  620. package/util/error-reporter.d.ts +0 -52
  621. package/util/error-reporter.js +0 -326
  622. package/util/error-reporter.js.map +0 -1
  623. package/util/error-tracking.d.ts +0 -13
  624. package/util/error-tracking.js +0 -120
  625. package/util/error-tracking.js.map +0 -1
  626. package/util/report-builder-unwinds.d.ts +0 -15
  627. package/util/report-builder-unwinds.js +0 -156
  628. package/util/report-builder-unwinds.js.map +0 -1
  629. package/util/schema-report-builder.d.ts +0 -6
  630. package/util/schema-report-builder.js +0 -481
  631. package/util/schema-report-builder.js.map +0 -1
  632. package/util/slow-query-reporter.d.ts +0 -28
  633. package/util/slow-query-reporter.js +0 -226
  634. package/util/slow-query-reporter.js.map +0 -1
  635. package/util/subscription-dependency-context.d.ts +0 -34
  636. package/util/subscription-dependency-context.js +0 -1283
  637. package/util/subscription-dependency-context.js.map +0 -1
  638. package/util/tokenizer.d.ts +0 -5
  639. package/util/tokenizer.js +0 -41
  640. package/util/tokenizer.js.map +0 -1
  641. package/workers/codex-runner.worker.d.ts +0 -1
  642. package/workers/codex-runner.worker.js +0 -192
  643. package/workers/codex-runner.worker.js.map +0 -1
  644. /package/{private → src/private}/email-templates/enrollment.html +0 -0
  645. /package/{private → src/private}/email-templates/forgot-password.html +0 -0
  646. /package/{private → src/private}/email-templates/support-ticket-deleted.html +0 -0
  647. /package/{private → src/private}/email-templates/support-ticket-modified.html +0 -0
  648. /package/{private → src/private}/email-templates/support-ticket.html +0 -0
  649. /package/{public_api.d.ts → src/public_api.ts} +0 -0
package/server-app.js DELETED
@@ -1,2784 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- var __values = (this && this.__values) || function(o) {
39
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
40
- if (m) return m.call(o);
41
- if (o && typeof o.length === "number") return {
42
- next: function () {
43
- if (o && i >= o.length) o = void 0;
44
- return { value: o && o[i++], done: !o };
45
- }
46
- };
47
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
48
- };
49
- var __read = (this && this.__read) || function (o, n) {
50
- var m = typeof Symbol === "function" && o[Symbol.iterator];
51
- if (!m) return o;
52
- var i = m.call(o), r, ar = [], e;
53
- try {
54
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
55
- }
56
- catch (error) { e = { error: error }; }
57
- finally {
58
- try {
59
- if (r && !r.done && (m = i["return"])) m.call(i);
60
- }
61
- finally { if (e) throw e.error; }
62
- }
63
- return ar;
64
- };
65
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
66
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
67
- if (ar || !(i in from)) {
68
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
69
- ar[i] = from[i];
70
- }
71
- }
72
- return to.concat(ar || Array.prototype.slice.call(from));
73
- };
74
- Object.defineProperty(exports, "__esModule", { value: true });
75
- exports.ResolveIOMainServer = void 0;
76
- var express = require("express");
77
- var xmlParser = require("express-xml-bodyparser");
78
- var http_1 = require("http");
79
- var crypto = require("crypto");
80
- var fs = require("fs");
81
- var jwt = require("jsonwebtoken");
82
- var moment = require("moment-timezone");
83
- var msgpackr_1 = require("msgpackr");
84
- var os = require("os");
85
- var path = require("path");
86
- var perf_hooks_1 = require("perf_hooks");
87
- var inspector = require("inspector");
88
- var url_1 = require("url");
89
- var WebSocket = require("ws");
90
- var log_collection_1 = require("./collections/log.collection");
91
- var user_collection_1 = require("./collections/user.collection");
92
- var cron_manager_1 = require("./managers/cron.manager");
93
- var method_manager_1 = require("./managers/method.manager");
94
- var monitor_manager_1 = require("./managers/monitor.manager");
95
- var subscription_manager_1 = require("./managers/subscription.manager");
96
- var common_1 = require("./util/common");
97
- var error_reporter_1 = require("./util/error-reporter");
98
- var error_tracking_1 = require("./util/error-tracking");
99
- var mongodb_1 = require("mongodb");
100
- var auth_1 = require("./http/auth");
101
- var health_1 = require("./http/health");
102
- var home_1 = require("./http/home");
103
- var slow_query_publication_1 = require("./http/slow-query-publication");
104
- var websocket_manager_1 = require("./managers/websocket.manager");
105
- var worker_dispatcher_manager_1 = require("./managers/worker-dispatcher.manager");
106
- var worker_server_manager_1 = require("./managers/worker-server.manager");
107
- var resolveio_server_app_1 = require("./resolveio-server-app");
108
- var ResolveIOMainServer = /** @class */ (function () {
109
- function ResolveIOMainServer() {
110
- this._offlineUpdates = [];
111
- this.sesMail = false;
112
- this.publicProgram = false;
113
- this._rebootFlag = false;
114
- this.LOGGER = 'ERROR'; //ERROR / DEBUG
115
- this._clientRoutes = [];
116
- this._httpServerClosePromise = null;
117
- this._websocketServerClosePromise = null;
118
- this._wsConnectDebug = false;
119
- this._perfDebug = false;
120
- this._perfDebugIntervalMs = 2000;
121
- this._perfDebugTimer = null;
122
- this._perfDebugLastCpu = null;
123
- this._perfDebugLastTs = 0;
124
- this._eventLoopHistogram = null;
125
- this._cpuProfileOnStart = false;
126
- this._cpuProfileAuto = false;
127
- this._cpuProfileDurationMs = 15000;
128
- this._cpuProfileThresholdPct = 90;
129
- this._cpuProfileTriggerCount = 3;
130
- this._cpuProfileHighCount = 0;
131
- this._cpuProfileDir = null;
132
- this._cpuProfileSession = null;
133
- this._timerDebug = false;
134
- this._timerDebugThresholdMs = 50;
135
- this._timerDebugMinDelayMs = 5;
136
- this._timerDebugSampleRate = 1;
137
- this._timerDebugLogLimit = 100;
138
- this._timerDebugLogCount = 0;
139
- this._aiWorkerDebug = false;
140
- this._lastErrorMsg = null;
141
- this._debugMsgRecv = 0;
142
- this._debugMsgQueue = 0;
143
- this._isWorkersEnabled = false;
144
- this._isWorkerInstance = false;
145
- this._safeShutdown = false;
146
- this._dynamicAppGatewayEnabled = false;
147
- this._dynamicAppGatewayCache = new Map();
148
- this._socketTier = '';
149
- this._maxClientSockets = 0;
150
- this._singleIpPerUser = false;
151
- this._socketPolicyUpgradeUrl = '';
152
- this._clientHeartbeatIntervalMs = 20000;
153
- this._clientHeartbeatInitialDelayMs = 5000;
154
- this._clientHeartbeatBackpressureBytes = 5 * 1024 * 1024;
155
- this._dynamicAppGatewayCacheMs = 30 * 1000;
156
- }
157
- ResolveIOMainServer.create = function () {
158
- return __awaiter(this, void 0, void 0, function () {
159
- var resolveioMainServer;
160
- return __generator(this, function (_a) {
161
- switch (_a.label) {
162
- case 0:
163
- resolveioMainServer = new ResolveIOMainServer();
164
- return [4 /*yield*/, resolveioMainServer.initialize()];
165
- case 1:
166
- _a.sent();
167
- return [2 /*return*/, resolveioMainServer];
168
- }
169
- });
170
- });
171
- };
172
- ResolveIOMainServer.prototype.initialize = function () {
173
- return __awaiter(this, void 0, void 0, function () {
174
- var _a, workerRole, workerIndex, workerInstance;
175
- var _this = this;
176
- return __generator(this, function (_b) {
177
- switch (_b.label) {
178
- case 0:
179
- this._serverStartTime = new Date();
180
- this._lastErrorMsg = null;
181
- this._wsConnectDebug = this.resolveConnectDebug();
182
- this._perfDebug = this.resolvePerfDebug();
183
- this._cpuProfileOnStart = this.resolveCpuProfileOnStart();
184
- this._cpuProfileAuto = this.resolveCpuProfileAuto();
185
- this._cpuProfileDurationMs = this.resolveCpuProfileDurationMs();
186
- this._cpuProfileThresholdPct = this.resolveCpuProfileThresholdPct();
187
- this._cpuProfileTriggerCount = this.resolveCpuProfileTriggerCount();
188
- this._cpuProfileDir = this.resolveCpuProfileDir();
189
- this._timerDebug = this.resolveTimerDebug();
190
- this._timerDebugThresholdMs = this.resolveTimerDebugThresholdMs();
191
- this._timerDebugMinDelayMs = this.resolveTimerDebugMinDelayMs();
192
- this._timerDebugSampleRate = this.resolveTimerDebugSampleRate();
193
- this._timerDebugLogLimit = this.resolveTimerDebugLogLimit();
194
- this._aiWorkerDebug = this.parseDebugFlag(process.env.AI_ASSISTANT_WORKER_DEBUG);
195
- this._dynamicAppGatewayEnabled = this.resolveDynamicAppGatewayEnabled();
196
- this._socketTier = this.resolveSocketTier();
197
- this._maxClientSockets = this.resolveMaxClientSockets(this._socketTier);
198
- this._singleIpPerUser = this.resolveSingleIpPerUserPolicy(this._socketTier);
199
- this._socketPolicyUpgradeUrl = this.resolveSocketPolicyUpgradeUrl();
200
- if (this._maxClientSockets > 0 || this._singleIpPerUser) {
201
- console.info(new Date(), '[Socket Policy] configured', {
202
- tier: this._socketTier || 'none',
203
- maxClientSockets: this._maxClientSockets,
204
- singleIpPerUser: this._singleIpPerUser
205
- });
206
- }
207
- _a = this;
208
- return [4 /*yield*/, monitor_manager_1.MonitorManager.create()];
209
- case 1:
210
- _a._monitorManager = _b.sent();
211
- this._monitorManagerFunction = new monitor_manager_1.MonitorManagerFunction();
212
- this.installTimerDebug();
213
- this.startPerfDebug();
214
- if (this._cpuProfileOnStart) {
215
- this.startCpuProfile('on-start');
216
- }
217
- // Check for workers and decide what to start
218
- this._isWorkersEnabled = process.env.IS_WORKERS_ENABLED === 'true';
219
- this._isWorkerInstance = process.env.IS_WORKER_INSTANCE === 'true';
220
- setInterval(function () {
221
- if (_this._methodManager && _this._methodManager.getEnableDebug()) {
222
- console.log(new Date(), 'Server App', 'Msg Recv Hits', _this._debugMsgRecv);
223
- console.log(new Date(), 'Server App', 'Msg Queue Hits', _this._debugMsgQueue);
224
- }
225
- _this._debugMsgQueue = 0;
226
- _this._debugMsgRecv = 0;
227
- }, 60000);
228
- process.removeAllListeners('unhandledRejection');
229
- process.on('unhandledRejection', function (error, rej) { return __awaiter(_this, void 0, void 0, function () {
230
- var _a, normalizedError, correlationId, errorDetails, diffTimeSec;
231
- var _this = this;
232
- return __generator(this, function (_b) {
233
- switch (_b.label) {
234
- case 0:
235
- _a = (0, error_tracking_1.ensureErrorWithCorrelation)(error), normalizedError = _a.error, correlationId = _a.correlationId;
236
- if (this._methodManager.getEnableDebug()) {
237
- console.error(new Date(), 'ERROR DETECTED w/ Debug Flag Active: unhandledRejection', [normalizedError, rej, { correlationId: correlationId }]);
238
- }
239
- // Condition to filter out the MongoError with specific codes
240
- if (normalizedError && normalizedError['name'] === 'MongoError' && (normalizedError['code'] === 48 || normalizedError['code'] === 26 || normalizedError['code'] === 11000 || normalizedError['code'] === 251)) {
241
- return [2 /*return*/]; // Simply return without doing anything further
242
- }
243
- // if (normalizedError && normalizedError['name'] === 'MongoServerError' && (!initServerFlag || normalizedError['code'] === 26 || normalizedError['code'] === 11000 || normalizedError['code'] === 86 || normalizedError['code'] === 251)) {
244
- // return; // Simply return without doing anything further
245
- // }
246
- if (normalizedError && normalizedError['name'] === 'MongoServerError') {
247
- return [2 /*return*/]; // Simply return without doing anything further
248
- }
249
- errorDetails = {
250
- id: correlationId,
251
- name: normalizedError === null || normalizedError === void 0 ? void 0 : normalizedError.name,
252
- message: normalizedError === null || normalizedError === void 0 ? void 0 : normalizedError.message,
253
- stack: normalizedError === null || normalizedError === void 0 ? void 0 : normalizedError.stack,
254
- code: normalizedError === null || normalizedError === void 0 ? void 0 : normalizedError.code,
255
- codeName: normalizedError === null || normalizedError === void 0 ? void 0 : normalizedError.codeName
256
- };
257
- console.error(new Date(), 'Unhandled Rejection at Promise', [errorDetails]);
258
- diffTimeSec = moment().diff(this._serverStartTime, 'seconds');
259
- if (!(normalizedError && (normalizedError['name'] === 'MongoNetworkTimeoutError' || normalizedError instanceof mongodb_1.MongoNetworkTimeoutError))) return [3 /*break*/, 1];
260
- if (diffTimeSec > 60 && !this._lastErrorMsg) {
261
- this._lastErrorMsg = new Date();
262
- setTimeout(function () {
263
- _this._lastErrorMsg = null;
264
- }, 60000);
265
- // Exiting the process
266
- process.exit(1);
267
- }
268
- return [3 /*break*/, 5];
269
- case 1:
270
- if (!(normalizedError && normalizedError['name'] === 'MongoError' && normalizedError['message'] === 'not master')) return [3 /*break*/, 2];
271
- if (diffTimeSec > 60 && !this._lastErrorMsg) {
272
- this._lastErrorMsg = new Date();
273
- setTimeout(function () {
274
- _this._lastErrorMsg = null;
275
- }, 60000);
276
- }
277
- process.exit(1);
278
- return [3 /*break*/, 5];
279
- case 2:
280
- if (!(normalizedError && normalizedError['name'] === 'MongoError' && normalizedError['message'] === 'not master and slaveOk=false')) return [3 /*break*/, 3];
281
- if (diffTimeSec > 60 && !this._lastErrorMsg) {
282
- this._lastErrorMsg = new Date();
283
- setTimeout(function () {
284
- _this._lastErrorMsg = null;
285
- }, 60000);
286
- }
287
- process.exit(1);
288
- return [3 /*break*/, 5];
289
- case 3:
290
- if (!(normalizedError && normalizedError['name'] !== 'StatusError' && normalizedError['message'] !== '')) return [3 /*break*/, 5];
291
- if (!(diffTimeSec > 60 && !this._lastErrorMsg)) return [3 /*break*/, 5];
292
- this._lastErrorMsg = new Date();
293
- setTimeout(function () {
294
- _this._lastErrorMsg = null;
295
- }, 60000);
296
- return [4 /*yield*/, this.reportServerError('SERVER - Unhandled Rejection - ' + resolveio_server_app_1.ResolveIOServer.getServerConfig()['CLIENT_NAME'], correlationId, errorDetails, {
297
- context: 'unhandledRejection',
298
- scenario: 'General'
299
- })];
300
- case 4:
301
- _b.sent();
302
- _b.label = 5;
303
- case 5: return [2 /*return*/];
304
- }
305
- });
306
- }); });
307
- process.on('uncaughtException', function (error) { return __awaiter(_this, void 0, void 0, function () {
308
- var _a, normalizedError, correlationId, diffTimeSec, errorDetails;
309
- var _this = this;
310
- return __generator(this, function (_b) {
311
- switch (_b.label) {
312
- case 0:
313
- _a = (0, error_tracking_1.ensureErrorWithCorrelation)(error), normalizedError = _a.error, correlationId = _a.correlationId;
314
- console.error(normalizedError, 'Uncaught Exception thrown', { correlationId: correlationId });
315
- diffTimeSec = moment().diff(this._serverStartTime, 'seconds');
316
- if (!(diffTimeSec > 60 && !this._lastErrorMsg)) return [3 /*break*/, 2];
317
- this._lastErrorMsg = new Date();
318
- setTimeout(function () {
319
- _this._lastErrorMsg = null;
320
- }, 60000);
321
- errorDetails = {
322
- id: correlationId,
323
- name: normalizedError === null || normalizedError === void 0 ? void 0 : normalizedError.name,
324
- message: normalizedError === null || normalizedError === void 0 ? void 0 : normalizedError.message,
325
- stack: normalizedError === null || normalizedError === void 0 ? void 0 : normalizedError.stack,
326
- code: normalizedError === null || normalizedError === void 0 ? void 0 : normalizedError.code,
327
- codeName: normalizedError === null || normalizedError === void 0 ? void 0 : normalizedError.codeName
328
- };
329
- return [4 /*yield*/, this.reportServerError('SERVER - Unhandled Exception - ' + resolveio_server_app_1.ResolveIOServer.getServerConfig()['CLIENT_NAME'], correlationId, errorDetails, {
330
- context: 'uncaughtException'
331
- })];
332
- case 1:
333
- _b.sent();
334
- _b.label = 2;
335
- case 2: return [2 /*return*/];
336
- }
337
- });
338
- }); });
339
- //PM2 wants to reboot/restart
340
- process.on('SIGINT', function () { return __awaiter(_this, void 0, void 0, function () {
341
- var error_1;
342
- return __generator(this, function (_a) {
343
- switch (_a.label) {
344
- case 0:
345
- this._rebootFlag = true;
346
- _a.label = 1;
347
- case 1:
348
- _a.trys.push([1, 3, , 4]);
349
- return [4 /*yield*/, this.shutdownNetworkServers()];
350
- case 2:
351
- _a.sent();
352
- return [3 /*break*/, 4];
353
- case 3:
354
- error_1 = _a.sent();
355
- console.error(new Date(), 'Error closing network servers (SIGINT)', error_1);
356
- return [3 /*break*/, 4];
357
- case 4: return [4 /*yield*/, this.safeShutdown()];
358
- case 5:
359
- _a.sent();
360
- return [2 /*return*/];
361
- }
362
- });
363
- }); });
364
- process.on('SIGTERM', function () { return __awaiter(_this, void 0, void 0, function () {
365
- var error_2;
366
- return __generator(this, function (_a) {
367
- switch (_a.label) {
368
- case 0:
369
- this._rebootFlag = true;
370
- _a.label = 1;
371
- case 1:
372
- _a.trys.push([1, 3, , 4]);
373
- return [4 /*yield*/, this.shutdownNetworkServers()];
374
- case 2:
375
- _a.sent();
376
- return [3 /*break*/, 4];
377
- case 3:
378
- error_2 = _a.sent();
379
- console.error(new Date(), 'Error closing network servers (SIGTERM)', error_2);
380
- return [3 /*break*/, 4];
381
- case 4: return [4 /*yield*/, this.safeShutdown()];
382
- case 5:
383
- _a.sent();
384
- return [2 /*return*/];
385
- }
386
- });
387
- }); });
388
- process.on('SIGQUIT', function () { return __awaiter(_this, void 0, void 0, function () {
389
- var error_3;
390
- return __generator(this, function (_a) {
391
- switch (_a.label) {
392
- case 0:
393
- this._rebootFlag = true;
394
- _a.label = 1;
395
- case 1:
396
- _a.trys.push([1, 3, , 4]);
397
- return [4 /*yield*/, this.shutdownNetworkServers()];
398
- case 2:
399
- _a.sent();
400
- return [3 /*break*/, 4];
401
- case 3:
402
- error_3 = _a.sent();
403
- console.error(new Date(), 'Error closing network servers (SIGQUIT)', error_3);
404
- return [3 /*break*/, 4];
405
- case 4: return [4 /*yield*/, this.safeShutdown()];
406
- case 5:
407
- _a.sent();
408
- return [2 /*return*/];
409
- }
410
- });
411
- }); });
412
- if (this.LOGGER === 'DEBUG') {
413
- console.log('Starting ResolveIO Server');
414
- }
415
- if (this._isWorkersEnabled) {
416
- if (this._isWorkerInstance) {
417
- workerRole = this.resolveWorkerRole();
418
- workerIndex = this.normalizeWorkerSelectorValue(process.env.WORKER_INDEX) || 'UNKNOWN';
419
- workerInstance = this.normalizeWorkerSelectorValue(process.env.NODE_APP_INSTANCE) || 'UNKNOWN';
420
- console.log("Running as Worker: ".concat(workerRole), workerIndex, workerInstance);
421
- this._methodManager = method_manager_1.MethodManager.create(null, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);
422
- this._subscriptionManager = subscription_manager_1.SubscriptionManager.createPublicationRegistry(resolveio_server_app_1.ResolveIOServer.getServerConfig());
423
- this._workerServerManager = worker_server_manager_1.WorkerServerManager.create(this._methodManager, this.getServerConfig());
424
- if (process.env.WORKER_INDEX === '0') {
425
- this._cronManager = cron_manager_1.CronManager.create();
426
- }
427
- }
428
- else {
429
- console.log('Running as a Server instance', process.env.NODE_APP_INSTANCE);
430
- this._websocketManager = websocket_manager_1.WebSocketManager.create(this);
431
- this._methodManager = method_manager_1.MethodManager.create(this._websocketManager, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);
432
- this._workerDispatcherManager = worker_dispatcher_manager_1.WorkerDispatcherManager.create(this._websocketManager, this._methodManager);
433
- this._subscriptionManager = subscription_manager_1.SubscriptionManager.create(this._serverWSS, resolveio_server_app_1.ResolveIOServer.getServerConfig(), this._monitorManagerFunction);
434
- this.startServerInstance();
435
- this.listen();
436
- }
437
- }
438
- else {
439
- console.log('Running with Workers Disabled', process.env.NODE_APP_INSTANCE);
440
- this._websocketManager = websocket_manager_1.WebSocketManager.create(this);
441
- this._methodManager = method_manager_1.MethodManager.create(this._websocketManager, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);
442
- this._subscriptionManager = subscription_manager_1.SubscriptionManager.create(this._serverWSS, resolveio_server_app_1.ResolveIOServer.getServerConfig(), this._monitorManagerFunction);
443
- this._cronManager = cron_manager_1.CronManager.create();
444
- this.startServerInstance();
445
- this.listen();
446
- }
447
- return [2 /*return*/];
448
- }
449
- });
450
- });
451
- };
452
- ResolveIOMainServer.prototype.shutdownNetworkServers = function () {
453
- return __awaiter(this, void 0, void 0, function () {
454
- return __generator(this, function (_a) {
455
- switch (_a.label) {
456
- case 0: return [4 /*yield*/, this.closeWebSocketServerGracefully()];
457
- case 1:
458
- _a.sent();
459
- return [4 /*yield*/, this.closeHttpServerGracefully()];
460
- case 2:
461
- _a.sent();
462
- return [2 /*return*/];
463
- }
464
- });
465
- });
466
- };
467
- ResolveIOMainServer.prototype.closeHttpServerGracefully = function () {
468
- return __awaiter(this, void 0, void 0, function () {
469
- var _this = this;
470
- return __generator(this, function (_a) {
471
- switch (_a.label) {
472
- case 0:
473
- if (!this._serverHTTP) {
474
- return [2 /*return*/];
475
- }
476
- if (!(this._httpServerClosePromise !== null)) return [3 /*break*/, 2];
477
- return [4 /*yield*/, this._httpServerClosePromise];
478
- case 1:
479
- _a.sent();
480
- return [2 /*return*/];
481
- case 2:
482
- // eslint-disable-next-line no-restricted-syntax
483
- this._httpServerClosePromise = new Promise(function (resolve) {
484
- try {
485
- _this._serverHTTP.close(function (error) {
486
- if (error && error['code'] !== 'ERR_SERVER_NOT_RUNNING') {
487
- console.error(new Date(), 'Error closing HTTP server before shutdown', error);
488
- }
489
- resolve();
490
- });
491
- }
492
- catch (error) {
493
- if (error && error['code'] !== 'ERR_SERVER_NOT_RUNNING') {
494
- console.error(new Date(), 'Error closing HTTP server before shutdown', error);
495
- }
496
- resolve();
497
- }
498
- });
499
- return [4 /*yield*/, this._httpServerClosePromise];
500
- case 3:
501
- _a.sent();
502
- return [2 /*return*/];
503
- }
504
- });
505
- });
506
- };
507
- ResolveIOMainServer.prototype.closeWebSocketServerGracefully = function () {
508
- return __awaiter(this, void 0, void 0, function () {
509
- var _this = this;
510
- return __generator(this, function (_a) {
511
- switch (_a.label) {
512
- case 0:
513
- if (!this._serverWSS) {
514
- return [2 /*return*/];
515
- }
516
- if (!(this._websocketServerClosePromise !== null)) return [3 /*break*/, 2];
517
- return [4 /*yield*/, this._websocketServerClosePromise];
518
- case 1:
519
- _a.sent();
520
- return [2 /*return*/];
521
- case 2:
522
- this._serverWSS.clients.forEach(function (ws) {
523
- try {
524
- ws.close(1001, 'Server restarting');
525
- }
526
- catch (error) {
527
- console.error(new Date(), 'Error closing WebSocket client before shutdown', error);
528
- }
529
- });
530
- // eslint-disable-next-line no-restricted-syntax
531
- this._websocketServerClosePromise = new Promise(function (resolve) {
532
- try {
533
- _this._serverWSS.close(function (error) {
534
- if (error) {
535
- console.error(new Date(), 'Error closing WebSocket server before shutdown', error);
536
- }
537
- resolve();
538
- });
539
- }
540
- catch (error) {
541
- console.error(new Date(), 'Error closing WebSocket server before shutdown', error);
542
- resolve();
543
- }
544
- });
545
- return [4 /*yield*/, this._websocketServerClosePromise];
546
- case 3:
547
- _a.sent();
548
- return [2 /*return*/];
549
- }
550
- });
551
- });
552
- };
553
- ResolveIOMainServer.prototype.startServerInstance = function () {
554
- // Start express app
555
- this._app = express();
556
- // Use built-in express JSON parser
557
- this._app.use(express.json({
558
- limit: '50mb',
559
- reviver: common_1.dateReviver // Note: 'reviver' is an option for JSON.parse, which can be passed here
560
- }));
561
- // Use built-in express URL-encoded parser
562
- this._app.use(express.urlencoded({
563
- limit: '50mb',
564
- extended: true, // `extended` must be explicitly true or false
565
- parameterLimit: 1000000
566
- }));
567
- this._app.use(xmlParser());
568
- // Set port
569
- this._portHTTP = process.env.NODE_APP_INSTANCE ? parseInt('808' + process.env.NODE_APP_INSTANCE) : 8080;
570
- if (this.LOGGER === 'DEBUG') {
571
- console.log('Setup ports');
572
- }
573
- // Create http server and websock server
574
- this.createServer();
575
- if (this.LOGGER === 'DEBUG') {
576
- console.log('Create server');
577
- }
578
- // Set CORS
579
- this._app.use(function (req, res, next) {
580
- res.setHeader('Access-Control-Allow-Origin', '*');
581
- res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
582
- res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
583
- res.setHeader('Access-Control-Allow-Credentials', 'false');
584
- next();
585
- });
586
- if (this.LOGGER === 'DEBUG') {
587
- console.log('Setup cors');
588
- }
589
- this.installDynamicAppGatewayMiddleware();
590
- // Set up http login route
591
- (0, auth_1.setupAuthRoutes)(this, this._app, resolveio_server_app_1.ResolveIOServer.getServerConfig());
592
- (0, health_1.setupHealthRoutes)(this._app);
593
- (0, slow_query_publication_1.setupSlowQueryPublicationRoutes)(this._app);
594
- if (resolveio_server_app_1.ResolveIOServer.getServerConfig()['CLIENT_NAME'] === 'ResolveIO' || this.publicProgram) {
595
- (0, home_1.setupHomeRoutes)(this, this._app, resolveio_server_app_1.ResolveIOServer.getServerConfig());
596
- }
597
- if (this.LOGGER === 'DEBUG') {
598
- console.log('Setup express routes');
599
- }
600
- };
601
- ResolveIOMainServer.prototype.installDynamicAppGatewayMiddleware = function () {
602
- var _this = this;
603
- if (!this._dynamicAppGatewayEnabled) {
604
- return;
605
- }
606
- this._app.use(function (req, res, next) { return __awaiter(_this, void 0, void 0, function () {
607
- var appId, appDoc, allowedHosts, controlHosts, requestHost, originHeader, originHost, expectedToken, providedToken, error_4;
608
- var _a, _b, _c;
609
- return __generator(this, function (_d) {
610
- switch (_d.label) {
611
- case 0:
612
- appId = this.extractDynamicAppGatewayId(req);
613
- if (!appId) {
614
- next();
615
- return [2 /*return*/];
616
- }
617
- _d.label = 1;
618
- case 1:
619
- _d.trys.push([1, 3, , 4]);
620
- return [4 /*yield*/, this.resolveCachedDynamicAppGatewayApp(appId)];
621
- case 2:
622
- appDoc = _d.sent();
623
- if (!appDoc) {
624
- res.status(404).send(JSON.stringify({
625
- error: true,
626
- result: 'App not found.'
627
- }));
628
- return [2 /*return*/];
629
- }
630
- allowedHosts = this.resolveDynamicAppAllowedHosts(appDoc);
631
- controlHosts = this.resolveDynamicAppControlHosts();
632
- requestHost = this.normalizeHostname(this.normalizeHeaderValue((_a = req.headers) === null || _a === void 0 ? void 0 : _a['x-forwarded-host'])
633
- || this.normalizeHeaderValue((_b = req.headers) === null || _b === void 0 ? void 0 : _b.host));
634
- originHeader = this.normalizeHeaderValue((_c = req.headers) === null || _c === void 0 ? void 0 : _c.origin);
635
- originHost = this.resolveOriginHostname(originHeader);
636
- if (requestHost && controlHosts.has(requestHost) && !this.isLocalHostname(requestHost)) {
637
- res.status(403).send(JSON.stringify({
638
- error: true,
639
- result: 'App API must be requested from an app domain.'
640
- }));
641
- return [2 /*return*/];
642
- }
643
- if (requestHost && !allowedHosts.has(requestHost) && !this.isLocalHostname(requestHost)) {
644
- res.status(403).send(JSON.stringify({
645
- error: true,
646
- result: 'Host not allowed for app API.'
647
- }));
648
- return [2 /*return*/];
649
- }
650
- if (originHost && controlHosts.has(originHost) && !this.isLocalHostname(originHost)) {
651
- res.status(403).send(JSON.stringify({
652
- error: true,
653
- result: 'App API origin must be an app domain.'
654
- }));
655
- return [2 /*return*/];
656
- }
657
- if (originHost && !allowedHosts.has(originHost)) {
658
- res.status(403).send(JSON.stringify({
659
- error: true,
660
- result: 'Origin not allowed for app API.'
661
- }));
662
- return [2 /*return*/];
663
- }
664
- if (originHeader) {
665
- this.applyDynamicAppGatewayCorsHeaders(res, originHeader);
666
- }
667
- if (req.method === 'OPTIONS') {
668
- res.status(204).end();
669
- return [2 /*return*/];
670
- }
671
- expectedToken = this.normalizeHeaderValue(appDoc === null || appDoc === void 0 ? void 0 : appDoc.rio_token);
672
- if (!expectedToken) {
673
- res.status(500).send(JSON.stringify({
674
- error: true,
675
- result: 'App token is not configured.'
676
- }));
677
- return [2 /*return*/];
678
- }
679
- providedToken = this.resolveDynamicAppGatewayToken(req);
680
- if (!providedToken || providedToken !== expectedToken) {
681
- res.status(401).send(JSON.stringify({
682
- error: true,
683
- result: 'Invalid or missing RIO token.'
684
- }));
685
- return [2 /*return*/];
686
- }
687
- next();
688
- return [3 /*break*/, 4];
689
- case 3:
690
- error_4 = _d.sent();
691
- console.error(new Date(), '[DynamicAppGateway] middleware failure', error_4);
692
- res.status(500).send(JSON.stringify({
693
- error: true,
694
- result: (error_4 === null || error_4 === void 0 ? void 0 : error_4.message) || 'Dynamic app gateway error.'
695
- }));
696
- return [3 /*break*/, 4];
697
- case 4: return [2 /*return*/];
698
- }
699
- });
700
- }); });
701
- };
702
- ResolveIOMainServer.prototype.resolveDynamicAppGatewayEnabled = function () {
703
- var _a;
704
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig() || {};
705
- var raw = (_a = config['AI_CODER_DYNAMIC_APP_GATEWAY']) !== null && _a !== void 0 ? _a : process.env.AI_CODER_DYNAMIC_APP_GATEWAY;
706
- if (raw !== undefined && raw !== null && "".concat(raw).trim() !== '') {
707
- return this.parseDebugFlag(raw);
708
- }
709
- var urls = [
710
- config['ROOT_URL'],
711
- config['SEC_ROOT_URL'],
712
- config['SERVER_URL'],
713
- process.env.ROOT_URL,
714
- process.env.SEC_ROOT_URL,
715
- process.env.SERVER_URL
716
- ]
717
- .map(function (value) { return "".concat(value || '').trim().toLowerCase(); })
718
- .filter(Boolean);
719
- return urls.some(function (value) { return value.includes('aicoder'); });
720
- };
721
- ResolveIOMainServer.prototype.extractDynamicAppGatewayId = function (req) {
722
- var rawPath = "".concat(req.originalUrl || req.url || req.path || '');
723
- var normalizedPath = rawPath.split('?')[0];
724
- if (!normalizedPath.startsWith('/api/apps/')) {
725
- return '';
726
- }
727
- var parts = normalizedPath.split('/').filter(Boolean);
728
- if (parts.length < 3) {
729
- return '';
730
- }
731
- return "".concat(parts[2] || '').trim();
732
- };
733
- ResolveIOMainServer.prototype.resolveDynamicAppGatewayToken = function (req) {
734
- var e_1, _a, e_2, _b, e_3, _c;
735
- var _d, _e, _f, _g, _h;
736
- var authHeader = this.normalizeHeaderValue(((_d = req.headers) === null || _d === void 0 ? void 0 : _d.authorization) || ((_e = req.headers) === null || _e === void 0 ? void 0 : _e.Authorization));
737
- if (authHeader) {
738
- var bearerMatch = authHeader.match(/^bearer\s+(.+)$/i);
739
- if (bearerMatch && bearerMatch[1]) {
740
- return bearerMatch[1].trim();
741
- }
742
- }
743
- var headerCandidates = [
744
- (_f = req.headers) === null || _f === void 0 ? void 0 : _f['x-rio-token'],
745
- (_g = req.headers) === null || _g === void 0 ? void 0 : _g['x-app-token'],
746
- (_h = req.headers) === null || _h === void 0 ? void 0 : _h['x-api-key']
747
- ];
748
- try {
749
- for (var headerCandidates_1 = __values(headerCandidates), headerCandidates_1_1 = headerCandidates_1.next(); !headerCandidates_1_1.done; headerCandidates_1_1 = headerCandidates_1.next()) {
750
- var candidate = headerCandidates_1_1.value;
751
- var value = this.normalizeHeaderValue(candidate);
752
- if (value) {
753
- return value;
754
- }
755
- }
756
- }
757
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
758
- finally {
759
- try {
760
- if (headerCandidates_1_1 && !headerCandidates_1_1.done && (_a = headerCandidates_1.return)) _a.call(headerCandidates_1);
761
- }
762
- finally { if (e_1) throw e_1.error; }
763
- }
764
- var body = req.body || {};
765
- var query = req.query || {};
766
- var bodyCandidates = [body.rioToken, body.rio_token, body.apiKey, body.token];
767
- try {
768
- for (var bodyCandidates_1 = __values(bodyCandidates), bodyCandidates_1_1 = bodyCandidates_1.next(); !bodyCandidates_1_1.done; bodyCandidates_1_1 = bodyCandidates_1.next()) {
769
- var candidate = bodyCandidates_1_1.value;
770
- var value = this.normalizeHeaderValue(candidate);
771
- if (value) {
772
- return value;
773
- }
774
- }
775
- }
776
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
777
- finally {
778
- try {
779
- if (bodyCandidates_1_1 && !bodyCandidates_1_1.done && (_b = bodyCandidates_1.return)) _b.call(bodyCandidates_1);
780
- }
781
- finally { if (e_2) throw e_2.error; }
782
- }
783
- var queryCandidates = [query.rioToken, query.rio_token, query.apiKey, query.token];
784
- try {
785
- for (var queryCandidates_1 = __values(queryCandidates), queryCandidates_1_1 = queryCandidates_1.next(); !queryCandidates_1_1.done; queryCandidates_1_1 = queryCandidates_1.next()) {
786
- var candidate = queryCandidates_1_1.value;
787
- var value = this.normalizeHeaderValue(candidate);
788
- if (value) {
789
- return value;
790
- }
791
- }
792
- }
793
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
794
- finally {
795
- try {
796
- if (queryCandidates_1_1 && !queryCandidates_1_1.done && (_c = queryCandidates_1.return)) _c.call(queryCandidates_1);
797
- }
798
- finally { if (e_3) throw e_3.error; }
799
- }
800
- return '';
801
- };
802
- ResolveIOMainServer.prototype.normalizeHeaderValue = function (value) {
803
- if (Array.isArray(value)) {
804
- return value.map(function (entry) { return "".concat(entry || '').trim(); }).filter(Boolean).join(',');
805
- }
806
- return "".concat(value || '').trim();
807
- };
808
- ResolveIOMainServer.prototype.normalizeHostname = function (value) {
809
- var raw = "".concat(value || '').trim();
810
- if (!raw) {
811
- return '';
812
- }
813
- var candidate = raw.split(',')[0].trim();
814
- if (!candidate) {
815
- return '';
816
- }
817
- try {
818
- if (candidate.startsWith('http://') || candidate.startsWith('https://')) {
819
- return new url_1.URL(candidate).hostname.toLowerCase();
820
- }
821
- if (candidate.includes('/')) {
822
- return new url_1.URL("http://".concat(candidate)).hostname.toLowerCase();
823
- }
824
- }
825
- catch (_a) { }
826
- candidate = candidate.replace(/^\[/, '').replace(/\]$/, '');
827
- var lastColon = candidate.lastIndexOf(':');
828
- if (lastColon > -1 && candidate.indexOf(':') === lastColon) {
829
- candidate = candidate.slice(0, lastColon);
830
- }
831
- return candidate.toLowerCase();
832
- };
833
- ResolveIOMainServer.prototype.resolveOriginHostname = function (origin) {
834
- var raw = "".concat(origin || '').trim();
835
- if (!raw) {
836
- return '';
837
- }
838
- try {
839
- return new url_1.URL(raw).hostname.toLowerCase();
840
- }
841
- catch (_a) {
842
- return this.normalizeHostname(raw);
843
- }
844
- };
845
- ResolveIOMainServer.prototype.isLocalHostname = function (hostname) {
846
- var normalized = this.normalizeHostname(hostname);
847
- return normalized === 'localhost' || normalized === '127.0.0.1' || normalized === '::1';
848
- };
849
- ResolveIOMainServer.prototype.resolveDynamicAppControlHosts = function () {
850
- var e_4, _a;
851
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig() || {};
852
- var hosts = new Set();
853
- var candidates = [
854
- config['ROOT_URL'],
855
- config['SEC_ROOT_URL'],
856
- config['SERVER_URL'],
857
- process.env.ROOT_URL,
858
- process.env.SEC_ROOT_URL,
859
- process.env.SERVER_URL,
860
- process.env.AI_CODER_ROOT_URL,
861
- process.env.AI_CODER_SEC_ROOT_URL,
862
- process.env.AI_CODER_SERVER_URL
863
- ];
864
- try {
865
- for (var candidates_1 = __values(candidates), candidates_1_1 = candidates_1.next(); !candidates_1_1.done; candidates_1_1 = candidates_1.next()) {
866
- var candidate = candidates_1_1.value;
867
- var normalized = this.normalizeHostname("".concat(candidate || ''));
868
- if (normalized) {
869
- hosts.add(normalized);
870
- }
871
- }
872
- }
873
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
874
- finally {
875
- try {
876
- if (candidates_1_1 && !candidates_1_1.done && (_a = candidates_1.return)) _a.call(candidates_1);
877
- }
878
- finally { if (e_4) throw e_4.error; }
879
- }
880
- return hosts;
881
- };
882
- ResolveIOMainServer.prototype.resolveDynamicAppAllowedHosts = function (appDoc) {
883
- var e_5, _a;
884
- var hosts = new Set();
885
- var candidates = [
886
- appDoc === null || appDoc === void 0 ? void 0 : appDoc.domain,
887
- appDoc === null || appDoc === void 0 ? void 0 : appDoc.backend_domain
888
- ];
889
- if ((appDoc === null || appDoc === void 0 ? void 0 : appDoc.subdomain) && (appDoc === null || appDoc === void 0 ? void 0 : appDoc.domain_base)) {
890
- candidates.push("".concat(appDoc.subdomain, ".").concat(appDoc.domain_base));
891
- }
892
- try {
893
- for (var candidates_2 = __values(candidates), candidates_2_1 = candidates_2.next(); !candidates_2_1.done; candidates_2_1 = candidates_2.next()) {
894
- var candidate = candidates_2_1.value;
895
- var normalized = this.normalizeHostname("".concat(candidate || ''));
896
- if (normalized) {
897
- hosts.add(normalized);
898
- }
899
- }
900
- }
901
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
902
- finally {
903
- try {
904
- if (candidates_2_1 && !candidates_2_1.done && (_a = candidates_2.return)) _a.call(candidates_2);
905
- }
906
- finally { if (e_5) throw e_5.error; }
907
- }
908
- return hosts;
909
- };
910
- ResolveIOMainServer.prototype.applyDynamicAppGatewayCorsHeaders = function (res, origin) {
911
- res.setHeader('Access-Control-Allow-Origin', origin);
912
- res.setHeader('Vary', 'Origin');
913
- res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS');
914
- res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization, X-Rio-Token, X-API-Key');
915
- res.setHeader('Access-Control-Allow-Credentials', 'true');
916
- res.setHeader('Access-Control-Max-Age', '600');
917
- };
918
- ResolveIOMainServer.prototype.resolveCachedDynamicAppGatewayApp = function (appId) {
919
- return __awaiter(this, void 0, void 0, function () {
920
- var now, cached, db, appCollection, appDoc, generated;
921
- return __generator(this, function (_a) {
922
- switch (_a.label) {
923
- case 0:
924
- now = Date.now();
925
- cached = this._dynamicAppGatewayCache.get(appId);
926
- if (cached && cached.expiresAt > now) {
927
- return [2 /*return*/, cached.app];
928
- }
929
- db = resolveio_server_app_1.ResolveIOServer.getMainDB();
930
- if (!db) {
931
- return [2 /*return*/, null];
932
- }
933
- appCollection = db.collection('ai-coder-apps');
934
- return [4 /*yield*/, appCollection.findOne({ _id: appId }, {
935
- projection: {
936
- _id: 1,
937
- domain: 1,
938
- backend_domain: 1,
939
- subdomain: 1,
940
- domain_base: 1,
941
- rio_token: 1
942
- }
943
- })];
944
- case 1:
945
- appDoc = _a.sent();
946
- if (!appDoc) {
947
- this._dynamicAppGatewayCache.delete(appId);
948
- return [2 /*return*/, null];
949
- }
950
- if (!!this.normalizeHeaderValue(appDoc.rio_token)) return [3 /*break*/, 3];
951
- generated = crypto.randomBytes(32).toString('hex');
952
- return [4 /*yield*/, appCollection.updateOne({ _id: appId }, {
953
- $set: {
954
- rio_token: generated,
955
- updatedAt: new Date()
956
- }
957
- })];
958
- case 2:
959
- _a.sent();
960
- appDoc.rio_token = generated;
961
- _a.label = 3;
962
- case 3:
963
- this._dynamicAppGatewayCache.set(appId, {
964
- expiresAt: now + this._dynamicAppGatewayCacheMs,
965
- app: appDoc
966
- });
967
- return [2 /*return*/, appDoc];
968
- }
969
- });
970
- });
971
- };
972
- ResolveIOMainServer.prototype.safeShutdown = function () {
973
- return __awaiter(this, void 0, void 0, function () {
974
- var _a;
975
- var _this = this;
976
- return __generator(this, function (_b) {
977
- switch (_b.label) {
978
- case 0:
979
- if (!this._safeShutdown) {
980
- console.log(new Date(), 'Safe Shutdown Command Received');
981
- }
982
- if (!(!this._monitorManagerFunction.getActiveMonitorFunctions().length
983
- && !this._offlineUpdates.length && (!this._workerDispatcherManager || this._workerDispatcherManager.isSafeShutdown()))) return [3 /*break*/, 7];
984
- if (!resolveio_server_app_1.ResolveIOServer.getMongoConnection()) return [3 /*break*/, 5];
985
- _b.label = 1;
986
- case 1:
987
- _b.trys.push([1, 3, , 4]);
988
- return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoConnection().close(false)];
989
- case 2:
990
- _b.sent();
991
- console.log(new Date(), 'Safe Exit Complete, Process Exit');
992
- process.exit(0);
993
- return [3 /*break*/, 4];
994
- case 3:
995
- _a = _b.sent();
996
- process.exit(1);
997
- return [3 /*break*/, 4];
998
- case 4:
999
- ;
1000
- return [3 /*break*/, 6];
1001
- case 5:
1002
- process.exit(0);
1003
- _b.label = 6;
1004
- case 6: return [3 /*break*/, 8];
1005
- case 7:
1006
- if (!this._safeShutdown) {
1007
- this._safeShutdown = true;
1008
- setTimeout(function () {
1009
- _this._safeShutdown = false;
1010
- }, 1000);
1011
- console.log(new Date(), 'Safe Exit In Progress', this._monitorManagerFunction.getActiveMonitorFunctions().length, this._offlineUpdates.length);
1012
- }
1013
- setImmediate(function () { return __awaiter(_this, void 0, void 0, function () {
1014
- return __generator(this, function (_a) {
1015
- switch (_a.label) {
1016
- case 0: return [4 /*yield*/, this.safeShutdown()];
1017
- case 1:
1018
- _a.sent();
1019
- return [2 /*return*/];
1020
- }
1021
- });
1022
- }); });
1023
- _b.label = 8;
1024
- case 8: return [2 /*return*/];
1025
- }
1026
- });
1027
- });
1028
- };
1029
- ResolveIOMainServer.prototype.getIsWorkersEnabled = function () {
1030
- return this._isWorkersEnabled;
1031
- };
1032
- ResolveIOMainServer.prototype.getIsWorkerInstance = function () {
1033
- return this._isWorkerInstance;
1034
- };
1035
- ResolveIOMainServer.prototype.getWSList = function () {
1036
- var res = [];
1037
- this._serverWSS.clients.forEach(function (ws) {
1038
- res.push(ws['id_socket']);
1039
- });
1040
- return res;
1041
- };
1042
- ResolveIOMainServer.prototype.getWSUserList = function () {
1043
- var res = [];
1044
- this._serverWSS.clients.forEach(function (ws) {
1045
- res.push(ws['id_user']);
1046
- });
1047
- return res;
1048
- };
1049
- ResolveIOMainServer.prototype.getHTTPServer = function () {
1050
- return this._serverHTTP;
1051
- };
1052
- ResolveIOMainServer.prototype.getCronManager = function () {
1053
- return this._cronManager;
1054
- };
1055
- ResolveIOMainServer.prototype.reportServerError = function (subject_1, correlationId_1, context_1, meta_1) {
1056
- return __awaiter(this, arguments, void 0, function (subject, correlationId, context, meta, severity, stackOverride) {
1057
- var config, metadata;
1058
- if (severity === void 0) { severity = 'error'; }
1059
- return __generator(this, function (_a) {
1060
- switch (_a.label) {
1061
- case 0:
1062
- config = resolveio_server_app_1.ResolveIOServer.getServerConfig();
1063
- metadata = Object.assign({}, meta || {});
1064
- if (correlationId && !metadata.correlationId) {
1065
- metadata.correlationId = correlationId;
1066
- }
1067
- return [4 /*yield*/, error_reporter_1.ErrorReporter.report({
1068
- sourceApp: 'server-app',
1069
- message: subject,
1070
- environment: (config === null || config === void 0 ? void 0 : config.ROOT_URL) || process.env.NODE_ENV || 'unknown',
1071
- clientSlug: resolveio_server_app_1.ResolveIOServer.getClientName(),
1072
- clientName: config === null || config === void 0 ? void 0 : config.CLIENT_NAME,
1073
- severity: severity,
1074
- stack: stackOverride || (typeof (context === null || context === void 0 ? void 0 : context.stack) === 'string' ? context.stack : undefined),
1075
- context: context,
1076
- metadata: metadata,
1077
- correlationId: correlationId
1078
- })];
1079
- case 1:
1080
- _a.sent();
1081
- return [2 /*return*/];
1082
- }
1083
- });
1084
- });
1085
- };
1086
- ResolveIOMainServer.prototype.getMethodManager = function () {
1087
- return this._methodManager;
1088
- };
1089
- ResolveIOMainServer.prototype.getSubscriptionManager = function () {
1090
- return this._subscriptionManager;
1091
- };
1092
- ResolveIOMainServer.prototype.getMonitorManager = function () {
1093
- return this._monitorManager;
1094
- };
1095
- ResolveIOMainServer.prototype.getRebootFlag = function () {
1096
- return this._rebootFlag;
1097
- };
1098
- ResolveIOMainServer.prototype.getWebSocketManager = function () {
1099
- return this._websocketManager;
1100
- };
1101
- ResolveIOMainServer.prototype.createServer = function () {
1102
- var _this = this;
1103
- this._serverHTTP = (0, http_1.createServer)(this._app);
1104
- this._serverHTTP.keepAliveTimeout = 65000;
1105
- this._serverHTTP.headersTimeout = 66000;
1106
- this._serverWSS = new WebSocket.Server({
1107
- server: this._serverHTTP,
1108
- verifyClient: this.publicProgram ? null : function (info, cb) {
1109
- if (_this._rebootFlag) {
1110
- cb(false, 409, 'Unable To Process');
1111
- }
1112
- else {
1113
- if (_this.LOGGER === 'DEBUG') {
1114
- console.log('Verify Client', info, cb);
1115
- }
1116
- // If it's a worker, we might skip token checks or do a simple check:
1117
- if (info.req.url && info.req.url.includes('workerToken=')) {
1118
- var requestUrl = void 0;
1119
- var rootUrl = resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] || 'http://localhost';
1120
- try {
1121
- requestUrl = new url_1.URL(info.req.url, rootUrl);
1122
- }
1123
- catch (_a) {
1124
- cb(false, 400, 'Bad Request');
1125
- return;
1126
- }
1127
- var workerToken = requestUrl.searchParams.get('workerToken') || '';
1128
- var workerIndex = requestUrl.searchParams.get('workerIndex');
1129
- var workerInstance = requestUrl.searchParams.get('workerInstance');
1130
- var expectedWorkerToken = String(resolveio_server_app_1.ResolveIOServer.getServerConfig()['WORKER_TOKEN'] || '');
1131
- if (workerToken === expectedWorkerToken) {
1132
- if (workerIndex) {
1133
- info.req['workerIndex'] = workerIndex;
1134
- }
1135
- if (workerInstance) {
1136
- info.req['workerInstance'] = workerInstance;
1137
- }
1138
- cb(true);
1139
- }
1140
- else {
1141
- cb(false, 401, 'Unauthorized');
1142
- }
1143
- return;
1144
- }
1145
- var protocolsHeader = info.req.headers['sec-websocket-protocol'];
1146
- if (!protocolsHeader || typeof protocolsHeader !== 'string') {
1147
- cb(false, 401, 'Unauthorized');
1148
- return;
1149
- }
1150
- var infoData = protocolsHeader.split(/,/);
1151
- if (!(0, common_1.isAllowedOrigin)(info.origin, resolveio_server_app_1.ResolveIOServer.getServerConfig())) {
1152
- cb(false, 401, 'Unauthorized');
1153
- }
1154
- else {
1155
- var token = infoData[0];
1156
- if (!token) {
1157
- cb(false, 401, 'Unauthorized');
1158
- }
1159
- else {
1160
- jwt.verify(token, resolveio_server_app_1.ResolveIOServer.getServerConfig()['JWT_SECRET'], function (err, decoded) { return __awaiter(_this, void 0, void 0, function () {
1161
- var user, socketAdmission, _a;
1162
- return __generator(this, function (_b) {
1163
- switch (_b.label) {
1164
- case 0:
1165
- if (!err) return [3 /*break*/, 1];
1166
- cb(false, 401, 'Unauthorized');
1167
- return [3 /*break*/, 8];
1168
- case 1:
1169
- info.req['id_user'] = decoded['id_user'];
1170
- _b.label = 2;
1171
- case 2:
1172
- _b.trys.push([2, 7, , 8]);
1173
- return [4 /*yield*/, user_collection_1.Users.findById(decoded['id_user'])];
1174
- case 3:
1175
- user = _b.sent();
1176
- if (!user) return [3 /*break*/, 5];
1177
- return [4 /*yield*/, this.evaluateClientSocketAdmission(decoded['id_user'], info.req)];
1178
- case 4:
1179
- socketAdmission = _b.sent();
1180
- if (!socketAdmission.allowed) {
1181
- cb(false, socketAdmission.statusCode, socketAdmission.message || 'Socket connection rejected.');
1182
- return [2 /*return*/];
1183
- }
1184
- info.req['user'] = user.fullname;
1185
- info.req['user_readonly'] = user.readonly || false;
1186
- info.req['doc_user'] = user;
1187
- info.req['client_ip'] = socketAdmission.clientIp;
1188
- cb(true);
1189
- return [3 /*break*/, 6];
1190
- case 5:
1191
- cb(false);
1192
- _b.label = 6;
1193
- case 6: return [3 /*break*/, 8];
1194
- case 7:
1195
- _a = _b.sent();
1196
- cb(false);
1197
- return [3 /*break*/, 8];
1198
- case 8: return [2 /*return*/];
1199
- }
1200
- });
1201
- }); });
1202
- }
1203
- }
1204
- }
1205
- }
1206
- });
1207
- };
1208
- /**
1209
- * Listen for connections from clients or workers.
1210
- */
1211
- ResolveIOMainServer.prototype.listen = function () {
1212
- var _this = this;
1213
- var host = process.env.RESOLVEIO_BIND_HOST || '127.0.0.1';
1214
- this._serverHTTP.listen(this._portHTTP, host, function () {
1215
- console.log('Running HTTP/WS server on port %s', _this._portHTTP);
1216
- });
1217
- this._serverWSS.on('connection', function (ws, req) { return __awaiter(_this, void 0, void 0, function () {
1218
- var workerId_1, workerIndex, workerInstance, rootUrl, requestUrl, workerIndexForLog, workerInstanceForLog, interval_1, lastComm_1, missedPongs_1, heartbeatIntervalMs, maxMissedPongs_1, maxSilenceMs_1, socketAdmission, socketPolicyError_1;
1219
- var _this = this;
1220
- var _a;
1221
- return __generator(this, function (_b) {
1222
- switch (_b.label) {
1223
- case 0:
1224
- if (!(req.url && req.url.includes('workerToken='))) return [3 /*break*/, 1];
1225
- workerId_1 = (0, common_1.objectIdHexString)();
1226
- ws['id_worker'] = workerId_1;
1227
- workerIndex = null;
1228
- workerInstance = null;
1229
- ws['supportsBinary'] = true;
1230
- if (req.url) {
1231
- rootUrl = resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] || 'http://localhost';
1232
- try {
1233
- requestUrl = new url_1.URL(req.url, rootUrl);
1234
- workerIndex = requestUrl.searchParams.get('workerIndex');
1235
- workerInstance = requestUrl.searchParams.get('workerInstance');
1236
- }
1237
- catch (_c) {
1238
- workerIndex = null;
1239
- workerInstance = null;
1240
- }
1241
- }
1242
- if (!workerIndex && req['workerIndex']) {
1243
- workerIndex = req['workerIndex'];
1244
- }
1245
- if (!workerInstance && req['workerInstance']) {
1246
- workerInstance = req['workerInstance'];
1247
- }
1248
- if (workerIndex !== null && workerIndex !== undefined) {
1249
- ws['workerIndex'] = workerIndex;
1250
- }
1251
- if (workerInstance !== null && workerInstance !== undefined) {
1252
- ws['workerInstance'] = workerInstance;
1253
- }
1254
- workerIndexForLog = ws['workerIndex'] || 'UNKNOWN';
1255
- workerInstanceForLog = ws['workerInstance'] || 'UNKNOWN';
1256
- console.log(new Date(), 'Worker Connected', workerIndexForLog, workerInstanceForLog);
1257
- this._workerDispatcherManager.addWorker(ws);
1258
- interval_1 = null;
1259
- lastComm_1 = new Date();
1260
- missedPongs_1 = 0;
1261
- heartbeatIntervalMs = 30000;
1262
- maxMissedPongs_1 = 2;
1263
- maxSilenceMs_1 = heartbeatIntervalMs * (maxMissedPongs_1 + 1);
1264
- this._workerDispatcherManager.sendWorkerPayload(ws, 'ping');
1265
- interval_1 = setInterval(function () {
1266
- var now = Date.now();
1267
- var last = lastComm_1 ? lastComm_1.getTime() : 0;
1268
- var silenceMs = last ? now - last : maxSilenceMs_1 + 1;
1269
- if (silenceMs > maxSilenceMs_1 || missedPongs_1 > maxMissedPongs_1) {
1270
- _this._workerDispatcherManager.disconnectWorker(ws['id_worker']);
1271
- ws.close();
1272
- return;
1273
- }
1274
- missedPongs_1 += 1;
1275
- _this._workerDispatcherManager.sendWorkerPayload(ws, 'ping');
1276
- }, heartbeatIntervalMs);
1277
- ws.on('message', function (message) {
1278
- lastComm_1 = new Date();
1279
- if (typeof message === 'string') {
1280
- if (message === 'ping') {
1281
- _this._workerDispatcherManager.sendWorkerPayload(ws, 'pong');
1282
- }
1283
- else if (message === 'pong') {
1284
- missedPongs_1 = 0;
1285
- }
1286
- else {
1287
- _this._workerDispatcherManager.handleWorkerMessage(ws['id_worker'], message);
1288
- }
1289
- return;
1290
- }
1291
- var buffer;
1292
- if (Buffer.isBuffer(message)) {
1293
- buffer = message;
1294
- }
1295
- else if (Array.isArray(message)) {
1296
- var chunks = message;
1297
- buffer = Buffer.concat(chunks);
1298
- }
1299
- else if (message instanceof ArrayBuffer) {
1300
- buffer = Buffer.from(message);
1301
- }
1302
- else if (ArrayBuffer.isView(message)) {
1303
- var view = message;
1304
- buffer = Buffer.from(view.buffer, view.byteOffset, view.byteLength);
1305
- }
1306
- else {
1307
- buffer = Buffer.from(message);
1308
- }
1309
- if (buffer.length === 4) {
1310
- var heartbeat = buffer.toString('utf8');
1311
- if (heartbeat === 'ping') {
1312
- _this._workerDispatcherManager.sendWorkerPayload(ws, 'pong');
1313
- return;
1314
- }
1315
- else if (heartbeat === 'pong') {
1316
- missedPongs_1 = 0;
1317
- return;
1318
- }
1319
- }
1320
- _this._workerDispatcherManager.handleWorkerMessage(ws['id_worker'], buffer);
1321
- });
1322
- ws.on('close', function () {
1323
- _this._workerDispatcherManager.disconnectWorker(ws['id_worker']);
1324
- console.log(new Date(), 'Worker disconnected:', workerId_1);
1325
- if (interval_1) {
1326
- clearInterval(interval_1);
1327
- }
1328
- });
1329
- ws.on('error', function (error) {
1330
- _this._workerDispatcherManager.disconnectWorker(ws['id_worker']);
1331
- console.error('Error on WS Worker', error);
1332
- ws.close();
1333
- });
1334
- return [3 /*break*/, 6];
1335
- case 1:
1336
- // Normal client
1337
- ws['id_socket'] = (0, common_1.objectIdHexString)();
1338
- ws['supportsBinary'] = true;
1339
- ws['id_user'] = req['id_user'];
1340
- ws['user'] = req['user'];
1341
- ws['user_readonly'] = req['user_readonly'];
1342
- ws['doc_user'] = req['doc_user'];
1343
- ws['client_ip'] = this.resolveClientIp(req);
1344
- socketAdmission = void 0;
1345
- _b.label = 2;
1346
- case 2:
1347
- _b.trys.push([2, 4, , 5]);
1348
- return [4 /*yield*/, this.evaluateClientSocketAdmission(ws['id_user'], req)];
1349
- case 3:
1350
- socketAdmission = _b.sent();
1351
- return [3 /*break*/, 5];
1352
- case 4:
1353
- socketPolicyError_1 = _b.sent();
1354
- this.logConnectDebug('WS socket policy evaluation failed', {
1355
- id_socket: ws['id_socket'],
1356
- id_user: ws['id_user'],
1357
- user: ws['user'],
1358
- ip: ws['client_ip'],
1359
- error: (socketPolicyError_1 === null || socketPolicyError_1 === void 0 ? void 0 : socketPolicyError_1.message) || socketPolicyError_1
1360
- });
1361
- try {
1362
- ws.close(1011, 'Socket policy error');
1363
- }
1364
- catch (_d) { }
1365
- return [2 /*return*/];
1366
- case 5:
1367
- if (!socketAdmission.allowed) {
1368
- this.logConnectDebug('WS client rejected', {
1369
- id_socket: ws['id_socket'],
1370
- id_user: ws['id_user'],
1371
- user: ws['user'],
1372
- ip: ws['client_ip'],
1373
- reason: socketAdmission.message
1374
- });
1375
- try {
1376
- ws.close(1008, this.buildSocketLimitCloseReason());
1377
- }
1378
- catch (_e) { }
1379
- return [2 /*return*/];
1380
- }
1381
- ws['client_ip'] = socketAdmission.clientIp || ws['client_ip'];
1382
- this._websocketManager.addWebSocket(ws);
1383
- this.logConnectDebug('WS client connected', {
1384
- id_socket: ws['id_socket'],
1385
- id_user: ws['id_user'],
1386
- user: ws['user'],
1387
- url: req === null || req === void 0 ? void 0 : req.url,
1388
- ip: ws['client_ip'],
1389
- origin: (_a = req === null || req === void 0 ? void 0 : req.headers) === null || _a === void 0 ? void 0 : _a.origin
1390
- });
1391
- setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
1392
- return __generator(this, function (_a) {
1393
- switch (_a.label) {
1394
- case 0: return [4 /*yield*/, this.triggerClientHeartbeat(ws)];
1395
- case 1:
1396
- _a.sent();
1397
- return [2 /*return*/];
1398
- }
1399
- });
1400
- }); }, this._clientHeartbeatInitialDelayMs);
1401
- if (this.LOGGER === 'DEBUG') {
1402
- console.log('Connection from user: ' + req['user']);
1403
- }
1404
- ws['isAlive'] = true;
1405
- ws['retryCnt'] = 0;
1406
- ws.on('pong', function () {
1407
- ws['isAlive'] = true;
1408
- ws['pongTime'] = new Date();
1409
- if (ws['pingTime']) {
1410
- ws['latency'] = moment.duration(moment(ws['pongTime']).diff(ws['pingTime'])).asMilliseconds();
1411
- _this._subscriptionManager.loggedInLatency(ws);
1412
- }
1413
- });
1414
- ws.on('message', function (message) { return __awaiter(_this, void 0, void 0, function () {
1415
- var socketData, usedBinary, bufferPayload, decodeResult, decodeResult, decodeResult, view, decodeResult, e_6, correlationId, context;
1416
- return __generator(this, function (_a) {
1417
- switch (_a.label) {
1418
- case 0:
1419
- this._debugMsgRecv += 1;
1420
- socketData = [];
1421
- usedBinary = false;
1422
- _a.label = 1;
1423
- case 1:
1424
- _a.trys.push([1, 2, , 4]);
1425
- if (typeof message === 'string') {
1426
- if (message === 'ping' || message === 'pong') {
1427
- socketData = message;
1428
- }
1429
- else {
1430
- socketData = JSON.parse(message, common_1.dateReviver);
1431
- }
1432
- }
1433
- else if (Buffer.isBuffer(message)) {
1434
- bufferPayload = message;
1435
- decodeResult = this.decodeBufferPayload(bufferPayload);
1436
- socketData = decodeResult.data;
1437
- usedBinary = decodeResult.usedBinary;
1438
- }
1439
- else if (Array.isArray(message)) {
1440
- bufferPayload = Buffer.concat(message);
1441
- decodeResult = this.decodeBufferPayload(bufferPayload);
1442
- socketData = decodeResult.data;
1443
- usedBinary = decodeResult.usedBinary;
1444
- }
1445
- else if (message instanceof ArrayBuffer) {
1446
- bufferPayload = Buffer.from(message);
1447
- decodeResult = this.decodeBufferPayload(bufferPayload);
1448
- socketData = decodeResult.data;
1449
- usedBinary = decodeResult.usedBinary;
1450
- }
1451
- else if (ArrayBuffer.isView(message)) {
1452
- view = message;
1453
- bufferPayload = Buffer.from(view.buffer, view.byteOffset, view.byteLength);
1454
- decodeResult = this.decodeBufferPayload(bufferPayload);
1455
- socketData = decodeResult.data;
1456
- usedBinary = decodeResult.usedBinary;
1457
- }
1458
- else {
1459
- throw new Error('Unsupported WebSocket message type: ' + typeof message);
1460
- }
1461
- return [3 /*break*/, 4];
1462
- case 2:
1463
- e_6 = _a.sent();
1464
- console.log('Error - WS message parse', e_6);
1465
- correlationId = (0, common_1.objectIdHexString)();
1466
- context = {
1467
- rawBinary: bufferPayload ? bufferPayload.toString('base64') : undefined,
1468
- rawMessage: typeof message === 'string' ? message : undefined,
1469
- error: e_6 instanceof Error ? { name: e_6.name, message: e_6.message, stack: e_6.stack } : e_6
1470
- };
1471
- return [4 /*yield*/, this.reportServerError('SERVER - JSON Parse Error - ' + resolveio_server_app_1.ResolveIOServer.getServerConfig()['CLIENT_NAME'], correlationId, context, { context: 'websocket-message-parse' }, 'error', e_6 instanceof Error ? e_6.stack : undefined)];
1472
- case 3:
1473
- _a.sent();
1474
- return [2 /*return*/];
1475
- case 4:
1476
- if (usedBinary) {
1477
- ws['supportsBinary'] = true;
1478
- }
1479
- // call our existing processSocketMessage
1480
- return [4 /*yield*/, this.processSocketMessage(ws, socketData)];
1481
- case 5:
1482
- // call our existing processSocketMessage
1483
- _a.sent();
1484
- return [2 /*return*/];
1485
- }
1486
- });
1487
- }); })
1488
- .on('end', function () {
1489
- ws.close();
1490
- })
1491
- .on('error', function () {
1492
- ws.close();
1493
- })
1494
- .on('close', function () { return __awaiter(_this, void 0, void 0, function () {
1495
- return __generator(this, function (_a) {
1496
- switch (_a.label) {
1497
- case 0:
1498
- this.logConnectDebug('WS client closed', {
1499
- id_socket: ws['id_socket'],
1500
- id_user: ws['id_user'],
1501
- user: ws['user']
1502
- });
1503
- return [4 /*yield*/, this.unsubscribeWS(ws)];
1504
- case 1:
1505
- _a.sent();
1506
- return [2 /*return*/];
1507
- }
1508
- });
1509
- }); });
1510
- // Do not block message handler registration on DB write; this avoids losing
1511
- // very-early subscription messages sent immediately after websocket open.
1512
- setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
1513
- var error_5;
1514
- return __generator(this, function (_a) {
1515
- switch (_a.label) {
1516
- case 0:
1517
- _a.trys.push([0, 2, , 3]);
1518
- return [4 /*yield*/, this._subscriptionManager.createLoggedInUser(ws['id_socket'])];
1519
- case 1:
1520
- _a.sent();
1521
- return [3 /*break*/, 3];
1522
- case 2:
1523
- error_5 = _a.sent();
1524
- console.error(new Date(), 'Error creating logged-in user', ws['id_socket'], error_5);
1525
- this.logConnectDebug('Create logged-in user failed', {
1526
- id_socket: ws['id_socket'],
1527
- id_user: ws['id_user'],
1528
- user: ws['user'],
1529
- error: (error_5 === null || error_5 === void 0 ? void 0 : error_5.message) || error_5
1530
- });
1531
- return [3 /*break*/, 3];
1532
- case 3: return [2 /*return*/];
1533
- }
1534
- });
1535
- }); }, 0);
1536
- _b.label = 6;
1537
- case 6: return [2 /*return*/];
1538
- }
1539
- });
1540
- }); });
1541
- // Keep alive timer
1542
- setInterval(function () { return __awaiter(_this, void 0, void 0, function () {
1543
- var _a, _b, ws, e_7_1;
1544
- var e_7, _c;
1545
- return __generator(this, function (_d) {
1546
- switch (_d.label) {
1547
- case 0:
1548
- _d.trys.push([0, 10, 11, 12]);
1549
- _a = __values(this._serverWSS.clients), _b = _a.next();
1550
- _d.label = 1;
1551
- case 1:
1552
- if (!!_b.done) return [3 /*break*/, 9];
1553
- ws = _b.value;
1554
- if (!(ws['pingTime'] && Date.now() - ws['pingTime'].getTime() >= this._clientHeartbeatIntervalMs)) return [3 /*break*/, 8];
1555
- if (this.shouldDeferHeartbeat(ws)) {
1556
- ws['isAlive'] = true;
1557
- ws['retryCnt'] = 0;
1558
- ws['pingTime'] = new Date();
1559
- return [3 /*break*/, 8];
1560
- }
1561
- if (!(ws['isAlive'] === false)) return [3 /*break*/, 6];
1562
- ws['retryCnt']++;
1563
- if (!(ws['retryCnt'] >= 3)) return [3 /*break*/, 3];
1564
- return [4 /*yield*/, this.unsubscribeWS(ws)];
1565
- case 2:
1566
- _d.sent();
1567
- return [3 /*break*/, 5];
1568
- case 3: return [4 /*yield*/, this.triggerClientHeartbeat(ws)];
1569
- case 4:
1570
- _d.sent();
1571
- _d.label = 5;
1572
- case 5: return [3 /*break*/, 8];
1573
- case 6:
1574
- ws['retryCnt'] = 0;
1575
- ws['isAlive'] = false;
1576
- return [4 /*yield*/, this.triggerClientHeartbeat(ws)];
1577
- case 7:
1578
- _d.sent();
1579
- _d.label = 8;
1580
- case 8:
1581
- _b = _a.next();
1582
- return [3 /*break*/, 1];
1583
- case 9: return [3 /*break*/, 12];
1584
- case 10:
1585
- e_7_1 = _d.sent();
1586
- e_7 = { error: e_7_1 };
1587
- return [3 /*break*/, 12];
1588
- case 11:
1589
- try {
1590
- if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
1591
- }
1592
- finally { if (e_7) throw e_7.error; }
1593
- return [7 /*endfinally*/];
1594
- case 12: return [2 /*return*/];
1595
- }
1596
- });
1597
- }); }, this._clientHeartbeatIntervalMs);
1598
- };
1599
- ResolveIOMainServer.prototype.processSocketMessage = function (ws, socketData) {
1600
- return __awaiter(this, void 0, void 0, function () {
1601
- var socketData_1, socketData_1_1, message, e_8_1;
1602
- var e_8, _a;
1603
- return __generator(this, function (_b) {
1604
- switch (_b.label) {
1605
- case 0:
1606
- if (typeof socketData === 'string' && socketData === 'ping') {
1607
- if (ws && ws.readyState === WebSocket.OPEN) {
1608
- ws.send('pong');
1609
- }
1610
- return [2 /*return*/];
1611
- }
1612
- else if (typeof socketData === 'string' && socketData === 'pong') {
1613
- ws['isAlive'] = true;
1614
- ws['pongTime'] = new Date();
1615
- ws['latency'] = moment.duration(moment(ws['pongTime']).diff(ws['pingTime'])).asMilliseconds();
1616
- this._subscriptionManager.loggedInLatency(ws);
1617
- return [2 /*return*/];
1618
- }
1619
- // If the top level is not an array, let's skip
1620
- if (!Array.isArray(socketData[0])) {
1621
- console.log('Invalid message format (expected array of arrays)', socketData);
1622
- this.logConnectDebug('Invalid message format', {
1623
- id_socket: ws ? ws['id_socket'] : null,
1624
- user: ws ? ws['user'] : null,
1625
- preview: Array.isArray(socketData) ? socketData.slice(0, 3) : socketData
1626
- });
1627
- return [2 /*return*/];
1628
- }
1629
- _b.label = 1;
1630
- case 1:
1631
- _b.trys.push([1, 6, 7, 8]);
1632
- socketData_1 = __values(socketData), socketData_1_1 = socketData_1.next();
1633
- _b.label = 2;
1634
- case 2:
1635
- if (!!socketData_1_1.done) return [3 /*break*/, 5];
1636
- message = socketData_1_1.value;
1637
- return [4 /*yield*/, this.handleClientMessage(ws, message)];
1638
- case 3:
1639
- _b.sent();
1640
- _b.label = 4;
1641
- case 4:
1642
- socketData_1_1 = socketData_1.next();
1643
- return [3 /*break*/, 2];
1644
- case 5: return [3 /*break*/, 8];
1645
- case 6:
1646
- e_8_1 = _b.sent();
1647
- e_8 = { error: e_8_1 };
1648
- return [3 /*break*/, 8];
1649
- case 7:
1650
- try {
1651
- if (socketData_1_1 && !socketData_1_1.done && (_a = socketData_1.return)) _a.call(socketData_1);
1652
- }
1653
- finally { if (e_8) throw e_8.error; }
1654
- return [7 /*endfinally*/];
1655
- case 8: return [2 /*return*/];
1656
- }
1657
- });
1658
- });
1659
- };
1660
- ResolveIOMainServer.prototype.decodeBufferPayload = function (buffer) {
1661
- var textPayload = buffer.toString('utf8');
1662
- if (this.looksLikeTextPayload(textPayload)) {
1663
- try {
1664
- return { data: this.parseTextFallback(textPayload), usedBinary: false };
1665
- }
1666
- catch (_a) {
1667
- // fall through to attempt MessagePack decode
1668
- }
1669
- }
1670
- try {
1671
- return { data: (0, msgpackr_1.unpack)(buffer), usedBinary: true };
1672
- }
1673
- catch (binaryErr) {
1674
- try {
1675
- return { data: this.parseTextFallback(textPayload), usedBinary: false };
1676
- }
1677
- catch (_b) {
1678
- throw binaryErr;
1679
- }
1680
- }
1681
- };
1682
- ResolveIOMainServer.prototype.parseTextFallback = function (rawMessage) {
1683
- if (rawMessage === 'ping' || rawMessage === 'pong') {
1684
- return rawMessage;
1685
- }
1686
- try {
1687
- return JSON.parse(rawMessage, common_1.dateReviver);
1688
- }
1689
- catch (err) {
1690
- throw err;
1691
- }
1692
- };
1693
- ResolveIOMainServer.prototype.looksLikeTextPayload = function (text) {
1694
- if (!text) {
1695
- return false;
1696
- }
1697
- var trimmed = text.trim();
1698
- if (!trimmed) {
1699
- return false;
1700
- }
1701
- var first = trimmed[0];
1702
- return first === '[' || first === '{' || first === '"' || first === 'p' || first === 'P';
1703
- };
1704
- ResolveIOMainServer.prototype.resolveConnectDebug = function () {
1705
- var _a, _b, _c;
1706
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
1707
- var raw = (_c = (_b = (_a = process.env.WS_CONNECT_DEBUG) !== null && _a !== void 0 ? _a : process.env.CONNECT_DEBUG) !== null && _b !== void 0 ? _b : config === null || config === void 0 ? void 0 : config['WS_CONNECT_DEBUG']) !== null && _c !== void 0 ? _c : config === null || config === void 0 ? void 0 : config['CONNECT_DEBUG'];
1708
- return this.parseDebugFlag(raw);
1709
- };
1710
- ResolveIOMainServer.prototype.resolvePerfDebug = function () {
1711
- var _a, _b, _c;
1712
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
1713
- var raw = (_c = (_b = (_a = process.env.PERF_DEBUG) !== null && _a !== void 0 ? _a : process.env.CPU_DEBUG) !== null && _b !== void 0 ? _b : config === null || config === void 0 ? void 0 : config['PERF_DEBUG']) !== null && _c !== void 0 ? _c : config === null || config === void 0 ? void 0 : config['CPU_DEBUG'];
1714
- return this.parseDebugFlag(raw);
1715
- };
1716
- ResolveIOMainServer.prototype.resolveCpuProfileOnStart = function () {
1717
- var _a, _b, _c;
1718
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
1719
- var raw = (_c = (_b = (_a = process.env.CPU_PROFILE_ON_START) !== null && _a !== void 0 ? _a : process.env.CPU_PROFILE_START) !== null && _b !== void 0 ? _b : config === null || config === void 0 ? void 0 : config['CPU_PROFILE_ON_START']) !== null && _c !== void 0 ? _c : config === null || config === void 0 ? void 0 : config['CPU_PROFILE_START'];
1720
- return this.parseDebugFlag(raw);
1721
- };
1722
- ResolveIOMainServer.prototype.resolveCpuProfileAuto = function () {
1723
- var _a;
1724
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
1725
- var raw = (_a = process.env.CPU_PROFILE_AUTO) !== null && _a !== void 0 ? _a : config === null || config === void 0 ? void 0 : config['CPU_PROFILE_AUTO'];
1726
- return this.parseDebugFlag(raw);
1727
- };
1728
- ResolveIOMainServer.prototype.resolveCpuProfileDurationMs = function () {
1729
- var _a, _b, _c;
1730
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
1731
- var raw = (_c = (_b = (_a = process.env.CPU_PROFILE_DURATION_MS) !== null && _a !== void 0 ? _a : process.env.PERF_PROFILE_DURATION_MS) !== null && _b !== void 0 ? _b : config === null || config === void 0 ? void 0 : config['CPU_PROFILE_DURATION_MS']) !== null && _c !== void 0 ? _c : config === null || config === void 0 ? void 0 : config['PERF_PROFILE_DURATION_MS'];
1732
- return this.parsePositiveInt(raw, this._cpuProfileDurationMs);
1733
- };
1734
- ResolveIOMainServer.prototype.resolveCpuProfileThresholdPct = function () {
1735
- var _a, _b, _c;
1736
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
1737
- var raw = (_c = (_b = (_a = process.env.CPU_PROFILE_THRESHOLD_PCT) !== null && _a !== void 0 ? _a : process.env.PERF_PROFILE_THRESHOLD_PCT) !== null && _b !== void 0 ? _b : config === null || config === void 0 ? void 0 : config['CPU_PROFILE_THRESHOLD_PCT']) !== null && _c !== void 0 ? _c : config === null || config === void 0 ? void 0 : config['PERF_PROFILE_THRESHOLD_PCT'];
1738
- return this.parsePositiveFloat(raw, this._cpuProfileThresholdPct);
1739
- };
1740
- ResolveIOMainServer.prototype.resolveCpuProfileTriggerCount = function () {
1741
- var _a;
1742
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
1743
- var raw = (_a = process.env.CPU_PROFILE_TRIGGER_COUNT) !== null && _a !== void 0 ? _a : config === null || config === void 0 ? void 0 : config['CPU_PROFILE_TRIGGER_COUNT'];
1744
- return this.parsePositiveInt(raw, this._cpuProfileTriggerCount);
1745
- };
1746
- ResolveIOMainServer.prototype.resolveCpuProfileDir = function () {
1747
- var _a;
1748
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
1749
- var raw = (_a = process.env.CPU_PROFILE_DIR) !== null && _a !== void 0 ? _a : config === null || config === void 0 ? void 0 : config['CPU_PROFILE_DIR'];
1750
- return typeof raw === 'string' && raw.trim() ? raw.trim() : null;
1751
- };
1752
- ResolveIOMainServer.prototype.resolveTimerDebug = function () {
1753
- var _a;
1754
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
1755
- var raw = (_a = process.env.TIMER_DEBUG) !== null && _a !== void 0 ? _a : config === null || config === void 0 ? void 0 : config['TIMER_DEBUG'];
1756
- return this.parseDebugFlag(raw);
1757
- };
1758
- ResolveIOMainServer.prototype.resolveTimerDebugThresholdMs = function () {
1759
- var _a;
1760
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
1761
- var raw = (_a = process.env.TIMER_DEBUG_THRESHOLD_MS) !== null && _a !== void 0 ? _a : config === null || config === void 0 ? void 0 : config['TIMER_DEBUG_THRESHOLD_MS'];
1762
- return this.parsePositiveFloat(raw, this._timerDebugThresholdMs);
1763
- };
1764
- ResolveIOMainServer.prototype.resolveTimerDebugMinDelayMs = function () {
1765
- var _a;
1766
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
1767
- var raw = (_a = process.env.TIMER_DEBUG_MIN_DELAY_MS) !== null && _a !== void 0 ? _a : config === null || config === void 0 ? void 0 : config['TIMER_DEBUG_MIN_DELAY_MS'];
1768
- return this.parsePositiveFloat(raw, this._timerDebugMinDelayMs);
1769
- };
1770
- ResolveIOMainServer.prototype.resolveTimerDebugSampleRate = function () {
1771
- var _a;
1772
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
1773
- var raw = (_a = process.env.TIMER_DEBUG_SAMPLE_RATE) !== null && _a !== void 0 ? _a : config === null || config === void 0 ? void 0 : config['TIMER_DEBUG_SAMPLE_RATE'];
1774
- var parsed = parseFloat(raw !== null && raw !== void 0 ? raw : '');
1775
- if (Number.isFinite(parsed) && parsed > 0 && parsed <= 1) {
1776
- return parsed;
1777
- }
1778
- return this._timerDebugSampleRate;
1779
- };
1780
- ResolveIOMainServer.prototype.resolveTimerDebugLogLimit = function () {
1781
- var _a;
1782
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
1783
- var raw = (_a = process.env.TIMER_DEBUG_LOG_LIMIT) !== null && _a !== void 0 ? _a : config === null || config === void 0 ? void 0 : config['TIMER_DEBUG_LOG_LIMIT'];
1784
- return this.parsePositiveInt(raw, this._timerDebugLogLimit);
1785
- };
1786
- ResolveIOMainServer.prototype.normalizeWorkerSelectorValue = function (value) {
1787
- if (value === null || value === undefined) {
1788
- return null;
1789
- }
1790
- var normalized = String(value).trim();
1791
- return normalized.length ? normalized : null;
1792
- };
1793
- ResolveIOMainServer.prototype.parseWorkerSelector = function (value) {
1794
- if (value === null || value === undefined) {
1795
- return null;
1796
- }
1797
- var raw = Array.isArray(value) ? value.join(',') : String(value);
1798
- var parts = raw.split(',').map(function (part) { return part.trim(); }).filter(Boolean);
1799
- if (!parts.length) {
1800
- return null;
1801
- }
1802
- return new Set(parts);
1803
- };
1804
- ResolveIOMainServer.prototype.workerMatchesSelector = function (workerIndex, workerInstance, indexes, instances) {
1805
- if (!indexes && !instances) {
1806
- return false;
1807
- }
1808
- var indexMatch = indexes ? (workerIndex ? indexes.has(workerIndex) : false) : true;
1809
- var instanceMatch = instances ? (workerInstance ? instances.has(workerInstance) : false) : true;
1810
- return indexMatch && instanceMatch;
1811
- };
1812
- ResolveIOMainServer.prototype.resolveWorkerRole = function () {
1813
- var workerIndex = this.normalizeWorkerSelectorValue(process.env.WORKER_INDEX);
1814
- var workerInstance = this.normalizeWorkerSelectorValue(process.env.NODE_APP_INSTANCE);
1815
- var publicationIndexes = this.parseWorkerSelector(process.env.PUBLICATION_WORKER_INDEX
1816
- || process.env.SUBSCRIPTION_WORKER_INDEX
1817
- || process.env.WORKER_PUBLICATION_INDEX);
1818
- var publicationInstances = this.parseWorkerSelector(process.env.PUBLICATION_WORKER_INSTANCE
1819
- || process.env.SUBSCRIPTION_WORKER_INSTANCE
1820
- || process.env.WORKER_PUBLICATION_INSTANCE);
1821
- var codexIndexes = this.parseWorkerSelector(process.env.AI_ASSISTANT_CODEX_WORKER_INDEX
1822
- || process.env.CODEX_WORKER_INDEX
1823
- || process.env.WORKER_CODEX_INDEX);
1824
- var codexInstances = this.parseWorkerSelector(process.env.AI_ASSISTANT_CODEX_WORKER_INSTANCE
1825
- || process.env.CODEX_WORKER_INSTANCE
1826
- || process.env.WORKER_CODEX_INSTANCE);
1827
- if (this.workerMatchesSelector(workerIndex, workerInstance, publicationIndexes, publicationInstances)) {
1828
- return 'Subscription';
1829
- }
1830
- if (this.workerMatchesSelector(workerIndex, workerInstance, codexIndexes, codexInstances)) {
1831
- return 'Codex';
1832
- }
1833
- return 'Other';
1834
- };
1835
- ResolveIOMainServer.prototype.parsePositiveInt = function (value, fallback) {
1836
- var parsed = parseInt(value !== null && value !== void 0 ? value : '', 10);
1837
- if (Number.isNaN(parsed) || parsed <= 0) {
1838
- return fallback;
1839
- }
1840
- return parsed;
1841
- };
1842
- ResolveIOMainServer.prototype.parsePositiveFloat = function (value, fallback) {
1843
- var parsed = parseFloat(value !== null && value !== void 0 ? value : '');
1844
- if (Number.isNaN(parsed) || parsed <= 0) {
1845
- return fallback;
1846
- }
1847
- return parsed;
1848
- };
1849
- ResolveIOMainServer.prototype.startPerfDebug = function () {
1850
- var _this = this;
1851
- var _a;
1852
- if (!this._perfDebug || this._perfDebugTimer) {
1853
- return;
1854
- }
1855
- this._perfDebugIntervalMs = this.parsePositiveInt((_a = process.env.PERF_DEBUG_INTERVAL_MS) !== null && _a !== void 0 ? _a : process.env.CPU_DEBUG_INTERVAL_MS, this._perfDebugIntervalMs);
1856
- this._perfDebugLastCpu = process.cpuUsage();
1857
- this._perfDebugLastTs = Date.now();
1858
- this._eventLoopHistogram = (0, perf_hooks_1.monitorEventLoopDelay)({ resolution: 20 });
1859
- this._eventLoopHistogram.enable();
1860
- this._perfDebugTimer = setInterval(function () {
1861
- var now = Date.now();
1862
- var elapsedMs = now - _this._perfDebugLastTs;
1863
- var cpuDiff = _this._perfDebugLastCpu ? process.cpuUsage(_this._perfDebugLastCpu) : process.cpuUsage();
1864
- var cpuMs = (cpuDiff.user + cpuDiff.system) / 1000;
1865
- var cpuPct = elapsedMs > 0 ? (cpuMs / elapsedMs) * 100 : 0;
1866
- var mem = process.memoryUsage();
1867
- var heapUsedMb = (0, common_1.round)((mem.heapUsed / 1024 / 1024) * 10) / 10;
1868
- var rssMb = (0, common_1.round)((mem.rss / 1024 / 1024) * 10) / 10;
1869
- var handles = typeof process._getActiveHandles === 'function'
1870
- ? process._getActiveHandles().length
1871
- : null;
1872
- var requests = typeof process._getActiveRequests === 'function'
1873
- ? process._getActiveRequests().length
1874
- : null;
1875
- var histogram = _this._eventLoopHistogram;
1876
- var eventLoop = histogram ? {
1877
- meanMs: (0, common_1.round)((histogram.mean / 1e6) * 100) / 100,
1878
- p50Ms: (0, common_1.round)((histogram.percentile(50) / 1e6) * 100) / 100,
1879
- p95Ms: (0, common_1.round)((histogram.percentile(95) / 1e6) * 100) / 100,
1880
- p99Ms: (0, common_1.round)((histogram.percentile(99) / 1e6) * 100) / 100,
1881
- maxMs: (0, common_1.round)((histogram.max / 1e6) * 100) / 100
1882
- } : null;
1883
- histogram === null || histogram === void 0 ? void 0 : histogram.reset();
1884
- console.log(new Date(), '[Perf Debug]', JSON.stringify({
1885
- cpuPct: (0, common_1.round)(cpuPct * 10) / 10,
1886
- cpuMs: (0, common_1.round)(cpuMs),
1887
- elapsedMs: elapsedMs,
1888
- eventLoop: eventLoop,
1889
- heapUsedMb: heapUsedMb,
1890
- rssMb: rssMb,
1891
- activeHandles: handles,
1892
- activeRequests: requests,
1893
- msgRecv: _this._debugMsgRecv,
1894
- msgQueue: _this._debugMsgQueue
1895
- }));
1896
- if (_this._cpuProfileAuto) {
1897
- if (cpuPct >= _this._cpuProfileThresholdPct) {
1898
- _this._cpuProfileHighCount += 1;
1899
- }
1900
- else {
1901
- _this._cpuProfileHighCount = 0;
1902
- }
1903
- if (_this._cpuProfileHighCount >= _this._cpuProfileTriggerCount) {
1904
- _this._cpuProfileHighCount = 0;
1905
- _this.startCpuProfile('auto-high-cpu');
1906
- }
1907
- }
1908
- _this._perfDebugLastCpu = process.cpuUsage();
1909
- _this._perfDebugLastTs = now;
1910
- }, this._perfDebugIntervalMs);
1911
- };
1912
- ResolveIOMainServer.prototype.installTimerDebug = function () {
1913
- var _this = this;
1914
- if (!this._timerDebug) {
1915
- return;
1916
- }
1917
- var g = global;
1918
- if (g.__resolveioTimerDebugInstalled) {
1919
- return;
1920
- }
1921
- g.__resolveioTimerDebugInstalled = true;
1922
- var originalSetTimeout = global.setTimeout;
1923
- var originalSetInterval = global.setInterval;
1924
- var thresholdMs = this._timerDebugThresholdMs;
1925
- var minDelayMs = this._timerDebugMinDelayMs;
1926
- var sampleRate = this._timerDebugSampleRate;
1927
- var shouldSample = function () { return sampleRate >= 1 || Math.random() <= sampleRate; };
1928
- var logTimer = function (type, durationMs, delayMs, createdStack) {
1929
- if (_this._timerDebugLogLimit > 0 && _this._timerDebugLogCount >= _this._timerDebugLogLimit) {
1930
- return;
1931
- }
1932
- _this._timerDebugLogCount += 1;
1933
- var stackLines = createdStack
1934
- ? createdStack.split('\n').slice(1, 6).map(function (line) { return line.trim(); }).join(' | ')
1935
- : undefined;
1936
- console.log(new Date(), '[Timer Debug]', JSON.stringify({
1937
- type: type,
1938
- durationMs: (0, common_1.round)(durationMs * 10) / 10,
1939
- delayMs: delayMs !== null && delayMs !== void 0 ? delayMs : null,
1940
- createdAt: stackLines
1941
- }));
1942
- };
1943
- var wrapTimer = function (handler, type, delayMs) {
1944
- if (typeof handler !== 'function') {
1945
- return handler;
1946
- }
1947
- var createdStack = new Error().stack;
1948
- var shouldFlagShortDelay = typeof delayMs === 'number' && delayMs <= minDelayMs;
1949
- return function wrappedTimer() {
1950
- var args = [];
1951
- for (var _i = 0; _i < arguments.length; _i++) {
1952
- args[_i] = arguments[_i];
1953
- }
1954
- var start = process.hrtime.bigint();
1955
- try {
1956
- return handler.apply(this, args);
1957
- }
1958
- finally {
1959
- var elapsedMs = Number(process.hrtime.bigint() - start) / 1e6;
1960
- if (shouldSample() && (elapsedMs >= thresholdMs || shouldFlagShortDelay)) {
1961
- logTimer(type, elapsedMs, delayMs, createdStack);
1962
- }
1963
- }
1964
- };
1965
- };
1966
- global.setTimeout = (function (handler, timeout) {
1967
- var args = [];
1968
- for (var _i = 2; _i < arguments.length; _i++) {
1969
- args[_i - 2] = arguments[_i];
1970
- }
1971
- return originalSetTimeout.apply(void 0, __spreadArray([wrapTimer(handler, 'setTimeout', timeout), timeout], __read(args), false));
1972
- });
1973
- global.setInterval = (function (handler, timeout) {
1974
- var args = [];
1975
- for (var _i = 2; _i < arguments.length; _i++) {
1976
- args[_i - 2] = arguments[_i];
1977
- }
1978
- return originalSetInterval.apply(void 0, __spreadArray([wrapTimer(handler, 'setInterval', timeout), timeout], __read(args), false));
1979
- });
1980
- };
1981
- ResolveIOMainServer.prototype.startCpuProfile = function (trigger) {
1982
- var _this = this;
1983
- if (this._cpuProfileSession) {
1984
- return;
1985
- }
1986
- try {
1987
- var session_1 = new inspector.Session();
1988
- session_1.connect();
1989
- session_1.post('Profiler.enable', function () {
1990
- session_1.post('Profiler.start', function () {
1991
- _this._cpuProfileSession = session_1;
1992
- console.log(new Date(), '[Perf Debug]', 'CPU profile started', trigger);
1993
- setTimeout(function () {
1994
- _this.stopCpuProfile(trigger);
1995
- }, _this._cpuProfileDurationMs);
1996
- });
1997
- });
1998
- }
1999
- catch (error) {
2000
- console.error(new Date(), '[Perf Debug]', 'CPU profile start failed', error);
2001
- }
2002
- };
2003
- ResolveIOMainServer.prototype.stopCpuProfile = function (trigger) {
2004
- var _this = this;
2005
- var session = this._cpuProfileSession;
2006
- if (!session) {
2007
- return;
2008
- }
2009
- session.post('Profiler.stop', function (err, res) {
2010
- var _a;
2011
- if (err) {
2012
- console.error(new Date(), '[Perf Debug]', 'CPU profile stop failed', err);
2013
- }
2014
- else {
2015
- try {
2016
- var dir = _this.resolveWritableProfileDir();
2017
- var filename = "resolveio-cpuprofile-".concat(process.pid, "-").concat(Date.now(), ".cpuprofile");
2018
- var filePath = path.join(dir, filename);
2019
- fs.writeFileSync(filePath, JSON.stringify((_a = res === null || res === void 0 ? void 0 : res.profile) !== null && _a !== void 0 ? _a : {}));
2020
- console.log(new Date(), '[Perf Debug]', 'CPU profile saved', filePath, trigger);
2021
- }
2022
- catch (writeErr) {
2023
- console.error(new Date(), '[Perf Debug]', 'CPU profile write failed', writeErr);
2024
- }
2025
- }
2026
- try {
2027
- session.disconnect();
2028
- }
2029
- catch (_b) { }
2030
- _this._cpuProfileSession = null;
2031
- });
2032
- };
2033
- ResolveIOMainServer.prototype.resolveWritableProfileDir = function () {
2034
- var preferred = this._cpuProfileDir;
2035
- if (preferred) {
2036
- try {
2037
- fs.mkdirSync(preferred, { recursive: true });
2038
- return preferred;
2039
- }
2040
- catch (_a) { }
2041
- }
2042
- return os.tmpdir();
2043
- };
2044
- ResolveIOMainServer.prototype.parseDebugFlag = function (value) {
2045
- if (value === true) {
2046
- return true;
2047
- }
2048
- if (value === false || value === null || value === undefined) {
2049
- return false;
2050
- }
2051
- if (typeof value === 'number') {
2052
- return value === 1;
2053
- }
2054
- if (typeof value === 'string') {
2055
- var normalized = value.trim().toLowerCase();
2056
- return ['1', 'true', 'yes', 'y', 'on'].includes(normalized);
2057
- }
2058
- return false;
2059
- };
2060
- ResolveIOMainServer.prototype.parseOptionalBoolean = function (value) {
2061
- if (value === null || value === undefined) {
2062
- return null;
2063
- }
2064
- var normalized = "".concat(value).trim();
2065
- if (!normalized) {
2066
- return null;
2067
- }
2068
- return this.parseDebugFlag(normalized);
2069
- };
2070
- ResolveIOMainServer.prototype.parseNonNegativeInt = function (value, fallback) {
2071
- var parsed = parseInt("".concat(value !== null && value !== void 0 ? value : ''), 10);
2072
- if (Number.isNaN(parsed) || parsed < 0) {
2073
- return fallback;
2074
- }
2075
- return parsed;
2076
- };
2077
- ResolveIOMainServer.prototype.resolveSocketTier = function () {
2078
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig() || {};
2079
- return "".concat(process.env.AI_CODER_PLAN_TIER || config['AI_CODER_PLAN_TIER'] || '').trim().toLowerCase();
2080
- };
2081
- ResolveIOMainServer.prototype.resolveSocketTierKeySuffix = function (planTier) {
2082
- return "".concat(planTier || '')
2083
- .trim()
2084
- .toUpperCase()
2085
- .replace(/[^A-Z0-9]+/g, '_');
2086
- };
2087
- ResolveIOMainServer.prototype.resolveMaxClientSockets = function (planTier) {
2088
- var _a, _b, _c;
2089
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig() || {};
2090
- var explicitLimit = this.parseNonNegativeInt((_a = config['AI_CODER_MAX_SOCKETS']) !== null && _a !== void 0 ? _a : process.env.AI_CODER_MAX_SOCKETS, -1);
2091
- if (explicitLimit >= 0) {
2092
- return explicitLimit;
2093
- }
2094
- var normalizedTier = "".concat(planTier || '').trim().toLowerCase();
2095
- var tierKeySuffix = this.resolveSocketTierKeySuffix(normalizedTier);
2096
- if (tierKeySuffix) {
2097
- var tierLimitKey = "AI_CODER_MAX_SOCKETS_".concat(tierKeySuffix);
2098
- var tierLimit = this.parseNonNegativeInt((_b = config[tierLimitKey]) !== null && _b !== void 0 ? _b : process.env[tierLimitKey], -1);
2099
- if (tierLimit >= 0) {
2100
- return tierLimit;
2101
- }
2102
- }
2103
- var maxUsers = this.parseNonNegativeInt((_c = config['AI_CODER_MAX_USERS']) !== null && _c !== void 0 ? _c : process.env.AI_CODER_MAX_USERS, -1);
2104
- if (maxUsers > 0) {
2105
- return maxUsers === 1 ? 1 : maxUsers * 2;
2106
- }
2107
- if (normalizedTier === 'tool') {
2108
- return 1;
2109
- }
2110
- if (normalizedTier === 'small') {
2111
- return 10;
2112
- }
2113
- if (normalizedTier === 'medium') {
2114
- return 50;
2115
- }
2116
- if (normalizedTier === 'large') {
2117
- return 200;
2118
- }
2119
- if (normalizedTier === 'enterprise') {
2120
- return 0;
2121
- }
2122
- return 0;
2123
- };
2124
- ResolveIOMainServer.prototype.resolveSingleIpPerUserPolicy = function (planTier) {
2125
- var _a, _b;
2126
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig() || {};
2127
- var normalizedTier = "".concat(planTier || '').trim().toLowerCase();
2128
- var tierKeySuffix = this.resolveSocketTierKeySuffix(normalizedTier);
2129
- if (tierKeySuffix) {
2130
- var tierPolicyKey = "AI_CODER_SINGLE_IP_PER_USER_".concat(tierKeySuffix);
2131
- var tierPolicy = this.parseOptionalBoolean((_a = config[tierPolicyKey]) !== null && _a !== void 0 ? _a : process.env[tierPolicyKey]);
2132
- if (tierPolicy !== null) {
2133
- return tierPolicy;
2134
- }
2135
- }
2136
- var policy = this.parseOptionalBoolean((_b = config['AI_CODER_SINGLE_IP_PER_USER']) !== null && _b !== void 0 ? _b : process.env.AI_CODER_SINGLE_IP_PER_USER);
2137
- if (policy !== null) {
2138
- return policy;
2139
- }
2140
- return !!normalizedTier;
2141
- };
2142
- ResolveIOMainServer.prototype.resolveSocketPolicyUpgradeUrl = function () {
2143
- var config = resolveio_server_app_1.ResolveIOServer.getServerConfig() || {};
2144
- var direct = "".concat(config['AI_CODER_SOCKET_UPGRADE_URL'] || process.env.AI_CODER_SOCKET_UPGRADE_URL || '').trim();
2145
- if (direct) {
2146
- return direct.replace(/\/$/, '');
2147
- }
2148
- var dashboard = "".concat(config['AI_CODER_CLIENT_DASHBOARD_URL'] || process.env.AI_CODER_CLIENT_DASHBOARD_URL || '').trim();
2149
- if (dashboard) {
2150
- return dashboard.replace(/\/$/, '');
2151
- }
2152
- var root = "".concat(config['AI_CODER_ROOT_URL'] || process.env.AI_CODER_ROOT_URL || config['ROOT_URL'] || process.env.ROOT_URL || '').trim();
2153
- if (!root) {
2154
- return '';
2155
- }
2156
- return "".concat(root.replace(/\/$/, ''), "/dashboard/client");
2157
- };
2158
- ResolveIOMainServer.prototype.resolveSocketUpgradeUrlWithAppId = function () {
2159
- var base = "".concat(this._socketPolicyUpgradeUrl || '').trim();
2160
- if (!base) {
2161
- return '';
2162
- }
2163
- var appId = "".concat(process.env.AI_CODER_APP_ID || '').trim();
2164
- if (!appId) {
2165
- return base;
2166
- }
2167
- var separator = base.includes('?') ? '&' : '?';
2168
- return "".concat(base).concat(separator, "appId=").concat(encodeURIComponent(appId));
2169
- };
2170
- ResolveIOMainServer.prototype.normalizeIpAddress = function (value) {
2171
- var ip = "".concat(value || '').trim();
2172
- if (!ip) {
2173
- return '';
2174
- }
2175
- if (ip.includes(',')) {
2176
- ip = ip.split(',')[0].trim();
2177
- }
2178
- if (ip.startsWith('::ffff:')) {
2179
- ip = ip.slice(7);
2180
- }
2181
- if (/^\d+\.\d+\.\d+\.\d+:\d+$/.test(ip)) {
2182
- ip = ip.split(':')[0].trim();
2183
- }
2184
- if (ip === '::1') {
2185
- return '127.0.0.1';
2186
- }
2187
- return ip.toLowerCase();
2188
- };
2189
- ResolveIOMainServer.prototype.resolveClientIp = function (req) {
2190
- var _a, _b, _c, _d;
2191
- var forwardedFor = this.normalizeHeaderValue((_a = req === null || req === void 0 ? void 0 : req.headers) === null || _a === void 0 ? void 0 : _a['x-forwarded-for']);
2192
- if (forwardedFor) {
2193
- return this.normalizeIpAddress(forwardedFor);
2194
- }
2195
- var realIp = this.normalizeHeaderValue((_b = req === null || req === void 0 ? void 0 : req.headers) === null || _b === void 0 ? void 0 : _b['x-real-ip']);
2196
- if (realIp) {
2197
- return this.normalizeIpAddress(realIp);
2198
- }
2199
- var socketIp = ((_c = req === null || req === void 0 ? void 0 : req.socket) === null || _c === void 0 ? void 0 : _c.remoteAddress) || ((_d = req === null || req === void 0 ? void 0 : req.connection) === null || _d === void 0 ? void 0 : _d.remoteAddress) || (req === null || req === void 0 ? void 0 : req.ip) || '';
2200
- return this.normalizeIpAddress(socketIp);
2201
- };
2202
- ResolveIOMainServer.prototype.buildSocketLimitMessage = function (activeSockets) {
2203
- var tierLabel = this._socketTier ? this._socketTier[0].toUpperCase() + this._socketTier.slice(1) : 'Current';
2204
- var upgradeUrl = this.resolveSocketUpgradeUrlWithAppId();
2205
- var base = "Socket connection limit reached (".concat(activeSockets, "/").concat(this._maxClientSockets, ") for the ").concat(tierLabel, " tier.");
2206
- if (!upgradeUrl) {
2207
- return "".concat(base, " Upgrade to increase capacity.");
2208
- }
2209
- return "".concat(base, " Upgrade at ").concat(upgradeUrl, ".");
2210
- };
2211
- ResolveIOMainServer.prototype.buildSocketLimitCloseReason = function () {
2212
- return "Socket limit reached (".concat(this._maxClientSockets, ")");
2213
- };
2214
- ResolveIOMainServer.prototype.disconnectUserSocketsFromDifferentIps = function (idUser, incomingIp) {
2215
- return __awaiter(this, void 0, void 0, function () {
2216
- var normalizedUser, normalizedIncomingIp, userSockets, disconnected, userSockets_1, userSockets_1_1, existingSocket, existingIp, e_9_1;
2217
- var e_9, _a;
2218
- return __generator(this, function (_b) {
2219
- switch (_b.label) {
2220
- case 0:
2221
- if (!this._websocketManager) {
2222
- return [2 /*return*/, 0];
2223
- }
2224
- normalizedUser = "".concat(idUser || '').trim();
2225
- normalizedIncomingIp = this.normalizeIpAddress(incomingIp);
2226
- if (!normalizedUser || !normalizedIncomingIp) {
2227
- return [2 /*return*/, 0];
2228
- }
2229
- userSockets = this._websocketManager.getUserWebSockets(normalizedUser);
2230
- disconnected = 0;
2231
- _b.label = 1;
2232
- case 1:
2233
- _b.trys.push([1, 6, 7, 8]);
2234
- userSockets_1 = __values(userSockets), userSockets_1_1 = userSockets_1.next();
2235
- _b.label = 2;
2236
- case 2:
2237
- if (!!userSockets_1_1.done) return [3 /*break*/, 5];
2238
- existingSocket = userSockets_1_1.value;
2239
- existingIp = this.normalizeIpAddress(existingSocket === null || existingSocket === void 0 ? void 0 : existingSocket['client_ip']);
2240
- if (!existingIp || existingIp === normalizedIncomingIp) {
2241
- return [3 /*break*/, 4];
2242
- }
2243
- this.logConnectDebug('WS single-ip enforcement disconnect', {
2244
- id_socket: existingSocket === null || existingSocket === void 0 ? void 0 : existingSocket['id_socket'],
2245
- id_user: normalizedUser,
2246
- existingIp: existingIp,
2247
- incomingIp: normalizedIncomingIp
2248
- });
2249
- return [4 /*yield*/, this.unsubscribeWS(existingSocket)];
2250
- case 3:
2251
- _b.sent();
2252
- if (existingSocket.readyState === WebSocket.OPEN || existingSocket.readyState === WebSocket.CONNECTING) {
2253
- try {
2254
- existingSocket.close(1008, 'Signed in from another IP');
2255
- }
2256
- catch (_c) { }
2257
- }
2258
- disconnected += 1;
2259
- _b.label = 4;
2260
- case 4:
2261
- userSockets_1_1 = userSockets_1.next();
2262
- return [3 /*break*/, 2];
2263
- case 5: return [3 /*break*/, 8];
2264
- case 6:
2265
- e_9_1 = _b.sent();
2266
- e_9 = { error: e_9_1 };
2267
- return [3 /*break*/, 8];
2268
- case 7:
2269
- try {
2270
- if (userSockets_1_1 && !userSockets_1_1.done && (_a = userSockets_1.return)) _a.call(userSockets_1);
2271
- }
2272
- finally { if (e_9) throw e_9.error; }
2273
- return [7 /*endfinally*/];
2274
- case 8: return [2 /*return*/, disconnected];
2275
- }
2276
- });
2277
- });
2278
- };
2279
- ResolveIOMainServer.prototype.evaluateClientSocketAdmission = function (idUser, req) {
2280
- return __awaiter(this, void 0, void 0, function () {
2281
- var normalizedUser, clientIp, activeSockets, message;
2282
- return __generator(this, function (_a) {
2283
- switch (_a.label) {
2284
- case 0:
2285
- normalizedUser = "".concat(idUser || '').trim();
2286
- clientIp = this.resolveClientIp(req);
2287
- if (!this._singleIpPerUser) return [3 /*break*/, 2];
2288
- return [4 /*yield*/, this.disconnectUserSocketsFromDifferentIps(normalizedUser, clientIp)];
2289
- case 1:
2290
- _a.sent();
2291
- _a.label = 2;
2292
- case 2:
2293
- if (this._maxClientSockets > 0 && this._websocketManager) {
2294
- activeSockets = this._websocketManager.getActiveWebSocketCount();
2295
- if (activeSockets >= this._maxClientSockets) {
2296
- message = this.buildSocketLimitMessage(activeSockets);
2297
- this.logConnectDebug('WS socket limit blocked', {
2298
- id_user: normalizedUser,
2299
- clientIp: clientIp,
2300
- activeSockets: activeSockets,
2301
- maxClientSockets: this._maxClientSockets
2302
- });
2303
- return [2 /*return*/, {
2304
- allowed: false,
2305
- statusCode: 429,
2306
- message: message,
2307
- clientIp: clientIp
2308
- }];
2309
- }
2310
- }
2311
- return [2 /*return*/, {
2312
- allowed: true,
2313
- statusCode: 200,
2314
- message: '',
2315
- clientIp: clientIp
2316
- }];
2317
- }
2318
- });
2319
- });
2320
- };
2321
- ResolveIOMainServer.prototype.logConnectDebug = function (message, details) {
2322
- if (!this._wsConnectDebug) {
2323
- return;
2324
- }
2325
- if (details) {
2326
- console.log(new Date(), '[Connect Debug]', message, JSON.stringify(details));
2327
- }
2328
- else {
2329
- console.log(new Date(), '[Connect Debug]', message);
2330
- }
2331
- };
2332
- ResolveIOMainServer.prototype.triggerClientHeartbeat = function (ws) {
2333
- return __awaiter(this, void 0, void 0, function () {
2334
- var err_1;
2335
- var _this = this;
2336
- var _a;
2337
- return __generator(this, function (_b) {
2338
- switch (_b.label) {
2339
- case 0:
2340
- if (!ws || ws.readyState !== WebSocket.OPEN) {
2341
- return [2 /*return*/];
2342
- }
2343
- ws['pingTime'] = new Date();
2344
- _b.label = 1;
2345
- case 1:
2346
- _b.trys.push([1, 2, , 4]);
2347
- if (typeof ws.ping === 'function') {
2348
- ws.ping();
2349
- }
2350
- return [3 /*break*/, 4];
2351
- case 2:
2352
- err_1 = _b.sent();
2353
- if ((_a = this._methodManager) === null || _a === void 0 ? void 0 : _a.getEnableDebug()) {
2354
- console.log(new Date(), 'Server App', 'Error WS Ping Frame', err_1);
2355
- }
2356
- return [4 /*yield*/, this.unsubscribeWS(ws)];
2357
- case 3:
2358
- _b.sent();
2359
- return [2 /*return*/];
2360
- case 4:
2361
- ws.send('ping', function (error) { return __awaiter(_this, void 0, void 0, function () {
2362
- var _a;
2363
- return __generator(this, function (_b) {
2364
- switch (_b.label) {
2365
- case 0:
2366
- if (!error) return [3 /*break*/, 2];
2367
- if ((_a = this._methodManager) === null || _a === void 0 ? void 0 : _a.getEnableDebug()) {
2368
- console.log(new Date(), 'Server App', 'Error WS Ping');
2369
- }
2370
- return [4 /*yield*/, this.unsubscribeWS(ws)];
2371
- case 1:
2372
- _b.sent();
2373
- _b.label = 2;
2374
- case 2: return [2 /*return*/];
2375
- }
2376
- });
2377
- }); });
2378
- return [2 /*return*/];
2379
- }
2380
- });
2381
- });
2382
- };
2383
- ResolveIOMainServer.prototype.shouldDeferHeartbeat = function (ws) {
2384
- if (!ws || ws.readyState !== WebSocket.OPEN) {
2385
- return false;
2386
- }
2387
- var bufferedAmount = typeof ws.bufferedAmount === 'number' ? ws.bufferedAmount : 0;
2388
- return bufferedAmount >= this._clientHeartbeatBackpressureBytes;
2389
- };
2390
- ResolveIOMainServer.prototype.handleClientMessage = function (ws, msg) {
2391
- return __awaiter(this, void 0, void 0, function () {
2392
- var messageRoute_1, messageDate, messageId, type, subType, pub, serverRes, offlineUpdates, i, update, data, updateRoute, updateDate, updateMessageId, updateType, method, serverResMethod, err_2, dataCopy_1, date, msgId_1, msgType, methodName_1, ack, method, forceWorker, targetWorkerIndex, targetWorkerInstance, hasWorkerForMethod, isAiCodex, isExcludedFromWorker, shouldDispatchToWorker, queueSnapshot, err_3;
2393
- var _a;
2394
- var _this = this;
2395
- return __generator(this, function (_b) {
2396
- switch (_b.label) {
2397
- case 0:
2398
- _b.trys.push([0, 24, , 25]);
2399
- messageRoute_1 = msg[0];
2400
- messageDate = msg[1];
2401
- messageId = msg[2];
2402
- type = msg[3];
2403
- if (!this.publicProgram && this._clientRoutes.some(function (a) { return messageRoute_1.includes(a); }) && !ws['doc_user'].roles.groups.some(function (a) { return a.views.some(function (b) { return messageRoute_1.includes(b) || b.includes(messageRoute_1); }); }) && !ws['doc_user'].roles.super_admin) {
2404
- return [2 /*return*/];
2405
- }
2406
- if (!(type === 'subscription')) return [3 /*break*/, 4];
2407
- subType = msg[4];
2408
- pub = msg[5];
2409
- this.logConnectDebug('Subscription message', {
2410
- subType: subType,
2411
- publication: pub,
2412
- messageId: messageId,
2413
- messageRoute: messageRoute_1,
2414
- args: Math.max(0, msg.length - 6),
2415
- id_socket: ws ? ws['id_socket'] : null,
2416
- user: ws ? ws['user'] : null
2417
- });
2418
- if (!(subType === 'sub')) return [3 /*break*/, 2];
2419
- return [4 /*yield*/, this._subscriptionManager.subscribe(messageRoute_1, messageDate, ws, messageId, pub, msg.slice(6))];
2420
- case 1:
2421
- _b.sent();
2422
- return [3 /*break*/, 3];
2423
- case 2:
2424
- this._subscriptionManager.unsubscribe(messageRoute_1, messageDate, ws, messageId, pub, msg.slice(6));
2425
- _b.label = 3;
2426
- case 3: return [3 /*break*/, 23];
2427
- case 4:
2428
- if (!(!this.publicProgram && type === 'offline')) return [3 /*break*/, 16];
2429
- serverRes = {
2430
- messageId: messageId,
2431
- hasError: false,
2432
- data: 'ACK'
2433
- };
2434
- if (ws && ws.readyState === WebSocket.OPEN) {
2435
- this._websocketManager.send(ws, serverRes);
2436
- }
2437
- this._offlineUpdates.push(ws);
2438
- offlineUpdates = msg[4];
2439
- i = 0;
2440
- _b.label = 5;
2441
- case 5:
2442
- if (!(i < offlineUpdates.length)) return [3 /*break*/, 15];
2443
- update = offlineUpdates[i];
2444
- data = update.data;
2445
- updateRoute = data.shift();
2446
- updateDate = data.shift();
2447
- updateMessageId = data.shift();
2448
- updateType = data.shift();
2449
- method = data.shift();
2450
- serverResMethod = {
2451
- messageId: updateMessageId,
2452
- hasError: false,
2453
- data: 'ACK'
2454
- };
2455
- if (ws && ws.readyState === WebSocket.OPEN) {
2456
- this._websocketManager.send(ws, serverResMethod);
2457
- }
2458
- if (method === 'insertDocument' && data[0] === 'driver-gps') {
2459
- return [3 /*break*/, 14];
2460
- }
2461
- if (!(method !== 'reportBuilderGetResults' && method !== 'reportBuilderGetDistinctValue' && method !== 'reportBuilderBuildTree' && method !== 'generatePDF' && method !== 'getWOOfflineData' && method !== 'countQuery' && method !== 'countWithQuery' && method !== 'countCollectionWithQuery' && method !== 'find' && method !== 'findOne' && method !== 'findWithOptions' && method !== 'getDrivers' && method !== 'processAirdropDistribution' && method !== 'qbHandleResponse')) return [3 /*break*/, 8];
2462
- if (!resolveio_server_app_1.ResolveIOServer.shouldWriteLogsOffline()) return [3 /*break*/, 6];
2463
- resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
2464
- type: 'log',
2465
- data: {
2466
- _id: (0, common_1.objectIdHexString)(),
2467
- createdAt: new Date(),
2468
- type: 'client-request',
2469
- collection: '',
2470
- id_document: '',
2471
- payload: (0, common_1.getBinarySize)(JSON.stringify([data])) < 1000000 ? JSON.stringify([data], null, 2) : 'Too Big',
2472
- method: method,
2473
- id_user: ws['id_user'] || '',
2474
- user: ws['user'] || '',
2475
- messageId: messageId,
2476
- route: messageRoute_1,
2477
- instance_index: process.env.NODE_APP_INSTANCE || '0'
2478
- }
2479
- });
2480
- return [3 /*break*/, 8];
2481
- case 6: return [4 /*yield*/, log_collection_1.Logs.insertOne({
2482
- _id: (0, common_1.objectIdHexString)(),
2483
- type: 'client-request',
2484
- collection: '',
2485
- id_document: '',
2486
- payload: (0, common_1.getBinarySize)(JSON.stringify([data])) < 1000000 ? JSON.stringify([data], null, 2) : 'Too Big',
2487
- method: method,
2488
- id_user: ws['id_user'] || '',
2489
- user: ws['user'] || '',
2490
- messageId: messageId,
2491
- route: messageRoute_1,
2492
- client: 'ResolveIO',
2493
- instance: resolveio_server_app_1.ResolveIOServer.getInstanceHost(),
2494
- instance_index: process.env.NODE_APP_INSTANCE || '0'
2495
- })];
2496
- case 7:
2497
- _b.sent();
2498
- _b.label = 8;
2499
- case 8:
2500
- if (!this._methodManager._methods[method]) return [3 /*break*/, 13];
2501
- _b.label = 9;
2502
- case 9:
2503
- _b.trys.push([9, 11, , 12]);
2504
- return [4 /*yield*/, (_a = this._methodManager.callMethod).call.apply(_a, __spreadArray([Object.assign({}, this._methodManager, method_manager_1.MethodManager.prototype, { id_user: ws['id_user'], user: ws['user'], id_ws: ws['id_socket'] }), method], __read(data), false))];
2505
- case 10:
2506
- _b.sent();
2507
- return [3 /*break*/, 12];
2508
- case 11:
2509
- err_2 = _b.sent();
2510
- console.log(new Date(), 'Offline Error', JSON.stringify(err_2, null, 2));
2511
- return [3 /*break*/, 12];
2512
- case 12:
2513
- if (method === 'updateDocumentOffline' || method === 'updateDocumentPropsOffline') {
2514
- resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(data[0]);
2515
- }
2516
- return [3 /*break*/, 14];
2517
- case 13:
2518
- console.log('Offline - Could not find method: ' + method);
2519
- _b.label = 14;
2520
- case 14:
2521
- i++;
2522
- return [3 /*break*/, 5];
2523
- case 15:
2524
- this._offlineUpdates.splice(this._offlineUpdates.map(function (a) { return a['id_socket']; }).indexOf(ws['id_socket']), 1);
2525
- return [3 /*break*/, 23];
2526
- case 16:
2527
- dataCopy_1 = __spreadArray([], __read(msg), false);
2528
- dataCopy_1.shift();
2529
- date = dataCopy_1.shift();
2530
- msgId_1 = dataCopy_1.shift();
2531
- msgType = dataCopy_1.shift();
2532
- if (!(msgType === 'method')) return [3 /*break*/, 23];
2533
- methodName_1 = dataCopy_1.shift();
2534
- if (ws['user_readonly']) {
2535
- return [2 /*return*/];
2536
- }
2537
- if (!(methodName_1 !== 'reportBuilderGetResults' && methodName_1 !== 'reportBuilderGetDistinctValue' && methodName_1 !== 'reportBuilderBuildTree' && methodName_1 !== 'generatePDF' && methodName_1 !== 'getWOOfflineData' && methodName_1 !== 'countQuery' && methodName_1 !== 'countWithQuery' && methodName_1 !== 'countCollectionWithQuery' && methodName_1 !== 'find' && methodName_1 !== 'findOne' && methodName_1 !== 'findWithOptions' && methodName_1 !== 'getDrivers' && methodName_1 !== 'processAirdropDistribution')) return [3 /*break*/, 19];
2538
- if (!resolveio_server_app_1.ResolveIOServer.shouldWriteLogsOffline()) return [3 /*break*/, 17];
2539
- resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
2540
- type: 'log',
2541
- data: {
2542
- _id: (0, common_1.objectIdHexString)(),
2543
- createdAt: new Date(),
2544
- type: 'client-request',
2545
- collection: '',
2546
- id_document: '',
2547
- payload: (0, common_1.getBinarySize)(JSON.stringify([dataCopy_1])) < 1000000 ? JSON.stringify([dataCopy_1], null, 2) : 'Too Big',
2548
- method: methodName_1,
2549
- id_user: ws['id_user'] || '',
2550
- user: ws['user'] || '',
2551
- messageId: messageId,
2552
- route: messageRoute_1,
2553
- instance_index: process.env.NODE_APP_INSTANCE || '0'
2554
- }
2555
- });
2556
- return [3 /*break*/, 19];
2557
- case 17: return [4 /*yield*/, log_collection_1.Logs.insertOne({
2558
- _id: (0, common_1.objectIdHexString)(),
2559
- type: 'client-request',
2560
- collection: '',
2561
- id_document: '',
2562
- payload: (0, common_1.getBinarySize)(JSON.stringify([dataCopy_1])) < 1000000 ? JSON.stringify([dataCopy_1], null, 2) : 'Too Big',
2563
- method: methodName_1,
2564
- id_user: ws['id_user'] || '',
2565
- user: ws['user'] || '',
2566
- messageId: messageId,
2567
- route: messageRoute_1,
2568
- client: 'ResolveIO',
2569
- instance: resolveio_server_app_1.ResolveIOServer.getInstanceHost(),
2570
- instance_index: process.env.NODE_APP_INSTANCE || '0'
2571
- })];
2572
- case 18:
2573
- _b.sent();
2574
- _b.label = 19;
2575
- case 19:
2576
- ack = {
2577
- messageId: msgId_1,
2578
- hasError: false,
2579
- data: 'ACK'
2580
- };
2581
- if (ws && ws.readyState === WebSocket.OPEN) {
2582
- this._websocketManager.send(ws, ack);
2583
- }
2584
- method = this._methodManager.getMethod(methodName_1);
2585
- forceWorker = this._isWorkersEnabled && !!(method === null || method === void 0 ? void 0 : method.forceWorker);
2586
- targetWorkerIndex = this._isWorkersEnabled && method ? method.targetWorkerIndex : null;
2587
- targetWorkerInstance = this._isWorkersEnabled && method ? method.targetWorkerInstance : null;
2588
- hasWorkerForMethod = this._workerDispatcherManager ? this._workerDispatcherManager.hasWorkersForMethod(methodName_1) : false;
2589
- isAiCodex = methodName_1 === 'aiCoderTerminalRunCodex' || methodName_1 === 'aiCoderAppRunCodex';
2590
- isExcludedFromWorker = (methodName_1 === 'find' ||
2591
- methodName_1 === 'insertDocument' ||
2592
- methodName_1 === 'countWithQuery' ||
2593
- methodName_1 === 'findOne' ||
2594
- methodName_1 === 'updateDocumentProps' ||
2595
- methodName_1 === 'findWithOptions' ||
2596
- methodName_1 === 'updateDocument' ||
2597
- methodName_1 === 'insertErrorLog' ||
2598
- methodName_1 === 'removeDocument' ||
2599
- methodName_1 === 'supportCreateBillingUser' ||
2600
- methodName_1 === 'getSignedUrl' ||
2601
- methodName_1 === 'getSignedUrls' ||
2602
- methodName_1 === 'getSignedUrlWithId' ||
2603
- methodName_1 === 'incorrectUser' ||
2604
- methodName_1 === 'reloadWS' ||
2605
- methodName_1 === 'reconnectWS' ||
2606
- methodName_1 === 'disconnectWS');
2607
- if ((targetWorkerIndex || targetWorkerInstance || forceWorker) && this._isWorkersEnabled && !hasWorkerForMethod && this._methodManager.getEnableDebug()) {
2608
- console.warn(new Date(), '[WorkerDispatcher] Worker unavailable, running method locally', {
2609
- method: methodName_1,
2610
- targetWorkerIndex: targetWorkerIndex || null,
2611
- targetWorkerInstance: targetWorkerInstance || null,
2612
- forceWorker: forceWorker
2613
- });
2614
- }
2615
- shouldDispatchToWorker = (method &&
2616
- !method.skipWorker &&
2617
- this._isWorkersEnabled &&
2618
- this._workerDispatcherManager &&
2619
- hasWorkerForMethod &&
2620
- (forceWorker || !isExcludedFromWorker));
2621
- if (isAiCodex && this._aiWorkerDebug) {
2622
- queueSnapshot = this._workerDispatcherManager ? this._workerDispatcherManager.getQueueSnapshot() : null;
2623
- console.log(new Date(), '[AI Worker Debug] dispatch check', {
2624
- isWorkersEnabled: this._isWorkersEnabled,
2625
- isWorkerInstance: this._isWorkerInstance,
2626
- forceWorker: forceWorker,
2627
- hasWorkerForMethod: hasWorkerForMethod,
2628
- targetWorkerIndex: targetWorkerIndex || null,
2629
- targetWorkerInstance: targetWorkerInstance || null,
2630
- shouldDispatchToWorker: shouldDispatchToWorker,
2631
- queueSnapshot: queueSnapshot
2632
- });
2633
- }
2634
- if (!shouldDispatchToWorker) return [3 /*break*/, 20];
2635
- this._workerDispatcherManager.sendClientTask(msgId_1, methodName_1, dataCopy_1, {
2636
- id_user: ws['id_user'],
2637
- user: ws['user'],
2638
- id_ws: ws['id_socket']
2639
- });
2640
- return [3 /*break*/, 23];
2641
- case 20:
2642
- if (!(methodName_1 === 'aiCoderTerminalRunCodex' || methodName_1 === 'aiCoderAppRunCodex')) return [3 /*break*/, 21];
2643
- if (this._aiWorkerDebug) {
2644
- console.warn(new Date(), '[AI Worker Debug] AI execution running locally', {
2645
- isWorkersEnabled: this._isWorkersEnabled,
2646
- isWorkerInstance: this._isWorkerInstance,
2647
- targetWorkerIndex: targetWorkerIndex || null,
2648
- targetWorkerInstance: targetWorkerInstance || null,
2649
- hasWorkerForMethod: hasWorkerForMethod
2650
- });
2651
- }
2652
- setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
2653
- var error_6;
2654
- return __generator(this, function (_a) {
2655
- switch (_a.label) {
2656
- case 0:
2657
- _a.trys.push([0, 2, , 3]);
2658
- return [4 /*yield*/, this.callMethodLocally(ws, msgId_1, methodName_1, dataCopy_1)];
2659
- case 1:
2660
- _a.sent();
2661
- return [3 /*break*/, 3];
2662
- case 2:
2663
- error_6 = _a.sent();
2664
- console.error(new Date(), 'AI execution run failed:', error_6);
2665
- return [3 /*break*/, 3];
2666
- case 3: return [2 /*return*/];
2667
- }
2668
- });
2669
- }); }, 0);
2670
- return [3 /*break*/, 23];
2671
- case 21: return [4 /*yield*/, this.callMethodLocally(ws, msgId_1, methodName_1, dataCopy_1)];
2672
- case 22:
2673
- _b.sent();
2674
- _b.label = 23;
2675
- case 23: return [3 /*break*/, 25];
2676
- case 24:
2677
- err_3 = _b.sent();
2678
- throw err_3;
2679
- case 25: return [2 /*return*/];
2680
- }
2681
- });
2682
- });
2683
- };
2684
- /**
2685
- * callMethodLocally is your old approach for invoking the method in-process.
2686
- */
2687
- ResolveIOMainServer.prototype.callMethodLocally = function (ws, messageId, method, params) {
2688
- return __awaiter(this, void 0, void 0, function () {
2689
- var serverRes, result, resultBytes, err_4;
2690
- var _a;
2691
- return __generator(this, function (_b) {
2692
- switch (_b.label) {
2693
- case 0:
2694
- serverRes = {
2695
- messageId: messageId,
2696
- hasError: false,
2697
- data: null
2698
- };
2699
- _b.label = 1;
2700
- case 1:
2701
- _b.trys.push([1, 3, , 4]);
2702
- return [4 /*yield*/, (_a = this._methodManager.callMethod).call.apply(_a, __spreadArray([Object.assign({}, this._methodManager, method_manager_1.MethodManager.prototype, {
2703
- id_user: ws['id_user'],
2704
- user: ws['user'],
2705
- id_ws: ws['id_socket']
2706
- }),
2707
- method], __read(params), false))];
2708
- case 2:
2709
- result = _b.sent();
2710
- serverRes.data = result;
2711
- if (this._aiWorkerDebug && typeof method === 'string' && method.startsWith('ai')) {
2712
- resultBytes = null;
2713
- try {
2714
- resultBytes = Buffer.byteLength(JSON.stringify(result));
2715
- }
2716
- catch (_c) {
2717
- resultBytes = null;
2718
- }
2719
- console.log(new Date(), '[AI Worker Debug] local method result', {
2720
- method: method,
2721
- messageId: messageId,
2722
- id_socket: ws ? ws['id_socket'] : null,
2723
- id_user: ws ? ws['id_user'] : null,
2724
- resultBytes: resultBytes
2725
- });
2726
- }
2727
- return [3 /*break*/, 4];
2728
- case 3:
2729
- err_4 = _b.sent();
2730
- serverRes.hasError = true;
2731
- serverRes.data = err_4 || 'Unknown error';
2732
- return [3 /*break*/, 4];
2733
- case 4:
2734
- if (ws && ws.readyState === WebSocket.OPEN) {
2735
- this._websocketManager.send(ws, serverRes);
2736
- }
2737
- return [2 /*return*/];
2738
- }
2739
- });
2740
- });
2741
- };
2742
- /**
2743
- * Cleanly remove a client from the subscription manager, etc.
2744
- */
2745
- ResolveIOMainServer.prototype.unsubscribeWS = function (ws) {
2746
- return __awaiter(this, void 0, void 0, function () {
2747
- return __generator(this, function (_a) {
2748
- switch (_a.label) {
2749
- case 0:
2750
- if (this._subscriptionManager && this._methodManager.getEnableDebug()) {
2751
- console.log(new Date(), 'Server App', 'Unsub WS', ws['user'], ws['id_socket']);
2752
- }
2753
- this.logConnectDebug('WS unsubscribe', {
2754
- id_socket: ws ? ws['id_socket'] : null,
2755
- id_user: ws ? ws['id_user'] : null,
2756
- user: ws ? ws['user'] : null
2757
- });
2758
- return [4 /*yield*/, this._subscriptionManager.unsubscribeAll(ws)];
2759
- case 1:
2760
- _a.sent();
2761
- ws.removeAllListeners();
2762
- ws = null;
2763
- return [2 /*return*/];
2764
- }
2765
- });
2766
- });
2767
- };
2768
- ResolveIOMainServer.prototype.getApp = function () {
2769
- return this._app;
2770
- };
2771
- ResolveIOMainServer.prototype.getServerConfig = function () {
2772
- return resolveio_server_app_1.ResolveIOServer.getServerConfig();
2773
- };
2774
- ResolveIOMainServer.prototype.getWorkerDispatcherManager = function () {
2775
- return this._workerDispatcherManager;
2776
- };
2777
- ResolveIOMainServer.prototype.getWorkerServerManager = function () {
2778
- return this._workerServerManager;
2779
- };
2780
- return ResolveIOMainServer;
2781
- }());
2782
- exports.ResolveIOMainServer = ResolveIOMainServer;
2783
-
2784
- //# sourceMappingURL=server-app.js.map