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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/devtools/providers/DevToolsMetadataProvider.ts","../../src/devtools/assets.ts","../../src/devtools/schemas/DevActionMetadata.ts","../../src/devtools/schemas/DevAtomMetadata.ts","../../src/devtools/schemas/DevBucketMetadata.ts","../../src/devtools/schemas/DevCacheMetadata.ts","../../src/devtools/schemas/DevEntityMetadata.ts","../../src/devtools/schemas/DevEnvMetadata.ts","../../src/devtools/schemas/DevModuleMetadata.ts","../../src/devtools/schemas/DevPageMetadata.ts","../../src/devtools/schemas/DevProviderMetadata.ts","../../src/devtools/schemas/DevQueueMetadata.ts","../../src/devtools/schemas/DevRealmMetadata.ts","../../src/devtools/schemas/DevRouteMetadata.ts","../../src/devtools/schemas/DevSchedulerMetadata.ts","../../src/devtools/schemas/DevTopicMetadata.ts","../../src/devtools/schemas/DevMetadata.ts","../../src/devtools/providers/DevToolsProvider.ts","../../src/devtools/index.ts"],"sourcesContent":["import { $inject, Alepha, type TObject, type TSchema, t } from \"alepha\";\nimport { $bucket } from \"alepha/bucket\";\nimport { $cache } from \"alepha/cache\";\nimport { DateTimeProvider } from \"alepha/datetime\";\nimport { $logger } from \"alepha/logger\";\nimport {\n PG_CREATED_AT,\n PG_DEFAULT,\n PG_DELETED_AT,\n PG_IDENTITY,\n PG_PRIMARY_KEY,\n PG_REF,\n PG_SERIAL,\n PG_UPDATED_AT,\n PG_VERSION,\n RepositoryProvider,\n} from \"alepha/orm\";\nimport { $queue } from \"alepha/queue\";\nimport { $page } from \"alepha/react/router\";\nimport { $scheduler } from \"alepha/scheduler\";\nimport { $issuer } from \"alepha/security\";\nimport { $action, ServerProvider } from \"alepha/server\";\nimport { $topic } from \"alepha/topic\";\nimport type { DevActionMetadata } from \"../schemas/DevActionMetadata.ts\";\nimport type { DevAtomMetadata } from \"../schemas/DevAtomMetadata.ts\";\nimport type { DevBucketMetadata } from \"../schemas/DevBucketMetadata.ts\";\nimport type { DevCacheMetadata } from \"../schemas/DevCacheMetadata.ts\";\nimport type {\n DevEntityColumn,\n DevEntityConstraint,\n DevEntityForeignKey,\n DevEntityIndex,\n DevEntityMetadata,\n} from \"../schemas/DevEntityMetadata.ts\";\nimport type { DevEnvMetadata } from \"../schemas/DevEnvMetadata.ts\";\nimport type { DevMetadata, DevSystem } from \"../schemas/DevMetadata.ts\";\nimport type { DevModuleMetadata } from \"../schemas/DevModuleMetadata.ts\";\nimport type { DevPageMetadata } from \"../schemas/DevPageMetadata.ts\";\nimport type { DevProviderMetadata } from \"../schemas/DevProviderMetadata.ts\";\nimport type { DevQueueMetadata } from \"../schemas/DevQueueMetadata.ts\";\nimport type { DevRealmMetadata } from \"../schemas/DevRealmMetadata.ts\";\nimport type { DevRouteMetadata } from \"../schemas/DevRouteMetadata.ts\";\nimport type { DevSchedulerMetadata } from \"../schemas/DevSchedulerMetadata.ts\";\nimport type { DevTopicMetadata } from \"../schemas/DevTopicMetadata.ts\";\n\nexport class DevToolsMetadataProvider {\n protected readonly alepha = $inject(Alepha);\n protected readonly dateTime = $inject(DateTimeProvider);\n protected readonly log = $logger();\n protected readonly serverProvider = $inject(ServerProvider);\n protected readonly startedAt = this.dateTime.nowMillis();\n\n public getActions(): DevActionMetadata[] {\n const actionPrimitives = this.alepha.primitives($action);\n\n return actionPrimitives.map((action) => {\n const schema = action.schema;\n const options = action.options as any; // Allow accessing augmented properties\n\n return {\n name: action.name,\n group: action.group,\n method: action.method,\n path: action.path,\n prefix: action.prefix,\n fullPath: action.route.path,\n description: action.options.description,\n summary: options.summary,\n disabled: action.options.disabled,\n secure:\n action.middlewares.some((m) => m?.name === \"$secure\") || undefined,\n hide: options.hide,\n body: schema?.body,\n params: schema?.params,\n query: schema?.query,\n response: schema?.response,\n bodyContentType: action.getBodyContentType(),\n middlewares: action.middlewares.filter(Boolean).length\n ? action.middlewares.filter(Boolean)\n : undefined,\n };\n });\n }\n\n public getQueues(): DevQueueMetadata[] {\n const queuePrimitives = this.alepha.primitives($queue);\n\n return queuePrimitives.map((queue) => ({\n name: queue.name,\n description: queue.options.description,\n schema: queue.options.schema,\n provider: this.getProviderName(queue.options.provider),\n }));\n }\n\n public getSchedulers(): DevSchedulerMetadata[] {\n const schedulerPrimitives = this.alepha.primitives($scheduler);\n\n return schedulerPrimitives.map((scheduler) => ({\n name: scheduler.name,\n description: scheduler.options.description,\n cron: scheduler.options.cron,\n interval: scheduler.options.interval,\n lock: scheduler.options.lock,\n }));\n }\n\n public getTopics(): DevTopicMetadata[] {\n const topicPrimitives = this.alepha.primitives($topic);\n\n // Deduplicate by name, count subscribers\n const topicMap = new Map<string, DevTopicMetadata>();\n for (const topic of topicPrimitives) {\n const existing = topicMap.get(topic.name);\n if (existing) {\n existing.subscribers++;\n } else {\n topicMap.set(topic.name, {\n name: topic.name,\n description: topic.options.description,\n schema: topic.options.schema,\n provider: this.getProviderName(topic.options.provider),\n subscribers: 1,\n });\n }\n }\n return Array.from(topicMap.values());\n }\n\n public getBuckets(): DevBucketMetadata[] {\n const bucketPrimitives = this.alepha.primitives($bucket);\n\n return bucketPrimitives.map((bucket) => ({\n name: bucket.name,\n description: bucket.options.description,\n mimeTypes: bucket.options.mimeTypes,\n maxSize: bucket.options.maxSize,\n provider: this.getProviderName(bucket.options.provider),\n }));\n }\n\n public getRealms(): DevRealmMetadata[] {\n const realmPrimitives = this.alepha.primitives($issuer);\n\n return realmPrimitives.map((realm) => ({\n name: realm.name,\n description: realm.options.description,\n roles: realm.options.roles,\n type: \"secret\" in realm.options ? \"internal\" : \"external\",\n settings: {\n accessTokenExpiration: realm.options.settings?.accessToken?.expiration,\n refreshTokenExpiration:\n realm.options.settings?.refreshToken?.expiration,\n hasOnCreateSession: !!realm.options.settings?.onCreateSession,\n hasOnRefreshSession: !!realm.options.settings?.onRefreshSession,\n hasOnDeleteSession: !!realm.options.settings?.onDeleteSession,\n },\n }));\n }\n\n public getCaches(): DevCacheMetadata[] {\n const cachePrimitives = this.alepha.primitives($cache);\n\n return cachePrimitives.map((cache) => ({\n name: cache.container,\n ttl: cache.options.ttl,\n disabled: cache.options.disabled,\n provider: this.getProviderName(cache.options.provider),\n }));\n }\n\n public getPages(): DevPageMetadata[] {\n const pagePrimitives = this.alepha.primitives($page);\n\n return pagePrimitives.map((page: any) => {\n // Resolve children (can be an array or a function returning an array)\n const children =\n typeof page.options.children === \"function\"\n ? page.options.children()\n : page.options.children;\n const childrenNames = Array.isArray(children)\n ? children.map((c: any) => c.name).filter(Boolean)\n : undefined;\n\n return {\n name: page.name,\n label: page.options.label,\n description: page.options.description,\n path: page.options.path,\n parentName: page.options.parent?.name,\n params: page.options.schema?.params,\n query: page.options.schema?.query,\n hasComponent: !!page.options.component,\n hasLazy: !!page.options.lazy,\n hasResolve: !!page.options.resolve,\n childrenNames: childrenNames?.length ? childrenNames : undefined,\n hasChildren: !!page.options.children,\n hasParent: !!page.options.parent,\n hasErrorHandler: !!page.options.errorHandler,\n static:\n typeof page.options.static === \"boolean\"\n ? page.options.static\n : !!page.options.static,\n cache: page.options.cache,\n client: page.options.client,\n animation: page.options.animation,\n };\n });\n }\n\n public getProviders(): DevProviderMetadata[] {\n const graph = this.alepha.graph();\n\n return Object.entries(graph).map(([name, info]) => ({\n name,\n module: info.module ?? name,\n dependencies: info.from,\n aliases: info.as,\n }));\n }\n\n public getModules(): DevModuleMetadata[] {\n const graph = this.alepha.graph();\n const moduleMap = new Map<string, Set<string>>();\n\n // Group providers by module\n for (const [providerName, info] of Object.entries(graph)) {\n if (info.module) {\n if (!moduleMap.has(info.module)) {\n moduleMap.set(info.module, new Set());\n }\n moduleMap.get(info.module)!.add(providerName);\n }\n }\n\n return Array.from(moduleMap.entries()).map(([name, providers]) => ({\n name,\n providers: Array.from(providers),\n }));\n }\n\n public getEntities(): DevEntityMetadata[] {\n try {\n const repositoryProvider = this.alepha.inject(RepositoryProvider);\n const repositories = repositoryProvider.getRepositories();\n\n return repositories.map((repo) => {\n const entity = repo.entity;\n const schema = entity.schema as TObject;\n const options = entity.options;\n\n // Extract columns from schema\n const columns: DevEntityColumn[] = Object.entries(\n schema.properties,\n ).map(([name, field]) => {\n const fieldSchema = field as TSchema & Record<symbol, any>;\n const refData = fieldSchema[PG_REF];\n\n return {\n name,\n type: this.getColumnType(fieldSchema),\n nullable: this.isNullable(fieldSchema),\n primaryKey: PG_PRIMARY_KEY in fieldSchema,\n identity: PG_IDENTITY in fieldSchema || PG_SERIAL in fieldSchema,\n createdAt: PG_CREATED_AT in fieldSchema,\n updatedAt: PG_UPDATED_AT in fieldSchema,\n deletedAt: PG_DELETED_AT in fieldSchema,\n version: PG_VERSION in fieldSchema,\n hasDefault: PG_DEFAULT in fieldSchema,\n ref: refData\n ? {\n entity: refData.ref?.()?.entity?.name ?? \"unknown\",\n column: refData.ref?.()?.name ?? \"unknown\",\n onUpdate: refData.actions?.onUpdate,\n onDelete: refData.actions?.onDelete,\n }\n : undefined,\n };\n });\n\n // Extract indexes\n const indexes: DevEntityIndex[] = (options.indexes ?? []).map(\n (idx: any) => {\n if (typeof idx === \"string\") {\n return { columns: [idx], unique: false };\n }\n return {\n name: idx.name,\n columns: idx.column ? [idx.column] : (idx.columns ?? []),\n unique: idx.unique ?? false,\n };\n },\n );\n\n // Extract foreign keys\n const foreignKeys: DevEntityForeignKey[] = (\n options.foreignKeys ?? []\n ).map((fk: any) => ({\n name: fk.name,\n columns: fk.columns.map(String),\n foreignEntity: fk.foreignColumns?.[0]?.()?.entity?.name ?? \"unknown\",\n foreignColumns: fk.foreignColumns?.map(\n (fc: any) => fc?.()?.name ?? \"unknown\",\n ),\n }));\n\n // Extract constraints\n const constraints: DevEntityConstraint[] = (\n options.constraints ?? []\n ).map((c: any) => ({\n name: c.name,\n columns: c.columns.map(String),\n unique: !!c.unique,\n hasCheck: !!c.check,\n }));\n\n return {\n name: entity.name,\n provider: repo.provider.constructor.name,\n columns,\n indexes,\n foreignKeys,\n constraints,\n schema: entity.schema,\n insertSchema: entity.insertSchema,\n updateSchema: entity.updateSchema,\n };\n });\n } catch {\n // RepositoryProvider not available (ORM not used)\n return [];\n }\n }\n\n protected getColumnType(field: TSchema): string {\n // Handle optional/nullable wrappers (unions with null)\n if (t.schema.isUnion(field) && (field as any).anyOf) {\n const types = (field as any).anyOf as TSchema[];\n const nonNull = types.find((type) => !t.schema.isNull(type));\n if (nonNull) {\n return this.getColumnType(nonNull);\n }\n }\n\n const f = field as any;\n\n // Check for enum (t.enum wraps in Unsafe with type=string and enum array)\n if (\n t.schema.isUnsafe(field) &&\n f.type === \"string\" &&\n Array.isArray(f.enum)\n ) {\n return \"enum\";\n }\n\n // Use TypeBox's type guards\n if (t.schema.isString(field)) {\n if (f.enum) return \"enum\";\n if (f.format === \"uuid\") return \"uuid\";\n if (f.format === \"date-time\") return \"datetime\";\n if (f.format === \"date\") return \"date\";\n if (f.format === \"bigint\") return \"bigint\";\n return \"text\";\n }\n if (t.schema.isInteger(field)) return \"integer\";\n if (t.schema.isNumber(field)) return \"number\";\n if (t.schema.isBoolean(field)) return \"boolean\";\n if (t.schema.isArray(field)) return \"array\";\n if (t.schema.isObject(field)) return \"json\";\n if (t.schema.isLiteral(field)) return \"literal\";\n\n return \"unknown\";\n }\n\n protected isNullable(field: TSchema): boolean {\n if (t.schema.isUnion(field) && (field as any).anyOf) {\n const types = (field as any).anyOf as TSchema[];\n return types.some((type) => t.schema.isNull(type));\n }\n return false;\n }\n\n public getRoutes(): DevRouteMetadata[] {\n // Routes are the base primitive - actions and pages are routes\n // Showing them separately would be redundant with actions\n return [];\n }\n\n public getEnvs(): DevEnvMetadata[] {\n const envSchemas = this.alepha.getEnvSchemas();\n\n return envSchemas.map((item, index) => ({\n propertyKey: `env_${index}`,\n schema: item.schema,\n values: item.values,\n serviceName: undefined,\n }));\n }\n\n public getAtoms(): DevAtomMetadata[] {\n const atomsWithValues = this.alepha.store.getAtoms(false);\n\n return atomsWithValues.map(({ atom, value }) => ({\n name: atom.key,\n description: atom.options.description,\n schema: atom.schema,\n defaultValue: atom.options.default,\n currentValue: value,\n }));\n }\n\n public getSystem(): DevSystem {\n const isBun = typeof globalThis.Bun !== \"undefined\";\n const port = Number(this.alepha.env.SERVER_PORT) || 3000;\n return {\n alephaVersion: String(this.alepha.env.npm_package_version ?? \"unknown\"),\n nodeVersion: isBun\n ? (globalThis.Bun?.version ?? \"unknown\")\n : process.version,\n runtime: isBun ? \"bun\" : \"node\",\n mode: this.alepha.isProduction() ? \"production\" : \"development\",\n port,\n uptime: (this.dateTime.nowMillis() - this.startedAt) / 1000,\n memoryUsage: process.memoryUsage?.()?.rss ?? 0,\n };\n }\n\n public getMetadata(): DevMetadata {\n return {\n system: this.getSystem(),\n actions: this.getActions(),\n queues: this.getQueues(),\n schedulers: this.getSchedulers(),\n topics: this.getTopics(),\n buckets: this.getBuckets(),\n realms: this.getRealms(),\n caches: this.getCaches(),\n pages: this.getPages(),\n providers: this.getProviders(),\n modules: this.getModules(),\n entities: this.getEntities(),\n routes: this.getRoutes(),\n envs: this.getEnvs(),\n atoms: this.getAtoms(),\n };\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n\n protected getProviderName(provider?: \"memory\" | any): string {\n if (!provider) {\n return \"default\";\n }\n if (provider === \"memory\") {\n return \"memory\";\n }\n return provider.name || \"custom\";\n }\n}\n","import { join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nexport const devtoolsAssets = {\n ui: join(fileURLToPath(import.meta.url), \"../../../assets/devtools-ui\"),\n};\n","import { type Static, t } from \"alepha\";\n\nexport const devActionMetadataSchema = t.object({\n name: t.text(),\n group: t.text(),\n method: t.text(),\n path: t.text(),\n prefix: t.text(),\n fullPath: t.text(),\n description: t.optional(t.text()),\n summary: t.optional(t.text()),\n disabled: t.optional(t.boolean()),\n secure: t.optional(t.boolean()),\n hide: t.optional(t.boolean()),\n body: t.optional(t.any()),\n params: t.optional(t.any()),\n query: t.optional(t.any()),\n response: t.optional(t.any()),\n bodyContentType: t.optional(t.text()),\n middlewares: t.optional(\n t.array(\n t.object({\n name: t.text(),\n options: t.optional(t.any()),\n }),\n ),\n ),\n});\n\nexport type DevActionMetadata = Static<typeof devActionMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devAtomMetadataSchema = t.object({\n /**\n * The unique name/key of the atom\n */\n name: t.text(),\n /**\n * Optional description of the atom\n */\n description: t.optional(t.text()),\n /**\n * The schema for the atom value (TypeBox/JSON Schema)\n */\n schema: t.any(),\n /**\n * The default value defined for the atom\n */\n defaultValue: t.optional(t.any()),\n /**\n * The current value of the atom\n */\n currentValue: t.optional(t.any()),\n});\n\nexport type DevAtomMetadata = Static<typeof devAtomMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devBucketMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n mimeTypes: t.optional(t.array(t.text())),\n maxSize: t.optional(t.number()),\n provider: t.text(),\n});\n\nexport type DevBucketMetadata = Static<typeof devBucketMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devCacheMetadataSchema = t.object({\n name: t.text(),\n ttl: t.optional(t.any()),\n disabled: t.optional(t.boolean()),\n provider: t.text(),\n});\n\nexport type DevCacheMetadata = Static<typeof devCacheMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devEntityColumnSchema = t.object({\n name: t.text(),\n type: t.text(),\n nullable: t.boolean(),\n primaryKey: t.boolean(),\n identity: t.boolean(),\n createdAt: t.boolean(),\n updatedAt: t.boolean(),\n deletedAt: t.boolean(),\n version: t.boolean(),\n hasDefault: t.boolean(),\n ref: t.optional(\n t.object({\n entity: t.text(),\n column: t.text(),\n onUpdate: t.optional(t.text()),\n onDelete: t.optional(t.text()),\n }),\n ),\n});\n\nexport const devEntityIndexSchema = t.object({\n name: t.optional(t.text()),\n columns: t.array(t.text()),\n unique: t.boolean(),\n});\n\nexport const devEntityForeignKeySchema = t.object({\n name: t.optional(t.text()),\n columns: t.array(t.text()),\n foreignEntity: t.text(),\n foreignColumns: t.array(t.text()),\n});\n\nexport const devEntityConstraintSchema = t.object({\n name: t.optional(t.text()),\n columns: t.array(t.text()),\n unique: t.boolean(),\n hasCheck: t.boolean(),\n});\n\nexport const devEntityMetadataSchema = t.object({\n name: t.text(),\n provider: t.text(),\n columns: t.array(devEntityColumnSchema),\n indexes: t.array(devEntityIndexSchema),\n foreignKeys: t.array(devEntityForeignKeySchema),\n constraints: t.array(devEntityConstraintSchema),\n schema: t.optional(t.any()),\n insertSchema: t.optional(t.any()),\n updateSchema: t.optional(t.any()),\n});\n\nexport type DevEntityColumn = Static<typeof devEntityColumnSchema>;\nexport type DevEntityIndex = Static<typeof devEntityIndexSchema>;\nexport type DevEntityForeignKey = Static<typeof devEntityForeignKeySchema>;\nexport type DevEntityConstraint = Static<typeof devEntityConstraintSchema>;\nexport type DevEntityMetadata = Static<typeof devEntityMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devEnvMetadataSchema = t.object({\n /**\n * The property name in the service where $env is defined\n */\n propertyKey: t.text(),\n /**\n * The schema for the environment variables (TypeBox/JSON Schema)\n */\n schema: t.any(),\n /**\n * The parsed values from the environment\n */\n values: t.record(t.text(), t.any()),\n /**\n * The service class name where this $env is defined\n */\n serviceName: t.optional(t.text()),\n});\n\nexport type DevEnvMetadata = Static<typeof devEnvMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devModuleMetadataSchema = t.object({\n name: t.text(),\n providers: t.array(t.text()),\n});\n\nexport type DevModuleMetadata = Static<typeof devModuleMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devPageMetadataSchema = t.object({\n name: t.text(),\n label: t.optional(t.text()),\n description: t.optional(t.text()),\n path: t.optional(t.text()),\n parentName: t.optional(t.text()),\n params: t.optional(t.any()),\n query: t.optional(t.any()),\n hasComponent: t.boolean(),\n hasLazy: t.boolean(),\n hasResolve: t.boolean(),\n childrenNames: t.optional(t.array(t.text())),\n hasChildren: t.boolean(),\n hasParent: t.boolean(),\n hasErrorHandler: t.boolean(),\n static: t.optional(t.boolean()),\n cache: t.optional(t.any()),\n client: t.optional(t.any()),\n animation: t.optional(t.any()),\n});\n\nexport type DevPageMetadata = Static<typeof devPageMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devProviderMetadataSchema = t.object({\n name: t.text(),\n module: t.optional(t.text()),\n dependencies: t.array(t.text()),\n aliases: t.optional(t.array(t.text())),\n});\n\nexport type DevProviderMetadata = Static<typeof devProviderMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devQueueMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n schema: t.optional(t.any()),\n provider: t.text(),\n});\n\nexport type DevQueueMetadata = Static<typeof devQueueMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devRealmMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n roles: t.optional(t.array(t.any())),\n type: t.enum([\"internal\", \"external\"]),\n settings: t.optional(\n t.object({\n accessTokenExpiration: t.optional(t.any()),\n refreshTokenExpiration: t.optional(t.any()),\n hasOnCreateSession: t.boolean(),\n hasOnRefreshSession: t.boolean(),\n hasOnDeleteSession: t.boolean(),\n }),\n ),\n});\n\nexport type DevRealmMetadata = Static<typeof devRealmMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devRouteMetadataSchema = t.object({\n method: t.text(),\n path: t.text(),\n});\n\nexport type DevRouteMetadata = Static<typeof devRouteMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devSchedulerMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n cron: t.optional(t.text()),\n interval: t.optional(t.any()),\n lock: t.optional(t.boolean()),\n});\n\nexport type DevSchedulerMetadata = Static<typeof devSchedulerMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devTopicMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n schema: t.optional(t.any()),\n provider: t.text(),\n subscribers: t.integer(),\n});\n\nexport type DevTopicMetadata = Static<typeof devTopicMetadataSchema>;\n","import { type Static, t } from \"alepha\";\nimport { devActionMetadataSchema } from \"./DevActionMetadata.ts\";\nimport { devAtomMetadataSchema } from \"./DevAtomMetadata.ts\";\nimport { devBucketMetadataSchema } from \"./DevBucketMetadata.ts\";\nimport { devCacheMetadataSchema } from \"./DevCacheMetadata.ts\";\nimport { devEntityMetadataSchema } from \"./DevEntityMetadata.ts\";\nimport { devEnvMetadataSchema } from \"./DevEnvMetadata.ts\";\nimport { devModuleMetadataSchema } from \"./DevModuleMetadata.ts\";\nimport { devPageMetadataSchema } from \"./DevPageMetadata.ts\";\nimport { devProviderMetadataSchema } from \"./DevProviderMetadata.ts\";\nimport { devQueueMetadataSchema } from \"./DevQueueMetadata.ts\";\nimport { devRealmMetadataSchema } from \"./DevRealmMetadata.ts\";\nimport { devRouteMetadataSchema } from \"./DevRouteMetadata.ts\";\nimport { devSchedulerMetadataSchema } from \"./DevSchedulerMetadata.ts\";\nimport { devTopicMetadataSchema } from \"./DevTopicMetadata.ts\";\n\nexport const devSystemSchema = t.object({\n alephaVersion: t.text(),\n nodeVersion: t.text(),\n runtime: t.enum([\"node\", \"bun\"]),\n mode: t.enum([\"development\", \"production\"]),\n port: t.integer(),\n uptime: t.number(),\n memoryUsage: t.number(),\n});\n\nexport type DevSystem = Static<typeof devSystemSchema>;\n\nexport const devMetadataSchema = t.object({\n system: devSystemSchema,\n actions: t.array(devActionMetadataSchema),\n queues: t.array(devQueueMetadataSchema),\n schedulers: t.array(devSchedulerMetadataSchema),\n topics: t.array(devTopicMetadataSchema),\n buckets: t.array(devBucketMetadataSchema),\n realms: t.array(devRealmMetadataSchema),\n caches: t.array(devCacheMetadataSchema),\n pages: t.array(devPageMetadataSchema),\n providers: t.array(devProviderMetadataSchema),\n modules: t.array(devModuleMetadataSchema),\n entities: t.array(devEntityMetadataSchema),\n routes: t.array(devRouteMetadataSchema),\n envs: t.array(devEnvMetadataSchema),\n atoms: t.array(devAtomMetadataSchema),\n});\n\nexport type DevMetadata = Static<typeof devMetadataSchema>;\n","import { $hook, $inject, Alepha, t } from \"alepha\";\nimport { $logger, MemoryDestinationProvider } from \"alepha/logger\";\nimport { RepositoryProvider } from \"alepha/orm\";\nimport { $route, ServerProvider } from \"alepha/server\";\nimport { $serve } from \"alepha/server/static\";\nimport { devtoolsAssets } from \"../assets.ts\";\nimport { devMetadataSchema } from \"../schemas/DevMetadata.ts\";\nimport { DevToolsMetadataProvider } from \"./DevToolsMetadataProvider.ts\";\n\nexport class DevToolsProvider {\n protected readonly log = $logger();\n protected readonly alepha = $inject(Alepha);\n protected readonly serverProvider = $inject(ServerProvider);\n protected readonly devCollectorProvider = $inject(DevToolsMetadataProvider);\n protected readonly memoryDestination = $inject(MemoryDestinationProvider);\n\n protected readonly onStart = $hook({\n on: \"start\",\n handler: () => {\n this.log.info(\"Devtools OK\", {\n url: `${this.serverProvider.hostname}/__devtools/`,\n });\n },\n });\n\n /**\n * Capture all logs into memory so the devtools UI can display them.\n * In dev mode, LogDestinationProvider is bound to ConsoleDestinationProvider,\n * so MemoryDestinationProvider would otherwise never receive writes.\n */\n protected readonly onLog = $hook({\n on: \"log\",\n handler: ({ entry }) => {\n this.memoryDestination.write(\"\", entry);\n },\n });\n\n protected readonly uiRoute = $serve({\n path: \"/__devtools\",\n root: devtoolsAssets.ui,\n historyApiFallback: true,\n silent: true,\n });\n\n protected readonly metadataRoute = $route({\n method: \"GET\",\n path: \"/__devtools/api/metadata\",\n silent: true,\n schema: {\n response: devMetadataSchema,\n },\n handler: () => {\n return this.devCollectorProvider.getMetadata();\n },\n });\n\n protected readonly updateAtomRoute = $route({\n method: \"POST\",\n path: \"/__devtools/api/atoms\",\n silent: true,\n schema: {\n body: t.object({\n name: t.text(),\n value: t.any(),\n }),\n response: t.object({\n success: t.boolean(),\n }),\n },\n handler: ({ body }) => {\n const atoms = this.alepha.store.getAtoms(false);\n const atomEntry = atoms.find((a) => a.atom.key === body.name);\n\n if (atomEntry) {\n this.alepha.store.set(atomEntry.atom, body.value);\n return { success: true };\n }\n\n return { success: false };\n },\n });\n\n // -------------------------------------------------------------------------------------------------------------------\n // Logs endpoint\n // -------------------------------------------------------------------------------------------------------------------\n\n protected readonly logsRoute = $route({\n method: \"GET\",\n path: \"/__devtools/api/logs\",\n silent: true,\n schema: {\n query: t.object({\n level: t.optional(t.text()),\n type: t.optional(t.text()),\n module: t.optional(t.text()),\n search: t.optional(t.text()),\n since: t.optional(t.text()),\n limit: t.optional(t.text()),\n offset: t.optional(t.text()),\n }),\n response: t.object({\n logs: t.array(t.any()),\n total: t.integer(),\n }),\n },\n handler: ({ query }) => {\n const levelOrder = [\"TRACE\", \"DEBUG\", \"INFO\", \"WARN\", \"ERROR\"];\n let entries = this.memoryDestination.logs;\n\n if (query.level) {\n const minIndex = levelOrder.indexOf(query.level.toUpperCase());\n if (minIndex >= 0) {\n entries = entries.filter(\n (e) => levelOrder.indexOf(e.level) >= minIndex,\n );\n }\n }\n\n if (query.type) {\n const types = query.type.split(\",\").map((t) => t.trim());\n entries = entries.filter((e) => {\n if (!e.data || typeof e.data !== \"object\") return false;\n const d = e.data as Record<string, unknown>;\n for (const t of types) {\n if (t === \"http\" || t === \"http:request\") {\n if (d.status && d.method && d.path && d.duration) return true;\n } else if (t === \"db\" || t === \"db:query\") {\n if (d.type === \"db:query\") return true;\n } else if (d.type === t) {\n return true;\n }\n }\n return false;\n });\n }\n\n if (query.module) {\n entries = entries.filter((e) => e.module === query.module);\n }\n\n if (query.search) {\n const terms = query.search.toLowerCase().split(/\\s+/);\n entries = entries.filter((e) => {\n const text = `${e.message} ${e.module} ${e.service}`.toLowerCase();\n return terms.every((term) => text.includes(term));\n });\n }\n\n if (query.since) {\n const since = Number(query.since);\n if (!Number.isNaN(since)) {\n entries = entries.filter((e) => e.timestamp >= since);\n }\n }\n\n const total = entries.length;\n\n // Reverse so newest first\n entries = entries.reverse();\n\n const offset = query.offset ? Number(query.offset) : 0;\n const limit = query.limit ? Number(query.limit) : 100;\n entries = entries.slice(offset, offset + limit);\n\n return { logs: entries, total };\n },\n });\n\n // -------------------------------------------------------------------------------------------------------------------\n // DB CRUD endpoints\n // -------------------------------------------------------------------------------------------------------------------\n\n protected readonly dbListRoute = $route({\n method: \"GET\",\n path: \"/__devtools/api/db/:entity/records\",\n silent: true,\n schema: {\n params: t.object({ entity: t.text() }),\n query: t.object({\n page: t.optional(t.text()),\n size: t.optional(t.text()),\n sort: t.optional(t.text()),\n }),\n response: t.record(t.text(), t.any()),\n },\n handler: async ({ params, query }) => {\n const repo = this.getRepository(params.entity);\n if (!repo) {\n return { content: [], page: { totalElements: 0 } };\n }\n\n return repo.paginate(\n {\n page: query.page ? Number(query.page) : 0,\n size: query.size ? Number(query.size) : 50,\n sort: query.sort || undefined,\n },\n {},\n { count: true },\n ) as any;\n },\n });\n\n protected readonly dbCreateRoute = $route({\n method: \"POST\",\n path: \"/__devtools/api/db/:entity/records\",\n silent: true,\n schema: {\n params: t.object({ entity: t.text() }),\n body: t.record(t.text(), t.any()),\n response: t.record(t.text(), t.any()),\n },\n handler: async ({ params, body }) => {\n const repo = this.getRepository(params.entity);\n if (!repo) {\n return { error: \"Entity not found\" };\n }\n return repo.create(body) as any;\n },\n });\n\n protected readonly dbUpdateRoute = $route({\n method: \"PUT\",\n path: \"/__devtools/api/db/:entity/records/:id\",\n silent: true,\n schema: {\n params: t.object({ entity: t.text(), id: t.text() }),\n body: t.record(t.text(), t.any()),\n response: t.record(t.text(), t.any()),\n },\n handler: async ({ params, body }) => {\n const repo = this.getRepository(params.entity);\n if (!repo) {\n return { error: \"Entity not found\" };\n }\n\n const idValue = this.parseId(repo, params.id);\n return repo.updateById(idValue, body) as any;\n },\n });\n\n protected readonly dbDeleteRoute = $route({\n method: \"DELETE\",\n path: \"/__devtools/api/db/:entity/records/:id\",\n silent: true,\n schema: {\n params: t.object({ entity: t.text(), id: t.text() }),\n response: t.record(t.text(), t.any()),\n },\n handler: async ({ params }) => {\n const repo = this.getRepository(params.entity);\n if (!repo) {\n return { error: \"Entity not found\" };\n }\n\n const idValue = this.parseId(repo, params.id);\n return repo.deleteById(idValue) as any;\n },\n });\n\n // -------------------------------------------------------------------------------------------------------------------\n\n protected getRepository(entityName: string) {\n try {\n const repositoryProvider = this.alepha.inject(RepositoryProvider);\n const repos = repositoryProvider.getRepositories();\n return repos.find((r) => r.entity.name === entityName);\n } catch {\n return undefined;\n }\n }\n\n protected parseId(repo: any, rawId: string): string | number {\n const idType = repo.id.type;\n if (idType?.type === \"integer\" || idType?.type === \"number\") {\n return Number(rawId);\n }\n return rawId;\n }\n}\n","import { $module } from \"alepha\";\nimport { AlephaServer } from \"alepha/server\";\nimport { AlephaServerStatic } from \"alepha/server/static\";\nimport { DevToolsMetadataProvider } from \"./providers/DevToolsMetadataProvider.ts\";\nimport { DevToolsProvider } from \"./providers/DevToolsProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./index.shared.ts\";\nexport * from \"./providers/DevToolsMetadataProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Runtime inspection and debugging UI.\n *\n * **Features:**\n * - DevTools UI at `GET /devtools`\n * - Application metadata at `GET /devtools/metadata`\n * - Last 10,000 logs at `GET /devtools/logs`\n * - Runtime inspection of actions, queues, schedulers, topics, buckets\n * - Log viewer with filtering\n * - React Flow visualization\n * - Provider and module browsing\n *\n * @module alepha.devtools\n */\nexport const AlephaDevtools = $module({\n name: \"alepha.devtools\",\n primitives: [],\n services: [DevToolsMetadataProvider, DevToolsProvider],\n register: (alepha) => {\n alepha.with(AlephaServer);\n alepha.with(AlephaServerStatic);\n alepha.with(DevToolsProvider);\n alepha.with(DevToolsMetadataProvider);\n alepha.store.push(\"alepha.build.assets\", \"alepha\");\n },\n});\n"],"mappings":"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"}
|
package/dist/mqtt/index.d.ts
DELETED
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
import * as alepha from "alepha";
|
|
2
|
-
import { Alepha, Static } from "alepha";
|
|
3
|
-
import * as alepha_logger0 from "alepha/logger";
|
|
4
|
-
import { MqttClient } from "mqtt";
|
|
5
|
-
import { UnSubscribeFn } from "alepha/topic";
|
|
6
|
-
|
|
7
|
-
//#region ../../src/mqtt/providers/MqttClientProvider.d.ts
|
|
8
|
-
/**
|
|
9
|
-
* Abstract MQTT client provider.
|
|
10
|
-
*
|
|
11
|
-
* Low-level MQTT client for publish/subscribe messaging.
|
|
12
|
-
* Analogous to `RedisProvider` — provides the transport layer
|
|
13
|
-
* that higher-level modules like `alepha/topic/mqtt` build on.
|
|
14
|
-
*/
|
|
15
|
-
declare abstract class MqttClientProvider {
|
|
16
|
-
/**
|
|
17
|
-
* Connect to the MQTT broker.
|
|
18
|
-
*/
|
|
19
|
-
abstract connect(): Promise<void>;
|
|
20
|
-
/**
|
|
21
|
-
* Disconnect from the MQTT broker.
|
|
22
|
-
*/
|
|
23
|
-
abstract disconnect(): Promise<void>;
|
|
24
|
-
/**
|
|
25
|
-
* Whether the client is currently connected.
|
|
26
|
-
*/
|
|
27
|
-
abstract get isConnected(): boolean;
|
|
28
|
-
/**
|
|
29
|
-
* Publish a message to an MQTT topic.
|
|
30
|
-
*/
|
|
31
|
-
abstract publish(topic: string, message: string, options?: MqttPublishOptions): Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* Subscribe to an MQTT topic.
|
|
34
|
-
* Callback receives the actual topic string as first arg (for wildcard matching).
|
|
35
|
-
*/
|
|
36
|
-
abstract subscribe(topic: string, callback: MqttMessageCallback, options?: MqttSubscribeOptions): Promise<UnSubscribeFn>;
|
|
37
|
-
/**
|
|
38
|
-
* Unsubscribe from an MQTT topic.
|
|
39
|
-
*/
|
|
40
|
-
abstract unsubscribe(topic: string): Promise<void>;
|
|
41
|
-
}
|
|
42
|
-
interface MqttPublishOptions {
|
|
43
|
-
qos?: 0 | 1 | 2;
|
|
44
|
-
retain?: boolean;
|
|
45
|
-
}
|
|
46
|
-
interface MqttSubscribeOptions {
|
|
47
|
-
qos?: 0 | 1 | 2;
|
|
48
|
-
}
|
|
49
|
-
type MqttMessageCallback = (topic: string, payload: string) => void | Promise<void>;
|
|
50
|
-
//#endregion
|
|
51
|
-
//#region ../../src/mqtt/providers/MqttJsClientProvider.d.ts
|
|
52
|
-
declare const envSchema: alepha.TObject<{
|
|
53
|
-
MQTT_BROKER_URL: alepha.TString;
|
|
54
|
-
}>;
|
|
55
|
-
declare module "alepha" {
|
|
56
|
-
interface Env extends Partial<Static<typeof envSchema>> {}
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* MQTT client configuration atom.
|
|
60
|
-
*/
|
|
61
|
-
declare const mqttOptions: alepha.Atom<alepha.TObject<{
|
|
62
|
-
clientId: alepha.TOptional<alepha.TString>;
|
|
63
|
-
keepalive: alepha.TNumber;
|
|
64
|
-
lazy: alepha.TBoolean;
|
|
65
|
-
}>, "alepha.mqtt.options">;
|
|
66
|
-
type MqttOptions = Static<typeof mqttOptions.schema>;
|
|
67
|
-
declare module "alepha" {
|
|
68
|
-
interface State {
|
|
69
|
-
[mqttOptions.key]: MqttOptions;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* MQTT client provider backed by the `mqtt` npm package (mqtt.js).
|
|
74
|
-
*
|
|
75
|
-
* Wraps `mqtt.connectAsync` and exposes a lifecycle-managed client.
|
|
76
|
-
*
|
|
77
|
-
* @example
|
|
78
|
-
* ```ts
|
|
79
|
-
* // Set MQTT_BROKER_URL environment variable (default: mqtt://localhost:1883)
|
|
80
|
-
* // MQTT_BROKER_URL=mqtt://broker.example.com:1883
|
|
81
|
-
*
|
|
82
|
-
* // Or configure programmatically
|
|
83
|
-
* alepha.with({
|
|
84
|
-
* provide: MqttClientProvider,
|
|
85
|
-
* use: MqttJsClientProvider,
|
|
86
|
-
* });
|
|
87
|
-
* ```
|
|
88
|
-
*/
|
|
89
|
-
declare class MqttJsClientProvider extends MqttClientProvider {
|
|
90
|
-
protected readonly log: alepha_logger0.Logger;
|
|
91
|
-
protected readonly alepha: Alepha;
|
|
92
|
-
protected readonly env: {
|
|
93
|
-
MQTT_BROKER_URL: string;
|
|
94
|
-
};
|
|
95
|
-
protected readonly options: Readonly<{
|
|
96
|
-
clientId?: string | undefined;
|
|
97
|
-
keepalive: number;
|
|
98
|
-
lazy: boolean;
|
|
99
|
-
}>;
|
|
100
|
-
protected client: MqttClient | undefined;
|
|
101
|
-
/**
|
|
102
|
-
* Subscriptions map: pattern → set of callbacks.
|
|
103
|
-
*/
|
|
104
|
-
protected subscriptions: Map<string, Set<MqttMessageCallback>>;
|
|
105
|
-
protected readonly start: alepha.HookPrimitive<"start">;
|
|
106
|
-
protected readonly stop: alepha.HookPrimitive<"stop">;
|
|
107
|
-
get isConnected(): boolean;
|
|
108
|
-
/**
|
|
109
|
-
* Connect to the MQTT broker.
|
|
110
|
-
*/
|
|
111
|
-
connect(): Promise<void>;
|
|
112
|
-
/**
|
|
113
|
-
* Disconnect from the MQTT broker.
|
|
114
|
-
*/
|
|
115
|
-
disconnect(): Promise<void>;
|
|
116
|
-
/**
|
|
117
|
-
* Publish a message to an MQTT topic.
|
|
118
|
-
*/
|
|
119
|
-
publish(topic: string, message: string, options?: MqttPublishOptions): Promise<void>;
|
|
120
|
-
/**
|
|
121
|
-
* Subscribe to an MQTT topic pattern.
|
|
122
|
-
*
|
|
123
|
-
* Supports MQTT wildcards: `+` for a single level, `#` for multiple levels.
|
|
124
|
-
* The callback receives the actual received topic as the first argument.
|
|
125
|
-
*/
|
|
126
|
-
subscribe(topic: string, callback: MqttMessageCallback, options?: MqttSubscribeOptions): Promise<UnSubscribeFn>;
|
|
127
|
-
/**
|
|
128
|
-
* Unsubscribe all callbacks from an MQTT topic pattern.
|
|
129
|
-
*/
|
|
130
|
-
unsubscribe(topic: string): Promise<void>;
|
|
131
|
-
/**
|
|
132
|
-
* Ensure the client is connected, connecting lazily if needed.
|
|
133
|
-
*/
|
|
134
|
-
protected ensureConnected(): Promise<void>;
|
|
135
|
-
/**
|
|
136
|
-
* Remove a single callback from a topic subscription.
|
|
137
|
-
* Unsubscribes from the broker when no callbacks remain.
|
|
138
|
-
*/
|
|
139
|
-
protected unsubscribeCallback(topic: string, callback: MqttMessageCallback): Promise<void>;
|
|
140
|
-
/**
|
|
141
|
-
* Test whether a received MQTT topic matches a subscription pattern.
|
|
142
|
-
*
|
|
143
|
-
* Supports the two MQTT wildcard characters:
|
|
144
|
-
* - `+` matches exactly one topic level
|
|
145
|
-
* - `#` matches any number of remaining levels (must be the last segment)
|
|
146
|
-
*/
|
|
147
|
-
protected topicMatches(pattern: string, topic: string): boolean;
|
|
148
|
-
}
|
|
149
|
-
//#endregion
|
|
150
|
-
//#region ../../src/mqtt/index.d.ts
|
|
151
|
-
/**
|
|
152
|
-
* MQTT client module for Alepha.
|
|
153
|
-
*
|
|
154
|
-
* Provides a lifecycle-managed MQTT client backed by `mqtt.js`.
|
|
155
|
-
* Registers `MqttJsClientProvider` as the default implementation of `MqttClientProvider`.
|
|
156
|
-
*
|
|
157
|
-
* @see {@link MqttClientProvider}
|
|
158
|
-
* @see {@link MqttJsClientProvider}
|
|
159
|
-
* @module alepha.mqtt
|
|
160
|
-
*/
|
|
161
|
-
declare const AlephaMqtt: alepha.Service<alepha.Module>;
|
|
162
|
-
//#endregion
|
|
163
|
-
export { AlephaMqtt, MqttClientProvider, MqttJsClientProvider, MqttMessageCallback, MqttOptions, MqttPublishOptions, MqttSubscribeOptions, mqttOptions };
|
|
164
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/mqtt/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/mqtt/providers/MqttClientProvider.ts","../../src/mqtt/providers/MqttJsClientProvider.ts","../../src/mqtt/index.ts"],"mappings":";;;;;;;;;;;;;AASA;uBAAsB,kBAAA;;;;WAIJ,OAAA,CAAA,GAAW,OAAA;EAmBxB;;;EAAA,SAda,UAAA,CAAA,GAAc,OAAA;EAwB3B;;;EAAA,aAnBiB,WAAA,CAAA;EAVJ;;;EAAA,SAeA,OAAA,CACd,KAAA,UACA,OAAA,UACA,OAAA,GAAU,kBAAA,GACT,OAAA;EATiB;;;;EAAA,SAeJ,SAAA,CACd,KAAA,UACA,QAAA,EAAU,mBAAA,EACV,OAAA,GAAU,oBAAA,GACT,OAAA,CAAQ,aAAA;EAXT;;;EAAA,SAgBc,WAAA,CAAY,KAAA,WAAgB,OAAA;AAAA;AAAA,UAG7B,kBAAA;EACf,GAAA;EACA,MAAA;AAAA;AAAA,UAGe,oBAAA;EACf,GAAA;AAAA;AAAA,KAGU,mBAAA,IACV,KAAA,UACA,OAAA,oBACU,OAAA;;;cCvCN,SAAA,EAKJ,MAAA,CALa,OAAA;mBAKb,MAAA,CAAA,OAAA;AAAA;AAAA;EAAA,UAGU,GAAA,SAAY,OAAA,CAAQ,MAAA,QAAc,SAAA;AAAA;;;;cAQjC,WAAA,EAAW,MAAA,CAAA,IAAA,QAAA,OAAA;6BAsBtB,MAAA,CAAA,OAAA;;;;KAEU,WAAA,GAAc,MAAA,QAAc,WAAA,CAAY,MAAA;AAAA;EAAA,UAGxC,KAAA;IAAA,CACP,WAAA,CAAY,GAAA,GAAM,WAAA;EAAA;AAAA;;;;;;;;;;;;;;;;;;cAuBV,oBAAA,SAA6B,kBAAA;EAAA,mBACrB,GAAA,EADa,cAAA,CACV,MAAA;EAAA,mBACH,MAAA,EAAM,MAAA;EAAA,mBACN,GAAA;;;qBACA,OAAA,EAAO,QAAA;;;;;YAEhB,MAAA,EAAQ,UAAA;EDxCf;AAGL;;EAHK,UC6CO,aAAA,EAAa,GAAA,SAAA,GAAA,CAAA,mBAAA;EAAA,mBAIJ,KAAA,EAJI,MAAA,CAIC,aAAA;EAAA,mBASL,IAAA,EATK,MAAA,CASD,aAAA;EAAA,IAWH,WAAA,CAAA;ED/DV;;;ECsEY,OAAA,CAAA,GAAW,OAAA;;;AAjHF;EAyJT,UAAA,CAAA,GAAc,OAAA;;;;EAed,OAAA,CACpB,KAAA,UACA,OAAA,UACA,OAAA,GAAU,kBAAA,GACT,OAAA;;;;;;;EAcmB,SAAA,CACpB,KAAA,UACA,QAAA,EAAU,mBAAA,EACV,OAAA,GAAU,oBAAA,GACT,OAAA,CAAQ,aAAA;EAlLmB;;;EAoMR,WAAA,CAAY,KAAA,WAAgB,OAAA;EApMxC;;;EAAA,UAqNM,eAAA,CAAA,GAAmB,OAAA;EArNkB;;;AAQvD;EARuD,UAmOrC,mBAAA,CACd,KAAA,UACA,QAAA,EAAU,mBAAA,GACT,OAAA;;;;;;;;YAoBO,YAAA,CAAa,OAAA,UAAiB,KAAA;AAAA;;;;;;;;ADhR1C;;;;;cEYa,UAAA,EAAU,MAAA,CAAA,OAAA,CAUrB,MAAA,CAVqB,MAAA"}
|
package/dist/mqtt/index.js
DELETED
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
import { $atom, $env, $hook, $inject, $module, $use, Alepha, AlephaError, t } from "alepha";
|
|
2
|
-
import { $logger } from "alepha/logger";
|
|
3
|
-
//#region ../../src/mqtt/providers/MqttClientProvider.ts
|
|
4
|
-
/**
|
|
5
|
-
* Abstract MQTT client provider.
|
|
6
|
-
*
|
|
7
|
-
* Low-level MQTT client for publish/subscribe messaging.
|
|
8
|
-
* Analogous to `RedisProvider` — provides the transport layer
|
|
9
|
-
* that higher-level modules like `alepha/topic/mqtt` build on.
|
|
10
|
-
*/
|
|
11
|
-
var MqttClientProvider = class {};
|
|
12
|
-
//#endregion
|
|
13
|
-
//#region ../../src/mqtt/providers/MqttJsClientProvider.ts
|
|
14
|
-
const envSchema = t.object({ MQTT_BROKER_URL: t.text({
|
|
15
|
-
default: "mqtt://localhost:1883",
|
|
16
|
-
description: "MQTT broker connection URL"
|
|
17
|
-
}) });
|
|
18
|
-
/**
|
|
19
|
-
* MQTT client configuration atom.
|
|
20
|
-
*/
|
|
21
|
-
const mqttOptions = $atom({
|
|
22
|
-
name: "alepha.mqtt.options",
|
|
23
|
-
schema: t.object({
|
|
24
|
-
clientId: t.optional(t.text({ description: "MQTT client identifier. Auto-generated if omitted." })),
|
|
25
|
-
keepalive: t.number({
|
|
26
|
-
default: 60,
|
|
27
|
-
description: "Keepalive interval in seconds."
|
|
28
|
-
}),
|
|
29
|
-
lazy: t.boolean({
|
|
30
|
-
default: false,
|
|
31
|
-
description: "When true, the connection is deferred until the first publish or subscribe."
|
|
32
|
-
})
|
|
33
|
-
}),
|
|
34
|
-
default: {
|
|
35
|
-
keepalive: 60,
|
|
36
|
-
lazy: false
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
/**
|
|
40
|
-
* MQTT client provider backed by the `mqtt` npm package (mqtt.js).
|
|
41
|
-
*
|
|
42
|
-
* Wraps `mqtt.connectAsync` and exposes a lifecycle-managed client.
|
|
43
|
-
*
|
|
44
|
-
* @example
|
|
45
|
-
* ```ts
|
|
46
|
-
* // Set MQTT_BROKER_URL environment variable (default: mqtt://localhost:1883)
|
|
47
|
-
* // MQTT_BROKER_URL=mqtt://broker.example.com:1883
|
|
48
|
-
*
|
|
49
|
-
* // Or configure programmatically
|
|
50
|
-
* alepha.with({
|
|
51
|
-
* provide: MqttClientProvider,
|
|
52
|
-
* use: MqttJsClientProvider,
|
|
53
|
-
* });
|
|
54
|
-
* ```
|
|
55
|
-
*/
|
|
56
|
-
var MqttJsClientProvider = class extends MqttClientProvider {
|
|
57
|
-
log = $logger();
|
|
58
|
-
alepha = $inject(Alepha);
|
|
59
|
-
env = $env(envSchema);
|
|
60
|
-
options = $use(mqttOptions);
|
|
61
|
-
client;
|
|
62
|
-
/**
|
|
63
|
-
* Subscriptions map: pattern → set of callbacks.
|
|
64
|
-
*/
|
|
65
|
-
subscriptions = /* @__PURE__ */ new Map();
|
|
66
|
-
start = $hook({
|
|
67
|
-
on: "start",
|
|
68
|
-
handler: async () => {
|
|
69
|
-
if (!this.options.lazy) await this.connect();
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
stop = $hook({
|
|
73
|
-
on: "stop",
|
|
74
|
-
handler: async () => {
|
|
75
|
-
if (this.client) await this.disconnect();
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
get isConnected() {
|
|
79
|
-
return this.client?.connected ?? false;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Connect to the MQTT broker.
|
|
83
|
-
*/
|
|
84
|
-
async connect() {
|
|
85
|
-
const url = this.env.MQTT_BROKER_URL;
|
|
86
|
-
this.log.debug(`Connecting to ${url}...`);
|
|
87
|
-
const { connectAsync } = await import("mqtt");
|
|
88
|
-
this.client = await connectAsync(url, {
|
|
89
|
-
clientId: this.options.clientId,
|
|
90
|
-
keepalive: this.options.keepalive
|
|
91
|
-
});
|
|
92
|
-
this.client.on("error", (error) => {
|
|
93
|
-
if (this.alepha.isStarted()) this.log.error("MQTT client error", error);
|
|
94
|
-
});
|
|
95
|
-
this.client.on("message", (receivedTopic, payload) => {
|
|
96
|
-
const message = payload.toString();
|
|
97
|
-
for (const [pattern, callbacks] of this.subscriptions.entries()) if (this.topicMatches(pattern, receivedTopic)) for (const callback of callbacks) Promise.resolve(callback(receivedTopic, message)).catch((error) => {
|
|
98
|
-
this.log.error(`Error in MQTT message handler for topic '${receivedTopic}'`, error);
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
this.log.info("MQTT connection OK");
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Disconnect from the MQTT broker.
|
|
105
|
-
*/
|
|
106
|
-
async disconnect() {
|
|
107
|
-
if (!this.client) return;
|
|
108
|
-
this.log.debug("Disconnecting...");
|
|
109
|
-
await this.client.endAsync();
|
|
110
|
-
this.client = void 0;
|
|
111
|
-
this.subscriptions.clear();
|
|
112
|
-
this.log.info("MQTT connection closed");
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Publish a message to an MQTT topic.
|
|
116
|
-
*/
|
|
117
|
-
async publish(topic, message, options) {
|
|
118
|
-
await this.ensureConnected();
|
|
119
|
-
await this.client.publishAsync(topic, message, {
|
|
120
|
-
qos: options?.qos,
|
|
121
|
-
retain: options?.retain
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Subscribe to an MQTT topic pattern.
|
|
126
|
-
*
|
|
127
|
-
* Supports MQTT wildcards: `+` for a single level, `#` for multiple levels.
|
|
128
|
-
* The callback receives the actual received topic as the first argument.
|
|
129
|
-
*/
|
|
130
|
-
async subscribe(topic, callback, options) {
|
|
131
|
-
await this.ensureConnected();
|
|
132
|
-
if (!this.subscriptions.has(topic)) {
|
|
133
|
-
this.subscriptions.set(topic, /* @__PURE__ */ new Set());
|
|
134
|
-
await this.client.subscribeAsync(topic, { qos: options?.qos ?? 0 });
|
|
135
|
-
}
|
|
136
|
-
this.subscriptions.get(topic).add(callback);
|
|
137
|
-
return async () => {
|
|
138
|
-
await this.unsubscribeCallback(topic, callback);
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Unsubscribe all callbacks from an MQTT topic pattern.
|
|
143
|
-
*/
|
|
144
|
-
async unsubscribe(topic) {
|
|
145
|
-
if (!this.subscriptions.has(topic)) return;
|
|
146
|
-
this.subscriptions.delete(topic);
|
|
147
|
-
if (this.client?.connected) await this.client.unsubscribeAsync(topic);
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Ensure the client is connected, connecting lazily if needed.
|
|
151
|
-
*/
|
|
152
|
-
async ensureConnected() {
|
|
153
|
-
if (!this.client || !this.client.connected) {
|
|
154
|
-
if (!this.options.lazy) throw new AlephaError("MQTT client is not connected");
|
|
155
|
-
await this.connect();
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Remove a single callback from a topic subscription.
|
|
160
|
-
* Unsubscribes from the broker when no callbacks remain.
|
|
161
|
-
*/
|
|
162
|
-
async unsubscribeCallback(topic, callback) {
|
|
163
|
-
const callbacks = this.subscriptions.get(topic);
|
|
164
|
-
if (!callbacks) return;
|
|
165
|
-
callbacks.delete(callback);
|
|
166
|
-
if (callbacks.size === 0) await this.unsubscribe(topic);
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Test whether a received MQTT topic matches a subscription pattern.
|
|
170
|
-
*
|
|
171
|
-
* Supports the two MQTT wildcard characters:
|
|
172
|
-
* - `+` matches exactly one topic level
|
|
173
|
-
* - `#` matches any number of remaining levels (must be the last segment)
|
|
174
|
-
*/
|
|
175
|
-
topicMatches(pattern, topic) {
|
|
176
|
-
if (pattern === topic) return true;
|
|
177
|
-
const patternParts = pattern.split("/");
|
|
178
|
-
const topicParts = topic.split("/");
|
|
179
|
-
for (let i = 0; i < patternParts.length; i++) {
|
|
180
|
-
const p = patternParts[i];
|
|
181
|
-
if (p === "#") return true;
|
|
182
|
-
if (i >= topicParts.length) return false;
|
|
183
|
-
if (p !== "+" && p !== topicParts[i]) return false;
|
|
184
|
-
}
|
|
185
|
-
return patternParts.length === topicParts.length;
|
|
186
|
-
}
|
|
187
|
-
};
|
|
188
|
-
//#endregion
|
|
189
|
-
//#region ../../src/mqtt/index.ts
|
|
190
|
-
/**
|
|
191
|
-
* MQTT client module for Alepha.
|
|
192
|
-
*
|
|
193
|
-
* Provides a lifecycle-managed MQTT client backed by `mqtt.js`.
|
|
194
|
-
* Registers `MqttJsClientProvider` as the default implementation of `MqttClientProvider`.
|
|
195
|
-
*
|
|
196
|
-
* @see {@link MqttClientProvider}
|
|
197
|
-
* @see {@link MqttJsClientProvider}
|
|
198
|
-
* @module alepha.mqtt
|
|
199
|
-
*/
|
|
200
|
-
const AlephaMqtt = $module({
|
|
201
|
-
name: "alepha.mqtt",
|
|
202
|
-
services: [MqttClientProvider, MqttJsClientProvider],
|
|
203
|
-
register: (alepha) => {
|
|
204
|
-
alepha.with({
|
|
205
|
-
optional: true,
|
|
206
|
-
provide: MqttClientProvider,
|
|
207
|
-
use: MqttJsClientProvider
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
//#endregion
|
|
212
|
-
export { AlephaMqtt, MqttClientProvider, MqttJsClientProvider, mqttOptions };
|
|
213
|
-
|
|
214
|
-
//# sourceMappingURL=index.js.map
|
package/dist/mqtt/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/mqtt/providers/MqttClientProvider.ts","../../src/mqtt/providers/MqttJsClientProvider.ts","../../src/mqtt/index.ts"],"sourcesContent":["import type { UnSubscribeFn } from \"alepha/topic\";\n\n/**\n * Abstract MQTT client provider.\n *\n * Low-level MQTT client for publish/subscribe messaging.\n * Analogous to `RedisProvider` — provides the transport layer\n * that higher-level modules like `alepha/topic/mqtt` build on.\n */\nexport abstract class MqttClientProvider {\n /**\n * Connect to the MQTT broker.\n */\n public abstract connect(): Promise<void>;\n\n /**\n * Disconnect from the MQTT broker.\n */\n public abstract disconnect(): Promise<void>;\n\n /**\n * Whether the client is currently connected.\n */\n public abstract get isConnected(): boolean;\n\n /**\n * Publish a message to an MQTT topic.\n */\n public abstract publish(\n topic: string,\n message: string,\n options?: MqttPublishOptions,\n ): Promise<void>;\n\n /**\n * Subscribe to an MQTT topic.\n * Callback receives the actual topic string as first arg (for wildcard matching).\n */\n public abstract subscribe(\n topic: string,\n callback: MqttMessageCallback,\n options?: MqttSubscribeOptions,\n ): Promise<UnSubscribeFn>;\n\n /**\n * Unsubscribe from an MQTT topic.\n */\n public abstract unsubscribe(topic: string): Promise<void>;\n}\n\nexport interface MqttPublishOptions {\n qos?: 0 | 1 | 2;\n retain?: boolean;\n}\n\nexport interface MqttSubscribeOptions {\n qos?: 0 | 1 | 2;\n}\n\nexport type MqttMessageCallback = (\n topic: string,\n payload: string,\n) => void | Promise<void>;\n","import {\n $atom,\n $env,\n $hook,\n $inject,\n $use,\n Alepha,\n AlephaError,\n type Static,\n t,\n} from \"alepha\";\nimport { $logger } from \"alepha/logger\";\nimport type { UnSubscribeFn } from \"alepha/topic\";\nimport type { MqttClient } from \"mqtt\";\nimport {\n MqttClientProvider,\n type MqttMessageCallback,\n type MqttPublishOptions,\n type MqttSubscribeOptions,\n} from \"./MqttClientProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nconst envSchema = t.object({\n MQTT_BROKER_URL: t.text({\n default: \"mqtt://localhost:1883\",\n description: \"MQTT broker connection URL\",\n }),\n});\n\ndeclare module \"alepha\" {\n interface Env extends Partial<Static<typeof envSchema>> {}\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * MQTT client configuration atom.\n */\nexport const mqttOptions = $atom({\n name: \"alepha.mqtt.options\",\n schema: t.object({\n clientId: t.optional(\n t.text({\n description: \"MQTT client identifier. Auto-generated if omitted.\",\n }),\n ),\n keepalive: t.number({\n default: 60,\n description: \"Keepalive interval in seconds.\",\n }),\n lazy: t.boolean({\n default: false,\n description:\n \"When true, the connection is deferred until the first publish or subscribe.\",\n }),\n }),\n default: {\n keepalive: 60,\n lazy: false,\n },\n});\n\nexport type MqttOptions = Static<typeof mqttOptions.schema>;\n\ndeclare module \"alepha\" {\n interface State {\n [mqttOptions.key]: MqttOptions;\n }\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * MQTT client provider backed by the `mqtt` npm package (mqtt.js).\n *\n * Wraps `mqtt.connectAsync` and exposes a lifecycle-managed client.\n *\n * @example\n * ```ts\n * // Set MQTT_BROKER_URL environment variable (default: mqtt://localhost:1883)\n * // MQTT_BROKER_URL=mqtt://broker.example.com:1883\n *\n * // Or configure programmatically\n * alepha.with({\n * provide: MqttClientProvider,\n * use: MqttJsClientProvider,\n * });\n * ```\n */\nexport class MqttJsClientProvider extends MqttClientProvider {\n protected readonly log = $logger();\n protected readonly alepha = $inject(Alepha);\n protected readonly env = $env(envSchema);\n protected readonly options = $use(mqttOptions);\n\n protected client: MqttClient | undefined;\n\n /**\n * Subscriptions map: pattern → set of callbacks.\n */\n protected subscriptions = new Map<string, Set<MqttMessageCallback>>();\n\n // -----------------------------------------------------------------------------------------------------------------\n\n protected readonly start = $hook({\n on: \"start\",\n handler: async () => {\n if (!this.options.lazy) {\n await this.connect();\n }\n },\n });\n\n protected readonly stop = $hook({\n on: \"stop\",\n handler: async () => {\n if (this.client) {\n await this.disconnect();\n }\n },\n });\n\n // -----------------------------------------------------------------------------------------------------------------\n\n public override get isConnected(): boolean {\n return this.client?.connected ?? false;\n }\n\n /**\n * Connect to the MQTT broker.\n */\n public override async connect(): Promise<void> {\n const url = this.env.MQTT_BROKER_URL;\n this.log.debug(`Connecting to ${url}...`);\n\n const { connectAsync } = await import(\"mqtt\");\n\n this.client = await connectAsync(url, {\n clientId: this.options.clientId,\n keepalive: this.options.keepalive,\n });\n\n this.client.on(\"error\", (error) => {\n if (this.alepha.isStarted()) {\n this.log.error(\"MQTT client error\", error);\n }\n });\n\n this.client.on(\"message\", (receivedTopic, payload) => {\n const message = payload.toString();\n\n for (const [pattern, callbacks] of this.subscriptions.entries()) {\n if (this.topicMatches(pattern, receivedTopic)) {\n for (const callback of callbacks) {\n Promise.resolve(callback(receivedTopic, message)).catch((error) => {\n this.log.error(\n `Error in MQTT message handler for topic '${receivedTopic}'`,\n error,\n );\n });\n }\n }\n }\n });\n\n this.log.info(\"MQTT connection OK\");\n }\n\n /**\n * Disconnect from the MQTT broker.\n */\n public override async disconnect(): Promise<void> {\n if (!this.client) {\n return;\n }\n\n this.log.debug(\"Disconnecting...\");\n await this.client.endAsync();\n this.client = undefined;\n this.subscriptions.clear();\n this.log.info(\"MQTT connection closed\");\n }\n\n /**\n * Publish a message to an MQTT topic.\n */\n public override async publish(\n topic: string,\n message: string,\n options?: MqttPublishOptions,\n ): Promise<void> {\n await this.ensureConnected();\n await this.client!.publishAsync(topic, message, {\n qos: options?.qos,\n retain: options?.retain,\n });\n }\n\n /**\n * Subscribe to an MQTT topic pattern.\n *\n * Supports MQTT wildcards: `+` for a single level, `#` for multiple levels.\n * The callback receives the actual received topic as the first argument.\n */\n public override async subscribe(\n topic: string,\n callback: MqttMessageCallback,\n options?: MqttSubscribeOptions,\n ): Promise<UnSubscribeFn> {\n await this.ensureConnected();\n\n if (!this.subscriptions.has(topic)) {\n this.subscriptions.set(topic, new Set());\n await this.client!.subscribeAsync(topic, { qos: options?.qos ?? 0 });\n }\n\n this.subscriptions.get(topic)!.add(callback);\n\n return async () => {\n await this.unsubscribeCallback(topic, callback);\n };\n }\n\n /**\n * Unsubscribe all callbacks from an MQTT topic pattern.\n */\n public override async unsubscribe(topic: string): Promise<void> {\n if (!this.subscriptions.has(topic)) {\n return;\n }\n\n this.subscriptions.delete(topic);\n\n if (this.client?.connected) {\n await this.client.unsubscribeAsync(topic);\n }\n }\n\n // -----------------------------------------------------------------------------------------------------------------\n\n /**\n * Ensure the client is connected, connecting lazily if needed.\n */\n protected async ensureConnected(): Promise<void> {\n if (!this.client || !this.client.connected) {\n if (!this.options.lazy) {\n throw new AlephaError(\"MQTT client is not connected\");\n }\n\n await this.connect();\n }\n }\n\n /**\n * Remove a single callback from a topic subscription.\n * Unsubscribes from the broker when no callbacks remain.\n */\n protected async unsubscribeCallback(\n topic: string,\n callback: MqttMessageCallback,\n ): Promise<void> {\n const callbacks = this.subscriptions.get(topic);\n if (!callbacks) {\n return;\n }\n\n callbacks.delete(callback);\n\n if (callbacks.size === 0) {\n await this.unsubscribe(topic);\n }\n }\n\n /**\n * Test whether a received MQTT topic matches a subscription pattern.\n *\n * Supports the two MQTT wildcard characters:\n * - `+` matches exactly one topic level\n * - `#` matches any number of remaining levels (must be the last segment)\n */\n protected topicMatches(pattern: string, topic: string): boolean {\n if (pattern === topic) {\n return true;\n }\n\n const patternParts = pattern.split(\"/\");\n const topicParts = topic.split(\"/\");\n\n for (let i = 0; i < patternParts.length; i++) {\n const p = patternParts[i];\n\n if (p === \"#\") {\n // Multi-level wildcard — matches everything remaining.\n return true;\n }\n\n if (i >= topicParts.length) {\n return false;\n }\n\n if (p !== \"+\" && p !== topicParts[i]) {\n return false;\n }\n }\n\n return patternParts.length === topicParts.length;\n }\n}\n","import { $module, type Alepha } from \"alepha\";\nimport { MqttClientProvider } from \"./providers/MqttClientProvider.ts\";\nimport { MqttJsClientProvider } from \"./providers/MqttJsClientProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./providers/MqttClientProvider.ts\";\nexport * from \"./providers/MqttJsClientProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * MQTT client module for Alepha.\n *\n * Provides a lifecycle-managed MQTT client backed by `mqtt.js`.\n * Registers `MqttJsClientProvider` as the default implementation of `MqttClientProvider`.\n *\n * @see {@link MqttClientProvider}\n * @see {@link MqttJsClientProvider}\n * @module alepha.mqtt\n */\nexport const AlephaMqtt = $module({\n name: \"alepha.mqtt\",\n services: [MqttClientProvider, MqttJsClientProvider],\n register: (alepha: Alepha): void => {\n alepha.with({\n optional: true,\n provide: MqttClientProvider,\n use: MqttJsClientProvider,\n });\n },\n});\n"],"mappings":"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"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import * as alepha from "alepha";
|
|
2
|
-
import { Static } from "alepha";
|
|
3
|
-
import { SubscribeCallback, TopicProvider, TopicPublishOptions, TopicSubscribeOptions, UnSubscribeFn } from "alepha/topic";
|
|
4
|
-
import * as alepha_logger0 from "alepha/logger";
|
|
5
|
-
import { MqttClientProvider } from "alepha/mqtt";
|
|
6
|
-
|
|
7
|
-
//#region ../../src/topic/mqtt/providers/MqttTopicProvider.d.ts
|
|
8
|
-
/**
|
|
9
|
-
* MQTT topic configuration atom.
|
|
10
|
-
*/
|
|
11
|
-
declare const mqttTopicOptions: alepha.Atom<alepha.TObject<{
|
|
12
|
-
prefix: alepha.TString;
|
|
13
|
-
}>, "alepha.topic.mqtt.options">;
|
|
14
|
-
type MqttTopicOptions = Static<typeof mqttTopicOptions.schema>;
|
|
15
|
-
declare module "alepha" {
|
|
16
|
-
interface State {
|
|
17
|
-
[mqttTopicOptions.key]: MqttTopicOptions;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Module augmentation — adds MQTT-specific publish options to $topic.
|
|
22
|
-
*
|
|
23
|
-
* Only used when the active TopicProvider is MqttTopicProvider.
|
|
24
|
-
* Ignored by Memory and Redis providers.
|
|
25
|
-
*/
|
|
26
|
-
declare module "alepha/topic" {
|
|
27
|
-
interface TopicSubscribeOptions {
|
|
28
|
-
mqtt?: {
|
|
29
|
-
qos?: 0 | 1 | 2;
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
interface TopicPrimitiveOptions<T> {
|
|
33
|
-
/**
|
|
34
|
-
* MQTT-specific options for this topic.
|
|
35
|
-
* Only used when the active TopicProvider is MqttTopicProvider.
|
|
36
|
-
* Ignored by Memory and Redis providers.
|
|
37
|
-
*/
|
|
38
|
-
mqtt?: {
|
|
39
|
-
/**
|
|
40
|
-
* MQTT Quality of Service level.
|
|
41
|
-
* - 0: At most once (fire and forget)
|
|
42
|
-
* - 1: At least once (acknowledged delivery)
|
|
43
|
-
* - 2: Exactly once (four-step handshake)
|
|
44
|
-
*
|
|
45
|
-
* @default 0
|
|
46
|
-
*/
|
|
47
|
-
qos?: 0 | 1 | 2;
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
declare class MqttTopicProvider extends TopicProvider {
|
|
52
|
-
protected readonly mqttClient: MqttClientProvider;
|
|
53
|
-
protected readonly options: Readonly<{
|
|
54
|
-
prefix: string;
|
|
55
|
-
}>;
|
|
56
|
-
protected readonly log: alepha_logger0.Logger;
|
|
57
|
-
protected readonly start: alepha.HookPrimitive<"start">;
|
|
58
|
-
/**
|
|
59
|
-
* Returns the MQTT topic path with prefix applied (using / separator).
|
|
60
|
-
*/
|
|
61
|
-
prefix(name: string): string;
|
|
62
|
-
/**
|
|
63
|
-
* Strips the prefix from a received MQTT topic path.
|
|
64
|
-
*/
|
|
65
|
-
protected unprefix(topic: string): string;
|
|
66
|
-
/**
|
|
67
|
-
* MQTT uses + as the single-level wildcard character.
|
|
68
|
-
*/
|
|
69
|
-
protected wildcardChar(): string;
|
|
70
|
-
publish(topic: string, message: string, options?: TopicPublishOptions): Promise<void>;
|
|
71
|
-
subscribe(name: string, callback: SubscribeCallback, options?: TopicSubscribeOptions): Promise<UnSubscribeFn>;
|
|
72
|
-
unsubscribe(name: string): Promise<void>;
|
|
73
|
-
}
|
|
74
|
-
//#endregion
|
|
75
|
-
//#region ../../src/topic/mqtt/index.d.ts
|
|
76
|
-
/**
|
|
77
|
-
* Plugin for Alepha Topic that provides MQTT pub/sub capabilities.
|
|
78
|
-
*
|
|
79
|
-
* Users must register `AlephaMqtt` separately for the MQTT client transport.
|
|
80
|
-
*
|
|
81
|
-
* @see {@link MqttTopicProvider}
|
|
82
|
-
* @module alepha.topic.mqtt
|
|
83
|
-
*/
|
|
84
|
-
declare const AlephaTopicMqtt: alepha.Service<alepha.Module>;
|
|
85
|
-
//#endregion
|
|
86
|
-
export { AlephaTopicMqtt, MqttTopicOptions, MqttTopicProvider, mqttTopicOptions };
|
|
87
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/topic/mqtt/providers/MqttTopicProvider.ts","../../../src/topic/mqtt/index.ts"],"mappings":";;;;;;;;;;cAgBa,gBAAA,EAAgB,MAAA,CAAA,IAAA,QAAA,OAAA;UAW3B,MAAA,CAAA,OAAA;AAAA;AAAA,KAEU,gBAAA,GAAmB,MAAA,QAAc,gBAAA,CAAiB,MAAA;AAAA;EAAA,UAGlD,KAAA;IAAA,CACP,gBAAA,CAAiB,GAAA,GAAM,gBAAA;EAAA;AAAA;;;;;;;;YAahB,qBAAA;IACR,IAAA;MACE,GAAA;IAAA;EAAA;EAAA,UAIM,qBAAA;IAvBwD;;AAAE;;;IA6BlE,IAAA;MA1BQ;;;;;;;;MAmCN,GAAA;IAAA;EAAA;AAAA;AAAA,cAOO,iBAAA,SAA0B,aAAA;EAAA,mBAClB,UAAA,EAAU,kBAAA;EAAA,mBACV,OAAA,EAAO,QAAA;;;qBACP,GAAA,EADO,cAAA,CACJ,MAAA;EAAA,mBAEH,KAAA,EAFG,MAAA,CAEE,aAAA;EAZjB;;;EA4BA,MAAA,CAAO,IAAA;EArBe;;;EAAA,UA4BnB,QAAA,CAAS,KAAA;EA1BO;;;EAAA,UAkCP,YAAA,CAAA;EAIN,OAAA,CACX,KAAA,UACA,OAAA,UACA,OAAA,GAAU,mBAAA,GACT,OAAA;EAOU,SAAA,CACX,IAAA,UACA,QAAA,EAAU,iBAAA,EACV,OAAA,GAAU,qBAAA,GACT,OAAA,CAAQ,aAAA;EAaE,WAAA,CAAY,IAAA,WAAe,OAAA;AAAA;;;;;;;;;AA9H1C;;cCEa,eAAA,EAAe,MAAA,CAAA,OAAA,CAW1B,MAAA,CAX0B,MAAA"}
|