@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
@@ -0,0 +1,489 @@
1
+ import axios from 'axios';
2
+ import { MonitorCPUs } from '../collections/monitor-cpu.collection';
3
+ import { MonitorFunctions } from '../collections/monitor-function.collection';
4
+ import { MonitorMemorys } from '../collections/monitor-memory.collection';
5
+ import { MonitorMongos } from '../collections/monitor-mongo.collection';
6
+ import { ResolveIOServer } from '../resolveio-server-app';
7
+ import { objectIdHexString } from '../util/common';
8
+ import { LocalLogModel } from './local-log.manager';
9
+
10
+ const os = require('os');
11
+ const MAX_BATCH_SIZE = 8 * 1024 * 1024; // 8MB max for safety
12
+
13
+ export class MonitorManager {
14
+ private _instanceHostname = '';
15
+ private _monitorData: LocalLogModel[] = [];
16
+
17
+ constructor() {}
18
+
19
+ static async create() {
20
+ const monitorManager = new MonitorManager();
21
+ await monitorManager.initialize();
22
+ return monitorManager;
23
+ }
24
+
25
+ private async initialize() {
26
+ this._instanceHostname = os.hostname().replace(/\./g, '-');
27
+ await this.setupIntervals();
28
+ this.setupEventLoop();
29
+ }
30
+
31
+ cpuAverage() {
32
+ var totalIdle = 0, totalTick = 0;
33
+ var cpus = os.cpus();
34
+
35
+ for (var i = 0, len = cpus.length; i < len; i++) {
36
+ var cpu = cpus[i];
37
+
38
+ for (let type in cpu.times) {
39
+ totalTick += cpu.times[type];
40
+ }
41
+ totalIdle += cpu.times.idle;
42
+ }
43
+
44
+ return {
45
+ idle: totalIdle / cpus.length,
46
+ total: totalTick / cpus.length
47
+ };
48
+ }
49
+
50
+ async setupIntervals() {
51
+ // Example: If not on production or localhost, do a health check
52
+ if (
53
+ ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
54
+ && ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'
55
+ ) {
56
+ try {
57
+ let instanceId = await axios.get('http://169.254.169.254/latest/meta-data/instance-id');
58
+
59
+ setInterval(async () => {
60
+ try {
61
+ await axios.post('https://backend.resolveio.com/api/health', {
62
+ type: 'application',
63
+ id_aws_instance: instanceId.data,
64
+ version: typeof process.env.APP_VERSION === 'number'
65
+ ? (<any>process.env.APP_VERSION).toString()
66
+ : process.env.APP_VERSION,
67
+ version_key: process.env.APP_VERSION_KEY
68
+ });
69
+ }
70
+ catch {}
71
+ }, 10000);
72
+ }
73
+ catch {}
74
+ }
75
+
76
+ let lastCPU = this.cpuAverage();
77
+
78
+ setInterval(async () => {
79
+ let now = new Date();
80
+ var endMeasure = this.cpuAverage();
81
+ var idleDifference = endMeasure.idle - lastCPU.idle;
82
+ var totalDifference = endMeasure.total - lastCPU.total;
83
+ var percentageCPU = 1 - idleDifference / totalDifference;
84
+
85
+ // Original local code
86
+ if (
87
+ !ResolveIOServer.shouldWriteLogsOffline()
88
+ ) {
89
+ await MonitorCPUs.create({
90
+ _id: objectIdHexString(),
91
+ metadata: {
92
+ instance: this._instanceHostname,
93
+ client: ResolveIOServer.getServerConfig()['CLIENT_NAME']
94
+ },
95
+ date: now,
96
+ app: percentageCPU,
97
+ system: os.loadavg()[0]
98
+ });
99
+ }
100
+ else {
101
+ this.pushMonitorData({
102
+ type: 'monitor-cpu',
103
+ data: {
104
+ metadata: {
105
+ instance: this._instanceHostname,
106
+ client: ResolveIOServer.getServerConfig()['CLIENT_NAME']
107
+ },
108
+ date: now,
109
+ app: percentageCPU,
110
+ system: os.loadavg()[0]
111
+ }
112
+ });
113
+ }
114
+
115
+ lastCPU = endMeasure;
116
+
117
+ const memUsage = process.memoryUsage();
118
+
119
+ if (
120
+ !ResolveIOServer.shouldWriteLogsOffline()
121
+ ) {
122
+ await MonitorMemorys.create({
123
+ _id: objectIdHexString(),
124
+ metadata: {
125
+ instance: this._instanceHostname,
126
+ client: ResolveIOServer.getServerConfig()['CLIENT_NAME']
127
+ },
128
+ date: now,
129
+ physical_total: memUsage.heapTotal,
130
+ physical_used: memUsage.heapUsed,
131
+ physical_free: os.freemem(),
132
+ virtual: memUsage.rss,
133
+ private: memUsage.external,
134
+ physical: os.totalmem()
135
+ });
136
+ }
137
+ else {
138
+ this.pushMonitorData({
139
+ type: 'monitor-memory',
140
+ data: {
141
+ metadata: {
142
+ instance: this._instanceHostname,
143
+ client: ResolveIOServer.getServerConfig()['CLIENT_NAME']
144
+ },
145
+ date: now,
146
+ physical_total: memUsage.heapTotal,
147
+ physical_used: memUsage.heapUsed,
148
+ physical_free: os.freemem(),
149
+ virtual: memUsage.rss,
150
+ private: memUsage.external,
151
+ physical: os.totalmem(),
152
+ type: 'memory'
153
+ }
154
+ });
155
+ }
156
+ }, 3000);
157
+ }
158
+
159
+ async addMongoTracker(data: MongoMonitorModel) {
160
+ if (
161
+ !ResolveIOServer.shouldWriteLogsOffline()
162
+ ) {
163
+ if (!data.collection.startsWith('monitor-')) {
164
+ await MonitorMongos.create({
165
+ _id: objectIdHexString(),
166
+ metadata: {
167
+ instance: this._instanceHostname,
168
+ client: ResolveIOServer.getServerConfig()['CLIENT_NAME']
169
+ },
170
+ date: new Date(data.date),
171
+ method: data.method,
172
+ doc_collection: data.collection,
173
+ duration: data.duration,
174
+ query: Buffer.byteLength(data.query, 'utf8') < 15800000
175
+ ? data.query
176
+ : 'Too Big'
177
+ });
178
+ }
179
+ }
180
+ else {
181
+ if (this._instanceHostname) {
182
+ this.pushMonitorData({
183
+ type: 'monitor-mongo',
184
+ data: {
185
+ metadata: {
186
+ instance: this._instanceHostname,
187
+ client: ResolveIOServer.getServerConfig()['CLIENT_NAME']
188
+ },
189
+ date: new Date(data.date),
190
+ method: data.method,
191
+ doc_collection: data.collection,
192
+ duration: data.duration,
193
+ query: Buffer.byteLength(data.query, 'utf8') < 15800000
194
+ ? data.query
195
+ : 'Too Big'
196
+ }
197
+ });
198
+ }
199
+ }
200
+ }
201
+
202
+ async addFunctionTracker(data: MonitorFunction) {
203
+ if (typeof(data.data) !== 'string') {
204
+ data.data = JSON.stringify(data.data);
205
+ }
206
+
207
+ if (
208
+ !ResolveIOServer.shouldWriteLogsOffline()
209
+ ) {
210
+ await MonitorFunctions.create({
211
+ _id: objectIdHexString(),
212
+ metadata: {
213
+ instance: this._instanceHostname,
214
+ client: ResolveIOServer.getServerConfig()['CLIENT_NAME']
215
+ },
216
+ date: new Date(data.startTime),
217
+ type: data.functionType,
218
+ name: data.functionName,
219
+ user: data.user,
220
+ duration: data.duration,
221
+ data: Buffer.byteLength(data.data, 'utf8') < 15800000
222
+ ? data.data
223
+ : 'Too Big'
224
+ });
225
+ }
226
+ else {
227
+ if (this._instanceHostname) {
228
+ this.pushMonitorData({
229
+ type: 'monitor-function',
230
+ data: {
231
+ metadata: {
232
+ instance: this._instanceHostname,
233
+ client: ResolveIOServer.getServerConfig()['CLIENT_NAME']
234
+ },
235
+ date: new Date(data.startTime),
236
+ type: data.functionType,
237
+ name: data.functionName,
238
+ user: data.user,
239
+ duration: data.duration,
240
+ data: Buffer.byteLength(data.data, 'utf8') < 15800000
241
+ ? data.data
242
+ : 'Too Big'
243
+ }
244
+ });
245
+ }
246
+ }
247
+ }
248
+
249
+ private pushMonitorData(data: LocalLogModel) {
250
+ this._monitorData.push(data);
251
+
252
+ // If data is huge, flush immediately to file
253
+ if (this.estimateBatchSize() >= MAX_BATCH_SIZE) {
254
+ this.flushMonitorData();
255
+ }
256
+ }
257
+
258
+ private estimateBatchSize(): number {
259
+ return this._monitorData.reduce((total, item) => {
260
+ return total + Buffer.byteLength(JSON.stringify(item));
261
+ }, 0);
262
+ }
263
+
264
+ setupEventLoop() {
265
+ // Flush every 2.5 seconds
266
+ setInterval(() => {
267
+ if (this._monitorData.length > 0) {
268
+ this.flushMonitorData();
269
+ }
270
+ }, 2500);
271
+ }
272
+
273
+ private flushMonitorData() {
274
+ const batch = [];
275
+ let batchSize = 0;
276
+
277
+ while (this._monitorData.length > 0 && batchSize < MAX_BATCH_SIZE) {
278
+ const item = this._monitorData.shift();
279
+ const itemSize = Buffer.byteLength(JSON.stringify(item));
280
+
281
+ if ((batchSize + itemSize) > MAX_BATCH_SIZE && batch.length > 0) {
282
+ // put the item back for next round
283
+ this._monitorData.unshift(item);
284
+ break;
285
+ }
286
+
287
+ batch.push(item);
288
+ batchSize += itemSize;
289
+ }
290
+
291
+ try {
292
+ // Now, instead of calling an external HTTP endpoint, we write the batch to disk:
293
+ ResolveIOServer.getLocalLogManager().writeLogs(batch);
294
+ }
295
+ catch (error) {
296
+ console.error(new Date(), 'MonitorManager', 'Failed to flush monitor data to file:', error);
297
+ }
298
+ }
299
+ }
300
+
301
+ export interface MongoMonitorModel {
302
+ date: Date;
303
+ method: string;
304
+ collection: string;
305
+ duration: number;
306
+ query: string;
307
+ }
308
+
309
+ export class MonitorMongo {
310
+ private _startTime = 0;
311
+ private _method = '';
312
+ private _collection = '';
313
+ private _query = '';
314
+
315
+ constructor() {}
316
+
317
+ static create(method: string, collection: string, query: string) {
318
+ const monitorMongo = new MonitorMongo();
319
+ monitorMongo.initialize(method, collection, query);
320
+ return monitorMongo;
321
+ }
322
+
323
+ private initialize(method: string, collection: string, query: string) {
324
+ this._startTime = Date.now();
325
+ this._method = method;
326
+ this._collection = collection;
327
+ this._query = query;
328
+ }
329
+
330
+ public async finish() {
331
+ let endTime = Date.now();
332
+
333
+ let mongoMonitor: MongoMonitorModel = {
334
+ date: new Date(endTime),
335
+ method: this._method,
336
+ collection: this._collection,
337
+ query: this._query,
338
+ duration: endTime - this._startTime
339
+ };
340
+
341
+ await ResolveIOServer.getMainServer().getMonitorManager().addMongoTracker(mongoMonitor);
342
+ }
343
+ }
344
+
345
+ export class MonitorManagerFunction {
346
+ private _functionCnt = 0;
347
+ private _functions: MonitorFunction[] = [];
348
+ private _functionLastCompletedWS: { [id_socket: string]: MonitorFunction; } = {};
349
+ private _functionLastCompleted: MonitorFunction;
350
+
351
+ constructor() {}
352
+
353
+ static create() {
354
+ const monitorManagerFunction = new MonitorManagerFunction();
355
+ monitorManagerFunction.initialize();
356
+ return monitorManagerFunction;
357
+ }
358
+
359
+ private initialize() {
360
+
361
+ }
362
+
363
+ startMonitorFunction(
364
+ functionType: MonitorFunctionType,
365
+ functionName: string,
366
+ user: string,
367
+ id_socket: string,
368
+ data: any
369
+ ) {
370
+ let newMonitorFunction = MonitorFunction.create(
371
+ this._functionCnt++,
372
+ functionType,
373
+ functionName,
374
+ user,
375
+ id_socket,
376
+ data
377
+ );
378
+
379
+ this._functions.push(newMonitorFunction);
380
+ return newMonitorFunction.id;
381
+ }
382
+
383
+ async finishMonitorFunction(id: number) {
384
+ let monitor = this._functions.find(a => a.id === id);
385
+
386
+ if (monitor) {
387
+ await monitor.finish();
388
+ this._functionLastCompleted = monitor;
389
+ this._functionLastCompletedWS[monitor.id_socket] = monitor;
390
+ this._functions.splice(
391
+ this._functions.map(a => a.id).indexOf(id),
392
+ 1
393
+ );
394
+ }
395
+ }
396
+
397
+ getActiveMonitorFunctions() {
398
+ return this._functions;
399
+ }
400
+
401
+ getLastCompletedMonitorFunction() {
402
+ return this._functionLastCompleted;
403
+ }
404
+
405
+ getLastCompletedMonitorFunctionWS() {
406
+ return this._functionLastCompletedWS;
407
+ }
408
+ }
409
+
410
+ export type MonitorFunctionType =
411
+ 'Cron Method'
412
+ | 'Method'
413
+ | 'User Specific Publication'
414
+ | 'Publication';
415
+
416
+ export class MonitorFunction {
417
+ private _timer: NodeJS.Timeout = null;
418
+ public duration = 0;
419
+ public functionType: MonitorFunctionType;
420
+ public functionName: string;
421
+ public user: string;
422
+ public data: any;
423
+ public startTime: Date = null;
424
+ public endTime: Date = null;
425
+ public lastTime: Date = null;
426
+ public id_socket = '';
427
+ public id = 0;
428
+
429
+ constructor() {}
430
+
431
+ static create(
432
+ id: number,
433
+ functionType: MonitorFunctionType,
434
+ functionName: string,
435
+ user: string,
436
+ id_socket: string,
437
+ data: any
438
+ ) {
439
+ const monitorFunction = new MonitorFunction();
440
+ monitorFunction.initialize(id, functionType, functionName, user, id_socket, data);
441
+ return monitorFunction;
442
+ }
443
+
444
+ private initialize(
445
+ id: number,
446
+ functionType: MonitorFunctionType,
447
+ functionName: string,
448
+ user: string,
449
+ id_socket: string,
450
+ data: any
451
+ ) {
452
+ this.id = id;
453
+ this.startTime = new Date();
454
+ this.functionType = functionType;
455
+ this.functionName = functionName;
456
+ this.user = user;
457
+ this.id_socket = id_socket;
458
+ this.data = data;
459
+ this.lastTime = new Date();
460
+
461
+ this._timer = setInterval(() => {
462
+ let diff = Date.now() - this.lastTime.getTime();
463
+
464
+ if (diff > this.duration) {
465
+ this.duration = diff;
466
+ }
467
+
468
+ this.lastTime = new Date();
469
+ }, 1000);
470
+ }
471
+
472
+ public async finish() {
473
+ if (this._timer) {
474
+ clearInterval(this._timer);
475
+ this._timer = null;
476
+ }
477
+
478
+ this.endTime = new Date();
479
+
480
+ if (this.duration >= 5000) {
481
+ // Optional slow function logging or email
482
+ await ResolveIOServer.getMainServer().getMonitorManager().addFunctionTracker(this);
483
+ }
484
+
485
+ // await ResolveIOServer.getMainServer().getMonitorManager().addFunctionTracker(this);
486
+
487
+ return Promise.resolve(true);
488
+ }
489
+ }
@@ -0,0 +1,116 @@
1
+ import { round } from '../util/common';
2
+ import { ResolveIOServer } from '../resolveio-server-app';
3
+ import { OpenAIUsageLedger } from '../collections/openai-usage-ledger.collection';
4
+
5
+ export interface OpenAIUsageRecordInput {
6
+ id_client?: string;
7
+ model: string;
8
+ input_tokens: number;
9
+ cached_input_tokens?: number;
10
+ output_tokens: number;
11
+ total_tokens: number;
12
+ billable?: boolean;
13
+ category?: string;
14
+ id_request?: string;
15
+ id_conversation?: string;
16
+ timestamp?: Date;
17
+ cost_estimate?: number;
18
+ }
19
+
20
+ type PricingConfig = {
21
+ inputPer1k: number;
22
+ outputPer1k: number;
23
+ };
24
+
25
+ const toNumber = (value: any): number => {
26
+ const parsed = Number(value);
27
+ return Number.isFinite(parsed) ? parsed : 0;
28
+ };
29
+
30
+ const normalizeModelKey = (value: string): string => {
31
+ return String(value || '').trim().toLowerCase();
32
+ };
33
+
34
+ const parsePricingJson = (raw: string): Record<string, PricingConfig> => {
35
+ if (!raw) {
36
+ return {};
37
+ }
38
+ try {
39
+ const parsed = JSON.parse(raw);
40
+ if (!parsed || typeof parsed !== 'object') {
41
+ return {};
42
+ }
43
+ const out: Record<string, PricingConfig> = {};
44
+ Object.keys(parsed).forEach((key) => {
45
+ const entry = parsed[key] || {};
46
+ const inputPer1k = toNumber(entry.inputPer1k ?? entry.input ?? entry.prompt ?? 0);
47
+ const outputPer1k = toNumber(entry.outputPer1k ?? entry.output ?? entry.completion ?? 0);
48
+ if (inputPer1k || outputPer1k) {
49
+ out[normalizeModelKey(key)] = { inputPer1k, outputPer1k };
50
+ }
51
+ });
52
+ return out;
53
+ }
54
+ catch {
55
+ return {};
56
+ }
57
+ };
58
+
59
+ const resolvePricingConfig = (): { perModel: Record<string, PricingConfig>; defaultPricing: PricingConfig } => {
60
+ const config = ResolveIOServer.getServerConfig() || {};
61
+ const rawJson = String(config['OPENAI_MODEL_PRICING'] ?? process.env.OPENAI_MODEL_PRICING ?? '').trim();
62
+ const defaultInput = toNumber(config['OPENAI_COST_PER_1K_INPUT_TOKENS'] ?? process.env.OPENAI_COST_PER_1K_INPUT_TOKENS ?? 0);
63
+ const defaultOutput = toNumber(config['OPENAI_COST_PER_1K_OUTPUT_TOKENS'] ?? process.env.OPENAI_COST_PER_1K_OUTPUT_TOKENS ?? 0);
64
+ return {
65
+ perModel: parsePricingJson(rawJson),
66
+ defaultPricing: { inputPer1k: defaultInput, outputPer1k: defaultOutput }
67
+ };
68
+ };
69
+
70
+ const estimateCost = (model: string, inputTokens: number, outputTokens: number, cachedInputTokens = 0): number => {
71
+ const { perModel, defaultPricing } = resolvePricingConfig();
72
+ const normalizedModel = normalizeModelKey(model);
73
+ const pricing = perModel[normalizedModel] || defaultPricing;
74
+ if (!pricing.inputPer1k && !pricing.outputPer1k) {
75
+ return 0;
76
+ }
77
+ // Cached prompt tokens are typically discounted or free; only uncached input should use full input pricing.
78
+ const uncachedInputTokens = Math.max(0, toNumber(inputTokens) - toNumber(cachedInputTokens));
79
+ const inputCost = (uncachedInputTokens / 1000) * pricing.inputPer1k;
80
+ const outputCost = (toNumber(outputTokens) / 1000) * pricing.outputPer1k;
81
+ return round(inputCost + outputCost, 6);
82
+ };
83
+
84
+ export async function recordOpenAIUsage(input: OpenAIUsageRecordInput): Promise<void> {
85
+ if (!input) {
86
+ return;
87
+ }
88
+ const idClient = String(input.id_client || '').trim();
89
+ const inputTokens = toNumber(input.input_tokens);
90
+ const cachedInputTokens = toNumber(input.cached_input_tokens);
91
+ const outputTokens = toNumber(input.output_tokens);
92
+ const totalTokens = toNumber(input.total_tokens);
93
+ if (!totalTokens && (!inputTokens && !outputTokens)) {
94
+ return;
95
+ }
96
+ const model = String(input.model || '').trim() || 'unknown';
97
+ const normalizedInputCostEstimate = toNumber(input.cost_estimate);
98
+ const costEstimate = normalizedInputCostEstimate > 0
99
+ ? normalizedInputCostEstimate
100
+ : estimateCost(model, inputTokens, outputTokens, cachedInputTokens);
101
+
102
+ await OpenAIUsageLedger.insertOne({
103
+ id_client: idClient,
104
+ timestamp: input.timestamp || new Date(),
105
+ model,
106
+ input_tokens: inputTokens,
107
+ cached_input_tokens: cachedInputTokens,
108
+ output_tokens: outputTokens,
109
+ total_tokens: totalTokens || (inputTokens + outputTokens),
110
+ cost_estimate: costEstimate,
111
+ billable: input.billable !== false,
112
+ category: input.category || '',
113
+ id_request: input.id_request || '',
114
+ id_conversation: input.id_conversation || ''
115
+ });
116
+ }