@zyno-io/dk-server-foundation 26.216.430
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/LICENSE +21 -0
- package/README.md +458 -0
- package/dist/devconsole/assets/index-CKF3C3kv.css +1 -0
- package/dist/devconsole/assets/index-CsHdomhM.js +27 -0
- package/dist/devconsole/index.html +13 -0
- package/dist/resources/proto/generated/devconsole/devconsole.d.ts +320 -0
- package/dist/resources/proto/generated/devconsole/devconsole.d.ts.map +1 -0
- package/dist/resources/proto/generated/devconsole/devconsole.js +3751 -0
- package/dist/resources/proto/generated/devconsole/devconsole.js.map +1 -0
- package/dist/src/app/base.d.ts +36 -0
- package/dist/src/app/base.d.ts.map +1 -0
- package/dist/src/app/base.js +240 -0
- package/dist/src/app/base.js.map +1 -0
- package/dist/src/app/config.d.ts +90 -0
- package/dist/src/app/config.d.ts.map +1 -0
- package/dist/src/app/config.js +33 -0
- package/dist/src/app/config.js.map +1 -0
- package/dist/src/app/config.loader.d.ts +14 -0
- package/dist/src/app/config.loader.d.ts.map +1 -0
- package/dist/src/app/config.loader.js +67 -0
- package/dist/src/app/config.loader.js.map +1 -0
- package/dist/src/app/const.d.ts +3 -0
- package/dist/src/app/const.d.ts.map +1 -0
- package/dist/src/app/const.js +6 -0
- package/dist/src/app/const.js.map +1 -0
- package/dist/src/app/dev.d.ts +7 -0
- package/dist/src/app/dev.d.ts.map +1 -0
- package/dist/src/app/dev.js +105 -0
- package/dist/src/app/dev.js.map +1 -0
- package/dist/src/app/index.d.ts +7 -0
- package/dist/src/app/index.d.ts.map +1 -0
- package/dist/src/app/index.js +12 -0
- package/dist/src/app/index.js.map +1 -0
- package/dist/src/app/openapi.d.ts +4 -0
- package/dist/src/app/openapi.d.ts.map +1 -0
- package/dist/src/app/openapi.js +6 -0
- package/dist/src/app/openapi.js.map +1 -0
- package/dist/src/app/resolver.d.ts +11 -0
- package/dist/src/app/resolver.d.ts.map +1 -0
- package/dist/src/app/resolver.js +60 -0
- package/dist/src/app/resolver.js.map +1 -0
- package/dist/src/app/shutdown.d.ts +12 -0
- package/dist/src/app/shutdown.d.ts.map +1 -0
- package/dist/src/app/shutdown.js +63 -0
- package/dist/src/app/shutdown.js.map +1 -0
- package/dist/src/app/state.d.ts +16 -0
- package/dist/src/app/state.d.ts.map +1 -0
- package/dist/src/app/state.js +12 -0
- package/dist/src/app/state.js.map +1 -0
- package/dist/src/auth/index.d.ts +3 -0
- package/dist/src/auth/index.d.ts.map +1 -0
- package/dist/src/auth/index.js +6 -0
- package/dist/src/auth/index.js.map +1 -0
- package/dist/src/auth/jwt.d.ts +76 -0
- package/dist/src/auth/jwt.d.ts.map +1 -0
- package/dist/src/auth/jwt.js +218 -0
- package/dist/src/auth/jwt.js.map +1 -0
- package/dist/src/auth/provider.d.ts +15 -0
- package/dist/src/auth/provider.d.ts.map +1 -0
- package/dist/src/auth/provider.js +50 -0
- package/dist/src/auth/provider.js.map +1 -0
- package/dist/src/cli/dksf-dev.d.ts +3 -0
- package/dist/src/cli/dksf-dev.d.ts.map +1 -0
- package/dist/src/cli/dksf-dev.js +408 -0
- package/dist/src/cli/dksf-dev.js.map +1 -0
- package/dist/src/cli/dksf-gen-proto.d.ts +3 -0
- package/dist/src/cli/dksf-gen-proto.d.ts.map +1 -0
- package/dist/src/cli/dksf-gen-proto.js +164 -0
- package/dist/src/cli/dksf-gen-proto.js.map +1 -0
- package/dist/src/cli/dksf-install.d.ts +3 -0
- package/dist/src/cli/dksf-install.d.ts.map +1 -0
- package/dist/src/cli/dksf-install.js +10 -0
- package/dist/src/cli/dksf-install.js.map +1 -0
- package/dist/src/cli/dksf-test.d.ts +3 -0
- package/dist/src/cli/dksf-test.d.ts.map +1 -0
- package/dist/src/cli/dksf-test.js +78 -0
- package/dist/src/cli/dksf-test.js.map +1 -0
- package/dist/src/cli/dksf-update.d.ts +3 -0
- package/dist/src/cli/dksf-update.d.ts.map +1 -0
- package/dist/src/cli/dksf-update.js +86 -0
- package/dist/src/cli/dksf-update.js.map +1 -0
- package/dist/src/database/common.d.ts +84 -0
- package/dist/src/database/common.d.ts.map +1 -0
- package/dist/src/database/common.js +380 -0
- package/dist/src/database/common.js.map +1 -0
- package/dist/src/database/dialect.d.ts +10 -0
- package/dist/src/database/dialect.d.ts.map +1 -0
- package/dist/src/database/dialect.js +56 -0
- package/dist/src/database/dialect.js.map +1 -0
- package/dist/src/database/entity.d.ts +62 -0
- package/dist/src/database/entity.d.ts.map +1 -0
- package/dist/src/database/entity.js +198 -0
- package/dist/src/database/entity.js.map +1 -0
- package/dist/src/database/index.d.ts +8 -0
- package/dist/src/database/index.d.ts.map +1 -0
- package/dist/src/database/index.js +15 -0
- package/dist/src/database/index.js.map +1 -0
- package/dist/src/database/migration/MigrationResetCommand.d.ts +9 -0
- package/dist/src/database/migration/MigrationResetCommand.d.ts.map +1 -0
- package/dist/src/database/migration/MigrationResetCommand.js +75 -0
- package/dist/src/database/migration/MigrationResetCommand.js.map +1 -0
- package/dist/src/database/migration/MigrationRunCommand.d.ts +11 -0
- package/dist/src/database/migration/MigrationRunCommand.d.ts.map +1 -0
- package/dist/src/database/migration/MigrationRunCommand.js +118 -0
- package/dist/src/database/migration/MigrationRunCommand.js.map +1 -0
- package/dist/src/database/migration/characters.d.ts +14 -0
- package/dist/src/database/migration/characters.d.ts.map +1 -0
- package/dist/src/database/migration/characters.js +56 -0
- package/dist/src/database/migration/characters.js.map +1 -0
- package/dist/src/database/migration/create/MigrationCreateCommand.d.ts +11 -0
- package/dist/src/database/migration/create/MigrationCreateCommand.d.ts.map +1 -0
- package/dist/src/database/migration/create/MigrationCreateCommand.js +106 -0
- package/dist/src/database/migration/create/MigrationCreateCommand.js.map +1 -0
- package/dist/src/database/migration/create/comparator.d.ts +3 -0
- package/dist/src/database/migration/create/comparator.d.ts.map +1 -0
- package/dist/src/database/migration/create/comparator.js +408 -0
- package/dist/src/database/migration/create/comparator.js.map +1 -0
- package/dist/src/database/migration/create/db-reader.d.ts +5 -0
- package/dist/src/database/migration/create/db-reader.d.ts.map +1 -0
- package/dist/src/database/migration/create/db-reader.js +473 -0
- package/dist/src/database/migration/create/db-reader.js.map +1 -0
- package/dist/src/database/migration/create/ddl-generator.d.ts +3 -0
- package/dist/src/database/migration/create/ddl-generator.d.ts.map +1 -0
- package/dist/src/database/migration/create/ddl-generator.js +725 -0
- package/dist/src/database/migration/create/ddl-generator.js.map +1 -0
- package/dist/src/database/migration/create/entity-reader.d.ts +4 -0
- package/dist/src/database/migration/create/entity-reader.d.ts.map +1 -0
- package/dist/src/database/migration/create/entity-reader.js +417 -0
- package/dist/src/database/migration/create/entity-reader.js.map +1 -0
- package/dist/src/database/migration/create/file-generator.d.ts +3 -0
- package/dist/src/database/migration/create/file-generator.d.ts.map +1 -0
- package/dist/src/database/migration/create/file-generator.js +62 -0
- package/dist/src/database/migration/create/file-generator.js.map +1 -0
- package/dist/src/database/migration/create/prompt.d.ts +4 -0
- package/dist/src/database/migration/create/prompt.d.ts.map +1 -0
- package/dist/src/database/migration/create/prompt.js +55 -0
- package/dist/src/database/migration/create/prompt.js.map +1 -0
- package/dist/src/database/migration/create/schema-model.d.ts +109 -0
- package/dist/src/database/migration/create/schema-model.d.ts.map +1 -0
- package/dist/src/database/migration/create/schema-model.js +24 -0
- package/dist/src/database/migration/create/schema-model.js.map +1 -0
- package/dist/src/database/migration/helpers.d.ts +3 -0
- package/dist/src/database/migration/helpers.d.ts.map +1 -0
- package/dist/src/database/migration/helpers.js +13 -0
- package/dist/src/database/migration/helpers.js.map +1 -0
- package/dist/src/database/migration/index.d.ts +9 -0
- package/dist/src/database/migration/index.d.ts.map +1 -0
- package/dist/src/database/migration/index.js +43 -0
- package/dist/src/database/migration/index.js.map +1 -0
- package/dist/src/database/migration/migration.entity.d.ts +8 -0
- package/dist/src/database/migration/migration.entity.d.ts.map +1 -0
- package/dist/src/database/migration/migration.entity.js +16 -0
- package/dist/src/database/migration/migration.entity.js.map +1 -0
- package/dist/src/database/mysql.d.ts +16 -0
- package/dist/src/database/mysql.d.ts.map +1 -0
- package/dist/src/database/mysql.js +140 -0
- package/dist/src/database/mysql.js.map +1 -0
- package/dist/src/database/postgres.d.ts +16 -0
- package/dist/src/database/postgres.d.ts.map +1 -0
- package/dist/src/database/postgres.js +91 -0
- package/dist/src/database/postgres.js.map +1 -0
- package/dist/src/database/types.d.ts +21 -0
- package/dist/src/database/types.d.ts.map +1 -0
- package/dist/src/database/types.js +27 -0
- package/dist/src/database/types.js.map +1 -0
- package/dist/src/devconsole/devconsole.controller.d.ts +7 -0
- package/dist/src/devconsole/devconsole.controller.d.ts.map +1 -0
- package/dist/src/devconsole/devconsole.controller.js +82 -0
- package/dist/src/devconsole/devconsole.controller.js.map +1 -0
- package/dist/src/devconsole/devconsole.middleware.d.ts +12 -0
- package/dist/src/devconsole/devconsole.middleware.d.ts.map +1 -0
- package/dist/src/devconsole/devconsole.middleware.js +28 -0
- package/dist/src/devconsole/devconsole.middleware.js.map +1 -0
- package/dist/src/devconsole/devconsole.srpc.d.ts +14 -0
- package/dist/src/devconsole/devconsole.srpc.d.ts.map +1 -0
- package/dist/src/devconsole/devconsole.srpc.js +94 -0
- package/dist/src/devconsole/devconsole.srpc.js.map +1 -0
- package/dist/src/devconsole/devconsole.store.d.ts +101 -0
- package/dist/src/devconsole/devconsole.store.d.ts.map +1 -0
- package/dist/src/devconsole/devconsole.store.js +125 -0
- package/dist/src/devconsole/devconsole.store.js.map +1 -0
- package/dist/src/devconsole/devconsole.ws.d.ts +18 -0
- package/dist/src/devconsole/devconsole.ws.d.ts.map +1 -0
- package/dist/src/devconsole/devconsole.ws.js +470 -0
- package/dist/src/devconsole/devconsole.ws.js.map +1 -0
- package/dist/src/devconsole/index.d.ts +2 -0
- package/dist/src/devconsole/index.d.ts.map +1 -0
- package/dist/src/devconsole/index.js +6 -0
- package/dist/src/devconsole/index.js.map +1 -0
- package/dist/src/devconsole/patches.d.ts +6 -0
- package/dist/src/devconsole/patches.d.ts.map +1 -0
- package/dist/src/devconsole/patches.js +397 -0
- package/dist/src/devconsole/patches.js.map +1 -0
- package/dist/src/health/health.module.d.ts +6 -0
- package/dist/src/health/health.module.d.ts.map +1 -0
- package/dist/src/health/health.module.js +32 -0
- package/dist/src/health/health.module.js.map +1 -0
- package/dist/src/health/healthcheck.controller.d.ts +10 -0
- package/dist/src/health/healthcheck.controller.d.ts.map +1 -0
- package/dist/src/health/healthcheck.controller.js +30 -0
- package/dist/src/health/healthcheck.controller.js.map +1 -0
- package/dist/src/health/healthcheck.service.d.ts +13 -0
- package/dist/src/health/healthcheck.service.d.ts.map +1 -0
- package/dist/src/health/healthcheck.service.js +33 -0
- package/dist/src/health/healthcheck.service.js.map +1 -0
- package/dist/src/health/index.d.ts +3 -0
- package/dist/src/health/index.d.ts.map +1 -0
- package/dist/src/health/index.js +6 -0
- package/dist/src/health/index.js.map +1 -0
- package/dist/src/helpers/async/context.d.ts +11 -0
- package/dist/src/helpers/async/context.d.ts.map +1 -0
- package/dist/src/helpers/async/context.js +75 -0
- package/dist/src/helpers/async/context.js.map +1 -0
- package/dist/src/helpers/async/process.d.ts +16 -0
- package/dist/src/helpers/async/process.d.ts.map +1 -0
- package/dist/src/helpers/async/process.js +44 -0
- package/dist/src/helpers/async/process.js.map +1 -0
- package/dist/src/helpers/async/promise.d.ts +5 -0
- package/dist/src/helpers/async/promise.d.ts.map +1 -0
- package/dist/src/helpers/async/promise.js +27 -0
- package/dist/src/helpers/async/promise.js.map +1 -0
- package/dist/src/helpers/data/array.d.ts +3 -0
- package/dist/src/helpers/data/array.d.ts.map +1 -0
- package/dist/src/helpers/data/array.js +17 -0
- package/dist/src/helpers/data/array.js.map +1 -0
- package/dist/src/helpers/data/objects.d.ts +12 -0
- package/dist/src/helpers/data/objects.d.ts.map +1 -0
- package/dist/src/helpers/data/objects.js +75 -0
- package/dist/src/helpers/data/objects.js.map +1 -0
- package/dist/src/helpers/data/serialization.d.ts +4 -0
- package/dist/src/helpers/data/serialization.d.ts.map +1 -0
- package/dist/src/helpers/data/serialization.js +15 -0
- package/dist/src/helpers/data/serialization.js.map +1 -0
- package/dist/src/helpers/data/transformer.d.ts +13 -0
- package/dist/src/helpers/data/transformer.d.ts.map +1 -0
- package/dist/src/helpers/data/transformer.js +55 -0
- package/dist/src/helpers/data/transformer.js.map +1 -0
- package/dist/src/helpers/framework/decorators.d.ts +5 -0
- package/dist/src/helpers/framework/decorators.d.ts.map +1 -0
- package/dist/src/helpers/framework/decorators.js +39 -0
- package/dist/src/helpers/framework/decorators.js.map +1 -0
- package/dist/src/helpers/framework/event.d.ts +3 -0
- package/dist/src/helpers/framework/event.d.ts.map +1 -0
- package/dist/src/helpers/framework/event.js +20 -0
- package/dist/src/helpers/framework/event.js.map +1 -0
- package/dist/src/helpers/framework/injection.d.ts +7 -0
- package/dist/src/helpers/framework/injection.d.ts.map +1 -0
- package/dist/src/helpers/framework/injection.js +52 -0
- package/dist/src/helpers/framework/injection.js.map +1 -0
- package/dist/src/helpers/index.d.ts +22 -0
- package/dist/src/helpers/index.d.ts.map +1 -0
- package/dist/src/helpers/index.js +32 -0
- package/dist/src/helpers/index.js.map +1 -0
- package/dist/src/helpers/io/package.d.ts +5 -0
- package/dist/src/helpers/io/package.d.ts.map +1 -0
- package/dist/src/helpers/io/package.js +31 -0
- package/dist/src/helpers/io/package.js.map +1 -0
- package/dist/src/helpers/io/stream.d.ts +18 -0
- package/dist/src/helpers/io/stream.d.ts.map +1 -0
- package/dist/src/helpers/io/stream.js +91 -0
- package/dist/src/helpers/io/stream.js.map +1 -0
- package/dist/src/helpers/redis/broadcast.d.ts +13 -0
- package/dist/src/helpers/redis/broadcast.d.ts.map +1 -0
- package/dist/src/helpers/redis/broadcast.js +100 -0
- package/dist/src/helpers/redis/broadcast.js.map +1 -0
- package/dist/src/helpers/redis/cache.d.ts +7 -0
- package/dist/src/helpers/redis/cache.d.ts.map +1 -0
- package/dist/src/helpers/redis/cache.js +28 -0
- package/dist/src/helpers/redis/cache.js.map +1 -0
- package/dist/src/helpers/redis/mutex.d.ts +24 -0
- package/dist/src/helpers/redis/mutex.d.ts.map +1 -0
- package/dist/src/helpers/redis/mutex.js +240 -0
- package/dist/src/helpers/redis/mutex.js.map +1 -0
- package/dist/src/helpers/redis/redis.d.ts +11 -0
- package/dist/src/helpers/redis/redis.d.ts.map +1 -0
- package/dist/src/helpers/redis/redis.js +59 -0
- package/dist/src/helpers/redis/redis.js.map +1 -0
- package/dist/src/helpers/security/crypto.d.ts +26 -0
- package/dist/src/helpers/security/crypto.d.ts.map +1 -0
- package/dist/src/helpers/security/crypto.js +121 -0
- package/dist/src/helpers/security/crypto.js.map +1 -0
- package/dist/src/helpers/security/validation.d.ts +4 -0
- package/dist/src/helpers/security/validation.d.ts.map +1 -0
- package/dist/src/helpers/security/validation.js +25 -0
- package/dist/src/helpers/security/validation.js.map +1 -0
- package/dist/src/helpers/utils/date.d.ts +4 -0
- package/dist/src/helpers/utils/date.d.ts.map +1 -0
- package/dist/src/helpers/utils/date.js +23 -0
- package/dist/src/helpers/utils/date.js.map +1 -0
- package/dist/src/helpers/utils/error.d.ts +24 -0
- package/dist/src/helpers/utils/error.d.ts.map +1 -0
- package/dist/src/helpers/utils/error.js +168 -0
- package/dist/src/helpers/utils/error.js.map +1 -0
- package/dist/src/helpers/utils/jsx.d.ts +3 -0
- package/dist/src/helpers/utils/jsx.d.ts.map +1 -0
- package/dist/src/helpers/utils/jsx.js +13 -0
- package/dist/src/helpers/utils/jsx.js.map +1 -0
- package/dist/src/helpers/utils/uuid.d.ts +3 -0
- package/dist/src/helpers/utils/uuid.d.ts.map +1 -0
- package/dist/src/helpers/utils/uuid.js +14 -0
- package/dist/src/helpers/utils/uuid.js.map +1 -0
- package/dist/src/http/auth.d.ts +46 -0
- package/dist/src/http/auth.d.ts.map +1 -0
- package/dist/src/http/auth.js +162 -0
- package/dist/src/http/auth.js.map +1 -0
- package/dist/src/http/context.d.ts +5 -0
- package/dist/src/http/context.d.ts.map +1 -0
- package/dist/src/http/context.js +22 -0
- package/dist/src/http/context.js.map +1 -0
- package/dist/src/http/cors.d.ts +36 -0
- package/dist/src/http/cors.d.ts.map +1 -0
- package/dist/src/http/cors.js +171 -0
- package/dist/src/http/cors.js.map +1 -0
- package/dist/src/http/errors.d.ts +3 -0
- package/dist/src/http/errors.d.ts.map +1 -0
- package/dist/src/http/errors.js +10 -0
- package/dist/src/http/errors.js.map +1 -0
- package/dist/src/http/index.d.ts +24 -0
- package/dist/src/http/index.d.ts.map +1 -0
- package/dist/src/http/index.js +25 -0
- package/dist/src/http/index.js.map +1 -0
- package/dist/src/http/kernel.d.ts +17 -0
- package/dist/src/http/kernel.d.ts.map +1 -0
- package/dist/src/http/kernel.js +133 -0
- package/dist/src/http/kernel.js.map +1 -0
- package/dist/src/http/middleware.d.ts +12 -0
- package/dist/src/http/middleware.d.ts.map +1 -0
- package/dist/src/http/middleware.js +61 -0
- package/dist/src/http/middleware.js.map +1 -0
- package/dist/src/http/overrides.d.ts +2 -0
- package/dist/src/http/overrides.d.ts.map +1 -0
- package/dist/src/http/overrides.js +19 -0
- package/dist/src/http/overrides.js.map +1 -0
- package/dist/src/http/store.d.ts +33 -0
- package/dist/src/http/store.d.ts.map +1 -0
- package/dist/src/http/store.js +102 -0
- package/dist/src/http/store.js.map +1 -0
- package/dist/src/http/uploads.d.ts +7 -0
- package/dist/src/http/uploads.d.ts.map +1 -0
- package/dist/src/http/uploads.js +8 -0
- package/dist/src/http/uploads.js.map +1 -0
- package/dist/src/http/workflow.d.ts +18 -0
- package/dist/src/http/workflow.d.ts.map +1 -0
- package/dist/src/http/workflow.js +181 -0
- package/dist/src/http/workflow.js.map +1 -0
- package/dist/src/index.d.ts +13 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +25 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/services/cli/invoke.d.ts +5 -0
- package/dist/src/services/cli/invoke.d.ts.map +1 -0
- package/dist/src/services/cli/invoke.js +45 -0
- package/dist/src/services/cli/invoke.js.map +1 -0
- package/dist/src/services/cli/repl-context.d.ts +13 -0
- package/dist/src/services/cli/repl-context.d.ts.map +1 -0
- package/dist/src/services/cli/repl-context.js +60 -0
- package/dist/src/services/cli/repl-context.js.map +1 -0
- package/dist/src/services/cli/repl.d.ts +5 -0
- package/dist/src/services/cli/repl.d.ts.map +1 -0
- package/dist/src/services/cli/repl.js +32 -0
- package/dist/src/services/cli/repl.js.map +1 -0
- package/dist/src/services/cli.d.ts +12 -0
- package/dist/src/services/cli.d.ts.map +1 -0
- package/dist/src/services/cli.js +76 -0
- package/dist/src/services/cli.js.map +1 -0
- package/dist/src/services/index.d.ts +7 -0
- package/dist/src/services/index.d.ts.map +1 -0
- package/dist/src/services/index.js +10 -0
- package/dist/src/services/index.js.map +1 -0
- package/dist/src/services/leader.d.ts +32 -0
- package/dist/src/services/leader.d.ts.map +1 -0
- package/dist/src/services/leader.js +174 -0
- package/dist/src/services/leader.js.map +1 -0
- package/dist/src/services/logger.d.ts +35 -0
- package/dist/src/services/logger.d.ts.map +1 -0
- package/dist/src/services/logger.js +245 -0
- package/dist/src/services/logger.js.map +1 -0
- package/dist/src/services/mail/index.d.ts +61 -0
- package/dist/src/services/mail/index.d.ts.map +1 -0
- package/dist/src/services/mail/index.js +90 -0
- package/dist/src/services/mail/index.js.map +1 -0
- package/dist/src/services/mail/postmark.d.ts +11 -0
- package/dist/src/services/mail/postmark.d.ts.map +1 -0
- package/dist/src/services/mail/postmark.js +42 -0
- package/dist/src/services/mail/postmark.js.map +1 -0
- package/dist/src/services/mail/smtp.d.ts +11 -0
- package/dist/src/services/mail/smtp.d.ts.map +1 -0
- package/dist/src/services/mail/smtp.js +61 -0
- package/dist/src/services/mail/smtp.js.map +1 -0
- package/dist/src/services/mesh.d.ts +65 -0
- package/dist/src/services/mesh.d.ts.map +1 -0
- package/dist/src/services/mesh.js +422 -0
- package/dist/src/services/mesh.js.map +1 -0
- package/dist/src/services/worker/bootstrap.d.ts +3 -0
- package/dist/src/services/worker/bootstrap.d.ts.map +1 -0
- package/dist/src/services/worker/bootstrap.js +64 -0
- package/dist/src/services/worker/bootstrap.js.map +1 -0
- package/dist/src/services/worker/cli.d.ts +11 -0
- package/dist/src/services/worker/cli.d.ts.map +1 -0
- package/dist/src/services/worker/cli.js +43 -0
- package/dist/src/services/worker/cli.js.map +1 -0
- package/dist/src/services/worker/entity.d.ts +18 -0
- package/dist/src/services/worker/entity.d.ts.map +1 -0
- package/dist/src/services/worker/entity.js +16 -0
- package/dist/src/services/worker/entity.js.map +1 -0
- package/dist/src/services/worker/index.d.ts +9 -0
- package/dist/src/services/worker/index.d.ts.map +1 -0
- package/dist/src/services/worker/index.js +40 -0
- package/dist/src/services/worker/index.js.map +1 -0
- package/dist/src/services/worker/queue.d.ts +8 -0
- package/dist/src/services/worker/queue.d.ts.map +1 -0
- package/dist/src/services/worker/queue.js +32 -0
- package/dist/src/services/worker/queue.js.map +1 -0
- package/dist/src/services/worker/recorder.d.ts +16 -0
- package/dist/src/services/worker/recorder.d.ts.map +1 -0
- package/dist/src/services/worker/recorder.js +168 -0
- package/dist/src/services/worker/recorder.js.map +1 -0
- package/dist/src/services/worker/runner.d.ts +21 -0
- package/dist/src/services/worker/runner.d.ts.map +1 -0
- package/dist/src/services/worker/runner.js +156 -0
- package/dist/src/services/worker/runner.js.map +1 -0
- package/dist/src/services/worker/types.d.ts +26 -0
- package/dist/src/services/worker/types.d.ts.map +1 -0
- package/dist/src/services/worker/types.js +29 -0
- package/dist/src/services/worker/types.js.map +1 -0
- package/dist/src/srpc/SrpcByteStream.d.ts +67 -0
- package/dist/src/srpc/SrpcByteStream.d.ts.map +1 -0
- package/dist/src/srpc/SrpcByteStream.js +319 -0
- package/dist/src/srpc/SrpcByteStream.js.map +1 -0
- package/dist/src/srpc/SrpcClient.d.ts +75 -0
- package/dist/src/srpc/SrpcClient.d.ts.map +1 -0
- package/dist/src/srpc/SrpcClient.js +445 -0
- package/dist/src/srpc/SrpcClient.js.map +1 -0
- package/dist/src/srpc/SrpcServer.d.ts +80 -0
- package/dist/src/srpc/SrpcServer.d.ts.map +1 -0
- package/dist/src/srpc/SrpcServer.js +561 -0
- package/dist/src/srpc/SrpcServer.js.map +1 -0
- package/dist/src/srpc/index.d.ts +7 -0
- package/dist/src/srpc/index.d.ts.map +1 -0
- package/dist/src/srpc/index.js +12 -0
- package/dist/src/srpc/index.js.map +1 -0
- package/dist/src/srpc/types.d.ts +131 -0
- package/dist/src/srpc/types.d.ts.map +1 -0
- package/dist/src/srpc/types.js +65 -0
- package/dist/src/srpc/types.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +2 -0
- package/dist/src/telemetry/index.d.ts.map +1 -0
- package/dist/src/telemetry/index.js +5 -0
- package/dist/src/telemetry/index.js.map +1 -0
- package/dist/src/telemetry/otel/MariaDBInstrumentation.d.ts +22 -0
- package/dist/src/telemetry/otel/MariaDBInstrumentation.d.ts.map +1 -0
- package/dist/src/telemetry/otel/MariaDBInstrumentation.js +248 -0
- package/dist/src/telemetry/otel/MariaDBInstrumentation.js.map +1 -0
- package/dist/src/telemetry/otel/helpers.d.ts +27 -0
- package/dist/src/telemetry/otel/helpers.d.ts.map +1 -0
- package/dist/src/telemetry/otel/helpers.js +126 -0
- package/dist/src/telemetry/otel/helpers.js.map +1 -0
- package/dist/src/telemetry/otel/index.d.ts +14 -0
- package/dist/src/telemetry/otel/index.d.ts.map +1 -0
- package/dist/src/telemetry/otel/index.js +132 -0
- package/dist/src/telemetry/otel/index.js.map +1 -0
- package/dist/src/telemetry/otel/metrics.controller.d.ts +6 -0
- package/dist/src/telemetry/otel/metrics.controller.d.ts.map +1 -0
- package/dist/src/telemetry/otel/metrics.controller.js +63 -0
- package/dist/src/telemetry/otel/metrics.controller.js.map +1 -0
- package/dist/src/telemetry/sentry.d.ts +9 -0
- package/dist/src/telemetry/sentry.d.ts.map +1 -0
- package/dist/src/telemetry/sentry.js +62 -0
- package/dist/src/telemetry/sentry.js.map +1 -0
- package/dist/src/testing/expect.d.ts +25 -0
- package/dist/src/testing/expect.d.ts.map +1 -0
- package/dist/src/testing/expect.js +151 -0
- package/dist/src/testing/expect.js.map +1 -0
- package/dist/src/testing/fixtures.d.ts +19 -0
- package/dist/src/testing/fixtures.d.ts.map +1 -0
- package/dist/src/testing/fixtures.js +69 -0
- package/dist/src/testing/fixtures.js.map +1 -0
- package/dist/src/testing/index.d.ts +260 -0
- package/dist/src/testing/index.d.ts.map +1 -0
- package/dist/src/testing/index.js +345 -0
- package/dist/src/testing/index.js.map +1 -0
- package/dist/src/testing/requests.d.ts +10 -0
- package/dist/src/testing/requests.d.ts.map +1 -0
- package/dist/src/testing/requests.js +56 -0
- package/dist/src/testing/requests.js.map +1 -0
- package/dist/src/testing/sql.d.ts +11 -0
- package/dist/src/testing/sql.d.ts.map +1 -0
- package/dist/src/testing/sql.js +55 -0
- package/dist/src/testing/sql.js.map +1 -0
- package/dist/src/types/index.d.ts +57 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +73 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/phone.d.ts +11 -0
- package/dist/src/types/phone.d.ts.map +1 -0
- package/dist/src/types/phone.js +73 -0
- package/dist/src/types/phone.js.map +1 -0
- package/docs/.vitepress/config.mts +79 -0
- package/docs/.yarnrc.yml +1 -0
- package/docs/content/CONTRIBUTING.md +140 -0
- package/docs/content/README-DEV.md +142 -0
- package/docs/content/README.md +39 -0
- package/docs/content/authentication.md +215 -0
- package/docs/content/cli.md +335 -0
- package/docs/content/configuration.md +175 -0
- package/docs/content/database.md +422 -0
- package/docs/content/devconsole.md +123 -0
- package/docs/content/getting-started.md +154 -0
- package/docs/content/guides/test-migration-guide.md +351 -0
- package/docs/content/health.md +54 -0
- package/docs/content/helpers.md +322 -0
- package/docs/content/http.md +253 -0
- package/docs/content/index.md +147 -0
- package/docs/content/leader-service.md +98 -0
- package/docs/content/logging.md +150 -0
- package/docs/content/mail.md +161 -0
- package/docs/content/mesh-service.md +204 -0
- package/docs/content/public/images/devconsole/01-dashboard.png +0 -0
- package/docs/content/public/images/devconsole/02-routes.png +0 -0
- package/docs/content/public/images/devconsole/03-openapi.png +0 -0
- package/docs/content/public/images/devconsole/04-requests.png +0 -0
- package/docs/content/public/images/devconsole/05-srpc.png +0 -0
- package/docs/content/public/images/devconsole/06-database.png +0 -0
- package/docs/content/public/images/devconsole/07-health.png +0 -0
- package/docs/content/public/images/devconsole/08-mutex.png +0 -0
- package/docs/content/public/images/devconsole/09-repl.png +0 -0
- package/docs/content/public/images/devconsole/10-workers.png +0 -0
- package/docs/content/redis.md +168 -0
- package/docs/content/srpc.md +261 -0
- package/docs/content/telemetry.md +166 -0
- package/docs/content/testing.md +222 -0
- package/docs/content/types.md +215 -0
- package/docs/content/worker.md +177 -0
- package/docs/package.json +16 -0
- package/docs/scripts/README-SCREENSHOTS.md +145 -0
- package/docs/scripts/capture-devconsole-screenshots.js +184 -0
- package/docs/yarn.lock +2408 -0
- package/package.json +144 -0
- package/patches/@deepkit+type+1.0.19.patch +38 -0
- package/patches/deepkit-openapi-core+0.0.9.patch +62 -0
- package/src/app/base.ts +253 -0
- package/src/app/config.loader.ts +66 -0
- package/src/app/config.ts +119 -0
- package/src/app/const.ts +4 -0
- package/src/app/dev.ts +92 -0
- package/src/app/index.ts +6 -0
- package/src/app/openapi.ts +3 -0
- package/src/app/resolver.ts +49 -0
- package/src/app/shutdown.ts +55 -0
- package/src/app/state.ts +19 -0
- package/src/auth/index.ts +2 -0
- package/src/auth/jwt.ts +275 -0
- package/src/auth/provider.ts +57 -0
- package/src/cli/dksf-dev.ts +416 -0
- package/src/cli/dksf-gen-proto.ts +176 -0
- package/src/cli/dksf-install.ts +11 -0
- package/src/cli/dksf-test.ts +84 -0
- package/src/cli/dksf-update.ts +101 -0
- package/src/database/common.ts +385 -0
- package/src/database/dialect.ts +43 -0
- package/src/database/entity.ts +285 -0
- package/src/database/index.ts +7 -0
- package/src/database/migration/MigrationResetCommand.ts +72 -0
- package/src/database/migration/MigrationRunCommand.ts +118 -0
- package/src/database/migration/characters.ts +53 -0
- package/src/database/migration/create/MigrationCreateCommand.ts +96 -0
- package/src/database/migration/create/comparator.ts +467 -0
- package/src/database/migration/create/db-reader.ts +510 -0
- package/src/database/migration/create/ddl-generator.ts +755 -0
- package/src/database/migration/create/entity-reader.ts +471 -0
- package/src/database/migration/create/file-generator.ts +57 -0
- package/src/database/migration/create/prompt.ts +49 -0
- package/src/database/migration/create/schema-model.ts +102 -0
- package/src/database/migration/helpers.ts +7 -0
- package/src/database/migration/index.ts +35 -0
- package/src/database/migration/migration.entity.ts +10 -0
- package/src/database/mysql.ts +140 -0
- package/src/database/postgres.ts +97 -0
- package/src/database/types.ts +18 -0
- package/src/devconsole/devconsole.controller.ts +59 -0
- package/src/devconsole/devconsole.middleware.ts +23 -0
- package/src/devconsole/devconsole.srpc.ts +94 -0
- package/src/devconsole/devconsole.store.ts +190 -0
- package/src/devconsole/devconsole.ws.ts +491 -0
- package/src/devconsole/index.ts +1 -0
- package/src/devconsole/patches.ts +428 -0
- package/src/health/health.module.ts +30 -0
- package/src/health/healthcheck.controller.ts +17 -0
- package/src/health/healthcheck.service.ts +28 -0
- package/src/health/index.ts +2 -0
- package/src/helpers/async/context.ts +67 -0
- package/src/helpers/async/process.ts +49 -0
- package/src/helpers/async/promise.ts +16 -0
- package/src/helpers/data/array.ts +11 -0
- package/src/helpers/data/objects.ts +64 -0
- package/src/helpers/data/serialization.ts +11 -0
- package/src/helpers/data/transformer.ts +54 -0
- package/src/helpers/framework/decorators.ts +27 -0
- package/src/helpers/framework/event.ts +11 -0
- package/src/helpers/framework/injection.ts +47 -0
- package/src/helpers/index.ts +34 -0
- package/src/helpers/io/package.ts +26 -0
- package/src/helpers/io/stream.ts +79 -0
- package/src/helpers/redis/broadcast.ts +96 -0
- package/src/helpers/redis/cache.ts +28 -0
- package/src/helpers/redis/mutex.ts +260 -0
- package/src/helpers/redis/redis.ts +60 -0
- package/src/helpers/security/crypto.ts +133 -0
- package/src/helpers/security/validation.ts +16 -0
- package/src/helpers/utils/date.ts +13 -0
- package/src/helpers/utils/error.ts +155 -0
- package/src/helpers/utils/jsx.ts +8 -0
- package/src/helpers/utils/uuid.ts +8 -0
- package/src/http/auth.ts +156 -0
- package/src/http/context.ts +15 -0
- package/src/http/cors.ts +159 -0
- package/src/http/errors.ts +9 -0
- package/src/http/index.ts +19 -0
- package/src/http/kernel.ts +138 -0
- package/src/http/middleware.ts +59 -0
- package/src/http/overrides.ts +20 -0
- package/src/http/store.ts +86 -0
- package/src/http/uploads.ts +6 -0
- package/src/http/workflow.ts +167 -0
- package/src/index.ts +19 -0
- package/src/services/cli/invoke.ts +39 -0
- package/src/services/cli/repl-context.ts +63 -0
- package/src/services/cli/repl.ts +22 -0
- package/src/services/cli.ts +74 -0
- package/src/services/index.ts +6 -0
- package/src/services/leader.ts +201 -0
- package/src/services/logger.ts +258 -0
- package/src/services/mail/index.ts +117 -0
- package/src/services/mail/postmark.ts +37 -0
- package/src/services/mail/smtp.ts +46 -0
- package/src/services/mesh.ts +508 -0
- package/src/services/worker/bootstrap.ts +53 -0
- package/src/services/worker/cli.ts +32 -0
- package/src/services/worker/entity.ts +22 -0
- package/src/services/worker/index.ts +30 -0
- package/src/services/worker/queue.ts +35 -0
- package/src/services/worker/recorder.ts +172 -0
- package/src/services/worker/runner.ts +179 -0
- package/src/services/worker/types.ts +32 -0
- package/src/srpc/SrpcByteStream.ts +382 -0
- package/src/srpc/SrpcClient.ts +512 -0
- package/src/srpc/SrpcServer.ts +681 -0
- package/src/srpc/index.ts +15 -0
- package/src/srpc/types.ts +146 -0
- package/src/telemetry/index.ts +1 -0
- package/src/telemetry/otel/MariaDBInstrumentation.ts +297 -0
- package/src/telemetry/otel/helpers.ts +117 -0
- package/src/telemetry/otel/index.ts +150 -0
- package/src/telemetry/otel/metrics.controller.ts +50 -0
- package/src/telemetry/sentry.ts +58 -0
- package/src/testing/expect.ts +148 -0
- package/src/testing/fixtures.ts +62 -0
- package/src/testing/index.ts +355 -0
- package/src/testing/requests.ts +68 -0
- package/src/testing/sql.ts +50 -0
- package/src/types/index.ts +64 -0
- package/src/types/phone.ts +64 -0
- package/types.d.ts +20 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { isDevelopment, isTest } from './const';
|
|
2
|
+
|
|
3
|
+
export class BaseAppConfig {
|
|
4
|
+
APP_ENV!: string;
|
|
5
|
+
|
|
6
|
+
PORT?: number;
|
|
7
|
+
|
|
8
|
+
MYSQL_HOST?: string;
|
|
9
|
+
MYSQL_PORT?: number;
|
|
10
|
+
MYSQL_USER?: string;
|
|
11
|
+
MYSQL_PASSWORD_SECRET?: string;
|
|
12
|
+
MYSQL_DATABASE?: string;
|
|
13
|
+
MYSQL_CONNECTION_LIMIT?: number;
|
|
14
|
+
MYSQL_MIN_IDLE_CONNECTIONS?: number;
|
|
15
|
+
MYSQL_IDLE_TIMEOUT_SECONDS?: number;
|
|
16
|
+
|
|
17
|
+
PG_HOST?: string;
|
|
18
|
+
PG_PORT?: number;
|
|
19
|
+
PG_USER?: string;
|
|
20
|
+
PG_PASSWORD_SECRET?: string;
|
|
21
|
+
PG_DATABASE?: string;
|
|
22
|
+
PG_SCHEMA?: string;
|
|
23
|
+
PG_CONNECTION_LIMIT?: number;
|
|
24
|
+
PG_IDLE_TIMEOUT_SECONDS?: number;
|
|
25
|
+
|
|
26
|
+
AUTH_JWT_ISSUER?: string;
|
|
27
|
+
AUTH_JWT_EXPIRATION_MINS?: number;
|
|
28
|
+
AUTH_JWT_COOKIE_NAME?: string;
|
|
29
|
+
AUTH_JWT_SECRET?: string;
|
|
30
|
+
AUTH_JWT_SECRET_B64?: string;
|
|
31
|
+
AUTH_JWT_ED_SECRET?: string;
|
|
32
|
+
AUTH_JWT_ENABLE_VERIFY: boolean = true;
|
|
33
|
+
|
|
34
|
+
AUTH_BASIC_SECRET?: string;
|
|
35
|
+
|
|
36
|
+
CRYPTO_SECRET?: string;
|
|
37
|
+
CRYPTO_IV_LENGTH: number = 12;
|
|
38
|
+
|
|
39
|
+
USE_REAL_IP_HEADER?: boolean;
|
|
40
|
+
|
|
41
|
+
MAIL_POSTMARK_SECRET?: string;
|
|
42
|
+
|
|
43
|
+
REDIS_SENTINEL_HOST?: string;
|
|
44
|
+
REDIS_SENTINEL_PORT?: number;
|
|
45
|
+
REDIS_SENTINEL_NAME?: string;
|
|
46
|
+
REDIS_HOST?: string;
|
|
47
|
+
REDIS_PORT?: number;
|
|
48
|
+
REDIS_PREFIX?: string;
|
|
49
|
+
|
|
50
|
+
CACHE_REDIS_SENTINEL_HOST?: string;
|
|
51
|
+
CACHE_REDIS_SENTINEL_PORT?: number;
|
|
52
|
+
CACHE_REDIS_SENTINEL_NAME?: string;
|
|
53
|
+
CACHE_REDIS_HOST?: string;
|
|
54
|
+
CACHE_REDIS_PORT?: number;
|
|
55
|
+
CACHE_REDIS_PREFIX?: string;
|
|
56
|
+
|
|
57
|
+
BROADCAST_REDIS_SENTINEL_HOST?: string;
|
|
58
|
+
BROADCAST_REDIS_SENTINEL_PORT?: number;
|
|
59
|
+
BROADCAST_REDIS_SENTINEL_NAME?: string;
|
|
60
|
+
BROADCAST_REDIS_HOST?: string;
|
|
61
|
+
BROADCAST_REDIS_PORT?: number;
|
|
62
|
+
BROADCAST_REDIS_PREFIX?: string;
|
|
63
|
+
|
|
64
|
+
BULL_REDIS_SENTINEL_HOST?: string;
|
|
65
|
+
BULL_REDIS_SENTINEL_PORT?: number;
|
|
66
|
+
BULL_REDIS_SENTINEL_NAME?: string;
|
|
67
|
+
BULL_REDIS_HOST?: string;
|
|
68
|
+
BULL_REDIS_PORT?: number;
|
|
69
|
+
BULL_REDIS_PREFIX?: string;
|
|
70
|
+
BULL_QUEUE: string = 'default'; // todo: does a blank string still yield a default?
|
|
71
|
+
|
|
72
|
+
MESH_REDIS_SENTINEL_HOST?: string;
|
|
73
|
+
MESH_REDIS_SENTINEL_PORT?: number;
|
|
74
|
+
MESH_REDIS_SENTINEL_NAME?: string;
|
|
75
|
+
MESH_REDIS_HOST?: string;
|
|
76
|
+
MESH_REDIS_PORT?: number;
|
|
77
|
+
MESH_REDIS_PREFIX?: string;
|
|
78
|
+
|
|
79
|
+
MUTEX_MODE: 'local' | 'redis' = 'local';
|
|
80
|
+
MUTEX_REDIS_SENTINEL_HOST?: string;
|
|
81
|
+
MUTEX_REDIS_SENTINEL_PORT?: number;
|
|
82
|
+
MUTEX_REDIS_SENTINEL_NAME?: string;
|
|
83
|
+
MUTEX_REDIS_HOST?: string;
|
|
84
|
+
MUTEX_REDIS_PORT?: number;
|
|
85
|
+
MUTEX_REDIS_PREFIX?: string;
|
|
86
|
+
|
|
87
|
+
ENABLE_OPENAPI_SCHEMA?: boolean;
|
|
88
|
+
|
|
89
|
+
// on by default in dev
|
|
90
|
+
ENABLE_JOB_RUNNER?: boolean;
|
|
91
|
+
|
|
92
|
+
SENTRY_DSN?: string;
|
|
93
|
+
OTEL_EXPORTER_OTLP_ENDPOINT?: string;
|
|
94
|
+
ALERTS_SLACK_WEBHOOK_URL?: string;
|
|
95
|
+
|
|
96
|
+
SRPC_AUTH_SECRET?: string;
|
|
97
|
+
SRPC_AUTH_CLOCK_DRIFT_MS = 30_000;
|
|
98
|
+
|
|
99
|
+
HTTP_REQUEST_LOGGING_MODE: 'none' | 'e2e' | 'finish' | 'errors' = 'e2e';
|
|
100
|
+
|
|
101
|
+
HEALTHZ_ENABLE_REQUEST_LOGGING: boolean = false;
|
|
102
|
+
|
|
103
|
+
MAIL_FROM?: string;
|
|
104
|
+
MAIL_FROM_NAME?: string;
|
|
105
|
+
MAIL_PROVIDER: 'smtp' | 'postmark' = 'smtp';
|
|
106
|
+
SMTP_HOST: string = '127.0.0.1';
|
|
107
|
+
SMTP_PORT: number = 1025;
|
|
108
|
+
SMTP_USER?: string;
|
|
109
|
+
SMTP_PASSWORD_SECRET?: string;
|
|
110
|
+
SMTP_TLS: boolean = false;
|
|
111
|
+
POSTMARK_SECRET?: string;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export function isDevFeatureEnabled(envVar: boolean | string | undefined, defaultInDev: boolean = true): boolean {
|
|
115
|
+
if (typeof envVar === 'boolean') return envVar;
|
|
116
|
+
if (envVar === '0' || envVar === 'false') return false;
|
|
117
|
+
if (envVar === '1' || envVar === 'true') return true;
|
|
118
|
+
return isDevelopment || isTest ? defaultInDev : false;
|
|
119
|
+
}
|
package/src/app/const.ts
ADDED
package/src/app/dev.ts
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { App } from '@deepkit/app';
|
|
2
|
+
import { FrameworkModule } from '@deepkit/framework';
|
|
3
|
+
import { HttpRouter } from '@deepkit/http';
|
|
4
|
+
import { Logger, ScopedLogger } from '@deepkit/logger';
|
|
5
|
+
import { ReflectionKind } from '@deepkit/type';
|
|
6
|
+
import { OpenAPIDocument } from 'deepkit-openapi-core';
|
|
7
|
+
import { writeFile } from 'fs/promises';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import { stringify } from 'yaml';
|
|
10
|
+
|
|
11
|
+
import { createLogger } from '../services';
|
|
12
|
+
import { getAppConfig } from './resolver';
|
|
13
|
+
import { isDevFeatureEnabled } from './config';
|
|
14
|
+
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
|
+
export async function doDevPostAppStartup(app: App<any>) {
|
|
17
|
+
try {
|
|
18
|
+
const { DevConsoleStore } = await import('../devconsole/devconsole.store');
|
|
19
|
+
const store = DevConsoleStore.get();
|
|
20
|
+
if (store) {
|
|
21
|
+
const { DevConsoleSrpcServer } = await import('../devconsole/devconsole.ws');
|
|
22
|
+
const srpcServer = new DevConsoleSrpcServer(createLogger('DevConsole'));
|
|
23
|
+
store.onEvent = (type, data) => srpcServer.broadcast(type, data);
|
|
24
|
+
}
|
|
25
|
+
} catch (err) {
|
|
26
|
+
const logger = app.get(Logger);
|
|
27
|
+
logger.warn('Failed to start DevConsole SRPC server', err);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// this hook seems to run before the router even outputs HTTP routes, which means
|
|
31
|
+
// anything we output is hard for the developer to see. thus, we will run dev tooling
|
|
32
|
+
// with a delay.
|
|
33
|
+
setTimeout(() => doDelayedDevPostAppStartup(app), 250);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
37
|
+
export async function doDelayedDevPostAppStartup(app: App<any>) {
|
|
38
|
+
const config = getAppConfig();
|
|
39
|
+
|
|
40
|
+
logRoutesWithoutReturnType(app);
|
|
41
|
+
|
|
42
|
+
if (isDevFeatureEnabled(config.ENABLE_OPENAPI_SCHEMA)) {
|
|
43
|
+
dumpOpenApiSchema(app);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
48
|
+
export function logRoutesWithoutReturnType(app: App<any>) {
|
|
49
|
+
const router = app.get(HttpRouter);
|
|
50
|
+
const logger = app.get(Logger);
|
|
51
|
+
const routes = router.getRoutes();
|
|
52
|
+
for (const route of routes) {
|
|
53
|
+
if (!(route.action.module instanceof FrameworkModule)) {
|
|
54
|
+
if (!route.returnType || route.returnType.kind === ReflectionKind.any) {
|
|
55
|
+
let message = `No return type declared for ${route.httpMethods.join(',')} ${route.getFullPath()}`;
|
|
56
|
+
if (route.action.type === 'controller') {
|
|
57
|
+
message += ` (${route.action.controller.name} -> ${route.action.methodName})`;
|
|
58
|
+
}
|
|
59
|
+
logger.warn(message);
|
|
60
|
+
} else if (route.returnType.typeName === 'RedirectResponse' && !route.responses.length) {
|
|
61
|
+
route.responses.push({ statusCode: 302, description: '' });
|
|
62
|
+
} else if (route.returnType.typeName === 'EmptyResponse' && !route.responses.length) {
|
|
63
|
+
route.responses.push({ statusCode: 202, description: '' });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
70
|
+
export function serializeOpenApiSchema(app: App<any>) {
|
|
71
|
+
const router = app.get(HttpRouter);
|
|
72
|
+
const logger = app.get(Logger) as unknown as ScopedLogger;
|
|
73
|
+
const routes = router.getRoutes().filter(r => !r.getFullPath().startsWith('/_devconsole'));
|
|
74
|
+
const doc = new OpenAPIDocument(routes, logger, { contentTypes: ['application/json'] });
|
|
75
|
+
return doc.serializeDocument();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
79
|
+
export async function dumpOpenApiSchema(app: App<any>) {
|
|
80
|
+
const logger = app.get(Logger);
|
|
81
|
+
try {
|
|
82
|
+
const result = serializeOpenApiSchema(app);
|
|
83
|
+
const yaml = stringify(result, {
|
|
84
|
+
aliasDuplicateObjects: false
|
|
85
|
+
});
|
|
86
|
+
const yamlPath = path.join(process.cwd(), 'openapi.yaml');
|
|
87
|
+
await writeFile(yamlPath, yaml);
|
|
88
|
+
logger.info(`OpenAPI schema written to: ${yamlPath}`);
|
|
89
|
+
} catch (err) {
|
|
90
|
+
logger.error(`Failed to write OpenAPI schema`, err);
|
|
91
|
+
}
|
|
92
|
+
}
|
package/src/app/index.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ClassType } from '@deepkit/core';
|
|
2
|
+
import { globalState } from './state';
|
|
3
|
+
import { BaseAppConfig } from './config';
|
|
4
|
+
import { Injector, InjectorModule } from '@deepkit/injector';
|
|
5
|
+
|
|
6
|
+
const resolveCache = new WeakMap();
|
|
7
|
+
export function resolve<T>(type: ClassType<T>): T {
|
|
8
|
+
const cached = resolveCache.get(type);
|
|
9
|
+
if (cached) return cached;
|
|
10
|
+
|
|
11
|
+
const app = globalState.currentApp;
|
|
12
|
+
if (!app) throw new Error('No app initialized');
|
|
13
|
+
const resolved = app.get(type);
|
|
14
|
+
resolveCache.set(type, resolved);
|
|
15
|
+
return resolved as T;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const r = resolve;
|
|
19
|
+
|
|
20
|
+
export function resolveDeep<T>(type: ClassType<T>, fromModule: InjectorModule = getAppModule()): T | undefined {
|
|
21
|
+
if (fromModule.isProvided(type)) {
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
23
|
+
return getOrCreateInjectorForModule(fromModule).get(type as any);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (fromModule.imports?.length) {
|
|
27
|
+
for (const anImport of fromModule.imports) {
|
|
28
|
+
const result = resolveDeep(type, anImport);
|
|
29
|
+
if (result) return result;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function getOrCreateInjectorForModule(module: InjectorModule): Injector {
|
|
35
|
+
return globalState.currentApp!.getInjectorContext().getInjector(module);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function getApp() {
|
|
39
|
+
if (!globalState.currentApp) throw new Error('No app initialized');
|
|
40
|
+
return globalState.currentApp;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function getAppModule() {
|
|
44
|
+
return getApp().appModule;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function getAppConfig() {
|
|
48
|
+
return getAppModule().config as BaseAppConfig;
|
|
49
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { EventDispatcher, EventToken, eventDispatcher } from '@deepkit/event';
|
|
2
|
+
import { onServerBootstrapDone } from '@deepkit/framework';
|
|
3
|
+
import { Logger } from '@deepkit/logger';
|
|
4
|
+
|
|
5
|
+
export const onServerShutdownRequested = new EventToken('server.shutdown-requested');
|
|
6
|
+
|
|
7
|
+
export class ShutdownListener {
|
|
8
|
+
private shutdownPromise: Promise<void> | undefined;
|
|
9
|
+
|
|
10
|
+
constructor(
|
|
11
|
+
private eventDispatcher: EventDispatcher,
|
|
12
|
+
private logger: Logger
|
|
13
|
+
) {}
|
|
14
|
+
|
|
15
|
+
@eventDispatcher.listen(onServerBootstrapDone)
|
|
16
|
+
reconfigureShutdown(): void {
|
|
17
|
+
const sigtermListeners = process.listeners('SIGTERM');
|
|
18
|
+
const sigintListeners = process.listeners('SIGINT');
|
|
19
|
+
process.removeAllListeners('SIGTERM');
|
|
20
|
+
process.removeAllListeners('SIGINT');
|
|
21
|
+
|
|
22
|
+
process.on('SIGTERM', signal => {
|
|
23
|
+
this.handleShutdown()
|
|
24
|
+
.then(() => {
|
|
25
|
+
for (const listener of sigtermListeners) {
|
|
26
|
+
listener(signal);
|
|
27
|
+
}
|
|
28
|
+
})
|
|
29
|
+
.catch(err => {
|
|
30
|
+
this.logger.error('Error during shutdown', err as Error);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
process.on('SIGINT', signal => {
|
|
36
|
+
this.handleShutdown()
|
|
37
|
+
.then(() => {
|
|
38
|
+
for (const listener of sigintListeners) {
|
|
39
|
+
listener(signal);
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
.catch(err => {
|
|
43
|
+
this.logger.error('Error during shutdown', err as Error);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async handleShutdown(): Promise<void> {
|
|
50
|
+
if (!this.shutdownPromise) {
|
|
51
|
+
this.shutdownPromise = this.eventDispatcher.dispatch(onServerShutdownRequested);
|
|
52
|
+
}
|
|
53
|
+
return this.shutdownPromise;
|
|
54
|
+
}
|
|
55
|
+
}
|
package/src/app/state.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { App } from '@deepkit/app';
|
|
2
|
+
import { ClassType } from '@deepkit/core';
|
|
3
|
+
import { ReflectionClass, Type } from '@deepkit/type';
|
|
4
|
+
|
|
5
|
+
import type { BaseDatabase } from '../database';
|
|
6
|
+
|
|
7
|
+
export const globalState: {
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
|
+
currentApp?: App<any>;
|
|
10
|
+
enableWorker?: boolean;
|
|
11
|
+
isCliService?: boolean;
|
|
12
|
+
dbClass?: ClassType<BaseDatabase>;
|
|
13
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
14
|
+
additionalEntities: (Type | ClassType | ReflectionClass<any>)[];
|
|
15
|
+
} = { additionalEntities: [] };
|
|
16
|
+
|
|
17
|
+
export class DBProvider {
|
|
18
|
+
constructor(public db: BaseDatabase) {}
|
|
19
|
+
}
|
package/src/auth/jwt.ts
ADDED
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { HttpRequest, HttpResponse } from '@deepkit/http';
|
|
2
|
+
import { createPrivateKey, createPublicKey } from 'crypto';
|
|
3
|
+
import { Algorithm, Bufferable, createDecoder, createSigner, createVerifier, SignerPayload, SignerSync, TokenError, VerifierSync } from 'fast-jwt';
|
|
4
|
+
|
|
5
|
+
import { getAppConfig } from '../app/resolver';
|
|
6
|
+
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
8
|
+
type JwtExtras = Record<string, any>;
|
|
9
|
+
|
|
10
|
+
interface BaseJwtOptions {
|
|
11
|
+
issuer?: string;
|
|
12
|
+
audience?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface JwtCookieOptions {
|
|
16
|
+
secure?: boolean;
|
|
17
|
+
sameSite?: 'Strict' | 'Lax' | 'None';
|
|
18
|
+
domain?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface JwtGenerationOptions<T extends JwtExtras = object> extends BaseJwtOptions {
|
|
22
|
+
id?: string;
|
|
23
|
+
subject: string;
|
|
24
|
+
expiresAt?: Date | number;
|
|
25
|
+
expiryMins?: number;
|
|
26
|
+
payload?: T;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
interface VerifierOptions extends BaseJwtOptions {
|
|
30
|
+
key: string | Buffer;
|
|
31
|
+
algorithm: Algorithm;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export class ParsedJwt<T extends JwtExtras = object> {
|
|
35
|
+
readonly isValid = true;
|
|
36
|
+
id?: string;
|
|
37
|
+
issuer!: string;
|
|
38
|
+
audience?: string;
|
|
39
|
+
subject!: string;
|
|
40
|
+
issuedAtMs!: number;
|
|
41
|
+
get issuedAt() {
|
|
42
|
+
return new Date(this.issuedAtMs * 1000);
|
|
43
|
+
}
|
|
44
|
+
expiresAtMs!: number;
|
|
45
|
+
get expiresAt() {
|
|
46
|
+
return new Date(this.expiresAtMs * 1000);
|
|
47
|
+
}
|
|
48
|
+
payload!: T;
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
50
|
+
rawPayload!: Record<string, any>;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface InvalidJwtValidationResult {
|
|
54
|
+
isValid: false;
|
|
55
|
+
isDecodable: boolean;
|
|
56
|
+
isSignatureValid?: boolean;
|
|
57
|
+
isPayloadValid?: boolean;
|
|
58
|
+
isNotExpired?: boolean;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export type JwtValidationResult<T extends JwtExtras = object> = ParsedJwt<T> | InvalidJwtValidationResult;
|
|
62
|
+
|
|
63
|
+
interface JWTState {
|
|
64
|
+
shouldVerify: boolean;
|
|
65
|
+
issuerName: string;
|
|
66
|
+
validityMins: number;
|
|
67
|
+
cookieName: string;
|
|
68
|
+
cookieRe: RegExp;
|
|
69
|
+
signer: typeof SignerSync<SignerPayload>;
|
|
70
|
+
verifier: typeof VerifierSync<Bufferable>;
|
|
71
|
+
decoder: ReturnType<typeof createDecoder>;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const TokenErrorClasses = {
|
|
75
|
+
decode: [TokenError.codes.invalidPayload, TokenError.codes.malformed, TokenError.codes.invalidType],
|
|
76
|
+
verify: [TokenError.codes.verifyError, TokenError.codes.invalidSignature, TokenError.codes.invalidAlgorithm],
|
|
77
|
+
payload: [TokenError.codes.invalidClaimType, TokenError.codes.invalidClaimValue, TokenError.codes.missingRequiredClaim],
|
|
78
|
+
expiry: [TokenError.codes.expired, TokenError.codes.inactive]
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export class JWT {
|
|
82
|
+
private static _state?: JWTState;
|
|
83
|
+
|
|
84
|
+
private static get state() {
|
|
85
|
+
const appConfig = getAppConfig();
|
|
86
|
+
if (appConfig.AUTH_JWT_ENABLE_VERIFY) {
|
|
87
|
+
if (!appConfig.AUTH_JWT_SECRET && !appConfig.AUTH_JWT_SECRET_B64 && !appConfig.AUTH_JWT_ED_SECRET) {
|
|
88
|
+
throw new Error('AUTH_JWT_SECRET/AUTH_JWT_SECRET_B64/AUTH_JWT_ED_SECRET is not configured');
|
|
89
|
+
}
|
|
90
|
+
if (appConfig.AUTH_JWT_SECRET && appConfig.AUTH_JWT_SECRET_B64) {
|
|
91
|
+
throw new Error('AUTH_JWT_SECRET and AUTH_JWT_SECRET_B64 cannot both be configured');
|
|
92
|
+
}
|
|
93
|
+
if ((appConfig.AUTH_JWT_SECRET || appConfig.AUTH_JWT_SECRET_B64) && appConfig.AUTH_JWT_ED_SECRET) {
|
|
94
|
+
throw new Error('AUTH_JWT_SECRET/AUTH_JWT_SECRET_B64 and AUTH_JWT_ED_SECRET cannot both be configured');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const shouldVerify = appConfig.AUTH_JWT_ENABLE_VERIFY;
|
|
99
|
+
const cookieName = appConfig.AUTH_JWT_COOKIE_NAME ?? 'jwt';
|
|
100
|
+
const cookieRe = new RegExp('(^|;)[ ]*' + cookieName + '=([^;]+)');
|
|
101
|
+
const issuerName = appConfig.AUTH_JWT_ISSUER ?? 'app';
|
|
102
|
+
const validityMins = appConfig.AUTH_JWT_EXPIRATION_MINS ?? 60;
|
|
103
|
+
const getKey = () =>
|
|
104
|
+
appConfig.AUTH_JWT_SECRET_B64 ? Buffer.from(appConfig.AUTH_JWT_SECRET_B64, 'base64') : (appConfig.AUTH_JWT_SECRET ?? '');
|
|
105
|
+
const signer = createSigner(
|
|
106
|
+
appConfig.AUTH_JWT_ED_SECRET
|
|
107
|
+
? { algorithm: 'EdDSA', key: `-----BEGIN PRIVATE KEY-----\n${appConfig.AUTH_JWT_ED_SECRET}\n-----END PRIVATE KEY-----` }
|
|
108
|
+
: { key: getKey() }
|
|
109
|
+
);
|
|
110
|
+
const verifier = createVerifier({
|
|
111
|
+
cache: true,
|
|
112
|
+
allowedIss: issuerName,
|
|
113
|
+
...(appConfig.AUTH_JWT_ED_SECRET
|
|
114
|
+
? { algorithms: ['EdDSA'], key: this.deriveEdPublicKey(appConfig.AUTH_JWT_ED_SECRET) }
|
|
115
|
+
: { key: getKey() })
|
|
116
|
+
});
|
|
117
|
+
const decoder = createDecoder();
|
|
118
|
+
this._state = { shouldVerify, issuerName, validityMins, cookieName, cookieRe, signer, verifier, decoder };
|
|
119
|
+
|
|
120
|
+
Object.defineProperty(this, 'state', { value: this._state });
|
|
121
|
+
|
|
122
|
+
return this._state;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
private static deriveEdPublicKey(privateKey: string) {
|
|
126
|
+
const privateKeyObj = createPrivateKey({
|
|
127
|
+
key: `-----BEGIN PRIVATE KEY-----\n${privateKey}\n-----END PRIVATE KEY-----`,
|
|
128
|
+
format: 'pem',
|
|
129
|
+
type: 'pkcs8'
|
|
130
|
+
});
|
|
131
|
+
const publicKeyObj = createPublicKey({
|
|
132
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
133
|
+
key: privateKeyObj as any
|
|
134
|
+
});
|
|
135
|
+
return publicKeyObj.export({ type: 'spki', format: 'pem' });
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
static async generate<T extends JwtExtras>(options: JwtGenerationOptions<T>): Promise<string> {
|
|
139
|
+
return this.state.signer({
|
|
140
|
+
...(options.id ? { jti: options.id } : {}),
|
|
141
|
+
iss: options.issuer ?? this.state.issuerName,
|
|
142
|
+
aud: options.audience,
|
|
143
|
+
sub: options.subject,
|
|
144
|
+
exp: this.getExpirationTs(options),
|
|
145
|
+
...options.payload
|
|
146
|
+
});
|
|
147
|
+
// todo: ID
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
static async generateCookie<T extends JwtExtras>(options: JwtGenerationOptions<T>, response: HttpResponse, cookieOptions?: JwtCookieOptions) {
|
|
151
|
+
const payload = await this.generate(options);
|
|
152
|
+
response.setHeader('set-cookie', `${this.state.cookieName}=${payload}; ${this.buildCookieAttributes(cookieOptions)}`);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
static async clearCookie(response: HttpResponse, cookieOptions?: JwtCookieOptions) {
|
|
156
|
+
response.setHeader(
|
|
157
|
+
'set-cookie',
|
|
158
|
+
`${this.state.cookieName}=invalid; Expires=Thu, 01 Jan 1970 00:00:00 GMT; ${this.buildCookieAttributes(cookieOptions)}`
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
private static buildCookieAttributes(options?: JwtCookieOptions): string {
|
|
163
|
+
const parts = ['Path=/; HttpOnly'];
|
|
164
|
+
if (options?.secure !== false) parts.push('Secure');
|
|
165
|
+
parts.push(`SameSite=${options?.sameSite ?? 'Lax'}`);
|
|
166
|
+
if (options?.domain) parts.push(`Domain=${options.domain}`);
|
|
167
|
+
return parts.join('; ');
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
static createVerifier<T extends JwtExtras = object>(options: VerifierOptions): (token: string) => Promise<JwtValidationResult<T>> {
|
|
171
|
+
const verifier = createVerifier({
|
|
172
|
+
cache: true,
|
|
173
|
+
allowedIss: options.issuer,
|
|
174
|
+
allowedAud: options.audience,
|
|
175
|
+
algorithms: [options.algorithm],
|
|
176
|
+
key:
|
|
177
|
+
typeof options.key === 'string' && !options.key.startsWith('-----BEGIN PUBLIC KEY-----') && options.algorithm === 'EdDSA'
|
|
178
|
+
? `-----BEGIN PUBLIC KEY-----\n${options.key}\n-----END PUBLIC KEY-----`
|
|
179
|
+
: options.key
|
|
180
|
+
});
|
|
181
|
+
return async (token: string) => this.verify(token, verifier);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
static async verify<T extends JwtExtras = object>(token: string, verifier?: JWTState['verifier']): Promise<JwtValidationResult<T>> {
|
|
185
|
+
try {
|
|
186
|
+
verifier = verifier ?? this.state.verifier;
|
|
187
|
+
const result = await verifier(token);
|
|
188
|
+
return this.formatJwtResult<T>(result);
|
|
189
|
+
} catch (err) {
|
|
190
|
+
return this.formatJwtError(err);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
static async decode<T extends JwtExtras = object>(token: string): Promise<JwtValidationResult<T>> {
|
|
195
|
+
try {
|
|
196
|
+
const result = await this.state.decoder(token);
|
|
197
|
+
return this.formatJwtResult<T>(result);
|
|
198
|
+
} catch (err) {
|
|
199
|
+
return this.formatJwtError(err);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
204
|
+
private static formatJwtResult<T extends JwtExtras = object>(result: any): JwtValidationResult<T> {
|
|
205
|
+
const formatted = new ParsedJwt<T>();
|
|
206
|
+
const { jti, sub, iss, aud, iat, exp, ...payload } = result;
|
|
207
|
+
Object.assign(formatted, {
|
|
208
|
+
id: jti,
|
|
209
|
+
subject: sub,
|
|
210
|
+
issuer: iss,
|
|
211
|
+
audience: aud,
|
|
212
|
+
issuedAtMs: iat,
|
|
213
|
+
expiresAtMs: exp,
|
|
214
|
+
payload,
|
|
215
|
+
rawPayload: result
|
|
216
|
+
});
|
|
217
|
+
return formatted;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
221
|
+
private static formatJwtError(err: any): InvalidJwtValidationResult {
|
|
222
|
+
if (err instanceof TokenError) {
|
|
223
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
224
|
+
if (TokenErrorClasses.decode.includes(err.code as any)) {
|
|
225
|
+
return { isValid: false, isDecodable: false };
|
|
226
|
+
}
|
|
227
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
228
|
+
if (TokenErrorClasses.verify.includes(err.code as any)) {
|
|
229
|
+
return { isValid: false, isDecodable: true, isSignatureValid: false };
|
|
230
|
+
}
|
|
231
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
232
|
+
if (TokenErrorClasses.payload.includes(err.code as any)) {
|
|
233
|
+
return { isValid: false, isDecodable: true, isSignatureValid: true, isPayloadValid: false };
|
|
234
|
+
}
|
|
235
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
236
|
+
if (TokenErrorClasses.expiry.includes(err.code as any)) {
|
|
237
|
+
return { isValid: false, isDecodable: true, isSignatureValid: true, isPayloadValid: true, isNotExpired: false };
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
throw err;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
static async process(token: string) {
|
|
244
|
+
return this.state.shouldVerify ? this.verify(token) : this.decode(token);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
static async processWithRequest(request: HttpRequest): Promise<JwtValidationResult | null> {
|
|
248
|
+
if (request.headers.authorization) {
|
|
249
|
+
if (request.headers.authorization.startsWith('Bearer ')) {
|
|
250
|
+
const result = await this.process(request.headers.authorization.substring(7));
|
|
251
|
+
if (result.isValid) {
|
|
252
|
+
return result;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
if (request.headers.cookie) {
|
|
258
|
+
const matches = request.headers.cookie.match(this.state.cookieRe);
|
|
259
|
+
if (matches) {
|
|
260
|
+
const result = await this.process(matches[2]);
|
|
261
|
+
if (result.isValid) {
|
|
262
|
+
return result;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
private static getExpirationTs(options: JwtGenerationOptions) {
|
|
271
|
+
const expiresMsIn = options.expiresAt instanceof Date ? options.expiresAt.getTime() : options.expiresAt;
|
|
272
|
+
const expiresMs = expiresMsIn ?? Date.now() + (options.expiryMins ?? this.state.validityMins) * 60 * 1000;
|
|
273
|
+
return Math.floor(expiresMs / 1000);
|
|
274
|
+
}
|
|
275
|
+
}
|