@db3.ai/app 0.1.0-beta.1
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 +31 -0
- package/README.md +241 -0
- package/agent-instructions.md +69 -0
- package/bin/db3-agents.mjs +140 -0
- package/bin/db3.mjs +11 -0
- package/dist/ai/AIErrors.d.ts +33 -0
- package/dist/ai/AIErrors.js +43 -0
- package/dist/ai/AIFailover.d.ts +25 -0
- package/dist/ai/AIFailover.js +96 -0
- package/dist/ai/AIProviders.d.ts +35 -0
- package/dist/ai/AIProviders.js +197 -0
- package/dist/ai/AIQuotaDeferredError.d.ts +19 -0
- package/dist/ai/AIQuotaDeferredError.js +25 -0
- package/dist/ai/AIRateLimiter.d.ts +103 -0
- package/dist/ai/AIRateLimiter.js +690 -0
- package/dist/ai/Agent.d.ts +633 -0
- package/dist/ai/Agent.js +2976 -0
- package/dist/ai/AgentHistory.d.ts +11 -0
- package/dist/ai/AgentHistory.js +495 -0
- package/dist/ai/AgentRunJob.d.ts +21 -0
- package/dist/ai/AgentRunJob.js +53 -0
- package/dist/ai/Ai.d.ts +375 -0
- package/dist/ai/Ai.js +1771 -0
- package/dist/ai/AiConversation.d.ts +17 -0
- package/dist/ai/AiConversation.js +38 -0
- package/dist/ai/AiExecutionContext.d.ts +7 -0
- package/dist/ai/AiExecutionContext.js +16 -0
- package/dist/ai/AiMessage.d.ts +43 -0
- package/dist/ai/AiMessage.js +105 -0
- package/dist/ai/AiRateLimitBucket.d.ts +69 -0
- package/dist/ai/AiRateLimitBucket.js +138 -0
- package/dist/ai/AiRateLimitReservation.d.ts +56 -0
- package/dist/ai/AiRateLimitReservation.js +101 -0
- package/dist/ai/AiRequest.d.ts +78 -0
- package/dist/ai/AiRequest.js +384 -0
- package/dist/ai/Estimates.d.ts +26 -0
- package/dist/ai/Estimates.js +34 -0
- package/dist/ai/Models.d.ts +88 -0
- package/dist/ai/Models.js +328 -0
- package/dist/ai/OpenAIProviderError.d.ts +30 -0
- package/dist/ai/OpenAIProviderError.js +77 -0
- package/dist/ai/OpenAIQuotaRetry.d.ts +27 -0
- package/dist/ai/OpenAIQuotaRetry.js +144 -0
- package/dist/ai/ProviderCosts.d.ts +55 -0
- package/dist/ai/ProviderCosts.js +108 -0
- package/dist/ai/ResponsesProviderCall.d.ts +13 -0
- package/dist/ai/ResponsesProviderCall.js +29 -0
- package/dist/ai/agentCitations.d.ts +27 -0
- package/dist/ai/agentCitations.js +153 -0
- package/dist/ai/contracts/AI.d.ts +347 -0
- package/dist/ai/contracts/AI.js +13 -0
- package/dist/ai/contracts/Agent.d.ts +476 -0
- package/dist/ai/contracts/Agent.js +1 -0
- package/dist/ai/contracts/AiRequestRunCostSummary.d.ts +31 -0
- package/dist/ai/contracts/AiRequestRunCostSummary.js +1 -0
- package/dist/ai/contracts/Pricing.d.ts +88 -0
- package/dist/ai/contracts/Pricing.js +1 -0
- package/dist/ai/contracts/Providers.d.ts +68 -0
- package/dist/ai/contracts/Providers.js +1 -0
- package/dist/ai/contracts/QuotaRetry.d.ts +38 -0
- package/dist/ai/contracts/QuotaRetry.js +1 -0
- package/dist/ai/contracts/RateLimits.d.ts +45 -0
- package/dist/ai/contracts/RateLimits.js +1 -0
- package/dist/ai/contracts/ResponsesProviderCall.d.ts +28 -0
- package/dist/ai/contracts/ResponsesProviderCall.js +1 -0
- package/dist/ai/contracts/index.d.ts +8 -0
- package/dist/ai/contracts/index.js +8 -0
- package/dist/ai/index.d.ts +27 -0
- package/dist/ai/index.js +27 -0
- package/dist/ai/registry.d.ts +28 -0
- package/dist/ai/registry.js +49 -0
- package/dist/ai/sdkNodeCompatibility.d.ts +76 -0
- package/dist/ai/toolCallRecovery.d.ts +16 -0
- package/dist/ai/toolCallRecovery.js +71 -0
- package/dist/ai/toolHelpers.d.ts +65 -0
- package/dist/ai/toolHelpers.js +106 -0
- package/dist/auth/Auth.d.ts +641 -0
- package/dist/auth/Auth.js +927 -0
- package/dist/auth/AuthProvider.d.ts +104 -0
- package/dist/auth/AuthProvider.js +185 -0
- package/dist/auth/AuthToken.d.ts +123 -0
- package/dist/auth/AuthToken.js +156 -0
- package/dist/auth/PasswordResetToken.d.ts +33 -0
- package/dist/auth/PasswordResetToken.js +64 -0
- package/dist/auth/UserIdentity.d.ts +46 -0
- package/dist/auth/UserIdentity.js +72 -0
- package/dist/auth/contracts/AuthProviderDriver.d.ts +94 -0
- package/dist/auth/contracts/AuthProviderDriver.js +1 -0
- package/dist/auth/contracts/index.d.ts +1 -0
- package/dist/auth/contracts/index.js +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.js +8 -0
- package/dist/auth/passwordHash.d.ts +26 -0
- package/dist/auth/passwordHash.js +96 -0
- package/dist/auth/providers/GoogleAuthProvider.d.ts +135 -0
- package/dist/auth/providers/GoogleAuthProvider.js +305 -0
- package/dist/auth/providers/PasswordAuthProvider.d.ts +115 -0
- package/dist/auth/providers/PasswordAuthProvider.js +195 -0
- package/dist/auth/providers/index.d.ts +3 -0
- package/dist/auth/providers/index.js +3 -0
- package/dist/auth/providers/resolveAuthProviders.d.ts +29 -0
- package/dist/auth/providers/resolveAuthProviders.js +111 -0
- package/dist/cache/Cache.d.ts +67 -0
- package/dist/cache/Cache.js +115 -0
- package/dist/cache/contracts/CacheDriver.d.ts +10 -0
- package/dist/cache/contracts/CacheDriver.js +1 -0
- package/dist/cache/contracts/CacheOperations.d.ts +26 -0
- package/dist/cache/contracts/CacheOperations.js +1 -0
- package/dist/cache/contracts/CacheOptions.d.ts +51 -0
- package/dist/cache/contracts/CacheOptions.js +1 -0
- package/dist/cache/contracts/CacheRepository.d.ts +45 -0
- package/dist/cache/contracts/CacheRepository.js +1 -0
- package/dist/cache/contracts/index.d.ts +4 -0
- package/dist/cache/contracts/index.js +4 -0
- package/dist/cache/drivers/CacheManagerDriver.d.ts +55 -0
- package/dist/cache/drivers/CacheManagerDriver.js +68 -0
- package/dist/cache/drivers/createCacheDriver.d.ts +8 -0
- package/dist/cache/drivers/createCacheDriver.js +147 -0
- package/dist/cache/index.d.ts +2 -0
- package/dist/cache/index.js +2 -0
- package/dist/cli/Cli.d.ts +17 -0
- package/dist/cli/Cli.js +120 -0
- package/dist/cli/commands/repl.d.ts +9 -0
- package/dist/cli/commands/repl.js +27 -0
- package/dist/cli/contracts/CliCommand.d.ts +30 -0
- package/dist/cli/contracts/CliCommand.js +1 -0
- package/dist/cli/contracts/CliConfig.d.ts +9 -0
- package/dist/cli/contracts/CliConfig.js +1 -0
- package/dist/cli/contracts/CliOptions.d.ts +13 -0
- package/dist/cli/contracts/CliOptions.js +1 -0
- package/dist/cli/contracts/CommandDefinition.d.ts +18 -0
- package/dist/cli/contracts/CommandDefinition.js +1 -0
- package/dist/cli/contracts/ReplOptions.d.ts +11 -0
- package/dist/cli/contracts/ReplOptions.js +1 -0
- package/dist/cli/contracts/index.d.ts +5 -0
- package/dist/cli/contracts/index.js +1 -0
- package/dist/cli/defineCommand.d.ts +10 -0
- package/dist/cli/defineCommand.js +25 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.js +5 -0
- package/dist/cli/runDb3.d.ts +11 -0
- package/dist/cli/runDb3.js +70 -0
- package/dist/cli/runRepl.d.ts +12 -0
- package/dist/cli/runRepl.js +54 -0
- package/dist/config/Config.d.ts +48 -0
- package/dist/config/Config.js +80 -0
- package/dist/config/env.d.ts +26 -0
- package/dist/config/env.js +117 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.js +2 -0
- package/dist/db/ActiveProjection.d.ts +90 -0
- package/dist/db/ActiveProjection.js +134 -0
- package/dist/db/ActiveQueryBuilder.d.ts +268 -0
- package/dist/db/ActiveQueryBuilder.js +621 -0
- package/dist/db/ActiveRecord.d.ts +483 -0
- package/dist/db/ActiveRecord.js +765 -0
- package/dist/db/Database.d.ts +277 -0
- package/dist/db/Database.js +827 -0
- package/dist/db/FieldType.d.ts +540 -0
- package/dist/db/FieldType.js +706 -0
- package/dist/db/SoftDeletes.d.ts +30 -0
- package/dist/db/SoftDeletes.js +93 -0
- package/dist/db/commands/check.d.ts +6 -0
- package/dist/db/commands/check.js +8 -0
- package/dist/db/commands/index.d.ts +6 -0
- package/dist/db/commands/index.js +17 -0
- package/dist/db/commands/makeMigration.d.ts +7 -0
- package/dist/db/commands/makeMigration.js +9 -0
- package/dist/db/commands/migrate.d.ts +6 -0
- package/dist/db/commands/migrate.js +8 -0
- package/dist/db/connection.d.ts +10 -0
- package/dist/db/connection.js +55 -0
- package/dist/db/contracts/ActiveRecordDefinition.d.ts +64 -0
- package/dist/db/contracts/ActiveRecordDefinition.js +1 -0
- package/dist/db/contracts/DatabaseBackup.d.ts +7 -0
- package/dist/db/contracts/DatabaseBackup.js +1 -0
- package/dist/db/contracts/DatabaseMigrationsConfig.d.ts +9 -0
- package/dist/db/contracts/DatabaseMigrationsConfig.js +1 -0
- package/dist/db/contracts/index.d.ts +3 -0
- package/dist/db/contracts/index.js +3 -0
- package/dist/db/dialects/columnTypes.d.ts +20 -0
- package/dist/db/dialects/columnTypes.js +67 -0
- package/dist/db/dialects/index.d.ts +6 -0
- package/dist/db/dialects/index.js +6 -0
- package/dist/db/dialects/mariadb.d.ts +7 -0
- package/dist/db/dialects/mariadb.js +35 -0
- package/dist/db/dialects/mysql.d.ts +14 -0
- package/dist/db/dialects/mysql.js +203 -0
- package/dist/db/dialects/postgres.d.ts +5 -0
- package/dist/db/dialects/postgres.js +106 -0
- package/dist/db/dialects/resolveDialect.d.ts +14 -0
- package/dist/db/dialects/resolveDialect.js +57 -0
- package/dist/db/dialects/types.d.ts +44 -0
- package/dist/db/dialects/types.js +1 -0
- package/dist/db/errors.d.ts +15 -0
- package/dist/db/errors.js +20 -0
- package/dist/db/fields/BooleanField.d.ts +29 -0
- package/dist/db/fields/BooleanField.js +89 -0
- package/dist/db/fields/CharUuidField.d.ts +29 -0
- package/dist/db/fields/CharUuidField.js +63 -0
- package/dist/db/fields/ChoiceStringField.d.ts +25 -0
- package/dist/db/fields/ChoiceStringField.js +58 -0
- package/dist/db/fields/DecimalField.d.ts +20 -0
- package/dist/db/fields/DecimalField.js +105 -0
- package/dist/db/fields/EmailField.d.ts +31 -0
- package/dist/db/fields/EmailField.js +52 -0
- package/dist/db/fields/EncryptedJsonField.d.ts +82 -0
- package/dist/db/fields/EncryptedJsonField.js +169 -0
- package/dist/db/fields/IntegerField.d.ts +35 -0
- package/dist/db/fields/IntegerField.js +139 -0
- package/dist/db/fields/JsonField.d.ts +40 -0
- package/dist/db/fields/JsonField.js +79 -0
- package/dist/db/fields/JsonStringField.d.ts +21 -0
- package/dist/db/fields/JsonStringField.js +41 -0
- package/dist/db/fields/LinkField.d.ts +180 -0
- package/dist/db/fields/LinkField.js +359 -0
- package/dist/db/fields/PasswordField.d.ts +93 -0
- package/dist/db/fields/PasswordField.js +180 -0
- package/dist/db/fields/StringField.d.ts +43 -0
- package/dist/db/fields/StringField.js +102 -0
- package/dist/db/fields/StringListField.d.ts +54 -0
- package/dist/db/fields/StringListField.js +124 -0
- package/dist/db/fields/TextField.d.ts +25 -0
- package/dist/db/fields/TextField.js +44 -0
- package/dist/db/fields/TimestampField.d.ts +47 -0
- package/dist/db/fields/TimestampField.js +97 -0
- package/dist/db/fields/UlidField.d.ts +69 -0
- package/dist/db/fields/UlidField.js +114 -0
- package/dist/db/fields/UrlField.d.ts +30 -0
- package/dist/db/fields/UrlField.js +61 -0
- package/dist/db/fields/VectorField.d.ts +64 -0
- package/dist/db/fields/VectorField.js +180 -0
- package/dist/db/fields/createField.d.ts +2 -0
- package/dist/db/fields/createField.js +13 -0
- package/dist/db/fields/field.d.ts +36 -0
- package/dist/db/fields/field.js +101 -0
- package/dist/db/fields/index.d.ts +18 -0
- package/dist/db/fields/index.js +18 -0
- package/dist/db/fields/resolveFields.d.ts +17 -0
- package/dist/db/fields/resolveFields.js +38 -0
- package/dist/db/index.d.ts +13 -0
- package/dist/db/index.js +13 -0
- package/dist/db/migrations/DatabaseMigrationManager.d.ts +57 -0
- package/dist/db/migrations/DatabaseMigrationManager.js +589 -0
- package/dist/db/migrations/DatabaseSchemaInspector.d.ts +19 -0
- package/dist/db/migrations/DatabaseSchemaInspector.js +384 -0
- package/dist/db/migrations/KnexMigrationRenderer.d.ts +11 -0
- package/dist/db/migrations/KnexMigrationRenderer.js +390 -0
- package/dist/db/migrations/ModelSchemaCollector.d.ts +29 -0
- package/dist/db/migrations/ModelSchemaCollector.js +183 -0
- package/dist/db/migrations/SchemaDiffer.d.ts +13 -0
- package/dist/db/migrations/SchemaDiffer.js +427 -0
- package/dist/db/migrations/SchemaNames.d.ts +27 -0
- package/dist/db/migrations/SchemaNames.js +46 -0
- package/dist/db/migrations/SchemaSnapshotSerializer.d.ts +30 -0
- package/dist/db/migrations/SchemaSnapshotSerializer.js +49 -0
- package/dist/db/migrations/contracts/DatabaseMigration.d.ts +118 -0
- package/dist/db/migrations/contracts/DatabaseMigration.js +1 -0
- package/dist/db/migrations/contracts/SchemaChange.d.ts +83 -0
- package/dist/db/migrations/contracts/SchemaChange.js +1 -0
- package/dist/db/migrations/contracts/SchemaSnapshot.d.ts +94 -0
- package/dist/db/migrations/contracts/SchemaSnapshot.js +1 -0
- package/dist/db/migrations/contracts/index.d.ts +3 -0
- package/dist/db/migrations/contracts/index.js +3 -0
- package/dist/db/migrations/errors.d.ts +35 -0
- package/dist/db/migrations/errors.js +45 -0
- package/dist/db/migrations/index.d.ts +10 -0
- package/dist/db/migrations/index.js +10 -0
- package/dist/db/migrations/promoteDestructiveSchemaChanges.d.ts +19 -0
- package/dist/db/migrations/promoteDestructiveSchemaChanges.js +102 -0
- package/dist/db/queryMonitor.d.ts +142 -0
- package/dist/db/queryMonitor.js +357 -0
- package/dist/db/sqlErrors.d.ts +11 -0
- package/dist/db/sqlErrors.js +17 -0
- package/dist/db/test/db.d.ts +11 -0
- package/dist/db/test/db.js +109 -0
- package/dist/devtools/HttpEventDispatcher.d.ts +19 -0
- package/dist/devtools/HttpEventDispatcher.js +180 -0
- package/dist/devtools/contracts/DevtoolsEventDispatcher.d.ts +53 -0
- package/dist/devtools/contracts/DevtoolsEventDispatcher.js +1 -0
- package/dist/devtools/contracts/index.d.ts +1 -0
- package/dist/devtools/contracts/index.js +1 -0
- package/dist/devtools/environment.d.ts +10 -0
- package/dist/devtools/environment.js +14 -0
- package/dist/devtools/index.d.ts +3 -0
- package/dist/devtools/index.js +3 -0
- package/dist/events/Events.d.ts +70 -0
- package/dist/events/Events.js +126 -0
- package/dist/events/contracts/EventConstructor.d.ts +12 -0
- package/dist/events/contracts/EventConstructor.js +1 -0
- package/dist/events/contracts/EventListener.d.ts +6 -0
- package/dist/events/contracts/EventListener.js +1 -0
- package/dist/events/contracts/EventUnsubscribe.d.ts +4 -0
- package/dist/events/contracts/EventUnsubscribe.js +1 -0
- package/dist/events/contracts/index.d.ts +3 -0
- package/dist/events/contracts/index.js +3 -0
- package/dist/events/index.d.ts +2 -0
- package/dist/events/index.js +2 -0
- package/dist/flows/FlowBlockRegistry.d.ts +39 -0
- package/dist/flows/FlowBlockRegistry.js +66 -0
- package/dist/flows/FlowCompiler.d.ts +26 -0
- package/dist/flows/FlowCompiler.js +488 -0
- package/dist/flows/FlowDefinitionError.d.ts +21 -0
- package/dist/flows/FlowDefinitionError.js +16 -0
- package/dist/flows/FlowStepJob.d.ts +28 -0
- package/dist/flows/FlowStepJob.js +31 -0
- package/dist/flows/FlowValueValidator.d.ts +32 -0
- package/dist/flows/FlowValueValidator.js +105 -0
- package/dist/flows/Flows.d.ts +102 -0
- package/dist/flows/Flows.js +871 -0
- package/dist/flows/blocks/FlowInput.d.ts +10 -0
- package/dist/flows/blocks/FlowInput.js +29 -0
- package/dist/flows/blocks/FlowOutput.d.ts +10 -0
- package/dist/flows/blocks/FlowOutput.js +29 -0
- package/dist/flows/blocks/Subflow.d.ts +10 -0
- package/dist/flows/blocks/Subflow.js +21 -0
- package/dist/flows/blocks/index.d.ts +6 -0
- package/dist/flows/blocks/index.js +8 -0
- package/dist/flows/constants.d.ts +55 -0
- package/dist/flows/constants.js +47 -0
- package/dist/flows/contracts/FlowBlock.d.ts +64 -0
- package/dist/flows/contracts/FlowBlock.js +1 -0
- package/dist/flows/contracts/FlowCompiler.d.ts +30 -0
- package/dist/flows/contracts/FlowCompiler.js +1 -0
- package/dist/flows/contracts/FlowDefinition.d.ts +118 -0
- package/dist/flows/contracts/FlowDefinition.js +1 -0
- package/dist/flows/contracts/FlowDefinitionStore.d.ts +47 -0
- package/dist/flows/contracts/FlowDefinitionStore.js +1 -0
- package/dist/flows/contracts/FlowRun.d.ts +40 -0
- package/dist/flows/contracts/FlowRun.js +1 -0
- package/dist/flows/contracts/FlowValue.d.ts +49 -0
- package/dist/flows/contracts/FlowValue.js +1 -0
- package/dist/flows/contracts/FlowsService.d.ts +37 -0
- package/dist/flows/contracts/FlowsService.js +1 -0
- package/dist/flows/contracts/index.d.ts +7 -0
- package/dist/flows/contracts/index.js +7 -0
- package/dist/flows/defineBlock.d.ts +18 -0
- package/dist/flows/defineBlock.js +19 -0
- package/dist/flows/drivers/FileFlowDefinitionStore.d.ts +53 -0
- package/dist/flows/drivers/FileFlowDefinitionStore.js +313 -0
- package/dist/flows/drivers/index.d.ts +1 -0
- package/dist/flows/drivers/index.js +1 -0
- package/dist/flows/errors.d.ts +8 -0
- package/dist/flows/errors.js +19 -0
- package/dist/flows/index.d.ts +13 -0
- package/dist/flows/index.js +13 -0
- package/dist/flows/models/FlowRun.d.ts +55 -0
- package/dist/flows/models/FlowRun.js +126 -0
- package/dist/flows/models/FlowRunEvent.d.ts +41 -0
- package/dist/flows/models/FlowRunEvent.js +85 -0
- package/dist/flows/models/FlowStepRun.d.ts +56 -0
- package/dist/flows/models/FlowStepRun.js +137 -0
- package/dist/flows/models/index.d.ts +10 -0
- package/dist/flows/models/index.js +14 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +16 -0
- package/dist/logging/Log.d.ts +66 -0
- package/dist/logging/Log.js +79 -0
- package/dist/logging/contracts/HttpExchange.d.ts +50 -0
- package/dist/logging/contracts/HttpExchange.js +1 -0
- package/dist/logging/contracts/Logger.d.ts +41 -0
- package/dist/logging/contracts/Logger.js +1 -0
- package/dist/logging/contracts/LoggerDriver.d.ts +16 -0
- package/dist/logging/contracts/LoggerDriver.js +1 -0
- package/dist/logging/contracts/LoggingOptions.d.ts +49 -0
- package/dist/logging/contracts/LoggingOptions.js +1 -0
- package/dist/logging/contracts/index.d.ts +4 -0
- package/dist/logging/contracts/index.js +4 -0
- package/dist/logging/drivers/PinoLoggerDriver.d.ts +24 -0
- package/dist/logging/drivers/PinoLoggerDriver.js +291 -0
- package/dist/logging/drivers/index.d.ts +1 -0
- package/dist/logging/drivers/index.js +1 -0
- package/dist/logging/index.d.ts +3 -0
- package/dist/logging/index.js +3 -0
- package/dist/logging/transports/DevtoolsLogTransport.d.ts +35 -0
- package/dist/logging/transports/DevtoolsLogTransport.js +96 -0
- package/dist/mail/Mail.d.ts +62 -0
- package/dist/mail/Mail.js +98 -0
- package/dist/mail/index.d.ts +4 -0
- package/dist/mail/index.js +4 -0
- package/dist/mail/transports/FileMailTransport.d.ts +12 -0
- package/dist/mail/transports/FileMailTransport.js +41 -0
- package/dist/mail/transports/MailgunTransport.d.ts +22 -0
- package/dist/mail/transports/MailgunTransport.js +57 -0
- package/dist/mail/transports/ResendTransport.d.ts +14 -0
- package/dist/mail/transports/ResendTransport.js +55 -0
- package/dist/media/MediaFile.d.ts +48 -0
- package/dist/media/MediaFile.js +104 -0
- package/dist/media/MediaItem.d.ts +47 -0
- package/dist/media/MediaItem.js +106 -0
- package/dist/media/MediaLibrary.d.ts +42 -0
- package/dist/media/MediaLibrary.js +94 -0
- package/dist/media/MediaManager.d.ts +159 -0
- package/dist/media/MediaManager.js +754 -0
- package/dist/media/constants.d.ts +27 -0
- package/dist/media/constants.js +19 -0
- package/dist/media/contracts/MediaOptions.d.ts +8 -0
- package/dist/media/contracts/MediaOptions.js +1 -0
- package/dist/media/contracts/index.d.ts +1 -0
- package/dist/media/contracts/index.js +1 -0
- package/dist/media/image/ImageReconstructionError.d.ts +15 -0
- package/dist/media/image/ImageReconstructionError.js +18 -0
- package/dist/media/image/ImageVariantRenderer.d.ts +44 -0
- package/dist/media/image/ImageVariantRenderer.js +337 -0
- package/dist/media/image/ImageVariantRequest.d.ts +28 -0
- package/dist/media/image/ImageVariantRequest.js +55 -0
- package/dist/media/image/contracts/ImageProcessor.d.ts +46 -0
- package/dist/media/image/contracts/ImageProcessor.js +1 -0
- package/dist/media/image/contracts/ImageVariant.d.ts +31 -0
- package/dist/media/image/contracts/ImageVariant.js +7 -0
- package/dist/media/image/contracts/ImageVariantCacheOptions.d.ts +20 -0
- package/dist/media/image/contracts/ImageVariantCacheOptions.js +1 -0
- package/dist/media/image/contracts/index.d.ts +3 -0
- package/dist/media/image/contracts/index.js +3 -0
- package/dist/media/image/index.d.ts +5 -0
- package/dist/media/image/index.js +5 -0
- package/dist/media/image/processors/SharpImageProcessor.d.ts +25 -0
- package/dist/media/image/processors/SharpImageProcessor.js +112 -0
- package/dist/media/image/processors/index.d.ts +1 -0
- package/dist/media/image/processors/index.js +1 -0
- package/dist/media/index.d.ts +8 -0
- package/dist/media/index.js +8 -0
- package/dist/media/types.d.ts +129 -0
- package/dist/media/types.js +1 -0
- package/dist/queue/FailedJob.d.ts +31 -0
- package/dist/queue/FailedJob.js +41 -0
- package/dist/queue/Queue.d.ts +208 -0
- package/dist/queue/Queue.js +685 -0
- package/dist/queue/QueueEvents.d.ts +31 -0
- package/dist/queue/QueueEvents.js +49 -0
- package/dist/queue/QueueRetryLaterError.d.ts +23 -0
- package/dist/queue/QueueRetryLaterError.js +34 -0
- package/dist/queue/QueueWorker.d.ts +72 -0
- package/dist/queue/QueueWorker.js +236 -0
- package/dist/queue/QueueableJob.d.ts +109 -0
- package/dist/queue/QueueableJob.js +137 -0
- package/dist/queue/QueuedJob.d.ts +31 -0
- package/dist/queue/QueuedJob.js +52 -0
- package/dist/queue/RetryPolicy.d.ts +51 -0
- package/dist/queue/RetryPolicy.js +84 -0
- package/dist/queue/commands/index.d.ts +4 -0
- package/dist/queue/commands/index.js +11 -0
- package/dist/queue/commands/makeJob.d.ts +7 -0
- package/dist/queue/commands/makeJob.js +9 -0
- package/dist/queue/console.d.ts +60 -0
- package/dist/queue/console.js +348 -0
- package/dist/queue/contracts/CreateJob.d.ts +12 -0
- package/dist/queue/contracts/CreateJob.js +1 -0
- package/dist/queue/contracts/QueueDriver.d.ts +122 -0
- package/dist/queue/contracts/QueueDriver.js +1 -0
- package/dist/queue/contracts/QueueEvents.d.ts +61 -0
- package/dist/queue/contracts/QueueEvents.js +1 -0
- package/dist/queue/contracts/QueuePayload.d.ts +136 -0
- package/dist/queue/contracts/QueuePayload.js +1 -0
- package/dist/queue/contracts/QueueRetry.d.ts +43 -0
- package/dist/queue/contracts/QueueRetry.js +1 -0
- package/dist/queue/contracts/QueueService.d.ts +199 -0
- package/dist/queue/contracts/QueueService.js +1 -0
- package/dist/queue/contracts/QueueWorkerLifecycle.d.ts +65 -0
- package/dist/queue/contracts/QueueWorkerLifecycle.js +1 -0
- package/dist/queue/contracts/QueueableJob.d.ts +50 -0
- package/dist/queue/contracts/QueueableJob.js +1 -0
- package/dist/queue/contracts/RedisQueueDriver.d.ts +37 -0
- package/dist/queue/contracts/RedisQueueDriver.js +1 -0
- package/dist/queue/contracts/index.d.ts +9 -0
- package/dist/queue/contracts/index.js +9 -0
- package/dist/queue/createJob.d.ts +18 -0
- package/dist/queue/createJob.js +52 -0
- package/dist/queue/drivers/DatabaseQueueDriver.d.ts +83 -0
- package/dist/queue/drivers/DatabaseQueueDriver.js +393 -0
- package/dist/queue/drivers/RedisQueueDriver.d.ts +102 -0
- package/dist/queue/drivers/RedisQueueDriver.js +641 -0
- package/dist/queue/index.d.ts +13 -0
- package/dist/queue/index.js +13 -0
- package/dist/queue/queueMonitor.d.ts +133 -0
- package/dist/queue/queueMonitor.js +238 -0
- package/dist/scheduler/ScheduledCall.d.ts +25 -0
- package/dist/scheduler/ScheduledCall.js +31 -0
- package/dist/scheduler/ScheduledEvent.d.ts +74 -0
- package/dist/scheduler/ScheduledEvent.js +115 -0
- package/dist/scheduler/ScheduledJob.d.ts +34 -0
- package/dist/scheduler/ScheduledJob.js +50 -0
- package/dist/scheduler/ScheduledOccurrence.d.ts +74 -0
- package/dist/scheduler/ScheduledOccurrence.js +194 -0
- package/dist/scheduler/ScheduledOccurrenceRecorder.d.ts +34 -0
- package/dist/scheduler/ScheduledOccurrenceRecorder.js +106 -0
- package/dist/scheduler/Scheduler.d.ts +76 -0
- package/dist/scheduler/Scheduler.js +186 -0
- package/dist/scheduler/SchedulerWorker.d.ts +37 -0
- package/dist/scheduler/SchedulerWorker.js +119 -0
- package/dist/scheduler/console.d.ts +18 -0
- package/dist/scheduler/console.js +288 -0
- package/dist/scheduler/constants.d.ts +13 -0
- package/dist/scheduler/constants.js +23 -0
- package/dist/scheduler/contracts/Scheduler.d.ts +104 -0
- package/dist/scheduler/contracts/Scheduler.js +1 -0
- package/dist/scheduler/contracts/SchedulerConsole.d.ts +37 -0
- package/dist/scheduler/contracts/SchedulerConsole.js +1 -0
- package/dist/scheduler/contracts/SchedulerWorker.d.ts +18 -0
- package/dist/scheduler/contracts/SchedulerWorker.js +1 -0
- package/dist/scheduler/contracts/index.d.ts +3 -0
- package/dist/scheduler/contracts/index.js +3 -0
- package/dist/scheduler/index.d.ts +9 -0
- package/dist/scheduler/index.js +9 -0
- package/dist/scheduler/scheduleTime.d.ts +30 -0
- package/dist/scheduler/scheduleTime.js +64 -0
- package/dist/security/Security.d.ts +60 -0
- package/dist/security/Security.js +252 -0
- package/dist/security/SecurityError.d.ts +13 -0
- package/dist/security/SecurityError.js +16 -0
- package/dist/security/contracts/SecurityOptions.d.ts +17 -0
- package/dist/security/contracts/SecurityOptions.js +1 -0
- package/dist/security/contracts/SecurityPayload.d.ts +13 -0
- package/dist/security/contracts/SecurityPayload.js +1 -0
- package/dist/security/contracts/index.d.ts +2 -0
- package/dist/security/contracts/index.js +2 -0
- package/dist/security/ensureAppKey.d.ts +16 -0
- package/dist/security/ensureAppKey.js +69 -0
- package/dist/security/index.d.ts +4 -0
- package/dist/security/index.js +4 -0
- package/dist/serialization/Serializable.d.ts +17 -0
- package/dist/serialization/Serializable.js +1 -0
- package/dist/serialization/SerializationError.d.ts +40 -0
- package/dist/serialization/SerializationError.js +42 -0
- package/dist/serialization/SerializationRegistry.d.ts +76 -0
- package/dist/serialization/SerializationRegistry.js +153 -0
- package/dist/serialization/SerializationRegistryError.d.ts +18 -0
- package/dist/serialization/SerializationRegistryError.js +18 -0
- package/dist/serialization/Serializer.d.ts +37 -0
- package/dist/serialization/Serializer.js +477 -0
- package/dist/serialization/contracts/SerializableClass.d.ts +20 -0
- package/dist/serialization/contracts/SerializableClass.js +1 -0
- package/dist/serialization/contracts/SerializedValue.d.ts +59 -0
- package/dist/serialization/contracts/SerializedValue.js +19 -0
- package/dist/serialization/contracts/SerializerOptions.d.ts +17 -0
- package/dist/serialization/contracts/SerializerOptions.js +1 -0
- package/dist/serialization/contracts/SerializerService.d.ts +26 -0
- package/dist/serialization/contracts/SerializerService.js +1 -0
- package/dist/serialization/contracts/index.d.ts +4 -0
- package/dist/serialization/contracts/index.js +4 -0
- package/dist/serialization/index.d.ts +6 -0
- package/dist/serialization/index.js +6 -0
- package/dist/server/App.d.ts +141 -0
- package/dist/server/App.js +225 -0
- package/dist/server/RequestContext.d.ts +42 -0
- package/dist/server/RequestContext.js +95 -0
- package/dist/server/appContext.d.ts +34 -0
- package/dist/server/appContext.js +42 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.js +3 -0
- package/dist/ssr/constants.d.ts +6 -0
- package/dist/ssr/constants.js +6 -0
- package/dist/ssr/contracts/DocumentHead.d.ts +32 -0
- package/dist/ssr/contracts/DocumentHead.js +1 -0
- package/dist/ssr/contracts/SsrRenderContext.d.ts +23 -0
- package/dist/ssr/contracts/SsrRenderContext.js +1 -0
- package/dist/ssr/contracts/SsrRenderResult.d.ts +21 -0
- package/dist/ssr/contracts/SsrRenderResult.js +1 -0
- package/dist/ssr/contracts/SsrRenderer.d.ts +9 -0
- package/dist/ssr/contracts/SsrRenderer.js +1 -0
- package/dist/ssr/contracts/SsrRequest.d.ts +16 -0
- package/dist/ssr/contracts/SsrRequest.js +1 -0
- package/dist/ssr/contracts/index.d.ts +5 -0
- package/dist/ssr/contracts/index.js +1 -0
- package/dist/ssr/createSsrRenderContext.d.ts +9 -0
- package/dist/ssr/createSsrRenderContext.js +20 -0
- package/dist/ssr/fastify/contracts/FastifySsrOptions.d.ts +21 -0
- package/dist/ssr/fastify/contracts/FastifySsrOptions.js +1 -0
- package/dist/ssr/fastify/contracts/index.d.ts +1 -0
- package/dist/ssr/fastify/contracts/index.js +1 -0
- package/dist/ssr/fastify/fastifySsr.d.ts +25 -0
- package/dist/ssr/fastify/fastifySsr.js +89 -0
- package/dist/ssr/fastify/index.d.ts +2 -0
- package/dist/ssr/fastify/index.js +1 -0
- package/dist/ssr/index.d.ts +6 -0
- package/dist/ssr/index.js +5 -0
- package/dist/ssr/renderDocumentHead.d.ts +8 -0
- package/dist/ssr/renderDocumentHead.js +62 -0
- package/dist/ssr/renderSsrDocument.d.ts +14 -0
- package/dist/ssr/renderSsrDocument.js +28 -0
- package/dist/ssr/serializeSsrState.d.ts +10 -0
- package/dist/ssr/serializeSsrState.js +18 -0
- package/dist/ssr/vite/contracts/ViteSsrOptions.d.ts +45 -0
- package/dist/ssr/vite/contracts/ViteSsrOptions.js +1 -0
- package/dist/ssr/vite/contracts/index.d.ts +1 -0
- package/dist/ssr/vite/contracts/index.js +1 -0
- package/dist/ssr/vite/fastifyViteSsr.d.ts +24 -0
- package/dist/ssr/vite/fastifyViteSsr.js +213 -0
- package/dist/ssr/vite/index.d.ts +4 -0
- package/dist/ssr/vite/index.js +2 -0
- package/dist/ssr/vite/viteSsrManifest.d.ts +16 -0
- package/dist/ssr/vite/viteSsrManifest.js +63 -0
- package/dist/storage/Storage.d.ts +244 -0
- package/dist/storage/Storage.js +348 -0
- package/dist/storage/contents.d.ts +8 -0
- package/dist/storage/contents.js +18 -0
- package/dist/storage/contracts/StorageListing.d.ts +50 -0
- package/dist/storage/contracts/StorageListing.js +1 -0
- package/dist/storage/contracts/index.d.ts +1 -0
- package/dist/storage/contracts/index.js +1 -0
- package/dist/storage/drivers/FlystorageDisk.d.ts +185 -0
- package/dist/storage/drivers/FlystorageDisk.js +250 -0
- package/dist/storage/drivers/FlystorageListing.d.ts +27 -0
- package/dist/storage/drivers/FlystorageListing.js +69 -0
- package/dist/storage/drivers/LocalStorageDisk.d.ts +25 -0
- package/dist/storage/drivers/LocalStorageDisk.js +38 -0
- package/dist/storage/drivers/S3StorageDisk.d.ts +17 -0
- package/dist/storage/drivers/S3StorageDisk.js +102 -0
- package/dist/storage/drivers/index.d.ts +3 -0
- package/dist/storage/drivers/index.js +3 -0
- package/dist/storage/index.d.ts +7 -0
- package/dist/storage/index.js +7 -0
- package/dist/storage/mime.d.ts +7 -0
- package/dist/storage/mime.js +28 -0
- package/dist/storage/path.d.ts +22 -0
- package/dist/storage/path.js +61 -0
- package/dist/storage/types.d.ts +218 -0
- package/dist/storage/types.js +1 -0
- package/dist/url/UrlGenerator.d.ts +32 -0
- package/dist/url/UrlGenerator.js +61 -0
- package/dist/url/contracts/UrlGeneratorOptions.d.ts +13 -0
- package/dist/url/contracts/UrlGeneratorOptions.js +1 -0
- package/dist/url/contracts/index.d.ts +1 -0
- package/dist/url/contracts/index.js +1 -0
- package/dist/url/index.d.ts +2 -0
- package/dist/url/index.js +2 -0
- package/dist/validation/index.d.ts +28 -0
- package/dist/validation/index.js +260 -0
- package/package.json +290 -0
- package/src/ai/AIErrors.ts +46 -0
- package/src/ai/AIFailover.ts +101 -0
- package/src/ai/AIProviders.ts +228 -0
- package/src/ai/AIQuotaDeferredError.ts +26 -0
- package/src/ai/AIRateLimiter.ts +880 -0
- package/src/ai/Agent.ts +3630 -0
- package/src/ai/AgentHistory.ts +576 -0
- package/src/ai/AgentRunJob.ts +65 -0
- package/src/ai/Ai.ts +2176 -0
- package/src/ai/AiConversation.ts +49 -0
- package/src/ai/AiExecutionContext.ts +19 -0
- package/src/ai/AiMessage.ts +131 -0
- package/src/ai/AiRateLimitBucket.ts +163 -0
- package/src/ai/AiRateLimitReservation.ts +117 -0
- package/src/ai/AiRequest.ts +466 -0
- package/src/ai/Estimates.ts +36 -0
- package/src/ai/Models.ts +373 -0
- package/src/ai/OpenAIProviderError.ts +98 -0
- package/src/ai/OpenAIQuotaRetry.ts +183 -0
- package/src/ai/ProviderCosts.ts +156 -0
- package/src/ai/README.md +187 -0
- package/src/ai/ResponsesProviderCall.ts +34 -0
- package/src/ai/agentCitations.ts +186 -0
- package/src/ai/contracts/AI.ts +380 -0
- package/src/ai/contracts/Agent.ts +539 -0
- package/src/ai/contracts/AiRequestRunCostSummary.ts +31 -0
- package/src/ai/contracts/Pricing.ts +95 -0
- package/src/ai/contracts/Providers.ts +73 -0
- package/src/ai/contracts/QuotaRetry.ts +39 -0
- package/src/ai/contracts/RateLimits.ts +49 -0
- package/src/ai/contracts/ResponsesProviderCall.ts +30 -0
- package/src/ai/contracts/index.ts +8 -0
- package/src/ai/examples/Conversation.ts +12 -0
- package/src/ai/examples/HelpAgent.ts +27 -0
- package/src/ai/examples/createHelpImage.ts +13 -0
- package/src/ai/index.ts +27 -0
- package/src/ai/registry.ts +70 -0
- package/src/ai/sdkNodeCompatibility.d.ts +76 -0
- package/src/ai/toolCallRecovery.ts +82 -0
- package/src/ai/toolHelpers.ts +145 -0
- package/src/auth/Auth.ts +1422 -0
- package/src/auth/AuthProvider.ts +251 -0
- package/src/auth/AuthToken.ts +239 -0
- package/src/auth/PasswordResetToken.ts +93 -0
- package/src/auth/README.md +396 -0
- package/src/auth/UserIdentity.ts +112 -0
- package/src/auth/contracts/AuthProviderDriver.ts +114 -0
- package/src/auth/contracts/index.ts +1 -0
- package/src/auth/examples/runPasswordAuth.ts +45 -0
- package/src/auth/index.ts +8 -0
- package/src/auth/passwordHash.ts +160 -0
- package/src/auth/providers/GoogleAuthProvider.ts +470 -0
- package/src/auth/providers/PasswordAuthProvider.ts +256 -0
- package/src/auth/providers/index.ts +3 -0
- package/src/auth/providers/resolveAuthProviders.ts +166 -0
- package/src/cache/Cache.ts +151 -0
- package/src/cache/README.md +137 -0
- package/src/cache/contracts/CacheDriver.ts +11 -0
- package/src/cache/contracts/CacheOperations.ts +28 -0
- package/src/cache/contracts/CacheOptions.ts +56 -0
- package/src/cache/contracts/CacheRepository.ts +62 -0
- package/src/cache/contracts/index.ts +4 -0
- package/src/cache/drivers/CacheManagerDriver.ts +84 -0
- package/src/cache/drivers/createCacheDriver.ts +191 -0
- package/src/cache/examples/runNoteCache.ts +37 -0
- package/src/cache/index.ts +2 -0
- package/src/cli/Cli.ts +110 -0
- package/src/cli/README.md +164 -0
- package/src/cli/commands/repl.ts +29 -0
- package/src/cli/contracts/CliCommand.ts +33 -0
- package/src/cli/contracts/CliConfig.ts +10 -0
- package/src/cli/contracts/CliOptions.ts +13 -0
- package/src/cli/contracts/CommandDefinition.ts +19 -0
- package/src/cli/contracts/ReplOptions.ts +11 -0
- package/src/cli/contracts/index.ts +5 -0
- package/src/cli/defineCommand.ts +25 -0
- package/src/cli/index.ts +5 -0
- package/src/cli/runDb3.ts +63 -0
- package/src/cli/runRepl.ts +55 -0
- package/src/config/Config.ts +110 -0
- package/src/config/README.md +142 -0
- package/src/config/env.ts +164 -0
- package/src/config/examples/loadNotesConfig.ts +29 -0
- package/src/config/examples/runConfig.ts +40 -0
- package/src/config/index.ts +2 -0
- package/src/db/ActiveProjection.ts +311 -0
- package/src/db/ActiveQueryBuilder.ts +831 -0
- package/src/db/ActiveRecord.ts +1317 -0
- package/src/db/Database.ts +1283 -0
- package/src/db/FieldType.ts +1243 -0
- package/src/db/README.md +508 -0
- package/src/db/SoftDeletes.ts +158 -0
- package/src/db/commands/check.ts +10 -0
- package/src/db/commands/index.ts +19 -0
- package/src/db/commands/makeMigration.ts +11 -0
- package/src/db/commands/migrate.ts +10 -0
- package/src/db/connection.ts +68 -0
- package/src/db/contracts/ActiveRecordDefinition.ts +69 -0
- package/src/db/contracts/DatabaseBackup.ts +7 -0
- package/src/db/contracts/DatabaseMigrationsConfig.ts +10 -0
- package/src/db/contracts/index.ts +3 -0
- package/src/db/dialects/columnTypes.ts +103 -0
- package/src/db/dialects/index.ts +6 -0
- package/src/db/dialects/mariadb.ts +51 -0
- package/src/db/dialects/mysql.ts +277 -0
- package/src/db/dialects/postgres.ts +143 -0
- package/src/db/dialects/resolveDialect.ts +88 -0
- package/src/db/dialects/types.ts +59 -0
- package/src/db/errors.ts +22 -0
- package/src/db/examples/DefinedUser.ts +20 -0
- package/src/db/examples/FieldNote.ts +27 -0
- package/src/db/examples/KnowledgeNote.ts +29 -0
- package/src/db/examples/NoteCodeField.ts +9 -0
- package/src/db/examples/createNotesTogether.ts +24 -0
- package/src/db/examples/outputs/workspace-notes.json +9 -0
- package/src/db/examples/runFieldNotes.ts +51 -0
- package/src/db/examples/runNoteMigrations.ts +64 -0
- package/src/db/examples/runWorkspaceNotes.ts +86 -0
- package/src/db/examples/workspaceNotes.ts +57 -0
- package/src/db/fields/BooleanField.ts +128 -0
- package/src/db/fields/CharUuidField.ts +91 -0
- package/src/db/fields/ChoiceStringField.ts +97 -0
- package/src/db/fields/DecimalField.ts +157 -0
- package/src/db/fields/EmailField.ts +79 -0
- package/src/db/fields/EncryptedJsonField.ts +211 -0
- package/src/db/fields/IntegerField.ts +200 -0
- package/src/db/fields/JsonField.ts +108 -0
- package/src/db/fields/JsonStringField.ts +63 -0
- package/src/db/fields/LinkField.ts +502 -0
- package/src/db/fields/PasswordField.ts +294 -0
- package/src/db/fields/StringField.ts +154 -0
- package/src/db/fields/StringListField.ts +179 -0
- package/src/db/fields/TextField.ts +71 -0
- package/src/db/fields/TimestampField.ts +164 -0
- package/src/db/fields/UlidField.ts +189 -0
- package/src/db/fields/UrlField.ts +97 -0
- package/src/db/fields/VectorField.ts +266 -0
- package/src/db/fields/createField.ts +22 -0
- package/src/db/fields/field.ts +209 -0
- package/src/db/fields/index.ts +76 -0
- package/src/db/fields/resolveFields.ts +69 -0
- package/src/db/index.ts +13 -0
- package/src/db/migrations/DatabaseMigrationManager.ts +756 -0
- package/src/db/migrations/DatabaseSchemaInspector.ts +541 -0
- package/src/db/migrations/KnexMigrationRenderer.ts +490 -0
- package/src/db/migrations/ModelSchemaCollector.ts +240 -0
- package/src/db/migrations/SchemaDiffer.ts +541 -0
- package/src/db/migrations/SchemaNames.ts +62 -0
- package/src/db/migrations/SchemaSnapshotSerializer.ts +59 -0
- package/src/db/migrations/contracts/DatabaseMigration.ts +143 -0
- package/src/db/migrations/contracts/SchemaChange.ts +113 -0
- package/src/db/migrations/contracts/SchemaSnapshot.ts +122 -0
- package/src/db/migrations/contracts/index.ts +3 -0
- package/src/db/migrations/errors.ts +45 -0
- package/src/db/migrations/index.ts +10 -0
- package/src/db/migrations/promoteDestructiveSchemaChanges.ts +120 -0
- package/src/db/queryMonitor.ts +549 -0
- package/src/db/sqlErrors.ts +36 -0
- package/src/db/test/db.ts +159 -0
- package/src/devtools/HttpEventDispatcher.ts +214 -0
- package/src/devtools/contracts/DevtoolsEventDispatcher.ts +57 -0
- package/src/devtools/contracts/index.ts +1 -0
- package/src/devtools/environment.ts +18 -0
- package/src/devtools/index.ts +3 -0
- package/src/events/Events.ts +165 -0
- package/src/events/README.md +106 -0
- package/src/events/contracts/EventConstructor.ts +12 -0
- package/src/events/contracts/EventListener.ts +8 -0
- package/src/events/contracts/EventUnsubscribe.ts +4 -0
- package/src/events/contracts/index.ts +3 -0
- package/src/events/examples/NoteSaved.ts +9 -0
- package/src/events/examples/runNoteEvents.ts +31 -0
- package/src/events/index.ts +2 -0
- package/src/flows/FlowBlockRegistry.ts +79 -0
- package/src/flows/FlowCompiler.ts +624 -0
- package/src/flows/FlowDefinitionError.ts +24 -0
- package/src/flows/FlowStepJob.ts +54 -0
- package/src/flows/FlowValueValidator.ts +120 -0
- package/src/flows/Flows.ts +1118 -0
- package/src/flows/README.md +144 -0
- package/src/flows/blocks/FlowInput.ts +32 -0
- package/src/flows/blocks/FlowOutput.ts +32 -0
- package/src/flows/blocks/Subflow.ts +24 -0
- package/src/flows/blocks/index.ts +11 -0
- package/src/flows/constants.ts +62 -0
- package/src/flows/contracts/FlowBlock.ts +73 -0
- package/src/flows/contracts/FlowCompiler.ts +32 -0
- package/src/flows/contracts/FlowDefinition.ts +126 -0
- package/src/flows/contracts/FlowDefinitionStore.ts +52 -0
- package/src/flows/contracts/FlowRun.ts +44 -0
- package/src/flows/contracts/FlowValue.ts +54 -0
- package/src/flows/contracts/FlowsService.ts +39 -0
- package/src/flows/contracts/index.ts +7 -0
- package/src/flows/defineBlock.ts +25 -0
- package/src/flows/drivers/FileFlowDefinitionStore.ts +372 -0
- package/src/flows/drivers/index.ts +1 -0
- package/src/flows/errors.ts +22 -0
- package/src/flows/examples/FlowExampleApp.ts +15 -0
- package/src/flows/examples/createTextFlow.ts +14 -0
- package/src/flows/examples/normalizeTextBlock.ts +15 -0
- package/src/flows/examples/runTextFlow.ts +46 -0
- package/src/flows/examples/uppercaseTextBlock.ts +11 -0
- package/src/flows/index.ts +13 -0
- package/src/flows/models/FlowRun.ts +164 -0
- package/src/flows/models/FlowRunEvent.ts +108 -0
- package/src/flows/models/FlowStepRun.ts +176 -0
- package/src/flows/models/index.ts +16 -0
- package/src/index.ts +40 -0
- package/src/logging/Log.ts +100 -0
- package/src/logging/README.md +139 -0
- package/src/logging/contracts/HttpExchange.ts +53 -0
- package/src/logging/contracts/Logger.ts +45 -0
- package/src/logging/contracts/LoggerDriver.ts +19 -0
- package/src/logging/contracts/LoggingOptions.ts +51 -0
- package/src/logging/contracts/index.ts +4 -0
- package/src/logging/drivers/PinoLoggerDriver.ts +376 -0
- package/src/logging/drivers/index.ts +1 -0
- package/src/logging/examples/runNoteLogs.ts +38 -0
- package/src/logging/index.ts +3 -0
- package/src/logging/transports/DevtoolsLogTransport.ts +142 -0
- package/src/mail/Mail.ts +188 -0
- package/src/mail/README.md +206 -0
- package/src/mail/examples/runMailPreview.ts +44 -0
- package/src/mail/examples/welcomeMessage.ts +26 -0
- package/src/mail/index.ts +4 -0
- package/src/mail/transports/FileMailTransport.ts +58 -0
- package/src/mail/transports/MailgunTransport.ts +85 -0
- package/src/mail/transports/ResendTransport.ts +80 -0
- package/src/media/MediaFile.ts +132 -0
- package/src/media/MediaItem.ts +132 -0
- package/src/media/MediaLibrary.ts +117 -0
- package/src/media/MediaManager.ts +874 -0
- package/src/media/README.md +358 -0
- package/src/media/constants.ts +31 -0
- package/src/media/contracts/MediaOptions.ts +9 -0
- package/src/media/contracts/index.ts +1 -0
- package/src/media/examples/createPrivateFileServer.ts +55 -0
- package/src/media/examples/runPrivateFiles.ts +45 -0
- package/src/media/examples/runProjectMedia.ts +46 -0
- package/src/media/image/ImageReconstructionError.ts +18 -0
- package/src/media/image/ImageVariantRenderer.ts +386 -0
- package/src/media/image/ImageVariantRequest.ts +65 -0
- package/src/media/image/contracts/ImageProcessor.ts +53 -0
- package/src/media/image/contracts/ImageVariant.ts +37 -0
- package/src/media/image/contracts/ImageVariantCacheOptions.ts +21 -0
- package/src/media/image/contracts/index.ts +3 -0
- package/src/media/image/index.ts +5 -0
- package/src/media/image/processors/SharpImageProcessor.ts +121 -0
- package/src/media/image/processors/index.ts +1 -0
- package/src/media/index.ts +8 -0
- package/src/media/types.ts +168 -0
- package/src/queue/FailedJob.ts +58 -0
- package/src/queue/Queue.ts +938 -0
- package/src/queue/QueueEvents.ts +57 -0
- package/src/queue/QueueRetryLaterError.ts +40 -0
- package/src/queue/QueueWorker.ts +296 -0
- package/src/queue/QueueableJob.ts +167 -0
- package/src/queue/QueuedJob.ts +69 -0
- package/src/queue/README.md +368 -0
- package/src/queue/RetryPolicy.ts +129 -0
- package/src/queue/commands/index.ts +13 -0
- package/src/queue/commands/makeJob.ts +11 -0
- package/src/queue/console.ts +518 -0
- package/src/queue/contracts/CreateJob.ts +13 -0
- package/src/queue/contracts/QueueDriver.ts +135 -0
- package/src/queue/contracts/QueueEvents.ts +77 -0
- package/src/queue/contracts/QueuePayload.ts +150 -0
- package/src/queue/contracts/QueueRetry.ts +47 -0
- package/src/queue/contracts/QueueService.ts +219 -0
- package/src/queue/contracts/QueueWorkerLifecycle.ts +71 -0
- package/src/queue/contracts/QueueableJob.ts +56 -0
- package/src/queue/contracts/RedisQueueDriver.ts +37 -0
- package/src/queue/contracts/index.ts +9 -0
- package/src/queue/createJob.ts +54 -0
- package/src/queue/drivers/DatabaseQueueDriver.ts +449 -0
- package/src/queue/drivers/RedisQueueDriver.ts +733 -0
- package/src/queue/examples/DeferredReportJob.ts +25 -0
- package/src/queue/examples/GenerateReportJob.ts +37 -0
- package/src/queue/examples/WriteReportJob.ts +37 -0
- package/src/queue/examples/createAndProcessReportJob.ts +29 -0
- package/src/queue/examples/dispatchReportWorkflows.ts +40 -0
- package/src/queue/examples/manageReportRetries.ts +47 -0
- package/src/queue/examples/outputs/create-and-process-report-job.json +6 -0
- package/src/queue/examples/outputs/dispatch-report-workflows.json +14 -0
- package/src/queue/examples/outputs/manage-report-retries.json +24 -0
- package/src/queue/examples/outputs/queue-reports.json +11 -0
- package/src/queue/examples/reportConsole.ts +47 -0
- package/src/queue/examples/runBackpressure.ts +27 -0
- package/src/queue/examples/runQueueReports.ts +80 -0
- package/src/queue/examples/runQueueWorkflows.ts +43 -0
- package/src/queue/index.ts +13 -0
- package/src/queue/queueMonitor.ts +368 -0
- package/src/scheduler/README.md +139 -0
- package/src/scheduler/ScheduledCall.ts +36 -0
- package/src/scheduler/ScheduledEvent.ts +149 -0
- package/src/scheduler/ScheduledJob.ts +58 -0
- package/src/scheduler/ScheduledOccurrence.ts +250 -0
- package/src/scheduler/ScheduledOccurrenceRecorder.ts +125 -0
- package/src/scheduler/Scheduler.ts +225 -0
- package/src/scheduler/SchedulerWorker.ts +151 -0
- package/src/scheduler/console.ts +368 -0
- package/src/scheduler/constants.ts +27 -0
- package/src/scheduler/contracts/Scheduler.ts +123 -0
- package/src/scheduler/contracts/SchedulerConsole.ts +40 -0
- package/src/scheduler/contracts/SchedulerWorker.ts +23 -0
- package/src/scheduler/contracts/index.ts +3 -0
- package/src/scheduler/examples/RecoverableSummaryJob.ts +18 -0
- package/src/scheduler/examples/WriteDailySummaryJob.ts +17 -0
- package/src/scheduler/examples/registerDailySummary.ts +13 -0
- package/src/scheduler/examples/runDailySummary.ts +46 -0
- package/src/scheduler/examples/runScheduledReplay.ts +60 -0
- package/src/scheduler/index.ts +9 -0
- package/src/scheduler/scheduleTime.ts +78 -0
- package/src/security/README.md +130 -0
- package/src/security/Security.ts +346 -0
- package/src/security/SecurityError.ts +16 -0
- package/src/security/contracts/SecurityOptions.ts +20 -0
- package/src/security/contracts/SecurityPayload.ts +14 -0
- package/src/security/contracts/index.ts +2 -0
- package/src/security/ensureAppKey.ts +82 -0
- package/src/security/examples/runSecretRoundTrip.ts +42 -0
- package/src/security/index.ts +4 -0
- package/src/serialization/README.md +169 -0
- package/src/serialization/Serializable.ts +17 -0
- package/src/serialization/SerializationError.ts +91 -0
- package/src/serialization/SerializationRegistry.ts +208 -0
- package/src/serialization/SerializationRegistryError.ts +24 -0
- package/src/serialization/Serializer.ts +793 -0
- package/src/serialization/contracts/SerializableClass.ts +26 -0
- package/src/serialization/contracts/SerializedValue.ts +71 -0
- package/src/serialization/contracts/SerializerOptions.ts +19 -0
- package/src/serialization/contracts/SerializerService.ts +29 -0
- package/src/serialization/contracts/index.ts +4 -0
- package/src/serialization/examples/ExportRequest.ts +25 -0
- package/src/serialization/examples/runExportSerialization.ts +24 -0
- package/src/serialization/index.ts +6 -0
- package/src/server/App.ts +326 -0
- package/src/server/README.md +219 -0
- package/src/server/RequestContext.ts +122 -0
- package/src/server/appContext.ts +59 -0
- package/src/server/examples/createFirstServer.ts +25 -0
- package/src/server/examples/startFirstServer.ts +19 -0
- package/src/server/index.ts +16 -0
- package/src/ssr/README.md +158 -0
- package/src/ssr/constants.ts +8 -0
- package/src/ssr/contracts/DocumentHead.ts +35 -0
- package/src/ssr/contracts/SsrRenderContext.ts +25 -0
- package/src/ssr/contracts/SsrRenderResult.ts +23 -0
- package/src/ssr/contracts/SsrRenderer.ts +12 -0
- package/src/ssr/contracts/SsrRequest.ts +17 -0
- package/src/ssr/contracts/index.ts +19 -0
- package/src/ssr/createSsrRenderContext.ts +25 -0
- package/src/ssr/examples/createPublicPageServer.ts +32 -0
- package/src/ssr/examples/runPublicPages.ts +25 -0
- package/src/ssr/fastify/contracts/FastifySsrOptions.ts +24 -0
- package/src/ssr/fastify/contracts/index.ts +5 -0
- package/src/ssr/fastify/fastifySsr.ts +110 -0
- package/src/ssr/fastify/index.ts +2 -0
- package/src/ssr/index.ts +10 -0
- package/src/ssr/renderDocumentHead.ts +72 -0
- package/src/ssr/renderSsrDocument.ts +35 -0
- package/src/ssr/serializeSsrState.ts +19 -0
- package/src/ssr/vite/contracts/ViteSsrOptions.ts +52 -0
- package/src/ssr/vite/contracts/index.ts +6 -0
- package/src/ssr/vite/fastifyViteSsr.ts +279 -0
- package/src/ssr/vite/index.ts +4 -0
- package/src/ssr/vite/viteSsrManifest.ts +92 -0
- package/src/storage/README.md +310 -0
- package/src/storage/Storage.ts +392 -0
- package/src/storage/contents.ts +23 -0
- package/src/storage/contracts/StorageListing.ts +55 -0
- package/src/storage/contracts/index.ts +1 -0
- package/src/storage/drivers/FlystorageDisk.ts +295 -0
- package/src/storage/drivers/FlystorageListing.ts +78 -0
- package/src/storage/drivers/LocalStorageDisk.ts +45 -0
- package/src/storage/drivers/S3StorageDisk.ts +114 -0
- package/src/storage/drivers/index.ts +3 -0
- package/src/storage/examples/runStorage.ts +37 -0
- package/src/storage/examples/runStreamExport.ts +41 -0
- package/src/storage/examples/writeCsvExport.ts +45 -0
- package/src/storage/index.ts +7 -0
- package/src/storage/mime.ts +30 -0
- package/src/storage/path.ts +76 -0
- package/src/storage/types.ts +251 -0
- package/src/url/README.md +41 -0
- package/src/url/UrlGenerator.ts +72 -0
- package/src/url/contracts/UrlGeneratorOptions.ts +14 -0
- package/src/url/contracts/index.ts +1 -0
- package/src/url/examples/runApplicationLinks.ts +33 -0
- package/src/url/index.ts +2 -0
- package/src/validation/README.md +433 -0
- package/src/validation/examples/runNoteValidation.ts +18 -0
- package/src/validation/examples/validateNoteInput.ts +31 -0
- package/src/validation/index.ts +398 -0
- package/templates/AGENTS.md +15 -0
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
createHttpEventDispatcher,
|
|
5
|
+
devtoolsEventsUrl,
|
|
6
|
+
isInteractiveDevelopmentEnvironment,
|
|
7
|
+
type DevtoolsEnvironment,
|
|
8
|
+
type DevtoolsEventDispatcher,
|
|
9
|
+
type HttpEventDispatcherOptions,
|
|
10
|
+
} from '../devtools';
|
|
11
|
+
import { isDevelopmentEnvironment } from '../db/sqlErrors';
|
|
12
|
+
import type * as queue from './contracts';
|
|
13
|
+
|
|
14
|
+
export type QueueMonitorMode = 'dev' | 'full';
|
|
15
|
+
export type QueueMonitorAction = queue.QueueLifecycleAction;
|
|
16
|
+
|
|
17
|
+
export interface QueueMonitorOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Human-readable source name copied to every emitted queue event.
|
|
20
|
+
*/
|
|
21
|
+
source?: string;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Number of recent queue events retained in memory.
|
|
25
|
+
*/
|
|
26
|
+
maxEntries?: number;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Whether queued payload data should be copied into emitted events.
|
|
30
|
+
*/
|
|
31
|
+
includePayload?: boolean;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Optional event sink that receives every retained queue event.
|
|
35
|
+
*/
|
|
36
|
+
dispatch?: QueueMonitorDispatcher;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* HTTP delivery configuration for queue monitor events.
|
|
41
|
+
*/
|
|
42
|
+
export type HttpQueueMonitorDispatcherOptions = HttpEventDispatcherOptions;
|
|
43
|
+
|
|
44
|
+
export interface QueueMonitorEvent {
|
|
45
|
+
type: 'queue.job';
|
|
46
|
+
id: string;
|
|
47
|
+
source: string;
|
|
48
|
+
timestamp: string;
|
|
49
|
+
action: QueueMonitorAction;
|
|
50
|
+
queue: string;
|
|
51
|
+
jobName: string;
|
|
52
|
+
jobId?: queue.QueueJobId;
|
|
53
|
+
jobUuid?: string;
|
|
54
|
+
attempts?: number;
|
|
55
|
+
maxTries?: number;
|
|
56
|
+
delaySeconds?: number;
|
|
57
|
+
durationMs?: number;
|
|
58
|
+
errorMessage?: string;
|
|
59
|
+
origin?: queue.QueueJobOrigin;
|
|
60
|
+
payloadData?: Record<string, unknown>;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface QueueMonitorJobEventInput {
|
|
64
|
+
timestamp?: string;
|
|
65
|
+
action: QueueMonitorAction;
|
|
66
|
+
queue: string;
|
|
67
|
+
jobName: string;
|
|
68
|
+
jobId?: queue.QueueJobId;
|
|
69
|
+
jobUuid?: string;
|
|
70
|
+
attempts?: number;
|
|
71
|
+
maxTries?: number;
|
|
72
|
+
delaySeconds?: number;
|
|
73
|
+
durationMs?: number;
|
|
74
|
+
error?: unknown;
|
|
75
|
+
origin?: queue.QueueJobOrigin;
|
|
76
|
+
payloadData?: Record<string, unknown>;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export type QueueMonitorListener = (event: QueueMonitorEvent) => void;
|
|
80
|
+
export type QueueMonitorDispatcher = (event: QueueMonitorEvent) => void;
|
|
81
|
+
|
|
82
|
+
interface QueueMonitorEnvironment extends DevtoolsEnvironment {
|
|
83
|
+
PLATFORM_QUEUE_MONITOR?: string;
|
|
84
|
+
PLATFORM_QUEUE_MONITOR_MAX?: string;
|
|
85
|
+
PLATFORM_QUEUE_MONITOR_PAYLOAD?: string;
|
|
86
|
+
PLATFORM_QUEUE_MONITOR_SOURCE?: string;
|
|
87
|
+
npm_package_name?: string;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const defaultMaxEntries = 500;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Captures queue lifecycle events for local development panels and tests.
|
|
94
|
+
*/
|
|
95
|
+
export class QueueMonitor {
|
|
96
|
+
private readonly entries: QueueMonitorEvent[] = [];
|
|
97
|
+
private readonly listeners = new Set<QueueMonitorListener>();
|
|
98
|
+
private readonly maxEntries: number;
|
|
99
|
+
private readonly source: string;
|
|
100
|
+
private readonly includePayload: boolean;
|
|
101
|
+
private readonly dispatch?: QueueMonitorDispatcher;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Creates a queue lifecycle monitor.
|
|
105
|
+
*/
|
|
106
|
+
constructor(options: QueueMonitorOptions = {}) {
|
|
107
|
+
this.maxEntries = normalizePositiveInteger(options.maxEntries, defaultMaxEntries);
|
|
108
|
+
this.source = options.source || 'app';
|
|
109
|
+
this.includePayload = options.includePayload ?? false;
|
|
110
|
+
this.dispatch = options.dispatch;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Returns queue events retained in memory.
|
|
115
|
+
*/
|
|
116
|
+
recent(): QueueMonitorEvent[] {
|
|
117
|
+
return [...this.entries];
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Removes queue events from the in-memory buffer.
|
|
122
|
+
*/
|
|
123
|
+
clear(): void {
|
|
124
|
+
this.entries.length = 0;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Subscribes to queue events and returns an unsubscribe callback.
|
|
129
|
+
*/
|
|
130
|
+
subscribe(listener: QueueMonitorListener): () => void {
|
|
131
|
+
this.listeners.add(listener);
|
|
132
|
+
|
|
133
|
+
return () => {
|
|
134
|
+
this.listeners.delete(listener);
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Records one queue job lifecycle event.
|
|
140
|
+
*
|
|
141
|
+
* @param input - Queue job lifecycle fields.
|
|
142
|
+
*/
|
|
143
|
+
recordJob(input: QueueMonitorJobEventInput): void {
|
|
144
|
+
this.record({
|
|
145
|
+
type: 'queue.job',
|
|
146
|
+
id: this.eventId(input),
|
|
147
|
+
source: this.source,
|
|
148
|
+
timestamp: input.timestamp ?? new Date().toISOString(),
|
|
149
|
+
action: input.action,
|
|
150
|
+
queue: input.queue,
|
|
151
|
+
jobName: input.jobName,
|
|
152
|
+
jobId: input.jobId,
|
|
153
|
+
jobUuid: input.jobUuid,
|
|
154
|
+
attempts: input.attempts,
|
|
155
|
+
maxTries: input.maxTries,
|
|
156
|
+
delaySeconds: input.delaySeconds,
|
|
157
|
+
durationMs: input.durationMs === undefined ? undefined : roundDuration(input.durationMs),
|
|
158
|
+
errorMessage: input.error === undefined ? undefined : errorMessage(input.error),
|
|
159
|
+
origin: input.origin,
|
|
160
|
+
payloadData: this.includePayload ? input.payloadData : undefined,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Records one event produced by the always-on queue lifecycle dispatcher.
|
|
166
|
+
*
|
|
167
|
+
* @param event - Queue lifecycle event to retain and forward.
|
|
168
|
+
*/
|
|
169
|
+
recordLifecycleEvent(event: queue.QueueLifecycleEvent): void {
|
|
170
|
+
this.recordJob({
|
|
171
|
+
timestamp: event.timestamp,
|
|
172
|
+
action: event.action,
|
|
173
|
+
queue: event.queue,
|
|
174
|
+
jobName: event.jobName,
|
|
175
|
+
jobId: event.jobId,
|
|
176
|
+
jobUuid: event.jobUuid,
|
|
177
|
+
attempts: event.attempts,
|
|
178
|
+
maxTries: event.maxTries,
|
|
179
|
+
delaySeconds: event.delaySeconds,
|
|
180
|
+
durationMs: event.durationMs,
|
|
181
|
+
error: event.error,
|
|
182
|
+
origin: event.origin,
|
|
183
|
+
payloadData: event.payloadData,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Creates a stable id for terminal failures and a unique id for lifecycle events.
|
|
189
|
+
*
|
|
190
|
+
* A job UUID keeps repeated terminal instrumentation deliveries as one panel row.
|
|
191
|
+
*
|
|
192
|
+
* @param input - Queue event fields used to identify a terminal failure.
|
|
193
|
+
* @returns Stable failed-event id or a fresh lifecycle event id.
|
|
194
|
+
*/
|
|
195
|
+
private eventId(input: QueueMonitorJobEventInput): string {
|
|
196
|
+
if (input.action === 'failed' && input.jobUuid) {
|
|
197
|
+
return `queue-failed:${input.jobUuid}`;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return randomUUID();
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Retains an event and notifies local plus external subscribers.
|
|
205
|
+
*/
|
|
206
|
+
private record(event: QueueMonitorEvent): void {
|
|
207
|
+
this.entries.push(event);
|
|
208
|
+
|
|
209
|
+
while (this.entries.length > this.maxEntries) {
|
|
210
|
+
this.entries.shift();
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
for (const listener of this.listeners) {
|
|
214
|
+
listener(event);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
this.dispatch?.(event);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Enables the environment-default queue monitor when the runtime opts in.
|
|
223
|
+
*/
|
|
224
|
+
export function enableDefaultQueueMonitor(
|
|
225
|
+
options: QueueMonitorOptions | false | undefined = undefined,
|
|
226
|
+
env: QueueMonitorEnvironment = process.env,
|
|
227
|
+
): QueueMonitor | null {
|
|
228
|
+
if (options === false) return null;
|
|
229
|
+
|
|
230
|
+
const defaults = defaultQueueMonitorOptions(env);
|
|
231
|
+
const resolved = defaults || options
|
|
232
|
+
? {
|
|
233
|
+
...(defaults ?? {}),
|
|
234
|
+
...(options ?? {}),
|
|
235
|
+
}
|
|
236
|
+
: null;
|
|
237
|
+
|
|
238
|
+
if (!resolved) return null;
|
|
239
|
+
|
|
240
|
+
return new QueueMonitor(resolved);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Resolves queue monitor defaults from development and observability env vars.
|
|
245
|
+
*/
|
|
246
|
+
export function defaultQueueMonitorOptions(
|
|
247
|
+
env: QueueMonitorEnvironment = process.env,
|
|
248
|
+
): QueueMonitorOptions | null {
|
|
249
|
+
const mode = queueMonitorMode(env.PLATFORM_QUEUE_MONITOR, env.NODE_ENV);
|
|
250
|
+
|
|
251
|
+
if (!mode) return null;
|
|
252
|
+
|
|
253
|
+
return {
|
|
254
|
+
source: env.PLATFORM_QUEUE_MONITOR_SOURCE || env.npm_package_name || 'app',
|
|
255
|
+
maxEntries: parseIntegerEnv(env.PLATFORM_QUEUE_MONITOR_MAX, defaultMaxEntries),
|
|
256
|
+
includePayload: booleanEnv(
|
|
257
|
+
env.PLATFORM_QUEUE_MONITOR_PAYLOAD,
|
|
258
|
+
mode === 'full' || (mode === 'dev' && isDevelopmentEnvironment(env.NODE_ENV ?? '')),
|
|
259
|
+
),
|
|
260
|
+
dispatch: createHttpQueueMonitorDispatcher({
|
|
261
|
+
url: devtoolsEventsUrl(env),
|
|
262
|
+
}),
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Creates a fire-and-forget batched HTTP dispatcher for queue events.
|
|
268
|
+
*/
|
|
269
|
+
export function createHttpQueueMonitorDispatcher(
|
|
270
|
+
options: HttpQueueMonitorDispatcherOptions = {},
|
|
271
|
+
): DevtoolsEventDispatcher<QueueMonitorEvent> {
|
|
272
|
+
return createHttpEventDispatcher<QueueMonitorEvent>(options);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Resolves whether monitoring should be active for the current environment.
|
|
277
|
+
*/
|
|
278
|
+
function queueMonitorMode(
|
|
279
|
+
input: string | undefined,
|
|
280
|
+
environment: string | undefined,
|
|
281
|
+
): QueueMonitorMode | null {
|
|
282
|
+
const normalized = (input || '').toLowerCase().trim();
|
|
283
|
+
|
|
284
|
+
switch (normalized) {
|
|
285
|
+
case '':
|
|
286
|
+
return isInteractiveDevelopmentEnvironment(environment) ? 'dev' : null;
|
|
287
|
+
|
|
288
|
+
case '1':
|
|
289
|
+
case 'true':
|
|
290
|
+
case 'on':
|
|
291
|
+
case 'dev':
|
|
292
|
+
return 'dev';
|
|
293
|
+
|
|
294
|
+
case 'full':
|
|
295
|
+
return 'full';
|
|
296
|
+
|
|
297
|
+
case '0':
|
|
298
|
+
case 'false':
|
|
299
|
+
case 'off':
|
|
300
|
+
return null;
|
|
301
|
+
|
|
302
|
+
default:
|
|
303
|
+
return isInteractiveDevelopmentEnvironment(environment) ? 'dev' : null;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Converts an unknown thrown value into a useful event message.
|
|
309
|
+
*/
|
|
310
|
+
function errorMessage(error: unknown): string {
|
|
311
|
+
if (error instanceof Error) return error.message;
|
|
312
|
+
if (error === undefined || error === null) return '';
|
|
313
|
+
return String(error);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Rounds a duration to one decimal place while keeping tiny timings visible.
|
|
318
|
+
*/
|
|
319
|
+
function roundDuration(durationMs: number): number {
|
|
320
|
+
if (!Number.isFinite(durationMs) || durationMs < 0) return 0;
|
|
321
|
+
return Math.round(durationMs * 10) / 10;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Parses a boolean env var while preserving a default value.
|
|
326
|
+
*/
|
|
327
|
+
function booleanEnv(input: string | undefined, fallback: boolean): boolean {
|
|
328
|
+
if (input === undefined || input === '') return fallback;
|
|
329
|
+
|
|
330
|
+
switch (input.toLowerCase().trim()) {
|
|
331
|
+
case '1':
|
|
332
|
+
case 'true':
|
|
333
|
+
case 'yes':
|
|
334
|
+
case 'on':
|
|
335
|
+
return true;
|
|
336
|
+
|
|
337
|
+
case '0':
|
|
338
|
+
case 'false':
|
|
339
|
+
case 'no':
|
|
340
|
+
case 'off':
|
|
341
|
+
return false;
|
|
342
|
+
|
|
343
|
+
default:
|
|
344
|
+
return fallback;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Parses an integer env var while enforcing a positive fallback.
|
|
350
|
+
*/
|
|
351
|
+
function parseIntegerEnv(input: string | undefined, fallback: number): number {
|
|
352
|
+
const parsed = Number(input);
|
|
353
|
+
|
|
354
|
+
if (!Number.isFinite(parsed)) return fallback;
|
|
355
|
+
|
|
356
|
+
return normalizePositiveInteger(parsed, fallback);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* Returns a positive integer or the supplied fallback.
|
|
361
|
+
*/
|
|
362
|
+
function normalizePositiveInteger(input: unknown, fallback: number): number {
|
|
363
|
+
const value = Number(input);
|
|
364
|
+
|
|
365
|
+
if (!Number.isFinite(value) || value <= 0) return fallback;
|
|
366
|
+
|
|
367
|
+
return Math.trunc(value);
|
|
368
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Scheduler
|
|
2
|
+
|
|
3
|
+
The framework scheduler keeps recurring definitions in application code and
|
|
4
|
+
stores one durable occurrence for every due named minute. It supports daily
|
|
5
|
+
jobs and short inline calls:
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
schedule
|
|
9
|
+
.job(DatabaseBackupJob)
|
|
10
|
+
.dailyAt('02:00')
|
|
11
|
+
.timezone('Europe/London');
|
|
12
|
+
|
|
13
|
+
schedule
|
|
14
|
+
.job(() => new ReportJob(organizationId))
|
|
15
|
+
.name('weekly-organization-report')
|
|
16
|
+
.dailyAt('06:00');
|
|
17
|
+
|
|
18
|
+
schedule
|
|
19
|
+
.call(async () => {
|
|
20
|
+
await RecentUser.query().delete();
|
|
21
|
+
})
|
|
22
|
+
.name('clear-recent-users')
|
|
23
|
+
.daily();
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
A `QueueableJob` class uses its durable job name as the schedule name, so
|
|
27
|
+
`.name(...)` is optional. Factories and inline calls must provide an explicit
|
|
28
|
+
stable name because function identity is not durable. Names must be unique
|
|
29
|
+
within one application schedule.
|
|
30
|
+
|
|
31
|
+
The first implementation intentionally supports only `daily()` and
|
|
32
|
+
`dailyAt('HH:mm')`. Times use UTC unless `.timezone(...)` selects an IANA
|
|
33
|
+
timezone. The scheduler evaluates the current minute only; it does not run
|
|
34
|
+
missed historical minutes after downtime.
|
|
35
|
+
|
|
36
|
+
## Runtime
|
|
37
|
+
|
|
38
|
+
`app().scheduler` exposes the scheduler service. Applications register their
|
|
39
|
+
definitions once during scheduler and queue-worker bootstrap:
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
export function registerSchedule(app: App): void {
|
|
43
|
+
app.scheduler
|
|
44
|
+
.job(DatabaseBackupJob)
|
|
45
|
+
.dailyAt('02:00')
|
|
46
|
+
.timezone('Europe/London');
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
There are two execution boundaries:
|
|
51
|
+
|
|
52
|
+
- `scheduler.runDue()` evaluates one minute and is suitable for cron or a
|
|
53
|
+
one-off framework command.
|
|
54
|
+
- `SchedulerWorker` evaluates immediately, waits to the next minute boundary,
|
|
55
|
+
and repeats without overlapping ticks in the same process.
|
|
56
|
+
|
|
57
|
+
Run one dedicated scheduler process in production. Multiple processes are
|
|
58
|
+
still safe: `scheduled_occurrences` has a unique `(name, scheduled_for)` claim,
|
|
59
|
+
so only one process can dispatch a named task for a minute.
|
|
60
|
+
|
|
61
|
+
Scheduled jobs are the preferred path. The scheduler only creates and
|
|
62
|
+
dispatches the job; queue workers perform the expensive work. `call()` runs
|
|
63
|
+
inside the scheduler process, so reserve it for short operations.
|
|
64
|
+
|
|
65
|
+
## Occurrence History
|
|
66
|
+
|
|
67
|
+
`ScheduledOccurrence` owns the `scheduled_occurrences` table. Its lifecycle
|
|
68
|
+
states are:
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
claimed -> queued -> running -> succeeded
|
|
72
|
+
| \
|
|
73
|
+
| -> retrying -> running
|
|
74
|
+
\----------> deferred -> running
|
|
75
|
+
\----------> failed
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
The occurrence records its schedule name, due minute, job name, queue ids,
|
|
79
|
+
attempts, error, next-attempt time, and lifecycle timestamps. Queue origin
|
|
80
|
+
metadata correlates the job without adding scheduler fields to application job
|
|
81
|
+
payloads.
|
|
82
|
+
|
|
83
|
+
The queue publishes awaited lifecycle events after each driver transition.
|
|
84
|
+
Every queue-worker process must initialise `app().scheduler` so its recorder can
|
|
85
|
+
update scheduled occurrences when that worker claims or finishes a job.
|
|
86
|
+
Listener failures are isolated and logged; they cannot change an already
|
|
87
|
+
committed queue outcome.
|
|
88
|
+
|
|
89
|
+
Terminal occurrences are retained audit records. Replaying a failed scheduled
|
|
90
|
+
job with `queue.retryFailed()` creates a new queue identity linked by `retryOf`;
|
|
91
|
+
it does not turn the original failed occurrence into a success. Observe the
|
|
92
|
+
replacement through queue lifecycle events/results and the application output.
|
|
93
|
+
Queue does not persist a general success-history table. If an operations screen
|
|
94
|
+
needs a durable recovered outcome, store the replacement identity and outcome
|
|
95
|
+
on an application-owned report record. Do not erase the original failure.
|
|
96
|
+
|
|
97
|
+
The shipped [replay runner](./examples/runScheduledReplay.ts) and
|
|
98
|
+
[repairable job](./examples/RecoverableSummaryJob.ts) demonstrate this boundary:
|
|
99
|
+
`npx tsx examples/runScheduledReplay.ts` fails on a missing local source, adds
|
|
100
|
+
the source and successfully replays, while preserving the failed occurrence
|
|
101
|
+
and rejecting a duplicate claim for the same minute. The copied Scheduler test
|
|
102
|
+
asserts both the recovered output and the retained audit state.
|
|
103
|
+
|
|
104
|
+
## Console
|
|
105
|
+
|
|
106
|
+
Applications can expose the framework console with `runSchedulerConsole(...)`:
|
|
107
|
+
|
|
108
|
+
```text
|
|
109
|
+
scheduler:work
|
|
110
|
+
scheduler:run
|
|
111
|
+
scheduler:list
|
|
112
|
+
scheduler:history --limit=25 --status=failed
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
`scheduler:work` is the long-running process. `scheduler:run` provides the same
|
|
116
|
+
single-minute boundary that cron can invoke. `scheduler:list` validates and
|
|
117
|
+
prints code-owned definitions. `scheduler:history` inspects durable occurrence
|
|
118
|
+
state.
|
|
119
|
+
|
|
120
|
+
## Runnable example and testing
|
|
121
|
+
|
|
122
|
+
The shipped [daily summary job](./examples/WriteDailySummaryJob.ts),
|
|
123
|
+
[registration function](./examples/registerDailySummary.ts) and
|
|
124
|
+
[isolated runner](./examples/runDailySummary.ts) demonstrate a real SQL queue.
|
|
125
|
+
Copy the example directory into an independent app's `examples` directory and
|
|
126
|
+
run `npx tsx examples/runDailySummary.ts` with dedicated test SQL credentials.
|
|
127
|
+
It creates/removes a `db3_app_test_*` database and temporary local storage.
|
|
128
|
+
|
|
129
|
+
The runner evaluates a fixed UTC minute, rejects a second claim for that minute,
|
|
130
|
+
processes the job and verifies successful occurrence history. It never sleeps
|
|
131
|
+
or runs an application's historical schedules. The website includes the exact
|
|
132
|
+
consumer-copyable test. Framework contributors run
|
|
133
|
+
`npm run test:service --workspace packages/app -- scheduler`.
|
|
134
|
+
|
|
135
|
+
A daily local time may not occur during a spring DST transition and may map to
|
|
136
|
+
two UTC minutes during an autumn transition. Claims are keyed by UTC minute,
|
|
137
|
+
not by a local business date. There is no catch-up or exactly-once side-effect
|
|
138
|
+
guarantee. Claims and queue dispatch are separate operations; monitor and
|
|
139
|
+
reconcile occurrences left claimed by an interrupted dispatch.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type * as scheduler from './contracts';
|
|
2
|
+
import { ScheduledEvent } from './ScheduledEvent';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Fluent daily schedule for one short inline callback.
|
|
6
|
+
*/
|
|
7
|
+
export class ScheduledCall extends ScheduledEvent {
|
|
8
|
+
readonly kind = 'call' as const;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Creates a scheduled inline callback.
|
|
12
|
+
*
|
|
13
|
+
* @param callback - Short synchronous or asynchronous task.
|
|
14
|
+
*/
|
|
15
|
+
constructor(
|
|
16
|
+
private readonly callback: scheduler.ScheduledCallHandler,
|
|
17
|
+
) {
|
|
18
|
+
super();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Runs the scheduled callback and awaits asynchronous completion.
|
|
23
|
+
*/
|
|
24
|
+
async run(): Promise<void> {
|
|
25
|
+
await this.callback();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Requires every callback schedule to declare a stable explicit name.
|
|
30
|
+
*
|
|
31
|
+
* @returns Null because anonymous callback identity is not durable.
|
|
32
|
+
*/
|
|
33
|
+
protected override defaultName(): string | null {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import type * as scheduler from './contracts';
|
|
2
|
+
import { dailyScheduleIsDue, normalizeDailyTime, normalizeScheduleTimezone } from './scheduleTime';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Shared fluent timing configuration for scheduled jobs and calls.
|
|
6
|
+
*/
|
|
7
|
+
export abstract class ScheduledEvent {
|
|
8
|
+
abstract readonly kind: scheduler.ScheduledTaskKind;
|
|
9
|
+
protected configuredName: string | null = null;
|
|
10
|
+
protected configuredFrequency: scheduler.DailyScheduleFrequency | null = null;
|
|
11
|
+
protected configuredTimezone = 'UTC';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Sets the stable identity used for deduplication and history.
|
|
15
|
+
*
|
|
16
|
+
* @param name - Stable non-empty schedule name.
|
|
17
|
+
* @returns This scheduled event.
|
|
18
|
+
*/
|
|
19
|
+
name(name: string): this {
|
|
20
|
+
const normalized = name.trim();
|
|
21
|
+
|
|
22
|
+
if (!normalized) {
|
|
23
|
+
throw new Error('Scheduled event names cannot be empty.');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (normalized.length > 255) {
|
|
27
|
+
throw new Error('Scheduled event names cannot exceed 255 characters.');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
this.configuredName = normalized;
|
|
31
|
+
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Schedules this task every day at local midnight.
|
|
37
|
+
*
|
|
38
|
+
* @returns This scheduled event.
|
|
39
|
+
*/
|
|
40
|
+
daily(): this {
|
|
41
|
+
return this.dailyAt('00:00');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Schedules this task every day at one local wall-clock time.
|
|
46
|
+
*
|
|
47
|
+
* @param time - Time in 24-hour HH:mm form.
|
|
48
|
+
* @returns This scheduled event.
|
|
49
|
+
*/
|
|
50
|
+
dailyAt(time: string): this {
|
|
51
|
+
this.configuredFrequency = {
|
|
52
|
+
type: 'daily',
|
|
53
|
+
time: normalizeDailyTime(time),
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Sets the IANA timezone used to interpret this event's local time.
|
|
61
|
+
*
|
|
62
|
+
* @param timezone - IANA timezone such as Europe/London.
|
|
63
|
+
* @returns This scheduled event.
|
|
64
|
+
*/
|
|
65
|
+
timezone(timezone: string): this {
|
|
66
|
+
this.configuredTimezone = normalizeScheduleTimezone(timezone);
|
|
67
|
+
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Returns whether this event is due at one canonical UTC minute.
|
|
73
|
+
*
|
|
74
|
+
* @param instant - UTC minute being evaluated.
|
|
75
|
+
* @returns True when the configured daily time matches.
|
|
76
|
+
*/
|
|
77
|
+
isDue(instant: Date): boolean {
|
|
78
|
+
const frequency = this.frequency();
|
|
79
|
+
|
|
80
|
+
return dailyScheduleIsDue(
|
|
81
|
+
instant,
|
|
82
|
+
frequency.time,
|
|
83
|
+
this.configuredTimezone,
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Returns the normalized public schedule definition.
|
|
89
|
+
*
|
|
90
|
+
* @returns Validated schedule definition.
|
|
91
|
+
*/
|
|
92
|
+
definition(): scheduler.ScheduledTaskDefinition {
|
|
93
|
+
const jobName = this.resolvedJobName();
|
|
94
|
+
|
|
95
|
+
return {
|
|
96
|
+
name: this.resolvedName(),
|
|
97
|
+
kind: this.kind,
|
|
98
|
+
frequency: this.frequency(),
|
|
99
|
+
timezone: this.configuredTimezone,
|
|
100
|
+
...(jobName ? {
|
|
101
|
+
jobName,
|
|
102
|
+
} : {}),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Resolves the stable event name or throws when one is unavailable.
|
|
108
|
+
*
|
|
109
|
+
* @returns Stable event name.
|
|
110
|
+
*/
|
|
111
|
+
protected resolvedName(): string {
|
|
112
|
+
const name = this.configuredName ?? this.defaultName();
|
|
113
|
+
|
|
114
|
+
if (!name) {
|
|
115
|
+
throw new Error(`${this.constructor.name} requires an explicit stable name.`);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return name;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Returns the daily frequency or throws when none was configured.
|
|
123
|
+
*
|
|
124
|
+
* @returns Configured daily frequency.
|
|
125
|
+
*/
|
|
126
|
+
private frequency(): scheduler.DailyScheduleFrequency {
|
|
127
|
+
if (!this.configuredFrequency) {
|
|
128
|
+
throw new Error(`Scheduled event "${this.resolvedName()}" requires a frequency.`);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return this.configuredFrequency;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Returns the default stable name supplied by the concrete event type.
|
|
136
|
+
*
|
|
137
|
+
* @returns Default name, or null when explicit naming is required.
|
|
138
|
+
*/
|
|
139
|
+
protected abstract defaultName(): string | null;
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Returns the known queue job name for public schedule inspection.
|
|
143
|
+
*
|
|
144
|
+
* @returns Queue job name, or null for calls and deferred factories.
|
|
145
|
+
*/
|
|
146
|
+
protected resolvedJobName(): string | null {
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
}
|