@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,685 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { DatabaseQueueDriver } from './drivers/DatabaseQueueDriver.js';
|
|
3
|
+
import { RedisQueueDriver } from './drivers/RedisQueueDriver.js';
|
|
4
|
+
import { enableDefaultQueueMonitor } from './queueMonitor.js';
|
|
5
|
+
import { QueueEvents } from './QueueEvents.js';
|
|
6
|
+
import { queueRetryDeadlineReached, queueRetryDelaySeconds, queueRetryUntil, resolveQueueRetryBackoff } from './RetryPolicy.js';
|
|
7
|
+
import { QueueWorker } from './QueueWorker.js';
|
|
8
|
+
import { isQueueableJob, isQueueableJobClass, queueableJobFromJSON, queueableJobName } from './QueueableJob.js';
|
|
9
|
+
import { isQueueRetryLaterError } from './QueueRetryLaterError.js';
|
|
10
|
+
/**
|
|
11
|
+
* Coordinates queue drivers, job handlers, dispatching, retries, and one-off processing.
|
|
12
|
+
*
|
|
13
|
+
* The Queue owns the durable job semantics. Long-running polling lives in QueueWorker so
|
|
14
|
+
* callers can either process one job at a time or start a worker loop over the same API.
|
|
15
|
+
*/
|
|
16
|
+
export class Queue {
|
|
17
|
+
db;
|
|
18
|
+
options;
|
|
19
|
+
handlers = new Map();
|
|
20
|
+
driver;
|
|
21
|
+
monitor;
|
|
22
|
+
events;
|
|
23
|
+
constructor(db, options = {}) {
|
|
24
|
+
this.db = db;
|
|
25
|
+
this.options = options;
|
|
26
|
+
this.driver = this.resolveDriver();
|
|
27
|
+
this.events = new QueueEvents(failure => {
|
|
28
|
+
this.reportLifecycleFailure(failure);
|
|
29
|
+
});
|
|
30
|
+
this.monitor = enableDefaultQueueMonitor(this.options.queueMonitor);
|
|
31
|
+
if (this.monitor) {
|
|
32
|
+
this.events.subscribe(event => {
|
|
33
|
+
this.monitor?.recordLifecycleEvent(event);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Returns the queue lifecycle monitor attached to this queue, when enabled.
|
|
39
|
+
*/
|
|
40
|
+
get queueMonitor() {
|
|
41
|
+
return this.monitor;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Returns recent terminal failures from the configured queue driver.
|
|
45
|
+
*
|
|
46
|
+
* Drivers without persisted failure inspection return an empty collection so
|
|
47
|
+
* development tooling can use one queue-level API without knowing the driver.
|
|
48
|
+
*
|
|
49
|
+
* @param limit - Maximum number of recent failed jobs to return.
|
|
50
|
+
* @returns Recent failed jobs ordered from newest to oldest.
|
|
51
|
+
*/
|
|
52
|
+
async failedJobs(limit = 100) {
|
|
53
|
+
if (!this.driver.failedJobs)
|
|
54
|
+
return [];
|
|
55
|
+
return await this.driver.failedJobs(limit);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Replays one terminal failure as a new active queue job.
|
|
59
|
+
*
|
|
60
|
+
* The failed record remains untouched for audit. The replacement receives a
|
|
61
|
+
* new UUID and a retry reference to the original failure.
|
|
62
|
+
*
|
|
63
|
+
* @param id - Driver-owned failed-job record id.
|
|
64
|
+
* @param options - Optional dispatch overrides for the replacement job.
|
|
65
|
+
* @returns Queue driver id for the replacement job.
|
|
66
|
+
*/
|
|
67
|
+
async retryFailed(id, options = {}) {
|
|
68
|
+
if (!this.driver.failedJob) {
|
|
69
|
+
throw new Error(`Queue driver "${this.driver.name}" does not support failed-job replay.`);
|
|
70
|
+
}
|
|
71
|
+
const failed = await this.driver.failedJob(id);
|
|
72
|
+
if (!failed) {
|
|
73
|
+
throw new Error(`Failed queue job "${String(id)}" was not found.`);
|
|
74
|
+
}
|
|
75
|
+
return await this.pushJob(failed.payload.job, failed.payload.data, {
|
|
76
|
+
...options,
|
|
77
|
+
queue: options.queue ?? failed.queue,
|
|
78
|
+
maxTries: options.maxTries ?? failed.payload.maxTries,
|
|
79
|
+
backoff: options.backoff ?? failed.payload.backoff,
|
|
80
|
+
origin: options.origin ?? failed.payload.origin,
|
|
81
|
+
}, failed.payload.displayName, failed.payload.chained ?? [], {
|
|
82
|
+
failedJobId: failed.id,
|
|
83
|
+
jobUuid: failed.payload.uuid,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Registers an async handler for a named job payload.
|
|
88
|
+
*/
|
|
89
|
+
registerHandler(name, handler) {
|
|
90
|
+
this.handlers.set(name, job => {
|
|
91
|
+
return {
|
|
92
|
+
handle: () => handler(job),
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Registers a queueable job class by rehydrating it for each queued payload.
|
|
98
|
+
*
|
|
99
|
+
* @param Job - Queueable job class to register.
|
|
100
|
+
*/
|
|
101
|
+
registerJob(Job) {
|
|
102
|
+
if (!isQueueableJobClass(Job)) {
|
|
103
|
+
throw new Error('Queue.registerJob requires a QueueableJob class.');
|
|
104
|
+
}
|
|
105
|
+
this.handlers.set(queueableJobName(Job), job => {
|
|
106
|
+
const instance = queueableJobFromJSON(Job, job.payload.data);
|
|
107
|
+
const context = this.createQueueableJobContext(job);
|
|
108
|
+
return {
|
|
109
|
+
handle: () => instance.handle(context),
|
|
110
|
+
onRetry: (error, delaySeconds) => instance.onRetry({
|
|
111
|
+
...context,
|
|
112
|
+
error,
|
|
113
|
+
delaySeconds,
|
|
114
|
+
}),
|
|
115
|
+
onFinalFailure: error => instance.onFinalFailure({
|
|
116
|
+
...context,
|
|
117
|
+
error,
|
|
118
|
+
}),
|
|
119
|
+
};
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
async dispatch(job, dataOrOptions = {}, maybeOptions = {}) {
|
|
123
|
+
const serialized = isQueueableJob(job) ? job.serialize() : null;
|
|
124
|
+
const name = resolveDispatchedJobName(job, serialized?.job);
|
|
125
|
+
const options = serialized ? dataOrOptions : maybeOptions;
|
|
126
|
+
if (serialized) {
|
|
127
|
+
if (!this.handlers.has(name)) {
|
|
128
|
+
this.registerJob(job.constructor);
|
|
129
|
+
}
|
|
130
|
+
return await this.dispatchSerializedJob(serialized, options);
|
|
131
|
+
}
|
|
132
|
+
const data = dataOrOptions;
|
|
133
|
+
return await this.pushJob(name, data, options);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Dispatches the first job in a serialized chain.
|
|
137
|
+
*
|
|
138
|
+
* @param jobs - Serializable jobs to run in order.
|
|
139
|
+
* @param options - Dispatch options for the first job.
|
|
140
|
+
* @returns Queue id for the first queued job.
|
|
141
|
+
*/
|
|
142
|
+
async chain(jobs, options = {}) {
|
|
143
|
+
const [firstJob, ...remainingJobs] = jobs;
|
|
144
|
+
if (!firstJob) {
|
|
145
|
+
throw new Error('Queue.chain requires at least one job.');
|
|
146
|
+
}
|
|
147
|
+
if (!this.handlers.has(queueableJobName(firstJob.constructor))) {
|
|
148
|
+
this.registerJob(firstJob.constructor);
|
|
149
|
+
}
|
|
150
|
+
return await this.dispatchSerializedJob(firstJob.serialize(), options, remainingJobs.map(job => job.serialize()));
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Dispatches several queueable jobs independently.
|
|
154
|
+
*
|
|
155
|
+
* @param jobs - Serializable jobs to dispatch.
|
|
156
|
+
* @param options - Dispatch options applied to each job.
|
|
157
|
+
* @returns Queue ids for the dispatched jobs.
|
|
158
|
+
*/
|
|
159
|
+
async batch(jobs, options = {}) {
|
|
160
|
+
const ids = [];
|
|
161
|
+
for (const job of jobs) {
|
|
162
|
+
ids.push(await this.dispatch(job, options));
|
|
163
|
+
}
|
|
164
|
+
return ids;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Processes at most one available job and returns whether any work was handled.
|
|
168
|
+
*/
|
|
169
|
+
async processNextJob(queue = this.options.queue || 'default') {
|
|
170
|
+
return (await this.workNextJob(queue)) !== null;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Claims one job, runs its handler, and records the resulting success, retry, or failure.
|
|
174
|
+
*/
|
|
175
|
+
async workNextJob(queue = this.options.queue || 'default', options = {}) {
|
|
176
|
+
const retryAfterSeconds = this.retryAfterSeconds();
|
|
177
|
+
const job = await this.driver.pop(queue, {
|
|
178
|
+
retryAfterSeconds,
|
|
179
|
+
});
|
|
180
|
+
if (!job)
|
|
181
|
+
return null;
|
|
182
|
+
options.onClaimed?.(job);
|
|
183
|
+
await this.publishJobEvent('claimed', job);
|
|
184
|
+
let execution = null;
|
|
185
|
+
const startedAt = performance.now();
|
|
186
|
+
const stopLeaseHeartbeat = this.startLeaseHeartbeat(job, retryAfterSeconds);
|
|
187
|
+
try {
|
|
188
|
+
const factory = await this.handlerForJob(job.payload.job);
|
|
189
|
+
if (!factory) {
|
|
190
|
+
throw new Error(`No handler registered for queued job "${job.payload.job}".`);
|
|
191
|
+
}
|
|
192
|
+
execution = await factory(job);
|
|
193
|
+
await execution.handle();
|
|
194
|
+
await stopLeaseHeartbeat();
|
|
195
|
+
const leaseError = await this.confirmLease(job, retryAfterSeconds, 'complete');
|
|
196
|
+
if (leaseError) {
|
|
197
|
+
return await this.recordLostLease(job, startedAt, leaseError);
|
|
198
|
+
}
|
|
199
|
+
await this.dispatchNextChainedJob(job);
|
|
200
|
+
const completed = await this.driver.delete(job);
|
|
201
|
+
if (!completed) {
|
|
202
|
+
return await this.recordLostLease(job, startedAt, this.lostLeaseError(job, 'complete'));
|
|
203
|
+
}
|
|
204
|
+
await this.publishJobEvent('succeeded', job, {
|
|
205
|
+
durationMs: performance.now() - startedAt,
|
|
206
|
+
});
|
|
207
|
+
return {
|
|
208
|
+
job,
|
|
209
|
+
status: 'succeeded',
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
await stopLeaseHeartbeat();
|
|
214
|
+
const leaseError = await this.confirmLease(job, retryAfterSeconds, 'transition');
|
|
215
|
+
if (leaseError) {
|
|
216
|
+
return await this.recordLostLease(job, startedAt, leaseError);
|
|
217
|
+
}
|
|
218
|
+
if (isQueueRetryLaterError(error)) {
|
|
219
|
+
const delaySeconds = Math.max(0, Math.ceil(error.delaySeconds));
|
|
220
|
+
const deferredJob = {
|
|
221
|
+
...job,
|
|
222
|
+
attempts: Math.max(0, job.attempts - 1),
|
|
223
|
+
};
|
|
224
|
+
const deferred = await this.driver.defer(job, delaySeconds);
|
|
225
|
+
if (!deferred) {
|
|
226
|
+
return await this.recordLostLease(job, startedAt, this.lostLeaseError(job, 'defer'));
|
|
227
|
+
}
|
|
228
|
+
await this.publishJobEvent('deferred', deferredJob, {
|
|
229
|
+
delaySeconds,
|
|
230
|
+
durationMs: performance.now() - startedAt,
|
|
231
|
+
error,
|
|
232
|
+
});
|
|
233
|
+
return {
|
|
234
|
+
job: deferredJob,
|
|
235
|
+
status: 'deferred',
|
|
236
|
+
delaySeconds,
|
|
237
|
+
error,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
const delaySeconds = queueRetryDelaySeconds(job.payload.backoff ?? this.resolveRetryBackoff(), job.attempts);
|
|
241
|
+
const retryDeadlineReached = queueRetryDeadlineReached(job.payload.retryUntil, delaySeconds, unixTimestamp());
|
|
242
|
+
if (job.attempts >= job.payload.maxTries || retryDeadlineReached) {
|
|
243
|
+
const failed = await this.driver.fail(job, error);
|
|
244
|
+
if (!failed) {
|
|
245
|
+
return await this.recordLostLease(job, startedAt, this.lostLeaseError(job, 'fail'));
|
|
246
|
+
}
|
|
247
|
+
const event = await this.publishJobEvent('failed', job, {
|
|
248
|
+
durationMs: performance.now() - startedAt,
|
|
249
|
+
error,
|
|
250
|
+
});
|
|
251
|
+
await this.runJobHook(execution, 'onFinalFailure', event, error);
|
|
252
|
+
return {
|
|
253
|
+
job,
|
|
254
|
+
status: 'failed',
|
|
255
|
+
error,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
const released = await this.driver.release(job, delaySeconds);
|
|
259
|
+
if (!released) {
|
|
260
|
+
return await this.recordLostLease(job, startedAt, this.lostLeaseError(job, 'release'));
|
|
261
|
+
}
|
|
262
|
+
const event = await this.publishJobEvent('released', job, {
|
|
263
|
+
delaySeconds,
|
|
264
|
+
durationMs: performance.now() - startedAt,
|
|
265
|
+
error,
|
|
266
|
+
});
|
|
267
|
+
await this.runJobHook(execution, 'onRetry', event, error, delaySeconds);
|
|
268
|
+
return {
|
|
269
|
+
job,
|
|
270
|
+
status: 'released',
|
|
271
|
+
delaySeconds,
|
|
272
|
+
error,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Periodically renews a claimed job while its handler is still running.
|
|
278
|
+
*
|
|
279
|
+
* @param job - Claimed queue job.
|
|
280
|
+
* @param retryAfterSeconds - Driver lease duration in seconds.
|
|
281
|
+
* @returns Async stop function that also waits for an in-flight renewal.
|
|
282
|
+
*/
|
|
283
|
+
startLeaseHeartbeat(job, retryAfterSeconds) {
|
|
284
|
+
const intervalMs = Math.max(1000, Math.floor(retryAfterSeconds * 1000 / 3));
|
|
285
|
+
let stopped = false;
|
|
286
|
+
let timer = null;
|
|
287
|
+
let inFlight = null;
|
|
288
|
+
/**
|
|
289
|
+
* Renews the current lease once and schedules the next heartbeat.
|
|
290
|
+
*/
|
|
291
|
+
const renew = async () => {
|
|
292
|
+
if (stopped)
|
|
293
|
+
return;
|
|
294
|
+
inFlight = this.driver.touch(job, retryAfterSeconds)
|
|
295
|
+
.then((renewed) => {
|
|
296
|
+
if (!renewed) {
|
|
297
|
+
stopped = true;
|
|
298
|
+
console.error(`[queue] Lost lease for ${job.payload.job} job ${String(job.id)} attempt ${job.attempts}.`);
|
|
299
|
+
}
|
|
300
|
+
})
|
|
301
|
+
.catch((error) => {
|
|
302
|
+
console.error(`[queue] Failed to renew lease for ${job.payload.job} job ${String(job.id)}.`, error);
|
|
303
|
+
});
|
|
304
|
+
await inFlight;
|
|
305
|
+
inFlight = null;
|
|
306
|
+
if (!stopped) {
|
|
307
|
+
timer = setTimeout(renew, intervalMs);
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
timer = setTimeout(renew, intervalMs);
|
|
311
|
+
/**
|
|
312
|
+
* Stops future heartbeats and waits for the current renewal to settle.
|
|
313
|
+
*/
|
|
314
|
+
return async () => {
|
|
315
|
+
stopped = true;
|
|
316
|
+
if (timer) {
|
|
317
|
+
clearTimeout(timer);
|
|
318
|
+
timer = null;
|
|
319
|
+
}
|
|
320
|
+
await inFlight;
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Renews a lease immediately before committing an attempt outcome.
|
|
325
|
+
*
|
|
326
|
+
* A final renewal is both an ownership check and a fresh fencing window for
|
|
327
|
+
* the short transition that follows. Renewal errors are treated as unknown
|
|
328
|
+
* ownership so the worker leaves the durable record for safe recovery.
|
|
329
|
+
*
|
|
330
|
+
* @param job - Claimed queue job.
|
|
331
|
+
* @param retryAfterSeconds - Driver lease duration in seconds.
|
|
332
|
+
* @param operation - Outcome the worker intends to commit.
|
|
333
|
+
* @returns Null when ownership is confirmed, otherwise a lease error.
|
|
334
|
+
*/
|
|
335
|
+
async confirmLease(job, retryAfterSeconds, operation) {
|
|
336
|
+
try {
|
|
337
|
+
const renewed = await this.driver.touch(job, retryAfterSeconds);
|
|
338
|
+
return renewed
|
|
339
|
+
? null
|
|
340
|
+
: this.lostLeaseError(job, operation);
|
|
341
|
+
}
|
|
342
|
+
catch (error) {
|
|
343
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
344
|
+
return this.lostLeaseError(job, operation, message);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Records that a stale attempt stopped before changing newer queue state.
|
|
349
|
+
*
|
|
350
|
+
* @param job - Claimed job whose lease could not be confirmed.
|
|
351
|
+
* @param startedAt - Monotonic handler start time.
|
|
352
|
+
* @param error - Error describing the rejected transition.
|
|
353
|
+
* @returns Lease-lost queue result for worker logging.
|
|
354
|
+
*/
|
|
355
|
+
async recordLostLease(job, startedAt, error) {
|
|
356
|
+
await this.publishJobEvent('lease_lost', job, {
|
|
357
|
+
durationMs: performance.now() - startedAt,
|
|
358
|
+
error,
|
|
359
|
+
});
|
|
360
|
+
return {
|
|
361
|
+
job,
|
|
362
|
+
status: 'lease_lost',
|
|
363
|
+
error,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Creates a consistent error for one rejected attempt transition.
|
|
368
|
+
*
|
|
369
|
+
* @param job - Claimed queue job.
|
|
370
|
+
* @param operation - Transition rejected by lease fencing.
|
|
371
|
+
* @param detail - Optional driver error explaining unknown ownership.
|
|
372
|
+
* @returns Lease ownership error suitable for monitoring and logs.
|
|
373
|
+
*/
|
|
374
|
+
lostLeaseError(job, operation, detail) {
|
|
375
|
+
if (detail) {
|
|
376
|
+
return new Error(`Could not confirm queue attempt ${job.attempts} still owns ${job.payload.job} job ${String(job.id)}; refused to ${operation}. Driver error: ${detail}`);
|
|
377
|
+
}
|
|
378
|
+
return new Error(`Queue attempt ${job.attempts} no longer owns ${job.payload.job} job ${String(job.id)}; refused to ${operation}.`);
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Starts a polling worker for a queue unless workers are disabled by configuration.
|
|
382
|
+
*/
|
|
383
|
+
startWorker(queue = process.env.QUEUE_NAME || this.options.queue || 'default', options = {}) {
|
|
384
|
+
if (this.workerDisabled() && !options.force)
|
|
385
|
+
return null;
|
|
386
|
+
const worker = new QueueWorker(this, queue, options.intervalMs ?? this.workerIntervalMs(), options.maxJobsPerTick ?? this.maxJobsPerTick(), options.logger, options.verbose ?? false);
|
|
387
|
+
worker.start();
|
|
388
|
+
return worker;
|
|
389
|
+
}
|
|
390
|
+
resolveDriver() {
|
|
391
|
+
if (this.options.driver && typeof this.options.driver !== 'string') {
|
|
392
|
+
return this.options.driver;
|
|
393
|
+
}
|
|
394
|
+
const driverName = this.options.driver
|
|
395
|
+
|| this.options.driverName
|
|
396
|
+
|| queueDriverFromEnv();
|
|
397
|
+
if (driverName === 'database') {
|
|
398
|
+
return new DatabaseQueueDriver(this.db);
|
|
399
|
+
}
|
|
400
|
+
if (driverName === 'redis') {
|
|
401
|
+
return new RedisQueueDriver(this.options.redis);
|
|
402
|
+
}
|
|
403
|
+
throw new Error(`Unsupported queue driver "${driverName}".`);
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Returns a positive reservation timeout for queue claims and heartbeats.
|
|
407
|
+
*
|
|
408
|
+
* @returns Queue lease duration in whole seconds.
|
|
409
|
+
*/
|
|
410
|
+
retryAfterSeconds() {
|
|
411
|
+
const configured = this.options.retryAfterSeconds
|
|
412
|
+
?? Number(process.env.QUEUE_RETRY_AFTER_SECONDS || 90);
|
|
413
|
+
if (!Number.isFinite(configured) || configured <= 0)
|
|
414
|
+
return 90;
|
|
415
|
+
return Math.max(1, Math.trunc(configured));
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Resolves the durable backoff stored on a newly dispatched job.
|
|
419
|
+
*
|
|
420
|
+
* @param options - Optional per-dispatch backoff overrides.
|
|
421
|
+
* @returns Complete validated retry backoff.
|
|
422
|
+
*/
|
|
423
|
+
resolveRetryBackoff(options) {
|
|
424
|
+
const configuredStrategy = this.options.retryBackoffStrategy
|
|
425
|
+
?? retryBackoffStrategyFromEnv();
|
|
426
|
+
const defaults = {
|
|
427
|
+
strategy: configuredStrategy,
|
|
428
|
+
initialSeconds: this.options.retryDelaySeconds
|
|
429
|
+
?? Number(process.env.QUEUE_RETRY_DELAY_SECONDS || 15),
|
|
430
|
+
maxSeconds: this.options.retryMaxDelaySeconds
|
|
431
|
+
?? Number(process.env.QUEUE_RETRY_MAX_DELAY_SECONDS || 3600),
|
|
432
|
+
jitter: this.options.retryJitter
|
|
433
|
+
?? booleanFromEnv('QUEUE_RETRY_JITTER', false),
|
|
434
|
+
};
|
|
435
|
+
return resolveQueueRetryBackoff(options, defaults);
|
|
436
|
+
}
|
|
437
|
+
workerIntervalMs() {
|
|
438
|
+
return this.options.workerIntervalMs
|
|
439
|
+
?? Number(process.env.QUEUE_WORKER_INTERVAL_MS || 1000);
|
|
440
|
+
}
|
|
441
|
+
maxJobsPerTick() {
|
|
442
|
+
return this.options.maxJobsPerTick
|
|
443
|
+
?? Number(process.env.QUEUE_WORKER_MAX_JOBS_PER_TICK || 5);
|
|
444
|
+
}
|
|
445
|
+
workerDisabled() {
|
|
446
|
+
if (this.options.workerEnabled !== undefined) {
|
|
447
|
+
return !this.options.workerEnabled;
|
|
448
|
+
}
|
|
449
|
+
return process.env.QUEUE_WORKER === 'false';
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Builds the runtime context passed to a rehydrated queueable job.
|
|
453
|
+
*/
|
|
454
|
+
createQueueableJobContext(job) {
|
|
455
|
+
return {
|
|
456
|
+
job,
|
|
457
|
+
queue: this,
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Returns a registered handler, resolving a conventional job class when possible.
|
|
462
|
+
*/
|
|
463
|
+
async handlerForJob(jobName) {
|
|
464
|
+
const existing = this.handlers.get(jobName);
|
|
465
|
+
if (existing)
|
|
466
|
+
return existing;
|
|
467
|
+
if (!this.options.jobResolver)
|
|
468
|
+
return null;
|
|
469
|
+
const resolved = await this.options.jobResolver({
|
|
470
|
+
jobName,
|
|
471
|
+
});
|
|
472
|
+
if (!resolved)
|
|
473
|
+
return null;
|
|
474
|
+
this.registerJob(resolved);
|
|
475
|
+
return this.handlers.get(jobName) ?? null;
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Pushes a serialized queueable job to the driver.
|
|
479
|
+
*
|
|
480
|
+
* @param serialized - Serialized queueable job payload.
|
|
481
|
+
* @param options - Dispatch options for this queued job.
|
|
482
|
+
* @param chained - Optional chain tail to attach to this queued job.
|
|
483
|
+
* @returns Queue id for the pushed job.
|
|
484
|
+
*/
|
|
485
|
+
async dispatchSerializedJob(serialized, options, chained = serialized.chained ?? []) {
|
|
486
|
+
return await this.pushJob(serialized.job, serialized.data, options, serialized.displayName, chained);
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Dispatches the next job from a completed job chain.
|
|
490
|
+
*
|
|
491
|
+
* @param job - Successfully handled queue job.
|
|
492
|
+
*/
|
|
493
|
+
async dispatchNextChainedJob(job) {
|
|
494
|
+
const [nextJob, ...remainingJobs] = job.payload.chained ?? [];
|
|
495
|
+
if (!nextJob)
|
|
496
|
+
return;
|
|
497
|
+
await this.dispatchSerializedJob(nextJob, {
|
|
498
|
+
queue: job.queue,
|
|
499
|
+
maxTries: job.payload.maxTries,
|
|
500
|
+
backoff: job.payload.backoff,
|
|
501
|
+
}, remainingJobs);
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Creates and pushes the durable queue envelope.
|
|
505
|
+
*
|
|
506
|
+
* @param name - Queue job name.
|
|
507
|
+
* @param data - JSON-safe job payload data.
|
|
508
|
+
* @param options - Dispatch options.
|
|
509
|
+
* @param displayName - Optional human-readable display name.
|
|
510
|
+
* @param chained - Serialized jobs to run after this job succeeds.
|
|
511
|
+
* @param retryOf - Optional terminal failure replayed to create this job.
|
|
512
|
+
* @returns Queue id returned by the driver.
|
|
513
|
+
*/
|
|
514
|
+
async pushJob(name, data, options, displayName = name, chained = [], retryOf) {
|
|
515
|
+
const now = unixTimestamp();
|
|
516
|
+
const retryUntil = queueRetryUntil(now, options.retryUntilSeconds);
|
|
517
|
+
const payload = {
|
|
518
|
+
uuid: randomUUID(),
|
|
519
|
+
displayName,
|
|
520
|
+
job: name,
|
|
521
|
+
maxTries: positiveInteger(options.maxTries, 3),
|
|
522
|
+
backoff: this.resolveRetryBackoff(options.backoff),
|
|
523
|
+
...(retryUntil ? { retryUntil } : {}),
|
|
524
|
+
data,
|
|
525
|
+
...(options.origin ? { origin: options.origin } : {}),
|
|
526
|
+
...(retryOf ? { retryOf } : {}),
|
|
527
|
+
...(chained.length ? { chained } : {}),
|
|
528
|
+
};
|
|
529
|
+
const queue = options.queue || this.options.queue || 'default';
|
|
530
|
+
const delaySeconds = options.delaySeconds || 0;
|
|
531
|
+
const jobId = await this.driver.push({
|
|
532
|
+
queue,
|
|
533
|
+
payload,
|
|
534
|
+
delaySeconds,
|
|
535
|
+
createdAt: now,
|
|
536
|
+
});
|
|
537
|
+
await this.events.publish({
|
|
538
|
+
action: 'dispatched',
|
|
539
|
+
timestamp: new Date().toISOString(),
|
|
540
|
+
queue,
|
|
541
|
+
jobName: name,
|
|
542
|
+
jobId,
|
|
543
|
+
jobUuid: payload.uuid,
|
|
544
|
+
attempts: 0,
|
|
545
|
+
maxTries: payload.maxTries,
|
|
546
|
+
delaySeconds,
|
|
547
|
+
origin: payload.origin,
|
|
548
|
+
retryOf: payload.retryOf,
|
|
549
|
+
payloadData: data,
|
|
550
|
+
});
|
|
551
|
+
return jobId;
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* Publishes one lifecycle transition for a claimed queue job.
|
|
555
|
+
*
|
|
556
|
+
* @param action - Queue transition that has already occurred.
|
|
557
|
+
* @param job - Claimed job associated with the transition.
|
|
558
|
+
* @param details - Optional timing, delay, and error values.
|
|
559
|
+
* @returns Published immutable lifecycle event.
|
|
560
|
+
*/
|
|
561
|
+
async publishJobEvent(action, job, details = {}) {
|
|
562
|
+
const event = {
|
|
563
|
+
action,
|
|
564
|
+
timestamp: new Date().toISOString(),
|
|
565
|
+
queue: job.queue,
|
|
566
|
+
jobName: job.payload.job,
|
|
567
|
+
jobId: job.id,
|
|
568
|
+
jobUuid: job.payload.uuid,
|
|
569
|
+
attempts: job.attempts,
|
|
570
|
+
maxTries: job.payload.maxTries,
|
|
571
|
+
origin: job.payload.origin,
|
|
572
|
+
retryOf: job.payload.retryOf,
|
|
573
|
+
payloadData: job.payload.data,
|
|
574
|
+
...details,
|
|
575
|
+
};
|
|
576
|
+
await this.events.publish(event);
|
|
577
|
+
return event;
|
|
578
|
+
}
|
|
579
|
+
/**
|
|
580
|
+
* Runs one optional QueueableJob hook without changing the queue outcome.
|
|
581
|
+
*
|
|
582
|
+
* @param execution - Prepared job execution containing optional hooks.
|
|
583
|
+
* @param hook - Hook selected by the committed queue transition.
|
|
584
|
+
* @param event - Lifecycle event already published for the transition.
|
|
585
|
+
* @param error - Handler error that caused the transition.
|
|
586
|
+
* @param delaySeconds - Retry delay supplied to onRetry.
|
|
587
|
+
*/
|
|
588
|
+
async runJobHook(execution, hook, event, error, delaySeconds) {
|
|
589
|
+
if (!execution)
|
|
590
|
+
return;
|
|
591
|
+
try {
|
|
592
|
+
if (hook === 'onRetry') {
|
|
593
|
+
await execution.onRetry?.(error, delaySeconds ?? 0);
|
|
594
|
+
return;
|
|
595
|
+
}
|
|
596
|
+
await execution.onFinalFailure?.(error);
|
|
597
|
+
}
|
|
598
|
+
catch (hookError) {
|
|
599
|
+
this.reportLifecycleFailure({
|
|
600
|
+
source: 'hook',
|
|
601
|
+
hook,
|
|
602
|
+
event,
|
|
603
|
+
error: hookError,
|
|
604
|
+
});
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
/**
|
|
608
|
+
* Reports an isolated lifecycle failure without throwing into queue work.
|
|
609
|
+
*
|
|
610
|
+
* @param failure - Listener or job-hook failure to report.
|
|
611
|
+
*/
|
|
612
|
+
reportLifecycleFailure(failure) {
|
|
613
|
+
if (this.options.onLifecycleError) {
|
|
614
|
+
try {
|
|
615
|
+
this.options.onLifecycleError(failure);
|
|
616
|
+
return;
|
|
617
|
+
}
|
|
618
|
+
catch (reportingError) {
|
|
619
|
+
console.error('[queue] Lifecycle error reporter failed.', reportingError);
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
const label = failure.hook
|
|
623
|
+
? `job hook ${failure.hook}`
|
|
624
|
+
: 'lifecycle listener';
|
|
625
|
+
console.error(`[queue] ${label} failed for ${failure.event.jobName} during ${failure.event.action}.`, failure.error);
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
function queueDriverFromEnv() {
|
|
629
|
+
const driver = process.env.QUEUE_DRIVER || process.env.QUEUE_CONNECTION || 'database';
|
|
630
|
+
if (driver === 'database')
|
|
631
|
+
return driver;
|
|
632
|
+
if (driver === 'redis')
|
|
633
|
+
return driver;
|
|
634
|
+
throw new Error(`Unsupported queue driver "${driver}".`);
|
|
635
|
+
}
|
|
636
|
+
function unixTimestamp() {
|
|
637
|
+
return Math.floor(Date.now() / 1000);
|
|
638
|
+
}
|
|
639
|
+
/**
|
|
640
|
+
* Resolves the default retry strategy from queue environment configuration.
|
|
641
|
+
*
|
|
642
|
+
* @returns Supported retry strategy, defaulting to exponential.
|
|
643
|
+
*/
|
|
644
|
+
function retryBackoffStrategyFromEnv() {
|
|
645
|
+
return process.env.QUEUE_RETRY_BACKOFF === 'linear'
|
|
646
|
+
? 'linear'
|
|
647
|
+
: 'exponential';
|
|
648
|
+
}
|
|
649
|
+
/**
|
|
650
|
+
* Reads a boolean queue environment value with a deterministic fallback.
|
|
651
|
+
*
|
|
652
|
+
* @param name - Environment variable name.
|
|
653
|
+
* @param fallback - Value used when the variable is absent or invalid.
|
|
654
|
+
* @returns Parsed boolean configuration.
|
|
655
|
+
*/
|
|
656
|
+
function booleanFromEnv(name, fallback) {
|
|
657
|
+
const value = process.env[name]?.trim().toLowerCase();
|
|
658
|
+
if (value === 'true' || value === '1')
|
|
659
|
+
return true;
|
|
660
|
+
if (value === 'false' || value === '0')
|
|
661
|
+
return false;
|
|
662
|
+
return fallback;
|
|
663
|
+
}
|
|
664
|
+
/**
|
|
665
|
+
* Normalizes one positive integer queue option.
|
|
666
|
+
*
|
|
667
|
+
* @param value - Requested option value.
|
|
668
|
+
* @param fallback - Value used when the request is absent or invalid.
|
|
669
|
+
* @returns Positive integer.
|
|
670
|
+
*/
|
|
671
|
+
function positiveInteger(value, fallback) {
|
|
672
|
+
return typeof value === 'number' && Number.isFinite(value) && value > 0
|
|
673
|
+
? Math.max(1, Math.trunc(value))
|
|
674
|
+
: fallback;
|
|
675
|
+
}
|
|
676
|
+
/**
|
|
677
|
+
* Resolves the durable queue job name for any supported dispatch input.
|
|
678
|
+
*/
|
|
679
|
+
function resolveDispatchedJobName(job, serializedName) {
|
|
680
|
+
if (serializedName)
|
|
681
|
+
return serializedName;
|
|
682
|
+
if (typeof job === 'string')
|
|
683
|
+
return job;
|
|
684
|
+
return queueableJobName(job.constructor);
|
|
685
|
+
}
|