ugly-app 0.1.0

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 (554) hide show
  1. package/.claude/settings.local.json +18 -0
  2. package/.env.example +9 -0
  3. package/.yarn-metadata.json +113 -0
  4. package/README.md +709 -0
  5. package/dist/cli/authCommands.d.ts +6 -0
  6. package/dist/cli/authCommands.d.ts.map +1 -0
  7. package/dist/cli/authCommands.js +50 -0
  8. package/dist/cli/authCommands.js.map +1 -0
  9. package/dist/cli/build.d.ts +2 -0
  10. package/dist/cli/build.d.ts.map +1 -0
  11. package/dist/cli/build.js +26 -0
  12. package/dist/cli/build.js.map +1 -0
  13. package/dist/cli/configure.d.ts +2 -0
  14. package/dist/cli/configure.d.ts.map +1 -0
  15. package/dist/cli/configure.js +53 -0
  16. package/dist/cli/configure.js.map +1 -0
  17. package/dist/cli/dev.d.ts +2 -0
  18. package/dist/cli/dev.d.ts.map +1 -0
  19. package/dist/cli/dev.js +66 -0
  20. package/dist/cli/dev.js.map +1 -0
  21. package/dist/cli/index.d.ts +3 -0
  22. package/dist/cli/index.d.ts.map +1 -0
  23. package/dist/cli/index.js +340 -0
  24. package/dist/cli/index.js.map +1 -0
  25. package/dist/cli/initDb.d.ts +2 -0
  26. package/dist/cli/initDb.d.ts.map +1 -0
  27. package/dist/cli/initDb.js +110 -0
  28. package/dist/cli/initDb.js.map +1 -0
  29. package/dist/cli/logQuery.d.ts +12 -0
  30. package/dist/cli/logQuery.d.ts.map +1 -0
  31. package/dist/cli/logQuery.js +176 -0
  32. package/dist/cli/logQuery.js.map +1 -0
  33. package/dist/cli/migrate.d.ts +4 -0
  34. package/dist/cli/migrate.d.ts.map +1 -0
  35. package/dist/cli/migrate.js +62 -0
  36. package/dist/cli/migrate.js.map +1 -0
  37. package/dist/cli/publishAssets.d.ts +6 -0
  38. package/dist/cli/publishAssets.d.ts.map +1 -0
  39. package/dist/cli/publishAssets.js +87 -0
  40. package/dist/cli/publishAssets.js.map +1 -0
  41. package/dist/cli/purgeAssets.d.ts +2 -0
  42. package/dist/cli/purgeAssets.d.ts.map +1 -0
  43. package/dist/cli/purgeAssets.js +36 -0
  44. package/dist/cli/purgeAssets.js.map +1 -0
  45. package/dist/cli/scaffold.d.ts +2 -0
  46. package/dist/cli/scaffold.d.ts.map +1 -0
  47. package/dist/cli/scaffold.js +37 -0
  48. package/dist/cli/scaffold.js.map +1 -0
  49. package/dist/cli/serverLogQuery.d.ts +6 -0
  50. package/dist/cli/serverLogQuery.d.ts.map +1 -0
  51. package/dist/cli/serverLogQuery.js +76 -0
  52. package/dist/cli/serverLogQuery.js.map +1 -0
  53. package/dist/cli/storageClient.d.ts +3 -0
  54. package/dist/cli/storageClient.d.ts.map +1 -0
  55. package/dist/cli/storageClient.js +22 -0
  56. package/dist/cli/storageClient.js.map +1 -0
  57. package/dist/cli/uglyappConfig.d.ts +29 -0
  58. package/dist/cli/uglyappConfig.d.ts.map +1 -0
  59. package/dist/cli/uglyappConfig.js +125 -0
  60. package/dist/cli/uglyappConfig.js.map +1 -0
  61. package/dist/client/AppProvider.d.ts +32 -0
  62. package/dist/client/AppProvider.d.ts.map +1 -0
  63. package/dist/client/AppProvider.js +126 -0
  64. package/dist/client/AppProvider.js.map +1 -0
  65. package/dist/client/ErrorLog.d.ts +16 -0
  66. package/dist/client/ErrorLog.d.ts.map +1 -0
  67. package/dist/client/ErrorLog.js +28 -0
  68. package/dist/client/ErrorLog.js.map +1 -0
  69. package/dist/client/FeedbackContext.d.ts +7 -0
  70. package/dist/client/FeedbackContext.d.ts.map +1 -0
  71. package/dist/client/FeedbackContext.js +15 -0
  72. package/dist/client/FeedbackContext.js.map +1 -0
  73. package/dist/client/Logger.d.ts +2 -0
  74. package/dist/client/Logger.d.ts.map +1 -0
  75. package/dist/client/Logger.js +72 -0
  76. package/dist/client/Logger.js.map +1 -0
  77. package/dist/client/LoginPopup.d.ts +7 -0
  78. package/dist/client/LoginPopup.d.ts.map +1 -0
  79. package/dist/client/LoginPopup.js +55 -0
  80. package/dist/client/LoginPopup.js.map +1 -0
  81. package/dist/client/Router.d.ts +56 -0
  82. package/dist/client/Router.d.ts.map +1 -0
  83. package/dist/client/Router.js +224 -0
  84. package/dist/client/Router.js.map +1 -0
  85. package/dist/client/Screenshot.d.ts +7 -0
  86. package/dist/client/Screenshot.d.ts.map +1 -0
  87. package/dist/client/Screenshot.js +54 -0
  88. package/dist/client/Screenshot.js.map +1 -0
  89. package/dist/client/ViewFlipper.d.ts +16 -0
  90. package/dist/client/ViewFlipper.d.ts.map +1 -0
  91. package/dist/client/ViewFlipper.js +156 -0
  92. package/dist/client/ViewFlipper.js.map +1 -0
  93. package/dist/client/animation/Animated.d.ts +14 -0
  94. package/dist/client/animation/Animated.d.ts.map +1 -0
  95. package/dist/client/animation/Animated.js +97 -0
  96. package/dist/client/animation/Animated.js.map +1 -0
  97. package/dist/client/animation/animatedValue.d.ts +41 -0
  98. package/dist/client/animation/animatedValue.d.ts.map +1 -0
  99. package/dist/client/animation/animatedValue.js +123 -0
  100. package/dist/client/animation/animatedValue.js.map +1 -0
  101. package/dist/client/animations/FadeIn.d.ts +6 -0
  102. package/dist/client/animations/FadeIn.d.ts.map +1 -0
  103. package/dist/client/animations/FadeIn.js +24 -0
  104. package/dist/client/animations/FadeIn.js.map +1 -0
  105. package/dist/client/animations/SlideFromBottom.d.ts +6 -0
  106. package/dist/client/animations/SlideFromBottom.d.ts.map +1 -0
  107. package/dist/client/animations/SlideFromBottom.js +24 -0
  108. package/dist/client/animations/SlideFromBottom.js.map +1 -0
  109. package/dist/client/animations/SlideFromRight.d.ts +6 -0
  110. package/dist/client/animations/SlideFromRight.d.ts.map +1 -0
  111. package/dist/client/animations/SlideFromRight.js +24 -0
  112. package/dist/client/animations/SlideFromRight.js.map +1 -0
  113. package/dist/client/audio/AudioPlayer.d.ts +11 -0
  114. package/dist/client/audio/AudioPlayer.d.ts.map +1 -0
  115. package/dist/client/audio/AudioPlayer.js +51 -0
  116. package/dist/client/audio/AudioPlayer.js.map +1 -0
  117. package/dist/client/audio/AudioRecorder.d.ts +11 -0
  118. package/dist/client/audio/AudioRecorder.d.ts.map +1 -0
  119. package/dist/client/audio/AudioRecorder.js +66 -0
  120. package/dist/client/audio/AudioRecorder.js.map +1 -0
  121. package/dist/client/audio/audioPlayer.worklet.d.ts +2 -0
  122. package/dist/client/audio/audioPlayer.worklet.d.ts.map +1 -0
  123. package/dist/client/audio/audioPlayer.worklet.js +46 -0
  124. package/dist/client/audio/audioPlayer.worklet.js.map +1 -0
  125. package/dist/client/audio/useSTT.d.ts +19 -0
  126. package/dist/client/audio/useSTT.d.ts.map +1 -0
  127. package/dist/client/audio/useSTT.js +91 -0
  128. package/dist/client/audio/useSTT.js.map +1 -0
  129. package/dist/client/audio/useTTS.d.ts +17 -0
  130. package/dist/client/audio/useTTS.d.ts.map +1 -0
  131. package/dist/client/audio/useTTS.js +70 -0
  132. package/dist/client/audio/useTTS.js.map +1 -0
  133. package/dist/client/components/Button.d.ts +22 -0
  134. package/dist/client/components/Button.d.ts.map +1 -0
  135. package/dist/client/components/Button.js +27 -0
  136. package/dist/client/components/Button.js.map +1 -0
  137. package/dist/client/components/Card.d.ts +8 -0
  138. package/dist/client/components/Card.d.ts.map +1 -0
  139. package/dist/client/components/Card.js +6 -0
  140. package/dist/client/components/Card.js.map +1 -0
  141. package/dist/client/components/EnumInput.d.ts +16 -0
  142. package/dist/client/components/EnumInput.d.ts.map +1 -0
  143. package/dist/client/components/EnumInput.js +11 -0
  144. package/dist/client/components/EnumInput.js.map +1 -0
  145. package/dist/client/components/FeedbackButton.d.ts +9 -0
  146. package/dist/client/components/FeedbackButton.d.ts.map +1 -0
  147. package/dist/client/components/FeedbackButton.js +112 -0
  148. package/dist/client/components/FeedbackButton.js.map +1 -0
  149. package/dist/client/components/Header.d.ts +10 -0
  150. package/dist/client/components/Header.d.ts.map +1 -0
  151. package/dist/client/components/Header.js +12 -0
  152. package/dist/client/components/Header.js.map +1 -0
  153. package/dist/client/components/Image.d.ts +20 -0
  154. package/dist/client/components/Image.d.ts.map +1 -0
  155. package/dist/client/components/Image.js +12 -0
  156. package/dist/client/components/Image.js.map +1 -0
  157. package/dist/client/components/Input.d.ts +14 -0
  158. package/dist/client/components/Input.d.ts.map +1 -0
  159. package/dist/client/components/Input.js +19 -0
  160. package/dist/client/components/Input.js.map +1 -0
  161. package/dist/client/components/Modal.d.ts +9 -0
  162. package/dist/client/components/Modal.d.ts.map +1 -0
  163. package/dist/client/components/Modal.js +19 -0
  164. package/dist/client/components/Modal.js.map +1 -0
  165. package/dist/client/components/PageLayout.d.ts +9 -0
  166. package/dist/client/components/PageLayout.d.ts.map +1 -0
  167. package/dist/client/components/PageLayout.js +6 -0
  168. package/dist/client/components/PageLayout.js.map +1 -0
  169. package/dist/client/components/Panel.d.ts +8 -0
  170. package/dist/client/components/Panel.d.ts.map +1 -0
  171. package/dist/client/components/Panel.js +5 -0
  172. package/dist/client/components/Panel.js.map +1 -0
  173. package/dist/client/components/PopupPanel.d.ts +9 -0
  174. package/dist/client/components/PopupPanel.d.ts.map +1 -0
  175. package/dist/client/components/PopupPanel.js +5 -0
  176. package/dist/client/components/PopupPanel.js.map +1 -0
  177. package/dist/client/components/Pressable.d.ts +14 -0
  178. package/dist/client/components/Pressable.d.ts.map +1 -0
  179. package/dist/client/components/Pressable.js +8 -0
  180. package/dist/client/components/Pressable.js.map +1 -0
  181. package/dist/client/components/ScrollView.d.ts +9 -0
  182. package/dist/client/components/ScrollView.d.ts.map +1 -0
  183. package/dist/client/components/ScrollView.js +7 -0
  184. package/dist/client/components/ScrollView.js.map +1 -0
  185. package/dist/client/components/SettingGroup.d.ts +10 -0
  186. package/dist/client/components/SettingGroup.d.ts.map +1 -0
  187. package/dist/client/components/SettingGroup.js +8 -0
  188. package/dist/client/components/SettingGroup.js.map +1 -0
  189. package/dist/client/components/Text.d.ts +21 -0
  190. package/dist/client/components/Text.d.ts.map +1 -0
  191. package/dist/client/components/Text.js +43 -0
  192. package/dist/client/components/Text.js.map +1 -0
  193. package/dist/client/components/Toast.d.ts +10 -0
  194. package/dist/client/components/Toast.d.ts.map +1 -0
  195. package/dist/client/components/Toast.js +21 -0
  196. package/dist/client/components/Toast.js.map +1 -0
  197. package/dist/client/components/View.d.ts +9 -0
  198. package/dist/client/components/View.d.ts.map +1 -0
  199. package/dist/client/components/View.js +5 -0
  200. package/dist/client/components/View.js.map +1 -0
  201. package/dist/client/components/index.d.ts +33 -0
  202. package/dist/client/components/index.d.ts.map +1 -0
  203. package/dist/client/components/index.js +17 -0
  204. package/dist/client/components/index.js.map +1 -0
  205. package/dist/client/components/zIndex.d.ts +10 -0
  206. package/dist/client/components/zIndex.d.ts.map +1 -0
  207. package/dist/client/components/zIndex.js +12 -0
  208. package/dist/client/components/zIndex.js.map +1 -0
  209. package/dist/client/createSocket.d.ts +26 -0
  210. package/dist/client/createSocket.d.ts.map +1 -0
  211. package/dist/client/createSocket.js +138 -0
  212. package/dist/client/createSocket.js.map +1 -0
  213. package/dist/client/index.d.ts +27 -0
  214. package/dist/client/index.d.ts.map +1 -0
  215. package/dist/client/index.js +20 -0
  216. package/dist/client/index.js.map +1 -0
  217. package/dist/playwright/index.d.ts +16 -0
  218. package/dist/playwright/index.d.ts.map +1 -0
  219. package/dist/playwright/index.js +32 -0
  220. package/dist/playwright/index.js.map +1 -0
  221. package/dist/server/App.d.ts +43 -0
  222. package/dist/server/App.d.ts.map +1 -0
  223. package/dist/server/App.js +215 -0
  224. package/dist/server/App.js.map +1 -0
  225. package/dist/server/Auth.d.ts +21 -0
  226. package/dist/server/Auth.d.ts.map +1 -0
  227. package/dist/server/Auth.js +171 -0
  228. package/dist/server/Auth.js.map +1 -0
  229. package/dist/server/Cache.d.ts +38 -0
  230. package/dist/server/Cache.d.ts.map +1 -0
  231. package/dist/server/Cache.js +113 -0
  232. package/dist/server/Cache.js.map +1 -0
  233. package/dist/server/ChangeStream.d.ts +22 -0
  234. package/dist/server/ChangeStream.d.ts.map +1 -0
  235. package/dist/server/ChangeStream.js +93 -0
  236. package/dist/server/ChangeStream.js.map +1 -0
  237. package/dist/server/DB.d.ts +17 -0
  238. package/dist/server/DB.d.ts.map +1 -0
  239. package/dist/server/DB.js +442 -0
  240. package/dist/server/DB.js.map +1 -0
  241. package/dist/server/Email.d.ts +22 -0
  242. package/dist/server/Email.d.ts.map +1 -0
  243. package/dist/server/Email.js +64 -0
  244. package/dist/server/Email.js.map +1 -0
  245. package/dist/server/EmailTemplate.d.ts +17 -0
  246. package/dist/server/EmailTemplate.d.ts.map +1 -0
  247. package/dist/server/EmailTemplate.js +29 -0
  248. package/dist/server/EmailTemplate.js.map +1 -0
  249. package/dist/server/FeedbackReport.d.ts +19 -0
  250. package/dist/server/FeedbackReport.d.ts.map +1 -0
  251. package/dist/server/FeedbackReport.js +94 -0
  252. package/dist/server/FeedbackReport.js.map +1 -0
  253. package/dist/server/ImageGen.d.ts +5 -0
  254. package/dist/server/ImageGen.d.ts.map +1 -0
  255. package/dist/server/ImageGen.js +5 -0
  256. package/dist/server/ImageGen.js.map +1 -0
  257. package/dist/server/Logging.d.ts +59 -0
  258. package/dist/server/Logging.d.ts.map +1 -0
  259. package/dist/server/Logging.js +293 -0
  260. package/dist/server/Logging.js.map +1 -0
  261. package/dist/server/Nats.d.ts +56 -0
  262. package/dist/server/Nats.d.ts.map +1 -0
  263. package/dist/server/Nats.js +162 -0
  264. package/dist/server/Nats.js.map +1 -0
  265. package/dist/server/NatsStore.d.ts +26 -0
  266. package/dist/server/NatsStore.d.ts.map +1 -0
  267. package/dist/server/NatsStore.js +86 -0
  268. package/dist/server/NatsStore.js.map +1 -0
  269. package/dist/server/PushNotification.d.ts +33 -0
  270. package/dist/server/PushNotification.d.ts.map +1 -0
  271. package/dist/server/PushNotification.js +131 -0
  272. package/dist/server/PushNotification.js.map +1 -0
  273. package/dist/server/RateLimit.d.ts +28 -0
  274. package/dist/server/RateLimit.d.ts.map +1 -0
  275. package/dist/server/RateLimit.js +101 -0
  276. package/dist/server/RateLimit.js.map +1 -0
  277. package/dist/server/Redis.d.ts +61 -0
  278. package/dist/server/Redis.d.ts.map +1 -0
  279. package/dist/server/Redis.js +226 -0
  280. package/dist/server/Redis.js.map +1 -0
  281. package/dist/server/Router.d.ts +27 -0
  282. package/dist/server/Router.d.ts.map +1 -0
  283. package/dist/server/Router.js +71 -0
  284. package/dist/server/Router.js.map +1 -0
  285. package/dist/server/Socket.d.ts +8 -0
  286. package/dist/server/Socket.d.ts.map +1 -0
  287. package/dist/server/Socket.js +278 -0
  288. package/dist/server/Socket.js.map +1 -0
  289. package/dist/server/SpendTracker.d.ts +18 -0
  290. package/dist/server/SpendTracker.d.ts.map +1 -0
  291. package/dist/server/SpendTracker.js +110 -0
  292. package/dist/server/SpendTracker.js.map +1 -0
  293. package/dist/server/Storage.d.ts +16 -0
  294. package/dist/server/Storage.d.ts.map +1 -0
  295. package/dist/server/Storage.js +95 -0
  296. package/dist/server/Storage.js.map +1 -0
  297. package/dist/server/TextGen.d.ts +5 -0
  298. package/dist/server/TextGen.d.ts.map +1 -0
  299. package/dist/server/TextGen.js +6 -0
  300. package/dist/server/TextGen.js.map +1 -0
  301. package/dist/server/WorkerQueue.d.ts +27 -0
  302. package/dist/server/WorkerQueue.d.ts.map +1 -0
  303. package/dist/server/WorkerQueue.js +147 -0
  304. package/dist/server/WorkerQueue.js.map +1 -0
  305. package/dist/server/ai/ImageGenClient.d.ts +6 -0
  306. package/dist/server/ai/ImageGenClient.d.ts.map +1 -0
  307. package/dist/server/ai/ImageGenClient.js +29 -0
  308. package/dist/server/ai/ImageGenClient.js.map +1 -0
  309. package/dist/server/ai/ProviderBalance.d.ts +15 -0
  310. package/dist/server/ai/ProviderBalance.d.ts.map +1 -0
  311. package/dist/server/ai/ProviderBalance.js +110 -0
  312. package/dist/server/ai/ProviderBalance.js.map +1 -0
  313. package/dist/server/ai/ProviderSelector.d.ts +13 -0
  314. package/dist/server/ai/ProviderSelector.d.ts.map +1 -0
  315. package/dist/server/ai/ProviderSelector.js +25 -0
  316. package/dist/server/ai/ProviderSelector.js.map +1 -0
  317. package/dist/server/ai/TextGenClient.d.ts +9 -0
  318. package/dist/server/ai/TextGenClient.d.ts.map +1 -0
  319. package/dist/server/ai/TextGenClient.js +72 -0
  320. package/dist/server/ai/TextGenClient.js.map +1 -0
  321. package/dist/server/ai/fallbacks.d.ts +9 -0
  322. package/dist/server/ai/fallbacks.d.ts.map +1 -0
  323. package/dist/server/ai/fallbacks.js +77 -0
  324. package/dist/server/ai/fallbacks.js.map +1 -0
  325. package/dist/server/ai/index.d.ts +12 -0
  326. package/dist/server/ai/index.d.ts.map +1 -0
  327. package/dist/server/ai/index.js +37 -0
  328. package/dist/server/ai/index.js.map +1 -0
  329. package/dist/server/ai/providers/Claude.d.ts +3 -0
  330. package/dist/server/ai/providers/Claude.d.ts.map +1 -0
  331. package/dist/server/ai/providers/Claude.js +124 -0
  332. package/dist/server/ai/providers/Claude.js.map +1 -0
  333. package/dist/server/ai/providers/FAL.d.ts +3 -0
  334. package/dist/server/ai/providers/FAL.d.ts.map +1 -0
  335. package/dist/server/ai/providers/FAL.js +24 -0
  336. package/dist/server/ai/providers/FAL.js.map +1 -0
  337. package/dist/server/ai/providers/Fireworks.d.ts +3 -0
  338. package/dist/server/ai/providers/Fireworks.d.ts.map +1 -0
  339. package/dist/server/ai/providers/Fireworks.js +79 -0
  340. package/dist/server/ai/providers/Fireworks.js.map +1 -0
  341. package/dist/server/ai/providers/Google.d.ts +3 -0
  342. package/dist/server/ai/providers/Google.d.ts.map +1 -0
  343. package/dist/server/ai/providers/Google.js +105 -0
  344. package/dist/server/ai/providers/Google.js.map +1 -0
  345. package/dist/server/ai/providers/GoogleImage.d.ts +3 -0
  346. package/dist/server/ai/providers/GoogleImage.d.ts.map +1 -0
  347. package/dist/server/ai/providers/GoogleImage.js +24 -0
  348. package/dist/server/ai/providers/GoogleImage.js.map +1 -0
  349. package/dist/server/ai/providers/Groq.d.ts +3 -0
  350. package/dist/server/ai/providers/Groq.d.ts.map +1 -0
  351. package/dist/server/ai/providers/Groq.js +99 -0
  352. package/dist/server/ai/providers/Groq.js.map +1 -0
  353. package/dist/server/ai/providers/Kie.d.ts +3 -0
  354. package/dist/server/ai/providers/Kie.d.ts.map +1 -0
  355. package/dist/server/ai/providers/Kie.js +79 -0
  356. package/dist/server/ai/providers/Kie.js.map +1 -0
  357. package/dist/server/ai/providers/KieImage.d.ts +3 -0
  358. package/dist/server/ai/providers/KieImage.d.ts.map +1 -0
  359. package/dist/server/ai/providers/KieImage.js +50 -0
  360. package/dist/server/ai/providers/KieImage.js.map +1 -0
  361. package/dist/server/ai/providers/OpenAIText.d.ts +3 -0
  362. package/dist/server/ai/providers/OpenAIText.d.ts.map +1 -0
  363. package/dist/server/ai/providers/OpenAIText.js +103 -0
  364. package/dist/server/ai/providers/OpenAIText.js.map +1 -0
  365. package/dist/server/ai/providers/Together.d.ts +3 -0
  366. package/dist/server/ai/providers/Together.d.ts.map +1 -0
  367. package/dist/server/ai/providers/Together.js +99 -0
  368. package/dist/server/ai/providers/Together.js.map +1 -0
  369. package/dist/server/ai/providers/TogetherImage.d.ts +3 -0
  370. package/dist/server/ai/providers/TogetherImage.d.ts.map +1 -0
  371. package/dist/server/ai/providers/TogetherImage.js +24 -0
  372. package/dist/server/ai/providers/TogetherImage.js.map +1 -0
  373. package/dist/server/ai/providers/Wavespeed.d.ts +3 -0
  374. package/dist/server/ai/providers/Wavespeed.d.ts.map +1 -0
  375. package/dist/server/ai/providers/Wavespeed.js +53 -0
  376. package/dist/server/ai/providers/Wavespeed.js.map +1 -0
  377. package/dist/server/ai/registry.d.ts +10 -0
  378. package/dist/server/ai/registry.d.ts.map +1 -0
  379. package/dist/server/ai/registry.js +26 -0
  380. package/dist/server/ai/registry.js.map +1 -0
  381. package/dist/server/ai/types.d.ts +67 -0
  382. package/dist/server/ai/types.d.ts.map +1 -0
  383. package/dist/server/ai/types.js +17 -0
  384. package/dist/server/ai/types.js.map +1 -0
  385. package/dist/server/audio/STTStream.d.ts +12 -0
  386. package/dist/server/audio/STTStream.d.ts.map +1 -0
  387. package/dist/server/audio/STTStream.js +59 -0
  388. package/dist/server/audio/STTStream.js.map +1 -0
  389. package/dist/server/audio/TTSStream.d.ts +16 -0
  390. package/dist/server/audio/TTSStream.d.ts.map +1 -0
  391. package/dist/server/audio/TTSStream.js +151 -0
  392. package/dist/server/audio/TTSStream.js.map +1 -0
  393. package/dist/server/audio/index.d.ts +5 -0
  394. package/dist/server/audio/index.d.ts.map +1 -0
  395. package/dist/server/audio/index.js +14 -0
  396. package/dist/server/audio/index.js.map +1 -0
  397. package/dist/server/audio/resample.d.ts +7 -0
  398. package/dist/server/audio/resample.d.ts.map +1 -0
  399. package/dist/server/audio/resample.js +17 -0
  400. package/dist/server/audio/resample.js.map +1 -0
  401. package/dist/server/audio/stt/GroqWhisper.d.ts +3 -0
  402. package/dist/server/audio/stt/GroqWhisper.d.ts.map +1 -0
  403. package/dist/server/audio/stt/GroqWhisper.js +91 -0
  404. package/dist/server/audio/stt/GroqWhisper.js.map +1 -0
  405. package/dist/server/audio/stt/registry.d.ts +5 -0
  406. package/dist/server/audio/stt/registry.d.ts.map +1 -0
  407. package/dist/server/audio/stt/registry.js +11 -0
  408. package/dist/server/audio/stt/registry.js.map +1 -0
  409. package/dist/server/audio/stt/types.d.ts +25 -0
  410. package/dist/server/audio/stt/types.d.ts.map +1 -0
  411. package/dist/server/audio/stt/types.js +2 -0
  412. package/dist/server/audio/stt/types.js.map +1 -0
  413. package/dist/server/audio/stt/vad.d.ts +18 -0
  414. package/dist/server/audio/stt/vad.d.ts.map +1 -0
  415. package/dist/server/audio/stt/vad.js +90 -0
  416. package/dist/server/audio/stt/vad.js.map +1 -0
  417. package/dist/server/audio/tts/InWorld.d.ts +3 -0
  418. package/dist/server/audio/tts/InWorld.d.ts.map +1 -0
  419. package/dist/server/audio/tts/InWorld.js +147 -0
  420. package/dist/server/audio/tts/InWorld.js.map +1 -0
  421. package/dist/server/audio/tts/providers/Azure.d.ts +3 -0
  422. package/dist/server/audio/tts/providers/Azure.d.ts.map +1 -0
  423. package/dist/server/audio/tts/providers/Azure.js +31 -0
  424. package/dist/server/audio/tts/providers/Azure.js.map +1 -0
  425. package/dist/server/audio/tts/registry.d.ts +6 -0
  426. package/dist/server/audio/tts/registry.d.ts.map +1 -0
  427. package/dist/server/audio/tts/registry.js +12 -0
  428. package/dist/server/audio/tts/registry.js.map +1 -0
  429. package/dist/server/audio/tts/types.d.ts +20 -0
  430. package/dist/server/audio/tts/types.d.ts.map +1 -0
  431. package/dist/server/audio/tts/types.js +2 -0
  432. package/dist/server/audio/tts/types.js.map +1 -0
  433. package/dist/server/billing/BillingGateway.d.ts +40 -0
  434. package/dist/server/billing/BillingGateway.d.ts.map +1 -0
  435. package/dist/server/billing/BillingGateway.js +116 -0
  436. package/dist/server/billing/BillingGateway.js.map +1 -0
  437. package/dist/server/billing/BillingLedger.d.ts +67 -0
  438. package/dist/server/billing/BillingLedger.d.ts.map +1 -0
  439. package/dist/server/billing/BillingLedger.js +214 -0
  440. package/dist/server/billing/BillingLedger.js.map +1 -0
  441. package/dist/server/billing/CreditStore.d.ts +58 -0
  442. package/dist/server/billing/CreditStore.d.ts.map +1 -0
  443. package/dist/server/billing/CreditStore.js +112 -0
  444. package/dist/server/billing/CreditStore.js.map +1 -0
  445. package/dist/server/billing/LimitEnforcer.d.ts +73 -0
  446. package/dist/server/billing/LimitEnforcer.d.ts.map +1 -0
  447. package/dist/server/billing/LimitEnforcer.js +276 -0
  448. package/dist/server/billing/LimitEnforcer.js.map +1 -0
  449. package/dist/server/billing/UserLimitCache.d.ts +35 -0
  450. package/dist/server/billing/UserLimitCache.d.ts.map +1 -0
  451. package/dist/server/billing/UserLimitCache.js +91 -0
  452. package/dist/server/billing/UserLimitCache.js.map +1 -0
  453. package/dist/server/billing/index.d.ts +6 -0
  454. package/dist/server/billing/index.d.ts.map +1 -0
  455. package/dist/server/billing/index.js +4 -0
  456. package/dist/server/billing/index.js.map +1 -0
  457. package/dist/server/billing/types.d.ts +95 -0
  458. package/dist/server/billing/types.d.ts.map +1 -0
  459. package/dist/server/billing/types.js +19 -0
  460. package/dist/server/billing/types.js.map +1 -0
  461. package/dist/server/embeddings/EmbeddingClient.d.ts +8 -0
  462. package/dist/server/embeddings/EmbeddingClient.d.ts.map +1 -0
  463. package/dist/server/embeddings/EmbeddingClient.js +30 -0
  464. package/dist/server/embeddings/EmbeddingClient.js.map +1 -0
  465. package/dist/server/embeddings/index.d.ts +5 -0
  466. package/dist/server/embeddings/index.d.ts.map +1 -0
  467. package/dist/server/embeddings/index.js +6 -0
  468. package/dist/server/embeddings/index.js.map +1 -0
  469. package/dist/server/embeddings/providers/OpenAI.d.ts +3 -0
  470. package/dist/server/embeddings/providers/OpenAI.d.ts.map +1 -0
  471. package/dist/server/embeddings/providers/OpenAI.js +28 -0
  472. package/dist/server/embeddings/providers/OpenAI.js.map +1 -0
  473. package/dist/server/embeddings/registry.d.ts +7 -0
  474. package/dist/server/embeddings/registry.d.ts.map +1 -0
  475. package/dist/server/embeddings/registry.js +15 -0
  476. package/dist/server/embeddings/registry.js.map +1 -0
  477. package/dist/server/embeddings/types.d.ts +12 -0
  478. package/dist/server/embeddings/types.d.ts.map +1 -0
  479. package/dist/server/embeddings/types.js +2 -0
  480. package/dist/server/embeddings/types.js.map +1 -0
  481. package/dist/server/index.d.ts +59 -0
  482. package/dist/server/index.d.ts.map +1 -0
  483. package/dist/server/index.js +41 -0
  484. package/dist/server/index.js.map +1 -0
  485. package/dist/shared/Api.d.ts +40 -0
  486. package/dist/shared/Api.d.ts.map +1 -0
  487. package/dist/shared/Api.js +30 -0
  488. package/dist/shared/Api.js.map +1 -0
  489. package/dist/shared/Audio.d.ts +108 -0
  490. package/dist/shared/Audio.d.ts.map +1 -0
  491. package/dist/shared/Audio.js +3 -0
  492. package/dist/shared/Audio.js.map +1 -0
  493. package/dist/shared/DB.d.ts +339 -0
  494. package/dist/shared/DB.d.ts.map +1 -0
  495. package/dist/shared/DB.js +51 -0
  496. package/dist/shared/DB.js.map +1 -0
  497. package/dist/shared/Errors.d.ts +10 -0
  498. package/dist/shared/Errors.d.ts.map +1 -0
  499. package/dist/shared/Errors.js +19 -0
  500. package/dist/shared/Errors.js.map +1 -0
  501. package/dist/shared/FeedbackReport.d.ts +38 -0
  502. package/dist/shared/FeedbackReport.d.ts.map +1 -0
  503. package/dist/shared/FeedbackReport.js +14 -0
  504. package/dist/shared/FeedbackReport.js.map +1 -0
  505. package/dist/shared/Router.d.ts +28 -0
  506. package/dist/shared/Router.d.ts.map +1 -0
  507. package/dist/shared/Router.js +82 -0
  508. package/dist/shared/Router.js.map +1 -0
  509. package/dist/shared/Socket.d.ts +26 -0
  510. package/dist/shared/Socket.d.ts.map +1 -0
  511. package/dist/shared/Socket.js +2 -0
  512. package/dist/shared/Socket.js.map +1 -0
  513. package/dist/shared/index.d.ts +28 -0
  514. package/dist/shared/index.d.ts.map +1 -0
  515. package/dist/shared/index.js +61 -0
  516. package/dist/shared/index.js.map +1 -0
  517. package/dist/webrtc/index.d.ts +14 -0
  518. package/dist/webrtc/index.d.ts.map +1 -0
  519. package/dist/webrtc/index.js +24 -0
  520. package/dist/webrtc/index.js.map +1 -0
  521. package/package.json +97 -0
  522. package/templates/.claude/skills/assets.md +39 -0
  523. package/templates/.claude/skills/check-errors.md +35 -0
  524. package/templates/.claude/skills/check-feedback.md +23 -0
  525. package/templates/.claude/skills/check-perf.md +22 -0
  526. package/templates/.claude/skills/create-test-users.md +34 -0
  527. package/templates/.claude/skills/extend-api.md +37 -0
  528. package/templates/.claude/skills/fix-code.md +5 -0
  529. package/templates/.claude/skills/fix-errors.md +9 -0
  530. package/templates/.claude/skills/fix-feedback.md +8 -0
  531. package/templates/.claude/skills/fix-perf.md +8 -0
  532. package/templates/.claude/skills/uploads.md +38 -0
  533. package/templates/.claude/skills/use-ai.md +49 -0
  534. package/templates/.env.example +49 -0
  535. package/templates/.husky/pre-commit +2 -0
  536. package/templates/CLAUDE.md +199 -0
  537. package/templates/client/App.tsx +33 -0
  538. package/templates/client/index.html +14 -0
  539. package/templates/client/main.tsx +52 -0
  540. package/templates/client/pages/AuthDemoPage.tsx +85 -0
  541. package/templates/client/pages/HomePage.tsx +111 -0
  542. package/templates/client/pages/SearchPage.tsx +48 -0
  543. package/templates/client/pages/UserPage.tsx +33 -0
  544. package/templates/client/router.ts +4 -0
  545. package/templates/docker-compose.yml +50 -0
  546. package/templates/index.html +14 -0
  547. package/templates/package.json +56 -0
  548. package/templates/playwright.config.ts +21 -0
  549. package/templates/server/index.ts +24 -0
  550. package/templates/shared/api.ts +36 -0
  551. package/templates/shared/collections.ts +11 -0
  552. package/templates/shared/dbIndexes.ts +11 -0
  553. package/templates/shared/pages.ts +8 -0
  554. package/templates/vite.config.ts +17 -0
