@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,177 @@
|
|
|
1
|
+
# Workers
|
|
2
|
+
|
|
3
|
+
Background job processing using BullMQ with Redis. Jobs are defined as classes, automatically discovered, and executed by a worker runner with full dependency injection.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
Enable the worker system in `createApp()`:
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
const app = createApp({
|
|
11
|
+
config: AppConfig,
|
|
12
|
+
db: AppDB,
|
|
13
|
+
enableWorker: true
|
|
14
|
+
});
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
This registers the job runner, queue registry, and CLI commands. In development, the runner auto-starts. In production, it's controlled via the `ENABLE_JOB_RUNNER` environment variable.
|
|
18
|
+
|
|
19
|
+
## Defining Jobs
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import { BaseJob, WorkerJob } from '@zyno-io/dk-server-foundation';
|
|
23
|
+
|
|
24
|
+
@WorkerJob()
|
|
25
|
+
class SendEmailJob extends BaseJob<{ to: string; subject: string; body: string }> {
|
|
26
|
+
async handle(data) {
|
|
27
|
+
await emailProvider.send(data.to, data.subject, data.body);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### With Return Values
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
@WorkerJob()
|
|
36
|
+
class ProcessImageJob extends BaseJob<{ url: string }, { width: number; height: number }> {
|
|
37
|
+
async handle(data) {
|
|
38
|
+
const result = await processImage(data.url);
|
|
39
|
+
return { width: result.width, height: result.height };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Cron Jobs
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
@WorkerJob()
|
|
48
|
+
class DailyCleanupJob extends BaseJob {
|
|
49
|
+
static CRON_SCHEDULE = '0 0 * * *'; // Midnight daily
|
|
50
|
+
|
|
51
|
+
async handle() {
|
|
52
|
+
await cleanupExpiredSessions();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Custom Queue
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
@WorkerJob()
|
|
61
|
+
class HighPriorityJob extends BaseJob<{ data: string }> {
|
|
62
|
+
static QUEUE_NAME = 'high-priority';
|
|
63
|
+
|
|
64
|
+
async handle(data) {
|
|
65
|
+
// Processed by a separate queue
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## `BaseJob<I, O>`
|
|
71
|
+
|
|
72
|
+
Abstract base class for all jobs.
|
|
73
|
+
|
|
74
|
+
| Static Property | Type | Default | Description |
|
|
75
|
+
| --------------- | ---------------- | ----------- | ----------------------------------- |
|
|
76
|
+
| `QUEUE_NAME` | `string` | `'default'` | BullMQ queue name |
|
|
77
|
+
| `CRON_SCHEDULE` | `string \| null` | `null` | Cron expression for repeatable jobs |
|
|
78
|
+
|
|
79
|
+
| Method | Description |
|
|
80
|
+
| ----------------------------- | --------------------------------------------------------------------- |
|
|
81
|
+
| `handle(data: I): Promise<O>` | Job execution logic. Receives the queued data and returns the result. |
|
|
82
|
+
|
|
83
|
+
## Queueing Jobs
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
import { WorkerService } from '@zyno-io/dk-server-foundation';
|
|
87
|
+
|
|
88
|
+
class OrderService {
|
|
89
|
+
constructor(private workerSvc: WorkerService) {}
|
|
90
|
+
|
|
91
|
+
async createOrder(order: Order) {
|
|
92
|
+
// ... create order ...
|
|
93
|
+
|
|
94
|
+
// Queue email notification
|
|
95
|
+
await this.workerSvc.queueJob(SendEmailJob, {
|
|
96
|
+
to: order.email,
|
|
97
|
+
subject: 'Order Confirmation',
|
|
98
|
+
body: `Your order #${order.id} has been placed.`
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Queue Options
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
await workerSvc.queueJob(SendEmailJob, data, {
|
|
108
|
+
delay: 5000, // Delay execution by 5 seconds
|
|
109
|
+
priority: 1, // Lower number = higher priority
|
|
110
|
+
attempts: 3, // Retry up to 3 times on failure
|
|
111
|
+
backoff: {
|
|
112
|
+
// Backoff strategy for retries
|
|
113
|
+
type: 'exponential',
|
|
114
|
+
delay: 1000
|
|
115
|
+
},
|
|
116
|
+
jobId: 'unique-id' // Deduplicate by job ID
|
|
117
|
+
});
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Jest Environment
|
|
121
|
+
|
|
122
|
+
In Jest, jobs are **not queued** -- `queueJob()` is a no-op. This prevents background job side effects during testing.
|
|
123
|
+
|
|
124
|
+
## Worker Runner
|
|
125
|
+
|
|
126
|
+
The `WorkerRunnerService` discovers all `@WorkerJob()` decorated classes, registers cron schedules, and processes jobs with full Deepkit dependency injection.
|
|
127
|
+
|
|
128
|
+
### Starting Manually
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# Via CLI
|
|
132
|
+
node app.js worker:start
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Auto-Start (Development)
|
|
136
|
+
|
|
137
|
+
In development, the runner starts automatically if `ENABLE_JOB_RUNNER` is not explicitly set to `false`.
|
|
138
|
+
|
|
139
|
+
## Job Recorder
|
|
140
|
+
|
|
141
|
+
The `WorkerRecorderService` monitors BullMQ queue events and logs job lifecycle to the `_jobs` database table. It tracks:
|
|
142
|
+
|
|
143
|
+
- Job added, active, completed, failed
|
|
144
|
+
- Execution duration
|
|
145
|
+
- Error messages for failed jobs
|
|
146
|
+
|
|
147
|
+
The `_jobs` table is created automatically if it doesn't exist.
|
|
148
|
+
|
|
149
|
+
### Leader Election
|
|
150
|
+
|
|
151
|
+
The recorder uses `LeaderService` (Redis-based leader election) so that when multiple runner instances are deployed, only one of them acts as the recorder at any given time. If the current recorder goes down, another runner automatically takes over recording duties. This eliminates the need for a separate observer process.
|
|
152
|
+
|
|
153
|
+
## Queue Registry
|
|
154
|
+
|
|
155
|
+
The `WorkerQueueRegistry` manages BullMQ queue instances as singletons:
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
import { WorkerQueueRegistry } from '@zyno-io/dk-server-foundation';
|
|
159
|
+
|
|
160
|
+
const queue = WorkerQueueRegistry.getQueue('default');
|
|
161
|
+
const defaultQueue = WorkerQueueRegistry.getDefaultQueue();
|
|
162
|
+
|
|
163
|
+
// Cleanup on shutdown
|
|
164
|
+
await WorkerQueueRegistry.closeQueues();
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Configuration
|
|
168
|
+
|
|
169
|
+
| Variable | Type | Default | Description |
|
|
170
|
+
| ------------------- | --------- | ------------ | --------------------- |
|
|
171
|
+
| `BULL_REDIS_HOST` | `string` | ā | Redis host for BullMQ |
|
|
172
|
+
| `BULL_REDIS_PORT` | `number` | ā | Redis port for BullMQ |
|
|
173
|
+
| `BULL_REDIS_PREFIX` | `string` | ā | Redis key prefix |
|
|
174
|
+
| `BULL_QUEUE` | `string` | `default` | Default queue name |
|
|
175
|
+
| `ENABLE_JOB_RUNNER` | `boolean` | `true` (dev) | Enable job runner |
|
|
176
|
+
|
|
177
|
+
Falls back to default `REDIS_*` settings if `BULL_REDIS_*` is not set.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zyno-io/dk-server-foundation-docs",
|
|
3
|
+
"private": true,
|
|
4
|
+
"scripts": {
|
|
5
|
+
"dev": "vitepress dev",
|
|
6
|
+
"build": "vitepress build",
|
|
7
|
+
"preview": "vitepress preview",
|
|
8
|
+
"screenshots": "node scripts/capture-devconsole-screenshots.js",
|
|
9
|
+
"screenshots:headless": "node scripts/capture-devconsole-screenshots.js --headless"
|
|
10
|
+
},
|
|
11
|
+
"devDependencies": {
|
|
12
|
+
"playwright": "^1.58.2",
|
|
13
|
+
"vitepress": "^1.6.4",
|
|
14
|
+
"vue": "^3.5.28"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# DevConsole Screenshot Capture
|
|
2
|
+
|
|
3
|
+
This directory contains a script to capture DevConsole screenshots for documentation.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
1. **Install dependencies** (if not already done):
|
|
8
|
+
```bash
|
|
9
|
+
cd docs && yarn install
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
2. **Install Playwright browsers**:
|
|
13
|
+
```bash
|
|
14
|
+
cd docs && npx playwright install chromium
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
3. **Ensure services are running**:
|
|
18
|
+
- MySQL server
|
|
19
|
+
- Redis server
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
### Step 1: Start the Demo Application
|
|
24
|
+
|
|
25
|
+
In one terminal window, start the demoapp:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
yarn demoapp
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Wait for the output to show:
|
|
32
|
+
```
|
|
33
|
+
DevConsole: http://localhost:3000/_devconsole/
|
|
34
|
+
Server started.
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Step 2: Run the Screenshot Capture Script
|
|
38
|
+
|
|
39
|
+
In another terminal window, run:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
yarn screenshots
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
This will:
|
|
46
|
+
- Open a Chromium browser (visible by default)
|
|
47
|
+
- Navigate through all 10 DevConsole views in order
|
|
48
|
+
- Wait for each page to load completely
|
|
49
|
+
- Capture full-page screenshots
|
|
50
|
+
- Save them to `docs/content/public/images/devconsole/`
|
|
51
|
+
|
|
52
|
+
### Options
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Run in headless mode (faster, no visible browser)
|
|
56
|
+
yarn screenshots:headless
|
|
57
|
+
|
|
58
|
+
# Use custom URL
|
|
59
|
+
yarn screenshots --url http://localhost:3001/_devconsole
|
|
60
|
+
|
|
61
|
+
# Use custom output directory
|
|
62
|
+
yarn screenshots --output ./screenshots
|
|
63
|
+
|
|
64
|
+
# Custom wait time between navigations (in milliseconds)
|
|
65
|
+
yarn screenshots --wait 3000
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Screenshots Captured
|
|
69
|
+
|
|
70
|
+
The script captures all DevConsole views in navigation order:
|
|
71
|
+
|
|
72
|
+
1. **01-dashboard.png** - Dashboard with app metrics
|
|
73
|
+
2. **02-routes.png** - HTTP Routes listing
|
|
74
|
+
3. **03-openapi.png** - OpenAPI Schema viewer
|
|
75
|
+
4. **04-requests.png** - HTTP Request detail drill-down
|
|
76
|
+
5. **05-srpc.png** - SRPC message request/response detail
|
|
77
|
+
6. **06-database.png** - Database query results
|
|
78
|
+
7. **07-health.png** - Health checks status
|
|
79
|
+
8. **08-mutex.png** - Mutex monitor
|
|
80
|
+
9. **09-repl.png** - Interactive REPL
|
|
81
|
+
10. **10-workers.png** - Workers/BullMQ monitor
|
|
82
|
+
|
|
83
|
+
## Troubleshooting
|
|
84
|
+
|
|
85
|
+
### "Connection refused" or "Navigation timeout"
|
|
86
|
+
|
|
87
|
+
Make sure the demoapp is running:
|
|
88
|
+
```bash
|
|
89
|
+
yarn demoapp
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Check that you can access http://localhost:3000/_devconsole in your browser.
|
|
93
|
+
|
|
94
|
+
### Browser not found
|
|
95
|
+
|
|
96
|
+
Install Playwright browsers:
|
|
97
|
+
```bash
|
|
98
|
+
npx playwright install chromium
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Screenshots are blank or incomplete
|
|
102
|
+
|
|
103
|
+
Increase the wait time:
|
|
104
|
+
```bash
|
|
105
|
+
yarn screenshots --wait 8000
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### MySQL or Redis connection errors
|
|
109
|
+
|
|
110
|
+
Ensure MySQL and Redis services are running:
|
|
111
|
+
```bash
|
|
112
|
+
# MySQL
|
|
113
|
+
sudo service mysql start
|
|
114
|
+
|
|
115
|
+
# Redis
|
|
116
|
+
sudo service redis-server start
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Manual Verification
|
|
120
|
+
|
|
121
|
+
After running the script, verify the screenshots:
|
|
122
|
+
|
|
123
|
+
1. Open `docs/content/public/images/devconsole/` directory
|
|
124
|
+
2. Check that all 10 PNG files exist
|
|
125
|
+
3. Open each image to verify:
|
|
126
|
+
- Correct view is captured
|
|
127
|
+
- Page is fully loaded
|
|
128
|
+
- No loading spinners visible
|
|
129
|
+
- Content is clearly visible
|
|
130
|
+
|
|
131
|
+
## Rebuilding Documentation
|
|
132
|
+
|
|
133
|
+
After capturing new screenshots, rebuild the docs:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
yarn docs:build
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Then preview locally:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
yarn docs:preview
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Open http://localhost:4173/dk-server-foundation/ to verify the documentation site with new screenshots.
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* DevConsole Screenshot Capture Script
|
|
6
|
+
*
|
|
7
|
+
* This script uses Playwright to capture screenshots of all DevConsole views
|
|
8
|
+
* in the correct navigation order with proper wait times.
|
|
9
|
+
*
|
|
10
|
+
* Prerequisites:
|
|
11
|
+
* 1. Install dependencies: cd docs && yarn install
|
|
12
|
+
* 2. Install browsers: cd docs && npx playwright install chromium
|
|
13
|
+
* 3. Start the demoapp: yarn demoapp
|
|
14
|
+
* 4. Wait for the server to be ready (check console output)
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* yarn screenshots [-- options]
|
|
18
|
+
*
|
|
19
|
+
* Options:
|
|
20
|
+
* --url <url> DevConsole URL (default: http://localhost:3000/_devconsole)
|
|
21
|
+
* --output <dir> Output directory (default: public/images/devconsole)
|
|
22
|
+
* --wait <ms> Wait time between navigations (default: 5000)
|
|
23
|
+
* --headless Run in headless mode (default: false for visibility)
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
const { chromium } = require('playwright');
|
|
27
|
+
const path = require('path');
|
|
28
|
+
const fs = require('fs');
|
|
29
|
+
|
|
30
|
+
// Parse command line arguments
|
|
31
|
+
const args = process.argv.slice(2);
|
|
32
|
+
const getArg = (name, defaultValue) => {
|
|
33
|
+
const index = args.indexOf(name);
|
|
34
|
+
return index !== -1 && args[index + 1] ? args[index + 1] : defaultValue;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const config = {
|
|
38
|
+
baseUrl: getArg('--url', 'http://localhost:3000/_devconsole'),
|
|
39
|
+
outputDir: getArg('--output', path.join(__dirname, '..', 'content', 'public', 'images', 'devconsole')),
|
|
40
|
+
waitTime: parseInt(getArg('--wait', '5000')),
|
|
41
|
+
headless: args.includes('--headless')
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// DevConsole views in navigation order
|
|
45
|
+
const views = [
|
|
46
|
+
{ name: 'Dashboard', path: '#/', filename: '01-dashboard.png' },
|
|
47
|
+
{ name: 'Routes', path: '#/routes', filename: '02-routes.png' },
|
|
48
|
+
{ name: 'OpenAPI', path: '#/openapi', filename: '03-openapi.png' },
|
|
49
|
+
{ name: 'Requests', path: '#/requests', filename: '04-requests.png', action: 'clickFirst' },
|
|
50
|
+
{ name: 'SRPC', path: '#/srpc', filename: '05-srpc.png', action: 'clickFirstThenMessage' },
|
|
51
|
+
{ name: 'Database', path: '#/database?table=notes', filename: '06-database.png', action: 'clickNotes' },
|
|
52
|
+
{ name: 'Health', path: '#/health', filename: '07-health.png' },
|
|
53
|
+
{ name: 'Mutex', path: '#/mutex', filename: '08-mutex.png' },
|
|
54
|
+
{ name: 'REPL', path: '#/repl', filename: '09-repl.png' },
|
|
55
|
+
{ name: 'Workers', path: '#/workers', filename: '10-workers.png' }
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
async function waitForDevConsole(page) {
|
|
59
|
+
// Wait for DevConsole to be fully loaded
|
|
60
|
+
await page.waitForSelector('text=DevConsole', { timeout: 30000 });
|
|
61
|
+
await page.waitForLoadState('networkidle');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async function captureScreenshot(page, view, outputPath) {
|
|
65
|
+
console.log(`šø Capturing: ${view.name}`);
|
|
66
|
+
|
|
67
|
+
// Navigate to the view
|
|
68
|
+
const url = `${config.baseUrl}${view.path}`;
|
|
69
|
+
await page.goto(url, { waitUntil: 'networkidle' });
|
|
70
|
+
|
|
71
|
+
// Wait for the page to stabilize
|
|
72
|
+
await page.waitForTimeout(config.waitTime);
|
|
73
|
+
|
|
74
|
+
// Handle special actions
|
|
75
|
+
if (view.action === 'clickFirst') {
|
|
76
|
+
// Click on the first row in a table to show detail view
|
|
77
|
+
try {
|
|
78
|
+
const firstRow = await page.locator('table tbody tr').first();
|
|
79
|
+
if (await firstRow.isVisible()) {
|
|
80
|
+
await firstRow.click();
|
|
81
|
+
await page.waitForTimeout(3000);
|
|
82
|
+
}
|
|
83
|
+
} catch {
|
|
84
|
+
console.warn(` ā ļø Could not click first row for ${view.name}`);
|
|
85
|
+
}
|
|
86
|
+
} else if (view.action === 'clickFirstThenMessage') {
|
|
87
|
+
// Click on the first connection row, then click the first message
|
|
88
|
+
try {
|
|
89
|
+
const firstRow = await page.locator('.srpc-top table tbody tr.clickable-row').first();
|
|
90
|
+
if (await firstRow.isVisible()) {
|
|
91
|
+
await firstRow.click();
|
|
92
|
+
await page.waitForTimeout(2000);
|
|
93
|
+
const firstMsg = await page.locator('.messages-list table tbody tr.clickable-row').first();
|
|
94
|
+
if (await firstMsg.isVisible()) {
|
|
95
|
+
await firstMsg.click();
|
|
96
|
+
await page.waitForTimeout(2000);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
} catch {
|
|
100
|
+
console.warn(` ā ļø Could not click connection/message for ${view.name}`);
|
|
101
|
+
}
|
|
102
|
+
} else if (view.action === 'clickNotes') {
|
|
103
|
+
// Click on notes entity in database view
|
|
104
|
+
try {
|
|
105
|
+
const notesEntity = await page.locator('text=notes').last();
|
|
106
|
+
if (await notesEntity.isVisible()) {
|
|
107
|
+
await notesEntity.click();
|
|
108
|
+
await page.waitForTimeout(3000);
|
|
109
|
+
}
|
|
110
|
+
} catch {
|
|
111
|
+
console.warn(` ā ļø Could not click notes entity for ${view.name}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Take full page screenshot
|
|
116
|
+
await page.screenshot({
|
|
117
|
+
path: outputPath,
|
|
118
|
+
fullPage: true,
|
|
119
|
+
type: 'png'
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
console.log(` ā
Saved to: ${outputPath}`);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
async function main() {
|
|
126
|
+
console.log('š DevConsole Screenshot Capture Script');
|
|
127
|
+
console.log('========================================');
|
|
128
|
+
console.log(`Base URL: ${config.baseUrl}`);
|
|
129
|
+
console.log(`Output Directory: ${config.outputDir}`);
|
|
130
|
+
console.log(`Wait Time: ${config.waitTime}ms`);
|
|
131
|
+
console.log(`Headless: ${config.headless}`);
|
|
132
|
+
console.log('');
|
|
133
|
+
|
|
134
|
+
// Ensure output directory exists
|
|
135
|
+
if (!fs.existsSync(config.outputDir)) {
|
|
136
|
+
fs.mkdirSync(config.outputDir, { recursive: true });
|
|
137
|
+
console.log(`š Created output directory: ${config.outputDir}`);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Launch browser
|
|
141
|
+
console.log('š Launching browser...');
|
|
142
|
+
const browser = await chromium.launch({
|
|
143
|
+
headless: config.headless,
|
|
144
|
+
args: ['--no-sandbox']
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
const context = await browser.newContext({
|
|
148
|
+
viewport: { width: 1280, height: 800 },
|
|
149
|
+
deviceScaleFactor: 1
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
const page = await context.newPage();
|
|
153
|
+
|
|
154
|
+
try {
|
|
155
|
+
// Navigate to DevConsole
|
|
156
|
+
console.log('š Navigating to DevConsole...');
|
|
157
|
+
await page.goto(config.baseUrl, { waitUntil: 'networkidle' });
|
|
158
|
+
await waitForDevConsole(page);
|
|
159
|
+
console.log('ā
DevConsole loaded successfully\n');
|
|
160
|
+
|
|
161
|
+
// Capture each view
|
|
162
|
+
for (const view of views) {
|
|
163
|
+
const outputPath = path.join(config.outputDir, view.filename);
|
|
164
|
+
await captureScreenshot(page, view, outputPath);
|
|
165
|
+
|
|
166
|
+
// Brief pause between captures
|
|
167
|
+
await page.waitForTimeout(1000);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
console.log('\nš All screenshots captured successfully!');
|
|
171
|
+
console.log(`š Screenshots saved to: ${config.outputDir}`);
|
|
172
|
+
} catch (error) {
|
|
173
|
+
console.error('ā Error capturing screenshots:', error);
|
|
174
|
+
throw error;
|
|
175
|
+
} finally {
|
|
176
|
+
await browser.close();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Run the script
|
|
181
|
+
main().catch(error => {
|
|
182
|
+
console.error('Fatal error:', error);
|
|
183
|
+
process.exit(1);
|
|
184
|
+
});
|