modelence 0.8.0 → 0.9.0-dev.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 (377) hide show
  1. package/dist/app/authConfig.d.ts +68 -0
  2. package/dist/app/authConfig.d.ts.map +1 -0
  3. package/dist/app/authConfig.js +8 -0
  4. package/dist/app/authConfig.js.map +1 -0
  5. package/dist/app/backendApi.d.ts +29 -0
  6. package/dist/app/backendApi.d.ts.map +1 -0
  7. package/dist/app/backendApi.js +69 -0
  8. package/dist/app/backendApi.js.map +1 -0
  9. package/dist/app/email.d.ts +3 -0
  10. package/dist/app/email.d.ts.map +1 -0
  11. package/dist/app/email.js +8 -0
  12. package/dist/app/email.js.map +1 -0
  13. package/dist/app/emailConfig.d.ts +27 -0
  14. package/dist/app/emailConfig.d.ts.map +1 -0
  15. package/dist/app/emailConfig.js +8 -0
  16. package/dist/app/emailConfig.js.map +1 -0
  17. package/dist/app/index.d.ts +20 -0
  18. package/dist/app/index.d.ts.map +1 -0
  19. package/dist/app/index.js +258 -0
  20. package/dist/app/index.js.map +1 -0
  21. package/dist/app/loggerProcess.d.ts +5 -0
  22. package/dist/app/loggerProcess.d.ts.map +1 -0
  23. package/dist/app/loggerProcess.js +90 -0
  24. package/dist/app/loggerProcess.js.map +1 -0
  25. package/dist/app/metrics.d.ts +6 -0
  26. package/dist/app/metrics.d.ts.map +1 -0
  27. package/dist/app/metrics.js +92 -0
  28. package/dist/app/metrics.js.map +1 -0
  29. package/dist/app/module.d.ts +77 -0
  30. package/dist/app/module.d.ts.map +1 -0
  31. package/dist/app/module.js +46 -0
  32. package/dist/app/module.js.map +1 -0
  33. package/dist/app/server.d.ts +37 -0
  34. package/dist/app/server.d.ts.map +1 -0
  35. package/dist/app/server.js +198 -0
  36. package/dist/app/server.js.map +1 -0
  37. package/dist/app/state.d.ts +19 -0
  38. package/dist/app/state.d.ts.map +1 -0
  39. package/dist/app/state.js +27 -0
  40. package/dist/app/state.js.map +1 -0
  41. package/dist/app/websocketConfig.d.ts +7 -0
  42. package/dist/app/websocketConfig.d.ts.map +1 -0
  43. package/dist/app/websocketConfig.js +8 -0
  44. package/dist/app/websocketConfig.js.map +1 -0
  45. package/dist/auth/client/index.d.ts +69 -0
  46. package/dist/auth/client/index.d.ts.map +1 -0
  47. package/dist/auth/client/index.js +79 -0
  48. package/dist/auth/client/index.js.map +1 -0
  49. package/dist/auth/db.d.ts +176 -0
  50. package/dist/auth/db.d.ts.map +1 -0
  51. package/dist/auth/db.js +117 -0
  52. package/dist/auth/db.js.map +1 -0
  53. package/dist/auth/deleteUser.d.ts +5 -0
  54. package/dist/auth/deleteUser.d.ts.map +1 -0
  55. package/dist/auth/deleteUser.js +34 -0
  56. package/dist/auth/deleteUser.js.map +1 -0
  57. package/dist/auth/disposableEmails.d.ts +6 -0
  58. package/dist/auth/disposableEmails.d.ts.map +1 -0
  59. package/dist/auth/disposableEmails.js +47 -0
  60. package/dist/auth/disposableEmails.js.map +1 -0
  61. package/dist/auth/index.d.ts +7 -0
  62. package/dist/auth/index.d.ts.map +1 -0
  63. package/dist/auth/index.js +33 -0
  64. package/dist/auth/index.js.map +1 -0
  65. package/dist/auth/login.d.ts +9 -0
  66. package/dist/auth/login.d.ts.map +1 -0
  67. package/dist/auth/login.js +100 -0
  68. package/dist/auth/login.js.map +1 -0
  69. package/dist/auth/password.d.ts +14 -0
  70. package/dist/auth/password.d.ts.map +1 -0
  71. package/dist/auth/password.js +26 -0
  72. package/dist/auth/password.js.map +1 -0
  73. package/dist/auth/profile.d.ts +10 -0
  74. package/dist/auth/profile.d.ts.map +1 -0
  75. package/dist/auth/profile.js +13 -0
  76. package/dist/auth/profile.js.map +1 -0
  77. package/dist/auth/providers/github.d.ts +3 -0
  78. package/dist/auth/providers/github.d.ts.map +1 -0
  79. package/dist/auth/providers/github.js +122 -0
  80. package/dist/auth/providers/github.js.map +1 -0
  81. package/dist/auth/providers/google.d.ts +3 -0
  82. package/dist/auth/providers/google.d.ts.map +1 -0
  83. package/dist/auth/providers/google.js +108 -0
  84. package/dist/auth/providers/google.js.map +1 -0
  85. package/dist/auth/providers/oauth-common.d.ts +13 -0
  86. package/dist/auth/providers/oauth-common.d.ts.map +1 -0
  87. package/dist/auth/providers/oauth-common.js +109 -0
  88. package/dist/auth/providers/oauth-common.js.map +1 -0
  89. package/dist/auth/resetPassword.d.ts +10 -0
  90. package/dist/auth/resetPassword.d.ts.map +1 -0
  91. package/dist/auth/resetPassword.js +108 -0
  92. package/dist/auth/resetPassword.js.map +1 -0
  93. package/dist/auth/role.d.ts +8 -0
  94. package/dist/auth/role.d.ts.map +1 -0
  95. package/dist/auth/role.js +37 -0
  96. package/dist/auth/role.js.map +1 -0
  97. package/dist/auth/session.d.ts +24 -0
  98. package/dist/auth/session.d.ts.map +1 -0
  99. package/dist/auth/session.js +84 -0
  100. package/dist/auth/session.js.map +1 -0
  101. package/dist/auth/signup.d.ts +3 -0
  102. package/dist/auth/signup.d.ts.map +1 -0
  103. package/dist/auth/signup.js +89 -0
  104. package/dist/auth/signup.js.map +1 -0
  105. package/dist/auth/templates/emailVerficationTemplate.d.ts +6 -0
  106. package/dist/auth/templates/emailVerficationTemplate.d.ts.map +1 -0
  107. package/dist/auth/templates/emailVerficationTemplate.js +9 -0
  108. package/dist/auth/templates/emailVerficationTemplate.js.map +1 -0
  109. package/dist/auth/types.d.ts +22 -0
  110. package/dist/auth/types.d.ts.map +1 -0
  111. package/dist/auth/types.js +2 -0
  112. package/dist/auth/types.js.map +1 -0
  113. package/dist/auth/user.d.ts +5 -0
  114. package/dist/auth/user.d.ts.map +1 -0
  115. package/dist/auth/user.js +152 -0
  116. package/dist/auth/user.js.map +1 -0
  117. package/dist/auth/validators.d.ts +3 -0
  118. package/dist/auth/validators.d.ts.map +1 -0
  119. package/dist/auth/validators.js +8 -0
  120. package/dist/auth/validators.js.map +1 -0
  121. package/dist/auth/verification.d.ts +8 -0
  122. package/dist/auth/verification.d.ts.map +1 -0
  123. package/dist/auth/verification.js +94 -0
  124. package/dist/auth/verification.js.map +1 -0
  125. package/dist/bin/auth.d.ts +4 -0
  126. package/dist/bin/auth.d.ts.map +1 -0
  127. package/dist/bin/auth.js +48 -0
  128. package/dist/bin/auth.js.map +1 -0
  129. package/dist/bin/build.d.ts +2 -0
  130. package/dist/bin/build.d.ts.map +1 -0
  131. package/dist/bin/build.js +78 -0
  132. package/dist/bin/build.js.map +1 -0
  133. package/dist/bin/config.d.ts +11 -0
  134. package/dist/bin/config.d.ts.map +1 -0
  135. package/dist/bin/config.js +91 -0
  136. package/dist/bin/config.js.map +1 -0
  137. package/dist/bin/deploy.d.ts +6 -0
  138. package/dist/bin/deploy.d.ts.map +1 -0
  139. package/dist/bin/deploy.js +129 -0
  140. package/dist/bin/deploy.js.map +1 -0
  141. package/dist/bin/dev.d.ts +2 -0
  142. package/dist/bin/dev.d.ts.map +1 -0
  143. package/dist/bin/dev.js +14 -0
  144. package/dist/bin/dev.js.map +1 -0
  145. package/dist/bin/modelence.d.ts +3 -0
  146. package/dist/bin/modelence.d.ts.map +1 -0
  147. package/dist/bin/modelence.js +57 -3
  148. package/dist/bin/modelence.js.map +1 -1
  149. package/dist/bin/setup.d.ts +5 -0
  150. package/dist/bin/setup.d.ts.map +1 -0
  151. package/dist/bin/setup.js +91 -0
  152. package/dist/bin/setup.js.map +1 -0
  153. package/dist/bin/start.d.ts +2 -0
  154. package/dist/bin/start.d.ts.map +1 -0
  155. package/dist/bin/start.js +15 -0
  156. package/dist/bin/start.js.map +1 -0
  157. package/dist/client/AppProvider.d.ts +8 -0
  158. package/dist/client/AppProvider.d.ts.map +1 -0
  159. package/dist/client/AppProvider.js +31 -0
  160. package/dist/client/AppProvider.js.map +1 -0
  161. package/dist/client/errorHandler.d.ts +4 -0
  162. package/dist/client/errorHandler.d.ts.map +1 -0
  163. package/dist/client/errorHandler.js +10 -0
  164. package/dist/client/errorHandler.js.map +1 -0
  165. package/dist/client/localStorage.d.ts +3 -0
  166. package/dist/client/localStorage.d.ts.map +1 -0
  167. package/dist/client/localStorage.js +14 -0
  168. package/dist/client/localStorage.js.map +1 -0
  169. package/dist/client/method.d.ts +6 -0
  170. package/dist/client/method.d.ts.map +1 -0
  171. package/dist/client/method.js +52 -0
  172. package/dist/client/method.js.map +1 -0
  173. package/dist/client/renderApp.d.ts +9 -0
  174. package/dist/client/renderApp.d.ts.map +1 -0
  175. package/dist/client/renderApp.js +28 -0
  176. package/dist/client/renderApp.js.map +1 -0
  177. package/dist/client/session.d.ts +34 -0
  178. package/dist/client/session.d.ts.map +1 -0
  179. package/dist/client/session.js +83 -0
  180. package/dist/client/session.js.map +1 -0
  181. package/dist/client.d.ts +10 -133
  182. package/dist/client.d.ts.map +1 -0
  183. package/dist/client.js +14 -1
  184. package/dist/client.js.map +1 -1
  185. package/dist/config/client.d.ts +10 -0
  186. package/dist/config/client.d.ts.map +1 -0
  187. package/dist/config/client.js +14 -0
  188. package/dist/config/client.js.map +1 -0
  189. package/dist/config/server.d.ts +48 -0
  190. package/dist/config/server.d.ts.map +1 -0
  191. package/dist/config/server.js +85 -0
  192. package/dist/config/server.js.map +1 -0
  193. package/dist/config/sync.d.ts +2 -0
  194. package/dist/config/sync.d.ts.map +1 -0
  195. package/dist/config/sync.js +32 -0
  196. package/dist/config/sync.js.map +1 -0
  197. package/dist/config/types.d.ts +19 -0
  198. package/dist/config/types.d.ts.map +1 -0
  199. package/dist/config/types.js +2 -0
  200. package/dist/config/types.js.map +1 -0
  201. package/dist/cron/jobs.d.ts +13 -0
  202. package/dist/cron/jobs.d.ts.map +1 -0
  203. package/dist/cron/jobs.js +155 -0
  204. package/dist/cron/jobs.js.map +1 -0
  205. package/dist/cron/types.d.ts +29 -0
  206. package/dist/cron/types.d.ts.map +1 -0
  207. package/dist/cron/types.js +2 -0
  208. package/dist/cron/types.js.map +1 -0
  209. package/dist/data/schemaSerializer.d.ts +37 -0
  210. package/dist/data/schemaSerializer.d.ts.map +1 -0
  211. package/dist/data/schemaSerializer.js +104 -0
  212. package/dist/data/schemaSerializer.js.map +1 -0
  213. package/dist/{types-WgRbQ-tj.d.ts → data/store.d.ts} +13 -231
  214. package/dist/data/store.d.ts.map +1 -0
  215. package/dist/data/store.js +501 -0
  216. package/dist/data/store.js.map +1 -0
  217. package/dist/data/types.d.ts +47 -0
  218. package/dist/data/types.d.ts.map +1 -0
  219. package/dist/data/types.js +35 -0
  220. package/dist/data/types.js.map +1 -0
  221. package/dist/db/client.d.ts +5 -0
  222. package/dist/db/client.d.ts.map +1 -0
  223. package/dist/db/client.js +41 -0
  224. package/dist/db/client.js.map +1 -0
  225. package/dist/error.d.ts +16 -0
  226. package/dist/error.d.ts.map +1 -0
  227. package/dist/error.js +24 -0
  228. package/dist/error.js.map +1 -0
  229. package/dist/index.d.ts +6 -31
  230. package/dist/index.d.ts.map +1 -0
  231. package/dist/index.js +2 -1
  232. package/dist/index.js.map +1 -1
  233. package/dist/lock/db.d.ts +19 -0
  234. package/dist/lock/db.d.ts.map +1 -0
  235. package/dist/lock/db.js +28 -0
  236. package/dist/lock/db.js.map +1 -0
  237. package/dist/lock/helpers.d.ts +28 -0
  238. package/dist/lock/helpers.d.ts.map +1 -0
  239. package/dist/lock/helpers.js +107 -0
  240. package/dist/lock/helpers.js.map +1 -0
  241. package/dist/lock/index.d.ts +4 -0
  242. package/dist/lock/index.d.ts.map +1 -0
  243. package/dist/lock/index.js +4 -0
  244. package/dist/lock/index.js.map +1 -0
  245. package/dist/lock/module.d.ts +7 -0
  246. package/dist/lock/module.d.ts.map +1 -0
  247. package/dist/lock/module.js +9 -0
  248. package/dist/lock/module.js.map +1 -0
  249. package/dist/methods/index.d.ts +7 -0
  250. package/dist/methods/index.d.ts.map +1 -0
  251. package/dist/methods/index.js +65 -0
  252. package/dist/methods/index.js.map +1 -0
  253. package/dist/methods/serialize.d.ts +15 -0
  254. package/dist/methods/serialize.d.ts.map +1 -0
  255. package/dist/methods/serialize.js +56 -0
  256. package/dist/methods/serialize.js.map +1 -0
  257. package/dist/methods/types.d.ts +37 -0
  258. package/dist/methods/types.d.ts.map +1 -0
  259. package/dist/methods/types.js +2 -0
  260. package/dist/methods/types.js.map +1 -0
  261. package/dist/migration/db.d.ts +17 -0
  262. package/dist/migration/db.d.ts.map +1 -0
  263. package/dist/migration/db.js +13 -0
  264. package/dist/migration/db.js.map +1 -0
  265. package/dist/migration/index.d.ts +11 -0
  266. package/dist/migration/index.d.ts.map +1 -0
  267. package/dist/migration/index.js +85 -0
  268. package/dist/migration/index.js.map +1 -0
  269. package/dist/mongo.d.ts +2 -3
  270. package/dist/mongo.d.ts.map +1 -0
  271. package/dist/mongo.js +2 -1
  272. package/dist/mongo.js.map +1 -1
  273. package/dist/rate-limit/db.d.ts +29 -0
  274. package/dist/rate-limit/db.d.ts.map +1 -0
  275. package/dist/rate-limit/db.js +25 -0
  276. package/dist/rate-limit/db.js.map +1 -0
  277. package/dist/rate-limit/index.d.ts +4 -0
  278. package/dist/rate-limit/index.d.ts.map +1 -0
  279. package/dist/rate-limit/index.js +6 -0
  280. package/dist/rate-limit/index.js.map +1 -0
  281. package/dist/rate-limit/rules.d.ts +22 -0
  282. package/dist/rate-limit/rules.d.ts.map +1 -0
  283. package/dist/rate-limit/rules.js +112 -0
  284. package/dist/rate-limit/rules.js.map +1 -0
  285. package/dist/rate-limit/types.d.ts +12 -0
  286. package/dist/rate-limit/types.d.ts.map +1 -0
  287. package/dist/rate-limit/types.js +2 -0
  288. package/dist/rate-limit/types.js.map +1 -0
  289. package/dist/routes/handler.d.ts +4 -0
  290. package/dist/routes/handler.d.ts.map +1 -0
  291. package/dist/routes/handler.js +66 -0
  292. package/dist/routes/handler.js.map +1 -0
  293. package/dist/routes/types.d.ts +45 -0
  294. package/dist/routes/types.d.ts.map +1 -0
  295. package/dist/routes/types.js +2 -0
  296. package/dist/routes/types.js.map +1 -0
  297. package/dist/server.d.ts +19 -551
  298. package/dist/server.d.ts.map +1 -0
  299. package/dist/server.js +15 -18
  300. package/dist/server.js.map +1 -1
  301. package/dist/system/index.d.ts +4 -0
  302. package/dist/system/index.d.ts.map +1 -0
  303. package/dist/system/index.js +21 -0
  304. package/dist/system/index.js.map +1 -0
  305. package/dist/telemetry/index.d.ts +11 -0
  306. package/dist/telemetry/index.d.ts.map +1 -0
  307. package/dist/telemetry/index.js +79 -0
  308. package/dist/telemetry/index.js.map +1 -0
  309. package/dist/telemetry.d.ts +2 -11
  310. package/dist/telemetry.d.ts.map +1 -0
  311. package/dist/telemetry.js +1 -1
  312. package/dist/telemetry.js.map +1 -1
  313. package/dist/time.d.ts +8 -0
  314. package/dist/time.d.ts.map +1 -0
  315. package/dist/time.js +13 -0
  316. package/dist/time.js.map +1 -0
  317. package/dist/types/email.d.ts +25 -0
  318. package/dist/types/email.d.ts.map +1 -0
  319. package/dist/types/email.js +2 -0
  320. package/dist/types/email.js.map +1 -0
  321. package/dist/types/index.d.ts +14 -0
  322. package/dist/types/index.d.ts.map +1 -0
  323. package/dist/types/index.js +2 -0
  324. package/dist/types/index.js.map +1 -0
  325. package/dist/types.d.ts +10 -7
  326. package/dist/types.d.ts.map +1 -0
  327. package/dist/types.js +1 -1
  328. package/dist/types.js.map +1 -1
  329. package/dist/utils/index.d.ts +4 -0
  330. package/dist/utils/index.d.ts.map +1 -0
  331. package/dist/utils/index.js +15 -0
  332. package/dist/utils/index.js.map +1 -0
  333. package/dist/viteServer.d.ts +13 -0
  334. package/dist/viteServer.d.ts.map +1 -0
  335. package/dist/viteServer.js +132 -0
  336. package/dist/viteServer.js.map +1 -0
  337. package/dist/websocket/client.d.ts +9 -0
  338. package/dist/websocket/client.d.ts.map +1 -0
  339. package/dist/websocket/client.js +16 -0
  340. package/dist/websocket/client.js.map +1 -0
  341. package/dist/websocket/clientChannel.d.ts +9 -0
  342. package/dist/websocket/clientChannel.d.ts.map +1 -0
  343. package/dist/websocket/clientChannel.js +26 -0
  344. package/dist/websocket/clientChannel.js.map +1 -0
  345. package/dist/websocket/serverChannel.d.ts +14 -0
  346. package/dist/websocket/serverChannel.d.ts.map +1 -0
  347. package/dist/websocket/serverChannel.js +21 -0
  348. package/dist/websocket/serverChannel.js.map +1 -0
  349. package/dist/websocket/socketio/client.d.ts +4 -0
  350. package/dist/websocket/socketio/client.d.ts.map +1 -0
  351. package/dist/websocket/socketio/client.js +48 -0
  352. package/dist/websocket/socketio/client.js.map +1 -0
  353. package/dist/websocket/socketio/server.d.ts +10 -0
  354. package/dist/websocket/socketio/server.d.ts.map +1 -0
  355. package/dist/websocket/socketio/server.js +80 -0
  356. package/dist/websocket/socketio/server.js.map +1 -0
  357. package/dist/websocket/types.d.ts +45 -0
  358. package/dist/websocket/types.d.ts.map +1 -0
  359. package/dist/websocket/types.js +2 -0
  360. package/dist/websocket/types.js.map +1 -0
  361. package/package.json +5 -6
  362. package/dist/chunk-3S2FFBNS.js +0 -2
  363. package/dist/chunk-3S2FFBNS.js.map +0 -1
  364. package/dist/chunk-3YAV3UUU.js +0 -3
  365. package/dist/chunk-3YAV3UUU.js.map +0 -1
  366. package/dist/chunk-55J6XMHW.js +0 -2
  367. package/dist/chunk-55J6XMHW.js.map +0 -1
  368. package/dist/chunk-C3UESBRX.js +0 -2
  369. package/dist/chunk-C3UESBRX.js.map +0 -1
  370. package/dist/chunk-DO5TZLF5.js +0 -2
  371. package/dist/chunk-DO5TZLF5.js.map +0 -1
  372. package/dist/chunk-PB6WQQ4L.js +0 -3
  373. package/dist/chunk-PB6WQQ4L.js.map +0 -1
  374. package/dist/index-CwdohC5n.d.ts +0 -15
  375. package/dist/package-3YQBVIVQ.js +0 -2
  376. package/dist/package-3YQBVIVQ.js.map +0 -1
  377. package/dist/types-Ds1ESQSs.d.ts +0 -106
