@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,322 @@
|
|
|
1
|
+
# Helpers
|
|
2
|
+
|
|
3
|
+
Organized utility functions for common patterns: async context, Redis operations, cryptography, data manipulation, and more.
|
|
4
|
+
|
|
5
|
+
## Async
|
|
6
|
+
|
|
7
|
+
### AsyncContext
|
|
8
|
+
|
|
9
|
+
Request-scoped context using `AsyncLocalStorage`:
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
import { withContext, withContextData, getContextProp, setContextProp, removeContextProp } from '@zyno-io/dk-server-foundation';
|
|
13
|
+
|
|
14
|
+
// Run code within a context
|
|
15
|
+
await withContext(async () => {
|
|
16
|
+
setContextProp('userId', '123');
|
|
17
|
+
|
|
18
|
+
// Available in any nested async call
|
|
19
|
+
const userId = getContextProp<string>('userId');
|
|
20
|
+
|
|
21
|
+
removeContextProp('userId');
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// Run with initial data
|
|
25
|
+
await withContextData({ reqId: 'abc', traceId: 'xyz' }, async () => {
|
|
26
|
+
const reqId = getContextProp<string>('reqId');
|
|
27
|
+
});
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Semaphore
|
|
31
|
+
|
|
32
|
+
One-time use semaphore for coordinating async operations:
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import { createSemaphore } from '@zyno-io/dk-server-foundation';
|
|
36
|
+
|
|
37
|
+
const { release, promise } = createSemaphore();
|
|
38
|
+
|
|
39
|
+
// In one place: wait for release
|
|
40
|
+
await promise;
|
|
41
|
+
|
|
42
|
+
// In another place: signal completion
|
|
43
|
+
release();
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Process Execution
|
|
47
|
+
|
|
48
|
+
Execute child processes with OpenTelemetry tracing:
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
import { execProcess } from '@zyno-io/dk-server-foundation';
|
|
52
|
+
|
|
53
|
+
const result = await execProcess('git', ['status'], {
|
|
54
|
+
cwd: '/path/to/repo',
|
|
55
|
+
errorOnNonZero: true
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
console.log(result.code); // Exit code
|
|
59
|
+
console.log(result.stdout.toString()); // stdout
|
|
60
|
+
console.log(result.stderr.toString()); // stderr
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Options:
|
|
64
|
+
|
|
65
|
+
| Option | Type | Default | Description |
|
|
66
|
+
| ---------------- | ---------------- | ------- | ---------------------------- |
|
|
67
|
+
| `cwd` | `string` | — | Working directory |
|
|
68
|
+
| `errorOnNonZero` | `boolean` | `false` | Throw on non-zero exit code |
|
|
69
|
+
| `stdio` | — | — | Node.js stdio configuration |
|
|
70
|
+
| `onSpawn` | `(proc) => void` | — | Callback when process spawns |
|
|
71
|
+
| `shell` | `boolean` | — | Run in shell |
|
|
72
|
+
|
|
73
|
+
## Data
|
|
74
|
+
|
|
75
|
+
### Array Utilities
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
import { toArray, asyncMap } from '@zyno-io/dk-server-foundation';
|
|
79
|
+
|
|
80
|
+
toArray('single'); // ['single']
|
|
81
|
+
toArray([1, 2, 3]); // [1, 2, 3]
|
|
82
|
+
|
|
83
|
+
// Sequential async map
|
|
84
|
+
const results = await asyncMap(items, async (item, index) => {
|
|
85
|
+
return await processItem(item);
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Object Utilities
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
import { objectKeys, objectEntries, extractValues, extractUpdates, patchObject, extractKV } from '@zyno-io/dk-server-foundation';
|
|
93
|
+
|
|
94
|
+
// Type-safe Object.keys/entries
|
|
95
|
+
const keys = objectKeys(myObj); // (keyof typeof myObj)[]
|
|
96
|
+
const entries = objectEntries(myObj); // [keyof typeof myObj, ValueType][]
|
|
97
|
+
|
|
98
|
+
// Extract specific fields
|
|
99
|
+
const subset = extractValues(user, ['name', 'email'] as const);
|
|
100
|
+
// { name: 'Alice', email: 'a@b.com' }
|
|
101
|
+
|
|
102
|
+
// Extract only changed fields
|
|
103
|
+
const updates = extractUpdates(originalUser, { name: 'Bob', email: 'a@b.com' });
|
|
104
|
+
// { name: 'Bob' } (email unchanged)
|
|
105
|
+
|
|
106
|
+
// Apply partial updates
|
|
107
|
+
const updated = patchObject(user, { name: 'Bob' });
|
|
108
|
+
|
|
109
|
+
// Convert array to key-value map
|
|
110
|
+
const map = extractKV(users, 'id', 'name');
|
|
111
|
+
// { '1': 'Alice', '2': 'Bob' }
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Transformer Pipelines
|
|
115
|
+
|
|
116
|
+
Chainable data transformation pipelines:
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
import { Transformer } from '@zyno-io/dk-server-foundation';
|
|
120
|
+
|
|
121
|
+
const result = await Transformer.create(users)
|
|
122
|
+
.apply(users => users.filter(u => u.active))
|
|
123
|
+
.applyEach(user => ({ ...user, displayName: `${user.first} ${user.last}` }))
|
|
124
|
+
.applyEachAsync(async user => ({
|
|
125
|
+
...user,
|
|
126
|
+
avatar: await getAvatar(user.id)
|
|
127
|
+
}))
|
|
128
|
+
.narrow('id', 'displayName', 'avatar')
|
|
129
|
+
.get();
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
| Method | Description |
|
|
133
|
+
| ---------------------------------- | --------------------------------------- |
|
|
134
|
+
| `apply(fn, shouldApply?)` | Transform the entire array |
|
|
135
|
+
| `applyEach(fn, shouldApply?)` | Transform each item synchronously |
|
|
136
|
+
| `applyEachAsync(fn, shouldApply?)` | Transform each item asynchronously |
|
|
137
|
+
| `narrow(...keys)` | Select specific fields |
|
|
138
|
+
| `get()` | Execute the pipeline and return results |
|
|
139
|
+
|
|
140
|
+
### Serialization
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
import { toJson, fromJson } from '@zyno-io/dk-server-foundation';
|
|
144
|
+
|
|
145
|
+
const json = toJson({ key: 'value' });
|
|
146
|
+
const obj = fromJson<MyType>(json);
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Security
|
|
150
|
+
|
|
151
|
+
### Cryptography
|
|
152
|
+
|
|
153
|
+
AES-256-GCM encryption and random generation:
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
import { Crypto, randomBytes, randomString, randomBytesSync, randomStringSync } from '@zyno-io/dk-server-foundation';
|
|
157
|
+
|
|
158
|
+
// AES-256-GCM encryption (requires CRYPTO_SECRET)
|
|
159
|
+
const encrypted = Crypto.encrypt('sensitive data');
|
|
160
|
+
const decrypted = Crypto.decrypt(encrypted);
|
|
161
|
+
|
|
162
|
+
// Also works with Buffers
|
|
163
|
+
const encBuf = Crypto.encrypt(Buffer.from('data'));
|
|
164
|
+
const decBuf = Crypto.decrypt(encBuf);
|
|
165
|
+
|
|
166
|
+
// Random bytes
|
|
167
|
+
const bytes = await randomBytes(32);
|
|
168
|
+
const hex = await randomBytes(32, true); // Returns hex string
|
|
169
|
+
|
|
170
|
+
// Random strings
|
|
171
|
+
const token = await randomString(32); // Alphanumeric
|
|
172
|
+
const pin = await randomString(6, NumericCharacters);
|
|
173
|
+
|
|
174
|
+
// Synchronous variants
|
|
175
|
+
const bytesSync = randomBytesSync(32);
|
|
176
|
+
const tokenSync = randomStringSync(32);
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Character sets:
|
|
180
|
+
|
|
181
|
+
| Constant | Characters |
|
|
182
|
+
| --------------------------------- | ------------ |
|
|
183
|
+
| `PrintableCharacters` | ASCII 32-126 |
|
|
184
|
+
| `AlphanumericCharacters` | a-zA-Z0-9 |
|
|
185
|
+
| `UpperCaseAlphanumericCharacters` | A-Z0-9 |
|
|
186
|
+
| `NumericCharacters` | 0-9 |
|
|
187
|
+
|
|
188
|
+
### Validation
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
import { validateOrThrow, assertInput } from '@zyno-io/dk-server-foundation';
|
|
192
|
+
|
|
193
|
+
// Validate with Deepkit types (throws ValidationError)
|
|
194
|
+
validateOrThrow<MyType>(data);
|
|
195
|
+
|
|
196
|
+
// Assert non-null/undefined (throws HttpBadRequestError)
|
|
197
|
+
assertInput(value);
|
|
198
|
+
assertInput(value, 'fieldName'); // Custom field name in error
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Framework
|
|
202
|
+
|
|
203
|
+
### Decorator Utilities
|
|
204
|
+
|
|
205
|
+
```typescript
|
|
206
|
+
import { createSymbolAttachmentClassDecorator, createRegistryClassDecorator, getRegisteredClasses } from '@zyno-io/dk-server-foundation';
|
|
207
|
+
|
|
208
|
+
// Registry decorator pattern
|
|
209
|
+
const PLUGINS = Symbol('plugins');
|
|
210
|
+
const Plugin = createRegistryClassDecorator(PLUGINS);
|
|
211
|
+
|
|
212
|
+
@Plugin()
|
|
213
|
+
class MyPlugin {
|
|
214
|
+
/* ... */
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const plugins = getRegisteredClasses<typeof MyPlugin>(PLUGINS);
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Event Handler Inheritance
|
|
221
|
+
|
|
222
|
+
Copy Deepkit event listeners from a parent class:
|
|
223
|
+
|
|
224
|
+
```typescript
|
|
225
|
+
import { applyParentEventHandlers } from '@zyno-io/dk-server-foundation';
|
|
226
|
+
|
|
227
|
+
class ChildListener extends ParentListener {
|
|
228
|
+
// Inherit parent's @eventDispatcher.listen() handlers
|
|
229
|
+
}
|
|
230
|
+
applyParentEventHandlers(ChildListener);
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### DI Introspection
|
|
234
|
+
|
|
235
|
+
```typescript
|
|
236
|
+
import { getProviderTree } from '@zyno-io/dk-server-foundation';
|
|
237
|
+
|
|
238
|
+
const tree = getProviderTree(appModule);
|
|
239
|
+
// Returns provider tree with names and modules
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## I/O
|
|
243
|
+
|
|
244
|
+
### Package Metadata
|
|
245
|
+
|
|
246
|
+
```typescript
|
|
247
|
+
import { getPackageJson, getPackageVersion, getPackageName } from '@zyno-io/dk-server-foundation';
|
|
248
|
+
|
|
249
|
+
const pkg = getPackageJson(); // Memoized package.json
|
|
250
|
+
const version = getPackageVersion(); // e.g., '1.2.3'
|
|
251
|
+
const name = getPackageName(); // e.g., '@zyno-io/my-app'
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Stream Utilities
|
|
255
|
+
|
|
256
|
+
```typescript
|
|
257
|
+
import { safePipe, withResourceCleanup, PipeError } from '@zyno-io/dk-server-foundation';
|
|
258
|
+
|
|
259
|
+
// Promise-based pipe with error handling
|
|
260
|
+
await safePipe(readableStream, writableStream);
|
|
261
|
+
|
|
262
|
+
// Automatic cleanup of files and streams
|
|
263
|
+
await withResourceCleanup(async tracker => {
|
|
264
|
+
tracker.addFile('/tmp/upload.tmp');
|
|
265
|
+
tracker.addStream(createReadStream('/tmp/upload.tmp'));
|
|
266
|
+
// Files deleted and streams destroyed on exit (even on error)
|
|
267
|
+
});
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
## Utils
|
|
271
|
+
|
|
272
|
+
### Date Utilities
|
|
273
|
+
|
|
274
|
+
```typescript
|
|
275
|
+
import { extractDate, sleepMs, sleepSecs } from '@zyno-io/dk-server-foundation';
|
|
276
|
+
|
|
277
|
+
extractDate(new Date()); // '2024-01-15'
|
|
278
|
+
await sleepMs(500); // Sleep 500ms
|
|
279
|
+
await sleepSecs(2); // Sleep 2 seconds
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### Error Handling
|
|
283
|
+
|
|
284
|
+
```typescript
|
|
285
|
+
import { isError, getErrorMessage, toError, tryOrError, tryOrErrorSync, reportError, setGlobalErrorReporter } from '@zyno-io/dk-server-foundation';
|
|
286
|
+
|
|
287
|
+
isError(value); // Type guard
|
|
288
|
+
getErrorMessage(value); // Extract message from any value
|
|
289
|
+
toError(value, cause); // Convert to Error with optional cause
|
|
290
|
+
|
|
291
|
+
// Catch errors as values
|
|
292
|
+
const result = await tryOrError(async () => riskyOperation());
|
|
293
|
+
if (isError(result)) {
|
|
294
|
+
/* handle */
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// Report errors to Sentry and Slack
|
|
298
|
+
reportError('error', err, { scope: 'payments', data: { orderId: 123 } });
|
|
299
|
+
|
|
300
|
+
// Override the global error reporter
|
|
301
|
+
setGlobalErrorReporter((level, err, context) => {
|
|
302
|
+
// Custom error handling
|
|
303
|
+
});
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### UUID v7
|
|
307
|
+
|
|
308
|
+
```typescript
|
|
309
|
+
import { uuid7, uuid7FromDate } from '@zyno-io/dk-server-foundation';
|
|
310
|
+
|
|
311
|
+
const id = uuid7(); // Time-ordered UUID
|
|
312
|
+
const id = uuid7FromDate(new Date('2024-01-01')); // UUID from specific date
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### JSX Rendering
|
|
316
|
+
|
|
317
|
+
```typescript
|
|
318
|
+
import { jsxToHtml } from '@zyno-io/dk-server-foundation';
|
|
319
|
+
|
|
320
|
+
const html = await jsxToHtml(<div class="wrapper"><h1>Hello</h1></div>);
|
|
321
|
+
// Renders Deepkit JSX templates to HTML strings
|
|
322
|
+
```
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
# HTTP
|
|
2
|
+
|
|
3
|
+
Custom HTTP layer built on Deepkit's HTTP module with an enhanced kernel, middleware system, error handling, CORS, file uploads, and request-scoped caching.
|
|
4
|
+
|
|
5
|
+
## Custom HTTP Kernel
|
|
6
|
+
|
|
7
|
+
`CustomHttpKernel` replaces Deepkit's default kernel with:
|
|
8
|
+
|
|
9
|
+
- Configurable request logging (mode set via `HTTP_REQUEST_LOGGING_MODE`)
|
|
10
|
+
- Request duration tracking
|
|
11
|
+
- Active request counting
|
|
12
|
+
- AsyncContext integration (request ID, trace ID)
|
|
13
|
+
- Abort detection for incomplete requests
|
|
14
|
+
|
|
15
|
+
### Logging Modes
|
|
16
|
+
|
|
17
|
+
| Mode | Description |
|
|
18
|
+
| -------- | ---------------------------- |
|
|
19
|
+
| `e2e` | Log at request start and end |
|
|
20
|
+
| `finish` | Log only at request end |
|
|
21
|
+
| `errors` | Log only errors |
|
|
22
|
+
| `none` | No request logging |
|
|
23
|
+
|
|
24
|
+
Set via `HTTP_REQUEST_LOGGING_MODE` environment variable. Health check logging can be disabled separately with `HEALTHZ_ENABLE_REQUEST_LOGGING=false`.
|
|
25
|
+
|
|
26
|
+
## Middleware
|
|
27
|
+
|
|
28
|
+
Extend `HttpMiddleware` for middleware that properly handles HTTP errors and injects CORS headers into error responses:
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
import { HttpMiddleware } from '@zyno-io/dk-server-foundation';
|
|
32
|
+
|
|
33
|
+
class RateLimitMiddleware extends HttpMiddleware {
|
|
34
|
+
async handle(request: HttpRequest, response: HttpResponse) {
|
|
35
|
+
const ip = request.getRemoteAddress();
|
|
36
|
+
if (await isRateLimited(ip)) {
|
|
37
|
+
throw new HttpError(429, 'Too many requests');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Deepkit's default middleware returns 404 on errors -- this base class fixes that behavior.
|
|
44
|
+
|
|
45
|
+
### Debug Middleware
|
|
46
|
+
|
|
47
|
+
`HttpLogPayloadMiddleware` logs request method, URL, content-type, and body for debugging.
|
|
48
|
+
|
|
49
|
+
## CORS
|
|
50
|
+
|
|
51
|
+
Multi-origin CORS support with regex matching.
|
|
52
|
+
|
|
53
|
+
### Single Origin
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
const app = createApp({
|
|
57
|
+
cors: config => ({
|
|
58
|
+
hosts: ['https://myapp.com'],
|
|
59
|
+
credentials: true
|
|
60
|
+
})
|
|
61
|
+
});
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Multiple Origins
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
const app = createApp({
|
|
68
|
+
cors: config => [
|
|
69
|
+
{
|
|
70
|
+
hosts: ['https://app.example.com', /https:\/\/.*\.example\.com/],
|
|
71
|
+
credentials: true
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
hosts: ['https://api.partner.com'],
|
|
75
|
+
paths: [/^\/api\/partner/],
|
|
76
|
+
methods: ['GET', 'POST']
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### `HttpCorsOptions`
|
|
83
|
+
|
|
84
|
+
| Property | Type | Description |
|
|
85
|
+
| --------------- | ---------------------- | ------------------------------- |
|
|
86
|
+
| `hosts` | `(string \| RegExp)[]` | Allowed origins |
|
|
87
|
+
| `paths` | `(string \| RegExp)[]` | Restrict CORS to specific paths |
|
|
88
|
+
| `methods` | `string[]` | Allowed HTTP methods |
|
|
89
|
+
| `credentials` | `boolean` | Allow credentials |
|
|
90
|
+
| `allowHeaders` | `string[]` | Allowed request headers |
|
|
91
|
+
| `exposeHeaders` | `string[]` | Exposed response headers |
|
|
92
|
+
|
|
93
|
+
CORS headers are precomputed early in the request workflow and injected into responses, including error responses from middleware.
|
|
94
|
+
|
|
95
|
+
## Error Handling
|
|
96
|
+
|
|
97
|
+
### Built-in HTTP Errors
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
import { HttpUserError, HttpDetailedAccessDeniedError } from '@zyno-io/dk-server-foundation';
|
|
101
|
+
|
|
102
|
+
// 422 - User error
|
|
103
|
+
throw new HttpUserError('Invalid email format');
|
|
104
|
+
|
|
105
|
+
// 403 - Access denied with custom message
|
|
106
|
+
throw new HttpDetailedAccessDeniedError('Insufficient permissions for this resource');
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Error Response Format
|
|
110
|
+
|
|
111
|
+
All errors are returned as JSON:
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
{ "error": "Error message here" }
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
The workflow listener standardizes error handling:
|
|
118
|
+
|
|
119
|
+
- Validation errors in route parameters -> HTTP 400
|
|
120
|
+
- JSON parse errors -> HTTP 400
|
|
121
|
+
- Validation errors in controllers -> HTTP 500 (internal error)
|
|
122
|
+
- Non-HTTP errors are decorated with request body context for debugging (when enabled)
|
|
123
|
+
|
|
124
|
+
### Request Body Logging
|
|
125
|
+
|
|
126
|
+
By default, the workflow listener attaches the request body to non-HTTP errors for debugging. This is controlled by `HttpWorkflowListenerOptions`:
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
import { HttpWorkflowListenerOptions } from '@zyno-io/dk-server-foundation';
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
| Property | Type | Default |
|
|
133
|
+
| ----------------------- | --------- | -------------------------------------------- |
|
|
134
|
+
| `logRequestBodyOnError` | `boolean` | `true` in development, `false` in production |
|
|
135
|
+
|
|
136
|
+
When `NODE_ENV=production`, request body logging is disabled to avoid leaking sensitive data. Override by providing `HttpWorkflowListenerOptions` as a DI provider:
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
const app = createApp({
|
|
140
|
+
providers: [{ provide: HttpWorkflowListenerOptions, useValue: Object.assign(new HttpWorkflowListenerOptions(), { logRequestBodyOnError: true }) }]
|
|
141
|
+
});
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Response Type Helpers
|
|
145
|
+
|
|
146
|
+
The library exports type aliases used as return type annotations on controller methods:
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
import { OkResponse, RedirectResponse, EmptyResponse, AnyResponse } from '@zyno-io/dk-server-foundation';
|
|
150
|
+
|
|
151
|
+
class MyController {
|
|
152
|
+
// Return { ok: true }
|
|
153
|
+
@http.POST('/action')
|
|
154
|
+
async doAction(): OkResponse {
|
|
155
|
+
// ... perform action ...
|
|
156
|
+
return OkResponse; // the exported const { ok: true }
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Redirect (return type annotation)
|
|
160
|
+
@http.GET('/old-path')
|
|
161
|
+
async redirect(): RedirectResponse {
|
|
162
|
+
// Use Deepkit's redirect mechanism
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Empty response (return type annotation)
|
|
166
|
+
@http.DELETE('/resource/:id')
|
|
167
|
+
async delete(): EmptyResponse {
|
|
168
|
+
// ...
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Any response (bypasses serialization)
|
|
172
|
+
@http.GET('/raw')
|
|
173
|
+
async raw(): AnyResponse {
|
|
174
|
+
// ...
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
`OkResponse` is also exported as a const value `{ ok: true }` for convenience.
|
|
180
|
+
|
|
181
|
+
## File Uploads
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
import { FileUpload } from '@zyno-io/dk-server-foundation';
|
|
185
|
+
|
|
186
|
+
class UploadController {
|
|
187
|
+
@http.POST('/upload')
|
|
188
|
+
async upload(file: FileUpload) {
|
|
189
|
+
console.log(file.path); // Temporary file path
|
|
190
|
+
console.log(file.size); // Size in bytes
|
|
191
|
+
console.log(file.type); // MIME type
|
|
192
|
+
console.log(file.originalName); // Original filename
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Multipart forms use `_payload` as the JSON key for non-file fields.
|
|
198
|
+
|
|
199
|
+
## Request-Scoped Caching
|
|
200
|
+
|
|
201
|
+
Cache expensive computations per request to avoid redundant database lookups:
|
|
202
|
+
|
|
203
|
+
```typescript
|
|
204
|
+
import { getOrCacheValue, getCachedValue } from '@zyno-io/dk-server-foundation';
|
|
205
|
+
|
|
206
|
+
const USER_KEY = Symbol('user');
|
|
207
|
+
|
|
208
|
+
// Compute and cache
|
|
209
|
+
const user = await getOrCacheValue(request, USER_KEY, async () => {
|
|
210
|
+
return await db.query(User).filter({ id: userId }).findOne();
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
// Retrieve cached value later in the same request
|
|
214
|
+
const cachedUser = getCachedValue(request, USER_KEY);
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Parameter Resolvers
|
|
218
|
+
|
|
219
|
+
Create Deepkit route parameter resolvers that cache their results:
|
|
220
|
+
|
|
221
|
+
```typescript
|
|
222
|
+
import { createCachingParameterResolver } from '@zyno-io/dk-server-foundation';
|
|
223
|
+
|
|
224
|
+
const CurrentUserResolver = createCachingParameterResolver(USER_KEY, async context => {
|
|
225
|
+
// context is RouteParameterResolverContext (has .request, .type, etc.)
|
|
226
|
+
const jwt = await getJwtFromRequest(context.request);
|
|
227
|
+
return await db.query(User).filter({ id: jwt.subject }).findOne();
|
|
228
|
+
});
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## Real IP Support
|
|
232
|
+
|
|
233
|
+
When behind a reverse proxy, enable `x-real-ip` header support:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
USE_REAL_IP_HEADER=true
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
This overrides `HttpRequest.getRemoteAddress()` to return the value from the `x-real-ip` header.
|
|
240
|
+
|
|
241
|
+
## HTTP Context
|
|
242
|
+
|
|
243
|
+
The HTTP context provides request-scoped data that flows through AsyncContext:
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
import { setHttpContextResolver } from '@zyno-io/dk-server-foundation';
|
|
247
|
+
|
|
248
|
+
// Override the default context provider (which generates a reqId)
|
|
249
|
+
setHttpContextResolver(request => ({
|
|
250
|
+
reqId: generateRequestId(),
|
|
251
|
+
tenantId: request.headers['x-tenant-id']
|
|
252
|
+
}));
|
|
253
|
+
```
|