alepha 0.14.2 → 0.14.4
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/README.md +1 -1
- package/dist/api/audits/index.browser.js +5 -5
- package/dist/api/audits/index.browser.js.map +1 -1
- package/dist/api/audits/index.d.ts +706 -785
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/audits/index.js +13 -13
- package/dist/api/audits/index.js.map +1 -1
- package/dist/api/files/index.browser.js +5 -5
- package/dist/api/files/index.browser.js.map +1 -1
- package/dist/api/files/index.d.ts +58 -137
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +71 -71
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.browser.js +5 -5
- package/dist/api/jobs/index.browser.js.map +1 -1
- package/dist/api/jobs/index.d.ts +29 -108
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/jobs/index.js +10 -10
- package/dist/api/jobs/index.js.map +1 -1
- package/dist/api/notifications/index.browser.js +10 -10
- package/dist/api/notifications/index.browser.js.map +1 -1
- package/dist/api/notifications/index.d.ts +504 -171
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/notifications/index.js +12 -12
- package/dist/api/notifications/index.js.map +1 -1
- package/dist/api/parameters/index.browser.js +163 -10
- package/dist/api/parameters/index.browser.js.map +1 -1
- package/dist/api/parameters/index.d.ts +277 -351
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/parameters/index.js +196 -91
- package/dist/api/parameters/index.js.map +1 -1
- package/dist/api/users/index.browser.js +19 -19
- package/dist/api/users/index.browser.js.map +1 -1
- package/dist/api/users/index.d.ts +787 -852
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +827 -596
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.browser.js +6 -6
- package/dist/api/verifications/index.browser.js.map +1 -1
- package/dist/api/verifications/index.d.ts +128 -128
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/api/verifications/index.js +6 -6
- package/dist/api/verifications/index.js.map +1 -1
- package/dist/bin/index.d.ts +1 -2
- package/dist/bin/index.js +0 -1
- package/dist/bin/index.js.map +1 -1
- package/dist/cli/index.d.ts +252 -131
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +595 -395
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +46 -11
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +99 -19
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +40 -22
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +45 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +40 -22
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +40 -22
- package/dist/core/index.native.js.map +1 -1
- package/dist/fake/index.js +195 -168
- package/dist/fake/index.js.map +1 -1
- package/dist/file/index.d.ts +8 -0
- package/dist/file/index.d.ts.map +1 -1
- package/dist/file/index.js +3 -0
- package/dist/file/index.js.map +1 -1
- package/dist/logger/index.d.ts +1 -1
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +12 -2
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.js +1 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/index.d.ts +59 -195
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +201 -430
- package/dist/orm/index.js.map +1 -1
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1 -1
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +171 -155
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +0 -1
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cache/index.d.ts +12 -0
- package/dist/server/cache/index.d.ts.map +1 -1
- package/dist/server/cache/index.js +55 -2
- package/dist/server/cache/index.js.map +1 -1
- package/dist/server/compress/index.d.ts +6 -0
- package/dist/server/compress/index.d.ts.map +1 -1
- package/dist/server/compress/index.js +38 -1
- package/dist/server/compress/index.js.map +1 -1
- package/dist/server/core/index.browser.js +2 -2
- package/dist/server/core/index.browser.js.map +1 -1
- package/dist/server/core/index.d.ts +10 -10
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +7 -4
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/links/index.browser.js +22 -6
- package/dist/server/links/index.browser.js.map +1 -1
- package/dist/server/links/index.d.ts +46 -44
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +24 -41
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/static/index.d.ts.map +1 -1
- package/dist/server/static/index.js +4 -0
- package/dist/server/static/index.js.map +1 -1
- package/dist/server/swagger/index.d.ts +2 -1
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js +9 -5
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/vite/index.d.ts +101 -106
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +574 -503
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.d.ts +7 -7
- package/package.json +7 -7
- package/src/api/audits/controllers/{AuditController.ts → AdminAuditController.ts} +5 -6
- package/src/api/audits/entities/audits.ts +5 -5
- package/src/api/audits/index.browser.ts +1 -1
- package/src/api/audits/index.ts +3 -3
- package/src/api/audits/primitives/$audit.spec.ts +276 -0
- package/src/api/audits/services/AuditService.spec.ts +495 -0
- package/src/api/files/__tests__/$bucket.spec.ts +91 -0
- package/src/api/files/controllers/AdminFileStatsController.spec.ts +166 -0
- package/src/api/files/controllers/{StorageStatsController.ts → AdminFileStatsController.ts} +2 -2
- package/src/api/files/controllers/FileController.spec.ts +558 -0
- package/src/api/files/controllers/FileController.ts +4 -5
- package/src/api/files/entities/files.ts +5 -5
- package/src/api/files/index.browser.ts +1 -1
- package/src/api/files/index.ts +4 -4
- package/src/api/files/jobs/FileJobs.spec.ts +52 -0
- package/src/api/files/services/FileService.spec.ts +109 -0
- package/src/api/jobs/__tests__/JobController.spec.ts +343 -0
- package/src/api/jobs/controllers/{JobController.ts → AdminJobController.ts} +2 -2
- package/src/api/jobs/entities/jobExecutions.ts +5 -5
- package/src/api/jobs/index.ts +3 -3
- package/src/api/jobs/primitives/$job.spec.ts +476 -0
- package/src/api/notifications/controllers/{NotificationController.ts → AdminNotificationController.ts} +4 -5
- package/src/api/notifications/entities/notifications.ts +5 -5
- package/src/api/notifications/index.browser.ts +1 -1
- package/src/api/notifications/index.ts +4 -4
- package/src/api/parameters/controllers/{ConfigController.ts → AdminConfigController.ts} +46 -107
- package/src/api/parameters/entities/parameters.ts +7 -17
- package/src/api/parameters/index.ts +3 -3
- package/src/api/parameters/primitives/$config.spec.ts +356 -0
- package/src/api/parameters/schemas/activateConfigBodySchema.ts +12 -0
- package/src/api/parameters/schemas/checkScheduledResponseSchema.ts +8 -0
- package/src/api/parameters/schemas/configCurrentResponseSchema.ts +13 -0
- package/src/api/parameters/schemas/configHistoryResponseSchema.ts +9 -0
- package/src/api/parameters/schemas/configNameParamSchema.ts +10 -0
- package/src/api/parameters/schemas/configNamesResponseSchema.ts +8 -0
- package/src/api/parameters/schemas/configTreeNodeSchema.ts +13 -0
- package/src/api/parameters/schemas/configVersionParamSchema.ts +9 -0
- package/src/api/parameters/schemas/configVersionResponseSchema.ts +9 -0
- package/src/api/parameters/schemas/configsByStatusResponseSchema.ts +9 -0
- package/src/api/parameters/schemas/createConfigVersionBodySchema.ts +24 -0
- package/src/api/parameters/schemas/index.ts +15 -0
- package/src/api/parameters/schemas/parameterResponseSchema.ts +26 -0
- package/src/api/parameters/schemas/parameterStatusSchema.ts +13 -0
- package/src/api/parameters/schemas/rollbackConfigBodySchema.ts +15 -0
- package/src/api/parameters/schemas/statusParamSchema.ts +9 -0
- package/src/api/users/__tests__/EmailVerification.spec.ts +369 -0
- package/src/api/users/__tests__/PasswordReset.spec.ts +550 -0
- package/src/api/users/controllers/AdminIdentityController.spec.ts +365 -0
- package/src/api/users/controllers/{IdentityController.ts → AdminIdentityController.ts} +3 -4
- package/src/api/users/controllers/AdminSessionController.spec.ts +274 -0
- package/src/api/users/controllers/{SessionController.ts → AdminSessionController.ts} +3 -4
- package/src/api/users/controllers/AdminUserController.spec.ts +372 -0
- package/src/api/users/controllers/AdminUserController.ts +116 -0
- package/src/api/users/controllers/UserController.ts +4 -107
- package/src/api/users/controllers/UserRealmController.ts +3 -0
- package/src/api/users/entities/identities.ts +6 -6
- package/src/api/users/entities/sessions.ts +6 -6
- package/src/api/users/entities/users.ts +9 -9
- package/src/api/users/index.ts +9 -6
- package/src/api/users/primitives/$userRealm.ts +13 -8
- package/src/api/users/services/CredentialService.spec.ts +509 -0
- package/src/api/users/services/CredentialService.ts +46 -0
- package/src/api/users/services/IdentityService.ts +15 -0
- package/src/api/users/services/RegistrationService.spec.ts +630 -0
- package/src/api/users/services/RegistrationService.ts +18 -0
- package/src/api/users/services/SessionService.spec.ts +301 -0
- package/src/api/users/services/SessionService.ts +110 -1
- package/src/api/users/services/UserService.ts +67 -2
- package/src/api/verifications/__tests__/CodeVerification.spec.ts +318 -0
- package/src/api/verifications/__tests__/LinkVerification.spec.ts +279 -0
- package/src/api/verifications/entities/verifications.ts +6 -6
- package/src/api/verifications/jobs/VerificationJobs.spec.ts +50 -0
- package/src/batch/__tests__/startup-buffering.spec.ts +458 -0
- package/src/batch/primitives/$batch.spec.ts +766 -0
- package/src/batch/providers/BatchProvider.spec.ts +786 -0
- package/src/bin/index.ts +0 -1
- package/src/bucket/__tests__/shared.ts +194 -0
- package/src/bucket/primitives/$bucket.spec.ts +104 -0
- package/src/bucket/providers/FileStorageProvider.spec.ts +13 -0
- package/src/bucket/providers/LocalFileStorageProvider.spec.ts +77 -0
- package/src/bucket/providers/MemoryFileStorageProvider.spec.ts +82 -0
- package/src/cache/core/__tests__/shared.ts +377 -0
- package/src/cache/core/primitives/$cache.spec.ts +111 -0
- package/src/cache/redis/__tests__/cache-redis.spec.ts +70 -0
- package/src/cli/apps/AlephaCli.ts +25 -6
- package/src/cli/atoms/buildOptions.ts +88 -0
- package/src/cli/commands/build.ts +32 -69
- package/src/cli/commands/db.ts +0 -4
- package/src/cli/commands/dev.ts +34 -10
- package/src/cli/commands/gen/changelog.spec.ts +315 -0
- package/src/cli/commands/{changelog.ts → gen/changelog.ts} +9 -9
- package/src/cli/commands/gen/env.ts +53 -0
- package/src/cli/commands/gen/openapi.ts +71 -0
- package/src/cli/commands/gen/resource.ts +15 -0
- package/src/cli/commands/gen.ts +24 -0
- package/src/cli/commands/init.ts +2 -1
- package/src/cli/commands/root.ts +12 -3
- package/src/cli/commands/test.ts +0 -1
- package/src/cli/commands/typecheck.ts +5 -0
- package/src/cli/commands/verify.ts +1 -1
- package/src/cli/defineConfig.ts +49 -7
- package/src/cli/index.ts +2 -2
- package/src/cli/services/AlephaCliUtils.ts +105 -55
- package/src/cli/services/GitMessageParser.ts +1 -1
- package/src/command/helpers/Asker.spec.ts +127 -0
- package/src/command/helpers/Runner.spec.ts +126 -0
- package/src/command/helpers/Runner.ts +1 -1
- package/src/command/primitives/$command.spec.ts +1588 -0
- package/src/command/primitives/$command.ts +0 -6
- package/src/command/providers/CliProvider.ts +75 -27
- package/src/core/Alepha.ts +87 -0
- package/src/core/__tests__/Alepha-emit.spec.ts +22 -0
- package/src/core/__tests__/Alepha-graph.spec.ts +93 -0
- package/src/core/__tests__/Alepha-has.spec.ts +41 -0
- package/src/core/__tests__/Alepha-inject.spec.ts +93 -0
- package/src/core/__tests__/Alepha-register.spec.ts +81 -0
- package/src/core/__tests__/Alepha-start.spec.ts +176 -0
- package/src/core/__tests__/Alepha-with.spec.ts +14 -0
- package/src/core/__tests__/TypeBox-usecases.spec.ts +35 -0
- package/src/core/__tests__/TypeBoxLocale.spec.ts +15 -0
- package/src/core/__tests__/descriptor.spec.ts +34 -0
- package/src/core/__tests__/fixtures/A.ts +5 -0
- package/src/core/__tests__/pagination.spec.ts +77 -0
- package/src/core/helpers/jsonSchemaToTypeBox.ts +2 -2
- package/src/core/primitives/$atom.spec.ts +43 -0
- package/src/core/primitives/$hook.spec.ts +130 -0
- package/src/core/primitives/$inject.spec.ts +175 -0
- package/src/core/primitives/$module.spec.ts +115 -0
- package/src/core/providers/CodecManager.spec.ts +740 -0
- package/src/core/providers/EventManager.spec.ts +762 -0
- package/src/core/providers/EventManager.ts +4 -0
- package/src/core/providers/StateManager.spec.ts +365 -0
- package/src/core/providers/TypeProvider.spec.ts +1607 -0
- package/src/core/providers/TypeProvider.ts +20 -26
- package/src/datetime/primitives/$interval.spec.ts +103 -0
- package/src/datetime/providers/DateTimeProvider.spec.ts +86 -0
- package/src/email/primitives/$email.spec.ts +175 -0
- package/src/email/providers/LocalEmailProvider.spec.ts +341 -0
- package/src/fake/__tests__/keyName.example.ts +40 -0
- package/src/fake/__tests__/keyName.spec.ts +152 -0
- package/src/fake/__tests__/module.example.ts +32 -0
- package/src/fake/providers/FakeProvider.spec.ts +438 -0
- package/src/file/providers/FileSystemProvider.ts +8 -0
- package/src/file/providers/NodeFileSystemProvider.spec.ts +418 -0
- package/src/file/providers/NodeFileSystemProvider.ts +5 -0
- package/src/file/services/FileDetector.spec.ts +591 -0
- package/src/lock/core/__tests__/shared.ts +190 -0
- package/src/lock/core/providers/MemoryLockProvider.spec.ts +25 -0
- package/src/lock/redis/providers/RedisLockProvider.spec.ts +25 -0
- package/src/logger/__tests__/SimpleFormatterProvider.spec.ts +109 -0
- package/src/logger/index.ts +15 -3
- package/src/logger/primitives/$logger.spec.ts +108 -0
- package/src/logger/services/Logger.spec.ts +295 -0
- package/src/mcp/__tests__/errors.spec.ts +175 -0
- package/src/mcp/__tests__/integration.spec.ts +450 -0
- package/src/mcp/helpers/jsonrpc.spec.ts +380 -0
- package/src/mcp/primitives/$prompt.spec.ts +468 -0
- package/src/mcp/primitives/$resource.spec.ts +390 -0
- package/src/mcp/primitives/$tool.spec.ts +406 -0
- package/src/mcp/providers/McpServerProvider.spec.ts +797 -0
- package/src/mcp/transports/StdioMcpTransport.ts +1 -1
- package/src/orm/__tests__/$repository-crud.spec.ts +276 -0
- package/src/orm/__tests__/$repository-hooks.spec.ts +325 -0
- package/src/orm/__tests__/$repository-orderBy.spec.ts +128 -0
- package/src/orm/__tests__/$repository-pagination-sort.spec.ts +149 -0
- package/src/orm/__tests__/$repository-save.spec.ts +37 -0
- package/src/orm/__tests__/ModelBuilder-integration.spec.ts +490 -0
- package/src/orm/__tests__/ModelBuilder-types.spec.ts +186 -0
- package/src/orm/__tests__/PostgresProvider.spec.ts +46 -0
- package/src/orm/__tests__/delete-returning.spec.ts +256 -0
- package/src/orm/__tests__/deletedAt.spec.ts +80 -0
- package/src/orm/__tests__/enums.spec.ts +315 -0
- package/src/orm/__tests__/execute.spec.ts +72 -0
- package/src/orm/__tests__/fixtures/bigEntitySchema.ts +65 -0
- package/src/orm/__tests__/fixtures/userEntitySchema.ts +27 -0
- package/src/orm/__tests__/joins.spec.ts +1114 -0
- package/src/orm/__tests__/page.spec.ts +287 -0
- package/src/orm/__tests__/primaryKey.spec.ts +87 -0
- package/src/orm/__tests__/query-date-encoding.spec.ts +402 -0
- package/src/orm/__tests__/ref-auto-onDelete.spec.ts +156 -0
- package/src/orm/__tests__/references.spec.ts +102 -0
- package/src/orm/__tests__/security.spec.ts +710 -0
- package/src/orm/__tests__/sqlite.spec.ts +111 -0
- package/src/orm/__tests__/string-operators.spec.ts +429 -0
- package/src/orm/__tests__/timestamps.spec.ts +388 -0
- package/src/orm/__tests__/validation.spec.ts +183 -0
- package/src/orm/__tests__/version.spec.ts +64 -0
- package/src/orm/helpers/parseQueryString.spec.ts +196 -0
- package/src/orm/index.ts +2 -8
- package/src/orm/primitives/$repository.spec.ts +137 -0
- package/src/orm/primitives/$sequence.spec.ts +29 -0
- package/src/orm/primitives/$transaction.spec.ts +82 -0
- package/src/orm/providers/drivers/BunPostgresProvider.ts +3 -3
- package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -1
- package/src/orm/providers/drivers/CloudflareD1Provider.ts +1 -1
- package/src/orm/providers/drivers/DatabaseProvider.ts +1 -1
- package/src/orm/providers/drivers/NodePostgresProvider.ts +3 -3
- package/src/orm/providers/drivers/NodeSqliteProvider.ts +1 -1
- package/src/orm/providers/drivers/PglitePostgresProvider.ts +2 -2
- package/src/orm/services/ModelBuilder.spec.ts +575 -0
- package/src/orm/services/Repository.spec.ts +137 -0
- package/src/queue/core/__tests__/shared.ts +143 -0
- package/src/queue/core/providers/MemoryQueueProvider.spec.ts +23 -0
- package/src/queue/core/providers/WorkerProvider.spec.ts +394 -0
- package/src/queue/redis/providers/RedisQueueProvider.spec.ts +23 -0
- package/src/redis/__tests__/redis.spec.ts +58 -0
- package/src/retry/primitives/$retry.spec.ts +234 -0
- package/src/retry/providers/RetryProvider.spec.ts +438 -0
- package/src/router/__tests__/match.spec.ts +252 -0
- package/src/router/providers/RouterProvider.spec.ts +197 -0
- package/src/scheduler/__tests__/$scheduler-cron.spec.ts +25 -0
- package/src/scheduler/__tests__/$scheduler-interval.spec.ts +25 -0
- package/src/scheduler/__tests__/shared.ts +77 -0
- package/src/security/__tests__/bug-1-wildcard-after-start.spec.ts +229 -0
- package/src/security/__tests__/bug-2-password-validation.spec.ts +245 -0
- package/src/security/__tests__/bug-3-regex-vulnerability.spec.ts +407 -0
- package/src/security/__tests__/bug-4-oauth2-validation.spec.ts +439 -0
- package/src/security/__tests__/multi-layer-permissions.spec.ts +522 -0
- package/src/security/primitives/$permission.spec.ts +30 -0
- package/src/security/primitives/$permission.ts +2 -2
- package/src/security/primitives/$realm.spec.ts +101 -0
- package/src/security/primitives/$role.spec.ts +52 -0
- package/src/security/primitives/$serviceAccount.spec.ts +61 -0
- package/src/security/providers/SecurityProvider.spec.ts +350 -0
- package/src/server/auth/providers/ServerAuthProvider.ts +0 -2
- package/src/server/cache/providers/ServerCacheProvider.spec.ts +1125 -0
- package/src/server/cache/providers/ServerCacheProvider.ts +94 -9
- package/src/server/compress/providers/ServerCompressProvider.spec.ts +31 -0
- package/src/server/compress/providers/ServerCompressProvider.ts +63 -2
- package/src/server/cookies/providers/ServerCookiesProvider.spec.ts +253 -0
- package/src/server/core/__tests__/ServerRouterProvider-getRoutes.spec.ts +334 -0
- package/src/server/core/__tests__/ServerRouterProvider-requestId.spec.ts +129 -0
- package/src/server/core/helpers/ServerReply.ts +2 -2
- package/src/server/core/primitives/$action.spec.ts +191 -0
- package/src/server/core/primitives/$route.spec.ts +65 -0
- package/src/server/core/providers/ServerBodyParserProvider.spec.ts +93 -0
- package/src/server/core/providers/ServerLoggerProvider.spec.ts +100 -0
- package/src/server/core/providers/ServerProvider.ts +14 -2
- package/src/server/core/services/HttpClient.spec.ts +123 -0
- package/src/server/core/services/UserAgentParser.spec.ts +111 -0
- package/src/server/cors/providers/ServerCorsProvider.spec.ts +481 -0
- package/src/server/health/providers/ServerHealthProvider.spec.ts +22 -0
- package/src/server/helmet/providers/ServerHelmetProvider.spec.ts +105 -0
- package/src/server/links/__tests__/$action.spec.ts +238 -0
- package/src/server/links/__tests__/fixtures/CrudApp.ts +122 -0
- package/src/server/links/__tests__/requestId.spec.ts +120 -0
- package/src/server/links/primitives/$remote.spec.ts +228 -0
- package/src/server/links/providers/LinkProvider.spec.ts +54 -0
- package/src/server/links/providers/LinkProvider.ts +49 -3
- package/src/server/links/providers/ServerLinksProvider.ts +1 -53
- package/src/server/links/schemas/apiLinksResponseSchema.ts +7 -0
- package/src/server/metrics/providers/ServerMetricsProvider.spec.ts +25 -0
- package/src/server/multipart/providers/ServerMultipartProvider.spec.ts +528 -0
- package/src/server/proxy/primitives/$proxy.spec.ts +87 -0
- package/src/server/rate-limit/__tests__/ActionRateLimit.spec.ts +211 -0
- package/src/server/rate-limit/providers/ServerRateLimitProvider.spec.ts +344 -0
- package/src/server/security/__tests__/BasicAuth.spec.ts +684 -0
- package/src/server/security/__tests__/ServerSecurityProvider-realm.spec.ts +388 -0
- package/src/server/security/providers/ServerSecurityProvider.spec.ts +123 -0
- package/src/server/static/primitives/$serve.spec.ts +193 -0
- package/src/server/static/providers/ServerStaticProvider.ts +10 -0
- package/src/server/swagger/__tests__/ui.spec.ts +52 -0
- package/src/server/swagger/primitives/$swagger.spec.ts +193 -0
- package/src/server/swagger/providers/ServerSwaggerProvider.ts +19 -12
- package/src/sms/primitives/$sms.spec.ts +165 -0
- package/src/sms/providers/LocalSmsProvider.spec.ts +224 -0
- package/src/sms/providers/MemorySmsProvider.spec.ts +193 -0
- package/src/thread/primitives/$thread.spec.ts +186 -0
- package/src/topic/core/__tests__/shared.ts +144 -0
- package/src/topic/core/providers/MemoryTopicProvider.spec.ts +23 -0
- package/src/topic/redis/providers/RedisTopicProvider.spec.ts +23 -0
- package/src/vite/helpers/importViteReact.ts +13 -0
- package/src/vite/index.ts +1 -21
- package/src/vite/plugins/viteAlephaDev.ts +32 -5
- package/src/vite/plugins/viteAlephaSsrPreload.ts +222 -0
- package/src/vite/tasks/buildClient.ts +11 -0
- package/src/vite/tasks/buildServer.ts +47 -3
- package/src/vite/tasks/devServer.ts +69 -0
- package/src/vite/tasks/index.ts +2 -1
- package/src/vite/tasks/runAlepha.ts +7 -1
- package/src/websocket/__tests__/$websocket-new.spec.ts +195 -0
- package/src/websocket/primitives/$channel.spec.ts +30 -0
- package/src/cli/assets/viteConfigTs.ts +0 -14
- package/src/cli/commands/run.ts +0 -24
- package/src/vite/plugins/viteAlepha.ts +0 -37
- package/src/vite/plugins/viteAlephaBuild.ts +0 -281
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/server/compress/providers/ServerCompressProvider.ts","../../../src/server/compress/index.ts"],"sourcesContent":["import { Readable, type Transform } from \"node:stream\";\nimport { ReadableStream } from \"node:stream/web\";\nimport { promisify } from \"node:util\";\nimport * as zlib from \"node:zlib\";\nimport { $hook, $inject, Alepha } from \"alepha\";\nimport type { ServerResponse } from \"alepha/server\";\n\nconst gzip = promisify(zlib.gzip);\nconst createGzip = zlib.createGzip;\nconst brotli = promisify(zlib.brotliCompress);\nconst createBrotliCompress = zlib.createBrotliCompress;\nconst zstd = zlib.zstdCompress ? promisify(zlib.zstdCompress) : undefined;\nconst createZstdCompress = zstd ? zlib.createZstdCompress : undefined;\n\ndeclare module \"alepha\" {\n interface State {\n \"alepha.server.compress.options\"?: ServerCompressProviderOptions;\n }\n}\n\nexport class ServerCompressProvider {\n static compressors: Record<\n string,\n | {\n compress: (...args: any[]) => Promise<Buffer>;\n stream: (options?: any) => Transform;\n }\n | undefined\n > = {\n gzip: {\n compress: gzip,\n stream: createGzip,\n },\n br: {\n compress: brotli,\n stream: createBrotliCompress,\n },\n zstd:\n zstd && createZstdCompress\n ? {\n compress: zstd,\n stream: createZstdCompress,\n }\n : undefined,\n };\n\n protected readonly alepha = $inject(Alepha);\n\n protected get options(): ServerCompressProviderOptions {\n return {\n allowedContentTypes: [\n \"application/json\",\n \"text/html\",\n \"application/javascript\",\n \"text/plain\",\n \"text/css\",\n ],\n ...this.alepha.store.get(\"alepha.server.compress.options\"),\n };\n }\n\n public readonly onResponse = $hook({\n on: \"server:onResponse\",\n handler: async ({ request, response }) => {\n // skip if already compressed\n if (response.headers[\"content-encoding\"]) {\n return;\n }\n\n const acceptEncoding = request.headers[\"accept-encoding\"]; // skip if no accept-encoding header\n if (!acceptEncoding) {\n return;\n }\n\n // skip if not json or html (for now)\n if (!this.isAllowedContentType(response.headers[\"content-type\"])) {\n return;\n }\n\n for (const encoding of [\"zstd\", \"br\", \"gzip\"] as const) {\n if (\n acceptEncoding.includes(encoding) &&\n ServerCompressProvider.compressors[encoding]\n ) {\n await this.compress(encoding, response);\n return;\n }\n }\n },\n });\n\n protected isAllowedContentType(contentType: string | undefined): boolean {\n if (!contentType) {\n return false;\n }\n\n const lowerContentType = contentType.toLowerCase();\n\n return !!this.options.allowedContentTypes.find((it) =>\n lowerContentType.includes(it),\n );\n }\n\n protected async compress(\n encoding: keyof typeof ServerCompressProvider.compressors,\n response: ServerResponse,\n ): Promise<void> {\n const body = response.body; // can be string or Buffer or ArrayBuffer or Readable\n\n const compressor = ServerCompressProvider.compressors[encoding];\n if (!compressor) {\n return;\n }\n\n const params = this.getParams(encoding);\n\n if (\n typeof body === \"string\" ||\n Buffer.isBuffer(body) ||\n body instanceof ArrayBuffer\n ) {\n const compressed = await compressor.compress(body, {\n params,\n });\n this.setHeaders(response, encoding);\n response.headers[\"content-length\"] = compressed.length.toString();\n response.body = compressed;\n }\n\n if (typeof body === \"object\" && body instanceof Readable) {\n this.setHeaders(response, encoding);\n response.body = body.pipe(compressor.stream({ params }));\n }\n\n if (typeof body === \"object\" && body instanceof ReadableStream) {\n this.setHeaders(response, encoding);\n response.body = Readable.fromWeb(body).pipe(\n compressor.stream({ params }),\n );\n }\n }\n\n protected getParams(\n encoding: keyof typeof ServerCompressProvider.compressors,\n ): Record<number, any> {\n if (encoding === \"zstd\") {\n return {\n [zlib.constants.ZSTD_c_compressionLevel]: 3, // default compression level for zstd\n };\n }\n if (encoding === \"br\") {\n return {};\n }\n if (encoding === \"gzip\") {\n return {};\n }\n return {};\n }\n\n protected setHeaders(\n response: ServerResponse,\n encoding: keyof typeof ServerCompressProvider.compressors,\n ): void {\n response.headers.vary = \"content-encoding\";\n response.headers[\"content-encoding\"] = encoding;\n response.headers[\"cache-control\"] = \"no-cache\";\n }\n}\n\nexport interface ServerCompressProviderOptions {\n allowedContentTypes: string[];\n}\n","import { $module } from \"alepha\";\nimport { AlephaServer } from \"alepha/server\";\nimport { ServerCompressProvider } from \"./providers/ServerCompressProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./providers/ServerCompressProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Plugin for Alepha Server that provides server-side compression capabilities.\n *\n * Compresses responses using gzip, brotli, or zstd based on the `Accept-Encoding` header.\n */\nexport const AlephaServerCompress = $module({\n name: \"alepha.server.compress\",\n services: [AlephaServer, ServerCompressProvider],\n});\n"],"mappings":";;;;;;;;AAOA,MAAM,OAAO,UAAU,KAAK,KAAK;AACjC,MAAM,aAAa,KAAK;AACxB,MAAM,SAAS,UAAU,KAAK,eAAe;AAC7C,MAAM,uBAAuB,KAAK;AAClC,MAAM,OAAO,KAAK,eAAe,UAAU,KAAK,aAAa,GAAG;AAChE,MAAM,qBAAqB,OAAO,KAAK,qBAAqB;AAQ5D,IAAa,yBAAb,MAAa,uBAAuB;CAClC,OAAO,cAOH;EACF,MAAM;GACJ,UAAU;GACV,QAAQ;GACT;EACD,IAAI;GACF,UAAU;GACV,QAAQ;GACT;EACD,MACE,QAAQ,qBACJ;GACE,UAAU;GACV,QAAQ;GACT,GACD;EACP;CAED,AAAmB,SAAS,QAAQ,OAAO;CAE3C,IAAc,UAAyC;AACrD,SAAO;GACL,qBAAqB;IACnB;IACA;IACA;IACA;IACA;IACD;GACD,GAAG,KAAK,OAAO,MAAM,IAAI,iCAAiC;GAC3D;;CAGH,AAAgB,aAAa,MAAM;EACjC,IAAI;EACJ,SAAS,OAAO,EAAE,SAAS,eAAe;AAExC,OAAI,SAAS,QAAQ,oBACnB;GAGF,MAAM,iBAAiB,QAAQ,QAAQ;AACvC,OAAI,CAAC,eACH;AAIF,OAAI,CAAC,KAAK,qBAAqB,SAAS,QAAQ,gBAAgB,CAC9D;AAGF,QAAK,MAAM,YAAY;IAAC;IAAQ;IAAM;IAAO,CAC3C,KACE,eAAe,SAAS,SAAS,IACjC,uBAAuB,YAAY,WACnC;AACA,UAAM,KAAK,SAAS,UAAU,SAAS;AACvC;;;EAIP,CAAC;CAEF,AAAU,qBAAqB,aAA0C;AACvE,MAAI,CAAC,YACH,QAAO;EAGT,MAAM,mBAAmB,YAAY,aAAa;AAElD,SAAO,CAAC,CAAC,KAAK,QAAQ,oBAAoB,MAAM,OAC9C,iBAAiB,SAAS,GAAG,CAC9B;;CAGH,MAAgB,SACd,UACA,UACe;EACf,MAAM,OAAO,SAAS;EAEtB,MAAM,aAAa,uBAAuB,YAAY;AACtD,MAAI,CAAC,WACH;EAGF,MAAM,SAAS,KAAK,UAAU,SAAS;AAEvC,MACE,OAAO,SAAS,YAChB,OAAO,SAAS,KAAK,IACrB,gBAAgB,aAChB;GACA,MAAM,aAAa,MAAM,WAAW,SAAS,MAAM,EACjD,QACD,CAAC;AACF,QAAK,WAAW,UAAU,SAAS;AACnC,YAAS,QAAQ,oBAAoB,WAAW,OAAO,UAAU;AACjE,YAAS,OAAO;;AAGlB,MAAI,OAAO,SAAS,YAAY,gBAAgB,UAAU;AACxD,QAAK,WAAW,UAAU,SAAS;AACnC,YAAS,OAAO,KAAK,KAAK,WAAW,OAAO,EAAE,QAAQ,CAAC,CAAC;;AAG1D,MAAI,OAAO,SAAS,YAAY,gBAAgB,gBAAgB;AAC9D,QAAK,WAAW,UAAU,SAAS;AACnC,YAAS,OAAO,SAAS,QAAQ,KAAK,CAAC,KACrC,WAAW,OAAO,EAAE,QAAQ,CAAC,CAC9B;;;CAIL,AAAU,UACR,UACqB;AACrB,MAAI,aAAa,OACf,QAAO,GACJ,KAAK,UAAU,0BAA0B,GAC3C;AAEH,MAAI,aAAa,KACf,QAAO,EAAE;AAEX,MAAI,aAAa,OACf,QAAO,EAAE;AAEX,SAAO,EAAE;;CAGX,AAAU,WACR,UACA,UACM;AACN,WAAS,QAAQ,OAAO;AACxB,WAAS,QAAQ,sBAAsB;AACvC,WAAS,QAAQ,mBAAmB;;;;;;;;;;;ACtJxC,MAAa,uBAAuB,QAAQ;CAC1C,MAAM;CACN,UAAU,CAAC,cAAc,uBAAuB;CACjD,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/server/compress/providers/ServerCompressProvider.ts","../../../src/server/compress/index.ts"],"sourcesContent":["import { Readable, type Transform } from \"node:stream\";\nimport { ReadableStream } from \"node:stream/web\";\nimport { promisify } from \"node:util\";\nimport * as zlib from \"node:zlib\";\nimport { $hook, $inject, Alepha } from \"alepha\";\nimport type { ServerResponse } from \"alepha/server\";\n\nconst gzip = promisify(zlib.gzip);\nconst createGzip = zlib.createGzip;\nconst brotli = promisify(zlib.brotliCompress);\nconst createBrotliCompress = zlib.createBrotliCompress;\nconst zstd = zlib.zstdCompress ? promisify(zlib.zstdCompress) : undefined;\nconst createZstdCompress = zstd ? zlib.createZstdCompress : undefined;\n\ndeclare module \"alepha\" {\n interface State {\n \"alepha.server.compress.options\"?: ServerCompressProviderOptions;\n }\n}\n\nexport class ServerCompressProvider {\n static compressors: Record<\n string,\n | {\n compress: (...args: any[]) => Promise<Buffer>;\n stream: (options?: any) => Transform;\n }\n | undefined\n > = {\n gzip: {\n compress: gzip,\n stream: createGzip,\n },\n br: {\n compress: brotli,\n stream: createBrotliCompress,\n },\n zstd:\n zstd && createZstdCompress\n ? {\n compress: zstd,\n stream: createZstdCompress,\n }\n : undefined,\n };\n\n protected readonly alepha = $inject(Alepha);\n\n protected get options(): ServerCompressProviderOptions {\n return {\n allowedContentTypes: [\n \"application/json\",\n \"text/html\",\n \"application/javascript\",\n \"text/plain\",\n \"text/css\",\n ],\n ...this.alepha.store.get(\"alepha.server.compress.options\"),\n };\n }\n\n public readonly onResponse = $hook({\n on: \"server:onResponse\",\n handler: async ({ request, response }) => {\n // skip if already compressed\n if (response.headers[\"content-encoding\"]) {\n return;\n }\n\n const acceptEncoding = request.headers[\"accept-encoding\"]; // skip if no accept-encoding header\n if (!acceptEncoding) {\n return;\n }\n\n // skip if not json or html (for now)\n if (!this.isAllowedContentType(response.headers[\"content-type\"])) {\n return;\n }\n\n for (const encoding of [\"zstd\", \"br\", \"gzip\"] as const) {\n if (\n acceptEncoding.includes(encoding) &&\n ServerCompressProvider.compressors[encoding]\n ) {\n await this.compress(encoding, response);\n return;\n }\n }\n },\n });\n\n protected isAllowedContentType(contentType: string | undefined): boolean {\n if (!contentType) {\n return false;\n }\n\n const lowerContentType = contentType.toLowerCase();\n\n return !!this.options.allowedContentTypes.find((it) =>\n lowerContentType.includes(it),\n );\n }\n\n protected async compress(\n encoding: keyof typeof ServerCompressProvider.compressors,\n response: ServerResponse,\n ): Promise<void> {\n const body = response.body; // can be string or Buffer or ArrayBuffer or Readable\n\n const compressor = ServerCompressProvider.compressors[encoding];\n if (!compressor) {\n return;\n }\n\n const params = this.getParams(encoding);\n\n if (\n typeof body === \"string\" ||\n Buffer.isBuffer(body) ||\n body instanceof ArrayBuffer\n ) {\n const compressed = await compressor.compress(body, {\n params,\n });\n this.setHeaders(response, encoding);\n response.headers[\"content-length\"] = compressed.length.toString();\n response.body = compressed;\n return;\n }\n\n if (typeof body === \"object\" && body instanceof Readable) {\n this.setHeaders(response, encoding);\n response.body = body.pipe(compressor.stream({ params }));\n return;\n }\n\n if (typeof body === \"object\" && body instanceof ReadableStream) {\n this.setHeaders(response, encoding);\n // For streaming responses, use flush mode to avoid buffering\n response.body = this.createFlushingCompressStream(\n body,\n compressor.stream,\n encoding,\n params,\n );\n }\n }\n\n /**\n * Create a compressed stream that flushes after each chunk.\n * This is essential for streaming SSR - ensures each chunk is sent immediately.\n */\n protected createFlushingCompressStream(\n input: ReadableStream,\n createCompressor: (options?: any) => Transform,\n encoding: string,\n params: Record<number, any>,\n ): ReadableStream<Uint8Array> {\n const compressor = createCompressor({\n params,\n flush: zlib.constants.Z_SYNC_FLUSH,\n });\n const reader = Readable.fromWeb(input);\n\n return new ReadableStream<Uint8Array>({\n start(controller) {\n compressor.on(\"data\", (chunk: Buffer) => {\n controller.enqueue(new Uint8Array(chunk));\n });\n\n compressor.on(\"end\", () => {\n controller.close();\n });\n\n compressor.on(\"error\", (err) => {\n controller.error(err);\n });\n\n reader.on(\"data\", (chunk: Buffer) => {\n compressor.write(chunk);\n // Force flush after each chunk for streaming\n // Cast to any because flush() exists on zlib streams but not in Transform type\n const zlibStream = compressor as any;\n if (encoding === \"gzip\") {\n zlibStream.flush(zlib.constants.Z_SYNC_FLUSH);\n } else if (encoding === \"br\") {\n zlibStream.flush(zlib.constants.BROTLI_OPERATION_FLUSH);\n } else if (encoding === \"zstd\") {\n zlibStream.flush();\n }\n });\n\n reader.on(\"end\", () => {\n compressor.end();\n });\n\n reader.on(\"error\", (err) => {\n controller.error(err);\n });\n },\n });\n }\n\n protected getParams(\n encoding: keyof typeof ServerCompressProvider.compressors,\n ): Record<number, any> {\n if (encoding === \"zstd\") {\n return {\n [zlib.constants.ZSTD_c_compressionLevel]: 3, // default compression level for zstd\n };\n }\n if (encoding === \"br\") {\n return {};\n }\n if (encoding === \"gzip\") {\n return {};\n }\n return {};\n }\n\n protected setHeaders(\n response: ServerResponse,\n encoding: keyof typeof ServerCompressProvider.compressors,\n ): void {\n response.headers.vary = \"content-encoding\";\n response.headers[\"content-encoding\"] = encoding;\n response.headers[\"cache-control\"] = \"no-cache\";\n }\n}\n\nexport interface ServerCompressProviderOptions {\n allowedContentTypes: string[];\n}\n","import { $module } from \"alepha\";\nimport { AlephaServer } from \"alepha/server\";\nimport { ServerCompressProvider } from \"./providers/ServerCompressProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./providers/ServerCompressProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Plugin for Alepha Server that provides server-side compression capabilities.\n *\n * Compresses responses using gzip, brotli, or zstd based on the `Accept-Encoding` header.\n */\nexport const AlephaServerCompress = $module({\n name: \"alepha.server.compress\",\n services: [AlephaServer, ServerCompressProvider],\n});\n"],"mappings":"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"}
|
|
@@ -405,9 +405,9 @@ var ServerReply = class {
|
|
|
405
405
|
status;
|
|
406
406
|
body;
|
|
407
407
|
/**
|
|
408
|
-
* Redirect to a given URL with optional status code (default
|
|
408
|
+
* Redirect to a given URL with optional status code (default 301).
|
|
409
409
|
*/
|
|
410
|
-
redirect(url, status =
|
|
410
|
+
redirect(url, status = 301) {
|
|
411
411
|
this.status = status;
|
|
412
412
|
this.headers.location = url;
|
|
413
413
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.browser.js","names":[],"sources":["../../../src/server/core/errors/HttpError.ts","../../../src/server/core/helpers/isMultipart.ts","../../../src/server/core/schemas/errorSchema.ts","../../../src/server/core/services/HttpClient.ts","../../../src/server/core/constants/routeMethods.ts","../../../src/server/core/errors/BadRequestError.ts","../../../src/server/core/errors/ConflictError.ts","../../../src/server/core/errors/ForbiddenError.ts","../../../src/server/core/errors/NotFoundError.ts","../../../src/server/core/errors/UnauthorizedError.ts","../../../src/server/core/errors/ValidationError.ts","../../../src/server/core/helpers/ServerReply.ts","../../../src/server/core/schemas/okSchema.ts","../../../src/server/core/index.browser.ts"],"sourcesContent":["import { AlephaError } from \"alepha\";\nimport type { ErrorSchema } from \"../schemas/errorSchema.ts\";\n\nexport const isHttpError = (\n error: unknown,\n status?: number,\n): error is HttpErrorLike => {\n const isError =\n !!error &&\n typeof error === \"object\" &&\n \"message\" in error &&\n typeof error.message === \"string\" &&\n \"status\" in error &&\n typeof error.status === \"number\";\n\n if (!isError) {\n return false;\n }\n\n if (status) {\n return (error as HttpErrorLike).status === status;\n }\n\n return true;\n};\n\nexport class HttpError extends AlephaError {\n public name = \"HttpError\";\n\n static is = isHttpError;\n\n static toJSON(error: HttpError): ErrorSchema {\n const json: Record<string, unknown> = {\n error: error.error,\n status: error.status,\n message: error.message,\n };\n\n if (error.details) json.details = error.details;\n if (error.requestId) json.requestId = error.requestId;\n if (error.reason) json.cause = error.reason;\n\n return json as ErrorSchema;\n }\n\n public readonly error: string;\n public readonly status: number;\n\n public readonly requestId?: string;\n public readonly details?: string;\n public readonly reason?: {\n name: string;\n message: string;\n };\n\n constructor(options: Partial<ErrorSchema>, cause?: unknown) {\n super(options.message, {\n cause,\n });\n\n this.status = options.status ?? 500;\n this.details = options.details;\n this.requestId = options.requestId;\n\n if (typeof options.cause === \"object\") {\n this.reason = {\n name: (options.cause as { name: string }).name,\n message: (options.cause as { message: string }).message,\n };\n } else if (cause instanceof Error) {\n this.reason = {\n name: cause.name,\n message: cause.message,\n };\n }\n\n if (this.constructor.name === \"HttpError\") {\n this.error =\n options.error ?? errorNameByStatus[this.status] ?? \"HttpError\";\n } else {\n this.error = this.constructor.name;\n }\n }\n}\n\nexport const errorNameByStatus: Record<number, string> = {\n 400: \"BadRequestError\",\n 401: \"UnauthorizedError\",\n 403: \"ForbiddenError\",\n 404: \"NotFoundError\",\n 405: \"MethodNotAllowedError\",\n 409: \"ConflictError\",\n 410: \"GoneError\",\n 413: \"PayloadTooLargeError\",\n 415: \"UnsupportedMediaTypeError\",\n 429: \"TooManyRequestsError\",\n 500: \"InternalServerError\",\n 501: \"NotImplementedError\",\n 502: \"BadGatewayError\",\n 503: \"ServiceUnavailableError\",\n 504: \"GatewayTimeoutError\",\n};\n\nexport interface HttpErrorLike extends Error {\n status: number;\n}\n","import type { RequestConfigSchema } from \"../interfaces/ServerRequest.ts\";\n\n/**\n * Checks if the route has multipart/form-data request body.\n */\nexport const isMultipart = (options: {\n schema?: RequestConfigSchema;\n requestBodyType?: string;\n}): boolean => {\n if (options.requestBodyType === \"multipart/form-data\") {\n return true;\n }\n\n if (options.schema?.body && \"properties\" in options.schema.body) {\n const properties: Record<string, any> = options.schema.body.properties;\n for (const key in properties) {\n if (properties[key].format === \"binary\") {\n return true;\n }\n }\n }\n\n return false;\n};\n","import { type Static, t } from \"alepha\";\n\nexport const errorSchema = t.object(\n {\n error: t.text({ description: \"HTTP error name\" }),\n status: t.integer({\n description: \"HTTP status code\",\n }),\n message: t.text({\n description: \"Short text which describe the error\",\n size: \"rich\",\n }),\n details: t.optional(\n t.text({\n description: \"Detailed description of the error\",\n size: \"rich\",\n }),\n ),\n requestId: t.optional(t.text()),\n cause: t.optional(\n t.object({\n name: t.text(),\n message: t.text({\n description: \"Cause Error message\",\n size: \"rich\",\n }),\n }),\n ),\n },\n {\n title: \"HttpError\",\n description: \"Generic response after a failed operation\",\n },\n);\n\nexport type ErrorSchema = Static<typeof errorSchema>;\n","import {\n $inject,\n Alepha,\n type FileLike,\n isFileLike,\n type Static,\n type TObject,\n type TSchema,\n} from \"alepha\";\nimport { $cache } from \"alepha/cache\";\nimport type { DurationLike } from \"alepha/datetime\";\nimport { $logger } from \"alepha/logger\";\nimport { HttpError } from \"../errors/HttpError.ts\";\nimport { isMultipart } from \"../helpers/isMultipart.ts\";\nimport type {\n ServerRequestConfigEntry,\n TRequestBody,\n TResponseBody,\n} from \"../interfaces/ServerRequest.ts\";\nimport type { ClientRequestOptions } from \"../primitives/$action.ts\";\nimport { errorSchema } from \"../schemas/errorSchema.ts\";\n\nexport class HttpClient {\n protected readonly log = $logger();\n protected readonly alepha = $inject(Alepha);\n\n public readonly cache = $cache<HttpClientCache>();\n\n protected readonly pendingRequests: HttpClientPendingRequests = {};\n\n public async fetchAction(args: FetchActionArgs): Promise<FetchResponse> {\n const route = args.action; // our link to fetch\n const options = args.options ?? {}; // fetch standard options, cache, etc.\n const config = args.config ?? {}; // params, query, body, etc.\n const host = args.host ?? \"\"; // remote host, e.g. \"https://api.example.com\" or empty (for browser)\n\n const request: RequestInit = {\n ...options.request,\n };\n\n const method = route.method;\n const headers: Record<string, string> = {};\n const url = this.url(host, route, config);\n\n await this.alepha.events.emit(\"client:onRequest\", {\n route,\n config,\n options,\n headers,\n request,\n });\n\n request.method ??= method;\n\n await this.body(request, headers, route, config);\n\n request.headers = {\n ...config.headers,\n ...Object.fromEntries(new Headers(request.headers).entries()),\n ...headers,\n };\n\n return await this.fetch(url, {\n ...request,\n schema: route.schema,\n ...options,\n });\n }\n\n public async fetch<T extends TSchema>(\n url: string,\n request: RequestInitWithOptions<T> = {}, // standard options\n ): Promise<FetchResponse<Static<T>>> {\n const options = {\n cache: request.localCache,\n schema: request.schema?.response,\n key: request.key,\n };\n\n request.method ??= \"GET\";\n\n this.log.trace(\"Request\", {\n url,\n method: request.method,\n body: request.body,\n headers: request.headers,\n options,\n });\n\n // Only add automatic ETag if user didn't explicitly provide headers\n const cached = await this.cache.get(url);\n if (cached && request.method === \"GET\") {\n if (cached.etag) {\n request.headers = new Headers(request.headers);\n if (!request.headers.has(\"if-none-match\")) {\n request.headers.set(\"if-none-match\", cached.etag);\n }\n } else {\n return {\n data: cached.data as Static<T>,\n status: 200,\n statusText: \"OK\",\n headers: new Headers(),\n };\n }\n }\n\n await this.alepha.events.emit(\"client:beforeFetch\", {\n url,\n options,\n request,\n });\n\n // make a key for the request\n // this will be used to check if the request is already pending\n const key =\n options.key ??\n JSON.stringify({\n url,\n method: request.method,\n body: request.body,\n });\n\n const existing = this.pendingRequests[key];\n if (existing) {\n this.log.info(\"Request already pending\", key);\n return existing;\n }\n\n this.pendingRequests[key] = fetch(url, request)\n .then(async (response) => {\n this.log.debug(\"Response\", {\n url,\n status: response.status,\n });\n\n const fetchResponse: FetchResponse = {\n data: await this.responseData(response, options),\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n raw: response,\n };\n\n if (request.method === \"GET\") {\n if (options.cache) {\n await this.cache.set(\n url,\n { data: fetchResponse.data },\n typeof options.cache === \"boolean\" ? undefined : options.cache,\n );\n } else if (!this.alepha.isBrowser()) {\n // only cache etag on server, browser can handle etag itself\n const etag = response.headers.get(\"etag\") ?? undefined;\n if (etag) {\n await this.cache.set(url, { data: fetchResponse.data, etag });\n }\n }\n }\n\n return fetchResponse;\n })\n .finally(() => {\n delete this.pendingRequests[key];\n });\n\n return this.pendingRequests[key];\n }\n\n protected url(\n host: string,\n action: HttpAction,\n args: ServerRequestConfigEntry,\n ) {\n let url = host;\n\n if (action.prefix) {\n url += action.prefix;\n }\n\n url += action.path;\n url = this.pathVariables(url, action, args);\n url = this.queryParams(url, action, args);\n\n return url;\n }\n\n protected async body(\n init: RequestInit,\n headers: Record<string, string>,\n action: HttpAction,\n args: ServerRequestConfigEntry = {},\n ) {\n const hasHeader =\n typeof init.headers === \"object\" &&\n \"content-type\" in init.headers &&\n init.headers[\"content-type\"] === \"multipart/form-data\";\n\n if (hasHeader || isMultipart(action)) {\n if (typeof init.headers === \"object\" && \"content-type\" in init.headers) {\n delete init.headers[\"content-type\"]; // fetch() will fill this for us\n }\n\n const formData = new FormData();\n\n for (const [key, value] of Object.entries(args.body ?? {})) {\n if (typeof value === \"string\") {\n formData.append(key, value);\n continue;\n }\n if (value instanceof Blob) {\n formData.append(key, value);\n continue;\n }\n if (isFileLike(value)) {\n // FileLike must be transformed to WebFile\n formData.append(\n key,\n new File([await value.arrayBuffer()], value.name, {\n type: value.type,\n }),\n );\n }\n }\n\n init.body = formData;\n\n return;\n }\n\n if (!init.body && action.schema?.body) {\n headers[\"content-type\"] = \"application/json\";\n init.body = this.alepha.codec.encode(action.schema?.body, args.body, {\n as: \"string\",\n });\n }\n }\n\n protected async responseData(\n response: Response,\n options: FetchOptions,\n ): Promise<any> {\n if (response.status === 304) {\n let cacheKey = response.url;\n if (typeof window !== \"undefined\") {\n cacheKey = cacheKey.replace(window.location.origin, \"\");\n }\n\n const cached = await this.cache.get(cacheKey);\n if (cached) {\n return cached.data;\n }\n\n // if no cached data (etag-only routes), return empty string\n return \"\";\n }\n\n if (response.status === 204) {\n return;\n }\n\n if (this.isMaybeFile(response)) {\n return this.createFileLike(response);\n }\n\n if (response.headers.get(\"Content-Type\")?.startsWith(\"text/\")) {\n return await response.text();\n }\n\n if (response.headers.get(\"Content-Type\") === \"application/json\") {\n const json = await response.json();\n\n if (response.status >= 400) {\n const jsonError = this.alepha.codec.decode(errorSchema, json);\n const error = new HttpError(jsonError);\n\n await this.alepha.events.emit(\"client:onError\", {\n error,\n });\n\n throw error;\n }\n\n if (options.schema) {\n return this.alepha.codec.decode(options.schema, json);\n }\n\n return json;\n }\n\n if (response.status >= 400) {\n const error = new HttpError({\n status: response.status,\n message: `An error occurred while fetching the resource. (${response.statusText})`,\n });\n\n await this.alepha.events.emit(\"client:onError\", {\n error,\n });\n\n throw error;\n }\n\n return response;\n }\n\n protected isMaybeFile(response: Response): boolean {\n const contentType = response.headers.get(\"Content-Type\");\n if (!contentType) {\n return false;\n }\n\n if (response.headers.get(\"Content-Disposition\")?.includes(\"attachment\")) {\n return true; // If Content-Disposition indicates an attachment, treat it as a file\n }\n\n return (\n contentType.startsWith(\"application/octet-stream\") ||\n contentType.startsWith(\"application/pdf\") ||\n contentType.startsWith(\"application/zip\") ||\n contentType.startsWith(\"image/\") ||\n contentType.startsWith(\"video/\") ||\n contentType.startsWith(\"audio/\")\n );\n }\n\n protected createFileLike(response: Response, defaultFileName = \"\"): FileLike {\n const match = (response.headers.get(\"Content-Disposition\") ?? \"\").match(\n /filename=\"(.+)\"/,\n );\n return {\n name: match?.[1] ? match[1] : defaultFileName,\n type: response.headers.get(\"Content-Type\") ?? \"application/octet-stream\",\n size: Number(response.headers.get(\"Content-Length\") ?? 0),\n lastModified: Date.now(),\n stream: () => {\n throw new Error(\"Not implemented\");\n },\n arrayBuffer: async () => {\n return await response.arrayBuffer();\n },\n text: async () => {\n return await response.text();\n },\n };\n }\n\n public pathVariables(\n url: string,\n action: { schema?: { params?: TObject } },\n args: ServerRequestConfigEntry = {},\n ): string {\n if (typeof args.params === \"object\") {\n const params = action.schema?.params\n ? (this.alepha.codec.decode(\n action.schema.params,\n args.params,\n ) as Record<string, any>)\n : args.params;\n\n for (const key of Object.keys(params)) {\n url = url.replace(`:${key}`, params[key]);\n url = url.replace(`{${key}}`, params[key]);\n }\n }\n\n return url;\n }\n\n public queryParams(\n url: string,\n action: { schema?: { query?: TObject } },\n args: ServerRequestConfigEntry = {},\n ): string {\n if (typeof args.query === \"object\") {\n const query = action.schema?.query\n ? this.alepha.codec.decode(action.schema.query, args.query ?? {})\n : args.query;\n\n for (const key of Object.keys(query)) {\n if (query[key] === undefined) {\n delete query[key];\n }\n if (typeof query[key] === \"object\") {\n query[key] = JSON.stringify(query[key]);\n }\n }\n\n return `${url}?${new URLSearchParams(\n query as Record<string, string>,\n ).toString()}`;\n }\n return url;\n }\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport interface FetchOptions<T extends TSchema = TSchema> {\n /**\n * Key to identify the request in the pending requests.\n */\n key?: string;\n\n /**\n * The schema to validate the response against.\n */\n schema?: {\n response?: T;\n };\n\n /**\n * Built-in cache options.\n */\n localCache?: boolean | number | DurationLike;\n}\n\nexport type RequestInitWithOptions<T extends TSchema = TSchema> = RequestInit &\n FetchOptions<T>;\n\nexport interface FetchResponse<T = any> {\n data: T;\n status: number;\n statusText: string;\n headers: Headers;\n raw?: Response;\n}\n\nexport type HttpClientPendingRequests = Record<\n string,\n Promise<any> | undefined\n>;\n\ninterface HttpClientCache {\n data: any;\n etag?: string;\n}\n\nexport interface FetchActionArgs {\n action: HttpAction;\n host?: string;\n config?: ServerRequestConfigEntry;\n options?: ClientRequestOptions;\n}\n\nexport interface HttpAction {\n method?: string;\n prefix?: string;\n path: string;\n requestBodyType?: string;\n schema?: {\n params?: TObject;\n query?: TObject;\n body?: TRequestBody;\n response?: TResponseBody;\n };\n}\n","export const routeMethods = [\n // list of supported http methods\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"HEAD\",\n \"OPTIONS\",\n \"CONNECT\",\n \"TRACE\",\n] as const;\n\nexport type RouteMethod = (typeof routeMethods)[number];\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class BadRequestError extends HttpError {\n constructor(message = \"Invalid request body\", cause?: unknown) {\n super(\n {\n message,\n status: 400,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class ConflictError extends HttpError {\n constructor(message = \"Entity already exists\", cause?: unknown) {\n super(\n {\n message,\n status: 409,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class ForbiddenError extends HttpError {\n constructor(\n message = \"No permission to access this resource\",\n cause?: unknown,\n ) {\n super(\n {\n message,\n status: 403,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class NotFoundError extends HttpError {\n constructor(message = \"Resource not found\", cause?: unknown) {\n super(\n {\n message,\n status: 404,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class UnauthorizedError extends HttpError {\n readonly name = \"UnauthorizedError\";\n\n constructor(\n message = \"Not allowed to access this resource\",\n cause?: unknown,\n ) {\n super(\n {\n message,\n status: 401,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class ValidationError extends HttpError {\n constructor(message = \"Validation has failed\", cause?: unknown) {\n super(\n {\n message,\n status: 400,\n },\n cause,\n );\n }\n}\n","/**\n * Helper for building server replies.\n */\nexport class ServerReply {\n // TODO: make it private\n public headers: Record<string, string> & {\n \"set-cookie\"?: string[];\n } = {};\n\n public status?: number; // default 200, or 204 (no content)\n\n public body?: any;\n\n /**\n * Redirect to a given URL with optional status code (default 302).\n */\n public redirect(url: string, status: number = 302): void {\n this.status = status;\n this.headers.location = url;\n }\n\n // TODO: check if status / header is already set and throw an error if so (for allow to override with force flag)\n\n /**\n * Set the response status code.\n */\n public setStatus(status: number): this {\n this.status = status;\n return this;\n }\n\n /**\n * Set a response header.\n */\n public setHeader(name: string, value: string): this {\n this.headers[name.toLowerCase()] = value;\n return this;\n }\n\n /**\n * Set the response body.\n */\n public setBody(body: any): this {\n this.body = body;\n return this;\n }\n}\n","import type { Static } from \"alepha\";\nimport { t } from \"alepha\";\n\nexport const okSchema = t.object(\n {\n ok: t.boolean({ description: \"True when operation succeed\" }),\n id: t.optional(t.union([t.text(), t.integer()])),\n count: t.optional(\n t.number({ description: \"Number of resources affected\" }),\n ),\n },\n {\n title: \"Ok\",\n description: \"Generic response after a successful operation on a resource\",\n },\n);\n\nexport type Ok = Static<typeof okSchema>;\n","import { $module } from \"alepha\";\nimport { HttpClient } from \"./services/HttpClient.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./index.shared.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport const AlephaServer = $module({\n name: \"alepha.server\",\n primitives: [],\n services: [HttpClient],\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.browser.js","names":[],"sources":["../../../src/server/core/errors/HttpError.ts","../../../src/server/core/helpers/isMultipart.ts","../../../src/server/core/schemas/errorSchema.ts","../../../src/server/core/services/HttpClient.ts","../../../src/server/core/constants/routeMethods.ts","../../../src/server/core/errors/BadRequestError.ts","../../../src/server/core/errors/ConflictError.ts","../../../src/server/core/errors/ForbiddenError.ts","../../../src/server/core/errors/NotFoundError.ts","../../../src/server/core/errors/UnauthorizedError.ts","../../../src/server/core/errors/ValidationError.ts","../../../src/server/core/helpers/ServerReply.ts","../../../src/server/core/schemas/okSchema.ts","../../../src/server/core/index.browser.ts"],"sourcesContent":["import { AlephaError } from \"alepha\";\nimport type { ErrorSchema } from \"../schemas/errorSchema.ts\";\n\nexport const isHttpError = (\n error: unknown,\n status?: number,\n): error is HttpErrorLike => {\n const isError =\n !!error &&\n typeof error === \"object\" &&\n \"message\" in error &&\n typeof error.message === \"string\" &&\n \"status\" in error &&\n typeof error.status === \"number\";\n\n if (!isError) {\n return false;\n }\n\n if (status) {\n return (error as HttpErrorLike).status === status;\n }\n\n return true;\n};\n\nexport class HttpError extends AlephaError {\n public name = \"HttpError\";\n\n static is = isHttpError;\n\n static toJSON(error: HttpError): ErrorSchema {\n const json: Record<string, unknown> = {\n error: error.error,\n status: error.status,\n message: error.message,\n };\n\n if (error.details) json.details = error.details;\n if (error.requestId) json.requestId = error.requestId;\n if (error.reason) json.cause = error.reason;\n\n return json as ErrorSchema;\n }\n\n public readonly error: string;\n public readonly status: number;\n\n public readonly requestId?: string;\n public readonly details?: string;\n public readonly reason?: {\n name: string;\n message: string;\n };\n\n constructor(options: Partial<ErrorSchema>, cause?: unknown) {\n super(options.message, {\n cause,\n });\n\n this.status = options.status ?? 500;\n this.details = options.details;\n this.requestId = options.requestId;\n\n if (typeof options.cause === \"object\") {\n this.reason = {\n name: (options.cause as { name: string }).name,\n message: (options.cause as { message: string }).message,\n };\n } else if (cause instanceof Error) {\n this.reason = {\n name: cause.name,\n message: cause.message,\n };\n }\n\n if (this.constructor.name === \"HttpError\") {\n this.error =\n options.error ?? errorNameByStatus[this.status] ?? \"HttpError\";\n } else {\n this.error = this.constructor.name;\n }\n }\n}\n\nexport const errorNameByStatus: Record<number, string> = {\n 400: \"BadRequestError\",\n 401: \"UnauthorizedError\",\n 403: \"ForbiddenError\",\n 404: \"NotFoundError\",\n 405: \"MethodNotAllowedError\",\n 409: \"ConflictError\",\n 410: \"GoneError\",\n 413: \"PayloadTooLargeError\",\n 415: \"UnsupportedMediaTypeError\",\n 429: \"TooManyRequestsError\",\n 500: \"InternalServerError\",\n 501: \"NotImplementedError\",\n 502: \"BadGatewayError\",\n 503: \"ServiceUnavailableError\",\n 504: \"GatewayTimeoutError\",\n};\n\nexport interface HttpErrorLike extends Error {\n status: number;\n}\n","import type { RequestConfigSchema } from \"../interfaces/ServerRequest.ts\";\n\n/**\n * Checks if the route has multipart/form-data request body.\n */\nexport const isMultipart = (options: {\n schema?: RequestConfigSchema;\n requestBodyType?: string;\n}): boolean => {\n if (options.requestBodyType === \"multipart/form-data\") {\n return true;\n }\n\n if (options.schema?.body && \"properties\" in options.schema.body) {\n const properties: Record<string, any> = options.schema.body.properties;\n for (const key in properties) {\n if (properties[key].format === \"binary\") {\n return true;\n }\n }\n }\n\n return false;\n};\n","import { type Static, t } from \"alepha\";\n\nexport const errorSchema = t.object(\n {\n error: t.text({ description: \"HTTP error name\" }),\n status: t.integer({\n description: \"HTTP status code\",\n }),\n message: t.text({\n description: \"Short text which describe the error\",\n size: \"rich\",\n }),\n details: t.optional(\n t.text({\n description: \"Detailed description of the error\",\n size: \"rich\",\n }),\n ),\n requestId: t.optional(t.text()),\n cause: t.optional(\n t.object({\n name: t.text(),\n message: t.text({\n description: \"Cause Error message\",\n size: \"rich\",\n }),\n }),\n ),\n },\n {\n title: \"HttpError\",\n description: \"Generic response after a failed operation\",\n },\n);\n\nexport type ErrorSchema = Static<typeof errorSchema>;\n","import {\n $inject,\n Alepha,\n type FileLike,\n isFileLike,\n type Static,\n type TObject,\n type TSchema,\n} from \"alepha\";\nimport { $cache } from \"alepha/cache\";\nimport type { DurationLike } from \"alepha/datetime\";\nimport { $logger } from \"alepha/logger\";\nimport { HttpError } from \"../errors/HttpError.ts\";\nimport { isMultipart } from \"../helpers/isMultipart.ts\";\nimport type {\n ServerRequestConfigEntry,\n TRequestBody,\n TResponseBody,\n} from \"../interfaces/ServerRequest.ts\";\nimport type { ClientRequestOptions } from \"../primitives/$action.ts\";\nimport { errorSchema } from \"../schemas/errorSchema.ts\";\n\nexport class HttpClient {\n protected readonly log = $logger();\n protected readonly alepha = $inject(Alepha);\n\n public readonly cache = $cache<HttpClientCache>();\n\n protected readonly pendingRequests: HttpClientPendingRequests = {};\n\n public async fetchAction(args: FetchActionArgs): Promise<FetchResponse> {\n const route = args.action; // our link to fetch\n const options = args.options ?? {}; // fetch standard options, cache, etc.\n const config = args.config ?? {}; // params, query, body, etc.\n const host = args.host ?? \"\"; // remote host, e.g. \"https://api.example.com\" or empty (for browser)\n\n const request: RequestInit = {\n ...options.request,\n };\n\n const method = route.method;\n const headers: Record<string, string> = {};\n const url = this.url(host, route, config);\n\n await this.alepha.events.emit(\"client:onRequest\", {\n route,\n config,\n options,\n headers,\n request,\n });\n\n request.method ??= method;\n\n await this.body(request, headers, route, config);\n\n request.headers = {\n ...config.headers,\n ...Object.fromEntries(new Headers(request.headers).entries()),\n ...headers,\n };\n\n return await this.fetch(url, {\n ...request,\n schema: route.schema,\n ...options,\n });\n }\n\n public async fetch<T extends TSchema>(\n url: string,\n request: RequestInitWithOptions<T> = {}, // standard options\n ): Promise<FetchResponse<Static<T>>> {\n const options = {\n cache: request.localCache,\n schema: request.schema?.response,\n key: request.key,\n };\n\n request.method ??= \"GET\";\n\n this.log.trace(\"Request\", {\n url,\n method: request.method,\n body: request.body,\n headers: request.headers,\n options,\n });\n\n // Only add automatic ETag if user didn't explicitly provide headers\n const cached = await this.cache.get(url);\n if (cached && request.method === \"GET\") {\n if (cached.etag) {\n request.headers = new Headers(request.headers);\n if (!request.headers.has(\"if-none-match\")) {\n request.headers.set(\"if-none-match\", cached.etag);\n }\n } else {\n return {\n data: cached.data as Static<T>,\n status: 200,\n statusText: \"OK\",\n headers: new Headers(),\n };\n }\n }\n\n await this.alepha.events.emit(\"client:beforeFetch\", {\n url,\n options,\n request,\n });\n\n // make a key for the request\n // this will be used to check if the request is already pending\n const key =\n options.key ??\n JSON.stringify({\n url,\n method: request.method,\n body: request.body,\n });\n\n const existing = this.pendingRequests[key];\n if (existing) {\n this.log.info(\"Request already pending\", key);\n return existing;\n }\n\n this.pendingRequests[key] = fetch(url, request)\n .then(async (response) => {\n this.log.debug(\"Response\", {\n url,\n status: response.status,\n });\n\n const fetchResponse: FetchResponse = {\n data: await this.responseData(response, options),\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n raw: response,\n };\n\n if (request.method === \"GET\") {\n if (options.cache) {\n await this.cache.set(\n url,\n { data: fetchResponse.data },\n typeof options.cache === \"boolean\" ? undefined : options.cache,\n );\n } else if (!this.alepha.isBrowser()) {\n // only cache etag on server, browser can handle etag itself\n const etag = response.headers.get(\"etag\") ?? undefined;\n if (etag) {\n await this.cache.set(url, { data: fetchResponse.data, etag });\n }\n }\n }\n\n return fetchResponse;\n })\n .finally(() => {\n delete this.pendingRequests[key];\n });\n\n return this.pendingRequests[key];\n }\n\n protected url(\n host: string,\n action: HttpAction,\n args: ServerRequestConfigEntry,\n ) {\n let url = host;\n\n if (action.prefix) {\n url += action.prefix;\n }\n\n url += action.path;\n url = this.pathVariables(url, action, args);\n url = this.queryParams(url, action, args);\n\n return url;\n }\n\n protected async body(\n init: RequestInit,\n headers: Record<string, string>,\n action: HttpAction,\n args: ServerRequestConfigEntry = {},\n ) {\n const hasHeader =\n typeof init.headers === \"object\" &&\n \"content-type\" in init.headers &&\n init.headers[\"content-type\"] === \"multipart/form-data\";\n\n if (hasHeader || isMultipart(action)) {\n if (typeof init.headers === \"object\" && \"content-type\" in init.headers) {\n delete init.headers[\"content-type\"]; // fetch() will fill this for us\n }\n\n const formData = new FormData();\n\n for (const [key, value] of Object.entries(args.body ?? {})) {\n if (typeof value === \"string\") {\n formData.append(key, value);\n continue;\n }\n if (value instanceof Blob) {\n formData.append(key, value);\n continue;\n }\n if (isFileLike(value)) {\n // FileLike must be transformed to WebFile\n formData.append(\n key,\n new File([await value.arrayBuffer()], value.name, {\n type: value.type,\n }),\n );\n }\n }\n\n init.body = formData;\n\n return;\n }\n\n if (!init.body && action.schema?.body) {\n headers[\"content-type\"] = \"application/json\";\n init.body = this.alepha.codec.encode(action.schema?.body, args.body, {\n as: \"string\",\n });\n }\n }\n\n protected async responseData(\n response: Response,\n options: FetchOptions,\n ): Promise<any> {\n if (response.status === 304) {\n let cacheKey = response.url;\n if (typeof window !== \"undefined\") {\n cacheKey = cacheKey.replace(window.location.origin, \"\");\n }\n\n const cached = await this.cache.get(cacheKey);\n if (cached) {\n return cached.data;\n }\n\n // if no cached data (etag-only routes), return empty string\n return \"\";\n }\n\n if (response.status === 204) {\n return;\n }\n\n if (this.isMaybeFile(response)) {\n return this.createFileLike(response);\n }\n\n if (response.headers.get(\"Content-Type\")?.startsWith(\"text/\")) {\n return await response.text();\n }\n\n if (response.headers.get(\"Content-Type\") === \"application/json\") {\n const json = await response.json();\n\n if (response.status >= 400) {\n const jsonError = this.alepha.codec.decode(errorSchema, json);\n const error = new HttpError(jsonError);\n\n await this.alepha.events.emit(\"client:onError\", {\n error,\n });\n\n throw error;\n }\n\n if (options.schema) {\n return this.alepha.codec.decode(options.schema, json);\n }\n\n return json;\n }\n\n if (response.status >= 400) {\n const error = new HttpError({\n status: response.status,\n message: `An error occurred while fetching the resource. (${response.statusText})`,\n });\n\n await this.alepha.events.emit(\"client:onError\", {\n error,\n });\n\n throw error;\n }\n\n return response;\n }\n\n protected isMaybeFile(response: Response): boolean {\n const contentType = response.headers.get(\"Content-Type\");\n if (!contentType) {\n return false;\n }\n\n if (response.headers.get(\"Content-Disposition\")?.includes(\"attachment\")) {\n return true; // If Content-Disposition indicates an attachment, treat it as a file\n }\n\n return (\n contentType.startsWith(\"application/octet-stream\") ||\n contentType.startsWith(\"application/pdf\") ||\n contentType.startsWith(\"application/zip\") ||\n contentType.startsWith(\"image/\") ||\n contentType.startsWith(\"video/\") ||\n contentType.startsWith(\"audio/\")\n );\n }\n\n protected createFileLike(response: Response, defaultFileName = \"\"): FileLike {\n const match = (response.headers.get(\"Content-Disposition\") ?? \"\").match(\n /filename=\"(.+)\"/,\n );\n return {\n name: match?.[1] ? match[1] : defaultFileName,\n type: response.headers.get(\"Content-Type\") ?? \"application/octet-stream\",\n size: Number(response.headers.get(\"Content-Length\") ?? 0),\n lastModified: Date.now(),\n stream: () => {\n throw new Error(\"Not implemented\");\n },\n arrayBuffer: async () => {\n return await response.arrayBuffer();\n },\n text: async () => {\n return await response.text();\n },\n };\n }\n\n public pathVariables(\n url: string,\n action: { schema?: { params?: TObject } },\n args: ServerRequestConfigEntry = {},\n ): string {\n if (typeof args.params === \"object\") {\n const params = action.schema?.params\n ? (this.alepha.codec.decode(\n action.schema.params,\n args.params,\n ) as Record<string, any>)\n : args.params;\n\n for (const key of Object.keys(params)) {\n url = url.replace(`:${key}`, params[key]);\n url = url.replace(`{${key}}`, params[key]);\n }\n }\n\n return url;\n }\n\n public queryParams(\n url: string,\n action: { schema?: { query?: TObject } },\n args: ServerRequestConfigEntry = {},\n ): string {\n if (typeof args.query === \"object\") {\n const query = action.schema?.query\n ? this.alepha.codec.decode(action.schema.query, args.query ?? {})\n : args.query;\n\n for (const key of Object.keys(query)) {\n if (query[key] === undefined) {\n delete query[key];\n }\n if (typeof query[key] === \"object\") {\n query[key] = JSON.stringify(query[key]);\n }\n }\n\n return `${url}?${new URLSearchParams(\n query as Record<string, string>,\n ).toString()}`;\n }\n return url;\n }\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport interface FetchOptions<T extends TSchema = TSchema> {\n /**\n * Key to identify the request in the pending requests.\n */\n key?: string;\n\n /**\n * The schema to validate the response against.\n */\n schema?: {\n response?: T;\n };\n\n /**\n * Built-in cache options.\n */\n localCache?: boolean | number | DurationLike;\n}\n\nexport type RequestInitWithOptions<T extends TSchema = TSchema> = RequestInit &\n FetchOptions<T>;\n\nexport interface FetchResponse<T = any> {\n data: T;\n status: number;\n statusText: string;\n headers: Headers;\n raw?: Response;\n}\n\nexport type HttpClientPendingRequests = Record<\n string,\n Promise<any> | undefined\n>;\n\ninterface HttpClientCache {\n data: any;\n etag?: string;\n}\n\nexport interface FetchActionArgs {\n action: HttpAction;\n host?: string;\n config?: ServerRequestConfigEntry;\n options?: ClientRequestOptions;\n}\n\nexport interface HttpAction {\n method?: string;\n prefix?: string;\n path: string;\n requestBodyType?: string;\n schema?: {\n params?: TObject;\n query?: TObject;\n body?: TRequestBody;\n response?: TResponseBody;\n };\n}\n","export const routeMethods = [\n // list of supported http methods\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"HEAD\",\n \"OPTIONS\",\n \"CONNECT\",\n \"TRACE\",\n] as const;\n\nexport type RouteMethod = (typeof routeMethods)[number];\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class BadRequestError extends HttpError {\n constructor(message = \"Invalid request body\", cause?: unknown) {\n super(\n {\n message,\n status: 400,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class ConflictError extends HttpError {\n constructor(message = \"Entity already exists\", cause?: unknown) {\n super(\n {\n message,\n status: 409,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class ForbiddenError extends HttpError {\n constructor(\n message = \"No permission to access this resource\",\n cause?: unknown,\n ) {\n super(\n {\n message,\n status: 403,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class NotFoundError extends HttpError {\n constructor(message = \"Resource not found\", cause?: unknown) {\n super(\n {\n message,\n status: 404,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class UnauthorizedError extends HttpError {\n readonly name = \"UnauthorizedError\";\n\n constructor(\n message = \"Not allowed to access this resource\",\n cause?: unknown,\n ) {\n super(\n {\n message,\n status: 401,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class ValidationError extends HttpError {\n constructor(message = \"Validation has failed\", cause?: unknown) {\n super(\n {\n message,\n status: 400,\n },\n cause,\n );\n }\n}\n","/**\n * Helper for building server replies.\n */\nexport class ServerReply {\n // TODO: make it private\n public headers: Record<string, string> & {\n \"set-cookie\"?: string[];\n } = {};\n\n public status?: number; // default 200, or 204 (no content)\n\n public body?: any;\n\n /**\n * Redirect to a given URL with optional status code (default 301).\n */\n public redirect(url: string, status: number = 301): void {\n this.status = status;\n this.headers.location = url;\n }\n\n // TODO: check if status / header is already set and throw an error if so (for allow to override with force flag)\n\n /**\n * Set the response status code.\n */\n public setStatus(status: number): this {\n this.status = status;\n return this;\n }\n\n /**\n * Set a response header.\n */\n public setHeader(name: string, value: string): this {\n this.headers[name.toLowerCase()] = value;\n return this;\n }\n\n /**\n * Set the response body.\n */\n public setBody(body: any): this {\n this.body = body;\n return this;\n }\n}\n","import type { Static } from \"alepha\";\nimport { t } from \"alepha\";\n\nexport const okSchema = t.object(\n {\n ok: t.boolean({ description: \"True when operation succeed\" }),\n id: t.optional(t.union([t.text(), t.integer()])),\n count: t.optional(\n t.number({ description: \"Number of resources affected\" }),\n ),\n },\n {\n title: \"Ok\",\n description: \"Generic response after a successful operation on a resource\",\n },\n);\n\nexport type Ok = Static<typeof okSchema>;\n","import { $module } from \"alepha\";\nimport { HttpClient } from \"./services/HttpClient.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./index.shared.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport const AlephaServer = $module({\n name: \"alepha.server\",\n primitives: [],\n services: [HttpClient],\n});\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as alepha19 from "alepha";
|
|
2
2
|
import { Alepha, AlephaError, Async, FileLike, KIND, Primitive, Static, StreamLike, TArray, TFile, TObject, TRecord, TSchema, TStream, TString, TVoid } from "alepha";
|
|
3
|
-
import * as
|
|
3
|
+
import * as alepha_logger3 from "alepha/logger";
|
|
4
4
|
import { Readable } from "node:stream";
|
|
5
5
|
import { DateTimeProvider, DurationLike } from "alepha/datetime";
|
|
6
6
|
import { ReadableStream } from "node:stream/web";
|
|
@@ -58,7 +58,7 @@ declare class ServerReply {
|
|
|
58
58
|
status?: number;
|
|
59
59
|
body?: any;
|
|
60
60
|
/**
|
|
61
|
-
* Redirect to a given URL with optional status code (default
|
|
61
|
+
* Redirect to a given URL with optional status code (default 301).
|
|
62
62
|
*/
|
|
63
63
|
redirect(url: string, status?: number): void;
|
|
64
64
|
/**
|
|
@@ -226,7 +226,7 @@ declare class ServerRequestParser {
|
|
|
226
226
|
//#region ../../src/server/core/providers/ServerTimingProvider.d.ts
|
|
227
227
|
type TimingMap = Record<string, [number, number]>;
|
|
228
228
|
declare class ServerTimingProvider {
|
|
229
|
-
protected readonly log:
|
|
229
|
+
protected readonly log: alepha_logger3.Logger;
|
|
230
230
|
protected readonly alepha: Alepha;
|
|
231
231
|
options: {
|
|
232
232
|
prefix: string;
|
|
@@ -249,7 +249,7 @@ declare class ServerTimingProvider {
|
|
|
249
249
|
* - $page => React route (for SSR)
|
|
250
250
|
*/
|
|
251
251
|
declare class ServerRouterProvider extends RouterProvider<ServerRouteMatcher> {
|
|
252
|
-
protected readonly log:
|
|
252
|
+
protected readonly log: alepha_logger3.Logger;
|
|
253
253
|
protected readonly alepha: Alepha;
|
|
254
254
|
protected readonly routes: ServerRoute[];
|
|
255
255
|
protected readonly serverTimingProvider: ServerTimingProvider;
|
|
@@ -288,7 +288,7 @@ declare class ServerRouterProvider extends RouterProvider<ServerRouteMatcher> {
|
|
|
288
288
|
* ServerProvider supports both Node.js HTTP requests and Web (Fetch API) requests.
|
|
289
289
|
*/
|
|
290
290
|
declare class ServerProvider {
|
|
291
|
-
protected readonly log:
|
|
291
|
+
protected readonly log: alepha_logger3.Logger;
|
|
292
292
|
protected readonly alepha: Alepha;
|
|
293
293
|
protected readonly dateTimeProvider: DateTimeProvider;
|
|
294
294
|
protected readonly router: ServerRouterProvider;
|
|
@@ -320,7 +320,7 @@ declare class ServerProvider {
|
|
|
320
320
|
//#endregion
|
|
321
321
|
//#region ../../src/server/core/services/HttpClient.d.ts
|
|
322
322
|
declare class HttpClient {
|
|
323
|
-
protected readonly log:
|
|
323
|
+
protected readonly log: alepha_logger3.Logger;
|
|
324
324
|
protected readonly alepha: Alepha;
|
|
325
325
|
readonly cache: alepha_cache0.CachePrimitiveFn<HttpClientCache, any[]>;
|
|
326
326
|
protected readonly pendingRequests: HttpClientPendingRequests;
|
|
@@ -536,7 +536,7 @@ interface ActionPrimitiveOptions<TConfig extends RequestConfigSchema> extends Om
|
|
|
536
536
|
handler: ServerActionHandler<TConfig>;
|
|
537
537
|
}
|
|
538
538
|
declare class ActionPrimitive<TConfig extends RequestConfigSchema> extends Primitive<ActionPrimitiveOptions<TConfig>> {
|
|
539
|
-
protected readonly log:
|
|
539
|
+
protected readonly log: alepha_logger3.Logger;
|
|
540
540
|
protected readonly env: {
|
|
541
541
|
SERVER_API_PREFIX: string;
|
|
542
542
|
};
|
|
@@ -684,7 +684,7 @@ declare module "alepha" {
|
|
|
684
684
|
declare class BunHttpServerProvider extends ServerProvider {
|
|
685
685
|
protected readonly alepha: Alepha;
|
|
686
686
|
protected readonly dateTimeProvider: DateTimeProvider;
|
|
687
|
-
protected readonly log:
|
|
687
|
+
protected readonly log: alepha_logger3.Logger;
|
|
688
688
|
protected readonly env: {
|
|
689
689
|
SERVER_PORT: number;
|
|
690
690
|
SERVER_HOST: string;
|
|
@@ -709,7 +709,7 @@ declare module "alepha" {
|
|
|
709
709
|
declare class NodeHttpServerProvider extends ServerProvider {
|
|
710
710
|
protected readonly alepha: Alepha;
|
|
711
711
|
protected readonly dateTimeProvider: DateTimeProvider;
|
|
712
|
-
protected readonly log:
|
|
712
|
+
protected readonly log: alepha_logger3.Logger;
|
|
713
713
|
protected readonly env: {
|
|
714
714
|
SERVER_PORT: number;
|
|
715
715
|
SERVER_HOST: string;
|
|
@@ -726,7 +726,7 @@ declare class NodeHttpServerProvider extends ServerProvider {
|
|
|
726
726
|
//#endregion
|
|
727
727
|
//#region ../../src/server/core/providers/ServerLoggerProvider.d.ts
|
|
728
728
|
declare class ServerLoggerProvider {
|
|
729
|
-
protected readonly log:
|
|
729
|
+
protected readonly log: alepha_logger3.Logger;
|
|
730
730
|
protected readonly alepha: Alepha;
|
|
731
731
|
readonly onRequest: alepha19.HookPrimitive<"server:onRequest">;
|
|
732
732
|
readonly onError: alepha19.HookPrimitive<"server:onError">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/server/core/schemas/errorSchema.ts","../../../src/server/core/errors/HttpError.ts","../../../src/server/core/constants/routeMethods.ts","../../../src/server/core/helpers/ServerReply.ts","../../../src/server/core/services/UserAgentParser.ts","../../../src/server/core/interfaces/ServerRequest.ts","../../../src/server/core/services/ServerRequestParser.ts","../../../src/server/core/providers/ServerTimingProvider.ts","../../../src/server/core/providers/ServerRouterProvider.ts","../../../src/server/core/providers/ServerProvider.ts","../../../src/server/core/services/HttpClient.ts","../../../src/server/core/primitives/$action.ts","../../../src/server/core/errors/BadRequestError.ts","../../../src/server/core/errors/ConflictError.ts","../../../src/server/core/errors/ForbiddenError.ts","../../../src/server/core/errors/NotFoundError.ts","../../../src/server/core/errors/UnauthorizedError.ts","../../../src/server/core/errors/ValidationError.ts","../../../src/server/core/helpers/isMultipart.ts","../../../src/server/core/schemas/okSchema.ts","../../../src/server/core/primitives/$route.ts","../../../src/server/core/providers/BunHttpServerProvider.ts","../../../src/server/core/providers/NodeHttpServerProvider.ts","../../../src/server/core/providers/ServerLoggerProvider.ts","../../../src/server/core/providers/ServerNotReadyProvider.ts","../../../src/server/core/index.ts"],"sourcesContent":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/server/core/schemas/errorSchema.ts","../../../src/server/core/errors/HttpError.ts","../../../src/server/core/constants/routeMethods.ts","../../../src/server/core/helpers/ServerReply.ts","../../../src/server/core/services/UserAgentParser.ts","../../../src/server/core/interfaces/ServerRequest.ts","../../../src/server/core/services/ServerRequestParser.ts","../../../src/server/core/providers/ServerTimingProvider.ts","../../../src/server/core/providers/ServerRouterProvider.ts","../../../src/server/core/providers/ServerProvider.ts","../../../src/server/core/services/HttpClient.ts","../../../src/server/core/primitives/$action.ts","../../../src/server/core/errors/BadRequestError.ts","../../../src/server/core/errors/ConflictError.ts","../../../src/server/core/errors/ForbiddenError.ts","../../../src/server/core/errors/NotFoundError.ts","../../../src/server/core/errors/UnauthorizedError.ts","../../../src/server/core/errors/ValidationError.ts","../../../src/server/core/helpers/isMultipart.ts","../../../src/server/core/schemas/okSchema.ts","../../../src/server/core/primitives/$route.ts","../../../src/server/core/providers/BunHttpServerProvider.ts","../../../src/server/core/providers/NodeHttpServerProvider.ts","../../../src/server/core/providers/ServerLoggerProvider.ts","../../../src/server/core/providers/ServerNotReadyProvider.ts","../../../src/server/core/index.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -31,9 +31,9 @@ var ServerReply = class {
|
|
|
31
31
|
status;
|
|
32
32
|
body;
|
|
33
33
|
/**
|
|
34
|
-
* Redirect to a given URL with optional status code (default
|
|
34
|
+
* Redirect to a given URL with optional status code (default 301).
|
|
35
35
|
*/
|
|
36
|
-
redirect(url, status =
|
|
36
|
+
redirect(url, status = 301) {
|
|
37
37
|
this.status = status;
|
|
38
38
|
this.headers.location = url;
|
|
39
39
|
}
|
|
@@ -536,6 +536,7 @@ var ServerProvider = class {
|
|
|
536
536
|
router = $inject(ServerRouterProvider);
|
|
537
537
|
internalServerErrorMessage = "Internal Server Error";
|
|
538
538
|
get hostname() {
|
|
539
|
+
if (this.alepha.isViteDev()) return `http://localhost:${this.alepha.env.SERVER_PORT}`;
|
|
539
540
|
return "";
|
|
540
541
|
}
|
|
541
542
|
/**
|
|
@@ -602,8 +603,10 @@ var ServerProvider = class {
|
|
|
602
603
|
}
|
|
603
604
|
if (response.body instanceof ReadableStream) {
|
|
604
605
|
res.writeHead(response.status, response.headers);
|
|
606
|
+
res.flushHeaders();
|
|
607
|
+
res.socket?.setNoDelay(true);
|
|
605
608
|
try {
|
|
606
|
-
for await (const chunk of response.body) res.write(chunk);
|
|
609
|
+
for await (const chunk of response.body) if (!res.write(chunk)) await new Promise((resolve) => res.once("drain", resolve));
|
|
607
610
|
} catch (error) {
|
|
608
611
|
this.log.error("Error piping proxy response stream", error);
|
|
609
612
|
} finally {
|
|
@@ -665,7 +668,7 @@ var ServerProvider = class {
|
|
|
665
668
|
return;
|
|
666
669
|
}
|
|
667
670
|
if (Buffer.isBuffer(response.body)) {
|
|
668
|
-
ev.res = new Response(response.body
|
|
671
|
+
ev.res = new Response(new Uint8Array(response.body), {
|
|
669
672
|
status: response.status,
|
|
670
673
|
headers: response.headers
|
|
671
674
|
});
|