@@ -0,0 +1,48 @@
1
+ import io from 'socket.io-client';
2
+ import { getLocalStorageSession } from '../../client/localStorage';
3
+ let socketClient;
4
+ function init(props) {
5
+ socketClient = io('/', {
6
+ auth: {
7
+ token: getLocalStorageSession()?.authToken,
8
+ },
9
+ });
10
+ props.channels?.forEach((channel) => channel.init());
11
+ }
12
+ function on({ category, listener, }) {
13
+ socketClient.on(category, listener);
14
+ }
15
+ function once({ category, listener, }) {
16
+ socketClient.once(category, listener);
17
+ }
18
+ function off({ category, listener, }) {
19
+ socketClient.off(category, listener);
20
+ }
21
+ function emit({ eventName, category, id }) {
22
+ socketClient.emit(eventName, `${category}:${id}`);
23
+ }
24
+ function joinChannel({ category, id }) {
25
+ emit({
26
+ eventName: 'joinChannel',
27
+ category,
28
+ id,
29
+ });
30
+ }
31
+ function leaveChannel({ category, id }) {
32
+ emit({
33
+ eventName: 'leaveChannel',
34
+ category,
35
+ id,
36
+ });
37
+ }
38
+ const websocketProvider = {
39
+ init,
40
+ on,
41
+ once,
42
+ off,
43
+ emit,
44
+ joinChannel,
45
+ leaveChannel,
46
+ };
47
+ export default websocketProvider;
48
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/websocket/socketio/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,IAAI,YAAoB,CAAC;AAEzB,SAAS,IAAI,CAAC,KAA8C;IAC1D,YAAY,GAAG,EAAE,CAAC,GAAG,EAAE;QACrB,IAAI,EAAE;YACJ,KAAK,EAAE,sBAAsB,EAAE,EAAE,SAAS;SAC3C;KACF,CAAC,CAAC;IAEH,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,EAAE,CAAc,EACvB,QAAQ,EACR,QAAQ,GAIT;IACC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,IAAI,CAAc,EACzB,QAAQ,EACR,QAAQ,GAIT;IACC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,GAAG,CAAc,EACxB,QAAQ,EACR,QAAQ,GAIT;IACC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAuD;IAC5F,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAoC;IACrE,IAAI,CAAC;QACH,SAAS,EAAE,aAAa;QACxB,QAAQ;QACR,EAAE;KACH,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAoC;IACtE,IAAI,CAAC;QACH,SAAS,EAAE,cAAc;QACzB,QAAQ;QACR,EAAE;KACH,CAAC,CAAC;AACL,CAAC;AAED,MAAM,iBAAiB,GAA4B;IACjD,IAAI;IACJ,EAAE;IACF,IAAI;IACJ,GAAG;IACH,IAAI;IACJ,WAAW;IACX,YAAY;CACb,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Server } from 'http';
2
+ import { WebsocketServerProvider } from '../types';
3
+ import { ServerChannel } from '../serverChannel';
4
+ export declare function init({ httpServer, channels, }: {
5
+ httpServer: Server;
6
+ channels: ServerChannel[];
7
+ }): Promise<void>;
8
+ declare const _default: WebsocketServerProvider;
9
+ export default _default;
10
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/websocket/socketio/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAK9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOjD,wBAAsB,IAAI,CAAC,EACzB,UAAU,EACV,QAAQ,GACT,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B,iBAiFA;wBASI,uBAAuB;AAH5B,wBAG6B"}
@@ -0,0 +1,80 @@
1
+ import { Server as SocketServer } from 'socket.io';
2
+ import { createAdapter } from '@socket.io/mongo-adapter';
3
+ import { authenticate } from '../../auth';
4
+ import { getClient } from '../../db/client';
5
+ let socketServer = null;
6
+ const COLLECTION = '_modelenceSocketio';
7
+ export async function init({ httpServer, channels, }) {
8
+ const mongodbClient = getClient();
9
+ console.log('Initializing Socket.IO server...');
10
+ let mongoCollection = null;
11
+ if (mongodbClient) {
12
+ mongoCollection = mongodbClient.db().collection(COLLECTION);
13
+ try {
14
+ await mongoCollection.createIndex({ createdAt: 1 }, { expireAfterSeconds: 3600, background: true });
15
+ }
16
+ catch (error) {
17
+ console.error('Failed to create index on MongoDB collection for Socket.IO:', error);
18
+ }
19
+ }
20
+ socketServer = new SocketServer(httpServer, {
21
+ cors: {
22
+ origin: '*',
23
+ methods: ['GET', 'POST'],
24
+ },
25
+ adapter: mongoCollection ? createAdapter(mongoCollection) : undefined,
26
+ transports: ['polling', 'websocket'],
27
+ allowUpgrades: true,
28
+ perMessageDeflate: false,
29
+ });
30
+ socketServer.on('error', (error) => {
31
+ console.error('Socket.IO error:', error);
32
+ });
33
+ socketServer.use(async (socket, next) => {
34
+ const token = socket.handshake.auth.token;
35
+ try {
36
+ socket.data = await authenticate(token);
37
+ }
38
+ finally {
39
+ next();
40
+ }
41
+ });
42
+ socketServer.on('connection', (socket) => {
43
+ console.log(`Socket.IO client connected`);
44
+ socket.on('disconnect', () => {
45
+ console.log(`Socket.IO client disconnected`);
46
+ });
47
+ socket.on('joinChannel', async (channelName) => {
48
+ const [category] = channelName.split(':');
49
+ let authorized = false;
50
+ for (const channel of channels) {
51
+ if (channel.category === category) {
52
+ if (!channel.canAccessChannel || (await channel.canAccessChannel(socket.data))) {
53
+ socket.join(channelName);
54
+ authorized = true;
55
+ console.log(`User ${socket.id} joined channel ${channelName}`);
56
+ socket.emit('joinedChannel', channelName);
57
+ }
58
+ break; // Found matching channel, stop searching
59
+ }
60
+ }
61
+ if (!authorized) {
62
+ socket.emit('joinError', { channel: channelName, error: 'Access denied' });
63
+ }
64
+ });
65
+ socket.on('leaveChannel', (channelName) => {
66
+ socket.leave(channelName);
67
+ console.log(`User ${socket.id} left channel ${channelName}`);
68
+ socket.emit('leftChannel', channelName);
69
+ });
70
+ });
71
+ console.log('Socket.IO server initialized');
72
+ }
73
+ function broadcast({ category, id, data }) {
74
+ socketServer?.to(`${category}:${id}`).emit(category, data);
75
+ }
76
+ export default {
77
+ init,
78
+ broadcast,
79
+ };
80
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/websocket/socketio/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { Server } from 'http';
2
+ import { ServerChannel } from './serverChannel';
3
+ import { ClientChannel } from './clientChannel';
4
+ export interface WebsocketServerProvider {
5
+ init(props: {
6
+ httpServer: Server;
7
+ channels: ServerChannel[];
8
+ }): Promise<void>;
9
+ broadcast<T>(props: {
10
+ category: string;
11
+ id: string;
12
+ data: T;
13
+ }): void;
14
+ }
15
+ export interface WebsocketClientProvider {
16
+ init(props: {
17
+ channels?: ClientChannel[];
18
+ }): void;
19
+ on<T>(props: {
20
+ category: string;
21
+ listener: (data: T) => void;
22
+ }): void;
23
+ once<T>(props: {
24
+ category: string;
25
+ listener: (data: T) => void;
26
+ }): void;
27
+ off<T>(props: {
28
+ category: string;
29
+ listener: (data: T) => void;
30
+ }): void;
31
+ emit(props: {
32
+ eventName: string;
33
+ category: string;
34
+ id: string;
35
+ }): void;
36
+ joinChannel(props: {
37
+ category: string;
38
+ id: string;
39
+ }): void;
40
+ leaveChannel(props: {
41
+ category: string;
42
+ id: string;
43
+ }): void;
44
+ }
45
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/websocket/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;CACtE;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAClD,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACtE,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACxE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACvE,IAAI,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACvE,WAAW,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3D,YAAY,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC7D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/websocket/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "modelence",
4
- "version": "0.8.0",
4
+ "version": "0.9.0-dev.0",
5
5
  "description": "The Node.js Framework for Real-Time MongoDB Apps",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/global.d.ts",
