@webda/core 4.0.0-beta.2 → 4.0.0-beta.3
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/README.md +252 -0
- package/lib/application/application.d.ts +437 -0
- package/lib/application/application.d.ts.map +1 -0
- package/lib/application/application.js +792 -0
- package/lib/application/application.js.map +1 -0
- package/lib/application/hooks.d.ts +34 -0
- package/lib/application/hooks.d.ts.map +1 -0
- package/lib/application/hooks.js +57 -0
- package/lib/application/hooks.js.map +1 -0
- package/lib/application/iapplication.d.ts +43 -0
- package/lib/application/iapplication.d.ts.map +1 -0
- package/lib/application/iapplication.js +2 -0
- package/lib/application/iapplication.js.map +1 -0
- package/lib/application/iconfiguration.d.ts +176 -0
- package/lib/application/iconfiguration.d.ts.map +1 -0
- package/lib/application/iconfiguration.js +8 -0
- package/lib/application/iconfiguration.js.map +1 -0
- package/lib/application/runner.d.ts +8 -0
- package/lib/application/runner.d.ts.map +1 -0
- package/lib/application/runner.js +26 -0
- package/lib/application/runner.js.map +1 -0
- package/lib/{unpackedapplication.d.ts → application/unpackedapplication.d.ts} +43 -23
- package/lib/application/unpackedapplication.d.ts.map +1 -0
- package/lib/application/unpackedapplication.js +492 -0
- package/lib/application/unpackedapplication.js.map +1 -0
- package/lib/bin/cli-phase.d.ts +28 -0
- package/lib/bin/cli-phase.d.ts.map +1 -0
- package/lib/bin/cli-phase.js +44 -0
- package/lib/bin/cli-phase.js.map +1 -0
- package/lib/bin/cli.d.ts +161 -0
- package/lib/bin/cli.d.ts.map +1 -0
- package/lib/bin/cli.js +828 -0
- package/lib/bin/cli.js.map +1 -0
- package/lib/bin/launcher.d.ts +3 -0
- package/lib/bin/launcher.d.ts.map +1 -0
- package/lib/bin/launcher.js +50 -0
- package/lib/bin/launcher.js.map +1 -0
- package/lib/cache/cache.d.ts +33 -0
- package/lib/cache/cache.d.ts.map +1 -0
- package/lib/cache/cache.js +8 -0
- package/lib/cache/cache.js.map +1 -0
- package/lib/{services/configuration.d.ts → configurations/configuration.service.d.ts} +58 -58
- package/lib/configurations/configuration.service.d.ts.map +1 -0
- package/lib/configurations/configuration.service.js +248 -0
- package/lib/configurations/configuration.service.js.map +1 -0
- package/lib/configurations/fileconfiguration.service.d.ts +30 -0
- package/lib/configurations/fileconfiguration.service.d.ts.map +1 -0
- package/lib/configurations/fileconfiguration.service.js +65 -0
- package/lib/configurations/fileconfiguration.service.js.map +1 -0
- package/lib/configurations/kubernetesconfiguration.service.d.ts +43 -0
- package/lib/configurations/kubernetesconfiguration.service.d.ts.map +1 -0
- package/lib/configurations/kubernetesconfiguration.service.js +83 -0
- package/lib/configurations/kubernetesconfiguration.service.js.map +1 -0
- package/lib/contexts/execution.d.ts +33 -0
- package/lib/contexts/execution.d.ts.map +1 -0
- package/lib/contexts/execution.js +73 -0
- package/lib/contexts/execution.js.map +1 -0
- package/lib/contexts/globalcontext.d.ts +29 -0
- package/lib/contexts/globalcontext.d.ts.map +1 -0
- package/lib/contexts/globalcontext.js +38 -0
- package/lib/contexts/globalcontext.js.map +1 -0
- package/lib/{utils → contexts}/httpcontext.d.ts +44 -19
- package/lib/contexts/httpcontext.d.ts.map +1 -0
- package/lib/{utils → contexts}/httpcontext.js +95 -27
- package/lib/contexts/httpcontext.js.map +1 -0
- package/lib/contexts/icontext.d.ts +236 -0
- package/lib/contexts/icontext.d.ts.map +1 -0
- package/lib/contexts/icontext.js +230 -0
- package/lib/contexts/icontext.js.map +1 -0
- package/lib/contexts/operationcontext.d.ts +179 -0
- package/lib/contexts/operationcontext.d.ts.map +1 -0
- package/lib/contexts/operationcontext.js +358 -0
- package/lib/contexts/operationcontext.js.map +1 -0
- package/lib/contexts/simplecontext.d.ts +31 -0
- package/lib/contexts/simplecontext.d.ts.map +1 -0
- package/lib/contexts/simplecontext.js +45 -0
- package/lib/contexts/simplecontext.js.map +1 -0
- package/lib/contexts/webcontext.d.ts +218 -0
- package/lib/contexts/webcontext.d.ts.map +1 -0
- package/lib/contexts/webcontext.js +389 -0
- package/lib/contexts/webcontext.js.map +1 -0
- package/lib/core/authorizer.d.ts +23 -0
- package/lib/core/authorizer.d.ts.map +1 -0
- package/lib/core/authorizer.js +17 -0
- package/lib/core/authorizer.js.map +1 -0
- package/lib/core/core.d.ts +225 -0
- package/lib/core/core.d.ts.map +1 -0
- package/lib/core/core.js +576 -0
- package/lib/core/core.js.map +1 -0
- package/lib/core/hooks.d.ts +72 -0
- package/lib/core/hooks.d.ts.map +1 -0
- package/lib/core/hooks.js +73 -0
- package/lib/core/hooks.js.map +1 -0
- package/lib/core/icore.d.ts +249 -0
- package/lib/core/icore.d.ts.map +1 -0
- package/lib/core/icore.js +15 -0
- package/lib/core/icore.js.map +1 -0
- package/lib/core/instancestorage.d.ts +61 -0
- package/lib/core/instancestorage.d.ts.map +1 -0
- package/lib/core/instancestorage.js +75 -0
- package/lib/core/instancestorage.js.map +1 -0
- package/lib/core/operations.d.ts +181 -0
- package/lib/core/operations.d.ts.map +1 -0
- package/lib/core/operations.js +559 -0
- package/lib/core/operations.js.map +1 -0
- package/lib/errors/errors.d.ts +126 -0
- package/lib/errors/errors.d.ts.map +1 -0
- package/lib/errors/errors.js +165 -0
- package/lib/errors/errors.js.map +1 -0
- package/lib/events/asynceventemitter.d.ts +159 -0
- package/lib/events/asynceventemitter.d.ts.map +1 -0
- package/lib/events/asynceventemitter.js +152 -0
- package/lib/events/asynceventemitter.js.map +1 -0
- package/lib/events/events.d.ts +112 -0
- package/lib/events/events.d.ts.map +1 -0
- package/lib/events/events.js +45 -0
- package/lib/events/events.js.map +1 -0
- package/lib/index.d.ts +82 -53
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +81 -62
- package/lib/index.js.map +1 -1
- package/lib/loggers/console.service.d.ts +24 -0
- package/lib/loggers/console.service.d.ts.map +1 -0
- package/lib/loggers/console.service.js +30 -0
- package/lib/loggers/console.service.js.map +1 -0
- package/lib/loggers/file.service.d.ts +25 -0
- package/lib/loggers/file.service.d.ts.map +1 -0
- package/lib/loggers/file.service.js +33 -0
- package/lib/loggers/file.service.js.map +1 -0
- package/lib/loggers/hooks.d.ts +20 -0
- package/lib/loggers/hooks.d.ts.map +1 -0
- package/lib/loggers/hooks.js +40 -0
- package/lib/loggers/hooks.js.map +1 -0
- package/lib/loggers/ilogger.d.ts +76 -0
- package/lib/loggers/ilogger.d.ts.map +1 -0
- package/lib/loggers/ilogger.js +108 -0
- package/lib/loggers/ilogger.js.map +1 -0
- package/lib/loggers/logger.d.ts +13 -0
- package/lib/loggers/logger.d.ts.map +1 -0
- package/lib/loggers/logger.js +18 -0
- package/lib/loggers/logger.js.map +1 -0
- package/lib/loggers/memory.service.d.ts +18 -0
- package/lib/loggers/memory.service.d.ts.map +1 -0
- package/lib/loggers/memory.service.js +21 -0
- package/lib/loggers/memory.service.js.map +1 -0
- package/lib/loggers/params.d.ts +47 -0
- package/lib/loggers/params.d.ts.map +1 -0
- package/lib/loggers/params.js +56 -0
- package/lib/loggers/params.js.map +1 -0
- package/lib/metrics/metrics.d.ts +25 -0
- package/lib/metrics/metrics.d.ts.map +1 -0
- package/lib/metrics/metrics.js +51 -0
- package/lib/metrics/metrics.js.map +1 -0
- package/lib/models/aclmodel.d.ts +20 -76
- package/lib/models/aclmodel.d.ts.map +1 -1
- package/lib/models/aclmodel.js +27 -203
- package/lib/models/aclmodel.js.map +1 -1
- package/lib/models/coremodel.model.d.ts +5 -0
- package/lib/models/coremodel.model.d.ts.map +1 -0
- package/lib/models/coremodel.model.js +5 -0
- package/lib/models/coremodel.model.js.map +1 -0
- package/lib/models/decorator.d.ts +63 -0
- package/lib/models/decorator.d.ts.map +1 -0
- package/lib/models/decorator.js +63 -0
- package/lib/models/decorator.js.map +1 -0
- package/lib/models/deployment.d.ts +1 -1
- package/lib/models/deployment.d.ts.map +1 -1
- package/lib/models/ident.model.d.ts +89 -0
- package/lib/models/ident.model.d.ts.map +1 -0
- package/lib/models/ident.model.js +115 -0
- package/lib/models/ident.model.js.map +1 -0
- package/lib/models/ownermodel.model.d.ts +68 -0
- package/lib/models/ownermodel.model.d.ts.map +1 -0
- package/lib/models/ownermodel.model.js +112 -0
- package/lib/models/ownermodel.model.js.map +1 -0
- package/lib/models/registry.model.d.ts +76 -0
- package/lib/models/registry.model.d.ts.map +1 -0
- package/lib/models/registry.model.js +104 -0
- package/lib/models/registry.model.js.map +1 -0
- package/lib/models/rolemodel.model.d.ts +28 -0
- package/lib/models/rolemodel.model.d.ts.map +1 -0
- package/lib/models/{rolemodel.js → rolemodel.model.js} +23 -5
- package/lib/models/rolemodel.model.js.map +1 -0
- package/lib/models/simpleuser.model.d.ts +78 -0
- package/lib/models/simpleuser.model.d.ts.map +1 -0
- package/lib/models/simpleuser.model.js +123 -0
- package/lib/models/simpleuser.model.js.map +1 -0
- package/lib/models/types.d.ts +113 -0
- package/lib/models/types.d.ts.map +1 -0
- package/lib/models/types.js +2 -0
- package/lib/models/types.js.map +1 -0
- package/lib/models/user.model.d.ts +103 -0
- package/lib/models/user.model.d.ts.map +1 -0
- package/lib/models/user.model.js +125 -0
- package/lib/models/user.model.js.map +1 -0
- package/lib/queues/{memoryqueue.d.ts → memoryqueue.service.d.ts} +26 -13
- package/lib/queues/memoryqueue.service.d.ts.map +1 -0
- package/lib/queues/{memoryqueue.js → memoryqueue.service.js} +55 -31
- package/lib/queues/memoryqueue.service.js.map +1 -0
- package/lib/queues/pubsubservice.d.ts +8 -6
- package/lib/queues/pubsubservice.d.ts.map +1 -1
- package/lib/queues/pubsubservice.js +5 -4
- package/lib/queues/pubsubservice.js.map +1 -1
- package/lib/queues/queueservice.d.ts +9 -11
- package/lib/queues/queueservice.d.ts.map +1 -1
- package/lib/queues/queueservice.js +41 -13
- package/lib/queues/queueservice.js.map +1 -1
- package/lib/rest/hooks.d.ts +8 -0
- package/lib/rest/hooks.d.ts.map +1 -0
- package/lib/rest/hooks.js +10 -0
- package/lib/rest/hooks.js.map +1 -0
- package/lib/rest/irest.d.ts +212 -0
- package/lib/rest/irest.d.ts.map +1 -0
- package/lib/rest/irest.js +39 -0
- package/lib/rest/irest.js.map +1 -0
- package/lib/rest/originfilter.d.ts +38 -0
- package/lib/rest/originfilter.d.ts.map +1 -0
- package/lib/rest/originfilter.js +61 -0
- package/lib/rest/originfilter.js.map +1 -0
- package/lib/rest/restoperationstransport.service.d.ts +193 -0
- package/lib/rest/restoperationstransport.service.d.ts.map +1 -0
- package/lib/rest/restoperationstransport.service.js +780 -0
- package/lib/rest/restoperationstransport.service.js.map +1 -0
- package/lib/rest/router.service.d.ts +244 -0
- package/lib/rest/router.service.d.ts.map +1 -0
- package/lib/rest/router.service.js +843 -0
- package/lib/rest/router.service.js.map +1 -0
- package/lib/schemas/hooks.d.ts +48 -0
- package/lib/schemas/hooks.d.ts.map +1 -0
- package/lib/schemas/hooks.js +152 -0
- package/lib/schemas/hooks.js.map +1 -0
- package/lib/services/audit.model.d.ts +208 -0
- package/lib/services/audit.model.d.ts.map +1 -0
- package/lib/services/audit.model.js +431 -0
- package/lib/services/audit.model.js.map +1 -0
- package/lib/services/{authentication.d.ts → authentication.service.d.ts} +140 -59
- package/lib/services/authentication.service.d.ts.map +1 -0
- package/lib/services/authentication.service.js +932 -0
- package/lib/services/authentication.service.js.map +1 -0
- package/lib/services/binary.service.d.ts +808 -0
- package/lib/services/binary.service.d.ts.map +1 -0
- package/lib/services/binary.service.js +1365 -0
- package/lib/services/binary.service.js.map +1 -0
- package/lib/services/cloudbinary.d.ts +17 -12
- package/lib/services/cloudbinary.d.ts.map +1 -1
- package/lib/services/cloudbinary.js +23 -17
- package/lib/services/cloudbinary.js.map +1 -1
- package/lib/services/command.d.ts +118 -0
- package/lib/services/command.d.ts.map +1 -0
- package/lib/services/command.js +97 -0
- package/lib/services/command.js.map +1 -0
- package/lib/services/cron.service.d.ts +142 -0
- package/lib/services/cron.service.d.ts.map +1 -0
- package/lib/services/cron.service.js +291 -0
- package/lib/services/cron.service.js.map +1 -0
- package/lib/services/{cryptoservice.d.ts → cryptoservice.service.d.ts} +75 -141
- package/lib/services/cryptoservice.service.d.ts.map +1 -0
- package/lib/services/cryptoservice.service.js +527 -0
- package/lib/services/cryptoservice.service.js.map +1 -0
- package/lib/services/debugmailer.service.d.ts +49 -0
- package/lib/services/debugmailer.service.d.ts.map +1 -0
- package/lib/services/{debugmailer.js → debugmailer.service.js} +25 -10
- package/lib/services/debugmailer.service.js.map +1 -0
- package/lib/services/domainservice.service.d.ts +203 -0
- package/lib/services/domainservice.service.d.ts.map +1 -0
- package/lib/services/domainservice.service.js +600 -0
- package/lib/services/domainservice.service.js.map +1 -0
- package/lib/services/httpserver.service.d.ts +248 -0
- package/lib/services/httpserver.service.d.ts.map +1 -0
- package/lib/services/httpserver.service.js +673 -0
- package/lib/services/httpserver.service.js.map +1 -0
- package/lib/services/iauthentication.d.ts +9 -0
- package/lib/services/iauthentication.d.ts.map +1 -0
- package/lib/services/iauthentication.js +2 -0
- package/lib/services/iauthentication.js.map +1 -0
- package/lib/services/icryptoservice.d.ts +127 -0
- package/lib/services/icryptoservice.d.ts.map +1 -0
- package/lib/services/icryptoservice.js +68 -0
- package/lib/services/icryptoservice.js.map +1 -0
- package/lib/services/imailer.d.ts +17 -0
- package/lib/services/imailer.d.ts.map +1 -0
- package/lib/services/imailer.js +2 -0
- package/lib/services/imailer.js.map +1 -0
- package/lib/services/iservice.d.ts +104 -0
- package/lib/services/iservice.d.ts.map +1 -0
- package/lib/services/iservice.js +63 -0
- package/lib/services/iservice.js.map +1 -0
- package/lib/services/mailer.service.d.ts +220 -0
- package/lib/services/mailer.service.d.ts.map +1 -0
- package/lib/services/mailer.service.js +251 -0
- package/lib/services/mailer.service.js.map +1 -0
- package/lib/services/{notificationservice.d.ts → notificationservice.service.d.ts} +10 -11
- package/lib/services/notificationservice.service.d.ts.map +1 -0
- package/lib/services/{notificationservice.js → notificationservice.service.js} +24 -12
- package/lib/services/notificationservice.service.js.map +1 -0
- package/lib/services/oauth.d.ts +52 -28
- package/lib/services/oauth.d.ts.map +1 -1
- package/lib/services/oauth.js +365 -254
- package/lib/services/oauth.js.map +1 -1
- package/lib/services/operationstransport.d.ts +65 -0
- package/lib/services/operationstransport.d.ts.map +1 -0
- package/lib/services/operationstransport.js +103 -0
- package/lib/services/operationstransport.js.map +1 -0
- package/lib/services/{prometheus.d.ts → prometheus.service.d.ts} +13 -12
- package/lib/services/prometheus.service.d.ts.map +1 -0
- package/lib/services/prometheus.service.js +203 -0
- package/lib/services/prometheus.service.js.map +1 -0
- package/lib/services/{resource.d.ts → resource.service.d.ts} +34 -15
- package/lib/services/resource.service.d.ts.map +1 -0
- package/lib/services/resource.service.js +301 -0
- package/lib/services/resource.service.js.map +1 -0
- package/lib/services/service.d.ts +87 -188
- package/lib/services/service.d.ts.map +1 -1
- package/lib/services/service.js +407 -422
- package/lib/services/service.js.map +1 -1
- package/lib/services/servicecommands.d.ts +99 -0
- package/lib/services/servicecommands.d.ts.map +1 -0
- package/lib/services/servicecommands.js +165 -0
- package/lib/services/servicecommands.js.map +1 -0
- package/lib/services/serviceparameters.d.ts +33 -0
- package/lib/services/serviceparameters.d.ts.map +1 -0
- package/lib/services/serviceparameters.js +79 -0
- package/lib/services/serviceparameters.js.map +1 -0
- package/lib/{utils → session}/cookie.d.ts +32 -19
- package/lib/session/cookie.d.ts.map +1 -0
- package/lib/{utils → session}/cookie.js +76 -23
- package/lib/session/cookie.js.map +1 -0
- package/lib/session/manager.model.d.ts +71 -0
- package/lib/session/manager.model.d.ts.map +1 -0
- package/lib/session/manager.model.js +155 -0
- package/lib/session/manager.model.js.map +1 -0
- package/lib/session/session.d.ts +57 -0
- package/lib/session/session.d.ts.map +1 -0
- package/lib/session/session.js +126 -0
- package/lib/session/session.js.map +1 -0
- package/lib/stores/istore.d.ts +99 -0
- package/lib/stores/istore.d.ts.map +1 -0
- package/lib/stores/istore.js +26 -0
- package/lib/stores/istore.js.map +1 -0
- package/lib/stores/memory.service.d.ts +114 -0
- package/lib/stores/memory.service.d.ts.map +1 -0
- package/lib/stores/memory.service.js +343 -0
- package/lib/stores/memory.service.js.map +1 -0
- package/lib/stores/store.d.ts +126 -626
- package/lib/stores/store.d.ts.map +1 -1
- package/lib/stores/store.js +257 -1117
- package/lib/stores/store.js.map +1 -1
- package/lib/templates/templates.d.ts +39 -0
- package/lib/templates/templates.d.ts.map +1 -0
- package/lib/templates/templates.js +92 -0
- package/lib/templates/templates.js.map +1 -0
- package/lib/test/application.d.ts +174 -0
- package/lib/test/application.d.ts.map +1 -0
- package/lib/test/application.js +288 -0
- package/lib/test/application.js.map +1 -0
- package/lib/test/asyncstorage.d.ts +16 -0
- package/lib/test/asyncstorage.d.ts.map +1 -0
- package/lib/test/asyncstorage.js +32 -0
- package/lib/test/asyncstorage.js.map +1 -0
- package/lib/test/core.d.ts +63 -0
- package/lib/test/core.d.ts.map +1 -0
- package/lib/test/core.js +190 -0
- package/lib/test/core.js.map +1 -0
- package/lib/test/index.d.ts +7 -0
- package/lib/test/index.d.ts.map +1 -0
- package/lib/test/index.js +8 -0
- package/lib/test/index.js.map +1 -0
- package/lib/test/internal.d.ts +34 -0
- package/lib/test/internal.d.ts.map +1 -0
- package/lib/test/internal.js +156 -0
- package/lib/test/internal.js.map +1 -0
- package/lib/test/objects.d.ts +318 -0
- package/lib/test/objects.d.ts.map +1 -0
- package/lib/test/objects.js +443 -0
- package/lib/test/objects.js.map +1 -0
- package/lib/utils/abstractdeployer.d.ts +4 -2
- package/lib/utils/abstractdeployer.d.ts.map +1 -1
- package/lib/utils/abstractdeployer.js +3 -0
- package/lib/utils/abstractdeployer.js.map +1 -1
- package/package.json +85 -60
- package/test/cachedapp/webda.config.json +1 -5
- package/test/config-cached.json +1 -5
- package/test/config.json +0 -9
- package/test/my-cnf.json +9 -0
- package/webda.module.json +3463 -2482
- package/lib/application.d.ts +0 -888
- package/lib/application.d.ts.map +0 -1
- package/lib/application.js +0 -768
- package/lib/application.js.map +0 -1
- package/lib/application.spec.d.ts +0 -2
- package/lib/application.spec.d.ts.map +0 -1
- package/lib/application.spec.js +0 -248
- package/lib/application.spec.js.map +0 -1
- package/lib/core.d.ts +0 -743
- package/lib/core.d.ts.map +0 -1
- package/lib/core.js +0 -1334
- package/lib/core.js.map +0 -1
- package/lib/core.spec.d.ts +0 -2
- package/lib/core.spec.d.ts.map +0 -1
- package/lib/core.spec.js +0 -790
- package/lib/core.spec.js.map +0 -1
- package/lib/errors.d.ts +0 -64
- package/lib/errors.d.ts.map +0 -1
- package/lib/errors.js +0 -97
- package/lib/errors.js.map +0 -1
- package/lib/errors.spec.d.ts +0 -2
- package/lib/errors.spec.d.ts.map +0 -1
- package/lib/errors.spec.js +0 -33
- package/lib/errors.spec.js.map +0 -1
- package/lib/models/aclmodel.spec.d.ts +0 -2
- package/lib/models/aclmodel.spec.d.ts.map +0 -1
- package/lib/models/aclmodel.spec.js +0 -187
- package/lib/models/aclmodel.spec.js.map +0 -1
- package/lib/models/coremodel.d.ts +0 -896
- package/lib/models/coremodel.d.ts.map +0 -1
- package/lib/models/coremodel.js +0 -1214
- package/lib/models/coremodel.js.map +0 -1
- package/lib/models/coremodel.spec.d.ts +0 -2
- package/lib/models/coremodel.spec.d.ts.map +0 -1
- package/lib/models/coremodel.spec.js +0 -464
- package/lib/models/coremodel.spec.js.map +0 -1
- package/lib/models/ident.d.ts +0 -68
- package/lib/models/ident.d.ts.map +0 -1
- package/lib/models/ident.js +0 -26
- package/lib/models/ident.js.map +0 -1
- package/lib/models/ident.spec.d.ts +0 -2
- package/lib/models/ident.spec.d.ts.map +0 -1
- package/lib/models/ident.spec.js +0 -24
- package/lib/models/ident.spec.js.map +0 -1
- package/lib/models/ownermodel.d.ts +0 -51
- package/lib/models/ownermodel.d.ts.map +0 -1
- package/lib/models/ownermodel.js +0 -65
- package/lib/models/ownermodel.js.map +0 -1
- package/lib/models/ownermodel.spec.d.ts +0 -2
- package/lib/models/ownermodel.spec.d.ts.map +0 -1
- package/lib/models/ownermodel.spec.js +0 -215
- package/lib/models/ownermodel.spec.js.map +0 -1
- package/lib/models/relations.d.ts +0 -182
- package/lib/models/relations.d.ts.map +0 -1
- package/lib/models/relations.js +0 -157
- package/lib/models/relations.js.map +0 -1
- package/lib/models/relations.spec.d.ts +0 -14
- package/lib/models/relations.spec.d.ts.map +0 -1
- package/lib/models/relations.spec.js +0 -217
- package/lib/models/relations.spec.js.map +0 -1
- package/lib/models/rolemodel.d.ts +0 -11
- package/lib/models/rolemodel.d.ts.map +0 -1
- package/lib/models/rolemodel.js.map +0 -1
- package/lib/models/rolemodel.spec.d.ts +0 -2
- package/lib/models/rolemodel.spec.d.ts.map +0 -1
- package/lib/models/rolemodel.spec.js +0 -90
- package/lib/models/rolemodel.spec.js.map +0 -1
- package/lib/models/simpleuser.d.ts +0 -47
- package/lib/models/simpleuser.d.ts.map +0 -1
- package/lib/models/simpleuser.js +0 -84
- package/lib/models/simpleuser.js.map +0 -1
- package/lib/models/test.d.ts +0 -11
- package/lib/models/test.d.ts.map +0 -1
- package/lib/models/test.js +0 -7
- package/lib/models/test.js.map +0 -1
- package/lib/models/user.d.ts +0 -67
- package/lib/models/user.d.ts.map +0 -1
- package/lib/models/user.js +0 -86
- package/lib/models/user.js.map +0 -1
- package/lib/models/user.spec.d.ts +0 -2
- package/lib/models/user.spec.d.ts.map +0 -1
- package/lib/models/user.spec.js +0 -89
- package/lib/models/user.spec.js.map +0 -1
- package/lib/queues/filequeue.d.ts +0 -59
- package/lib/queues/filequeue.d.ts.map +0 -1
- package/lib/queues/filequeue.js +0 -131
- package/lib/queues/filequeue.js.map +0 -1
- package/lib/queues/filequeue.spec.d.ts +0 -2
- package/lib/queues/filequeue.spec.d.ts.map +0 -1
- package/lib/queues/filequeue.spec.js +0 -84
- package/lib/queues/filequeue.spec.js.map +0 -1
- package/lib/queues/memoryqueue.d.ts.map +0 -1
- package/lib/queues/memoryqueue.js.map +0 -1
- package/lib/queues/memoryqueue.spec.d.ts +0 -2
- package/lib/queues/memoryqueue.spec.d.ts.map +0 -1
- package/lib/queues/memoryqueue.spec.js +0 -203
- package/lib/queues/memoryqueue.spec.js.map +0 -1
- package/lib/queues/queue.spec.d.ts +0 -6
- package/lib/queues/queue.spec.d.ts.map +0 -1
- package/lib/queues/queue.spec.js +0 -55
- package/lib/queues/queue.spec.js.map +0 -1
- package/lib/rest/restdomainservice.d.ts +0 -63
- package/lib/rest/restdomainservice.d.ts.map +0 -1
- package/lib/rest/restdomainservice.js +0 -687
- package/lib/rest/restdomainservice.js.map +0 -1
- package/lib/rest/restdomainservice.spec.d.ts +0 -2
- package/lib/rest/restdomainservice.spec.d.ts.map +0 -1
- package/lib/rest/restdomainservice.spec.js +0 -124
- package/lib/rest/restdomainservice.spec.js.map +0 -1
- package/lib/rest/router.d.ts +0 -174
- package/lib/rest/router.d.ts.map +0 -1
- package/lib/rest/router.js +0 -429
- package/lib/rest/router.js.map +0 -1
- package/lib/rest/router.spec.d.ts +0 -2
- package/lib/rest/router.spec.d.ts.map +0 -1
- package/lib/rest/router.spec.js +0 -255
- package/lib/rest/router.spec.js.map +0 -1
- package/lib/services/asyncevents.d.ts +0 -152
- package/lib/services/asyncevents.d.ts.map +0 -1
- package/lib/services/asyncevents.js +0 -217
- package/lib/services/asyncevents.js.map +0 -1
- package/lib/services/asyncevents.spec.d.ts +0 -2
- package/lib/services/asyncevents.spec.d.ts.map +0 -1
- package/lib/services/asyncevents.spec.js +0 -118
- package/lib/services/asyncevents.spec.js.map +0 -1
- package/lib/services/authentication.d.ts.map +0 -1
- package/lib/services/authentication.js +0 -773
- package/lib/services/authentication.js.map +0 -1
- package/lib/services/authentication.spec.d.ts +0 -2
- package/lib/services/authentication.spec.d.ts.map +0 -1
- package/lib/services/authentication.spec.js +0 -458
- package/lib/services/authentication.spec.js.map +0 -1
- package/lib/services/binary.d.ts +0 -477
- package/lib/services/binary.d.ts.map +0 -1
- package/lib/services/binary.js +0 -617
- package/lib/services/binary.js.map +0 -1
- package/lib/services/binary.spec.d.ts +0 -41
- package/lib/services/binary.spec.d.ts.map +0 -1
- package/lib/services/binary.spec.js +0 -151
- package/lib/services/binary.spec.js.map +0 -1
- package/lib/services/cloudbinary.spec.d.ts +0 -6
- package/lib/services/cloudbinary.spec.d.ts.map +0 -1
- package/lib/services/cloudbinary.spec.js +0 -66
- package/lib/services/cloudbinary.spec.js.map +0 -1
- package/lib/services/configuration.d.ts.map +0 -1
- package/lib/services/configuration.js +0 -193
- package/lib/services/configuration.js.map +0 -1
- package/lib/services/configuration.spec.d.ts +0 -2
- package/lib/services/configuration.spec.d.ts.map +0 -1
- package/lib/services/configuration.spec.js +0 -130
- package/lib/services/configuration.spec.js.map +0 -1
- package/lib/services/cron.d.ts +0 -74
- package/lib/services/cron.d.ts.map +0 -1
- package/lib/services/cron.js +0 -141
- package/lib/services/cron.js.map +0 -1
- package/lib/services/cron.spec.d.ts +0 -2
- package/lib/services/cron.spec.d.ts.map +0 -1
- package/lib/services/cron.spec.js +0 -76
- package/lib/services/cron.spec.js.map +0 -1
- package/lib/services/cryptoservice.d.ts.map +0 -1
- package/lib/services/cryptoservice.js +0 -433
- package/lib/services/cryptoservice.js.map +0 -1
- package/lib/services/cryptoservice.spec.d.ts +0 -2
- package/lib/services/cryptoservice.spec.d.ts.map +0 -1
- package/lib/services/cryptoservice.spec.js +0 -177
- package/lib/services/cryptoservice.spec.js.map +0 -1
- package/lib/services/debugmailer.d.ts +0 -36
- package/lib/services/debugmailer.d.ts.map +0 -1
- package/lib/services/debugmailer.js.map +0 -1
- package/lib/services/debugmailer.spec.d.ts +0 -2
- package/lib/services/debugmailer.spec.d.ts.map +0 -1
- package/lib/services/debugmailer.spec.js +0 -32
- package/lib/services/debugmailer.spec.js.map +0 -1
- package/lib/services/domainservice.d.ts +0 -272
- package/lib/services/domainservice.d.ts.map +0 -1
- package/lib/services/domainservice.js +0 -651
- package/lib/services/domainservice.js.map +0 -1
- package/lib/services/domainservice.spec.d.ts +0 -2
- package/lib/services/domainservice.spec.d.ts.map +0 -1
- package/lib/services/domainservice.spec.js +0 -592
- package/lib/services/domainservice.spec.js.map +0 -1
- package/lib/services/filebinary.d.ts +0 -136
- package/lib/services/filebinary.d.ts.map +0 -1
- package/lib/services/filebinary.js +0 -373
- package/lib/services/filebinary.js.map +0 -1
- package/lib/services/filebinary.spec.d.ts +0 -25
- package/lib/services/filebinary.spec.d.ts.map +0 -1
- package/lib/services/filebinary.spec.js +0 -428
- package/lib/services/filebinary.spec.js.map +0 -1
- package/lib/services/fileconfiguration.d.ts +0 -23
- package/lib/services/fileconfiguration.d.ts.map +0 -1
- package/lib/services/fileconfiguration.js +0 -48
- package/lib/services/fileconfiguration.js.map +0 -1
- package/lib/services/fileconfiguration.spec.d.ts +0 -2
- package/lib/services/fileconfiguration.spec.d.ts.map +0 -1
- package/lib/services/fileconfiguration.spec.js +0 -215
- package/lib/services/fileconfiguration.spec.js.map +0 -1
- package/lib/services/invitationservice.d.ts +0 -223
- package/lib/services/invitationservice.d.ts.map +0 -1
- package/lib/services/invitationservice.js +0 -529
- package/lib/services/invitationservice.js.map +0 -1
- package/lib/services/invitationservice.spec.d.ts +0 -2
- package/lib/services/invitationservice.spec.d.ts.map +0 -1
- package/lib/services/invitationservice.spec.js +0 -567
- package/lib/services/invitationservice.spec.js.map +0 -1
- package/lib/services/kubernetesconfiguration.d.ts +0 -27
- package/lib/services/kubernetesconfiguration.d.ts.map +0 -1
- package/lib/services/kubernetesconfiguration.js +0 -52
- package/lib/services/kubernetesconfiguration.js.map +0 -1
- package/lib/services/kubernetesconfiguration.spec.d.ts +0 -2
- package/lib/services/kubernetesconfiguration.spec.d.ts.map +0 -1
- package/lib/services/kubernetesconfiguration.spec.js +0 -206
- package/lib/services/kubernetesconfiguration.spec.js.map +0 -1
- package/lib/services/mailer.d.ts +0 -166
- package/lib/services/mailer.d.ts.map +0 -1
- package/lib/services/mailer.js +0 -176
- package/lib/services/mailer.js.map +0 -1
- package/lib/services/mailer.spec.d.ts +0 -2
- package/lib/services/mailer.spec.d.ts.map +0 -1
- package/lib/services/mailer.spec.js +0 -158
- package/lib/services/mailer.spec.js.map +0 -1
- package/lib/services/notificationservice.d.ts.map +0 -1
- package/lib/services/notificationservice.js.map +0 -1
- package/lib/services/notificationservice.spec.d.ts +0 -2
- package/lib/services/notificationservice.spec.d.ts.map +0 -1
- package/lib/services/notificationservice.spec.js +0 -83
- package/lib/services/notificationservice.spec.js.map +0 -1
- package/lib/services/oauth.spec.d.ts +0 -2
- package/lib/services/oauth.spec.d.ts.map +0 -1
- package/lib/services/oauth.spec.js +0 -208
- package/lib/services/oauth.spec.js.map +0 -1
- package/lib/services/prometheus.d.ts.map +0 -1
- package/lib/services/prometheus.js +0 -160
- package/lib/services/prometheus.js.map +0 -1
- package/lib/services/prometheus.spec.d.ts +0 -2
- package/lib/services/prometheus.spec.d.ts.map +0 -1
- package/lib/services/prometheus.spec.js +0 -76
- package/lib/services/prometheus.spec.js.map +0 -1
- package/lib/services/resource.d.ts.map +0 -1
- package/lib/services/resource.js +0 -170
- package/lib/services/resource.js.map +0 -1
- package/lib/services/resource.spec.d.ts +0 -2
- package/lib/services/resource.spec.d.ts.map +0 -1
- package/lib/services/resource.spec.js +0 -140
- package/lib/services/resource.spec.js.map +0 -1
- package/lib/services/service.spec.d.ts +0 -2
- package/lib/services/service.spec.d.ts.map +0 -1
- package/lib/services/service.spec.js +0 -286
- package/lib/services/service.spec.js.map +0 -1
- package/lib/stores/aggregator.d.ts +0 -48
- package/lib/stores/aggregator.d.ts.map +0 -1
- package/lib/stores/aggregator.js +0 -80
- package/lib/stores/aggregator.js.map +0 -1
- package/lib/stores/file.d.ts +0 -108
- package/lib/stores/file.d.ts.map +0 -1
- package/lib/stores/file.js +0 -188
- package/lib/stores/file.js.map +0 -1
- package/lib/stores/file.spec.d.ts +0 -13
- package/lib/stores/file.spec.d.ts.map +0 -1
- package/lib/stores/file.spec.js +0 -138
- package/lib/stores/file.spec.js.map +0 -1
- package/lib/stores/mapper.d.ts +0 -150
- package/lib/stores/mapper.d.ts.map +0 -1
- package/lib/stores/mapper.js +0 -293
- package/lib/stores/mapper.js.map +0 -1
- package/lib/stores/mapper.spec.d.ts +0 -2
- package/lib/stores/mapper.spec.d.ts.map +0 -1
- package/lib/stores/mapper.spec.js +0 -167
- package/lib/stores/mapper.spec.js.map +0 -1
- package/lib/stores/memory.d.ts +0 -152
- package/lib/stores/memory.d.ts.map +0 -1
- package/lib/stores/memory.js +0 -371
- package/lib/stores/memory.js.map +0 -1
- package/lib/stores/memory.spec.d.ts +0 -14
- package/lib/stores/memory.spec.d.ts.map +0 -1
- package/lib/stores/memory.spec.js +0 -263
- package/lib/stores/memory.spec.js.map +0 -1
- package/lib/stores/modelmapper.d.ts +0 -62
- package/lib/stores/modelmapper.d.ts.map +0 -1
- package/lib/stores/modelmapper.js +0 -197
- package/lib/stores/modelmapper.js.map +0 -1
- package/lib/stores/store.spec.d.ts +0 -57
- package/lib/stores/store.spec.d.ts.map +0 -1
- package/lib/stores/store.spec.js +0 -737
- package/lib/stores/store.spec.js.map +0 -1
- package/lib/test.d.ts +0 -265
- package/lib/test.d.ts.map +0 -1
- package/lib/test.js +0 -622
- package/lib/test.js.map +0 -1
- package/lib/unpackedapplication.d.ts.map +0 -1
- package/lib/unpackedapplication.js +0 -350
- package/lib/unpackedapplication.js.map +0 -1
- package/lib/utils/abstractdeployer.spec.d.ts +0 -2
- package/lib/utils/abstractdeployer.spec.d.ts.map +0 -1
- package/lib/utils/abstractdeployer.spec.js +0 -21
- package/lib/utils/abstractdeployer.spec.js.map +0 -1
- package/lib/utils/case.d.ts +0 -8
- package/lib/utils/case.d.ts.map +0 -1
- package/lib/utils/case.js +0 -43
- package/lib/utils/case.js.map +0 -1
- package/lib/utils/case.spec.d.ts +0 -2
- package/lib/utils/case.spec.d.ts.map +0 -1
- package/lib/utils/case.spec.js +0 -50
- package/lib/utils/case.spec.js.map +0 -1
- package/lib/utils/context.d.ts +0 -482
- package/lib/utils/context.d.ts.map +0 -1
- package/lib/utils/context.js +0 -739
- package/lib/utils/context.js.map +0 -1
- package/lib/utils/context.spec.d.ts +0 -10
- package/lib/utils/context.spec.d.ts.map +0 -1
- package/lib/utils/context.spec.js +0 -383
- package/lib/utils/context.spec.js.map +0 -1
- package/lib/utils/cookie.d.ts.map +0 -1
- package/lib/utils/cookie.js.map +0 -1
- package/lib/utils/cookie.spec.d.ts +0 -2
- package/lib/utils/cookie.spec.d.ts.map +0 -1
- package/lib/utils/cookie.spec.js +0 -88
- package/lib/utils/cookie.spec.js.map +0 -1
- package/lib/utils/esm.d.ts +0 -14
- package/lib/utils/esm.d.ts.map +0 -1
- package/lib/utils/esm.js +0 -19
- package/lib/utils/esm.js.map +0 -1
- package/lib/utils/httpcontext.d.ts.map +0 -1
- package/lib/utils/httpcontext.js.map +0 -1
- package/lib/utils/httpcontext.spec.d.ts +0 -5
- package/lib/utils/httpcontext.spec.d.ts.map +0 -1
- package/lib/utils/httpcontext.spec.js +0 -77
- package/lib/utils/httpcontext.spec.js.map +0 -1
- package/lib/utils/logger.d.ts +0 -92
- package/lib/utils/logger.d.ts.map +0 -1
- package/lib/utils/logger.js +0 -121
- package/lib/utils/logger.js.map +0 -1
- package/lib/utils/logger.spec.d.ts +0 -2
- package/lib/utils/logger.spec.d.ts.map +0 -1
- package/lib/utils/logger.spec.js +0 -48
- package/lib/utils/logger.spec.js.map +0 -1
- package/lib/utils/serializers.d.ts +0 -162
- package/lib/utils/serializers.d.ts.map +0 -1
- package/lib/utils/serializers.js +0 -420
- package/lib/utils/serializers.js.map +0 -1
- package/lib/utils/serializers.spec.d.ts +0 -2
- package/lib/utils/serializers.spec.d.ts.map +0 -1
- package/lib/utils/serializers.spec.js +0 -311
- package/lib/utils/serializers.spec.js.map +0 -1
- package/lib/utils/session.d.ts +0 -123
- package/lib/utils/session.d.ts.map +0 -1
- package/lib/utils/session.js +0 -156
- package/lib/utils/session.js.map +0 -1
- package/lib/utils/session.spec.d.ts +0 -2
- package/lib/utils/session.spec.d.ts.map +0 -1
- package/lib/utils/session.spec.js +0 -81
- package/lib/utils/session.spec.js.map +0 -1
- package/lib/utils/throttler.d.ts +0 -99
- package/lib/utils/throttler.d.ts.map +0 -1
- package/lib/utils/throttler.js +0 -160
- package/lib/utils/throttler.js.map +0 -1
- package/lib/utils/throttler.spec.d.ts +0 -2
- package/lib/utils/throttler.spec.d.ts.map +0 -1
- package/lib/utils/throttler.spec.js +0 -53
- package/lib/utils/throttler.spec.js.map +0 -1
- package/lib/utils/waiter.d.ts +0 -94
- package/lib/utils/waiter.d.ts.map +0 -1
- package/lib/utils/waiter.js +0 -148
- package/lib/utils/waiter.js.map +0 -1
- package/lib/utils/waiter.spec.d.ts +0 -2
- package/lib/utils/waiter.spec.d.ts.map +0 -1
- package/lib/utils/waiter.spec.js +0 -98
- package/lib/utils/waiter.spec.js.map +0 -1
- package/test/jsonutils/mdocs.yaml +0 -56
- package/test/jsonutils/test.json +0 -3
- package/test/jsonutils/test.yml +0 -5
|
@@ -0,0 +1,673 @@
|
|
|
1
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
2
|
+
var useValue = arguments.length > 2;
|
|
3
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
4
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
5
|
+
}
|
|
6
|
+
return useValue ? value : void 0;
|
|
7
|
+
};
|
|
8
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
9
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
10
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
11
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
12
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
13
|
+
var _, done = false;
|
|
14
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
15
|
+
var context = {};
|
|
16
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
17
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
18
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
19
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
20
|
+
if (kind === "accessor") {
|
|
21
|
+
if (result === void 0) continue;
|
|
22
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
23
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
24
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
25
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
26
|
+
}
|
|
27
|
+
else if (_ = accept(result)) {
|
|
28
|
+
if (kind === "field") initializers.unshift(_);
|
|
29
|
+
else descriptor[key] = _;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
33
|
+
done = true;
|
|
34
|
+
};
|
|
35
|
+
import { Service } from "./service.js";
|
|
36
|
+
import { Command } from "./command.js";
|
|
37
|
+
import { WebContext } from "../contexts/webcontext.js";
|
|
38
|
+
import { OperationContext } from "../contexts/operationcontext.js";
|
|
39
|
+
import { ServiceParameters } from "../services/serviceparameters.js";
|
|
40
|
+
import { emitCoreEvent } from "../events/events.js";
|
|
41
|
+
import { createServer } from "node:http";
|
|
42
|
+
import { createServer as createHttpsServer } from "node:https";
|
|
43
|
+
import { createSecureServer, createServer as createHttp2Server } from "node:http2";
|
|
44
|
+
import { HttpContext } from "../contexts/httpcontext.js";
|
|
45
|
+
import { createChecker } from "is-in-subnet";
|
|
46
|
+
import { useLog } from "@webda/workout";
|
|
47
|
+
import { CancelablePromise } from "@webda/utils";
|
|
48
|
+
import { useRouter } from "../rest/hooks.js";
|
|
49
|
+
import { runWithContext } from "../contexts/execution.js";
|
|
50
|
+
import { readFileSync, existsSync, mkdirSync } from "node:fs";
|
|
51
|
+
import { execFileSync } from "node:child_process";
|
|
52
|
+
import { AsyncResource } from "node:async_hooks";
|
|
53
|
+
import { join } from "node:path";
|
|
54
|
+
import { serialize as cookieSerialize } from "cookie";
|
|
55
|
+
/**
|
|
56
|
+
* How long a connection to a TLS port may stay silent before it is dropped,
|
|
57
|
+
* while it is not yet known whether it speaks TLS or plain HTTP
|
|
58
|
+
*/
|
|
59
|
+
const TLS_GATE_TIMEOUT = 30000;
|
|
60
|
+
/** Parameters for the HTTP server including request limits, timeouts, TLS, and proxy settings */
|
|
61
|
+
export class HttpServerParameters extends ServiceParameters {
|
|
62
|
+
/**
|
|
63
|
+
* Will not try to parse request bigger than this
|
|
64
|
+
*
|
|
65
|
+
* This parameter can be overriden by a direct call to
|
|
66
|
+
* getHttpContext().getRawBody(xxx)
|
|
67
|
+
*
|
|
68
|
+
* @default 10Mb
|
|
69
|
+
*/
|
|
70
|
+
requestLimit;
|
|
71
|
+
/**
|
|
72
|
+
* Will not take more than this to read a request (unit: milliseconds)
|
|
73
|
+
*
|
|
74
|
+
* This parameter can be overriden by a direct call to
|
|
75
|
+
* getHttpContext().getRawBody(undefined, xxx)
|
|
76
|
+
*
|
|
77
|
+
* @default 60000
|
|
78
|
+
*/
|
|
79
|
+
requestTimeout;
|
|
80
|
+
/**
|
|
81
|
+
* Trust this reverse proxies
|
|
82
|
+
*/
|
|
83
|
+
trustedProxies;
|
|
84
|
+
/**
|
|
85
|
+
* Allowed origin for referer that match
|
|
86
|
+
* any of this regexp
|
|
87
|
+
*
|
|
88
|
+
* {@link OriginFilter}
|
|
89
|
+
*/
|
|
90
|
+
csrfOrigins;
|
|
91
|
+
/**
|
|
92
|
+
* Default headers to send to the client
|
|
93
|
+
*
|
|
94
|
+
* Having a Cache-Control: private will prevent caching for API
|
|
95
|
+
* If you overwrite this parameter, you will need to add it back
|
|
96
|
+
*/
|
|
97
|
+
defaultHeaders;
|
|
98
|
+
/**
|
|
99
|
+
* Port to listen on
|
|
100
|
+
*
|
|
101
|
+
* @default 18080
|
|
102
|
+
*/
|
|
103
|
+
port;
|
|
104
|
+
/**
|
|
105
|
+
* Run this instance as an HTTP/2 cleartext (h2c) server rather than
|
|
106
|
+
* HTTP/1.1. The resulting port accepts only prior-knowledge HTTP/2
|
|
107
|
+
* clients (e.g. `grpcurl -plaintext`). To serve both REST (HTTP/1.1)
|
|
108
|
+
* and gRPC without TLS, configure a second HttpServer service with
|
|
109
|
+
* `h2c: true` on a separate port.
|
|
110
|
+
* @default false
|
|
111
|
+
*/
|
|
112
|
+
h2c;
|
|
113
|
+
/**
|
|
114
|
+
* TLS key file path — enables HTTPS or HTTP/2
|
|
115
|
+
*/
|
|
116
|
+
key;
|
|
117
|
+
/**
|
|
118
|
+
* TLS certificate file path
|
|
119
|
+
*/
|
|
120
|
+
cert;
|
|
121
|
+
/**
|
|
122
|
+
* Enable HTTP/2 (default: true when key+cert provided)
|
|
123
|
+
* Set to false for HTTPS without HTTP/2
|
|
124
|
+
*/
|
|
125
|
+
http2;
|
|
126
|
+
/**
|
|
127
|
+
* Auto-generate a self-signed certificate on startup when `key`/`cert`
|
|
128
|
+
* aren't configured. Dev convenience: gives the main port HTTP/2 via
|
|
129
|
+
* ALPN (plus HTTP/1.1 fallback) with zero setup. Keys are written under
|
|
130
|
+
* `.webda/dev-tls/`.
|
|
131
|
+
*
|
|
132
|
+
* @default false
|
|
133
|
+
*/
|
|
134
|
+
autoTls;
|
|
135
|
+
/**
|
|
136
|
+
* Load parameters with defaults for request limits, timeouts, and proxy configuration
|
|
137
|
+
* @param params - the service parameters
|
|
138
|
+
* @returns this for chaining
|
|
139
|
+
*/
|
|
140
|
+
load(params) {
|
|
141
|
+
super.load(params);
|
|
142
|
+
this.requestLimit ??= 10 * 1024 * 1024;
|
|
143
|
+
this.requestTimeout ??= 60000;
|
|
144
|
+
this.trustedProxies ??= [];
|
|
145
|
+
if (typeof params.trustedProxies === "string") {
|
|
146
|
+
this.trustedProxies = params.trustedProxies.split(",").map(n => n.trim());
|
|
147
|
+
}
|
|
148
|
+
return this;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/** HTTP/1.1-only headers that must be filtered for HTTP/2 */
|
|
152
|
+
const HTTP1_ONLY_HEADERS = ["keep-alive", "connection", "transfer-encoding"];
|
|
153
|
+
/**
|
|
154
|
+
* HTTP server service supporting HTTP/1.1, HTTPS, and HTTP/2
|
|
155
|
+
*
|
|
156
|
+
* @WebdaModda
|
|
157
|
+
*/
|
|
158
|
+
let HttpServer = (() => {
|
|
159
|
+
let _classSuper = Service;
|
|
160
|
+
let _instanceExtraInitializers = [];
|
|
161
|
+
let _serve_decorators;
|
|
162
|
+
return class HttpServer extends _classSuper {
|
|
163
|
+
static {
|
|
164
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
165
|
+
_serve_decorators = [Command("serve", { description: "Start the HTTP server", requires: ["router", "rest-domain"] })];
|
|
166
|
+
__esDecorate(this, null, _serve_decorators, { kind: "method", name: "serve", static: false, private: false, access: { has: obj => "serve" in obj, get: obj => obj.serve }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
167
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
168
|
+
}
|
|
169
|
+
/** Registered context providers */
|
|
170
|
+
contextProviders = (__runInitializers(this, _instanceExtraInitializers), [
|
|
171
|
+
{
|
|
172
|
+
getContext: (info) => {
|
|
173
|
+
if (info.http) {
|
|
174
|
+
return new WebContext(info.http, info.stream);
|
|
175
|
+
}
|
|
176
|
+
return new OperationContext(info.stream);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
]);
|
|
180
|
+
server;
|
|
181
|
+
/**
|
|
182
|
+
* Resolvers of the pending serve() promises, settled when the service stops
|
|
183
|
+
*/
|
|
184
|
+
serving = new Set();
|
|
185
|
+
/** In TLS mode, the server answering plain HTTP with a redirect */
|
|
186
|
+
redirectServer;
|
|
187
|
+
subnetChecker;
|
|
188
|
+
/** Whether this server uses HTTP/2 */
|
|
189
|
+
isHttp2 = false;
|
|
190
|
+
/**
|
|
191
|
+
* Extra request handlers — matched first, before the default web request
|
|
192
|
+
* pipeline. Used to plug in alternate wire protocols (gRPC) that share the
|
|
193
|
+
* same port. Each interceptor returns true when it handles the request.
|
|
194
|
+
*/
|
|
195
|
+
interceptors = [];
|
|
196
|
+
/**
|
|
197
|
+
* Register an additional low-level request handler. Interceptors are
|
|
198
|
+
* checked in registration order; the first one that returns true short-
|
|
199
|
+
* circuits the default pipeline. Typical use: gRPC dispatcher that matches
|
|
200
|
+
* `content-type: application/grpc`.
|
|
201
|
+
* @param handler - returns true when it has taken ownership of the request
|
|
202
|
+
*/
|
|
203
|
+
registerRequestInterceptor(handler) {
|
|
204
|
+
this.interceptors.push(handler);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Flush response headers from WebContext to the underlying response stream.
|
|
208
|
+
* Handles both HTTP/1.1 (writeHead) and HTTP/2 (setHeader + statusCode) patterns.
|
|
209
|
+
*
|
|
210
|
+
* @param ctx - the web context with stored headers
|
|
211
|
+
*/
|
|
212
|
+
flushHeaders(ctx) {
|
|
213
|
+
const res = ctx._stream;
|
|
214
|
+
if (res.headersSent)
|
|
215
|
+
return;
|
|
216
|
+
const headers = ctx.getResponseHeaders();
|
|
217
|
+
const cookies = ctx.getResponseCookies?.() || {};
|
|
218
|
+
if (this.isHttp2) {
|
|
219
|
+
// HTTP/2: use setHeader individually, filter HTTP/1.1-only headers
|
|
220
|
+
for (const [name, value] of Object.entries(headers)) {
|
|
221
|
+
if (HTTP1_ONLY_HEADERS.includes(name.toLowerCase()))
|
|
222
|
+
continue;
|
|
223
|
+
res.setHeader(name, value);
|
|
224
|
+
}
|
|
225
|
+
for (const i in cookies) {
|
|
226
|
+
res.setHeader("Set-Cookie", cookieSerialize(cookies[i].name, cookies[i].value, cookies[i].options));
|
|
227
|
+
}
|
|
228
|
+
res.statusCode = ctx.getResponseCode();
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
// HTTP/1.1: use writeHead
|
|
232
|
+
for (const i in cookies) {
|
|
233
|
+
headers["Set-Cookie"] = cookieSerialize(cookies[i].name, cookies[i].value, cookies[i].options);
|
|
234
|
+
}
|
|
235
|
+
res.writeHead(ctx.getResponseCode(), headers);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Flush the response body and close the response.
|
|
240
|
+
*
|
|
241
|
+
* @param ctx - the web context with buffered output
|
|
242
|
+
*/
|
|
243
|
+
flush(ctx) {
|
|
244
|
+
const res = ctx._stream;
|
|
245
|
+
if (res.writableEnded)
|
|
246
|
+
return;
|
|
247
|
+
this.flushHeaders(ctx);
|
|
248
|
+
res.end(ctx.getOutput() || "");
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Handle an incoming HTTP request: create context, route, flush response.
|
|
252
|
+
*
|
|
253
|
+
* @param req - the incoming message
|
|
254
|
+
* @param res - the server response
|
|
255
|
+
*/
|
|
256
|
+
async handleRequest(req, res) {
|
|
257
|
+
// Alternate protocols (e.g. gRPC) get first crack at the request — they
|
|
258
|
+
// return true to claim it, otherwise we fall through to the normal web
|
|
259
|
+
// pipeline.
|
|
260
|
+
for (const interceptor of this.interceptors) {
|
|
261
|
+
try {
|
|
262
|
+
if (interceptor(req, res))
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
useLog("ERROR", "Request interceptor failed", err);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
try {
|
|
270
|
+
const ctx = await this.getContextFromRequest(req, res);
|
|
271
|
+
if (!ctx) {
|
|
272
|
+
res.writeHead(500);
|
|
273
|
+
res.end();
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
const webCtx = ctx;
|
|
277
|
+
await runWithContext(webCtx, async () => {
|
|
278
|
+
try {
|
|
279
|
+
emitCoreEvent("Webda.Request", { context: webCtx });
|
|
280
|
+
}
|
|
281
|
+
catch { /* listener error */ }
|
|
282
|
+
try {
|
|
283
|
+
await useRouter().execute(webCtx);
|
|
284
|
+
}
|
|
285
|
+
catch (err) {
|
|
286
|
+
webCtx.statusCode = err?.getResponseCode?.() || 500;
|
|
287
|
+
const method = webCtx.getHttpContext().getMethod();
|
|
288
|
+
const url = webCtx.getHttpContext().getUrl();
|
|
289
|
+
// Log 5xx at ERROR and 4xx at DEBUG so validation failures are still
|
|
290
|
+
// visible during development but don't drown the normal log stream.
|
|
291
|
+
if (webCtx.statusCode >= 500) {
|
|
292
|
+
useLog("ERROR", `${method} ${url} → ${webCtx.statusCode}`, err);
|
|
293
|
+
}
|
|
294
|
+
else if (webCtx.statusCode >= 400) {
|
|
295
|
+
useLog("WARN", `${method} ${url} → ${webCtx.statusCode}: ${err?.message ?? err}`);
|
|
296
|
+
}
|
|
297
|
+
// Stash the error on the context so listeners (e.g. debug capture)
|
|
298
|
+
// can include it in the request log entry.
|
|
299
|
+
webCtx.setExtension("error", err);
|
|
300
|
+
// Write a body so the client actually sees the failure. For 4xx we
|
|
301
|
+
// include the message + structured details (e.g. AJV errors[] from
|
|
302
|
+
// input-schema validation). For 5xx we hide internal details.
|
|
303
|
+
if (!webCtx.hasFlushedHeaders?.() && (webCtx.getOutput?.() ?? "") === "") {
|
|
304
|
+
if (webCtx.statusCode >= 500) {
|
|
305
|
+
webCtx.write({
|
|
306
|
+
error: {
|
|
307
|
+
code: err?.code ?? "INTERNAL_SERVER_ERROR",
|
|
308
|
+
message: "Internal server error"
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
const body = {
|
|
314
|
+
code: err?.code ?? "BAD_REQUEST",
|
|
315
|
+
message: err?.message ?? String(err)
|
|
316
|
+
};
|
|
317
|
+
if (err?.details !== undefined)
|
|
318
|
+
body.details = err.details;
|
|
319
|
+
webCtx.write({ error: body });
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
// Always emit the Result event — both success and error paths converge
|
|
324
|
+
// here so that subscribers see every request reach a terminal state.
|
|
325
|
+
try {
|
|
326
|
+
emitCoreEvent("Webda.Result", { context: webCtx });
|
|
327
|
+
}
|
|
328
|
+
catch { /* listener error */ }
|
|
329
|
+
});
|
|
330
|
+
// Flush response — skip if pipeline/streaming already handled it
|
|
331
|
+
if (!res.writableEnded && !res.headersSent) {
|
|
332
|
+
this.flush(webCtx);
|
|
333
|
+
}
|
|
334
|
+
else if (!res.writableEnded) {
|
|
335
|
+
// Headers sent (by flushHeaders in pipeline path) but body not ended
|
|
336
|
+
res.end(webCtx.getOutput() || "");
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
catch (err) {
|
|
340
|
+
useLog("ERROR", "Unhandled error in HTTP request handler", err);
|
|
341
|
+
if (!res.writableEnded) {
|
|
342
|
+
if (!res.headersSent)
|
|
343
|
+
res.writeHead(500);
|
|
344
|
+
res.end();
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Serve HTTP until the service stops
|
|
350
|
+
*
|
|
351
|
+
* The returned promise stays pending while the server runs: it resolves when the
|
|
352
|
+
* service stops, and cancelling it closes the server.
|
|
353
|
+
* Use {@link start} to only wait for the server to listen.
|
|
354
|
+
*
|
|
355
|
+
* @param bind - the bind address
|
|
356
|
+
* @param port - the port number
|
|
357
|
+
* @returns a promise settled once the server is stopped
|
|
358
|
+
*/
|
|
359
|
+
serve(bind, port) {
|
|
360
|
+
return new CancelablePromise((resolve, reject) => {
|
|
361
|
+
this.start(bind, port).then(() => {
|
|
362
|
+
this.serving.add(resolve);
|
|
363
|
+
}, reject);
|
|
364
|
+
}, async () => {
|
|
365
|
+
await this.closeServer();
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Start the HTTP server
|
|
370
|
+
* @param bind - the bind address
|
|
371
|
+
* @param port - the port number
|
|
372
|
+
* @returns a promise resolved once the server listens
|
|
373
|
+
*/
|
|
374
|
+
async start(bind, port) {
|
|
375
|
+
this.parameters.with(params => {
|
|
376
|
+
// `??`, not `||`: port 0 asks the OS for a free port
|
|
377
|
+
const listenPort = port ?? params.port ?? 18080;
|
|
378
|
+
useLog("INFO", `Starting HTTP server on ${bind ?? "0.0.0.0"}:${listenPort}`);
|
|
379
|
+
// Node.js pipeline() emits ERR_STREAM_PREMATURE_CLOSE as uncaughtException
|
|
380
|
+
// when piping to ServerResponse. Suppress this specific error.
|
|
381
|
+
if (!process.listeners("uncaughtExceptionMonitor").find((l) => l._webda)) {
|
|
382
|
+
const monitor = function _webdaMonitor() { };
|
|
383
|
+
monitor._webda = true;
|
|
384
|
+
process.on("uncaughtExceptionMonitor", monitor);
|
|
385
|
+
}
|
|
386
|
+
if (!process.listeners("uncaughtException").find((l) => l._webda)) {
|
|
387
|
+
const handler = function _webdaHandler(err) {
|
|
388
|
+
if (err?.code === "ERR_STREAM_PREMATURE_CLOSE")
|
|
389
|
+
return;
|
|
390
|
+
useLog("ERROR", "Uncaught exception", err);
|
|
391
|
+
process.exit(1);
|
|
392
|
+
};
|
|
393
|
+
handler._webda = true;
|
|
394
|
+
process.on("uncaughtException", handler);
|
|
395
|
+
}
|
|
396
|
+
if (this.server) {
|
|
397
|
+
this.server.close();
|
|
398
|
+
}
|
|
399
|
+
// Auto-generate a dev self-signed cert when autoTls is on and nothing is
|
|
400
|
+
// already configured — gives the port HTTP/2 via ALPN for free.
|
|
401
|
+
if (params.autoTls && !(params.key && params.cert)) {
|
|
402
|
+
const { key, cert } = this.ensureDevTlsCert();
|
|
403
|
+
params.key = key;
|
|
404
|
+
params.cert = cert;
|
|
405
|
+
}
|
|
406
|
+
// Create server based on configuration. The same HttpServer class runs
|
|
407
|
+
// in three modes — one instance per mode, one port per instance. Mix
|
|
408
|
+
// modes by configuring multiple HttpServer services (e.g. a TLS one
|
|
409
|
+
// for REST/GraphQL and a second h2c one for gRPC without TLS).
|
|
410
|
+
if (params.key && params.cert) {
|
|
411
|
+
// TLS — HTTP/2 via ALPN with HTTP/1.1 fallback (or plain HTTPS).
|
|
412
|
+
const tlsOptions = {
|
|
413
|
+
key: readFileSync(params.key),
|
|
414
|
+
cert: readFileSync(params.cert),
|
|
415
|
+
allowHTTP1: true
|
|
416
|
+
};
|
|
417
|
+
let tlsServer;
|
|
418
|
+
if (params.http2 !== false) {
|
|
419
|
+
this.isHttp2 = true;
|
|
420
|
+
tlsServer = createSecureServer(tlsOptions, (req, res) => {
|
|
421
|
+
if (req.headers[":authority"]) {
|
|
422
|
+
const [host] = req.headers[":authority"].split(":");
|
|
423
|
+
req.headers.host = host;
|
|
424
|
+
}
|
|
425
|
+
this.handleRequest(req, res);
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
tlsServer = createHttpsServer(tlsOptions, (req, res) => this.handleRequest(req, res));
|
|
430
|
+
}
|
|
431
|
+
this.redirectPlainHttp(tlsServer);
|
|
432
|
+
this.server = tlsServer;
|
|
433
|
+
}
|
|
434
|
+
else if (params.h2c) {
|
|
435
|
+
// Prior-knowledge HTTP/2 cleartext — for gRPC clients without TLS.
|
|
436
|
+
this.isHttp2 = true;
|
|
437
|
+
this.server = createHttp2Server((req, res) => this.handleRequest(req, res));
|
|
438
|
+
}
|
|
439
|
+
else {
|
|
440
|
+
// Plain HTTP/1.1
|
|
441
|
+
this.server = createServer((req, res) => this.handleRequest(req, res));
|
|
442
|
+
}
|
|
443
|
+
// Ensure routes are mapped before accepting requests
|
|
444
|
+
useRouter().remapRoutes();
|
|
445
|
+
this.server.listen(listenPort, bind);
|
|
446
|
+
if (params.key && params.cert) {
|
|
447
|
+
useLog("INFO", `Serving https://${bind ?? "localhost"}:${listenPort} (http:// redirects to https)`);
|
|
448
|
+
}
|
|
449
|
+
// Emit on both channels: core event for decoupled listeners (gRPC
|
|
450
|
+
// interceptor, graphql ws handler) and the service-level event for
|
|
451
|
+
// anyone still listening via `this.on(...)`.
|
|
452
|
+
this.emit("Webda.Init.Http", this.server);
|
|
453
|
+
emitCoreEvent("Webda.Init.Http", this.server);
|
|
454
|
+
});
|
|
455
|
+
// Set up trusted proxy checker
|
|
456
|
+
this.parameters.with(params => {
|
|
457
|
+
this.subnetChecker = createChecker(params.trustedProxies.map(n => (n.indexOf("/") < 0 ? `${n.trim()}/32` : n.trim())));
|
|
458
|
+
});
|
|
459
|
+
const server = this.server;
|
|
460
|
+
if (!server.listening) {
|
|
461
|
+
await new Promise((resolve, reject) => {
|
|
462
|
+
const onError = (err) => {
|
|
463
|
+
server.off("listening", onListening);
|
|
464
|
+
reject(err);
|
|
465
|
+
};
|
|
466
|
+
const onListening = () => {
|
|
467
|
+
server.off("error", onError);
|
|
468
|
+
resolve();
|
|
469
|
+
};
|
|
470
|
+
server.once("listening", onListening);
|
|
471
|
+
server.once("error", onError);
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Close the HTTP server, dropping its open connections
|
|
477
|
+
* @returns a promise resolved once the server is closed
|
|
478
|
+
*/
|
|
479
|
+
async closeServer() {
|
|
480
|
+
// Its connections never reach `server`: close them too (clients keep them alive)
|
|
481
|
+
this.redirectServer?.closeAllConnections();
|
|
482
|
+
const server = this.server;
|
|
483
|
+
if (!server?.listening) {
|
|
484
|
+
return;
|
|
485
|
+
}
|
|
486
|
+
await new Promise(resolve => {
|
|
487
|
+
server.close(() => resolve());
|
|
488
|
+
// Keep-alive connections would hold close() until they time out
|
|
489
|
+
server.closeAllConnections?.();
|
|
490
|
+
// HTTP/2 sessions have no closeAllConnections: do not wait for them forever
|
|
491
|
+
setTimeout(resolve, 1000).unref();
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Address the server is listening on, or null before it listens
|
|
496
|
+
* @returns the bound address
|
|
497
|
+
*/
|
|
498
|
+
address() {
|
|
499
|
+
return this.server?.address() ?? null;
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Accept plain HTTP on a TLS port. TLS handshakes go to the TLS server as
|
|
503
|
+
* before; anything else gets a 308 redirect to the same URL over https,
|
|
504
|
+
* where a browser typing `localhost:<port>` would otherwise get an empty
|
|
505
|
+
* response.
|
|
506
|
+
*
|
|
507
|
+
* Node's TLS server wraps each accepted socket in its single `connection`
|
|
508
|
+
* listener; that listener is wrapped so the server keeps owning the port
|
|
509
|
+
* (`listening`, `address()` and the `Webda.Init.Http` hooks are unchanged).
|
|
510
|
+
* @param tlsServer - the TLS server handling the application
|
|
511
|
+
*/
|
|
512
|
+
redirectPlainHttp(tlsServer) {
|
|
513
|
+
const listeners = tlsServer.listeners("connection");
|
|
514
|
+
if (listeners.length !== 1) {
|
|
515
|
+
useLog("WARN", "Cannot redirect plain HTTP to https on this Node.js version");
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
const handshake = listeners[0];
|
|
519
|
+
const redirect = (this.redirectServer = createServer((req, res) => {
|
|
520
|
+
res.writeHead(308, { Location: `https://${req.headers.host ?? "localhost"}${req.url ?? "/"}` });
|
|
521
|
+
res.end();
|
|
522
|
+
}));
|
|
523
|
+
tlsServer.removeListener("connection", handshake);
|
|
524
|
+
tlsServer.on("connection", (socket) => {
|
|
525
|
+
// Until the first bytes arrive, nobody else owns the socket
|
|
526
|
+
const drop = () => socket.destroy();
|
|
527
|
+
socket.on("error", drop);
|
|
528
|
+
socket.setTimeout(TLS_GATE_TIMEOUT, drop);
|
|
529
|
+
// Hand the socket over in this callback's async context, as the TLS
|
|
530
|
+
// server would have: request handling needs Webda's instance storage
|
|
531
|
+
socket.once("data", AsyncResource.bind((chunk) => {
|
|
532
|
+
socket.off("error", drop);
|
|
533
|
+
socket.setTimeout(0);
|
|
534
|
+
socket.pause();
|
|
535
|
+
socket.unshift(chunk);
|
|
536
|
+
// 0x16 opens a TLS handshake record
|
|
537
|
+
if (chunk[0] === 0x16) {
|
|
538
|
+
handshake.call(tlsServer, socket);
|
|
539
|
+
}
|
|
540
|
+
else {
|
|
541
|
+
redirect.emit("connection", socket);
|
|
542
|
+
}
|
|
543
|
+
process.nextTick(() => socket.resume());
|
|
544
|
+
}));
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
/** @override */
|
|
548
|
+
async stop() {
|
|
549
|
+
await super.stop();
|
|
550
|
+
await this.closeServer();
|
|
551
|
+
// Settle the pending serve() promises
|
|
552
|
+
for (const resolve of this.serving) {
|
|
553
|
+
resolve();
|
|
554
|
+
}
|
|
555
|
+
this.serving.clear();
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* Ensure a self-signed TLS key+cert exists under `.webda/dev-tls/` and
|
|
559
|
+
* return their paths. Used by {@link HttpServerParameters.autoTls} to bring
|
|
560
|
+
* up HTTPS/HTTP2 on the dev server with zero setup. Dev-only — real
|
|
561
|
+
* deploys should supply a proper cert via `key`/`cert` params.
|
|
562
|
+
*
|
|
563
|
+
* @returns absolute paths to the generated key and cert files
|
|
564
|
+
*/
|
|
565
|
+
ensureDevTlsCert() {
|
|
566
|
+
const dir = join(process.cwd(), ".webda", "dev-tls");
|
|
567
|
+
const key = join(dir, "key.pem");
|
|
568
|
+
const cert = join(dir, "cert.pem");
|
|
569
|
+
if (existsSync(key) && existsSync(cert)) {
|
|
570
|
+
return { key, cert };
|
|
571
|
+
}
|
|
572
|
+
mkdirSync(dir, { recursive: true });
|
|
573
|
+
// SAN on localhost/127.0.0.1 so browsers and grpcurl skip hostname
|
|
574
|
+
// complaints when -k / -insecure is used.
|
|
575
|
+
try {
|
|
576
|
+
execFileSync("openssl", [
|
|
577
|
+
"req", "-x509", "-newkey", "rsa:2048",
|
|
578
|
+
"-keyout", key,
|
|
579
|
+
"-out", cert,
|
|
580
|
+
"-days", "365",
|
|
581
|
+
"-nodes",
|
|
582
|
+
"-subj", "/CN=localhost",
|
|
583
|
+
"-addext", "subjectAltName=DNS:localhost,IP:127.0.0.1,IP:0.0.0.0"
|
|
584
|
+
], { stdio: "pipe" });
|
|
585
|
+
}
|
|
586
|
+
catch (err) {
|
|
587
|
+
throw new Error(`autoTls: failed to generate self-signed cert via openssl — ${err}`);
|
|
588
|
+
}
|
|
589
|
+
this.log("INFO", `generated self-signed dev cert at ${dir}`);
|
|
590
|
+
return { key, cert };
|
|
591
|
+
}
|
|
592
|
+
/**
|
|
593
|
+
* Create a WebContext from an HTTP request
|
|
594
|
+
* @param req - the incoming message
|
|
595
|
+
* @param res - the server response
|
|
596
|
+
* @returns the context, or undefined if request should be rejected
|
|
597
|
+
*/
|
|
598
|
+
async getContextFromRequest(req, res) {
|
|
599
|
+
let vhost = req.headers.host?.match(/:/g)
|
|
600
|
+
? req.headers.host.slice(0, req.headers.host.indexOf(":"))
|
|
601
|
+
: req.headers.host || "localhost";
|
|
602
|
+
if ((req.headers["x-forwarded-for"] ||
|
|
603
|
+
req.headers["x-forwarded-host"] ||
|
|
604
|
+
req.headers["x-forwarded-proto"] ||
|
|
605
|
+
req.headers["x-forwarded-port"]) &&
|
|
606
|
+
!this.isProxyTrusted(req.socket?.remoteAddress)) {
|
|
607
|
+
this.log("WARN", `X-Forwarded-* headers set from an unknown source: ${req.socket?.remoteAddress}`);
|
|
608
|
+
res?.writeHead(400);
|
|
609
|
+
return;
|
|
610
|
+
}
|
|
611
|
+
if (req.headers["x-forwarded-host"] !== undefined) {
|
|
612
|
+
vhost = req.headers["x-forwarded-host"];
|
|
613
|
+
}
|
|
614
|
+
let protocol = this.isHttp2 ? "https" : "http";
|
|
615
|
+
if (req.headers["x-forwarded-proto"] !== undefined) {
|
|
616
|
+
protocol = req.headers["x-forwarded-proto"];
|
|
617
|
+
}
|
|
618
|
+
let port;
|
|
619
|
+
if (req.socket && req.socket.address()) {
|
|
620
|
+
port = req.socket.address().port;
|
|
621
|
+
}
|
|
622
|
+
if (req.headers["x-forwarded-port"] !== undefined) {
|
|
623
|
+
port = parseInt(req.headers["x-forwarded-port"]);
|
|
624
|
+
}
|
|
625
|
+
else if (req.headers["x-forwarded-proto"] !== undefined) {
|
|
626
|
+
port = protocol === "http" ? 80 : 443;
|
|
627
|
+
}
|
|
628
|
+
// Filter HTTP/2 pseudo-headers from the headers object
|
|
629
|
+
const headers = this.isHttp2
|
|
630
|
+
? Object.fromEntries(Object.entries(req.headers).filter(([k]) => !k.startsWith(":")))
|
|
631
|
+
: req.headers;
|
|
632
|
+
const httpContext = new HttpContext(vhost, req.method, req.url, protocol, port, headers);
|
|
633
|
+
httpContext.setClientIp(httpContext.getUniqueHeader("x-forwarded-for", req.socket?.remoteAddress));
|
|
634
|
+
if (["PUT", "PATCH", "POST", "DELETE"].includes(req.method)) {
|
|
635
|
+
httpContext.setBody(req);
|
|
636
|
+
}
|
|
637
|
+
return this.newContext({ http: httpContext, stream: res });
|
|
638
|
+
}
|
|
639
|
+
/**
|
|
640
|
+
* Check if a proxy is a trusted proxy
|
|
641
|
+
* @param ip - the IP address
|
|
642
|
+
* @returns true if the proxy is trusted
|
|
643
|
+
*/
|
|
644
|
+
isProxyTrusted(ip) {
|
|
645
|
+
return this.subnetChecker?.(ip) ?? false;
|
|
646
|
+
}
|
|
647
|
+
/**
|
|
648
|
+
* Create a context from provider info
|
|
649
|
+
* @param info - the context provider info
|
|
650
|
+
* @param noInit - skip initialization
|
|
651
|
+
* @returns the created context
|
|
652
|
+
*/
|
|
653
|
+
async newContext(info, noInit = false) {
|
|
654
|
+
let context;
|
|
655
|
+
this.contextProviders.find(provider => (context = provider.getContext(info)) !== undefined);
|
|
656
|
+
if (!noInit) {
|
|
657
|
+
await context.init();
|
|
658
|
+
}
|
|
659
|
+
await emitCoreEvent("Webda.NewContext", { context, info });
|
|
660
|
+
return context;
|
|
661
|
+
}
|
|
662
|
+
/**
|
|
663
|
+
* Register a new context provider (prepended, higher priority)
|
|
664
|
+
* @param provider - the context provider
|
|
665
|
+
*/
|
|
666
|
+
registerContextProvider(provider) {
|
|
667
|
+
this.contextProviders ??= [];
|
|
668
|
+
this.contextProviders.unshift(provider);
|
|
669
|
+
}
|
|
670
|
+
};
|
|
671
|
+
})();
|
|
672
|
+
export { HttpServer };
|
|
673
|
+
//# sourceMappingURL=httpserver.service.js.map
|