@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
|
+
# Queue
|
|
2
|
+
|
|
3
|
+
The framework's `db3 queue:make-job NameJob` command is registered in
|
|
4
|
+
`queue/commands/index.ts`; its `makeJob.ts` action calls `createJob()`.
|
|
5
|
+
Command parsing, help and process
|
|
6
|
+
lifecycle are shared by the [framework CLI](../cli/README.md).
|
|
7
|
+
|
|
8
|
+
The installed-package chain/batch lab is
|
|
9
|
+
[runQueueWorkflows.ts](./examples/runQueueWorkflows.ts). Copy the shipped Queue
|
|
10
|
+
examples and run `npx tsx examples/runQueueWorkflows.ts` with dedicated SQL test
|
|
11
|
+
credentials. It rejects an empty pipeline, processes one chain successor at a
|
|
12
|
+
time and two independent batch jobs, then destroys its generated database.
|
|
13
|
+
`GenerateReportJob` only logs an identity; use the queued-report guide for a job
|
|
14
|
+
that reads and writes real report files. This lab does not prove atomic chain
|
|
15
|
+
handoff or exactly-once side effects.
|
|
16
|
+
|
|
17
|
+
## Provider backpressure lab
|
|
18
|
+
|
|
19
|
+
The shipped `examples/runBackpressure.ts` uses a real SQL queue and a controlled
|
|
20
|
+
provider readiness flag. It defers twice without spending a try, succeeds after
|
|
21
|
+
readiness changes and terminates expired work using an application deadline.
|
|
22
|
+
The companion `tests/examples/runBackpressure.test.ts` is consumer-copyable.
|
|
23
|
+
The zero-second delay is only for deterministic testing; production adapters
|
|
24
|
+
must validate provider delays and apply their own deadline/idempotency policy.
|
|
25
|
+
|
|
26
|
+
Move work out of a request without losing it when that process exits. Queue
|
|
27
|
+
persists JSON-safe payloads, restores a fresh job for each attempt and records
|
|
28
|
+
success, retry, deferral or terminal failure.
|
|
29
|
+
|
|
30
|
+
Import application APIs from `@db3.ai/app/queue`. Keep the job and its business
|
|
31
|
+
policy in your app. Queue owns dispatch, leases and retry transitions; Storage
|
|
32
|
+
owns bytes; your application owns authorization, progress and idempotency.
|
|
33
|
+
|
|
34
|
+
## Run a real report
|
|
35
|
+
|
|
36
|
+
Start with Node.js 24 and an independent ESM app from
|
|
37
|
+
[Installation](https://db3.ai/docs/installation). Before npm publication, install
|
|
38
|
+
matching App and Pure tarballs supplied by a maintainer. Add `tsx`,
|
|
39
|
+
`typescript`, `@types/node` and `vitest` as development dependencies.
|
|
40
|
+
|
|
41
|
+
The report lab needs local MariaDB and a dedicated test account that may create
|
|
42
|
+
and drop only `db3_app_test_*` databases. Do not use production credentials.
|
|
43
|
+
Save test-only settings in the app-root `.env`, exclude it from Git, and unset
|
|
44
|
+
`DATABASE_URL` unless it intentionally points at this test server:
|
|
45
|
+
|
|
46
|
+
```dotenv
|
|
47
|
+
DB_CONNECTION=mariadb
|
|
48
|
+
DB_HOST=127.0.0.1
|
|
49
|
+
DB_PORT=3306
|
|
50
|
+
DB_USER=your_test_user
|
|
51
|
+
DB_PASSWORD=your_test_password
|
|
52
|
+
DB_DATABASE=db3_app_test
|
|
53
|
+
DB_TEST_DATABASE_PREFIX=db3_app_test
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Copy the shipped examples into your app and run:
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
mkdir -p examples
|
|
60
|
+
cp -R node_modules/@db3.ai/app/src/queue/examples/. examples/
|
|
61
|
+
npx tsx examples/runQueueReports.ts
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
The lab creates an isolated database and local temporary directory. It removes
|
|
65
|
+
both in `finally`; killing the process forcibly can leave temporary resources.
|
|
66
|
+
It does not touch the starter's notes database or call an AI/email provider.
|
|
67
|
+
|
|
68
|
+
Read these actual example sources:
|
|
69
|
+
|
|
70
|
+
- [WriteReportJob.ts](./examples/WriteReportJob.ts): validate a stable revision
|
|
71
|
+
identifier and replace its output instead of appending duplicate content.
|
|
72
|
+
- [runQueueReports.ts](./examples/runQueueReports.ts): close the producer, restore
|
|
73
|
+
SQL-backed work in a fresh App, repair a missing source and replay a failure.
|
|
74
|
+
- [queue-reports.json](./examples/outputs/queue-reports.json): asserted output.
|
|
75
|
+
- [reportConsole.ts](./examples/reportConsole.ts): application-owned CLI adapter.
|
|
76
|
+
|
|
77
|
+
Expected result:
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"wrongQueueIdle": true,
|
|
82
|
+
"firstAttempt": "released",
|
|
83
|
+
"finalAttempt": "failed",
|
|
84
|
+
"replayLinked": true,
|
|
85
|
+
"repeated": "succeeded",
|
|
86
|
+
"text": "Report: Three notes ready\n",
|
|
87
|
+
"reportFiles": 1,
|
|
88
|
+
"remainingJobs": 0,
|
|
89
|
+
"retainedFailures": 1
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
The missing source deliberately fails twice. The lab fixes the cause, replays
|
|
94
|
+
the failed record and drains a polling worker. The original failure remains for
|
|
95
|
+
audit. Another dispatch replaces the same report, leaving one output.
|
|
96
|
+
Zero-second backoff is used only to keep the test deterministic.
|
|
97
|
+
|
|
98
|
+
## Run it in the starter
|
|
99
|
+
|
|
100
|
+
The disposable lab uses `Database.install()`. Your app must use migrations.
|
|
101
|
+
|
|
102
|
+
In the Notes + AI starter, add `QueuedJob` and `FailedJob` from
|
|
103
|
+
`@db3.ai/app/queue` to the existing `models` array in
|
|
104
|
+
`server/database/models.ts`, retaining every current model:
|
|
105
|
+
|
|
106
|
+
```sh
|
|
107
|
+
npm run db:make:migration -- add_queue_tables
|
|
108
|
+
# Review the generated migration before applying it.
|
|
109
|
+
npm run db:migrate
|
|
110
|
+
npm run db:check
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Now use your development app's database settings, not the test-only lab
|
|
114
|
+
configuration. The copied console adapter loads `.env`, registers
|
|
115
|
+
`WriteReportJob` and uses the database driver. Its local storage root is
|
|
116
|
+
`data/queue-reports`, or the absolute `REPORT_STORAGE_ROOT` you supply.
|
|
117
|
+
Exclude `data/` from Git. Producer and worker must share that storage.
|
|
118
|
+
|
|
119
|
+
```sh
|
|
120
|
+
npx tsx examples/reportConsole.ts report:seed
|
|
121
|
+
npx tsx examples/reportConsole.ts queue:dispatch reports.write.v1 '{"reportId":"weekly-v1"}' --queue=reports --tries=2
|
|
122
|
+
npx tsx examples/reportConsole.ts queue:work --queue=reports --once
|
|
123
|
+
npx tsx examples/reportConsole.ts queue:failed
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Expect a dispatch ID, a successful processing line, and
|
|
127
|
+
`data/queue-reports/reports/weekly-v1.txt` containing
|
|
128
|
+
`Report: Three notes ready`. `report:seed` and `queue:failed` are example-owned
|
|
129
|
+
commands. They write fixed sample input and list safe, bounded failure metadata.
|
|
130
|
+
|
|
131
|
+
For a continuous worker, use a separate terminal:
|
|
132
|
+
|
|
133
|
+
```sh
|
|
134
|
+
npx tsx examples/reportConsole.ts queue:work --queue=reports --max-jobs=1
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Ctrl-C drains the active tick before closing the App. To replay a repaired
|
|
138
|
+
terminal failure, use its failed-record ID, not its original active-job ID:
|
|
139
|
+
|
|
140
|
+
```sh
|
|
141
|
+
npx tsx examples/reportConsole.ts queue:retry 123 --queue=reports
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Replace `123` with a real ID from `queue:failed`. Repeated replay calls each
|
|
145
|
+
create another job; replay is not deduplicated. In your own app, reuse the same
|
|
146
|
+
bootstrap/configuration for the HTTP process and worker without starting an HTTP
|
|
147
|
+
listener in the worker. These are adapter command names, not global executables.
|
|
148
|
+
|
|
149
|
+
## Design the payload
|
|
150
|
+
|
|
151
|
+
Extend `QueueableJob`, validate constructor data and implement `handle()`.
|
|
152
|
+
The inherited `toJSON()` and `fromJSON()` cover normal JSON data. Set an explicit
|
|
153
|
+
stable `jobName`, such as `reports.write.v1`; class names otherwise become
|
|
154
|
+
durable names. Keep old names/payload versions supported while stored work can
|
|
155
|
+
still reference them.
|
|
156
|
+
|
|
157
|
+
Store immutable identities or versioned inputs, not open connections, request
|
|
158
|
+
objects, API keys or large file bodies. Load current application data in the
|
|
159
|
+
handler and recheck permission/state if access can be revoked after dispatch.
|
|
160
|
+
|
|
161
|
+
Dispatching a constructed job auto-registers its class in that process only.
|
|
162
|
+
Every separate worker must call `registerJob()` for all reachable jobs or supply
|
|
163
|
+
a `jobResolver`. `registerHandler()` is available for a stable named function
|
|
164
|
+
handler; it does not supply class constructor validation automatically.
|
|
165
|
+
|
|
166
|
+
## Queue names, timing and capacity
|
|
167
|
+
|
|
168
|
+
A `reports` worker only claims `reports` jobs. `delaySeconds` sets earliest
|
|
169
|
+
availability, not a guaranteed execution time. `workNextJob()` processes at most
|
|
170
|
+
one available job and returns `null` when idle. Its statuses are `succeeded`,
|
|
171
|
+
`released`, `deferred`, `failed` and `lease_lost`.
|
|
172
|
+
`processNextJob()` returns whether any job was processed, not whether it succeeded.
|
|
173
|
+
|
|
174
|
+
`startWorker()` starts a polling loop. `workerEnabled: false` or
|
|
175
|
+
`QUEUE_WORKER=false` disables it unless forced. `maxJobsPerTick` bounds sequential
|
|
176
|
+
work per tick; it is not concurrency. Use more supervised worker processes for
|
|
177
|
+
parallelism. Polling defaults to 1000 ms and valid intervals are clamped to at
|
|
178
|
+
least 100 ms. `queue:work --once` checks once and exits, even if delayed work exists.
|
|
179
|
+
|
|
180
|
+
## Retries and repair
|
|
181
|
+
|
|
182
|
+
Ordinary errors consume attempts. Dispatch defaults are three attempts,
|
|
183
|
+
exponential backoff starting at 15 seconds, capped at 3600 seconds, with jitter
|
|
184
|
+
off unless changed in queue options/environment. The supported strategies are
|
|
185
|
+
`linear` and `exponential`. For constant delay set `initialSeconds` and
|
|
186
|
+
`maxSeconds` equal; there is no `fixed` strategy.
|
|
187
|
+
|
|
188
|
+
[manageReportRetries.ts](./examples/manageReportRetries.ts) shows bounded backoff,
|
|
189
|
+
provider backpressure and replay. `retryUntilSeconds` bounds scheduling another
|
|
190
|
+
ordinary retry; it is not an execution deadline and does not abort a running job.
|
|
191
|
+
Throw `QueueRetryLaterError` only for deliberate backpressure. It restores the
|
|
192
|
+
attempt and bypasses the ordinary retry window, so the app must own a separate
|
|
193
|
+
deadline to prevent immortal work.
|
|
194
|
+
|
|
195
|
+
`failedJobs(limit)` reads recent failures. `retryFailed(id, options)` creates a
|
|
196
|
+
new UUID linked by `payload.retryOf` and preserves the old failure. Repair the
|
|
197
|
+
cause and check that the operation is still authorized before replaying. The
|
|
198
|
+
replacement receives a fresh retry policy/window; the original deadline is not
|
|
199
|
+
a continuing replay cutoff.
|
|
200
|
+
|
|
201
|
+
`onRetry()` runs after release, `onFinalFailure()` after persisted failure.
|
|
202
|
+
Deliberate deferrals call neither. Hook/listener errors go to
|
|
203
|
+
`onLifecycleError` and cannot reverse the transition. Use durable application
|
|
204
|
+
state for important recovery, not a hook that must never fail.
|
|
205
|
+
|
|
206
|
+
## Leases are not exactly-once execution
|
|
207
|
+
|
|
208
|
+
Database and Redis drivers renew reservations during execution, approximately
|
|
209
|
+
every third of `retryAfterSeconds` (at least one second). They check ownership
|
|
210
|
+
again before the outcome transition. Mutations are fenced by job ID and attempt.
|
|
211
|
+
|
|
212
|
+
A crash, blocked event loop or lost connection can let another worker claim
|
|
213
|
+
the job after expiry. `lease_lost` means this worker cannot safely commit the
|
|
214
|
+
queue outcome; the handler may already have performed external work.
|
|
215
|
+
`retryAfterSeconds` is a lease duration, not a timeout or cancellation API.
|
|
216
|
+
|
|
217
|
+
Make side effects idempotent. The report example replaces one stable output for
|
|
218
|
+
immutable input, but that is not an atomic file/database transaction. Email and
|
|
219
|
+
payments need application/provider idempotency. Avoid a non-transactional
|
|
220
|
+
"already done" read followed by an unprotected write.
|
|
221
|
+
|
|
222
|
+
## Chains and batches
|
|
223
|
+
|
|
224
|
+
[dispatchReportWorkflows.ts](./examples/dispatchReportWorkflows.ts) demonstrates
|
|
225
|
+
`chain()` for ordered work and `batch()` for independent jobs. Register every
|
|
226
|
+
job that can appear in a chain, not just its first class.
|
|
227
|
+
|
|
228
|
+
A chain persists the first job with its remaining steps. Success dispatches the
|
|
229
|
+
next step before deleting the predecessor. Those transitions are not atomic: a
|
|
230
|
+
crash between them can duplicate the successor. Every step still needs
|
|
231
|
+
idempotency and important workflows need reconciliation.
|
|
232
|
+
|
|
233
|
+
Successors inherit queue, maximum attempts and backoff. They do not inherit the
|
|
234
|
+
root's origin, initial delay or ordinary retry deadline. A terminal failure
|
|
235
|
+
stops advancement. Replaying its stored failure can resume the remaining chain.
|
|
236
|
+
|
|
237
|
+
A batch dispatches sequentially and returns IDs; it is not an all-or-nothing
|
|
238
|
+
transaction or a tracked batch record. Earlier dispatches remain if a later one
|
|
239
|
+
fails. There are no built-in batch counters, cancellation or completion callbacks.
|
|
240
|
+
|
|
241
|
+
## Transactions and dispatch
|
|
242
|
+
|
|
243
|
+
The default `app().queue` does not join a surrounding ActiveRecord transaction.
|
|
244
|
+
Do not enqueue before commit and assume rollback removes the job or workers
|
|
245
|
+
cannot see it. Commit, then dispatch for the simple case.
|
|
246
|
+
|
|
247
|
+
That still leaves a crash window between commit and dispatch. For work that
|
|
248
|
+
must not be missed, write an application outbox in the same transaction and
|
|
249
|
+
publish it with idempotency and reconciliation. No built-in `afterCommit()` or
|
|
250
|
+
transactional outbox contract exists yet.
|
|
251
|
+
|
|
252
|
+
## Drivers and shutdown
|
|
253
|
+
|
|
254
|
+
The database driver needs migrated `QueuedJob` and `FailedJob` tables.
|
|
255
|
+
Redis stores jobs, ready/delayed/reserved state and failures under a configurable
|
|
256
|
+
prefix. Choosing Redis does not migrate queued SQL work.
|
|
257
|
+
|
|
258
|
+
For Redis, configure a dedicated app/environment prefix and an appropriate
|
|
259
|
+
persistence, eviction and authentication/TLS policy. A prefix is not access
|
|
260
|
+
control. Retain the concrete driver you inject:
|
|
261
|
+
|
|
262
|
+
```ts
|
|
263
|
+
import { RedisQueueDriver } from '@db3.ai/app/queue';
|
|
264
|
+
import { App } from '@db3.ai/app/server';
|
|
265
|
+
|
|
266
|
+
const driver = new RedisQueueDriver({
|
|
267
|
+
url: process.env.QUEUE_REDIS_URL,
|
|
268
|
+
keyPrefix: 'my-app:development:queue',
|
|
269
|
+
});
|
|
270
|
+
const application = new App({ queue: { driver, queue: 'reports' } });
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
Stop and drain workers first, then `await driver.close()`, then
|
|
274
|
+
`await application.close()`. `App.close()` does not stop Queue workers or close
|
|
275
|
+
the Redis Queue driver. Adapt a Redis console host's `close()` callback to close
|
|
276
|
+
both resources after worker drain.
|
|
277
|
+
|
|
278
|
+
`stop()` stops future polling; `stopAndDrain()` waits for the current tick,
|
|
279
|
+
which can include several jobs. Neither aborts a handler. Give supervisors enough
|
|
280
|
+
shutdown grace time and restart workers after code changes.
|
|
281
|
+
|
|
282
|
+
## Progress, monitoring and privacy
|
|
283
|
+
|
|
284
|
+
Use `queue.events.subscribe()` for lifecycle observations; it returns an
|
|
285
|
+
unsubscribe function. Listeners are awaited after transitions. Slow listeners
|
|
286
|
+
delay the worker; exceptions cannot undo already committed state.
|
|
287
|
+
|
|
288
|
+
Successful jobs leave active storage. Keep user-visible progress/output
|
|
289
|
+
identities on application models. `QueueMonitor` is development telemetry, not
|
|
290
|
+
durable history or an accounting ledger. Monitor backlog age, retries, terminal
|
|
291
|
+
failures and ambiguous lease losses.
|
|
292
|
+
|
|
293
|
+
Payloads, lifecycle events and stored exceptions can expose sensitive values.
|
|
294
|
+
Never queue secrets; redact before exporting telemetry, restrict access to
|
|
295
|
+
inspection/replay and define retention. There is no automatic failure pruning.
|
|
296
|
+
|
|
297
|
+
## Troubleshooting
|
|
298
|
+
|
|
299
|
+
- Idle worker: check the exact queue name, availability time and reservation.
|
|
300
|
+
- Missing handler: fix registration/deployed job name, then inspect and replay.
|
|
301
|
+
- Missing SQL table: apply queue migrations against this process's database.
|
|
302
|
+
- Missing file: ensure workers share the same storage and immutable source.
|
|
303
|
+
- Hanging shutdown: drain the active tick and close any owned Redis driver.
|
|
304
|
+
- `failed` status with exit code zero: finite console commands report outcomes
|
|
305
|
+
in logs; shell success does not guarantee job success.
|
|
306
|
+
- Infrastructure failure: `workNextJob()` can reject before returning a result.
|
|
307
|
+
Do not turn an unavailable database into a silent empty queue.
|
|
308
|
+
|
|
309
|
+
## Test the workflow
|
|
310
|
+
|
|
311
|
+
The [Queue guide](https://db3.ai/docs/queue-overview#testing) renders the exact
|
|
312
|
+
service-owned test. Save it as `tests/queue/runQueueReports.test.ts`, retaining
|
|
313
|
+
the example and `outputs/` directory above:
|
|
314
|
+
|
|
315
|
+
```sh
|
|
316
|
+
npx vitest run tests/queue/runQueueReports.test.ts --maxWorkers=1
|
|
317
|
+
npx tsc --noEmit --target ES2022 --module ESNext --moduleResolution Bundler --types node --resolveJsonModule --skipLibCheck examples/*.ts
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
It uses real SQL, files and Queue, covering failure/repair/replay, App lifetime,
|
|
321
|
+
worker drain, repeated output and invalid identities. Tests fail when SQL is
|
|
322
|
+
unavailable rather than skipping this documented path.
|
|
323
|
+
|
|
324
|
+
For source-repository maintenance:
|
|
325
|
+
|
|
326
|
+
```sh
|
|
327
|
+
npm run test:service --workspace packages/app -- queue --maxWorkers=1
|
|
328
|
+
npm run check --workspace packages/app
|
|
329
|
+
npm run framework:package:test
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
Older deterministic-driver tests execute the small chain/batch/backpressure
|
|
333
|
+
examples. Built-in-driver suites separately exercise SQL/Redis leases and
|
|
334
|
+
transitions. Redis tests may skip locally when unavailable; release verification
|
|
335
|
+
must set `TEST_REDIS_REQUIRED=1` and supply real infrastructure. A passed SQL
|
|
336
|
+
report lab is not proof of Redis operational readiness.
|
|
337
|
+
|
|
338
|
+
## Reference, coverage and follow-up
|
|
339
|
+
|
|
340
|
+
The [Queue API reference](https://db3.ai/docs/queue-api) renders freshly emitted
|
|
341
|
+
service, job, payload, retry, worker, driver, Redis and console contracts.
|
|
342
|
+
Use `@db3.ai/app/queue` imports, not internal declaration paths.
|
|
343
|
+
|
|
344
|
+
Taught and executed here: SQL persistence, registration, named queues, retries,
|
|
345
|
+
terminal history, repair/replay, worker drain, repeatable output and input
|
|
346
|
+
validation. Explained with separate tests/reference: leases, Redis, lifecycle
|
|
347
|
+
observers, hooks, chains, batches and console adapters.
|
|
348
|
+
|
|
349
|
+
Not implemented: hard job timeout/cancellation, built-in unique jobs, atomic
|
|
350
|
+
chain handoff, first-class tracked batches, retry-all, automatic pruning or a
|
|
351
|
+
transactional outbox. Follow-up walkthroughs: shared-storage deployment,
|
|
352
|
+
provider-backed AI budgets, idempotent email, and failure-retention operations.
|
|
353
|
+
|
|
354
|
+
Queue owns its contracts, drivers, examples and tests. It depends on Database,
|
|
355
|
+
Logging and App composition; Scheduler and Flows consume its lifecycle.
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
## Create a job in your app
|
|
359
|
+
|
|
360
|
+
Run `npx db3 queue:make-job GenerateReportJob` from the app root. It creates
|
|
361
|
+
`server/jobs/GenerateReportJob.ts` and refuses to overwrite an existing file.
|
|
362
|
+
Replace the template payload and implement `handle()`, then register the job in
|
|
363
|
+
the shared application bootstrap before dispatching it. The unimplemented
|
|
364
|
+
handler throws so a generated skeleton cannot silently consume real work.
|
|
365
|
+
|
|
366
|
+
Editor or Studio integrations can use `jobTemplate(name)` to preview the same
|
|
367
|
+
source and `createJob({ appDirectory, name })` to create the file. These are
|
|
368
|
+
shared framework operations; a Studio screen is not included in this package.
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import type * as queue from './contracts';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Defaults used to resolve one durable queue retry policy.
|
|
5
|
+
*/
|
|
6
|
+
export interface QueueRetryBackoffDefaults {
|
|
7
|
+
/** Default delay-growth strategy. */
|
|
8
|
+
strategy: queue.QueueRetryBackoffStrategy;
|
|
9
|
+
/** Default first retry delay in seconds. */
|
|
10
|
+
initialSeconds: number;
|
|
11
|
+
/** Default maximum retry delay in seconds. */
|
|
12
|
+
maxSeconds: number;
|
|
13
|
+
/** Default equal-jitter behavior. */
|
|
14
|
+
jitter: boolean;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Resolves validated durable backoff values from dispatch overrides and defaults.
|
|
19
|
+
*
|
|
20
|
+
* @param options - Per-dispatch retry backoff overrides.
|
|
21
|
+
* @param defaults - Queue-level retry backoff defaults.
|
|
22
|
+
* @returns Complete retry backoff safe to persist with the job.
|
|
23
|
+
*/
|
|
24
|
+
export function resolveQueueRetryBackoff(
|
|
25
|
+
options: queue.QueueRetryBackoffOptions | undefined,
|
|
26
|
+
defaults: QueueRetryBackoffDefaults,
|
|
27
|
+
): queue.QueueRetryBackoff {
|
|
28
|
+
const initialSeconds = finiteNonNegative(options?.initialSeconds, defaults.initialSeconds);
|
|
29
|
+
const maxSeconds = Math.max(
|
|
30
|
+
initialSeconds,
|
|
31
|
+
finiteNonNegative(options?.maxSeconds, defaults.maxSeconds),
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
strategy: options?.strategy === 'linear' || options?.strategy === 'exponential'
|
|
36
|
+
? options.strategy
|
|
37
|
+
: defaults.strategy,
|
|
38
|
+
initialSeconds,
|
|
39
|
+
maxSeconds,
|
|
40
|
+
jitter: options?.jitter ?? defaults.jitter,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Calculates the delay for one consumed queue attempt.
|
|
46
|
+
*
|
|
47
|
+
* Equal jitter keeps half of the calculated delay and randomizes the remaining
|
|
48
|
+
* half, preventing large groups of failed jobs from becoming available together.
|
|
49
|
+
*
|
|
50
|
+
* @param backoff - Durable retry backoff attached to the queued job.
|
|
51
|
+
* @param attempt - One-based consumed attempt count.
|
|
52
|
+
* @param random - Random number source used for jitter.
|
|
53
|
+
* @returns Retry delay in whole seconds.
|
|
54
|
+
*/
|
|
55
|
+
export function queueRetryDelaySeconds(
|
|
56
|
+
backoff: queue.QueueRetryBackoff,
|
|
57
|
+
attempt: number,
|
|
58
|
+
random: () => number = Math.random,
|
|
59
|
+
): number {
|
|
60
|
+
const normalizedAttempt = Math.max(1, Math.trunc(attempt));
|
|
61
|
+
const multiplier = backoff.strategy === 'exponential'
|
|
62
|
+
? 2 ** Math.max(0, normalizedAttempt - 1)
|
|
63
|
+
: normalizedAttempt;
|
|
64
|
+
const calculated = Math.min(backoff.maxSeconds, backoff.initialSeconds * multiplier);
|
|
65
|
+
|
|
66
|
+
if (!backoff.jitter || calculated <= 0) {
|
|
67
|
+
return Math.ceil(calculated);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const minimum = calculated / 2;
|
|
71
|
+
const boundedRandom = Math.min(1, Math.max(0, random()));
|
|
72
|
+
|
|
73
|
+
return Math.max(1, Math.ceil(minimum + ((calculated - minimum) * boundedRandom)));
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Converts a relative retry window into an absolute Unix timestamp.
|
|
78
|
+
*
|
|
79
|
+
* @param now - Dispatch timestamp in Unix seconds.
|
|
80
|
+
* @param retryUntilSeconds - Requested retry window in seconds.
|
|
81
|
+
* @returns Absolute retry deadline, or undefined when no valid window was supplied.
|
|
82
|
+
*/
|
|
83
|
+
export function queueRetryUntil(
|
|
84
|
+
now: number,
|
|
85
|
+
retryUntilSeconds: number | undefined,
|
|
86
|
+
): number | undefined {
|
|
87
|
+
if (
|
|
88
|
+
typeof retryUntilSeconds !== 'number'
|
|
89
|
+
|| !Number.isFinite(retryUntilSeconds)
|
|
90
|
+
|| retryUntilSeconds <= 0
|
|
91
|
+
) {
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return now + Math.ceil(retryUntilSeconds);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Checks whether scheduling another ordinary retry would exceed its deadline.
|
|
100
|
+
*
|
|
101
|
+
* @param retryUntil - Absolute Unix retry deadline stored on the queued job.
|
|
102
|
+
* @param delaySeconds - Calculated delay before the next attempt.
|
|
103
|
+
* @param now - Current Unix timestamp.
|
|
104
|
+
* @returns True when the next retry must become terminal instead.
|
|
105
|
+
*/
|
|
106
|
+
export function queueRetryDeadlineReached(
|
|
107
|
+
retryUntil: number | undefined,
|
|
108
|
+
delaySeconds: number,
|
|
109
|
+
now: number,
|
|
110
|
+
): boolean {
|
|
111
|
+
return typeof retryUntil === 'number'
|
|
112
|
+
&& Number.isFinite(retryUntil)
|
|
113
|
+
&& now + delaySeconds > retryUntil;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Normalizes an optional numeric value to a finite non-negative number.
|
|
118
|
+
*
|
|
119
|
+
* @param value - Requested numeric value.
|
|
120
|
+
* @param fallback - Value used when the request is invalid.
|
|
121
|
+
* @returns Finite non-negative number.
|
|
122
|
+
*/
|
|
123
|
+
function finiteNonNegative(value: number | undefined, fallback: number): number {
|
|
124
|
+
const selected = typeof value === 'number' && Number.isFinite(value)
|
|
125
|
+
? value
|
|
126
|
+
: fallback;
|
|
127
|
+
|
|
128
|
+
return Math.max(0, selected);
|
|
129
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { defineCommand } from '../../cli';
|
|
2
|
+
import makeJob from './makeJob';
|
|
3
|
+
|
|
4
|
+
export { makeJob };
|
|
5
|
+
|
|
6
|
+
/** Queue's explicit command index; source generation does not require a running app. */
|
|
7
|
+
export const queueCommands = [defineCommand({
|
|
8
|
+
name: 'queue:make-job', description: 'Create an application job under server/jobs.',
|
|
9
|
+
parameters: [{ name: 'name', required: true }], needsApp: false,
|
|
10
|
+
/** Maps the command's named parameter and app root to the source-generation action. */
|
|
11
|
+
handle: (parameters, context) => makeJob({ appDirectory: context.directory, name: parameters.name! }),
|
|
12
|
+
formatResult: result => `Created ${result.path}\nImplement handle(), then register the class in your application bootstrap.`,
|
|
13
|
+
})];
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createJob } from '../createJob';
|
|
2
|
+
import type { CreateJobOptions, CreatedJob } from '../contracts/CreateJob';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Creates an app-owned job through the shared source-generation operation.
|
|
6
|
+
* @param options - Application directory and validated job class name.
|
|
7
|
+
* @returns Created file and source, usable by terminal and editor callers alike.
|
|
8
|
+
*/
|
|
9
|
+
export default async function makeJob(options: CreateJobOptions): Promise<CreatedJob> {
|
|
10
|
+
return createJob(options);
|
|
11
|
+
}
|