@@ -24,8 +24,8 @@
24
24
  "modelence": "./dist/bin/modelence.js"
25
25
  },
26
26
  "scripts": {
27
- "build": "tsup",
28
- "dev": "tsup --watch",
27
+ "build": "rm -rf dist && tsc && tsc-alias",
28
+ "dev": "tsc --watch",
29
29
  "format": "prettier --write \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"",
30
30
  "format:check": "prettier --check \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"",
31
31
  "lint": "eslint src --ext .ts,.tsx --fix",
@@ -48,7 +48,6 @@
48
48
  "homepage": "https://modelence.com",
49
49
  "devDependencies": {
50
50
  "@types/archiver": "^6.0.3",
51
- "@types/bcrypt": "^5.0.2",
52
51
  "@types/cookie-parser": "^1.4.9",
53
52
  "@types/express": "^5.0.0",
54
53
  "@types/fs-extra": "^11.0.4",
@@ -65,13 +64,13 @@
65
64
  "react": "^19.0.0",
66
65
  "react-dom": "^19.0.0",
67
66
  "ts-jest": "^29.4.5",
68
- "ts-node": "^10.9.2"
67
+ "ts-node": "^10.9.2",
68
+ "tsc-alias": "^1.8.16"
69
69
  },
70
70
  "dependencies": {
71
71
  "@socket.io/mongo-adapter": "^0.4.0",
72
72
  "@vitejs/plugin-react": "^4.3.4",
73
73
  "archiver": "^7.0.1",
74
- "bcrypt": "^5.1.1",
75
74
  "commander": "^12.0.0",
76
75
  "cookie-parser": "^1.4.7",
77
76
  "dotenv": "^16.4.5",
@@ -1,2 +0,0 @@
1
- function s(e){if(e instanceof Date)return {type:"date"};if(Array.isArray(e)){let n={};for(let r=0;r<e.length;r++){let t=e[r],o=s(t);o&&(n[r]=o);}return Object.keys(n).length>0?{type:"array",elements:n}:null}if(typeof e=="object"&&e!==null){let n={};for(let[r,t]of Object.entries(e)){let o=s(t);o&&(n[r]=o);}return Object.keys(n).length>0?{type:"object",props:n}:null}return null}function i(e,n){return n?n.type==="date"?new Date(e):n.type==="array"?e.map((r,t)=>i(r,n.elements[t])):n.type==="object"?Object.fromEntries(Object.entries(e).map(([r,t])=>[r,i(t,n.props[r])])):e:e}export{s as a,i as b};//# sourceMappingURL=chunk-3S2FFBNS.js.map
2
- //# sourceMappingURL=chunk-3S2FFBNS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/methods/serialize.ts"],"names":["getResponseTypeMap","result","elements","i","item","subTypeMap","props","key","value","reviveResponseTypes","data","typeMap","index"],"mappings":"AAAO,SAASA,EAAmBC,CAAAA,CAAiB,CAClD,GAAIA,CAAAA,YAAkB,KACpB,OAAO,CAAE,IAAA,CAAM,MAAO,EAGxB,GAAI,KAAA,CAAM,QAAQA,CAAM,CAAA,CAAG,CACzB,IAAMC,CAAAA,CAAoC,EAAC,CAC3C,QAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAO,OAAQE,CAAAA,EAAAA,CAAK,CACtC,IAAMC,CAAAA,CAAOH,EAAOE,CAAC,CAAA,CACfE,EAAaL,CAAAA,CAAmBI,CAAI,EACtCC,CAAAA,GACFH,CAAAA,CAASC,CAAC,CAAA,CAAIE,GAElB,CACA,OAAO,MAAA,CAAO,IAAA,CAAKH,CAAQ,CAAA,CAAE,MAAA,CAAS,CAAA,CAClC,CACE,KAAM,OAAA,CACN,QAAA,CAAAA,CACF,CAAA,CACA,IACN,CAEA,GAAI,OAAOD,CAAAA,EAAW,QAAA,EAAYA,IAAW,IAAA,CAAM,CACjD,IAAMK,CAAAA,CAAiC,GACvC,IAAA,GAAW,CAACC,CAAAA,CAAKC,CAAK,IAAK,MAAA,CAAO,OAAA,CAAQP,CAAM,CAAA,CAAG,CACjD,IAAMI,CAAAA,CAAaL,CAAAA,CAAmBQ,CAAK,CAAA,CACvCH,IACFC,CAAAA,CAAMC,CAAG,CAAA,CAAIF,CAAAA,EAEjB,CACA,OAAO,MAAA,CAAO,IAAA,CAAKC,CAAK,EAAE,MAAA,CAAS,CAAA,CAC/B,CACE,IAAA,CAAM,QAAA,CACN,MAAAA,CACF,CAAA,CACA,IACN,CAEA,OAAO,IACT,CAEO,SAASG,CAAAA,CAAiCC,CAAAA,CAASC,EAAsC,CAC9F,OAAKA,CAAAA,CAIDA,CAAAA,CAAQ,OAAS,MAAA,CACZ,IAAI,KAAKD,CAAc,CAAA,CAG5BC,EAAQ,IAAA,GAAS,OAAA,CACXD,CAAAA,CAAmB,GAAA,CAAI,CAACN,CAAAA,CAAeQ,CAAAA,GAC7CH,CAAAA,CAAoBL,CAAAA,CAAOO,EAAQ,QAAA,CAAuCC,CAAK,CAAC,CAClF,EAGED,CAAAA,CAAQ,IAAA,GAAS,SACZ,MAAA,CAAO,WAAA,CACZ,OAAO,OAAA,CAAQD,CAA+B,CAAA,CAAE,GAAA,CAAI,CAAC,CAACH,CAAAA,CAAKC,CAAK,CAAA,GAAM,CACpED,EACAE,CAAAA,CACED,CAAAA,CACCG,CAAAA,CAAQ,KAAA,CAAkCJ,CAAG,CAChD,CACF,CAAC,CACH,CAAA,CAGKG,EAzBEA,CA0BX","file":"chunk-3S2FFBNS.js","sourcesContent":["export function getResponseTypeMap(result: unknown) {\n if (result instanceof Date) {\n return { type: 'date' };\n }\n\n if (Array.isArray(result)) {\n const elements: Record<string, unknown> = {};\n for (let i = 0; i < result.length; i++) {\n const item = result[i];\n const subTypeMap = getResponseTypeMap(item);\n if (subTypeMap) {\n elements[i] = subTypeMap;\n }\n }\n return Object.keys(elements).length > 0\n ? {\n type: 'array',\n elements,\n }\n : null;\n }\n\n if (typeof result === 'object' && result !== null) {\n const props: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(result)) {\n const subTypeMap = getResponseTypeMap(value);\n if (subTypeMap) {\n props[key] = subTypeMap;\n }\n }\n return Object.keys(props).length > 0\n ? {\n type: 'object',\n props,\n }\n : null;\n }\n\n return null;\n}\n\nexport function reviveResponseTypes<T = unknown>(data: T, typeMap?: Record<string, unknown>): T {\n if (!typeMap) {\n return data;\n }\n\n if (typeMap.type === 'date') {\n return new Date(data as string) as T;\n }\n\n if (typeMap.type === 'array') {\n return (data as unknown[]).map((item: unknown, index: number) =>\n reviveResponseTypes(item, (typeMap.elements as Record<string, unknown>[])[index])\n ) as T;\n }\n\n if (typeMap.type === 'object') {\n return Object.fromEntries(\n Object.entries(data as Record<string, unknown>).map(([key, value]) => [\n key,\n reviveResponseTypes(\n value,\n (typeMap.props as Record<string, unknown>)[key] as Record<string, unknown>\n ),\n ])\n ) as T;\n }\n\n return data;\n}\n"]}
@@ -1,3 +0,0 @@
1
- var s="module",i="modelence",o="0.8.0",r="The Node.js Framework for Real-Time MongoDB Apps",n="dist/index.js",p="dist/global.d.ts",c={".":"./dist/index.js","./client":"./dist/client.js","./server":"./dist/server.js","./telemetry":"./dist/telemetry.js","./mongodb":"./dist/mongo.js","./types":{types:"./dist/types.d.ts",default:"./dist/types.js"}},d=["dist","dist/bin"],l={modelence:"./dist/bin/modelence.js"},m={build:"tsup",dev:"tsup --watch",format:'prettier --write "src/**/*.{ts,tsx,js,jsx,json,css,md}"',"format:check":'prettier --check "src/**/*.{ts,tsx,js,jsx,json,css,md}"',lint:"eslint src --ext .ts,.tsx --fix","lint:check":"eslint src --ext .ts,.tsx",prepublishOnly:"npm run build",test:"NODE_OPTIONS=--experimental-vm-modules jest","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch","test:coverage":"NODE_OPTIONS=--experimental-vm-modules jest --coverage",postversion:"git push && git push --tags"},a={type:"git",url:"git+https://github.com/modelence/modelence.git"},y="Modelence",u="SEE LICENSE IN LICENSE",j={url:"https://github.com/modelence/modelence/issues"},g="https://modelence.com",h={"@types/archiver":"^6.0.3","@types/bcrypt":"^5.0.2","@types/cookie-parser":"^1.4.9","@types/express":"^5.0.0","@types/fs-extra":"^11.0.4","@types/jest":"^30.0.0","@types/node":"^22.5.1","@types/react":"^19.0.0","@types/react-dom":"^19.0.1","@types/socket.io":"^3.0.1","@typescript-eslint/eslint-plugin":"^8.17.0","@typescript-eslint/parser":"^8.17.0",eslint:"^9.37.0",jest:"^30.2.0",prettier:"^3.6.2",react:"^19.0.0","react-dom":"^19.0.0","ts-jest":"^29.4.5","ts-node":"^10.9.2"},x={"@socket.io/mongo-adapter":"^0.4.0","@vitejs/plugin-react":"^4.3.4",archiver:"^7.0.1",bcrypt:"^5.1.1",commander:"^12.0.0","cookie-parser":"^1.4.7",dotenv:"^16.4.5","elastic-apm-node":"^4.8.0",express:"^4.21.0","fs-extra":"^11.2.0",jiti:"^2.4.2",mongodb:"^6.8.1",open:"^10.1.0","socket.io":"^4.8.1","socket.io-client":"^4.8.1",tsup:"^8.3.6",tsx:"^4.19.3",typescript:"^5.7.2",vite:"^6.0.3","vite-plugin-eslint":"^1.8.1",winston:"^3.15.0","winston-elasticsearch":"^0.19.0",zod:"^3.23.8",zustand:"^5.0.2"},v={react:">=18.0.0","react-dom":">=18.0.0"},b={type:s,name:i,version:o,description:r,main:n,types:p,exports:c,files:d,bin:l,scripts:m,repository:a,author:y,license:u,bugs:j,homepage:g,devDependencies:h,dependencies:x,peerDependencies:v};
2
- export{s as a,i as b,o as c,r as d,n as e,p as f,c as g,d as h,l as i,m as j,a as k,y as l,u as m,j as n,g as o,h as p,x as q,v as r,b as s};//# sourceMappingURL=chunk-3YAV3UUU.js.map
3
- //# sourceMappingURL=chunk-3YAV3UUU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../package.json"],"names":["type","name","version","description","main","types","exports","files","bin","scripts","repository","author","license","bugs","homepage","devDependencies","dependencies","peerDependencies","package_default"],"mappings":"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","file":"chunk-3YAV3UUU.js","sourcesContent":["{\n \"type\": \"module\",\n \"name\": \"modelence\",\n \"version\": \"0.8.0\",\n \"description\": \"The Node.js Framework for Real-Time MongoDB Apps\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/global.d.ts\",\n \"exports\": {\n \".\": \"./dist/index.js\",\n \"./client\": \"./dist/client.js\",\n \"./server\": \"./dist/server.js\",\n \"./telemetry\": \"./dist/telemetry.js\",\n \"./mongodb\": \"./dist/mongo.js\",\n \"./types\": {\n \"types\": \"./dist/types.d.ts\",\n \"default\": \"./dist/types.js\"\n }\n },\n \"files\": [\n \"dist\",\n \"dist/bin\"\n ],\n \"bin\": {\n \"modelence\": \"./dist/bin/modelence.js\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"format\": \"prettier --write \\\"src/**/*.{ts,tsx,js,jsx,json,css,md}\\\"\",\n \"format:check\": \"prettier --check \\\"src/**/*.{ts,tsx,js,jsx,json,css,md}\\\"\",\n \"lint\": \"eslint src --ext .ts,.tsx --fix\",\n \"lint:check\": \"eslint src --ext .ts,.tsx\",\n \"prepublishOnly\": \"npm run build\",\n \"test\": \"NODE_OPTIONS=--experimental-vm-modules jest\",\n \"test:watch\": \"NODE_OPTIONS=--experimental-vm-modules jest --watch\",\n \"test:coverage\": \"NODE_OPTIONS=--experimental-vm-modules jest --coverage\",\n \"postversion\": \"git push && git push --tags\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/modelence/modelence.git\"\n },\n \"author\": \"Modelence\",\n \"license\": \"SEE LICENSE IN LICENSE\",\n \"bugs\": {\n \"url\": \"https://github.com/modelence/modelence/issues\"\n },\n \"homepage\": \"https://modelence.com\",\n \"devDependencies\": {\n \"@types/archiver\": \"^6.0.3\",\n \"@types/bcrypt\": \"^5.0.2\",\n \"@types/cookie-parser\": \"^1.4.9\",\n \"@types/express\": \"^5.0.0\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^22.5.1\",\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.0.1\",\n \"@types/socket.io\": \"^3.0.1\",\n \"@typescript-eslint/eslint-plugin\": \"^8.17.0\",\n \"@typescript-eslint/parser\": \"^8.17.0\",\n \"eslint\": \"^9.37.0\",\n \"jest\": \"^30.2.0\",\n \"prettier\": \"^3.6.2\",\n \"react\": \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n \"ts-jest\": \"^29.4.5\",\n \"ts-node\": \"^10.9.2\"\n },\n \"dependencies\": {\n \"@socket.io/mongo-adapter\": \"^0.4.0\",\n \"@vitejs/plugin-react\": \"^4.3.4\",\n \"archiver\": \"^7.0.1\",\n \"bcrypt\": \"^5.1.1\",\n \"commander\": \"^12.0.0\",\n \"cookie-parser\": \"^1.4.7\",\n \"dotenv\": \"^16.4.5\",\n \"elastic-apm-node\": \"^4.8.0\",\n \"express\": \"^4.21.0\",\n \"fs-extra\": \"^11.2.0\",\n \"jiti\": \"^2.4.2\",\n \"mongodb\": \"^6.8.1\",\n \"open\": \"^10.1.0\",\n \"socket.io\": \"^4.8.1\",\n \"socket.io-client\": \"^4.8.1\",\n \"tsup\": \"^8.3.6\",\n \"tsx\": \"^4.19.3\",\n \"typescript\": \"^5.7.2\",\n \"vite\": \"^6.0.3\",\n \"vite-plugin-eslint\": \"^1.8.1\",\n \"winston\": \"^3.15.0\",\n \"winston-elasticsearch\": \"^0.19.0\",\n \"zod\": \"^3.23.8\",\n \"zustand\": \"^5.0.2\"\n },\n \"peerDependencies\": {\n \"react\": \">=18.0.0\",\n \"react-dom\": \">=18.0.0\"\n }\n}\n"]}
@@ -1,2 +0,0 @@
1
- //# sourceMappingURL=chunk-55J6XMHW.js.map
2
- //# sourceMappingURL=chunk-55J6XMHW.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-55J6XMHW.js"}
@@ -1,2 +0,0 @@
1
- var t=class extends Error{},a=class extends t{constructor(s){super(s);this.status=401;this.name="AuthError";}},n=class extends t{constructor(s){super(s);this.status=400;this.name="ValidationError";}},c=class extends t{constructor(s){super(s);this.status=429;this.name="RateLimitError";}};export{t as a,a as b,n as c,c as d};//# sourceMappingURL=chunk-C3UESBRX.js.map
2
- //# sourceMappingURL=chunk-C3UESBRX.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/error.ts"],"names":["ModelenceError","AuthError","message","ValidationError","RateLimitError"],"mappings":"AAAO,IAAeA,CAAAA,CAAf,cAAsC,KAAM,EAEnD,CAEaC,EAAN,cAAwBD,CAAe,CAG5C,WAAA,CAAYE,CAAAA,CAAiB,CAC3B,MAAMA,CAAO,CAAA,CAHf,IAAA,CAAA,MAAA,CAAS,GAAA,CAIP,IAAA,CAAK,IAAA,CAAO,YACd,CACF,CAAA,CAEaC,CAAAA,CAAN,cAA8BH,CAAe,CAGlD,WAAA,CAAYE,EAAiB,CAC3B,KAAA,CAAMA,CAAO,CAAA,CAHf,IAAA,CAAA,MAAA,CAAS,GAAA,CAIP,KAAK,IAAA,CAAO,kBACd,CACF,CAAA,CAEaE,CAAAA,CAAN,cAA6BJ,CAAe,CAGjD,WAAA,CAAYE,CAAAA,CAAiB,CAC3B,KAAA,CAAMA,CAAO,CAAA,CAHf,IAAA,CAAA,MAAA,CAAS,GAAA,CAIP,IAAA,CAAK,IAAA,CAAO,iBACd,CACF","file":"chunk-C3UESBRX.js","sourcesContent":["export abstract class ModelenceError extends Error {\n abstract status: number;\n}\n\nexport class AuthError extends ModelenceError {\n status = 401;\n\n constructor(message: string) {\n super(message);\n this.name = 'AuthError';\n }\n}\n\nexport class ValidationError extends ModelenceError {\n status = 400;\n\n constructor(message: string) {\n super(message);\n this.name = 'ValidationError';\n }\n}\n\nexport class RateLimitError extends ModelenceError {\n status = 429;\n\n constructor(message: string) {\n super(message);\n this.name = 'RateLimitError';\n }\n}\n"]}
@@ -1,2 +0,0 @@
1
- var e={seconds:s=>s*1e3,minutes:s=>s*6e4,hours:s=>s*36e5,days:s=>s*864e5,weeks:s=>s*6048e5};export{e as a};//# sourceMappingURL=chunk-DO5TZLF5.js.map
2
- //# sourceMappingURL=chunk-DO5TZLF5.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/time.ts"],"names":["time","x"],"mappings":"AAMO,IAAMA,CAAAA,CAAO,CAClB,OAAA,CAAUC,CAAAA,EAAcA,EAAI,GAAA,CAC5B,OAAA,CAAUA,GAAcA,CAAAA,CAAI,GAAA,CAC5B,MAAQA,CAAAA,EAAcA,CAAAA,CAAI,KAC1B,IAAA,CAAOA,CAAAA,EAAcA,EAAI,KAAA,CACzB,KAAA,CAAQA,CAAAA,EAAcA,CAAAA,CAAI,MAC5B","file":"chunk-DO5TZLF5.js","sourcesContent":["const secondMs = 1000;\nconst minuteMs = 60 * secondMs;\nconst hourMs = 60 * minuteMs;\nconst dayMs = 24 * hourMs;\nconst weekMs = 7 * dayMs;\n\nexport const time = {\n seconds: (x: number) => x * secondMs,\n minutes: (x: number) => x * minuteMs,\n hours: (x: number) => x * hourMs,\n days: (x: number) => x * dayMs,\n weeks: (x: number) => x * weekMs,\n};\n"]}
@@ -1,3 +0,0 @@
1
- import B from'elastic-apm-node';import v from'winston';import {ElasticsearchTransport}from'winston-elasticsearch';import c from'process';var g={},E={},w=false;function p(t){return E[t]?.value??g[t]?.default}function U(){if(!w)throw new Error("Config is not initialized: an attempt was made to access configs before they were loaded");return Object.fromEntries(Object.entries(g).filter(([t,e])=>e.isPublic).map(([t,e])=>[t,{key:t,type:e.type,value:E[t]?.value??e.default}]))}function G(t){t.forEach(({key:e,type:o,value:r})=>{!e.toLowerCase().startsWith("_system.")&&!g[e]||(E[e]={key:e,type:o,value:r});}),w=true;}function V(t){Object.entries(t).forEach(([e,o])=>{let{type:r,isPublic:n}=o;if(r==="secret"&&n)throw new Error(`Config ${e} with type "secret" cannot be public`)}),g=t;}var i={stdout:[{log:"",timestamp:null}],stderr:[{log:"",timestamp:null}]},z=1;function h({elasticCloudId:t,elasticApiKey:e}){let o=c.stdout.write,r=c.stderr.write;c.stdout.write=function(n,...s){return x(n.toString(),i.stdout),o.call(c.stdout,n,...s)},c.stderr.write=function(n,...s){return x(n.toString(),i.stderr),r.call(c.stderr,n,...s)},I();}function x(t,e){if(t.length===0)return;let o=new Date;for(let r=0;r<t.length;r++){let n=e[e.length-1];n.timestamp||(n.timestamp=o,n.sequenceId=z++),t[r]===`
2
- `?e.push({log:"",timestamp:null}):n.log+=t[r];}}async function O(){let t=i.stdout.slice(0,-1);i.stdout=[i.stdout[i.stdout.length-1]];let e=i.stderr.slice(0,-1);i.stderr=[i.stderr[i.stderr.length-1]],t.forEach(({log:o,timestamp:r,sequenceId:n})=>{y(o,{timestamp:r,source:"console",sequenceId:n});}),e.forEach(({log:o,timestamp:r,sequenceId:n})=>{L(o,{timestamp:r,source:"console",sequenceId:n});});}function I(){setTimeout(()=>{O(),I();},1e3);}var l=null;function Q(){}function X(t){l=Object.assign({},l,t);}function S(){return l?.environmentId}function T(){return l?.appAlias}function K(){return l?.environmentAlias}function M(){return l?.telemetry?.serviceName}function a(){return !!l?.telemetry?.isEnabled}var j=false,d=null,b=null,ot=async()=>{if(j)throw new Error('Metrics are already initialized, duplicate "initMetrics" call received');j=true,a()&&await P();};async function P(){let t=p("_system.elastic.apmEndpoint"),e=p("_system.elastic.cloudId"),o=p("_system.elastic.apiKey"),r=T()??"unknown",n=K()??"unknown",s=S()??"unknown",f=M();d=B.start({serviceName:f,apiKey:o,serverUrl:t,transactionSampleRate:1,centralConfig:false,globalLabels:{modelenceEnv:"dev",appEnv:"dev",environmentId:s,appAlias:r,environmentAlias:n}});let u=new ElasticsearchTransport({apm:d,level:"debug",clientOpts:{cloud:{id:e},auth:{apiKey:o},requestTimeout:1e4,tls:{rejectUnauthorized:false}},bufferLimit:1e3,silent:false});u.on("error",_=>{console.error("Elasticsearch Transport Error:",_);}),b=v.createLogger({level:"debug",defaultMeta:{serviceName:f},format:v.format.combine(v.format.json()),transports:[u]}),h({elasticCloudId:e,elasticApiKey:o});}function A(){if(!d)throw new Error("APM is not initialized");return d}function m(){if(!b)throw new Error("Logger is not initialized");return b}function C(){let t="";return a()||(t="info"),process.env.MODELENCE_LOG_LEVEL||t}function D(t,e){a()&&m().debug(t,e),C()==="debug"&&console.debug(t,e);}function y(t,e){a()&&m().info(t,e),["debug","info"].includes(C())&&console.info(t,e);}function L(t,e){a()&&m().error(t,e),["debug","info","error"].includes(C())&&console.error(t,e);}function W(t,e,o){if(!a())return {end:()=>{},setContext:()=>{}};let r=A(),n=r.startTransaction(e,t);return o&&r.setCustomContext(o),{end:(s,{endTime:f,context:u}={})=>{u&&r.setCustomContext(u),n.end(s,f);},setContext:s=>{r.setCustomContext(s);}}}function q(t){if(!a()){console.error(t);return}A().captureError(t);}export{p as a,U as b,G as c,V as d,Q as e,X as f,ot as g,D as h,y as i,L as j,W as k,q as l};//# sourceMappingURL=chunk-PB6WQQ4L.js.map
3
- //# sourceMappingURL=chunk-PB6WQQ4L.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/config/server.ts","../src/app/loggerProcess.ts","../src/app/state.ts","../src/app/metrics.ts","../src/telemetry/index.ts"],"names":["configSchema","config","isInitialized","getConfig","key","getPublicConfigs","_","schema","loadConfigs","configs","type","value","setSchema","isPublic","buffer","sequenceId","startLoggerProcess","_elasticCloudId","_elasticApiKey","originalStdoutWrite","process","originalStderrWrite","chunk","args","addToBuffer","loopSendLogs","timestamp","i","current","sendLogs","stdoutLogs","stderrLogs","log","logInfo","logError","metadata","markAppStarted","setMetadata","_metadata","getEnvironmentId","getAppAlias","getEnvironmentAlias","getTelemetryServiceName","isTelemetryEnabled","apm","logger","initMetrics","initElasticApm","elasticApmEndpoint","elasticCloudId","elasticApiKey","appAlias","environmentAlias","environmentId","serviceName","elasticApm","esTransport","ElasticsearchTransport","error","winston","getApm","getLogger","getLogLevel","defaultLoglevel","logDebug","message","startTransaction","name","context","transaction","result","endTime","captureError"],"mappings":"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","file":"chunk-PB6WQQ4L.js","sourcesContent":["import { AppConfig, ConfigKey, ConfigSchema } from './types';\n\nlet configSchema: ConfigSchema = {};\nlet config: Record<ConfigKey, AppConfig> = {};\nlet isInitialized = false;\n\n/**\n * @sidebarTitle getConfig (server)\n *\n * @param key - The configuration key to retrieve\n * @returns The configuration value (string, number, or boolean)\n *\n * @example\n * ```ts\n * import { getConfig } from 'modelence/server';\n *\n * // Get the site URL\n * const siteUrl = getConfig('_system.site.url');\n * ```\n *\n * Set via environment variable:\n * ```bash\n * MODELENCE_SITE_URL=https://myapp.com\n * ```\n *\n * @example\n * ```ts\n * import { getConfig } from 'modelence/server';\n *\n * // Get the current environment (e.g., 'development', 'staging', 'production')\n * const env = getConfig('_system.env');\n *\n * if (env === 'production') {\n * // Enable production features\n * }\n * ```\n *\n * Set via environment variable:\n * ```bash\n * MODELENCE_SITE_ENV=production\n * ```\n */\nexport function getConfig(key: ConfigKey) {\n return config[key]?.value ?? configSchema[key]?.default;\n}\n\nexport function getPublicConfigs() {\n if (!isInitialized) {\n throw new Error(\n 'Config is not initialized: an attempt was made to access configs before they were loaded'\n );\n }\n\n return Object.fromEntries(\n Object.entries(configSchema)\n .filter(([_, schema]) => schema.isPublic)\n .map(([key, schema]) => {\n return [\n key,\n {\n key,\n type: schema.type,\n value: config[key]?.value ?? schema.default,\n },\n ];\n })\n );\n}\n\nexport function loadConfigs(configs: AppConfig[]) {\n configs.forEach(({ key, type, value }) => {\n const isSystemConfig = key.toLowerCase().startsWith('_system.');\n\n if (!isSystemConfig && !configSchema[key]) {\n // Ignore unknown configs\n return;\n }\n\n config[key] = {\n key,\n type,\n value,\n };\n });\n\n isInitialized = true;\n}\n\nexport function setSchema(schema: ConfigSchema) {\n // TODO: more validation on the schema structure\n Object.entries(schema).forEach(([key, value]) => {\n const { type, isPublic } = value;\n\n if (type === 'secret' && isPublic) {\n throw new Error(`Config ${key} with type \"secret\" cannot be public`);\n }\n });\n\n configSchema = schema;\n}\n","// import { spawn } from 'child_process';\n// import { fileURLToPath } from 'url';\n// import { dirname, join } from 'path';\nimport { logInfo, logError } from '@/telemetry';\nimport process from 'process';\n\ntype LogEntry = { log: string; timestamp: Date | null; sequenceId?: number };\ntype LogBuffer = LogEntry[];\n\nconst buffer: { stdout: LogBuffer; stderr: LogBuffer } = {\n stdout: [{ log: '', timestamp: null }],\n stderr: [{ log: '', timestamp: null }],\n};\n\nlet sequenceId = 1;\n\nexport function startLoggerProcess({\n elasticCloudId: _elasticCloudId,\n elasticApiKey: _elasticApiKey,\n}: {\n elasticCloudId: string;\n elasticApiKey: string;\n}) {\n const originalStdoutWrite = process.stdout.write;\n const originalStderrWrite = process.stderr.write;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process.stdout.write = function (chunk: string | Uint8Array, ...args: any[]) {\n addToBuffer(chunk.toString(), buffer.stdout);\n return originalStdoutWrite.call(process.stdout, chunk, ...args);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process.stderr.write = function (chunk: string | Uint8Array, ...args: any[]) {\n addToBuffer(chunk.toString(), buffer.stderr);\n return originalStderrWrite.call(process.stderr, chunk, ...args);\n };\n\n loopSendLogs();\n\n // const currentFilePath = fileURLToPath(import.meta.url);\n // const projectRoot = dirname(dirname(currentFilePath));\n // const loggerPath = join(projectRoot, 'bin', 'modelence-logger', 'index.js');\n // const logger = spawn(process.execPath, [loggerPath], {\n // env: {\n // NODE_ENV: process.env.NODE_ENV,\n // ELASTIC_CLOUD_ID: elasticCloudId,\n // ELASTIC_API_KEY: elasticApiKey\n // },\n // stdio: ['pipe', 'inherit', 'inherit'],\n // detached: true\n // });\n\n // const originalStdoutWrite = process.stdout.write;\n // const originalStderrWrite = process.stderr.write;\n\n // process.stdout.write = function(chunk: any, ...args: any[]) {\n // logger.stdin.write(chunk);\n // return originalStdoutWrite.apply(process.stdout, [chunk, ...args]);\n // };\n\n // process.stderr.write = function(chunk: any, ...args: any[]) {\n // logger.stdin.write(chunk);\n // return originalStderrWrite.apply(process.stderr, [chunk, ...args]);\n // };\n\n // process.on('exit', () => {\n // process.stdout.write = originalStdoutWrite;\n // process.stderr.write = originalStderrWrite;\n // });\n\n // logger.unref();\n}\n\nfunction addToBuffer(chunk: string, buffer: LogBuffer) {\n if (chunk.length === 0) {\n return;\n }\n\n const timestamp = new Date();\n\n for (let i = 0; i < chunk.length; i++) {\n const current = buffer[buffer.length - 1];\n if (!current.timestamp) {\n current.timestamp = timestamp;\n current.sequenceId = sequenceId++;\n }\n\n if (chunk[i] === '\\n') {\n buffer.push({ log: '', timestamp: null });\n } else {\n current.log += chunk[i];\n }\n }\n}\n\nasync function sendLogs() {\n const stdoutLogs = buffer.stdout.slice(0, -1);\n buffer.stdout = [buffer.stdout[buffer.stdout.length - 1]];\n\n const stderrLogs = buffer.stderr.slice(0, -1);\n buffer.stderr = [buffer.stderr[buffer.stderr.length - 1]];\n\n stdoutLogs.forEach(({ log, timestamp, sequenceId }: LogEntry) => {\n logInfo(log, { timestamp, source: 'console', sequenceId });\n });\n stderrLogs.forEach(({ log, timestamp, sequenceId }: LogEntry) => {\n logError(log, { timestamp, source: 'console', sequenceId });\n });\n}\n\nfunction loopSendLogs() {\n setTimeout(() => {\n sendLogs();\n loopSendLogs();\n }, 1000);\n}\n","type AppMetadata = {\n environmentId: string;\n appAlias: string;\n environmentAlias: string;\n telemetry: {\n isEnabled: boolean;\n serviceName: string;\n };\n};\n\nlet appStarted = false;\nlet metadata: AppMetadata | null = null;\n\nexport function markAppStarted() {\n appStarted = true;\n}\n\nexport function isAppStarted() {\n return appStarted;\n}\n\nexport function setMetadata(_metadata: AppMetadata) {\n metadata = Object.assign({}, metadata, _metadata);\n}\n\nexport function getEnvironmentId() {\n return metadata?.environmentId;\n}\n\nexport function getAppAlias() {\n return metadata?.appAlias;\n}\n\nexport function getEnvironmentAlias() {\n return metadata?.environmentAlias;\n}\n\nexport function getTelemetryServiceName() {\n return metadata?.telemetry?.serviceName;\n}\n\nexport function isTelemetryEnabled() {\n return Boolean(metadata?.telemetry?.isEnabled);\n}\n","import elasticApm from 'elastic-apm-node';\nimport winston from 'winston';\nimport { ElasticsearchTransport } from 'winston-elasticsearch';\n\nimport { getConfig } from '../config/server';\nimport { startLoggerProcess } from './loggerProcess';\nimport {\n getAppAlias,\n getEnvironmentAlias,\n getEnvironmentId,\n getTelemetryServiceName,\n isTelemetryEnabled,\n} from './state';\n\nlet isInitialized = false;\nlet apm: typeof elasticApm | null = null;\nlet logger: winston.Logger | null = null;\n\nexport const initMetrics = async () => {\n if (isInitialized) {\n throw new Error('Metrics are already initialized, duplicate \"initMetrics\" call received');\n }\n\n isInitialized = true;\n\n if (isTelemetryEnabled()) {\n await initElasticApm();\n }\n};\n\nasync function initElasticApm() {\n const elasticApmEndpoint = getConfig('_system.elastic.apmEndpoint') as string;\n const elasticCloudId = getConfig('_system.elastic.cloudId') as string;\n const elasticApiKey = getConfig('_system.elastic.apiKey') as string;\n\n const appAlias = getAppAlias() ?? 'unknown';\n const environmentAlias = getEnvironmentAlias() ?? 'unknown';\n const environmentId = getEnvironmentId() ?? 'unknown';\n const serviceName = getTelemetryServiceName();\n\n apm = elasticApm.start({\n serviceName,\n apiKey: elasticApiKey,\n serverUrl: elasticApmEndpoint,\n // environment: 'dev',\n transactionSampleRate: 1.0,\n centralConfig: false,\n globalLabels: {\n modelenceEnv: 'dev',\n appEnv: 'dev',\n environmentId,\n appAlias,\n environmentAlias,\n },\n // logLevel: 'debug'\n });\n\n const esTransport = new ElasticsearchTransport({\n apm,\n level: 'debug',\n clientOpts: {\n cloud: {\n id: elasticCloudId,\n },\n auth: {\n apiKey: elasticApiKey,\n },\n requestTimeout: 10000,\n tls: {\n rejectUnauthorized: false,\n },\n },\n bufferLimit: 1000,\n silent: false,\n });\n\n esTransport.on('error', (error) => {\n console.error('Elasticsearch Transport Error:', error);\n });\n\n logger = winston.createLogger({\n level: 'debug',\n defaultMeta: {\n serviceName,\n },\n format: winston.format.combine(winston.format.json()),\n transports: [\n // new winston.transports.Console(), // TODO: remove, just for debugging\n esTransport,\n ],\n });\n\n startLoggerProcess({\n elasticCloudId,\n elasticApiKey,\n });\n}\n\nexport function getApm() {\n if (!apm) {\n throw new Error('APM is not initialized');\n }\n return apm;\n}\n\nexport function getLogger() {\n if (!logger) {\n throw new Error('Logger is not initialized');\n }\n return logger;\n}\n","import { getLogger, getApm } from '@/app/metrics';\nimport { isTelemetryEnabled } from '@/app/state';\n\ntype LogLevel = 'error' | 'info' | 'debug' | '';\n\n/**\n * Gets the logging level for console logs based on the MODELENCE_LOG_LEVEL environment variable.\n *\n * @returns The log level ('error' | 'info' | 'debug' | '')\n *\n * Behavior:\n * - If MODELENCE_LOG_LEVEL is set, returns that value\n * - If telemetry is disabled and MODELENCE_LOG_LEVEL is not set, defaults to 'info'\n * - If telemetry is enabled and MODELENCE_LOG_LEVEL is not set, returns '' (no console logging)\n */\nfunction getLogLevel(): LogLevel {\n let defaultLoglevel: LogLevel = '';\n if (!isTelemetryEnabled()) {\n defaultLoglevel = 'info';\n }\n\n return (process.env.MODELENCE_LOG_LEVEL as LogLevel) || defaultLoglevel;\n}\n\nexport function logDebug(message: string, args: object) {\n if (isTelemetryEnabled()) {\n getLogger().debug(message, args);\n }\n if (getLogLevel() === 'debug') {\n console.debug(message, args);\n }\n}\n\nexport function logInfo(message: string, args: object) {\n if (isTelemetryEnabled()) {\n getLogger().info(message, args);\n }\n if (['debug', 'info'].includes(getLogLevel())) {\n console.info(message, args);\n }\n}\n\nexport function logError(message: string, args: object) {\n if (isTelemetryEnabled()) {\n getLogger().error(message, args);\n }\n if (['debug', 'info', 'error'].includes(getLogLevel())) {\n console.error(message, args);\n }\n}\n\ninterface WrappedTransaction {\n end(result?: string, context?: Record<string, unknown>): void;\n setContext(context: Record<string, unknown>): void;\n}\n\nexport function startTransaction(\n type: 'method' | 'cron' | 'ai' | 'custom' | 'route',\n name: string,\n context?: Record<string, unknown>\n): WrappedTransaction {\n if (!isTelemetryEnabled()) {\n return {\n end: () => {\n // do nothing\n },\n setContext: () => {\n // do nothing\n },\n };\n }\n\n const apm = getApm();\n const transaction = apm.startTransaction(name, type);\n if (context) {\n apm.setCustomContext(context);\n }\n\n return {\n end: (\n result?: string,\n { endTime, context }: { endTime?: number; context?: Record<string, unknown> } = {}\n ) => {\n if (context) {\n apm.setCustomContext(context);\n }\n transaction.end(result, endTime);\n },\n setContext: (context: Record<string, unknown>) => {\n apm.setCustomContext(context);\n },\n };\n}\n\nexport function captureError(error: Error) {\n if (!isTelemetryEnabled()) {\n console.error(error);\n return;\n }\n\n getApm().captureError(error);\n}\n"]}
@@ -1,15 +0,0 @@
1
- import { Request, Response, NextFunction } from 'express';
2
-
3
- interface ModelenceConfig {
4
- serverDir: string;
5
- serverEntry: string;
6
- postBuildCommand?: string;
7
- }
8
- type ExpressMiddleware = (req: Request, res: Response, next: NextFunction) => void | Promise<void>;
9
- interface AppServer {
10
- init: () => Promise<void>;
11
- handler: (req: Request, res: Response) => void;
12
- middlewares?: () => ExpressMiddleware[];
13
- }
14
-
15
- export type { AppServer as A, ExpressMiddleware as E, ModelenceConfig as M };
@@ -1,2 +0,0 @@
1
- export{l as author,i as bin,n as bugs,s as default,q as dependencies,d as description,p as devDependencies,g as exports,h as files,o as homepage,m as license,e as main,b as name,r as peerDependencies,k as repository,j as scripts,a as type,f as types,c as version}from'./chunk-3YAV3UUU.js';//# sourceMappingURL=package-3YQBVIVQ.js.map
2
- //# sourceMappingURL=package-3YQBVIVQ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"package-3YQBVIVQ.js"}
@@ -1,106 +0,0 @@
1
- import { Server } from 'http';
2
- import { Document, ObjectId } from 'mongodb';
3
-
4
- type ConfigType = 'text' | 'string' | 'number' | 'boolean' | 'secret';
5
- type ConfigKey = string;
6
- type ConfigParams = {
7
- type: ConfigType;
8
- default: ValueType<ConfigType>;
9
- isPublic: boolean;
10
- };
11
- type AppConfig = {
12
- key: ConfigKey;
13
- value: ValueType<ConfigType>;
14
- type: ConfigType;
15
- };
16
- type ConfigSchema = {
17
- [key: string]: ConfigParams;
18
- };
19
- type Configs = Record<ConfigKey, AppConfig>;
20
- type ValueType<T> = T extends 'number' ? number : T extends 'string' ? string : T extends 'text' ? string : T extends 'boolean' ? boolean : T extends 'secret' ? string : never;
21
-
22
- type User = Document;
23
- type UserInfo = {
24
- id: string;
25
- handle: string;
26
- roles: string[];
27
- hasRole: (role: string) => boolean;
28
- requireRole: (role: string) => void;
29
- };
30
- type Role = string;
31
- type DefaultRoles = Record<'authenticated' | 'unauthenticated', Role | null>;
32
- type Session = {
33
- authToken: string;
34
- expiresAt: Date;
35
- userId: ObjectId | null;
36
- };
37
- type Permission = string;
38
- type RoleDefinition = {
39
- description?: string;
40
- permissions: Permission[];
41
- };
42
-
43
- type canAccessChannel = (props: {
44
- user: User | null;
45
- session: Session | null;
46
- roles: string[];
47
- }) => Promise<boolean>;
48
- declare class ServerChannel<T = unknown> {
49
- readonly category: string;
50
- readonly canAccessChannel: canAccessChannel | null;
51
- constructor(category: string, canAccessChannel?: canAccessChannel);
52
- broadcast(id: string, data: T): void;
53
- }
54
-
55
- declare class ClientChannel<T = unknown> {
56
- readonly category: string;
57
- private readonly onMessage;
58
- constructor(category: string, onMessage: (data: T) => void);
59
- init(): void;
60
- joinChannel(id: string): void;
61
- leaveChannel(id: string): void;
62
- }
63
-
64
- interface WebsocketServerProvider {
65
- init(props: {
66
- httpServer: Server;
67
- channels: ServerChannel[];
68
- }): Promise<void>;
69
- broadcast<T>(props: {
70
- category: string;
71
- id: string;
72
- data: T;
73
- }): void;
74
- }
75
- interface WebsocketClientProvider {
76
- init(props: {
77
- channels?: ClientChannel[];
78
- }): void;
79
- on<T>(props: {
80
- category: string;
81
- listener: (data: T) => void;
82
- }): void;
83
- once<T>(props: {
84
- category: string;
85
- listener: (data: T) => void;
86
- }): void;
87
- off<T>(props: {
88
- category: string;
89
- listener: (data: T) => void;
90
- }): void;
91
- emit(props: {
92
- eventName: string;
93
- category: string;
94
- id: string;
95
- }): void;
96
- joinChannel(props: {
97
- category: string;
98
- id: string;
99
- }): void;
100
- leaveChannel(props: {
101
- category: string;
102
- id: string;
103
- }): void;
104
- }
105
-
106
- export { type AppConfig as A, type ConfigSchema as C, type DefaultRoles as D, type Permission as P, type RoleDefinition as R, ServerChannel as S, type User as U, type WebsocketServerProvider as W, type WebsocketClientProvider as a, type ConfigKey as b, ClientChannel as c, type Session as d, type UserInfo as e, type Role as f, type ConfigType as g, type Configs as h };