@vandenberghinc/volt 1.1.26 → 1.1.28

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 (502) hide show
  1. package/backend/dist/cjs/{blacklist.d.ts → backend/src/blacklist.d.ts} +5 -3
  2. package/backend/dist/cjs/{blacklist.js → backend/src/blacklist.js} +8 -5
  3. package/backend/dist/cjs/{cli.js → backend/src/cli.js} +29 -47
  4. package/backend/dist/cjs/backend/src/database/collection.d.ts +1543 -0
  5. package/backend/dist/cjs/backend/src/database/collection.js +3042 -0
  6. package/backend/dist/cjs/backend/src/database/database.d.ts +66 -0
  7. package/backend/dist/cjs/{database → backend/src/database}/database.js +48 -43
  8. package/backend/dist/cjs/backend/src/database/filters/filters.d.ts +6 -0
  9. package/backend/dist/cjs/backend/src/database/filters/filters.js +15 -0
  10. package/backend/dist/cjs/backend/src/database/filters/strict_filter.d.ts +223 -0
  11. package/backend/dist/cjs/backend/src/database/filters/strict_filter.js +15 -0
  12. package/backend/dist/cjs/backend/src/database/filters/strict_filter_test.js +443 -0
  13. package/backend/dist/cjs/backend/src/database/filters/strict_filter_test_v0.js +15 -0
  14. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v0.d.ts +50 -0
  15. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v0.js +15 -0
  16. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v1.d.ts +76 -0
  17. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v1.js +15 -0
  18. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v2.d.ts +75 -0
  19. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v2.js +15 -0
  20. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v3.d.ts +219 -0
  21. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v3.js +15 -0
  22. package/backend/dist/cjs/backend/src/database/filters/strict_update_filter.d.ts +165 -0
  23. package/backend/dist/cjs/backend/src/database/filters/strict_update_filter.js +15 -0
  24. package/backend/dist/cjs/backend/src/database/filters/strict_update_filter_test.d.ts +5 -0
  25. package/backend/dist/cjs/backend/src/database/filters/strict_update_filter_test.js +355 -0
  26. package/backend/dist/cjs/backend/src/database/flatten.d.ts +75 -0
  27. package/backend/dist/cjs/{logger.js → backend/src/database/flatten.js} +18 -7
  28. package/backend/dist/cjs/backend/src/database/flatten_test.js +175 -0
  29. package/backend/dist/cjs/backend/src/database/quota/quota.d.ts +461 -0
  30. package/backend/dist/cjs/backend/src/database/quota/quota.js +1014 -0
  31. package/backend/dist/cjs/backend/src/database/quota/quota_v1.d.ts +534 -0
  32. package/backend/dist/cjs/backend/src/database/quota/quota_v1.js +1087 -0
  33. package/backend/dist/cjs/backend/src/database/quota/safe_int.d.ts +293 -0
  34. package/backend/dist/cjs/backend/src/database/quota/safe_int.js +573 -0
  35. package/backend/dist/{esm → cjs/backend/src}/endpoint.d.ts +69 -46
  36. package/backend/dist/cjs/{endpoint.js → backend/src/endpoint.js} +87 -101
  37. package/backend/dist/cjs/backend/src/errors/index.d.ts +7 -0
  38. package/backend/dist/cjs/backend/src/errors/index.js +25 -0
  39. package/backend/dist/{esm/utils.d.ts → cjs/backend/src/errors/internal_external.d.ts} +14 -22
  40. package/backend/dist/cjs/backend/src/errors/internal_external.js +85 -0
  41. package/backend/dist/cjs/backend/src/errors/invalid_usage_error.d.ts +38 -0
  42. package/backend/dist/cjs/{mutex.js → backend/src/errors/invalid_usage_error.js} +20 -37
  43. package/backend/dist/cjs/backend/src/errors/system_error.d.ts +230 -0
  44. package/backend/dist/cjs/backend/src/errors/system_error.js +393 -0
  45. package/backend/dist/cjs/backend/src/events.d.ts +54 -0
  46. package/backend/dist/cjs/backend/src/events.js +15 -0
  47. package/backend/dist/cjs/{frontend.js → backend/src/frontend.js} +1 -1
  48. package/backend/dist/cjs/{image_endpoint.d.ts → backend/src/image_endpoint.d.ts} +16 -1
  49. package/backend/dist/cjs/{image_endpoint.js → backend/src/image_endpoint.js} +3 -5
  50. package/backend/dist/cjs/backend/src/logger.d.ts +5 -0
  51. package/backend/dist/cjs/backend/src/logger.js +15 -0
  52. package/backend/dist/cjs/backend/src/meta.d.ts +64 -0
  53. package/backend/dist/cjs/{meta.js → backend/src/meta.js} +9 -12
  54. package/backend/dist/cjs/backend/src/payments/paddle.d.ts +326 -0
  55. package/backend/dist/cjs/{payments → backend/src/payments}/paddle.js +377 -327
  56. package/backend/dist/cjs/backend/src/plugins/browser.d.ts +1 -0
  57. package/backend/dist/cjs/backend/src/plugins/browser.js +15 -0
  58. package/backend/dist/cjs/backend/src/plugins/mail/mail.d.ts +248 -0
  59. package/backend/dist/cjs/backend/src/plugins/mail/mail.js +379 -0
  60. package/backend/dist/{esm → cjs/backend/src}/plugins/mail/ui.d.ts +23 -0
  61. package/backend/dist/cjs/backend/src/plugins/pdf.d.ts +1 -0
  62. package/backend/dist/cjs/backend/src/rate_limit.d.ts +145 -0
  63. package/backend/dist/cjs/backend/src/rate_limit.js +549 -0
  64. package/backend/dist/cjs/{route.d.ts → backend/src/route.d.ts} +3 -10
  65. package/backend/dist/cjs/{route.js → backend/src/route.js} +23 -21
  66. package/backend/dist/cjs/backend/src/server.d.ts +485 -0
  67. package/backend/dist/cjs/{server.js → backend/src/server.js} +688 -873
  68. package/backend/dist/cjs/backend/src/splash_screen.d.ts +80 -0
  69. package/backend/dist/cjs/{splash_screen.js → backend/src/splash_screen.js} +24 -3
  70. package/backend/dist/cjs/backend/src/status.d.ts +74 -0
  71. package/backend/dist/cjs/{status.js → backend/src/status.js} +64 -64
  72. package/backend/dist/cjs/backend/src/stream.d.ts +376 -0
  73. package/backend/dist/cjs/{stream.js → backend/src/stream.js} +299 -276
  74. package/backend/dist/cjs/backend/src/users.d.ts +807 -0
  75. package/backend/dist/cjs/backend/src/users.js +1971 -0
  76. package/backend/dist/cjs/backend/src/utils.d.ts +16 -0
  77. package/backend/dist/cjs/{utils.js → backend/src/utils.js} +14 -77
  78. package/backend/dist/{esm → cjs/backend/src}/view.d.ts +33 -11
  79. package/backend/dist/cjs/backend/src/view.js +508 -0
  80. package/backend/dist/{esm → cjs/backend/src}/volt.d.ts +10 -1
  81. package/backend/dist/cjs/{volt.js → backend/src/volt.js} +8 -5
  82. package/backend/dist/cjs/frontend/src/modules/request.d.ts +70 -0
  83. package/backend/dist/cjs/frontend/src/modules/request.js +99 -0
  84. package/backend/dist/esm/{blacklist.d.ts → backend/src/blacklist.d.ts} +5 -3
  85. package/backend/dist/esm/{blacklist.js → backend/src/blacklist.js} +9 -6
  86. package/backend/dist/esm/{cli.js → backend/src/cli.js} +43 -60
  87. package/backend/dist/esm/backend/src/database/collection.d.ts +1543 -0
  88. package/backend/dist/esm/backend/src/database/collection.js +3510 -0
  89. package/backend/dist/esm/backend/src/database/database.d.ts +66 -0
  90. package/backend/dist/esm/{database → backend/src/database}/database.js +62 -103
  91. package/backend/dist/esm/backend/src/database/document.d.ts +1 -0
  92. package/backend/dist/esm/backend/src/database/document.js +558 -0
  93. package/backend/dist/esm/backend/src/database/filters/filters.d.ts +6 -0
  94. package/backend/dist/esm/backend/src/database/filters/filters.js +1 -0
  95. package/backend/dist/esm/backend/src/database/filters/strict_filter.d.ts +223 -0
  96. package/backend/dist/esm/backend/src/database/filters/strict_filter.js +3 -0
  97. package/backend/dist/esm/backend/src/database/filters/strict_filter_test.d.ts +1 -0
  98. package/backend/dist/esm/backend/src/database/filters/strict_filter_test.js +505 -0
  99. package/backend/dist/esm/backend/src/database/filters/strict_filter_test_v0.d.ts +1 -0
  100. package/backend/dist/esm/backend/src/database/filters/strict_filter_test_v0.js +712 -0
  101. package/backend/dist/esm/backend/src/database/filters/strict_filter_v0.d.ts +50 -0
  102. package/backend/dist/esm/backend/src/database/filters/strict_filter_v0.js +5 -0
  103. package/backend/dist/esm/backend/src/database/filters/strict_filter_v1.d.ts +76 -0
  104. package/backend/dist/esm/backend/src/database/filters/strict_filter_v1.js +44 -0
  105. package/backend/dist/esm/backend/src/database/filters/strict_filter_v2.d.ts +75 -0
  106. package/backend/dist/esm/backend/src/database/filters/strict_filter_v2.js +5 -0
  107. package/backend/dist/esm/backend/src/database/filters/strict_filter_v3.d.ts +219 -0
  108. package/backend/dist/esm/backend/src/database/filters/strict_filter_v3.js +1 -0
  109. package/backend/dist/esm/backend/src/database/filters/strict_update_filter.d.ts +165 -0
  110. package/backend/dist/esm/backend/src/database/filters/strict_update_filter.js +5 -0
  111. package/backend/dist/esm/backend/src/database/filters/strict_update_filter_test.d.ts +5 -0
  112. package/backend/dist/esm/backend/src/database/filters/strict_update_filter_test.js +405 -0
  113. package/backend/dist/esm/backend/src/database/flatten.d.ts +75 -0
  114. package/backend/dist/esm/backend/src/database/flatten.js +22 -0
  115. package/backend/dist/esm/backend/src/database/flatten_test.d.ts +1 -0
  116. package/backend/dist/esm/backend/src/database/flatten_test.js +174 -0
  117. package/backend/dist/esm/backend/src/database/quota/quota.d.ts +461 -0
  118. package/backend/dist/esm/backend/src/database/quota/quota.js +1118 -0
  119. package/backend/dist/esm/backend/src/database/quota/quota_v1.d.ts +534 -0
  120. package/backend/dist/esm/backend/src/database/quota/quota_v1.js +1242 -0
  121. package/backend/dist/esm/backend/src/database/quota/safe_int.d.ts +293 -0
  122. package/backend/dist/esm/backend/src/database/quota/safe_int.js +602 -0
  123. package/backend/dist/{cjs → esm/backend/src}/endpoint.d.ts +69 -46
  124. package/backend/dist/esm/{endpoint.js → backend/src/endpoint.js} +136 -127
  125. package/backend/dist/esm/backend/src/errors/index.d.ts +7 -0
  126. package/backend/dist/esm/backend/src/errors/index.js +7 -0
  127. package/backend/dist/{cjs/utils.d.ts → esm/backend/src/errors/internal_external.d.ts} +14 -22
  128. package/backend/dist/esm/backend/src/errors/internal_external.js +70 -0
  129. package/backend/dist/esm/backend/src/errors/invalid_usage_error.d.ts +38 -0
  130. package/backend/dist/esm/backend/src/errors/invalid_usage_error.js +30 -0
  131. package/backend/dist/esm/backend/src/errors/system_error.d.ts +230 -0
  132. package/backend/dist/esm/backend/src/errors/system_error.js +402 -0
  133. package/backend/dist/esm/backend/src/events.d.ts +54 -0
  134. package/backend/dist/esm/backend/src/events.js +5 -0
  135. package/backend/dist/esm/{frontend.js → backend/src/frontend.js} +1 -1
  136. package/backend/dist/esm/{image_endpoint.d.ts → backend/src/image_endpoint.d.ts} +16 -1
  137. package/backend/dist/esm/{image_endpoint.js → backend/src/image_endpoint.js} +16 -20
  138. package/backend/dist/esm/backend/src/logger.d.ts +5 -0
  139. package/backend/dist/esm/backend/src/logger.js +8 -0
  140. package/backend/dist/esm/backend/src/meta.d.ts +64 -0
  141. package/backend/dist/esm/{meta.js → backend/src/meta.js} +15 -54
  142. package/backend/dist/esm/backend/src/payments/paddle.d.ts +326 -0
  143. package/backend/dist/esm/{payments → backend/src/payments}/paddle.js +417 -452
  144. package/backend/dist/esm/backend/src/plugins/browser.d.ts +1 -0
  145. package/backend/dist/esm/backend/src/plugins/browser.js +170 -0
  146. package/backend/dist/esm/backend/src/plugins/mail/mail.d.ts +248 -0
  147. package/backend/dist/esm/backend/src/plugins/mail/mail.js +389 -0
  148. package/backend/dist/{cjs → esm/backend/src}/plugins/mail/ui.d.ts +23 -0
  149. package/backend/dist/esm/{plugins → backend/src/plugins}/mail/ui.js +3 -6
  150. package/backend/dist/esm/backend/src/plugins/pdf.d.ts +1 -0
  151. package/backend/dist/esm/{plugins → backend/src/plugins}/pdf.js +3 -3
  152. package/backend/dist/esm/backend/src/rate_limit.d.ts +145 -0
  153. package/backend/dist/esm/backend/src/rate_limit.js +667 -0
  154. package/backend/dist/esm/{route.d.ts → backend/src/route.d.ts} +3 -10
  155. package/backend/dist/esm/{route.js → backend/src/route.js} +26 -21
  156. package/backend/dist/esm/backend/src/server.d.ts +485 -0
  157. package/backend/dist/esm/{server.js → backend/src/server.js} +891 -1441
  158. package/backend/dist/esm/backend/src/splash_screen.d.ts +80 -0
  159. package/backend/dist/esm/{splash_screen.js → backend/src/splash_screen.js} +42 -55
  160. package/backend/dist/esm/backend/src/status.d.ts +74 -0
  161. package/backend/dist/esm/backend/src/status.js +199 -0
  162. package/backend/dist/esm/backend/src/stream.d.ts +376 -0
  163. package/backend/dist/esm/{stream.js → backend/src/stream.js} +327 -292
  164. package/backend/dist/esm/backend/src/users.d.ts +809 -0
  165. package/backend/dist/esm/backend/src/users.js +2140 -0
  166. package/backend/dist/esm/backend/src/utils.d.ts +16 -0
  167. package/backend/dist/esm/{utils.js → backend/src/utils.js} +20 -81
  168. package/backend/dist/{cjs → esm/backend/src}/view.d.ts +33 -11
  169. package/backend/dist/esm/{view.js → backend/src/view.js} +266 -86
  170. package/backend/dist/{cjs → esm/backend/src}/volt.d.ts +10 -1
  171. package/backend/dist/esm/{volt.js → backend/src/volt.js} +7 -4
  172. package/backend/dist/esm/frontend/src/modules/request.d.ts +70 -0
  173. package/backend/dist/esm/frontend/src/modules/request.js +117 -0
  174. package/frontend/dist/backend/src/database/collection.d.ts +1543 -0
  175. package/frontend/dist/backend/src/database/collection.js +3510 -0
  176. package/frontend/dist/backend/src/database/database.d.ts +66 -0
  177. package/frontend/dist/backend/src/database/database.js +196 -0
  178. package/frontend/dist/backend/src/database/filters/filters.d.ts +6 -0
  179. package/frontend/dist/backend/src/database/filters/filters.js +1 -0
  180. package/frontend/dist/backend/src/database/filters/strict_filter.d.ts +223 -0
  181. package/frontend/dist/backend/src/database/filters/strict_filter.js +3 -0
  182. package/frontend/dist/backend/src/database/filters/strict_update_filter.d.ts +165 -0
  183. package/frontend/dist/backend/src/database/filters/strict_update_filter.js +5 -0
  184. package/frontend/dist/backend/src/database/flatten.d.ts +75 -0
  185. package/frontend/dist/backend/src/database/flatten.js +22 -0
  186. package/frontend/dist/backend/src/endpoint.d.ts +204 -0
  187. package/frontend/dist/backend/src/endpoint.js +570 -0
  188. package/frontend/dist/backend/src/errors/index.d.ts +7 -0
  189. package/frontend/dist/backend/src/errors/index.js +7 -0
  190. package/frontend/dist/backend/src/errors/internal_external.d.ts +38 -0
  191. package/frontend/dist/backend/src/errors/internal_external.js +70 -0
  192. package/frontend/dist/backend/src/errors/invalid_usage_error.d.ts +38 -0
  193. package/frontend/dist/backend/src/errors/invalid_usage_error.js +30 -0
  194. package/frontend/dist/backend/src/errors/system_error.d.ts +230 -0
  195. package/frontend/dist/backend/src/errors/system_error.js +402 -0
  196. package/frontend/dist/backend/src/events.d.ts +54 -0
  197. package/frontend/dist/backend/src/events.js +5 -0
  198. package/frontend/dist/backend/src/frontend.d.ts +11 -0
  199. package/frontend/dist/backend/src/frontend.js +12 -0
  200. package/frontend/dist/backend/src/image_endpoint.d.ts +39 -0
  201. package/frontend/dist/backend/src/image_endpoint.js +202 -0
  202. package/frontend/dist/backend/src/meta.d.ts +64 -0
  203. package/frontend/dist/backend/src/meta.js +110 -0
  204. package/frontend/dist/backend/src/payments/paddle.d.ts +326 -0
  205. package/frontend/dist/backend/src/payments/paddle.js +2256 -0
  206. package/frontend/dist/backend/src/plugins/mail/mail.d.ts +248 -0
  207. package/frontend/dist/backend/src/plugins/mail/mail.js +389 -0
  208. package/{backend/dist/esm/plugins/mail.d.ts → frontend/dist/backend/src/plugins/mail/ui.d.ts} +23 -0
  209. package/{backend/dist/esm/plugins/mail.js → frontend/dist/backend/src/plugins/mail/ui.js} +3 -6
  210. package/frontend/dist/backend/src/rate_limit.d.ts +145 -0
  211. package/frontend/dist/backend/src/rate_limit.js +673 -0
  212. package/frontend/dist/backend/src/route.d.ts +35 -0
  213. package/frontend/dist/backend/src/route.js +212 -0
  214. package/frontend/dist/backend/src/server.d.ts +485 -0
  215. package/frontend/dist/backend/src/server.js +2670 -0
  216. package/frontend/dist/backend/src/splash_screen.d.ts +80 -0
  217. package/frontend/dist/backend/src/splash_screen.js +135 -0
  218. package/frontend/dist/backend/src/status.d.ts +74 -0
  219. package/frontend/dist/backend/src/status.js +199 -0
  220. package/frontend/dist/backend/src/stream.d.ts +376 -0
  221. package/frontend/dist/backend/src/stream.js +1007 -0
  222. package/frontend/dist/backend/src/users.d.ts +807 -0
  223. package/frontend/dist/backend/src/users.js +2118 -0
  224. package/frontend/dist/backend/src/utils.d.ts +16 -0
  225. package/frontend/dist/backend/src/utils.js +241 -0
  226. package/frontend/dist/backend/src/view.d.ts +162 -0
  227. package/frontend/dist/backend/src/view.js +720 -0
  228. package/frontend/dist/frontend/src/elements/base.d.ts +4414 -0
  229. package/frontend/dist/{elements → frontend/src/elements}/base.js +3624 -260
  230. package/frontend/dist/frontend/src/elements/module.d.ts +95 -0
  231. package/frontend/dist/{elements → frontend/src/elements}/module.js +53 -52
  232. package/frontend/dist/frontend/src/elements/types.d.ts +52 -0
  233. package/frontend/dist/frontend/src/elements/types.js +5 -0
  234. package/frontend/dist/frontend/src/modules/attachment.d.ts +126 -0
  235. package/frontend/dist/frontend/src/modules/attachment.js +306 -0
  236. package/frontend/dist/frontend/src/modules/auth.d.ts +44 -0
  237. package/frontend/dist/frontend/src/modules/auth.js +80 -0
  238. package/frontend/dist/{modules → frontend/src/modules}/color.js +2 -2
  239. package/frontend/dist/frontend/src/modules/compression.d.ts +39 -0
  240. package/frontend/dist/frontend/src/modules/compression.js +102 -0
  241. package/frontend/dist/frontend/src/modules/cookies.d.ts +44 -0
  242. package/frontend/dist/frontend/src/modules/cookies.js +143 -0
  243. package/frontend/dist/frontend/src/modules/events.d.ts +31 -0
  244. package/frontend/dist/frontend/src/modules/events.js +74 -0
  245. package/frontend/dist/frontend/src/modules/google.d.ts +23 -0
  246. package/frontend/dist/frontend/src/modules/google.js +52 -0
  247. package/frontend/dist/frontend/src/modules/meta.d.ts +14 -0
  248. package/frontend/dist/{modules → frontend/src/modules}/meta.js +9 -7
  249. package/frontend/dist/{modules → frontend/src/modules}/paddle.d.ts +37 -134
  250. package/frontend/dist/{modules → frontend/src/modules}/paddle.js +620 -568
  251. package/frontend/dist/frontend/src/modules/request.d.ts +70 -0
  252. package/frontend/dist/frontend/src/modules/request.js +117 -0
  253. package/frontend/dist/frontend/src/modules/settings.d.ts +3 -0
  254. package/frontend/dist/frontend/src/modules/settings.js +5 -0
  255. package/frontend/dist/frontend/src/modules/statics.d.ts +21 -0
  256. package/frontend/dist/{modules → frontend/src/modules}/statics.js +15 -18
  257. package/frontend/dist/frontend/src/modules/support.d.ts +30 -0
  258. package/frontend/dist/frontend/src/modules/support.js +53 -0
  259. package/frontend/dist/{modules → frontend/src/modules}/theme.d.ts +67 -0
  260. package/frontend/dist/{modules → frontend/src/modules}/theme.js +68 -38
  261. package/frontend/dist/frontend/src/modules/themes.d.ts +12 -0
  262. package/frontend/dist/frontend/src/modules/themes.js +22 -0
  263. package/frontend/dist/frontend/src/modules/user.d.ts +164 -0
  264. package/frontend/dist/frontend/src/modules/user.js +268 -0
  265. package/frontend/dist/frontend/src/modules/utils.d.ts +176 -0
  266. package/frontend/dist/frontend/src/modules/utils.js +569 -0
  267. package/frontend/dist/frontend/src/types/gradient.d.ts +29 -0
  268. package/frontend/dist/{types → frontend/src/types}/gradient.js +14 -18
  269. package/frontend/dist/frontend/src/ui/border_button.d.ts +94 -0
  270. package/frontend/dist/{ui → frontend/src/ui}/border_button.js +7 -13
  271. package/frontend/dist/frontend/src/ui/button.d.ts +28 -0
  272. package/frontend/dist/{ui → frontend/src/ui}/button.js +21 -12
  273. package/frontend/dist/frontend/src/ui/canvas.d.ts +138 -0
  274. package/frontend/dist/{ui → frontend/src/ui}/canvas.js +88 -55
  275. package/frontend/dist/frontend/src/ui/checkbox.d.ts +74 -0
  276. package/frontend/dist/{ui → frontend/src/ui}/checkbox.js +80 -41
  277. package/frontend/dist/{ui → frontend/src/ui}/code.d.ts +73 -6
  278. package/frontend/dist/{ui → frontend/src/ui}/code.js +55 -52
  279. package/frontend/dist/{ui → frontend/src/ui}/context_menu.d.ts +4 -0
  280. package/frontend/dist/{ui → frontend/src/ui}/context_menu.js +12 -17
  281. package/frontend/dist/{ui → frontend/src/ui}/css.d.ts +4 -0
  282. package/frontend/dist/{ui → frontend/src/ui}/css.js +3 -3
  283. package/frontend/dist/{ui → frontend/src/ui}/divider.d.ts +4 -0
  284. package/frontend/dist/{ui → frontend/src/ui}/divider.js +3 -3
  285. package/frontend/dist/{ui → frontend/src/ui}/dropdown.d.ts +57 -2
  286. package/frontend/dist/{ui → frontend/src/ui}/dropdown.js +87 -94
  287. package/frontend/dist/{ui → frontend/src/ui}/for_each.d.ts +4 -0
  288. package/frontend/dist/{ui → frontend/src/ui}/for_each.js +3 -3
  289. package/frontend/dist/{ui → frontend/src/ui}/form.d.ts +6 -2
  290. package/frontend/dist/{ui → frontend/src/ui}/form.js +10 -7
  291. package/frontend/dist/frontend/src/ui/frame_modes.d.ts +37 -0
  292. package/frontend/dist/{ui → frontend/src/ui}/frame_modes.js +16 -22
  293. package/frontend/dist/{ui → frontend/src/ui}/google_map.d.ts +4 -0
  294. package/frontend/dist/{ui → frontend/src/ui}/google_map.js +4 -4
  295. package/frontend/dist/{ui → frontend/src/ui}/gradient.d.ts +4 -0
  296. package/frontend/dist/{ui → frontend/src/ui}/gradient.js +3 -3
  297. package/frontend/dist/{ui → frontend/src/ui}/image.d.ts +4 -0
  298. package/frontend/dist/{ui → frontend/src/ui}/image.js +5 -5
  299. package/frontend/dist/frontend/src/ui/input.d.ts +392 -0
  300. package/frontend/dist/{ui → frontend/src/ui}/input.js +346 -360
  301. package/frontend/dist/{ui → frontend/src/ui}/link.d.ts +4 -0
  302. package/frontend/dist/{ui → frontend/src/ui}/link.js +3 -3
  303. package/frontend/dist/{ui → frontend/src/ui}/list.d.ts +4 -0
  304. package/frontend/dist/{ui → frontend/src/ui}/list.js +12 -6
  305. package/frontend/dist/frontend/src/ui/loader_button.d.ts +80 -0
  306. package/frontend/dist/{ui → frontend/src/ui}/loader_button.js +35 -47
  307. package/frontend/dist/frontend/src/ui/loaders.d.ts +57 -0
  308. package/frontend/dist/{ui → frontend/src/ui}/loaders.js +11 -11
  309. package/frontend/dist/{ui → frontend/src/ui}/popup.d.ts +11 -6
  310. package/frontend/dist/{ui → frontend/src/ui}/popup.js +32 -18
  311. package/frontend/dist/frontend/src/ui/pseudo.d.ts +44 -0
  312. package/frontend/dist/{ui → frontend/src/ui}/pseudo.js +84 -8
  313. package/frontend/dist/{ui → frontend/src/ui}/scroller.d.ts +14 -2
  314. package/frontend/dist/{ui → frontend/src/ui}/scroller.js +37 -43
  315. package/frontend/dist/{ui → frontend/src/ui}/slider.d.ts +5 -1
  316. package/frontend/dist/{ui → frontend/src/ui}/slider.js +4 -4
  317. package/frontend/dist/{ui → frontend/src/ui}/spacer.d.ts +4 -0
  318. package/frontend/dist/{ui → frontend/src/ui}/spacer.js +3 -3
  319. package/frontend/dist/{ui → frontend/src/ui}/span.d.ts +4 -0
  320. package/frontend/dist/{ui → frontend/src/ui}/span.js +3 -3
  321. package/frontend/dist/{ui → frontend/src/ui}/stack.d.ts +4 -0
  322. package/frontend/dist/{ui → frontend/src/ui}/stack.js +3 -9
  323. package/frontend/dist/frontend/src/ui/steps.d.ts +131 -0
  324. package/frontend/dist/{ui → frontend/src/ui}/steps.js +30 -45
  325. package/frontend/dist/{ui → frontend/src/ui}/style.d.ts +4 -0
  326. package/frontend/dist/{ui → frontend/src/ui}/style.js +3 -3
  327. package/frontend/dist/{ui → frontend/src/ui}/switch.d.ts +5 -1
  328. package/frontend/dist/{ui → frontend/src/ui}/switch.js +4 -4
  329. package/frontend/dist/{ui → frontend/src/ui}/table.d.ts +4 -0
  330. package/frontend/dist/{ui → frontend/src/ui}/table.js +6 -6
  331. package/frontend/dist/{ui → frontend/src/ui}/tabs.d.ts +45 -3
  332. package/frontend/dist/{ui → frontend/src/ui}/tabs.js +65 -40
  333. package/frontend/dist/{ui → frontend/src/ui}/text.d.ts +4 -0
  334. package/frontend/dist/{ui → frontend/src/ui}/text.js +3 -3
  335. package/frontend/dist/frontend/src/ui/title.d.ts +91 -0
  336. package/frontend/dist/frontend/src/ui/title.js +272 -0
  337. package/frontend/dist/{ui → frontend/src/ui}/view.d.ts +4 -0
  338. package/frontend/dist/{ui → frontend/src/ui}/view.js +3 -3
  339. package/frontend/dist/{volt.d.ts → frontend/src/volt.d.ts} +3 -0
  340. package/frontend/dist/{volt.js → frontend/src/volt.js} +4 -0
  341. package/frontend/tools/bundle_d_ts.js +71 -0
  342. package/frontend/tools/convert_to_jsdoc_input.txt +9452 -0
  343. package/frontend/tools/convert_to_jsdoc_output.txt +7626 -0
  344. package/frontend/tools/convert_to_jsdoc_tmp.js +345 -0
  345. package/package.json +11 -12
  346. package/backend/dist/cjs/database/collection.d.ts +0 -160
  347. package/backend/dist/cjs/database/collection.js +0 -842
  348. package/backend/dist/cjs/database/database.d.ts +0 -121
  349. package/backend/dist/cjs/database/document.d.ts +0 -131
  350. package/backend/dist/cjs/database/document.js +0 -224
  351. package/backend/dist/cjs/database.d.ts +0 -502
  352. package/backend/dist/cjs/database.js +0 -2248
  353. package/backend/dist/cjs/logger.d.ts +0 -3
  354. package/backend/dist/cjs/meta.d.ts +0 -50
  355. package/backend/dist/cjs/mutex.d.ts +0 -24
  356. package/backend/dist/cjs/payments/paddle.d.ts +0 -160
  357. package/backend/dist/cjs/plugins/browser.d.ts +0 -36
  358. package/backend/dist/cjs/plugins/browser.js +0 -198
  359. package/backend/dist/cjs/plugins/css.d.ts +0 -11
  360. package/backend/dist/cjs/plugins/css.js +0 -80
  361. package/backend/dist/cjs/plugins/mail.d.ts +0 -277
  362. package/backend/dist/cjs/plugins/mail.js +0 -1370
  363. package/backend/dist/cjs/plugins/ts/compiler.d.ts +0 -139
  364. package/backend/dist/cjs/plugins/ts/compiler.js +0 -750
  365. package/backend/dist/cjs/plugins/ts/preprocessing.d.ts +0 -14
  366. package/backend/dist/cjs/plugins/ts/preprocessing.js +0 -440
  367. package/backend/dist/cjs/rate_limit.d.ts +0 -63
  368. package/backend/dist/cjs/rate_limit.js +0 -348
  369. package/backend/dist/cjs/request.deprc.d.ts +0 -48
  370. package/backend/dist/cjs/request.deprc.js +0 -572
  371. package/backend/dist/cjs/response.deprc.d.ts +0 -55
  372. package/backend/dist/cjs/response.deprc.js +0 -275
  373. package/backend/dist/cjs/server.d.ts +0 -342
  374. package/backend/dist/cjs/splash_screen.d.ts +0 -35
  375. package/backend/dist/cjs/status.d.ts +0 -61
  376. package/backend/dist/cjs/stream.d.ts +0 -79
  377. package/backend/dist/cjs/users.d.ts +0 -111
  378. package/backend/dist/cjs/users.js +0 -1817
  379. package/backend/dist/cjs/view.js +0 -352
  380. package/backend/dist/cjs/vinc.dev.d.ts +0 -3
  381. package/backend/dist/cjs/vinc.dev.js +0 -7
  382. package/backend/dist/css/adyen.css +0 -92
  383. package/backend/dist/css/volt.css +0 -70
  384. package/backend/dist/esm/database/collection.d.ts +0 -160
  385. package/backend/dist/esm/database/collection.js +0 -1328
  386. package/backend/dist/esm/database/database.d.ts +0 -121
  387. package/backend/dist/esm/database/document.d.ts +0 -131
  388. package/backend/dist/esm/database/document.js +0 -247
  389. package/backend/dist/esm/database.d.ts +0 -502
  390. package/backend/dist/esm/database.js +0 -2423
  391. package/backend/dist/esm/file_watcher.js +0 -329
  392. package/backend/dist/esm/logger.d.ts +0 -3
  393. package/backend/dist/esm/logger.js +0 -11
  394. package/backend/dist/esm/meta.d.ts +0 -50
  395. package/backend/dist/esm/mutex.d.ts +0 -24
  396. package/backend/dist/esm/mutex.js +0 -48
  397. package/backend/dist/esm/payments/paddle.d.ts +0 -160
  398. package/backend/dist/esm/plugins/browser.d.ts +0 -36
  399. package/backend/dist/esm/plugins/browser.js +0 -176
  400. package/backend/dist/esm/plugins/css.d.ts +0 -11
  401. package/backend/dist/esm/plugins/css.js +0 -90
  402. package/backend/dist/esm/plugins/ts/compiler.d.ts +0 -139
  403. package/backend/dist/esm/plugins/ts/compiler.js +0 -1194
  404. package/backend/dist/esm/plugins/ts/preprocessing.d.ts +0 -14
  405. package/backend/dist/esm/plugins/ts/preprocessing.js +0 -726
  406. package/backend/dist/esm/rate_limit.d.ts +0 -63
  407. package/backend/dist/esm/rate_limit.js +0 -417
  408. package/backend/dist/esm/request.deprc.d.ts +0 -48
  409. package/backend/dist/esm/request.deprc.js +0 -572
  410. package/backend/dist/esm/response.deprc.d.ts +0 -55
  411. package/backend/dist/esm/response.deprc.js +0 -275
  412. package/backend/dist/esm/server.d.ts +0 -342
  413. package/backend/dist/esm/splash_screen.d.ts +0 -35
  414. package/backend/dist/esm/status.d.ts +0 -61
  415. package/backend/dist/esm/status.js +0 -197
  416. package/backend/dist/esm/stream.d.ts +0 -79
  417. package/backend/dist/esm/users.d.ts +0 -111
  418. package/backend/dist/esm/users.js +0 -1935
  419. package/backend/dist/esm/vinc.dev.d.ts +0 -3
  420. package/backend/dist/esm/vinc.dev.js +0 -7
  421. package/frontend/dist/elements/base.d.ts +0 -9889
  422. package/frontend/dist/elements/module.d.ts +0 -30
  423. package/frontend/dist/modules/array.d.ts +0 -94
  424. package/frontend/dist/modules/array.js +0 -634
  425. package/frontend/dist/modules/auth.d.ts +0 -46
  426. package/frontend/dist/modules/auth.js +0 -139
  427. package/frontend/dist/modules/colors.d.ts +0 -1
  428. package/frontend/dist/modules/colors.js +0 -417
  429. package/frontend/dist/modules/compression.d.ts +0 -6
  430. package/frontend/dist/modules/compression.js +0 -999
  431. package/frontend/dist/modules/cookies.d.ts +0 -18
  432. package/frontend/dist/modules/cookies.js +0 -167
  433. package/frontend/dist/modules/date.d.ts +0 -142
  434. package/frontend/dist/modules/date.js +0 -493
  435. package/frontend/dist/modules/events.d.ts +0 -8
  436. package/frontend/dist/modules/events.js +0 -91
  437. package/frontend/dist/modules/google.d.ts +0 -11
  438. package/frontend/dist/modules/google.js +0 -54
  439. package/frontend/dist/modules/meta.d.ts +0 -10
  440. package/frontend/dist/modules/mutex.d.ts +0 -7
  441. package/frontend/dist/modules/mutex.js +0 -51
  442. package/frontend/dist/modules/number.d.ts +0 -16
  443. package/frontend/dist/modules/number.js +0 -23
  444. package/frontend/dist/modules/object.d.ts +0 -52
  445. package/frontend/dist/modules/object.js +0 -383
  446. package/frontend/dist/modules/scheme.d.ts +0 -227
  447. package/frontend/dist/modules/scheme.js +0 -531
  448. package/frontend/dist/modules/settings.d.ts +0 -3
  449. package/frontend/dist/modules/settings.js +0 -4
  450. package/frontend/dist/modules/statics.d.ts +0 -5
  451. package/frontend/dist/modules/string.d.ts +0 -124
  452. package/frontend/dist/modules/string.js +0 -745
  453. package/frontend/dist/modules/support.d.ts +0 -19
  454. package/frontend/dist/modules/support.js +0 -103
  455. package/frontend/dist/modules/themes.d.ts +0 -8
  456. package/frontend/dist/modules/themes.js +0 -18
  457. package/frontend/dist/modules/user.d.ts +0 -59
  458. package/frontend/dist/modules/user.js +0 -280
  459. package/frontend/dist/modules/utils.d.ts +0 -87
  460. package/frontend/dist/modules/utils.js +0 -923
  461. package/frontend/dist/types/gradient.d.ts +0 -12
  462. package/frontend/dist/ui/border_button.d.ts +0 -152
  463. package/frontend/dist/ui/button.d.ts +0 -21
  464. package/frontend/dist/ui/canvas.d.ts +0 -56
  465. package/frontend/dist/ui/checkbox.d.ts +0 -52
  466. package/frontend/dist/ui/frame_modes.d.ts +0 -25
  467. package/frontend/dist/ui/input.d.ts +0 -241
  468. package/frontend/dist/ui/loader_button.d.ts +0 -93
  469. package/frontend/dist/ui/loaders.d.ts +0 -57
  470. package/frontend/dist/ui/pseudo.d.ts +0 -16
  471. package/frontend/dist/ui/steps.d.ts +0 -59
  472. package/frontend/dist/ui/title.d.ts +0 -21
  473. package/frontend/dist/ui/title.js +0 -121
  474. package/frontend/examples/dashboard/dashboard.ts +0 -776
  475. /package/backend/dist/cjs/{cli.d.ts → backend/src/cli.d.ts} +0 -0
  476. /package/backend/dist/cjs/{file_watcher.d.ts → backend/src/database/document.d.ts} +0 -0
  477. /package/backend/dist/cjs/{file_watcher.js → backend/src/database/document.js} +0 -0
  478. /package/backend/dist/cjs/{plugins/pdf.d.ts → backend/src/database/filters/strict_filter_test.d.ts} +0 -0
  479. /package/backend/dist/{esm/file_watcher.d.ts → cjs/backend/src/database/filters/strict_filter_test_v0.d.ts} +0 -0
  480. /package/backend/dist/{esm/plugins/pdf.d.ts → cjs/backend/src/database/flatten_test.d.ts} +0 -0
  481. /package/backend/dist/cjs/{frontend.d.ts → backend/src/frontend.d.ts} +0 -0
  482. /package/backend/dist/cjs/{plugins → backend/src/plugins}/communication.d.ts +0 -0
  483. /package/backend/dist/cjs/{plugins → backend/src/plugins}/communication.js +0 -0
  484. /package/backend/dist/cjs/{plugins → backend/src/plugins}/mail/ui.js +0 -0
  485. /package/backend/dist/cjs/{plugins → backend/src/plugins}/pdf.js +0 -0
  486. /package/backend/dist/cjs/{plugins → backend/src/plugins}/thread_monitor.d.ts +0 -0
  487. /package/backend/dist/cjs/{plugins → backend/src/plugins}/thread_monitor.js +0 -0
  488. /package/backend/dist/cjs/{vinc.d.ts → backend/src/vinc.d.ts} +0 -0
  489. /package/backend/dist/cjs/{vinc.js → backend/src/vinc.js} +0 -0
  490. /package/backend/dist/esm/{cli.d.ts → backend/src/cli.d.ts} +0 -0
  491. /package/backend/dist/esm/{frontend.d.ts → backend/src/frontend.d.ts} +0 -0
  492. /package/backend/dist/esm/{plugins → backend/src/plugins}/communication.d.ts +0 -0
  493. /package/backend/dist/esm/{plugins → backend/src/plugins}/communication.js +0 -0
  494. /package/backend/dist/esm/{plugins → backend/src/plugins}/thread_monitor.d.ts +0 -0
  495. /package/backend/dist/esm/{plugins → backend/src/plugins}/thread_monitor.js +0 -0
  496. /package/backend/dist/esm/{vinc.d.ts → backend/src/vinc.d.ts} +0 -0
  497. /package/backend/dist/esm/{vinc.js → backend/src/vinc.js} +0 -0
  498. /package/frontend/dist/{elements → frontend/src/elements}/register_element.d.ts +0 -0
  499. /package/frontend/dist/{elements → frontend/src/elements}/register_element.js +0 -0
  500. /package/frontend/dist/{modules → frontend/src/modules}/color.d.ts +0 -0
  501. /package/frontend/dist/{ui → frontend/src/ui}/ui.d.ts +0 -0
  502. /package/frontend/dist/{ui → frontend/src/ui}/ui.js +0 -0
