@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.
- package/backend/dist/cjs/{blacklist.d.ts → backend/src/blacklist.d.ts} +5 -3
- package/backend/dist/cjs/{blacklist.js → backend/src/blacklist.js} +8 -5
- package/backend/dist/cjs/{cli.js → backend/src/cli.js} +29 -47
- package/backend/dist/cjs/backend/src/database/collection.d.ts +1543 -0
- package/backend/dist/cjs/backend/src/database/collection.js +3042 -0
- package/backend/dist/cjs/backend/src/database/database.d.ts +66 -0
- package/backend/dist/cjs/{database → backend/src/database}/database.js +48 -43
- package/backend/dist/cjs/backend/src/database/filters/filters.d.ts +6 -0
- package/backend/dist/cjs/backend/src/database/filters/filters.js +15 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter.d.ts +223 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter.js +15 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_test.js +443 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_test_v0.js +15 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_v0.d.ts +50 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_v0.js +15 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_v1.d.ts +76 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_v1.js +15 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_v2.d.ts +75 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_v2.js +15 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_v3.d.ts +219 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_v3.js +15 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_update_filter.d.ts +165 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_update_filter.js +15 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_update_filter_test.d.ts +5 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_update_filter_test.js +355 -0
- package/backend/dist/cjs/backend/src/database/flatten.d.ts +75 -0
- package/backend/dist/cjs/{logger.js → backend/src/database/flatten.js} +18 -7
- package/backend/dist/cjs/backend/src/database/flatten_test.js +175 -0
- package/backend/dist/cjs/backend/src/database/quota/quota.d.ts +461 -0
- package/backend/dist/cjs/backend/src/database/quota/quota.js +1014 -0
- package/backend/dist/cjs/backend/src/database/quota/quota_v1.d.ts +534 -0
- package/backend/dist/cjs/backend/src/database/quota/quota_v1.js +1087 -0
- package/backend/dist/cjs/backend/src/database/quota/safe_int.d.ts +293 -0
- package/backend/dist/cjs/backend/src/database/quota/safe_int.js +573 -0
- package/backend/dist/{esm → cjs/backend/src}/endpoint.d.ts +69 -46
- package/backend/dist/cjs/{endpoint.js → backend/src/endpoint.js} +87 -101
- package/backend/dist/cjs/backend/src/errors/index.d.ts +7 -0
- package/backend/dist/cjs/backend/src/errors/index.js +25 -0
- package/backend/dist/{esm/utils.d.ts → cjs/backend/src/errors/internal_external.d.ts} +14 -22
- package/backend/dist/cjs/backend/src/errors/internal_external.js +85 -0
- package/backend/dist/cjs/backend/src/errors/invalid_usage_error.d.ts +38 -0
- package/backend/dist/cjs/{mutex.js → backend/src/errors/invalid_usage_error.js} +20 -37
- package/backend/dist/cjs/backend/src/errors/system_error.d.ts +230 -0
- package/backend/dist/cjs/backend/src/errors/system_error.js +393 -0
- package/backend/dist/cjs/backend/src/events.d.ts +54 -0
- package/backend/dist/cjs/backend/src/events.js +15 -0
- package/backend/dist/cjs/{frontend.js → backend/src/frontend.js} +1 -1
- package/backend/dist/cjs/{image_endpoint.d.ts → backend/src/image_endpoint.d.ts} +16 -1
- package/backend/dist/cjs/{image_endpoint.js → backend/src/image_endpoint.js} +3 -5
- package/backend/dist/cjs/backend/src/logger.d.ts +5 -0
- package/backend/dist/cjs/backend/src/logger.js +15 -0
- package/backend/dist/cjs/backend/src/meta.d.ts +64 -0
- package/backend/dist/cjs/{meta.js → backend/src/meta.js} +9 -12
- package/backend/dist/cjs/backend/src/payments/paddle.d.ts +326 -0
- package/backend/dist/cjs/{payments → backend/src/payments}/paddle.js +377 -327
- package/backend/dist/cjs/backend/src/plugins/browser.d.ts +1 -0
- package/backend/dist/cjs/backend/src/plugins/browser.js +15 -0
- package/backend/dist/cjs/backend/src/plugins/mail/mail.d.ts +248 -0
- package/backend/dist/cjs/backend/src/plugins/mail/mail.js +379 -0
- package/backend/dist/{esm → cjs/backend/src}/plugins/mail/ui.d.ts +23 -0
- package/backend/dist/cjs/backend/src/plugins/pdf.d.ts +1 -0
- package/backend/dist/cjs/backend/src/rate_limit.d.ts +145 -0
- package/backend/dist/cjs/backend/src/rate_limit.js +549 -0
- package/backend/dist/cjs/{route.d.ts → backend/src/route.d.ts} +3 -10
- package/backend/dist/cjs/{route.js → backend/src/route.js} +23 -21
- package/backend/dist/cjs/backend/src/server.d.ts +485 -0
- package/backend/dist/cjs/{server.js → backend/src/server.js} +688 -873
- package/backend/dist/cjs/backend/src/splash_screen.d.ts +80 -0
- package/backend/dist/cjs/{splash_screen.js → backend/src/splash_screen.js} +24 -3
- package/backend/dist/cjs/backend/src/status.d.ts +74 -0
- package/backend/dist/cjs/{status.js → backend/src/status.js} +64 -64
- package/backend/dist/cjs/backend/src/stream.d.ts +376 -0
- package/backend/dist/cjs/{stream.js → backend/src/stream.js} +299 -276
- package/backend/dist/cjs/backend/src/users.d.ts +807 -0
- package/backend/dist/cjs/backend/src/users.js +1971 -0
- package/backend/dist/cjs/backend/src/utils.d.ts +16 -0
- package/backend/dist/cjs/{utils.js → backend/src/utils.js} +14 -77
- package/backend/dist/{esm → cjs/backend/src}/view.d.ts +33 -11
- package/backend/dist/cjs/backend/src/view.js +508 -0
- package/backend/dist/{esm → cjs/backend/src}/volt.d.ts +10 -1
- package/backend/dist/cjs/{volt.js → backend/src/volt.js} +8 -5
- package/backend/dist/cjs/frontend/src/modules/request.d.ts +70 -0
- package/backend/dist/cjs/frontend/src/modules/request.js +99 -0
- package/backend/dist/esm/{blacklist.d.ts → backend/src/blacklist.d.ts} +5 -3
- package/backend/dist/esm/{blacklist.js → backend/src/blacklist.js} +9 -6
- package/backend/dist/esm/{cli.js → backend/src/cli.js} +43 -60
- package/backend/dist/esm/backend/src/database/collection.d.ts +1543 -0
- package/backend/dist/esm/backend/src/database/collection.js +3510 -0
- package/backend/dist/esm/backend/src/database/database.d.ts +66 -0
- package/backend/dist/esm/{database → backend/src/database}/database.js +62 -103
- package/backend/dist/esm/backend/src/database/document.d.ts +1 -0
- package/backend/dist/esm/backend/src/database/document.js +558 -0
- package/backend/dist/esm/backend/src/database/filters/filters.d.ts +6 -0
- package/backend/dist/esm/backend/src/database/filters/filters.js +1 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter.d.ts +223 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter.js +3 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_test.d.ts +1 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_test.js +505 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_test_v0.d.ts +1 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_test_v0.js +712 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_v0.d.ts +50 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_v0.js +5 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_v1.d.ts +76 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_v1.js +44 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_v2.d.ts +75 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_v2.js +5 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_v3.d.ts +219 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_v3.js +1 -0
- package/backend/dist/esm/backend/src/database/filters/strict_update_filter.d.ts +165 -0
- package/backend/dist/esm/backend/src/database/filters/strict_update_filter.js +5 -0
- package/backend/dist/esm/backend/src/database/filters/strict_update_filter_test.d.ts +5 -0
- package/backend/dist/esm/backend/src/database/filters/strict_update_filter_test.js +405 -0
- package/backend/dist/esm/backend/src/database/flatten.d.ts +75 -0
- package/backend/dist/esm/backend/src/database/flatten.js +22 -0
- package/backend/dist/esm/backend/src/database/flatten_test.d.ts +1 -0
- package/backend/dist/esm/backend/src/database/flatten_test.js +174 -0
- package/backend/dist/esm/backend/src/database/quota/quota.d.ts +461 -0
- package/backend/dist/esm/backend/src/database/quota/quota.js +1118 -0
- package/backend/dist/esm/backend/src/database/quota/quota_v1.d.ts +534 -0
- package/backend/dist/esm/backend/src/database/quota/quota_v1.js +1242 -0
- package/backend/dist/esm/backend/src/database/quota/safe_int.d.ts +293 -0
- package/backend/dist/esm/backend/src/database/quota/safe_int.js +602 -0
- package/backend/dist/{cjs → esm/backend/src}/endpoint.d.ts +69 -46
- package/backend/dist/esm/{endpoint.js → backend/src/endpoint.js} +136 -127
- package/backend/dist/esm/backend/src/errors/index.d.ts +7 -0
- package/backend/dist/esm/backend/src/errors/index.js +7 -0
- package/backend/dist/{cjs/utils.d.ts → esm/backend/src/errors/internal_external.d.ts} +14 -22
- package/backend/dist/esm/backend/src/errors/internal_external.js +70 -0
- package/backend/dist/esm/backend/src/errors/invalid_usage_error.d.ts +38 -0
- package/backend/dist/esm/backend/src/errors/invalid_usage_error.js +30 -0
- package/backend/dist/esm/backend/src/errors/system_error.d.ts +230 -0
- package/backend/dist/esm/backend/src/errors/system_error.js +402 -0
- package/backend/dist/esm/backend/src/events.d.ts +54 -0
- package/backend/dist/esm/backend/src/events.js +5 -0
- package/backend/dist/esm/{frontend.js → backend/src/frontend.js} +1 -1
- package/backend/dist/esm/{image_endpoint.d.ts → backend/src/image_endpoint.d.ts} +16 -1
- package/backend/dist/esm/{image_endpoint.js → backend/src/image_endpoint.js} +16 -20
- package/backend/dist/esm/backend/src/logger.d.ts +5 -0
- package/backend/dist/esm/backend/src/logger.js +8 -0
- package/backend/dist/esm/backend/src/meta.d.ts +64 -0
- package/backend/dist/esm/{meta.js → backend/src/meta.js} +15 -54
- package/backend/dist/esm/backend/src/payments/paddle.d.ts +326 -0
- package/backend/dist/esm/{payments → backend/src/payments}/paddle.js +417 -452
- package/backend/dist/esm/backend/src/plugins/browser.d.ts +1 -0
- package/backend/dist/esm/backend/src/plugins/browser.js +170 -0
- package/backend/dist/esm/backend/src/plugins/mail/mail.d.ts +248 -0
- package/backend/dist/esm/backend/src/plugins/mail/mail.js +389 -0
- package/backend/dist/{cjs → esm/backend/src}/plugins/mail/ui.d.ts +23 -0
- package/backend/dist/esm/{plugins → backend/src/plugins}/mail/ui.js +3 -6
- package/backend/dist/esm/backend/src/plugins/pdf.d.ts +1 -0
- package/backend/dist/esm/{plugins → backend/src/plugins}/pdf.js +3 -3
- package/backend/dist/esm/backend/src/rate_limit.d.ts +145 -0
- package/backend/dist/esm/backend/src/rate_limit.js +667 -0
- package/backend/dist/esm/{route.d.ts → backend/src/route.d.ts} +3 -10
- package/backend/dist/esm/{route.js → backend/src/route.js} +26 -21
- package/backend/dist/esm/backend/src/server.d.ts +485 -0
- package/backend/dist/esm/{server.js → backend/src/server.js} +891 -1441
- package/backend/dist/esm/backend/src/splash_screen.d.ts +80 -0
- package/backend/dist/esm/{splash_screen.js → backend/src/splash_screen.js} +42 -55
- package/backend/dist/esm/backend/src/status.d.ts +74 -0
- package/backend/dist/esm/backend/src/status.js +199 -0
- package/backend/dist/esm/backend/src/stream.d.ts +376 -0
- package/backend/dist/esm/{stream.js → backend/src/stream.js} +327 -292
- package/backend/dist/esm/backend/src/users.d.ts +809 -0
- package/backend/dist/esm/backend/src/users.js +2140 -0
- package/backend/dist/esm/backend/src/utils.d.ts +16 -0
- package/backend/dist/esm/{utils.js → backend/src/utils.js} +20 -81
- package/backend/dist/{cjs → esm/backend/src}/view.d.ts +33 -11
- package/backend/dist/esm/{view.js → backend/src/view.js} +266 -86
- package/backend/dist/{cjs → esm/backend/src}/volt.d.ts +10 -1
- package/backend/dist/esm/{volt.js → backend/src/volt.js} +7 -4
- package/backend/dist/esm/frontend/src/modules/request.d.ts +70 -0
- package/backend/dist/esm/frontend/src/modules/request.js +117 -0
- package/frontend/dist/backend/src/database/collection.d.ts +1543 -0
- package/frontend/dist/backend/src/database/collection.js +3510 -0
- package/frontend/dist/backend/src/database/database.d.ts +66 -0
- package/frontend/dist/backend/src/database/database.js +196 -0
- package/frontend/dist/backend/src/database/filters/filters.d.ts +6 -0
- package/frontend/dist/backend/src/database/filters/filters.js +1 -0
- package/frontend/dist/backend/src/database/filters/strict_filter.d.ts +223 -0
- package/frontend/dist/backend/src/database/filters/strict_filter.js +3 -0
- package/frontend/dist/backend/src/database/filters/strict_update_filter.d.ts +165 -0
- package/frontend/dist/backend/src/database/filters/strict_update_filter.js +5 -0
- package/frontend/dist/backend/src/database/flatten.d.ts +75 -0
- package/frontend/dist/backend/src/database/flatten.js +22 -0
- package/frontend/dist/backend/src/endpoint.d.ts +204 -0
- package/frontend/dist/backend/src/endpoint.js +570 -0
- package/frontend/dist/backend/src/errors/index.d.ts +7 -0
- package/frontend/dist/backend/src/errors/index.js +7 -0
- package/frontend/dist/backend/src/errors/internal_external.d.ts +38 -0
- package/frontend/dist/backend/src/errors/internal_external.js +70 -0
- package/frontend/dist/backend/src/errors/invalid_usage_error.d.ts +38 -0
- package/frontend/dist/backend/src/errors/invalid_usage_error.js +30 -0
- package/frontend/dist/backend/src/errors/system_error.d.ts +230 -0
- package/frontend/dist/backend/src/errors/system_error.js +402 -0
- package/frontend/dist/backend/src/events.d.ts +54 -0
- package/frontend/dist/backend/src/events.js +5 -0
- package/frontend/dist/backend/src/frontend.d.ts +11 -0
- package/frontend/dist/backend/src/frontend.js +12 -0
- package/frontend/dist/backend/src/image_endpoint.d.ts +39 -0
- package/frontend/dist/backend/src/image_endpoint.js +202 -0
- package/frontend/dist/backend/src/meta.d.ts +64 -0
- package/frontend/dist/backend/src/meta.js +110 -0
- package/frontend/dist/backend/src/payments/paddle.d.ts +326 -0
- package/frontend/dist/backend/src/payments/paddle.js +2256 -0
- package/frontend/dist/backend/src/plugins/mail/mail.d.ts +248 -0
- package/frontend/dist/backend/src/plugins/mail/mail.js +389 -0
- package/{backend/dist/esm/plugins/mail.d.ts → frontend/dist/backend/src/plugins/mail/ui.d.ts} +23 -0
- package/{backend/dist/esm/plugins/mail.js → frontend/dist/backend/src/plugins/mail/ui.js} +3 -6
- package/frontend/dist/backend/src/rate_limit.d.ts +145 -0
- package/frontend/dist/backend/src/rate_limit.js +673 -0
- package/frontend/dist/backend/src/route.d.ts +35 -0
- package/frontend/dist/backend/src/route.js +212 -0
- package/frontend/dist/backend/src/server.d.ts +485 -0
- package/frontend/dist/backend/src/server.js +2670 -0
- package/frontend/dist/backend/src/splash_screen.d.ts +80 -0
- package/frontend/dist/backend/src/splash_screen.js +135 -0
- package/frontend/dist/backend/src/status.d.ts +74 -0
- package/frontend/dist/backend/src/status.js +199 -0
- package/frontend/dist/backend/src/stream.d.ts +376 -0
- package/frontend/dist/backend/src/stream.js +1007 -0
- package/frontend/dist/backend/src/users.d.ts +807 -0
- package/frontend/dist/backend/src/users.js +2118 -0
- package/frontend/dist/backend/src/utils.d.ts +16 -0
- package/frontend/dist/backend/src/utils.js +241 -0
- package/frontend/dist/backend/src/view.d.ts +162 -0
- package/frontend/dist/backend/src/view.js +720 -0
- package/frontend/dist/frontend/src/elements/base.d.ts +4414 -0
- package/frontend/dist/{elements → frontend/src/elements}/base.js +3624 -260
- package/frontend/dist/frontend/src/elements/module.d.ts +95 -0
- package/frontend/dist/{elements → frontend/src/elements}/module.js +53 -52
- package/frontend/dist/frontend/src/elements/types.d.ts +52 -0
- package/frontend/dist/frontend/src/elements/types.js +5 -0
- package/frontend/dist/frontend/src/modules/attachment.d.ts +126 -0
- package/frontend/dist/frontend/src/modules/attachment.js +306 -0
- package/frontend/dist/frontend/src/modules/auth.d.ts +44 -0
- package/frontend/dist/frontend/src/modules/auth.js +80 -0
- package/frontend/dist/{modules → frontend/src/modules}/color.js +2 -2
- package/frontend/dist/frontend/src/modules/compression.d.ts +39 -0
- package/frontend/dist/frontend/src/modules/compression.js +102 -0
- package/frontend/dist/frontend/src/modules/cookies.d.ts +44 -0
- package/frontend/dist/frontend/src/modules/cookies.js +143 -0
- package/frontend/dist/frontend/src/modules/events.d.ts +31 -0
- package/frontend/dist/frontend/src/modules/events.js +74 -0
- package/frontend/dist/frontend/src/modules/google.d.ts +23 -0
- package/frontend/dist/frontend/src/modules/google.js +52 -0
- package/frontend/dist/frontend/src/modules/meta.d.ts +14 -0
- package/frontend/dist/{modules → frontend/src/modules}/meta.js +9 -7
- package/frontend/dist/{modules → frontend/src/modules}/paddle.d.ts +37 -134
- package/frontend/dist/{modules → frontend/src/modules}/paddle.js +620 -568
- package/frontend/dist/frontend/src/modules/request.d.ts +70 -0
- package/frontend/dist/frontend/src/modules/request.js +117 -0
- package/frontend/dist/frontend/src/modules/settings.d.ts +3 -0
- package/frontend/dist/frontend/src/modules/settings.js +5 -0
- package/frontend/dist/frontend/src/modules/statics.d.ts +21 -0
- package/frontend/dist/{modules → frontend/src/modules}/statics.js +15 -18
- package/frontend/dist/frontend/src/modules/support.d.ts +30 -0
- package/frontend/dist/frontend/src/modules/support.js +53 -0
- package/frontend/dist/{modules → frontend/src/modules}/theme.d.ts +67 -0
- package/frontend/dist/{modules → frontend/src/modules}/theme.js +68 -38
- package/frontend/dist/frontend/src/modules/themes.d.ts +12 -0
- package/frontend/dist/frontend/src/modules/themes.js +22 -0
- package/frontend/dist/frontend/src/modules/user.d.ts +164 -0
- package/frontend/dist/frontend/src/modules/user.js +268 -0
- package/frontend/dist/frontend/src/modules/utils.d.ts +176 -0
- package/frontend/dist/frontend/src/modules/utils.js +569 -0
- package/frontend/dist/frontend/src/types/gradient.d.ts +29 -0
- package/frontend/dist/{types → frontend/src/types}/gradient.js +14 -18
- package/frontend/dist/frontend/src/ui/border_button.d.ts +94 -0
- package/frontend/dist/{ui → frontend/src/ui}/border_button.js +7 -13
- package/frontend/dist/frontend/src/ui/button.d.ts +28 -0
- package/frontend/dist/{ui → frontend/src/ui}/button.js +21 -12
- package/frontend/dist/frontend/src/ui/canvas.d.ts +138 -0
- package/frontend/dist/{ui → frontend/src/ui}/canvas.js +88 -55
- package/frontend/dist/frontend/src/ui/checkbox.d.ts +74 -0
- package/frontend/dist/{ui → frontend/src/ui}/checkbox.js +80 -41
- package/frontend/dist/{ui → frontend/src/ui}/code.d.ts +73 -6
- package/frontend/dist/{ui → frontend/src/ui}/code.js +55 -52
- package/frontend/dist/{ui → frontend/src/ui}/context_menu.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/context_menu.js +12 -17
- package/frontend/dist/{ui → frontend/src/ui}/css.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/css.js +3 -3
- package/frontend/dist/{ui → frontend/src/ui}/divider.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/divider.js +3 -3
- package/frontend/dist/{ui → frontend/src/ui}/dropdown.d.ts +57 -2
- package/frontend/dist/{ui → frontend/src/ui}/dropdown.js +87 -94
- package/frontend/dist/{ui → frontend/src/ui}/for_each.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/for_each.js +3 -3
- package/frontend/dist/{ui → frontend/src/ui}/form.d.ts +6 -2
- package/frontend/dist/{ui → frontend/src/ui}/form.js +10 -7
- package/frontend/dist/frontend/src/ui/frame_modes.d.ts +37 -0
- package/frontend/dist/{ui → frontend/src/ui}/frame_modes.js +16 -22
- package/frontend/dist/{ui → frontend/src/ui}/google_map.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/google_map.js +4 -4
- package/frontend/dist/{ui → frontend/src/ui}/gradient.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/gradient.js +3 -3
- package/frontend/dist/{ui → frontend/src/ui}/image.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/image.js +5 -5
- package/frontend/dist/frontend/src/ui/input.d.ts +392 -0
- package/frontend/dist/{ui → frontend/src/ui}/input.js +346 -360
- package/frontend/dist/{ui → frontend/src/ui}/link.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/link.js +3 -3
- package/frontend/dist/{ui → frontend/src/ui}/list.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/list.js +12 -6
- package/frontend/dist/frontend/src/ui/loader_button.d.ts +80 -0
- package/frontend/dist/{ui → frontend/src/ui}/loader_button.js +35 -47
- package/frontend/dist/frontend/src/ui/loaders.d.ts +57 -0
- package/frontend/dist/{ui → frontend/src/ui}/loaders.js +11 -11
- package/frontend/dist/{ui → frontend/src/ui}/popup.d.ts +11 -6
- package/frontend/dist/{ui → frontend/src/ui}/popup.js +32 -18
- package/frontend/dist/frontend/src/ui/pseudo.d.ts +44 -0
- package/frontend/dist/{ui → frontend/src/ui}/pseudo.js +84 -8
- package/frontend/dist/{ui → frontend/src/ui}/scroller.d.ts +14 -2
- package/frontend/dist/{ui → frontend/src/ui}/scroller.js +37 -43
- package/frontend/dist/{ui → frontend/src/ui}/slider.d.ts +5 -1
- package/frontend/dist/{ui → frontend/src/ui}/slider.js +4 -4
- package/frontend/dist/{ui → frontend/src/ui}/spacer.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/spacer.js +3 -3
- package/frontend/dist/{ui → frontend/src/ui}/span.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/span.js +3 -3
- package/frontend/dist/{ui → frontend/src/ui}/stack.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/stack.js +3 -9
- package/frontend/dist/frontend/src/ui/steps.d.ts +131 -0
- package/frontend/dist/{ui → frontend/src/ui}/steps.js +30 -45
- package/frontend/dist/{ui → frontend/src/ui}/style.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/style.js +3 -3
- package/frontend/dist/{ui → frontend/src/ui}/switch.d.ts +5 -1
- package/frontend/dist/{ui → frontend/src/ui}/switch.js +4 -4
- package/frontend/dist/{ui → frontend/src/ui}/table.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/table.js +6 -6
- package/frontend/dist/{ui → frontend/src/ui}/tabs.d.ts +45 -3
- package/frontend/dist/{ui → frontend/src/ui}/tabs.js +65 -40
- package/frontend/dist/{ui → frontend/src/ui}/text.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/text.js +3 -3
- package/frontend/dist/frontend/src/ui/title.d.ts +91 -0
- package/frontend/dist/frontend/src/ui/title.js +272 -0
- package/frontend/dist/{ui → frontend/src/ui}/view.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/view.js +3 -3
- package/frontend/dist/{volt.d.ts → frontend/src/volt.d.ts} +3 -0
- package/frontend/dist/{volt.js → frontend/src/volt.js} +4 -0
- package/frontend/tools/bundle_d_ts.js +71 -0
- package/frontend/tools/convert_to_jsdoc_input.txt +9452 -0
- package/frontend/tools/convert_to_jsdoc_output.txt +7626 -0
- package/frontend/tools/convert_to_jsdoc_tmp.js +345 -0
- package/package.json +11 -12
- package/backend/dist/cjs/database/collection.d.ts +0 -160
- package/backend/dist/cjs/database/collection.js +0 -842
- package/backend/dist/cjs/database/database.d.ts +0 -121
- package/backend/dist/cjs/database/document.d.ts +0 -131
- package/backend/dist/cjs/database/document.js +0 -224
- package/backend/dist/cjs/database.d.ts +0 -502
- package/backend/dist/cjs/database.js +0 -2248
- package/backend/dist/cjs/logger.d.ts +0 -3
- package/backend/dist/cjs/meta.d.ts +0 -50
- package/backend/dist/cjs/mutex.d.ts +0 -24
- package/backend/dist/cjs/payments/paddle.d.ts +0 -160
- package/backend/dist/cjs/plugins/browser.d.ts +0 -36
- package/backend/dist/cjs/plugins/browser.js +0 -198
- package/backend/dist/cjs/plugins/css.d.ts +0 -11
- package/backend/dist/cjs/plugins/css.js +0 -80
- package/backend/dist/cjs/plugins/mail.d.ts +0 -277
- package/backend/dist/cjs/plugins/mail.js +0 -1370
- package/backend/dist/cjs/plugins/ts/compiler.d.ts +0 -139
- package/backend/dist/cjs/plugins/ts/compiler.js +0 -750
- package/backend/dist/cjs/plugins/ts/preprocessing.d.ts +0 -14
- package/backend/dist/cjs/plugins/ts/preprocessing.js +0 -440
- package/backend/dist/cjs/rate_limit.d.ts +0 -63
- package/backend/dist/cjs/rate_limit.js +0 -348
- package/backend/dist/cjs/request.deprc.d.ts +0 -48
- package/backend/dist/cjs/request.deprc.js +0 -572
- package/backend/dist/cjs/response.deprc.d.ts +0 -55
- package/backend/dist/cjs/response.deprc.js +0 -275
- package/backend/dist/cjs/server.d.ts +0 -342
- package/backend/dist/cjs/splash_screen.d.ts +0 -35
- package/backend/dist/cjs/status.d.ts +0 -61
- package/backend/dist/cjs/stream.d.ts +0 -79
- package/backend/dist/cjs/users.d.ts +0 -111
- package/backend/dist/cjs/users.js +0 -1817
- package/backend/dist/cjs/view.js +0 -352
- package/backend/dist/cjs/vinc.dev.d.ts +0 -3
- package/backend/dist/cjs/vinc.dev.js +0 -7
- package/backend/dist/css/adyen.css +0 -92
- package/backend/dist/css/volt.css +0 -70
- package/backend/dist/esm/database/collection.d.ts +0 -160
- package/backend/dist/esm/database/collection.js +0 -1328
- package/backend/dist/esm/database/database.d.ts +0 -121
- package/backend/dist/esm/database/document.d.ts +0 -131
- package/backend/dist/esm/database/document.js +0 -247
- package/backend/dist/esm/database.d.ts +0 -502
- package/backend/dist/esm/database.js +0 -2423
- package/backend/dist/esm/file_watcher.js +0 -329
- package/backend/dist/esm/logger.d.ts +0 -3
- package/backend/dist/esm/logger.js +0 -11
- package/backend/dist/esm/meta.d.ts +0 -50
- package/backend/dist/esm/mutex.d.ts +0 -24
- package/backend/dist/esm/mutex.js +0 -48
- package/backend/dist/esm/payments/paddle.d.ts +0 -160
- package/backend/dist/esm/plugins/browser.d.ts +0 -36
- package/backend/dist/esm/plugins/browser.js +0 -176
- package/backend/dist/esm/plugins/css.d.ts +0 -11
- package/backend/dist/esm/plugins/css.js +0 -90
- package/backend/dist/esm/plugins/ts/compiler.d.ts +0 -139
- package/backend/dist/esm/plugins/ts/compiler.js +0 -1194
- package/backend/dist/esm/plugins/ts/preprocessing.d.ts +0 -14
- package/backend/dist/esm/plugins/ts/preprocessing.js +0 -726
- package/backend/dist/esm/rate_limit.d.ts +0 -63
- package/backend/dist/esm/rate_limit.js +0 -417
- package/backend/dist/esm/request.deprc.d.ts +0 -48
- package/backend/dist/esm/request.deprc.js +0 -572
- package/backend/dist/esm/response.deprc.d.ts +0 -55
- package/backend/dist/esm/response.deprc.js +0 -275
- package/backend/dist/esm/server.d.ts +0 -342
- package/backend/dist/esm/splash_screen.d.ts +0 -35
- package/backend/dist/esm/status.d.ts +0 -61
- package/backend/dist/esm/status.js +0 -197
- package/backend/dist/esm/stream.d.ts +0 -79
- package/backend/dist/esm/users.d.ts +0 -111
- package/backend/dist/esm/users.js +0 -1935
- package/backend/dist/esm/vinc.dev.d.ts +0 -3
- package/backend/dist/esm/vinc.dev.js +0 -7
- package/frontend/dist/elements/base.d.ts +0 -9889
- package/frontend/dist/elements/module.d.ts +0 -30
- package/frontend/dist/modules/array.d.ts +0 -94
- package/frontend/dist/modules/array.js +0 -634
- package/frontend/dist/modules/auth.d.ts +0 -46
- package/frontend/dist/modules/auth.js +0 -139
- package/frontend/dist/modules/colors.d.ts +0 -1
- package/frontend/dist/modules/colors.js +0 -417
- package/frontend/dist/modules/compression.d.ts +0 -6
- package/frontend/dist/modules/compression.js +0 -999
- package/frontend/dist/modules/cookies.d.ts +0 -18
- package/frontend/dist/modules/cookies.js +0 -167
- package/frontend/dist/modules/date.d.ts +0 -142
- package/frontend/dist/modules/date.js +0 -493
- package/frontend/dist/modules/events.d.ts +0 -8
- package/frontend/dist/modules/events.js +0 -91
- package/frontend/dist/modules/google.d.ts +0 -11
- package/frontend/dist/modules/google.js +0 -54
- package/frontend/dist/modules/meta.d.ts +0 -10
- package/frontend/dist/modules/mutex.d.ts +0 -7
- package/frontend/dist/modules/mutex.js +0 -51
- package/frontend/dist/modules/number.d.ts +0 -16
- package/frontend/dist/modules/number.js +0 -23
- package/frontend/dist/modules/object.d.ts +0 -52
- package/frontend/dist/modules/object.js +0 -383
- package/frontend/dist/modules/scheme.d.ts +0 -227
- package/frontend/dist/modules/scheme.js +0 -531
- package/frontend/dist/modules/settings.d.ts +0 -3
- package/frontend/dist/modules/settings.js +0 -4
- package/frontend/dist/modules/statics.d.ts +0 -5
- package/frontend/dist/modules/string.d.ts +0 -124
- package/frontend/dist/modules/string.js +0 -745
- package/frontend/dist/modules/support.d.ts +0 -19
- package/frontend/dist/modules/support.js +0 -103
- package/frontend/dist/modules/themes.d.ts +0 -8
- package/frontend/dist/modules/themes.js +0 -18
- package/frontend/dist/modules/user.d.ts +0 -59
- package/frontend/dist/modules/user.js +0 -280
- package/frontend/dist/modules/utils.d.ts +0 -87
- package/frontend/dist/modules/utils.js +0 -923
- package/frontend/dist/types/gradient.d.ts +0 -12
- package/frontend/dist/ui/border_button.d.ts +0 -152
- package/frontend/dist/ui/button.d.ts +0 -21
- package/frontend/dist/ui/canvas.d.ts +0 -56
- package/frontend/dist/ui/checkbox.d.ts +0 -52
- package/frontend/dist/ui/frame_modes.d.ts +0 -25
- package/frontend/dist/ui/input.d.ts +0 -241
- package/frontend/dist/ui/loader_button.d.ts +0 -93
- package/frontend/dist/ui/loaders.d.ts +0 -57
- package/frontend/dist/ui/pseudo.d.ts +0 -16
- package/frontend/dist/ui/steps.d.ts +0 -59
- package/frontend/dist/ui/title.d.ts +0 -21
- package/frontend/dist/ui/title.js +0 -121
- package/frontend/examples/dashboard/dashboard.ts +0 -776
- /package/backend/dist/cjs/{cli.d.ts → backend/src/cli.d.ts} +0 -0
- /package/backend/dist/cjs/{file_watcher.d.ts → backend/src/database/document.d.ts} +0 -0
- /package/backend/dist/cjs/{file_watcher.js → backend/src/database/document.js} +0 -0
- /package/backend/dist/cjs/{plugins/pdf.d.ts → backend/src/database/filters/strict_filter_test.d.ts} +0 -0
- /package/backend/dist/{esm/file_watcher.d.ts → cjs/backend/src/database/filters/strict_filter_test_v0.d.ts} +0 -0
- /package/backend/dist/{esm/plugins/pdf.d.ts → cjs/backend/src/database/flatten_test.d.ts} +0 -0
- /package/backend/dist/cjs/{frontend.d.ts → backend/src/frontend.d.ts} +0 -0
- /package/backend/dist/cjs/{plugins → backend/src/plugins}/communication.d.ts +0 -0
- /package/backend/dist/cjs/{plugins → backend/src/plugins}/communication.js +0 -0
- /package/backend/dist/cjs/{plugins → backend/src/plugins}/mail/ui.js +0 -0
- /package/backend/dist/cjs/{plugins → backend/src/plugins}/pdf.js +0 -0
- /package/backend/dist/cjs/{plugins → backend/src/plugins}/thread_monitor.d.ts +0 -0
- /package/backend/dist/cjs/{plugins → backend/src/plugins}/thread_monitor.js +0 -0
- /package/backend/dist/cjs/{vinc.d.ts → backend/src/vinc.d.ts} +0 -0
- /package/backend/dist/cjs/{vinc.js → backend/src/vinc.js} +0 -0
- /package/backend/dist/esm/{cli.d.ts → backend/src/cli.d.ts} +0 -0
- /package/backend/dist/esm/{frontend.d.ts → backend/src/frontend.d.ts} +0 -0
- /package/backend/dist/esm/{plugins → backend/src/plugins}/communication.d.ts +0 -0
- /package/backend/dist/esm/{plugins → backend/src/plugins}/communication.js +0 -0
- /package/backend/dist/esm/{plugins → backend/src/plugins}/thread_monitor.d.ts +0 -0
- /package/backend/dist/esm/{plugins → backend/src/plugins}/thread_monitor.js +0 -0
- /package/backend/dist/esm/{vinc.d.ts → backend/src/vinc.d.ts} +0 -0
- /package/backend/dist/esm/{vinc.js → backend/src/vinc.js} +0 -0
- /package/frontend/dist/{elements → frontend/src/elements}/register_element.d.ts +0 -0
- /package/frontend/dist/{elements → frontend/src/elements}/register_element.js +0 -0
- /package/frontend/dist/{modules → frontend/src/modules}/color.d.ts +0 -0
- /package/frontend/dist/{ui → frontend/src/ui}/ui.d.ts +0 -0
- /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,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
|
+
}
|