@resolveio/server-lib 22.3.124 → 22.3.126

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 (711) hide show
  1. package/.nodemon.json +5 -0
  2. package/.vscode/settings.json +21 -0
  3. package/AGENTS.md +195 -0
  4. package/README.md +22 -0
  5. package/build_package.sh +5 -0
  6. package/compileDTS.pl +64 -0
  7. package/docs/ai-assistant-nightly-eval.md +65 -0
  8. package/docs/ai-assistant-preflight-checklist.md +23 -0
  9. package/docs/ai-assistant-report-builder-bridge-playbook.md +115 -0
  10. package/eslint-plugin-custom/index.js +7 -0
  11. package/eslint-plugin-custom/rules/no-filter-zero-index.js +44 -0
  12. package/eslint.config.js +103 -0
  13. package/gulpfile.js +216 -0
  14. package/methodAndPublicationListGenerator.py +375 -0
  15. package/mongodbensurers.js +2 -0
  16. package/mongostop.js +3 -0
  17. package/package.json +3 -1
  18. package/scripts/cleanup-bypassed-callmethod-logs.js +616 -0
  19. package/settings.development.json +25 -0
  20. package/settings.development.redacted.json +25 -0
  21. package/src/.env +12 -0
  22. package/src/ai/assistant-core-heuristics.ts +379 -0
  23. package/src/ai/resolveio-platform-intelligence-memory-corpus.ts +185 -0
  24. package/src/ai/resolveio-platform-intelligence-memory.ts +325 -0
  25. package/{ai/resolveio-platform-intelligence-types.d.ts → src/ai/resolveio-platform-intelligence-types.ts} +20 -15
  26. package/src/ai/resolveio-platform-intelligence.ts +462 -0
  27. package/src/client-server-app.ts +12 -0
  28. package/src/collections/ai-run.collection.ts +117 -0
  29. package/src/collections/ai-terminal-conversation.collection.ts +91 -0
  30. package/src/collections/ai-terminal-issue-report.collection.ts +99 -0
  31. package/src/collections/ai-terminal-message.collection.ts +77 -0
  32. package/src/collections/app-setting.collection.ts +104 -0
  33. package/src/collections/app-status.collection.ts +58 -0
  34. package/src/collections/communication-metric.collection.ts +84 -0
  35. package/src/collections/counter.collection.ts +56 -0
  36. package/src/collections/cron-job-history.collection.ts +94 -0
  37. package/src/collections/cron-job.collection.ts +92 -0
  38. package/src/collections/customer-notification.collection.ts +131 -0
  39. package/src/collections/customer-portal-password.collection.ts +76 -0
  40. package/src/collections/email-history.collection.ts +134 -0
  41. package/src/collections/email-verified.collection.ts +62 -0
  42. package/src/collections/file.collection.ts +74 -0
  43. package/src/collections/flag-update.collection.ts +57 -0
  44. package/src/collections/flag.collection.ts +57 -0
  45. package/src/collections/log-method-latency.collection.ts +77 -0
  46. package/src/collections/log-subscription.collection.ts +80 -0
  47. package/src/collections/log.collection.ts +93 -0
  48. package/src/collections/logged-in-users.collection.ts +67 -0
  49. package/src/collections/monitor-cpu.collection.ts +65 -0
  50. package/src/collections/monitor-function.collection.ts +74 -0
  51. package/src/collections/monitor-memory.collection.ts +77 -0
  52. package/src/collections/monitor-mongo.collection.ts +71 -0
  53. package/src/collections/notification.collection.ts +57 -0
  54. package/src/collections/openai-usage-ledger.collection.ts +77 -0
  55. package/src/collections/report-builder-dashboard-builder.collection.ts +109 -0
  56. package/src/collections/report-builder-library.collection.ts +89 -0
  57. package/src/collections/report-builder-report.collection.ts +184 -0
  58. package/src/collections/user-group.collection.ts +89 -0
  59. package/src/collections/user-guide.collection.ts +57 -0
  60. package/src/collections/user.collection.ts +181 -0
  61. package/src/cron/cron.ts +117 -0
  62. package/src/fixtures/cron-jobs.ts +95 -0
  63. package/src/fixtures/init.ts +35 -0
  64. package/src/http/auth.ts +818 -0
  65. package/src/http/health.ts +7 -0
  66. package/src/http/home.ts +90 -0
  67. package/src/http/slow-query-publication.ts +49 -0
  68. package/src/index.ts +1 -0
  69. package/src/managers/ai-assistant-codex-manager.manager.ts +1131 -0
  70. package/src/managers/ai-run-evidence.manager.ts +264 -0
  71. package/src/managers/communication-metric.manager.ts +82 -0
  72. package/src/managers/cron.manager.ts +333 -0
  73. package/src/managers/customer-notification-content.manager.ts +236 -0
  74. package/src/managers/diagnostic-manager-bootstrap.ts +165 -0
  75. package/src/managers/error-auto-fix.manager.ts +2767 -0
  76. package/src/managers/local-log.manager.ts +113 -0
  77. package/src/managers/method.manager.ts +1857 -0
  78. package/src/managers/mongo.manager.ts +4575 -0
  79. package/src/managers/monitor.manager.ts +507 -0
  80. package/src/managers/openai-usage-ledger.manager.ts +57 -0
  81. package/src/managers/slow-query-verifier.manager.ts +3590 -0
  82. package/src/managers/slow-query.manager.ts +519 -0
  83. package/src/managers/subscription.manager.ts +3128 -0
  84. package/src/managers/websocket.manager.ts +746 -0
  85. package/src/managers/worker-dispatcher.manager.ts +1360 -0
  86. package/src/managers/worker-server.manager.ts +536 -0
  87. package/src/methods/accounts.ts +532 -0
  88. package/src/methods/ai-terminal.ts +23497 -0
  89. package/src/methods/app-settings.ts +114 -0
  90. package/src/methods/aws.ts +649 -0
  91. package/src/methods/collections.ts +641 -0
  92. package/src/methods/counters.ts +69 -0
  93. package/src/methods/cron-jobs.ts +2614 -0
  94. package/src/methods/customer-notifications.ts +458 -0
  95. package/src/methods/diagnostics.ts +616 -0
  96. package/src/methods/flag-updates.ts +7 -0
  97. package/src/methods/flags.ts +7 -0
  98. package/src/methods/logs.ts +657 -0
  99. package/src/methods/mongo-explorer.ts +1880 -0
  100. package/src/methods/monitor.ts +540 -0
  101. package/src/methods/pdf.ts +1236 -0
  102. package/src/methods/publications.ts +129 -0
  103. package/src/methods/report-builder.ts +3300 -0
  104. package/src/methods/support.ts +335 -0
  105. package/src/models/ai-run.model.ts +27 -0
  106. package/src/models/ai-terminal-conversation.model.ts +19 -0
  107. package/src/models/ai-terminal-issue-report.model.ts +21 -0
  108. package/src/models/ai-terminal-message.model.ts +24 -0
  109. package/src/models/app-setting.model.ts +17 -0
  110. package/{models/app-status.model.d.ts → src/models/app-status.model.ts} +3 -2
  111. package/{models/billing-logged-in-users.model.d.ts → src/models/billing-logged-in-users.model.ts} +5 -4
  112. package/src/models/collection-document.model.ts +24 -0
  113. package/src/models/communication-metric.model.ts +23 -0
  114. package/{models/counter.model.d.ts → src/models/counter.model.ts} +4 -3
  115. package/src/models/cron-job-history.model.ts +16 -0
  116. package/src/models/cron-job.model.ts +15 -0
  117. package/src/models/customer-notification.model.ts +28 -0
  118. package/src/models/customer-portal-password.model.ts +12 -0
  119. package/src/models/dialog.model.ts +25 -0
  120. package/{models/email-history.model.js → src/models/email-history.model.ts} +36 -4
  121. package/{models/email-verified.model.d.ts → src/models/email-verified.model.ts} +6 -5
  122. package/{models/file.model.d.ts → src/models/file.model.ts} +8 -7
  123. package/{models/flag-update.model.d.ts → src/models/flag-update.model.ts} +4 -3
  124. package/{models/flag.model.d.ts → src/models/flag.model.ts} +4 -3
  125. package/src/models/log-method-latency.model.ts +11 -0
  126. package/{models/log-subscription.model.d.ts → src/models/log-subscription.model.ts} +11 -9
  127. package/src/models/log.model.ts +19 -0
  128. package/{models/logged-in-users.model.d.ts → src/models/logged-in-users.model.ts} +6 -5
  129. package/{models/method-response.model.d.ts → src/models/method-response.model.ts} +7 -6
  130. package/src/models/method.model.ts +25 -0
  131. package/{models/monitor-cpu.model.d.ts → src/models/monitor-cpu.model.ts} +9 -7
  132. package/src/models/monitor-function.model.ts +16 -0
  133. package/src/models/monitor-memory.model.ts +17 -0
  134. package/src/models/monitor-mongo.model.ts +15 -0
  135. package/{models/notification.model.d.ts → src/models/notification.model.ts} +6 -4
  136. package/src/models/openai-usage-ledger.model.ts +16 -0
  137. package/src/models/pagination.model.ts +35 -0
  138. package/src/models/permission.model.ts +14 -0
  139. package/src/models/report-builder-dashboard-builder.model.ts +29 -0
  140. package/src/models/report-builder-library.model.ts +20 -0
  141. package/src/models/report-builder-report.model.ts +136 -0
  142. package/src/models/report-builder.model.ts +68 -0
  143. package/src/models/select-data-label.model.ts +9 -0
  144. package/src/models/server-message.model.ts +31 -0
  145. package/src/models/slow-query-report.model.ts +23 -0
  146. package/src/models/subscription.model.ts +73 -0
  147. package/src/models/support-ticket.model.ts +104 -0
  148. package/src/models/user-group.model.ts +24 -0
  149. package/{models/user-guide.model.d.ts → src/models/user-guide.model.ts} +5 -4
  150. package/src/models/user.model.ts +96 -0
  151. package/src/private/images/ResolveIO.png +0 -0
  152. package/{public_api.d.ts → src/public_api.ts} +7 -0
  153. package/src/publications/ai-terminal.ts +73 -0
  154. package/src/publications/app-settings.ts +25 -0
  155. package/src/publications/app-status.ts +13 -0
  156. package/src/publications/cron-jobs.ts +40 -0
  157. package/src/publications/customer-notifications.ts +101 -0
  158. package/src/publications/files.ts +33 -0
  159. package/src/publications/flags-update.ts +19 -0
  160. package/src/publications/flags.ts +19 -0
  161. package/src/publications/logs.ts +163 -0
  162. package/src/publications/notifications.ts +13 -0
  163. package/src/publications/report-builder-dashboard-builders.ts +39 -0
  164. package/src/publications/report-builder-libraries.ts +41 -0
  165. package/src/publications/report-builder-reports.ts +47 -0
  166. package/src/publications/super-admin.ts +13 -0
  167. package/src/publications/user-groups.ts +12 -0
  168. package/src/publications/user-guides.ts +12 -0
  169. package/src/resolveio-server-app.ts +617 -0
  170. package/src/server-app.ts +3354 -0
  171. package/src/services/codex-client.ts +1231 -0
  172. package/src/services/openai-client.ts +265 -0
  173. package/src/types/error-report.ts +26 -0
  174. package/src/types/js-tiktoken.d.ts +11 -0
  175. package/src/types/slow-query-report.ts +28 -0
  176. package/src/util/ai-qa-policy.ts +925 -0
  177. package/src/util/ai-run-evidence-adapters.ts +521 -0
  178. package/src/util/ai-run-evidence-dashboard.ts +271 -0
  179. package/src/util/ai-run-evidence-eval.ts +885 -0
  180. package/src/util/ai-run-evidence.ts +964 -0
  181. package/src/util/ai-runner-artifacts.ts +586 -0
  182. package/src/util/ai-runner-qa-auth.ts +821 -0
  183. package/src/util/ai-runner-qa-tools.ts +3045 -0
  184. package/src/util/aicoder-runner-v6.ts +526 -0
  185. package/src/util/common.ts +649 -0
  186. package/src/util/customer-portal-password.ts +183 -0
  187. package/src/util/error-reporter.ts +332 -0
  188. package/src/util/error-tracking.ts +79 -0
  189. package/src/util/openai-usage-cost.ts +114 -0
  190. package/src/util/report-builder-unwinds.ts +180 -0
  191. package/src/util/runner-process-janitor.ts +219 -0
  192. package/src/util/schema-report-builder.ts +448 -0
  193. package/src/util/slow-query-reporter.ts +216 -0
  194. package/src/util/subscription-dependency-context.ts +1096 -0
  195. package/src/util/support-runner-v5.ts +897 -0
  196. package/src/util/tokenizer.ts +38 -0
  197. package/src/workers/codex-runner.worker.ts +142 -0
  198. package/start_server.sh +5 -0
  199. package/tests/ai-assistant-corpus-build.ts +484 -0
  200. package/tests/ai-assistant-corpus-replay-e2e.ts +774 -0
  201. package/tests/ai-assistant-data-parity-e2e.ts +1989 -0
  202. package/tests/ai-assistant-eval-triage.ts +831 -0
  203. package/tests/ai-assistant-openai-e2e.ts +1061 -0
  204. package/tests/ai-assistant-openai-git-e2e.ts +155 -0
  205. package/tests/ai-assistant-preflight-matrix.ts +215 -0
  206. package/tests/ai-assistant-routing-eval.test.ts +560 -0
  207. package/tests/ai-assistant-snf-live-eval.ts +975 -0
  208. package/tests/ai-assistant-utils.test.ts +2968 -0
  209. package/tests/ai-run-eval.test.ts +88 -0
  210. package/tests/ai-run-evidence.test.ts +232 -0
  211. package/tests/ai-runner-contract.test.ts +488 -0
  212. package/tests/aicoder-runner-v6.test.ts +92 -0
  213. package/tests/error-reporter.test.ts +145 -0
  214. package/tests/method-publication-generator.test.ts +46 -0
  215. package/tests/report-builder-linking.test.ts +79 -0
  216. package/tests/resolveio-platform-intelligence.test.ts +352 -0
  217. package/tests/server-app-cron-owner.test.ts +127 -0
  218. package/tests/subscription-connect-race.test.ts +158 -0
  219. package/tests/subscription-dependency-context.test.ts +324 -0
  220. package/tests/subscription-manager-collection-tracking.test.ts +86 -0
  221. package/tests/subscription-manager-invalidation.test.ts +86 -0
  222. package/tests/support-runner-v5.test.ts +191 -0
  223. package/tsconfig.json +34 -0
  224. package/ai/assistant-core-heuristics.d.ts +0 -11
  225. package/ai/assistant-core-heuristics.js +0 -356
  226. package/ai/assistant-core-heuristics.js.map +0 -1
  227. package/ai/resolveio-platform-intelligence-memory-corpus.d.ts +0 -3
  228. package/ai/resolveio-platform-intelligence-memory-corpus.js +0 -214
  229. package/ai/resolveio-platform-intelligence-memory-corpus.js.map +0 -1
  230. package/ai/resolveio-platform-intelligence-memory.d.ts +0 -20
  231. package/ai/resolveio-platform-intelligence-memory.js +0 -341
  232. package/ai/resolveio-platform-intelligence-memory.js.map +0 -1
  233. package/ai/resolveio-platform-intelligence-types.js +0 -4
  234. package/ai/resolveio-platform-intelligence-types.js.map +0 -1
  235. package/ai/resolveio-platform-intelligence.d.ts +0 -6
  236. package/ai/resolveio-platform-intelligence.js +0 -463
  237. package/ai/resolveio-platform-intelligence.js.map +0 -1
  238. package/client-server-app.d.ts +0 -1
  239. package/client-server-app.js +0 -68
  240. package/client-server-app.js.map +0 -1
  241. package/collections/ai-terminal-conversation.collection.d.ts +0 -2
  242. package/collections/ai-terminal-conversation.collection.js +0 -140
  243. package/collections/ai-terminal-conversation.collection.js.map +0 -1
  244. package/collections/ai-terminal-issue-report.collection.d.ts +0 -2
  245. package/collections/ai-terminal-issue-report.collection.js +0 -148
  246. package/collections/ai-terminal-issue-report.collection.js.map +0 -1
  247. package/collections/ai-terminal-message.collection.d.ts +0 -2
  248. package/collections/ai-terminal-message.collection.js +0 -121
  249. package/collections/ai-terminal-message.collection.js.map +0 -1
  250. package/collections/app-setting.collection.d.ts +0 -3
  251. package/collections/app-setting.collection.js +0 -103
  252. package/collections/app-setting.collection.js.map +0 -1
  253. package/collections/app-status.collection.d.ts +0 -3
  254. package/collections/app-status.collection.js +0 -57
  255. package/collections/app-status.collection.js.map +0 -1
  256. package/collections/communication-metric.collection.d.ts +0 -2
  257. package/collections/communication-metric.collection.js +0 -133
  258. package/collections/communication-metric.collection.js.map +0 -1
  259. package/collections/counter.collection.d.ts +0 -3
  260. package/collections/counter.collection.js +0 -56
  261. package/collections/counter.collection.js.map +0 -1
  262. package/collections/cron-job-history.collection.d.ts +0 -3
  263. package/collections/cron-job-history.collection.js +0 -137
  264. package/collections/cron-job-history.collection.js.map +0 -1
  265. package/collections/cron-job.collection.d.ts +0 -3
  266. package/collections/cron-job.collection.js +0 -92
  267. package/collections/cron-job.collection.js.map +0 -1
  268. package/collections/customer-notification.collection.d.ts +0 -3
  269. package/collections/customer-notification.collection.js +0 -130
  270. package/collections/customer-notification.collection.js.map +0 -1
  271. package/collections/customer-portal-password.collection.d.ts +0 -3
  272. package/collections/customer-portal-password.collection.js +0 -75
  273. package/collections/customer-portal-password.collection.js.map +0 -1
  274. package/collections/email-history.collection.d.ts +0 -3
  275. package/collections/email-history.collection.js +0 -134
  276. package/collections/email-history.collection.js.map +0 -1
  277. package/collections/email-verified.collection.d.ts +0 -3
  278. package/collections/email-verified.collection.js +0 -62
  279. package/collections/email-verified.collection.js.map +0 -1
  280. package/collections/file.collection.d.ts +0 -3
  281. package/collections/file.collection.js +0 -74
  282. package/collections/file.collection.js.map +0 -1
  283. package/collections/flag-update.collection.d.ts +0 -3
  284. package/collections/flag-update.collection.js +0 -57
  285. package/collections/flag-update.collection.js.map +0 -1
  286. package/collections/flag.collection.d.ts +0 -3
  287. package/collections/flag.collection.js +0 -57
  288. package/collections/flag.collection.js.map +0 -1
  289. package/collections/log-method-latency.collection.d.ts +0 -3
  290. package/collections/log-method-latency.collection.js +0 -77
  291. package/collections/log-method-latency.collection.js.map +0 -1
  292. package/collections/log-subscription.collection.d.ts +0 -3
  293. package/collections/log-subscription.collection.js +0 -80
  294. package/collections/log-subscription.collection.js.map +0 -1
  295. package/collections/log.collection.d.ts +0 -3
  296. package/collections/log.collection.js +0 -93
  297. package/collections/log.collection.js.map +0 -1
  298. package/collections/logged-in-users.collection.d.ts +0 -3
  299. package/collections/logged-in-users.collection.js +0 -67
  300. package/collections/logged-in-users.collection.js.map +0 -1
  301. package/collections/monitor-cpu.collection.d.ts +0 -3
  302. package/collections/monitor-cpu.collection.js +0 -65
  303. package/collections/monitor-cpu.collection.js.map +0 -1
  304. package/collections/monitor-function.collection.d.ts +0 -3
  305. package/collections/monitor-function.collection.js +0 -74
  306. package/collections/monitor-function.collection.js.map +0 -1
  307. package/collections/monitor-memory.collection.d.ts +0 -3
  308. package/collections/monitor-memory.collection.js +0 -77
  309. package/collections/monitor-memory.collection.js.map +0 -1
  310. package/collections/monitor-mongo.collection.d.ts +0 -3
  311. package/collections/monitor-mongo.collection.js +0 -71
  312. package/collections/monitor-mongo.collection.js.map +0 -1
  313. package/collections/notification.collection.d.ts +0 -3
  314. package/collections/notification.collection.js +0 -57
  315. package/collections/notification.collection.js.map +0 -1
  316. package/collections/openai-usage-ledger.collection.d.ts +0 -2
  317. package/collections/openai-usage-ledger.collection.js +0 -124
  318. package/collections/openai-usage-ledger.collection.js.map +0 -1
  319. package/collections/report-builder-dashboard-builder.collection.d.ts +0 -3
  320. package/collections/report-builder-dashboard-builder.collection.js +0 -109
  321. package/collections/report-builder-dashboard-builder.collection.js.map +0 -1
  322. package/collections/report-builder-library.collection.d.ts +0 -3
  323. package/collections/report-builder-library.collection.js +0 -87
  324. package/collections/report-builder-library.collection.js.map +0 -1
  325. package/collections/report-builder-report.collection.d.ts +0 -4
  326. package/collections/report-builder-report.collection.js +0 -184
  327. package/collections/report-builder-report.collection.js.map +0 -1
  328. package/collections/user-group.collection.d.ts +0 -4
  329. package/collections/user-group.collection.js +0 -89
  330. package/collections/user-group.collection.js.map +0 -1
  331. package/collections/user-guide.collection.d.ts +0 -3
  332. package/collections/user-guide.collection.js +0 -57
  333. package/collections/user-guide.collection.js.map +0 -1
  334. package/collections/user.collection.d.ts +0 -4
  335. package/collections/user.collection.js +0 -180
  336. package/collections/user.collection.js.map +0 -1
  337. package/cron/cron.d.ts +0 -14
  338. package/cron/cron.js +0 -216
  339. package/cron/cron.js.map +0 -1
  340. package/fixtures/cron-jobs.d.ts +0 -1
  341. package/fixtures/cron-jobs.js +0 -150
  342. package/fixtures/cron-jobs.js.map +0 -1
  343. package/fixtures/init.d.ts +0 -1
  344. package/fixtures/init.js +0 -91
  345. package/fixtures/init.js.map +0 -1
  346. package/http/auth.d.ts +0 -2
  347. package/http/auth.js +0 -951
  348. package/http/auth.js.map +0 -1
  349. package/http/health.d.ts +0 -1
  350. package/http/health.js +0 -11
  351. package/http/health.js.map +0 -1
  352. package/http/home.d.ts +0 -1
  353. package/http/home.js +0 -134
  354. package/http/home.js.map +0 -1
  355. package/http/slow-query-publication.d.ts +0 -2
  356. package/http/slow-query-publication.js +0 -99
  357. package/http/slow-query-publication.js.map +0 -1
  358. package/index.d.ts +0 -1
  359. package/index.js +0 -19
  360. package/index.js.map +0 -1
  361. package/managers/ai-assistant-codex-manager.manager.d.ts +0 -67
  362. package/managers/ai-assistant-codex-manager.manager.js +0 -1113
  363. package/managers/ai-assistant-codex-manager.manager.js.map +0 -1
  364. package/managers/communication-metric.manager.d.ts +0 -16
  365. package/managers/communication-metric.manager.js +0 -134
  366. package/managers/communication-metric.manager.js.map +0 -1
  367. package/managers/cron.manager.d.ts +0 -20
  368. package/managers/cron.manager.js +0 -534
  369. package/managers/cron.manager.js.map +0 -1
  370. package/managers/customer-notification-content.manager.d.ts +0 -55
  371. package/managers/customer-notification-content.manager.js +0 -158
  372. package/managers/customer-notification-content.manager.js.map +0 -1
  373. package/managers/diagnostic-manager-bootstrap.d.ts +0 -9
  374. package/managers/diagnostic-manager-bootstrap.js +0 -260
  375. package/managers/diagnostic-manager-bootstrap.js.map +0 -1
  376. package/managers/error-auto-fix.manager.d.ts +0 -149
  377. package/managers/error-auto-fix.manager.js +0 -3064
  378. package/managers/error-auto-fix.manager.js.map +0 -1
  379. package/managers/local-log.manager.d.ts +0 -18
  380. package/managers/local-log.manager.js +0 -88
  381. package/managers/local-log.manager.js.map +0 -1
  382. package/managers/method.manager.d.ts +0 -84
  383. package/managers/method.manager.js +0 -1964
  384. package/managers/method.manager.js.map +0 -1
  385. package/managers/mongo.manager.d.ts +0 -224
  386. package/managers/mongo.manager.js +0 -5000
  387. package/managers/mongo.manager.js.map +0 -1
  388. package/managers/monitor.manager.d.ts +0 -70
  389. package/managers/monitor.manager.js +0 -550
  390. package/managers/monitor.manager.js.map +0 -1
  391. package/managers/openai-usage-ledger.manager.d.ts +0 -15
  392. package/managers/openai-usage-ledger.manager.js +0 -144
  393. package/managers/openai-usage-ledger.manager.js.map +0 -1
  394. package/managers/slow-query-verifier.manager.d.ts +0 -144
  395. package/managers/slow-query-verifier.manager.js +0 -3857
  396. package/managers/slow-query-verifier.manager.js.map +0 -1
  397. package/managers/slow-query.manager.d.ts +0 -28
  398. package/managers/slow-query.manager.js +0 -468
  399. package/managers/slow-query.manager.js.map +0 -1
  400. package/managers/subscription.manager.d.ts +0 -169
  401. package/managers/subscription.manager.js +0 -3434
  402. package/managers/subscription.manager.js.map +0 -1
  403. package/managers/websocket.manager.d.ts +0 -73
  404. package/managers/websocket.manager.js +0 -673
  405. package/managers/websocket.manager.js.map +0 -1
  406. package/managers/worker-dispatcher.manager.d.ts +0 -120
  407. package/managers/worker-dispatcher.manager.js +0 -1266
  408. package/managers/worker-dispatcher.manager.js.map +0 -1
  409. package/managers/worker-server.manager.d.ts +0 -35
  410. package/managers/worker-server.manager.js +0 -582
  411. package/managers/worker-server.manager.js.map +0 -1
  412. package/methods/accounts.d.ts +0 -2
  413. package/methods/accounts.js +0 -624
  414. package/methods/accounts.js.map +0 -1
  415. package/methods/ai-terminal.d.ts +0 -337
  416. package/methods/ai-terminal.js +0 -23166
  417. package/methods/ai-terminal.js.map +0 -1
  418. package/methods/app-settings.d.ts +0 -2
  419. package/methods/app-settings.js +0 -169
  420. package/methods/app-settings.js.map +0 -1
  421. package/methods/aws.d.ts +0 -2
  422. package/methods/aws.js +0 -877
  423. package/methods/aws.js.map +0 -1
  424. package/methods/collections.d.ts +0 -2
  425. package/methods/collections.js +0 -719
  426. package/methods/collections.js.map +0 -1
  427. package/methods/counters.d.ts +0 -2
  428. package/methods/counters.js +0 -113
  429. package/methods/counters.js.map +0 -1
  430. package/methods/cron-jobs.d.ts +0 -2
  431. package/methods/cron-jobs.js +0 -2475
  432. package/methods/cron-jobs.js.map +0 -1
  433. package/methods/customer-notifications.d.ts +0 -2
  434. package/methods/customer-notifications.js +0 -528
  435. package/methods/customer-notifications.js.map +0 -1
  436. package/methods/diagnostics.d.ts +0 -2
  437. package/methods/diagnostics.js +0 -703
  438. package/methods/diagnostics.js.map +0 -1
  439. package/methods/flag-updates.d.ts +0 -2
  440. package/methods/flag-updates.js +0 -8
  441. package/methods/flag-updates.js.map +0 -1
  442. package/methods/flags.d.ts +0 -2
  443. package/methods/flags.js +0 -8
  444. package/methods/flags.js.map +0 -1
  445. package/methods/logs.d.ts +0 -2
  446. package/methods/logs.js +0 -751
  447. package/methods/logs.js.map +0 -1
  448. package/methods/mongo-explorer.d.ts +0 -2
  449. package/methods/mongo-explorer.js +0 -1808
  450. package/methods/mongo-explorer.js.map +0 -1
  451. package/methods/monitor.d.ts +0 -2
  452. package/methods/monitor.js +0 -543
  453. package/methods/monitor.js.map +0 -1
  454. package/methods/pdf.d.ts +0 -2
  455. package/methods/pdf.js +0 -1216
  456. package/methods/pdf.js.map +0 -1
  457. package/methods/publications.d.ts +0 -1
  458. package/methods/publications.js +0 -183
  459. package/methods/publications.js.map +0 -1
  460. package/methods/report-builder.d.ts +0 -2
  461. package/methods/report-builder.js +0 -3094
  462. package/methods/report-builder.js.map +0 -1
  463. package/methods/support.d.ts +0 -2
  464. package/methods/support.js +0 -430
  465. package/methods/support.js.map +0 -1
  466. package/models/ai-terminal-conversation.model.d.ts +0 -17
  467. package/models/ai-terminal-conversation.model.js +0 -4
  468. package/models/ai-terminal-conversation.model.js.map +0 -1
  469. package/models/ai-terminal-issue-report.model.d.ts +0 -19
  470. package/models/ai-terminal-issue-report.model.js +0 -4
  471. package/models/ai-terminal-issue-report.model.js.map +0 -1
  472. package/models/ai-terminal-message.model.d.ts +0 -22
  473. package/models/ai-terminal-message.model.js +0 -4
  474. package/models/ai-terminal-message.model.js.map +0 -1
  475. package/models/app-setting.model.d.ts +0 -16
  476. package/models/app-setting.model.js +0 -4
  477. package/models/app-setting.model.js.map +0 -1
  478. package/models/app-status.model.js +0 -4
  479. package/models/app-status.model.js.map +0 -1
  480. package/models/billing-logged-in-users.model.js +0 -4
  481. package/models/billing-logged-in-users.model.js.map +0 -1
  482. package/models/collection-document.model.d.ts +0 -21
  483. package/models/collection-document.model.js +0 -4
  484. package/models/collection-document.model.js.map +0 -1
  485. package/models/communication-metric.model.d.ts +0 -20
  486. package/models/communication-metric.model.js +0 -4
  487. package/models/communication-metric.model.js.map +0 -1
  488. package/models/counter.model.js +0 -4
  489. package/models/counter.model.js.map +0 -1
  490. package/models/cron-job-history.model.d.ts +0 -15
  491. package/models/cron-job-history.model.js +0 -4
  492. package/models/cron-job-history.model.js.map +0 -1
  493. package/models/cron-job.model.d.ts +0 -14
  494. package/models/cron-job.model.js +0 -4
  495. package/models/cron-job.model.js.map +0 -1
  496. package/models/customer-notification.model.d.ts +0 -26
  497. package/models/customer-notification.model.js +0 -4
  498. package/models/customer-notification.model.js.map +0 -1
  499. package/models/customer-portal-password.model.d.ts +0 -11
  500. package/models/customer-portal-password.model.js +0 -4
  501. package/models/customer-portal-password.model.js.map +0 -1
  502. package/models/dialog.model.d.ts +0 -23
  503. package/models/dialog.model.js +0 -4
  504. package/models/dialog.model.js.map +0 -1
  505. package/models/email-history.model.d.ts +0 -32
  506. package/models/email-history.model.js.map +0 -1
  507. package/models/email-verified.model.js +0 -4
  508. package/models/email-verified.model.js.map +0 -1
  509. package/models/file.model.js +0 -4
  510. package/models/file.model.js.map +0 -1
  511. package/models/flag-update.model.js +0 -4
  512. package/models/flag-update.model.js.map +0 -1
  513. package/models/flag.model.js +0 -4
  514. package/models/flag.model.js.map +0 -1
  515. package/models/log-method-latency.model.d.ts +0 -10
  516. package/models/log-method-latency.model.js +0 -4
  517. package/models/log-method-latency.model.js.map +0 -1
  518. package/models/log-subscription.model.js +0 -4
  519. package/models/log-subscription.model.js.map +0 -1
  520. package/models/log.model.d.ts +0 -17
  521. package/models/log.model.js +0 -4
  522. package/models/log.model.js.map +0 -1
  523. package/models/logged-in-users.model.js +0 -4
  524. package/models/logged-in-users.model.js.map +0 -1
  525. package/models/method-response.model.js +0 -4
  526. package/models/method-response.model.js.map +0 -1
  527. package/models/method.model.d.ts +0 -26
  528. package/models/method.model.js +0 -4
  529. package/models/method.model.js.map +0 -1
  530. package/models/monitor-cpu.model.js +0 -4
  531. package/models/monitor-cpu.model.js.map +0 -1
  532. package/models/monitor-function.model.d.ts +0 -14
  533. package/models/monitor-function.model.js +0 -4
  534. package/models/monitor-function.model.js.map +0 -1
  535. package/models/monitor-memory.model.d.ts +0 -15
  536. package/models/monitor-memory.model.js +0 -4
  537. package/models/monitor-memory.model.js.map +0 -1
  538. package/models/monitor-mongo.model.d.ts +0 -13
  539. package/models/monitor-mongo.model.js +0 -4
  540. package/models/monitor-mongo.model.js.map +0 -1
  541. package/models/notification.model.js +0 -4
  542. package/models/notification.model.js.map +0 -1
  543. package/models/openai-usage-ledger.model.d.ts +0 -15
  544. package/models/openai-usage-ledger.model.js +0 -4
  545. package/models/openai-usage-ledger.model.js.map +0 -1
  546. package/models/pagination.model.d.ts +0 -11
  547. package/models/pagination.model.js +0 -28
  548. package/models/pagination.model.js.map +0 -1
  549. package/models/permission.model.d.ts +0 -12
  550. package/models/permission.model.js +0 -4
  551. package/models/permission.model.js.map +0 -1
  552. package/models/report-builder-dashboard-builder.model.d.ts +0 -25
  553. package/models/report-builder-dashboard-builder.model.js +0 -4
  554. package/models/report-builder-dashboard-builder.model.js.map +0 -1
  555. package/models/report-builder-library.model.d.ts +0 -17
  556. package/models/report-builder-library.model.js +0 -4
  557. package/models/report-builder-library.model.js.map +0 -1
  558. package/models/report-builder-report.model.d.ts +0 -121
  559. package/models/report-builder-report.model.js +0 -4
  560. package/models/report-builder-report.model.js.map +0 -1
  561. package/models/report-builder.model.d.ts +0 -61
  562. package/models/report-builder.model.js +0 -4
  563. package/models/report-builder.model.js.map +0 -1
  564. package/models/select-data-label.model.d.ts +0 -9
  565. package/models/select-data-label.model.js +0 -4
  566. package/models/select-data-label.model.js.map +0 -1
  567. package/models/server-message.model.d.ts +0 -32
  568. package/models/server-message.model.js +0 -4
  569. package/models/server-message.model.js.map +0 -1
  570. package/models/slow-query-report.model.d.ts +0 -23
  571. package/models/slow-query-report.model.js +0 -4
  572. package/models/slow-query-report.model.js.map +0 -1
  573. package/models/subscription.model.d.ts +0 -31
  574. package/models/subscription.model.js +0 -4
  575. package/models/subscription.model.js.map +0 -1
  576. package/models/support-ticket.model.d.ts +0 -87
  577. package/models/support-ticket.model.js +0 -4
  578. package/models/support-ticket.model.js.map +0 -1
  579. package/models/user-group.model.d.ts +0 -20
  580. package/models/user-group.model.js +0 -4
  581. package/models/user-group.model.js.map +0 -1
  582. package/models/user-guide.model.js +0 -4
  583. package/models/user-guide.model.js.map +0 -1
  584. package/models/user.model.d.ts +0 -84
  585. package/models/user.model.js +0 -4
  586. package/models/user.model.js.map +0 -1
  587. package/private/images/ResolveIO.png +0 -0
  588. package/public_api.js +0 -118
  589. package/public_api.js.map +0 -1
  590. package/publications/ai-terminal.d.ts +0 -1
  591. package/publications/ai-terminal.js +0 -122
  592. package/publications/ai-terminal.js.map +0 -1
  593. package/publications/app-settings.d.ts +0 -2
  594. package/publications/app-settings.js +0 -28
  595. package/publications/app-settings.js.map +0 -1
  596. package/publications/app-status.d.ts +0 -2
  597. package/publications/app-status.js +0 -16
  598. package/publications/app-status.js.map +0 -1
  599. package/publications/cron-jobs.d.ts +0 -2
  600. package/publications/cron-jobs.js +0 -88
  601. package/publications/cron-jobs.js.map +0 -1
  602. package/publications/customer-notifications.d.ts +0 -2
  603. package/publications/customer-notifications.js +0 -161
  604. package/publications/customer-notifications.js.map +0 -1
  605. package/publications/files.d.ts +0 -2
  606. package/publications/files.js +0 -36
  607. package/publications/files.js.map +0 -1
  608. package/publications/flags-update.d.ts +0 -2
  609. package/publications/flags-update.js +0 -22
  610. package/publications/flags-update.js.map +0 -1
  611. package/publications/flags.d.ts +0 -2
  612. package/publications/flags.js +0 -22
  613. package/publications/flags.js.map +0 -1
  614. package/publications/logs.d.ts +0 -2
  615. package/publications/logs.js +0 -164
  616. package/publications/logs.js.map +0 -1
  617. package/publications/notifications.d.ts +0 -2
  618. package/publications/notifications.js +0 -16
  619. package/publications/notifications.js.map +0 -1
  620. package/publications/report-builder-dashboard-builders.d.ts +0 -2
  621. package/publications/report-builder-dashboard-builders.js +0 -42
  622. package/publications/report-builder-dashboard-builders.js.map +0 -1
  623. package/publications/report-builder-libraries.d.ts +0 -2
  624. package/publications/report-builder-libraries.js +0 -90
  625. package/publications/report-builder-libraries.js.map +0 -1
  626. package/publications/report-builder-reports.d.ts +0 -2
  627. package/publications/report-builder-reports.js +0 -50
  628. package/publications/report-builder-reports.js.map +0 -1
  629. package/publications/super-admin.d.ts +0 -2
  630. package/publications/super-admin.js +0 -16
  631. package/publications/super-admin.js.map +0 -1
  632. package/publications/user-groups.d.ts +0 -1
  633. package/publications/user-groups.js +0 -16
  634. package/publications/user-groups.js.map +0 -1
  635. package/publications/user-guides.d.ts +0 -1
  636. package/publications/user-guides.js +0 -16
  637. package/publications/user-guides.js.map +0 -1
  638. package/resolveio-server-app.d.ts +0 -70
  639. package/resolveio-server-app.js +0 -801
  640. package/resolveio-server-app.js.map +0 -1
  641. package/server-app.d.ts +0 -228
  642. package/server-app.js +0 -3566
  643. package/server-app.js.map +0 -1
  644. package/services/codex-client.d.ts +0 -128
  645. package/services/codex-client.js +0 -1629
  646. package/services/codex-client.js.map +0 -1
  647. package/services/openai-client.d.ts +0 -46
  648. package/services/openai-client.js +0 -318
  649. package/services/openai-client.js.map +0 -1
  650. package/types/error-report.d.ts +0 -25
  651. package/types/error-report.js +0 -4
  652. package/types/error-report.js.map +0 -1
  653. package/types/slow-query-report.d.ts +0 -27
  654. package/types/slow-query-report.js +0 -6
  655. package/types/slow-query-report.js.map +0 -1
  656. package/util/ai-qa-policy.d.ts +0 -124
  657. package/util/ai-qa-policy.js +0 -736
  658. package/util/ai-qa-policy.js.map +0 -1
  659. package/util/ai-runner-artifacts.d.ts +0 -82
  660. package/util/ai-runner-artifacts.js +0 -713
  661. package/util/ai-runner-artifacts.js.map +0 -1
  662. package/util/ai-runner-qa-auth.d.ts +0 -5
  663. package/util/ai-runner-qa-auth.js +0 -822
  664. package/util/ai-runner-qa-auth.js.map +0 -1
  665. package/util/ai-runner-qa-tools.d.ts +0 -25
  666. package/util/ai-runner-qa-tools.js +0 -2910
  667. package/util/ai-runner-qa-tools.js.map +0 -1
  668. package/util/aicoder-runner-v6.d.ts +0 -168
  669. package/util/aicoder-runner-v6.js +0 -347
  670. package/util/aicoder-runner-v6.js.map +0 -1
  671. package/util/common.d.ts +0 -31
  672. package/util/common.js +0 -683
  673. package/util/common.js.map +0 -1
  674. package/util/customer-portal-password.d.ts +0 -13
  675. package/util/customer-portal-password.js +0 -209
  676. package/util/customer-portal-password.js.map +0 -1
  677. package/util/error-reporter.d.ts +0 -52
  678. package/util/error-reporter.js +0 -326
  679. package/util/error-reporter.js.map +0 -1
  680. package/util/error-tracking.d.ts +0 -13
  681. package/util/error-tracking.js +0 -120
  682. package/util/error-tracking.js.map +0 -1
  683. package/util/report-builder-unwinds.d.ts +0 -15
  684. package/util/report-builder-unwinds.js +0 -156
  685. package/util/report-builder-unwinds.js.map +0 -1
  686. package/util/runner-process-janitor.d.ts +0 -27
  687. package/util/runner-process-janitor.js +0 -208
  688. package/util/runner-process-janitor.js.map +0 -1
  689. package/util/schema-report-builder.d.ts +0 -6
  690. package/util/schema-report-builder.js +0 -481
  691. package/util/schema-report-builder.js.map +0 -1
  692. package/util/slow-query-reporter.d.ts +0 -28
  693. package/util/slow-query-reporter.js +0 -226
  694. package/util/slow-query-reporter.js.map +0 -1
  695. package/util/subscription-dependency-context.d.ts +0 -34
  696. package/util/subscription-dependency-context.js +0 -1283
  697. package/util/subscription-dependency-context.js.map +0 -1
  698. package/util/support-runner-v5.d.ts +0 -250
  699. package/util/support-runner-v5.js +0 -634
  700. package/util/support-runner-v5.js.map +0 -1
  701. package/util/tokenizer.d.ts +0 -5
  702. package/util/tokenizer.js +0 -41
  703. package/util/tokenizer.js.map +0 -1
  704. package/workers/codex-runner.worker.d.ts +0 -1
  705. package/workers/codex-runner.worker.js +0 -192
  706. package/workers/codex-runner.worker.js.map +0 -1
  707. /package/{private → src/private}/email-templates/enrollment.html +0 -0
  708. /package/{private → src/private}/email-templates/forgot-password.html +0 -0
  709. /package/{private → src/private}/email-templates/support-ticket-deleted.html +0 -0
  710. /package/{private → src/private}/email-templates/support-ticket-modified.html +0 -0
  711. /package/{private → src/private}/email-templates/support-ticket.html +0 -0