@@ -0,0 +1,570 @@
1
+ /**
2
+ * @author Daan van den Bergh
3
+ * @copyright © 2022 - 2025 Daan van den Bergh. All rights reserved
4
+ */
5
+ // ---------------------------------------------------------
6
+ // Imports.
7
+ import CleanCSS from 'clean-css';
8
+ import zlib from 'zlib';
9
+ import { View } from './view.js';
10
+ import * as vlib from "@vandenberghinc/vlib";
11
+ import { ExternalError, InternalError } from "./errors/internal_external.js";
12
+ import { Status } from "./status.js";
13
+ import { RateLimits } from "./rate_limit.js";
14
+ import { Route } from './route.js';
15
+ import Meta from './meta.js';
16
+ const { debug } = vlib;
17
+ // ---------------------------------------------------------
18
+ // Endpoint
19
+ /**
20
+ * @nav Backend
21
+ * @chapter Endpoints
22
+ * @title Endpoint
23
+ * @description The endpoint class.
24
+ *
25
+ * @param method
26
+ * The method type.
27
+ *
28
+ * @param endpoint
29
+ * The endpoint sub url.
30
+ *
31
+ * @param authenticated
32
+ * Only allow authenticated requests.
33
+ *
34
+ * @param rate_limit
35
+ * The rate limit settings.
36
+ *
37
+ * Rate limiting works by creating a rate limit per group of endpoints. Multiple
38
+ * rate limiting groups can be applied by defining an array with rate limit objects.
39
+ * A group's interval and limit only need to be defined once on a single endpoint.
40
+ * When defined again these values will override the initial group settings.
41
+ *
42
+ * The rate limit parameter may be defined as three types:
43
+ * - `string`: Assign the rate limit group without any group parameters. Useful when the group is already defined.
44
+ * - `RateLimitGroup`: As a rate limit object.
45
+ * - An array with multiple rate limit objects.
46
+ *
47
+ * When left undefined no rate limiting will be applied.
48
+ *
49
+ * @param callback
50
+ * The callback that will be executed when a client requests this endpoint.
51
+ * Parameter `callback` precedes over parameter `data` and parameter `view`.
52
+ * The callback can take parameter `stream` assigned with the `volt.Stream` object of the request.
53
+ *
54
+ * @param view
55
+ * The JavaScript view that will be executed on the client side.
56
+ * Parameter `view` precedes over parameter `data`.
57
+ *
58
+ * @param data
59
+ * The data that will be returned as the response body.
60
+ *
61
+ * @param content_type
62
+ * The content type for parameter `data` or `callback`.
63
+ *
64
+ * @param compress
65
+ * Compress data, only available when initialized with one of the following parameters `view` or `data`.
66
+ *
67
+ * @param cache
68
+ * Parameter cache can define the max age of the cached response in seconds or as a boolean `true`.
69
+ * Anything higher than zero enables caching.
70
+ *
71
+ * When server production mode is enabled caching is done automatically unless `cache` is `false`.
72
+ * When production mode is disabled responses are never cached, even though the parameter is assigned.
73
+ * The response of an endpoint that uses parameter `callback` is never cached.
74
+ *
75
+ * @param sitemap
76
+ * A boolean indicating if the endpoint should show up in the sitemap.
77
+ * By default only when the attribute `view` is defined and the endpoint is unauthenticated,
78
+ * the endpoint will show up in sitemap.
79
+ *
80
+ * @param robots
81
+ * A boolean indicating if the endpoint should be crawled by search engines.
82
+ * By default only endpoints with `view` enabled will be crawled, unless specified otherwise.
83
+ *
84
+ * @param ip_whitelist
85
+ * An IP whitelist for the endpoint. When the parameter is defined with an Array,
86
+ * the whitelist will become active.
87
+ *
88
+ * @param _path
89
+ * Internal parameter (ignored).
90
+ *
91
+ * @param _is_static
92
+ * Internal parameter (ignored).
93
+ *
94
+ * @typedef RateLimitGroup
95
+ * @property group
96
+ * The rate limit group.
97
+ *
98
+ * @property limit
99
+ * The maximum requests per rate limit interval. These settings will be cached per group
100
+ * and only have to be assigned once. The assigned attributes will be overridden when
101
+ * these attributes are reassigned for the same group.
102
+ *
103
+ * @property interval
104
+ * The rate limit interval in seconds. These settings will be cached per group
105
+ * and only have to be assigned once. The assigned attributes will be overridden when
106
+ * these attributes are reassigned for the same group.
107
+ */
108
+ export class Endpoint {
109
+ // Static attributes.
110
+ static compressed_content_types = [
111
+ // Image formats (often already compressed)
112
+ "image/jpeg",
113
+ "image/png",
114
+ "image/gif",
115
+ "image/webp",
116
+ "image/bmp",
117
+ "image/tiff",
118
+ "image/vnd.microsoft.icon", // ICO
119
+ // Audio formats (usually compressed)
120
+ "audio/mpeg", // MP3
121
+ "audio/mp3",
122
+ "audio/ogg",
123
+ "audio/wav",
124
+ "audio/x-wav",
125
+ "audio/flac",
126
+ "audio/aac",
127
+ "audio/midi",
128
+ // Video formats (typically compressed)
129
+ "video/mp4",
130
+ "video/mpeg",
131
+ "video/ogg",
132
+ "video/webm",
133
+ "video/x-msvideo", // AVI
134
+ "video/quicktime", // MOV
135
+ // Archive / Compressed file formats
136
+ "application/zip",
137
+ "application/x-7z-compressed",
138
+ "application/x-rar-compressed",
139
+ "application/x-tar",
140
+ "application/gzip",
141
+ "application/x-gzip",
142
+ "application/x-bzip",
143
+ "application/x-bzip2",
144
+ "application/x-xz",
145
+ // Documents that are usually compressed internally
146
+ "application/pdf",
147
+ "application/vnd.ms-powerpoint",
148
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation",
149
+ "application/vnd.ms-excel",
150
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
151
+ "application/msword",
152
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
153
+ // Font files
154
+ "font/woff",
155
+ "font/woff2",
156
+ "application/font-sfnt",
157
+ "application/vnd.ms-fontobject",
158
+ // Other binary data
159
+ "application/octet-stream",
160
+ ];
161
+ /** Route attributes */
162
+ id;
163
+ route;
164
+ /** Requires authentication */
165
+ authenticated;
166
+ /** Parameter scheme validator */
167
+ params_schema;
168
+ /** The default response headers */
169
+ headers;
170
+ /** Option 2) View based endpoint */
171
+ view;
172
+ /** Option 3) Data endpoint, raw */
173
+ data;
174
+ raw_data;
175
+ /** Option 4 Data endpoint by file path. */
176
+ file_path;
177
+ /** Content length & type */
178
+ content_length;
179
+ content_type;
180
+ /** Booleans */
181
+ is_static;
182
+ is_image_endpoint = false;
183
+ allow_sitemap;
184
+ allow_robots;
185
+ /** Rate limit groups for internal use. */
186
+ rate_limit_groups;
187
+ /** Private attributes */
188
+ _compress;
189
+ _cache;
190
+ ip_whitelist;
191
+ _is_compressed;
192
+ _initialized = false;
193
+ /** A reference to the server. */
194
+ server;
195
+ constructor({ method, endpoint, authenticated = false, rate_limit = undefined, params = undefined, compress = "auto", cache = true, ip_whitelist = undefined, sitemap = undefined, robots = undefined, allow_unknown_params = false, _is_static = false,
196
+ // mode options.
197
+ callback = undefined, view = undefined, data = undefined, file_path = undefined, content_type, // = "text/plain",
198
+ }) {
199
+ // Attributes.
200
+ this.route = new Route(method ?? "GET", endpoint);
201
+ this.id = this.route.id;
202
+ this.authenticated = authenticated;
203
+ if (this.callback === undefined) { // only assign when undefined, so derived classes can also define the callback function.
204
+ this.callback = callback;
205
+ }
206
+ this.data = data;
207
+ this.content_type = content_type;
208
+ this._cache = cache;
209
+ this.allow_sitemap = sitemap ?? true;
210
+ this.allow_robots = robots ?? true;
211
+ this.file_path = file_path == null ? file_path : new vlib.Path(file_path).abs();
212
+ this.ip_whitelist = Array.isArray(ip_whitelist) ? ip_whitelist : undefined;
213
+ this.is_static = _is_static;
214
+ this.headers = [];
215
+ // Excluded endpoint chars
216
+ if (typeof endpoint === "string") {
217
+ ["\n", "\,"].forEach((c) => {
218
+ if (endpoint.indexOf(c) !== -1) {
219
+ throw Error("The \",\" character is not allowed inside an endpoint url.");
220
+ }
221
+ });
222
+ }
223
+ // Set compress.
224
+ if (compress === "auto" || typeof compress !== "boolean") {
225
+ compress = Endpoint.compressed_content_types.includes(this.content_type ?? "");
226
+ }
227
+ else if (compress === true && this.content_type != null && Endpoint.compressed_content_types.includes(this.content_type)) {
228
+ debug(3, this.route.id, ": ", `Overriding parameter "compress", disabling compression.`);
229
+ compress = false;
230
+ }
231
+ this._compress = compress;
232
+ this._compress = false;
233
+ if (this._compress) {
234
+ debug(3, this.route.id, ": ", "Compression enabled.", { content_type: this.content_type });
235
+ }
236
+ // Argument `view` may also be passed as an object instead of class View.
237
+ if (view == null) {
238
+ this.view = undefined;
239
+ }
240
+ else if (view instanceof View) {
241
+ this.view = view;
242
+ }
243
+ else {
244
+ this.view = new View(view);
245
+ }
246
+ // Set default visible in sitemap.
247
+ if (this.allow_sitemap == null) {
248
+ if (this.view != null &&
249
+ this.route.endpoint != "robots.txt" &&
250
+ this.route.endpoint != "sitemap.xml" &&
251
+ !this.authenticated) {
252
+ this.allow_sitemap = true;
253
+ }
254
+ else {
255
+ this.allow_sitemap = false;
256
+ }
257
+ }
258
+ // Set crawling by robots.
259
+ if (this.allow_robots == null) {
260
+ this.allow_robots = !this.authenticated && (this.view != null || this.route.endpoint == "robots.txt" || this.route.endpoint == "sitemap.xml");
261
+ }
262
+ // Assign rate limits.
263
+ this.rate_limit_groups = [];
264
+ if (Array.isArray(rate_limit)) {
265
+ rate_limit.forEach((item) => {
266
+ if (typeof item === "string") {
267
+ const group = RateLimits.groups.get(item);
268
+ if (!group)
269
+ throw new Error(`Rate limit group "${item}" does not exist.`);
270
+ this.rate_limit_groups.push(group);
271
+ }
272
+ else {
273
+ this.rate_limit_groups.push(RateLimits.add(item));
274
+ }
275
+ });
276
+ }
277
+ else if (typeof rate_limit === "string") {
278
+ const group = RateLimits.groups.get(rate_limit);
279
+ if (!group)
280
+ throw new Error(`Rate limit group "${rate_limit}" does not exist.`);
281
+ this.rate_limit_groups.push(group);
282
+ }
283
+ else if (typeof rate_limit === "object" && rate_limit != null) {
284
+ this.rate_limit_groups.push(RateLimits.add(rate_limit));
285
+ }
286
+ // Add path parameters from route.
287
+ let params_scheme = params;
288
+ if (this.route.params.length > 0) {
289
+ params_scheme ??= {};
290
+ this.route.params.forEach((item) => {
291
+ if (params_scheme[item.name] == null) {
292
+ params_scheme[item.name] = {
293
+ type: "string",
294
+ required: item.required ?? true,
295
+ allow_empty: false,
296
+ };
297
+ }
298
+ });
299
+ }
300
+ // Initialize the parameter scheme validator.
301
+ if (params_scheme != null) {
302
+ this.params_schema = new vlib.Schema.Validator({
303
+ schema: params_scheme,
304
+ unknown: !allow_unknown_params,
305
+ parent: this.route.id + ":",
306
+ throw: false,
307
+ });
308
+ }
309
+ }
310
+ /** Initialize with server. */
311
+ _initialize(server) {
312
+ // Assign attribute.
313
+ this.server = server;
314
+ // Initialize view.
315
+ if (this.view != null) {
316
+ this.view._initialize(server, this);
317
+ }
318
+ // Init view meta.
319
+ if (this.view != null) {
320
+ if (this.view.meta == null) {
321
+ this.view.meta = server.meta.copy();
322
+ }
323
+ else if (typeof this.view.meta === "object" && !(this.view.meta instanceof Meta)) {
324
+ this.view.meta = new Meta(this.view.meta);
325
+ }
326
+ }
327
+ return this;
328
+ }
329
+ // Initialize.
330
+ async _dynamic_initialize() {
331
+ if (!this.server) {
332
+ throw new Error(`Endpoint "${this.id}" is not initialized by the server yet.`);
333
+ }
334
+ /**
335
+ * Load data by file path
336
+ * @todo in the future we should not load all of the data but just send it to the client in chunks
337
+ * but we need to account for compression and content length when implementing this.
338
+ */
339
+ if (this.file_path != null) {
340
+ this._load_data_by_path(this.server);
341
+ }
342
+ // Compression enabled.
343
+ if (this.server.production && this.callback == null && this._compress) {
344
+ this._is_compressed = true;
345
+ if (this.data != null && (this.data instanceof Buffer || typeof this.data === "string")) {
346
+ this.raw_data = this.data;
347
+ this.data = zlib.gzipSync(this.data, { level: zlib.constants.Z_BEST_COMPRESSION });
348
+ this.content_length = this.data.length;
349
+ }
350
+ // cant compress view html here since it contains unique nonces.
351
+ // else if (this.view != null) {
352
+ // this.view.raw_html = this.view.html;
353
+ // this.view.html = zlib.gzipSync(this.view.html as any, {level: zlib.constants.Z_BEST_COMPRESSION});
354
+ // this.content_length = this.view.html.length;
355
+ // }
356
+ debug(2, this.route.id, ": ", "Compressed - content_length:", this.content_length);
357
+ }
358
+ // Set cache headers.
359
+ if (!this.server.production) {
360
+ this._cache = false; // @todo @tmp
361
+ }
362
+ if (
363
+ // (this.callback == null || this.is_image_endpoint) &&
364
+ (typeof this._cache === "number" || this._cache === true)) {
365
+ if (this._cache === 1 || this._cache === true) {
366
+ this.headers.push(["Cache-Control", "max-age=86400"]);
367
+ }
368
+ else {
369
+ this.headers.push(["Cache-Control", `max-age=${this._cache}`]);
370
+ }
371
+ }
372
+ // Set compression headers.
373
+ if (this._is_compressed) {
374
+ this.headers.push(["Content-Encoding", "gzip"]);
375
+ this.headers.push(["Vary", "Accept-Encoding"]);
376
+ }
377
+ // Set content length.
378
+ if (this.content_length != null) {
379
+ this.headers.push(["Content-Length", this.content_length.toString()]);
380
+ }
381
+ // Set content type.
382
+ if (this.content_type != null) {
383
+ this.headers.push(["Content-Type", this.content_type]);
384
+ }
385
+ if (this._is_compressed) {
386
+ debug(2, this.route.id, ": ", "Compressed headers:", this.headers);
387
+ }
388
+ this._initialized = true;
389
+ }
390
+ // Set default headers.
391
+ _set_headers(stream) {
392
+ this.headers.forEach((item) => {
393
+ stream.set_header(item[0], item[1]);
394
+ });
395
+ }
396
+ // Serve a client.
397
+ async _serve_options(stream) {
398
+ if (!this._initialized) {
399
+ await this._dynamic_initialize();
400
+ }
401
+ try {
402
+ // Check IP whitelist.
403
+ if (this.ip_whitelist && !this.ip_whitelist.includes(stream.ip)) {
404
+ stream.error({
405
+ status: Status.unauthorized,
406
+ type: "Unauthorized",
407
+ message: "Unauthorized.",
408
+ });
409
+ return;
410
+ }
411
+ // Set headers.
412
+ this._set_headers(stream);
413
+ // Compute content length on view & when not defined.
414
+ if (this.content_length == null && this.view != null) {
415
+ stream.set_header("Content-Length", (await this.view.content_length()).toString());
416
+ }
417
+ // Send.
418
+ stream.send({ status: Status.no_content });
419
+ }
420
+ catch (err) {
421
+ throw err; // must have another catch block here otherwise when an error occurs in here it is somehow not catched by the try and catch block from Server._serve which will cause the program to crash.
422
+ }
423
+ }
424
+ async _serve(stream, status_code = 200) {
425
+ if (!this._initialized) {
426
+ await this._dynamic_initialize();
427
+ }
428
+ try {
429
+ // Check IP whitelist.
430
+ if (this.ip_whitelist && !this.ip_whitelist.includes(stream.ip)) {
431
+ this.server?.log(2, this.route.id, ": ", "Blocking ip ", stream.ip, " per ip whitelist.");
432
+ stream.send({
433
+ status: Status.unauthorized,
434
+ data: "Unauthorized.",
435
+ });
436
+ return;
437
+ }
438
+ // Set headers.
439
+ this._set_headers(stream);
440
+ // Callback.
441
+ if (this.callback != null) {
442
+ this.server?.log(3, this.route.id, ": ", "Serving endpoint in callback mode.");
443
+ if (this.params_schema != null) {
444
+ const { error, invalid_fields } = this.params_schema.validate(stream.params ?? {});
445
+ if (error) {
446
+ stream.send({
447
+ status: Status.bad_request,
448
+ headers: { "Content-Type": "application/json" },
449
+ data: {
450
+ error,
451
+ invalid_fields,
452
+ }
453
+ });
454
+ return;
455
+ }
456
+ }
457
+ try {
458
+ let promise;
459
+ if (this.params_schema != null) {
460
+ promise = this.callback(stream, (stream.params ?? {}));
461
+ }
462
+ else {
463
+ promise = this.callback(stream, {});
464
+ }
465
+ if (promise instanceof Promise) {
466
+ await promise;
467
+ }
468
+ }
469
+ catch (err) {
470
+ if (err instanceof ExternalError || err instanceof InternalError) {
471
+ err.serve(stream);
472
+ }
473
+ else {
474
+ stream.error({
475
+ status: Status.internal_server_error,
476
+ headers: { "Content-Type": "application/json" },
477
+ message: "Internal Server Error",
478
+ type: "InternalServerError",
479
+ });
480
+ }
481
+ this.server?.log.error(`${this.id}: `, err); // after sending the response since this edits the error.
482
+ }
483
+ return;
484
+ }
485
+ // View.
486
+ else if (this.view != null) {
487
+ this.server?.log(3, this.route.id, ": ", "Serving endpoint in view mode.");
488
+ await this.view._serve(stream, status_code, { compress: this._compress });
489
+ return;
490
+ }
491
+ // Data.
492
+ else if (this.data != null) {
493
+ this.server?.log(3, this.route.id, ": ", "Serving endpoint in data mode.");
494
+ stream.send({
495
+ status: status_code,
496
+ data: this.data,
497
+ });
498
+ return;
499
+ }
500
+ // Undefined.
501
+ else {
502
+ throw new Error(`${this.id}: Undefined behaviour, define one of the following endpoint attributes [callback, view, data].`);
503
+ }
504
+ }
505
+ catch (err) {
506
+ throw err; // must have another catch block here otherwise when an error occurs in here it is somehow not catched by the try and catch block from Server._serve which will cause the program to crash.
507
+ }
508
+ }
509
+ // Load data by path.
510
+ _load_data_by_path(server) {
511
+ if (!this.file_path) {
512
+ throw new Error(`Endpoint "${this.id}" has no file path assigned.`);
513
+ }
514
+ // Load data.
515
+ const path = new vlib.Path(this.file_path);
516
+ let data;
517
+ if (path.extension() === ".js") {
518
+ data = path.load_sync();
519
+ // @deprecated compile using vhighlight, now esbuild is used for bundling, callback is not supported yet.
520
+ // const hash = server.hash(data);
521
+ // // Check cache for restarts by file watcher.
522
+ // const {cache_path, cache_hash, cache_data} = Utils.get_compiled_cache(server.domain, "GET", path.str());
523
+ // if (cache_data && hash === cache_hash) {
524
+ // data = cache_data;
525
+ // }
526
+ // // Compile.
527
+ // else {
528
+ // const compiler = new vhighlight.JSCompiler({
529
+ // line_breaks: true,
530
+ // double_line_breaks: false,
531
+ // comments: false,
532
+ // white_space: false,
533
+ // })
534
+ // data = compiler.compile_code(data, path.str());
535
+ // // Cache for restarts.
536
+ // Utils.set_compiled_cache(cache_path, data, hash);
537
+ // }
538
+ }
539
+ else if (path.extension() === ".css") {
540
+ const minifier = new CleanCSS();
541
+ data = minifier.minify(path.load_sync()).styles;
542
+ }
543
+ else {
544
+ data = path.load_sync({ type: "buffer" });
545
+ }
546
+ // Assign.
547
+ this.data = data;
548
+ return this;
549
+ }
550
+ }
551
+ // const e = new Endpoint({
552
+ // method: "POST",
553
+ // endpoint: "/api/docs/feedback",
554
+ // content_type: "application/json",
555
+ // params: {
556
+ // /** The user id. */
557
+ // uid: "string",
558
+ // /** The project name. */
559
+ // project: "string",
560
+ // /** The project version. */
561
+ // version: "string",
562
+ // /** The document id. */
563
+ // id: "string",
564
+ // /** Whether the feedback is positive or negative. */
565
+ // positive: "boolean",
566
+ // },
567
+ // rate_limit: "global",
568
+ // async callback(stream, params) {
569
+ // }
570
+ // })
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @author Daan van den Bergh
3
+ * @copyright © 2022 - 2025 Daan van den Bergh.
4
+ */
5
+ export * from './invalid_usage_error.js';
6
+ export * from './system_error.js';
7
+ export * from './internal_external.js';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @author Daan van den Bergh
3
+ * @copyright © 2022 - 2025 Daan van den Bergh.
4
+ */
5
+ export * from './invalid_usage_error.js';
6
+ export * from './system_error.js';
7
+ export * from './internal_external.js';
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @author Daan van den Bergh
3
+ * @copyright © 2022 - 2025 Daan van den Bergh.
4
+ */
5
+ import type { Stream } from "../stream.js";
6
+ /**
7
+ * The base class for internal and external errors.
8
+ */
9
+ declare class BaseError extends Error {
10
+ type: string;
11
+ status: number;
12
+ data?: any[] | Record<string, any>;
13
+ invalid_fields: Record<string, string>;
14
+ constructor({ type, message, status, data, invalid_fields, cause }: {
15
+ message: string;
16
+ type?: string;
17
+ status?: number;
18
+ data?: any[] | Record<string, any>;
19
+ invalid_fields?: Record<string, string>;
20
+ cause?: unknown;
21
+ });
22
+ serve(stream: Stream): this;
23
+ }
24
+ /**
25
+ * Thrown internal errors are not presented to the user, isntead an internal server error message is shown.
26
+ */
27
+ export declare class InternalError extends BaseError {
28
+ constructor(args: ConstructorParameters<typeof BaseError>[0]);
29
+ serve(stream: Stream): this;
30
+ }
31
+ /**
32
+ * Thrown external errors are presented to the user.
33
+ */
34
+ export declare class ExternalError extends BaseError {
35
+ constructor(args: ConstructorParameters<typeof BaseError>[0]);
36
+ serve(stream: Stream): this;
37
+ }
38
+ export {};
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @author Daan van den Bergh
3
+ * @copyright © 2022 - 2025 Daan van den Bergh.
4
+ */
5
+ import { Status } from "../status.js";
6
+ /**
7
+ * The base class for internal and external errors.
8
+ */
9
+ class BaseError extends Error {
10
+ type;
11
+ status;
12
+ data;
13
+ invalid_fields;
14
+ constructor({ type = "APIError", message, status, data, invalid_fields, cause }) {
15
+ super(message);
16
+ this.name = "APIError";
17
+ this.type = type;
18
+ this.status = status ?? Status.internal_server_error;
19
+ this.data = data;
20
+ this.invalid_fields = invalid_fields ?? {};
21
+ this.cause = cause;
22
+ }
23
+ serve(stream) {
24
+ stream.error({
25
+ status: this.status ?? Status.internal_server_error,
26
+ headers: { "Content-Type": "application/json" },
27
+ message: this.message,
28
+ type: this.type,
29
+ invalid_fields: this.invalid_fields,
30
+ });
31
+ return this;
32
+ }
33
+ }
34
+ /**
35
+ * Thrown internal errors are not presented to the user, isntead an internal server error message is shown.
36
+ */
37
+ export class InternalError extends BaseError {
38
+ constructor(args) {
39
+ args.type ??= "InternalError";
40
+ super(args);
41
+ }
42
+ serve(stream) {
43
+ stream.error({
44
+ status: Status.internal_server_error,
45
+ headers: { "Content-Type": "application/json" },
46
+ message: "Internal Server Error",
47
+ type: "InternalServerError",
48
+ });
49
+ return this;
50
+ }
51
+ }
52
+ /**
53
+ * Thrown external errors are presented to the user.
54
+ */
55
+ export class ExternalError extends BaseError {
56
+ constructor(args) {
57
+ args.type ??= "ExternalError";
58
+ super(args);
59
+ }
60
+ serve(stream) {
61
+ stream.error({
62
+ status: this.status ?? Status.internal_server_error,
63
+ headers: { "Content-Type": "application/json" },
64
+ message: this.message,
65
+ type: this.type,
66
+ invalid_fields: this.invalid_fields,
67
+ });
68
+ return this;
69
+ }
70
+ }