alepha 0.19.0 → 0.19.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +6 -9
- package/dist/api/audits/index.d.ts +378 -346
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/files/index.d.ts +216 -184
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +5 -1
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.d.ts +528 -496
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/jobs/index.js +3 -3
- package/dist/api/jobs/index.js.map +1 -1
- package/dist/api/keys/index.d.ts +202 -202
- package/dist/api/keys/index.d.ts.map +1 -1
- package/dist/api/notifications/index.d.ts +152 -152
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/organizations/index.browser.js +48 -0
- package/dist/api/organizations/index.browser.js.map +1 -0
- package/dist/api/organizations/index.d.ts +516 -0
- package/dist/api/organizations/index.d.ts.map +1 -0
- package/dist/api/organizations/index.js +202 -0
- package/dist/api/organizations/index.js.map +1 -0
- package/dist/api/parameters/index.d.ts +391 -358
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/parameters/index.js +5 -1
- package/dist/api/parameters/index.js.map +1 -1
- package/dist/api/users/index.browser.js +7 -5
- package/dist/api/users/index.browser.js.map +1 -1
- package/dist/api/users/index.d.ts +989 -931
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +292 -146
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.d.ts +132 -132
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/api/verifications/index.js +2 -2
- package/dist/api/verifications/index.js.map +1 -1
- package/dist/batch/index.d.ts +6 -6
- package/dist/batch/index.d.ts.map +1 -1
- package/dist/billing/index.d.ts +1048 -0
- package/dist/billing/index.d.ts.map +1 -0
- package/dist/billing/index.js +713 -0
- package/dist/billing/index.js.map +1 -0
- package/dist/bin/index.js +0 -2
- package/dist/bin/index.js.map +1 -1
- package/dist/bucket/index.d.ts +10 -10
- package/dist/bucket/index.d.ts.map +1 -1
- package/dist/bucket/index.js +2 -2
- package/dist/bucket/index.js.map +1 -1
- package/dist/cache/core/index.d.ts +9 -9
- package/dist/cache/core/index.d.ts.map +1 -1
- package/dist/cache/core/index.js +2 -2
- package/dist/cache/core/index.js.map +1 -1
- package/dist/cache/core/index.workerd.js +2 -2
- package/dist/cache/core/index.workerd.js.map +1 -1
- package/dist/cache/redis/index.d.ts +6 -6
- package/dist/cache/redis/index.d.ts.map +1 -1
- package/dist/cache/redis/index.js +2 -2
- package/dist/cache/redis/index.js.map +1 -1
- package/dist/cli/config/index.d.ts +12 -2
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/config/index.js +4 -0
- package/dist/cli/config/index.js.map +1 -1
- package/dist/cli/core/index.d.ts +183 -139
- package/dist/cli/core/index.d.ts.map +1 -1
- package/dist/cli/core/index.js +283 -86
- package/dist/cli/core/index.js.map +1 -1
- package/dist/cli/devtools/index.d.ts +45 -0
- package/dist/cli/devtools/index.d.ts.map +1 -0
- package/dist/cli/devtools/index.js +170 -0
- package/dist/cli/devtools/index.js.map +1 -0
- package/dist/cli/platform/index.d.ts +383 -492
- package/dist/cli/platform/index.d.ts.map +1 -1
- package/dist/cli/platform/index.js +42 -511
- package/dist/cli/platform/index.js.map +1 -1
- package/dist/cli/vendor/index.d.ts +196 -0
- package/dist/cli/vendor/index.d.ts.map +1 -0
- package/dist/cli/vendor/index.js +384 -0
- package/dist/cli/vendor/index.js.map +1 -0
- package/dist/command/index.d.ts +18 -18
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +2 -2
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +4 -4
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +10 -10
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +4 -4
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +4 -4
- package/dist/core/index.native.js.map +1 -1
- package/dist/core/index.workerd.js +4 -4
- package/dist/core/index.workerd.js.map +1 -1
- package/dist/crypto/index.d.ts +7 -7
- package/dist/crypto/index.d.ts.map +1 -1
- package/dist/datetime/index.d.ts +4 -4
- package/dist/datetime/index.d.ts.map +1 -1
- package/dist/email/brevo/index.d.ts +4 -4
- package/dist/email/brevo/index.d.ts.map +1 -1
- package/dist/email/core/index.d.ts +15 -11
- package/dist/email/core/index.d.ts.map +1 -1
- package/dist/email/core/index.js +12 -35
- package/dist/email/core/index.js.map +1 -1
- package/dist/email/smtp/index.d.ts +12 -12
- package/dist/email/smtp/index.d.ts.map +1 -1
- package/dist/email/smtp/index.js +7 -4
- package/dist/email/smtp/index.js.map +1 -1
- package/dist/fake/index.d.ts +4 -8
- package/dist/fake/index.d.ts.map +1 -1
- package/dist/fake/index.js +55 -889
- package/dist/fake/index.js.map +1 -1
- package/dist/lock/core/index.d.ts +13 -13
- package/dist/lock/core/index.d.ts.map +1 -1
- package/dist/lock/core/index.js +2 -2
- package/dist/lock/core/index.js.map +1 -1
- package/dist/lock/redis/index.d.ts +4 -4
- package/dist/lock/redis/index.d.ts.map +1 -1
- package/dist/logger/index.d.ts +16 -15
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +5 -2
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.d.ts +11 -11
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +2 -2
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/core/index.browser.js +11 -1
- package/dist/orm/core/index.browser.js.map +1 -1
- package/dist/orm/core/index.bun.js +53 -16
- package/dist/orm/core/index.bun.js.map +1 -1
- package/dist/orm/core/index.d.ts +95 -51
- package/dist/orm/core/index.d.ts.map +1 -1
- package/dist/orm/core/index.js +55 -14
- package/dist/orm/core/index.js.map +1 -1
- package/dist/orm/postgres/index.bun.js +17 -11
- package/dist/orm/postgres/index.bun.js.map +1 -1
- package/dist/orm/postgres/index.d.ts +21 -15
- package/dist/orm/postgres/index.d.ts.map +1 -1
- package/dist/orm/postgres/index.js +19 -13
- package/dist/orm/postgres/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +14 -14
- package/dist/queue/core/index.d.ts.map +1 -1
- package/dist/queue/core/index.js +2 -2
- package/dist/queue/core/index.js.map +1 -1
- package/dist/queue/core/index.workerd.js +2 -2
- package/dist/queue/core/index.workerd.js.map +1 -1
- package/dist/queue/redis/index.d.ts +4 -4
- package/dist/queue/redis/index.d.ts.map +1 -1
- package/dist/queue/redis/index.js +2 -2
- package/dist/queue/redis/index.js.map +1 -1
- package/dist/react/auth/index.d.ts +9 -9
- package/dist/react/auth/index.d.ts.map +1 -1
- package/dist/react/core/index.d.ts +6 -6
- package/dist/react/core/index.d.ts.map +1 -1
- package/dist/react/core/index.js +5 -4
- package/dist/react/core/index.js.map +1 -1
- package/dist/react/form/index.d.ts +4 -4
- package/dist/react/form/index.d.ts.map +1 -1
- package/dist/react/head/index.d.ts +4 -4
- package/dist/react/head/index.d.ts.map +1 -1
- package/dist/react/i18n/index.d.ts +9 -9
- package/dist/react/i18n/index.d.ts.map +1 -1
- package/dist/react/intro/index.d.ts +2 -2
- package/dist/react/intro/index.d.ts.map +1 -1
- package/dist/react/intro/index.js +3 -4
- package/dist/react/intro/index.js.map +1 -1
- package/dist/react/router/index.browser.js +4 -5
- package/dist/react/router/index.browser.js.map +1 -1
- package/dist/react/router/index.d.ts +215 -215
- package/dist/react/router/index.d.ts.map +1 -1
- package/dist/react/router/index.js +6 -7
- package/dist/react/router/index.js.map +1 -1
- package/dist/react/testing/index.d.ts +2 -2
- package/dist/react/testing/index.d.ts.map +1 -1
- package/dist/react/testing/index.js +2 -4
- package/dist/react/testing/index.js.map +1 -1
- package/dist/redis/index.d.ts +19 -19
- package/dist/redis/index.d.ts.map +1 -1
- package/dist/retry/index.d.ts +4 -4
- package/dist/retry/index.d.ts.map +1 -1
- package/dist/scheduler/index.d.ts +13 -13
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +2 -2
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/index.workerd.js +2 -2
- package/dist/scheduler/index.workerd.js.map +1 -1
- package/dist/security/index.browser.js +1 -1
- package/dist/security/index.browser.js.map +1 -1
- package/dist/security/index.d.ts +47 -47
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +9 -12
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +170 -169
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +16 -2
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cookies/index.d.ts +7 -7
- package/dist/server/cookies/index.d.ts.map +1 -1
- package/dist/server/core/index.d.ts +76 -76
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +23 -17
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/cors/index.d.ts +13 -13
- package/dist/server/cors/index.d.ts.map +1 -1
- package/dist/server/cors/index.js +2 -2
- package/dist/server/cors/index.js.map +1 -1
- package/dist/server/etag/index.d.ts +9 -9
- package/dist/server/etag/index.d.ts.map +1 -1
- package/dist/server/health/index.d.ts +20 -20
- package/dist/server/health/index.d.ts.map +1 -1
- package/dist/server/links/index.browser.js +2 -2
- package/dist/server/links/index.browser.js.map +1 -1
- package/dist/server/links/index.d.ts +66 -66
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +4 -4
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/metrics/index.d.ts +7 -7
- package/dist/server/metrics/index.d.ts.map +1 -1
- package/dist/server/proxy/index.d.ts +5 -5
- package/dist/server/proxy/index.d.ts.map +1 -1
- package/dist/server/rate-limit/index.d.ts +12 -12
- package/dist/server/rate-limit/index.d.ts.map +1 -1
- package/dist/server/rate-limit/index.js +2 -2
- package/dist/server/rate-limit/index.js.map +1 -1
- package/dist/server/static/index.d.ts +5 -5
- package/dist/server/static/index.d.ts.map +1 -1
- package/dist/server/swagger/index.d.ts +7 -7
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js +2 -2
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +11 -7
- package/dist/sms/index.d.ts.map +1 -1
- package/dist/sms/index.js +9 -15
- package/dist/sms/index.js.map +1 -1
- package/dist/system/index.d.ts +4 -4
- package/dist/system/index.d.ts.map +1 -1
- package/dist/topic/core/index.d.ts +6 -6
- package/dist/topic/core/index.d.ts.map +1 -1
- package/dist/topic/redis/index.d.ts +7 -7
- package/dist/topic/redis/index.d.ts.map +1 -1
- package/dist/topic/redis/index.js +2 -2
- package/dist/topic/redis/index.js.map +1 -1
- package/dist/websocket/index.d.ts +36 -36
- package/dist/websocket/index.d.ts.map +1 -1
- package/dist/websocket/index.js +2 -2
- package/dist/websocket/index.js.map +1 -1
- package/package.json +37 -32
- package/src/api/files/{controllers → __tests__}/FileController.spec.ts +189 -143
- package/src/api/files/{services → __tests__}/FileService.spec.ts +50 -30
- package/src/api/files/controllers/FileController.ts +6 -0
- package/src/api/jobs/{services → __tests__}/JobService.spec.ts +1 -1
- package/src/api/jobs/providers/JobProvider.ts +3 -3
- package/src/api/keys/{services → __tests__}/ApiKeyService.spec.ts +1 -1
- package/src/api/organizations/__tests__/OrganizationService.spec.ts +193 -0
- package/src/api/organizations/controllers/AdminOrganizationController.ts +103 -0
- package/src/api/organizations/entities/organizations.ts +20 -0
- package/src/api/organizations/index.browser.ts +10 -0
- package/src/api/organizations/index.ts +31 -0
- package/src/api/organizations/schemas/createOrganizationSchema.ts +10 -0
- package/src/api/organizations/schemas/organizationQuerySchema.ts +10 -0
- package/src/api/organizations/schemas/organizationResourceSchema.ts +6 -0
- package/src/api/organizations/schemas/updateOrganizationSchema.ts +7 -0
- package/src/api/organizations/services/OrganizationService.ts +75 -0
- package/src/api/parameters/services/ParameterProvider.ts +6 -1
- package/src/api/users/__tests__/$realm.spec.ts +191 -0
- package/src/api/users/__tests__/RealmProvider.spec.ts +53 -0
- package/src/api/users/__tests__/SessionService.spec.ts +778 -0
- package/src/api/users/{jobs → __tests__}/UserJobs.spec.ts +1 -1
- package/src/api/users/atoms/realmAuthSettingsAtom.ts +24 -0
- package/src/api/users/controllers/RealmController.ts +5 -11
- package/src/api/users/entities/users.ts +9 -3
- package/src/api/users/index.ts +23 -3
- package/src/api/users/primitives/$realm.ts +23 -11
- package/src/api/users/providers/RealmProvider.ts +23 -3
- package/src/api/users/services/RegistrationService.ts +3 -2
- package/src/api/users/services/SessionService.ts +249 -8
- package/src/api/users/services/UserService.ts +1 -1
- package/src/api/verifications/{jobs → __tests__}/VerificationJobs.spec.ts +4 -2
- package/src/api/verifications/parameters/VerificationParameters.ts +2 -2
- package/src/billing/__tests__/BillingService.spec.ts +136 -0
- package/src/billing/__tests__/PaymentMethodService.spec.ts +78 -0
- package/src/billing/controllers/AdminBillingController.ts +149 -0
- package/src/billing/controllers/BillingController.ts +108 -0
- package/src/billing/entities/paymentIntents.ts +34 -0
- package/src/billing/entities/paymentMethods.ts +24 -0
- package/src/billing/entities/refunds.ts +22 -0
- package/src/billing/errors/BillingError.ts +5 -0
- package/src/billing/index.ts +76 -0
- package/src/billing/providers/BillingProvider.ts +79 -0
- package/src/billing/providers/MemoryBillingProvider.ts +139 -0
- package/src/billing/schemas/intentSchemas.ts +60 -0
- package/src/billing/schemas/paymentMethodSchemas.ts +13 -0
- package/src/billing/schemas/refundSchemas.ts +6 -0
- package/src/billing/services/BillingService.ts +325 -0
- package/src/billing/services/PaymentMethodService.ts +82 -0
- package/src/bin/index.ts +0 -2
- package/src/bucket/providers/LocalFileStorageProvider.ts +2 -2
- package/src/cache/core/{primitives → __tests__}/$cache.middleware.spec.ts +1 -1
- package/src/cache/core/{providers → __tests__}/MemoryCacheProvider.spec.ts +1 -1
- package/src/cache/core/primitives/$cache.ts +2 -2
- package/src/cache/redis/providers/RedisCacheProvider.ts +2 -2
- package/src/cli/config/defineConfig.ts +20 -0
- package/src/cli/core/{services → __tests__}/ProjectScaffolder.spec.ts +1 -1
- package/src/cli/core/{commands/gen → __tests__}/changelog.spec.ts +1 -1
- package/src/cli/core/{commands → __tests__}/init.spec.ts +4 -12
- package/src/cli/core/assets.ts +0 -1
- package/src/cli/core/atoms/devOptions.ts +0 -5
- package/src/cli/core/commands/build.ts +2 -2
- package/src/cli/core/commands/dev.ts +165 -30
- package/src/cli/core/commands/gen/changelog.ts +2 -2
- package/src/cli/core/commands/init.ts +2 -7
- package/src/cli/core/commands/verify.ts +0 -1
- package/src/cli/core/providers/AppEntryProvider.ts +2 -2
- package/src/cli/core/providers/ViteDevServerProvider.ts +53 -46
- package/src/cli/core/services/PackageManagerUtils.ts +8 -3
- package/src/cli/core/services/ProjectScaffolder.ts +20 -20
- package/src/cli/core/tasks/BuildClientTask.ts +8 -0
- package/src/cli/core/tasks/BuildServerTask.ts +17 -4
- package/src/cli/core/templates/alephaConfigTs.ts +0 -6
- package/src/cli/core/templates/webAdminDashboardTsx.ts +17 -0
- package/src/cli/core/templates/webAppRouterTs.ts +85 -2
- package/src/cli/devtools/atoms/devtoolsOptions.ts +26 -0
- package/src/cli/devtools/index.ts +194 -0
- package/src/cli/platform/{adapters → __tests__}/CloudflareAdapter.spec.ts +2 -2
- package/src/cli/platform/{providers → __tests__}/GitHubSecretStore.spec.ts +1 -1
- package/src/cli/platform/{services → __tests__}/NamingService.spec.ts +1 -1
- package/src/cli/platform/{providers → __tests__}/PlatformCacheProvider.spec.ts +1 -1
- package/src/cli/platform/{services → __tests__}/PlatformInspector.spec.ts +1 -1
- package/src/cli/platform/{services → __tests__}/PlatformOrchestrator.spec.ts +3 -3
- package/src/cli/platform/{services → __tests__}/SecretFilterService.spec.ts +1 -1
- package/src/cli/platform/{commands → __tests__}/SecretsCommand.spec.ts +1 -1
- package/src/cli/platform/{adapters → __tests__}/VercelAdapter.spec.ts +2 -2
- package/src/cli/platform/atoms/platformOptions.ts +2 -10
- package/src/cli/platform/commands/SecretsCommand.ts +2 -2
- package/src/cli/platform/commands/platform.ts +2 -11
- package/src/cli/platform/index.ts +34 -11
- package/src/cli/platform/services/PlatformInspector.ts +2 -2
- package/src/cli/platform/services/PlatformOrchestrator.ts +0 -9
- package/src/cli/vendor/__tests__/VendorService.spec.ts +407 -0
- package/src/cli/vendor/atoms/vendorOptions.ts +41 -0
- package/src/cli/vendor/commands/VendorCommand.ts +204 -0
- package/src/cli/vendor/index.ts +43 -0
- package/src/cli/vendor/services/VendorService.ts +338 -0
- package/src/command/{providers → __tests__}/CliProvider.spec.ts +1 -1
- package/src/command/{helpers → __tests__}/EnvUtils.spec.ts +1 -1
- package/src/command/providers/CliProvider.ts +2 -2
- package/src/core/{primitives → __tests__}/$atom.spec.ts +2 -2
- package/src/core/{primitives → __tests__}/$memoize.spec.ts +1 -1
- package/src/core/{primitives → __tests__}/$mode.spec.ts +1 -1
- package/src/core/{primitives → __tests__}/$pipeline.spec.ts +1 -1
- package/src/core/{primitives → __tests__}/$scope.spec.ts +2 -2
- package/src/core/{providers → __tests__}/KeylessJsonSchemaCodec.spec.ts +1 -1
- package/src/core/{providers → __tests__}/SchemaValidator.spec.ts +1 -1
- package/src/core/{helpers → __tests__}/jsonSchemaToTypeBox.spec.ts +1 -1
- package/src/core/index.shared.ts +1 -1
- package/src/core/primitives/{$use.ts → $state.ts} +4 -4
- package/src/crypto/{providers → __tests__}/BrowserCryptoProvider.browser.spec.ts +1 -1
- package/src/crypto/{providers → __tests__}/CryptoProvider.spec.ts +1 -1
- package/src/datetime/{primitives → __tests__}/$debounce.spec.ts +1 -1
- package/src/datetime/{primitives → __tests__}/$throttle.spec.ts +1 -1
- package/src/datetime/{primitives → __tests__}/$timeout.spec.ts +1 -1
- package/src/email/brevo/{providers → __tests__}/BrevoEmailProvider.spec.ts +1 -1
- package/src/email/core/{providers → __tests__}/LocalEmailProvider.spec.ts +39 -150
- package/src/email/core/providers/LocalEmailProvider.ts +13 -51
- package/src/email/smtp/providers/NodemailerEmailProvider.ts +2 -2
- package/src/lock/core/{primitives → __tests__}/$lock.middleware.spec.ts +1 -1
- package/src/lock/core/primitives/$lock.ts +2 -2
- package/src/logger/index.ts +10 -4
- package/src/mcp/transports/SseMcpTransport.ts +2 -2
- package/src/orm/__tests__/ModelBuilder-tests.ts +53 -0
- package/src/orm/__tests__/ModelBuilder.spec.ts +80 -0
- package/src/orm/__tests__/organization-tests.ts +200 -0
- package/src/orm/__tests__/organization.spec.ts +103 -0
- package/src/orm/core/{providers/drivers → __tests__}/BunSqliteProvider.bun.spec.ts +5 -2
- package/src/orm/core/constants/PG_SYMBOLS.ts +2 -0
- package/src/orm/core/index.shared.ts +1 -0
- package/src/orm/core/primitives/$entity.ts +31 -0
- package/src/orm/core/providers/DatabaseTypeProvider.ts +11 -0
- package/src/orm/core/providers/DrizzleKitProvider.ts +1 -1
- package/src/orm/core/providers/drivers/BunSqliteProvider.ts +2 -2
- package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +3 -3
- package/src/orm/core/services/ModelBuilder.ts +11 -0
- package/src/orm/core/services/QueryManager.ts +16 -2
- package/src/orm/core/services/Repository.ts +70 -10
- package/src/orm/postgres/{providers → __tests__}/BunPostgresProvider.bun.spec.ts +1 -1
- package/src/orm/postgres/services/PostgresModelBuilder.ts +9 -1
- package/src/queue/core/providers/WorkerProvider.ts +2 -2
- package/src/queue/redis/providers/RedisQueueProvider.ts +2 -2
- package/src/react/core/{hooks → __tests__}/useAction.browser.spec.tsx +1 -1
- package/src/react/core/hooks/useAction.ts +7 -6
- package/src/react/head/{providers → __tests__}/BrowserHeadProvider.browser.spec.ts +1 -1
- package/src/react/head/{helpers → __tests__}/SeoExpander.spec.ts +1 -1
- package/src/react/i18n/{providers → __tests__}/I18nProvider.spec.ts +1 -1
- package/src/react/i18n/{hooks → __tests__}/useI18n.browser.spec.tsx +1 -1
- package/src/react/intro/components/GettingStartedDevtoolsSlide.tsx +3 -6
- package/src/react/router/{providers → __tests__}/ReactBrowserProvider.browser.spec.ts +1 -1
- package/src/react/router/providers/ReactBrowserProvider.ts +2 -2
- package/src/react/router/providers/ReactPageProvider.ts +2 -2
- package/src/react/router/providers/ReactServerProvider.ts +3 -3
- package/src/redis/{providers → __tests__}/BunRedisProvider.bun.spec.ts +4 -4
- package/src/retry/{primitives → __tests__}/$retry.middleware.spec.ts +1 -1
- package/src/router/{TemplatedPathParser.spec.ts → __tests__/TemplatedPathParser.spec.ts} +1 -1
- package/src/scheduler/primitives/$scheduler.ts +2 -2
- package/src/security/{primitives → __tests__}/$secure-browser.spec.ts +1 -1
- package/src/security/{primitives → __tests__}/$secure.spec.ts +1 -1
- package/src/security/primitives/$issuer.ts +1 -1
- package/src/security/providers/JwtProvider.ts +6 -10
- package/src/security/providers/SecurityProvider.ts +6 -11
- package/src/security/schemas/userAccountInfoSchema.ts +3 -3
- package/src/server/auth/providers/ServerAuthProvider.ts +24 -2
- package/src/server/cookies/{services → __tests__}/CookieParser.spec.ts +1 -1
- package/src/server/core/{primitives → __tests__}/$circuit.spec.ts +1 -1
- package/src/server/core/{providers → __tests__}/NodeHttpServerProvider.spec.ts +1 -1
- package/src/server/core/{providers → __tests__}/ServerBodyParserProvider.spec.ts +31 -1
- package/src/server/core/{providers → __tests__}/ServerCompressProvider.spec.ts +1 -1
- package/src/server/core/{providers → __tests__}/ServerHelmetProvider.spec.ts +4 -1
- package/src/server/core/{providers → __tests__}/ServerMultipartProvider.spec.ts +1 -1
- package/src/server/core/{services → __tests__}/ServerRequestParser.spec.ts +1 -1
- package/src/server/core/primitives/$action.ts +2 -2
- package/src/server/core/primitives/$sse.ts +2 -2
- package/src/server/core/providers/ServerBodyParserProvider.ts +21 -12
- package/src/server/core/providers/ServerCompressProvider.ts +2 -2
- package/src/server/core/providers/ServerHelmetProvider.ts +2 -2
- package/src/server/core/providers/ServerMultipartProvider.ts +2 -2
- package/src/server/core/providers/ServerRouterProvider.ts +1 -5
- package/src/server/cors/{primitives → __tests__}/$cors.spec.ts +1 -1
- package/src/server/cors/providers/ServerCorsProvider.ts +2 -2
- package/src/server/links/{services → __tests__}/BatchCollector.spec.ts +1 -1
- package/src/server/links/providers/LinkProvider.ts +2 -2
- package/src/server/links/providers/RemotePrimitiveProvider.ts +2 -2
- package/src/server/links/providers/ServerLinksProvider.ts +2 -2
- package/src/server/rate-limit/{primitives → __tests__}/$rateLimit.spec.ts +1 -1
- package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +2 -2
- package/src/server/swagger/providers/ServerSwaggerProvider.ts +2 -2
- package/src/sms/{providers → __tests__}/LocalSmsProvider.spec.ts +35 -29
- package/src/sms/providers/LocalSmsProvider.ts +13 -24
- package/src/system/{providers → __tests__}/MemoryFileSystemProvider.spec.ts +1 -1
- package/src/system/{providers → __tests__}/MemoryShellProvider.spec.ts +1 -1
- package/src/topic/redis/providers/RedisTopicProvider.ts +2 -2
- package/src/websocket/{services → __tests__}/RoomManager.spec.ts +1 -1
- package/src/websocket/providers/NodeWebSocketServerProvider.ts +2 -2
- package/tsconfig.base.json +1 -0
- package/assets/devtools-ui/200.html +0 -10
- package/assets/devtools-ui/200.html.br +0 -0
- package/assets/devtools-ui/404.html +0 -10
- package/assets/devtools-ui/404.html.br +0 -0
- package/assets/devtools-ui/CNAME +0 -1
- package/assets/devtools-ui/asset.CHpVij2M.css +0 -1
- package/assets/devtools-ui/asset.CHpVij2M.css.br +0 -0
- package/assets/devtools-ui/asset.DJ-i0UDz.css +0 -1
- package/assets/devtools-ui/asset.DJ-i0UDz.css.br +0 -0
- package/assets/devtools-ui/chunk.1jwpJORo.js +0 -1
- package/assets/devtools-ui/chunk.1jwpJORo.js.br +0 -0
- package/assets/devtools-ui/chunk.B0r2wfUL.js +0 -1
- package/assets/devtools-ui/chunk.B0r2wfUL.js.br +0 -0
- package/assets/devtools-ui/chunk.BScN4dVR.js +0 -84
- package/assets/devtools-ui/chunk.BScN4dVR.js.br +0 -0
- package/assets/devtools-ui/chunk.BispuoY4.js +0 -1
- package/assets/devtools-ui/chunk.BispuoY4.js.br +0 -0
- package/assets/devtools-ui/chunk.BtrPUUd7.js +0 -2
- package/assets/devtools-ui/chunk.BtrPUUd7.js.br +0 -0
- package/assets/devtools-ui/chunk.C-KMHgqf.js +0 -1
- package/assets/devtools-ui/chunk.C-KMHgqf.js.br +0 -0
- package/assets/devtools-ui/chunk.C2zQ3CF6.js +0 -7
- package/assets/devtools-ui/chunk.C2zQ3CF6.js.br +0 -0
- package/assets/devtools-ui/chunk.C619McpO.js +0 -1
- package/assets/devtools-ui/chunk.C619McpO.js.br +0 -0
- package/assets/devtools-ui/chunk.C9OsYsVl.js +0 -1
- package/assets/devtools-ui/chunk.C9OsYsVl.js.br +0 -3
- package/assets/devtools-ui/chunk.CAC_-151.js +0 -1
- package/assets/devtools-ui/chunk.CAC_-151.js.br +0 -0
- package/assets/devtools-ui/chunk.CCmesWfx.js +0 -1
- package/assets/devtools-ui/chunk.CCmesWfx.js.br +0 -0
- package/assets/devtools-ui/chunk.CFQDmrcV.js +0 -1
- package/assets/devtools-ui/chunk.CFQDmrcV.js.br +0 -0
- package/assets/devtools-ui/chunk.CgM71Zau.js +0 -1
- package/assets/devtools-ui/chunk.CgM71Zau.js.br +0 -0
- package/assets/devtools-ui/chunk.CmHq336a.js +0 -1
- package/assets/devtools-ui/chunk.CmHq336a.js.br +0 -0
- package/assets/devtools-ui/chunk.CthNMCar.js +0 -1
- package/assets/devtools-ui/chunk.CthNMCar.js.br +0 -0
- package/assets/devtools-ui/chunk.D2brVJP1.js +0 -1
- package/assets/devtools-ui/chunk.D2brVJP1.js.br +0 -0
- package/assets/devtools-ui/chunk.DgBKGkiw.js +0 -1
- package/assets/devtools-ui/chunk.DgBKGkiw.js.br +0 -0
- package/assets/devtools-ui/chunk.NNHHCQsa.js +0 -1
- package/assets/devtools-ui/chunk.NNHHCQsa.js.br +0 -0
- package/assets/devtools-ui/chunk._CDKKWMo.js +0 -1
- package/assets/devtools-ui/chunk._CDKKWMo.js.br +0 -0
- package/assets/devtools-ui/entry.B_nOjAod.js +0 -2
- package/assets/devtools-ui/entry.B_nOjAod.js.br +0 -0
- package/assets/devtools-ui/index.html +0 -10
- package/assets/devtools-ui/index.html.br +0 -0
- package/dist/devtools/index.browser.js +0 -224
- package/dist/devtools/index.browser.js.map +0 -1
- package/dist/devtools/index.d.ts +0 -499
- package/dist/devtools/index.d.ts.map +0 -1
- package/dist/devtools/index.js +0 -782
- package/dist/devtools/index.js.map +0 -1
- package/dist/mqtt/index.d.ts +0 -164
- package/dist/mqtt/index.d.ts.map +0 -1
- package/dist/mqtt/index.js +0 -214
- package/dist/mqtt/index.js.map +0 -1
- package/dist/topic/mqtt/index.d.ts +0 -87
- package/dist/topic/mqtt/index.d.ts.map +0 -1
- package/dist/topic/mqtt/index.js +0 -88
- package/dist/topic/mqtt/index.js.map +0 -1
- package/src/api/users/parameters/UserParameters.ts +0 -23
- package/src/api/users/services/SessionService.spec.ts +0 -303
- package/src/cli/platform/adapters/DockerAdapter.spec.ts +0 -378
- package/src/cli/platform/adapters/DockerAdapter.ts +0 -417
- package/src/cli/platform/services/DockerComposeGenerator.spec.ts +0 -490
- package/src/cli/platform/services/DockerComposeGenerator.ts +0 -353
- package/src/cli/platform/services/DockerSshService.spec.ts +0 -47
- package/src/cli/platform/services/DockerSshService.ts +0 -61
- package/src/devtools/__tests__/DevCollectorProvider.spec.ts +0 -7
- package/src/devtools/assets.ts +0 -6
- package/src/devtools/entities/logs.ts +0 -21
- package/src/devtools/index.browser.ts +0 -11
- package/src/devtools/index.shared.ts +0 -15
- package/src/devtools/index.ts +0 -39
- package/src/devtools/providers/DevToolsMetadataProvider.ts +0 -459
- package/src/devtools/providers/DevToolsProvider.ts +0 -280
- package/src/devtools/schemas/DevActionMetadata.ts +0 -30
- package/src/devtools/schemas/DevAtomMetadata.ts +0 -26
- package/src/devtools/schemas/DevBucketMetadata.ts +0 -11
- package/src/devtools/schemas/DevCacheMetadata.ts +0 -10
- package/src/devtools/schemas/DevEntityMetadata.ts +0 -60
- package/src/devtools/schemas/DevEnvMetadata.ts +0 -22
- package/src/devtools/schemas/DevMetadata.ts +0 -47
- package/src/devtools/schemas/DevModuleMetadata.ts +0 -8
- package/src/devtools/schemas/DevPageMetadata.ts +0 -24
- package/src/devtools/schemas/DevProviderMetadata.ts +0 -10
- package/src/devtools/schemas/DevQueueMetadata.ts +0 -10
- package/src/devtools/schemas/DevRealmMetadata.ts +0 -19
- package/src/devtools/schemas/DevRouteMetadata.ts +0 -8
- package/src/devtools/schemas/DevSchedulerMetadata.ts +0 -11
- package/src/devtools/schemas/DevTopicMetadata.ts +0 -11
- package/src/mqtt/index.ts +0 -32
- package/src/mqtt/providers/MqttClientProvider.ts +0 -63
- package/src/mqtt/providers/MqttJsClientProvider.spec.ts +0 -165
- package/src/mqtt/providers/MqttJsClientProvider.ts +0 -309
- package/src/topic/mqtt/index.ts +0 -30
- package/src/topic/mqtt/providers/MqttTopicProvider.spec.ts +0 -160
- package/src/topic/mqtt/providers/MqttTopicProvider.ts +0 -146
- /package/src/api/audits/{primitives → __tests__}/$audit.spec.ts +0 -0
- /package/src/api/audits/{services → __tests__}/AuditService.spec.ts +0 -0
- /package/src/api/files/{controllers → __tests__}/AdminFileStatsController.spec.ts +0 -0
- /package/src/api/files/{jobs → __tests__}/FileJobs.spec.ts +0 -0
- /package/src/api/jobs/{primitives → __tests__}/$job-middleware.spec.ts +0 -0
- /package/src/api/parameters/{primitives → __tests__}/$parameter.spec.ts +0 -0
- /package/src/api/users/{controllers → __tests__}/AdminIdentityController.spec.ts +0 -0
- /package/src/api/users/{controllers → __tests__}/AdminSessionController.spec.ts +0 -0
- /package/src/api/users/{controllers → __tests__}/AdminUserController.spec.ts +0 -0
- /package/src/api/users/{services → __tests__}/CredentialService.spec.ts +0 -0
- /package/src/api/users/{services → __tests__}/RegistrationService.spec.ts +0 -0
- /package/src/batch/{primitives → __tests__}/$batch.spec.ts +0 -0
- /package/src/batch/{providers → __tests__}/BatchProvider.spec.ts +0 -0
- /package/src/bucket/{primitives → __tests__}/$bucket.spec.ts +0 -0
- /package/src/bucket/{providers → __tests__}/FileStorageProvider.spec.ts +0 -0
- /package/src/bucket/{providers → __tests__}/LocalFileStorageProvider.spec.ts +0 -0
- /package/src/bucket/{providers → __tests__}/MemoryFileStorageProvider.spec.ts +0 -0
- /package/src/cache/core/{primitives → __tests__}/$cache.spec.ts +0 -0
- /package/src/cache/redis/{providers → __tests__}/RedisCacheProvider.spec.ts +0 -0
- /package/src/command/{primitives → __tests__}/$command.spec.ts +0 -0
- /package/src/command/{helpers → __tests__}/Asker.spec.ts +0 -0
- /package/src/command/{helpers → __tests__}/Runner.spec.ts +0 -0
- /package/src/core/{primitives → __tests__}/$context.spec.ts +0 -0
- /package/src/core/{primitives → __tests__}/$env.spec.ts +0 -0
- /package/src/core/{primitives → __tests__}/$hook.spec.ts +0 -0
- /package/src/core/{primitives → __tests__}/$inject.spec.ts +0 -0
- /package/src/core/{primitives → __tests__}/$module.spec.ts +0 -0
- /package/src/core/{providers → __tests__}/CodecManager.spec.ts +0 -0
- /package/src/core/{providers → __tests__}/EventManager.spec.ts +0 -0
- /package/src/core/{providers → __tests__}/StateManager.spec.ts +0 -0
- /package/src/core/{providers → __tests__}/TypeProvider.spec.ts +0 -0
- /package/src/datetime/{primitives → __tests__}/$interval.spec.ts +0 -0
- /package/src/datetime/{providers → __tests__}/DateTimeProvider.spec.ts +0 -0
- /package/src/email/core/{primitives → __tests__}/$email.spec.ts +0 -0
- /package/src/fake/{providers → __tests__}/FakeProvider.spec.ts +0 -0
- /package/src/lock/core/{providers → __tests__}/MemoryLockProvider.spec.ts +0 -0
- /package/src/lock/redis/{providers → __tests__}/RedisLockProvider.spec.ts +0 -0
- /package/src/logger/{primitives → __tests__}/$logger.spec.ts +0 -0
- /package/src/logger/{services → __tests__}/Logger.spec.ts +0 -0
- /package/src/mcp/{primitives → __tests__}/$prompt.spec.ts +0 -0
- /package/src/mcp/{primitives → __tests__}/$resource.spec.ts +0 -0
- /package/src/mcp/{primitives → __tests__}/$tool.spec.ts +0 -0
- /package/src/mcp/{providers → __tests__}/McpServerProvider.spec.ts +0 -0
- /package/src/mcp/{helpers → __tests__}/jsonrpc.spec.ts +0 -0
- /package/src/orm/core/{helpers → __tests__}/parseQueryString.spec.ts +0 -0
- /package/src/queue/core/{primitives → __tests__}/$consumer.spec.ts +0 -0
- /package/src/queue/core/{providers → __tests__}/MemoryQueueProvider.spec.ts +0 -0
- /package/src/queue/core/{providers → __tests__}/WorkerProvider.spec.ts +0 -0
- /package/src/queue/redis/{providers → __tests__}/RedisQueueProvider.spec.ts +0 -0
- /package/src/react/form/{hooks → __tests__}/useForm.browser.spec.tsx +0 -0
- /package/src/react/head/{hooks → __tests__}/useHead.spec.tsx +0 -0
- /package/src/react/i18n/{components → __tests__}/Localize.spec.tsx +0 -0
- /package/src/react/router/{primitives → __tests__}/$page.browser.spec.tsx +0 -0
- /package/src/react/router/{primitives → __tests__}/$page.middleware.spec.tsx +0 -0
- /package/src/react/router/{primitives → __tests__}/$page.spec.tsx +0 -0
- /package/src/react/router/{providers → __tests__}/ReactPreloadProvider.spec.ts +0 -0
- /package/src/react/router/{providers → __tests__}/ReactServerProvider.spec.tsx +0 -0
- /package/src/react/router/{providers → __tests__}/ReactServerTemplateProvider.spec.ts +0 -0
- /package/src/retry/{primitives → __tests__}/$retry.spec.ts +0 -0
- /package/src/retry/{providers → __tests__}/RetryProvider.spec.ts +0 -0
- /package/src/router/{providers → __tests__}/RouterProvider.spec.ts +0 -0
- /package/src/security/{primitives → __tests__}/$issuer.spec.ts +0 -0
- /package/src/security/{primitives → __tests__}/$permission.spec.ts +0 -0
- /package/src/security/{primitives → __tests__}/$role.spec.ts +0 -0
- /package/src/security/{primitives → __tests__}/$serviceAccount.spec.ts +0 -0
- /package/src/security/{providers → __tests__}/SecurityProvider.spec.ts +0 -0
- /package/src/server/cookies/{providers → __tests__}/ServerCookiesProvider.spec.ts +0 -0
- /package/src/server/core/{primitives → __tests__}/$action.spec.ts +0 -0
- /package/src/server/core/{primitives → __tests__}/$middleware.spec.ts +0 -0
- /package/src/server/core/{primitives → __tests__}/$route.spec.ts +0 -0
- /package/src/server/core/{primitives → __tests__}/$sse.spec.ts +0 -0
- /package/src/server/core/{providers → __tests__}/BunHttpServerProvider.bun.spec.ts +0 -0
- /package/src/server/core/{services → __tests__}/HttpClient.spec.ts +0 -0
- /package/src/server/core/{providers → __tests__}/ServerLoggerProvider.spec.ts +0 -0
- /package/src/server/core/{services → __tests__}/UserAgentParser.spec.ts +0 -0
- /package/src/server/cors/{providers → __tests__}/ServerCorsProvider.spec.ts +0 -0
- /package/src/server/etag/{providers → __tests__}/ServerEtagProvider.spec.ts +0 -0
- /package/src/server/health/{providers → __tests__}/ServerHealthProvider.spec.ts +0 -0
- /package/src/server/links/{primitives → __tests__}/$remote.spec.ts +0 -0
- /package/src/server/links/{services → __tests__}/BatchEndpoint.spec.ts +0 -0
- /package/src/server/links/{providers → __tests__}/LinkProvider.spec.ts +0 -0
- /package/src/server/links/{providers → __tests__}/ServerLinksProvider.spec.ts +0 -0
- /package/src/server/metrics/{providers → __tests__}/ServerMetricsProvider.spec.ts +0 -0
- /package/src/server/proxy/{primitives → __tests__}/$proxy.spec.ts +0 -0
- /package/src/server/rate-limit/{providers → __tests__}/ServerRateLimitProvider.spec.ts +0 -0
- /package/src/server/static/{primitives → __tests__}/$serve.spec.ts +0 -0
- /package/src/server/swagger/{primitives → __tests__}/$swagger.spec.ts +0 -0
- /package/src/sms/{primitives → __tests__}/$sms.spec.ts +0 -0
- /package/src/sms/{providers → __tests__}/MemorySmsProvider.spec.ts +0 -0
- /package/src/system/{services → __tests__}/FileDetector.spec.ts +0 -0
- /package/src/system/{providers → __tests__}/NodeFileSystemProvider.spec.ts +0 -0
- /package/src/topic/core/{primitives → __tests__}/$subscriber.spec.ts +0 -0
- /package/src/topic/core/{providers → __tests__}/MemoryTopicProvider.spec.ts +0 -0
- /package/src/topic/redis/{providers → __tests__}/RedisTopicProvider.spec.ts +0 -0
- /package/src/websocket/{primitives → __tests__}/$channel.spec.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["Charset","PrometheusMIME","PrometheusMetricsVersion","OpenMetricsMIME","OpenMetricsVersion","OpenMetricsContentType","PrometheusContentType","RegistryContentType","Registry","T","BoundRegistryContentType","Promise","Metric","MetricValue","MetricObjectWithValues","MetricObject","metrics","clear","resetMetrics","registerMetric","metric","getMetricsAsJSON","getMetricsAsArray","removeSingleMetric","name","getSingleMetric","setDefaultLabels","labels","getSingleMetricAsString","contentType","setContentType","merge","registers","PROMETHEUS_CONTENT_TYPE","OPENMETRICS_CONTENT_TYPE","Collector","register","prometheusContentType","openMetricsContentType","AggregatorRegistry","Array","clusterMetrics","aggregate","metricsArr","setRegistries","regs","Counter","Gauge","Summary","Histogram","Aggregator","MetricType","CollectFunction","this","help","type","aggregator","collect","values","LabelValues","value","MetricValueWithName","metricName","Record","Partial","MetricConfiguration","labelNames","enableExemplars","CounterConfiguration","IncreaseDataWithExemplar","exemplarLabels","ObserveDataWithExemplar","Internal","constructor","configuration","inc","incData","get","reset","remove","GaugeConfiguration","dec","set","setToCurrentTime","startTimer","HistogramConfiguration","buckets","observe","observeData","zero","Config","SummaryConfiguration","percentiles","maxAgeSeconds","ageBuckets","pruneAgedBuckets","compressCount","Pushgateway","Parameters","url","options","registry","pushAdd","params","resp","body","push","delete","jobName","groupings","key","linearBuckets","start","width","count","exponentialBuckets","factor","DefaultMetricsCollectorConfiguration","prefix","gcDurationBuckets","eventLoopMonitoringPrecision","collectDefaultMetrics","config","metricsList","validateMetricName"],"sources":["../../../../../node_modules/prom-client/index.d.ts","../../../src/server/metrics/providers/ServerMetricsProvider.ts","../../../src/server/metrics/index.ts"],"x_google_ignoreList":[0],"mappings":";;;;;;;KAGYA,OAAAA;AAAAA,KAEAC,cAAAA;AAAAA,KACAC,wBAAAA;AAAAA,KAEAC,eAAAA;AAAAA,KACAC,kBAAAA;AAAAA,KAEAC,sBAAAA,MACRF,eAAAA,aAA4BC,kBAAAA,aAA+BJ,OAAAA;AAAAA,KACnDM,qBAAAA,MACRL,cAAAA,aAA2BC,wBAAAA,aAAqCF,OAAAA;AAAAA,KAExDO,mBAAAA,GACTD,qBAAAA,GACAD,sBAAAA;AAVH;;;AAAA,cAeaG,QAAAA,kCACqBD,mBAAAA,GAAsBD,qBAAAA;EAf1B;;;EAoB7BU,OAAAA,CAAAA,GAAWL,OAAAA;EAlBsB;;;EAuBjCM,KAAAA,CAAAA;;;;EAKAC,YAAAA,CAAAA;;;AA1BD;;EAgCCC,cAAAA,kBAAAA,CAAiCC,MAAAA,EAAQR,MAAAA,CAAOH,CAAAA;;;;EAKhDY,gBAAAA,CAAAA,GAAoBV,OAAAA,CAAQG,sBAAAA,CAAuBD,WAAAA;;;;EAKnDS,iBAAAA,CAAAA,GAAqBP,YAAAA;EAvCS;;;;EA6C9BQ,kBAAAA,CAAmBC,IAAAA;;;;;EAMnBC,eAAAA,kBAAAA,CAAkCD,IAAAA,WAAeZ,MAAAA,CAAOH,CAAAA;;;;;;EAOxDiB,gBAAAA,CAAiBC,MAAAA;;;;;EAMjBC,uBAAAA,CAAwBJ,IAAAA,WAAeb,OAAAA;;;;WAK9BkB,WAAAA,EAAanB,wBAAAA;;;;;;EAOtBoB,cAAAA,CAAeD,WAAAA,EAAanB,wBAAAA;;;;;SAMrBqB,KAAAA,CAAMC,SAAAA,EAAWxB,QAAAA,KAAaA,QAAAA;;;;SAK9ByB,uBAAAA,EAAyB3B,qBAAAA;;;;SAKzB4B,wBAAAA,EAA0B7B,sBAAAA;AAAAA;;;;KAoEtBO,MAAAA,8BACTkC,OAAAA,CAAQrC,CAAAA,IACRsC,KAAAA,CAAMtC,CAAAA,IACNuC,OAAAA,CAAQvC,CAAAA,IACRwC,SAAAA,CAAUxC,CAAAA;;;;KAKDyC,UAAAA;AAAAA,aAEAC,UAAAA;EACXL,OAAAA;EACAC,KAAAA;EACAE,SAAAA;EACAD;AAAAA;AAAAA,KAGII,eAAAA,OAAsBC,IAAAA,EAAM5C,CAAAA,YAAaE,OAAAA;AAAAA,UAEpCI,YAAAA;EACTS,IAAAA;EACA8B,IAAAA;EACAC,IAAAA,EAAMJ,UAAAA;EACNK,UAAAA,EAAYN,UAAAA;EACZO,OAAAA,EAASL,eAAAA;AAAAA;AAAAA,UAGAtC,sBAAAA,WAAiCD,WAAAA,kBAClCE,YAAAA;EACR2C,MAAAA,EAAQjD,CAAAA;AAAAA;AAAAA,KAGJI,WAAAA;EACJ+C,KAAAA;EACAjC,MAAAA,EAAQgC,WAAAA,CAAYlD,CAAAA;AAAAA;AAAAA,KAGhBoD,mBAAAA,qBAAwChD,WAAAA,CAAYJ,CAAAA;EACxDqD,UAAAA;AAAAA;AAAAA,KAGIH,WAAAA,qBAAgCK,OAAAA,CAAQD,MAAAA,CAAOtD,CAAAA;AAAAA,UAE1CwD,mBAAAA;EACTzC,IAAAA;EACA8B,IAAAA;EACAY,UAAAA,GAAazD,CAAAA,cAAeA,CAAAA;EAC5BuB,SAAAA,IACGxB,QAAAA,CAASF,qBAAAA,IACTE,QAAAA,CAASH,sBAAAA;EAEZmD,UAAAA,GAAaN,UAAAA;EACbO,OAAAA,GAAUL,eAAAA;EACVe,eAAAA;AAAAA;AAAAA,UAGgBC,oBAAAA,2BACRH,mBAAAA,CAAoBxD,CAAAA;EAC5BgD,OAAAA,GAAUL,eAAAA,CAAgBN,OAAAA,CAAQrC,CAAAA;AAAAA;AAAAA,UAGlB4D,wBAAAA;EAChBT,KAAAA;EACAjC,MAAAA,GAASgC,WAAAA,CAAYlD,CAAAA;EACrB6D,cAAAA,GAAiBX,WAAAA,CAAYlD,CAAAA;AAAAA;AAAAA,UAGb8D,uBAAAA;EAChBX,KAAAA;EACAjC,MAAAA,GAASgC,WAAAA,CAAYlD,CAAAA;EACrB6D,cAAAA,GAAiBX,WAAAA,CAAYlD,CAAAA;AAAAA;;;;cAMjBqC,OAAAA;;;;EAIZ2B,WAAAA,CAAYC,aAAAA,EAAeN,oBAAAA,CAAqB3D,CAAAA;;;;;;EAOhDkE,GAAAA,CAAIhD,MAAAA,EAAQgC,WAAAA,CAAYlD,CAAAA,GAAImD,KAAAA;;;;;EAM5Be,GAAAA,CAAIf,KAAAA;;;;;EAMJe,GAAAA,CAAIC,OAAAA,EAASP,wBAAAA,CAAyB5D,CAAAA;EA3CF;;;EAgDpCoE,GAAAA,CAAAA,GAAOlE,OAAAA,CAAQG,sBAAAA,CAAuBD,WAAAA,CAAYJ,CAAAA;;;;;;EAOlDkB,MAAAA,CAAAA,GAAU+B,MAAAA,aAAmBZ,OAAAA,CAAQ0B,QAAAA;;;;;;EAOrC7C,MAAAA,CAAOA,MAAAA,EAAQgC,WAAAA,CAAYlD,CAAAA,IAAKqC,OAAAA,CAAQ0B,QAAAA;EAzDA;;;EA8DxCM,KAAAA,CAAAA;;;;;EAMAC,MAAAA,CAAAA,GAAUrB,MAAAA;;;;;EAMVqB,MAAAA,CAAOpD,MAAAA,EAAQgC,WAAAA,CAAYlD,CAAAA;AAAAA;AAAAA,kBAGXqC,OAAAA;EAAAA,UACN0B,QAAAA;IAxE6B/D;;;;IA6EtCkE,GAAAA,CAAIf,KAAAA;EAAAA;AAAAA;AAAAA,UAIWoB,kBAAAA,2BACRf,mBAAAA,CAAoBxD,CAAAA;EAC5BgD,OAAAA,GAAUL,eAAAA,CAAgBL,KAAAA,CAAMtC,CAAAA;AAAAA;;;;cAMpBsC,KAAAA;EAhFb;;;EAoFC0B,WAAAA,CAAYC,aAAAA,EAAeM,kBAAAA,CAAmBvE,CAAAA;;;;;;EAO9CkE,GAAAA,CAAIhD,MAAAA,EAAQgC,WAAAA,CAAYlD,CAAAA,GAAImD,KAAAA;;;;;EAM5Be,GAAAA,CAAIf,KAAAA;;;;;;EAOJqB,GAAAA,CAAItD,MAAAA,EAAQgC,WAAAA,CAAYlD,CAAAA,GAAImD,KAAAA;;;;;EAM5BqB,GAAAA,CAAIrB,KAAAA;;;;;;EAOJsB,GAAAA,CAAIvD,MAAAA,EAAQgC,WAAAA,CAAYlD,CAAAA,GAAImD,KAAAA;;;;;EAM5BsB,GAAAA,CAAItB,KAAAA;;;;EAKJiB,GAAAA,CAAAA,GAAOlE,OAAAA,CAAQG,sBAAAA,CAAuBD,WAAAA,CAAYJ,CAAAA;;;;;EAMlD0E,gBAAAA,CAAiBxD,MAAAA,GAASgC,WAAAA,CAAYlD,CAAAA;;;;;;;AAxEvC;EAiFC2E,UAAAA,CAAWzD,MAAAA,GAASgC,WAAAA,CAAYlD,CAAAA,KAAMkB,MAAAA,GAASgC,WAAAA,CAAYlD,CAAAA;EAjFpC;;;;;EAwFvBkB,MAAAA,CAAAA,GAAU+B,MAAAA,aAAmBX,KAAAA,CAAMyB,QAAAA,CAAS/D,CAAAA;EA9EV;;;;;EAqFlCkB,MAAAA,CAAOA,MAAAA,EAAQgC,WAAAA,CAAYlD,CAAAA,IAAKsC,KAAAA,CAAMyB,QAAAA,CAAS/D,CAAAA;;;;EAK/CqE,KAAAA,CAAAA;;;;;EAMAC,MAAAA,CAAAA,GAAUrB,MAAAA;EAxFX;;;;EA8FCqB,MAAAA,CAAOpD,MAAAA,EAAQgC,WAAAA,CAAYlD,CAAAA;AAAAA;AAAAA,kBAGXsC,KAAAA;EAAAA,UACNyB,QAAAA;IA7Dc/D;;;;IAkEvBkE,GAAAA,CAAIf,KAAAA;IAjDiCnD;;;;IAuDrCwE,GAAAA,CAAIrB,KAAAA;IAvCuCnD;;;;IA6C3CyE,GAAAA,CAAItB,KAAAA;IArBsBnD;;;IA0B1B0E,gBAAAA;IApHDV;;;;;;IA4HCW,UAAAA,KAAezD,MAAAA,GAASgC,WAAAA,CAAYlD,CAAAA;EAAAA;AAAAA;AAAAA,UAIrB4E,sBAAAA,2BACRpB,mBAAAA,CAAoBxD,CAAAA;EAC5B6E,OAAAA;EACA7B,OAAAA,GAAUL,eAAAA,CAAgBH,SAAAA,CAAUxC,CAAAA;AAAAA;;;;cAMxBwC,SAAAA;;;;EAIZwB,WAAAA,CAAYC,aAAAA,EAAeW,sBAAAA,CAAuB5E,CAAAA;;;;;EAMlD8E,OAAAA,CAAQ3B,KAAAA;;;;;;EAMR2B,OAAAA,CAAQ5D,MAAAA,EAAQgC,WAAAA,CAAYlD,CAAAA,GAAImD,KAAAA;;;;;EAMhC2B,OAAAA,CAAQC,WAAAA,EAAajB,uBAAAA,CAAwB9D,CAAAA;;;;EAK7CoE,GAAAA,CAAAA,GAAOlE,OAAAA,CAAQG,sBAAAA,CAAuB+C,mBAAAA,CAAoBpD,CAAAA;;;;;;;;EAS1D2E,UAAAA,CAAWzD,MAAAA,GAASgC,WAAAA,CAAYlD,CAAAA,KAAMkB,MAAAA,GAASgC,WAAAA,CAAYlD,CAAAA;;;;;;AAhF5D;;;EA0FC2E,UAAAA,CACCzD,MAAAA,GAASgC,WAAAA,CAAYlD,CAAAA,GACrB6D,cAAAA,GAAiBX,WAAAA,CAAYlD,CAAAA,KAC1BkB,MAAAA,GAASgC,WAAAA,CAAYlD,CAAAA,GAAI6D,cAAAA,GAAiBX,WAAAA,CAAYlD,CAAAA;;;;EAK1DqE,KAAAA,CAAAA;;;;EAKAW,IAAAA,CAAK9D,MAAAA,EAAQgC,WAAAA,CAAYlD,CAAAA;EAxEc;AAIxC;;;;EA2ECkB,MAAAA,CAAAA,GAAU+B,MAAAA,aAAmBT,SAAAA,CAAUuB,QAAAA,CAAS/D,CAAAA;;;;;;EAOhDkB,MAAAA,CAAOA,MAAAA,EAAQgC,WAAAA,CAAYlD,CAAAA,IAAKwC,SAAAA,CAAUuB,QAAAA,CAAS/D,CAAAA;;;;;EAMnDsE,MAAAA,CAAAA,GAAUrB,MAAAA;EArF2B;AAMtC;;;EAqFCqB,MAAAA,CAAOpD,MAAAA,EAAQgC,WAAAA,CAAYlD,CAAAA;AAAAA;AAAAA,kBAGXwC,SAAAA;EAAAA,UACNuB,QAAAA;IAnEWD;;;;IAwEpBgB,OAAAA,CAAQ3B,KAAAA;IA1DWD;;;;;;;IAmEnByB,UAAAA,KAAezD,MAAAA,GAASgC,WAAAA,CAAYlD,CAAAA;EAAAA;EAAAA,UAG3BiF,MAAAA;IA/CejF;;;IAmDxB6E,OAAAA;EAAAA;AAAAA;AAAAA,UAIeK,oBAAAA,2BACR1B,mBAAAA,CAAoBxD,CAAAA;EAC5BmF,WAAAA;EACAC,aAAAA;EACAC,UAAAA;EACAC,gBAAAA;EACAC,aAAAA;EACAvC,OAAAA,GAAUL,eAAAA,CAAgBJ,OAAAA,CAAQvC,CAAAA;AAAAA;;;;cAMtBuC,OAAAA;;;;EAIZyB,WAAAA,CAAYC,aAAAA,EAAeiB,oBAAAA,CAAqBlF,CAAAA;;;;;EAMhD8E,OAAAA,CAAQ3B,KAAAA;;;;;;EAMR2B,OAAAA,CAAQ5D,MAAAA,EAAQgC,WAAAA,CAAYlD,CAAAA,GAAImD,KAAAA;;;;EAKhCiB,GAAAA,CAAAA,GAAOlE,OAAAA,CAAQG,sBAAAA,CAAuB+C,mBAAAA,CAAoBpD,CAAAA;;;;;;;EAQ1D2E,UAAAA,CAAWzD,MAAAA,GAASgC,WAAAA,CAAYlD,CAAAA,KAAMkB,MAAAA,GAASgC,WAAAA,CAAYlD,CAAAA;;;;EAK3DqE,KAAAA,CAAAA;;;;;;EAOAnD,MAAAA,CAAAA,GAAU+B,MAAAA,aAAmBV,OAAAA,CAAQwB,QAAAA,CAAS/D,CAAAA;;;;;;EAO9CkB,MAAAA,CAAOA,MAAAA,EAAQgC,WAAAA,CAAYlD,CAAAA,IAAKuC,OAAAA,CAAQwB,QAAAA,CAAS/D,CAAAA;;;;;EAMjDsE,MAAAA,CAAAA,GAAUrB,MAAAA;;;AA7FX;;EAmGCqB,MAAAA,CAAOpD,MAAAA,EAAQgC,WAAAA,CAAYlD,CAAAA;AAAAA;AAAAA,kBAGXuC,OAAAA;EAAAA,UACNwB,QAAAA;IAjGDZ;;;;IAsGR2B,OAAAA,CAAQ3B,KAAAA;IAtFR0B;;;AAIF;;;;IA2FEF,UAAAA,KAAezD,MAAAA,GAASgC,WAAAA,CAAYlD,CAAAA;EAAAA;EAAAA,UAG3BiF,MAAAA;IA7FiB;;;IAiG1BE,WAAAA;EAAAA;AAAAA;;;cC1qBW,qBAAA;EAAA,mBACQ,QAAA,EAAU,QAAA;EAAA,mBACV,MAAA,EAAM,MAAA;EAAA,UACf,mBAAA,GAAsB,SAAA;EAAA,SAEhB,OAAA,EAAS,4BAAA;EAAA,SAET,OAAA,EAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["Charset","PrometheusMIME","PrometheusMetricsVersion","OpenMetricsMIME","OpenMetricsVersion","OpenMetricsContentType","PrometheusContentType","RegistryContentType","Registry","T","BoundRegistryContentType","Promise","Metric","MetricValue","MetricObjectWithValues","MetricObject","metrics","clear","resetMetrics","registerMetric","metric","getMetricsAsJSON","getMetricsAsArray","removeSingleMetric","name","getSingleMetric","setDefaultLabels","labels","getSingleMetricAsString","contentType","setContentType","merge","registers","PROMETHEUS_CONTENT_TYPE","OPENMETRICS_CONTENT_TYPE","Collector","register","prometheusContentType","openMetricsContentType","AggregatorRegistry","Array","clusterMetrics","aggregate","metricsArr","setRegistries","regs","Counter","Gauge","Summary","Histogram","Aggregator","MetricType","CollectFunction","this","help","type","aggregator","collect","values","LabelValues","value","MetricValueWithName","metricName","Record","Partial","MetricConfiguration","labelNames","enableExemplars","CounterConfiguration","IncreaseDataWithExemplar","exemplarLabels","ObserveDataWithExemplar","Internal","constructor","configuration","inc","incData","get","reset","remove","GaugeConfiguration","dec","set","setToCurrentTime","startTimer","HistogramConfiguration","buckets","observe","observeData","zero","Config","SummaryConfiguration","percentiles","maxAgeSeconds","ageBuckets","pruneAgedBuckets","compressCount","Pushgateway","Parameters","url","options","registry","pushAdd","params","resp","body","push","delete","jobName","groupings","key","linearBuckets","start","width","count","exponentialBuckets","factor","DefaultMetricsCollectorConfiguration","prefix","gcDurationBuckets","eventLoopMonitoringPrecision","collectDefaultMetrics","config","metricsList","validateMetricName"],"sources":["../../../../../node_modules/prom-client/index.d.ts","../../../src/server/metrics/providers/ServerMetricsProvider.ts","../../../src/server/metrics/index.ts"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import * as alepha from "alepha";
|
|
1
|
+
import * as _$alepha from "alepha";
|
|
2
2
|
import { Alepha, Async, KIND, Primitive } from "alepha";
|
|
3
3
|
import { ServerHandler, ServerRequest, ServerRouterProvider } from "alepha/server";
|
|
4
|
-
import * as alepha_logger0 from "alepha/logger";
|
|
4
|
+
import * as _$alepha_logger0 from "alepha/logger";
|
|
5
5
|
|
|
6
6
|
//#region ../../src/server/proxy/primitives/$proxy.d.ts
|
|
7
7
|
/**
|
|
@@ -211,10 +211,10 @@ declare class ProxyPrimitive extends Primitive<ProxyPrimitiveOptions> {}
|
|
|
211
211
|
//#endregion
|
|
212
212
|
//#region ../../src/server/proxy/providers/ServerProxyProvider.d.ts
|
|
213
213
|
declare class ServerProxyProvider {
|
|
214
|
-
protected readonly log: alepha_logger0.Logger;
|
|
214
|
+
protected readonly log: _$alepha_logger0.Logger;
|
|
215
215
|
protected readonly routerProvider: ServerRouterProvider;
|
|
216
216
|
protected readonly alepha: Alepha;
|
|
217
|
-
protected readonly configure: alepha.HookPrimitive<"configure">;
|
|
217
|
+
protected readonly configure: _$alepha.HookPrimitive<"configure">;
|
|
218
218
|
createProxy(options: ProxyPrimitiveOptions): void;
|
|
219
219
|
createProxyHandler(target: string, options: Omit<ProxyPrimitiveOptions, "path">): ServerHandler;
|
|
220
220
|
protected getRawRequestBody(req: ServerRequest): ReadableStream | undefined;
|
|
@@ -229,7 +229,7 @@ declare class ServerProxyProvider {
|
|
|
229
229
|
*
|
|
230
230
|
* @module alepha.server.proxy
|
|
231
231
|
*/
|
|
232
|
-
declare const AlephaServerProxy: alepha.Service<alepha.Module>;
|
|
232
|
+
declare const AlephaServerProxy: _$alepha.Service<_$alepha.Module>;
|
|
233
233
|
//#endregion
|
|
234
234
|
export { $proxy, AlephaServerProxy, ProxyPrimitive, ProxyPrimitiveOptions, ServerProxyProvider };
|
|
235
235
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/server/proxy/primitives/$proxy.ts","../../../src/server/proxy/providers/ServerProxyProvider.ts","../../../src/server/proxy/index.ts"],"mappings":";;;;;;;;;;AAsFA;;;;;;;;;;;;;;;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmIA;;;;;;;;AClNA;;;;;;;;;;;;;;;;;;;;;;;cD2Ea,MAAA;EAAA,UAAmB,qBAAA,GAAwB,cAAA;EAAA;;KAI5C,qBAAA;ECpCC;;;;;;;;;;;;EDiDX,IAAA;EEnFW;;;;;;;;;;;;EFiGX,MAAA;;;;;;;;;;EAWA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;EAyBA,aAAA,IACE,OAAA,EAAS,aAAA,EACT,YAAA,EAAc,WAAA,KACX,KAAA;;;;;;;;;;;;;;;;;;;;;;;;EAyBL,aAAA,IACE,OAAA,EAAS,aAAA,EACT,aAAA,EAAe,QAAA,KACZ,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BL,OAAA,IAAW,GAAA,EAAK,GAAA;AAAA;AAAA,cAML,cAAA,SAAuB,SAAA,CAAU,qBAAA;;;cClNjC,mBAAA;EAAA,mBACQ,GAAA,EADW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/server/proxy/primitives/$proxy.ts","../../../src/server/proxy/providers/ServerProxyProvider.ts","../../../src/server/proxy/index.ts"],"mappings":";;;;;;;;;;AAsFA;;;;;;;;;;;;;;;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmIA;;;;;;;;AClNA;;;;;;;;;;;;;;;;;;;;;;;cD2Ea,MAAA;EAAA,UAAmB,qBAAA,GAAwB,cAAA;EAAA;;KAI5C,qBAAA;ECpCC;;;;;;;;;;;;EDiDX,IAAA;EEnFW;;;;;;;;;;;;EFiGX,MAAA;;;;;;;;;;EAWA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;EAyBA,aAAA,IACE,OAAA,EAAS,aAAA,EACT,YAAA,EAAc,WAAA,KACX,KAAA;;;;;;;;;;;;;;;;;;;;;;;;EAyBL,aAAA,IACE,OAAA,EAAS,aAAA,EACT,aAAA,EAAe,QAAA,KACZ,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BL,OAAA,IAAW,GAAA,EAAK,GAAA;AAAA;AAAA,cAML,cAAA,SAAuB,SAAA,CAAU,qBAAA;;;cClNjC,mBAAA;EAAA,mBACQ,GAAA,EADW,gBAAA,CACR,MAAA;EAAA,mBACH,cAAA,EAAc,oBAAA;EAAA,mBACd,MAAA,EAAM,MAAA;EAAA,mBAEN,SAAA,EAFM,QAAA,CAEG,aAAA;EASrB,WAAA,CAAY,OAAA,EAAS,qBAAA;EA2BrB,kBAAA,CACL,MAAA,UACA,OAAA,EAAS,IAAA,CAAK,qBAAA,YACb,aAAA;EAAA,UAkDO,iBAAA,CAAkB,GAAA,EAAK,aAAA,GAAgB,cAAA;AAAA;;;;;;;ADnBnD;;;;cElEa,iBAAA,EAAiB,QAAA,CAAA,OAAA,CAI5B,QAAA,CAJ4B,MAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import * as alepha from "alepha";
|
|
1
|
+
import * as _$alepha from "alepha";
|
|
2
2
|
import { Middleware, Static } from "alepha";
|
|
3
3
|
import { ServerRequest, ServerRouterProvider } from "alepha/server";
|
|
4
4
|
import { CacheProvider } from "alepha/cache";
|
|
5
5
|
import { DateTimeProvider } from "alepha/datetime";
|
|
6
|
-
import * as alepha_logger0 from "alepha/logger";
|
|
6
|
+
import * as _$alepha_logger0 from "alepha/logger";
|
|
7
7
|
|
|
8
8
|
//#region ../../src/server/rate-limit/primitives/$rateLimit.d.ts
|
|
9
9
|
interface RateLimitMiddlewareOptions extends RateLimitOptions {
|
|
@@ -48,11 +48,11 @@ interface RateLimitResult {
|
|
|
48
48
|
/**
|
|
49
49
|
* Rate limit configuration atom (global defaults)
|
|
50
50
|
*/
|
|
51
|
-
declare const rateLimitOptions: alepha.Atom<alepha.TObject<{
|
|
52
|
-
windowMs: alepha.TNumber;
|
|
53
|
-
max: alepha.TNumber;
|
|
54
|
-
skipFailedRequests: alepha.TOptional<alepha.TBoolean>;
|
|
55
|
-
skipSuccessfulRequests: alepha.TOptional<alepha.TBoolean>;
|
|
51
|
+
declare const rateLimitOptions: _$alepha.Atom<_$alepha.TObject<{
|
|
52
|
+
windowMs: _$alepha.TNumber;
|
|
53
|
+
max: _$alepha.TNumber;
|
|
54
|
+
skipFailedRequests: _$alepha.TOptional<_$alepha.TBoolean>;
|
|
55
|
+
skipSuccessfulRequests: _$alepha.TOptional<_$alepha.TBoolean>;
|
|
56
56
|
}>, "alepha.server.rate-limit.options">;
|
|
57
57
|
type RateLimitAtomOptions = Static<typeof rateLimitOptions.schema>;
|
|
58
58
|
declare module "alepha" {
|
|
@@ -71,7 +71,7 @@ interface RateLimitRegistration extends RateLimitOptions {
|
|
|
71
71
|
paths?: string[];
|
|
72
72
|
}
|
|
73
73
|
declare class ServerRateLimitProvider {
|
|
74
|
-
protected readonly log: alepha_logger0.Logger;
|
|
74
|
+
protected readonly log: _$alepha_logger0.Logger;
|
|
75
75
|
protected readonly dateTime: DateTimeProvider;
|
|
76
76
|
protected readonly serverRouterProvider: ServerRouterProvider;
|
|
77
77
|
protected readonly cacheProvider: CacheProvider;
|
|
@@ -90,9 +90,9 @@ declare class ServerRateLimitProvider {
|
|
|
90
90
|
* Register a rate limit configuration (called by primitives)
|
|
91
91
|
*/
|
|
92
92
|
registerRateLimit(config: RateLimitRegistration): void;
|
|
93
|
-
protected readonly onStart: alepha.HookPrimitive<"start">;
|
|
94
|
-
readonly onRequest: alepha.HookPrimitive<"server:onRequest">;
|
|
95
|
-
readonly onActionRequest: alepha.HookPrimitive<"action:onRequest">;
|
|
93
|
+
protected readonly onStart: _$alepha.HookPrimitive<"start">;
|
|
94
|
+
readonly onRequest: _$alepha.HookPrimitive<"server:onRequest">;
|
|
95
|
+
readonly onActionRequest: _$alepha.HookPrimitive<"action:onRequest">;
|
|
96
96
|
/**
|
|
97
97
|
* Build complete rate limit options by merging with global defaults
|
|
98
98
|
*/
|
|
@@ -157,7 +157,7 @@ interface RateLimitOptions {
|
|
|
157
157
|
*
|
|
158
158
|
* @module alepha.server.rate-limit
|
|
159
159
|
*/
|
|
160
|
-
declare const AlephaServerRateLimit: alepha.Service<alepha.Module>;
|
|
160
|
+
declare const AlephaServerRateLimit: _$alepha.Service<_$alepha.Module>;
|
|
161
161
|
//#endregion
|
|
162
162
|
export { $rateLimit, AlephaServerRateLimit, RateLimitAtomOptions, RateLimitMiddlewareOptions, RateLimitOptions, RateLimitRegistration, RateLimitResult, ServerRateLimitProvider, rateLimitOptions };
|
|
163
163
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/server/rate-limit/primitives/$rateLimit.ts","../../../src/server/rate-limit/providers/ServerRateLimitProvider.ts","../../../src/server/rate-limit/index.ts"],"mappings":";;;;;;;;UAKiB,0BAAA,SAAmC,gBAAA;;;;;EAKlD,GAAA,OAAU,IAAA;AAAA;;;;;;;;;AAyBZ;;;;;;;;;;;;ACtBA;;cDsBa,UAAA,GACX,OAAA,GAAU,0BAAA,KACT,UAAA;;;UCxBc,eAAA;EACf,OAAA;EACA,KAAA;EACA,SAAA;EACA,SAAA;EACA,UAAA;AAAA;;;;cAMW,gBAAA,EAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/server/rate-limit/primitives/$rateLimit.ts","../../../src/server/rate-limit/providers/ServerRateLimitProvider.ts","../../../src/server/rate-limit/index.ts"],"mappings":";;;;;;;;UAKiB,0BAAA,SAAmC,gBAAA;;;;;EAKlD,GAAA,OAAU,IAAA;AAAA;;;;;;;;;AAyBZ;;;;;;;;;;;;ACtBA;;cDsBa,UAAA,GACX,OAAA,GAAU,0BAAA,KACT,UAAA;;;UCxBc,eAAA;EACf,OAAA;EACA,KAAA;EACA,SAAA;EACA,SAAA;EACA,UAAA;AAAA;;;;cAMW,gBAAA,EAAgB,QAAA,CAAA,IAAA,UAAA,OAAA;YA0B3B,QAAA,CAAA,OAAA;;;;;KAEU,oBAAA,GAAuB,MAAA,QAAc,gBAAA,CAAiB,MAAA;AAAA;EAAA,UAGtD,KAAA;IAAA,CACP,gBAAA,CAAiB,GAAA,GAAM,oBAAA;EAAA;AAAA;AAAA,UAIX,qBAAA,SAA8B,gBAAA;;AA/C/C;;EAmDE,IAAA;EAnD8B;;;EAuD9B,KAAA;AAAA;AAAA,cAGW,uBAAA;EAAA,mBACQ,GAAA,EADe,gBAAA,CACZ,MAAA;EAAA,mBACH,QAAA,EAAQ,gBAAA;EAAA,mBACR,oBAAA,EAAoB,oBAAA;EAAA,mBACpB,aAAA,EAAa,aAAA;EAAA,mBACb,aAAA,EAAa,QAAA;;;;;;4BAEN,UAAA;;;;WAKV,iBAAA,EAAmB,qBAAA;EA3DR;;;EAgEpB,iBAAA,CAAkB,MAAA,EAAQ,qBAAA;EAAA,mBAId,OAAA,EAJmC,QAAA,CAI5B,aAAA;EAAA,SAuBV,SAAA,EAvBU,QAAA,CAuBD,aAAA;EAAA,SAuBT,eAAA,EAvBS,QAAA,CAuBM,aAAA;;;;YA2BrB,qBAAA,CACR,MAAA,EAAQ,qBAAA,GACP,gBAAA;;;;EAgBI,mBAAA,CACL,OAAA,EAAS,aAAA,EACT,MAAA,EAAQ,eAAA;EAiBG,UAAA,CACX,GAAA,EAAK,IAAA,CAAK,aAAA,SACV,OAAA,GAAS,gBAAA,GACR,OAAA,CAAQ,eAAA;;;;;EASE,eAAA,CACX,OAAA,UACA,OAAA,GAAS,gBAAA,GACR,OAAA,CAAQ,eAAA;EAAA,UAoCD,WAAA,CAAY,GAAA,EAAK,IAAA,CAAK,aAAA;AAAA;;;;YCjPtB,sBAAA;;;;;IAKR,SAAA,GAAY,gBAAA;EAAA;EAAA,UAGJ,WAAA;IFfwD;;;;IEoBhE,SAAA,GAAY,gBAAA;EAAA;AAAA;AAAA,UAMC,gBAAA;;;;EAIf,GAAA;EFEC;;;EEED,QAAA;;;AD1BF;EC8BE,YAAA,IAAgB,GAAA;;;;EAIhB,kBAAA;ED/BA;;;ECmCA,sBAAA;AAAA;AD3BF;;;;;;;;AAAA,cCsCa,qBAAA,EAAqB,QAAA,CAAA,OAAA,CAGhC,QAAA,CAHgC,MAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $atom, $hook, $inject, $module, $
|
|
1
|
+
import { $atom, $hook, $inject, $module, $state, createMiddleware, t } from "alepha";
|
|
2
2
|
import { AlephaServer, HttpError, ServerRouterProvider } from "alepha/server";
|
|
3
3
|
import { CacheProvider } from "alepha/cache";
|
|
4
4
|
import { DateTimeProvider } from "alepha/datetime";
|
|
@@ -31,7 +31,7 @@ var ServerRateLimitProvider = class ServerRateLimitProvider {
|
|
|
31
31
|
dateTime = $inject(DateTimeProvider);
|
|
32
32
|
serverRouterProvider = $inject(ServerRouterProvider);
|
|
33
33
|
cacheProvider = $inject(CacheProvider);
|
|
34
|
-
globalOptions = $
|
|
34
|
+
globalOptions = $state(rateLimitOptions);
|
|
35
35
|
static CACHE_NAME = "rate-limit";
|
|
36
36
|
/**
|
|
37
37
|
* Registered rate limit configurations with their path patterns
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/server/rate-limit/providers/ServerRateLimitProvider.ts","../../../src/server/rate-limit/primitives/$rateLimit.ts","../../../src/server/rate-limit/index.ts"],"sourcesContent":["import { $atom, $hook, $inject, $use, type Static, t } from \"alepha\";\nimport { CacheProvider } from \"alepha/cache\";\nimport { DateTimeProvider } from \"alepha/datetime\";\nimport { $logger } from \"alepha/logger\";\nimport {\n HttpError,\n type ServerRequest,\n ServerRouterProvider,\n} from \"alepha/server\";\nimport type { RateLimitOptions } from \"../index.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport interface RateLimitResult {\n allowed: boolean;\n limit: number;\n remaining: number;\n resetTime: number;\n retryAfter?: number;\n}\n\n/**\n * Rate limit configuration atom (global defaults)\n */\nexport const rateLimitOptions = $atom({\n name: \"alepha.server.rate-limit.options\",\n schema: t.object({\n windowMs: t.number({\n default: 15 * 60 * 1000,\n description: \"Window duration in milliseconds\",\n }),\n max: t.number({\n default: 100,\n description: \"Maximum number of requests per window\",\n }),\n skipFailedRequests: t.optional(\n t.boolean({\n description: \"Skip rate limiting for failed requests\",\n }),\n ),\n skipSuccessfulRequests: t.optional(\n t.boolean({\n description: \"Skip rate limiting for successful requests\",\n }),\n ),\n }),\n default: {\n windowMs: 15 * 60 * 1000,\n max: 100,\n },\n});\n\nexport type RateLimitAtomOptions = Static<typeof rateLimitOptions.schema>;\n\ndeclare module \"alepha\" {\n interface State {\n [rateLimitOptions.key]: RateLimitAtomOptions;\n }\n}\n\nexport interface RateLimitRegistration extends RateLimitOptions {\n /**\n * Name identifier for this rate limit.\n */\n name?: string;\n /**\n * Path patterns to match (supports wildcards like /api/*).\n */\n paths?: string[];\n}\n\nexport class ServerRateLimitProvider {\n protected readonly log = $logger();\n protected readonly dateTime = $inject(DateTimeProvider);\n protected readonly serverRouterProvider = $inject(ServerRouterProvider);\n protected readonly cacheProvider = $inject(CacheProvider);\n protected readonly globalOptions = $use(rateLimitOptions);\n\n protected static readonly CACHE_NAME = \"rate-limit\";\n\n /**\n * Registered rate limit configurations with their path patterns\n */\n public readonly registeredConfigs: RateLimitRegistration[] = [];\n\n /**\n * Register a rate limit configuration (called by primitives)\n */\n public registerRateLimit(config: RateLimitRegistration): void {\n this.registeredConfigs.push(config);\n }\n\n protected readonly onStart = $hook({\n on: \"start\",\n handler: async () => {\n // Apply path-specific rate limit configs to routes\n for (const config of this.registeredConfigs) {\n if (config.paths) {\n for (const pattern of config.paths) {\n const matchedRoutes = this.serverRouterProvider.getRoutes(pattern);\n for (const route of matchedRoutes) {\n route.rateLimit = this.buildRateLimitOptions(config);\n }\n }\n }\n }\n\n if (this.registeredConfigs.length > 0) {\n this.log.info(\n `Initialized with ${this.registeredConfigs.length} registered rate-limit configurations.`,\n );\n }\n },\n });\n\n public readonly onRequest = $hook({\n on: \"server:onRequest\",\n handler: async ({ route, request }) => {\n // Use route-specific rate limit if defined, otherwise use global options\n const rateLimitConfig = route.rateLimit ?? this.globalOptions;\n\n // Skip if no rate limiting configured\n if (!rateLimitConfig.max && !rateLimitConfig.windowMs) {\n return;\n }\n\n const result = await this.checkLimit(request, rateLimitConfig);\n this.setRateLimitHeaders(request, result);\n\n if (!result.allowed) {\n throw new HttpError({\n status: 429,\n message: \"Too Many Requests\",\n });\n }\n },\n });\n\n public readonly onActionRequest = $hook({\n on: \"action:onRequest\",\n handler: async ({ action, request }) => {\n // Check if this action has rate limiting enabled\n const rateLimit = action.options?.rateLimit;\n if (!rateLimit) {\n return; // No rate limiting for this action\n }\n\n const result = await this.checkLimit(request, rateLimit);\n\n if (!result.allowed) {\n // Actions are internal - don't set HTTP headers\n // Only throw error to prevent action execution\n throw new HttpError({\n status: 429,\n message: \"Too Many Requests\",\n });\n }\n\n // Action allowed - no headers to set since actions are internal\n },\n });\n\n /**\n * Build complete rate limit options by merging with global defaults\n */\n protected buildRateLimitOptions(\n config: RateLimitRegistration,\n ): RateLimitOptions {\n return {\n max: config.max ?? this.globalOptions.max,\n windowMs: config.windowMs ?? this.globalOptions.windowMs,\n keyGenerator: config.keyGenerator,\n skipFailedRequests:\n config.skipFailedRequests ?? this.globalOptions.skipFailedRequests,\n skipSuccessfulRequests:\n config.skipSuccessfulRequests ??\n this.globalOptions.skipSuccessfulRequests,\n };\n }\n\n /**\n * Set rate limit headers on the response\n */\n public setRateLimitHeaders(\n request: ServerRequest,\n result: RateLimitResult,\n ): void {\n request.reply.setHeader(\"X-RateLimit-Limit\", result.limit.toString());\n request.reply.setHeader(\n \"X-RateLimit-Remaining\",\n result.remaining.toString(),\n );\n request.reply.setHeader(\n \"X-RateLimit-Reset\",\n Math.ceil(result.resetTime / 1000).toString(),\n );\n\n if (!result.allowed && result.retryAfter) {\n request.reply.setHeader(\"Retry-After\", result.retryAfter.toString());\n }\n }\n\n public async checkLimit(\n req: Pick<ServerRequest, \"ip\">,\n options: RateLimitOptions = {},\n ): Promise<RateLimitResult> {\n const baseKey = this.generateKey(req);\n return this.checkLimitByKey(baseKey, options);\n }\n\n /**\n * Check rate limit by an explicit key string.\n * Useful when no request context is available (e.g. `$job`, `$pipeline`).\n */\n public async checkLimitByKey(\n baseKey: string,\n options: RateLimitOptions = {},\n ): Promise<RateLimitResult> {\n const windowMs = options.windowMs ?? this.globalOptions.windowMs;\n const max = options.max ?? this.globalOptions.max;\n\n const now = this.dateTime.nowMillis();\n // Fixed window: round down to nearest window boundary\n const windowStart = Math.floor(now / windowMs) * windowMs;\n const resetTime = windowStart + windowMs;\n\n // Include window timestamp in key for automatic expiration of old windows\n const key = `${baseKey}:${windowStart}`;\n\n // Atomic increment - returns the new count after incrementing\n const count = await this.cacheProvider.incr(\n ServerRateLimitProvider.CACHE_NAME,\n key,\n 1,\n );\n\n const allowed = count <= max;\n const remaining = Math.max(0, max - count);\n\n const result: RateLimitResult = {\n allowed,\n limit: max,\n remaining,\n resetTime,\n };\n\n if (!allowed) {\n result.retryAfter = Math.ceil((resetTime - now) / 1000);\n }\n\n return result;\n }\n\n protected generateKey(req: Pick<ServerRequest, \"ip\">): string {\n // Use req.ip which is resolved by ServerRequestParser with proper trust proxy handling\n return `ip:${req.ip || \"unknown\"}`;\n }\n}\n","import { createMiddleware, type Middleware } from \"alepha\";\nimport { HttpError } from \"alepha/server\";\nimport type { RateLimitOptions } from \"../index.ts\";\nimport { ServerRateLimitProvider } from \"../providers/ServerRateLimitProvider.ts\";\n\nexport interface RateLimitMiddlewareOptions extends RateLimitOptions {\n /**\n * Custom key function. Receives the handler arguments.\n * When provided, bypasses request-based key generation — works outside `$action`.\n */\n key?: (...args: any[]) => string;\n}\n\n/**\n * Middleware that enforces rate limiting.\n *\n * **Key resolution** (in order):\n * 1. Explicit `key` function — user controls the key. Works anywhere (`$action`, `$job`, `$pipeline`).\n * 2. Auto-detect `request.ip` from ALS — default for `$action` context.\n * 3. `\"global\"` fallback — when no request context and no `key`. All calls share one bucket.\n *\n * Sets `X-RateLimit-*` response headers when a request context is available.\n * Throws `HttpError(429)` when the limit is exceeded.\n *\n * ```typescript\n * // In $action: automatically rate limits by IP\n * $action({ use: [$rateLimit({ max: 100, windowMs: 60000 })] })\n *\n * // In $action: rate limit by custom key\n * $action({ use: [$rateLimit({ max: 10, windowMs: 60000, key: (req) => req.user?.id })] })\n *\n * // In $job: rate limit all executions globally\n * $job({ use: [$rateLimit({ max: 5, windowMs: 3600000 })] })\n * ```\n */\nexport const $rateLimit = (\n options?: RateLimitMiddlewareOptions,\n): Middleware => {\n return createMiddleware({\n name: \"$rateLimit\",\n options: options as unknown as Record<string, unknown>,\n handler: ({ alepha, next }) => {\n const rateLimitProvider = alepha.inject(ServerRateLimitProvider);\n\n return async (...args) => {\n const request = alepha.get(\"alepha.http.request\");\n\n const result = options?.key\n ? await rateLimitProvider.checkLimitByKey(\n options.key(...args),\n options,\n )\n : await rateLimitProvider.checkLimit(\n request ?? { ip: \"global\" },\n options,\n );\n\n if (request) {\n rateLimitProvider.setRateLimitHeaders(request, result);\n }\n\n if (!result.allowed) {\n throw new HttpError({\n status: 429,\n message: \"Too Many Requests\",\n });\n }\n\n return next(...args);\n };\n },\n });\n};\n","import { $module } from \"alepha\";\nimport { AlephaServer } from \"alepha/server\";\nimport { ServerRateLimitProvider } from \"./providers/ServerRateLimitProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./primitives/$rateLimit.ts\";\nexport * from \"./providers/ServerRateLimitProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\ndeclare module \"alepha/server\" {\n interface ActionPrimitiveOptions<TConfig> {\n /**\n * Rate limiting configuration for this action.\n * When specified, the action will be rate limited according to these settings.\n */\n rateLimit?: RateLimitOptions;\n }\n\n interface ServerRoute {\n /**\n * Route-specific rate limit configuration.\n * If set, overrides the global rate limit options for this route.\n */\n rateLimit?: RateLimitOptions;\n }\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport interface RateLimitOptions {\n /**\n * Maximum number of requests per window (default: 100).\n */\n max?: number;\n /**\n * Window duration in milliseconds (default: 15 minutes).\n */\n windowMs?: number;\n /**\n * Custom key generator function.\n */\n keyGenerator?: (req: any) => string;\n /**\n * Skip rate limiting for failed requests.\n */\n skipFailedRequests?: boolean;\n /**\n * Skip rate limiting for successful requests.\n */\n skipSuccessfulRequests?: boolean;\n}\n\n/**\n * Request rate limiting on actions.\n *\n * **Features:**\n * - Rate limit configuration per action\n *\n * @module alepha.server.rate-limit\n */\nexport const AlephaServerRateLimit = $module({\n name: \"alepha.server.rate-limit\",\n services: [AlephaServer, ServerRateLimitProvider],\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/server/rate-limit/providers/ServerRateLimitProvider.ts","../../../src/server/rate-limit/primitives/$rateLimit.ts","../../../src/server/rate-limit/index.ts"],"sourcesContent":["import { $atom, $hook, $inject, $state, type Static, t } from \"alepha\";\nimport { CacheProvider } from \"alepha/cache\";\nimport { DateTimeProvider } from \"alepha/datetime\";\nimport { $logger } from \"alepha/logger\";\nimport {\n HttpError,\n type ServerRequest,\n ServerRouterProvider,\n} from \"alepha/server\";\nimport type { RateLimitOptions } from \"../index.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport interface RateLimitResult {\n allowed: boolean;\n limit: number;\n remaining: number;\n resetTime: number;\n retryAfter?: number;\n}\n\n/**\n * Rate limit configuration atom (global defaults)\n */\nexport const rateLimitOptions = $atom({\n name: \"alepha.server.rate-limit.options\",\n schema: t.object({\n windowMs: t.number({\n default: 15 * 60 * 1000,\n description: \"Window duration in milliseconds\",\n }),\n max: t.number({\n default: 100,\n description: \"Maximum number of requests per window\",\n }),\n skipFailedRequests: t.optional(\n t.boolean({\n description: \"Skip rate limiting for failed requests\",\n }),\n ),\n skipSuccessfulRequests: t.optional(\n t.boolean({\n description: \"Skip rate limiting for successful requests\",\n }),\n ),\n }),\n default: {\n windowMs: 15 * 60 * 1000,\n max: 100,\n },\n});\n\nexport type RateLimitAtomOptions = Static<typeof rateLimitOptions.schema>;\n\ndeclare module \"alepha\" {\n interface State {\n [rateLimitOptions.key]: RateLimitAtomOptions;\n }\n}\n\nexport interface RateLimitRegistration extends RateLimitOptions {\n /**\n * Name identifier for this rate limit.\n */\n name?: string;\n /**\n * Path patterns to match (supports wildcards like /api/*).\n */\n paths?: string[];\n}\n\nexport class ServerRateLimitProvider {\n protected readonly log = $logger();\n protected readonly dateTime = $inject(DateTimeProvider);\n protected readonly serverRouterProvider = $inject(ServerRouterProvider);\n protected readonly cacheProvider = $inject(CacheProvider);\n protected readonly globalOptions = $state(rateLimitOptions);\n\n protected static readonly CACHE_NAME = \"rate-limit\";\n\n /**\n * Registered rate limit configurations with their path patterns\n */\n public readonly registeredConfigs: RateLimitRegistration[] = [];\n\n /**\n * Register a rate limit configuration (called by primitives)\n */\n public registerRateLimit(config: RateLimitRegistration): void {\n this.registeredConfigs.push(config);\n }\n\n protected readonly onStart = $hook({\n on: \"start\",\n handler: async () => {\n // Apply path-specific rate limit configs to routes\n for (const config of this.registeredConfigs) {\n if (config.paths) {\n for (const pattern of config.paths) {\n const matchedRoutes = this.serverRouterProvider.getRoutes(pattern);\n for (const route of matchedRoutes) {\n route.rateLimit = this.buildRateLimitOptions(config);\n }\n }\n }\n }\n\n if (this.registeredConfigs.length > 0) {\n this.log.info(\n `Initialized with ${this.registeredConfigs.length} registered rate-limit configurations.`,\n );\n }\n },\n });\n\n public readonly onRequest = $hook({\n on: \"server:onRequest\",\n handler: async ({ route, request }) => {\n // Use route-specific rate limit if defined, otherwise use global options\n const rateLimitConfig = route.rateLimit ?? this.globalOptions;\n\n // Skip if no rate limiting configured\n if (!rateLimitConfig.max && !rateLimitConfig.windowMs) {\n return;\n }\n\n const result = await this.checkLimit(request, rateLimitConfig);\n this.setRateLimitHeaders(request, result);\n\n if (!result.allowed) {\n throw new HttpError({\n status: 429,\n message: \"Too Many Requests\",\n });\n }\n },\n });\n\n public readonly onActionRequest = $hook({\n on: \"action:onRequest\",\n handler: async ({ action, request }) => {\n // Check if this action has rate limiting enabled\n const rateLimit = action.options?.rateLimit;\n if (!rateLimit) {\n return; // No rate limiting for this action\n }\n\n const result = await this.checkLimit(request, rateLimit);\n\n if (!result.allowed) {\n // Actions are internal - don't set HTTP headers\n // Only throw error to prevent action execution\n throw new HttpError({\n status: 429,\n message: \"Too Many Requests\",\n });\n }\n\n // Action allowed - no headers to set since actions are internal\n },\n });\n\n /**\n * Build complete rate limit options by merging with global defaults\n */\n protected buildRateLimitOptions(\n config: RateLimitRegistration,\n ): RateLimitOptions {\n return {\n max: config.max ?? this.globalOptions.max,\n windowMs: config.windowMs ?? this.globalOptions.windowMs,\n keyGenerator: config.keyGenerator,\n skipFailedRequests:\n config.skipFailedRequests ?? this.globalOptions.skipFailedRequests,\n skipSuccessfulRequests:\n config.skipSuccessfulRequests ??\n this.globalOptions.skipSuccessfulRequests,\n };\n }\n\n /**\n * Set rate limit headers on the response\n */\n public setRateLimitHeaders(\n request: ServerRequest,\n result: RateLimitResult,\n ): void {\n request.reply.setHeader(\"X-RateLimit-Limit\", result.limit.toString());\n request.reply.setHeader(\n \"X-RateLimit-Remaining\",\n result.remaining.toString(),\n );\n request.reply.setHeader(\n \"X-RateLimit-Reset\",\n Math.ceil(result.resetTime / 1000).toString(),\n );\n\n if (!result.allowed && result.retryAfter) {\n request.reply.setHeader(\"Retry-After\", result.retryAfter.toString());\n }\n }\n\n public async checkLimit(\n req: Pick<ServerRequest, \"ip\">,\n options: RateLimitOptions = {},\n ): Promise<RateLimitResult> {\n const baseKey = this.generateKey(req);\n return this.checkLimitByKey(baseKey, options);\n }\n\n /**\n * Check rate limit by an explicit key string.\n * Useful when no request context is available (e.g. `$job`, `$pipeline`).\n */\n public async checkLimitByKey(\n baseKey: string,\n options: RateLimitOptions = {},\n ): Promise<RateLimitResult> {\n const windowMs = options.windowMs ?? this.globalOptions.windowMs;\n const max = options.max ?? this.globalOptions.max;\n\n const now = this.dateTime.nowMillis();\n // Fixed window: round down to nearest window boundary\n const windowStart = Math.floor(now / windowMs) * windowMs;\n const resetTime = windowStart + windowMs;\n\n // Include window timestamp in key for automatic expiration of old windows\n const key = `${baseKey}:${windowStart}`;\n\n // Atomic increment - returns the new count after incrementing\n const count = await this.cacheProvider.incr(\n ServerRateLimitProvider.CACHE_NAME,\n key,\n 1,\n );\n\n const allowed = count <= max;\n const remaining = Math.max(0, max - count);\n\n const result: RateLimitResult = {\n allowed,\n limit: max,\n remaining,\n resetTime,\n };\n\n if (!allowed) {\n result.retryAfter = Math.ceil((resetTime - now) / 1000);\n }\n\n return result;\n }\n\n protected generateKey(req: Pick<ServerRequest, \"ip\">): string {\n // Use req.ip which is resolved by ServerRequestParser with proper trust proxy handling\n return `ip:${req.ip || \"unknown\"}`;\n }\n}\n","import { createMiddleware, type Middleware } from \"alepha\";\nimport { HttpError } from \"alepha/server\";\nimport type { RateLimitOptions } from \"../index.ts\";\nimport { ServerRateLimitProvider } from \"../providers/ServerRateLimitProvider.ts\";\n\nexport interface RateLimitMiddlewareOptions extends RateLimitOptions {\n /**\n * Custom key function. Receives the handler arguments.\n * When provided, bypasses request-based key generation — works outside `$action`.\n */\n key?: (...args: any[]) => string;\n}\n\n/**\n * Middleware that enforces rate limiting.\n *\n * **Key resolution** (in order):\n * 1. Explicit `key` function — user controls the key. Works anywhere (`$action`, `$job`, `$pipeline`).\n * 2. Auto-detect `request.ip` from ALS — default for `$action` context.\n * 3. `\"global\"` fallback — when no request context and no `key`. All calls share one bucket.\n *\n * Sets `X-RateLimit-*` response headers when a request context is available.\n * Throws `HttpError(429)` when the limit is exceeded.\n *\n * ```typescript\n * // In $action: automatically rate limits by IP\n * $action({ use: [$rateLimit({ max: 100, windowMs: 60000 })] })\n *\n * // In $action: rate limit by custom key\n * $action({ use: [$rateLimit({ max: 10, windowMs: 60000, key: (req) => req.user?.id })] })\n *\n * // In $job: rate limit all executions globally\n * $job({ use: [$rateLimit({ max: 5, windowMs: 3600000 })] })\n * ```\n */\nexport const $rateLimit = (\n options?: RateLimitMiddlewareOptions,\n): Middleware => {\n return createMiddleware({\n name: \"$rateLimit\",\n options: options as unknown as Record<string, unknown>,\n handler: ({ alepha, next }) => {\n const rateLimitProvider = alepha.inject(ServerRateLimitProvider);\n\n return async (...args) => {\n const request = alepha.get(\"alepha.http.request\");\n\n const result = options?.key\n ? await rateLimitProvider.checkLimitByKey(\n options.key(...args),\n options,\n )\n : await rateLimitProvider.checkLimit(\n request ?? { ip: \"global\" },\n options,\n );\n\n if (request) {\n rateLimitProvider.setRateLimitHeaders(request, result);\n }\n\n if (!result.allowed) {\n throw new HttpError({\n status: 429,\n message: \"Too Many Requests\",\n });\n }\n\n return next(...args);\n };\n },\n });\n};\n","import { $module } from \"alepha\";\nimport { AlephaServer } from \"alepha/server\";\nimport { ServerRateLimitProvider } from \"./providers/ServerRateLimitProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./primitives/$rateLimit.ts\";\nexport * from \"./providers/ServerRateLimitProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\ndeclare module \"alepha/server\" {\n interface ActionPrimitiveOptions<TConfig> {\n /**\n * Rate limiting configuration for this action.\n * When specified, the action will be rate limited according to these settings.\n */\n rateLimit?: RateLimitOptions;\n }\n\n interface ServerRoute {\n /**\n * Route-specific rate limit configuration.\n * If set, overrides the global rate limit options for this route.\n */\n rateLimit?: RateLimitOptions;\n }\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport interface RateLimitOptions {\n /**\n * Maximum number of requests per window (default: 100).\n */\n max?: number;\n /**\n * Window duration in milliseconds (default: 15 minutes).\n */\n windowMs?: number;\n /**\n * Custom key generator function.\n */\n keyGenerator?: (req: any) => string;\n /**\n * Skip rate limiting for failed requests.\n */\n skipFailedRequests?: boolean;\n /**\n * Skip rate limiting for successful requests.\n */\n skipSuccessfulRequests?: boolean;\n}\n\n/**\n * Request rate limiting on actions.\n *\n * **Features:**\n * - Rate limit configuration per action\n *\n * @module alepha.server.rate-limit\n */\nexport const AlephaServerRateLimit = $module({\n name: \"alepha.server.rate-limit\",\n services: [AlephaServer, ServerRateLimitProvider],\n});\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as alepha from "alepha";
|
|
1
|
+
import * as _$alepha from "alepha";
|
|
2
2
|
import { Alepha, KIND, Primitive } from "alepha";
|
|
3
3
|
import { ServerHandler, ServerRouterProvider } from "alepha/server";
|
|
4
4
|
import { DateTimeProvider, DurationLike } from "alepha/datetime";
|
|
5
|
-
import * as alepha_logger0 from "alepha/logger";
|
|
5
|
+
import * as _$alepha_logger0 from "alepha/logger";
|
|
6
6
|
import { FileDetector } from "alepha/system";
|
|
7
7
|
|
|
8
8
|
//#region ../../src/server/static/primitives/$serve.d.ts
|
|
@@ -97,9 +97,9 @@ declare class ServerStaticProvider {
|
|
|
97
97
|
protected readonly routerProvider: ServerRouterProvider;
|
|
98
98
|
protected readonly dateTimeProvider: DateTimeProvider;
|
|
99
99
|
protected readonly fileDetector: FileDetector;
|
|
100
|
-
protected readonly log: alepha_logger0.Logger;
|
|
100
|
+
protected readonly log: _$alepha_logger0.Logger;
|
|
101
101
|
protected readonly directories: ServeDirectory[];
|
|
102
|
-
protected readonly configure: alepha.HookPrimitive<"configure">;
|
|
102
|
+
protected readonly configure: _$alepha.HookPrimitive<"configure">;
|
|
103
103
|
createStaticServer(options: ServePrimitiveOptions): Promise<void>;
|
|
104
104
|
createFileHandler(filepath: string, options: ServePrimitiveOptions): Promise<ServerHandler>;
|
|
105
105
|
protected getCacheFileTypes(): string[];
|
|
@@ -123,7 +123,7 @@ interface ServeDirectory {
|
|
|
123
123
|
*
|
|
124
124
|
* @module alepha.server.static
|
|
125
125
|
*/
|
|
126
|
-
declare const AlephaServerStatic: alepha.Service<alepha.Module>;
|
|
126
|
+
declare const AlephaServerStatic: _$alepha.Service<_$alepha.Module>;
|
|
127
127
|
//#endregion
|
|
128
128
|
export { $serve, AlephaServerStatic, CacheControlOptions, ServeDirectory, ServePrimitive, ServePrimitiveOptions, ServerStaticProvider };
|
|
129
129
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/server/static/primitives/$serve.ts","../../../src/server/static/providers/ServerStaticProvider.ts","../../../src/server/static/index.ts"],"mappings":";;;;;;;;;;;cAMa,MAAA;EAAA,WAAmB,qBAAA,GAA6B,cAAA;EAAA;;UAI5C,qBAAA;;;;;;EAMf,IAAA;;;;;;EAOA,IAAA;;;AAbF;;;EAoBE,QAAA;EAdA;;;;;EAqBA,iBAAA;EAqBA;;;;;EAdA,aAAA;EA4BM;AAGR;;;EAzBE,kBAAA;EA+BA;;;;;;EAvBA,IAAA;EAwC0B;;;;;EAjC1B,YAAA,GAAe,OAAA,CAAQ,mBAAA;;ACtDzB;;;;ED6DE,MAAA;AAAA;AAAA,UAGe,mBAAA;EC5DgB;;;;;EDkE/B,SAAA;EC0CW;;;;;EDnCX,MAAA,EAAQ,YAAA;EC5EW;;;;;EDmFnB,SAAA;AAAA;AAAA,cAGW,cAAA,SAAuB,SAAA,CAAU,qBAAA;;;cCvFjC,oBAAA;EAAA,mBACQ,MAAA,EAAM,MAAA;EAAA,mBACN,cAAA,EAAc,oBAAA;EAAA,mBACd,gBAAA,EAAgB,gBAAA;EAAA,mBAChB,YAAA,EAAY,YAAA;EAAA,mBACZ,GAAA,EADY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/server/static/primitives/$serve.ts","../../../src/server/static/providers/ServerStaticProvider.ts","../../../src/server/static/index.ts"],"mappings":";;;;;;;;;;;cAMa,MAAA;EAAA,WAAmB,qBAAA,GAA6B,cAAA;EAAA;;UAI5C,qBAAA;;;;;;EAMf,IAAA;;;;;;EAOA,IAAA;;;AAbF;;;EAoBE,QAAA;EAdA;;;;;EAqBA,iBAAA;EAqBA;;;;;EAdA,aAAA;EA4BM;AAGR;;;EAzBE,kBAAA;EA+BA;;;;;;EAvBA,IAAA;EAwC0B;;;;;EAjC1B,YAAA,GAAe,OAAA,CAAQ,mBAAA;;ACtDzB;;;;ED6DE,MAAA;AAAA;AAAA,UAGe,mBAAA;EC5DgB;;;;;EDkE/B,SAAA;EC0CW;;;;;EDnCX,MAAA,EAAQ,YAAA;EC5EW;;;;;EDmFnB,SAAA;AAAA;AAAA,cAGW,cAAA,SAAuB,SAAA,CAAU,qBAAA;;;cCvFjC,oBAAA;EAAA,mBACQ,MAAA,EAAM,MAAA;EAAA,mBACN,cAAA,EAAc,oBAAA;EAAA,mBACd,gBAAA,EAAgB,gBAAA;EAAA,mBAChB,YAAA,EAAY,YAAA;EAAA,mBACZ,GAAA,EADY,gBAAA,CACT,MAAA;EAAA,mBACH,WAAA,EAAa,cAAA;EAAA,mBAEb,SAAA,EAF2B,QAAA,CAElB,aAAA;EAWf,kBAAA,CACX,OAAA,EAAS,qBAAA,GACR,OAAA;EAwFU,iBAAA,CACX,QAAA,UACA,OAAA,EAAS,qBAAA,GACR,OAAA,CAAQ,aAAA;EAAA,UA2ED,iBAAA,CAAA;EAAA,UAiBA,eAAA,CACR,QAAA,UACA,OAAA,EAAS,qBAAA;IACN,MAAA;IAAgB,SAAA;EAAA;EAoBR,WAAA,CACX,GAAA,UACA,iBAAA,aACC,OAAA;AAAA;AAAA,UAmBY,cAAA;EACf,OAAA,EAAS,qBAAA;EACT,KAAA;AAAA;;;;;;;;;ADhQF;;cEca,kBAAA,EAAkB,QAAA,CAAA,OAAA,CAI7B,QAAA,CAJ6B,MAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as alepha from "alepha";
|
|
1
|
+
import * as _$alepha from "alepha";
|
|
2
2
|
import { Alepha, KIND, Primitive, Static, TObject } from "alepha";
|
|
3
3
|
import { ActionPrimitive, RequestConfigSchema, ServerProvider, ServerRouterProvider } from "alepha/server";
|
|
4
4
|
import { ServerStaticProvider } from "alepha/server/static";
|
|
5
|
-
import * as alepha_logger0 from "alepha/logger";
|
|
5
|
+
import * as _$alepha_logger0 from "alepha/logger";
|
|
6
6
|
import { FileSystemProvider } from "alepha/system";
|
|
7
7
|
|
|
8
8
|
//#region ../../src/server/swagger/primitives/$swagger.d.ts
|
|
@@ -175,8 +175,8 @@ interface OpenApiOperation {
|
|
|
175
175
|
/**
|
|
176
176
|
* Swagger provider configuration atom
|
|
177
177
|
*/
|
|
178
|
-
declare const swaggerOptions: alepha.Atom<TObject<{
|
|
179
|
-
excludeKeys: alepha.TOptional<alepha.TArray<alepha.TString>>;
|
|
178
|
+
declare const swaggerOptions: _$alepha.Atom<TObject<{
|
|
179
|
+
excludeKeys: _$alepha.TOptional<_$alepha.TArray<_$alepha.TString>>;
|
|
180
180
|
}>, "alepha.server.swagger.options">;
|
|
181
181
|
type ServerSwaggerProviderOptions = Static<typeof swaggerOptions.schema>;
|
|
182
182
|
declare module "alepha" {
|
|
@@ -189,13 +189,13 @@ declare class ServerSwaggerProvider {
|
|
|
189
189
|
protected readonly serverRouterProvider: ServerRouterProvider;
|
|
190
190
|
protected readonly serverProvider: ServerProvider;
|
|
191
191
|
protected readonly alepha: Alepha;
|
|
192
|
-
protected readonly log: alepha_logger0.Logger;
|
|
192
|
+
protected readonly log: _$alepha_logger0.Logger;
|
|
193
193
|
protected readonly options: Readonly<{
|
|
194
194
|
excludeKeys?: string[] | undefined;
|
|
195
195
|
}>;
|
|
196
196
|
protected readonly fs: FileSystemProvider;
|
|
197
197
|
json?: OpenApiDocument;
|
|
198
|
-
protected readonly configure: alepha.HookPrimitive<"configure">;
|
|
198
|
+
protected readonly configure: _$alepha.HookPrimitive<"configure">;
|
|
199
199
|
generateSwaggerDoc(options: SwaggerPrimitiveOptions): OpenApiDocument;
|
|
200
200
|
protected setupSwaggerPlugin(options: SwaggerPrimitiveOptions): Promise<OpenApiDocument | undefined>;
|
|
201
201
|
protected configureOpenApi(actions: ActionPrimitive<RequestConfigSchema>[], doc: SwaggerPrimitiveOptions): OpenApiDocument;
|
|
@@ -241,7 +241,7 @@ declare module "alepha/server" {
|
|
|
241
241
|
*
|
|
242
242
|
* @module alepha.server.swagger
|
|
243
243
|
*/
|
|
244
|
-
declare const AlephaServerSwagger: alepha.Service<alepha.Module>;
|
|
244
|
+
declare const AlephaServerSwagger: _$alepha.Service<_$alepha.Module>;
|
|
245
245
|
//#endregion
|
|
246
246
|
export { $swagger, AlephaServerSwagger, OpenApiDocument, OpenApiOperation, OpenApiServer, ServerSwaggerProvider, ServerSwaggerProviderOptions, SwaggerPrimitive, SwaggerPrimitiveOptions, SwaggerUiOptions, swaggerOptions };
|
|
247
247
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/server/swagger/primitives/$swagger.ts","../../../src/server/swagger/providers/ServerSwaggerProvider.ts","../../../src/server/swagger/index.ts"],"mappings":";;;;;;;;;;;;;;;;AAyBA;;;;;;;;;;;;;;;cAAa,QAAA;EAAA,WACF,uBAAA,GACR,gBAAA;EAAA;;UAIc,uBAAA;EACf,IAAA,GAAO,eAAA;EA4BQ;;;EAvBf,MAAA;EALA;;;EAUA,QAAA;EAKA;;;EAAA,WAAA;EAae;;;;EAPf,OAAA,GAAU,aAAA;EAYqB;AAGjC;;;;EARE,EAAA,aAAe,gBAAA;EAaA;;;EARf,OAAA,IAAW,GAAA,EAAK,eAAA;AAAA;AAAA,UAGD,aAAA;EACf,GAAA;EACA,WAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA;EAuCE;;;;;EAhCF,oBAAA;EAEA,SAAA;IA0DW;;;IAtDT,QAAA;IAsDmE;AAIvE;;IArDI,KAAA;IA4DQ;;;IAvDR,OAAA;IA2DwB;;;;;;IAnDxB,cAAA;IA+CF;;;;;;IAvCE,MAAA;IA2CA;;;;IArCA,2BAAA;MAAA,CAAiC,GAAA;IAAA;IA+CtB;;;;;;;;IArCX,yCAAA;IAiCF;;;;;;IAzBE,iCAAA;EAAA;AAAA;AAAA,cAIS,gBAAA,SAAyB,SAAA,CAAU,uBAAA;AAAA,UAI/B,eAAA;EACf,OAAA;EACA,IAAA;IACE,KAAA;IACA,OAAA;IACA,WAAA;EAAA;EAEF,OAAA,GAAU,aAAA;EACV,KAAA,EAAO,MAAA;EACP,UAAA;IACE,OAAA,GAAU,MAAA;IACV,eAAA,GAAkB,MAAA;EAAA;AAAA;AAAA,UAIL,gBAAA;EACf,IAAA;EACA,OAAA;EACA,WAAA;EACA,WAAA;EACA,UAAA;EACA,UAAA,GAAa,KAAA;IACX,IAAA;IACA,EAAA;IACA,WAAA;IACA,QAAA;IACA,MAAA;EAAA;EAEF,WAAA;IACE,WAAA;IACA,OAAA,EAAS,MAAA;MAGL,MAAA;IAAA;IAGJ,QAAA;EAAA;EAEF,SAAA,EAAW,MAAA;IAGP,WAAA;IACA,OAAA,GAAU,MAAA;MAGN,MAAA;IAAA;EAAA;EAKR,QAAA,GAAW,KAAA,CAAM,MAAA;AAAA;;;;;;cC/JN,cAAA,EAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/server/swagger/primitives/$swagger.ts","../../../src/server/swagger/providers/ServerSwaggerProvider.ts","../../../src/server/swagger/index.ts"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "alepha/security";
|
|
2
|
-
import { $atom, $hook, $inject, $module, $
|
|
2
|
+
import { $atom, $hook, $inject, $module, $state, Alepha, KIND, Primitive, createPrimitive, isTypeFile, t } from "alepha";
|
|
3
3
|
import { $action, AlephaServer, ServerProvider, ServerRouterProvider } from "alepha/server";
|
|
4
4
|
import { AlephaServerEtag } from "alepha/server/etag";
|
|
5
5
|
import { AlephaServerStatic, ServerStaticProvider } from "alepha/server/static";
|
|
@@ -52,7 +52,7 @@ var ServerSwaggerProvider = class {
|
|
|
52
52
|
serverProvider = $inject(ServerProvider);
|
|
53
53
|
alepha = $inject(Alepha);
|
|
54
54
|
log = $logger();
|
|
55
|
-
options = $
|
|
55
|
+
options = $state(swaggerOptions);
|
|
56
56
|
fs = $inject(FileSystemProvider);
|
|
57
57
|
json;
|
|
58
58
|
configure = $hook({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/server/swagger/primitives/$swagger.ts","../../../src/server/swagger/providers/ServerSwaggerProvider.ts","../../../src/server/swagger/index.ts"],"sourcesContent":["import { createPrimitive, KIND, Primitive } from \"alepha\";\n\n/**\n * Creates an OpenAPI/Swagger documentation primitive with interactive UI.\n *\n * Automatically generates API documentation from your $action primitives and serves\n * an interactive Swagger UI for testing endpoints. Supports customization, tag filtering,\n * and OAuth configuration.\n *\n * @example\n * ```ts\n * class App {\n * docs = $swagger({\n * prefix: \"/api-docs\",\n * info: {\n * title: \"My API\",\n * version: \"1.0.0\",\n * description: \"REST API documentation\"\n * },\n * excludeTags: [\"internal\"],\n * ui: { root: \"/swagger\" }\n * });\n * }\n * ```\n */\nexport const $swagger = (\n options: SwaggerPrimitiveOptions = {},\n): SwaggerPrimitive => {\n return createPrimitive(SwaggerPrimitive, options);\n};\n\nexport interface SwaggerPrimitiveOptions {\n info?: OpenApiDocument[\"info\"];\n\n /**\n * @default: \"/docs\"\n */\n prefix?: string;\n\n /**\n * If true, docs will be disabled.\n */\n disabled?: boolean;\n\n /**\n * Tags to exclude from the documentation.\n */\n excludeTags?: string[];\n\n /**\n * Server URLs for the API.\n * If not provided, the server hostname is used automatically.\n */\n servers?: OpenApiServer[];\n\n /**\n * Enable Swagger UI.\n *\n * @default true\n */\n ui?: boolean | SwaggerUiOptions;\n\n /**\n * Function to rewrite the OpenAPI document before serving it.\n */\n rewrite?: (doc: OpenApiDocument) => void;\n}\n\nexport interface OpenApiServer {\n url: string;\n description?: string;\n}\n\nexport interface SwaggerUiOptions {\n root?: string;\n\n /**\n * If true, the authorization data is persisted in browser localStorage.\n *\n * @default true\n */\n persistAuthorization?: boolean;\n\n initOAuth?: {\n /**\n * Default clientId.\n */\n clientId?: string;\n\n /**\n * realm query parameter (for oauth1) added to authorizationUrl and tokenUrl.\n */\n realm?: string;\n\n /**\n * application name, displayed in authorization popup.\n */\n appName?: string;\n\n /**\n * scope separator for passing scopes, encoded before calling, default\n * value is a space (encoded value %20).\n *\n * @default ' '\n */\n scopeSeparator?: string;\n\n /**\n * string array or scope separator (i.e. space) separated string of\n * initially selected oauth scopes\n *\n * @default []\n */\n scopes?: string | string[];\n\n /**\n * Additional query parameters added to authorizationUrl and tokenUrl.\n * MUST be an object\n */\n additionalQueryStringParams?: { [key: string]: any };\n\n /**\n * Only activated for the accessCode flow. During the authorization_code\n * request to the tokenUrl, pass the Client Password using the HTTP Basic\n * Authentication scheme (Authorization header with Basic\n * base64encode(client_id + client_secret)).\n *\n * @default false\n */\n useBasicAuthenticationWithAccessCodeGrant?: boolean;\n\n /**\n * Only applies to Authorization Code flows. Proof Key for Code Exchange\n * brings enhanced security for OAuth public clients.\n *\n * @default false\n */\n usePkceWithAuthorizationCodeGrant?: boolean;\n };\n}\n\nexport class SwaggerPrimitive extends Primitive<SwaggerPrimitiveOptions> {}\n\n$swagger[KIND] = SwaggerPrimitive;\n\nexport interface OpenApiDocument {\n openapi: string;\n info: {\n title: string;\n version: string;\n description?: string;\n };\n servers?: OpenApiServer[];\n paths: Record<string, any>;\n components?: {\n schemas?: Record<string, any>;\n securitySchemes?: Record<string, any>;\n };\n}\n\nexport interface OpenApiOperation {\n tags?: string[];\n summary?: string;\n description?: string;\n operationId?: string;\n deprecated?: boolean;\n parameters?: Array<{\n name: string;\n in: \"query\" | \"header\" | \"path\" | \"cookie\";\n description?: string;\n required?: boolean;\n schema: any;\n }>;\n requestBody?: {\n description?: string;\n content: Record<\n string,\n {\n schema: any;\n }\n >;\n required?: boolean;\n };\n responses: Record<\n string,\n {\n description: string;\n content?: Record<\n string,\n {\n schema: any;\n }\n >;\n }\n >;\n security?: Array<Record<string, any[]>>;\n}\n","import { join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n $atom,\n $hook,\n $inject,\n $use,\n Alepha,\n isTypeFile,\n type Static,\n type TObject,\n type TSchema,\n t,\n} from \"alepha\";\nimport { $logger } from \"alepha/logger\";\nimport {\n $action,\n type ActionPrimitive,\n type RequestConfigSchema,\n ServerProvider,\n ServerRouterProvider,\n} from \"alepha/server\";\nimport { ServerStaticProvider } from \"alepha/server/static\";\nimport { FileSystemProvider } from \"alepha/system\";\nimport {\n $swagger,\n type OpenApiDocument,\n type OpenApiOperation,\n type SwaggerPrimitiveOptions,\n} from \"../primitives/$swagger.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Swagger provider configuration atom\n */\nexport const swaggerOptions = $atom({\n name: \"alepha.server.swagger.options\",\n schema: t.object({\n excludeKeys: t.optional(\n t.array(t.string(), {\n description: \"Keys to exclude from swagger schema\",\n }),\n ),\n }),\n default: {\n excludeKeys: [],\n },\n});\n\nexport type ServerSwaggerProviderOptions = Static<typeof swaggerOptions.schema>;\n\ndeclare module \"alepha\" {\n interface State {\n [swaggerOptions.key]: ServerSwaggerProviderOptions;\n }\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport class ServerSwaggerProvider {\n protected readonly serverStaticProvider = $inject(ServerStaticProvider);\n protected readonly serverRouterProvider = $inject(ServerRouterProvider);\n protected readonly serverProvider = $inject(ServerProvider);\n protected readonly alepha = $inject(Alepha);\n protected readonly log = $logger();\n protected readonly options = $use(swaggerOptions);\n protected readonly fs = $inject(FileSystemProvider);\n\n public json?: OpenApiDocument;\n\n protected readonly configure = $hook({\n on: \"configure\",\n priority: \"last\", // wait for all configurations, sometimes some actions are registered late!\n handler: async (alepha) => {\n const options = alepha.primitives($swagger)?.[0]?.options;\n if (!options) {\n return;\n }\n\n this.json = await this.setupSwaggerPlugin(options);\n },\n });\n\n public generateSwaggerDoc(options: SwaggerPrimitiveOptions): OpenApiDocument {\n const json = this.configureOpenApi(\n this.alepha.primitives($action),\n options,\n );\n\n if (options.rewrite) {\n options.rewrite(json);\n }\n\n return json;\n }\n\n protected async setupSwaggerPlugin(\n options: SwaggerPrimitiveOptions,\n ): Promise<OpenApiDocument | undefined> {\n if (options.disabled) {\n return;\n }\n\n const json = this.generateSwaggerDoc(options);\n\n const prefix = options.prefix ?? \"/docs\";\n\n this.configureSwaggerApi(prefix, json);\n\n if (options.ui !== false) {\n await this.configureSwaggerUi(prefix, options);\n } else {\n this.log.info(`Swagger API available at ${prefix}/json`);\n }\n\n return json;\n }\n\n protected configureOpenApi(\n actions: ActionPrimitive<RequestConfigSchema>[],\n doc: SwaggerPrimitiveOptions,\n ): OpenApiDocument {\n const openApi: OpenApiDocument = {\n openapi: \"3.0.0\",\n info: doc.info ?? {\n title: \"API Documentation\",\n version: \"1.0.0\",\n },\n servers: doc.servers ?? [{ url: this.serverProvider.hostname }],\n paths: {},\n components: {},\n };\n\n let hasSecurity = false;\n const excludeTags = doc.excludeTags ?? [];\n const schemas: Record<string, any> = {};\n\n const schema = (source: TSchema) => {\n if (\"title\" in source && typeof source.title === \"string\") {\n schemas[source.title] = copy(source);\n return { $ref: `#/components/schemas/${source.title}` };\n }\n return copy(source);\n };\n\n const copy = (obj: any) => {\n const newValue = JSON.parse(JSON.stringify(obj));\n this.removePrivateFields(newValue, [\n ...(this.options.excludeKeys || []),\n \"~options\",\n ]);\n return newValue;\n };\n\n for (const route of actions) {\n if (!route.options.schema) {\n continue;\n }\n\n const response = this.getResponseSchema(route);\n if (!response) {\n continue;\n }\n\n if (excludeTags.includes(route.group)) {\n continue;\n }\n\n if (route.options.hide) {\n continue;\n }\n\n const operation: OpenApiOperation = {\n operationId: route.name,\n summary: route.options.summary,\n description: route.options.description,\n deprecated: route.options.deprecated || undefined,\n tags: [route.group.replaceAll(\":\", \" / \")],\n responses: {\n [response.status]: {\n description: this.getStatusDescription(response.status),\n content: response.type\n ? {\n [response.type]: {\n schema: schema(response.schema),\n },\n }\n : undefined,\n },\n },\n };\n\n const isSecured = route.middlewares.some((m) => m?.name === \"$secure\");\n\n if (isSecured) {\n operation.security = [{ bearerAuth: [] }];\n operation.responses[\"401\"] = {\n description: \"Unauthorized\",\n };\n hasSecurity = true;\n }\n\n const g = t.raw;\n\n if (\n g.IsObject(route.options.schema.body) ||\n g.IsArray(route.options.schema.body)\n ) {\n if (\n g.IsObject(route.options.schema.body) &&\n this.isBodyMultipart(route.options.schema.body)\n ) {\n operation.requestBody = {\n required: true,\n content: {\n \"multipart/form-data\": {\n schema: schema(route.options.schema.body),\n },\n },\n };\n } else {\n operation.requestBody = {\n required: true,\n content: {\n \"application/json\": {\n schema: schema(route.options.schema.body),\n },\n },\n };\n }\n }\n\n if (g.IsObject(route.options.schema.query)) {\n operation.parameters ??= [];\n const requiredKeys: string[] =\n route.options.schema.query.required ?? [];\n for (const [key, value] of Object.entries(\n route.options.schema.query.properties,\n )) {\n const param: any = {\n name: key,\n in: \"query\",\n required: requiredKeys.includes(key),\n schema: schema(value),\n };\n const example = this.extractExample(value);\n if (example !== undefined) param.example = example;\n operation.parameters.push(param);\n }\n }\n\n if (g.IsObject(route.options.schema.params)) {\n operation.parameters ??= [];\n for (const [key, value] of Object.entries(\n route.options.schema.params.properties,\n )) {\n const description =\n \"description\" in value && typeof value.description === \"string\"\n ? value.description\n : undefined;\n const ref = schema(value);\n delete ref.description;\n const param: any = {\n name: key,\n in: \"path\",\n required: true,\n description,\n schema: ref,\n };\n const example = this.extractExample(value);\n if (example !== undefined) param.example = example;\n operation.parameters.push(param);\n }\n }\n\n const hasValidation =\n operation.requestBody || operation.parameters?.length;\n if (hasValidation) {\n operation.responses[\"400\"] = {\n description: \"Bad Request\",\n };\n }\n\n const url = route.prefix + this.replacePathParams(route.path);\n\n openApi.paths[url] = {\n ...openApi.paths[url],\n [route.method.toLowerCase()]: operation,\n };\n }\n\n if (hasSecurity && openApi.components) {\n openApi.components.securitySchemes = {\n bearerAuth: {\n type: \"http\",\n scheme: \"bearer\",\n bearerFormat: \"JWT\",\n description:\n \"Enter a JWT token or API key. Both are accepted as Bearer tokens.\",\n },\n };\n }\n\n if (openApi.components) openApi.components.schemas = schemas;\n\n return JSON.parse(JSON.stringify(openApi));\n }\n\n public isBodyMultipart(schema: TObject): boolean {\n for (const key in schema.properties) {\n if (isTypeFile(schema.properties[key])) {\n return true;\n }\n }\n return false;\n }\n\n public replacePathParams(url: string): string {\n return url.replace(/:\\w+/g, (match) => {\n const paramName = match.slice(1);\n return `{${paramName}}`;\n });\n }\n\n public getResponseSchema(route: ActionPrimitive<RequestConfigSchema>):\n | {\n type?: string;\n schema?: any;\n status: number;\n }\n | undefined {\n const schema: any = route.options.schema?.response;\n if (!schema) {\n return {\n status: 204,\n };\n }\n\n if (t.schema.isObject(schema) || t.schema.isArray(schema)) {\n return {\n schema,\n status: 200,\n type: \"application/json\",\n };\n }\n\n if (t.schema.isString(schema)) {\n return {\n schema,\n status: 200,\n type: \"text/plain\",\n };\n }\n\n if (\n t.schema.isNumber(schema) ||\n t.schema.isInteger(schema) ||\n t.schema.isBoolean(schema)\n ) {\n return {\n schema,\n status: 200,\n type: \"application/json\",\n };\n }\n\n if (isTypeFile(schema)) {\n return {\n schema,\n status: 200,\n type: \"application/octet-stream\",\n };\n }\n\n // Status-code-keyed map: e.g. { 201: t.object({...}) }\n const status = Object.keys(schema)[0];\n if (status && !Number.isNaN(Number(status))) {\n const inner = schema[status];\n return {\n schema: inner,\n status: Number(status),\n type: this.getContentType(inner),\n };\n }\n }\n\n protected extractExample(schema: any): any {\n if (\"examples\" in schema && Array.isArray(schema.examples)) {\n return schema.examples[0];\n }\n if (\"default\" in schema) {\n return schema.default;\n }\n return undefined;\n }\n\n protected getStatusDescription(status: number): string {\n switch (status) {\n case 200:\n return \"OK\";\n case 201:\n return \"Created\";\n case 204:\n return \"No Content\";\n case 400:\n return \"Bad Request\";\n case 401:\n return \"Unauthorized\";\n case 403:\n return \"Forbidden\";\n case 404:\n return \"Not Found\";\n case 500:\n return \"Internal Server Error\";\n default:\n return \"\";\n }\n }\n\n protected getContentType(schema: any): string | undefined {\n if (!schema) return undefined;\n if (t.schema.isObject(schema) || t.schema.isArray(schema)) {\n return \"application/json\";\n }\n if (t.schema.isString(schema)) return \"text/plain\";\n if (\n t.schema.isNumber(schema) ||\n t.schema.isInteger(schema) ||\n t.schema.isBoolean(schema)\n ) {\n return \"application/json\";\n }\n if (isTypeFile(schema)) return \"application/octet-stream\";\n return \"application/json\";\n }\n\n protected configureSwaggerApi(prefix: string, json: OpenApiDocument): void {\n this.serverRouterProvider.createRoute({\n method: \"GET\",\n path: `${prefix}/json`,\n schema: {\n response: t.json(),\n },\n handler: () => json,\n });\n }\n\n protected async configureSwaggerUi(\n prefix: string,\n options: SwaggerPrimitiveOptions,\n ): Promise<void> {\n const ui = typeof options.ui === \"object\" ? options.ui : {};\n const persistAuth = ui.persistAuthorization !== false;\n const initializer = `\nwindow.onload = function() {\n\twindow.ui = SwaggerUIBundle({\n\t\turl: \"${prefix}/json\",\n\t\tdom_id: '#swagger-ui',\n\t\tdeepLinking: true,\n\t\tpersistAuthorization: ${persistAuth},\n\t\tpresets: [\n\t\t\tSwaggerUIBundle.presets.apis,\n\t\t\tSwaggerUIStandalonePreset\n\t\t],\n\t\tplugins: [\n\t\t\tSwaggerUIBundle.plugins.DownloadUrl\n\t\t],\n\t\tlayout: \"BaseLayout\"\n\t});\n\n document.body.style.backgroundColor = \"#f2f2f2\";\n\n\tconst options = ${JSON.stringify(ui)};\n\n\tif (options.initOAuth) {\n\t\tui.initOAuth(options.initOAuth);\n\t}\n};\n\t\t`.trim();\n\n if (!this.alepha.isServerless()) {\n const dirname = fileURLToPath(import.meta.url);\n\n const root = await this.getAssetPath(\n ui.root,\n // TODO: this is shitty, take time to get the correct path\n join(dirname, \"../../assets/swagger-ui\"),\n join(dirname, \"../../../assets/swagger-ui\"),\n join(dirname, \"../../../../assets/swagger-ui\"),\n join(dirname, \"../../../../../assets/swagger-ui\"),\n );\n\n if (!root) {\n this.log.warn(`Failed to locate Swagger UI assets for path ${prefix}`);\n return;\n }\n\n await this.serverStaticProvider.createStaticServer({\n path: prefix,\n root,\n });\n }\n\n this.serverRouterProvider.createRoute({\n method: \"GET\",\n path: `${prefix}/swagger-initializer.js`,\n handler: ({ reply }) => {\n reply.headers[\"content-type\"] = \"application/javascript; charset=utf-8\";\n return initializer;\n },\n });\n\n this.log.info(\"SwaggerUI OK\", {\n url: `${this.serverProvider.hostname}${prefix}`,\n });\n }\n\n protected async getAssetPath(\n ...paths: (string | undefined)[]\n ): Promise<string | undefined> {\n for (const path of paths) {\n if (!path) continue;\n const exists = await this.fs.exists(path);\n if (exists) {\n return path;\n }\n }\n }\n\n public removePrivateFields<T extends Record<string, any>>(\n obj: T,\n excludeList: string[],\n ): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n\n const visited = new WeakSet();\n\n const traverse = (o: any): void => {\n if (visited.has(o)) return;\n visited.add(o);\n\n if (Array.isArray(o)) {\n for (let i = 0; i < o.length; i++) {\n const item = o[i];\n if (item !== null && typeof item === \"object\") {\n traverse(item);\n }\n }\n } else {\n for (const excludeKey of excludeList) {\n if (excludeKey in o) {\n delete o[excludeKey];\n }\n }\n for (const key in o) {\n const item = o[key];\n if (item !== null && typeof item === \"object\") {\n traverse(item);\n }\n }\n }\n };\n\n traverse(obj);\n return obj;\n }\n}\n","import \"alepha/security\";\nimport { $module } from \"alepha\";\nimport { AlephaServer, type RequestConfigSchema } from \"alepha/server\";\nimport { AlephaServerEtag } from \"alepha/server/etag\";\nimport { AlephaServerStatic } from \"alepha/server/static\";\nimport { $swagger } from \"./primitives/$swagger.ts\";\nimport { ServerSwaggerProvider } from \"./providers/ServerSwaggerProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./primitives/$swagger.ts\";\nexport * from \"./providers/ServerSwaggerProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\ndeclare module \"alepha/server\" {\n interface ActionPrimitiveOptions<TConfig extends RequestConfigSchema> {\n /**\n * Short description of the route.\n */\n summary?: string;\n\n /**\n * Don't include this action in the Swagger documentation.\n */\n hide?: boolean;\n\n /**\n * Mark this action as deprecated in the documentation.\n */\n deprecated?: boolean;\n }\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Automatic API documentation generation.\n *\n * **Features:**\n * - Swagger/OpenAPI configuration\n * - Routes: `GET /swagger/ui`, `GET /swagger.json`\n *\n * @module alepha.server.swagger\n */\nexport const AlephaServerSwagger = $module({\n name: \"alepha.server.swagger\",\n primitives: [$swagger],\n services: [ServerSwaggerProvider],\n register: (alepha) => {\n alepha.with(AlephaServer);\n alepha.with(AlephaServerEtag);\n alepha.with(AlephaServerStatic);\n alepha.with(ServerSwaggerProvider);\n alepha.store.push(\"alepha.build.assets\", \"alepha\");\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/server/swagger/primitives/$swagger.ts","../../../src/server/swagger/providers/ServerSwaggerProvider.ts","../../../src/server/swagger/index.ts"],"sourcesContent":["import { createPrimitive, KIND, Primitive } from \"alepha\";\n\n/**\n * Creates an OpenAPI/Swagger documentation primitive with interactive UI.\n *\n * Automatically generates API documentation from your $action primitives and serves\n * an interactive Swagger UI for testing endpoints. Supports customization, tag filtering,\n * and OAuth configuration.\n *\n * @example\n * ```ts\n * class App {\n * docs = $swagger({\n * prefix: \"/api-docs\",\n * info: {\n * title: \"My API\",\n * version: \"1.0.0\",\n * description: \"REST API documentation\"\n * },\n * excludeTags: [\"internal\"],\n * ui: { root: \"/swagger\" }\n * });\n * }\n * ```\n */\nexport const $swagger = (\n options: SwaggerPrimitiveOptions = {},\n): SwaggerPrimitive => {\n return createPrimitive(SwaggerPrimitive, options);\n};\n\nexport interface SwaggerPrimitiveOptions {\n info?: OpenApiDocument[\"info\"];\n\n /**\n * @default: \"/docs\"\n */\n prefix?: string;\n\n /**\n * If true, docs will be disabled.\n */\n disabled?: boolean;\n\n /**\n * Tags to exclude from the documentation.\n */\n excludeTags?: string[];\n\n /**\n * Server URLs for the API.\n * If not provided, the server hostname is used automatically.\n */\n servers?: OpenApiServer[];\n\n /**\n * Enable Swagger UI.\n *\n * @default true\n */\n ui?: boolean | SwaggerUiOptions;\n\n /**\n * Function to rewrite the OpenAPI document before serving it.\n */\n rewrite?: (doc: OpenApiDocument) => void;\n}\n\nexport interface OpenApiServer {\n url: string;\n description?: string;\n}\n\nexport interface SwaggerUiOptions {\n root?: string;\n\n /**\n * If true, the authorization data is persisted in browser localStorage.\n *\n * @default true\n */\n persistAuthorization?: boolean;\n\n initOAuth?: {\n /**\n * Default clientId.\n */\n clientId?: string;\n\n /**\n * realm query parameter (for oauth1) added to authorizationUrl and tokenUrl.\n */\n realm?: string;\n\n /**\n * application name, displayed in authorization popup.\n */\n appName?: string;\n\n /**\n * scope separator for passing scopes, encoded before calling, default\n * value is a space (encoded value %20).\n *\n * @default ' '\n */\n scopeSeparator?: string;\n\n /**\n * string array or scope separator (i.e. space) separated string of\n * initially selected oauth scopes\n *\n * @default []\n */\n scopes?: string | string[];\n\n /**\n * Additional query parameters added to authorizationUrl and tokenUrl.\n * MUST be an object\n */\n additionalQueryStringParams?: { [key: string]: any };\n\n /**\n * Only activated for the accessCode flow. During the authorization_code\n * request to the tokenUrl, pass the Client Password using the HTTP Basic\n * Authentication scheme (Authorization header with Basic\n * base64encode(client_id + client_secret)).\n *\n * @default false\n */\n useBasicAuthenticationWithAccessCodeGrant?: boolean;\n\n /**\n * Only applies to Authorization Code flows. Proof Key for Code Exchange\n * brings enhanced security for OAuth public clients.\n *\n * @default false\n */\n usePkceWithAuthorizationCodeGrant?: boolean;\n };\n}\n\nexport class SwaggerPrimitive extends Primitive<SwaggerPrimitiveOptions> {}\n\n$swagger[KIND] = SwaggerPrimitive;\n\nexport interface OpenApiDocument {\n openapi: string;\n info: {\n title: string;\n version: string;\n description?: string;\n };\n servers?: OpenApiServer[];\n paths: Record<string, any>;\n components?: {\n schemas?: Record<string, any>;\n securitySchemes?: Record<string, any>;\n };\n}\n\nexport interface OpenApiOperation {\n tags?: string[];\n summary?: string;\n description?: string;\n operationId?: string;\n deprecated?: boolean;\n parameters?: Array<{\n name: string;\n in: \"query\" | \"header\" | \"path\" | \"cookie\";\n description?: string;\n required?: boolean;\n schema: any;\n }>;\n requestBody?: {\n description?: string;\n content: Record<\n string,\n {\n schema: any;\n }\n >;\n required?: boolean;\n };\n responses: Record<\n string,\n {\n description: string;\n content?: Record<\n string,\n {\n schema: any;\n }\n >;\n }\n >;\n security?: Array<Record<string, any[]>>;\n}\n","import { join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n $atom,\n $hook,\n $inject,\n $state,\n Alepha,\n isTypeFile,\n type Static,\n type TObject,\n type TSchema,\n t,\n} from \"alepha\";\nimport { $logger } from \"alepha/logger\";\nimport {\n $action,\n type ActionPrimitive,\n type RequestConfigSchema,\n ServerProvider,\n ServerRouterProvider,\n} from \"alepha/server\";\nimport { ServerStaticProvider } from \"alepha/server/static\";\nimport { FileSystemProvider } from \"alepha/system\";\nimport {\n $swagger,\n type OpenApiDocument,\n type OpenApiOperation,\n type SwaggerPrimitiveOptions,\n} from \"../primitives/$swagger.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Swagger provider configuration atom\n */\nexport const swaggerOptions = $atom({\n name: \"alepha.server.swagger.options\",\n schema: t.object({\n excludeKeys: t.optional(\n t.array(t.string(), {\n description: \"Keys to exclude from swagger schema\",\n }),\n ),\n }),\n default: {\n excludeKeys: [],\n },\n});\n\nexport type ServerSwaggerProviderOptions = Static<typeof swaggerOptions.schema>;\n\ndeclare module \"alepha\" {\n interface State {\n [swaggerOptions.key]: ServerSwaggerProviderOptions;\n }\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport class ServerSwaggerProvider {\n protected readonly serverStaticProvider = $inject(ServerStaticProvider);\n protected readonly serverRouterProvider = $inject(ServerRouterProvider);\n protected readonly serverProvider = $inject(ServerProvider);\n protected readonly alepha = $inject(Alepha);\n protected readonly log = $logger();\n protected readonly options = $state(swaggerOptions);\n protected readonly fs = $inject(FileSystemProvider);\n\n public json?: OpenApiDocument;\n\n protected readonly configure = $hook({\n on: \"configure\",\n priority: \"last\", // wait for all configurations, sometimes some actions are registered late!\n handler: async (alepha) => {\n const options = alepha.primitives($swagger)?.[0]?.options;\n if (!options) {\n return;\n }\n\n this.json = await this.setupSwaggerPlugin(options);\n },\n });\n\n public generateSwaggerDoc(options: SwaggerPrimitiveOptions): OpenApiDocument {\n const json = this.configureOpenApi(\n this.alepha.primitives($action),\n options,\n );\n\n if (options.rewrite) {\n options.rewrite(json);\n }\n\n return json;\n }\n\n protected async setupSwaggerPlugin(\n options: SwaggerPrimitiveOptions,\n ): Promise<OpenApiDocument | undefined> {\n if (options.disabled) {\n return;\n }\n\n const json = this.generateSwaggerDoc(options);\n\n const prefix = options.prefix ?? \"/docs\";\n\n this.configureSwaggerApi(prefix, json);\n\n if (options.ui !== false) {\n await this.configureSwaggerUi(prefix, options);\n } else {\n this.log.info(`Swagger API available at ${prefix}/json`);\n }\n\n return json;\n }\n\n protected configureOpenApi(\n actions: ActionPrimitive<RequestConfigSchema>[],\n doc: SwaggerPrimitiveOptions,\n ): OpenApiDocument {\n const openApi: OpenApiDocument = {\n openapi: \"3.0.0\",\n info: doc.info ?? {\n title: \"API Documentation\",\n version: \"1.0.0\",\n },\n servers: doc.servers ?? [{ url: this.serverProvider.hostname }],\n paths: {},\n components: {},\n };\n\n let hasSecurity = false;\n const excludeTags = doc.excludeTags ?? [];\n const schemas: Record<string, any> = {};\n\n const schema = (source: TSchema) => {\n if (\"title\" in source && typeof source.title === \"string\") {\n schemas[source.title] = copy(source);\n return { $ref: `#/components/schemas/${source.title}` };\n }\n return copy(source);\n };\n\n const copy = (obj: any) => {\n const newValue = JSON.parse(JSON.stringify(obj));\n this.removePrivateFields(newValue, [\n ...(this.options.excludeKeys || []),\n \"~options\",\n ]);\n return newValue;\n };\n\n for (const route of actions) {\n if (!route.options.schema) {\n continue;\n }\n\n const response = this.getResponseSchema(route);\n if (!response) {\n continue;\n }\n\n if (excludeTags.includes(route.group)) {\n continue;\n }\n\n if (route.options.hide) {\n continue;\n }\n\n const operation: OpenApiOperation = {\n operationId: route.name,\n summary: route.options.summary,\n description: route.options.description,\n deprecated: route.options.deprecated || undefined,\n tags: [route.group.replaceAll(\":\", \" / \")],\n responses: {\n [response.status]: {\n description: this.getStatusDescription(response.status),\n content: response.type\n ? {\n [response.type]: {\n schema: schema(response.schema),\n },\n }\n : undefined,\n },\n },\n };\n\n const isSecured = route.middlewares.some((m) => m?.name === \"$secure\");\n\n if (isSecured) {\n operation.security = [{ bearerAuth: [] }];\n operation.responses[\"401\"] = {\n description: \"Unauthorized\",\n };\n hasSecurity = true;\n }\n\n const g = t.raw;\n\n if (\n g.IsObject(route.options.schema.body) ||\n g.IsArray(route.options.schema.body)\n ) {\n if (\n g.IsObject(route.options.schema.body) &&\n this.isBodyMultipart(route.options.schema.body)\n ) {\n operation.requestBody = {\n required: true,\n content: {\n \"multipart/form-data\": {\n schema: schema(route.options.schema.body),\n },\n },\n };\n } else {\n operation.requestBody = {\n required: true,\n content: {\n \"application/json\": {\n schema: schema(route.options.schema.body),\n },\n },\n };\n }\n }\n\n if (g.IsObject(route.options.schema.query)) {\n operation.parameters ??= [];\n const requiredKeys: string[] =\n route.options.schema.query.required ?? [];\n for (const [key, value] of Object.entries(\n route.options.schema.query.properties,\n )) {\n const param: any = {\n name: key,\n in: \"query\",\n required: requiredKeys.includes(key),\n schema: schema(value),\n };\n const example = this.extractExample(value);\n if (example !== undefined) param.example = example;\n operation.parameters.push(param);\n }\n }\n\n if (g.IsObject(route.options.schema.params)) {\n operation.parameters ??= [];\n for (const [key, value] of Object.entries(\n route.options.schema.params.properties,\n )) {\n const description =\n \"description\" in value && typeof value.description === \"string\"\n ? value.description\n : undefined;\n const ref = schema(value);\n delete ref.description;\n const param: any = {\n name: key,\n in: \"path\",\n required: true,\n description,\n schema: ref,\n };\n const example = this.extractExample(value);\n if (example !== undefined) param.example = example;\n operation.parameters.push(param);\n }\n }\n\n const hasValidation =\n operation.requestBody || operation.parameters?.length;\n if (hasValidation) {\n operation.responses[\"400\"] = {\n description: \"Bad Request\",\n };\n }\n\n const url = route.prefix + this.replacePathParams(route.path);\n\n openApi.paths[url] = {\n ...openApi.paths[url],\n [route.method.toLowerCase()]: operation,\n };\n }\n\n if (hasSecurity && openApi.components) {\n openApi.components.securitySchemes = {\n bearerAuth: {\n type: \"http\",\n scheme: \"bearer\",\n bearerFormat: \"JWT\",\n description:\n \"Enter a JWT token or API key. Both are accepted as Bearer tokens.\",\n },\n };\n }\n\n if (openApi.components) openApi.components.schemas = schemas;\n\n return JSON.parse(JSON.stringify(openApi));\n }\n\n public isBodyMultipart(schema: TObject): boolean {\n for (const key in schema.properties) {\n if (isTypeFile(schema.properties[key])) {\n return true;\n }\n }\n return false;\n }\n\n public replacePathParams(url: string): string {\n return url.replace(/:\\w+/g, (match) => {\n const paramName = match.slice(1);\n return `{${paramName}}`;\n });\n }\n\n public getResponseSchema(route: ActionPrimitive<RequestConfigSchema>):\n | {\n type?: string;\n schema?: any;\n status: number;\n }\n | undefined {\n const schema: any = route.options.schema?.response;\n if (!schema) {\n return {\n status: 204,\n };\n }\n\n if (t.schema.isObject(schema) || t.schema.isArray(schema)) {\n return {\n schema,\n status: 200,\n type: \"application/json\",\n };\n }\n\n if (t.schema.isString(schema)) {\n return {\n schema,\n status: 200,\n type: \"text/plain\",\n };\n }\n\n if (\n t.schema.isNumber(schema) ||\n t.schema.isInteger(schema) ||\n t.schema.isBoolean(schema)\n ) {\n return {\n schema,\n status: 200,\n type: \"application/json\",\n };\n }\n\n if (isTypeFile(schema)) {\n return {\n schema,\n status: 200,\n type: \"application/octet-stream\",\n };\n }\n\n // Status-code-keyed map: e.g. { 201: t.object({...}) }\n const status = Object.keys(schema)[0];\n if (status && !Number.isNaN(Number(status))) {\n const inner = schema[status];\n return {\n schema: inner,\n status: Number(status),\n type: this.getContentType(inner),\n };\n }\n }\n\n protected extractExample(schema: any): any {\n if (\"examples\" in schema && Array.isArray(schema.examples)) {\n return schema.examples[0];\n }\n if (\"default\" in schema) {\n return schema.default;\n }\n return undefined;\n }\n\n protected getStatusDescription(status: number): string {\n switch (status) {\n case 200:\n return \"OK\";\n case 201:\n return \"Created\";\n case 204:\n return \"No Content\";\n case 400:\n return \"Bad Request\";\n case 401:\n return \"Unauthorized\";\n case 403:\n return \"Forbidden\";\n case 404:\n return \"Not Found\";\n case 500:\n return \"Internal Server Error\";\n default:\n return \"\";\n }\n }\n\n protected getContentType(schema: any): string | undefined {\n if (!schema) return undefined;\n if (t.schema.isObject(schema) || t.schema.isArray(schema)) {\n return \"application/json\";\n }\n if (t.schema.isString(schema)) return \"text/plain\";\n if (\n t.schema.isNumber(schema) ||\n t.schema.isInteger(schema) ||\n t.schema.isBoolean(schema)\n ) {\n return \"application/json\";\n }\n if (isTypeFile(schema)) return \"application/octet-stream\";\n return \"application/json\";\n }\n\n protected configureSwaggerApi(prefix: string, json: OpenApiDocument): void {\n this.serverRouterProvider.createRoute({\n method: \"GET\",\n path: `${prefix}/json`,\n schema: {\n response: t.json(),\n },\n handler: () => json,\n });\n }\n\n protected async configureSwaggerUi(\n prefix: string,\n options: SwaggerPrimitiveOptions,\n ): Promise<void> {\n const ui = typeof options.ui === \"object\" ? options.ui : {};\n const persistAuth = ui.persistAuthorization !== false;\n const initializer = `\nwindow.onload = function() {\n\twindow.ui = SwaggerUIBundle({\n\t\turl: \"${prefix}/json\",\n\t\tdom_id: '#swagger-ui',\n\t\tdeepLinking: true,\n\t\tpersistAuthorization: ${persistAuth},\n\t\tpresets: [\n\t\t\tSwaggerUIBundle.presets.apis,\n\t\t\tSwaggerUIStandalonePreset\n\t\t],\n\t\tplugins: [\n\t\t\tSwaggerUIBundle.plugins.DownloadUrl\n\t\t],\n\t\tlayout: \"BaseLayout\"\n\t});\n\n document.body.style.backgroundColor = \"#f2f2f2\";\n\n\tconst options = ${JSON.stringify(ui)};\n\n\tif (options.initOAuth) {\n\t\tui.initOAuth(options.initOAuth);\n\t}\n};\n\t\t`.trim();\n\n if (!this.alepha.isServerless()) {\n const dirname = fileURLToPath(import.meta.url);\n\n const root = await this.getAssetPath(\n ui.root,\n // TODO: this is shitty, take time to get the correct path\n join(dirname, \"../../assets/swagger-ui\"),\n join(dirname, \"../../../assets/swagger-ui\"),\n join(dirname, \"../../../../assets/swagger-ui\"),\n join(dirname, \"../../../../../assets/swagger-ui\"),\n );\n\n if (!root) {\n this.log.warn(`Failed to locate Swagger UI assets for path ${prefix}`);\n return;\n }\n\n await this.serverStaticProvider.createStaticServer({\n path: prefix,\n root,\n });\n }\n\n this.serverRouterProvider.createRoute({\n method: \"GET\",\n path: `${prefix}/swagger-initializer.js`,\n handler: ({ reply }) => {\n reply.headers[\"content-type\"] = \"application/javascript; charset=utf-8\";\n return initializer;\n },\n });\n\n this.log.info(\"SwaggerUI OK\", {\n url: `${this.serverProvider.hostname}${prefix}`,\n });\n }\n\n protected async getAssetPath(\n ...paths: (string | undefined)[]\n ): Promise<string | undefined> {\n for (const path of paths) {\n if (!path) continue;\n const exists = await this.fs.exists(path);\n if (exists) {\n return path;\n }\n }\n }\n\n public removePrivateFields<T extends Record<string, any>>(\n obj: T,\n excludeList: string[],\n ): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n\n const visited = new WeakSet();\n\n const traverse = (o: any): void => {\n if (visited.has(o)) return;\n visited.add(o);\n\n if (Array.isArray(o)) {\n for (let i = 0; i < o.length; i++) {\n const item = o[i];\n if (item !== null && typeof item === \"object\") {\n traverse(item);\n }\n }\n } else {\n for (const excludeKey of excludeList) {\n if (excludeKey in o) {\n delete o[excludeKey];\n }\n }\n for (const key in o) {\n const item = o[key];\n if (item !== null && typeof item === \"object\") {\n traverse(item);\n }\n }\n }\n };\n\n traverse(obj);\n return obj;\n }\n}\n","import \"alepha/security\";\nimport { $module } from \"alepha\";\nimport { AlephaServer, type RequestConfigSchema } from \"alepha/server\";\nimport { AlephaServerEtag } from \"alepha/server/etag\";\nimport { AlephaServerStatic } from \"alepha/server/static\";\nimport { $swagger } from \"./primitives/$swagger.ts\";\nimport { ServerSwaggerProvider } from \"./providers/ServerSwaggerProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./primitives/$swagger.ts\";\nexport * from \"./providers/ServerSwaggerProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\ndeclare module \"alepha/server\" {\n interface ActionPrimitiveOptions<TConfig extends RequestConfigSchema> {\n /**\n * Short description of the route.\n */\n summary?: string;\n\n /**\n * Don't include this action in the Swagger documentation.\n */\n hide?: boolean;\n\n /**\n * Mark this action as deprecated in the documentation.\n */\n deprecated?: boolean;\n }\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Automatic API documentation generation.\n *\n * **Features:**\n * - Swagger/OpenAPI configuration\n * - Routes: `GET /swagger/ui`, `GET /swagger.json`\n *\n * @module alepha.server.swagger\n */\nexport const AlephaServerSwagger = $module({\n name: \"alepha.server.swagger\",\n primitives: [$swagger],\n services: [ServerSwaggerProvider],\n register: (alepha) => {\n alepha.with(AlephaServer);\n alepha.with(AlephaServerEtag);\n alepha.with(AlephaServerStatic);\n alepha.with(ServerSwaggerProvider);\n alepha.store.push(\"alepha.build.assets\", \"alepha\");\n },\n});\n"],"mappings":"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"}
|
package/dist/sms/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as alepha from "alepha";
|
|
1
|
+
import * as _$alepha from "alepha";
|
|
2
2
|
import { AlephaError, InstantiableClass, KIND, Primitive } from "alepha";
|
|
3
|
-
import * as alepha_logger0 from "alepha/logger";
|
|
3
|
+
import * as _$alepha_logger0 from "alepha/logger";
|
|
4
4
|
import { FileSystemProvider } from "alepha/system";
|
|
5
5
|
|
|
6
6
|
//#region ../../src/sms/providers/SmsProvider.d.ts
|
|
@@ -72,15 +72,19 @@ interface LocalSmsProviderOptions {
|
|
|
72
72
|
directory?: string;
|
|
73
73
|
}
|
|
74
74
|
declare class LocalSmsProvider implements SmsProvider {
|
|
75
|
-
protected readonly log: alepha_logger0.Logger;
|
|
75
|
+
protected readonly log: _$alepha_logger0.Logger;
|
|
76
76
|
protected readonly fs: FileSystemProvider;
|
|
77
77
|
protected readonly directory: string;
|
|
78
78
|
constructor(options?: LocalSmsProviderOptions);
|
|
79
79
|
send(options: SmsSendOptions): Promise<void>;
|
|
80
|
-
|
|
80
|
+
createSmsJson(options: {
|
|
81
81
|
to: string;
|
|
82
82
|
message: string;
|
|
83
|
-
}):
|
|
83
|
+
}): {
|
|
84
|
+
to: string;
|
|
85
|
+
message: string;
|
|
86
|
+
sentAt: string;
|
|
87
|
+
};
|
|
84
88
|
}
|
|
85
89
|
//#endregion
|
|
86
90
|
//#region ../../src/sms/providers/MemorySmsProvider.d.ts
|
|
@@ -90,7 +94,7 @@ interface SmsRecord {
|
|
|
90
94
|
sentAt: Date;
|
|
91
95
|
}
|
|
92
96
|
declare class MemorySmsProvider implements SmsProvider {
|
|
93
|
-
protected readonly log: alepha_logger0.Logger;
|
|
97
|
+
protected readonly log: _$alepha_logger0.Logger;
|
|
94
98
|
records: SmsRecord[];
|
|
95
99
|
send(options: SmsSendOptions): Promise<void>;
|
|
96
100
|
/**
|
|
@@ -126,7 +130,7 @@ declare module "alepha" {
|
|
|
126
130
|
*
|
|
127
131
|
* @module alepha.sms
|
|
128
132
|
*/
|
|
129
|
-
declare const AlephaSms: alepha.Service<alepha.Module>;
|
|
133
|
+
declare const AlephaSms: _$alepha.Service<_$alepha.Module>;
|
|
130
134
|
//#endregion
|
|
131
135
|
export { $sms, AlephaSms, LocalSmsProvider, LocalSmsProviderOptions, MemorySmsProvider, SmsError, SmsPrimitive, SmsPrimitiveOptions, SmsProvider, SmsRecord, SmsSendOptions };
|
|
132
136
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/sms/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/sms/providers/SmsProvider.ts","../../src/sms/errors/SmsError.ts","../../src/sms/primitives/$sms.ts","../../src/sms/providers/LocalSmsProvider.ts","../../src/sms/providers/MemorySmsProvider.ts","../../src/sms/index.ts"],"mappings":";;;;;;;;;;;uBAKsB,WAAA;EAAA;;;;;EAAA,SAMJ,IAAA,CAAK,OAAA,EAAS,cAAA,GAAiB,OAAA;AAAA;AAAA,KAGrC,cAAA;EACV,EAAA;EACA,OAAA;AAAA;;;cCdW,QAAA,SAAiB,WAAA;cAChB,OAAA,UAAiB,KAAA,GAAQ,KAAA;AAAA;;;cCU1B,IAAA;EAAA,WAAiB,mBAAA,GAAmB,YAAA;EAAA;;UAKhC,mBAAA;EACf,IAAA;EACA,QAAA,GAAW,iBAAA,CAAkB,WAAA;AAAA;;;;;;AFN/B;;;;;;;;ACZA;;;;cCwCa,YAAA,SAAqB,SAAA,CAAU,mBAAA;EAAA,mBACvB,QAAA,EAAQ,WAAA;EAAA,IAEhB,IAAA,CAAA;ED1C0B;;;ECiDxB,IAAA,CAAK,OAAA,EAAS,cAAA,GAAiB,OAAA;EAAA,UAoBlC,SAAA,CAAA,GAAa,WAAA;AAAA;;;UClER,uBAAA;;;;AHDjB;EGME,SAAA;AAAA;AAAA,cAGW,gBAAA,YAA4B,WAAA;EAAA,mBACpB,GAAA,EADS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/sms/providers/SmsProvider.ts","../../src/sms/errors/SmsError.ts","../../src/sms/primitives/$sms.ts","../../src/sms/providers/LocalSmsProvider.ts","../../src/sms/providers/MemorySmsProvider.ts","../../src/sms/index.ts"],"mappings":";;;;;;;;;;;uBAKsB,WAAA;EAAA;;;;;EAAA,SAMJ,IAAA,CAAK,OAAA,EAAS,cAAA,GAAiB,OAAA;AAAA;AAAA,KAGrC,cAAA;EACV,EAAA;EACA,OAAA;AAAA;;;cCdW,QAAA,SAAiB,WAAA;cAChB,OAAA,UAAiB,KAAA,GAAQ,KAAA;AAAA;;;cCU1B,IAAA;EAAA,WAAiB,mBAAA,GAAmB,YAAA;EAAA;;UAKhC,mBAAA;EACf,IAAA;EACA,QAAA,GAAW,iBAAA,CAAkB,WAAA;AAAA;;;;;;AFN/B;;;;;;;;ACZA;;;;cCwCa,YAAA,SAAqB,SAAA,CAAU,mBAAA;EAAA,mBACvB,QAAA,EAAQ,WAAA;EAAA,IAEhB,IAAA,CAAA;ED1C0B;;;ECiDxB,IAAA,CAAK,OAAA,EAAS,cAAA,GAAiB,OAAA;EAAA,UAoBlC,SAAA,CAAA,GAAa,WAAA;AAAA;;;UClER,uBAAA;;;;AHDjB;EGME,SAAA;AAAA;AAAA,cAGW,gBAAA,YAA4B,WAAA;EAAA,mBACpB,GAAA,EADS,gBAAA,CACN,MAAA;EAAA,mBACH,EAAA,EAAE,kBAAA;EAAA,mBACF,SAAA;cAEP,OAAA,GAAS,uBAAA;EAIR,IAAA,CAAK,OAAA,EAAS,cAAA,GAAiB,OAAA;EA+BrC,aAAA,CAAc,OAAA;IAAW,EAAA;IAAY,OAAA;EAAA;IAC1C,EAAA;IACA,OAAA;IACA,MAAA;EAAA;AAAA;;;UCtDa,SAAA;EACf,EAAA;EACA,OAAA;EACA,MAAA,EAAQ,IAAA;AAAA;AAAA,cAGG,iBAAA,YAA6B,WAAA;EAAA,mBACrB,GAAA,EADU,gBAAA,CACP,MAAA;EACf,OAAA,EAAS,SAAA;EAEH,IAAA,CAAK,OAAA,EAAS,cAAA,GAAiB,OAAA;EJF5B;;;EAAA,IIkBL,IAAA,CAAA,GAAQ,SAAA;AAAA;;;;YCZT,KAAA;IACR,aAAA;MACE,EAAA;MACA,QAAA;MACA,SAAA,EAAW,MAAA;MACX,QAAA,EAAU,WAAA;MACV,KAAA;IAAA;IAEF,UAAA;MACE,EAAA;MACA,QAAA;MACA,QAAA,EAAU,WAAA;IAAA;EAAA;AAAA;;;AJ1BhB;;;;;;;;cI2Ca,SAAA,EAAS,QAAA,CAAA,OAAA,CAUpB,QAAA,CAVoB,MAAA"}
|