@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,477 @@
|
|
|
1
|
+
import { ActiveRecord, RecordNotFoundError } from '../db/index.js';
|
|
2
|
+
import { SerializationError } from './SerializationError.js';
|
|
3
|
+
import { SerializationRegistry } from './SerializationRegistry.js';
|
|
4
|
+
import { SERIALIZED_ACTIVE_RECORD_TYPE, SERIALIZED_REFERENCE_KEY, SERIALIZED_VALUE_FORMAT, SERIALIZED_VALUE_VERSION, } from './contracts/index.js';
|
|
5
|
+
const OBJECT_PATH_KEY = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
|
|
6
|
+
/**
|
|
7
|
+
* Serializes one registered root constructor using JSON state plus model refs.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const payload = app().serializer.serialize(job);
|
|
11
|
+
* const restored = await app().serializer.deserialize(
|
|
12
|
+
* JSON.parse(JSON.stringify(payload)),
|
|
13
|
+
* );
|
|
14
|
+
*/
|
|
15
|
+
export class Serializer {
|
|
16
|
+
registry;
|
|
17
|
+
/**
|
|
18
|
+
* Creates an application-scoped serializer.
|
|
19
|
+
*
|
|
20
|
+
* @param options - Registered root classes and ActiveRecord models.
|
|
21
|
+
*/
|
|
22
|
+
constructor(options = {}) {
|
|
23
|
+
this.registry = new SerializationRegistry(options);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Serializes one registered root object.
|
|
27
|
+
*
|
|
28
|
+
* @param value - Object whose `toJSON()` result matches its constructor input.
|
|
29
|
+
* @returns Versioned JSON-safe envelope.
|
|
30
|
+
*/
|
|
31
|
+
serialize(value) {
|
|
32
|
+
if (!value || typeof value !== 'object') {
|
|
33
|
+
throw failure('serialize', 'unregistered_class', '$', 'root value must be a registered serializable object.');
|
|
34
|
+
}
|
|
35
|
+
const name = this.registry.nameForSerializable(value);
|
|
36
|
+
const Class = this.registry.classForSerializable(value);
|
|
37
|
+
if (!name || !Class) {
|
|
38
|
+
throw failure('serialize', 'unregistered_class', '$', 'root object class is not registered.');
|
|
39
|
+
}
|
|
40
|
+
let state;
|
|
41
|
+
try {
|
|
42
|
+
state = Class.prototype.toJSON.call(value);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
throw failure('serialize', 'invalid_value', '$.state', `${Class.name}.toJSON() could not produce constructor state.`, error);
|
|
46
|
+
}
|
|
47
|
+
const envelope = {
|
|
48
|
+
format: SERIALIZED_VALUE_FORMAT,
|
|
49
|
+
version: SERIALIZED_VALUE_VERSION,
|
|
50
|
+
name,
|
|
51
|
+
state: this.#normalizeValue(state, '$.state', {
|
|
52
|
+
ancestors: new Map(),
|
|
53
|
+
}, 'serialize'),
|
|
54
|
+
};
|
|
55
|
+
return envelope;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Restores one validated serializer envelope.
|
|
59
|
+
*
|
|
60
|
+
* @param payload - Unknown durable payload.
|
|
61
|
+
* @returns Reconstructed registered root object.
|
|
62
|
+
*/
|
|
63
|
+
async deserialize(payload) {
|
|
64
|
+
const envelope = this.#validateEnvelope(payload);
|
|
65
|
+
const Class = this.registry.classForName(envelope.name);
|
|
66
|
+
if (!Class) {
|
|
67
|
+
throw failure('deserialize', 'unregistered_class', '$.name', 'serialized root class is not registered.');
|
|
68
|
+
}
|
|
69
|
+
const state = await this.#restoreValue(envelope.state, '$.state', {
|
|
70
|
+
activeRecords: new Map(),
|
|
71
|
+
});
|
|
72
|
+
try {
|
|
73
|
+
const restored = new Class(state);
|
|
74
|
+
if (Object.getPrototypeOf(restored) !== Class.prototype) {
|
|
75
|
+
throw new TypeError('Constructor returned a different runtime type.');
|
|
76
|
+
}
|
|
77
|
+
return restored;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
throw failure('deserialize', 'class_construction_failed', '$', `${Class.name} could not be reconstructed from serialized state.`, error);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Normalizes runtime state or validates wire state through one JSON traversal.
|
|
85
|
+
*
|
|
86
|
+
* @param value - Runtime or wire value.
|
|
87
|
+
* @param path - Current diagnostic path.
|
|
88
|
+
* @param context - Active-path cycle tracking.
|
|
89
|
+
* @param operation - Active serializer direction.
|
|
90
|
+
* @returns Canonical serialized value.
|
|
91
|
+
*/
|
|
92
|
+
#normalizeValue(value, path, context, operation) {
|
|
93
|
+
if (isSerializedPrimitive(value)) {
|
|
94
|
+
if (typeof value === 'number'
|
|
95
|
+
&& (!Number.isFinite(value) || Object.is(value, -0))) {
|
|
96
|
+
throw failure(operation, operation === 'serialize' ? 'invalid_value' : 'invalid_payload', path, 'JSON numbers must be finite and cannot be negative zero.');
|
|
97
|
+
}
|
|
98
|
+
return value;
|
|
99
|
+
}
|
|
100
|
+
if (typeof value !== 'object' || value === null) {
|
|
101
|
+
throw failure(operation, operation === 'serialize' ? 'unsupported_type' : 'invalid_payload', path, operation === 'serialize'
|
|
102
|
+
? `${runtimeType(value)} values are not valid JSON constructor state.`
|
|
103
|
+
: 'serialized constructor state must contain only JSON values and ActiveRecord references.');
|
|
104
|
+
}
|
|
105
|
+
if (operation === 'serialize' && value instanceof ActiveRecord) {
|
|
106
|
+
return this.#serializeActiveRecord(value, path);
|
|
107
|
+
}
|
|
108
|
+
if (Array.isArray(value)) {
|
|
109
|
+
return this.#withAncestor(operation, value, path, context, () => {
|
|
110
|
+
return arrayValues(value, path, operation).map((item, index) => {
|
|
111
|
+
return this.#normalizeValue(item, `${path}[${index}]`, context, operation);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
const entries = plainObjectEntries(value, path, operation);
|
|
116
|
+
const hasReferenceMarker = entries.some(([key]) => {
|
|
117
|
+
return key === SERIALIZED_REFERENCE_KEY;
|
|
118
|
+
});
|
|
119
|
+
if (hasReferenceMarker) {
|
|
120
|
+
if (operation === 'deserialize') {
|
|
121
|
+
return this.#validateActiveRecordReference(entries, path);
|
|
122
|
+
}
|
|
123
|
+
throw failure('serialize', 'invalid_value', objectPath(path, SERIALIZED_REFERENCE_KEY), `"${SERIALIZED_REFERENCE_KEY}" is reserved for framework references.`);
|
|
124
|
+
}
|
|
125
|
+
return this.#withAncestor(operation, value, path, context, () => {
|
|
126
|
+
return Object.fromEntries(entries.map(([key, item]) => {
|
|
127
|
+
return [
|
|
128
|
+
key,
|
|
129
|
+
this.#normalizeValue(item, objectPath(path, key), context, operation),
|
|
130
|
+
];
|
|
131
|
+
}));
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Reduces one clean persisted model to its durable identity.
|
|
136
|
+
*
|
|
137
|
+
* @param record - ActiveRecord to serialize.
|
|
138
|
+
* @param path - Current diagnostic path.
|
|
139
|
+
* @returns Registered model reference.
|
|
140
|
+
*/
|
|
141
|
+
#serializeActiveRecord(record, path) {
|
|
142
|
+
const Model = this.registry.modelForRecord(record);
|
|
143
|
+
const model = Model ? this.registry.nameForModel(Model) : null;
|
|
144
|
+
if (!Model || !model) {
|
|
145
|
+
throw failure('serialize', 'unregistered_model', path, 'ActiveRecord model is not registered.');
|
|
146
|
+
}
|
|
147
|
+
if (!record.isPersisted()) {
|
|
148
|
+
throw failure('serialize', 'unsaved_active_record', path, `${Model.name} is not persisted.`);
|
|
149
|
+
}
|
|
150
|
+
let id;
|
|
151
|
+
try {
|
|
152
|
+
id = record.get(Model.primaryKey);
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
throw failure('serialize', 'invalid_value', `${path}.id`, `${Model.name} does not expose its configured primary key.`, error);
|
|
156
|
+
}
|
|
157
|
+
if (!isSerializedPrimaryKey(id)) {
|
|
158
|
+
throw failure('serialize', 'invalid_value', `${path}.id`, `${Model.name} requires a string or safe-integer primary key.`);
|
|
159
|
+
}
|
|
160
|
+
if (record.isDirty()) {
|
|
161
|
+
throw failure('serialize', 'dirty_active_record', path, `${Model.name} has unsaved changes.`);
|
|
162
|
+
}
|
|
163
|
+
if (Model.softDeletes && record.trashed()) {
|
|
164
|
+
throw failure('serialize', 'trashed_active_record', path, `${Model.name} is soft deleted.`);
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
[SERIALIZED_REFERENCE_KEY]: SERIALIZED_ACTIVE_RECORD_TYPE,
|
|
168
|
+
model,
|
|
169
|
+
id,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Validates the envelope before any model lookup or constructor call.
|
|
174
|
+
*
|
|
175
|
+
* @param payload - Unknown durable payload.
|
|
176
|
+
* @returns Canonical serializer envelope.
|
|
177
|
+
*/
|
|
178
|
+
#validateEnvelope(payload) {
|
|
179
|
+
const envelope = dataObject(plainObjectEntries(payload, '$', 'deserialize'));
|
|
180
|
+
requireExactKeys(envelope, ['format', 'version', 'name', 'state'], '$');
|
|
181
|
+
if (envelope.format !== SERIALIZED_VALUE_FORMAT) {
|
|
182
|
+
throw failure('deserialize', 'invalid_payload', '$.format', `expected format "${SERIALIZED_VALUE_FORMAT}".`);
|
|
183
|
+
}
|
|
184
|
+
if (envelope.version !== SERIALIZED_VALUE_VERSION) {
|
|
185
|
+
throw failure('deserialize', 'unsupported_version', '$.version', 'serializer version is not supported.');
|
|
186
|
+
}
|
|
187
|
+
if (typeof envelope.name !== 'string') {
|
|
188
|
+
throw failure('deserialize', 'invalid_payload', '$.name', 'serialized root class name must be a string.');
|
|
189
|
+
}
|
|
190
|
+
if (!this.registry.classForName(envelope.name)) {
|
|
191
|
+
throw failure('deserialize', 'unregistered_class', '$.name', 'serialized root class is not registered.');
|
|
192
|
+
}
|
|
193
|
+
const canonical = {
|
|
194
|
+
format: SERIALIZED_VALUE_FORMAT,
|
|
195
|
+
version: SERIALIZED_VALUE_VERSION,
|
|
196
|
+
name: envelope.name,
|
|
197
|
+
state: this.#normalizeValue(envelope.state, '$.state', {
|
|
198
|
+
ancestors: new Map(),
|
|
199
|
+
}, 'deserialize'),
|
|
200
|
+
};
|
|
201
|
+
return canonical;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Validates one framework ActiveRecord marker without querying the database.
|
|
205
|
+
*
|
|
206
|
+
* @param entries - Candidate reference properties.
|
|
207
|
+
* @param path - Current diagnostic path.
|
|
208
|
+
* @returns Canonical registered model reference.
|
|
209
|
+
*/
|
|
210
|
+
#validateActiveRecordReference(entries, path) {
|
|
211
|
+
const reference = dataObject(entries);
|
|
212
|
+
requireExactKeys(reference, [SERIALIZED_REFERENCE_KEY, 'model', 'id'], path);
|
|
213
|
+
if (reference[SERIALIZED_REFERENCE_KEY] !== SERIALIZED_ACTIVE_RECORD_TYPE) {
|
|
214
|
+
throw failure('deserialize', 'invalid_payload', objectPath(path, SERIALIZED_REFERENCE_KEY), 'framework reference type is not supported.');
|
|
215
|
+
}
|
|
216
|
+
if (typeof reference.model !== 'string'
|
|
217
|
+
|| !this.registry.modelForName(reference.model)) {
|
|
218
|
+
throw failure('deserialize', typeof reference.model === 'string'
|
|
219
|
+
? 'unregistered_model'
|
|
220
|
+
: 'invalid_payload', `${path}.model`, typeof reference.model === 'string'
|
|
221
|
+
? 'serialized ActiveRecord model is not registered.'
|
|
222
|
+
: 'serialized model name must be a string.');
|
|
223
|
+
}
|
|
224
|
+
if (!isSerializedPrimaryKey(reference.id)) {
|
|
225
|
+
throw failure('deserialize', 'invalid_payload', `${path}.id`, 'serialized ActiveRecord id must be a string or safe integer.');
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
[SERIALIZED_REFERENCE_KEY]: SERIALIZED_ACTIVE_RECORD_TYPE,
|
|
229
|
+
model: reference.model,
|
|
230
|
+
id: reference.id,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Restores canonical state, resolving ActiveRecord references as needed.
|
|
235
|
+
*
|
|
236
|
+
* @param value - Canonical serialized value.
|
|
237
|
+
* @param path - Current diagnostic path.
|
|
238
|
+
* @param context - Per-operation model identity cache.
|
|
239
|
+
* @returns Restored runtime value.
|
|
240
|
+
*/
|
|
241
|
+
async #restoreValue(value, path, context) {
|
|
242
|
+
if (isSerializedPrimitive(value))
|
|
243
|
+
return value;
|
|
244
|
+
if (Array.isArray(value)) {
|
|
245
|
+
return await Promise.all(value.map((item, index) => {
|
|
246
|
+
return this.#restoreValue(item, `${path}[${index}]`, context);
|
|
247
|
+
}));
|
|
248
|
+
}
|
|
249
|
+
if (isActiveRecordReference(value)) {
|
|
250
|
+
return await this.#restoreActiveRecord(value, path, context);
|
|
251
|
+
}
|
|
252
|
+
return Object.fromEntries(await Promise.all(Object.entries(value).map(async ([key, item]) => {
|
|
253
|
+
return [
|
|
254
|
+
key,
|
|
255
|
+
await this.#restoreValue(item, objectPath(path, key), context),
|
|
256
|
+
];
|
|
257
|
+
})));
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Reloads one registered model while preserving repeated-reference identity.
|
|
261
|
+
*
|
|
262
|
+
* @param reference - Validated model reference.
|
|
263
|
+
* @param path - Current diagnostic path.
|
|
264
|
+
* @param context - Per-operation model identity cache.
|
|
265
|
+
* @returns Current persisted model.
|
|
266
|
+
*/
|
|
267
|
+
async #restoreActiveRecord(reference, path, context) {
|
|
268
|
+
const Model = this.registry.modelForName(reference.model);
|
|
269
|
+
if (!Model) {
|
|
270
|
+
throw failure('deserialize', 'unregistered_model', `${path}.model`, 'serialized ActiveRecord model is not registered.');
|
|
271
|
+
}
|
|
272
|
+
const cacheKey = JSON.stringify([
|
|
273
|
+
reference.model,
|
|
274
|
+
typeof reference.id,
|
|
275
|
+
reference.id,
|
|
276
|
+
]);
|
|
277
|
+
let restored = context.activeRecords.get(cacheKey);
|
|
278
|
+
if (!restored) {
|
|
279
|
+
restored = Promise.resolve()
|
|
280
|
+
.then(async () => {
|
|
281
|
+
const record = await Model.findOrFail(reference.id);
|
|
282
|
+
if (Object.getPrototypeOf(record) !== Model.prototype) {
|
|
283
|
+
throw new TypeError('Model lookup returned a different runtime type.');
|
|
284
|
+
}
|
|
285
|
+
return record;
|
|
286
|
+
})
|
|
287
|
+
.catch(error => {
|
|
288
|
+
const notFound = error instanceof RecordNotFoundError;
|
|
289
|
+
throw failure('deserialize', notFound
|
|
290
|
+
? 'active_record_not_found'
|
|
291
|
+
: 'active_record_restore_failed', path, notFound
|
|
292
|
+
? 'registered ActiveRecord row no longer exists.'
|
|
293
|
+
: 'registered ActiveRecord row could not be restored.', error);
|
|
294
|
+
});
|
|
295
|
+
context.activeRecords.set(cacheKey, restored);
|
|
296
|
+
}
|
|
297
|
+
return await restored;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Traverses a container while rejecting cycles on the active path.
|
|
301
|
+
*
|
|
302
|
+
* @param operation - Active serializer direction.
|
|
303
|
+
* @param value - Container being entered.
|
|
304
|
+
* @param path - Current diagnostic path.
|
|
305
|
+
* @param context - Cycle tracking.
|
|
306
|
+
* @param callback - Nested traversal.
|
|
307
|
+
* @returns Nested traversal result.
|
|
308
|
+
*/
|
|
309
|
+
#withAncestor(operation, value, path, context, callback) {
|
|
310
|
+
const previousPath = context.ancestors.get(value);
|
|
311
|
+
if (previousPath !== undefined) {
|
|
312
|
+
throw failure(operation, 'circular_reference', path, `value contains a cycle back to ${previousPath}.`);
|
|
313
|
+
}
|
|
314
|
+
context.ancestors.set(value, path);
|
|
315
|
+
try {
|
|
316
|
+
return callback();
|
|
317
|
+
}
|
|
318
|
+
finally {
|
|
319
|
+
context.ancestors.delete(value);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Creates one path-aware serializer error.
|
|
325
|
+
*
|
|
326
|
+
* @param operation - Active serializer direction.
|
|
327
|
+
* @param code - Stable failure category.
|
|
328
|
+
* @param path - Diagnostic path.
|
|
329
|
+
* @param message - Safe explanation.
|
|
330
|
+
* @param cause - Optional lower-level error.
|
|
331
|
+
* @returns Structured serializer error.
|
|
332
|
+
*/
|
|
333
|
+
function failure(operation, code, path, message, cause) {
|
|
334
|
+
return new SerializationError({
|
|
335
|
+
operation,
|
|
336
|
+
code,
|
|
337
|
+
path,
|
|
338
|
+
message,
|
|
339
|
+
cause,
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Identifies ordinary JSON primitive values.
|
|
344
|
+
*
|
|
345
|
+
* @param value - Unknown value.
|
|
346
|
+
* @returns Whether the value is a JSON primitive.
|
|
347
|
+
*/
|
|
348
|
+
function isSerializedPrimitive(value) {
|
|
349
|
+
return (value === null
|
|
350
|
+
|| typeof value === 'string'
|
|
351
|
+
|| typeof value === 'boolean'
|
|
352
|
+
|| typeof value === 'number');
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Identifies supported JSON-safe model primary keys.
|
|
356
|
+
*
|
|
357
|
+
* @param value - Unknown primary key.
|
|
358
|
+
* @returns Whether the value is a non-empty string or safe integer.
|
|
359
|
+
*/
|
|
360
|
+
function isSerializedPrimaryKey(value) {
|
|
361
|
+
return ((typeof value === 'string' && value.length > 0)
|
|
362
|
+
|| (typeof value === 'number'
|
|
363
|
+
&& Number.isSafeInteger(value)
|
|
364
|
+
&& !Object.is(value, -0)));
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Identifies a canonical ActiveRecord reference.
|
|
368
|
+
*
|
|
369
|
+
* @param value - Canonical serialized object.
|
|
370
|
+
* @returns Whether the framework marker is an ActiveRecord reference.
|
|
371
|
+
*/
|
|
372
|
+
function isActiveRecordReference(value) {
|
|
373
|
+
return value[SERIALIZED_REFERENCE_KEY] === SERIALIZED_ACTIVE_RECORD_TYPE;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Reads a dense array using normal JSON-visible index values.
|
|
377
|
+
*
|
|
378
|
+
* @param value - Candidate array.
|
|
379
|
+
* @param path - Current diagnostic path.
|
|
380
|
+
* @param operation - Active serializer direction.
|
|
381
|
+
* @returns Values in index order.
|
|
382
|
+
*/
|
|
383
|
+
function arrayValues(value, path, operation) {
|
|
384
|
+
const values = [];
|
|
385
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
386
|
+
if (!Object.hasOwn(value, index)) {
|
|
387
|
+
throw failure(operation, operation === 'serialize' ? 'unsupported_type' : 'invalid_payload', `${path}[${index}]`, 'arrays must be dense.');
|
|
388
|
+
}
|
|
389
|
+
values.push(value[index]);
|
|
390
|
+
}
|
|
391
|
+
return values;
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Reads normal JSON-visible properties from an ordinary object.
|
|
395
|
+
*
|
|
396
|
+
* @param value - Candidate object.
|
|
397
|
+
* @param path - Current diagnostic path.
|
|
398
|
+
* @param operation - Active serializer direction.
|
|
399
|
+
* @returns Enumerable string-keyed entries.
|
|
400
|
+
*/
|
|
401
|
+
function plainObjectEntries(value, path, operation) {
|
|
402
|
+
if (!isPlainObject(value)) {
|
|
403
|
+
throw failure(operation, operation === 'serialize' ? 'unsupported_type' : 'invalid_payload', path, operation === 'serialize'
|
|
404
|
+
? `${runtimeType(value)} instances are not valid JSON constructor state.`
|
|
405
|
+
: 'serialized objects must use an ordinary object prototype.');
|
|
406
|
+
}
|
|
407
|
+
return Object.entries(value);
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Identifies an Object-prototype or null-prototype record.
|
|
411
|
+
*
|
|
412
|
+
* @param value - Unknown value.
|
|
413
|
+
* @returns Whether the value is an ordinary object.
|
|
414
|
+
*/
|
|
415
|
+
function isPlainObject(value) {
|
|
416
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
417
|
+
return false;
|
|
418
|
+
}
|
|
419
|
+
const prototype = Object.getPrototypeOf(value);
|
|
420
|
+
return prototype === Object.prototype || prototype === null;
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* Creates a prototype-safe object from data entries.
|
|
424
|
+
*
|
|
425
|
+
* @param entries - String-keyed entries.
|
|
426
|
+
* @returns Ordinary object preserving keys such as `__proto__`.
|
|
427
|
+
*/
|
|
428
|
+
function dataObject(entries) {
|
|
429
|
+
return Object.fromEntries(entries);
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Requires an object to contain exactly the expected keys.
|
|
433
|
+
*
|
|
434
|
+
* @param value - Candidate object.
|
|
435
|
+
* @param expected - Expected key names.
|
|
436
|
+
* @param path - Current diagnostic path.
|
|
437
|
+
*/
|
|
438
|
+
function requireExactKeys(value, expected, path) {
|
|
439
|
+
const actual = Object.keys(value);
|
|
440
|
+
const keys = new Set(actual);
|
|
441
|
+
if (actual.length !== expected.length
|
|
442
|
+
|| expected.some(key => !keys.has(key))) {
|
|
443
|
+
throw failure('deserialize', 'invalid_payload', path, `expected exactly ${expected.join(', ')}.`);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Formats one object property as a JSONPath-like location.
|
|
448
|
+
*
|
|
449
|
+
* @param path - Parent path.
|
|
450
|
+
* @param key - Property name.
|
|
451
|
+
* @returns Child path.
|
|
452
|
+
*/
|
|
453
|
+
function objectPath(path, key) {
|
|
454
|
+
return OBJECT_PATH_KEY.test(key)
|
|
455
|
+
? `${path}.${key}`
|
|
456
|
+
: `${path}[${JSON.stringify(key)}]`;
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Returns a concise runtime type label.
|
|
460
|
+
*
|
|
461
|
+
* @param value - Unknown runtime value.
|
|
462
|
+
* @returns Human-readable type.
|
|
463
|
+
*/
|
|
464
|
+
function runtimeType(value) {
|
|
465
|
+
if (value === null)
|
|
466
|
+
return 'null';
|
|
467
|
+
if (typeof value !== 'object')
|
|
468
|
+
return typeof value;
|
|
469
|
+
if (Array.isArray(value))
|
|
470
|
+
return 'Array';
|
|
471
|
+
const prototype = Object.getPrototypeOf(value);
|
|
472
|
+
const constructor = prototype
|
|
473
|
+
&& Object.getOwnPropertyDescriptor(prototype, 'constructor')?.value;
|
|
474
|
+
return typeof constructor === 'function' && constructor.name
|
|
475
|
+
? constructor.name
|
|
476
|
+
: 'Object';
|
|
477
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Serializable } from '../Serializable.js';
|
|
2
|
+
/**
|
|
3
|
+
* Constructor for a registered object whose complete runtime state is exposed
|
|
4
|
+
* through `toJSON()`.
|
|
5
|
+
*
|
|
6
|
+
* @template TState - Complete constructor state owned by the class.
|
|
7
|
+
* @template TInstance - Concrete serializable instance.
|
|
8
|
+
*/
|
|
9
|
+
export interface SerializableClass<TState = any, TInstance extends Serializable<TState> = Serializable<TState>> {
|
|
10
|
+
/** Runtime class name used only for diagnostics. */
|
|
11
|
+
readonly name: string;
|
|
12
|
+
/** Exact instance prototype associated with this constructor. */
|
|
13
|
+
readonly prototype: TInstance;
|
|
14
|
+
/**
|
|
15
|
+
* Reconstructs an instance from fully restored constructor state.
|
|
16
|
+
*
|
|
17
|
+
* @param state - State previously returned by the instance's `toJSON()` method.
|
|
18
|
+
*/
|
|
19
|
+
new (state: TState): TInstance;
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stable marker identifying framework serializer payloads.
|
|
3
|
+
*/
|
|
4
|
+
export declare const SERIALIZED_VALUE_FORMAT: "platform.serialized-object";
|
|
5
|
+
/**
|
|
6
|
+
* Current framework serializer wire-format version.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SERIALIZED_VALUE_VERSION: 1;
|
|
9
|
+
/**
|
|
10
|
+
* Reserved object key used only for framework-owned serialized references.
|
|
11
|
+
*
|
|
12
|
+
* Application constructor state cannot use this key because it would be
|
|
13
|
+
* ambiguous with framework metadata during restoration.
|
|
14
|
+
*/
|
|
15
|
+
export declare const SERIALIZED_REFERENCE_KEY: "$platform";
|
|
16
|
+
/**
|
|
17
|
+
* Marker value identifying one serialized ActiveRecord reference.
|
|
18
|
+
*/
|
|
19
|
+
export declare const SERIALIZED_ACTIVE_RECORD_TYPE: "active-record";
|
|
20
|
+
/**
|
|
21
|
+
* Primitive values supported by ordinary JSON without coercion.
|
|
22
|
+
*/
|
|
23
|
+
export type SerializedPrimitive = null | string | boolean | number;
|
|
24
|
+
/**
|
|
25
|
+
* Registered ActiveRecord identity stored inside otherwise ordinary JSON.
|
|
26
|
+
*/
|
|
27
|
+
export interface SerializedActiveRecordReference {
|
|
28
|
+
/** Reserved framework reference discriminator. */
|
|
29
|
+
[SERIALIZED_REFERENCE_KEY]: typeof SERIALIZED_ACTIVE_RECORD_TYPE;
|
|
30
|
+
/** Stable application-registered model key. */
|
|
31
|
+
model: string;
|
|
32
|
+
/** JSON-safe logical primary-key value. */
|
|
33
|
+
id: string | number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Plain serialized object containing application-owned constructor state.
|
|
37
|
+
*/
|
|
38
|
+
export interface SerializedObject {
|
|
39
|
+
[key: string]: SerializedValue;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* JSON value supported inside serialized constructor state.
|
|
43
|
+
*
|
|
44
|
+
* ActiveRecord references are the only framework-specific extension.
|
|
45
|
+
*/
|
|
46
|
+
export type SerializedValue = SerializedPrimitive | SerializedValue[] | SerializedObject | SerializedActiveRecordReference;
|
|
47
|
+
/**
|
|
48
|
+
* Versioned root-class envelope produced by `Serializer.serialize()`.
|
|
49
|
+
*/
|
|
50
|
+
export interface SerializedValueEnvelope extends Record<string, unknown> {
|
|
51
|
+
/** Stable framework serializer format marker. */
|
|
52
|
+
format: typeof SERIALIZED_VALUE_FORMAT;
|
|
53
|
+
/** Wire-format version used to interpret the constructor state. */
|
|
54
|
+
version: typeof SERIALIZED_VALUE_VERSION;
|
|
55
|
+
/** Stable registry key for the root application class. */
|
|
56
|
+
name: string;
|
|
57
|
+
/** Serialized constructor state for the registered root class. */
|
|
58
|
+
state: SerializedValue;
|
|
59
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stable marker identifying framework serializer payloads.
|
|
3
|
+
*/
|
|
4
|
+
export const SERIALIZED_VALUE_FORMAT = 'platform.serialized-object';
|
|
5
|
+
/**
|
|
6
|
+
* Current framework serializer wire-format version.
|
|
7
|
+
*/
|
|
8
|
+
export const SERIALIZED_VALUE_VERSION = 1;
|
|
9
|
+
/**
|
|
10
|
+
* Reserved object key used only for framework-owned serialized references.
|
|
11
|
+
*
|
|
12
|
+
* Application constructor state cannot use this key because it would be
|
|
13
|
+
* ambiguous with framework metadata during restoration.
|
|
14
|
+
*/
|
|
15
|
+
export const SERIALIZED_REFERENCE_KEY = '$platform';
|
|
16
|
+
/**
|
|
17
|
+
* Marker value identifying one serialized ActiveRecord reference.
|
|
18
|
+
*/
|
|
19
|
+
export const SERIALIZED_ACTIVE_RECORD_TYPE = 'active-record';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ActiveRecordClass } from '../../db/index.js';
|
|
2
|
+
import type { SerializableClass } from './SerializableClass.js';
|
|
3
|
+
/**
|
|
4
|
+
* Framework serializer configuration supplied when creating an application.
|
|
5
|
+
*/
|
|
6
|
+
export interface SerializerOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Stable class keys mapped to constructors that accept their `toJSON()` state.
|
|
9
|
+
*/
|
|
10
|
+
classes?: Record<string, SerializableClass>;
|
|
11
|
+
/**
|
|
12
|
+
* ActiveRecord models available for identity-based restoration.
|
|
13
|
+
*
|
|
14
|
+
* Explicit stable keys keep durable payloads independent of table names.
|
|
15
|
+
*/
|
|
16
|
+
models?: Record<string, ActiveRecordClass>;
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { SerializationRegistry } from '../SerializationRegistry.js';
|
|
2
|
+
import type { Serializable } from '../Serializable.js';
|
|
3
|
+
import type { SerializedValueEnvelope } from './SerializedValue.js';
|
|
4
|
+
/**
|
|
5
|
+
* Application serializer service for durable constructor-backed objects.
|
|
6
|
+
*/
|
|
7
|
+
export interface SerializerService {
|
|
8
|
+
/** Application-scoped registered serializable classes and ActiveRecord models. */
|
|
9
|
+
readonly registry: SerializationRegistry;
|
|
10
|
+
/**
|
|
11
|
+
* Converts one registered object into a JSON-safe versioned envelope.
|
|
12
|
+
*
|
|
13
|
+
* @param value - Registered object whose `toJSON()` state should be serialized.
|
|
14
|
+
* @returns JSON-safe serialized value envelope.
|
|
15
|
+
*/
|
|
16
|
+
serialize(value: Serializable): SerializedValueEnvelope;
|
|
17
|
+
/**
|
|
18
|
+
* Restores one previously serialized registered object.
|
|
19
|
+
*
|
|
20
|
+
* ActiveRecord restoration makes this operation asynchronous.
|
|
21
|
+
*
|
|
22
|
+
* @param payload - Unknown payload to validate and deserialize.
|
|
23
|
+
* @returns Restored registered object.
|
|
24
|
+
*/
|
|
25
|
+
deserialize<TInstance extends Serializable = Serializable>(payload: unknown): Promise<TInstance>;
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|