exisjs 0.6.1 → 0.7.0
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/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +2 -8
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +33 -44
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/exports.d.ts.map +1 -1
- package/dist/cli/commands/exports.js +5 -32
- package/dist/cli/commands/exports.js.map +1 -1
- package/dist/cli/commands/generate.d.ts +2 -13
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +27 -60
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +4 -4
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +2 -6
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/index.js +11 -23
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/routes.d.ts.map +1 -1
- package/dist/cli/routes.js +20 -8
- package/dist/cli/routes.js.map +1 -1
- package/dist/config/config.d.ts +2 -1
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +3 -2
- package/dist/config/config.js.map +1 -1
- package/dist/config/types.d.ts +7 -2
- package/dist/config/types.d.ts.map +1 -1
- package/dist/decorators/constants.d.ts +2 -2
- package/dist/decorators/constants.d.ts.map +1 -1
- package/dist/decorators/constants.js +2 -2
- package/dist/decorators/constants.js.map +1 -1
- package/dist/decorators/core.d.ts +4 -3
- package/dist/decorators/core.d.ts.map +1 -1
- package/dist/decorators/core.js +7 -4
- package/dist/decorators/core.js.map +1 -1
- package/dist/decorators/middleware.d.ts +0 -10
- package/dist/decorators/middleware.d.ts.map +1 -1
- package/dist/decorators/middleware.js +0 -25
- package/dist/decorators/middleware.js.map +1 -1
- package/dist/decorators/routing.d.ts +0 -2
- package/dist/decorators/routing.d.ts.map +1 -1
- package/dist/decorators/routing.js +1 -3
- package/dist/decorators/routing.js.map +1 -1
- package/dist/di/inject.d.ts +1 -2
- package/dist/di/inject.d.ts.map +1 -1
- package/dist/di/inject.js.map +1 -1
- package/dist/docs/ARCHITECTURE.md +46 -285
- package/dist/docs/BENCHMARKS.md +5 -5
- package/dist/docs/README.md +8 -11
- package/dist/docs/content/boundaries.mdx +151 -0
- package/dist/docs/content/cli/commands.mdx +66 -104
- package/dist/docs/content/cli/overview.mdx +37 -47
- package/dist/docs/content/cli/usage.mdx +29 -15
- package/dist/docs/content/decorators.mdx +107 -80
- package/dist/docs/content/installation.mdx +20 -1
- package/dist/docs/content/middleware.mdx +65 -291
- package/dist/docs/content/security.mdx +44 -246
- package/dist/docs/content/structure.mdx +227 -100
- package/dist/docs/content/validation.mdx +0 -17
- package/dist/docs/reference/decorators.mdx +24 -217
- package/dist/docs/reference/middleware.mdx +41 -217
- package/dist/docs/reference/validator.mdx +2 -5
- package/dist/error/errors.d.ts.map +1 -1
- package/dist/error/errors.js +16 -0
- package/dist/error/errors.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/start-server.js +10 -0
- package/dist/lib/start-server.js.map +1 -1
- package/dist/logger/index.d.ts +81 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +142 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/middleware/dedupe.d.ts +1 -1
- package/dist/middleware/dedupe.js +1 -1
- package/dist/middleware/middleware.d.ts +3 -5
- package/dist/middleware/middleware.d.ts.map +1 -1
- package/dist/middleware/middleware.js +2 -6
- package/dist/middleware/middleware.js.map +1 -1
- package/dist/router/{gateway.d.ts → boundary.d.ts} +21 -13
- package/dist/router/boundary.d.ts.map +1 -0
- package/dist/router/boundary.js +11 -0
- package/dist/router/boundary.js.map +1 -0
- package/dist/router/index.d.ts +3 -6
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +3 -7
- package/dist/router/index.js.map +1 -1
- package/dist/router/route-builder.d.ts +0 -28
- package/dist/router/route-builder.d.ts.map +1 -1
- package/dist/router/route-builder.js +0 -4
- package/dist/router/route-builder.js.map +1 -1
- package/dist/router/route-scanner.d.ts +1 -2
- package/dist/router/route-scanner.d.ts.map +1 -1
- package/dist/router/route-scanner.js +216 -193
- package/dist/router/route-scanner.js.map +1 -1
- package/dist/router/router.d.ts +4 -6
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +36 -72
- package/dist/router/router.js.map +1 -1
- package/dist/router/types.d.ts +2 -6
- package/dist/router/types.d.ts.map +1 -1
- package/dist/server/{bun-adapter.d.ts → adapters/bun-adapter.d.ts} +1 -1
- package/dist/server/adapters/bun-adapter.d.ts.map +1 -0
- package/dist/server/{bun-adapter.js → adapters/bun-adapter.js} +2 -24
- package/dist/server/adapters/bun-adapter.js.map +1 -0
- package/dist/server/{uws-adapter.d.ts → adapters/uws-adapter.d.ts} +1 -1
- package/dist/server/adapters/uws-adapter.d.ts.map +1 -0
- package/dist/server/{uws-adapter.js → adapters/uws-adapter.js} +1 -28
- package/dist/server/adapters/uws-adapter.js.map +1 -0
- package/dist/server/app.d.ts +9 -30
- package/dist/server/app.d.ts.map +1 -1
- package/dist/server/app.js +19 -134
- package/dist/server/app.js.map +1 -1
- package/dist/server/bootstrapper.d.ts +4 -15
- package/dist/server/bootstrapper.d.ts.map +1 -1
- package/dist/server/bootstrapper.js +30 -229
- package/dist/server/bootstrapper.js.map +1 -1
- package/dist/server/define.d.ts +2 -2
- package/dist/server/define.d.ts.map +1 -1
- package/dist/server/define.js +3 -3
- package/dist/server/define.js.map +1 -1
- package/dist/server/engines/bun-engine.d.ts +16 -0
- package/dist/server/engines/bun-engine.d.ts.map +1 -0
- package/dist/server/engines/bun-engine.js +41 -0
- package/dist/server/engines/bun-engine.js.map +1 -0
- package/dist/server/engines/engine.d.ts +16 -0
- package/dist/server/engines/engine.d.ts.map +1 -0
- package/dist/{queue/types.js → server/engines/engine.js} +1 -1
- package/dist/server/engines/engine.js.map +1 -0
- package/dist/server/engines/node-engine.d.ts +22 -0
- package/dist/server/engines/node-engine.d.ts.map +1 -0
- package/dist/server/engines/node-engine.js +130 -0
- package/dist/server/engines/node-engine.js.map +1 -0
- package/dist/server/engines/uws-engine.d.ts +16 -0
- package/dist/server/engines/uws-engine.d.ts.map +1 -0
- package/dist/server/engines/uws-engine.js +48 -0
- package/dist/server/engines/uws-engine.js.map +1 -0
- package/dist/server/request-handler.d.ts +0 -1
- package/dist/server/request-handler.d.ts.map +1 -1
- package/dist/server/request-handler.js +74 -48
- package/dist/server/request-handler.js.map +1 -1
- package/dist/server/request.d.ts +0 -8
- package/dist/server/request.d.ts.map +1 -1
- package/dist/server/request.js +0 -16
- package/dist/server/request.js.map +1 -1
- package/dist/utils/time.d.ts +6 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +15 -0
- package/dist/utils/time.js.map +1 -0
- package/dist/validator/index.d.ts +1 -7
- package/dist/validator/index.d.ts.map +1 -1
- package/dist/validator/index.js +1 -5
- package/dist/validator/index.js.map +1 -1
- package/dist/validator/tex-types.d.ts +15 -2
- package/dist/validator/tex-types.d.ts.map +1 -1
- package/dist/validator/tex-types.js +8 -0
- package/dist/validator/tex-types.js.map +1 -1
- package/dist/validator/tex.d.ts.map +1 -1
- package/dist/validator/tex.js +21 -2
- package/dist/validator/tex.js.map +1 -1
- package/package.json +9 -151
- package/dist/adapters/aws-lambda.d.ts +0 -21
- package/dist/adapters/aws-lambda.d.ts.map +0 -1
- package/dist/adapters/aws-lambda.js +0 -125
- package/dist/adapters/aws-lambda.js.map +0 -1
- package/dist/adapters/bun.d.ts +0 -9
- package/dist/adapters/bun.d.ts.map +0 -1
- package/dist/adapters/bun.js +0 -23
- package/dist/adapters/bun.js.map +0 -1
- package/dist/adapters/cloudflare.d.ts +0 -10
- package/dist/adapters/cloudflare.d.ts.map +0 -1
- package/dist/adapters/cloudflare.js +0 -22
- package/dist/adapters/cloudflare.js.map +0 -1
- package/dist/adapters/deno.d.ts +0 -7
- package/dist/adapters/deno.d.ts.map +0 -1
- package/dist/adapters/deno.js +0 -21
- package/dist/adapters/deno.js.map +0 -1
- package/dist/adapters/fastly.d.ts +0 -6
- package/dist/adapters/fastly.d.ts.map +0 -1
- package/dist/adapters/fastly.js +0 -20
- package/dist/adapters/fastly.js.map +0 -1
- package/dist/adapters/fetch.d.ts +0 -30
- package/dist/adapters/fetch.d.ts.map +0 -1
- package/dist/adapters/fetch.js +0 -119
- package/dist/adapters/fetch.js.map +0 -1
- package/dist/adapters/index.d.ts +0 -9
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js +0 -28
- package/dist/adapters/index.js.map +0 -1
- package/dist/adapters/netlify.d.ts +0 -8
- package/dist/adapters/netlify.d.ts.map +0 -1
- package/dist/adapters/netlify.js +0 -20
- package/dist/adapters/netlify.js.map +0 -1
- package/dist/adapters/vercel.d.ts +0 -17
- package/dist/adapters/vercel.d.ts.map +0 -1
- package/dist/adapters/vercel.js +0 -23
- package/dist/adapters/vercel.js.map +0 -1
- package/dist/auth/index.d.ts +0 -8
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -49
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/jwt.d.ts +0 -20
- package/dist/auth/jwt.d.ts.map +0 -1
- package/dist/auth/jwt.js +0 -59
- package/dist/auth/jwt.js.map +0 -1
- package/dist/auth/oauth/core.d.ts +0 -96
- package/dist/auth/oauth/core.d.ts.map +0 -1
- package/dist/auth/oauth/core.js +0 -203
- package/dist/auth/oauth/core.js.map +0 -1
- package/dist/auth/oauth/index.d.ts +0 -45
- package/dist/auth/oauth/index.d.ts.map +0 -1
- package/dist/auth/oauth/index.js +0 -64
- package/dist/auth/oauth/index.js.map +0 -1
- package/dist/auth/oauth/middleware.d.ts +0 -63
- package/dist/auth/oauth/middleware.d.ts.map +0 -1
- package/dist/auth/oauth/middleware.js +0 -164
- package/dist/auth/oauth/middleware.js.map +0 -1
- package/dist/auth/oauth/providers/custom.d.ts +0 -41
- package/dist/auth/oauth/providers/custom.d.ts.map +0 -1
- package/dist/auth/oauth/providers/custom.js +0 -204
- package/dist/auth/oauth/providers/custom.js.map +0 -1
- package/dist/auth/oauth/providers/discord.d.ts +0 -23
- package/dist/auth/oauth/providers/discord.d.ts.map +0 -1
- package/dist/auth/oauth/providers/discord.js +0 -130
- package/dist/auth/oauth/providers/discord.js.map +0 -1
- package/dist/auth/oauth/providers/facebook.d.ts +0 -28
- package/dist/auth/oauth/providers/facebook.d.ts.map +0 -1
- package/dist/auth/oauth/providers/facebook.js +0 -124
- package/dist/auth/oauth/providers/facebook.js.map +0 -1
- package/dist/auth/oauth/providers/github.d.ts +0 -25
- package/dist/auth/oauth/providers/github.d.ts.map +0 -1
- package/dist/auth/oauth/providers/github.js +0 -132
- package/dist/auth/oauth/providers/github.js.map +0 -1
- package/dist/auth/oauth/providers/google.d.ts +0 -23
- package/dist/auth/oauth/providers/google.d.ts.map +0 -1
- package/dist/auth/oauth/providers/google.js +0 -134
- package/dist/auth/oauth/providers/google.js.map +0 -1
- package/dist/auth/oauth/providers/microsoft.d.ts +0 -28
- package/dist/auth/oauth/providers/microsoft.d.ts.map +0 -1
- package/dist/auth/oauth/providers/microsoft.js +0 -136
- package/dist/auth/oauth/providers/microsoft.js.map +0 -1
- package/dist/auth/oauth/types.d.ts +0 -158
- package/dist/auth/oauth/types.d.ts.map +0 -1
- package/dist/auth/oauth/types.js +0 -4
- package/dist/auth/oauth/types.js.map +0 -1
- package/dist/auth/password.d.ts +0 -25
- package/dist/auth/password.d.ts.map +0 -1
- package/dist/auth/password.js +0 -93
- package/dist/auth/password.js.map +0 -1
- package/dist/auth/rbac.d.ts +0 -10
- package/dist/auth/rbac.d.ts.map +0 -1
- package/dist/auth/rbac.js +0 -34
- package/dist/auth/rbac.js.map +0 -1
- package/dist/auth/session.d.ts +0 -26
- package/dist/auth/session.d.ts.map +0 -1
- package/dist/auth/session.js +0 -134
- package/dist/auth/session.js.map +0 -1
- package/dist/cache/index.d.ts +0 -4
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/index.js +0 -25
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/store.d.ts +0 -58
- package/dist/cache/store.d.ts.map +0 -1
- package/dist/cache/store.js +0 -298
- package/dist/cache/store.js.map +0 -1
- package/dist/cron/parser.d.ts +0 -2
- package/dist/cron/parser.d.ts.map +0 -1
- package/dist/cron/parser.js +0 -52
- package/dist/cron/parser.js.map +0 -1
- package/dist/cron/scheduler.d.ts +0 -23
- package/dist/cron/scheduler.d.ts.map +0 -1
- package/dist/cron/scheduler.js +0 -114
- package/dist/cron/scheduler.js.map +0 -1
- package/dist/database/adapters/mongodb.d.ts +0 -58
- package/dist/database/adapters/mongodb.d.ts.map +0 -1
- package/dist/database/adapters/mongodb.js +0 -264
- package/dist/database/adapters/mongodb.js.map +0 -1
- package/dist/database/adapters/mysql.d.ts +0 -27
- package/dist/database/adapters/mysql.d.ts.map +0 -1
- package/dist/database/adapters/mysql.js +0 -188
- package/dist/database/adapters/mysql.js.map +0 -1
- package/dist/database/adapters/postgres.d.ts +0 -28
- package/dist/database/adapters/postgres.d.ts.map +0 -1
- package/dist/database/adapters/postgres.js +0 -174
- package/dist/database/adapters/postgres.js.map +0 -1
- package/dist/database/adapters/sqlite.d.ts +0 -27
- package/dist/database/adapters/sqlite.d.ts.map +0 -1
- package/dist/database/adapters/sqlite.js +0 -149
- package/dist/database/adapters/sqlite.js.map +0 -1
- package/dist/database/index.d.ts +0 -42
- package/dist/database/index.d.ts.map +0 -1
- package/dist/database/index.js +0 -58
- package/dist/database/index.js.map +0 -1
- package/dist/database/manager.d.ts +0 -141
- package/dist/database/manager.d.ts.map +0 -1
- package/dist/database/manager.js +0 -337
- package/dist/database/manager.js.map +0 -1
- package/dist/database/migration.d.ts +0 -57
- package/dist/database/migration.d.ts.map +0 -1
- package/dist/database/migration.js +0 -329
- package/dist/database/migration.js.map +0 -1
- package/dist/database/query-builder.d.ts +0 -95
- package/dist/database/query-builder.d.ts.map +0 -1
- package/dist/database/query-builder.js +0 -404
- package/dist/database/query-builder.js.map +0 -1
- package/dist/database/sql/index.d.ts +0 -18
- package/dist/database/sql/index.d.ts.map +0 -1
- package/dist/database/sql/index.js +0 -74
- package/dist/database/sql/index.js.map +0 -1
- package/dist/database/sql/schema.d.ts +0 -38
- package/dist/database/sql/schema.d.ts.map +0 -1
- package/dist/database/sql/schema.js +0 -80
- package/dist/database/sql/schema.js.map +0 -1
- package/dist/database/synchronizer.d.ts +0 -12
- package/dist/database/synchronizer.d.ts.map +0 -1
- package/dist/database/synchronizer.js +0 -82
- package/dist/database/synchronizer.js.map +0 -1
- package/dist/database/types.d.ts +0 -184
- package/dist/database/types.d.ts.map +0 -1
- package/dist/database/types.js +0 -4
- package/dist/database/types.js.map +0 -1
- package/dist/dataloader/dataloader.d.ts +0 -23
- package/dist/dataloader/dataloader.d.ts.map +0 -1
- package/dist/dataloader/dataloader.js +0 -98
- package/dist/dataloader/dataloader.js.map +0 -1
- package/dist/dataloader/index.d.ts +0 -3
- package/dist/dataloader/index.d.ts.map +0 -1
- package/dist/dataloader/index.js +0 -19
- package/dist/dataloader/index.js.map +0 -1
- package/dist/dataloader/registry.d.ts +0 -17
- package/dist/dataloader/registry.d.ts.map +0 -1
- package/dist/dataloader/registry.js +0 -47
- package/dist/dataloader/registry.js.map +0 -1
- package/dist/dev/dep-graph.d.ts +0 -2
- package/dist/dev/dep-graph.d.ts.map +0 -1
- package/dist/dev/dep-graph.js +0 -111
- package/dist/dev/dep-graph.js.map +0 -1
- package/dist/dev/hot-reload.d.ts +0 -30
- package/dist/dev/hot-reload.d.ts.map +0 -1
- package/dist/dev/hot-reload.js +0 -262
- package/dist/dev/hot-reload.js.map +0 -1
- package/dist/docs/content/adapters.mdx +0 -199
- package/dist/docs/content/cache.mdx +0 -239
- package/dist/docs/content/circuit-breaker.mdx +0 -130
- package/dist/docs/content/cron.mdx +0 -109
- package/dist/docs/content/database.mdx +0 -278
- package/dist/docs/content/gateways.mdx +0 -376
- package/dist/docs/content/oauth.mdx +0 -179
- package/dist/docs/content/queues.mdx +0 -177
- package/dist/docs/content/rpc.mdx +0 -146
- package/dist/docs/content/sse.mdx +0 -159
- package/dist/docs/content/websockets.mdx +0 -289
- package/dist/docs/integrations/README.md +0 -23
- package/dist/docs/integrations/jwt.mdx +0 -151
- package/dist/docs/integrations/mongo.mdx +0 -183
- package/dist/docs/integrations/observability.mdx +0 -125
- package/dist/docs/integrations/openai.mdx +0 -108
- package/dist/docs/integrations/postgres.mdx +0 -190
- package/dist/docs/integrations/posthog.mdx +0 -122
- package/dist/docs/integrations/redis.mdx +0 -141
- package/dist/docs/integrations/resend.mdx +0 -117
- package/dist/docs/integrations/s3.mdx +0 -122
- package/dist/docs/integrations/swagger.mdx +0 -113
- package/dist/docs/reference/adapters.mdx +0 -130
- package/dist/docs/reference/auth.mdx +0 -183
- package/dist/docs/reference/cache.mdx +0 -132
- package/dist/docs/reference/circuit-breaker.mdx +0 -71
- package/dist/docs/reference/queue.mdx +0 -155
- package/dist/docs/reference/storage.mdx +0 -116
- package/dist/docs/reference/swagger.mdx +0 -132
- package/dist/integrations/drizzle.d.ts +0 -10
- package/dist/integrations/drizzle.d.ts.map +0 -1
- package/dist/integrations/drizzle.js +0 -34
- package/dist/integrations/drizzle.js.map +0 -1
- package/dist/integrations/jwt.d.ts +0 -12
- package/dist/integrations/jwt.d.ts.map +0 -1
- package/dist/integrations/jwt.js +0 -29
- package/dist/integrations/jwt.js.map +0 -1
- package/dist/integrations/mongodb.d.ts +0 -13
- package/dist/integrations/mongodb.d.ts.map +0 -1
- package/dist/integrations/mongodb.js +0 -48
- package/dist/integrations/mongodb.js.map +0 -1
- package/dist/integrations/mongoose.d.ts +0 -13
- package/dist/integrations/mongoose.d.ts.map +0 -1
- package/dist/integrations/mongoose.js +0 -84
- package/dist/integrations/mongoose.js.map +0 -1
- package/dist/integrations/openai.d.ts +0 -12
- package/dist/integrations/openai.d.ts.map +0 -1
- package/dist/integrations/openai.js +0 -47
- package/dist/integrations/openai.js.map +0 -1
- package/dist/integrations/postgres.d.ts +0 -13
- package/dist/integrations/postgres.d.ts.map +0 -1
- package/dist/integrations/postgres.js +0 -55
- package/dist/integrations/postgres.js.map +0 -1
- package/dist/integrations/posthog.d.ts +0 -13
- package/dist/integrations/posthog.d.ts.map +0 -1
- package/dist/integrations/posthog.js +0 -49
- package/dist/integrations/posthog.js.map +0 -1
- package/dist/integrations/prisma.d.ts +0 -10
- package/dist/integrations/prisma.d.ts.map +0 -1
- package/dist/integrations/prisma.js +0 -39
- package/dist/integrations/prisma.js.map +0 -1
- package/dist/integrations/redis.d.ts +0 -12
- package/dist/integrations/redis.d.ts.map +0 -1
- package/dist/integrations/redis.js +0 -48
- package/dist/integrations/redis.js.map +0 -1
- package/dist/integrations/resend.d.ts +0 -12
- package/dist/integrations/resend.d.ts.map +0 -1
- package/dist/integrations/resend.js +0 -47
- package/dist/integrations/resend.js.map +0 -1
- package/dist/integrations/s3.d.ts +0 -15
- package/dist/integrations/s3.d.ts.map +0 -1
- package/dist/integrations/s3.js +0 -60
- package/dist/integrations/s3.js.map +0 -1
- package/dist/integrations/supabase.d.ts +0 -13
- package/dist/integrations/supabase.d.ts.map +0 -1
- package/dist/integrations/supabase.js +0 -51
- package/dist/integrations/supabase.js.map +0 -1
- package/dist/middleware/cache.d.ts +0 -21
- package/dist/middleware/cache.d.ts.map +0 -1
- package/dist/middleware/cache.js +0 -156
- package/dist/middleware/cache.js.map +0 -1
- package/dist/observability/health.d.ts +0 -23
- package/dist/observability/health.d.ts.map +0 -1
- package/dist/observability/health.js +0 -49
- package/dist/observability/health.js.map +0 -1
- package/dist/observability/index.d.ts +0 -4
- package/dist/observability/index.d.ts.map +0 -1
- package/dist/observability/index.js +0 -10
- package/dist/observability/index.js.map +0 -1
- package/dist/observability/metrics.d.ts +0 -6
- package/dist/observability/metrics.d.ts.map +0 -1
- package/dist/observability/metrics.js +0 -60
- package/dist/observability/metrics.js.map +0 -1
- package/dist/observability/otel.d.ts +0 -27
- package/dist/observability/otel.d.ts.map +0 -1
- package/dist/observability/otel.js +0 -45
- package/dist/observability/otel.js.map +0 -1
- package/dist/observability/prometheus.d.ts +0 -30
- package/dist/observability/prometheus.d.ts.map +0 -1
- package/dist/observability/prometheus.js +0 -31
- package/dist/observability/prometheus.js.map +0 -1
- package/dist/queue/client.d.ts +0 -13
- package/dist/queue/client.d.ts.map +0 -1
- package/dist/queue/client.js +0 -83
- package/dist/queue/client.js.map +0 -1
- package/dist/queue/drivers/MemoryDriver.d.ts +0 -21
- package/dist/queue/drivers/MemoryDriver.d.ts.map +0 -1
- package/dist/queue/drivers/MemoryDriver.js +0 -176
- package/dist/queue/drivers/MemoryDriver.js.map +0 -1
- package/dist/queue/drivers/RedisDriver.d.ts +0 -19
- package/dist/queue/drivers/RedisDriver.d.ts.map +0 -1
- package/dist/queue/drivers/RedisDriver.js +0 -130
- package/dist/queue/drivers/RedisDriver.js.map +0 -1
- package/dist/queue/index.d.ts +0 -18
- package/dist/queue/index.d.ts.map +0 -1
- package/dist/queue/index.js +0 -37
- package/dist/queue/index.js.map +0 -1
- package/dist/queue/manager.d.ts +0 -18
- package/dist/queue/manager.d.ts.map +0 -1
- package/dist/queue/manager.js +0 -59
- package/dist/queue/manager.js.map +0 -1
- package/dist/queue/types.d.ts +0 -55
- package/dist/queue/types.d.ts.map +0 -1
- package/dist/queue/types.js.map +0 -1
- package/dist/queue/worker.d.ts +0 -18
- package/dist/queue/worker.d.ts.map +0 -1
- package/dist/queue/worker.js +0 -176
- package/dist/queue/worker.js.map +0 -1
- package/dist/router/gateway.d.ts.map +0 -1
- package/dist/router/gateway.js +0 -11
- package/dist/router/gateway.js.map +0 -1
- package/dist/server/bun-adapter.d.ts.map +0 -1
- package/dist/server/bun-adapter.js.map +0 -1
- package/dist/server/sse.d.ts +0 -16
- package/dist/server/sse.d.ts.map +0 -1
- package/dist/server/sse.js +0 -51
- package/dist/server/sse.js.map +0 -1
- package/dist/server/uws-adapter.d.ts.map +0 -1
- package/dist/server/uws-adapter.js.map +0 -1
- package/dist/storage/index.d.ts +0 -15
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js +0 -7
- package/dist/storage/index.js.map +0 -1
- package/dist/swagger/index.d.ts +0 -9
- package/dist/swagger/index.d.ts.map +0 -1
- package/dist/swagger/index.js +0 -165
- package/dist/swagger/index.js.map +0 -1
- package/dist/threads/pool.d.ts +0 -14
- package/dist/threads/pool.d.ts.map +0 -1
- package/dist/threads/pool.js +0 -93
- package/dist/threads/pool.js.map +0 -1
- package/dist/threads/worker-runner.d.ts +0 -2
- package/dist/threads/worker-runner.d.ts.map +0 -1
- package/dist/threads/worker-runner.js +0 -71
- package/dist/threads/worker-runner.js.map +0 -1
- package/dist/validator/validator.d.ts +0 -360
- package/dist/validator/validator.d.ts.map +0 -1
- package/dist/validator/validator.js +0 -931
- package/dist/validator/validator.js.map +0 -1
- package/dist/websocket/orchestrator.d.ts +0 -11
- package/dist/websocket/orchestrator.d.ts.map +0 -1
- package/dist/websocket/orchestrator.js +0 -238
- package/dist/websocket/orchestrator.js.map +0 -1
- package/dist/websocket/server.d.ts +0 -66
- package/dist/websocket/server.d.ts.map +0 -1
- package/dist/websocket/server.js +0 -158
- package/dist/websocket/server.js.map +0 -1
- package/dist/websocket/socket.d.ts +0 -119
- package/dist/websocket/socket.d.ts.map +0 -1
- package/dist/websocket/socket.js +0 -242
- package/dist/websocket/socket.js.map +0 -1
|
@@ -1,175 +1,76 @@
|
|
|
1
1
|
---
|
|
2
|
-
nextUrl: "/docs/
|
|
3
|
-
nextTitle: "
|
|
2
|
+
nextUrl: "/docs/structure"
|
|
3
|
+
nextTitle: "Project Structure"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Security &
|
|
6
|
+
# Security & Edge Middleware
|
|
7
7
|
|
|
8
|
-
ExisJS
|
|
8
|
+
ExisJS provides native, zero-dependency edge and request security middleware built directly into core.
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
## 1.
|
|
12
|
+
## 1. Edge Security Middlewares
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
The following security middlewares are available from `exisjs/middleware` and can be registered globally in `server.ts` or scoped to route trees via `boundary.ts`:
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
- `helmet(options?)`: Sets 14+ secure HTTP headers (Strict-Transport-Security, X-Content-Type-Options: nosniff, X-Frame-Options: DENY, and CSP).
|
|
17
|
+
- `csrf(options)`: Enforces the Signed Double Submit Cookie pattern to protect state-changing requests (POST, PUT, DELETE) from CSRF attacks.
|
|
18
|
+
- `hpp()`: Protects against HTTP Parameter Pollution attacks by ensuring array query parameters/form fields are safely handled.
|
|
19
|
+
- `dbSanitize(options?)`: Protects against NoSQL query operator injection (`$where` and other malicious keys) before reaching database layers.
|
|
20
|
+
- `timeout(ms)`: Automatically terminates requests that exceed the specified timeout limit, returning a 503 response.
|
|
17
21
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
import { controller, route } from 'exisjs/router'
|
|
22
|
-
import { Password } from 'exisjs/auth'
|
|
23
|
-
|
|
24
|
-
export default controller({
|
|
25
|
-
register: route.post('/register', {
|
|
26
|
-
async handle(req, res) {
|
|
27
|
-
const plaintext = req.body.password
|
|
28
|
-
|
|
29
|
-
// 1. Hash the password
|
|
30
|
-
// Uses secure defaults (cost: 16384, block: 8)
|
|
31
|
-
const hashedPassword = await Password.hashPassword(plaintext)
|
|
32
|
-
|
|
33
|
-
await db.users.create({ password: hashedPassword })
|
|
34
|
-
return { success: true }
|
|
35
|
-
}
|
|
36
|
-
}),
|
|
37
|
-
|
|
38
|
-
login: route.post('/login', {
|
|
39
|
-
async handle(req, res) {
|
|
40
|
-
const user = await db.users.findByEmail(req.body.email)
|
|
41
|
-
|
|
42
|
-
// 2. Verify the hash (timing-safe)
|
|
43
|
-
const isValid = await Password.verifyPassword(req.body.password, user.password)
|
|
44
|
-
|
|
45
|
-
if (!isValid) throw new Error("Invalid credentials")
|
|
46
|
-
return { success: true }
|
|
47
|
-
}
|
|
48
|
-
})
|
|
49
|
-
})
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
#### Class-Based (OOP) Paradigm
|
|
53
|
-
|
|
54
|
-
```typescript filename="src/http/auth/route.ts"
|
|
55
|
-
import { Controller, Post, Body } from 'exisjs/decorators'
|
|
56
|
-
import { Password } from 'exisjs/auth'
|
|
57
|
-
|
|
58
|
-
@Controller()
|
|
59
|
-
export default class AuthController {
|
|
60
|
-
@Post('/register')
|
|
61
|
-
async register(@Body() body: any) {
|
|
62
|
-
const plaintext = body.password
|
|
63
|
-
|
|
64
|
-
// 1. Hash the password
|
|
65
|
-
// Uses secure defaults (cost: 16384, block: 8)
|
|
66
|
-
const hashedPassword = await Password.hashPassword(plaintext)
|
|
67
|
-
|
|
68
|
-
await db.users.create({ password: hashedPassword })
|
|
69
|
-
return { success: true }
|
|
70
|
-
}
|
|
22
|
+
```typescript filename="src/http/server.ts"
|
|
23
|
+
import { exis } from 'exisjs'
|
|
24
|
+
import { helmet, csrf, timeout, hpp } from 'exisjs/middleware'
|
|
71
25
|
|
|
72
|
-
|
|
73
|
-
async
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const isValid = await Password.verifyPassword(body.password, user.password)
|
|
78
|
-
|
|
79
|
-
if (!isValid) throw new Error("Invalid credentials")
|
|
80
|
-
return { success: true }
|
|
26
|
+
export default exis({
|
|
27
|
+
async onStart(app) {
|
|
28
|
+
app.use(helmet())
|
|
29
|
+
app.use(timeout(10000))
|
|
30
|
+
app.use(hpp())
|
|
81
31
|
}
|
|
82
|
-
}
|
|
32
|
+
})
|
|
83
33
|
```
|
|
84
34
|
|
|
85
35
|
---
|
|
86
36
|
|
|
87
|
-
## 2.
|
|
88
|
-
|
|
89
|
-
ExisJS provides a JWT engine using native `createHmac('sha256')`.
|
|
90
|
-
|
|
91
|
-
```typescript filename="src/http/auth/route.ts"
|
|
92
|
-
import { JWT } from 'exisjs/auth'
|
|
37
|
+
## 2. In-Memory Rate Limiting
|
|
93
38
|
|
|
94
|
-
|
|
95
|
-
const token = JWT.signJWT({ userId: 123, role: 'admin' }, process.env.JWT_SECRET, {
|
|
96
|
-
expiresIn: 86400
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
// Verify a Token
|
|
100
|
-
// Automatically throws 401 Unauthorized or TokenExpiredError if invalid
|
|
101
|
-
const payload = JWT.verifyJWT<{ userId: number, role: string }>(token, process.env.JWT_SECRET)
|
|
102
|
-
```
|
|
39
|
+
The core `rateLimit` middleware provides high-performance in-memory and off-heap native rate limiting:
|
|
103
40
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
#### Functional Paradigm
|
|
41
|
+
```typescript filename="src/http/boundary.ts"
|
|
42
|
+
import { defineBoundary } from 'exisjs/router'
|
|
43
|
+
import { rateLimit } from 'exisjs/middleware'
|
|
109
44
|
|
|
110
|
-
|
|
111
|
-
import { defineGateway } from 'exisjs/router'
|
|
112
|
-
import { JWT } from 'exisjs/auth'
|
|
45
|
+
export const config = defineBoundary({})
|
|
113
46
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
req.user = JWT.verifyJWT(token, process.env.JWT_SECRET)
|
|
120
|
-
next()
|
|
121
|
-
}
|
|
122
|
-
]
|
|
47
|
+
// Apply rate limiting chain step across the boundary
|
|
48
|
+
export const limiter = rateLimit({
|
|
49
|
+
windowMs: 60 * 1000, // 1 minute
|
|
50
|
+
max: 100, // 100 requests per minute
|
|
51
|
+
message: 'Too many requests from this IP, please try again after a minute'
|
|
123
52
|
})
|
|
124
53
|
```
|
|
125
54
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
```typescript filename="src/http/admin/gateway.ts"
|
|
129
|
-
import { Gateway } from 'exisjs/decorators'
|
|
130
|
-
import { JWT } from 'exisjs/auth'
|
|
131
|
-
|
|
132
|
-
@Gateway({
|
|
133
|
-
middlewares: [
|
|
134
|
-
(req, res, next) => {
|
|
135
|
-
const token = req.headers.authorization?.split(' ')[1]
|
|
136
|
-
req.user = JWT.verifyJWT(token, process.env.JWT_SECRET)
|
|
137
|
-
next()
|
|
138
|
-
}
|
|
139
|
-
]
|
|
140
|
-
})
|
|
141
|
-
export default class AdminGateway {}
|
|
142
|
-
```
|
|
55
|
+
> [!NOTE]
|
|
56
|
+
> The core `rateLimit` middleware runs using an in-memory native off-heap store. For distributed, multi-instance rate limiting backed by Redis, use `@exisjs/cache`.
|
|
143
57
|
|
|
144
58
|
---
|
|
145
59
|
|
|
146
|
-
## 3. Role-Based Access Control (RBAC)
|
|
60
|
+
## 3. Role-Based Access Control (RBAC) Metadata
|
|
147
61
|
|
|
148
|
-
|
|
62
|
+
ExisJS allows declarative permission metadata to be attached to routes:
|
|
149
63
|
|
|
150
64
|
#### Functional Paradigm
|
|
151
65
|
|
|
152
66
|
```typescript filename="src/http/admin/route.ts"
|
|
153
67
|
import { controller, route } from 'exisjs/router'
|
|
154
|
-
import { parseUser } from '../middlewares/auth.js'
|
|
155
68
|
|
|
156
69
|
export default controller({
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
middleware: [parseUser()],
|
|
162
|
-
handle() {
|
|
163
|
-
return { success: true }
|
|
164
|
-
}
|
|
165
|
-
}),
|
|
166
|
-
|
|
167
|
-
// Accepts an array of allowed permissions
|
|
168
|
-
viewDashboard: route.get('/dashboard', {
|
|
169
|
-
permissions: ['admin', 'superadmin', 'manager'],
|
|
170
|
-
middleware: [parseUser()],
|
|
171
|
-
handle() {
|
|
172
|
-
return { metrics: [] }
|
|
70
|
+
deleteItem: route.delete('/:id', {
|
|
71
|
+
permissions: ['admin'],
|
|
72
|
+
handle({ params }) {
|
|
73
|
+
return { success: true, deleted: params.id }
|
|
173
74
|
}
|
|
174
75
|
})
|
|
175
76
|
})
|
|
@@ -178,117 +79,14 @@ export default controller({
|
|
|
178
79
|
#### Class-Based (OOP) Paradigm
|
|
179
80
|
|
|
180
81
|
```typescript filename="src/http/admin/route.ts"
|
|
181
|
-
import { Controller, Delete,
|
|
182
|
-
import { parseUser } from '../middlewares/auth.js'
|
|
82
|
+
import { Controller, Delete, Param, Permissions } from 'exisjs/decorators'
|
|
183
83
|
|
|
184
|
-
@Use(parseUser())
|
|
185
84
|
@Controller()
|
|
186
85
|
export default class AdminController {
|
|
187
|
-
|
|
188
|
-
@
|
|
189
|
-
@
|
|
190
|
-
|
|
191
|
-
return { success: true }
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
// Accepts an array of allowed permissions
|
|
195
|
-
@Permissions(['admin', 'superadmin', 'manager'])
|
|
196
|
-
@Get('/dashboard')
|
|
197
|
-
async viewDashboard() {
|
|
198
|
-
return { metrics: [] }
|
|
86
|
+
@Permissions('admin')
|
|
87
|
+
@Delete('/:id')
|
|
88
|
+
async deleteItem(@Param('id') id: string) {
|
|
89
|
+
return { success: true, deleted: id }
|
|
199
90
|
}
|
|
200
91
|
}
|
|
201
92
|
```
|
|
202
|
-
|
|
203
|
-
---
|
|
204
|
-
|
|
205
|
-
## 4. Stateful Sessions
|
|
206
|
-
|
|
207
|
-
If you prefer stateful authentication over JWTs, ExisJS ships with a secure session middleware. It securely signs the session cookie (`exis_sid`) and automatically persists changes to `req.session` back to the active store.
|
|
208
|
-
|
|
209
|
-
By default, it uses a `MemorySessionStore`, but you can plug in any distributed store (like Redis) by implementing the `SessionStore` interface.
|
|
210
|
-
|
|
211
|
-
#### Functional Paradigm
|
|
212
|
-
|
|
213
|
-
```typescript filename="src/http/server.ts"
|
|
214
|
-
import { exis } from 'exisjs'
|
|
215
|
-
import { session } from 'exisjs/auth'
|
|
216
|
-
|
|
217
|
-
export default exis({
|
|
218
|
-
async onStart(app) {
|
|
219
|
-
// 1. Mount the session globally
|
|
220
|
-
app.use(session({
|
|
221
|
-
secret: process.env.SESSION_SECRET_KEY, // Must be 32+ chars
|
|
222
|
-
ttl: 86400 * 1000 // 1 day
|
|
223
|
-
}))
|
|
224
|
-
}
|
|
225
|
-
})
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
#### Class-Based (OOP) Paradigm
|
|
229
|
-
|
|
230
|
-
```typescript filename="src/http/server.ts"
|
|
231
|
-
import { Server } from 'exisjs/decorators'
|
|
232
|
-
import { session } from 'exisjs/auth'
|
|
233
|
-
import type { App } from 'exisjs'
|
|
234
|
-
|
|
235
|
-
@Server()
|
|
236
|
-
export default class RootServer {
|
|
237
|
-
async onStart(app: App) {
|
|
238
|
-
// 1. Mount the session globally
|
|
239
|
-
app.use(session({
|
|
240
|
-
secret: process.env.SESSION_SECRET_KEY, // Must be 32+ chars
|
|
241
|
-
ttl: 86400 * 1000 // 1 day
|
|
242
|
-
}))
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
#### Functional Paradigm
|
|
248
|
-
|
|
249
|
-
```typescript filename="src/http/cart/route.ts"
|
|
250
|
-
import { controller, route } from 'exisjs/router'
|
|
251
|
-
|
|
252
|
-
export default controller({
|
|
253
|
-
addItem: route.post('/', {
|
|
254
|
-
handle(req, res) {
|
|
255
|
-
// 2. Read and Write natively to req.session
|
|
256
|
-
// ExisJS automatically saves this back to the Store when the request ends
|
|
257
|
-
if (!req.session.cart) req.session.cart = []
|
|
258
|
-
|
|
259
|
-
req.session.cart.push(req.body.itemId)
|
|
260
|
-
return { cart: req.session.cart }
|
|
261
|
-
}
|
|
262
|
-
})
|
|
263
|
-
})
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
#### Class-Based (OOP) Paradigm
|
|
267
|
-
|
|
268
|
-
```typescript filename="src/http/cart/route.ts"
|
|
269
|
-
import { Controller, Post, Req, Body } from 'exisjs/decorators'
|
|
270
|
-
|
|
271
|
-
@Controller()
|
|
272
|
-
export default class CartController {
|
|
273
|
-
@Post('/')
|
|
274
|
-
async addItem(@Req() req: any, @Body() body: any) {
|
|
275
|
-
// 2. Read and Write natively to req.session
|
|
276
|
-
// ExisJS automatically saves this back to the Store when the request ends
|
|
277
|
-
if (!req.session.cart) req.session.cart = []
|
|
278
|
-
|
|
279
|
-
req.session.cart.push(body.itemId)
|
|
280
|
-
return { cart: req.session.cart }
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
## 5. Edge Security Middleware
|
|
288
|
-
|
|
289
|
-
As mentioned in the [Middleware Guide](/docs/middleware), you should strongly consider registering the following global security middleware in your `server.ts`:
|
|
290
|
-
|
|
291
|
-
- `helmet()`: Enforces Strict-Transport-Security (HSTS), X-Content-Type-Options (nosniff), and prevents Clickjacking (`X-Frame-Options: DENY`).
|
|
292
|
-
- `dbSanitize({ mongo: true })`: A universal scraper that strips NoSQL operators (`$where`) to provide defense-in-depth for MongoDB databases.
|
|
293
|
-
- `csrf({ secret })`: Enforces the Signed Double Submit Cookie pattern to protect state-changing requests (POST, PUT, DELETE) from Cookie Tossing attacks.
|
|
294
|
-
- `hpp()`: HTTP Parameter Pollution protection (removes duplicate array keys).
|