@@ -0,0 +1,94 @@
1
+ import { nanoid } from 'nanoid';
2
+ import { ResolveFeedbackInput, SubmitFeedbackInput, } from '../shared/FeedbackReport.js';
3
+ import { getDbName, getMongoClient } from './DB.js';
4
+ export function createSubmitFeedbackHandler(db) {
5
+ return async (input) => {
6
+ const now = Date.now();
7
+ const id = nanoid();
8
+ const doc = {
9
+ id,
10
+ userId: input.userId,
11
+ type: input.type,
12
+ message: input.message,
13
+ url: input.url,
14
+ screenshotUri: input.screenshotUri,
15
+ context: input.context,
16
+ status: 'pending',
17
+ version: 1,
18
+ created: now,
19
+ updated: now,
20
+ };
21
+ await db
22
+ .collection('feedbackReport')
23
+ .insertOne({ ...doc, _id: id });
24
+ return { id };
25
+ };
26
+ }
27
+ export function createResolveFeedbackHandler(db) {
28
+ return async (input) => {
29
+ const now = Date.now();
30
+ const result = await db.collection('feedbackReport').updateOne({ id: input.feedbackId }, {
31
+ $set: {
32
+ status: input.status,
33
+ resolution: input.resolution,
34
+ resolvedAt: now,
35
+ updated: now,
36
+ },
37
+ });
38
+ if (result.matchedCount === 0)
39
+ throw new Error(`Feedback not found: ${input.feedbackId}`);
40
+ };
41
+ }
42
+ export async function getMyFeedbackMarkdown(db, userId) {
43
+ // Mark pending → captured on read (so maintain bot doesn't double-process)
44
+ await db
45
+ .collection('feedbackReport')
46
+ .updateMany({ userId, status: 'pending' }, { $set: { status: 'captured', updated: Date.now() } });
47
+ const docs = (await db
48
+ .collection('feedbackReport')
49
+ .find({ userId })
50
+ .sort({ created: -1 })
51
+ .limit(100)
52
+ .toArray());
53
+ if (docs.length === 0)
54
+ return '# My Feedback\n\nNo feedback submitted yet.\n';
55
+ const lines = ['# My Feedback\n'];
56
+ for (const doc of docs) {
57
+ const date = new Date(doc.created).toISOString().split('T')[0];
58
+ lines.push(`## [${date}] ${doc.message} — ${doc.type}`);
59
+ lines.push(`**Status:** ${doc.status}`);
60
+ if (doc.resolution)
61
+ lines.push(`**Response:** ${doc.resolution}`);
62
+ lines.push('');
63
+ }
64
+ return lines.join('\n');
65
+ }
66
+ export function registerFeedbackHandlers(router, maintainBotUserId) {
67
+ router.registerFunction('submitFeedback', async (ctx, input) => {
68
+ // Use getMongoClient() directly — ctx.db is a typed wrapper, not a raw Mongo Db
69
+ const client = await getMongoClient();
70
+ const db = client.db(getDbName());
71
+ const handler = createSubmitFeedbackHandler(db);
72
+ return handler({
73
+ userId: ctx.userId,
74
+ ...input,
75
+ });
76
+ }, {
77
+ _input: undefined,
78
+ _output: undefined,
79
+ inputSchema: SubmitFeedbackInput,
80
+ });
81
+ router.registerFunction('resolveFeedback', async (ctx, input) => {
82
+ if (ctx.userId !== maintainBotUserId)
83
+ throw new Error('Not authorized');
84
+ const client = await getMongoClient();
85
+ const db = client.db(getDbName());
86
+ const handler = createResolveFeedbackHandler(db);
87
+ return handler(input);
88
+ }, {
89
+ _input: undefined,
90
+ _output: undefined,
91
+ inputSchema: ResolveFeedbackInput,
92
+ });
93
+ }
94
+ //# sourceMappingURL=FeedbackReport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeedbackReport.js","sourceRoot":"","sources":["../../src/server/FeedbackReport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAMhC,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAapD,MAAM,UAAU,2BAA2B,CAAC,EAAM;IAChD,OAAO,KAAK,EAAE,KAAyB,EAA2B,EAAE;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QACpB,MAAM,GAAG,GAAmB;YAC1B,EAAE;YACF,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,GAAG;YACZ,OAAO,EAAE,GAAG;SACb,CAAC;QACF,MAAM,EAAE;aACL,UAAU,CAAC,gBAAgB,CAAC;aAC5B,SAAS,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAyB,EAAE,CAAC,CAAC;QACzD,OAAO,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,EAAM;IACjD,OAAO,KAAK,EAAE,KAAmB,EAAiB,EAAE;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAC5D,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,EACxB;YACE,IAAI,EAAE;gBACJ,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,GAAG;aACb;SACF,CACF,CAAC;QACF,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,EAAM,EACN,MAAc;IAEd,2EAA2E;IAC3E,MAAM,EAAE;SACL,UAAU,CAAC,gBAAgB,CAAC;SAC5B,UAAU,CACT,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAC7B,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CACtD,CAAC;IAEJ,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE;SACnB,UAAU,CAAC,gBAAgB,CAAC;SAC5B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;SAChB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;SACrB,KAAK,CAAC,GAAG,CAAC;SACV,OAAO,EAAE,CAAgC,CAAC;IAE7C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,+CAA+C,CAAC;IAE9E,MAAM,KAAK,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,GAAG,CAAC,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACxC,IAAI,GAAG,CAAC,UAAU;YAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,MAAiB,EACjB,iBAAyB;IAEzB,MAAM,CAAC,gBAAgB,CACrB,gBAAgB,EAChB,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,gFAAgF;QAChF,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;QACtC,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,2BAA2B,CAAC,EAAE,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC;YACb,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAI,KAA8B;SACnC,CAAC,CAAC;IACL,CAAC,EACD;QACE,MAAM,EAAE,SAAkB;QAC1B,OAAO,EAAE,SAAkB;QAC3B,WAAW,EAAE,mBAAmB;KACjC,CACF,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,iBAAiB,EACjB,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,IAAI,GAAG,CAAC,MAAM,KAAK,iBAAiB;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;QACtC,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,4BAA4B,CAAC,EAAE,CAAC,CAAC;QACjD,OAAO,OAAO,CAAC,KAA8B,CAAC,CAAC;IACjD,CAAC,EACD;QACE,MAAM,EAAE,SAAkB;QAC1B,OAAO,EAAE,SAAkB;QAC3B,WAAW,EAAE,oBAAoB;KAClC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import './ai/index.js';
2
+ export { createImageGenClient as createImageGen } from './ai/ImageGenClient.js';
3
+ export type { ImageGenClient } from './ai/ImageGenClient.js';
4
+ export type { ImageGenOptions } from './ai/types.js';
5
+ //# sourceMappingURL=ImageGen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageGen.d.ts","sourceRoot":"","sources":["../../src/server/ImageGen.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAChF,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ // src/server/ImageGen.ts
2
+ // Thin re-export — image gen lives in src/server/ai/
3
+ import './ai/index.js';
4
+ export { createImageGenClient as createImageGen } from './ai/ImageGenClient.js';
5
+ //# sourceMappingURL=ImageGen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageGen.js","sourceRoot":"","sources":["../../src/server/ImageGen.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,qDAAqD;AACrD,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,59 @@
1
+ import type { TypedDB } from '../shared/DB.js';
2
+ import type { StorageClient } from './Storage.js';
3
+ export type LogLevel = 'log' | 'info' | 'warn' | 'error' | 'debug';
4
+ export interface Logger {
5
+ error(message: string, meta?: Record<string, unknown>): void;
6
+ warn(message: string, meta?: Record<string, unknown>): void;
7
+ info(message: string, meta?: Record<string, unknown>): void;
8
+ debug(message: string, meta?: Record<string, unknown>): void;
9
+ perf(operation: string): () => void;
10
+ feedback(input: {
11
+ type: 'bug' | 'design' | 'feature';
12
+ message: string;
13
+ screenshotTempKey?: string;
14
+ }): Promise<void>;
15
+ }
16
+ export declare function createLogger(userId: string, storage: StorageClient, db: TypedDB<any>): Logger;
17
+ export declare function initServerErrorCapture(): void;
18
+ export interface DevLogEntry {
19
+ timestamp: string;
20
+ level: LogLevel;
21
+ category: string | undefined;
22
+ message: string;
23
+ args: unknown[];
24
+ source: 'server' | 'browser';
25
+ }
26
+ /** Write a log entry to the dev JSONL file. source defaults to 'browser'. */
27
+ export declare function writeClientLogEntry(entry: {
28
+ level: string;
29
+ message: string;
30
+ args?: unknown[];
31
+ source?: 'browser' | 'server';
32
+ }): void;
33
+ /**
34
+ * Register a pattern string as an "expected" error.
35
+ * If any captured error message contains this pattern it will be classified as
36
+ * expected and only logged to the console — not persisted to MongoDB.
37
+ */
38
+ export declare function registerExpectedErrorPattern(pattern: string): void;
39
+ /**
40
+ * Classify an error message as expected or unexpected based on registered patterns.
41
+ * @returns 'expected' if the message matches any registered pattern, 'unexpected' otherwise
42
+ */
43
+ export declare function classifyError(message: string): 'expected' | 'unexpected';
44
+ /**
45
+ * Capture a server-side error.
46
+ *
47
+ * - Expected errors (matched by a registered pattern) are written to console.error only.
48
+ * - Unexpected errors are also persisted to the MongoDB `errorLog` collection.
49
+ * Documents are deduplicated by hash: repeated errors increment `count` instead of
50
+ * inserting a duplicate record.
51
+ *
52
+ * @param message A const string following the pattern '[Area] Description of cause'
53
+ * @param error The caught value (typically an Error instance)
54
+ * @param context Optional key/value pairs for structured diagnostics
55
+ */
56
+ export declare function captureServerError(message: string, error: unknown, context?: Record<string, unknown>): void;
57
+ /** Override console.* globally to capture all output to JSONL in dev mode */
58
+ export declare function initDevLogs(): void;
59
+ //# sourceMappingURL=Logging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logging.d.ts","sourceRoot":"","sources":["../../src/server/Logging.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnE,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7D,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE;QACd,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;QACnC,OAAO,EAAE,MAAM,CAAC;QAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AAGD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,EACtB,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,GACf,MAAM,CAuFR;AAGD,wBAAgB,sBAAsB,IAAI,IAAI,CA+B7C;AAID,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC9B;AAsED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC/B,GAAG,IAAI,CAQP;AAUD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,CAKxE;AAcD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CA6CN;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,IAAI,IAAI,CAsClC"}
@@ -0,0 +1,293 @@
1
+ import { nanoid } from 'nanoid';
2
+ import crypto from 'node:crypto';
3
+ import fsSync from 'node:fs';
4
+ import fs from 'node:fs/promises';
5
+ import path from 'node:path';
6
+ import { BUILTIN_DEFS, dbDefaults } from '../shared/DB.js';
7
+ import { getDbName, getMongoClient } from './DB.js';
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
+ export function createLogger(userId, storage, db) {
10
+ function writeErrorLog(level, message, meta) {
11
+ const doc = {
12
+ ...dbDefaults(),
13
+ id: nanoid(),
14
+ level,
15
+ message,
16
+ source: 'server',
17
+ userId,
18
+ meta: meta ?? null,
19
+ };
20
+ // Fire-and-forget — logging should never throw in handler context
21
+ db.setDoc(BUILTIN_DEFS.errorLog, doc).catch((e) => console.error('[Logger] Failed to write log', e));
22
+ }
23
+ function writeConsoleLog(level, message, meta) {
24
+ const doc = {
25
+ ...dbDefaults(),
26
+ id: nanoid(),
27
+ level,
28
+ message,
29
+ userId,
30
+ meta: meta ?? null,
31
+ };
32
+ // Fire-and-forget — logging should never throw in handler context
33
+ db.setDoc(BUILTIN_DEFS.consoleLog, doc).catch((e) => console.error('[Logger] Failed to write log', e));
34
+ }
35
+ return {
36
+ error: (msg, meta) => writeErrorLog('error', msg, meta),
37
+ warn: (msg, meta) => writeConsoleLog('warn', msg, meta),
38
+ info: (msg, meta) => writeConsoleLog('info', msg, meta),
39
+ debug: (msg, meta) => writeConsoleLog('debug', msg, meta),
40
+ perf(operation) {
41
+ const start = Date.now();
42
+ return () => {
43
+ const durationMs = Date.now() - start;
44
+ const doc = {
45
+ ...dbDefaults(),
46
+ id: nanoid(),
47
+ operation,
48
+ durationMs,
49
+ userId,
50
+ };
51
+ db.setDoc(BUILTIN_DEFS.perfLog, doc).catch((e) => console.error('[Logger] Failed to write perf log', e));
52
+ };
53
+ },
54
+ async feedback({ type, message, screenshotTempKey }) {
55
+ let screenshotUrl = null;
56
+ if (screenshotTempKey) {
57
+ try {
58
+ const destKey = `feedback/${nanoid()}.png`;
59
+ screenshotUrl = await storage.moveToPublic(screenshotTempKey, destKey);
60
+ }
61
+ catch (e) {
62
+ console.error('[Logger] Failed to promote feedback screenshot', e);
63
+ }
64
+ }
65
+ const doc = {
66
+ ...dbDefaults(),
67
+ id: nanoid(),
68
+ type,
69
+ message,
70
+ screenshotUrl,
71
+ userId,
72
+ };
73
+ await db.setDoc(BUILTIN_DEFS.feedbackLog, doc);
74
+ },
75
+ };
76
+ }
77
+ // Auto-capture unhandled server exceptions — uses raw mongo since these run outside request context
78
+ export function initServerErrorCapture() {
79
+ const writeErrorLog = (message, stack) => {
80
+ const id = nanoid();
81
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
+ const doc = {
83
+ _id: id,
84
+ id,
85
+ version: 1,
86
+ created: new Date(),
87
+ updated: new Date(),
88
+ level: 'error',
89
+ message,
90
+ stack,
91
+ source: 'server',
92
+ userId: null,
93
+ };
94
+ getMongoClient()
95
+ .then((client) => client.db(getDbName()).collection('errorLog').insertOne(doc))
96
+ .catch(() => { });
97
+ };
98
+ process.on('uncaughtException', (err) => {
99
+ writeErrorLog(err.message, err.stack ?? null);
100
+ });
101
+ process.on('unhandledRejection', (reason) => {
102
+ const msg = reason instanceof Error ? reason.message : String(reason);
103
+ const stack = reason instanceof Error ? reason.stack ?? null : null;
104
+ writeErrorLog(msg, stack);
105
+ });
106
+ }
107
+ function extractCategory(message) {
108
+ const match = /^\[([A-Z][A-Za-z0-9]*)\]/.exec(message);
109
+ return match?.[1];
110
+ }
111
+ function getLogFilePath() {
112
+ const date = new Date().toISOString().split('T')[0]; // YYYY-MM-DD
113
+ return path.join(process.cwd(), 'logs', `dev-${date}.jsonl`);
114
+ }
115
+ function serializeArg(arg) {
116
+ if (arg instanceof Error) {
117
+ return { __error: true, message: arg.message, stack: arg.stack };
118
+ }
119
+ return arg;
120
+ }
121
+ function writeLogEntry(level, args, source = 'server') {
122
+ try {
123
+ const firstString = args.find((a) => typeof a === 'string');
124
+ const message = firstString ?? '';
125
+ const category = extractCategory(message);
126
+ const entry = {
127
+ timestamp: new Date().toISOString(),
128
+ level,
129
+ category,
130
+ message,
131
+ args: args.map(serializeArg),
132
+ source,
133
+ };
134
+ const line = JSON.stringify(entry) + '\n';
135
+ const filePath = getLogFilePath();
136
+ // Ensure directory exists synchronously and append; use sync to avoid event-loop issues in console overrides
137
+ try {
138
+ fsSync.mkdirSync(path.dirname(filePath), { recursive: true });
139
+ }
140
+ catch {
141
+ // Already exists
142
+ }
143
+ fsSync.appendFileSync(filePath, line, 'utf-8');
144
+ }
145
+ catch {
146
+ // Never throw from logging — it would cause infinite recursion
147
+ }
148
+ }
149
+ async function cleanupOldLogs() {
150
+ const logsDir = path.join(process.cwd(), 'logs');
151
+ try {
152
+ const files = await fs.readdir(logsDir);
153
+ const cutoff = Date.now() - 7 * 24 * 60 * 60 * 1000;
154
+ for (const file of files) {
155
+ if (!file.startsWith('dev-') || !file.endsWith('.jsonl'))
156
+ continue;
157
+ const filePath = path.join(logsDir, file);
158
+ const stat = await fs.stat(filePath);
159
+ if (stat.mtimeMs < cutoff) {
160
+ await fs.unlink(filePath);
161
+ }
162
+ }
163
+ }
164
+ catch {
165
+ // Logs dir doesn't exist yet — that's fine
166
+ }
167
+ }
168
+ /** Write a log entry to the dev JSONL file. source defaults to 'browser'. */
169
+ export function writeClientLogEntry(entry) {
170
+ if (process.env['NODE_ENV'] !== 'development')
171
+ return;
172
+ const level = entry.level ?? 'log';
173
+ writeLogEntry(level, [entry.message, ...(entry.args ?? [])], entry.source ?? 'browser');
174
+ }
175
+ // ─── Error Classification & Capture ──────────────────────────────────────────
176
+ /**
177
+ * Registry of expected error patterns. Populated at startup by consuming apps
178
+ * via registerExpectedErrorPattern().
179
+ */
180
+ const expectedErrorPatterns = [];
181
+ /**
182
+ * Register a pattern string as an "expected" error.
183
+ * If any captured error message contains this pattern it will be classified as
184
+ * expected and only logged to the console — not persisted to MongoDB.
185
+ */
186
+ export function registerExpectedErrorPattern(pattern) {
187
+ expectedErrorPatterns.push(pattern);
188
+ }
189
+ /**
190
+ * Classify an error message as expected or unexpected based on registered patterns.
191
+ * @returns 'expected' if the message matches any registered pattern, 'unexpected' otherwise
192
+ */
193
+ export function classifyError(message) {
194
+ for (const pattern of expectedErrorPatterns) {
195
+ if (message.includes(pattern))
196
+ return 'expected';
197
+ }
198
+ return 'unexpected';
199
+ }
200
+ /**
201
+ * Generate an MD5 hash over (message + normalizedStack) for error grouping.
202
+ * Uses Node's built-in crypto — no additional dependencies.
203
+ */
204
+ function generateErrorHash(message, stack) {
205
+ const normalizedStack = (stack ?? '').substring(0, 500);
206
+ return crypto
207
+ .createHash('md5')
208
+ .update(`${message}:${normalizedStack}`)
209
+ .digest('hex');
210
+ }
211
+ /**
212
+ * Capture a server-side error.
213
+ *
214
+ * - Expected errors (matched by a registered pattern) are written to console.error only.
215
+ * - Unexpected errors are also persisted to the MongoDB `errorLog` collection.
216
+ * Documents are deduplicated by hash: repeated errors increment `count` instead of
217
+ * inserting a duplicate record.
218
+ *
219
+ * @param message A const string following the pattern '[Area] Description of cause'
220
+ * @param error The caught value (typically an Error instance)
221
+ * @param context Optional key/value pairs for structured diagnostics
222
+ */
223
+ export function captureServerError(message, error, context) {
224
+ const stack = error instanceof Error ? error.stack : undefined;
225
+ const classification = classifyError(message);
226
+ console.error('[captureServerError]', message, {
227
+ context,
228
+ stack,
229
+ classification,
230
+ });
231
+ if (classification === 'expected')
232
+ return;
233
+ // Persist unexpected errors asynchronously — never throw from here
234
+ const hash = generateErrorHash(message, stack);
235
+ const timestamp = Date.now();
236
+ getMongoClient()
237
+ .then((client) => {
238
+ const collection = client.db(getDbName()).collection('errorLog');
239
+ return collection.updateOne({ hash }, {
240
+ $inc: { count: 1 },
241
+ $set: {
242
+ message,
243
+ stack: stack ?? null,
244
+ context: context ?? {},
245
+ updatedAt: timestamp,
246
+ },
247
+ $setOnInsert: {
248
+ _id: nanoid(),
249
+ hash,
250
+ timestamp,
251
+ count: 0, // $inc will make this 1 on insert
252
+ },
253
+ }, { upsert: true });
254
+ })
255
+ .catch((e) => {
256
+ console.error('[captureServerError] Failed to persist error to MongoDB', e);
257
+ });
258
+ }
259
+ /** Override console.* globally to capture all output to JSONL in dev mode */
260
+ export function initDevLogs() {
261
+ if (process.env['NODE_ENV'] !== 'development')
262
+ return;
263
+ // Start cleanup in background
264
+ cleanupOldLogs().catch(() => { });
265
+ const original = {
266
+ log: console.log.bind(console),
267
+ info: console.info.bind(console),
268
+ warn: console.warn.bind(console),
269
+ error: console.error.bind(console),
270
+ debug: console.debug.bind(console),
271
+ };
272
+ console.log = (...args) => {
273
+ original.log(...args);
274
+ writeLogEntry('log', args);
275
+ };
276
+ console.info = (...args) => {
277
+ original.info(...args);
278
+ writeLogEntry('info', args);
279
+ };
280
+ console.warn = (...args) => {
281
+ original.warn(...args);
282
+ writeLogEntry('warn', args);
283
+ };
284
+ console.error = (...args) => {
285
+ original.error(...args);
286
+ writeLogEntry('error', args);
287
+ };
288
+ // console.debug: captured to JSONL but NOT printed to stdout
289
+ console.debug = (...args) => {
290
+ writeLogEntry('debug', args);
291
+ };
292
+ }
293
+ //# sourceMappingURL=Logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logging.js","sourceRoot":"","sources":["../../src/server/Logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAkBpD,8DAA8D;AAC9D,MAAM,UAAU,YAAY,CAC1B,MAAc,EACd,OAAsB,EACtB,EAAgB;IAEhB,SAAS,aAAa,CACpB,KAAe,EACf,OAAe,EACf,IAA8B;QAE9B,MAAM,GAAG,GAAG;YACV,GAAG,UAAU,EAAE;YACf,EAAE,EAAE,MAAM,EAAE;YACZ,KAAK;YACL,OAAO;YACP,MAAM,EAAE,QAAiB;YACzB,MAAM;YACN,IAAI,EAAE,IAAI,IAAI,IAAI;SACnB,CAAC;QACF,kEAAkE;QAClE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAChD,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,CAAC,CAAC,CACjD,CAAC;IACJ,CAAC;IAED,SAAS,eAAe,CACtB,KAAe,EACf,OAAe,EACf,IAA8B;QAE9B,MAAM,GAAG,GAAG;YACV,GAAG,UAAU,EAAE;YACf,EAAE,EAAE,MAAM,EAAE;YACZ,KAAK;YACL,OAAO;YACP,MAAM;YACN,IAAI,EAAE,IAAI,IAAI,IAAI;SACnB,CAAC;QACF,kEAAkE;QAClE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAClD,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,CAAC,CAAC,CACjD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC;QACvD,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;QACvD,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;QACvD,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC;QAEzD,IAAI,CAAC,SAAS;YACZ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,OAAO,GAAG,EAAE;gBACV,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBACtC,MAAM,GAAG,GAAG;oBACV,GAAG,UAAU,EAAE;oBACf,EAAE,EAAE,MAAM,EAAE;oBACZ,SAAS;oBACT,UAAU;oBACV,MAAM;iBACP,CAAC;gBACF,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/C,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,CAAC,CAAC,CACtD,CAAC;YACJ,CAAC,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE;YACjD,IAAI,aAAa,GAAkB,IAAI,CAAC;YACxC,IAAI,iBAAiB,EAAE,CAAC;gBACtB,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,YAAY,MAAM,EAAE,MAAM,CAAC;oBAC3C,aAAa,GAAG,MAAM,OAAO,CAAC,YAAY,CACxC,iBAAiB,EACjB,OAAO,CACR,CAAC;gBACJ,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,CAAC,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;YACD,MAAM,GAAG,GAAG;gBACV,GAAG,UAAU,EAAE;gBACf,EAAE,EAAE,MAAM,EAAE;gBACZ,IAAI;gBACJ,OAAO;gBACP,aAAa;gBACb,MAAM;aACP,CAAC;YACF,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,sBAAsB;IACpC,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,KAAoB,EAAE,EAAE;QAC9D,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QACpB,8DAA8D;QAC9D,MAAM,GAAG,GAAwB;YAC/B,GAAG,EAAE,EAAE;YACP,EAAE;YACF,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,IAAI,IAAI,EAAE;YACnB,OAAO,EAAE,IAAI,IAAI,EAAE;YACnB,KAAK,EAAE,OAAO;YACd,OAAO;YACP,KAAK;YACL,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,IAAI;SACb,CAAC;QACF,cAAc,EAAE;aACb,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CACf,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAC7D;aACA,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;QACtC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1C,MAAM,GAAG,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACpE,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC;AAaD,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,KAAK,GAAG,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;IAClE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,IAAI,QAAQ,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;IACnE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa,CACpB,KAAe,EACf,IAAe,EACf,SAA+B,QAAQ;IAEvC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAE7C,CAAC;QACd,MAAM,OAAO,GAAG,WAAW,IAAI,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAgB;YACzB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK;YACL,QAAQ;YACR,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YAC5B,MAAM;SACP,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QAC1C,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,6GAA6G;QAC7G,IAAI,CAAC;YACH,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QACD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,+DAA+D;IACjE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;gBAC1B,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,mBAAmB,CAAC,KAKnC;IACC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,aAAa;QAAE,OAAO;IACtD,MAAM,KAAK,GAAI,KAAK,CAAC,KAAkB,IAAI,KAAK,CAAC;IACjD,aAAa,CACX,KAAK,EACL,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,EACtC,KAAK,CAAC,MAAM,IAAI,SAAS,CAC1B,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,qBAAqB,GAAa,EAAE,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAAC,OAAe;IAC1D,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,KAAK,MAAM,OAAO,IAAI,qBAAqB,EAAE,CAAC;QAC5C,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,UAAU,CAAC;IACnD,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,OAAe,EAAE,KAAyB;IACnE,MAAM,eAAe,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,OAAO,MAAM;SACV,UAAU,CAAC,KAAK,CAAC;SACjB,MAAM,CAAC,GAAG,OAAO,IAAI,eAAe,EAAE,CAAC;SACvC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,KAAc,EACd,OAAiC;IAEjC,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAE9C,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,OAAO,EAAE;QAC7C,OAAO;QACP,KAAK;QACL,cAAc;KACf,CAAC,CAAC;IAEH,IAAI,cAAc,KAAK,UAAU;QAAE,OAAO;IAE1C,mEAAmE;IACnE,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,cAAc,EAAE;SACb,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QACf,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACjE,OAAO,UAAU,CAAC,SAAS,CACzB,EAAE,IAAI,EAAE,EACR;YACE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YAClB,IAAI,EAAE;gBACJ,OAAO;gBACP,KAAK,EAAE,KAAK,IAAI,IAAI;gBACpB,OAAO,EAAE,OAAO,IAAI,EAAE;gBACtB,SAAS,EAAE,SAAS;aACrB;YACD,YAAY,EAAE;gBACZ,GAAG,EAAE,MAAM,EAAE;gBACb,IAAI;gBACJ,SAAS;gBACT,KAAK,EAAE,CAAC,EAAE,kCAAkC;aAC7C;SACF,EACD,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB,CAAC;IACJ,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACX,OAAO,CAAC,KAAK,CACX,yDAAyD,EACzD,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW;IACzB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,aAAa;QAAE,OAAO;IAEtD,8BAA8B;IAC9B,cAAc,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEjC,MAAM,QAAQ,GAAG;QACf,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;KACnC,CAAC;IAEF,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;QACnC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACtB,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;QACpC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACvB,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;QACpC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACvB,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;QACrC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACxB,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,6DAA6D;IAC7D,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;QACrC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { JetStreamClient, NatsConnection, RetentionPolicy } from 'nats';
2
+ export interface NatsConfig {
3
+ url?: string;
4
+ creds?: string;
5
+ }
6
+ /**
7
+ * Connect to NATS. Called once at server startup.
8
+ * Development: connects to localhost:4222
9
+ * Production: uses NATS_URL env var (and NATS_CREDS for Synadia Cloud)
10
+ */
11
+ export declare function connectNats(config?: NatsConfig): Promise<NatsConnection>;
12
+ /**
13
+ * Get the active NATS connection. Throws if not connected.
14
+ */
15
+ export declare function getNatsConnection(): NatsConnection;
16
+ /**
17
+ * Publish a message to a NATS subject.
18
+ * @param subject - NATS subject (e.g. 'user.updates.abc123')
19
+ * @param payload - JSON-serializable payload
20
+ */
21
+ export declare function natsPublish(subject: string, payload: unknown): void;
22
+ /**
23
+ * Subscribe to a NATS subject.
24
+ * Returns an unsubscribe function — ALWAYS call it when done to prevent leaks.
25
+ *
26
+ * @example
27
+ * const unsub = await natsSubscribe('user.updates.*', (msg) => {
28
+ * console.log(msg.subject, msg.data);
29
+ * });
30
+ * // Later:
31
+ * unsub();
32
+ */
33
+ export declare function natsSubscribe(subject: string, handler: (msg: {
34
+ subject: string;
35
+ data: unknown;
36
+ }) => void | Promise<void>): Promise<() => void>;
37
+ /**
38
+ * Get the JetStream client for durable queues.
39
+ * JetStream must be enabled on the NATS server (pass -js flag).
40
+ */
41
+ export declare function getJetStream(): Promise<JetStreamClient>;
42
+ /**
43
+ * Ensure a JetStream stream exists (idempotent).
44
+ * Creates the stream if it doesn't exist; updates if config differs.
45
+ */
46
+ export declare function ensureStream(config: {
47
+ name: string;
48
+ subjects: string[];
49
+ retentionPolicy?: RetentionPolicy;
50
+ }): Promise<void>;
51
+ /**
52
+ * Gracefully close the NATS connection.
53
+ * Call during server shutdown.
54
+ */
55
+ export declare function closeNats(): Promise<void>;
56
+ //# sourceMappingURL=Nats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Nats.d.ts","sourceRoot":"","sources":["../../src/server/Nats.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EAEf,cAAc,EACd,eAAe,EAEhB,MAAM,MAAM,CAAC;AAed,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,cAAc,CAAC,CA8BzB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAGnE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,GAAG,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACzE,OAAO,CAAC,MAAM,IAAI,CAAC,CA8CrB;AAED;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,CAM7D;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BhB;AAED;;;GAGG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAM/C"}