@@ -0,0 +1,183 @@
1
+ import { CustomerPortalPasswords } from '../collections/customer-portal-password.collection';
2
+ import { UserModel } from '../models/user.model';
3
+ import { ResolveIOServer } from '../resolveio-server-app';
4
+ const crypto = require('crypto');
5
+
6
+ const ALGORITHM = 'aes-256-gcm';
7
+ const ENCRYPTION_KEY_VERSION = 1;
8
+ const IV_LENGTH_BYTES = 12;
9
+
10
+ interface PasswordCipherPayload {
11
+ cipherText: string;
12
+ iv: string;
13
+ authTag: string;
14
+ keyVersion: number;
15
+ }
16
+
17
+ interface PasswordRecordMeta {
18
+ updatedByUserId?: string;
19
+ updatedByUser?: string;
20
+ }
21
+
22
+ export function isCustomerPortalUser(user: UserModel | any): boolean {
23
+ if (!user || typeof user !== 'object') {
24
+ return false;
25
+ }
26
+
27
+ const other = user.other || {};
28
+ if (other.id_customer) {
29
+ return true;
30
+ }
31
+
32
+ if (Array.isArray(other.customers) && other.customers.length > 0) {
33
+ return true;
34
+ }
35
+
36
+ const groups = Array.isArray(user?.roles?.groups) ? user.roles.groups : [];
37
+ if (groups.some(group => {
38
+ if (!group || typeof group.name !== 'string') {
39
+ return false;
40
+ }
41
+
42
+ const normalized = group.name.trim().toLowerCase();
43
+ return normalized === 'customer portal' || normalized === 'customer-portal';
44
+ })) {
45
+ return true;
46
+ }
47
+
48
+ return false;
49
+ }
50
+
51
+ export async function saveCustomerPortalPassword(user: UserModel | any, password: string, meta?: PasswordRecordMeta): Promise<void> {
52
+ if (!user?._id) {
53
+ return;
54
+ }
55
+
56
+ if (!CustomerPortalPasswords) {
57
+ return;
58
+ }
59
+
60
+ if (!isCustomerPortalUser(user)) {
61
+ await clearCustomerPortalPassword(user._id);
62
+ return;
63
+ }
64
+
65
+ if (!password || typeof password !== 'string') {
66
+ await clearCustomerPortalPassword(user._id);
67
+ return;
68
+ }
69
+
70
+ const payload = encryptPassword(password);
71
+ const setData: any = {
72
+ id_user: user._id,
73
+ cipher_text: payload.cipherText,
74
+ iv: payload.iv,
75
+ auth_tag: payload.authTag,
76
+ key_version: payload.keyVersion,
77
+ last_set_at: new Date()
78
+ };
79
+
80
+ if (meta?.updatedByUserId) {
81
+ setData.updated_by_user_id = meta.updatedByUserId;
82
+ }
83
+
84
+ if (meta?.updatedByUser) {
85
+ setData.updated_by_user = meta.updatedByUser;
86
+ }
87
+
88
+ await CustomerPortalPasswords.updateOne(
89
+ {id_user: user._id},
90
+ {
91
+ $set: setData
92
+ },
93
+ {upsert: true}
94
+ );
95
+ }
96
+
97
+ export async function clearCustomerPortalPassword(userId: string): Promise<void> {
98
+ if (!userId || !CustomerPortalPasswords) {
99
+ return;
100
+ }
101
+
102
+ await CustomerPortalPasswords.deleteOne({id_user: userId});
103
+ }
104
+
105
+ export async function getDecryptedCustomerPortalPassword(userId: string): Promise<{password: string; lastSetAt?: Date}> {
106
+ if (!userId) {
107
+ throw new Error('Customer portal user id is required.');
108
+ }
109
+
110
+ if (!CustomerPortalPasswords) {
111
+ throw new Error('Customer portal password store is not available.');
112
+ }
113
+
114
+ const record = await CustomerPortalPasswords.findOne({id_user: userId});
115
+ if (!record) {
116
+ throw new Error('No stored customer portal password is available for this user.');
117
+ }
118
+
119
+ const password = decryptPassword({
120
+ cipherText: record.cipher_text,
121
+ iv: record.iv,
122
+ authTag: record.auth_tag,
123
+ keyVersion: record.key_version
124
+ });
125
+
126
+ return {
127
+ password,
128
+ lastSetAt: record.last_set_at
129
+ };
130
+ }
131
+
132
+ function encryptPassword(plainText: string): PasswordCipherPayload {
133
+ const key = resolveEncryptionKey();
134
+ const ivBuffer = crypto.randomBytes(IV_LENGTH_BYTES);
135
+ const cipher = crypto.createCipheriv(ALGORITHM, key, ivBuffer);
136
+ const encrypted = Buffer.concat([cipher.update(plainText, 'utf8'), cipher.final()]);
137
+ const authTag = cipher.getAuthTag();
138
+
139
+ return {
140
+ cipherText: encrypted.toString('base64'),
141
+ iv: ivBuffer.toString('base64'),
142
+ authTag: authTag.toString('base64'),
143
+ keyVersion: ENCRYPTION_KEY_VERSION
144
+ };
145
+ }
146
+
147
+ function decryptPassword(payload: PasswordCipherPayload): string {
148
+ if (!payload || payload.keyVersion !== ENCRYPTION_KEY_VERSION) {
149
+ throw new Error('Unsupported customer portal password encryption version.');
150
+ }
151
+
152
+ const key = resolveEncryptionKey();
153
+ const decipher = crypto.createDecipheriv(
154
+ ALGORITHM,
155
+ key,
156
+ Buffer.from(payload.iv, 'base64')
157
+ );
158
+ decipher.setAuthTag(Buffer.from(payload.authTag, 'base64'));
159
+
160
+ const decrypted = Buffer.concat([
161
+ decipher.update(Buffer.from(payload.cipherText, 'base64')),
162
+ decipher.final()
163
+ ]);
164
+
165
+ return decrypted.toString('utf8');
166
+ }
167
+
168
+ function resolveEncryptionKey(): Buffer {
169
+ const config = ResolveIOServer.getServerConfig ? ResolveIOServer.getServerConfig() : {};
170
+ const secret = String(
171
+ (config && config['CUSTOMER_PORTAL_PASSWORD_SECRET'])
172
+ || process.env.CUSTOMER_PORTAL_PASSWORD_SECRET
173
+ || (config && config['JWT_SECRET'])
174
+ || process.env.JWT_SECRET
175
+ || ''
176
+ ).trim();
177
+
178
+ if (!secret) {
179
+ throw new Error('Missing CUSTOMER_PORTAL_PASSWORD_SECRET (or JWT_SECRET) for customer portal password encryption.');
180
+ }
181
+
182
+ return crypto.createHash('sha256').update(secret, 'utf8').digest();
183
+ }
@@ -0,0 +1,332 @@
1
+ import { createHash } from 'crypto';
2
+ import { ResolveIOServer } from '../resolveio-server-app';
3
+
4
+ // eslint-disable-next-line no-unused-vars
5
+ type FetchLike = (input: RequestInfo, init?: RequestInit) => Promise<Response>;
6
+
7
+ export interface ErrorReportAttachment {
8
+ name: string;
9
+ url?: string;
10
+ contentType?: string;
11
+ size?: number;
12
+ }
13
+
14
+ export interface ErrorReportOptions {
15
+ sourceApp?: string;
16
+ message?: string;
17
+ subject?: string;
18
+ environment?: string;
19
+ clientId?: string;
20
+ clientSlug?: string;
21
+ clientName?: string;
22
+ clientRepo?: string;
23
+ clientEmail?: string;
24
+ severity?: string;
25
+ stack?: string | Error;
26
+ error?: unknown;
27
+ context?: Record<string, any> | string | null;
28
+ metadata?: Record<string, any> | string | null;
29
+ attachments?: ErrorReportAttachment[];
30
+ fingerprint?: string;
31
+ idempotencyKey?: string;
32
+ reportedBy?: string;
33
+ reportedAt?: string | Date;
34
+ reportedFor?: string;
35
+ reportedCount?: number;
36
+ reportedSourceHost?: string;
37
+ reportedSourceIp?: string;
38
+ reportedSourceVersion?: string;
39
+ reportedSourcePid?: number;
40
+ reportedSourceInstance?: string;
41
+ reportedSourceRegion?: string;
42
+ reportedSourceCluster?: string;
43
+ reportedSourceProcess?: string;
44
+ reportedSourceEnv?: Record<string, any>;
45
+ correlationId?: string;
46
+ apiUrl?: string;
47
+ fetch?: FetchLike;
48
+ logger?: Pick<typeof console, 'error' | 'warn' | 'info' | 'log'>;
49
+ }
50
+
51
+ export interface ErrorReportResult {
52
+ delivered: boolean;
53
+ status?: number;
54
+ reason?: string;
55
+ }
56
+
57
+ interface ErrorReportPayload {
58
+ sourceApp: string;
59
+ message: string;
60
+ environment?: string;
61
+ clientId?: string;
62
+ clientSlug?: string;
63
+ clientName?: string;
64
+ clientRepo?: string;
65
+ clientEmail?: string;
66
+ severity: string;
67
+ stack?: string;
68
+ context?: Record<string, any> | string;
69
+ metadata?: Record<string, any> | string;
70
+ attachments?: ErrorReportAttachment[];
71
+ fingerprint?: string;
72
+ idempotencyKey?: string;
73
+ reportedBy?: string;
74
+ reportedAt?: Date;
75
+ reportedFor?: string;
76
+ reportedCount?: number;
77
+ reportedSourceHost?: string;
78
+ reportedSourceIp?: string;
79
+ reportedSourceVersion?: string;
80
+ reportedSourcePid?: number;
81
+ reportedSourceInstance?: string;
82
+ reportedSourceRegion?: string;
83
+ reportedSourceCluster?: string;
84
+ reportedSourceProcess?: string;
85
+ reportedSourceEnv?: Record<string, any>;
86
+ }
87
+
88
+ export class ErrorReporter {
89
+ public static async report(options: ErrorReportOptions): Promise<ErrorReportResult> {
90
+ const logger = options.logger || console;
91
+ const config = getServerConfig();
92
+ const clientName = options.clientName || config?.CLIENT_NAME || ResolveIOServer.getClientName?.() || 'resolveio';
93
+ const sourceApp = options.sourceApp || clientName || 'resolveio-server-lib';
94
+ const environment = options.environment || process.env.RESOLVEIO_ENV || config?.RESOLVEIO_ENV || config?.ENVIRONMENT || config?.ROOT_URL || process.env.NODE_ENV || 'unknown';
95
+ const message = options.message || options.subject || 'ResolveIO Error Detected';
96
+ const severity = options.severity || 'error';
97
+ const stack = normalizeStack(options.stack || options.error);
98
+ const context = normalizeStructured(options.context, options.correlationId);
99
+ const metadata = normalizeStructured(mergeMetadata(options.metadata, options.correlationId));
100
+ const attachments = Array.isArray(options.attachments) ? normalizeAttachments(options.attachments) : undefined;
101
+ const fingerprint = options.fingerprint || computeFingerprint(sourceApp, environment, message, stack);
102
+ const idempotencyKey = options.idempotencyKey;
103
+ const reportedAt = normalizeReportedAtDate(options.reportedAt);
104
+ const normalizedReportedSourceEnv = normalizeStructured(options.reportedSourceEnv);
105
+ const payload: ErrorReportPayload = removeEmptyFields({
106
+ sourceApp,
107
+ message,
108
+ environment,
109
+ clientId: options.clientId,
110
+ clientSlug: options.clientSlug,
111
+ clientName,
112
+ clientRepo: options.clientRepo,
113
+ clientEmail: options.clientEmail,
114
+ severity,
115
+ stack,
116
+ context,
117
+ metadata,
118
+ attachments,
119
+ fingerprint,
120
+ idempotencyKey,
121
+ reportedBy: options.reportedBy,
122
+ reportedAt,
123
+ reportedFor: options.reportedFor,
124
+ reportedCount: options.reportedCount,
125
+ reportedSourceHost: options.reportedSourceHost,
126
+ reportedSourceIp: options.reportedSourceIp,
127
+ reportedSourceVersion: options.reportedSourceVersion,
128
+ reportedSourcePid: options.reportedSourcePid,
129
+ reportedSourceInstance: options.reportedSourceInstance,
130
+ reportedSourceRegion: options.reportedSourceRegion,
131
+ reportedSourceCluster: options.reportedSourceCluster,
132
+ reportedSourceProcess: options.reportedSourceProcess,
133
+ reportedSourceEnv: typeof normalizedReportedSourceEnv === 'string' ? undefined : normalizedReportedSourceEnv as Record<string, any>
134
+ });
135
+
136
+ const manager = ResolveIOServer['AutoFixManager'];
137
+ if (!manager || typeof manager.ingestErrorReport !== 'function') {
138
+ logger.error('ErrorReporter failed: local AutoFixManager is not available');
139
+ logger.error('ErrorReporter payload (not ingested):', payload);
140
+ return { delivered: false, reason: 'local-manager-missing' };
141
+ }
142
+ if (typeof manager.isReady === 'function' && !manager.isReady()) {
143
+ logger.error('ErrorReporter failed: local AutoFixManager is not enabled');
144
+ logger.error('ErrorReporter payload (not ingested):', payload);
145
+ return { delivered: false, reason: 'local-manager-not-ready' };
146
+ }
147
+ try {
148
+ const result = await manager.ingestErrorReport(payload);
149
+ return {
150
+ delivered: true,
151
+ status: 200,
152
+ reason: result?.status || 'recorded'
153
+ };
154
+ }
155
+ catch (err) {
156
+ logger.error('ErrorReporter local ingestion failed', err);
157
+ logger.error('ErrorReporter payload (not ingested):', payload);
158
+ return { delivered: false, reason: 'local-ingest-failed' };
159
+ }
160
+ }
161
+ }
162
+
163
+ function getServerConfig(): Record<string, any> | null {
164
+ try {
165
+ return ResolveIOServer.getServerConfig?.() || null;
166
+ }
167
+ catch (err) {
168
+ console.error('Failed to read ResolveIO server config', err);
169
+ return null;
170
+ }
171
+ }
172
+
173
+ function normalizeStack(stack?: string | Error | unknown): string | undefined {
174
+ if (!stack) {
175
+ return undefined;
176
+ }
177
+
178
+ if (typeof stack === 'string') {
179
+ return stack;
180
+ }
181
+
182
+ if (stack instanceof Error) {
183
+ return stack.stack || stack.message;
184
+ }
185
+
186
+ if (typeof stack === 'object' && stack !== null && typeof (stack as Record<string, any>).stack === 'string') {
187
+ return (stack as Record<string, any>).stack;
188
+ }
189
+
190
+ if (typeof stack === 'object' && stack !== null && typeof (stack as Record<string, any>).message === 'string') {
191
+ return (stack as Record<string, any>).message;
192
+ }
193
+
194
+ return JSON.stringify(stack);
195
+ }
196
+
197
+ function normalizeStructured(value: any, correlationId?: string): Record<string, any> | string | undefined {
198
+ if (value === null || value === undefined) {
199
+ return undefined;
200
+ }
201
+
202
+ if (typeof value === 'string') {
203
+ return value;
204
+ }
205
+
206
+ const serialized = serializeValue(value);
207
+ if (correlationId && typeof serialized === 'object' && serialized !== null && !serialized.correlationId) {
208
+ serialized.correlationId = correlationId;
209
+ }
210
+ return serialized;
211
+ }
212
+
213
+ function serializeValue(value: any, seen: WeakSet<object> = new WeakSet()): any {
214
+ if (value === null || value === undefined) {
215
+ return value;
216
+ }
217
+
218
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
219
+ return value;
220
+ }
221
+
222
+ if (typeof value === 'bigint') {
223
+ return value.toString();
224
+ }
225
+
226
+ if (value instanceof Date) {
227
+ return isNaN(value.getTime()) ? null : value.toISOString();
228
+ }
229
+
230
+ if (value instanceof Error) {
231
+ const base = {
232
+ name: value.name,
233
+ message: value.message,
234
+ stack: value.stack
235
+ };
236
+ return Object.assign({}, base, serializeValue(Object.assign({}, value), seen));
237
+ }
238
+
239
+ if (Array.isArray(value)) {
240
+ if (seen.has(value)) {
241
+ return '[Circular]';
242
+ }
243
+ seen.add(value);
244
+ const arr = value.map(item => serializeValue(item, seen));
245
+ seen.delete(value);
246
+ return arr;
247
+ }
248
+
249
+ if (typeof value === 'object') {
250
+ if (seen.has(value)) {
251
+ return '[Circular]';
252
+ }
253
+ seen.add(value);
254
+ const obj: Record<string, any> = {};
255
+ for (const [key, val] of Object.entries(value)) {
256
+ obj[key] = serializeValue(val, seen);
257
+ }
258
+ seen.delete(value);
259
+ return obj;
260
+ }
261
+
262
+ return String(value);
263
+ }
264
+
265
+ function normalizeAttachments(attachments: ErrorReportAttachment[]): ErrorReportAttachment[] {
266
+ return attachments
267
+ .filter(att => !!att && typeof att === 'object')
268
+ .map(att => removeEmptyFields({
269
+ name: att.name,
270
+ url: att.url,
271
+ contentType: att.contentType,
272
+ size: typeof att.size === 'number' ? att.size : undefined
273
+ }))
274
+ .filter(att => !!att.name);
275
+ }
276
+
277
+ function normalizeReportedAtDate(value?: string | Date): Date {
278
+ if (!value) {
279
+ return new Date();
280
+ }
281
+
282
+ if (value instanceof Date) {
283
+ return isNaN(value.getTime()) ? new Date() : value;
284
+ }
285
+
286
+ const date = new Date(value);
287
+ if (!isNaN(date.getTime())) {
288
+ return date;
289
+ }
290
+
291
+ return new Date();
292
+ }
293
+
294
+ function computeFingerprint(sourceApp: string, environment: string | undefined, message: string, stack?: string): string | undefined {
295
+ const signature = `${sourceApp || ''}:${environment || ''}:${message || ''}:${stack ? stack.split('\n').slice(0, 5).join('|') : ''}`;
296
+ return createHash('sha256').update(signature).digest('hex');
297
+ }
298
+
299
+ function removeEmptyFields<T extends Record<string, any>>(obj: T): T {
300
+ const cleaned: Record<string, any> = {};
301
+ for (const [key, value] of Object.entries(obj || {})) {
302
+ if (value === undefined || value === null || value === '') {
303
+ continue;
304
+ }
305
+ cleaned[key] = value;
306
+ }
307
+ return cleaned as T;
308
+ }
309
+
310
+ function mergeMetadata(metadata: Record<string, any> | string | null | undefined, correlationId?: string) {
311
+ if (!metadata && !correlationId) {
312
+ return undefined;
313
+ }
314
+
315
+ const base = metadata ? normalizeStructured(metadata) : undefined;
316
+ if (!correlationId) {
317
+ return base;
318
+ }
319
+
320
+ if (typeof base === 'string') {
321
+ return {
322
+ correlationId,
323
+ message: base
324
+ };
325
+ }
326
+
327
+ const metadataObj = (base || {}) as Record<string, any>;
328
+ if (!metadataObj.correlationId) {
329
+ metadataObj.correlationId = correlationId;
330
+ }
331
+ return metadataObj;
332
+ }
@@ -0,0 +1,79 @@
1
+ import { AsyncLocalStorage } from 'async_hooks';
2
+ import { objectIdHexString } from './common';
3
+
4
+ export interface ErrorContextData {
5
+ correlationId?: string;
6
+ }
7
+
8
+ const errorContext = new AsyncLocalStorage<ErrorContextData>();
9
+
10
+ export function getCorrelationId(): string | undefined {
11
+ return errorContext.getStore()?.correlationId;
12
+ }
13
+
14
+ export function setCorrelationId(correlationId: string) {
15
+ const store = errorContext.getStore();
16
+ if (store) {
17
+ store.correlationId = correlationId;
18
+ }
19
+ }
20
+
21
+ export function ensureCorrelationId(fallbackId?: string): string {
22
+ let correlationId = getCorrelationId();
23
+ if (!correlationId) {
24
+ correlationId = fallbackId || objectIdHexString();
25
+ errorContext.enterWith({ correlationId });
26
+ }
27
+ return correlationId;
28
+ }
29
+
30
+ export async function runWithCorrelationContext<T>(correlationId: string, fn: () => Promise<T> | T): Promise<T> {
31
+ const store = errorContext.getStore();
32
+ if (store && store.correlationId === correlationId) {
33
+ return await fn();
34
+ }
35
+
36
+ return await errorContext.run({ correlationId }, async () => await fn());
37
+ }
38
+
39
+ type NormalizedError = Error & Record<string, any>;
40
+
41
+ function coerceError(error: unknown): NormalizedError {
42
+ if (error instanceof Error) {
43
+ return error as NormalizedError;
44
+ }
45
+
46
+ if (typeof error === 'object' && error !== null) {
47
+ const errObject = error as Record<string, any>;
48
+ if (typeof errObject.message !== 'string') {
49
+ errObject.message = JSON.stringify(errObject);
50
+ }
51
+ if (typeof errObject.name !== 'string') {
52
+ errObject.name = errObject.constructor && errObject.constructor.name !== 'Object' ? errObject.constructor.name : 'Error';
53
+ }
54
+ if (typeof errObject.stack !== 'string') {
55
+ errObject.stack = new Error(errObject.message).stack;
56
+ }
57
+ return errObject as NormalizedError;
58
+ }
59
+
60
+ const wrappedError = new Error(String(error));
61
+ (wrappedError as Record<string, any>).originalValue = error;
62
+ return wrappedError as NormalizedError;
63
+ }
64
+
65
+ export function ensureErrorWithCorrelation(error: unknown, fallbackId?: string): { error: NormalizedError, correlationId: string } {
66
+ const normalizedError = coerceError(error);
67
+ let correlationId: string = normalizedError.errorId || normalizedError.correlationId;
68
+
69
+ if (typeof correlationId !== 'string' || !correlationId) {
70
+ correlationId = getCorrelationId() || fallbackId || objectIdHexString();
71
+ }
72
+
73
+ normalizedError.errorId = correlationId;
74
+ normalizedError.correlationId = correlationId;
75
+
76
+ setCorrelationId(correlationId);
77
+
78
+ return { error: normalizedError, correlationId };
79
+ }
@@ -0,0 +1,114 @@
1
+ import { ResolveIOServer } from '../resolveio-server-app';
2
+ import { round } from './common';
3
+
4
+ export type OpenAIUsagePricingConfig = {
5
+ inputPer1k: number;
6
+ cachedInputPer1k?: number;
7
+ outputPer1k: number;
8
+ };
9
+
10
+ const GPT_5_5_PRICING: OpenAIUsagePricingConfig = { inputPer1k: 0.005, cachedInputPer1k: 0.0005, outputPer1k: 0.03 };
11
+ const GPT_5_4_PRICING: OpenAIUsagePricingConfig = { inputPer1k: 0.0025, cachedInputPer1k: 0.00025, outputPer1k: 0.015 };
12
+ const GPT_5_4_MINI_PRICING: OpenAIUsagePricingConfig = { inputPer1k: 0.00075, cachedInputPer1k: 0.000075, outputPer1k: 0.0045 };
13
+
14
+ const DEFAULT_OPENAI_MODEL_PRICING: Record<string, OpenAIUsagePricingConfig> = {
15
+ 'gpt-5.5': GPT_5_5_PRICING,
16
+ 'gpt-5.5-codex': GPT_5_5_PRICING,
17
+ 'gpt-5-codex': GPT_5_5_PRICING,
18
+ 'gpt-5.3-codex': GPT_5_5_PRICING,
19
+ 'gpt-5.3-codex-spark': GPT_5_5_PRICING,
20
+ 'gpt-5.2-codex': GPT_5_5_PRICING,
21
+ 'gpt-5.4': GPT_5_4_PRICING,
22
+ 'gpt-5.4-codex': GPT_5_4_PRICING,
23
+ 'gpt-5.4-mini': GPT_5_4_MINI_PRICING,
24
+ 'gpt-5.4-mini-codex': GPT_5_4_MINI_PRICING,
25
+ 'codex-mini-latest': GPT_5_4_MINI_PRICING
26
+ };
27
+
28
+ const toNumber = (value: any): number => {
29
+ const parsed = Number(value);
30
+ return Number.isFinite(parsed) ? parsed : 0;
31
+ };
32
+
33
+ const normalizeModelKey = (value: string): string => {
34
+ return String(value || '').trim().toLowerCase();
35
+ };
36
+
37
+ const parsePricingJson = (raw: string): Record<string, OpenAIUsagePricingConfig> => {
38
+ if (!raw) {
39
+ return {};
40
+ }
41
+ try {
42
+ const parsed = JSON.parse(raw);
43
+ if (!parsed || typeof parsed !== 'object') {
44
+ return {};
45
+ }
46
+ const out: Record<string, OpenAIUsagePricingConfig> = {};
47
+ Object.keys(parsed).forEach((key) => {
48
+ const entry = parsed[key] || {};
49
+ const inputPer1k = toNumber(entry.inputPer1k ?? entry.input ?? entry.prompt ?? 0);
50
+ const cachedInputPer1k = toNumber(entry.cachedInputPer1k ?? entry.cachedInput ?? entry.cached ?? entry.promptCached ?? 0);
51
+ const outputPer1k = toNumber(entry.outputPer1k ?? entry.output ?? entry.completion ?? 0);
52
+ if (inputPer1k || cachedInputPer1k || outputPer1k) {
53
+ out[normalizeModelKey(key)] = { inputPer1k, cachedInputPer1k, outputPer1k };
54
+ }
55
+ });
56
+ return out;
57
+ }
58
+ catch {
59
+ return {};
60
+ }
61
+ };
62
+
63
+ const resolvePricingConfig = (): {
64
+ perModel: Record<string, OpenAIUsagePricingConfig>;
65
+ defaultPricing: OpenAIUsagePricingConfig;
66
+ } => {
67
+ const config = ResolveIOServer.getServerConfig() || {};
68
+ const rawJson = String(config['OPENAI_MODEL_PRICING'] ?? process.env.OPENAI_MODEL_PRICING ?? '').trim();
69
+ const defaultInput = toNumber(config['OPENAI_COST_PER_1K_INPUT_TOKENS'] ?? process.env.OPENAI_COST_PER_1K_INPUT_TOKENS ?? 0);
70
+ const defaultCachedInput = toNumber(
71
+ config['OPENAI_COST_PER_1K_CACHED_INPUT_TOKENS']
72
+ ?? process.env.OPENAI_COST_PER_1K_CACHED_INPUT_TOKENS
73
+ ?? process.env.OPENAI_COST_PER_1K_CACHED_TOKENS
74
+ ?? 0
75
+ );
76
+ const defaultOutput = toNumber(config['OPENAI_COST_PER_1K_OUTPUT_TOKENS'] ?? process.env.OPENAI_COST_PER_1K_OUTPUT_TOKENS ?? 0);
77
+ return {
78
+ perModel: { ...DEFAULT_OPENAI_MODEL_PRICING, ...parsePricingJson(rawJson) },
79
+ defaultPricing: { inputPer1k: defaultInput, cachedInputPer1k: defaultCachedInput, outputPer1k: defaultOutput }
80
+ };
81
+ };
82
+
83
+ const resolveModelPricing = (
84
+ model: string,
85
+ perModel: Record<string, OpenAIUsagePricingConfig>,
86
+ defaultPricing: OpenAIUsagePricingConfig
87
+ ): OpenAIUsagePricingConfig => {
88
+ const normalizedModel = normalizeModelKey(model);
89
+ if (perModel[normalizedModel]) {
90
+ return perModel[normalizedModel];
91
+ }
92
+ const prefix = Object.keys(perModel)
93
+ .sort((a, b) => b.length - a.length)
94
+ .find((key) => normalizedModel.startsWith(`${key}-`));
95
+ return prefix ? perModel[prefix] : defaultPricing;
96
+ };
97
+
98
+ export const estimateOpenAIUsageCost = (
99
+ model: string,
100
+ inputTokens: number,
101
+ outputTokens: number,
102
+ cachedInputTokens = 0
103
+ ): number => {
104
+ const { perModel, defaultPricing } = resolvePricingConfig();
105
+ const pricing = resolveModelPricing(model, perModel, defaultPricing);
106
+ if (!pricing.inputPer1k && !pricing.cachedInputPer1k && !pricing.outputPer1k) {
107
+ return 0;
108
+ }
109
+ const uncachedInputTokens = Math.max(0, toNumber(inputTokens) - toNumber(cachedInputTokens));
110
+ const inputCost = (uncachedInputTokens / 1000) * pricing.inputPer1k;
111
+ const cachedInputCost = (toNumber(cachedInputTokens) / 1000) * (pricing.cachedInputPer1k || 0);
112
+ const outputCost = (toNumber(outputTokens) / 1000) * pricing.outputPer1k;
113
+ return round(inputCost + cachedInputCost + outputCost, 6);
114
+ };