@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,147 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: home
|
|
3
|
+
|
|
4
|
+
hero:
|
|
5
|
+
name: '@zyno-io/dk-server-foundation'
|
|
6
|
+
text: 'Server Foundation Library'
|
|
7
|
+
tagline: TypeScript foundation library built on Deepkit for building robust server applications
|
|
8
|
+
image:
|
|
9
|
+
src: /images/devconsole/01-dashboard.png
|
|
10
|
+
alt: DevConsole Dashboard
|
|
11
|
+
actions:
|
|
12
|
+
- theme: brand
|
|
13
|
+
text: Get Started
|
|
14
|
+
link: /getting-started
|
|
15
|
+
- theme: alt
|
|
16
|
+
text: View on GitHub
|
|
17
|
+
link: https://github.com/zyno-io/dk-server-foundation
|
|
18
|
+
|
|
19
|
+
features:
|
|
20
|
+
- icon: 🗄️
|
|
21
|
+
title: Database ORM
|
|
22
|
+
details: MySQL/PostgreSQL support with transactions, hooks, session locks, and automatic migrations
|
|
23
|
+
- icon: 🌐
|
|
24
|
+
title: HTTP Server
|
|
25
|
+
details: Custom HTTP kernel with middleware, CORS, file uploads, and OpenAPI documentation
|
|
26
|
+
- icon: 🔐
|
|
27
|
+
title: Authentication
|
|
28
|
+
details: JWT (HS256/EdDSA) and HTTP Basic Auth with entity resolution and password hashing
|
|
29
|
+
- icon: ⚙️
|
|
30
|
+
title: Background Workers
|
|
31
|
+
details: BullMQ-based job processing with decorators, cron scheduling, and leader-elected recording
|
|
32
|
+
- icon: 🔌
|
|
33
|
+
title: WebSocket RPC
|
|
34
|
+
details: Bidirectional SRPC with HMAC auth, ts-proto code generation, and binary streams
|
|
35
|
+
- icon: 📊
|
|
36
|
+
title: Telemetry
|
|
37
|
+
details: OpenTelemetry auto-instrumentation for HTTP, database, Redis, DNS, and BullMQ
|
|
38
|
+
- icon: 🏥
|
|
39
|
+
title: Health Checks
|
|
40
|
+
details: Extensible health check service with automatic database monitoring
|
|
41
|
+
- icon: 🛠️
|
|
42
|
+
title: DevConsole
|
|
43
|
+
details: Built-in web dashboard for development with HTTP inspector, REPL, and more
|
|
44
|
+
- icon: 📧
|
|
45
|
+
title: Mail Service
|
|
46
|
+
details: Email sending via Postmark or SMTP with template system
|
|
47
|
+
- icon: 🔒
|
|
48
|
+
title: Distributed Systems
|
|
49
|
+
details: Leader election and mesh networking for coordinated multi-instance deployments
|
|
50
|
+
- icon: 🧪
|
|
51
|
+
title: Testing Utilities
|
|
52
|
+
details: Test facades with per-test database isolation, fixtures, and request mocking
|
|
53
|
+
- icon: 📝
|
|
54
|
+
title: Comprehensive Logging
|
|
55
|
+
details: Scoped Pino logger with async context tracking and structured data
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Quick Start
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
npm install @zyno-io/dk-server-foundation
|
|
62
|
+
# or
|
|
63
|
+
yarn add @zyno-io/dk-server-foundation
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
import { createApp, BaseAppConfig, createMySQLDatabase } from '@zyno-io/dk-server-foundation';
|
|
68
|
+
|
|
69
|
+
class AppConfig extends BaseAppConfig {
|
|
70
|
+
MY_SETTING!: string;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
class MyDB extends createMySQLDatabase({}, [UserEntity]) {}
|
|
74
|
+
|
|
75
|
+
const app = createApp({
|
|
76
|
+
config: AppConfig,
|
|
77
|
+
db: MyDB,
|
|
78
|
+
cors: config => ({ hosts: ['https://example.com'], credentials: true }),
|
|
79
|
+
controllers: [UserController],
|
|
80
|
+
providers: [UserService]
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
app.run();
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## DevConsole Screenshots
|
|
87
|
+
|
|
88
|
+
The built-in DevConsole provides a comprehensive development dashboard:
|
|
89
|
+
|
|
90
|
+
### Dashboard
|
|
91
|
+
|
|
92
|
+

|
|
93
|
+
|
|
94
|
+
### Routes
|
|
95
|
+
|
|
96
|
+

|
|
97
|
+
|
|
98
|
+
### OpenAPI Schema
|
|
99
|
+
|
|
100
|
+

|
|
101
|
+
|
|
102
|
+
### HTTP Requests
|
|
103
|
+
|
|
104
|
+

|
|
105
|
+
|
|
106
|
+
### SRPC
|
|
107
|
+
|
|
108
|
+

|
|
109
|
+
|
|
110
|
+
### Database
|
|
111
|
+
|
|
112
|
+

|
|
113
|
+
|
|
114
|
+
### Health Checks
|
|
115
|
+
|
|
116
|
+

|
|
117
|
+
|
|
118
|
+
### Mutex Monitor
|
|
119
|
+
|
|
120
|
+

|
|
121
|
+
|
|
122
|
+
### Interactive REPL
|
|
123
|
+
|
|
124
|
+

|
|
125
|
+
|
|
126
|
+
### Workers
|
|
127
|
+
|
|
128
|
+

|
|
129
|
+
|
|
130
|
+
## Features at a Glance
|
|
131
|
+
|
|
132
|
+
- **Application Factory**: `createApp()` sets up Deepkit with opinionated defaults
|
|
133
|
+
- **Configuration**: Environment-based config with `@zyno-io/config` integration
|
|
134
|
+
- **Database**: Extends Deepkit ORM with MySQL/PostgreSQL support, transaction hooks, and session locks
|
|
135
|
+
- **HTTP**: Custom kernel with middleware, CORS, uploads, and error handling
|
|
136
|
+
- **Workers**: BullMQ background job processing with `@WorkerJob()` decorator
|
|
137
|
+
- **SRPC**: Bidirectional WebSocket RPC with HMAC authentication
|
|
138
|
+
- **Leader Election**: Redis-based distributed leader election for single-instance tasks
|
|
139
|
+
- **Mesh Networking**: Typed RPC between distributed application instances
|
|
140
|
+
- **Mail**: Email via Postmark or SMTP with template system
|
|
141
|
+
- **Telemetry**: OpenTelemetry and Sentry integration
|
|
142
|
+
- **Testing**: Comprehensive test utilities and fixtures
|
|
143
|
+
- **CLI Tools**: REPL, provider invoke, migration commands, and more
|
|
144
|
+
|
|
145
|
+
## License
|
|
146
|
+
|
|
147
|
+
MIT License - see [LICENSE](https://github.com/zyno-io/dk-server-foundation/blob/main/LICENSE) for details.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# LeaderService
|
|
2
|
+
|
|
3
|
+
Distributed leader election using Redis. Exactly one instance holds leadership at a time, backed by an atomic lock with TTL-based expiry and periodic renewal.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
import { LeaderService } from '@zyno-io/dk-server-foundation';
|
|
9
|
+
|
|
10
|
+
const leader = new LeaderService('my-feature');
|
|
11
|
+
|
|
12
|
+
leader.setBecameLeaderCallback(async () => {
|
|
13
|
+
console.log('This instance is now the leader');
|
|
14
|
+
// Start leader-only work (e.g. scheduled jobs, cleanup tasks)
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
leader.setLostLeaderCallback(async () => {
|
|
18
|
+
console.log('Leadership lost');
|
|
19
|
+
// Stop leader-only work
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
leader.start();
|
|
23
|
+
|
|
24
|
+
// Check leadership status at any time
|
|
25
|
+
if (leader.isLeader) {
|
|
26
|
+
// perform leader-only operation
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Graceful shutdown
|
|
30
|
+
await leader.stop();
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## API
|
|
34
|
+
|
|
35
|
+
### `new LeaderService(key: string, options?: LeaderServiceOptions)`
|
|
36
|
+
|
|
37
|
+
Creates a new leader election instance.
|
|
38
|
+
|
|
39
|
+
- **`key`** -- Logical name for the leadership group. All instances using the same key compete for the same lock. The full Redis key is derived as `{prefix}:leader:{key}`.
|
|
40
|
+
- **`options`** -- Optional tuning parameters (see below).
|
|
41
|
+
|
|
42
|
+
### `LeaderServiceOptions`
|
|
43
|
+
|
|
44
|
+
| Option | Type | Default | Description |
|
|
45
|
+
| ------------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------ |
|
|
46
|
+
| `ttlMs` | `number` | `30000` | Lock TTL in milliseconds. If the leader crashes without releasing, the lock expires after this period. |
|
|
47
|
+
| `renewalIntervalMs` | `number` | `10000` | How often the leader renews its lock. Should be well below `ttlMs` to avoid accidental expiry. |
|
|
48
|
+
| `retryDelayMs` | `number` | `5000` | Delay between acquisition attempts for non-leader instances. |
|
|
49
|
+
|
|
50
|
+
### Properties
|
|
51
|
+
|
|
52
|
+
| Property | Type | Description |
|
|
53
|
+
| ---------- | --------- | ------------------------------------------------------ |
|
|
54
|
+
| `isLeader` | `boolean` | Whether this instance currently holds the leader lock. |
|
|
55
|
+
|
|
56
|
+
### Methods
|
|
57
|
+
|
|
58
|
+
#### `setBecameLeaderCallback(callback: () => void | Promise<void>): void`
|
|
59
|
+
|
|
60
|
+
Register a callback invoked when this instance acquires leadership. Errors thrown by the callback are logged but do not affect leader status.
|
|
61
|
+
|
|
62
|
+
#### `setLostLeaderCallback(callback: () => void | Promise<void>): void`
|
|
63
|
+
|
|
64
|
+
Register a callback invoked when this instance loses leadership (e.g. renewal failure, network partition). Errors are logged and do not prevent re-election attempts.
|
|
65
|
+
|
|
66
|
+
#### `start(): void`
|
|
67
|
+
|
|
68
|
+
Begin participating in leader election. Throws if already running. Acquisition is asynchronous -- the instance may not be leader immediately after `start()` returns.
|
|
69
|
+
|
|
70
|
+
#### `stop(): Promise<void>`
|
|
71
|
+
|
|
72
|
+
Stop participating and release the lock if currently leader. Safe to call multiple times.
|
|
73
|
+
|
|
74
|
+
## How It Works
|
|
75
|
+
|
|
76
|
+
1. **Acquisition**: Each instance attempts to set a Redis key with `NX` (set-if-not-exists) semantics and a TTL via a Lua script. If the key doesn't exist, the caller becomes leader.
|
|
77
|
+
2. **Renewal**: The leader periodically refreshes the TTL on its lock. If the key's value no longer matches (another instance took over), leadership is considered lost.
|
|
78
|
+
3. **Release**: On `stop()`, the leader deletes its key (only if the value still matches), allowing immediate failover.
|
|
79
|
+
4. **Retry**: Non-leaders retry acquisition on a timer. If the leader crashes, the lock expires after `ttlMs` and another instance acquires it.
|
|
80
|
+
|
|
81
|
+
All Redis operations use Lua scripts for atomicity:
|
|
82
|
+
|
|
83
|
+
- **ACQUIRE** -- `SET key value PX ttl` only if the key doesn't exist
|
|
84
|
+
- **RENEW** -- `PEXPIRE key ttl` only if the value matches
|
|
85
|
+
- **RELEASE** -- `DEL key` only if the value matches
|
|
86
|
+
|
|
87
|
+
## Configuration
|
|
88
|
+
|
|
89
|
+
The Redis connection is configured via environment variables with the `MUTEX_REDIS_` prefix (falls back to `REDIS_`):
|
|
90
|
+
|
|
91
|
+
| Variable | Description |
|
|
92
|
+
| --------------------------- | ------------------------------------------------------------ |
|
|
93
|
+
| `MUTEX_REDIS_HOST` | Redis host |
|
|
94
|
+
| `MUTEX_REDIS_PORT` | Redis port |
|
|
95
|
+
| `MUTEX_REDIS_PREFIX` | Key prefix (falls back to `REDIS_PREFIX`, then package name) |
|
|
96
|
+
| `MUTEX_REDIS_SENTINEL_HOST` | Sentinel host (optional) |
|
|
97
|
+
| `MUTEX_REDIS_SENTINEL_PORT` | Sentinel port (optional) |
|
|
98
|
+
| `MUTEX_REDIS_SENTINEL_NAME` | Sentinel master name (optional) |
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Logging
|
|
2
|
+
|
|
3
|
+
Scoped Pino logger with async context tracking, structured data, and error reporting integration.
|
|
4
|
+
|
|
5
|
+
## Creating Loggers
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
import { createLogger } from '@zyno-io/dk-server-foundation';
|
|
9
|
+
|
|
10
|
+
// From a class instance (uses class name as scope)
|
|
11
|
+
class OrderService {
|
|
12
|
+
private logger = createLogger(this);
|
|
13
|
+
|
|
14
|
+
async process() {
|
|
15
|
+
this.logger.info('Processing order');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// From a string
|
|
20
|
+
const logger = createLogger('PaymentWorker');
|
|
21
|
+
|
|
22
|
+
// With default data attached to every log
|
|
23
|
+
const logger = createLogger(this, { region: 'us-east-1' });
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Log Levels
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
logger.debug('Debug message');
|
|
30
|
+
logger.info('Info message');
|
|
31
|
+
logger.warning('Warning message');
|
|
32
|
+
logger.error('Error message');
|
|
33
|
+
logger.alert('Alert message');
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Structured Data
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
// Attach data to a log entry
|
|
40
|
+
logger.info('Order created', { orderId: 123, total: 99.99 });
|
|
41
|
+
|
|
42
|
+
// Error with context
|
|
43
|
+
logger.error('Payment failed', error, { orderId: 123, provider: 'stripe' });
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Scoped Loggers
|
|
47
|
+
|
|
48
|
+
Create child loggers with a scope prefix and optional persistent data:
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
const logger = createLogger(this);
|
|
52
|
+
|
|
53
|
+
// Child logger with scope
|
|
54
|
+
const paymentLogger = logger.scoped('payment');
|
|
55
|
+
paymentLogger.info('Processing');
|
|
56
|
+
// Output: [OrderService:payment] Processing
|
|
57
|
+
|
|
58
|
+
// Child logger with persistent data
|
|
59
|
+
const orderLogger = logger.scoped('order', { orderId: 123 });
|
|
60
|
+
orderLogger.info('Created');
|
|
61
|
+
// Every log includes { orderId: 123 }
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### `setScopeData(data?)`
|
|
65
|
+
|
|
66
|
+
Update the persistent data attached to a scoped logger:
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
const logger = createLogger(this);
|
|
70
|
+
logger.setScopeData({ userId: 456 });
|
|
71
|
+
logger.info('Action');
|
|
72
|
+
// Includes { userId: 456 }
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Async Context
|
|
76
|
+
|
|
77
|
+
Logger automatically includes async context properties in log entries. This means request IDs, trace IDs, and other context set via `setContextProp()` or `withContextData()` flow into logs automatically.
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
import { withContextData } from '@zyno-io/dk-server-foundation';
|
|
81
|
+
|
|
82
|
+
await withContextData({ reqId: 'abc-123' }, async () => {
|
|
83
|
+
logger.info('Handling request');
|
|
84
|
+
// Log includes reqId: 'abc-123'
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### `withLoggerContext(data, fn)`
|
|
89
|
+
|
|
90
|
+
Add additional logger context for the duration of a function:
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
import { withLoggerContext } from '@zyno-io/dk-server-foundation';
|
|
94
|
+
|
|
95
|
+
await withLoggerContext({ jobId: 'job-456' }, async () => {
|
|
96
|
+
logger.info('Processing job');
|
|
97
|
+
// Log includes jobId: 'job-456'
|
|
98
|
+
});
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Error Handling
|
|
102
|
+
|
|
103
|
+
When logging errors, the logger automatically:
|
|
104
|
+
|
|
105
|
+
1. Extracts the error message and stack trace
|
|
106
|
+
2. Includes any `cause` chain
|
|
107
|
+
3. Reports to the global error reporter (Sentry, Slack) for `error` and `alert` levels
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
try {
|
|
111
|
+
await riskyOperation();
|
|
112
|
+
} catch (err) {
|
|
113
|
+
logger.error('Operation failed', err);
|
|
114
|
+
// Error reported to Sentry, details logged to Pino
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## ExtendedLogger
|
|
119
|
+
|
|
120
|
+
`ExtendedLogger` replaces Deepkit's default `Logger` in the DI container. It extends `Logger` with:
|
|
121
|
+
|
|
122
|
+
- Pino as the underlying transport
|
|
123
|
+
- Scoped child loggers
|
|
124
|
+
- Async context integration
|
|
125
|
+
- Error reporting to Sentry and Slack
|
|
126
|
+
|
|
127
|
+
All injected `Logger` instances are `ExtendedLogger` instances.
|
|
128
|
+
|
|
129
|
+
## Pino Instance
|
|
130
|
+
|
|
131
|
+
Access the raw Pino logger:
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
import { pinoLogger } from '@zyno-io/dk-server-foundation';
|
|
135
|
+
|
|
136
|
+
pinoLogger.info({ custom: 'data' }, 'Raw pino log');
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## HTTP Request Logging
|
|
140
|
+
|
|
141
|
+
Request logging is handled by the HTTP kernel and configured via `HTTP_REQUEST_LOGGING_MODE`:
|
|
142
|
+
|
|
143
|
+
| Mode | Description |
|
|
144
|
+
| -------- | ---------------------------- |
|
|
145
|
+
| `e2e` | Log at request start and end |
|
|
146
|
+
| `finish` | Log only at request end |
|
|
147
|
+
| `errors` | Log only errors |
|
|
148
|
+
| `none` | No request logging |
|
|
149
|
+
|
|
150
|
+
Health check logging is disabled by default. Enable with `HEALTHZ_ENABLE_REQUEST_LOGGING=true`.
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Mail
|
|
2
|
+
|
|
3
|
+
Email sending via Postmark or SMTP with a template system.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
`MailService` is automatically registered by `createApp()`. Configure via environment variables:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Provider selection
|
|
11
|
+
MAIL_PROVIDER=smtp # or 'postmark'
|
|
12
|
+
MAIL_FROM=noreply@example.com
|
|
13
|
+
MAIL_FROM_NAME="My App"
|
|
14
|
+
|
|
15
|
+
# SMTP
|
|
16
|
+
SMTP_HOST=smtp.example.com
|
|
17
|
+
SMTP_PORT=587
|
|
18
|
+
SMTP_USER=apikey
|
|
19
|
+
SMTP_PASSWORD_SECRET=secret
|
|
20
|
+
SMTP_TLS=true
|
|
21
|
+
|
|
22
|
+
# Postmark
|
|
23
|
+
POSTMARK_SECRET=your-api-token
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Sending Emails
|
|
27
|
+
|
|
28
|
+
### Direct Send
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
import { MailService } from '@zyno-io/dk-server-foundation';
|
|
32
|
+
|
|
33
|
+
class OrderService {
|
|
34
|
+
constructor(private mail: MailService) {}
|
|
35
|
+
|
|
36
|
+
async sendConfirmation(order: Order) {
|
|
37
|
+
await this.mail.send({
|
|
38
|
+
to: { address: order.email, name: order.name },
|
|
39
|
+
subject: 'Order Confirmation',
|
|
40
|
+
message: `<h1>Your order #${order.id} has been placed.</h1>`,
|
|
41
|
+
plainMessage: `Your order #${order.id} has been placed.`
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Template Send
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
await this.mail.sendFromTemplate({
|
|
51
|
+
to: { address: 'user@example.com' },
|
|
52
|
+
template: WelcomeEmail,
|
|
53
|
+
data: { name: 'Alice' }
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Prepared Messages
|
|
58
|
+
|
|
59
|
+
Prepare a message without sending (useful for previews or queuing):
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
const prepared = await this.mail.prepare({
|
|
63
|
+
to: { address: 'user@example.com' },
|
|
64
|
+
subject: 'Hello',
|
|
65
|
+
message: '<h1>Hello</h1>'
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
const preparedFromTemplate = await this.mail.prepareFromTemplate({
|
|
69
|
+
to: { address: 'user@example.com' },
|
|
70
|
+
template: WelcomeEmail,
|
|
71
|
+
data: { name: 'Alice' }
|
|
72
|
+
});
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Templates
|
|
76
|
+
|
|
77
|
+
Create email templates by extending `MailTemplate`:
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
import { MailTemplate } from '@zyno-io/dk-server-foundation';
|
|
81
|
+
|
|
82
|
+
class WelcomeEmail extends MailTemplate<{ name: string; loginUrl: string }> {
|
|
83
|
+
subject = 'Welcome to Our App!';
|
|
84
|
+
|
|
85
|
+
generateHtml() {
|
|
86
|
+
return `
|
|
87
|
+
<h1>Welcome, ${this.data.name}!</h1>
|
|
88
|
+
<p>Get started by <a href="${this.data.loginUrl}">logging in</a>.</p>
|
|
89
|
+
`;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
generateText() {
|
|
93
|
+
return `Welcome, ${this.data.name}! Log in at: ${this.data.loginUrl}`;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### `MailTemplate<T>`
|
|
99
|
+
|
|
100
|
+
| Property / Method | Type | Description |
|
|
101
|
+
| ----------------- | ---------------- | ------------------------------------ |
|
|
102
|
+
| `subject` | `string` | Email subject line (abstract) |
|
|
103
|
+
| `data` | `T` | Template data (set by the framework) |
|
|
104
|
+
| `generateHtml()` | `string` | HTML body (abstract) |
|
|
105
|
+
| `generateText()` | `string \| void` | Plain text body (optional) |
|
|
106
|
+
|
|
107
|
+
## Message Properties
|
|
108
|
+
|
|
109
|
+
### `MessageProperties`
|
|
110
|
+
|
|
111
|
+
| Property | Type | Required | Description |
|
|
112
|
+
| -------------- | ---------------------------------------- | -------- | -------------------------------- |
|
|
113
|
+
| `to` | `{ address: string; name?: string }` | Yes | Recipient |
|
|
114
|
+
| `from` | `{ address: string; name?: string }` | No | Sender (defaults to `MAIL_FROM`) |
|
|
115
|
+
| `replyTo` | `{ address: string; name?: string }` | No | Reply-to address |
|
|
116
|
+
| `subject` | `string` | Yes | Subject line |
|
|
117
|
+
| `message` | `string` | Yes | HTML body |
|
|
118
|
+
| `plainMessage` | `string` | No | Plain text body |
|
|
119
|
+
| `attachments` | `{ name, content, contentType, cid? }[]` | No | File attachments |
|
|
120
|
+
|
|
121
|
+
### `TemplateMessageProperties<T>`
|
|
122
|
+
|
|
123
|
+
| Property | Type | Required | Description |
|
|
124
|
+
| ---------- | ------------------------------------ | -------- | -------------- |
|
|
125
|
+
| `to` | `{ address: string; name?: string }` | Yes | Recipient |
|
|
126
|
+
| `template` | `ClassType<MailTemplate<T>>` | Yes | Template class |
|
|
127
|
+
| `data` | `T` | Yes | Template data |
|
|
128
|
+
|
|
129
|
+
## Providers
|
|
130
|
+
|
|
131
|
+
### SMTP
|
|
132
|
+
|
|
133
|
+
Uses nodemailer. Configured via `SMTP_*` environment variables.
|
|
134
|
+
|
|
135
|
+
### Postmark
|
|
136
|
+
|
|
137
|
+
Uses the Postmark API. Configured via `POSTMARK_SECRET`.
|
|
138
|
+
|
|
139
|
+
Both providers implement the `MailProvider` interface:
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
interface MailProvider {
|
|
143
|
+
send(message: PreparedMessageProperties): Promise<string>;
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
The return value is a provider-specific message ID.
|
|
148
|
+
|
|
149
|
+
## Configuration
|
|
150
|
+
|
|
151
|
+
| Variable | Type | Default | Description |
|
|
152
|
+
| ---------------------- | --------- | ----------- | ------------------------------ |
|
|
153
|
+
| `MAIL_PROVIDER` | `string` | `smtp` | Provider: `smtp` or `postmark` |
|
|
154
|
+
| `MAIL_FROM` | `string` | — | Default sender address |
|
|
155
|
+
| `MAIL_FROM_NAME` | `string` | — | Default sender name |
|
|
156
|
+
| `SMTP_HOST` | `string` | `127.0.0.1` | SMTP host |
|
|
157
|
+
| `SMTP_PORT` | `number` | `1025` | SMTP port |
|
|
158
|
+
| `SMTP_USER` | `string` | — | SMTP username |
|
|
159
|
+
| `SMTP_PASSWORD_SECRET` | `string` | — | SMTP password |
|
|
160
|
+
| `SMTP_TLS` | `boolean` | `false` | Enable TLS |
|
|
161
|
+
| `POSTMARK_SECRET` | `string` | — | Postmark API token |
|