@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,166 @@
|
|
|
1
|
+
# Telemetry
|
|
2
|
+
|
|
3
|
+
OpenTelemetry auto-instrumentation and Sentry error tracking.
|
|
4
|
+
|
|
5
|
+
## OpenTelemetry Setup
|
|
6
|
+
|
|
7
|
+
Call `init()` **before** other imports to enable auto-instrumentation:
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
import { init } from '@zyno-io/dk-server-foundation/telemetry/otel';
|
|
11
|
+
|
|
12
|
+
init();
|
|
13
|
+
|
|
14
|
+
// Now import everything else
|
|
15
|
+
import { createApp } from '@zyno-io/dk-server-foundation';
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### `init(options?)`
|
|
19
|
+
|
|
20
|
+
| Option | Type | Description |
|
|
21
|
+
| ---------------------------------- | --------------------------------------------- | ----------------------------------------- |
|
|
22
|
+
| `instrumentations` | `Instrumentation[]` | Additional OpenTelemetry instrumentations |
|
|
23
|
+
| `httpIncomingRequestAttributeHook` | `(request) => Record<string, AttributeValue>` | Add custom attributes to HTTP spans |
|
|
24
|
+
| `enableMetricsEndpoint` | `boolean` | Enable `/metrics` Prometheus endpoint |
|
|
25
|
+
|
|
26
|
+
### Built-in Instrumentations
|
|
27
|
+
|
|
28
|
+
| Instrumentation | Package | Notes |
|
|
29
|
+
| --------------- | ---------------------------------------- | ------------------------------------------ |
|
|
30
|
+
| HTTP | `@opentelemetry/instrumentation-http` | Ignores `/healthz` and Sentry requests |
|
|
31
|
+
| Undici (fetch) | `@opentelemetry/instrumentation-undici` | Ignores `/healthz` and Sentry requests |
|
|
32
|
+
| DNS | `@opentelemetry/instrumentation-dns` | — |
|
|
33
|
+
| ioredis | `@opentelemetry/instrumentation-ioredis` | — |
|
|
34
|
+
| BullMQ | `@opentelemetry/instrumentation-bullmq` | — |
|
|
35
|
+
| MariaDB | Custom | Traces queries and connection pool metrics |
|
|
36
|
+
|
|
37
|
+
### Trace Export
|
|
38
|
+
|
|
39
|
+
- **Development**: `SimpleSpanProcessor` (immediate export)
|
|
40
|
+
- **Production**: `BatchSpanProcessor` (buffered export)
|
|
41
|
+
|
|
42
|
+
### Metric Export
|
|
43
|
+
|
|
44
|
+
- **Pull**: `/metrics` endpoint (Prometheus format, restricted to private IPs)
|
|
45
|
+
- **Push**: OTLP endpoint with 10-second interval
|
|
46
|
+
|
|
47
|
+
### Database Transaction Tracing
|
|
48
|
+
|
|
49
|
+
The library automatically wraps `Database.prototype.transaction` to create spans named `sql.transaction`.
|
|
50
|
+
|
|
51
|
+
## Tracing Helpers
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
import { withSpan, withRootSpan, withRemoteSpan, setSpanAttributes } from '@zyno-io/dk-server-foundation';
|
|
55
|
+
|
|
56
|
+
// Create a child span
|
|
57
|
+
const result = await withSpan('processOrder', async () => {
|
|
58
|
+
return await doWork();
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// With attributes
|
|
62
|
+
const result = await withSpan('processOrder', { orderId: '123' }, async () => {
|
|
63
|
+
return await doWork();
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
// Create a root span (ignores current context)
|
|
67
|
+
const result = await withRootSpan('backgroundJob', async () => {
|
|
68
|
+
return await doWork();
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
// Continue a trace from a remote context
|
|
72
|
+
const result = await withRemoteSpan('handleRequest', { traceparent: '00-abc...' }, undefined, async () => {
|
|
73
|
+
return await doWork();
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// Add attributes to the active span
|
|
77
|
+
setSpanAttributes({ 'user.id': userId, 'order.total': total });
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### State Inspection
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
import { isTracingInstalled, getTracer, getActiveSpan, getTraceContext, disableActiveTrace } from '@zyno-io/dk-server-foundation';
|
|
84
|
+
|
|
85
|
+
if (isTracingInstalled()) {
|
|
86
|
+
const tracer = getTracer();
|
|
87
|
+
const span = getActiveSpan();
|
|
88
|
+
const context = getTraceContext(); // { traceId, spanId, traceFlags }
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Suppress tracing for a section
|
|
92
|
+
disableActiveTrace();
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### `SpanInfo`
|
|
96
|
+
|
|
97
|
+
Remote span context for `withRemoteSpan`:
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
type SpanInfo = { traceId: string; spanId: string; traceFlags?: number } | { traceparent: string } | undefined;
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Sentry
|
|
104
|
+
|
|
105
|
+
Sentry functions are available from the `telemetry/sentry` subpath (not re-exported from the package root):
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
import { installSentry, isSentryInstalled, flushSentry } from '@zyno-io/dk-server-foundation/telemetry/sentry';
|
|
109
|
+
|
|
110
|
+
installSentry({ dsn: 'https://...' });
|
|
111
|
+
|
|
112
|
+
// Check if installed
|
|
113
|
+
if (isSentryInstalled()) {
|
|
114
|
+
/* ... */
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Flush pending events (5s timeout)
|
|
118
|
+
await flushSentry();
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Sentry is automatically installed by `createApp()` when `SENTRY_DSN` is configured. It integrates with OpenTelemetry tracing (adds trace context to Sentry events).
|
|
122
|
+
|
|
123
|
+
### Automatic Error Handling
|
|
124
|
+
|
|
125
|
+
`createApp()` sets up handlers for `uncaughtException` and `unhandledRejection` that report to Sentry and flush before exit.
|
|
126
|
+
|
|
127
|
+
## MariaDB Instrumentation
|
|
128
|
+
|
|
129
|
+
Custom OpenTelemetry instrumentation for the `mariadb` package:
|
|
130
|
+
|
|
131
|
+
- Wraps `createConnection`, `createPool`, `createPoolCluster`
|
|
132
|
+
- Creates spans for each SQL query
|
|
133
|
+
- Tracks connection pool metrics via `db.client.connections.usage` counter
|
|
134
|
+
- Reports `idle` and `used` connection states
|
|
135
|
+
|
|
136
|
+
## Metrics Endpoint
|
|
137
|
+
|
|
138
|
+
The `/metrics` endpoint serves Prometheus-formatted metrics. It is:
|
|
139
|
+
|
|
140
|
+
- Restricted to private LAN IPs (10.x, 172.16-31.x, 192.168.x, 127.x, ::1, fc00::/7, fe80::/10)
|
|
141
|
+
- Returns 403 for non-private IPs
|
|
142
|
+
- Returns 503 if the Prometheus exporter is not available
|
|
143
|
+
|
|
144
|
+
## Configuration
|
|
145
|
+
|
|
146
|
+
| Variable | Description |
|
|
147
|
+
| ------------------------------------- | ------------------------------------- |
|
|
148
|
+
| `OTEL_EXPORTER_OTLP_ENDPOINT` | OTLP endpoint for traces and metrics |
|
|
149
|
+
| `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` | OTLP endpoint for traces only |
|
|
150
|
+
| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | OTLP endpoint for metrics push |
|
|
151
|
+
| `OTEL_METRICS_ENDPOINT_ENABLED` | Enable `/metrics` Prometheus endpoint |
|
|
152
|
+
| `OTEL_DEBUG` | Enable debug logging |
|
|
153
|
+
| `SENTRY_DSN` | Sentry DSN |
|
|
154
|
+
| `APP_ENV` | Environment name sent to Sentry |
|
|
155
|
+
|
|
156
|
+
### Resource Attributes
|
|
157
|
+
|
|
158
|
+
Traces and metrics include:
|
|
159
|
+
|
|
160
|
+
| Attribute | Source |
|
|
161
|
+
| ----------------------------- | --------------- |
|
|
162
|
+
| `service.name` | Package name |
|
|
163
|
+
| `service.version` | Package version |
|
|
164
|
+
| `deployment.environment.name` | `APP_ENV` |
|
|
165
|
+
| `host.name` | OS hostname |
|
|
166
|
+
| `process.pid` | Process ID |
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# Testing
|
|
2
|
+
|
|
3
|
+
Test facades with per-test database isolation, entity fixtures, request mocking, and SQL mocking.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
Tests use `node:test` runner against compiled output. The global setup enforces UTC timezone.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Run all tests
|
|
11
|
+
yarn test
|
|
12
|
+
|
|
13
|
+
# Run a single test file
|
|
14
|
+
yarn test tests/helpers/array.spec.ts
|
|
15
|
+
|
|
16
|
+
# Run with debugger
|
|
17
|
+
yarn test:debug
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Testing Facade
|
|
21
|
+
|
|
22
|
+
`TestingFacade` wraps a Deepkit app for testing with database isolation and lifecycle hooks.
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import { describe, it } from 'node:test';
|
|
26
|
+
import assert from 'node:assert/strict';
|
|
27
|
+
import { TestingHelpers, makeMockRequest } from '@zyno-io/dk-server-foundation';
|
|
28
|
+
|
|
29
|
+
// Pass app options (not an app instance) -- the facade creates the app for you
|
|
30
|
+
const tf = TestingHelpers.createTestingFacade(
|
|
31
|
+
{
|
|
32
|
+
db: MyDB,
|
|
33
|
+
controllers: [UserController],
|
|
34
|
+
providers: [UserService]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
enableDatabase: true,
|
|
38
|
+
seedData: async facade => {
|
|
39
|
+
await loadEntityFixtures([fixtures.user1, fixtures.admin1]);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
TestingHelpers.installStandardHooks(tf);
|
|
45
|
+
|
|
46
|
+
describe('UserController', () => {
|
|
47
|
+
it('should return user', async () => {
|
|
48
|
+
const res = await makeMockRequest(tf, 'GET', '/api/users/1', {});
|
|
49
|
+
assert.strictEqual(res.statusCode, 200);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### `createTestingFacade(appOptions, facadeOptions?)`
|
|
55
|
+
|
|
56
|
+
Creates a `TestingFacade` instance. The first argument is app options (same as `CreateAppOptions` but with `config` optional -- defaults to `BaseAppConfig`). The facade calls `createApp()` internally with `port: 0`.
|
|
57
|
+
|
|
58
|
+
### `ITestingFacadeOptions`
|
|
59
|
+
|
|
60
|
+
| Option | Type | Default | Description |
|
|
61
|
+
| -------------------- | --------------------------- | ------------------------------ | --------------------------------------------------------------- |
|
|
62
|
+
| `enableDatabase` | `boolean` | `false` | Create an isolated test database |
|
|
63
|
+
| `enableMigrations` | `boolean` | `true` (when database enabled) | Run migrations after database creation. Set to `false` to skip. |
|
|
64
|
+
| `autoSeedData` | `boolean` | `false` | Run `seedData` automatically before each test |
|
|
65
|
+
| `databasePrefix` | `string` | `'test'` | Prefix for test database names |
|
|
66
|
+
| `onBeforeStart` | `(facade) => Promise<void>` | — | Hook before app starts |
|
|
67
|
+
| `onStart` | `(facade) => Promise<void>` | — | Hook after app starts |
|
|
68
|
+
| `onBeforeStop` | `(facade) => Promise<void>` | — | Hook before app stops |
|
|
69
|
+
| `onStop` | `(facade) => Promise<void>` | — | Hook after app stops |
|
|
70
|
+
| `seedData` | `(facade) => Promise<void>` | — | Seed test data |
|
|
71
|
+
| `defaultTestHeaders` | `Record<string, string>` | — | Default headers for mock requests |
|
|
72
|
+
|
|
73
|
+
### Facade Methods
|
|
74
|
+
|
|
75
|
+
| Method | Description |
|
|
76
|
+
| ------------------- | ------------------------------------------ |
|
|
77
|
+
| `start()` | Start the app and create the test database |
|
|
78
|
+
| `stop()` | Stop the app and destroy the test database |
|
|
79
|
+
| `createDatabase()` | Create the isolated test database |
|
|
80
|
+
| `destroyDatabase()` | Drop the test database |
|
|
81
|
+
| `truncateTables()` | Truncate all tables |
|
|
82
|
+
| `runMigrations()` | Run pending migrations |
|
|
83
|
+
| `resetToSeed()` | Truncate tables and re-seed |
|
|
84
|
+
|
|
85
|
+
### Database Isolation
|
|
86
|
+
|
|
87
|
+
Each test process gets its own database: `{prefix}_{timestamp}_{pid}_1`. Databases are created on `start()` and dropped on `stop()`.
|
|
88
|
+
|
|
89
|
+
Environment variables:
|
|
90
|
+
|
|
91
|
+
| Variable | Description |
|
|
92
|
+
| -------------- | --------------------------------- |
|
|
93
|
+
| `TEST_KEEP_DB` | Skip database destruction on stop |
|
|
94
|
+
|
|
95
|
+
## Standard Hooks
|
|
96
|
+
|
|
97
|
+
`installStandardHooks(tf)` sets up test lifecycle hooks:
|
|
98
|
+
|
|
99
|
+
- `before` -- Start the facade
|
|
100
|
+
- `after` -- Stop the facade
|
|
101
|
+
- `beforeEach` -- Reset to seed data; install DB rejection hooks if database is disabled
|
|
102
|
+
- `afterEach` -- Reset timers, restore all mocks, clear SQL mocks
|
|
103
|
+
|
|
104
|
+
## Entity Fixtures
|
|
105
|
+
|
|
106
|
+
Define reusable test data with automatic date handling:
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
import { TestingHelpers } from '@zyno-io/dk-server-foundation';
|
|
110
|
+
|
|
111
|
+
const { defineEntityFixtures, loadEntityFixtures } = TestingHelpers;
|
|
112
|
+
|
|
113
|
+
const fixtures = defineEntityFixtures(User, {
|
|
114
|
+
alice: {
|
|
115
|
+
id: 1,
|
|
116
|
+
name: 'Alice',
|
|
117
|
+
email: 'alice@example.com',
|
|
118
|
+
createdAt: '2024-01-01T00:00:00Z' // String dates auto-converted
|
|
119
|
+
},
|
|
120
|
+
bob: {
|
|
121
|
+
id: 2,
|
|
122
|
+
name: 'Bob',
|
|
123
|
+
email: 'bob@example.com',
|
|
124
|
+
createdAt: '2024-01-02T00:00:00Z'
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
// Load into database
|
|
129
|
+
await loadEntityFixtures([fixtures.alice, fixtures.bob]);
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### `defineEntityFixtures(entityClass, data)`
|
|
133
|
+
|
|
134
|
+
- Date fields accept ISO strings (converted to `Date` on load)
|
|
135
|
+
- Fields with defaults (auto-increment, nullable, `HasDefault`) are optional
|
|
136
|
+
- Returns an object with the same keys, each containing prepared fixture data
|
|
137
|
+
|
|
138
|
+
### `prepareEntityFixtures(entityClass, data)`
|
|
139
|
+
|
|
140
|
+
Lower-level function to prepare a single fixture record:
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
const prepared = TestingHelpers.prepareEntityFixtures(User, {
|
|
144
|
+
name: 'Charlie',
|
|
145
|
+
email: 'charlie@example.com'
|
|
146
|
+
});
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Mock HTTP Requests
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
import { makeMockRequest } from '@zyno-io/dk-server-foundation';
|
|
153
|
+
|
|
154
|
+
// Without custom headers
|
|
155
|
+
const res = await makeMockRequest(tf, 'GET', '/api/users', {});
|
|
156
|
+
|
|
157
|
+
// With custom headers
|
|
158
|
+
const res = await makeMockRequest(
|
|
159
|
+
tf,
|
|
160
|
+
'POST',
|
|
161
|
+
'/api/users',
|
|
162
|
+
{
|
|
163
|
+
Authorization: 'Bearer token123',
|
|
164
|
+
'Content-Type': 'application/json'
|
|
165
|
+
},
|
|
166
|
+
{ name: 'Alice', email: 'alice@example.com' }
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
// Response
|
|
170
|
+
assert.strictEqual(res.statusCode, 200);
|
|
171
|
+
assert.deepStrictEqual(res.json, { id: 1, name: 'Alice' });
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Methods: `GET`, `PUT`, `POST`, `DELETE`.
|
|
175
|
+
|
|
176
|
+
Default headers from `options.defaultTestHeaders` are merged with per-request headers.
|
|
177
|
+
|
|
178
|
+
## SQL Mocking
|
|
179
|
+
|
|
180
|
+
Mock database queries without a real database:
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
import { SqlTestingHelper } from '@zyno-io/dk-server-foundation';
|
|
184
|
+
|
|
185
|
+
const sql = new SqlTestingHelper();
|
|
186
|
+
|
|
187
|
+
// Mock entity data
|
|
188
|
+
sql.mockEntity(User, [
|
|
189
|
+
{ id: 1, name: 'Alice' },
|
|
190
|
+
{ id: 2, name: 'Bob' }
|
|
191
|
+
]);
|
|
192
|
+
|
|
193
|
+
// Queries against User will return mocked data
|
|
194
|
+
const users = await db.query(User).find();
|
|
195
|
+
// [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]
|
|
196
|
+
|
|
197
|
+
// Throws if no mock is set up
|
|
198
|
+
// "No mock data found for entity: User"
|
|
199
|
+
|
|
200
|
+
// Clear all mocks
|
|
201
|
+
sql.clearMocks();
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Uses Deepkit's `MemoryDatabaseAdapter` internally. Automatically cleared by `installStandardHooks`.
|
|
205
|
+
|
|
206
|
+
## Configuration
|
|
207
|
+
|
|
208
|
+
For tests without a database, set `MYSQL_MIN_IDLE_CONNECTIONS=0` to avoid connection attempts.
|
|
209
|
+
|
|
210
|
+
## Redis Cleanup
|
|
211
|
+
|
|
212
|
+
If your tests use Redis-backed features, call `disconnectAllRedis()` in your `after()` hook:
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
import { after } from 'node:test';
|
|
216
|
+
import { disconnectAllRedis } from '@zyno-io/dk-server-foundation';
|
|
217
|
+
|
|
218
|
+
after(async () => {
|
|
219
|
+
await tf.stop();
|
|
220
|
+
await disconnectAllRedis();
|
|
221
|
+
});
|
|
222
|
+
```
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# Types
|
|
2
|
+
|
|
3
|
+
Custom validated types that integrate with Deepkit's type system for automatic validation and transformation during deserialization.
|
|
4
|
+
|
|
5
|
+
## Date Types
|
|
6
|
+
|
|
7
|
+
### `DateString`
|
|
8
|
+
|
|
9
|
+
MySQL DATE column type. Stored as `YYYY-MM-DD` string, validated via regex pattern.
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
import { DateString } from '@zyno-io/dk-server-foundation';
|
|
13
|
+
|
|
14
|
+
class Event {
|
|
15
|
+
date!: DateString; // MySQL DATE column
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### `ValidDate`
|
|
20
|
+
|
|
21
|
+
A `Date` that rejects `Invalid Date` values during validation.
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { ValidDate } from '@zyno-io/dk-server-foundation';
|
|
25
|
+
|
|
26
|
+
class Booking {
|
|
27
|
+
startDate!: ValidDate;
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## String Types
|
|
32
|
+
|
|
33
|
+
### `TrimmedString` / `NonEmptyTrimmedString`
|
|
34
|
+
|
|
35
|
+
Strings that are automatically trimmed during Deepkit deserialization.
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
import { TrimmedString, NonEmptyTrimmedString } from '@zyno-io/dk-server-foundation';
|
|
39
|
+
|
|
40
|
+
class UserInput {
|
|
41
|
+
name!: NonEmptyTrimmedString; // Trimmed + must be non-empty
|
|
42
|
+
notes!: TrimmedString; // Trimmed, can be empty
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### `EmailAddress`
|
|
47
|
+
|
|
48
|
+
Regex-validated email address:
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
import { EmailAddress } from '@zyno-io/dk-server-foundation';
|
|
52
|
+
|
|
53
|
+
class User {
|
|
54
|
+
email!: EmailAddress; // Validated against /^[a-z0-9_+.-]+@[a-z0-9-.]+\.[a-z]+$/i
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Phone Types
|
|
59
|
+
|
|
60
|
+
Validated phone numbers using Google's libphonenumber library. Automatically cleaned and validated during Deepkit deserialization.
|
|
61
|
+
|
|
62
|
+
### `PhoneNumber`
|
|
63
|
+
|
|
64
|
+
International E.164 format with `+` prefix:
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
import { PhoneNumber } from '@zyno-io/dk-server-foundation';
|
|
68
|
+
|
|
69
|
+
class Contact {
|
|
70
|
+
phone!: PhoneNumber; // e.g., '+15551234567'
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### `PhoneNumberNANP`
|
|
75
|
+
|
|
76
|
+
North American Numbering Plan format (US/Canada) without the `+1` prefix:
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
import { PhoneNumberNANP } from '@zyno-io/dk-server-foundation';
|
|
80
|
+
|
|
81
|
+
class Contact {
|
|
82
|
+
phone!: PhoneNumberNANP; // e.g., '5551234567'
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Phone Utilities
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
import { cleanPhone, formatPhoneFriendly } from '@zyno-io/dk-server-foundation';
|
|
90
|
+
|
|
91
|
+
// Clean and validate (returns null if invalid)
|
|
92
|
+
cleanPhone('(555) 123-4567'); // '+15551234567'
|
|
93
|
+
cleanPhone('555-1234567', 'US'); // '+15551234567'
|
|
94
|
+
cleanPhone('invalid'); // null
|
|
95
|
+
|
|
96
|
+
// Format for display
|
|
97
|
+
formatPhoneFriendly('+15551234567'); // '(555) 123-4567'
|
|
98
|
+
formatPhoneFriendly('+15551234567', 'US'); // '(555) 123-4567'
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Database Types
|
|
102
|
+
|
|
103
|
+
### `Coordinate`
|
|
104
|
+
|
|
105
|
+
MySQL POINT geometry type:
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
import { Coordinate, MySQLCoordinate, NullableMySQLCoordinate } from '@zyno-io/dk-server-foundation';
|
|
109
|
+
|
|
110
|
+
class Location {
|
|
111
|
+
coords!: MySQLCoordinate; // NOT NULL POINT column
|
|
112
|
+
altCoords!: NullableMySQLCoordinate; // NULLABLE POINT column
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Usage
|
|
116
|
+
const loc = new Location();
|
|
117
|
+
loc.coords = { x: -73.9857, y: 40.7484 }; // longitude, latitude
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### `UuidString`
|
|
121
|
+
|
|
122
|
+
Type annotation for UUID string fields:
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
import { UuidString } from '@zyno-io/dk-server-foundation';
|
|
126
|
+
|
|
127
|
+
class Resource {
|
|
128
|
+
id!: UuidString;
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### `Length<N>`
|
|
133
|
+
|
|
134
|
+
Fixed-length string validator:
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
import { Length } from '@zyno-io/dk-server-foundation';
|
|
138
|
+
|
|
139
|
+
class VerificationCode {
|
|
140
|
+
code!: Length<6>; // Must be exactly 6 characters
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### `OnUpdate<T>`
|
|
145
|
+
|
|
146
|
+
MySQL `ON UPDATE` column expression annotation. Used by `migration:create` to generate and detect `ON UPDATE` clauses:
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
import { OnUpdate } from '@zyno-io/dk-server-foundation';
|
|
150
|
+
|
|
151
|
+
class User {
|
|
152
|
+
updatedAt!: Date & OnUpdate<'CURRENT_TIMESTAMP'>; // ON UPDATE CURRENT_TIMESTAMP
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
This is MySQL-only. The annotation is ignored on PostgreSQL.
|
|
157
|
+
|
|
158
|
+
### `HasDefault`
|
|
159
|
+
|
|
160
|
+
Mark fields with application-level defaults so they become optional in entity creation:
|
|
161
|
+
|
|
162
|
+
```typescript
|
|
163
|
+
import { HasDefault } from '@zyno-io/dk-server-foundation';
|
|
164
|
+
|
|
165
|
+
class User {
|
|
166
|
+
role!: string & HasDefault; // Optional in createEntity/createPersistedEntity
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Utility Types
|
|
171
|
+
|
|
172
|
+
### Primitives
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
type ConcretePrimitive = string | number | boolean;
|
|
176
|
+
type DefinedPrimitive = ConcretePrimitive | null;
|
|
177
|
+
type Primitive = DefinedPrimitive | undefined;
|
|
178
|
+
type StrictBool = true | false;
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Object Types
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
type KVObject<T = any> = Record<string, T>;
|
|
185
|
+
type NestedKVObject<T = any> = KVObject<T | T[] | KVObject<T>>;
|
|
186
|
+
type Serializable<T = ConcretePrimitive> = T | T[] | NestedKVObject<T> | NestedKVObject<T>[];
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Field Manipulation
|
|
190
|
+
|
|
191
|
+
```typescript
|
|
192
|
+
// Make specific fields required
|
|
193
|
+
type RequireFields<T, K extends keyof T> = T & { [P in K]-?: T[P] };
|
|
194
|
+
|
|
195
|
+
// Get keys where values match a type
|
|
196
|
+
type ObjectKeysMatching<O, V> = { [K in keyof O]: O[K] extends V ? K : never }[keyof O];
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Function Types
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
type ArrowFunction = (...args: any) => any;
|
|
203
|
+
type ArrowFunctionNoArgs = () => any;
|
|
204
|
+
type VoidFunction = () => void;
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Method Extraction
|
|
208
|
+
|
|
209
|
+
```typescript
|
|
210
|
+
// Get only the method keys of a type
|
|
211
|
+
type MethodKeys<T> = keyof MethodsOf<T>;
|
|
212
|
+
|
|
213
|
+
// Get an object with only the methods
|
|
214
|
+
type MethodsOf<T> = { [K in keyof T as IsFunction<T[K]> extends never ? never : K]: T[K] };
|
|
215
|
+
```
|