@mastra/dsql 1.0.0 → 1.0.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/shared/config.ts","../src/storage/client.ts","../src/shared/retry.ts","../src/shared/batch.ts","../src/storage/db/index.ts","../src/storage/domains/utils.ts","../src/storage/domains/agents/index.ts","../src/storage/domains/memory/index.ts","../src/storage/domains/observability/index.ts","../src/storage/domains/scores/index.ts","../src/storage/domains/workflows/index.ts","../src/storage/index.ts"],"names":["Pool","AuroraDSQLClient","parseSqlIdentifier","MastraBase","TABLE_SCHEMAS","coreSqlType","coreDefaultValue","error","MastraError","createStorageErrorId","ErrorDomain","ErrorCategory","TABLE_WORKFLOW_SNAPSHOT","TABLE_SPANS","getSchemaName","getTableName","AgentsStorage","TABLE_AGENTS","TABLE_AGENT_VERSIONS","normalizePerPage","calculatePagination","MemoryStorage","TABLE_THREADS","TABLE_MESSAGES","TABLE_RESOURCES","MessageList","ObservabilityStorage","listTracesArgsSchema","TraceStatus","toTraceSpans","coreTransformScoreRow","ScoresStorage","TABLE_SCORERS","saveScorePayloadSchema","WorkflowsStorage","MastraStorage"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { AwsCredentialIdentityProvider } from '@aws-sdk/types';\nimport type { CreateIndexOptions } from '@mastra/core/storage';\nimport type { Pool } from 'pg';\n\n/**\n * Default connection pool settings optimized for Aurora DSQL.\n *\n * Aurora DSQL has a 60-minute maximum connection duration limit,\n * so maxLifetimeSeconds is set to 55 minutes to ensure connections\n * are rotated before hitting that limit.\n */\nexport const DSQL_POOL_DEFAULTS = {\n /** Maximum connections in the pool */\n max: 10,\n /** Minimum connections in the pool */\n min: 0,\n /** Close idle connections after 10 minutes */\n idleTimeoutMillis: 600000,\n /** Force connection rotation before DSQL's 60-minute limit */\n maxLifetimeSeconds: 3300,\n /** Connection acquisition timeout */\n connectionTimeoutMillis: 5000,\n /** Allow process to exit when idle */\n allowExitOnIdle: true,\n} as const;\n\n/**\n * Base configuration options shared across Aurora DSQL configs.\n */\nexport interface DSQLBaseConfig {\n /** Unique identifier for this store instance */\n id: string;\n\n /** Schema name (default: \"public\") */\n schemaName?: string;\n\n /**\n * If true, the store will not be initialized automatically when used with Mastra.\n * Use this when you want to manage initialization timing yourself.\n */\n disableInit?: boolean;\n\n /** Skip creation of default indexes (default: false) */\n skipDefaultIndexes?: boolean;\n\n /** Custom index definitions to create */\n indexes?: CreateIndexOptions[];\n}\n\n/**\n * Aurora DSQL host-based configuration.\n *\n * Aurora DSQL uses IAM authentication, so password is not required.\n * The connector automatically generates IAM tokens for authentication.\n */\nexport interface HostConfig extends DSQLBaseConfig {\n /** DSQL cluster endpoint (e.g., \"abc123.dsql.us-east-1.on.aws\") */\n host: string;\n\n /** Database user (default: \"admin\") */\n user?: string;\n\n /** Database name (default: \"postgres\", Aurora DSQL supports only one database per cluster) */\n database?: string;\n\n /** AWS region (auto-detected from host if not provided) */\n region?: string;\n\n /** Custom AWS credentials provider (optional, uses default credential chain if not provided) */\n customCredentialsProvider?: AwsCredentialIdentityProvider;\n\n /** Maximum number of connections in the pool (default: 10) */\n max?: number;\n\n /** Minimum number of connections in the pool (default: 0) */\n min?: number;\n\n /** Close idle connections after this many milliseconds (default: 600000 = 10 minutes) */\n idleTimeoutMillis?: number;\n\n /** Maximum connection lifetime in seconds (default: 3300 = 55 minutes, must be < 60 minutes due to DSQL limit) */\n maxLifetimeSeconds?: number;\n\n /** Connection timeout in milliseconds (default: 5000) */\n connectionTimeoutMillis?: number;\n\n /** Allow the process to exit when all connections are idle (default: true) */\n allowExitOnIdle?: boolean;\n}\n\n/**\n * Pre-configured pg.Pool configuration for Aurora DSQL.\n */\nexport interface PoolInstanceConfig extends DSQLBaseConfig {\n /**\n * Pre-configured pg.Pool instance.\n * Use this for direct control over the connection pool, or for\n * integration with libraries that expect a pg.Pool.\n *\n * @example\n * ```typescript\n * import { Pool } from 'pg';\n * import { AuroraDSQLClient } from '@aws/aurora-dsql-node-postgres-connector';\n *\n * const pool = new Pool({\n * host: 'abc123.dsql.us-east-1.on.aws',\n * Client: AuroraDSQLClient,\n * region: 'us-east-1',\n * });\n * const store = new DSQLStore({ id: 'my-store', pool });\n *\n * // Use store.pool for other libraries that need a pg.Pool\n * ```\n */\n pool: Pool;\n}\n\n/**\n * Aurora DSQL configuration type.\n *\n * Accepts either:\n * - A pre-configured pg.Pool: `{ id, pool, schemaName? }`\n * - Host-based config: `{ id, host, ... }`\n */\nexport type DSQLStoreConfig = PoolInstanceConfig | HostConfig | DSQLBaseConfig;\n\n/**\n * Type guard for pre-configured pg.Pool config\n */\nexport const isPoolConfig = (cfg: DSQLStoreConfig): cfg is PoolInstanceConfig => {\n return 'pool' in cfg;\n};\n\n/**\n * Type guard for host-based config\n */\nexport const isHostConfig = (cfg: DSQLStoreConfig): cfg is HostConfig => {\n return 'host' in cfg;\n};\n\n/**\n * Validates the DSQLStoreConfig and throws an error if invalid.\n */\nexport const validateConfig = (config: DSQLStoreConfig): void => {\n if (!config.id || typeof config.id !== 'string' || config.id.trim() === '') {\n throw new Error('DSQLStore: id must be provided and cannot be empty.');\n }\n\n // Pool config: user provides pre-configured pg.Pool\n if (isPoolConfig(config)) {\n if (!config.pool) {\n throw new Error('DSQLStore: pool must be provided when using pool config.');\n }\n return; // Valid pool config\n }\n\n // Host-based config (host is required if not pool config)\n if (!isHostConfig(config)) {\n throw new Error('DSQLStore: host must be provided and cannot be empty.');\n }\n\n // Validate host is not empty\n if (!config.host || config.host.trim() === '') {\n throw new Error('DSQLStore: host must be provided and cannot be empty.');\n }\n\n // Validate maxLifetimeSeconds is less than 60 minutes (Aurora DSQL hard limit)\n if (config.maxLifetimeSeconds !== undefined && config.maxLifetimeSeconds >= 3600) {\n throw new Error(\n 'DSQLStore: maxLifetimeSeconds must be less than 3600 (60 minutes) due to Aurora DSQL connection duration limit.',\n );\n }\n};\n\n/**\n * Extracts AWS region from DSQL host endpoint.\n * DSQL endpoints follow the pattern: <cluster-id>.dsql.<region>.on.aws\n */\nexport const extractRegionFromHost = (host: string): string | undefined => {\n const match = host.match(/\\.dsql\\.([a-z0-9-]+)\\.on\\.aws$/);\n return match?.[1];\n};\n\n/**\n * Returns the effective region, either from config or extracted from host.\n * Only applicable for host-based config (not pre-configured pool).\n */\nexport const getEffectiveRegion = (config: HostConfig): string => {\n if (config.region) {\n return config.region;\n }\n\n const extractedRegion = extractRegionFromHost(config.host);\n if (extractedRegion) {\n return extractedRegion;\n }\n\n throw new Error(\n 'DSQLStore: region could not be determined. Provide region in config or use a standard DSQL endpoint.',\n );\n};\n","import type { Pool, PoolClient, QueryResult } from 'pg';\n\n// Re-export pg types for consumers\nexport type { Pool, PoolClient, QueryResult } from 'pg';\n\n/**\n * Values array for parameterized queries.\n */\nexport type QueryValues = unknown[];\n\n/**\n * Common interface for database clients.\n * DsqlPoolAdapter implements this interface by wrapping a pg.Pool.\n */\nexport interface DbClient {\n /**\n * The underlying connection pool.\n */\n readonly $pool: Pool;\n\n /**\n * Acquire a client from the pool for manual query execution.\n * Remember to call client.release() when done.\n */\n connect(): Promise<PoolClient>;\n\n /**\n * Execute a query that returns no data.\n * Use for INSERT, UPDATE, DELETE without RETURNING.\n */\n none(query: string, values?: QueryValues): Promise<null>;\n\n /**\n * Execute a query that returns exactly one row.\n * @throws Error if zero or more than one row is returned\n */\n one<T = any>(query: string, values?: QueryValues): Promise<T>;\n\n /**\n * Execute a query that returns zero or one row.\n * @returns The row, or null if no rows returned\n * @throws Error if more than one row is returned\n */\n oneOrNone<T = any>(query: string, values?: QueryValues): Promise<T | null>;\n\n /**\n * Execute a query that returns any number of rows (including zero).\n * Alias for manyOrNone.\n */\n any<T = any>(query: string, values?: QueryValues): Promise<T[]>;\n\n /**\n * Execute a query that returns zero or more rows.\n */\n manyOrNone<T = any>(query: string, values?: QueryValues): Promise<T[]>;\n\n /**\n * Execute a query that returns at least one row.\n * @throws Error if no rows are returned\n */\n many<T = any>(query: string, values?: QueryValues): Promise<T[]>;\n\n /**\n * Execute a raw query, returning the full result object.\n */\n query(query: string, values?: QueryValues): Promise<QueryResult>;\n\n /**\n * Execute a function within a transaction.\n * Automatically handles BEGIN, COMMIT, and ROLLBACK.\n */\n tx<T>(callback: (t: TxClient) => Promise<T>): Promise<T>;\n}\n\n/**\n * Transaction client interface for executing queries within a transaction.\n */\nexport interface TxClient {\n none(query: string, values?: QueryValues): Promise<null>;\n one<T = any>(query: string, values?: QueryValues): Promise<T>;\n oneOrNone<T = any>(query: string, values?: QueryValues): Promise<T | null>;\n any<T = any>(query: string, values?: QueryValues): Promise<T[]>;\n manyOrNone<T = any>(query: string, values?: QueryValues): Promise<T[]>;\n many<T = any>(query: string, values?: QueryValues): Promise<T[]>;\n query(query: string, values?: QueryValues): Promise<QueryResult>;\n /** Execute multiple promises in parallel */\n batch<T>(promises: Promise<T>[]): Promise<T[]>;\n}\n\n/**\n * Truncate a query string for error messages.\n */\nfunction truncateQuery(query: string, maxLength = 100): string {\n const normalized = query.replace(/\\s+/g, ' ').trim();\n if (normalized.length <= maxLength) {\n return normalized;\n }\n return normalized.slice(0, maxLength) + '...';\n}\n\n/**\n * Adapter that wraps a pg.Pool to implement DbClient.\n */\nexport class PoolAdapter implements DbClient {\n constructor(public readonly $pool: Pool) {}\n\n connect(): Promise<PoolClient> {\n return this.$pool.connect();\n }\n\n async none(query: string, values?: QueryValues): Promise<null> {\n await this.$pool.query(query, values);\n return null;\n }\n\n async one<T = any>(query: string, values?: QueryValues): Promise<T> {\n const result = await this.$pool.query(query, values);\n if (result.rows.length === 0) {\n throw new Error(`No data returned from query: ${truncateQuery(query)}`);\n }\n if (result.rows.length > 1) {\n throw new Error(`Multiple rows returned when one was expected: ${truncateQuery(query)}`);\n }\n return result.rows[0] as T;\n }\n\n async oneOrNone<T = any>(query: string, values?: QueryValues): Promise<T | null> {\n const result = await this.$pool.query(query, values);\n if (result.rows.length === 0) {\n return null;\n }\n if (result.rows.length > 1) {\n throw new Error(`Multiple rows returned when one or none was expected: ${truncateQuery(query)}`);\n }\n return result.rows[0] as T;\n }\n\n async any<T = any>(query: string, values?: QueryValues): Promise<T[]> {\n const result = await this.$pool.query(query, values);\n return result.rows as T[];\n }\n\n async manyOrNone<T = any>(query: string, values?: QueryValues): Promise<T[]> {\n return this.any<T>(query, values);\n }\n\n async many<T = any>(query: string, values?: QueryValues): Promise<T[]> {\n const result = await this.$pool.query(query, values);\n if (result.rows.length === 0) {\n throw new Error(`No data returned from query: ${truncateQuery(query)}`);\n }\n return result.rows as T[];\n }\n\n async query(query: string, values?: QueryValues): Promise<QueryResult> {\n return this.$pool.query(query, values);\n }\n\n async tx<T>(callback: (t: TxClient) => Promise<T>): Promise<T> {\n const client = await this.$pool.connect();\n try {\n await client.query('BEGIN');\n const txClient = new TransactionClient(client);\n const result = await callback(txClient);\n await client.query('COMMIT');\n return result;\n } catch (error) {\n try {\n await client.query('ROLLBACK');\n } catch (rollbackError) {\n // Log rollback failure but throw original error\n console.error('Transaction rollback failed:', rollbackError);\n }\n throw error;\n } finally {\n client.release();\n }\n }\n}\n\n/**\n * Transaction client that wraps a PoolClient for executing queries within a transaction.\n */\nclass TransactionClient implements TxClient {\n constructor(private readonly client: PoolClient) {}\n\n async none(query: string, values?: QueryValues): Promise<null> {\n await this.client.query(query, values);\n return null;\n }\n\n async one<T = any>(query: string, values?: QueryValues): Promise<T> {\n const result = await this.client.query(query, values);\n if (result.rows.length === 0) {\n throw new Error(`No data returned from query: ${truncateQuery(query)}`);\n }\n if (result.rows.length > 1) {\n throw new Error(`Multiple rows returned when one was expected: ${truncateQuery(query)}`);\n }\n return result.rows[0] as T;\n }\n\n async oneOrNone<T = any>(query: string, values?: QueryValues): Promise<T | null> {\n const result = await this.client.query(query, values);\n if (result.rows.length === 0) {\n return null;\n }\n if (result.rows.length > 1) {\n throw new Error(`Multiple rows returned when one or none was expected: ${truncateQuery(query)}`);\n }\n return result.rows[0] as T;\n }\n\n async any<T = any>(query: string, values?: QueryValues): Promise<T[]> {\n const result = await this.client.query(query, values);\n return result.rows as T[];\n }\n\n async manyOrNone<T = any>(query: string, values?: QueryValues): Promise<T[]> {\n return this.any<T>(query, values);\n }\n\n async many<T = any>(query: string, values?: QueryValues): Promise<T[]> {\n const result = await this.client.query(query, values);\n if (result.rows.length === 0) {\n throw new Error(`No data returned from query: ${truncateQuery(query)}`);\n }\n return result.rows as T[];\n }\n\n async query(query: string, values?: QueryValues): Promise<QueryResult> {\n return this.client.query(query, values);\n }\n\n async batch<T>(promises: Promise<T>[]): Promise<T[]> {\n return Promise.all(promises);\n }\n}\n","/**\n * Retry utilities for Aurora DSQL (PostgreSQL + OCC).\n *\n * Aurora DSQL uses optimistic concurrency control (OCC) and may return\n * serialization errors (SQLSTATE 40001) that require retry. This module\n * provides utilities for handling such errors with exponential backoff\n * and full jitter.\n *\n * **Scope**: By default, this utility only retries OCC-related failures\n * identified by PostgreSQL SQLSTATE codes. Network-level or OS-level errors\n * are out of scope for the default implementation. Callers can provide a\n * custom `isRetriable` function to extend retriable conditions if needed.\n *\n * @see https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/\n */\n\n/**\n * PostgreSQL SQLSTATE codes that may be retriable.\n *\n * By default, `isRetriableError` only retries `SERIALIZATION_FAILURE` (40001),\n * which is the primary OCC conflict error from Aurora DSQL.\n *\n * Other codes are provided for reference and can be used with a custom\n * `isRetriable` function if needed.\n *\n * @see https://www.postgresql.org/docs/current/errcodes-appendix.html\n */\nexport const RETRIABLE_ERROR_CODES = {\n /** Serialization failure - OCC conflict in Aurora DSQL (default retriable) */\n SERIALIZATION_FAILURE: '40001',\n /** Deadlock detected (not retriable by default) */\n DEADLOCK_DETECTED: '40P01',\n /** Connection failure - may be transient (not retriable by default) */\n CONNECTION_FAILURE: '08006',\n /** Connection does not exist (not retriable by default) */\n CONNECTION_DOES_NOT_EXIST: '08003',\n /** Admin shutdown - server is restarting (not retriable by default) */\n ADMIN_SHUTDOWN: '57P01',\n /** Crash shutdown (not retriable by default) */\n CRASH_SHUTDOWN: '57P02',\n /** Cannot connect now (not retriable by default) */\n CANNOT_CONNECT_NOW: '57P03',\n} as const;\n\n/**\n * Default SQLSTATE codes that are retriable.\n * Only OCC serialization failure (40001) by default.\n */\nconst DEFAULT_RETRIABLE_SQLSTATES: ReadonlySet<string> = new Set([RETRIABLE_ERROR_CODES.SERIALIZATION_FAILURE]);\n\n/**\n * Options for retry behavior.\n */\nexport interface RetryOptions {\n /**\n * Maximum number of retry attempts (including the initial attempt).\n * Must be >= 1.\n * @default 5\n */\n maxAttempts?: number;\n\n /**\n * Initial delay in milliseconds before first retry.\n * Must be >= 0.\n * @default 100\n */\n initialDelayMs?: number;\n\n /**\n * Maximum delay in milliseconds between retries.\n * Must be > 0 and >= initialDelayMs.\n * @default 2000\n */\n maxDelayMs?: number;\n\n /**\n * Multiplier for exponential backoff.\n * Must be >= 1.\n * @default 2\n */\n backoffMultiplier?: number;\n\n /**\n * Whether to add jitter to retry delays.\n * When true, uses \"full jitter\" algorithm: delay is uniformly random in [0, cappedDelay].\n * @see https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/\n * @default true\n */\n jitter?: boolean;\n\n /**\n * Optional callback invoked before each retry.\n * @param error - The error that triggered the retry\n * @param attempt - The attempt number that failed (1-based)\n * @param delayMs - The delay before the next attempt\n */\n onRetry?: (error: Error, attempt: number, delayMs: number) => void;\n\n /**\n * Custom function to determine if an error is retriable.\n * If not provided, uses the default `isRetriableError` function which only\n * retries on SQLSTATE 40001 (OCC serialization failure).\n */\n isRetriable?: (error: unknown) => boolean;\n}\n\n/**\n * Default retry options.\n *\n * Note: maxDelayMs is set to 2000ms as the standard for most operations.\n * For batch operations that may need more recovery time, override with 5000ms.\n */\nexport const DEFAULT_RETRY_OPTIONS: Required<Omit<RetryOptions, 'onRetry' | 'isRetriable'>> = {\n maxAttempts: 5,\n initialDelayMs: 100,\n maxDelayMs: 2000,\n backoffMultiplier: 2,\n jitter: true,\n};\n\n/**\n * Interface for PostgreSQL errors (from pg library).\n */\nexport interface PostgresError extends Error {\n code?: string;\n severity?: string;\n detail?: string;\n hint?: string;\n position?: string;\n internalPosition?: string;\n internalQuery?: string;\n where?: string;\n schema?: string;\n table?: string;\n column?: string;\n dataType?: string;\n constraint?: string;\n file?: string;\n line?: string;\n routine?: string;\n}\n\n/**\n * Check if an error is a PostgreSQL error with a code.\n */\nexport function isPostgresError(error: unknown): error is PostgresError {\n return error instanceof Error && 'code' in error && typeof (error as PostgresError).code === 'string';\n}\n\n/**\n * Get the PostgreSQL error code from an error, if available.\n */\nexport function getErrorCode(error: unknown): string | undefined {\n if (isPostgresError(error)) {\n return error.code;\n }\n return undefined;\n}\n\n/**\n * Pattern for valid PostgreSQL SQLSTATE codes: exactly 5 alphanumeric characters (uppercase).\n */\nconst SQLSTATE_PATTERN = /^[0-9A-Z]{5}$/;\n\n/**\n * Get the PostgreSQL SQLSTATE code from an error if valid.\n *\n * Returns the SQLSTATE code (normalized to uppercase) only if:\n * - The error is a PostgresError with a `code` property\n * - The code is exactly 5 characters of [0-9A-Za-z] (normalized to uppercase)\n *\n * @param error - The error to extract SQLSTATE from\n * @returns The SQLSTATE code (uppercase) if valid, undefined otherwise\n */\nfunction getPostgresSqlStateCode(error: unknown): string | undefined {\n const raw = getErrorCode(error);\n if (!raw) return undefined;\n const code = raw.toUpperCase();\n if (SQLSTATE_PATTERN.test(code)) {\n return code;\n }\n return undefined;\n}\n\n/**\n * Check if an error is retriable based on its PostgreSQL SQLSTATE code.\n *\n * This function is designed for Aurora DSQL's OCC (Optimistic Concurrency Control).\n * By default, only SQLSTATE 40001 (serialization failure) is considered retriable.\n *\n * **Important**: This function does NOT retry on:\n * - Network errors (ECONNRESET, ECONNREFUSED, etc.)\n * - Timeout errors\n * - Other connection-level errors\n *\n * If you need to retry on additional error types, provide a custom `isRetriable`\n * function to `withRetry`.\n *\n * @param error - The error to check\n * @returns True if the error has a retriable SQLSTATE code (40001 by default)\n *\n * @example\n * ```typescript\n * // Create a PostgreSQL-like error\n * const createPgError = (code: string, message: string): PostgresError => {\n * const err = new Error(message) as PostgresError;\n * err.code = code;\n * return err;\n * };\n *\n * // Default: only retries on 40001\n * isRetriableError(createPgError('40001', 'serialization failure')); // true\n * isRetriableError(createPgError('40P01', 'deadlock detected')); // false\n * isRetriableError(new Error('connection timeout')); // false\n *\n * // Custom retriable check with additional codes:\n * const customIsRetriable = (error: unknown) => {\n * const code = getErrorCode(error);\n * return code === '40001' || code === '40P01';\n * };\n * ```\n */\nexport function isRetriableError(error: unknown): boolean {\n const sqlstate = getPostgresSqlStateCode(error);\n if (!sqlstate) {\n // No valid SQLSTATE: not retriable by default\n // (network errors, OS errors, etc. are out of scope)\n return false;\n }\n return DEFAULT_RETRIABLE_SQLSTATES.has(sqlstate);\n}\n\n/**\n * Calculate the delay for a retry attempt with exponential backoff and optional full jitter.\n *\n * Algorithm:\n * 1. baseDelay = initialDelayMs * backoffMultiplier^(attempt - 1)\n * 2. cappedDelay = min(baseDelay, maxDelayMs)\n * 3. If jitter is enabled (full jitter): return random integer in [0, cappedDelay]\n * 4. Otherwise: return cappedDelay\n *\n * @see https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/\n *\n * @param attempt - The current attempt number (1-based)\n * @param options - Retry options\n * @returns Delay in milliseconds\n */\nfunction calculateRetryDelay(\n attempt: number,\n options: Pick<RetryOptions, 'initialDelayMs' | 'maxDelayMs' | 'backoffMultiplier' | 'jitter'> = {},\n): number {\n const {\n initialDelayMs = DEFAULT_RETRY_OPTIONS.initialDelayMs,\n maxDelayMs = DEFAULT_RETRY_OPTIONS.maxDelayMs,\n backoffMultiplier = DEFAULT_RETRY_OPTIONS.backoffMultiplier,\n jitter = DEFAULT_RETRY_OPTIONS.jitter,\n } = options;\n\n // Calculate base delay with exponential backoff\n const baseDelay = initialDelayMs * Math.pow(backoffMultiplier, attempt - 1);\n\n // Apply max delay cap\n const cappedDelay = Math.min(baseDelay, maxDelayMs);\n\n // Full jitter: uniformly random delay in [0, cappedDelay]\n if (jitter) {\n return Math.floor(Math.random() * (cappedDelay + 1));\n }\n\n return cappedDelay;\n}\n\n/**\n * Sleep for a specified number of milliseconds.\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n/**\n * Resolved retry options with all numeric fields required.\n */\ntype ResolvedRetryOptions = {\n maxAttempts: number;\n initialDelayMs: number;\n maxDelayMs: number;\n backoffMultiplier: number;\n};\n\n/**\n * Validate retry options at runtime.\n *\n * @param options - The resolved retry options to validate\n * @throws Error if any option is invalid\n */\nfunction validateRetryOptions(options: ResolvedRetryOptions): void {\n const { maxAttempts, initialDelayMs, maxDelayMs, backoffMultiplier } = options;\n\n if (maxAttempts < 1) {\n throw new Error(`Invalid retry option: maxAttempts must be >= 1, got ${maxAttempts}`);\n }\n if (initialDelayMs < 0) {\n throw new Error(`Invalid retry option: initialDelayMs must be >= 0, got ${initialDelayMs}`);\n }\n if (maxDelayMs <= 0) {\n throw new Error(`Invalid retry option: maxDelayMs must be > 0, got ${maxDelayMs}`);\n }\n if (backoffMultiplier < 1) {\n throw new Error(`Invalid retry option: backoffMultiplier must be >= 1, got ${backoffMultiplier}`);\n }\n if (maxDelayMs < initialDelayMs) {\n throw new Error(`Invalid retry option: maxDelayMs (${maxDelayMs}) must be >= initialDelayMs (${initialDelayMs})`);\n }\n}\n\n/**\n * Result of a retry operation.\n */\nexport interface RetryResult<T> {\n /** The result if successful */\n result: T;\n /** Number of attempts made */\n attempts: number;\n /** Total time spent (including delays) in milliseconds */\n totalTimeMs: number;\n}\n\n/**\n * Execute a function with automatic retry on retriable errors.\n *\n * Uses exponential backoff with optional full jitter to avoid thundering herd.\n * By default, only retries on PostgreSQL SQLSTATE 40001 (OCC serialization failure),\n * which is the primary conflict error from Aurora DSQL.\n *\n * @param fn - The async function to execute\n * @param options - Retry options\n * @returns The result of the function along with metadata\n * @throws The original error if all attempts fail or the error is not retriable\n * @throws Error if retry options are invalid\n *\n * @example\n * ```typescript\n * const { result, attempts, totalTimeMs } = await withRetry(\n * async () => {\n * return await db.query('INSERT INTO users ...');\n * },\n * {\n * maxAttempts: 3,\n * onRetry: (error, attempt, delay) => {\n * console.log(`Retry ${attempt} after ${delay}ms: ${error.message}`);\n * }\n * }\n * );\n * ```\n */\nexport async function withRetry<T>(fn: () => Promise<T>, options: RetryOptions = {}): Promise<RetryResult<T>> {\n const {\n maxAttempts = DEFAULT_RETRY_OPTIONS.maxAttempts,\n initialDelayMs = DEFAULT_RETRY_OPTIONS.initialDelayMs,\n maxDelayMs = DEFAULT_RETRY_OPTIONS.maxDelayMs,\n backoffMultiplier = DEFAULT_RETRY_OPTIONS.backoffMultiplier,\n jitter = DEFAULT_RETRY_OPTIONS.jitter,\n onRetry,\n isRetriable = isRetriableError,\n } = options;\n\n // Validate resolved options\n validateRetryOptions({ maxAttempts, initialDelayMs, maxDelayMs, backoffMultiplier });\n\n const startTime = Date.now();\n let lastError: Error | undefined;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const result = await fn();\n return {\n result,\n attempts: attempt,\n totalTimeMs: Date.now() - startTime,\n };\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // If this is the last attempt or the error is not retriable, throw\n if (attempt === maxAttempts || !isRetriable(error)) {\n throw lastError;\n }\n\n // Calculate delay and wait before retrying\n const delay = calculateRetryDelay(attempt, {\n initialDelayMs,\n maxDelayMs,\n backoffMultiplier,\n jitter,\n });\n\n // Call onRetry callback if provided\n if (onRetry) {\n onRetry(lastError, attempt, delay);\n }\n\n await sleep(delay);\n }\n }\n\n // This should never be reached, but TypeScript needs it\n throw lastError;\n}\n","/**\n * Batch utilities for Aurora DSQL.\n *\n * Aurora DSQL has transaction limits:\n * - Maximum 3,000 rows per transaction\n * - Maximum 10 MiB per transaction\n *\n * This utility only enforces the row-count limit.\n * The 10 MiB limit depends on the size of each record, so please enforce it\n * in the caller if needed.\n */\n\n/**\n * Default maximum rows per batch.\n * Aurora DSQL limits transactions to 3,000 rows.\n */\nexport const DEFAULT_MAX_ROWS_PER_BATCH = 3000;\n\n/**\n * Options for batch splitting.\n */\nexport interface BatchOptions {\n /**\n * Maximum number of rows per batch.\n * @default 3000 (Aurora DSQL limit)\n */\n maxRows?: number;\n}\n\n/**\n * Result of batch splitting.\n */\nexport interface BatchResult<T> {\n /** The batched records */\n batches: T[][];\n /** Total number of records */\n totalRecords: number;\n /** Number of batches created */\n batchCount: number;\n}\n\n/**\n * Split an array of records into batches that respect Aurora DSQL's transaction limits.\n *\n * @param records - Array of records to split\n * @param options - Batch splitting options\n * @returns BatchResult containing the batched records and metadata\n *\n * @example\n * ```typescript\n * const records = generateRecords(5000);\n * const result = splitIntoBatches(records);\n * // result.batches.length === 2\n * // result.batches[0].length === 3000\n * // result.batches[1].length === 2000\n * ```\n */\nexport function splitIntoBatches<T>(records: T[], options: BatchOptions = {}): BatchResult<T> {\n const maxRows = options.maxRows ?? DEFAULT_MAX_ROWS_PER_BATCH;\n\n if (records.length === 0) {\n return {\n batches: [],\n totalRecords: 0,\n batchCount: 0,\n };\n }\n\n if (maxRows <= 0) {\n throw new Error(`maxRows must be a positive number, got: ${maxRows}`);\n }\n\n const batches: T[][] = [];\n for (let i = 0; i < records.length; i += maxRows) {\n batches.push(records.slice(i, i + maxRows));\n }\n\n return {\n batches,\n totalRecords: records.length,\n batchCount: batches.length,\n };\n}\n","import { AuroraDSQLClient } from '@aws/aurora-dsql-node-postgres-connector';\nimport { MastraBase } from '@mastra/core/base';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n createStorageErrorId,\n TABLE_WORKFLOW_SNAPSHOT,\n TABLE_SPANS,\n TABLE_SCHEMAS,\n getSqlType as coreSqlType,\n getDefaultValue as coreDefaultValue,\n} from '@mastra/core/storage';\nimport type {\n StorageColumn,\n TABLE_NAMES,\n CreateIndexOptions,\n IndexInfo,\n StorageIndexStats,\n} from '@mastra/core/storage';\nimport { parseSqlIdentifier } from '@mastra/core/utils';\nimport { Pool } from 'pg';\nimport { splitIntoBatches, DEFAULT_MAX_ROWS_PER_BATCH } from '../../shared/batch';\nimport { withRetry } from '../../shared/retry';\nimport type { DbClient } from '../client';\nimport { PoolAdapter } from '../client';\n\n// Re-export DbClient for external use\nexport type { DbClient } from '../client';\n\n/**\n * Configuration for standalone domain usage.\n * Accepts either:\n * 1. An existing database client (Pool or PoolAdapter)\n * 2. Config to create a new pool internally\n */\nexport type DsqlDomainConfig = DsqlDomainClientConfig | DsqlDomainPoolConfig | DsqlDomainRestConfig;\n\n/**\n * Configuration for standalone domain usage.\n * Accepts a database client instance.\n */\nexport interface DsqlDomainClientConfig {\n /** The database client instance */\n client: DbClient;\n /** Database schema name */\n schemaName?: string;\n /** Skip creation of default indexes */\n skipDefaultIndexes?: boolean;\n /** Custom index definitions (filtered by domain's MANAGED_TABLES) */\n indexes?: CreateIndexOptions[];\n}\n\n/**\n * Pass an existing pg.Pool\n */\nexport interface DsqlDomainPoolConfig {\n /** Pre-configured pg.Pool */\n pool: Pool;\n /** Optional schema name (defaults to 'public') */\n schemaName?: string;\n /** When true, default indexes will not be created during initialization */\n skipDefaultIndexes?: boolean;\n /** Custom indexes to create for this domain's tables */\n indexes?: CreateIndexOptions[];\n}\n\n/**\n * Pass config to create a new pg.Pool internally\n */\nexport type DsqlDomainRestConfig = {\n /** Optional schema name (defaults to 'public') */\n schemaName?: string;\n /** When true, default indexes will not be created during initialization */\n skipDefaultIndexes?: boolean;\n /** Custom indexes to create for this domain's tables */\n indexes?: CreateIndexOptions[];\n} & {\n host: string;\n database: string;\n user: string;\n};\n/**\n * Resolves DsqlDomainConfi to a database client and schema.\n * Handles creating a new pool if config is provided.\n */\nexport function resolveDsqlConfig(config: DsqlDomainConfig): {\n client: DbClient;\n schemaName?: string;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n} {\n // Existing client\n if ('client' in config) {\n return {\n client: config.client,\n schemaName: config.schemaName,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n };\n }\n\n // Existing pool\n if ('pool' in config) {\n return {\n client: new PoolAdapter(config.pool),\n schemaName: config.schemaName,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n };\n }\n // Config to create new pool\n const pool = new Pool({\n host: config.host,\n database: config.database,\n user: config.user,\n Client: AuroraDSQLClient,\n });\n return {\n client: new PoolAdapter(pool),\n schemaName: config.schemaName,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n };\n}\n\nfunction getSchemaName(schema?: string) {\n return schema ? `\"${parseSqlIdentifier(schema, 'schema name')}\"` : '\"public\"';\n}\n\nfunction getTableName({ indexName, schemaName }: { indexName: string; schemaName?: string }) {\n const parsedIndexName = parseSqlIdentifier(indexName, 'index name');\n const quotedIndexName = `\"${parsedIndexName}\"`;\n const quotedSchemaName = schemaName;\n return quotedSchemaName ? `${quotedSchemaName}.${quotedIndexName}` : quotedIndexName;\n}\n\n/**\n * Internal config for DsqlDB - accepts already-resolved client\n */\nexport interface DsqlDBInternalConfig {\n client: DbClient;\n schemaName?: string;\n skipDefaultIndexes?: boolean;\n}\n\n// Static map to track schema setup across all DsqlDB instances\n// Key: schemaName, Value: { promise, complete }\n// This prevents race conditions when multiple domains try to create the same schema concurrently\nconst schemaSetupRegistry = new Map<string, { promise: Promise<void> | null; complete: boolean }>();\n\nexport class DsqlDB extends MastraBase {\n public client: DbClient;\n public schemaName?: string;\n public skipDefaultIndexes?: boolean;\n\n constructor(config: DsqlDBInternalConfig) {\n super({\n component: 'STORAGE',\n name: 'DSQL_DB_LAYER',\n });\n\n this.client = config.client;\n this.schemaName = config.schemaName;\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n }\n\n async hasColumn(table: string, column: string): Promise<boolean> {\n const schema = this.schemaName || 'public';\n\n const result = await this.client.oneOrNone(\n `SELECT 1 FROM information_schema.columns WHERE table_schema = $1 AND table_name = $2 AND (column_name = $3 OR column_name = $4)`,\n [schema, table, column, column.toLowerCase()],\n );\n\n return !!result;\n }\n\n /**\n * Prepares values for insertion, handling TEXT columns storing JSON by stringifying them.\n * Aurora DSQL does not support JSONB natively, so we store JSON as TEXT.\n */\n private prepareValuesForInsert(record: Record<string, any>, tableName: TABLE_NAMES): any[] {\n return Object.entries(record).map(([key, value]) => {\n const schema = TABLE_SCHEMAS[tableName];\n const columnSchema = schema?.[key];\n\n // If the column is TEXT (storing JSON) or was previously JSONB, stringify objects\n // Aurora DSQL: We use TEXT instead of JSONB and cast to ::jsonb when filtering\n if (columnSchema?.type === 'jsonb' && value !== null && value !== undefined && typeof value === 'object') {\n return JSON.stringify(value);\n }\n return value;\n });\n }\n\n /**\n * Adds timestamp Z columns to a record if timestamp columns exist\n */\n private addTimestampZColumns(record: Record<string, any>): void {\n if (record.createdAt) {\n record.createdAtZ = record.createdAt;\n }\n if (record.created_at) {\n record.created_atZ = record.created_at;\n }\n if (record.updatedAt) {\n record.updatedAtZ = record.updatedAt;\n }\n }\n\n /**\n * Prepares a value for database operations, handling Date objects and JSON serialization.\n * This is schema-aware and stringifies objects for TEXT columns storing JSON.\n * Aurora DSQL: We use TEXT instead of JSONB and cast to ::jsonb when filtering.\n */\n private prepareValue(value: any, columnName: string, tableName: TABLE_NAMES): any {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n const schema = TABLE_SCHEMAS[tableName];\n const columnSchema = schema?.[columnName];\n\n // If the column is TEXT (storing JSON) or was previously JSONB, stringify objects\n if (columnSchema?.type === 'jsonb') {\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n }\n\n // For other columns with object values, stringify them (for backwards compatibility)\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n\n return value;\n }\n\n private async setupSchema() {\n if (!this.schemaName) {\n return;\n }\n\n // Use static registry to coordinate schema setup across all DsqlDB instances\n let registryEntry = schemaSetupRegistry.get(this.schemaName);\n if (registryEntry?.complete) {\n return;\n }\n\n const quotedSchemaName = getSchemaName(this.schemaName);\n\n if (!registryEntry?.promise) {\n const schemaNameCapture = this.schemaName;\n const setupPromise = (async () => {\n try {\n const schemaExists = await this.client.oneOrNone(\n `\n SELECT EXISTS (\n SELECT 1 FROM information_schema.schemata\n WHERE schema_name = $1\n )\n `,\n [schemaNameCapture],\n );\n\n if (!schemaExists?.exists) {\n try {\n await this.client.none(`CREATE SCHEMA IF NOT EXISTS ${quotedSchemaName}`);\n this.logger.info(`Schema \"${schemaNameCapture}\" created successfully`);\n } catch (error) {\n this.logger.error(`Failed to create schema \"${schemaNameCapture}\"`, { error });\n throw new Error(\n `Unable to create schema \"${schemaNameCapture}\". This requires CREATE privilege on the database. ` +\n `Either create the schema manually or grant CREATE privilege to the user.`,\n );\n }\n }\n\n // Mark as complete in the registry\n const entry = schemaSetupRegistry.get(schemaNameCapture);\n if (entry) {\n entry.complete = true;\n }\n this.logger.debug(`Schema \"${quotedSchemaName}\" is ready for use`);\n } catch (error) {\n // On error, clear the registry entry so retry is possible\n schemaSetupRegistry.delete(schemaNameCapture);\n throw error;\n }\n })();\n\n // Register the promise immediately so concurrent callers can await it\n schemaSetupRegistry.set(this.schemaName, { promise: setupPromise, complete: false });\n registryEntry = schemaSetupRegistry.get(this.schemaName);\n }\n\n await registryEntry!.promise;\n }\n\n /**\n * Override getSqlType to map JSONB to TEXT for Aurora DSQL compatibility.\n * Aurora DSQL does not fully support native JSONB, so we store JSON as TEXT\n * and cast to ::jsonb only when filtering/querying.\n */\n protected getSqlType(type: StorageColumn['type']): string {\n switch (type) {\n case 'jsonb':\n // Aurora DSQL: Store JSON data as TEXT instead of JSONB\n return 'TEXT';\n case 'uuid':\n return 'UUID';\n case 'boolean':\n return 'BOOLEAN';\n default:\n return coreSqlType(type);\n }\n }\n\n protected getDefaultValue(type: StorageColumn['type']): string {\n switch (type) {\n case 'timestamp':\n return 'DEFAULT NOW()';\n case 'jsonb':\n // Aurora DSQL: JSONB columns are stored as TEXT with JSON content\n // We use TEXT with a default empty JSON object string\n return \"DEFAULT '{}'\";\n default:\n return coreDefaultValue(type);\n }\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n this.addTimestampZColumns(record);\n\n const schemaName = getSchemaName(this.schemaName);\n const columns = Object.keys(record).map(col => parseSqlIdentifier(col, 'column name'));\n const values = this.prepareValuesForInsert(record, tableName);\n const placeholders = values.map((_, i) => `$${i + 1}`).join(', ');\n\n await withRetry(\n async () => {\n await this.client.none(\n `INSERT INTO ${getTableName({ indexName: tableName, schemaName })} (${columns.map(c => `\"${c}\"`).join(', ')}) VALUES (${placeholders})`,\n values,\n );\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`insert retry ${attempt} for table ${tableName} after ${delay}ms: ${error.message}`);\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'INSERT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n });\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n await withRetry(\n async () => {\n const schemaName = getSchemaName(this.schemaName);\n const tableNameWithSchema = getTableName({ indexName: tableName, schemaName });\n // Aurora DSQL does not support TRUNCATE, use DELETE FROM instead\n await this.client.none(`DELETE FROM ${tableNameWithSchema}`);\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`clearTable retry ${attempt} for ${tableName} after ${delay}ms: ${error.message}`);\n },\n },\n );\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'CLEAR_TABLE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n }\n }\n\n async createTable({\n tableName,\n schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n await withRetry(\n async () => {\n const timeZColumnNames = Object.entries(schema)\n .filter(([_, def]) => def.type === 'timestamp')\n .map(([name]) => name);\n\n const timeZColumns = Object.entries(schema)\n .filter(([_, def]) => def.type === 'timestamp')\n .map(([name]) => {\n const parsedName = parseSqlIdentifier(name, 'column name');\n return `\"${parsedName}Z\" TIMESTAMPTZ DEFAULT NOW()`;\n });\n\n const columns = Object.entries(schema).map(([name, def]) => {\n const parsedName = parseSqlIdentifier(name, 'column name');\n const constraints = [];\n if (def.primaryKey) constraints.push('PRIMARY KEY');\n if (!def.nullable) constraints.push('NOT NULL');\n // Use getSqlType to convert JSONB to TEXT for Aurora DSQL compatibility\n const sqlType = this.getSqlType(def.type);\n return `\"${parsedName}\" ${sqlType} ${constraints.join(' ')}`;\n });\n\n if (this.schemaName) {\n await this.setupSchema();\n }\n\n const finalColumns = [...columns, ...timeZColumns].join(',\\n');\n const constraintPrefix = this.schemaName ? `${this.schemaName}_` : '';\n const schemaName = getSchemaName(this.schemaName);\n\n const createTableSql = `\n CREATE TABLE IF NOT EXISTS ${getTableName({ indexName: tableName, schemaName })} (\n ${finalColumns}\n );\n `;\n\n await this.client.none(createTableSql);\n\n // Aurora DSQL: Use CREATE UNIQUE INDEX ASYNC instead of UNIQUE constraint\n // DSQL doesn't support DO $$ blocks or PL/pgSQL\n if (tableName === TABLE_WORKFLOW_SNAPSHOT) {\n const indexName = `${constraintPrefix}mastra_workflow_snapshot_workflow_name_run_id_key`;\n const fullTableName = getTableName({ indexName: tableName, schemaName });\n\n try {\n // Check if index already exists\n const indexExists = await this.client.oneOrNone(`SELECT 1 FROM pg_indexes WHERE indexname = $1`, [\n indexName,\n ]);\n\n if (!indexExists) {\n // Create async unique index for eventual consistency\n const result = await this.client.oneOrNone<{ job_uuid: string }>(\n `CREATE UNIQUE INDEX ASYNC \"${indexName}\" ON ${fullTableName} (\"workflow_name\", \"run_id\")`,\n );\n if (result?.job_uuid) {\n await this.waitForDSQLJob(result.job_uuid);\n }\n this.logger?.debug?.(`Created unique index ${indexName} on ${fullTableName}`);\n }\n } catch (error) {\n // Log warning but don't fail - the index creation is async and may take time\n this.logger?.warn?.(`Failed to create unique index ${indexName}:`, error);\n }\n }\n\n await this.alterTable({\n tableName,\n schema,\n ifNotExists: timeZColumnNames,\n });\n\n // Set up timestamp triggers for Spans table\n // Note: Aurora DSQL doesn't support triggers, this is a no-op\n if (tableName === TABLE_SPANS) {\n await this.setupTimestampTriggers(tableName);\n await this.migrateSpansTable();\n }\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`createTable retry ${attempt} for ${tableName} after ${delay}ms: ${error.message}`);\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'CREATE_TABLE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n });\n }\n\n /**\n * Set up timestamp triggers for a table to automatically manage createdAt/updatedAt\n * Note: Aurora DSQL doesn't support triggers, PL/pgSQL, or CREATE FUNCTION.\n * Timestamps are managed at the application level in insert/update operations.\n * This method is kept as a no-op for API compatibility.\n */\n private async setupTimestampTriggers(_tableName: TABLE_NAMES): Promise<void> {\n // Aurora DSQL doesn't support triggers, PL/pgSQL, or CREATE FUNCTION.\n // Timestamps (createdAt, updatedAt, createdAtZ, updatedAtZ) are managed:\n // - DEFAULT NOW() on column definition for createdAt/createdAtZ\n // - Application-level setting in update operations for updatedAt/updatedAtZ\n return;\n }\n\n /**\n * Migrates the spans table schema from OLD_SPAN_SCHEMA to current SPAN_SCHEMA.\n * This adds new columns that don't exist in old schema.\n */\n private async migrateSpansTable(): Promise<void> {\n const fullTableName = getTableName({ indexName: TABLE_SPANS, schemaName: getSchemaName(this.schemaName) });\n const schema = TABLE_SCHEMAS[TABLE_SPANS];\n\n try {\n // Add any columns from current schema that don't exist in the database\n for (const [columnName, columnDef] of Object.entries(schema)) {\n const columnExists = await this.hasColumn(TABLE_SPANS, columnName);\n if (!columnExists) {\n const parsedColumnName = parseSqlIdentifier(columnName, 'column name');\n const sqlType = this.getSqlType(columnDef.type);\n // Align with createTable: nullable columns omit NOT NULL, non-nullable columns include it\n const nullable = columnDef.nullable ? '' : 'NOT NULL';\n const defaultValue = !columnDef.nullable ? this.getDefaultValue(columnDef.type) : '';\n const alterSql =\n `ALTER TABLE ${fullTableName} ADD COLUMN IF NOT EXISTS \"${parsedColumnName}\" ${sqlType} ${nullable} ${defaultValue}`.trim();\n await this.client.none(alterSql);\n this.logger?.debug?.(`Added column '${columnName}' to ${fullTableName}`);\n\n // For timestamp columns, also add the timezone-aware version\n // This matches the behavior in alterTable()\n if (sqlType === 'TIMESTAMP') {\n const timestampZSql =\n `ALTER TABLE ${fullTableName} ADD COLUMN IF NOT EXISTS \"${parsedColumnName}Z\" TIMESTAMPTZ DEFAULT NOW()`.trim();\n await this.client.none(timestampZSql);\n this.logger?.debug?.(`Added timezone column '${columnName}Z' to ${fullTableName}`);\n }\n }\n }\n\n // Also add timezone columns for any existing timestamp columns that don't have them yet\n // This handles the case where timestamp columns existed but their *Z counterparts don't\n for (const [columnName, columnDef] of Object.entries(schema)) {\n if (columnDef.type === 'timestamp') {\n const tzColumnName = `${columnName}Z`;\n const tzColumnExists = await this.hasColumn(TABLE_SPANS, tzColumnName);\n if (!tzColumnExists) {\n const parsedTzColumnName = parseSqlIdentifier(tzColumnName, 'column name');\n const timestampZSql =\n `ALTER TABLE ${fullTableName} ADD COLUMN IF NOT EXISTS \"${parsedTzColumnName}\" TIMESTAMPTZ DEFAULT NOW()`.trim();\n await this.client.none(timestampZSql);\n this.logger?.debug?.(`Added timezone column '${tzColumnName}' to ${fullTableName}`);\n }\n }\n }\n\n this.logger?.info?.(`Migration completed for ${fullTableName}`);\n } catch (error) {\n // Log warning but don't fail - migrations should be best-effort\n this.logger?.warn?.(`Failed to migrate spans table ${fullTableName}:`, error);\n }\n }\n\n /**\n * Alters table schema to add columns if they don't exist\n * @param tableName Name of the table\n * @param schema Schema of the table\n * @param ifNotExists Array of column names to add if they don't exist\n */\n async alterTable({\n tableName,\n schema,\n ifNotExists,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n const fullTableName = getTableName({ indexName: tableName, schemaName: getSchemaName(this.schemaName) });\n\n try {\n for (const columnName of ifNotExists) {\n if (schema[columnName]) {\n const columnDef = schema[columnName];\n const sqlType = this.getSqlType(columnDef.type);\n // Aurora DSQL: ALTER TABLE ADD COLUMN with constraints (NOT NULL, DEFAULT) is not supported\n // We can only add nullable columns without constraints\n const parsedColumnName = parseSqlIdentifier(columnName, 'column name');\n const alterSql = `ALTER TABLE ${fullTableName} ADD COLUMN IF NOT EXISTS \"${parsedColumnName}\" ${sqlType}`;\n\n await this.client.none(alterSql);\n\n if (sqlType === 'TIMESTAMP') {\n // Add the Z column as well (nullable, no default - DSQL limitation)\n const alterSqlZ = `ALTER TABLE ${fullTableName} ADD COLUMN IF NOT EXISTS \"${parsedColumnName}Z\" TIMESTAMPTZ`;\n await this.client.none(alterSqlZ);\n }\n\n this.logger?.debug?.(`Ensured column ${parsedColumnName} exists in table ${fullTableName}`);\n }\n }\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'ALTER_TABLE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n }\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, string> }): Promise<R | null> {\n try {\n const keyEntries = Object.entries(keys).map(([key, value]) => [parseSqlIdentifier(key, 'column name'), value]);\n const conditions = keyEntries.map(([key], index) => `\"${key}\" = $${index + 1}`).join(' AND ');\n const values = keyEntries.map(([_, value]) => value);\n\n const result = await this.client.oneOrNone<R>(\n `SELECT * FROM ${getTableName({ indexName: tableName, schemaName: getSchemaName(this.schemaName) })} WHERE ${conditions} ORDER BY \"createdAt\" DESC LIMIT 1`,\n values,\n );\n\n if (!result) {\n return null;\n }\n\n if (tableName === TABLE_WORKFLOW_SNAPSHOT) {\n const snapshot = result as any;\n if (typeof snapshot.snapshot === 'string') {\n snapshot.snapshot = JSON.parse(snapshot.snapshot);\n }\n return snapshot;\n }\n\n return result;\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LOAD', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n }\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n if (records.length === 0) {\n return;\n }\n\n try {\n // Split records into DSQL-compatible batches (max 3000 rows per transaction)\n const { batches } = splitIntoBatches(records, { maxRows: DEFAULT_MAX_ROWS_PER_BATCH });\n\n // Process each batch with retry support\n for (const batch of batches) {\n await withRetry(\n async () => {\n await this.client.tx(async t => {\n for (const record of batch) {\n this.addTimestampZColumns(record);\n const schemaName = getSchemaName(this.schemaName);\n const columns = Object.keys(record).map(col => parseSqlIdentifier(col, 'column name'));\n const values = this.prepareValuesForInsert(record, tableName);\n const placeholders = values.map((_, i) => `$${i + 1}`).join(', ');\n\n await t.none(\n `INSERT INTO ${getTableName({ indexName: tableName, schemaName })} (${columns.map(c => `\"${c}\"`).join(', ')}) VALUES (${placeholders})`,\n values,\n );\n }\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `Batch insert retry ${attempt} for table ${tableName} after ${delay}ms: ${error.message}`,\n );\n },\n },\n );\n }\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'BATCH_INSERT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n numberOfRecords: records.length,\n },\n },\n error,\n );\n }\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n const schemaName = getSchemaName(this.schemaName);\n const tableNameWithSchema = getTableName({ indexName: tableName, schemaName });\n await this.client.none(`DROP TABLE IF EXISTS ${tableNameWithSchema}`);\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'DROP_TABLE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n }\n }\n\n /**\n * Wait for an asynchronous DSQL job to complete.\n * Aurora DSQL requires CREATE INDEX ASYNC and sys.wait_for_job() to wait for completion.\n */\n private async waitForDSQLJob(jobUuid: string, timeoutMs: number = 60000): Promise<void> {\n const pollIntervalMs = 1000;\n const startTime = Date.now();\n\n while (Date.now() - startTime < timeoutMs) {\n const result = await this.client.oneOrNone<{ status: string }>(`SELECT sys.wait_for_job($1, 1) as status`, [\n jobUuid,\n ]);\n\n if (result?.status === 'COMPLETED') {\n return;\n }\n\n if (result?.status === 'FAILED') {\n throw new Error(`DSQL async job ${jobUuid} failed`);\n }\n\n // Wait before next poll\n await new Promise(resolve => setTimeout(resolve, pollIntervalMs));\n }\n\n throw new Error(`DSQL async job ${jobUuid} timed out after ${timeoutMs}ms`);\n }\n\n async createIndex(options: CreateIndexOptions): Promise<void> {\n try {\n const {\n name,\n table,\n columns,\n unique = false,\n // Note: 'concurrent' option is ignored in DSQL - always uses ASYNC\n where,\n method = 'btree',\n opclass,\n storage,\n tablespace,\n } = options;\n\n const schemaName = this.schemaName || 'public';\n const fullTableName = getTableName({\n indexName: table as TABLE_NAMES,\n schemaName: getSchemaName(this.schemaName),\n });\n\n // Check if index already exists\n const indexExists = await this.client.oneOrNone<{ exists: number }>(\n `SELECT 1 as exists FROM pg_indexes\n WHERE indexname = $1\n AND schemaname = $2`,\n [name, schemaName],\n );\n\n if (indexExists) {\n return;\n }\n\n // Build index creation SQL\n // Aurora DSQL uses CREATE INDEX ASYNC instead of CONCURRENTLY\n const uniqueStr = unique ? 'UNIQUE ' : '';\n const methodStr = method !== 'btree' ? `USING ${method} ` : '';\n\n // Handle columns with optional operator class\n // Aurora DSQL: Strip ASC/DESC sort order specifiers (not supported)\n const columnsStr = columns\n .map(col => {\n const colName = col.replace(/\\s+(DESC|ASC)$/i, '').trim();\n const quotedCol = `\"${parseSqlIdentifier(colName, 'column name')}\"`;\n return opclass ? `${quotedCol} ${opclass}` : quotedCol;\n })\n .join(', ');\n\n const whereStr = where ? ` WHERE ${where}` : '';\n const tablespaceStr = tablespace ? ` TABLESPACE ${tablespace}` : '';\n\n let withStr = '';\n if (storage && Object.keys(storage).length > 0) {\n const storageParams = Object.entries(storage)\n .map(([key, value]) => `${key} = ${value}`)\n .join(', ');\n withStr = ` WITH (${storageParams})`;\n }\n\n // Aurora DSQL: Use ASYNC instead of CONCURRENTLY\n const quotedIndexName = `\"${parseSqlIdentifier(name, 'index name')}\"`;\n const sql = `CREATE ${uniqueStr}INDEX ASYNC ${quotedIndexName} ON ${fullTableName} ${methodStr}(${columnsStr})${withStr}${tablespaceStr}${whereStr}`;\n\n const result = await this.client.oneOrNone<{ job_uuid: string }>(sql);\n\n if (result?.job_uuid) {\n await this.waitForDSQLJob(result.job_uuid);\n }\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'INDEX_CREATE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName: options.name,\n tableName: options.table,\n },\n },\n error,\n );\n }\n }\n\n async dropIndex(indexName: string): Promise<void> {\n const schemaName = this.schemaName || 'public';\n\n await withRetry(\n async () => {\n const indexExists = await this.client.oneOrNone(\n `SELECT 1 FROM pg_indexes\n WHERE indexname = $1\n AND schemaname = $2`,\n [indexName, schemaName],\n );\n\n if (!indexExists) {\n return;\n }\n\n const quotedIndexName = `\"${parseSqlIdentifier(indexName, 'index name')}\"`;\n const sql = `DROP INDEX IF EXISTS ${getSchemaName(this.schemaName)}.${quotedIndexName}`;\n await this.client.none(sql);\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`dropIndex retry ${attempt} for ${indexName} after ${delay}ms: ${error.message}`);\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'INDEX_DROP', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n },\n },\n error,\n );\n });\n }\n\n async listIndexes(tableName?: string): Promise<IndexInfo[]> {\n try {\n const schemaName = this.schemaName || 'public';\n\n let query: string;\n let params: any[];\n\n if (tableName) {\n query = `\n SELECT\n i.indexname as name,\n i.tablename as table,\n i.indexdef as definition,\n ix.indisunique as is_unique,\n pg_size_pretty(pg_relation_size(c.oid)) as size,\n array_agg(a.attname ORDER BY array_position(ix.indkey, a.attnum)) as columns\n FROM pg_indexes i\n JOIN pg_class c ON c.relname = i.indexname AND c.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = i.schemaname)\n JOIN pg_index ix ON ix.indexrelid = c.oid\n JOIN pg_attribute a ON a.attrelid = ix.indrelid AND a.attnum = ANY(ix.indkey)\n WHERE i.schemaname = $1\n AND i.tablename = $2\n GROUP BY i.indexname, i.tablename, i.indexdef, ix.indisunique, c.oid\n `;\n params = [schemaName, tableName];\n } else {\n query = `\n SELECT\n i.indexname as name,\n i.tablename as table,\n i.indexdef as definition,\n ix.indisunique as is_unique,\n pg_size_pretty(pg_relation_size(c.oid)) as size,\n array_agg(a.attname ORDER BY array_position(ix.indkey, a.attnum)) as columns\n FROM pg_indexes i\n JOIN pg_class c ON c.relname = i.indexname AND c.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = i.schemaname)\n JOIN pg_index ix ON ix.indexrelid = c.oid\n JOIN pg_attribute a ON a.attrelid = ix.indrelid AND a.attnum = ANY(ix.indkey)\n WHERE i.schemaname = $1\n GROUP BY i.indexname, i.tablename, i.indexdef, ix.indisunique, c.oid\n `;\n params = [schemaName];\n }\n\n const results = await this.client.manyOrNone(query, params);\n\n return results.map(row => {\n let columns: string[] = [];\n if (typeof row.columns === 'string' && row.columns.startsWith('{') && row.columns.endsWith('}')) {\n const arrayContent = row.columns.slice(1, -1);\n columns = arrayContent ? arrayContent.split(',') : [];\n } else if (Array.isArray(row.columns)) {\n columns = row.columns;\n }\n\n return {\n name: row.name,\n table: row.table,\n columns,\n unique: row.is_unique || false,\n size: row.size || '0',\n definition: row.definition || '',\n };\n });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'INDEX_LIST', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: tableName\n ? {\n tableName,\n }\n : {},\n },\n error,\n );\n }\n }\n\n async describeIndex(indexName: string): Promise<StorageIndexStats> {\n try {\n const schemaName = this.schemaName || 'public';\n\n const query = `\n SELECT\n i.indexname as name,\n i.tablename as table,\n i.indexdef as definition,\n ix.indisunique as is_unique,\n pg_size_pretty(pg_relation_size(c.oid)) as size,\n array_agg(a.attname ORDER BY array_position(ix.indkey, a.attnum)) as columns,\n am.amname as method,\n s.idx_scan as scans,\n s.idx_tup_read as tuples_read,\n s.idx_tup_fetch as tuples_fetched\n FROM pg_indexes i\n JOIN pg_class c ON c.relname = i.indexname AND c.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = i.schemaname)\n JOIN pg_index ix ON ix.indexrelid = c.oid\n JOIN pg_attribute a ON a.attrelid = ix.indrelid AND a.attnum = ANY(ix.indkey)\n JOIN pg_am am ON c.relam = am.oid\n LEFT JOIN pg_stat_user_indexes s ON s.indexrelname = i.indexname AND s.schemaname = i.schemaname\n WHERE i.schemaname = $1\n AND i.indexname = $2\n GROUP BY i.indexname, i.tablename, i.indexdef, ix.indisunique, c.oid, am.amname, s.idx_scan, s.idx_tup_read, s.idx_tup_fetch\n `;\n\n const result = await this.client.oneOrNone(query, [schemaName, indexName]);\n\n if (!result) {\n throw new Error(`Index \"${indexName}\" not found in schema \"${schemaName}\"`);\n }\n\n let columns: string[] = [];\n if (typeof result.columns === 'string' && result.columns.startsWith('{') && result.columns.endsWith('}')) {\n const arrayContent = result.columns.slice(1, -1);\n columns = arrayContent ? arrayContent.split(',') : [];\n } else if (Array.isArray(result.columns)) {\n columns = result.columns;\n }\n\n // Aurora DSQL returns 'btree_index' instead of 'btree', normalize for API consistency\n const normalizedMethod = result.method === 'btree_index' ? 'btree' : result.method || 'btree';\n\n return {\n name: result.name,\n table: result.table,\n columns,\n unique: result.is_unique || false,\n size: result.size || '0',\n definition: result.definition || '',\n method: normalizedMethod,\n scans: parseInt(result.scans) || 0,\n tuples_read: parseInt(result.tuples_read) || 0,\n tuples_fetched: parseInt(result.tuples_fetched) || 0,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'INDEX_DESCRIBE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n },\n },\n error,\n );\n }\n }\n\n async update({\n tableName,\n keys,\n data,\n }: {\n tableName: TABLE_NAMES;\n keys: Record<string, any>;\n data: Record<string, any>;\n }): Promise<void> {\n const setColumns: string[] = [];\n const setValues: any[] = [];\n let paramIndex = 1;\n\n // Aurora DSQL: Set updatedAt/updatedAtZ since triggers are not supported\n const now = new Date().toISOString();\n const dataWithTimestamp = {\n ...data,\n updatedAt: now,\n updatedAtZ: now,\n };\n\n Object.entries(dataWithTimestamp).forEach(([key, value]) => {\n const parsedKey = parseSqlIdentifier(key, 'column name');\n setColumns.push(`\"${parsedKey}\" = $${paramIndex++}`);\n setValues.push(this.prepareValue(value, key, tableName));\n });\n\n const whereConditions: string[] = [];\n const whereValues: any[] = [];\n\n Object.entries(keys).forEach(([key, value]) => {\n const parsedKey = parseSqlIdentifier(key, 'column name');\n whereConditions.push(`\"${parsedKey}\" = $${paramIndex++}`);\n whereValues.push(this.prepareValue(value, key, tableName));\n });\n\n const tableName_ = getTableName({\n indexName: tableName,\n schemaName: getSchemaName(this.schemaName),\n });\n\n const sql = `UPDATE ${tableName_} SET ${setColumns.join(', ')} WHERE ${whereConditions.join(' AND ')}`;\n const values = [...setValues, ...whereValues];\n\n await withRetry(\n async () => {\n await this.client.none(sql, values);\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`update retry ${attempt} for table ${tableName} after ${delay}ms: ${error.message}`);\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'UPDATE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n });\n }\n\n async batchUpdate({\n tableName,\n updates,\n }: {\n tableName: TABLE_NAMES;\n updates: Array<{\n keys: Record<string, any>;\n data: Record<string, any>;\n }>;\n }): Promise<void> {\n if (updates.length === 0) {\n return;\n }\n\n try {\n const { batches } = splitIntoBatches(updates, { maxRows: DEFAULT_MAX_ROWS_PER_BATCH });\n\n for (const batch of batches) {\n await withRetry(\n async () => {\n await this.client.tx(async t => {\n for (const { keys, data } of batch) {\n const setClauses: string[] = [];\n const whereConditions: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n const now = new Date().toISOString();\n const dataWithTimestamp = {\n ...data,\n updatedAt: now,\n updatedAtZ: now,\n };\n\n Object.entries(dataWithTimestamp).forEach(([key, value]) => {\n const parsedKey = parseSqlIdentifier(key, 'column name');\n const preparedValue = this.prepareValue(value, key, tableName);\n setClauses.push(`\"${parsedKey}\" = $${paramIndex++}`);\n values.push(preparedValue);\n });\n\n Object.entries(keys).forEach(([key, value]) => {\n const parsedKey = parseSqlIdentifier(key, 'column name');\n whereConditions.push(`\"${parsedKey}\" = $${paramIndex++}`);\n values.push(value);\n });\n\n const tableName_ = getTableName({\n indexName: tableName,\n schemaName: getSchemaName(this.schemaName),\n });\n\n const sql = `UPDATE ${tableName_} SET ${setClauses.join(', ')} WHERE ${whereConditions.join(' AND ')}`;\n await t.none(sql, values);\n }\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `Batch update retry ${attempt} for table ${tableName} after ${delay}ms: ${error.message}`,\n );\n },\n },\n );\n }\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'BATCH_UPDATE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n numberOfRecords: updates.length,\n },\n },\n error,\n );\n }\n }\n\n async batchDelete({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any>[] }): Promise<void> {\n if (keys.length === 0) {\n return;\n }\n\n try {\n const tableName_ = getTableName({\n indexName: tableName,\n schemaName: getSchemaName(this.schemaName),\n });\n\n const { batches } = splitIntoBatches(keys, { maxRows: DEFAULT_MAX_ROWS_PER_BATCH });\n\n for (const batch of batches) {\n await withRetry(\n async () => {\n await this.client.tx(async t => {\n for (const keySet of batch) {\n const conditions: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n Object.entries(keySet).forEach(([key, value]) => {\n const parsedKey = parseSqlIdentifier(key, 'column name');\n conditions.push(`\"${parsedKey}\" = $${paramIndex++}`);\n values.push(value);\n });\n\n const sql = `DELETE FROM ${tableName_} WHERE ${conditions.join(' AND ')}`;\n await t.none(sql, values);\n }\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `Batch delete retry ${attempt} for table ${tableName} after ${delay}ms: ${error.message}`,\n );\n },\n },\n );\n }\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'BATCH_DELETE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n numberOfRecords: keys.length,\n },\n },\n error,\n );\n }\n }\n\n /**\n * Delete all data from a table (alias for clearTable for consistency with other stores)\n */\n async deleteData({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.clearTable({ tableName });\n }\n}\n","import type { TABLE_NAMES } from '@mastra/core/storage';\nimport { TABLE_SCHEMAS } from '@mastra/core/storage';\nimport { parseSqlIdentifier } from '@mastra/core/utils';\n\nexport function getSchemaName(schema?: string) {\n return schema ? `\"${parseSqlIdentifier(schema, 'schema name')}\"` : undefined;\n}\n\nexport function getTableName({ indexName, schemaName }: { indexName: string; schemaName?: string }) {\n const parsedIndexName = parseSqlIdentifier(indexName, 'index name');\n const quotedIndexName = `\"${parsedIndexName}\"`;\n const quotedSchemaName = schemaName;\n return quotedSchemaName ? `${quotedSchemaName}.${quotedIndexName}` : quotedIndexName;\n}\n\n/**\n * Transform SQL row to record format, handling JSON columns\n */\nexport function transformFromSqlRow<T>({\n tableName,\n sqlRow,\n}: {\n tableName: TABLE_NAMES;\n sqlRow: Record<string, any>;\n}): T {\n const schema = TABLE_SCHEMAS[tableName];\n const result: Record<string, any> = {};\n\n Object.entries(sqlRow).forEach(([key, value]) => {\n const columnSchema = schema?.[key];\n\n // Handle JSON columns\n if (columnSchema?.type === 'jsonb' && typeof value === 'string') {\n try {\n result[key] = JSON.parse(value);\n } catch {\n result[key] = value;\n }\n }\n // Handle Date columns - convert to Date objects for timestamp columns\n else if (columnSchema?.type === 'timestamp' && value && typeof value === 'string') {\n result[key] = new Date(value);\n } else if (columnSchema?.type === 'timestamp' && value instanceof Date) {\n result[key] = value;\n }\n // Handle boolean columns\n else if (columnSchema?.type === 'boolean') {\n result[key] = Boolean(value);\n } else {\n result[key] = value;\n }\n });\n\n return result as T;\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n AgentsStorage,\n createStorageErrorId,\n normalizePerPage,\n calculatePagination,\n TABLE_AGENTS,\n TABLE_AGENT_VERSIONS,\n TABLE_SCHEMAS,\n} from '@mastra/core/storage';\nimport type {\n StorageAgentType,\n StorageCreateAgentInput,\n StorageUpdateAgentInput,\n StorageListAgentsInput,\n StorageListAgentsOutput,\n CreateIndexOptions,\n AgentInstructionBlock,\n} from '@mastra/core/storage';\nimport type {\n AgentVersion,\n CreateVersionInput,\n ListVersionsInput,\n ListVersionsOutput,\n} from '@mastra/core/storage/domains/agents';\nimport { withRetry } from '../../../shared/retry';\nimport { DsqlDB, resolveDsqlConfig } from '../../db';\nimport type { DsqlDomainConfig } from '../../db';\nimport { getTableName, getSchemaName } from '../utils';\n\nexport class AgentsDSQL extends AgentsStorage {\n #db: DsqlDB;\n #schema: string;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_AGENTS, TABLE_AGENT_VERSIONS] as const;\n\n constructor(config: DsqlDomainConfig) {\n super();\n const { client, schemaName, skipDefaultIndexes, indexes } = resolveDsqlConfig(config);\n this.#db = new DsqlDB({ client, schemaName, skipDefaultIndexes });\n this.#schema = schemaName || 'public';\n this.#skipDefaultIndexes = skipDefaultIndexes;\n // Filter indexes to only those for tables managed by this domain\n this.#indexes = indexes?.filter(idx => (AgentsDSQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the agents domain tables.\n * Currently no default indexes are defined for agents.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for agents.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) {\n return;\n }\n // No default indexes for agents domain\n }\n\n async init(): Promise<void> {\n await this.#db.createTable({ tableName: TABLE_AGENTS, schema: TABLE_SCHEMAS[TABLE_AGENTS] });\n await this.#db.createTable({ tableName: TABLE_AGENT_VERSIONS, schema: TABLE_SCHEMAS[TABLE_AGENT_VERSIONS] });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) {\n return;\n }\n\n for (const indexDef of this.#indexes) {\n try {\n await this.#db.createIndex(indexDef);\n } catch (error) {\n // Log but continue - indexes are performance optimizations\n this.logger?.warn?.(`Failed to create custom index ${indexDef.name}:`, error);\n }\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_AGENT_VERSIONS });\n await this.#db.clearTable({ tableName: TABLE_AGENTS });\n }\n\n private parseJson(value: any, fieldName?: string): any {\n if (!value) return undefined;\n if (typeof value !== 'string') return value;\n\n try {\n return JSON.parse(value);\n } catch (error) {\n const details: Record<string, string> = {\n value: value.length > 100 ? value.substring(0, 100) + '...' : value,\n };\n if (fieldName) {\n details.field = fieldName;\n }\n\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'PARSE_JSON', 'INVALID_JSON'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Failed to parse JSON${fieldName ? ` for field \"${fieldName}\"` : ''}: ${error instanceof Error ? error.message : 'Unknown error'}`,\n details,\n },\n error,\n );\n }\n }\n\n private parseRow(row: any): StorageAgentType {\n return {\n id: row.id as string,\n status: row.status as 'draft' | 'published' | 'archived',\n activeVersionId: row.activeVersionId as string | undefined,\n authorId: row.authorId as string | undefined,\n metadata: this.parseJson(row.metadata, 'metadata'),\n createdAt: row.createdAtZ || row.createdAt,\n updatedAt: row.updatedAtZ || row.updatedAt,\n };\n }\n\n async getById(id: string): Promise<StorageAgentType | null> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENTS, schemaName: getSchemaName(this.#schema) });\n\n const result = await this.#db.client.oneOrNone(`SELECT * FROM ${tableName} WHERE id = $1`, [id]);\n\n if (!result) {\n return null;\n }\n\n return this.parseRow(result);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_AGENT_BY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: id },\n },\n error,\n );\n }\n }\n\n async create(input: { agent: StorageCreateAgentInput }): Promise<StorageAgentType> {\n const { agent } = input;\n const tableName = getTableName({ indexName: TABLE_AGENTS, schemaName: getSchemaName(this.#schema) });\n const now = new Date();\n const nowIso = now.toISOString();\n\n try {\n // 1. Create the thin agent record with status='draft' and activeVersionId=null\n await withRetry(() =>\n this.#db.client.none(\n `INSERT INTO ${tableName} (\n id, status, \"authorId\", metadata,\n \"activeVersionId\",\n \"createdAt\", \"createdAtZ\", \"updatedAt\", \"updatedAtZ\"\n ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)`,\n [\n agent.id,\n 'draft',\n agent.authorId ?? null,\n agent.metadata ? JSON.stringify(agent.metadata) : null,\n null, // activeVersionId starts as null\n nowIso,\n nowIso,\n nowIso,\n nowIso,\n ],\n ),\n );\n\n // 2. Extract config fields from the flat input\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = agent;\n\n // Create version 1 from the config\n const versionId = crypto.randomUUID();\n await this.createVersion({\n id: versionId,\n agentId: agent.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n\n // 3. Return the thin agent record\n return {\n id: agent.id,\n status: 'draft',\n activeVersionId: undefined,\n authorId: agent.authorId,\n metadata: agent.metadata,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n // Best-effort cleanup to prevent orphaned draft records\n try {\n await this.#db.client.none(\n `DELETE FROM ${tableName} WHERE id = $1 AND status = 'draft' AND \"activeVersionId\" IS NULL`,\n [agent.id],\n );\n } catch {\n // Ignore cleanup errors\n }\n\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'CREATE_AGENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: agent.id },\n },\n error,\n );\n }\n }\n\n async update(input: StorageUpdateAgentInput): Promise<StorageAgentType> {\n const { id, ...updates } = input;\n try {\n const tableName = getTableName({ indexName: TABLE_AGENTS, schemaName: getSchemaName(this.#schema) });\n\n // First, get the existing agent\n const existingAgent = await this.getById(id);\n if (!existingAgent) {\n throw new MastraError({\n id: createStorageErrorId('DSQL', 'UPDATE_AGENT', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Agent ${id} not found`,\n details: { agentId: id },\n });\n }\n\n const { authorId, activeVersionId, metadata, status } = updates;\n\n // Update metadata fields on the agent record\n const setClauses: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n if (authorId !== undefined) {\n setClauses.push(`\"authorId\" = $${paramIndex++}`);\n values.push(authorId);\n }\n\n if (activeVersionId !== undefined) {\n setClauses.push(`\"activeVersionId\" = $${paramIndex++}`);\n values.push(activeVersionId);\n }\n\n if (status !== undefined) {\n setClauses.push(`status = $${paramIndex++}`);\n values.push(status);\n }\n\n if (metadata !== undefined) {\n setClauses.push(`metadata = $${paramIndex++}`);\n values.push(JSON.stringify(metadata));\n }\n\n // Always update the updatedAt timestamp\n const now = new Date().toISOString();\n setClauses.push(`\"updatedAt\" = $${paramIndex++}`);\n values.push(now);\n setClauses.push(`\"updatedAtZ\" = $${paramIndex++}`);\n values.push(now);\n\n // Add the ID for the WHERE clause\n values.push(id);\n\n await withRetry(() =>\n this.#db.client.none(`UPDATE ${tableName} SET ${setClauses.join(', ')} WHERE id = ${paramIndex}`, values),\n );\n\n // Return the updated agent\n const updatedAgent = await this.getById(id);\n if (!updatedAgent) {\n throw new MastraError({\n id: createStorageErrorId('DSQL', 'UPDATE_AGENT', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Agent ${id} not found after update`,\n details: { agentId: id },\n });\n }\n\n return updatedAgent;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'UPDATE_AGENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: id },\n },\n error,\n );\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENTS, schemaName: getSchemaName(this.#schema) });\n\n // Delete all versions for this agent first\n await this.deleteVersionsByParentId(id);\n\n // Then delete the agent\n await this.#db.client.none(`DELETE FROM ${tableName} WHERE id = $1`, [id]);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'DELETE_AGENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: id },\n },\n error,\n );\n }\n }\n\n async list(args?: StorageListAgentsInput): Promise<StorageListAgentsOutput> {\n const { page = 0, perPage: perPageInput, orderBy, authorId, metadata, status } = args || {};\n const { field, direction } = this.parseOrderBy(orderBy);\n\n if (page < 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_AGENTS', 'INVALID_PAGE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { page },\n },\n new Error('page must be >= 0'),\n );\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n const tableName = getTableName({ indexName: TABLE_AGENTS, schemaName: getSchemaName(this.#schema) });\n\n // Build WHERE conditions\n const conditions: string[] = [];\n const queryParams: any[] = [];\n let paramIdx = 1;\n\n if (status) {\n conditions.push(`status = $${paramIdx++}`);\n queryParams.push(status);\n }\n\n if (authorId !== undefined) {\n conditions.push(`\"authorId\" = $${paramIdx++}`);\n queryParams.push(authorId);\n }\n\n // Note: Aurora DSQL stores JSONB as TEXT, so we compare as text\n if (metadata && Object.keys(metadata).length > 0) {\n conditions.push(`metadata::text = $${paramIdx++}`);\n queryParams.push(JSON.stringify(metadata));\n }\n\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n // Get total count\n const countResult = await this.#db.client.one(\n `SELECT COUNT(*) as count FROM ${tableName} ${whereClause}`,\n queryParams,\n );\n const total = parseInt(countResult.count, 10);\n\n if (total === 0) {\n return {\n agents: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n const limitValue = perPageInput === false ? total : perPage;\n\n // Fetch the actual data\n const dataResult = await this.#db.client.manyOrNone(\n `SELECT * FROM ${tableName} ${whereClause} ORDER BY \"${field}\" ${direction} LIMIT $${paramIdx++} OFFSET $${paramIdx++}`,\n [...queryParams, limitValue, offset],\n );\n\n const agents = (dataResult || []).map(row => this.parseRow(row));\n\n return {\n agents,\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_AGENTS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Agent Version Methods\n // ==========================================================================\n\n async createVersion(input: CreateVersionInput): Promise<AgentVersion> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENT_VERSIONS, schemaName: getSchemaName(this.#schema) });\n const now = new Date();\n const nowIso = now.toISOString();\n\n await withRetry(() =>\n this.#db.client.none(\n `INSERT INTO ${tableName} (\n id, \"agentId\", \"versionNumber\",\n name, description, instructions, model, tools,\n \"defaultOptions\", workflows, agents, \"integrationTools\",\n \"inputProcessors\", \"outputProcessors\", memory, scorers,\n \"mcpClients\", \"requestContextSchema\", workspace, skills, \"skillsFormat\",\n \"changedFields\", \"changeMessage\",\n \"createdAt\", \"createdAtZ\"\n ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25)`,\n [\n input.id,\n input.agentId,\n input.versionNumber,\n input.name,\n input.description ?? null,\n this.serializeInstructions(input.instructions),\n JSON.stringify(input.model),\n input.tools ? JSON.stringify(input.tools) : null,\n input.defaultOptions ? JSON.stringify(input.defaultOptions) : null,\n input.workflows ? JSON.stringify(input.workflows) : null,\n input.agents ? JSON.stringify(input.agents) : null,\n input.integrationTools ? JSON.stringify(input.integrationTools) : null,\n input.inputProcessors ? JSON.stringify(input.inputProcessors) : null,\n input.outputProcessors ? JSON.stringify(input.outputProcessors) : null,\n input.memory ? JSON.stringify(input.memory) : null,\n input.scorers ? JSON.stringify(input.scorers) : null,\n input.mcpClients ? JSON.stringify(input.mcpClients) : null,\n input.requestContextSchema ? JSON.stringify(input.requestContextSchema) : null,\n input.workspace ? JSON.stringify(input.workspace) : null,\n input.skills ? JSON.stringify(input.skills) : null,\n input.skillsFormat ?? null,\n input.changedFields ? JSON.stringify(input.changedFields) : null,\n input.changeMessage ?? null,\n nowIso,\n nowIso,\n ],\n ),\n );\n\n return {\n ...input,\n createdAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'CREATE_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { versionId: input.id, agentId: input.agentId },\n },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<AgentVersion | null> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENT_VERSIONS, schemaName: getSchemaName(this.#schema) });\n const result = await this.#db.client.oneOrNone(`SELECT * FROM ${tableName} WHERE id = $1`, [id]);\n\n if (!result) {\n return null;\n }\n\n return this.parseVersionRow(result);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { versionId: id },\n },\n error,\n );\n }\n }\n\n async getVersionByNumber(agentId: string, versionNumber: number): Promise<AgentVersion | null> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENT_VERSIONS, schemaName: getSchemaName(this.#schema) });\n const result = await this.#db.client.oneOrNone(\n `SELECT * FROM ${tableName} WHERE \"agentId\" = $1 AND \"versionNumber\" = $2`,\n [agentId, versionNumber],\n );\n\n if (!result) {\n return null;\n }\n\n return this.parseVersionRow(result);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_VERSION_BY_NUMBER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId, versionNumber },\n },\n error,\n );\n }\n }\n\n async getLatestVersion(agentId: string): Promise<AgentVersion | null> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENT_VERSIONS, schemaName: getSchemaName(this.#schema) });\n const result = await this.#db.client.oneOrNone(\n `SELECT * FROM ${tableName} WHERE \"agentId\" = $1 ORDER BY \"versionNumber\" DESC LIMIT 1`,\n [agentId],\n );\n\n if (!result) {\n return null;\n }\n\n return this.parseVersionRow(result);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_LATEST_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId },\n },\n error,\n );\n }\n }\n\n async listVersions(input: ListVersionsInput): Promise<ListVersionsOutput> {\n const { agentId, page = 0, perPage: perPageInput, orderBy } = input;\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n const sortField = orderBy?.field || 'versionNumber';\n const sortDirection = orderBy?.direction || 'DESC';\n\n try {\n const tableName = getTableName({ indexName: TABLE_AGENT_VERSIONS, schemaName: getSchemaName(this.#schema) });\n\n const countResult = await this.#db.client.one(`SELECT COUNT(*) as count FROM ${tableName} WHERE \"agentId\" = $1`, [\n agentId,\n ]);\n const total = parseInt(countResult.count, 10);\n\n if (total === 0) {\n return {\n versions: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.#db.client.manyOrNone(\n `SELECT * FROM ${tableName} WHERE \"agentId\" = $1 ORDER BY \"${sortField}\" ${sortDirection} LIMIT $2 OFFSET $3`,\n [agentId, limitValue, offset],\n );\n\n const versions = (rows || []).map(row => this.parseVersionRow(row));\n\n return {\n versions,\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId },\n },\n error,\n );\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENT_VERSIONS, schemaName: getSchemaName(this.#schema) });\n await this.#db.client.none(`DELETE FROM ${tableName} WHERE id = $1`, [id]);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'DELETE_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { versionId: id },\n },\n error,\n );\n }\n }\n\n async deleteVersionsByParentId(agentId: string): Promise<void> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENT_VERSIONS, schemaName: getSchemaName(this.#schema) });\n await this.#db.client.none(`DELETE FROM ${tableName} WHERE \"agentId\" = $1`, [agentId]);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'DELETE_VERSIONS_BY_PARENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId },\n },\n error,\n );\n }\n }\n\n async countVersions(agentId: string): Promise<number> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENT_VERSIONS, schemaName: getSchemaName(this.#schema) });\n const result = await this.#db.client.one(`SELECT COUNT(*) as count FROM ${tableName} WHERE \"agentId\" = $1`, [\n agentId,\n ]);\n return parseInt(result.count, 10);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'COUNT_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId },\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Private Helpers\n // ==========================================================================\n\n private serializeInstructions(instructions: string | AgentInstructionBlock[] | undefined | null): string | undefined {\n if (instructions == null) return undefined;\n return Array.isArray(instructions) ? JSON.stringify(instructions) : instructions;\n }\n\n private deserializeInstructions(raw: string | null | undefined): string | AgentInstructionBlock[] {\n if (!raw) return '';\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) return parsed as AgentInstructionBlock[];\n } catch {\n // Not JSON — plain string\n }\n return raw;\n }\n\n private parseVersionRow(row: any): AgentVersion {\n return {\n id: row.id as string,\n agentId: row.agentId as string,\n versionNumber: row.versionNumber as number,\n name: row.name as string,\n description: row.description as string | undefined,\n instructions: this.deserializeInstructions(row.instructions as string),\n model: this.parseJson(row.model, 'model'),\n tools: this.parseJson(row.tools, 'tools'),\n defaultOptions: this.parseJson(row.defaultOptions, 'defaultOptions'),\n workflows: this.parseJson(row.workflows, 'workflows'),\n agents: this.parseJson(row.agents, 'agents'),\n integrationTools: this.parseJson(row.integrationTools, 'integrationTools'),\n inputProcessors: this.parseJson(row.inputProcessors, 'inputProcessors'),\n outputProcessors: this.parseJson(row.outputProcessors, 'outputProcessors'),\n memory: this.parseJson(row.memory, 'memory'),\n scorers: this.parseJson(row.scorers, 'scorers'),\n mcpClients: this.parseJson(row.mcpClients, 'mcpClients'),\n requestContextSchema: this.parseJson(row.requestContextSchema, 'requestContextSchema'),\n workspace: this.parseJson(row.workspace, 'workspace'),\n skills: this.parseJson(row.skills, 'skills'),\n skillsFormat: row.skillsFormat as 'xml' | 'json' | 'markdown' | undefined,\n changedFields: this.parseJson(row.changedFields, 'changedFields'),\n changeMessage: row.changeMessage as string | undefined,\n createdAt: row.createdAtZ || row.createdAt,\n };\n }\n}\n","import { MessageList } from '@mastra/core/agent';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { MastraMessageV1, MastraDBMessage, StorageThreadType } from '@mastra/core/memory';\nimport {\n MemoryStorage,\n normalizePerPage,\n calculatePagination,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_THREADS,\n TABLE_SCHEMAS,\n createStorageErrorId,\n} from '@mastra/core/storage';\nimport type {\n StorageResourceType,\n StorageListMessagesInput,\n StorageListMessagesOutput,\n StorageListThreadsInput,\n StorageListThreadsOutput,\n CreateIndexOptions,\n} from '@mastra/core/storage';\nimport { withRetry } from '../../../shared/retry';\nimport { DsqlDB, resolveDsqlConfig } from '../../db';\nimport type { DsqlDomainConfig } from '../../db';\nimport { getTableName, getSchemaName } from '../utils';\n\n// Database row type that includes timezone-aware columns\ntype MessageRowFromDB = {\n id: string;\n content: string | any;\n role: string;\n type?: string;\n createdAt: Date | string;\n createdAtZ?: Date | string;\n threadId: string;\n resourceId: string;\n};\n\n/**\n * Generate SQL placeholder string for IN clauses.\n * @param count - Number of placeholders to generate\n * @param startIndex - Starting index for placeholders (default: 1)\n * @returns Comma-separated placeholder string, e.g. \"$1, $2, $3\"\n */\nfunction inPlaceholders(count: number, startIndex = 1): string {\n return Array.from({ length: count }, (_, i) => `$${i + startIndex}`).join(', ');\n}\nexport class MemoryDSQL extends MemoryStorage {\n #db: DsqlDB;\n #schema: string;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES] as const;\n\n constructor(config: DsqlDomainConfig) {\n super();\n const { client, schemaName, skipDefaultIndexes, indexes } = resolveDsqlConfig(config);\n this.#db = new DsqlDB({ client, schemaName, skipDefaultIndexes });\n this.#schema = schemaName || 'public';\n this.#skipDefaultIndexes = skipDefaultIndexes;\n // Filter indexes to only those for tables managed by this domain\n this.#indexes = indexes?.filter(idx => (MemoryDSQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n async init(): Promise<void> {\n await this.#db.createTable({ tableName: TABLE_THREADS, schema: TABLE_SCHEMAS[TABLE_THREADS] });\n await this.#db.createTable({ tableName: TABLE_MESSAGES, schema: TABLE_SCHEMAS[TABLE_MESSAGES] });\n await this.#db.createTable({ tableName: TABLE_RESOURCES, schema: TABLE_SCHEMAS[TABLE_RESOURCES] });\n await this.#db.alterTable({\n tableName: TABLE_MESSAGES,\n schema: TABLE_SCHEMAS[TABLE_MESSAGES],\n ifNotExists: ['resourceId'],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n /**\n * Returns default index definitions for the memory domain tables.\n * Note: Aurora DSQL does not support ASC/DESC in index columns.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n const schemaPrefix = this.#schema !== 'public' ? `${this.#schema}_` : '';\n return [\n {\n name: `${schemaPrefix}mastra_threads_resourceid_createdat_idx`,\n table: TABLE_THREADS,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: `${schemaPrefix}mastra_messages_thread_id_createdat_idx`,\n table: TABLE_MESSAGES,\n columns: ['thread_id', 'createdAt'],\n },\n ];\n }\n\n /**\n * Creates default indexes for optimal query performance.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) {\n return;\n }\n\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n try {\n await this.#db.createIndex(indexDef);\n } catch (error) {\n // Log but continue - indexes are performance optimizations\n this.logger?.warn?.(`Failed to create index ${indexDef.name}:`, error);\n }\n }\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) {\n return;\n }\n\n for (const indexDef of this.#indexes) {\n try {\n await this.#db.createIndex(indexDef);\n } catch (error) {\n // Log but continue - indexes are performance optimizations\n this.logger?.warn?.(`Failed to create custom index ${indexDef.name}:`, error);\n }\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_MESSAGES });\n await this.#db.clearTable({ tableName: TABLE_THREADS });\n await this.#db.clearTable({ tableName: TABLE_RESOURCES });\n }\n\n /**\n * Normalizes message row from database by applying createdAtZ fallback\n */\n private normalizeMessageRow(row: MessageRowFromDB): Omit<MessageRowFromDB, 'createdAtZ'> {\n return {\n id: row.id,\n content: row.content,\n role: row.role,\n type: row.type,\n createdAt: row.createdAtZ || row.createdAt,\n threadId: row.threadId,\n resourceId: row.resourceId,\n };\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n try {\n const tableName = getTableName({ indexName: TABLE_THREADS, schemaName: getSchemaName(this.#schema) });\n\n const thread = await this.#db.client.oneOrNone<StorageThreadType & { createdAtZ: Date; updatedAtZ: Date }>(\n `SELECT * FROM ${tableName} WHERE id = $1`,\n [threadId],\n );\n\n if (!thread) {\n return null;\n }\n\n return {\n id: thread.id,\n resourceId: thread.resourceId,\n title: thread.title,\n metadata: typeof thread.metadata === 'string' ? JSON.parse(thread.metadata) : thread.metadata,\n createdAt: thread.createdAtZ || thread.createdAt,\n updatedAt: thread.updatedAtZ || thread.updatedAt,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_THREAD_BY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n },\n },\n error,\n );\n }\n }\n\n public async listThreads(args: StorageListThreadsInput): Promise<StorageListThreadsOutput> {\n const { page = 0, perPage: perPageInput, orderBy, filter } = args;\n\n try {\n this.validatePaginationInput(page, perPageInput ?? 100);\n } catch (error) {\n throw new MastraError({\n id: createStorageErrorId('DSQL', 'LIST_THREADS', 'INVALID_PAGE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: error instanceof Error ? error.message : 'Invalid pagination parameters',\n details: { page, ...(perPageInput !== undefined && { perPage: perPageInput }) },\n });\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n\n try {\n this.validateMetadataKeys(filter?.metadata);\n } catch (error) {\n throw new MastraError({\n id: createStorageErrorId('DSQL', 'LIST_THREADS', 'INVALID_METADATA_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: error instanceof Error ? error.message : 'Invalid metadata key',\n details: { metadataKeys: filter?.metadata ? Object.keys(filter.metadata).join(', ') : '' },\n });\n }\n\n const { field, direction } = this.parseOrderBy(orderBy);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n const tableName = getTableName({ indexName: TABLE_THREADS, schemaName: getSchemaName(this.#schema) });\n const whereClauses: string[] = [];\n const queryParams: any[] = [];\n let paramIndex = 1;\n\n if (filter?.resourceId) {\n whereClauses.push(`\"resourceId\" = ${paramIndex}`);\n queryParams.push(filter.resourceId);\n paramIndex++;\n }\n\n // Aurora DSQL stores JSONB as TEXT, so cast to jsonb for containment operator\n if (filter?.metadata && Object.keys(filter.metadata).length > 0) {\n for (const [key, value] of Object.entries(filter.metadata)) {\n whereClauses.push(`metadata::jsonb @> ${paramIndex}::jsonb`);\n queryParams.push(JSON.stringify({ [key]: value }));\n paramIndex++;\n }\n }\n\n const whereClause = whereClauses.length > 0 ? `WHERE ${whereClauses.join(' AND ')}` : '';\n const baseQuery = `FROM ${tableName} ${whereClause}`;\n\n const countQuery = `SELECT COUNT(*) ${baseQuery}`;\n const countResult = await this.#db.client.one(countQuery, queryParams);\n const total = parseInt(countResult.count, 10);\n\n if (total === 0) {\n return {\n threads: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n const limitValue = perPageInput === false ? total : perPage;\n const dataQuery = `SELECT id, \"resourceId\", title, metadata, \"createdAt\", \"createdAtZ\", \"updatedAt\", \"updatedAtZ\" ${baseQuery} ORDER BY \"${field}\" ${direction} LIMIT ${paramIndex} OFFSET ${paramIndex + 1}`;\n const rows = await this.#db.client.manyOrNone<StorageThreadType & { createdAtZ: Date; updatedAtZ: Date }>(\n dataQuery,\n [...queryParams, limitValue, offset],\n );\n\n const threads: StorageThreadType[] = (rows || []).map(thread => ({\n id: thread.id,\n resourceId: thread.resourceId,\n title: thread.title,\n metadata: typeof thread.metadata === 'string' ? JSON.parse(thread.metadata) : thread.metadata,\n createdAt: thread.createdAtZ || thread.createdAt,\n updatedAt: thread.updatedAtZ || thread.updatedAt,\n }));\n\n return {\n threads,\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_THREADS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n ...(filter?.resourceId && { resourceId: filter.resourceId }),\n hasMetadataFilter: !!filter?.metadata,\n page,\n },\n },\n error,\n );\n this.logger?.error?.(mastraError.toString());\n this.logger?.trackException(mastraError);\n return {\n threads: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n const tableName = getTableName({ indexName: TABLE_THREADS, schemaName: getSchemaName(this.#schema) });\n\n await withRetry(\n async () => {\n await this.#db.client.none(\n `INSERT INTO ${tableName} (\n id,\n \"resourceId\",\n title,\n metadata,\n \"createdAt\",\n \"createdAtZ\",\n \"updatedAt\",\n \"updatedAtZ\"\n ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n ON CONFLICT (id) DO UPDATE SET\n \"resourceId\" = EXCLUDED.\"resourceId\",\n title = EXCLUDED.title,\n metadata = EXCLUDED.metadata,\n \"createdAt\" = EXCLUDED.\"createdAt\",\n \"createdAtZ\" = EXCLUDED.\"createdAtZ\",\n \"updatedAt\" = EXCLUDED.\"updatedAt\",\n \"updatedAtZ\" = EXCLUDED.\"updatedAtZ\"`,\n [\n thread.id,\n thread.resourceId,\n thread.title,\n thread.metadata ? JSON.stringify(thread.metadata) : null,\n thread.createdAt,\n thread.createdAt,\n thread.updatedAt,\n thread.updatedAt,\n ],\n );\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`saveThread retry ${attempt} for ${thread.id} after ${delay}ms: ${error.message}`);\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'SAVE_THREAD', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId: thread.id,\n },\n },\n error,\n );\n });\n\n return thread;\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n const threadTableName = getTableName({ indexName: TABLE_THREADS, schemaName: getSchemaName(this.#schema) });\n\n const { result } = await withRetry(\n async () => {\n // Get the existing thread inside retry block to ensure fresh data on retry\n const existingThread = await this.getThreadById({ threadId: id });\n if (!existingThread) {\n throw new MastraError({\n id: createStorageErrorId('DSQL', 'UPDATE_THREAD', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread ${id} not found`,\n details: {\n threadId: id,\n title,\n },\n });\n }\n\n // Merge the existing metadata with the new metadata\n const mergedMetadata = {\n ...existingThread.metadata,\n ...metadata,\n };\n\n const now = new Date().toISOString();\n const thread = await this.#db.client.one<StorageThreadType & { createdAtZ: Date; updatedAtZ: Date }>(\n `UPDATE ${threadTableName}\n SET \n title = $1,\n metadata = $2,\n \"updatedAt\" = $3::timestamp,\n \"updatedAtZ\" = $4::timestamptz\n WHERE id = $5\n RETURNING *\n `,\n [title, JSON.stringify(mergedMetadata), now, now, id],\n );\n\n return {\n id: thread.id,\n resourceId: thread.resourceId,\n title: thread.title,\n metadata: typeof thread.metadata === 'string' ? JSON.parse(thread.metadata) : thread.metadata,\n createdAt: thread.createdAtZ || thread.createdAt,\n updatedAt: thread.updatedAtZ || thread.updatedAt,\n };\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`updateThread retry ${attempt} for ${id} after ${delay}ms: ${error.message}`);\n },\n },\n ).catch(error => {\n // Re-throw MastraErrors as-is (e.g., thread not found)\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'UPDATE_THREAD', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId: id,\n title,\n },\n },\n error,\n );\n });\n\n return result;\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n const tableName = getTableName({ indexName: TABLE_MESSAGES, schemaName: getSchemaName(this.#schema) });\n const threadTableName = getTableName({ indexName: TABLE_THREADS, schemaName: getSchemaName(this.#schema) });\n\n await withRetry(\n async () => {\n await this.#db.client.tx(async t => {\n // First delete all messages associated with this thread\n await t.none(`DELETE FROM ${tableName} WHERE thread_id = $1`, [threadId]);\n\n // Then delete the thread\n await t.none(`DELETE FROM ${threadTableName} WHERE id = $1`, [threadId]);\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`deleteThread retry ${attempt} for ${threadId} after ${delay}ms: ${error.message}`);\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'DELETE_THREAD', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n },\n },\n error,\n );\n });\n }\n\n private async _getIncludedMessages({ include }: { include: StorageListMessagesInput['include'] }) {\n if (!include || include.length === 0) return null;\n\n const unionQueries: string[] = [];\n const params: any[] = [];\n let paramIdx = 1;\n const tableName = getTableName({ indexName: TABLE_MESSAGES, schemaName: getSchemaName(this.#schema) });\n\n for (const inc of include) {\n const { id, withPreviousMessages = 0, withNextMessages = 0 } = inc;\n unionQueries.push(\n `\n SELECT * FROM (\n WITH target_thread AS (\n SELECT thread_id FROM ${tableName} WHERE id = $${paramIdx}\n ),\n ordered_messages AS (\n SELECT\n *,\n ROW_NUMBER() OVER (ORDER BY \"createdAt\" ASC) as row_num\n FROM ${tableName}\n WHERE thread_id = (SELECT thread_id FROM target_thread)\n )\n SELECT\n m.id,\n m.content,\n m.role,\n m.type,\n m.\"createdAt\",\n m.\"createdAtZ\",\n m.thread_id AS \"threadId\",\n m.\"resourceId\"\n FROM ordered_messages m\n WHERE m.id = $${paramIdx}\n OR EXISTS (\n SELECT 1 FROM ordered_messages target\n WHERE target.id = $${paramIdx}\n AND (\n (m.row_num < target.row_num AND m.row_num >= target.row_num - $${paramIdx + 1})\n OR\n (m.row_num > target.row_num AND m.row_num <= target.row_num + $${paramIdx + 2})\n )\n )\n ) AS query_${paramIdx}\n `,\n );\n params.push(id, withPreviousMessages, withNextMessages);\n paramIdx += 3;\n }\n const finalQuery = unionQueries.join(' UNION ALL ') + ' ORDER BY \"createdAt\" ASC';\n const includedRows = await this.#db.client.manyOrNone<MessageRowFromDB>(finalQuery, params);\n const seen = new Set<string>();\n const dedupedRows = includedRows.filter(row => {\n if (seen.has(row.id)) return false;\n seen.add(row.id);\n return true;\n });\n return dedupedRows;\n }\n\n private parseRow(row: MessageRowFromDB): MastraDBMessage {\n const normalized = this.normalizeMessageRow(row);\n let content = normalized.content;\n try {\n content = JSON.parse(normalized.content);\n } catch {\n // use content as is if it's not JSON\n }\n return {\n id: normalized.id,\n content,\n role: normalized.role as MastraDBMessage['role'],\n createdAt: new Date(normalized.createdAt as string),\n threadId: normalized.threadId,\n resourceId: normalized.resourceId,\n ...(normalized.type && normalized.type !== 'v2' ? { type: normalized.type } : {}),\n } satisfies MastraDBMessage;\n }\n\n public async listMessagesById({ messageIds }: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messageIds.length === 0) return { messages: [] };\n const selectStatement = `SELECT id, content, role, type, \"createdAt\", \"createdAtZ\", thread_id AS \"threadId\", \"resourceId\"`;\n\n try {\n const tableName = getTableName({ indexName: TABLE_MESSAGES, schemaName: getSchemaName(this.#schema) });\n const query = `\n ${selectStatement} FROM ${tableName}\n WHERE id IN (${inPlaceholders(messageIds.length)})\n ORDER BY \"createdAt\" DESC\n `;\n const resultRows = await this.#db.client.manyOrNone<MessageRowFromDB>(query, messageIds);\n\n const list = new MessageList().add(\n resultRows.map(row => this.parseRow(row)) as (MastraMessageV1 | MastraDBMessage)[],\n 'memory',\n );\n return { messages: list.get.all.db() };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_MESSAGES_BY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n messageIds: JSON.stringify(messageIds),\n },\n },\n error,\n );\n this.logger?.error?.(mastraError.toString());\n this.logger?.trackException(mastraError);\n return { messages: [] };\n }\n }\n\n public async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;\n\n const threadIds = (Array.isArray(threadId) ? threadId : [threadId]).filter(\n (id): id is string => typeof id === 'string',\n );\n\n if (threadIds.length === 0 || threadIds.some(id => !id.trim())) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_MESSAGES', 'INVALID_THREAD_ID'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { threadId: Array.isArray(threadId) ? String(threadId) : String(threadId) },\n },\n new Error('threadId must be a non-empty string or array of non-empty strings'),\n );\n }\n\n if (page < 0) {\n throw new MastraError({\n id: createStorageErrorId('DSQL', 'LIST_MESSAGES', 'INVALID_PAGE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'Page number must be non-negative',\n details: {\n threadId: Array.isArray(threadId) ? threadId.join(',') : threadId,\n page,\n },\n });\n }\n\n const perPage = normalizePerPage(perPageInput, 40);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n const { field, direction } = this.parseOrderBy(orderBy, 'ASC');\n const orderByStatement = `ORDER BY \"${field}\" ${direction}`;\n\n const selectStatement = `SELECT id, content, role, type, \"createdAt\", \"createdAtZ\", thread_id AS \"threadId\", \"resourceId\"`;\n const tableName = getTableName({ indexName: TABLE_MESSAGES, schemaName: getSchemaName(this.#schema) });\n\n const conditions: string[] = [`thread_id IN (${inPlaceholders(threadIds.length)})`];\n const queryParams: any[] = [...threadIds];\n let paramIndex = threadIds.length + 1;\n\n if (resourceId) {\n conditions.push(`\"resourceId\" = $${paramIndex++}`);\n queryParams.push(resourceId);\n }\n\n if (filter?.dateRange?.start) {\n conditions.push(`\"createdAtZ\" >= $${paramIndex++}::timestamptz`);\n queryParams.push(filter.dateRange.start);\n }\n\n if (filter?.dateRange?.end) {\n conditions.push(`\"createdAtZ\" <= $${paramIndex++}::timestamptz`);\n queryParams.push(filter.dateRange.end);\n }\n\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n const countQuery = `SELECT COUNT(*) FROM ${tableName} ${whereClause}`;\n const countResult = await this.#db.client.one(countQuery, queryParams);\n const total = parseInt(countResult.count, 10);\n\n const limitValue = perPageInput === false ? total : perPage;\n const dataQuery = `${selectStatement} FROM ${tableName} ${whereClause} ${orderByStatement} LIMIT $${paramIndex++} OFFSET $${paramIndex++}`;\n const rows = await this.#db.client.manyOrNone<MessageRowFromDB>(dataQuery, [...queryParams, limitValue, offset]);\n const messages: MessageRowFromDB[] = [...(rows || [])];\n\n if (total === 0 && messages.length === 0 && (!include || include.length === 0)) {\n return {\n messages: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n const messageIds = new Set(messages.map(m => m.id));\n if (include && include.length > 0) {\n const includeMessages = await this._getIncludedMessages({ include });\n if (includeMessages) {\n for (const includeMsg of includeMessages) {\n if (!messageIds.has(includeMsg.id)) {\n messages.push(includeMsg);\n messageIds.add(includeMsg.id);\n }\n }\n }\n }\n\n const messagesWithParsedContent = messages.map(row => this.parseRow(row));\n\n const list = new MessageList().add(messagesWithParsedContent, 'memory');\n let finalMessages = list.get.all.db();\n\n finalMessages = finalMessages.sort((a, b) => {\n const aValue = field === 'createdAt' ? new Date(a.createdAt).getTime() : (a as any)[field];\n const bValue = field === 'createdAt' ? new Date(b.createdAt).getTime() : (b as any)[field];\n\n if (aValue == null && bValue == null) return a.id.localeCompare(b.id);\n if (aValue == null) return 1;\n if (bValue == null) return -1;\n\n if (aValue === bValue) {\n return a.id.localeCompare(b.id);\n }\n\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n\n const threadIdSet = new Set(threadIds);\n const returnedThreadMessageIds = new Set(\n finalMessages.filter(m => m.threadId && threadIdSet.has(m.threadId)).map(m => m.id),\n );\n const allThreadMessagesReturned = returnedThreadMessageIds.size >= total;\n const hasMore = perPageInput !== false && !allThreadMessagesReturned && offset + perPage < total;\n\n return {\n messages: finalMessages,\n total,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_MESSAGES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId: Array.isArray(threadId) ? threadId.join(',') : threadId,\n resourceId: resourceId ?? '',\n },\n },\n error,\n );\n this.logger?.error?.(mastraError.toString());\n this.logger?.trackException(mastraError);\n return {\n messages: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n }\n\n async saveMessages({ messages }: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messages.length === 0) return { messages: [] };\n\n const threadId = messages[0]?.threadId;\n if (!threadId) {\n throw new MastraError({\n id: createStorageErrorId('DSQL', 'SAVE_MESSAGES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread ID is required`,\n });\n }\n\n const thread = await this.getThreadById({ threadId });\n if (!thread) {\n throw new MastraError({\n id: createStorageErrorId('DSQL', 'SAVE_MESSAGES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread ${threadId} not found`,\n details: {\n threadId,\n },\n });\n }\n\n const tableName = getTableName({ indexName: TABLE_MESSAGES, schemaName: getSchemaName(this.#schema) });\n const threadTableName = getTableName({ indexName: TABLE_THREADS, schemaName: getSchemaName(this.#schema) });\n\n await withRetry(\n async () => {\n await this.#db.client.tx(async t => {\n const messageInserts = messages.map(message => {\n if (!message.threadId) {\n throw new Error(\n `Expected to find a threadId for message, but couldn't find one. An unexpected error has occurred.`,\n );\n }\n if (!message.resourceId) {\n throw new Error(\n `Expected to find a resourceId for message, but couldn't find one. An unexpected error has occurred.`,\n );\n }\n const createdAtIso = message.createdAt\n ? new Date(message.createdAt).toISOString()\n : new Date().toISOString();\n return t.none(\n `INSERT INTO ${tableName} (id, thread_id, content, \"createdAt\", \"createdAtZ\", role, type, \"resourceId\") \n VALUES ($1, $2, $3, $4::timestamp, $5::timestamptz, $6, $7, $8)\n ON CONFLICT (id) DO UPDATE SET\n thread_id = EXCLUDED.thread_id,\n content = EXCLUDED.content,\n role = EXCLUDED.role,\n type = EXCLUDED.type,\n \"resourceId\" = EXCLUDED.\"resourceId\"`,\n [\n message.id,\n message.threadId,\n typeof message.content === 'string' ? message.content : JSON.stringify(message.content),\n createdAtIso,\n createdAtIso,\n message.role,\n message.type || 'v2',\n message.resourceId,\n ],\n );\n });\n\n const nowIso = new Date().toISOString();\n const threadUpdate = t.none(\n `UPDATE ${threadTableName} \n SET \n \"updatedAt\" = $1::timestamp,\n \"updatedAtZ\" = $2::timestamptz\n WHERE id = $3\n `,\n [nowIso, nowIso, threadId],\n );\n\n await Promise.all([...messageInserts, threadUpdate]);\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `saveMessages retry ${attempt} for thread ${threadId} after ${delay}ms: ${error.message}`,\n );\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'SAVE_MESSAGES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n },\n },\n error,\n );\n });\n\n const messagesWithParsedContent = messages.map(message => {\n if (typeof message.content === 'string') {\n try {\n return { ...message, content: JSON.parse(message.content) };\n } catch {\n return message;\n }\n }\n return message;\n });\n\n const list = new MessageList().add(messagesWithParsedContent as (MastraMessageV1 | MastraDBMessage)[], 'memory');\n return { messages: list.get.all.db() };\n }\n\n async updateMessages({\n messages,\n }: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n content?: {\n metadata?: MastraMessageContentV2['metadata'];\n content?: MastraMessageContentV2['content'];\n };\n })[];\n }): Promise<MastraDBMessage[]> {\n if (messages.length === 0) {\n return [];\n }\n\n const messageIds = messages.map(m => m.id);\n\n const selectQuery = `SELECT id, content, role, type, \"createdAt\", \"createdAtZ\", thread_id AS \"threadId\", \"resourceId\" FROM ${getTableName({ indexName: TABLE_MESSAGES, schemaName: getSchemaName(this.#schema) })} WHERE id IN (${inPlaceholders(messageIds.length)})`;\n\n const existingMessagesDb = await this.#db.client.manyOrNone(selectQuery, messageIds);\n\n if (existingMessagesDb.length === 0) {\n return [];\n }\n\n const existingMessages: MastraDBMessage[] = existingMessagesDb.map(msg => {\n if (typeof msg.content === 'string') {\n try {\n msg.content = JSON.parse(msg.content);\n } catch {\n // ignore if not valid json\n }\n }\n return msg as MastraDBMessage;\n });\n\n const threadIdsToUpdate = new Set<string>();\n\n await withRetry(\n async () => {\n await this.#db.client.tx(async t => {\n const queries = [];\n const columnMapping: Record<string, string> = {\n threadId: 'thread_id',\n };\n\n for (const existingMessage of existingMessages) {\n const updatePayload = messages.find(m => m.id === existingMessage.id);\n if (!updatePayload) continue;\n\n const { id, ...fieldsToUpdate } = updatePayload;\n if (Object.keys(fieldsToUpdate).length === 0) continue;\n\n threadIdsToUpdate.add(existingMessage.threadId!);\n if (updatePayload.threadId && updatePayload.threadId !== existingMessage.threadId) {\n threadIdsToUpdate.add(updatePayload.threadId);\n }\n\n const setClauses: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n const updatableFields = { ...fieldsToUpdate };\n\n if (updatableFields.content) {\n const newContent = {\n ...existingMessage.content,\n ...updatableFields.content,\n ...(existingMessage.content?.metadata && updatableFields.content.metadata\n ? {\n metadata: {\n ...existingMessage.content.metadata,\n ...updatableFields.content.metadata,\n },\n }\n : {}),\n };\n setClauses.push(`content = $${paramIndex++}`);\n values.push(newContent);\n delete updatableFields.content;\n }\n\n for (const key in updatableFields) {\n if (Object.prototype.hasOwnProperty.call(updatableFields, key)) {\n const dbColumn = columnMapping[key] || key;\n setClauses.push(`\"${dbColumn}\" = $${paramIndex++}`);\n values.push(updatableFields[key as keyof typeof updatableFields]);\n }\n }\n\n if (setClauses.length > 0) {\n values.push(id);\n const sql = `UPDATE ${getTableName({ indexName: TABLE_MESSAGES, schemaName: getSchemaName(this.#schema) })} SET ${setClauses.join(', ')} WHERE id = $${paramIndex}`;\n queries.push(t.none(sql, values));\n }\n }\n\n if (threadIdsToUpdate.size > 0) {\n const threadIds = Array.from(threadIdsToUpdate);\n queries.push(\n t.none(\n `UPDATE ${getTableName({ indexName: TABLE_THREADS, schemaName: getSchemaName(this.#schema) })} SET \"updatedAt\" = NOW(), \"updatedAtZ\" = NOW() WHERE id IN (${inPlaceholders(threadIds.length)})`,\n threadIds,\n ),\n );\n }\n\n if (queries.length > 0) {\n await t.batch(queries);\n }\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `updateMessages retry ${attempt} for ${messageIds.length} messages after ${delay}ms: ${error.message}`,\n );\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'UPDATE_MESSAGES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n messageIdsLength: messageIds.length,\n },\n },\n error,\n );\n });\n\n // Re-fetch to return the fully updated messages\n const updatedMessages = await this.#db.client.manyOrNone<MessageRowFromDB>(selectQuery, messageIds);\n\n return (updatedMessages || []).map((row: MessageRowFromDB) => {\n const message = this.normalizeMessageRow(row);\n if (typeof message.content === 'string') {\n try {\n return { ...message, content: JSON.parse(message.content) } as MastraDBMessage;\n } catch {\n /* ignore */\n }\n }\n return message as MastraDBMessage;\n });\n }\n\n async deleteMessages(messageIds: string[]): Promise<void> {\n if (!messageIds || messageIds.length === 0) {\n return;\n }\n\n const messageTableName = getTableName({ indexName: TABLE_MESSAGES, schemaName: getSchemaName(this.#schema) });\n const threadTableName = getTableName({ indexName: TABLE_THREADS, schemaName: getSchemaName(this.#schema) });\n\n await withRetry(\n async () => {\n await this.#db.client.tx(async t => {\n const placeholders = messageIds.map((_, idx) => `$${idx + 1}`).join(',');\n const messages = await t.manyOrNone(\n `SELECT DISTINCT thread_id FROM ${messageTableName} WHERE id IN (${placeholders})`,\n messageIds,\n );\n\n const threadIds = messages?.map(msg => msg.thread_id).filter(Boolean) || [];\n\n await t.none(`DELETE FROM ${messageTableName} WHERE id IN (${placeholders})`, messageIds);\n\n if (threadIds.length > 0) {\n const updatePromises = threadIds.map(threadId =>\n t.none(`UPDATE ${threadTableName} SET \"updatedAt\" = NOW(), \"updatedAtZ\" = NOW() WHERE id = $1`, [\n threadId,\n ]),\n );\n await Promise.all(updatePromises);\n }\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `deleteMessages retry ${attempt} for ${messageIds.length} messages after ${delay}ms: ${error.message}`,\n );\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'DELETE_MESSAGES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { messageIds: messageIds.join(', ') },\n },\n error,\n );\n });\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n try {\n const tableName = getTableName({ indexName: TABLE_RESOURCES, schemaName: getSchemaName(this.#schema) });\n const result = await this.#db.client.oneOrNone<StorageResourceType & { createdAtZ: Date; updatedAtZ: Date }>(\n `SELECT * FROM ${tableName} WHERE id = $1`,\n [resourceId],\n );\n\n if (!result) {\n return null;\n }\n\n return {\n id: result.id,\n createdAt: result.createdAtZ || result.createdAt,\n updatedAt: result.updatedAtZ || result.updatedAt,\n workingMemory: result.workingMemory,\n metadata: typeof result.metadata === 'string' ? JSON.parse(result.metadata) : result.metadata,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_RESOURCE_BY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { resourceId },\n },\n error,\n );\n }\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n await this.#db.insert({\n tableName: TABLE_RESOURCES,\n record: {\n ...resource,\n metadata: JSON.stringify(resource.metadata),\n },\n });\n\n return resource;\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n const tableName = getTableName({ indexName: TABLE_RESOURCES, schemaName: getSchemaName(this.#schema) });\n\n const { result } = await withRetry(\n async () => {\n const existingResource = await this.getResourceById({ resourceId });\n\n if (!existingResource) {\n const newResource: StorageResourceType = {\n id: resourceId,\n workingMemory,\n metadata: metadata || {},\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n return this.saveResource({ resource: newResource });\n }\n\n const updatedResource = {\n ...existingResource,\n workingMemory: workingMemory !== undefined ? workingMemory : existingResource.workingMemory,\n metadata: {\n ...existingResource.metadata,\n ...metadata,\n },\n updatedAt: new Date(),\n };\n\n const updates: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n if (workingMemory !== undefined) {\n updates.push(`\"workingMemory\" = $${paramIndex}`);\n values.push(workingMemory);\n paramIndex++;\n }\n\n if (metadata) {\n updates.push(`metadata = $${paramIndex}`);\n values.push(JSON.stringify(updatedResource.metadata));\n paramIndex++;\n }\n\n updates.push(`\"updatedAt\" = $${paramIndex}`);\n values.push(updatedResource.updatedAt.toISOString());\n paramIndex++;\n updates.push(`\"updatedAtZ\" = $${paramIndex}`);\n values.push(updatedResource.updatedAt.toISOString());\n paramIndex++;\n\n values.push(resourceId);\n\n await this.#db.client.none(`UPDATE ${tableName} SET ${updates.join(', ')} WHERE id = $${paramIndex}`, values);\n\n return updatedResource;\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`updateResource retry ${attempt} for ${resourceId} after ${delay}ms: ${error.message}`);\n },\n },\n ).catch(error => {\n // Re-throw MastraErrors as-is\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'UPDATE_RESOURCE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n resourceId,\n },\n },\n error,\n );\n });\n\n return result;\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n createStorageErrorId,\n listTracesArgsSchema,\n ObservabilityStorage,\n TABLE_SCHEMAS,\n TABLE_SPANS,\n toTraceSpans,\n TraceStatus,\n} from '@mastra/core/storage';\nimport type {\n SpanRecord,\n TracingStorageStrategy,\n ListTracesArgs,\n ListTracesResponse,\n UpdateSpanArgs,\n BatchDeleteTracesArgs,\n BatchUpdateSpansArgs,\n BatchCreateSpansArgs,\n CreateSpanArgs,\n GetSpanArgs,\n GetSpanResponse,\n GetRootSpanArgs,\n GetRootSpanResponse,\n GetTraceArgs,\n GetTraceResponse,\n CreateIndexOptions,\n} from '@mastra/core/storage';\nimport { splitIntoBatches, DEFAULT_MAX_ROWS_PER_BATCH } from '../../../shared/batch';\nimport { withRetry } from '../../../shared/retry';\nimport { DsqlDB, resolveDsqlConfig } from '../../db';\nimport type { DsqlDomainConfig } from '../../db';\nimport { transformFromSqlRow, getTableName, getSchemaName } from '../utils';\n\nexport class ObservabilityDSQL extends ObservabilityStorage {\n #db: DsqlDB;\n #schema: string;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_SPANS] as const;\n\n constructor(config: DsqlDomainConfig) {\n super();\n const { client, schemaName, skipDefaultIndexes, indexes } = resolveDsqlConfig(config);\n this.#db = new DsqlDB({ client, schemaName, skipDefaultIndexes });\n this.#schema = schemaName || 'public';\n this.#skipDefaultIndexes = skipDefaultIndexes;\n // Filter indexes to only those for tables managed by this domain\n this.#indexes = indexes?.filter(idx => (ObservabilityDSQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n async init(): Promise<void> {\n await this.#db.createTable({ tableName: TABLE_SPANS, schema: TABLE_SCHEMAS[TABLE_SPANS] });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n /**\n * Returns default index definitions for the observability domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n const schemaPrefix = this.#schema !== 'public' ? `${this.#schema}_` : '';\n return [\n {\n name: `${schemaPrefix}mastra_ai_spans_traceid_startedat_idx`,\n table: TABLE_SPANS,\n columns: ['traceId', 'startedAt'],\n },\n {\n name: `${schemaPrefix}mastra_ai_spans_parentspanid_startedat_idx`,\n table: TABLE_SPANS,\n columns: ['parentSpanId', 'startedAt'],\n },\n {\n name: `${schemaPrefix}mastra_ai_spans_name_idx`,\n table: TABLE_SPANS,\n columns: ['name'],\n },\n {\n name: `${schemaPrefix}mastra_ai_spans_spantype_startedat_idx`,\n table: TABLE_SPANS,\n columns: ['spanType', 'startedAt'],\n },\n // Entity identification indexes - common filtering patterns\n {\n name: `${schemaPrefix}mastra_ai_spans_entitytype_entityid_idx`,\n table: TABLE_SPANS,\n columns: ['entityType', 'entityId'],\n },\n {\n name: `${schemaPrefix}mastra_ai_spans_entitytype_entityname_idx`,\n table: TABLE_SPANS,\n columns: ['entityType', 'entityName'],\n },\n // Multi-tenant filtering - organizationId + userId\n {\n name: `${schemaPrefix}mastra_ai_spans_orgid_userid_idx`,\n table: TABLE_SPANS,\n columns: ['organizationId', 'userId'],\n },\n ];\n }\n\n /**\n * Creates default indexes for optimal query performance.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) {\n return;\n }\n\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n try {\n await this.#db.createIndex(indexDef);\n } catch (error) {\n // Log but continue - indexes are performance optimizations\n this.logger?.warn?.(`Failed to create index ${indexDef.name}:`, error);\n }\n }\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) {\n return;\n }\n\n for (const indexDef of this.#indexes) {\n try {\n await this.#db.createIndex(indexDef);\n } catch (error) {\n // Log but continue - indexes are performance optimizations\n this.logger?.warn?.(`Failed to create custom index ${indexDef.name}:`, error);\n }\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_SPANS });\n }\n\n public override get tracingStrategy(): {\n preferred: TracingStorageStrategy;\n supported: TracingStorageStrategy[];\n } {\n return {\n preferred: 'batch-with-updates',\n supported: ['batch-with-updates', 'insert-only'],\n };\n }\n\n async createSpan(args: CreateSpanArgs): Promise<void> {\n const { span } = args;\n try {\n const startedAt = span.startedAt instanceof Date ? span.startedAt.toISOString() : span.startedAt;\n const endedAt = span.endedAt instanceof Date ? span.endedAt.toISOString() : span.endedAt;\n const now = new Date().toISOString();\n\n const record = {\n ...span,\n startedAt,\n endedAt,\n startedAtZ: startedAt,\n endedAtZ: endedAt,\n // Aurora DSQL doesn't support triggers, so we set timestamps explicitly\n createdAt: now,\n updatedAt: now,\n };\n\n await this.#db.insert({ tableName: TABLE_SPANS, record });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'CREATE_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: {\n spanId: span.spanId,\n traceId: span.traceId,\n spanType: span.spanType,\n spanName: span.name,\n },\n },\n error,\n );\n }\n }\n\n async getSpan(args: GetSpanArgs): Promise<GetSpanResponse | null> {\n const { traceId, spanId } = args;\n try {\n const tableName = getTableName({\n indexName: TABLE_SPANS,\n schemaName: getSchemaName(this.#schema),\n });\n\n const row = await this.#db.client.oneOrNone<SpanRecord>(\n `SELECT\n \"traceId\", \"spanId\", \"parentSpanId\", \"name\",\n \"entityType\", \"entityId\", \"entityName\",\n \"userId\", \"organizationId\", \"resourceId\",\n \"runId\", \"sessionId\", \"threadId\", \"requestId\",\n \"environment\", \"source\", \"serviceName\", \"scope\",\n \"spanType\", \"attributes\", \"metadata\", \"tags\", \"links\",\n \"input\", \"output\", \"error\", \"isEvent\",\n \"startedAtZ\" as \"startedAt\", \"endedAtZ\" as \"endedAt\",\n \"createdAtZ\" as \"createdAt\", \"updatedAtZ\" as \"updatedAt\"\n FROM ${tableName}\n WHERE \"traceId\" = $1 AND \"spanId\" = $2`,\n [traceId, spanId],\n );\n\n if (!row) {\n return null;\n }\n\n return {\n span: transformFromSqlRow<SpanRecord>({\n tableName: TABLE_SPANS,\n sqlRow: row,\n }),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { traceId, spanId },\n },\n error,\n );\n }\n }\n\n async getRootSpan(args: GetRootSpanArgs): Promise<GetRootSpanResponse | null> {\n const { traceId } = args;\n try {\n const tableName = getTableName({\n indexName: TABLE_SPANS,\n schemaName: getSchemaName(this.#schema),\n });\n\n const row = await this.#db.client.oneOrNone<SpanRecord>(\n `SELECT\n \"traceId\", \"spanId\", \"parentSpanId\", \"name\",\n \"entityType\", \"entityId\", \"entityName\",\n \"userId\", \"organizationId\", \"resourceId\",\n \"runId\", \"sessionId\", \"threadId\", \"requestId\",\n \"environment\", \"source\", \"serviceName\", \"scope\",\n \"spanType\", \"attributes\", \"metadata\", \"tags\", \"links\",\n \"input\", \"output\", \"error\", \"isEvent\",\n \"startedAtZ\" as \"startedAt\", \"endedAtZ\" as \"endedAt\",\n \"createdAtZ\" as \"createdAt\", \"updatedAtZ\" as \"updatedAt\"\n FROM ${tableName}\n WHERE \"traceId\" = $1 AND \"parentSpanId\" IS NULL`,\n [traceId],\n );\n\n if (!row) {\n return null;\n }\n\n return {\n span: transformFromSqlRow<SpanRecord>({\n tableName: TABLE_SPANS,\n sqlRow: row,\n }),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_ROOT_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { traceId },\n },\n error,\n );\n }\n }\n\n async getTrace(args: GetTraceArgs): Promise<GetTraceResponse | null> {\n const { traceId } = args;\n try {\n const tableName = getTableName({\n indexName: TABLE_SPANS,\n schemaName: getSchemaName(this.#schema),\n });\n\n const spans = await this.#db.client.manyOrNone<SpanRecord>(\n `SELECT\n \"traceId\", \"spanId\", \"parentSpanId\", \"name\",\n \"entityType\", \"entityId\", \"entityName\",\n \"userId\", \"organizationId\", \"resourceId\",\n \"runId\", \"sessionId\", \"threadId\", \"requestId\",\n \"environment\", \"source\", \"serviceName\", \"scope\",\n \"spanType\", \"attributes\", \"metadata\", \"tags\", \"links\",\n \"input\", \"output\", \"error\", \"isEvent\",\n \"startedAtZ\" as \"startedAt\", \"endedAtZ\" as \"endedAt\",\n \"createdAtZ\" as \"createdAt\", \"updatedAtZ\" as \"updatedAt\"\n FROM ${tableName}\n WHERE \"traceId\" = $1\n ORDER BY \"startedAtZ\" ASC`,\n [traceId],\n );\n\n if (!spans || spans.length === 0) {\n return null;\n }\n\n return {\n traceId,\n spans: spans.map(span =>\n transformFromSqlRow<SpanRecord>({\n tableName: TABLE_SPANS,\n sqlRow: span,\n }),\n ),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_TRACE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: {\n traceId,\n },\n },\n error,\n );\n }\n }\n\n async updateSpan(args: UpdateSpanArgs): Promise<void> {\n const { traceId, spanId, updates } = args;\n try {\n const data: Record<string, any> = { ...updates };\n if (data.endedAt instanceof Date) {\n const endedAt = data.endedAt.toISOString();\n data.endedAt = endedAt;\n data.endedAtZ = endedAt;\n }\n if (data.startedAt instanceof Date) {\n const startedAt = data.startedAt.toISOString();\n data.startedAt = startedAt;\n data.startedAtZ = startedAt;\n }\n // Note: updatedAt/updatedAtZ will be set in #db.update() method\n // Aurora DSQL doesn't support triggers\n\n await this.#db.update({\n tableName: TABLE_SPANS,\n keys: { spanId, traceId },\n data,\n });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'UPDATE_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: {\n spanId,\n traceId,\n },\n },\n error,\n );\n }\n }\n\n async listTraces(args: ListTracesArgs): Promise<ListTracesResponse> {\n // Parse args through schema to apply defaults\n const { filters, pagination, orderBy } = listTracesArgsSchema.parse(args);\n const page = pagination?.page ?? 0;\n const perPage = pagination?.perPage ?? 100;\n\n const tableName = getTableName({\n indexName: TABLE_SPANS,\n schemaName: getSchemaName(this.#schema),\n });\n\n try {\n // Build WHERE clause for filters\n const conditions: string[] = ['r.\"parentSpanId\" IS NULL']; // Only root spans\n const params: any[] = [];\n let paramIndex = 1;\n\n if (filters) {\n // Date range filters\n if (filters.startedAt?.start) {\n conditions.push(`r.\"startedAtZ\" >= $${paramIndex++}`);\n params.push(filters.startedAt.start.toISOString());\n }\n if (filters.startedAt?.end) {\n conditions.push(`r.\"startedAtZ\" <= $${paramIndex++}`);\n params.push(filters.startedAt.end.toISOString());\n }\n if (filters.endedAt?.start) {\n conditions.push(`r.\"endedAtZ\" >= $${paramIndex++}`);\n params.push(filters.endedAt.start.toISOString());\n }\n if (filters.endedAt?.end) {\n conditions.push(`r.\"endedAtZ\" <= $${paramIndex++}`);\n params.push(filters.endedAt.end.toISOString());\n }\n\n // Span type filter\n if (filters.spanType !== undefined) {\n conditions.push(`r.\"spanType\" = $${paramIndex++}`);\n params.push(filters.spanType);\n }\n\n // Entity filters\n if (filters.entityType !== undefined) {\n conditions.push(`r.\"entityType\" = $${paramIndex++}`);\n params.push(filters.entityType);\n }\n if (filters.entityId !== undefined) {\n conditions.push(`r.\"entityId\" = $${paramIndex++}`);\n params.push(filters.entityId);\n }\n if (filters.entityName !== undefined) {\n conditions.push(`r.\"entityName\" = $${paramIndex++}`);\n params.push(filters.entityName);\n }\n\n // Identity & Tenancy filters\n if (filters.userId !== undefined) {\n conditions.push(`r.\"userId\" = $${paramIndex++}`);\n params.push(filters.userId);\n }\n if (filters.organizationId !== undefined) {\n conditions.push(`r.\"organizationId\" = $${paramIndex++}`);\n params.push(filters.organizationId);\n }\n if (filters.resourceId !== undefined) {\n conditions.push(`r.\"resourceId\" = $${paramIndex++}`);\n params.push(filters.resourceId);\n }\n\n // Correlation ID filters\n if (filters.runId !== undefined) {\n conditions.push(`r.\"runId\" = $${paramIndex++}`);\n params.push(filters.runId);\n }\n if (filters.sessionId !== undefined) {\n conditions.push(`r.\"sessionId\" = $${paramIndex++}`);\n params.push(filters.sessionId);\n }\n if (filters.threadId !== undefined) {\n conditions.push(`r.\"threadId\" = $${paramIndex++}`);\n params.push(filters.threadId);\n }\n if (filters.requestId !== undefined) {\n conditions.push(`r.\"requestId\" = $${paramIndex++}`);\n params.push(filters.requestId);\n }\n\n // Deployment context filters\n if (filters.environment !== undefined) {\n conditions.push(`r.\"environment\" = $${paramIndex++}`);\n params.push(filters.environment);\n }\n if (filters.source !== undefined) {\n conditions.push(`r.\"source\" = $${paramIndex++}`);\n params.push(filters.source);\n }\n if (filters.serviceName !== undefined) {\n conditions.push(`r.\"serviceName\" = $${paramIndex++}`);\n params.push(filters.serviceName);\n }\n\n // Scope filter (TEXT with JSON comparison - Aurora DSQL stores JSONB as TEXT)\n if (filters.scope != null) {\n conditions.push(`r.\"scope\"::text = $${paramIndex++}`);\n params.push(JSON.stringify(filters.scope));\n }\n\n // Metadata filter (TEXT with JSON comparison - Aurora DSQL stores JSONB as TEXT)\n if (filters.metadata != null) {\n conditions.push(`r.\"metadata\"::text = $${paramIndex++}`);\n params.push(JSON.stringify(filters.metadata));\n }\n\n // Tags filter (TEXT with JSON comparison - Aurora DSQL stores JSONB as TEXT)\n if (filters.tags != null && filters.tags.length > 0) {\n conditions.push(`r.\"tags\"::text = $${paramIndex++}`);\n params.push(JSON.stringify(filters.tags));\n }\n\n // Status filter (derived from error and endedAt)\n if (filters.status !== undefined) {\n switch (filters.status) {\n case TraceStatus.ERROR:\n conditions.push(`r.\"error\" IS NOT NULL`);\n break;\n case TraceStatus.RUNNING:\n conditions.push(`r.\"endedAtZ\" IS NULL AND r.\"error\" IS NULL`);\n break;\n case TraceStatus.SUCCESS:\n conditions.push(`r.\"endedAtZ\" IS NOT NULL AND r.\"error\" IS NULL`);\n break;\n }\n }\n\n // hasChildError filter (requires subquery)\n if (filters.hasChildError !== undefined) {\n if (filters.hasChildError) {\n conditions.push(`EXISTS (\n SELECT 1 FROM ${tableName} c\n WHERE c.\"traceId\" = r.\"traceId\" AND c.\"error\" IS NOT NULL\n )`);\n } else {\n conditions.push(`NOT EXISTS (\n SELECT 1 FROM ${tableName} c\n WHERE c.\"traceId\" = r.\"traceId\" AND c.\"error\" IS NOT NULL\n )`);\n }\n }\n }\n\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n // Build ORDER BY clause with proper NULL handling for endedAt\n // Note: Aurora DSQL does not support NULLS FIRST/LAST syntax\n const sortField = `${orderBy?.field ?? 'startedAt'}Z`;\n const sortDirection = orderBy?.direction ?? 'DESC';\n const orderClause = `ORDER BY r.\"${sortField}\" ${sortDirection}`;\n\n // Get total count\n const countResult = await this.#db.client.oneOrNone<{ count: string }>(\n `SELECT COUNT(*) FROM ${tableName} r ${whereClause}`,\n params,\n );\n const count = Number(countResult?.count ?? 0);\n\n if (count === 0) {\n return {\n pagination: {\n total: 0,\n page,\n perPage,\n hasMore: false,\n },\n spans: [],\n };\n }\n\n // Get paginated spans\n const spans = await this.#db.client.manyOrNone<SpanRecord>(\n `SELECT\n r.\"traceId\", r.\"spanId\", r.\"parentSpanId\", r.\"name\",\n r.\"entityType\", r.\"entityId\", r.\"entityName\",\n r.\"userId\", r.\"organizationId\", r.\"resourceId\",\n r.\"runId\", r.\"sessionId\", r.\"threadId\", r.\"requestId\",\n r.\"environment\", r.\"source\", r.\"serviceName\", r.\"scope\",\n r.\"spanType\", r.\"attributes\", r.\"metadata\", r.\"tags\", r.\"links\",\n r.\"input\", r.\"output\", r.\"error\", r.\"isEvent\",\n r.\"startedAtZ\" as \"startedAt\", r.\"endedAtZ\" as \"endedAt\",\n r.\"createdAtZ\" as \"createdAt\", r.\"updatedAtZ\" as \"updatedAt\"\n FROM ${tableName} r\n ${whereClause}\n ${orderClause}\n LIMIT $${paramIndex} OFFSET $${paramIndex + 1}`,\n [...params, perPage, page * perPage],\n );\n\n return {\n pagination: {\n total: count,\n page,\n perPage,\n hasMore: (page + 1) * perPage < count,\n },\n spans: toTraceSpans(\n spans.map(span =>\n transformFromSqlRow<SpanRecord>({\n tableName: TABLE_SPANS,\n sqlRow: span,\n }),\n ),\n ),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_TRACES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n }\n\n async batchCreateSpans(args: BatchCreateSpansArgs): Promise<void> {\n try {\n const now = new Date().toISOString();\n const records = args.records.map(record => {\n const startedAt = record.startedAt instanceof Date ? record.startedAt.toISOString() : record.startedAt;\n const endedAt = record.endedAt instanceof Date ? record.endedAt.toISOString() : record.endedAt;\n\n return {\n ...record,\n startedAt,\n endedAt,\n startedAtZ: startedAt,\n endedAtZ: endedAt,\n // Aurora DSQL doesn't support triggers, so we set timestamps explicitly\n createdAt: now,\n updatedAt: now,\n };\n });\n\n await this.#db.batchInsert({\n tableName: TABLE_SPANS,\n records,\n });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'BATCH_CREATE_SPANS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n }\n\n async batchUpdateSpans(args: BatchUpdateSpansArgs): Promise<void> {\n try {\n await this.#db.batchUpdate({\n tableName: TABLE_SPANS,\n updates: args.records.map(record => {\n const data: Record<string, any> = { ...record.updates };\n if (data.endedAt instanceof Date) {\n const endedAt = data.endedAt.toISOString();\n data.endedAt = endedAt;\n data.endedAtZ = endedAt;\n }\n if (data.startedAt instanceof Date) {\n const startedAt = data.startedAt.toISOString();\n data.startedAt = startedAt;\n data.startedAtZ = startedAt;\n }\n // Note: updatedAt/updatedAtZ will be set in #db.batchUpdate() method\n // Aurora DSQL doesn't support triggers\n\n return {\n keys: { spanId: record.spanId, traceId: record.traceId },\n data,\n };\n }),\n });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'BATCH_UPDATE_SPANS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n }\n\n async batchDeleteTraces(args: BatchDeleteTracesArgs): Promise<void> {\n const { batches } = splitIntoBatches(args.traceIds, { maxRows: DEFAULT_MAX_ROWS_PER_BATCH });\n\n const tableName = getTableName({\n indexName: TABLE_SPANS,\n schemaName: getSchemaName(this.#schema),\n });\n\n for (const batchTraceIds of batches) {\n const placeholders = batchTraceIds.map((_, i) => `$${i + 1}`).join(', ');\n\n await withRetry(\n async () => {\n await this.#db.client.none(`DELETE FROM ${tableName} WHERE \"traceId\" IN (${placeholders})`, batchTraceIds);\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `batchDeleteTraces retry ${attempt} for ${batchTraceIds.length} traces after ${delay}ms: ${error.message}`,\n );\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'BATCH_DELETE_TRACES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n });\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { ListScoresResponse, SaveScorePayload, ScoreRowData, ScoringSource } from '@mastra/core/evals';\nimport { saveScorePayloadSchema } from '@mastra/core/evals';\nimport type { StoragePagination, CreateIndexOptions } from '@mastra/core/storage';\nimport {\n calculatePagination,\n createStorageErrorId,\n normalizePerPage,\n ScoresStorage,\n TABLE_SCORERS,\n TABLE_SCHEMAS,\n transformScoreRow as coreTransformScoreRow,\n} from '@mastra/core/storage';\nimport { DsqlDB, resolveDsqlConfig } from '../../db';\nimport type { DsqlDomainConfig } from '../../db';\nimport { getTableName, getSchemaName } from '../utils';\n\n/**\n * DSQL-specific score row transformation.\n * Uses Z-suffix timestamps (createdAtZ, updatedAtZ) when available.\n */\nfunction transformScoreRow(row: Record<string, any>): ScoreRowData {\n return coreTransformScoreRow(row, {\n preferredTimestampFields: {\n createdAt: 'createdAtZ',\n updatedAt: 'updatedAtZ',\n },\n });\n}\n\nexport class ScoresDSQL extends ScoresStorage {\n #db: DsqlDB;\n #schema: string;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_SCORERS] as const;\n\n constructor(config: DsqlDomainConfig) {\n super();\n const { client, schemaName, skipDefaultIndexes, indexes } = resolveDsqlConfig(config);\n this.#db = new DsqlDB({ client, schemaName, skipDefaultIndexes });\n this.#schema = schemaName || 'public';\n this.#skipDefaultIndexes = skipDefaultIndexes;\n // Filter indexes to only those for tables managed by this domain\n this.#indexes = indexes?.filter(idx => (ScoresDSQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n async init(): Promise<void> {\n await this.#db.createTable({ tableName: TABLE_SCORERS, schema: TABLE_SCHEMAS[TABLE_SCORERS] });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n /**\n * Returns default index definitions for the scores domain tables.\n * Note: Aurora DSQL does not support ASC/DESC in index columns.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n const schemaPrefix = this.#schema !== 'public' ? `${this.#schema}_` : '';\n return [\n {\n name: `${schemaPrefix}mastra_scores_trace_id_span_id_created_at_idx`,\n table: TABLE_SCORERS,\n columns: ['traceId', 'spanId', 'createdAt'],\n },\n ];\n }\n\n /**\n * Creates default indexes for optimal query performance.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) {\n return;\n }\n\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n try {\n await this.#db.createIndex(indexDef);\n } catch (error) {\n // Log but continue - indexes are performance optimizations\n this.logger?.warn?.(`Failed to create index ${indexDef.name}:`, error);\n }\n }\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) {\n return;\n }\n\n for (const indexDef of this.#indexes) {\n try {\n await this.#db.createIndex(indexDef);\n } catch (error) {\n // Log but continue - indexes are performance optimizations\n this.logger?.warn?.(`Failed to create custom index ${indexDef.name}:`, error);\n }\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_SCORERS });\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n try {\n const result = await this.#db.client.oneOrNone<ScoreRowData>(\n `SELECT * FROM ${getTableName({ indexName: TABLE_SCORERS, schemaName: getSchemaName(this.#schema) })} WHERE id = $1`,\n [id],\n );\n\n return result ? transformScoreRow(result) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_SCORE_BY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n }): Promise<ListScoresResponse> {\n try {\n const conditions: string[] = [`\"scorerId\" = $1`];\n const queryParams: any[] = [scorerId];\n let paramIndex = 2;\n\n if (entityId) {\n conditions.push(`\"entityId\" = $${paramIndex++}`);\n queryParams.push(entityId);\n }\n\n if (entityType) {\n conditions.push(`\"entityType\" = $${paramIndex++}`);\n queryParams.push(entityType);\n }\n\n if (source) {\n conditions.push(`\"source\" = $${paramIndex++}`);\n queryParams.push(source);\n }\n\n const whereClause = conditions.join(' AND ');\n\n const total = await this.#db.client.oneOrNone<{ count: string }>(\n `SELECT COUNT(*) FROM ${getTableName({ indexName: TABLE_SCORERS, schemaName: getSchemaName(this.#schema) })} WHERE ${whereClause}`,\n queryParams,\n );\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n if (total?.count === '0' || !total?.count) {\n return {\n pagination: {\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n },\n scores: [],\n };\n }\n const limitValue = perPageInput === false ? Number(total?.count) : perPage;\n const end = perPageInput === false ? Number(total?.count) : start + perPage;\n const result = await this.#db.client.manyOrNone<ScoreRowData>(\n `SELECT * FROM ${getTableName({ indexName: TABLE_SCORERS, schemaName: getSchemaName(this.#schema) })} WHERE ${whereClause} ORDER BY \"createdAt\" DESC LIMIT $${paramIndex++} OFFSET $${paramIndex++}`,\n [...queryParams, limitValue, start],\n );\n\n return {\n pagination: {\n total: Number(total?.count) || 0,\n page,\n perPage: perPageForResponse,\n hasMore: end < Number(total?.count),\n },\n scores: result.map(transformScoreRow),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_SCORES_BY_SCORER_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async saveScore(score: SaveScorePayload): Promise<{ score: ScoreRowData }> {\n let parsedScore: SaveScorePayload;\n try {\n parsedScore = saveScorePayloadSchema.parse(score);\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'SAVE_SCORE', 'VALIDATION_FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: {\n scorer: typeof score.scorer?.id === 'string' ? score.scorer.id : String(score.scorer?.id ?? 'unknown'),\n entityId: score.entityId ?? 'unknown',\n entityType: score.entityType ?? 'unknown',\n traceId: score.traceId ?? '',\n spanId: score.spanId ?? '',\n },\n },\n error,\n );\n }\n\n try {\n const id = crypto.randomUUID();\n const now = new Date();\n\n const {\n scorer,\n preprocessStepResult,\n analyzeStepResult,\n metadata,\n input,\n output,\n additionalContext,\n requestContext,\n entity,\n ...rest\n } = parsedScore;\n\n await this.#db.insert({\n tableName: TABLE_SCORERS,\n record: {\n id,\n ...rest,\n input: JSON.stringify(input) || '',\n output: JSON.stringify(output) || '',\n scorer: scorer ? JSON.stringify(scorer) : null,\n preprocessStepResult: preprocessStepResult ? JSON.stringify(preprocessStepResult) : null,\n analyzeStepResult: analyzeStepResult ? JSON.stringify(analyzeStepResult) : null,\n metadata: metadata ? JSON.stringify(metadata) : null,\n additionalContext: additionalContext ? JSON.stringify(additionalContext) : null,\n requestContext: requestContext ? JSON.stringify(requestContext) : null,\n entity: entity ? JSON.stringify(entity) : null,\n createdAt: now.toISOString(),\n updatedAt: now.toISOString(),\n },\n });\n\n return { score: { ...parsedScore, id, createdAt: now, updatedAt: now } as ScoreRowData };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'SAVE_SCORE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<ListScoresResponse> {\n try {\n const total = await this.#db.client.oneOrNone<{ count: string }>(\n `SELECT COUNT(*) FROM ${getTableName({ indexName: TABLE_SCORERS, schemaName: getSchemaName(this.#schema) })} WHERE \"runId\" = $1`,\n [runId],\n );\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n if (total?.count === '0' || !total?.count) {\n return {\n pagination: {\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n },\n scores: [],\n };\n }\n\n const limitValue = perPageInput === false ? Number(total?.count) : perPage;\n const end = perPageInput === false ? Number(total?.count) : start + perPage;\n\n const result = await this.#db.client.manyOrNone<ScoreRowData>(\n `SELECT * FROM ${getTableName({ indexName: TABLE_SCORERS, schemaName: getSchemaName(this.#schema) })} WHERE \"runId\" = $1 ORDER BY \"createdAt\" DESC LIMIT $2 OFFSET $3`,\n [runId, limitValue, start],\n );\n return {\n pagination: {\n total: Number(total?.count) || 0,\n page,\n perPage: perPageForResponse,\n hasMore: end < Number(total?.count),\n },\n scores: result.map(transformScoreRow),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_SCORES_BY_RUN_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<ListScoresResponse> {\n try {\n const total = await this.#db.client.oneOrNone<{ count: string }>(\n `SELECT COUNT(*) FROM ${getTableName({ indexName: TABLE_SCORERS, schemaName: getSchemaName(this.#schema) })} WHERE \"entityId\" = $1 AND \"entityType\" = $2`,\n [entityId, entityType],\n );\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n if (total?.count === '0' || !total?.count) {\n return {\n pagination: {\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n },\n scores: [],\n };\n }\n\n const limitValue = perPageInput === false ? Number(total?.count) : perPage;\n const end = perPageInput === false ? Number(total?.count) : start + perPage;\n\n const result = await this.#db.client.manyOrNone<ScoreRowData>(\n `SELECT * FROM ${getTableName({ indexName: TABLE_SCORERS, schemaName: getSchemaName(this.#schema) })} WHERE \"entityId\" = $1 AND \"entityType\" = $2 ORDER BY \"createdAt\" DESC LIMIT $3 OFFSET $4`,\n [entityId, entityType, limitValue, start],\n );\n return {\n pagination: {\n total: Number(total?.count) || 0,\n page,\n perPage: perPageForResponse,\n hasMore: end < Number(total?.count),\n },\n scores: result.map(transformScoreRow),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_SCORES_BY_ENTITY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<ListScoresResponse> {\n try {\n const tableName = getTableName({ indexName: TABLE_SCORERS, schemaName: getSchemaName(this.#schema) });\n const countSQLResult = await this.#db.client.oneOrNone<{ count: string }>(\n `SELECT COUNT(*) as count FROM ${tableName} WHERE \"traceId\" = $1 AND \"spanId\" = $2`,\n [traceId, spanId],\n );\n\n const total = Number(countSQLResult?.count ?? 0);\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n const end = perPageInput === false ? total : start + perPage;\n const result = await this.#db.client.manyOrNone<ScoreRowData>(\n `SELECT * FROM ${tableName} WHERE \"traceId\" = $1 AND \"spanId\" = $2 ORDER BY \"createdAt\" DESC LIMIT $3 OFFSET $4`,\n [traceId, spanId, limitValue, start],\n );\n\n const hasMore = end < total;\n const scores = result.map(row => transformScoreRow(row)) ?? [];\n\n return {\n scores,\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_SCORES_BY_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n normalizePerPage,\n TABLE_WORKFLOW_SNAPSHOT,\n TABLE_SCHEMAS,\n WorkflowsStorage,\n createStorageErrorId,\n} from '@mastra/core/storage';\nimport type {\n StorageListWorkflowRunsInput,\n UpdateWorkflowStateOptions,\n WorkflowRun,\n WorkflowRuns,\n CreateIndexOptions,\n} from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport { withRetry } from '../../../shared/retry';\nimport { DsqlDB, resolveDsqlConfig } from '../../db';\nimport type { DsqlDomainConfig } from '../../db';\nimport { getTableName, getSchemaName } from '../utils';\n\nfunction parseWorkflowRun(row: Record<string, any>): WorkflowRun {\n let parsedSnapshot: WorkflowRunState | string = row.snapshot as string;\n if (typeof parsedSnapshot === 'string') {\n try {\n parsedSnapshot = JSON.parse(row.snapshot as string) as WorkflowRunState;\n } catch (e) {\n console.warn(`Failed to parse snapshot for workflow ${row.workflow_name}: ${e}`);\n }\n }\n return {\n workflowName: row.workflow_name as string,\n runId: row.run_id as string,\n snapshot: parsedSnapshot,\n resourceId: row.resourceId as string,\n createdAt: new Date(row.createdAtZ || (row.createdAt as string)),\n updatedAt: new Date(row.updatedAtZ || (row.updatedAt as string)),\n };\n}\n\nexport class WorkflowsDSQL extends WorkflowsStorage {\n #db: DsqlDB;\n #schema: string;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_WORKFLOW_SNAPSHOT] as const;\n\n constructor(config: DsqlDomainConfig) {\n super();\n const { client, schemaName, skipDefaultIndexes, indexes } = resolveDsqlConfig(config);\n this.#db = new DsqlDB({ client, schemaName });\n this.#schema = schemaName || 'public';\n this.#skipDefaultIndexes = skipDefaultIndexes;\n // Filter indexes to only those for tables managed by this domain\n this.#indexes = indexes?.filter(idx => (WorkflowsDSQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n supportsConcurrentUpdates(): boolean {\n return true;\n }\n\n /**\n * Returns default index definitions for the workflows domain tables.\n * Currently no default indexes are defined for workflows.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for workflows.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) {\n return;\n }\n // No default indexes for workflows domain\n }\n\n async init(): Promise<void> {\n await this.#db.createTable({ tableName: TABLE_WORKFLOW_SNAPSHOT, schema: TABLE_SCHEMAS[TABLE_WORKFLOW_SNAPSHOT] });\n await this.#db.alterTable({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n schema: TABLE_SCHEMAS[TABLE_WORKFLOW_SNAPSHOT],\n ifNotExists: ['resourceId'],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) {\n return;\n }\n\n for (const indexDef of this.#indexes) {\n try {\n await this.#db.createIndex(indexDef);\n } catch (error) {\n // Log but continue - indexes are performance optimizations\n this.logger?.warn?.(`Failed to create custom index ${indexDef.name}:`, error);\n }\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_WORKFLOW_SNAPSHOT });\n }\n\n async updateWorkflowResults({\n workflowName,\n runId,\n stepId,\n result,\n requestContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n requestContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n try {\n const { result: context } = await withRetry(\n async () => {\n return this.#db.client.tx(async t => {\n const tableName = getTableName({\n indexName: TABLE_WORKFLOW_SNAPSHOT,\n schemaName: getSchemaName(this.#schema),\n });\n\n const existingSnapshotResult = await t.oneOrNone<{ snapshot: WorkflowRunState | string }>(\n `SELECT snapshot FROM ${tableName} WHERE workflow_name = $1 AND run_id = $2`,\n [workflowName, runId],\n );\n\n let snapshot: WorkflowRunState;\n if (!existingSnapshotResult) {\n snapshot = {\n context: {},\n activePaths: [],\n timestamp: Date.now(),\n suspendedPaths: {},\n activeStepsPath: {},\n resumeLabels: {},\n serializedStepGraph: [],\n status: 'pending',\n value: {},\n waitingPaths: {},\n runId,\n requestContext: {},\n } as WorkflowRunState;\n } else {\n const existingSnapshot = existingSnapshotResult.snapshot;\n snapshot = typeof existingSnapshot === 'string' ? JSON.parse(existingSnapshot) : existingSnapshot;\n }\n\n snapshot.context[stepId] = result;\n snapshot.requestContext = { ...snapshot.requestContext, ...requestContext };\n\n const now = new Date();\n await t.none(\n `INSERT INTO ${tableName} (workflow_name, run_id, snapshot, \"createdAt\", \"updatedAt\")\n VALUES ($1, $2, $3, $4, $5)\n ON CONFLICT (workflow_name, run_id) DO UPDATE\n SET snapshot = $3, \"updatedAt\" = $5`,\n [workflowName, runId, JSON.stringify(snapshot), now, now],\n );\n\n return snapshot.context;\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `updateWorkflowResults retry ${attempt} for workflow ${workflowName}/${runId} after ${delay}ms: ${error.message}`,\n );\n },\n },\n );\n\n return context;\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'UPDATE_WORKFLOW_RESULTS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n workflowName,\n runId,\n stepId,\n },\n },\n error,\n );\n }\n }\n\n async updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: UpdateWorkflowStateOptions;\n }): Promise<WorkflowRunState | undefined> {\n try {\n const { result } = await withRetry(\n async () => {\n return this.#db.client.tx(async t => {\n const tableName = getTableName({\n indexName: TABLE_WORKFLOW_SNAPSHOT,\n schemaName: getSchemaName(this.#schema),\n });\n\n const existingSnapshotResult = await t.oneOrNone<{ snapshot: WorkflowRunState | string }>(\n `SELECT snapshot FROM ${tableName} WHERE workflow_name = $1 AND run_id = $2`,\n [workflowName, runId],\n );\n\n if (!existingSnapshotResult) {\n return undefined;\n }\n\n const existingSnapshot = existingSnapshotResult.snapshot;\n const snapshot = typeof existingSnapshot === 'string' ? JSON.parse(existingSnapshot) : existingSnapshot;\n\n if (!snapshot || !snapshot?.context) {\n throw new Error(`Snapshot not found for runId ${runId}`);\n }\n\n const updatedSnapshot = { ...snapshot, ...opts };\n\n await t.none(\n `UPDATE ${tableName} SET snapshot = $1, \"updatedAt\" = $2 WHERE workflow_name = $3 AND run_id = $4`,\n [JSON.stringify(updatedSnapshot), new Date(), workflowName, runId],\n );\n\n return updatedSnapshot;\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `updateWorkflowState retry ${attempt} for workflow ${workflowName}/${runId} after ${delay}ms: ${error.message}`,\n );\n },\n },\n );\n\n return result;\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'UPDATE_WORKFLOW_STATE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n workflowName,\n runId,\n },\n },\n error,\n );\n }\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n createdAt,\n updatedAt,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n createdAt?: Date;\n updatedAt?: Date;\n }): Promise<void> {\n try {\n const now = new Date();\n const createdAtValue = createdAt ? createdAt : now;\n const updatedAtValue = updatedAt ? updatedAt : now;\n await this.#db.client.none(\n `INSERT INTO ${getTableName({ indexName: TABLE_WORKFLOW_SNAPSHOT, schemaName: getSchemaName(this.#schema) })} (workflow_name, run_id, \"resourceId\", snapshot, \"createdAt\", \"updatedAt\")\n VALUES ($1, $2, $3, $4, $5, $6)\n ON CONFLICT (workflow_name, run_id) DO UPDATE\n SET \"resourceId\" = $3, snapshot = $4, \"updatedAt\" = $6`,\n [\n workflowName,\n runId,\n resourceId,\n JSON.stringify(snapshot),\n createdAtValue.toISOString(),\n updatedAtValue.toISOString(),\n ],\n );\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'PERSIST_WORKFLOW_SNAPSHOT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n try {\n const result = await this.#db.load<{ snapshot: WorkflowRunState }>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n return result ? result.snapshot : null;\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LOAD_WORKFLOW_SNAPSHOT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string;\n }): Promise<WorkflowRun | null> {\n try {\n const conditions: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n if (runId) {\n conditions.push(`run_id = $${paramIndex}`);\n values.push(runId);\n paramIndex++;\n }\n\n if (workflowName) {\n conditions.push(`workflow_name = $${paramIndex}`);\n values.push(workflowName);\n paramIndex++;\n }\n\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n const query = `\n SELECT * FROM ${getTableName({ indexName: TABLE_WORKFLOW_SNAPSHOT, schemaName: getSchemaName(this.#schema) })}\n ${whereClause}\n ORDER BY \"createdAt\" DESC LIMIT 1\n `;\n\n const queryValues = values;\n\n const result = await this.#db.client.oneOrNone(query, queryValues);\n\n if (!result) {\n return null;\n }\n\n return parseWorkflowRun(result);\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_WORKFLOW_RUN_BY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n runId,\n workflowName: workflowName || '',\n },\n },\n error,\n );\n }\n }\n\n async deleteWorkflowRunById({ runId, workflowName }: { runId: string; workflowName: string }): Promise<void> {\n try {\n await this.#db.client.none(\n `DELETE FROM ${getTableName({ indexName: TABLE_WORKFLOW_SNAPSHOT, schemaName: getSchemaName(this.#schema) })} WHERE run_id = $1 AND workflow_name = $2`,\n [runId, workflowName],\n );\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'DELETE_WORKFLOW_RUN_BY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n runId,\n workflowName,\n },\n },\n error,\n );\n }\n }\n\n async listWorkflowRuns({\n workflowName,\n fromDate,\n toDate,\n perPage,\n page,\n resourceId,\n status,\n }: StorageListWorkflowRunsInput = {}): Promise<WorkflowRuns> {\n try {\n const conditions: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n if (workflowName) {\n conditions.push(`workflow_name = $${paramIndex}`);\n values.push(workflowName);\n paramIndex++;\n }\n\n if (status) {\n conditions.push(`snapshot::jsonb ->> 'status' = $${paramIndex}`);\n values.push(status);\n paramIndex++;\n }\n\n if (resourceId) {\n const hasResourceId = await this.#db.hasColumn(TABLE_WORKFLOW_SNAPSHOT, 'resourceId');\n if (hasResourceId) {\n conditions.push(`\"resourceId\" = $${paramIndex}`);\n values.push(resourceId);\n paramIndex++;\n } else {\n console.warn(`[${TABLE_WORKFLOW_SNAPSHOT}] resourceId column not found. Skipping resourceId filter.`);\n }\n }\n\n if (fromDate) {\n conditions.push(`\"createdAt\" >= $${paramIndex}`);\n values.push(fromDate instanceof Date ? fromDate.toISOString() : fromDate);\n paramIndex++;\n }\n\n if (toDate) {\n conditions.push(`\"createdAt\" <= $${paramIndex}`);\n values.push(toDate instanceof Date ? toDate.toISOString() : toDate);\n paramIndex++;\n }\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n let total = 0;\n const usePagination = typeof perPage === 'number' && typeof page === 'number';\n if (usePagination) {\n const countResult = await this.#db.client.one(\n `SELECT COUNT(*) as count FROM ${getTableName({ indexName: TABLE_WORKFLOW_SNAPSHOT, schemaName: getSchemaName(this.#schema) })} ${whereClause}`,\n values,\n );\n total = Number(countResult.count);\n }\n\n const normalizedPerPage = usePagination ? normalizePerPage(perPage, Number.MAX_SAFE_INTEGER) : 0;\n const offset = usePagination ? page! * normalizedPerPage : undefined;\n\n const query = `\n SELECT * FROM ${getTableName({ indexName: TABLE_WORKFLOW_SNAPSHOT, schemaName: getSchemaName(this.#schema) })}\n ${whereClause}\n ORDER BY \"createdAt\" DESC\n ${usePagination ? ` LIMIT $${paramIndex} OFFSET $${paramIndex + 1}` : ''}\n `;\n\n const queryValues = usePagination ? [...values, normalizedPerPage, offset] : values;\n\n const result = await this.#db.client.manyOrNone(query, queryValues);\n\n const runs = (result || []).map(row => {\n return parseWorkflowRun(row);\n });\n\n return { runs, total: total || runs.length };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_WORKFLOW_RUNS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n workflowName: workflowName || 'all',\n },\n },\n error,\n );\n }\n }\n}\n","import { AuroraDSQLClient } from '@aws/aurora-dsql-node-postgres-connector';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createStorageErrorId, MastraStorage } from '@mastra/core/storage';\nimport type { StorageDomains } from '@mastra/core/storage';\nimport { Pool } from 'pg';\nimport { validateConfig, getEffectiveRegion, DSQL_POOL_DEFAULTS, isHostConfig, isPoolConfig } from '../shared/config';\nimport type { DSQLStoreConfig } from '../shared/config';\nimport { PoolAdapter } from './client';\nimport type { DbClient } from './client';\nimport type { DsqlDomainClientConfig } from './db';\nimport { AgentsDSQL } from './domains/agents';\nimport { MemoryDSQL } from './domains/memory';\nimport { ObservabilityDSQL } from './domains/observability';\nimport { ScoresDSQL } from './domains/scores';\nimport { WorkflowsDSQL } from './domains/workflows';\n\nexport { AgentsDSQL, MemoryDSQL, ObservabilityDSQL, ScoresDSQL, WorkflowsDSQL };\nexport { PoolAdapter } from './client';\nexport type { DbClient, TxClient, QueryValues, Pool, PoolClient, QueryResult } from './client';\nexport type { DsqlDomainConfig, DsqlDomainClientConfig, DsqlDomainPoolConfig, DsqlDomainRestConfig } from './db';\n\nexport class DSQLStore extends MastraStorage {\n #pool: Pool;\n #db: DbClient;\n #ownsPool: boolean;\n private schema: string;\n private isInitialized: boolean = false;\n\n stores: StorageDomains;\n\n constructor(config: DSQLStoreConfig) {\n try {\n validateConfig(config);\n super({ id: config.id, name: 'DSQLStore', disableInit: config.disableInit });\n this.schema = config.schemaName || 'public';\n\n // Create or use provided pool\n if (isPoolConfig(config)) {\n this.#pool = config.pool;\n this.#ownsPool = false;\n } else {\n this.#pool = this.createPool(config);\n this.#ownsPool = true;\n }\n\n this.#db = new PoolAdapter(this.#pool);\n\n const domainConfig: DsqlDomainClientConfig = {\n client: this.#db,\n schemaName: this.schema,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n };\n\n this.stores = {\n scores: new ScoresDSQL(domainConfig),\n workflows: new WorkflowsDSQL(domainConfig),\n memory: new MemoryDSQL(domainConfig),\n observability: new ObservabilityDSQL(domainConfig),\n agents: new AgentsDSQL(domainConfig),\n };\n } catch (e) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'INITIALIZATION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n e,\n );\n }\n }\n\n /**\n * Creates a connection pool with AuroraDSQLClient for IAM authentication.\n */\n private createPool(config: DSQLStoreConfig): Pool {\n if (!isHostConfig(config)) {\n throw new Error('DSQLStore: Invalid configuration for creating pool.');\n }\n const region = getEffectiveRegion(config);\n const poolConfig = {\n host: config.host,\n user: config.user ?? 'admin',\n database: config.database ?? 'postgres',\n // Use AuroraDSQLClient for automatic IAM token generation\n Client: AuroraDSQLClient as any,\n // Pass region for IAM token generation\n region,\n // Custom credentials provider (optional)\n customCredentialsProvider: config.customCredentialsProvider,\n // Pool settings optimized for Aurora DSQL\n max: config.max ?? DSQL_POOL_DEFAULTS.max,\n min: config.min ?? DSQL_POOL_DEFAULTS.min,\n idleTimeoutMillis: config.idleTimeoutMillis ?? DSQL_POOL_DEFAULTS.idleTimeoutMillis,\n maxLifetimeSeconds: config.maxLifetimeSeconds ?? DSQL_POOL_DEFAULTS.maxLifetimeSeconds,\n connectionTimeoutMillis: config.connectionTimeoutMillis ?? DSQL_POOL_DEFAULTS.connectionTimeoutMillis,\n allowExitOnIdle: config.allowExitOnIdle ?? DSQL_POOL_DEFAULTS.allowExitOnIdle,\n };\n\n return new Pool(poolConfig as any);\n }\n\n async init(): Promise<void> {\n if (this.isInitialized) {\n return;\n }\n\n try {\n this.isInitialized = true;\n await super.init();\n } catch (error) {\n this.isInitialized = false;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'INIT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n /**\n * Database client for executing queries.\n *\n * @example\n * ```typescript\n * const rows = await store.db.any('SELECT * FROM users WHERE active = $1', [true]);\n * const user = await store.db.one('SELECT * FROM users WHERE id = $1', [userId]);\n * ```\n */\n public get db(): DbClient {\n return this.#db;\n }\n\n /**\n * The underlying pg.Pool for direct database access or ORM integration.\n */\n public get pool(): Pool {\n return this.#pool;\n }\n\n /**\n * Closes the connection pool if it was created by this store.\n * If a pool was passed in via config, it will not be closed.\n */\n async close(): Promise<void> {\n if (this.#ownsPool) {\n await this.#pool.end();\n }\n this.isInitialized = false;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/shared/config.ts","../src/storage/client.ts","../src/shared/retry.ts","../src/shared/batch.ts","../src/storage/db/index.ts","../src/storage/domains/utils.ts","../src/storage/domains/agents/index.ts","../src/storage/domains/memory/index.ts","../src/storage/domains/observability/index.ts","../src/storage/domains/scores/index.ts","../src/storage/domains/workflows/index.ts","../src/storage/index.ts"],"names":["Pool","AuroraDSQLClient","parseSqlIdentifier","MastraBase","TABLE_SCHEMAS","coreSqlType","coreDefaultValue","error","MastraError","createStorageErrorId","ErrorDomain","ErrorCategory","TABLE_WORKFLOW_SNAPSHOT","TABLE_SPANS","getSchemaName","getTableName","AgentsStorage","TABLE_AGENTS","TABLE_AGENT_VERSIONS","normalizePerPage","calculatePagination","MemoryStorage","TABLE_THREADS","TABLE_MESSAGES","TABLE_RESOURCES","MessageList","ObservabilityStorage","listTracesArgsSchema","TraceStatus","toTraceSpans","coreTransformScoreRow","ScoresStorage","TABLE_SCORERS","saveScorePayloadSchema","WorkflowsStorage","MastraStorage"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { AwsCredentialIdentityProvider } from '@aws-sdk/types';\nimport type { CreateIndexOptions } from '@mastra/core/storage';\nimport type { Pool } from 'pg';\n\n/**\n * Default connection pool settings optimized for Aurora DSQL.\n *\n * Aurora DSQL has a 60-minute maximum connection duration limit,\n * so maxLifetimeSeconds is set to 55 minutes to ensure connections\n * are rotated before hitting that limit.\n */\nexport const DSQL_POOL_DEFAULTS = {\n /** Maximum connections in the pool */\n max: 10,\n /** Minimum connections in the pool */\n min: 0,\n /** Close idle connections after 10 minutes */\n idleTimeoutMillis: 600000,\n /** Force connection rotation before DSQL's 60-minute limit */\n maxLifetimeSeconds: 3300,\n /** Connection acquisition timeout */\n connectionTimeoutMillis: 5000,\n /** Allow process to exit when idle */\n allowExitOnIdle: true,\n} as const;\n\n/**\n * Base configuration options shared across Aurora DSQL configs.\n */\nexport interface DSQLBaseConfig {\n /** Unique identifier for this store instance */\n id: string;\n\n /** Schema name (default: \"public\") */\n schemaName?: string;\n\n /**\n * If true, the store will not be initialized automatically when used with Mastra.\n * Use this when you want to manage initialization timing yourself.\n */\n disableInit?: boolean;\n\n /** Skip creation of default indexes (default: false) */\n skipDefaultIndexes?: boolean;\n\n /** Custom index definitions to create */\n indexes?: CreateIndexOptions[];\n}\n\n/**\n * Aurora DSQL host-based configuration.\n *\n * Aurora DSQL uses IAM authentication, so password is not required.\n * The connector automatically generates IAM tokens for authentication.\n */\nexport interface HostConfig extends DSQLBaseConfig {\n /** DSQL cluster endpoint (e.g., \"abc123.dsql.us-east-1.on.aws\") */\n host: string;\n\n /** Database user (default: \"admin\") */\n user?: string;\n\n /** Database name (default: \"postgres\", Aurora DSQL supports only one database per cluster) */\n database?: string;\n\n /** AWS region (auto-detected from host if not provided) */\n region?: string;\n\n /** Custom AWS credentials provider (optional, uses default credential chain if not provided) */\n customCredentialsProvider?: AwsCredentialIdentityProvider;\n\n /** Maximum number of connections in the pool (default: 10) */\n max?: number;\n\n /** Minimum number of connections in the pool (default: 0) */\n min?: number;\n\n /** Close idle connections after this many milliseconds (default: 600000 = 10 minutes) */\n idleTimeoutMillis?: number;\n\n /** Maximum connection lifetime in seconds (default: 3300 = 55 minutes, must be < 60 minutes due to DSQL limit) */\n maxLifetimeSeconds?: number;\n\n /** Connection timeout in milliseconds (default: 5000) */\n connectionTimeoutMillis?: number;\n\n /** Allow the process to exit when all connections are idle (default: true) */\n allowExitOnIdle?: boolean;\n}\n\n/**\n * Pre-configured pg.Pool configuration for Aurora DSQL.\n */\nexport interface PoolInstanceConfig extends DSQLBaseConfig {\n /**\n * Pre-configured pg.Pool instance.\n * Use this for direct control over the connection pool, or for\n * integration with libraries that expect a pg.Pool.\n *\n * @example\n * ```typescript\n * import { Pool } from 'pg';\n * import { AuroraDSQLClient } from '@aws/aurora-dsql-node-postgres-connector';\n *\n * const pool = new Pool({\n * host: 'abc123.dsql.us-east-1.on.aws',\n * Client: AuroraDSQLClient,\n * region: 'us-east-1',\n * });\n * const store = new DSQLStore({ id: 'my-store', pool });\n *\n * // Use store.pool for other libraries that need a pg.Pool\n * ```\n */\n pool: Pool;\n}\n\n/**\n * Aurora DSQL configuration type.\n *\n * Accepts either:\n * - A pre-configured pg.Pool: `{ id, pool, schemaName? }`\n * - Host-based config: `{ id, host, ... }`\n */\nexport type DSQLStoreConfig = PoolInstanceConfig | HostConfig | DSQLBaseConfig;\n\n/**\n * Type guard for pre-configured pg.Pool config\n */\nexport const isPoolConfig = (cfg: DSQLStoreConfig): cfg is PoolInstanceConfig => {\n return 'pool' in cfg;\n};\n\n/**\n * Type guard for host-based config\n */\nexport const isHostConfig = (cfg: DSQLStoreConfig): cfg is HostConfig => {\n return 'host' in cfg;\n};\n\n/**\n * Validates the DSQLStoreConfig and throws an error if invalid.\n */\nexport const validateConfig = (config: DSQLStoreConfig): void => {\n if (!config.id || typeof config.id !== 'string' || config.id.trim() === '') {\n throw new Error('DSQLStore: id must be provided and cannot be empty.');\n }\n\n // Pool config: user provides pre-configured pg.Pool\n if (isPoolConfig(config)) {\n if (!config.pool) {\n throw new Error('DSQLStore: pool must be provided when using pool config.');\n }\n return; // Valid pool config\n }\n\n // Host-based config (host is required if not pool config)\n if (!isHostConfig(config)) {\n throw new Error('DSQLStore: host must be provided and cannot be empty.');\n }\n\n // Validate host is not empty\n if (!config.host || config.host.trim() === '') {\n throw new Error('DSQLStore: host must be provided and cannot be empty.');\n }\n\n // Validate maxLifetimeSeconds is less than 60 minutes (Aurora DSQL hard limit)\n if (config.maxLifetimeSeconds !== undefined && config.maxLifetimeSeconds >= 3600) {\n throw new Error(\n 'DSQLStore: maxLifetimeSeconds must be less than 3600 (60 minutes) due to Aurora DSQL connection duration limit.',\n );\n }\n};\n\n/**\n * Extracts AWS region from DSQL host endpoint.\n * DSQL endpoints follow the pattern: <cluster-id>.dsql.<region>.on.aws\n */\nexport const extractRegionFromHost = (host: string): string | undefined => {\n const match = host.match(/\\.dsql\\.([a-z0-9-]+)\\.on\\.aws$/);\n return match?.[1];\n};\n\n/**\n * Returns the effective region, either from config or extracted from host.\n * Only applicable for host-based config (not pre-configured pool).\n */\nexport const getEffectiveRegion = (config: HostConfig): string => {\n if (config.region) {\n return config.region;\n }\n\n const extractedRegion = extractRegionFromHost(config.host);\n if (extractedRegion) {\n return extractedRegion;\n }\n\n throw new Error(\n 'DSQLStore: region could not be determined. Provide region in config or use a standard DSQL endpoint.',\n );\n};\n","import type { Pool, PoolClient, QueryResult } from 'pg';\n\n// Re-export pg types for consumers\nexport type { Pool, PoolClient, QueryResult } from 'pg';\n\n/**\n * Values array for parameterized queries.\n */\nexport type QueryValues = unknown[];\n\n/**\n * Common interface for database clients.\n * DsqlPoolAdapter implements this interface by wrapping a pg.Pool.\n */\nexport interface DbClient {\n /**\n * The underlying connection pool.\n */\n readonly $pool: Pool;\n\n /**\n * Acquire a client from the pool for manual query execution.\n * Remember to call client.release() when done.\n */\n connect(): Promise<PoolClient>;\n\n /**\n * Execute a query that returns no data.\n * Use for INSERT, UPDATE, DELETE without RETURNING.\n */\n none(query: string, values?: QueryValues): Promise<null>;\n\n /**\n * Execute a query that returns exactly one row.\n * @throws Error if zero or more than one row is returned\n */\n one<T = any>(query: string, values?: QueryValues): Promise<T>;\n\n /**\n * Execute a query that returns zero or one row.\n * @returns The row, or null if no rows returned\n * @throws Error if more than one row is returned\n */\n oneOrNone<T = any>(query: string, values?: QueryValues): Promise<T | null>;\n\n /**\n * Execute a query that returns any number of rows (including zero).\n * Alias for manyOrNone.\n */\n any<T = any>(query: string, values?: QueryValues): Promise<T[]>;\n\n /**\n * Execute a query that returns zero or more rows.\n */\n manyOrNone<T = any>(query: string, values?: QueryValues): Promise<T[]>;\n\n /**\n * Execute a query that returns at least one row.\n * @throws Error if no rows are returned\n */\n many<T = any>(query: string, values?: QueryValues): Promise<T[]>;\n\n /**\n * Execute a raw query, returning the full result object.\n */\n query(query: string, values?: QueryValues): Promise<QueryResult>;\n\n /**\n * Execute a function within a transaction.\n * Automatically handles BEGIN, COMMIT, and ROLLBACK.\n */\n tx<T>(callback: (t: TxClient) => Promise<T>): Promise<T>;\n}\n\n/**\n * Transaction client interface for executing queries within a transaction.\n */\nexport interface TxClient {\n none(query: string, values?: QueryValues): Promise<null>;\n one<T = any>(query: string, values?: QueryValues): Promise<T>;\n oneOrNone<T = any>(query: string, values?: QueryValues): Promise<T | null>;\n any<T = any>(query: string, values?: QueryValues): Promise<T[]>;\n manyOrNone<T = any>(query: string, values?: QueryValues): Promise<T[]>;\n many<T = any>(query: string, values?: QueryValues): Promise<T[]>;\n query(query: string, values?: QueryValues): Promise<QueryResult>;\n /** Execute multiple promises in parallel */\n batch<T>(promises: Promise<T>[]): Promise<T[]>;\n}\n\n/**\n * Truncate a query string for error messages.\n */\nfunction truncateQuery(query: string, maxLength = 100): string {\n const normalized = query.replace(/\\s+/g, ' ').trim();\n if (normalized.length <= maxLength) {\n return normalized;\n }\n return normalized.slice(0, maxLength) + '...';\n}\n\n/**\n * Adapter that wraps a pg.Pool to implement DbClient.\n */\nexport class PoolAdapter implements DbClient {\n constructor(public readonly $pool: Pool) {}\n\n connect(): Promise<PoolClient> {\n return this.$pool.connect();\n }\n\n async none(query: string, values?: QueryValues): Promise<null> {\n await this.$pool.query(query, values);\n return null;\n }\n\n async one<T = any>(query: string, values?: QueryValues): Promise<T> {\n const result = await this.$pool.query(query, values);\n if (result.rows.length === 0) {\n throw new Error(`No data returned from query: ${truncateQuery(query)}`);\n }\n if (result.rows.length > 1) {\n throw new Error(`Multiple rows returned when one was expected: ${truncateQuery(query)}`);\n }\n return result.rows[0] as T;\n }\n\n async oneOrNone<T = any>(query: string, values?: QueryValues): Promise<T | null> {\n const result = await this.$pool.query(query, values);\n if (result.rows.length === 0) {\n return null;\n }\n if (result.rows.length > 1) {\n throw new Error(`Multiple rows returned when one or none was expected: ${truncateQuery(query)}`);\n }\n return result.rows[0] as T;\n }\n\n async any<T = any>(query: string, values?: QueryValues): Promise<T[]> {\n const result = await this.$pool.query(query, values);\n return result.rows as T[];\n }\n\n async manyOrNone<T = any>(query: string, values?: QueryValues): Promise<T[]> {\n return this.any<T>(query, values);\n }\n\n async many<T = any>(query: string, values?: QueryValues): Promise<T[]> {\n const result = await this.$pool.query(query, values);\n if (result.rows.length === 0) {\n throw new Error(`No data returned from query: ${truncateQuery(query)}`);\n }\n return result.rows as T[];\n }\n\n async query(query: string, values?: QueryValues): Promise<QueryResult> {\n return this.$pool.query(query, values);\n }\n\n async tx<T>(callback: (t: TxClient) => Promise<T>): Promise<T> {\n const client = await this.$pool.connect();\n try {\n await client.query('BEGIN');\n const txClient = new TransactionClient(client);\n const result = await callback(txClient);\n await client.query('COMMIT');\n return result;\n } catch (error) {\n try {\n await client.query('ROLLBACK');\n } catch (rollbackError) {\n // Log rollback failure but throw original error\n console.error('Transaction rollback failed:', rollbackError);\n }\n throw error;\n } finally {\n client.release();\n }\n }\n}\n\n/**\n * Transaction client that wraps a PoolClient for executing queries within a transaction.\n */\nclass TransactionClient implements TxClient {\n constructor(private readonly client: PoolClient) {}\n\n async none(query: string, values?: QueryValues): Promise<null> {\n await this.client.query(query, values);\n return null;\n }\n\n async one<T = any>(query: string, values?: QueryValues): Promise<T> {\n const result = await this.client.query(query, values);\n if (result.rows.length === 0) {\n throw new Error(`No data returned from query: ${truncateQuery(query)}`);\n }\n if (result.rows.length > 1) {\n throw new Error(`Multiple rows returned when one was expected: ${truncateQuery(query)}`);\n }\n return result.rows[0] as T;\n }\n\n async oneOrNone<T = any>(query: string, values?: QueryValues): Promise<T | null> {\n const result = await this.client.query(query, values);\n if (result.rows.length === 0) {\n return null;\n }\n if (result.rows.length > 1) {\n throw new Error(`Multiple rows returned when one or none was expected: ${truncateQuery(query)}`);\n }\n return result.rows[0] as T;\n }\n\n async any<T = any>(query: string, values?: QueryValues): Promise<T[]> {\n const result = await this.client.query(query, values);\n return result.rows as T[];\n }\n\n async manyOrNone<T = any>(query: string, values?: QueryValues): Promise<T[]> {\n return this.any<T>(query, values);\n }\n\n async many<T = any>(query: string, values?: QueryValues): Promise<T[]> {\n const result = await this.client.query(query, values);\n if (result.rows.length === 0) {\n throw new Error(`No data returned from query: ${truncateQuery(query)}`);\n }\n return result.rows as T[];\n }\n\n async query(query: string, values?: QueryValues): Promise<QueryResult> {\n return this.client.query(query, values);\n }\n\n async batch<T>(promises: Promise<T>[]): Promise<T[]> {\n return Promise.all(promises);\n }\n}\n","/**\n * Retry utilities for Aurora DSQL (PostgreSQL + OCC).\n *\n * Aurora DSQL uses optimistic concurrency control (OCC) and may return\n * serialization errors (SQLSTATE 40001) that require retry. This module\n * provides utilities for handling such errors with exponential backoff\n * and full jitter.\n *\n * **Scope**: By default, this utility only retries OCC-related failures\n * identified by PostgreSQL SQLSTATE codes. Network-level or OS-level errors\n * are out of scope for the default implementation. Callers can provide a\n * custom `isRetriable` function to extend retriable conditions if needed.\n *\n * @see https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/\n */\n\n/**\n * PostgreSQL SQLSTATE codes that may be retriable.\n *\n * By default, `isRetriableError` only retries `SERIALIZATION_FAILURE` (40001),\n * which is the primary OCC conflict error from Aurora DSQL.\n *\n * Other codes are provided for reference and can be used with a custom\n * `isRetriable` function if needed.\n *\n * @see https://www.postgresql.org/docs/current/errcodes-appendix.html\n */\nexport const RETRIABLE_ERROR_CODES = {\n /** Serialization failure - OCC conflict in Aurora DSQL (default retriable) */\n SERIALIZATION_FAILURE: '40001',\n /** Deadlock detected (not retriable by default) */\n DEADLOCK_DETECTED: '40P01',\n /** Connection failure - may be transient (not retriable by default) */\n CONNECTION_FAILURE: '08006',\n /** Connection does not exist (not retriable by default) */\n CONNECTION_DOES_NOT_EXIST: '08003',\n /** Admin shutdown - server is restarting (not retriable by default) */\n ADMIN_SHUTDOWN: '57P01',\n /** Crash shutdown (not retriable by default) */\n CRASH_SHUTDOWN: '57P02',\n /** Cannot connect now (not retriable by default) */\n CANNOT_CONNECT_NOW: '57P03',\n} as const;\n\n/**\n * Default SQLSTATE codes that are retriable.\n * Only OCC serialization failure (40001) by default.\n */\nconst DEFAULT_RETRIABLE_SQLSTATES: ReadonlySet<string> = new Set([RETRIABLE_ERROR_CODES.SERIALIZATION_FAILURE]);\n\n/**\n * Options for retry behavior.\n */\nexport interface RetryOptions {\n /**\n * Maximum number of retry attempts (including the initial attempt).\n * Must be >= 1.\n * @default 5\n */\n maxAttempts?: number;\n\n /**\n * Initial delay in milliseconds before first retry.\n * Must be >= 0.\n * @default 100\n */\n initialDelayMs?: number;\n\n /**\n * Maximum delay in milliseconds between retries.\n * Must be > 0 and >= initialDelayMs.\n * @default 2000\n */\n maxDelayMs?: number;\n\n /**\n * Multiplier for exponential backoff.\n * Must be >= 1.\n * @default 2\n */\n backoffMultiplier?: number;\n\n /**\n * Whether to add jitter to retry delays.\n * When true, uses \"full jitter\" algorithm: delay is uniformly random in [0, cappedDelay].\n * @see https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/\n * @default true\n */\n jitter?: boolean;\n\n /**\n * Optional callback invoked before each retry.\n * @param error - The error that triggered the retry\n * @param attempt - The attempt number that failed (1-based)\n * @param delayMs - The delay before the next attempt\n */\n onRetry?: (error: Error, attempt: number, delayMs: number) => void;\n\n /**\n * Custom function to determine if an error is retriable.\n * If not provided, uses the default `isRetriableError` function which only\n * retries on SQLSTATE 40001 (OCC serialization failure).\n */\n isRetriable?: (error: unknown) => boolean;\n}\n\n/**\n * Default retry options.\n *\n * Note: maxDelayMs is set to 2000ms as the standard for most operations.\n * For batch operations that may need more recovery time, override with 5000ms.\n */\nexport const DEFAULT_RETRY_OPTIONS: Required<Omit<RetryOptions, 'onRetry' | 'isRetriable'>> = {\n maxAttempts: 5,\n initialDelayMs: 100,\n maxDelayMs: 2000,\n backoffMultiplier: 2,\n jitter: true,\n};\n\n/**\n * Interface for PostgreSQL errors (from pg library).\n */\nexport interface PostgresError extends Error {\n code?: string;\n severity?: string;\n detail?: string;\n hint?: string;\n position?: string;\n internalPosition?: string;\n internalQuery?: string;\n where?: string;\n schema?: string;\n table?: string;\n column?: string;\n dataType?: string;\n constraint?: string;\n file?: string;\n line?: string;\n routine?: string;\n}\n\n/**\n * Check if an error is a PostgreSQL error with a code.\n */\nexport function isPostgresError(error: unknown): error is PostgresError {\n return error instanceof Error && 'code' in error && typeof (error as PostgresError).code === 'string';\n}\n\n/**\n * Get the PostgreSQL error code from an error, if available.\n */\nexport function getErrorCode(error: unknown): string | undefined {\n if (isPostgresError(error)) {\n return error.code;\n }\n return undefined;\n}\n\n/**\n * Pattern for valid PostgreSQL SQLSTATE codes: exactly 5 alphanumeric characters (uppercase).\n */\nconst SQLSTATE_PATTERN = /^[0-9A-Z]{5}$/;\n\n/**\n * Get the PostgreSQL SQLSTATE code from an error if valid.\n *\n * Returns the SQLSTATE code (normalized to uppercase) only if:\n * - The error is a PostgresError with a `code` property\n * - The code is exactly 5 characters of [0-9A-Za-z] (normalized to uppercase)\n *\n * @param error - The error to extract SQLSTATE from\n * @returns The SQLSTATE code (uppercase) if valid, undefined otherwise\n */\nfunction getPostgresSqlStateCode(error: unknown): string | undefined {\n const raw = getErrorCode(error);\n if (!raw) return undefined;\n const code = raw.toUpperCase();\n if (SQLSTATE_PATTERN.test(code)) {\n return code;\n }\n return undefined;\n}\n\n/**\n * Check if an error is retriable based on its PostgreSQL SQLSTATE code.\n *\n * This function is designed for Aurora DSQL's OCC (Optimistic Concurrency Control).\n * By default, only SQLSTATE 40001 (serialization failure) is considered retriable.\n *\n * **Important**: This function does NOT retry on:\n * - Network errors (ECONNRESET, ECONNREFUSED, etc.)\n * - Timeout errors\n * - Other connection-level errors\n *\n * If you need to retry on additional error types, provide a custom `isRetriable`\n * function to `withRetry`.\n *\n * @param error - The error to check\n * @returns True if the error has a retriable SQLSTATE code (40001 by default)\n *\n * @example\n * ```typescript\n * // Create a PostgreSQL-like error\n * const createPgError = (code: string, message: string): PostgresError => {\n * const err = new Error(message) as PostgresError;\n * err.code = code;\n * return err;\n * };\n *\n * // Default: only retries on 40001\n * isRetriableError(createPgError('40001', 'serialization failure')); // true\n * isRetriableError(createPgError('40P01', 'deadlock detected')); // false\n * isRetriableError(new Error('connection timeout')); // false\n *\n * // Custom retriable check with additional codes:\n * const customIsRetriable = (error: unknown) => {\n * const code = getErrorCode(error);\n * return code === '40001' || code === '40P01';\n * };\n * ```\n */\nexport function isRetriableError(error: unknown): boolean {\n const sqlstate = getPostgresSqlStateCode(error);\n if (!sqlstate) {\n // No valid SQLSTATE: not retriable by default\n // (network errors, OS errors, etc. are out of scope)\n return false;\n }\n return DEFAULT_RETRIABLE_SQLSTATES.has(sqlstate);\n}\n\n/**\n * Calculate the delay for a retry attempt with exponential backoff and optional full jitter.\n *\n * Algorithm:\n * 1. baseDelay = initialDelayMs * backoffMultiplier^(attempt - 1)\n * 2. cappedDelay = min(baseDelay, maxDelayMs)\n * 3. If jitter is enabled (full jitter): return random integer in [0, cappedDelay]\n * 4. Otherwise: return cappedDelay\n *\n * @see https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/\n *\n * @param attempt - The current attempt number (1-based)\n * @param options - Retry options\n * @returns Delay in milliseconds\n */\nfunction calculateRetryDelay(\n attempt: number,\n options: Pick<RetryOptions, 'initialDelayMs' | 'maxDelayMs' | 'backoffMultiplier' | 'jitter'> = {},\n): number {\n const {\n initialDelayMs = DEFAULT_RETRY_OPTIONS.initialDelayMs,\n maxDelayMs = DEFAULT_RETRY_OPTIONS.maxDelayMs,\n backoffMultiplier = DEFAULT_RETRY_OPTIONS.backoffMultiplier,\n jitter = DEFAULT_RETRY_OPTIONS.jitter,\n } = options;\n\n // Calculate base delay with exponential backoff\n const baseDelay = initialDelayMs * Math.pow(backoffMultiplier, attempt - 1);\n\n // Apply max delay cap\n const cappedDelay = Math.min(baseDelay, maxDelayMs);\n\n // Full jitter: uniformly random delay in [0, cappedDelay]\n if (jitter) {\n return Math.floor(Math.random() * (cappedDelay + 1));\n }\n\n return cappedDelay;\n}\n\n/**\n * Sleep for a specified number of milliseconds.\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n/**\n * Resolved retry options with all numeric fields required.\n */\ntype ResolvedRetryOptions = {\n maxAttempts: number;\n initialDelayMs: number;\n maxDelayMs: number;\n backoffMultiplier: number;\n};\n\n/**\n * Validate retry options at runtime.\n *\n * @param options - The resolved retry options to validate\n * @throws Error if any option is invalid\n */\nfunction validateRetryOptions(options: ResolvedRetryOptions): void {\n const { maxAttempts, initialDelayMs, maxDelayMs, backoffMultiplier } = options;\n\n if (maxAttempts < 1) {\n throw new Error(`Invalid retry option: maxAttempts must be >= 1, got ${maxAttempts}`);\n }\n if (initialDelayMs < 0) {\n throw new Error(`Invalid retry option: initialDelayMs must be >= 0, got ${initialDelayMs}`);\n }\n if (maxDelayMs <= 0) {\n throw new Error(`Invalid retry option: maxDelayMs must be > 0, got ${maxDelayMs}`);\n }\n if (backoffMultiplier < 1) {\n throw new Error(`Invalid retry option: backoffMultiplier must be >= 1, got ${backoffMultiplier}`);\n }\n if (maxDelayMs < initialDelayMs) {\n throw new Error(`Invalid retry option: maxDelayMs (${maxDelayMs}) must be >= initialDelayMs (${initialDelayMs})`);\n }\n}\n\n/**\n * Result of a retry operation.\n */\nexport interface RetryResult<T> {\n /** The result if successful */\n result: T;\n /** Number of attempts made */\n attempts: number;\n /** Total time spent (including delays) in milliseconds */\n totalTimeMs: number;\n}\n\n/**\n * Execute a function with automatic retry on retriable errors.\n *\n * Uses exponential backoff with optional full jitter to avoid thundering herd.\n * By default, only retries on PostgreSQL SQLSTATE 40001 (OCC serialization failure),\n * which is the primary conflict error from Aurora DSQL.\n *\n * @param fn - The async function to execute\n * @param options - Retry options\n * @returns The result of the function along with metadata\n * @throws The original error if all attempts fail or the error is not retriable\n * @throws Error if retry options are invalid\n *\n * @example\n * ```typescript\n * const { result, attempts, totalTimeMs } = await withRetry(\n * async () => {\n * return await db.query('INSERT INTO users ...');\n * },\n * {\n * maxAttempts: 3,\n * onRetry: (error, attempt, delay) => {\n * console.log(`Retry ${attempt} after ${delay}ms: ${error.message}`);\n * }\n * }\n * );\n * ```\n */\nexport async function withRetry<T>(fn: () => Promise<T>, options: RetryOptions = {}): Promise<RetryResult<T>> {\n const {\n maxAttempts = DEFAULT_RETRY_OPTIONS.maxAttempts,\n initialDelayMs = DEFAULT_RETRY_OPTIONS.initialDelayMs,\n maxDelayMs = DEFAULT_RETRY_OPTIONS.maxDelayMs,\n backoffMultiplier = DEFAULT_RETRY_OPTIONS.backoffMultiplier,\n jitter = DEFAULT_RETRY_OPTIONS.jitter,\n onRetry,\n isRetriable = isRetriableError,\n } = options;\n\n // Validate resolved options\n validateRetryOptions({ maxAttempts, initialDelayMs, maxDelayMs, backoffMultiplier });\n\n const startTime = Date.now();\n let lastError: Error | undefined;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const result = await fn();\n return {\n result,\n attempts: attempt,\n totalTimeMs: Date.now() - startTime,\n };\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // If this is the last attempt or the error is not retriable, throw\n if (attempt === maxAttempts || !isRetriable(error)) {\n throw lastError;\n }\n\n // Calculate delay and wait before retrying\n const delay = calculateRetryDelay(attempt, {\n initialDelayMs,\n maxDelayMs,\n backoffMultiplier,\n jitter,\n });\n\n // Call onRetry callback if provided\n if (onRetry) {\n onRetry(lastError, attempt, delay);\n }\n\n await sleep(delay);\n }\n }\n\n // This should never be reached, but TypeScript needs it\n throw lastError;\n}\n","/**\n * Batch utilities for Aurora DSQL.\n *\n * Aurora DSQL has transaction limits:\n * - Maximum 3,000 rows per transaction\n * - Maximum 10 MiB per transaction\n *\n * This utility only enforces the row-count limit.\n * The 10 MiB limit depends on the size of each record, so please enforce it\n * in the caller if needed.\n */\n\n/**\n * Default maximum rows per batch.\n * Aurora DSQL limits transactions to 3,000 rows.\n */\nexport const DEFAULT_MAX_ROWS_PER_BATCH = 3000;\n\n/**\n * Options for batch splitting.\n */\nexport interface BatchOptions {\n /**\n * Maximum number of rows per batch.\n * @default 3000 (Aurora DSQL limit)\n */\n maxRows?: number;\n}\n\n/**\n * Result of batch splitting.\n */\nexport interface BatchResult<T> {\n /** The batched records */\n batches: T[][];\n /** Total number of records */\n totalRecords: number;\n /** Number of batches created */\n batchCount: number;\n}\n\n/**\n * Split an array of records into batches that respect Aurora DSQL's transaction limits.\n *\n * @param records - Array of records to split\n * @param options - Batch splitting options\n * @returns BatchResult containing the batched records and metadata\n *\n * @example\n * ```typescript\n * const records = generateRecords(5000);\n * const result = splitIntoBatches(records);\n * // result.batches.length === 2\n * // result.batches[0].length === 3000\n * // result.batches[1].length === 2000\n * ```\n */\nexport function splitIntoBatches<T>(records: T[], options: BatchOptions = {}): BatchResult<T> {\n const maxRows = options.maxRows ?? DEFAULT_MAX_ROWS_PER_BATCH;\n\n if (records.length === 0) {\n return {\n batches: [],\n totalRecords: 0,\n batchCount: 0,\n };\n }\n\n if (maxRows <= 0) {\n throw new Error(`maxRows must be a positive number, got: ${maxRows}`);\n }\n\n const batches: T[][] = [];\n for (let i = 0; i < records.length; i += maxRows) {\n batches.push(records.slice(i, i + maxRows));\n }\n\n return {\n batches,\n totalRecords: records.length,\n batchCount: batches.length,\n };\n}\n","import { AuroraDSQLClient } from '@aws/aurora-dsql-node-postgres-connector';\nimport { MastraBase } from '@mastra/core/base';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n createStorageErrorId,\n TABLE_WORKFLOW_SNAPSHOT,\n TABLE_SPANS,\n TABLE_SCHEMAS,\n getSqlType as coreSqlType,\n getDefaultValue as coreDefaultValue,\n} from '@mastra/core/storage';\nimport type {\n StorageColumn,\n TABLE_NAMES,\n CreateIndexOptions,\n IndexInfo,\n StorageIndexStats,\n} from '@mastra/core/storage';\nimport { parseSqlIdentifier } from '@mastra/core/utils';\nimport { Pool } from 'pg';\nimport { splitIntoBatches, DEFAULT_MAX_ROWS_PER_BATCH } from '../../shared/batch';\nimport { withRetry } from '../../shared/retry';\nimport type { DbClient } from '../client';\nimport { PoolAdapter } from '../client';\n\n// Re-export DbClient for external use\nexport type { DbClient } from '../client';\n\n/**\n * Configuration for standalone domain usage.\n * Accepts either:\n * 1. An existing database client (Pool or PoolAdapter)\n * 2. Config to create a new pool internally\n */\nexport type DsqlDomainConfig = DsqlDomainClientConfig | DsqlDomainPoolConfig | DsqlDomainRestConfig;\n\n/**\n * Configuration for standalone domain usage.\n * Accepts a database client instance.\n */\nexport interface DsqlDomainClientConfig {\n /** The database client instance */\n client: DbClient;\n /** Database schema name */\n schemaName?: string;\n /** Skip creation of default indexes */\n skipDefaultIndexes?: boolean;\n /** Custom index definitions (filtered by domain's MANAGED_TABLES) */\n indexes?: CreateIndexOptions[];\n}\n\n/**\n * Pass an existing pg.Pool\n */\nexport interface DsqlDomainPoolConfig {\n /** Pre-configured pg.Pool */\n pool: Pool;\n /** Optional schema name (defaults to 'public') */\n schemaName?: string;\n /** When true, default indexes will not be created during initialization */\n skipDefaultIndexes?: boolean;\n /** Custom indexes to create for this domain's tables */\n indexes?: CreateIndexOptions[];\n}\n\n/**\n * Pass config to create a new pg.Pool internally\n */\nexport type DsqlDomainRestConfig = {\n /** Optional schema name (defaults to 'public') */\n schemaName?: string;\n /** When true, default indexes will not be created during initialization */\n skipDefaultIndexes?: boolean;\n /** Custom indexes to create for this domain's tables */\n indexes?: CreateIndexOptions[];\n} & {\n host: string;\n database: string;\n user: string;\n};\n/**\n * Resolves DsqlDomainConfi to a database client and schema.\n * Handles creating a new pool if config is provided.\n */\nexport function resolveDsqlConfig(config: DsqlDomainConfig): {\n client: DbClient;\n schemaName?: string;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n} {\n // Existing client\n if ('client' in config) {\n return {\n client: config.client,\n schemaName: config.schemaName,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n };\n }\n\n // Existing pool\n if ('pool' in config) {\n return {\n client: new PoolAdapter(config.pool),\n schemaName: config.schemaName,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n };\n }\n // Config to create new pool\n const pool = new Pool({\n host: config.host,\n database: config.database,\n user: config.user,\n // AuroraDSQLClient's constructor type doesn't match pg.PoolClient's,\n // but it's compatible at runtime. The `as any` avoids a TS error in\n // pnpm v11's stricter lockfile layout, where the connector's ESM-only\n // type exports (`.d.mts`) aren't resolved by tsc when the consumer uses\n // CommonJS module resolution.\n Client: AuroraDSQLClient as any,\n });\n return {\n client: new PoolAdapter(pool),\n schemaName: config.schemaName,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n };\n}\n\nfunction getSchemaName(schema?: string) {\n return schema ? `\"${parseSqlIdentifier(schema, 'schema name')}\"` : '\"public\"';\n}\n\nfunction getTableName({ indexName, schemaName }: { indexName: string; schemaName?: string }) {\n const parsedIndexName = parseSqlIdentifier(indexName, 'index name');\n const quotedIndexName = `\"${parsedIndexName}\"`;\n const quotedSchemaName = schemaName;\n return quotedSchemaName ? `${quotedSchemaName}.${quotedIndexName}` : quotedIndexName;\n}\n\n/**\n * Internal config for DsqlDB - accepts already-resolved client\n */\nexport interface DsqlDBInternalConfig {\n client: DbClient;\n schemaName?: string;\n skipDefaultIndexes?: boolean;\n}\n\n// Static map to track schema setup across all DsqlDB instances\n// Key: schemaName, Value: { promise, complete }\n// This prevents race conditions when multiple domains try to create the same schema concurrently\nconst schemaSetupRegistry = new Map<string, { promise: Promise<void> | null; complete: boolean }>();\n\nexport class DsqlDB extends MastraBase {\n public client: DbClient;\n public schemaName?: string;\n public skipDefaultIndexes?: boolean;\n\n constructor(config: DsqlDBInternalConfig) {\n super({\n component: 'STORAGE',\n name: 'DSQL_DB_LAYER',\n });\n\n this.client = config.client;\n this.schemaName = config.schemaName;\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n }\n\n async hasColumn(table: string, column: string): Promise<boolean> {\n const schema = this.schemaName || 'public';\n\n const result = await this.client.oneOrNone(\n `SELECT 1 FROM information_schema.columns WHERE table_schema = $1 AND table_name = $2 AND (column_name = $3 OR column_name = $4)`,\n [schema, table, column, column.toLowerCase()],\n );\n\n return !!result;\n }\n\n /**\n * Prepares values for insertion, handling TEXT columns storing JSON by stringifying them.\n * Aurora DSQL does not support JSONB natively, so we store JSON as TEXT.\n */\n private prepareValuesForInsert(record: Record<string, any>, tableName: TABLE_NAMES): any[] {\n return Object.entries(record).map(([key, value]) => {\n const schema = TABLE_SCHEMAS[tableName];\n const columnSchema = schema?.[key];\n\n // If the column is TEXT (storing JSON) or was previously JSONB, stringify objects\n // Aurora DSQL: We use TEXT instead of JSONB and cast to ::jsonb when filtering\n if (columnSchema?.type === 'jsonb' && value !== null && value !== undefined && typeof value === 'object') {\n return JSON.stringify(value);\n }\n return value;\n });\n }\n\n /**\n * Adds timestamp Z columns to a record if timestamp columns exist\n */\n private addTimestampZColumns(record: Record<string, any>): void {\n if (record.createdAt) {\n record.createdAtZ = record.createdAt;\n }\n if (record.created_at) {\n record.created_atZ = record.created_at;\n }\n if (record.updatedAt) {\n record.updatedAtZ = record.updatedAt;\n }\n }\n\n /**\n * Prepares a value for database operations, handling Date objects and JSON serialization.\n * This is schema-aware and stringifies objects for TEXT columns storing JSON.\n * Aurora DSQL: We use TEXT instead of JSONB and cast to ::jsonb when filtering.\n */\n private prepareValue(value: any, columnName: string, tableName: TABLE_NAMES): any {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n const schema = TABLE_SCHEMAS[tableName];\n const columnSchema = schema?.[columnName];\n\n // If the column is TEXT (storing JSON) or was previously JSONB, stringify objects\n if (columnSchema?.type === 'jsonb') {\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n }\n\n // For other columns with object values, stringify them (for backwards compatibility)\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n\n return value;\n }\n\n private async setupSchema() {\n if (!this.schemaName) {\n return;\n }\n\n // Use static registry to coordinate schema setup across all DsqlDB instances\n let registryEntry = schemaSetupRegistry.get(this.schemaName);\n if (registryEntry?.complete) {\n return;\n }\n\n const quotedSchemaName = getSchemaName(this.schemaName);\n\n if (!registryEntry?.promise) {\n const schemaNameCapture = this.schemaName;\n const setupPromise = (async () => {\n try {\n const schemaExists = await this.client.oneOrNone(\n `\n SELECT EXISTS (\n SELECT 1 FROM information_schema.schemata\n WHERE schema_name = $1\n )\n `,\n [schemaNameCapture],\n );\n\n if (!schemaExists?.exists) {\n try {\n await this.client.none(`CREATE SCHEMA IF NOT EXISTS ${quotedSchemaName}`);\n this.logger.info(`Schema \"${schemaNameCapture}\" created successfully`);\n } catch (error) {\n this.logger.error(`Failed to create schema \"${schemaNameCapture}\"`, { error });\n throw new Error(\n `Unable to create schema \"${schemaNameCapture}\". This requires CREATE privilege on the database. ` +\n `Either create the schema manually or grant CREATE privilege to the user.`,\n );\n }\n }\n\n // Mark as complete in the registry\n const entry = schemaSetupRegistry.get(schemaNameCapture);\n if (entry) {\n entry.complete = true;\n }\n this.logger.debug(`Schema \"${quotedSchemaName}\" is ready for use`);\n } catch (error) {\n // On error, clear the registry entry so retry is possible\n schemaSetupRegistry.delete(schemaNameCapture);\n throw error;\n }\n })();\n\n // Register the promise immediately so concurrent callers can await it\n schemaSetupRegistry.set(this.schemaName, { promise: setupPromise, complete: false });\n registryEntry = schemaSetupRegistry.get(this.schemaName);\n }\n\n await registryEntry!.promise;\n }\n\n /**\n * Override getSqlType to map JSONB to TEXT for Aurora DSQL compatibility.\n * Aurora DSQL does not fully support native JSONB, so we store JSON as TEXT\n * and cast to ::jsonb only when filtering/querying.\n */\n protected getSqlType(type: StorageColumn['type']): string {\n switch (type) {\n case 'jsonb':\n // Aurora DSQL: Store JSON data as TEXT instead of JSONB\n return 'TEXT';\n case 'uuid':\n return 'UUID';\n case 'boolean':\n return 'BOOLEAN';\n default:\n return coreSqlType(type);\n }\n }\n\n protected getDefaultValue(type: StorageColumn['type']): string {\n switch (type) {\n case 'timestamp':\n return 'DEFAULT NOW()';\n case 'jsonb':\n // Aurora DSQL: JSONB columns are stored as TEXT with JSON content\n // We use TEXT with a default empty JSON object string\n return \"DEFAULT '{}'\";\n default:\n return coreDefaultValue(type);\n }\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n this.addTimestampZColumns(record);\n\n const schemaName = getSchemaName(this.schemaName);\n const columns = Object.keys(record).map(col => parseSqlIdentifier(col, 'column name'));\n const values = this.prepareValuesForInsert(record, tableName);\n const placeholders = values.map((_, i) => `$${i + 1}`).join(', ');\n\n await withRetry(\n async () => {\n await this.client.none(\n `INSERT INTO ${getTableName({ indexName: tableName, schemaName })} (${columns.map(c => `\"${c}\"`).join(', ')}) VALUES (${placeholders})`,\n values,\n );\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`insert retry ${attempt} for table ${tableName} after ${delay}ms: ${error.message}`);\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'INSERT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n });\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n await withRetry(\n async () => {\n const schemaName = getSchemaName(this.schemaName);\n const tableNameWithSchema = getTableName({ indexName: tableName, schemaName });\n // Aurora DSQL does not support TRUNCATE, use DELETE FROM instead\n await this.client.none(`DELETE FROM ${tableNameWithSchema}`);\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`clearTable retry ${attempt} for ${tableName} after ${delay}ms: ${error.message}`);\n },\n },\n );\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'CLEAR_TABLE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n }\n }\n\n async createTable({\n tableName,\n schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n await withRetry(\n async () => {\n const timeZColumnNames = Object.entries(schema)\n .filter(([_, def]) => def.type === 'timestamp')\n .map(([name]) => name);\n\n const timeZColumns = Object.entries(schema)\n .filter(([_, def]) => def.type === 'timestamp')\n .map(([name]) => {\n const parsedName = parseSqlIdentifier(name, 'column name');\n return `\"${parsedName}Z\" TIMESTAMPTZ DEFAULT NOW()`;\n });\n\n const columns = Object.entries(schema).map(([name, def]) => {\n const parsedName = parseSqlIdentifier(name, 'column name');\n const constraints = [];\n if (def.primaryKey) constraints.push('PRIMARY KEY');\n if (!def.nullable) constraints.push('NOT NULL');\n // Use getSqlType to convert JSONB to TEXT for Aurora DSQL compatibility\n const sqlType = this.getSqlType(def.type);\n return `\"${parsedName}\" ${sqlType} ${constraints.join(' ')}`;\n });\n\n if (this.schemaName) {\n await this.setupSchema();\n }\n\n const finalColumns = [...columns, ...timeZColumns].join(',\\n');\n const constraintPrefix = this.schemaName ? `${this.schemaName}_` : '';\n const schemaName = getSchemaName(this.schemaName);\n\n const createTableSql = `\n CREATE TABLE IF NOT EXISTS ${getTableName({ indexName: tableName, schemaName })} (\n ${finalColumns}\n );\n `;\n\n await this.client.none(createTableSql);\n\n // Aurora DSQL: Use CREATE UNIQUE INDEX ASYNC instead of UNIQUE constraint\n // DSQL doesn't support DO $$ blocks or PL/pgSQL\n if (tableName === TABLE_WORKFLOW_SNAPSHOT) {\n const indexName = `${constraintPrefix}mastra_workflow_snapshot_workflow_name_run_id_key`;\n const fullTableName = getTableName({ indexName: tableName, schemaName });\n\n try {\n // Check if index already exists\n const indexExists = await this.client.oneOrNone(`SELECT 1 FROM pg_indexes WHERE indexname = $1`, [\n indexName,\n ]);\n\n if (!indexExists) {\n // Create async unique index for eventual consistency\n const result = await this.client.oneOrNone<{ job_uuid: string }>(\n `CREATE UNIQUE INDEX ASYNC \"${indexName}\" ON ${fullTableName} (\"workflow_name\", \"run_id\")`,\n );\n if (result?.job_uuid) {\n await this.waitForDSQLJob(result.job_uuid);\n }\n this.logger?.debug?.(`Created unique index ${indexName} on ${fullTableName}`);\n }\n } catch (error) {\n // Log warning but don't fail - the index creation is async and may take time\n this.logger?.warn?.(`Failed to create unique index ${indexName}:`, error);\n }\n }\n\n await this.alterTable({\n tableName,\n schema,\n ifNotExists: timeZColumnNames,\n });\n\n // Set up timestamp triggers for Spans table\n // Note: Aurora DSQL doesn't support triggers, this is a no-op\n if (tableName === TABLE_SPANS) {\n await this.setupTimestampTriggers(tableName);\n await this.migrateSpansTable();\n }\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`createTable retry ${attempt} for ${tableName} after ${delay}ms: ${error.message}`);\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'CREATE_TABLE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n });\n }\n\n /**\n * Set up timestamp triggers for a table to automatically manage createdAt/updatedAt\n * Note: Aurora DSQL doesn't support triggers, PL/pgSQL, or CREATE FUNCTION.\n * Timestamps are managed at the application level in insert/update operations.\n * This method is kept as a no-op for API compatibility.\n */\n private async setupTimestampTriggers(_tableName: TABLE_NAMES): Promise<void> {\n // Aurora DSQL doesn't support triggers, PL/pgSQL, or CREATE FUNCTION.\n // Timestamps (createdAt, updatedAt, createdAtZ, updatedAtZ) are managed:\n // - DEFAULT NOW() on column definition for createdAt/createdAtZ\n // - Application-level setting in update operations for updatedAt/updatedAtZ\n return;\n }\n\n /**\n * Migrates the spans table schema from OLD_SPAN_SCHEMA to current SPAN_SCHEMA.\n * This adds new columns that don't exist in old schema.\n */\n private async migrateSpansTable(): Promise<void> {\n const fullTableName = getTableName({ indexName: TABLE_SPANS, schemaName: getSchemaName(this.schemaName) });\n const schema = TABLE_SCHEMAS[TABLE_SPANS];\n\n try {\n // Add any columns from current schema that don't exist in the database\n for (const [columnName, columnDef] of Object.entries(schema)) {\n const columnExists = await this.hasColumn(TABLE_SPANS, columnName);\n if (!columnExists) {\n const parsedColumnName = parseSqlIdentifier(columnName, 'column name');\n const sqlType = this.getSqlType(columnDef.type);\n // Align with createTable: nullable columns omit NOT NULL, non-nullable columns include it\n const nullable = columnDef.nullable ? '' : 'NOT NULL';\n const defaultValue = !columnDef.nullable ? this.getDefaultValue(columnDef.type) : '';\n const alterSql =\n `ALTER TABLE ${fullTableName} ADD COLUMN IF NOT EXISTS \"${parsedColumnName}\" ${sqlType} ${nullable} ${defaultValue}`.trim();\n await this.client.none(alterSql);\n this.logger?.debug?.(`Added column '${columnName}' to ${fullTableName}`);\n\n // For timestamp columns, also add the timezone-aware version\n // This matches the behavior in alterTable()\n if (sqlType === 'TIMESTAMP') {\n const timestampZSql =\n `ALTER TABLE ${fullTableName} ADD COLUMN IF NOT EXISTS \"${parsedColumnName}Z\" TIMESTAMPTZ DEFAULT NOW()`.trim();\n await this.client.none(timestampZSql);\n this.logger?.debug?.(`Added timezone column '${columnName}Z' to ${fullTableName}`);\n }\n }\n }\n\n // Also add timezone columns for any existing timestamp columns that don't have them yet\n // This handles the case where timestamp columns existed but their *Z counterparts don't\n for (const [columnName, columnDef] of Object.entries(schema)) {\n if (columnDef.type === 'timestamp') {\n const tzColumnName = `${columnName}Z`;\n const tzColumnExists = await this.hasColumn(TABLE_SPANS, tzColumnName);\n if (!tzColumnExists) {\n const parsedTzColumnName = parseSqlIdentifier(tzColumnName, 'column name');\n const timestampZSql =\n `ALTER TABLE ${fullTableName} ADD COLUMN IF NOT EXISTS \"${parsedTzColumnName}\" TIMESTAMPTZ DEFAULT NOW()`.trim();\n await this.client.none(timestampZSql);\n this.logger?.debug?.(`Added timezone column '${tzColumnName}' to ${fullTableName}`);\n }\n }\n }\n\n this.logger?.info?.(`Migration completed for ${fullTableName}`);\n } catch (error) {\n // Log warning but don't fail - migrations should be best-effort\n this.logger?.warn?.(`Failed to migrate spans table ${fullTableName}:`, error);\n }\n }\n\n /**\n * Alters table schema to add columns if they don't exist\n * @param tableName Name of the table\n * @param schema Schema of the table\n * @param ifNotExists Array of column names to add if they don't exist\n */\n async alterTable({\n tableName,\n schema,\n ifNotExists,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n const fullTableName = getTableName({ indexName: tableName, schemaName: getSchemaName(this.schemaName) });\n\n try {\n for (const columnName of ifNotExists) {\n if (schema[columnName]) {\n const columnDef = schema[columnName];\n const sqlType = this.getSqlType(columnDef.type);\n // Aurora DSQL: ALTER TABLE ADD COLUMN with constraints (NOT NULL, DEFAULT) is not supported\n // We can only add nullable columns without constraints\n const parsedColumnName = parseSqlIdentifier(columnName, 'column name');\n const alterSql = `ALTER TABLE ${fullTableName} ADD COLUMN IF NOT EXISTS \"${parsedColumnName}\" ${sqlType}`;\n\n await this.client.none(alterSql);\n\n if (sqlType === 'TIMESTAMP') {\n // Add the Z column as well (nullable, no default - DSQL limitation)\n const alterSqlZ = `ALTER TABLE ${fullTableName} ADD COLUMN IF NOT EXISTS \"${parsedColumnName}Z\" TIMESTAMPTZ`;\n await this.client.none(alterSqlZ);\n }\n\n this.logger?.debug?.(`Ensured column ${parsedColumnName} exists in table ${fullTableName}`);\n }\n }\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'ALTER_TABLE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n }\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, string> }): Promise<R | null> {\n try {\n const keyEntries = Object.entries(keys).map(([key, value]) => [parseSqlIdentifier(key, 'column name'), value]);\n const conditions = keyEntries.map(([key], index) => `\"${key}\" = $${index + 1}`).join(' AND ');\n const values = keyEntries.map(([_, value]) => value);\n\n const result = await this.client.oneOrNone<R>(\n `SELECT * FROM ${getTableName({ indexName: tableName, schemaName: getSchemaName(this.schemaName) })} WHERE ${conditions} ORDER BY \"createdAt\" DESC LIMIT 1`,\n values,\n );\n\n if (!result) {\n return null;\n }\n\n if (tableName === TABLE_WORKFLOW_SNAPSHOT) {\n const snapshot = result as any;\n if (typeof snapshot.snapshot === 'string') {\n snapshot.snapshot = JSON.parse(snapshot.snapshot);\n }\n return snapshot;\n }\n\n return result;\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LOAD', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n }\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n if (records.length === 0) {\n return;\n }\n\n try {\n // Split records into DSQL-compatible batches (max 3000 rows per transaction)\n const { batches } = splitIntoBatches(records, { maxRows: DEFAULT_MAX_ROWS_PER_BATCH });\n\n // Process each batch with retry support\n for (const batch of batches) {\n await withRetry(\n async () => {\n await this.client.tx(async t => {\n for (const record of batch) {\n this.addTimestampZColumns(record);\n const schemaName = getSchemaName(this.schemaName);\n const columns = Object.keys(record).map(col => parseSqlIdentifier(col, 'column name'));\n const values = this.prepareValuesForInsert(record, tableName);\n const placeholders = values.map((_, i) => `$${i + 1}`).join(', ');\n\n await t.none(\n `INSERT INTO ${getTableName({ indexName: tableName, schemaName })} (${columns.map(c => `\"${c}\"`).join(', ')}) VALUES (${placeholders})`,\n values,\n );\n }\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `Batch insert retry ${attempt} for table ${tableName} after ${delay}ms: ${error.message}`,\n );\n },\n },\n );\n }\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'BATCH_INSERT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n numberOfRecords: records.length,\n },\n },\n error,\n );\n }\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n const schemaName = getSchemaName(this.schemaName);\n const tableNameWithSchema = getTableName({ indexName: tableName, schemaName });\n await this.client.none(`DROP TABLE IF EXISTS ${tableNameWithSchema}`);\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'DROP_TABLE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n }\n }\n\n /**\n * Wait for an asynchronous DSQL job to complete.\n * Aurora DSQL requires CREATE INDEX ASYNC and sys.wait_for_job() to wait for completion.\n */\n private async waitForDSQLJob(jobUuid: string, timeoutMs: number = 60000): Promise<void> {\n const pollIntervalMs = 1000;\n const startTime = Date.now();\n\n while (Date.now() - startTime < timeoutMs) {\n const result = await this.client.oneOrNone<{ status: string }>(`SELECT sys.wait_for_job($1, 1) as status`, [\n jobUuid,\n ]);\n\n if (result?.status === 'COMPLETED') {\n return;\n }\n\n if (result?.status === 'FAILED') {\n throw new Error(`DSQL async job ${jobUuid} failed`);\n }\n\n // Wait before next poll\n await new Promise(resolve => setTimeout(resolve, pollIntervalMs));\n }\n\n throw new Error(`DSQL async job ${jobUuid} timed out after ${timeoutMs}ms`);\n }\n\n async createIndex(options: CreateIndexOptions): Promise<void> {\n try {\n const {\n name,\n table,\n columns,\n unique = false,\n // Note: 'concurrent' option is ignored in DSQL - always uses ASYNC\n where,\n method = 'btree',\n opclass,\n storage,\n tablespace,\n } = options;\n\n const schemaName = this.schemaName || 'public';\n const fullTableName = getTableName({\n indexName: table as TABLE_NAMES,\n schemaName: getSchemaName(this.schemaName),\n });\n\n // Check if index already exists\n const indexExists = await this.client.oneOrNone<{ exists: number }>(\n `SELECT 1 as exists FROM pg_indexes\n WHERE indexname = $1\n AND schemaname = $2`,\n [name, schemaName],\n );\n\n if (indexExists) {\n return;\n }\n\n // Build index creation SQL\n // Aurora DSQL uses CREATE INDEX ASYNC instead of CONCURRENTLY\n const uniqueStr = unique ? 'UNIQUE ' : '';\n const methodStr = method !== 'btree' ? `USING ${method} ` : '';\n\n // Handle columns with optional operator class\n // Aurora DSQL: Strip ASC/DESC sort order specifiers (not supported)\n const columnsStr = columns\n .map(col => {\n const colName = col.replace(/\\s+(DESC|ASC)$/i, '').trim();\n const quotedCol = `\"${parseSqlIdentifier(colName, 'column name')}\"`;\n return opclass ? `${quotedCol} ${opclass}` : quotedCol;\n })\n .join(', ');\n\n const whereStr = where ? ` WHERE ${where}` : '';\n const tablespaceStr = tablespace ? ` TABLESPACE ${tablespace}` : '';\n\n let withStr = '';\n if (storage && Object.keys(storage).length > 0) {\n const storageParams = Object.entries(storage)\n .map(([key, value]) => `${key} = ${value}`)\n .join(', ');\n withStr = ` WITH (${storageParams})`;\n }\n\n // Aurora DSQL: Use ASYNC instead of CONCURRENTLY\n const quotedIndexName = `\"${parseSqlIdentifier(name, 'index name')}\"`;\n const sql = `CREATE ${uniqueStr}INDEX ASYNC ${quotedIndexName} ON ${fullTableName} ${methodStr}(${columnsStr})${withStr}${tablespaceStr}${whereStr}`;\n\n const result = await this.client.oneOrNone<{ job_uuid: string }>(sql);\n\n if (result?.job_uuid) {\n await this.waitForDSQLJob(result.job_uuid);\n }\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'INDEX_CREATE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName: options.name,\n tableName: options.table,\n },\n },\n error,\n );\n }\n }\n\n async dropIndex(indexName: string): Promise<void> {\n const schemaName = this.schemaName || 'public';\n\n await withRetry(\n async () => {\n const indexExists = await this.client.oneOrNone(\n `SELECT 1 FROM pg_indexes\n WHERE indexname = $1\n AND schemaname = $2`,\n [indexName, schemaName],\n );\n\n if (!indexExists) {\n return;\n }\n\n const quotedIndexName = `\"${parseSqlIdentifier(indexName, 'index name')}\"`;\n const sql = `DROP INDEX IF EXISTS ${getSchemaName(this.schemaName)}.${quotedIndexName}`;\n await this.client.none(sql);\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`dropIndex retry ${attempt} for ${indexName} after ${delay}ms: ${error.message}`);\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'INDEX_DROP', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n },\n },\n error,\n );\n });\n }\n\n async listIndexes(tableName?: string): Promise<IndexInfo[]> {\n try {\n const schemaName = this.schemaName || 'public';\n\n let query: string;\n let params: any[];\n\n if (tableName) {\n query = `\n SELECT\n i.indexname as name,\n i.tablename as table,\n i.indexdef as definition,\n ix.indisunique as is_unique,\n pg_size_pretty(pg_relation_size(c.oid)) as size,\n array_agg(a.attname ORDER BY array_position(ix.indkey, a.attnum)) as columns\n FROM pg_indexes i\n JOIN pg_class c ON c.relname = i.indexname AND c.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = i.schemaname)\n JOIN pg_index ix ON ix.indexrelid = c.oid\n JOIN pg_attribute a ON a.attrelid = ix.indrelid AND a.attnum = ANY(ix.indkey)\n WHERE i.schemaname = $1\n AND i.tablename = $2\n GROUP BY i.indexname, i.tablename, i.indexdef, ix.indisunique, c.oid\n `;\n params = [schemaName, tableName];\n } else {\n query = `\n SELECT\n i.indexname as name,\n i.tablename as table,\n i.indexdef as definition,\n ix.indisunique as is_unique,\n pg_size_pretty(pg_relation_size(c.oid)) as size,\n array_agg(a.attname ORDER BY array_position(ix.indkey, a.attnum)) as columns\n FROM pg_indexes i\n JOIN pg_class c ON c.relname = i.indexname AND c.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = i.schemaname)\n JOIN pg_index ix ON ix.indexrelid = c.oid\n JOIN pg_attribute a ON a.attrelid = ix.indrelid AND a.attnum = ANY(ix.indkey)\n WHERE i.schemaname = $1\n GROUP BY i.indexname, i.tablename, i.indexdef, ix.indisunique, c.oid\n `;\n params = [schemaName];\n }\n\n const results = await this.client.manyOrNone(query, params);\n\n return results.map(row => {\n let columns: string[] = [];\n if (typeof row.columns === 'string' && row.columns.startsWith('{') && row.columns.endsWith('}')) {\n const arrayContent = row.columns.slice(1, -1);\n columns = arrayContent ? arrayContent.split(',') : [];\n } else if (Array.isArray(row.columns)) {\n columns = row.columns;\n }\n\n return {\n name: row.name,\n table: row.table,\n columns,\n unique: row.is_unique || false,\n size: row.size || '0',\n definition: row.definition || '',\n };\n });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'INDEX_LIST', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: tableName\n ? {\n tableName,\n }\n : {},\n },\n error,\n );\n }\n }\n\n async describeIndex(indexName: string): Promise<StorageIndexStats> {\n try {\n const schemaName = this.schemaName || 'public';\n\n const query = `\n SELECT\n i.indexname as name,\n i.tablename as table,\n i.indexdef as definition,\n ix.indisunique as is_unique,\n pg_size_pretty(pg_relation_size(c.oid)) as size,\n array_agg(a.attname ORDER BY array_position(ix.indkey, a.attnum)) as columns,\n am.amname as method,\n s.idx_scan as scans,\n s.idx_tup_read as tuples_read,\n s.idx_tup_fetch as tuples_fetched\n FROM pg_indexes i\n JOIN pg_class c ON c.relname = i.indexname AND c.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = i.schemaname)\n JOIN pg_index ix ON ix.indexrelid = c.oid\n JOIN pg_attribute a ON a.attrelid = ix.indrelid AND a.attnum = ANY(ix.indkey)\n JOIN pg_am am ON c.relam = am.oid\n LEFT JOIN pg_stat_user_indexes s ON s.indexrelname = i.indexname AND s.schemaname = i.schemaname\n WHERE i.schemaname = $1\n AND i.indexname = $2\n GROUP BY i.indexname, i.tablename, i.indexdef, ix.indisunique, c.oid, am.amname, s.idx_scan, s.idx_tup_read, s.idx_tup_fetch\n `;\n\n const result = await this.client.oneOrNone(query, [schemaName, indexName]);\n\n if (!result) {\n throw new Error(`Index \"${indexName}\" not found in schema \"${schemaName}\"`);\n }\n\n let columns: string[] = [];\n if (typeof result.columns === 'string' && result.columns.startsWith('{') && result.columns.endsWith('}')) {\n const arrayContent = result.columns.slice(1, -1);\n columns = arrayContent ? arrayContent.split(',') : [];\n } else if (Array.isArray(result.columns)) {\n columns = result.columns;\n }\n\n // Aurora DSQL returns 'btree_index' instead of 'btree', normalize for API consistency\n const normalizedMethod = result.method === 'btree_index' ? 'btree' : result.method || 'btree';\n\n return {\n name: result.name,\n table: result.table,\n columns,\n unique: result.is_unique || false,\n size: result.size || '0',\n definition: result.definition || '',\n method: normalizedMethod,\n scans: parseInt(result.scans) || 0,\n tuples_read: parseInt(result.tuples_read) || 0,\n tuples_fetched: parseInt(result.tuples_fetched) || 0,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'INDEX_DESCRIBE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n },\n },\n error,\n );\n }\n }\n\n async update({\n tableName,\n keys,\n data,\n }: {\n tableName: TABLE_NAMES;\n keys: Record<string, any>;\n data: Record<string, any>;\n }): Promise<void> {\n const setColumns: string[] = [];\n const setValues: any[] = [];\n let paramIndex = 1;\n\n // Aurora DSQL: Set updatedAt/updatedAtZ since triggers are not supported\n const now = new Date().toISOString();\n const dataWithTimestamp = {\n ...data,\n updatedAt: now,\n updatedAtZ: now,\n };\n\n Object.entries(dataWithTimestamp).forEach(([key, value]) => {\n const parsedKey = parseSqlIdentifier(key, 'column name');\n setColumns.push(`\"${parsedKey}\" = $${paramIndex++}`);\n setValues.push(this.prepareValue(value, key, tableName));\n });\n\n const whereConditions: string[] = [];\n const whereValues: any[] = [];\n\n Object.entries(keys).forEach(([key, value]) => {\n const parsedKey = parseSqlIdentifier(key, 'column name');\n whereConditions.push(`\"${parsedKey}\" = $${paramIndex++}`);\n whereValues.push(this.prepareValue(value, key, tableName));\n });\n\n const tableName_ = getTableName({\n indexName: tableName,\n schemaName: getSchemaName(this.schemaName),\n });\n\n const sql = `UPDATE ${tableName_} SET ${setColumns.join(', ')} WHERE ${whereConditions.join(' AND ')}`;\n const values = [...setValues, ...whereValues];\n\n await withRetry(\n async () => {\n await this.client.none(sql, values);\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`update retry ${attempt} for table ${tableName} after ${delay}ms: ${error.message}`);\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'UPDATE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n });\n }\n\n async batchUpdate({\n tableName,\n updates,\n }: {\n tableName: TABLE_NAMES;\n updates: Array<{\n keys: Record<string, any>;\n data: Record<string, any>;\n }>;\n }): Promise<void> {\n if (updates.length === 0) {\n return;\n }\n\n try {\n const { batches } = splitIntoBatches(updates, { maxRows: DEFAULT_MAX_ROWS_PER_BATCH });\n\n for (const batch of batches) {\n await withRetry(\n async () => {\n await this.client.tx(async t => {\n for (const { keys, data } of batch) {\n const setClauses: string[] = [];\n const whereConditions: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n const now = new Date().toISOString();\n const dataWithTimestamp = {\n ...data,\n updatedAt: now,\n updatedAtZ: now,\n };\n\n Object.entries(dataWithTimestamp).forEach(([key, value]) => {\n const parsedKey = parseSqlIdentifier(key, 'column name');\n const preparedValue = this.prepareValue(value, key, tableName);\n setClauses.push(`\"${parsedKey}\" = $${paramIndex++}`);\n values.push(preparedValue);\n });\n\n Object.entries(keys).forEach(([key, value]) => {\n const parsedKey = parseSqlIdentifier(key, 'column name');\n whereConditions.push(`\"${parsedKey}\" = $${paramIndex++}`);\n values.push(value);\n });\n\n const tableName_ = getTableName({\n indexName: tableName,\n schemaName: getSchemaName(this.schemaName),\n });\n\n const sql = `UPDATE ${tableName_} SET ${setClauses.join(', ')} WHERE ${whereConditions.join(' AND ')}`;\n await t.none(sql, values);\n }\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `Batch update retry ${attempt} for table ${tableName} after ${delay}ms: ${error.message}`,\n );\n },\n },\n );\n }\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'BATCH_UPDATE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n numberOfRecords: updates.length,\n },\n },\n error,\n );\n }\n }\n\n async batchDelete({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any>[] }): Promise<void> {\n if (keys.length === 0) {\n return;\n }\n\n try {\n const tableName_ = getTableName({\n indexName: tableName,\n schemaName: getSchemaName(this.schemaName),\n });\n\n const { batches } = splitIntoBatches(keys, { maxRows: DEFAULT_MAX_ROWS_PER_BATCH });\n\n for (const batch of batches) {\n await withRetry(\n async () => {\n await this.client.tx(async t => {\n for (const keySet of batch) {\n const conditions: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n Object.entries(keySet).forEach(([key, value]) => {\n const parsedKey = parseSqlIdentifier(key, 'column name');\n conditions.push(`\"${parsedKey}\" = $${paramIndex++}`);\n values.push(value);\n });\n\n const sql = `DELETE FROM ${tableName_} WHERE ${conditions.join(' AND ')}`;\n await t.none(sql, values);\n }\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `Batch delete retry ${attempt} for table ${tableName} after ${delay}ms: ${error.message}`,\n );\n },\n },\n );\n }\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'BATCH_DELETE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n numberOfRecords: keys.length,\n },\n },\n error,\n );\n }\n }\n\n /**\n * Delete all data from a table (alias for clearTable for consistency with other stores)\n */\n async deleteData({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.clearTable({ tableName });\n }\n}\n","import type { TABLE_NAMES } from '@mastra/core/storage';\nimport { TABLE_SCHEMAS } from '@mastra/core/storage';\nimport { parseSqlIdentifier } from '@mastra/core/utils';\n\nexport function getSchemaName(schema?: string) {\n return schema ? `\"${parseSqlIdentifier(schema, 'schema name')}\"` : undefined;\n}\n\nexport function getTableName({ indexName, schemaName }: { indexName: string; schemaName?: string }) {\n const parsedIndexName = parseSqlIdentifier(indexName, 'index name');\n const quotedIndexName = `\"${parsedIndexName}\"`;\n const quotedSchemaName = schemaName;\n return quotedSchemaName ? `${quotedSchemaName}.${quotedIndexName}` : quotedIndexName;\n}\n\n/**\n * Transform SQL row to record format, handling JSON columns\n */\nexport function transformFromSqlRow<T>({\n tableName,\n sqlRow,\n}: {\n tableName: TABLE_NAMES;\n sqlRow: Record<string, any>;\n}): T {\n const schema = TABLE_SCHEMAS[tableName];\n const result: Record<string, any> = {};\n\n Object.entries(sqlRow).forEach(([key, value]) => {\n const columnSchema = schema?.[key];\n\n // Handle JSON columns\n if (columnSchema?.type === 'jsonb' && typeof value === 'string') {\n try {\n result[key] = JSON.parse(value);\n } catch {\n result[key] = value;\n }\n }\n // Handle Date columns - convert to Date objects for timestamp columns\n else if (columnSchema?.type === 'timestamp' && value && typeof value === 'string') {\n result[key] = new Date(value);\n } else if (columnSchema?.type === 'timestamp' && value instanceof Date) {\n result[key] = value;\n }\n // Handle boolean columns\n else if (columnSchema?.type === 'boolean') {\n result[key] = Boolean(value);\n } else {\n result[key] = value;\n }\n });\n\n return result as T;\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n AgentsStorage,\n createStorageErrorId,\n normalizePerPage,\n calculatePagination,\n TABLE_AGENTS,\n TABLE_AGENT_VERSIONS,\n TABLE_SCHEMAS,\n} from '@mastra/core/storage';\nimport type {\n StorageAgentType,\n StorageCreateAgentInput,\n StorageUpdateAgentInput,\n StorageListAgentsInput,\n StorageListAgentsOutput,\n CreateIndexOptions,\n AgentInstructionBlock,\n} from '@mastra/core/storage';\nimport type {\n AgentVersion,\n CreateVersionInput,\n ListVersionsInput,\n ListVersionsOutput,\n} from '@mastra/core/storage/domains/agents';\nimport { withRetry } from '../../../shared/retry';\nimport { DsqlDB, resolveDsqlConfig } from '../../db';\nimport type { DsqlDomainConfig } from '../../db';\nimport { getTableName, getSchemaName } from '../utils';\n\nexport class AgentsDSQL extends AgentsStorage {\n #db: DsqlDB;\n #schema: string;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_AGENTS, TABLE_AGENT_VERSIONS] as const;\n\n constructor(config: DsqlDomainConfig) {\n super();\n const { client, schemaName, skipDefaultIndexes, indexes } = resolveDsqlConfig(config);\n this.#db = new DsqlDB({ client, schemaName, skipDefaultIndexes });\n this.#schema = schemaName || 'public';\n this.#skipDefaultIndexes = skipDefaultIndexes;\n // Filter indexes to only those for tables managed by this domain\n this.#indexes = indexes?.filter(idx => (AgentsDSQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the agents domain tables.\n * Currently no default indexes are defined for agents.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for agents.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) {\n return;\n }\n // No default indexes for agents domain\n }\n\n async init(): Promise<void> {\n await this.#db.createTable({ tableName: TABLE_AGENTS, schema: TABLE_SCHEMAS[TABLE_AGENTS] });\n await this.#db.createTable({ tableName: TABLE_AGENT_VERSIONS, schema: TABLE_SCHEMAS[TABLE_AGENT_VERSIONS] });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) {\n return;\n }\n\n for (const indexDef of this.#indexes) {\n try {\n await this.#db.createIndex(indexDef);\n } catch (error) {\n // Log but continue - indexes are performance optimizations\n this.logger?.warn?.(`Failed to create custom index ${indexDef.name}:`, error);\n }\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_AGENT_VERSIONS });\n await this.#db.clearTable({ tableName: TABLE_AGENTS });\n }\n\n private parseJson(value: any, fieldName?: string): any {\n if (!value) return undefined;\n if (typeof value !== 'string') return value;\n\n try {\n return JSON.parse(value);\n } catch (error) {\n const details: Record<string, string> = {\n value: value.length > 100 ? value.substring(0, 100) + '...' : value,\n };\n if (fieldName) {\n details.field = fieldName;\n }\n\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'PARSE_JSON', 'INVALID_JSON'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Failed to parse JSON${fieldName ? ` for field \"${fieldName}\"` : ''}: ${error instanceof Error ? error.message : 'Unknown error'}`,\n details,\n },\n error,\n );\n }\n }\n\n private parseRow(row: any): StorageAgentType {\n return {\n id: row.id as string,\n status: row.status as 'draft' | 'published' | 'archived',\n activeVersionId: row.activeVersionId as string | undefined,\n authorId: row.authorId as string | undefined,\n metadata: this.parseJson(row.metadata, 'metadata'),\n createdAt: row.createdAtZ || row.createdAt,\n updatedAt: row.updatedAtZ || row.updatedAt,\n };\n }\n\n async getById(id: string): Promise<StorageAgentType | null> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENTS, schemaName: getSchemaName(this.#schema) });\n\n const result = await this.#db.client.oneOrNone(`SELECT * FROM ${tableName} WHERE id = $1`, [id]);\n\n if (!result) {\n return null;\n }\n\n return this.parseRow(result);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_AGENT_BY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: id },\n },\n error,\n );\n }\n }\n\n async create(input: { agent: StorageCreateAgentInput }): Promise<StorageAgentType> {\n const { agent } = input;\n const tableName = getTableName({ indexName: TABLE_AGENTS, schemaName: getSchemaName(this.#schema) });\n const now = new Date();\n const nowIso = now.toISOString();\n\n try {\n // 1. Create the thin agent record with status='draft' and activeVersionId=null\n await withRetry(() =>\n this.#db.client.none(\n `INSERT INTO ${tableName} (\n id, status, \"authorId\", metadata,\n \"activeVersionId\",\n \"createdAt\", \"createdAtZ\", \"updatedAt\", \"updatedAtZ\"\n ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)`,\n [\n agent.id,\n 'draft',\n agent.authorId ?? null,\n agent.metadata ? JSON.stringify(agent.metadata) : null,\n null, // activeVersionId starts as null\n nowIso,\n nowIso,\n nowIso,\n nowIso,\n ],\n ),\n );\n\n // 2. Extract config fields from the flat input\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = agent;\n\n // Create version 1 from the config\n const versionId = crypto.randomUUID();\n await this.createVersion({\n id: versionId,\n agentId: agent.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n\n // 3. Return the thin agent record\n return {\n id: agent.id,\n status: 'draft',\n activeVersionId: undefined,\n authorId: agent.authorId,\n metadata: agent.metadata,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n // Best-effort cleanup to prevent orphaned draft records\n try {\n await this.#db.client.none(\n `DELETE FROM ${tableName} WHERE id = $1 AND status = 'draft' AND \"activeVersionId\" IS NULL`,\n [agent.id],\n );\n } catch {\n // Ignore cleanup errors\n }\n\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'CREATE_AGENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: agent.id },\n },\n error,\n );\n }\n }\n\n async update(input: StorageUpdateAgentInput): Promise<StorageAgentType> {\n const { id, ...updates } = input;\n try {\n const tableName = getTableName({ indexName: TABLE_AGENTS, schemaName: getSchemaName(this.#schema) });\n\n // First, get the existing agent\n const existingAgent = await this.getById(id);\n if (!existingAgent) {\n throw new MastraError({\n id: createStorageErrorId('DSQL', 'UPDATE_AGENT', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Agent ${id} not found`,\n details: { agentId: id },\n });\n }\n\n const { authorId, activeVersionId, metadata, status } = updates;\n\n // Update metadata fields on the agent record\n const setClauses: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n if (authorId !== undefined) {\n setClauses.push(`\"authorId\" = $${paramIndex++}`);\n values.push(authorId);\n }\n\n if (activeVersionId !== undefined) {\n setClauses.push(`\"activeVersionId\" = $${paramIndex++}`);\n values.push(activeVersionId);\n }\n\n if (status !== undefined) {\n setClauses.push(`status = $${paramIndex++}`);\n values.push(status);\n }\n\n if (metadata !== undefined) {\n setClauses.push(`metadata = $${paramIndex++}`);\n values.push(JSON.stringify(metadata));\n }\n\n // Always update the updatedAt timestamp\n const now = new Date().toISOString();\n setClauses.push(`\"updatedAt\" = $${paramIndex++}`);\n values.push(now);\n setClauses.push(`\"updatedAtZ\" = $${paramIndex++}`);\n values.push(now);\n\n // Add the ID for the WHERE clause\n values.push(id);\n\n await withRetry(() =>\n this.#db.client.none(`UPDATE ${tableName} SET ${setClauses.join(', ')} WHERE id = ${paramIndex}`, values),\n );\n\n // Return the updated agent\n const updatedAgent = await this.getById(id);\n if (!updatedAgent) {\n throw new MastraError({\n id: createStorageErrorId('DSQL', 'UPDATE_AGENT', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Agent ${id} not found after update`,\n details: { agentId: id },\n });\n }\n\n return updatedAgent;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'UPDATE_AGENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: id },\n },\n error,\n );\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENTS, schemaName: getSchemaName(this.#schema) });\n\n // Delete all versions for this agent first\n await this.deleteVersionsByParentId(id);\n\n // Then delete the agent\n await this.#db.client.none(`DELETE FROM ${tableName} WHERE id = $1`, [id]);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'DELETE_AGENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: id },\n },\n error,\n );\n }\n }\n\n async list(args?: StorageListAgentsInput): Promise<StorageListAgentsOutput> {\n const { page = 0, perPage: perPageInput, orderBy, authorId, metadata, status } = args || {};\n const { field, direction } = this.parseOrderBy(orderBy);\n\n if (page < 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_AGENTS', 'INVALID_PAGE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { page },\n },\n new Error('page must be >= 0'),\n );\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n const tableName = getTableName({ indexName: TABLE_AGENTS, schemaName: getSchemaName(this.#schema) });\n\n // Build WHERE conditions\n const conditions: string[] = [];\n const queryParams: any[] = [];\n let paramIdx = 1;\n\n if (status) {\n conditions.push(`status = $${paramIdx++}`);\n queryParams.push(status);\n }\n\n if (authorId !== undefined) {\n conditions.push(`\"authorId\" = $${paramIdx++}`);\n queryParams.push(authorId);\n }\n\n // Note: Aurora DSQL stores JSONB as TEXT, so we compare as text\n if (metadata && Object.keys(metadata).length > 0) {\n conditions.push(`metadata::text = $${paramIdx++}`);\n queryParams.push(JSON.stringify(metadata));\n }\n\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n // Get total count\n const countResult = await this.#db.client.one(\n `SELECT COUNT(*) as count FROM ${tableName} ${whereClause}`,\n queryParams,\n );\n const total = parseInt(countResult.count, 10);\n\n if (total === 0) {\n return {\n agents: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n const limitValue = perPageInput === false ? total : perPage;\n\n // Fetch the actual data\n const dataResult = await this.#db.client.manyOrNone(\n `SELECT * FROM ${tableName} ${whereClause} ORDER BY \"${field}\" ${direction} LIMIT $${paramIdx++} OFFSET $${paramIdx++}`,\n [...queryParams, limitValue, offset],\n );\n\n const agents = (dataResult || []).map(row => this.parseRow(row));\n\n return {\n agents,\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_AGENTS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Agent Version Methods\n // ==========================================================================\n\n async createVersion(input: CreateVersionInput): Promise<AgentVersion> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENT_VERSIONS, schemaName: getSchemaName(this.#schema) });\n const now = new Date();\n const nowIso = now.toISOString();\n\n await withRetry(() =>\n this.#db.client.none(\n `INSERT INTO ${tableName} (\n id, \"agentId\", \"versionNumber\",\n name, description, instructions, model, tools,\n \"defaultOptions\", workflows, agents, \"integrationTools\",\n \"inputProcessors\", \"outputProcessors\", memory, scorers,\n \"mcpClients\", \"requestContextSchema\", workspace, skills, \"skillsFormat\",\n \"changedFields\", \"changeMessage\",\n \"createdAt\", \"createdAtZ\"\n ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25)`,\n [\n input.id,\n input.agentId,\n input.versionNumber,\n input.name,\n input.description ?? null,\n this.serializeInstructions(input.instructions),\n JSON.stringify(input.model),\n input.tools ? JSON.stringify(input.tools) : null,\n input.defaultOptions ? JSON.stringify(input.defaultOptions) : null,\n input.workflows ? JSON.stringify(input.workflows) : null,\n input.agents ? JSON.stringify(input.agents) : null,\n input.integrationTools ? JSON.stringify(input.integrationTools) : null,\n input.inputProcessors ? JSON.stringify(input.inputProcessors) : null,\n input.outputProcessors ? JSON.stringify(input.outputProcessors) : null,\n input.memory ? JSON.stringify(input.memory) : null,\n input.scorers ? JSON.stringify(input.scorers) : null,\n input.mcpClients ? JSON.stringify(input.mcpClients) : null,\n input.requestContextSchema ? JSON.stringify(input.requestContextSchema) : null,\n input.workspace ? JSON.stringify(input.workspace) : null,\n input.skills ? JSON.stringify(input.skills) : null,\n input.skillsFormat ?? null,\n input.changedFields ? JSON.stringify(input.changedFields) : null,\n input.changeMessage ?? null,\n nowIso,\n nowIso,\n ],\n ),\n );\n\n return {\n ...input,\n createdAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'CREATE_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { versionId: input.id, agentId: input.agentId },\n },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<AgentVersion | null> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENT_VERSIONS, schemaName: getSchemaName(this.#schema) });\n const result = await this.#db.client.oneOrNone(`SELECT * FROM ${tableName} WHERE id = $1`, [id]);\n\n if (!result) {\n return null;\n }\n\n return this.parseVersionRow(result);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { versionId: id },\n },\n error,\n );\n }\n }\n\n async getVersionByNumber(agentId: string, versionNumber: number): Promise<AgentVersion | null> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENT_VERSIONS, schemaName: getSchemaName(this.#schema) });\n const result = await this.#db.client.oneOrNone(\n `SELECT * FROM ${tableName} WHERE \"agentId\" = $1 AND \"versionNumber\" = $2`,\n [agentId, versionNumber],\n );\n\n if (!result) {\n return null;\n }\n\n return this.parseVersionRow(result);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_VERSION_BY_NUMBER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId, versionNumber },\n },\n error,\n );\n }\n }\n\n async getLatestVersion(agentId: string): Promise<AgentVersion | null> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENT_VERSIONS, schemaName: getSchemaName(this.#schema) });\n const result = await this.#db.client.oneOrNone(\n `SELECT * FROM ${tableName} WHERE \"agentId\" = $1 ORDER BY \"versionNumber\" DESC LIMIT 1`,\n [agentId],\n );\n\n if (!result) {\n return null;\n }\n\n return this.parseVersionRow(result);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_LATEST_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId },\n },\n error,\n );\n }\n }\n\n async listVersions(input: ListVersionsInput): Promise<ListVersionsOutput> {\n const { agentId, page = 0, perPage: perPageInput, orderBy } = input;\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n const sortField = orderBy?.field || 'versionNumber';\n const sortDirection = orderBy?.direction || 'DESC';\n\n try {\n const tableName = getTableName({ indexName: TABLE_AGENT_VERSIONS, schemaName: getSchemaName(this.#schema) });\n\n const countResult = await this.#db.client.one(`SELECT COUNT(*) as count FROM ${tableName} WHERE \"agentId\" = $1`, [\n agentId,\n ]);\n const total = parseInt(countResult.count, 10);\n\n if (total === 0) {\n return {\n versions: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.#db.client.manyOrNone(\n `SELECT * FROM ${tableName} WHERE \"agentId\" = $1 ORDER BY \"${sortField}\" ${sortDirection} LIMIT $2 OFFSET $3`,\n [agentId, limitValue, offset],\n );\n\n const versions = (rows || []).map(row => this.parseVersionRow(row));\n\n return {\n versions,\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId },\n },\n error,\n );\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENT_VERSIONS, schemaName: getSchemaName(this.#schema) });\n await this.#db.client.none(`DELETE FROM ${tableName} WHERE id = $1`, [id]);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'DELETE_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { versionId: id },\n },\n error,\n );\n }\n }\n\n async deleteVersionsByParentId(agentId: string): Promise<void> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENT_VERSIONS, schemaName: getSchemaName(this.#schema) });\n await this.#db.client.none(`DELETE FROM ${tableName} WHERE \"agentId\" = $1`, [agentId]);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'DELETE_VERSIONS_BY_PARENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId },\n },\n error,\n );\n }\n }\n\n async countVersions(agentId: string): Promise<number> {\n try {\n const tableName = getTableName({ indexName: TABLE_AGENT_VERSIONS, schemaName: getSchemaName(this.#schema) });\n const result = await this.#db.client.one(`SELECT COUNT(*) as count FROM ${tableName} WHERE \"agentId\" = $1`, [\n agentId,\n ]);\n return parseInt(result.count, 10);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'COUNT_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId },\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Private Helpers\n // ==========================================================================\n\n private serializeInstructions(instructions: string | AgentInstructionBlock[] | undefined | null): string | undefined {\n if (instructions == null) return undefined;\n return Array.isArray(instructions) ? JSON.stringify(instructions) : instructions;\n }\n\n private deserializeInstructions(raw: string | null | undefined): string | AgentInstructionBlock[] {\n if (!raw) return '';\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) return parsed as AgentInstructionBlock[];\n } catch {\n // Not JSON — plain string\n }\n return raw;\n }\n\n private parseVersionRow(row: any): AgentVersion {\n return {\n id: row.id as string,\n agentId: row.agentId as string,\n versionNumber: row.versionNumber as number,\n name: row.name as string,\n description: row.description as string | undefined,\n instructions: this.deserializeInstructions(row.instructions as string),\n model: this.parseJson(row.model, 'model'),\n tools: this.parseJson(row.tools, 'tools'),\n defaultOptions: this.parseJson(row.defaultOptions, 'defaultOptions'),\n workflows: this.parseJson(row.workflows, 'workflows'),\n agents: this.parseJson(row.agents, 'agents'),\n integrationTools: this.parseJson(row.integrationTools, 'integrationTools'),\n inputProcessors: this.parseJson(row.inputProcessors, 'inputProcessors'),\n outputProcessors: this.parseJson(row.outputProcessors, 'outputProcessors'),\n memory: this.parseJson(row.memory, 'memory'),\n scorers: this.parseJson(row.scorers, 'scorers'),\n mcpClients: this.parseJson(row.mcpClients, 'mcpClients'),\n requestContextSchema: this.parseJson(row.requestContextSchema, 'requestContextSchema'),\n workspace: this.parseJson(row.workspace, 'workspace'),\n skills: this.parseJson(row.skills, 'skills'),\n skillsFormat: row.skillsFormat as 'xml' | 'json' | 'markdown' | undefined,\n changedFields: this.parseJson(row.changedFields, 'changedFields'),\n changeMessage: row.changeMessage as string | undefined,\n createdAt: row.createdAtZ || row.createdAt,\n };\n }\n}\n","import { MessageList } from '@mastra/core/agent';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { MastraMessageV1, MastraDBMessage, StorageThreadType } from '@mastra/core/memory';\nimport {\n MemoryStorage,\n normalizePerPage,\n calculatePagination,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_THREADS,\n TABLE_SCHEMAS,\n createStorageErrorId,\n} from '@mastra/core/storage';\nimport type {\n StorageResourceType,\n StorageListMessagesInput,\n StorageListMessagesOutput,\n StorageListThreadsInput,\n StorageListThreadsOutput,\n CreateIndexOptions,\n} from '@mastra/core/storage';\nimport { withRetry } from '../../../shared/retry';\nimport { DsqlDB, resolveDsqlConfig } from '../../db';\nimport type { DsqlDomainConfig } from '../../db';\nimport { getTableName, getSchemaName } from '../utils';\n\n// Database row type that includes timezone-aware columns\ntype MessageRowFromDB = {\n id: string;\n content: string | any;\n role: string;\n type?: string;\n createdAt: Date | string;\n createdAtZ?: Date | string;\n threadId: string;\n resourceId: string;\n};\n\n/**\n * Generate SQL placeholder string for IN clauses.\n * @param count - Number of placeholders to generate\n * @param startIndex - Starting index for placeholders (default: 1)\n * @returns Comma-separated placeholder string, e.g. \"$1, $2, $3\"\n */\nfunction inPlaceholders(count: number, startIndex = 1): string {\n return Array.from({ length: count }, (_, i) => `$${i + startIndex}`).join(', ');\n}\nexport class MemoryDSQL extends MemoryStorage {\n #db: DsqlDB;\n #schema: string;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES] as const;\n\n constructor(config: DsqlDomainConfig) {\n super();\n const { client, schemaName, skipDefaultIndexes, indexes } = resolveDsqlConfig(config);\n this.#db = new DsqlDB({ client, schemaName, skipDefaultIndexes });\n this.#schema = schemaName || 'public';\n this.#skipDefaultIndexes = skipDefaultIndexes;\n // Filter indexes to only those for tables managed by this domain\n this.#indexes = indexes?.filter(idx => (MemoryDSQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n async init(): Promise<void> {\n await this.#db.createTable({ tableName: TABLE_THREADS, schema: TABLE_SCHEMAS[TABLE_THREADS] });\n await this.#db.createTable({ tableName: TABLE_MESSAGES, schema: TABLE_SCHEMAS[TABLE_MESSAGES] });\n await this.#db.createTable({ tableName: TABLE_RESOURCES, schema: TABLE_SCHEMAS[TABLE_RESOURCES] });\n await this.#db.alterTable({\n tableName: TABLE_MESSAGES,\n schema: TABLE_SCHEMAS[TABLE_MESSAGES],\n ifNotExists: ['resourceId'],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n /**\n * Returns default index definitions for the memory domain tables.\n * Note: Aurora DSQL does not support ASC/DESC in index columns.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n const schemaPrefix = this.#schema !== 'public' ? `${this.#schema}_` : '';\n return [\n {\n name: `${schemaPrefix}mastra_threads_resourceid_createdat_idx`,\n table: TABLE_THREADS,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: `${schemaPrefix}mastra_messages_thread_id_createdat_idx`,\n table: TABLE_MESSAGES,\n columns: ['thread_id', 'createdAt'],\n },\n ];\n }\n\n /**\n * Creates default indexes for optimal query performance.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) {\n return;\n }\n\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n try {\n await this.#db.createIndex(indexDef);\n } catch (error) {\n // Log but continue - indexes are performance optimizations\n this.logger?.warn?.(`Failed to create index ${indexDef.name}:`, error);\n }\n }\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) {\n return;\n }\n\n for (const indexDef of this.#indexes) {\n try {\n await this.#db.createIndex(indexDef);\n } catch (error) {\n // Log but continue - indexes are performance optimizations\n this.logger?.warn?.(`Failed to create custom index ${indexDef.name}:`, error);\n }\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_MESSAGES });\n await this.#db.clearTable({ tableName: TABLE_THREADS });\n await this.#db.clearTable({ tableName: TABLE_RESOURCES });\n }\n\n /**\n * Normalizes message row from database by applying createdAtZ fallback\n */\n private normalizeMessageRow(row: MessageRowFromDB): Omit<MessageRowFromDB, 'createdAtZ'> {\n return {\n id: row.id,\n content: row.content,\n role: row.role,\n type: row.type,\n createdAt: row.createdAtZ || row.createdAt,\n threadId: row.threadId,\n resourceId: row.resourceId,\n };\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n try {\n const tableName = getTableName({ indexName: TABLE_THREADS, schemaName: getSchemaName(this.#schema) });\n\n const thread = await this.#db.client.oneOrNone<StorageThreadType & { createdAtZ: Date; updatedAtZ: Date }>(\n `SELECT * FROM ${tableName} WHERE id = $1`,\n [threadId],\n );\n\n if (!thread) {\n return null;\n }\n\n return {\n id: thread.id,\n resourceId: thread.resourceId,\n title: thread.title,\n metadata: typeof thread.metadata === 'string' ? JSON.parse(thread.metadata) : thread.metadata,\n createdAt: thread.createdAtZ || thread.createdAt,\n updatedAt: thread.updatedAtZ || thread.updatedAt,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_THREAD_BY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n },\n },\n error,\n );\n }\n }\n\n public async listThreads(args: StorageListThreadsInput): Promise<StorageListThreadsOutput> {\n const { page = 0, perPage: perPageInput, orderBy, filter } = args;\n\n try {\n this.validatePaginationInput(page, perPageInput ?? 100);\n } catch (error) {\n throw new MastraError({\n id: createStorageErrorId('DSQL', 'LIST_THREADS', 'INVALID_PAGE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: error instanceof Error ? error.message : 'Invalid pagination parameters',\n details: { page, ...(perPageInput !== undefined && { perPage: perPageInput }) },\n });\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n\n try {\n this.validateMetadataKeys(filter?.metadata);\n } catch (error) {\n throw new MastraError({\n id: createStorageErrorId('DSQL', 'LIST_THREADS', 'INVALID_METADATA_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: error instanceof Error ? error.message : 'Invalid metadata key',\n details: { metadataKeys: filter?.metadata ? Object.keys(filter.metadata).join(', ') : '' },\n });\n }\n\n const { field, direction } = this.parseOrderBy(orderBy);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n const tableName = getTableName({ indexName: TABLE_THREADS, schemaName: getSchemaName(this.#schema) });\n const whereClauses: string[] = [];\n const queryParams: any[] = [];\n let paramIndex = 1;\n\n if (filter?.resourceId) {\n whereClauses.push(`\"resourceId\" = ${paramIndex}`);\n queryParams.push(filter.resourceId);\n paramIndex++;\n }\n\n // Aurora DSQL stores JSONB as TEXT, so cast to jsonb for containment operator\n if (filter?.metadata && Object.keys(filter.metadata).length > 0) {\n for (const [key, value] of Object.entries(filter.metadata)) {\n whereClauses.push(`metadata::jsonb @> ${paramIndex}::jsonb`);\n queryParams.push(JSON.stringify({ [key]: value }));\n paramIndex++;\n }\n }\n\n const whereClause = whereClauses.length > 0 ? `WHERE ${whereClauses.join(' AND ')}` : '';\n const baseQuery = `FROM ${tableName} ${whereClause}`;\n\n const countQuery = `SELECT COUNT(*) ${baseQuery}`;\n const countResult = await this.#db.client.one(countQuery, queryParams);\n const total = parseInt(countResult.count, 10);\n\n if (total === 0) {\n return {\n threads: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n const limitValue = perPageInput === false ? total : perPage;\n const dataQuery = `SELECT id, \"resourceId\", title, metadata, \"createdAt\", \"createdAtZ\", \"updatedAt\", \"updatedAtZ\" ${baseQuery} ORDER BY \"${field}\" ${direction} LIMIT ${paramIndex} OFFSET ${paramIndex + 1}`;\n const rows = await this.#db.client.manyOrNone<StorageThreadType & { createdAtZ: Date; updatedAtZ: Date }>(\n dataQuery,\n [...queryParams, limitValue, offset],\n );\n\n const threads: StorageThreadType[] = (rows || []).map(thread => ({\n id: thread.id,\n resourceId: thread.resourceId,\n title: thread.title,\n metadata: typeof thread.metadata === 'string' ? JSON.parse(thread.metadata) : thread.metadata,\n createdAt: thread.createdAtZ || thread.createdAt,\n updatedAt: thread.updatedAtZ || thread.updatedAt,\n }));\n\n return {\n threads,\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_THREADS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n ...(filter?.resourceId && { resourceId: filter.resourceId }),\n hasMetadataFilter: !!filter?.metadata,\n page,\n },\n },\n error,\n );\n this.logger?.error?.(mastraError.toString());\n this.logger?.trackException(mastraError);\n return {\n threads: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n const tableName = getTableName({ indexName: TABLE_THREADS, schemaName: getSchemaName(this.#schema) });\n\n await withRetry(\n async () => {\n await this.#db.client.none(\n `INSERT INTO ${tableName} (\n id,\n \"resourceId\",\n title,\n metadata,\n \"createdAt\",\n \"createdAtZ\",\n \"updatedAt\",\n \"updatedAtZ\"\n ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n ON CONFLICT (id) DO UPDATE SET\n \"resourceId\" = EXCLUDED.\"resourceId\",\n title = EXCLUDED.title,\n metadata = EXCLUDED.metadata,\n \"createdAt\" = EXCLUDED.\"createdAt\",\n \"createdAtZ\" = EXCLUDED.\"createdAtZ\",\n \"updatedAt\" = EXCLUDED.\"updatedAt\",\n \"updatedAtZ\" = EXCLUDED.\"updatedAtZ\"`,\n [\n thread.id,\n thread.resourceId,\n thread.title,\n thread.metadata ? JSON.stringify(thread.metadata) : null,\n thread.createdAt,\n thread.createdAt,\n thread.updatedAt,\n thread.updatedAt,\n ],\n );\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`saveThread retry ${attempt} for ${thread.id} after ${delay}ms: ${error.message}`);\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'SAVE_THREAD', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId: thread.id,\n },\n },\n error,\n );\n });\n\n return thread;\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n const threadTableName = getTableName({ indexName: TABLE_THREADS, schemaName: getSchemaName(this.#schema) });\n\n const { result } = await withRetry(\n async () => {\n // Get the existing thread inside retry block to ensure fresh data on retry\n const existingThread = await this.getThreadById({ threadId: id });\n if (!existingThread) {\n throw new MastraError({\n id: createStorageErrorId('DSQL', 'UPDATE_THREAD', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread ${id} not found`,\n details: {\n threadId: id,\n title,\n },\n });\n }\n\n // Merge the existing metadata with the new metadata\n const mergedMetadata = {\n ...existingThread.metadata,\n ...metadata,\n };\n\n const now = new Date().toISOString();\n const thread = await this.#db.client.one<StorageThreadType & { createdAtZ: Date; updatedAtZ: Date }>(\n `UPDATE ${threadTableName}\n SET \n title = $1,\n metadata = $2,\n \"updatedAt\" = $3::timestamp,\n \"updatedAtZ\" = $4::timestamptz\n WHERE id = $5\n RETURNING *\n `,\n [title, JSON.stringify(mergedMetadata), now, now, id],\n );\n\n return {\n id: thread.id,\n resourceId: thread.resourceId,\n title: thread.title,\n metadata: typeof thread.metadata === 'string' ? JSON.parse(thread.metadata) : thread.metadata,\n createdAt: thread.createdAtZ || thread.createdAt,\n updatedAt: thread.updatedAtZ || thread.updatedAt,\n };\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`updateThread retry ${attempt} for ${id} after ${delay}ms: ${error.message}`);\n },\n },\n ).catch(error => {\n // Re-throw MastraErrors as-is (e.g., thread not found)\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'UPDATE_THREAD', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId: id,\n title,\n },\n },\n error,\n );\n });\n\n return result;\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n const tableName = getTableName({ indexName: TABLE_MESSAGES, schemaName: getSchemaName(this.#schema) });\n const threadTableName = getTableName({ indexName: TABLE_THREADS, schemaName: getSchemaName(this.#schema) });\n\n await withRetry(\n async () => {\n await this.#db.client.tx(async t => {\n // First delete all messages associated with this thread\n await t.none(`DELETE FROM ${tableName} WHERE thread_id = $1`, [threadId]);\n\n // Then delete the thread\n await t.none(`DELETE FROM ${threadTableName} WHERE id = $1`, [threadId]);\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`deleteThread retry ${attempt} for ${threadId} after ${delay}ms: ${error.message}`);\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'DELETE_THREAD', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n },\n },\n error,\n );\n });\n }\n\n private async _getIncludedMessages({ include }: { include: StorageListMessagesInput['include'] }) {\n if (!include || include.length === 0) return null;\n\n const unionQueries: string[] = [];\n const params: any[] = [];\n let paramIdx = 1;\n const tableName = getTableName({ indexName: TABLE_MESSAGES, schemaName: getSchemaName(this.#schema) });\n\n for (const inc of include) {\n const { id, withPreviousMessages = 0, withNextMessages = 0 } = inc;\n unionQueries.push(\n `\n SELECT * FROM (\n WITH target_thread AS (\n SELECT thread_id FROM ${tableName} WHERE id = $${paramIdx}\n ),\n ordered_messages AS (\n SELECT\n *,\n ROW_NUMBER() OVER (ORDER BY \"createdAt\" ASC) as row_num\n FROM ${tableName}\n WHERE thread_id = (SELECT thread_id FROM target_thread)\n )\n SELECT\n m.id,\n m.content,\n m.role,\n m.type,\n m.\"createdAt\",\n m.\"createdAtZ\",\n m.thread_id AS \"threadId\",\n m.\"resourceId\"\n FROM ordered_messages m\n WHERE m.id = $${paramIdx}\n OR EXISTS (\n SELECT 1 FROM ordered_messages target\n WHERE target.id = $${paramIdx}\n AND (\n (m.row_num < target.row_num AND m.row_num >= target.row_num - $${paramIdx + 1})\n OR\n (m.row_num > target.row_num AND m.row_num <= target.row_num + $${paramIdx + 2})\n )\n )\n ) AS query_${paramIdx}\n `,\n );\n params.push(id, withPreviousMessages, withNextMessages);\n paramIdx += 3;\n }\n const finalQuery = unionQueries.join(' UNION ALL ') + ' ORDER BY \"createdAt\" ASC';\n const includedRows = await this.#db.client.manyOrNone<MessageRowFromDB>(finalQuery, params);\n const seen = new Set<string>();\n const dedupedRows = includedRows.filter(row => {\n if (seen.has(row.id)) return false;\n seen.add(row.id);\n return true;\n });\n return dedupedRows;\n }\n\n private parseRow(row: MessageRowFromDB): MastraDBMessage {\n const normalized = this.normalizeMessageRow(row);\n let content = normalized.content;\n try {\n content = JSON.parse(normalized.content);\n } catch {\n // use content as is if it's not JSON\n }\n return {\n id: normalized.id,\n content,\n role: normalized.role as MastraDBMessage['role'],\n createdAt: new Date(normalized.createdAt as string),\n threadId: normalized.threadId,\n resourceId: normalized.resourceId,\n ...(normalized.type && normalized.type !== 'v2' ? { type: normalized.type } : {}),\n } satisfies MastraDBMessage;\n }\n\n public async listMessagesById({ messageIds }: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messageIds.length === 0) return { messages: [] };\n const selectStatement = `SELECT id, content, role, type, \"createdAt\", \"createdAtZ\", thread_id AS \"threadId\", \"resourceId\"`;\n\n try {\n const tableName = getTableName({ indexName: TABLE_MESSAGES, schemaName: getSchemaName(this.#schema) });\n const query = `\n ${selectStatement} FROM ${tableName}\n WHERE id IN (${inPlaceholders(messageIds.length)})\n ORDER BY \"createdAt\" DESC\n `;\n const resultRows = await this.#db.client.manyOrNone<MessageRowFromDB>(query, messageIds);\n\n const list = new MessageList().add(\n resultRows.map(row => this.parseRow(row)) as (MastraMessageV1 | MastraDBMessage)[],\n 'memory',\n );\n return { messages: list.get.all.db() };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_MESSAGES_BY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n messageIds: JSON.stringify(messageIds),\n },\n },\n error,\n );\n this.logger?.error?.(mastraError.toString());\n this.logger?.trackException(mastraError);\n return { messages: [] };\n }\n }\n\n public async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;\n\n const threadIds = (Array.isArray(threadId) ? threadId : [threadId]).filter(\n (id): id is string => typeof id === 'string',\n );\n\n if (threadIds.length === 0 || threadIds.some(id => !id.trim())) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_MESSAGES', 'INVALID_THREAD_ID'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { threadId: Array.isArray(threadId) ? String(threadId) : String(threadId) },\n },\n new Error('threadId must be a non-empty string or array of non-empty strings'),\n );\n }\n\n if (page < 0) {\n throw new MastraError({\n id: createStorageErrorId('DSQL', 'LIST_MESSAGES', 'INVALID_PAGE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'Page number must be non-negative',\n details: {\n threadId: Array.isArray(threadId) ? threadId.join(',') : threadId,\n page,\n },\n });\n }\n\n const perPage = normalizePerPage(perPageInput, 40);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n const { field, direction } = this.parseOrderBy(orderBy, 'ASC');\n const orderByStatement = `ORDER BY \"${field}\" ${direction}`;\n\n const selectStatement = `SELECT id, content, role, type, \"createdAt\", \"createdAtZ\", thread_id AS \"threadId\", \"resourceId\"`;\n const tableName = getTableName({ indexName: TABLE_MESSAGES, schemaName: getSchemaName(this.#schema) });\n\n const conditions: string[] = [`thread_id IN (${inPlaceholders(threadIds.length)})`];\n const queryParams: any[] = [...threadIds];\n let paramIndex = threadIds.length + 1;\n\n if (resourceId) {\n conditions.push(`\"resourceId\" = $${paramIndex++}`);\n queryParams.push(resourceId);\n }\n\n if (filter?.dateRange?.start) {\n conditions.push(`\"createdAtZ\" >= $${paramIndex++}::timestamptz`);\n queryParams.push(filter.dateRange.start);\n }\n\n if (filter?.dateRange?.end) {\n conditions.push(`\"createdAtZ\" <= $${paramIndex++}::timestamptz`);\n queryParams.push(filter.dateRange.end);\n }\n\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n const countQuery = `SELECT COUNT(*) FROM ${tableName} ${whereClause}`;\n const countResult = await this.#db.client.one(countQuery, queryParams);\n const total = parseInt(countResult.count, 10);\n\n const limitValue = perPageInput === false ? total : perPage;\n const dataQuery = `${selectStatement} FROM ${tableName} ${whereClause} ${orderByStatement} LIMIT $${paramIndex++} OFFSET $${paramIndex++}`;\n const rows = await this.#db.client.manyOrNone<MessageRowFromDB>(dataQuery, [...queryParams, limitValue, offset]);\n const messages: MessageRowFromDB[] = [...(rows || [])];\n\n if (total === 0 && messages.length === 0 && (!include || include.length === 0)) {\n return {\n messages: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n const messageIds = new Set(messages.map(m => m.id));\n if (include && include.length > 0) {\n const includeMessages = await this._getIncludedMessages({ include });\n if (includeMessages) {\n for (const includeMsg of includeMessages) {\n if (!messageIds.has(includeMsg.id)) {\n messages.push(includeMsg);\n messageIds.add(includeMsg.id);\n }\n }\n }\n }\n\n const messagesWithParsedContent = messages.map(row => this.parseRow(row));\n\n const list = new MessageList().add(messagesWithParsedContent, 'memory');\n let finalMessages = list.get.all.db();\n\n finalMessages = finalMessages.sort((a, b) => {\n const aValue = field === 'createdAt' ? new Date(a.createdAt).getTime() : (a as any)[field];\n const bValue = field === 'createdAt' ? new Date(b.createdAt).getTime() : (b as any)[field];\n\n if (aValue == null && bValue == null) return a.id.localeCompare(b.id);\n if (aValue == null) return 1;\n if (bValue == null) return -1;\n\n if (aValue === bValue) {\n return a.id.localeCompare(b.id);\n }\n\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n\n const threadIdSet = new Set(threadIds);\n const returnedThreadMessageIds = new Set(\n finalMessages.filter(m => m.threadId && threadIdSet.has(m.threadId)).map(m => m.id),\n );\n const allThreadMessagesReturned = returnedThreadMessageIds.size >= total;\n const hasMore = perPageInput !== false && !allThreadMessagesReturned && offset + perPage < total;\n\n return {\n messages: finalMessages,\n total,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_MESSAGES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId: Array.isArray(threadId) ? threadId.join(',') : threadId,\n resourceId: resourceId ?? '',\n },\n },\n error,\n );\n this.logger?.error?.(mastraError.toString());\n this.logger?.trackException(mastraError);\n return {\n messages: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n }\n\n async saveMessages({ messages }: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messages.length === 0) return { messages: [] };\n\n const threadId = messages[0]?.threadId;\n if (!threadId) {\n throw new MastraError({\n id: createStorageErrorId('DSQL', 'SAVE_MESSAGES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread ID is required`,\n });\n }\n\n const thread = await this.getThreadById({ threadId });\n if (!thread) {\n throw new MastraError({\n id: createStorageErrorId('DSQL', 'SAVE_MESSAGES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread ${threadId} not found`,\n details: {\n threadId,\n },\n });\n }\n\n const tableName = getTableName({ indexName: TABLE_MESSAGES, schemaName: getSchemaName(this.#schema) });\n const threadTableName = getTableName({ indexName: TABLE_THREADS, schemaName: getSchemaName(this.#schema) });\n\n await withRetry(\n async () => {\n await this.#db.client.tx(async t => {\n const messageInserts = messages.map(message => {\n if (!message.threadId) {\n throw new Error(\n `Expected to find a threadId for message, but couldn't find one. An unexpected error has occurred.`,\n );\n }\n if (!message.resourceId) {\n throw new Error(\n `Expected to find a resourceId for message, but couldn't find one. An unexpected error has occurred.`,\n );\n }\n const createdAtIso = message.createdAt\n ? new Date(message.createdAt).toISOString()\n : new Date().toISOString();\n return t.none(\n `INSERT INTO ${tableName} (id, thread_id, content, \"createdAt\", \"createdAtZ\", role, type, \"resourceId\") \n VALUES ($1, $2, $3, $4::timestamp, $5::timestamptz, $6, $7, $8)\n ON CONFLICT (id) DO UPDATE SET\n thread_id = EXCLUDED.thread_id,\n content = EXCLUDED.content,\n role = EXCLUDED.role,\n type = EXCLUDED.type,\n \"resourceId\" = EXCLUDED.\"resourceId\"`,\n [\n message.id,\n message.threadId,\n typeof message.content === 'string' ? message.content : JSON.stringify(message.content),\n createdAtIso,\n createdAtIso,\n message.role,\n message.type || 'v2',\n message.resourceId,\n ],\n );\n });\n\n const nowIso = new Date().toISOString();\n const threadUpdate = t.none(\n `UPDATE ${threadTableName} \n SET \n \"updatedAt\" = $1::timestamp,\n \"updatedAtZ\" = $2::timestamptz\n WHERE id = $3\n `,\n [nowIso, nowIso, threadId],\n );\n\n await Promise.all([...messageInserts, threadUpdate]);\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `saveMessages retry ${attempt} for thread ${threadId} after ${delay}ms: ${error.message}`,\n );\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'SAVE_MESSAGES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n },\n },\n error,\n );\n });\n\n const messagesWithParsedContent = messages.map(message => {\n if (typeof message.content === 'string') {\n try {\n return { ...message, content: JSON.parse(message.content) };\n } catch {\n return message;\n }\n }\n return message;\n });\n\n const list = new MessageList().add(messagesWithParsedContent as (MastraMessageV1 | MastraDBMessage)[], 'memory');\n return { messages: list.get.all.db() };\n }\n\n async updateMessages({\n messages,\n }: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n content?: {\n metadata?: MastraMessageContentV2['metadata'];\n content?: MastraMessageContentV2['content'];\n };\n })[];\n }): Promise<MastraDBMessage[]> {\n if (messages.length === 0) {\n return [];\n }\n\n const messageIds = messages.map(m => m.id);\n\n const selectQuery = `SELECT id, content, role, type, \"createdAt\", \"createdAtZ\", thread_id AS \"threadId\", \"resourceId\" FROM ${getTableName({ indexName: TABLE_MESSAGES, schemaName: getSchemaName(this.#schema) })} WHERE id IN (${inPlaceholders(messageIds.length)})`;\n\n const existingMessagesDb = await this.#db.client.manyOrNone(selectQuery, messageIds);\n\n if (existingMessagesDb.length === 0) {\n return [];\n }\n\n const existingMessages: MastraDBMessage[] = existingMessagesDb.map(msg => {\n if (typeof msg.content === 'string') {\n try {\n msg.content = JSON.parse(msg.content);\n } catch {\n // ignore if not valid json\n }\n }\n return msg as MastraDBMessage;\n });\n\n const threadIdsToUpdate = new Set<string>();\n\n await withRetry(\n async () => {\n await this.#db.client.tx(async t => {\n const queries = [];\n const columnMapping: Record<string, string> = {\n threadId: 'thread_id',\n };\n\n for (const existingMessage of existingMessages) {\n const updatePayload = messages.find(m => m.id === existingMessage.id);\n if (!updatePayload) continue;\n\n const { id, ...fieldsToUpdate } = updatePayload;\n if (Object.keys(fieldsToUpdate).length === 0) continue;\n\n threadIdsToUpdate.add(existingMessage.threadId!);\n if (updatePayload.threadId && updatePayload.threadId !== existingMessage.threadId) {\n threadIdsToUpdate.add(updatePayload.threadId);\n }\n\n const setClauses: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n const updatableFields = { ...fieldsToUpdate };\n\n if (updatableFields.content) {\n const newContent = {\n ...existingMessage.content,\n ...updatableFields.content,\n ...(existingMessage.content?.metadata && updatableFields.content.metadata\n ? {\n metadata: {\n ...existingMessage.content.metadata,\n ...updatableFields.content.metadata,\n },\n }\n : {}),\n };\n setClauses.push(`content = $${paramIndex++}`);\n values.push(newContent);\n delete updatableFields.content;\n }\n\n for (const key in updatableFields) {\n if (Object.prototype.hasOwnProperty.call(updatableFields, key)) {\n const dbColumn = columnMapping[key] || key;\n setClauses.push(`\"${dbColumn}\" = $${paramIndex++}`);\n values.push(updatableFields[key as keyof typeof updatableFields]);\n }\n }\n\n if (setClauses.length > 0) {\n values.push(id);\n const sql = `UPDATE ${getTableName({ indexName: TABLE_MESSAGES, schemaName: getSchemaName(this.#schema) })} SET ${setClauses.join(', ')} WHERE id = $${paramIndex}`;\n queries.push(t.none(sql, values));\n }\n }\n\n if (threadIdsToUpdate.size > 0) {\n const threadIds = Array.from(threadIdsToUpdate);\n queries.push(\n t.none(\n `UPDATE ${getTableName({ indexName: TABLE_THREADS, schemaName: getSchemaName(this.#schema) })} SET \"updatedAt\" = NOW(), \"updatedAtZ\" = NOW() WHERE id IN (${inPlaceholders(threadIds.length)})`,\n threadIds,\n ),\n );\n }\n\n if (queries.length > 0) {\n await t.batch(queries);\n }\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `updateMessages retry ${attempt} for ${messageIds.length} messages after ${delay}ms: ${error.message}`,\n );\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'UPDATE_MESSAGES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n messageIdsLength: messageIds.length,\n },\n },\n error,\n );\n });\n\n // Re-fetch to return the fully updated messages\n const updatedMessages = await this.#db.client.manyOrNone<MessageRowFromDB>(selectQuery, messageIds);\n\n return (updatedMessages || []).map((row: MessageRowFromDB) => {\n const message = this.normalizeMessageRow(row);\n if (typeof message.content === 'string') {\n try {\n return { ...message, content: JSON.parse(message.content) } as MastraDBMessage;\n } catch {\n /* ignore */\n }\n }\n return message as MastraDBMessage;\n });\n }\n\n async deleteMessages(messageIds: string[]): Promise<void> {\n if (!messageIds || messageIds.length === 0) {\n return;\n }\n\n const messageTableName = getTableName({ indexName: TABLE_MESSAGES, schemaName: getSchemaName(this.#schema) });\n const threadTableName = getTableName({ indexName: TABLE_THREADS, schemaName: getSchemaName(this.#schema) });\n\n await withRetry(\n async () => {\n await this.#db.client.tx(async t => {\n const placeholders = messageIds.map((_, idx) => `$${idx + 1}`).join(',');\n const messages = await t.manyOrNone(\n `SELECT DISTINCT thread_id FROM ${messageTableName} WHERE id IN (${placeholders})`,\n messageIds,\n );\n\n const threadIds = messages?.map(msg => msg.thread_id).filter(Boolean) || [];\n\n await t.none(`DELETE FROM ${messageTableName} WHERE id IN (${placeholders})`, messageIds);\n\n if (threadIds.length > 0) {\n const updatePromises = threadIds.map(threadId =>\n t.none(`UPDATE ${threadTableName} SET \"updatedAt\" = NOW(), \"updatedAtZ\" = NOW() WHERE id = $1`, [\n threadId,\n ]),\n );\n await Promise.all(updatePromises);\n }\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `deleteMessages retry ${attempt} for ${messageIds.length} messages after ${delay}ms: ${error.message}`,\n );\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'DELETE_MESSAGES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { messageIds: messageIds.join(', ') },\n },\n error,\n );\n });\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n try {\n const tableName = getTableName({ indexName: TABLE_RESOURCES, schemaName: getSchemaName(this.#schema) });\n const result = await this.#db.client.oneOrNone<StorageResourceType & { createdAtZ: Date; updatedAtZ: Date }>(\n `SELECT * FROM ${tableName} WHERE id = $1`,\n [resourceId],\n );\n\n if (!result) {\n return null;\n }\n\n return {\n id: result.id,\n createdAt: result.createdAtZ || result.createdAt,\n updatedAt: result.updatedAtZ || result.updatedAt,\n workingMemory: result.workingMemory,\n metadata: typeof result.metadata === 'string' ? JSON.parse(result.metadata) : result.metadata,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_RESOURCE_BY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { resourceId },\n },\n error,\n );\n }\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n await this.#db.insert({\n tableName: TABLE_RESOURCES,\n record: {\n ...resource,\n metadata: JSON.stringify(resource.metadata),\n },\n });\n\n return resource;\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n const tableName = getTableName({ indexName: TABLE_RESOURCES, schemaName: getSchemaName(this.#schema) });\n\n const { result } = await withRetry(\n async () => {\n const existingResource = await this.getResourceById({ resourceId });\n\n if (!existingResource) {\n const newResource: StorageResourceType = {\n id: resourceId,\n workingMemory,\n metadata: metadata || {},\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n return this.saveResource({ resource: newResource });\n }\n\n const updatedResource = {\n ...existingResource,\n workingMemory: workingMemory !== undefined ? workingMemory : existingResource.workingMemory,\n metadata: {\n ...existingResource.metadata,\n ...metadata,\n },\n updatedAt: new Date(),\n };\n\n const updates: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n if (workingMemory !== undefined) {\n updates.push(`\"workingMemory\" = $${paramIndex}`);\n values.push(workingMemory);\n paramIndex++;\n }\n\n if (metadata) {\n updates.push(`metadata = $${paramIndex}`);\n values.push(JSON.stringify(updatedResource.metadata));\n paramIndex++;\n }\n\n updates.push(`\"updatedAt\" = $${paramIndex}`);\n values.push(updatedResource.updatedAt.toISOString());\n paramIndex++;\n updates.push(`\"updatedAtZ\" = $${paramIndex}`);\n values.push(updatedResource.updatedAt.toISOString());\n paramIndex++;\n\n values.push(resourceId);\n\n await this.#db.client.none(`UPDATE ${tableName} SET ${updates.join(', ')} WHERE id = $${paramIndex}`, values);\n\n return updatedResource;\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(`updateResource retry ${attempt} for ${resourceId} after ${delay}ms: ${error.message}`);\n },\n },\n ).catch(error => {\n // Re-throw MastraErrors as-is\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'UPDATE_RESOURCE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n resourceId,\n },\n },\n error,\n );\n });\n\n return result;\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n createStorageErrorId,\n listTracesArgsSchema,\n ObservabilityStorage,\n TABLE_SCHEMAS,\n TABLE_SPANS,\n toTraceSpans,\n TraceStatus,\n} from '@mastra/core/storage';\nimport type {\n SpanRecord,\n TracingStorageStrategy,\n ListTracesArgs,\n ListTracesResponse,\n UpdateSpanArgs,\n BatchDeleteTracesArgs,\n BatchUpdateSpansArgs,\n BatchCreateSpansArgs,\n CreateSpanArgs,\n GetSpanArgs,\n GetSpanResponse,\n GetRootSpanArgs,\n GetRootSpanResponse,\n GetTraceArgs,\n GetTraceResponse,\n CreateIndexOptions,\n} from '@mastra/core/storage';\nimport { splitIntoBatches, DEFAULT_MAX_ROWS_PER_BATCH } from '../../../shared/batch';\nimport { withRetry } from '../../../shared/retry';\nimport { DsqlDB, resolveDsqlConfig } from '../../db';\nimport type { DsqlDomainConfig } from '../../db';\nimport { transformFromSqlRow, getTableName, getSchemaName } from '../utils';\n\nexport class ObservabilityDSQL extends ObservabilityStorage {\n #db: DsqlDB;\n #schema: string;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_SPANS] as const;\n\n constructor(config: DsqlDomainConfig) {\n super();\n const { client, schemaName, skipDefaultIndexes, indexes } = resolveDsqlConfig(config);\n this.#db = new DsqlDB({ client, schemaName, skipDefaultIndexes });\n this.#schema = schemaName || 'public';\n this.#skipDefaultIndexes = skipDefaultIndexes;\n // Filter indexes to only those for tables managed by this domain\n this.#indexes = indexes?.filter(idx => (ObservabilityDSQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n async init(): Promise<void> {\n await this.#db.createTable({ tableName: TABLE_SPANS, schema: TABLE_SCHEMAS[TABLE_SPANS] });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n /**\n * Returns default index definitions for the observability domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n const schemaPrefix = this.#schema !== 'public' ? `${this.#schema}_` : '';\n return [\n {\n name: `${schemaPrefix}mastra_ai_spans_traceid_startedat_idx`,\n table: TABLE_SPANS,\n columns: ['traceId', 'startedAt'],\n },\n {\n name: `${schemaPrefix}mastra_ai_spans_parentspanid_startedat_idx`,\n table: TABLE_SPANS,\n columns: ['parentSpanId', 'startedAt'],\n },\n {\n name: `${schemaPrefix}mastra_ai_spans_name_idx`,\n table: TABLE_SPANS,\n columns: ['name'],\n },\n {\n name: `${schemaPrefix}mastra_ai_spans_spantype_startedat_idx`,\n table: TABLE_SPANS,\n columns: ['spanType', 'startedAt'],\n },\n // Entity identification indexes - common filtering patterns\n {\n name: `${schemaPrefix}mastra_ai_spans_entitytype_entityid_idx`,\n table: TABLE_SPANS,\n columns: ['entityType', 'entityId'],\n },\n {\n name: `${schemaPrefix}mastra_ai_spans_entitytype_entityname_idx`,\n table: TABLE_SPANS,\n columns: ['entityType', 'entityName'],\n },\n // Multi-tenant filtering - organizationId + userId\n {\n name: `${schemaPrefix}mastra_ai_spans_orgid_userid_idx`,\n table: TABLE_SPANS,\n columns: ['organizationId', 'userId'],\n },\n ];\n }\n\n /**\n * Creates default indexes for optimal query performance.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) {\n return;\n }\n\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n try {\n await this.#db.createIndex(indexDef);\n } catch (error) {\n // Log but continue - indexes are performance optimizations\n this.logger?.warn?.(`Failed to create index ${indexDef.name}:`, error);\n }\n }\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) {\n return;\n }\n\n for (const indexDef of this.#indexes) {\n try {\n await this.#db.createIndex(indexDef);\n } catch (error) {\n // Log but continue - indexes are performance optimizations\n this.logger?.warn?.(`Failed to create custom index ${indexDef.name}:`, error);\n }\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_SPANS });\n }\n\n public override get tracingStrategy(): {\n preferred: TracingStorageStrategy;\n supported: TracingStorageStrategy[];\n } {\n return {\n preferred: 'batch-with-updates',\n supported: ['batch-with-updates', 'insert-only'],\n };\n }\n\n async createSpan(args: CreateSpanArgs): Promise<void> {\n const { span } = args;\n try {\n const startedAt = span.startedAt instanceof Date ? span.startedAt.toISOString() : span.startedAt;\n const endedAt = span.endedAt instanceof Date ? span.endedAt.toISOString() : span.endedAt;\n const now = new Date().toISOString();\n\n const record = {\n ...span,\n startedAt,\n endedAt,\n startedAtZ: startedAt,\n endedAtZ: endedAt,\n // Aurora DSQL doesn't support triggers, so we set timestamps explicitly\n createdAt: now,\n updatedAt: now,\n };\n\n await this.#db.insert({ tableName: TABLE_SPANS, record });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'CREATE_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: {\n spanId: span.spanId,\n traceId: span.traceId,\n spanType: span.spanType,\n spanName: span.name,\n },\n },\n error,\n );\n }\n }\n\n async getSpan(args: GetSpanArgs): Promise<GetSpanResponse | null> {\n const { traceId, spanId } = args;\n try {\n const tableName = getTableName({\n indexName: TABLE_SPANS,\n schemaName: getSchemaName(this.#schema),\n });\n\n const row = await this.#db.client.oneOrNone<SpanRecord>(\n `SELECT\n \"traceId\", \"spanId\", \"parentSpanId\", \"name\",\n \"entityType\", \"entityId\", \"entityName\",\n \"userId\", \"organizationId\", \"resourceId\",\n \"runId\", \"sessionId\", \"threadId\", \"requestId\",\n \"environment\", \"source\", \"serviceName\", \"scope\",\n \"spanType\", \"attributes\", \"metadata\", \"tags\", \"links\",\n \"input\", \"output\", \"error\", \"isEvent\",\n \"startedAtZ\" as \"startedAt\", \"endedAtZ\" as \"endedAt\",\n \"createdAtZ\" as \"createdAt\", \"updatedAtZ\" as \"updatedAt\"\n FROM ${tableName}\n WHERE \"traceId\" = $1 AND \"spanId\" = $2`,\n [traceId, spanId],\n );\n\n if (!row) {\n return null;\n }\n\n return {\n span: transformFromSqlRow<SpanRecord>({\n tableName: TABLE_SPANS,\n sqlRow: row,\n }),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { traceId, spanId },\n },\n error,\n );\n }\n }\n\n async getRootSpan(args: GetRootSpanArgs): Promise<GetRootSpanResponse | null> {\n const { traceId } = args;\n try {\n const tableName = getTableName({\n indexName: TABLE_SPANS,\n schemaName: getSchemaName(this.#schema),\n });\n\n const row = await this.#db.client.oneOrNone<SpanRecord>(\n `SELECT\n \"traceId\", \"spanId\", \"parentSpanId\", \"name\",\n \"entityType\", \"entityId\", \"entityName\",\n \"userId\", \"organizationId\", \"resourceId\",\n \"runId\", \"sessionId\", \"threadId\", \"requestId\",\n \"environment\", \"source\", \"serviceName\", \"scope\",\n \"spanType\", \"attributes\", \"metadata\", \"tags\", \"links\",\n \"input\", \"output\", \"error\", \"isEvent\",\n \"startedAtZ\" as \"startedAt\", \"endedAtZ\" as \"endedAt\",\n \"createdAtZ\" as \"createdAt\", \"updatedAtZ\" as \"updatedAt\"\n FROM ${tableName}\n WHERE \"traceId\" = $1 AND \"parentSpanId\" IS NULL`,\n [traceId],\n );\n\n if (!row) {\n return null;\n }\n\n return {\n span: transformFromSqlRow<SpanRecord>({\n tableName: TABLE_SPANS,\n sqlRow: row,\n }),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_ROOT_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { traceId },\n },\n error,\n );\n }\n }\n\n async getTrace(args: GetTraceArgs): Promise<GetTraceResponse | null> {\n const { traceId } = args;\n try {\n const tableName = getTableName({\n indexName: TABLE_SPANS,\n schemaName: getSchemaName(this.#schema),\n });\n\n const spans = await this.#db.client.manyOrNone<SpanRecord>(\n `SELECT\n \"traceId\", \"spanId\", \"parentSpanId\", \"name\",\n \"entityType\", \"entityId\", \"entityName\",\n \"userId\", \"organizationId\", \"resourceId\",\n \"runId\", \"sessionId\", \"threadId\", \"requestId\",\n \"environment\", \"source\", \"serviceName\", \"scope\",\n \"spanType\", \"attributes\", \"metadata\", \"tags\", \"links\",\n \"input\", \"output\", \"error\", \"isEvent\",\n \"startedAtZ\" as \"startedAt\", \"endedAtZ\" as \"endedAt\",\n \"createdAtZ\" as \"createdAt\", \"updatedAtZ\" as \"updatedAt\"\n FROM ${tableName}\n WHERE \"traceId\" = $1\n ORDER BY \"startedAtZ\" ASC`,\n [traceId],\n );\n\n if (!spans || spans.length === 0) {\n return null;\n }\n\n return {\n traceId,\n spans: spans.map(span =>\n transformFromSqlRow<SpanRecord>({\n tableName: TABLE_SPANS,\n sqlRow: span,\n }),\n ),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_TRACE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: {\n traceId,\n },\n },\n error,\n );\n }\n }\n\n async updateSpan(args: UpdateSpanArgs): Promise<void> {\n const { traceId, spanId, updates } = args;\n try {\n const data: Record<string, any> = { ...updates };\n if (data.endedAt instanceof Date) {\n const endedAt = data.endedAt.toISOString();\n data.endedAt = endedAt;\n data.endedAtZ = endedAt;\n }\n if (data.startedAt instanceof Date) {\n const startedAt = data.startedAt.toISOString();\n data.startedAt = startedAt;\n data.startedAtZ = startedAt;\n }\n // Note: updatedAt/updatedAtZ will be set in #db.update() method\n // Aurora DSQL doesn't support triggers\n\n await this.#db.update({\n tableName: TABLE_SPANS,\n keys: { spanId, traceId },\n data,\n });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'UPDATE_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: {\n spanId,\n traceId,\n },\n },\n error,\n );\n }\n }\n\n async listTraces(args: ListTracesArgs): Promise<ListTracesResponse> {\n // Parse args through schema to apply defaults\n const { filters, pagination, orderBy } = listTracesArgsSchema.parse(args);\n const page = pagination?.page ?? 0;\n const perPage = pagination?.perPage ?? 100;\n\n const tableName = getTableName({\n indexName: TABLE_SPANS,\n schemaName: getSchemaName(this.#schema),\n });\n\n try {\n // Build WHERE clause for filters\n const conditions: string[] = ['r.\"parentSpanId\" IS NULL']; // Only root spans\n const params: any[] = [];\n let paramIndex = 1;\n\n if (filters) {\n // Date range filters\n if (filters.startedAt?.start) {\n conditions.push(`r.\"startedAtZ\" >= $${paramIndex++}`);\n params.push(filters.startedAt.start.toISOString());\n }\n if (filters.startedAt?.end) {\n conditions.push(`r.\"startedAtZ\" <= $${paramIndex++}`);\n params.push(filters.startedAt.end.toISOString());\n }\n if (filters.endedAt?.start) {\n conditions.push(`r.\"endedAtZ\" >= $${paramIndex++}`);\n params.push(filters.endedAt.start.toISOString());\n }\n if (filters.endedAt?.end) {\n conditions.push(`r.\"endedAtZ\" <= $${paramIndex++}`);\n params.push(filters.endedAt.end.toISOString());\n }\n\n // Span type filter\n if (filters.spanType !== undefined) {\n conditions.push(`r.\"spanType\" = $${paramIndex++}`);\n params.push(filters.spanType);\n }\n\n // Entity filters\n if (filters.entityType !== undefined) {\n conditions.push(`r.\"entityType\" = $${paramIndex++}`);\n params.push(filters.entityType);\n }\n if (filters.entityId !== undefined) {\n conditions.push(`r.\"entityId\" = $${paramIndex++}`);\n params.push(filters.entityId);\n }\n if (filters.entityName !== undefined) {\n conditions.push(`r.\"entityName\" = $${paramIndex++}`);\n params.push(filters.entityName);\n }\n\n // Identity & Tenancy filters\n if (filters.userId !== undefined) {\n conditions.push(`r.\"userId\" = $${paramIndex++}`);\n params.push(filters.userId);\n }\n if (filters.organizationId !== undefined) {\n conditions.push(`r.\"organizationId\" = $${paramIndex++}`);\n params.push(filters.organizationId);\n }\n if (filters.resourceId !== undefined) {\n conditions.push(`r.\"resourceId\" = $${paramIndex++}`);\n params.push(filters.resourceId);\n }\n\n // Correlation ID filters\n if (filters.runId !== undefined) {\n conditions.push(`r.\"runId\" = $${paramIndex++}`);\n params.push(filters.runId);\n }\n if (filters.sessionId !== undefined) {\n conditions.push(`r.\"sessionId\" = $${paramIndex++}`);\n params.push(filters.sessionId);\n }\n if (filters.threadId !== undefined) {\n conditions.push(`r.\"threadId\" = $${paramIndex++}`);\n params.push(filters.threadId);\n }\n if (filters.requestId !== undefined) {\n conditions.push(`r.\"requestId\" = $${paramIndex++}`);\n params.push(filters.requestId);\n }\n\n // Deployment context filters\n if (filters.environment !== undefined) {\n conditions.push(`r.\"environment\" = $${paramIndex++}`);\n params.push(filters.environment);\n }\n if (filters.source !== undefined) {\n conditions.push(`r.\"source\" = $${paramIndex++}`);\n params.push(filters.source);\n }\n if (filters.serviceName !== undefined) {\n conditions.push(`r.\"serviceName\" = $${paramIndex++}`);\n params.push(filters.serviceName);\n }\n\n // Scope filter (TEXT with JSON comparison - Aurora DSQL stores JSONB as TEXT)\n if (filters.scope != null) {\n conditions.push(`r.\"scope\"::text = $${paramIndex++}`);\n params.push(JSON.stringify(filters.scope));\n }\n\n // Metadata filter (TEXT with JSON comparison - Aurora DSQL stores JSONB as TEXT)\n if (filters.metadata != null) {\n conditions.push(`r.\"metadata\"::text = $${paramIndex++}`);\n params.push(JSON.stringify(filters.metadata));\n }\n\n // Tags filter (TEXT with JSON comparison - Aurora DSQL stores JSONB as TEXT)\n if (filters.tags != null && filters.tags.length > 0) {\n conditions.push(`r.\"tags\"::text = $${paramIndex++}`);\n params.push(JSON.stringify(filters.tags));\n }\n\n // Status filter (derived from error and endedAt)\n if (filters.status !== undefined) {\n switch (filters.status) {\n case TraceStatus.ERROR:\n conditions.push(`r.\"error\" IS NOT NULL`);\n break;\n case TraceStatus.RUNNING:\n conditions.push(`r.\"endedAtZ\" IS NULL AND r.\"error\" IS NULL`);\n break;\n case TraceStatus.SUCCESS:\n conditions.push(`r.\"endedAtZ\" IS NOT NULL AND r.\"error\" IS NULL`);\n break;\n }\n }\n\n // hasChildError filter (requires subquery)\n if (filters.hasChildError !== undefined) {\n if (filters.hasChildError) {\n conditions.push(`EXISTS (\n SELECT 1 FROM ${tableName} c\n WHERE c.\"traceId\" = r.\"traceId\" AND c.\"error\" IS NOT NULL\n )`);\n } else {\n conditions.push(`NOT EXISTS (\n SELECT 1 FROM ${tableName} c\n WHERE c.\"traceId\" = r.\"traceId\" AND c.\"error\" IS NOT NULL\n )`);\n }\n }\n }\n\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n // Build ORDER BY clause with proper NULL handling for endedAt\n // Note: Aurora DSQL does not support NULLS FIRST/LAST syntax\n const sortField = `${orderBy?.field ?? 'startedAt'}Z`;\n const sortDirection = orderBy?.direction ?? 'DESC';\n const orderClause = `ORDER BY r.\"${sortField}\" ${sortDirection}`;\n\n // Get total count\n const countResult = await this.#db.client.oneOrNone<{ count: string }>(\n `SELECT COUNT(*) FROM ${tableName} r ${whereClause}`,\n params,\n );\n const count = Number(countResult?.count ?? 0);\n\n if (count === 0) {\n return {\n pagination: {\n total: 0,\n page,\n perPage,\n hasMore: false,\n },\n spans: [],\n };\n }\n\n // Get paginated spans\n const spans = await this.#db.client.manyOrNone<SpanRecord>(\n `SELECT\n r.\"traceId\", r.\"spanId\", r.\"parentSpanId\", r.\"name\",\n r.\"entityType\", r.\"entityId\", r.\"entityName\",\n r.\"userId\", r.\"organizationId\", r.\"resourceId\",\n r.\"runId\", r.\"sessionId\", r.\"threadId\", r.\"requestId\",\n r.\"environment\", r.\"source\", r.\"serviceName\", r.\"scope\",\n r.\"spanType\", r.\"attributes\", r.\"metadata\", r.\"tags\", r.\"links\",\n r.\"input\", r.\"output\", r.\"error\", r.\"isEvent\",\n r.\"startedAtZ\" as \"startedAt\", r.\"endedAtZ\" as \"endedAt\",\n r.\"createdAtZ\" as \"createdAt\", r.\"updatedAtZ\" as \"updatedAt\"\n FROM ${tableName} r\n ${whereClause}\n ${orderClause}\n LIMIT $${paramIndex} OFFSET $${paramIndex + 1}`,\n [...params, perPage, page * perPage],\n );\n\n return {\n pagination: {\n total: count,\n page,\n perPage,\n hasMore: (page + 1) * perPage < count,\n },\n spans: toTraceSpans(\n spans.map(span =>\n transformFromSqlRow<SpanRecord>({\n tableName: TABLE_SPANS,\n sqlRow: span,\n }),\n ),\n ),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_TRACES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n }\n\n async batchCreateSpans(args: BatchCreateSpansArgs): Promise<void> {\n try {\n const now = new Date().toISOString();\n const records = args.records.map(record => {\n const startedAt = record.startedAt instanceof Date ? record.startedAt.toISOString() : record.startedAt;\n const endedAt = record.endedAt instanceof Date ? record.endedAt.toISOString() : record.endedAt;\n\n return {\n ...record,\n startedAt,\n endedAt,\n startedAtZ: startedAt,\n endedAtZ: endedAt,\n // Aurora DSQL doesn't support triggers, so we set timestamps explicitly\n createdAt: now,\n updatedAt: now,\n };\n });\n\n await this.#db.batchInsert({\n tableName: TABLE_SPANS,\n records,\n });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'BATCH_CREATE_SPANS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n }\n\n async batchUpdateSpans(args: BatchUpdateSpansArgs): Promise<void> {\n try {\n await this.#db.batchUpdate({\n tableName: TABLE_SPANS,\n updates: args.records.map(record => {\n const data: Record<string, any> = { ...record.updates };\n if (data.endedAt instanceof Date) {\n const endedAt = data.endedAt.toISOString();\n data.endedAt = endedAt;\n data.endedAtZ = endedAt;\n }\n if (data.startedAt instanceof Date) {\n const startedAt = data.startedAt.toISOString();\n data.startedAt = startedAt;\n data.startedAtZ = startedAt;\n }\n // Note: updatedAt/updatedAtZ will be set in #db.batchUpdate() method\n // Aurora DSQL doesn't support triggers\n\n return {\n keys: { spanId: record.spanId, traceId: record.traceId },\n data,\n };\n }),\n });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'BATCH_UPDATE_SPANS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n }\n\n async batchDeleteTraces(args: BatchDeleteTracesArgs): Promise<void> {\n const { batches } = splitIntoBatches(args.traceIds, { maxRows: DEFAULT_MAX_ROWS_PER_BATCH });\n\n const tableName = getTableName({\n indexName: TABLE_SPANS,\n schemaName: getSchemaName(this.#schema),\n });\n\n for (const batchTraceIds of batches) {\n const placeholders = batchTraceIds.map((_, i) => `$${i + 1}`).join(', ');\n\n await withRetry(\n async () => {\n await this.#db.client.none(`DELETE FROM ${tableName} WHERE \"traceId\" IN (${placeholders})`, batchTraceIds);\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `batchDeleteTraces retry ${attempt} for ${batchTraceIds.length} traces after ${delay}ms: ${error.message}`,\n );\n },\n },\n ).catch(error => {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'BATCH_DELETE_TRACES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n });\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { ListScoresResponse, SaveScorePayload, ScoreRowData, ScoringSource } from '@mastra/core/evals';\nimport { saveScorePayloadSchema } from '@mastra/core/evals';\nimport type { StoragePagination, CreateIndexOptions } from '@mastra/core/storage';\nimport {\n calculatePagination,\n createStorageErrorId,\n normalizePerPage,\n ScoresStorage,\n TABLE_SCORERS,\n TABLE_SCHEMAS,\n transformScoreRow as coreTransformScoreRow,\n} from '@mastra/core/storage';\nimport { DsqlDB, resolveDsqlConfig } from '../../db';\nimport type { DsqlDomainConfig } from '../../db';\nimport { getTableName, getSchemaName } from '../utils';\n\n/**\n * DSQL-specific score row transformation.\n * Uses Z-suffix timestamps (createdAtZ, updatedAtZ) when available.\n */\nfunction transformScoreRow(row: Record<string, any>): ScoreRowData {\n return coreTransformScoreRow(row, {\n preferredTimestampFields: {\n createdAt: 'createdAtZ',\n updatedAt: 'updatedAtZ',\n },\n });\n}\n\nexport class ScoresDSQL extends ScoresStorage {\n #db: DsqlDB;\n #schema: string;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_SCORERS] as const;\n\n constructor(config: DsqlDomainConfig) {\n super();\n const { client, schemaName, skipDefaultIndexes, indexes } = resolveDsqlConfig(config);\n this.#db = new DsqlDB({ client, schemaName, skipDefaultIndexes });\n this.#schema = schemaName || 'public';\n this.#skipDefaultIndexes = skipDefaultIndexes;\n // Filter indexes to only those for tables managed by this domain\n this.#indexes = indexes?.filter(idx => (ScoresDSQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n async init(): Promise<void> {\n await this.#db.createTable({ tableName: TABLE_SCORERS, schema: TABLE_SCHEMAS[TABLE_SCORERS] });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n /**\n * Returns default index definitions for the scores domain tables.\n * Note: Aurora DSQL does not support ASC/DESC in index columns.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n const schemaPrefix = this.#schema !== 'public' ? `${this.#schema}_` : '';\n return [\n {\n name: `${schemaPrefix}mastra_scores_trace_id_span_id_created_at_idx`,\n table: TABLE_SCORERS,\n columns: ['traceId', 'spanId', 'createdAt'],\n },\n ];\n }\n\n /**\n * Creates default indexes for optimal query performance.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) {\n return;\n }\n\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n try {\n await this.#db.createIndex(indexDef);\n } catch (error) {\n // Log but continue - indexes are performance optimizations\n this.logger?.warn?.(`Failed to create index ${indexDef.name}:`, error);\n }\n }\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) {\n return;\n }\n\n for (const indexDef of this.#indexes) {\n try {\n await this.#db.createIndex(indexDef);\n } catch (error) {\n // Log but continue - indexes are performance optimizations\n this.logger?.warn?.(`Failed to create custom index ${indexDef.name}:`, error);\n }\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_SCORERS });\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n try {\n const result = await this.#db.client.oneOrNone<ScoreRowData>(\n `SELECT * FROM ${getTableName({ indexName: TABLE_SCORERS, schemaName: getSchemaName(this.#schema) })} WHERE id = $1`,\n [id],\n );\n\n return result ? transformScoreRow(result) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_SCORE_BY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n }): Promise<ListScoresResponse> {\n try {\n const conditions: string[] = [`\"scorerId\" = $1`];\n const queryParams: any[] = [scorerId];\n let paramIndex = 2;\n\n if (entityId) {\n conditions.push(`\"entityId\" = $${paramIndex++}`);\n queryParams.push(entityId);\n }\n\n if (entityType) {\n conditions.push(`\"entityType\" = $${paramIndex++}`);\n queryParams.push(entityType);\n }\n\n if (source) {\n conditions.push(`\"source\" = $${paramIndex++}`);\n queryParams.push(source);\n }\n\n const whereClause = conditions.join(' AND ');\n\n const total = await this.#db.client.oneOrNone<{ count: string }>(\n `SELECT COUNT(*) FROM ${getTableName({ indexName: TABLE_SCORERS, schemaName: getSchemaName(this.#schema) })} WHERE ${whereClause}`,\n queryParams,\n );\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n if (total?.count === '0' || !total?.count) {\n return {\n pagination: {\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n },\n scores: [],\n };\n }\n const limitValue = perPageInput === false ? Number(total?.count) : perPage;\n const end = perPageInput === false ? Number(total?.count) : start + perPage;\n const result = await this.#db.client.manyOrNone<ScoreRowData>(\n `SELECT * FROM ${getTableName({ indexName: TABLE_SCORERS, schemaName: getSchemaName(this.#schema) })} WHERE ${whereClause} ORDER BY \"createdAt\" DESC LIMIT $${paramIndex++} OFFSET $${paramIndex++}`,\n [...queryParams, limitValue, start],\n );\n\n return {\n pagination: {\n total: Number(total?.count) || 0,\n page,\n perPage: perPageForResponse,\n hasMore: end < Number(total?.count),\n },\n scores: result.map(transformScoreRow),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_SCORES_BY_SCORER_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async saveScore(score: SaveScorePayload): Promise<{ score: ScoreRowData }> {\n let parsedScore: SaveScorePayload;\n try {\n parsedScore = saveScorePayloadSchema.parse(score);\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'SAVE_SCORE', 'VALIDATION_FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: {\n scorer: typeof score.scorer?.id === 'string' ? score.scorer.id : String(score.scorer?.id ?? 'unknown'),\n entityId: score.entityId ?? 'unknown',\n entityType: score.entityType ?? 'unknown',\n traceId: score.traceId ?? '',\n spanId: score.spanId ?? '',\n },\n },\n error,\n );\n }\n\n try {\n const id = crypto.randomUUID();\n const now = new Date();\n\n const {\n scorer,\n preprocessStepResult,\n analyzeStepResult,\n metadata,\n input,\n output,\n additionalContext,\n requestContext,\n entity,\n ...rest\n } = parsedScore;\n\n await this.#db.insert({\n tableName: TABLE_SCORERS,\n record: {\n id,\n ...rest,\n input: JSON.stringify(input) || '',\n output: JSON.stringify(output) || '',\n scorer: scorer ? JSON.stringify(scorer) : null,\n preprocessStepResult: preprocessStepResult ? JSON.stringify(preprocessStepResult) : null,\n analyzeStepResult: analyzeStepResult ? JSON.stringify(analyzeStepResult) : null,\n metadata: metadata ? JSON.stringify(metadata) : null,\n additionalContext: additionalContext ? JSON.stringify(additionalContext) : null,\n requestContext: requestContext ? JSON.stringify(requestContext) : null,\n entity: entity ? JSON.stringify(entity) : null,\n createdAt: now.toISOString(),\n updatedAt: now.toISOString(),\n },\n });\n\n return { score: { ...parsedScore, id, createdAt: now, updatedAt: now } as ScoreRowData };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'SAVE_SCORE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<ListScoresResponse> {\n try {\n const total = await this.#db.client.oneOrNone<{ count: string }>(\n `SELECT COUNT(*) FROM ${getTableName({ indexName: TABLE_SCORERS, schemaName: getSchemaName(this.#schema) })} WHERE \"runId\" = $1`,\n [runId],\n );\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n if (total?.count === '0' || !total?.count) {\n return {\n pagination: {\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n },\n scores: [],\n };\n }\n\n const limitValue = perPageInput === false ? Number(total?.count) : perPage;\n const end = perPageInput === false ? Number(total?.count) : start + perPage;\n\n const result = await this.#db.client.manyOrNone<ScoreRowData>(\n `SELECT * FROM ${getTableName({ indexName: TABLE_SCORERS, schemaName: getSchemaName(this.#schema) })} WHERE \"runId\" = $1 ORDER BY \"createdAt\" DESC LIMIT $2 OFFSET $3`,\n [runId, limitValue, start],\n );\n return {\n pagination: {\n total: Number(total?.count) || 0,\n page,\n perPage: perPageForResponse,\n hasMore: end < Number(total?.count),\n },\n scores: result.map(transformScoreRow),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_SCORES_BY_RUN_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<ListScoresResponse> {\n try {\n const total = await this.#db.client.oneOrNone<{ count: string }>(\n `SELECT COUNT(*) FROM ${getTableName({ indexName: TABLE_SCORERS, schemaName: getSchemaName(this.#schema) })} WHERE \"entityId\" = $1 AND \"entityType\" = $2`,\n [entityId, entityType],\n );\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n if (total?.count === '0' || !total?.count) {\n return {\n pagination: {\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n },\n scores: [],\n };\n }\n\n const limitValue = perPageInput === false ? Number(total?.count) : perPage;\n const end = perPageInput === false ? Number(total?.count) : start + perPage;\n\n const result = await this.#db.client.manyOrNone<ScoreRowData>(\n `SELECT * FROM ${getTableName({ indexName: TABLE_SCORERS, schemaName: getSchemaName(this.#schema) })} WHERE \"entityId\" = $1 AND \"entityType\" = $2 ORDER BY \"createdAt\" DESC LIMIT $3 OFFSET $4`,\n [entityId, entityType, limitValue, start],\n );\n return {\n pagination: {\n total: Number(total?.count) || 0,\n page,\n perPage: perPageForResponse,\n hasMore: end < Number(total?.count),\n },\n scores: result.map(transformScoreRow),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_SCORES_BY_ENTITY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<ListScoresResponse> {\n try {\n const tableName = getTableName({ indexName: TABLE_SCORERS, schemaName: getSchemaName(this.#schema) });\n const countSQLResult = await this.#db.client.oneOrNone<{ count: string }>(\n `SELECT COUNT(*) as count FROM ${tableName} WHERE \"traceId\" = $1 AND \"spanId\" = $2`,\n [traceId, spanId],\n );\n\n const total = Number(countSQLResult?.count ?? 0);\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n const end = perPageInput === false ? total : start + perPage;\n const result = await this.#db.client.manyOrNone<ScoreRowData>(\n `SELECT * FROM ${tableName} WHERE \"traceId\" = $1 AND \"spanId\" = $2 ORDER BY \"createdAt\" DESC LIMIT $3 OFFSET $4`,\n [traceId, spanId, limitValue, start],\n );\n\n const hasMore = end < total;\n const scores = result.map(row => transformScoreRow(row)) ?? [];\n\n return {\n scores,\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_SCORES_BY_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n normalizePerPage,\n TABLE_WORKFLOW_SNAPSHOT,\n TABLE_SCHEMAS,\n WorkflowsStorage,\n createStorageErrorId,\n} from '@mastra/core/storage';\nimport type {\n StorageListWorkflowRunsInput,\n UpdateWorkflowStateOptions,\n WorkflowRun,\n WorkflowRuns,\n CreateIndexOptions,\n} from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport { withRetry } from '../../../shared/retry';\nimport { DsqlDB, resolveDsqlConfig } from '../../db';\nimport type { DsqlDomainConfig } from '../../db';\nimport { getTableName, getSchemaName } from '../utils';\n\nfunction parseWorkflowRun(row: Record<string, any>): WorkflowRun {\n let parsedSnapshot: WorkflowRunState | string = row.snapshot as string;\n if (typeof parsedSnapshot === 'string') {\n try {\n parsedSnapshot = JSON.parse(row.snapshot as string) as WorkflowRunState;\n } catch (e) {\n console.warn(`Failed to parse snapshot for workflow ${row.workflow_name}: ${e}`);\n }\n }\n return {\n workflowName: row.workflow_name as string,\n runId: row.run_id as string,\n snapshot: parsedSnapshot,\n resourceId: row.resourceId as string,\n createdAt: new Date(row.createdAtZ || (row.createdAt as string)),\n updatedAt: new Date(row.updatedAtZ || (row.updatedAt as string)),\n };\n}\n\nexport class WorkflowsDSQL extends WorkflowsStorage {\n #db: DsqlDB;\n #schema: string;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_WORKFLOW_SNAPSHOT] as const;\n\n constructor(config: DsqlDomainConfig) {\n super();\n const { client, schemaName, skipDefaultIndexes, indexes } = resolveDsqlConfig(config);\n this.#db = new DsqlDB({ client, schemaName });\n this.#schema = schemaName || 'public';\n this.#skipDefaultIndexes = skipDefaultIndexes;\n // Filter indexes to only those for tables managed by this domain\n this.#indexes = indexes?.filter(idx => (WorkflowsDSQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n supportsConcurrentUpdates(): boolean {\n return true;\n }\n\n /**\n * Returns default index definitions for the workflows domain tables.\n * Currently no default indexes are defined for workflows.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for workflows.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) {\n return;\n }\n // No default indexes for workflows domain\n }\n\n async init(): Promise<void> {\n await this.#db.createTable({ tableName: TABLE_WORKFLOW_SNAPSHOT, schema: TABLE_SCHEMAS[TABLE_WORKFLOW_SNAPSHOT] });\n await this.#db.alterTable({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n schema: TABLE_SCHEMAS[TABLE_WORKFLOW_SNAPSHOT],\n ifNotExists: ['resourceId'],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) {\n return;\n }\n\n for (const indexDef of this.#indexes) {\n try {\n await this.#db.createIndex(indexDef);\n } catch (error) {\n // Log but continue - indexes are performance optimizations\n this.logger?.warn?.(`Failed to create custom index ${indexDef.name}:`, error);\n }\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_WORKFLOW_SNAPSHOT });\n }\n\n async updateWorkflowResults({\n workflowName,\n runId,\n stepId,\n result,\n requestContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n requestContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n try {\n const { result: context } = await withRetry(\n async () => {\n return this.#db.client.tx(async t => {\n const tableName = getTableName({\n indexName: TABLE_WORKFLOW_SNAPSHOT,\n schemaName: getSchemaName(this.#schema),\n });\n\n const existingSnapshotResult = await t.oneOrNone<{ snapshot: WorkflowRunState | string }>(\n `SELECT snapshot FROM ${tableName} WHERE workflow_name = $1 AND run_id = $2`,\n [workflowName, runId],\n );\n\n let snapshot: WorkflowRunState;\n if (!existingSnapshotResult) {\n snapshot = {\n context: {},\n activePaths: [],\n timestamp: Date.now(),\n suspendedPaths: {},\n activeStepsPath: {},\n resumeLabels: {},\n serializedStepGraph: [],\n status: 'pending',\n value: {},\n waitingPaths: {},\n runId,\n requestContext: {},\n } as WorkflowRunState;\n } else {\n const existingSnapshot = existingSnapshotResult.snapshot;\n snapshot = typeof existingSnapshot === 'string' ? JSON.parse(existingSnapshot) : existingSnapshot;\n }\n\n snapshot.context[stepId] = result;\n snapshot.requestContext = { ...snapshot.requestContext, ...requestContext };\n\n const now = new Date();\n await t.none(\n `INSERT INTO ${tableName} (workflow_name, run_id, snapshot, \"createdAt\", \"updatedAt\")\n VALUES ($1, $2, $3, $4, $5)\n ON CONFLICT (workflow_name, run_id) DO UPDATE\n SET snapshot = $3, \"updatedAt\" = $5`,\n [workflowName, runId, JSON.stringify(snapshot), now, now],\n );\n\n return snapshot.context;\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `updateWorkflowResults retry ${attempt} for workflow ${workflowName}/${runId} after ${delay}ms: ${error.message}`,\n );\n },\n },\n );\n\n return context;\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'UPDATE_WORKFLOW_RESULTS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n workflowName,\n runId,\n stepId,\n },\n },\n error,\n );\n }\n }\n\n async updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: UpdateWorkflowStateOptions;\n }): Promise<WorkflowRunState | undefined> {\n try {\n const { result } = await withRetry(\n async () => {\n return this.#db.client.tx(async t => {\n const tableName = getTableName({\n indexName: TABLE_WORKFLOW_SNAPSHOT,\n schemaName: getSchemaName(this.#schema),\n });\n\n const existingSnapshotResult = await t.oneOrNone<{ snapshot: WorkflowRunState | string }>(\n `SELECT snapshot FROM ${tableName} WHERE workflow_name = $1 AND run_id = $2`,\n [workflowName, runId],\n );\n\n if (!existingSnapshotResult) {\n return undefined;\n }\n\n const existingSnapshot = existingSnapshotResult.snapshot;\n const snapshot = typeof existingSnapshot === 'string' ? JSON.parse(existingSnapshot) : existingSnapshot;\n\n if (!snapshot || !snapshot?.context) {\n throw new Error(`Snapshot not found for runId ${runId}`);\n }\n\n const updatedSnapshot = { ...snapshot, ...opts };\n\n await t.none(\n `UPDATE ${tableName} SET snapshot = $1, \"updatedAt\" = $2 WHERE workflow_name = $3 AND run_id = $4`,\n [JSON.stringify(updatedSnapshot), new Date(), workflowName, runId],\n );\n\n return updatedSnapshot;\n });\n },\n {\n onRetry: (error, attempt, delay) => {\n this.logger?.warn?.(\n `updateWorkflowState retry ${attempt} for workflow ${workflowName}/${runId} after ${delay}ms: ${error.message}`,\n );\n },\n },\n );\n\n return result;\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'UPDATE_WORKFLOW_STATE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n workflowName,\n runId,\n },\n },\n error,\n );\n }\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n createdAt,\n updatedAt,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n createdAt?: Date;\n updatedAt?: Date;\n }): Promise<void> {\n try {\n const now = new Date();\n const createdAtValue = createdAt ? createdAt : now;\n const updatedAtValue = updatedAt ? updatedAt : now;\n await this.#db.client.none(\n `INSERT INTO ${getTableName({ indexName: TABLE_WORKFLOW_SNAPSHOT, schemaName: getSchemaName(this.#schema) })} (workflow_name, run_id, \"resourceId\", snapshot, \"createdAt\", \"updatedAt\")\n VALUES ($1, $2, $3, $4, $5, $6)\n ON CONFLICT (workflow_name, run_id) DO UPDATE\n SET \"resourceId\" = $3, snapshot = $4, \"updatedAt\" = $6`,\n [\n workflowName,\n runId,\n resourceId,\n JSON.stringify(snapshot),\n createdAtValue.toISOString(),\n updatedAtValue.toISOString(),\n ],\n );\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'PERSIST_WORKFLOW_SNAPSHOT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n try {\n const result = await this.#db.load<{ snapshot: WorkflowRunState }>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n return result ? result.snapshot : null;\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LOAD_WORKFLOW_SNAPSHOT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string;\n }): Promise<WorkflowRun | null> {\n try {\n const conditions: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n if (runId) {\n conditions.push(`run_id = $${paramIndex}`);\n values.push(runId);\n paramIndex++;\n }\n\n if (workflowName) {\n conditions.push(`workflow_name = $${paramIndex}`);\n values.push(workflowName);\n paramIndex++;\n }\n\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n const query = `\n SELECT * FROM ${getTableName({ indexName: TABLE_WORKFLOW_SNAPSHOT, schemaName: getSchemaName(this.#schema) })}\n ${whereClause}\n ORDER BY \"createdAt\" DESC LIMIT 1\n `;\n\n const queryValues = values;\n\n const result = await this.#db.client.oneOrNone(query, queryValues);\n\n if (!result) {\n return null;\n }\n\n return parseWorkflowRun(result);\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'GET_WORKFLOW_RUN_BY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n runId,\n workflowName: workflowName || '',\n },\n },\n error,\n );\n }\n }\n\n async deleteWorkflowRunById({ runId, workflowName }: { runId: string; workflowName: string }): Promise<void> {\n try {\n await this.#db.client.none(\n `DELETE FROM ${getTableName({ indexName: TABLE_WORKFLOW_SNAPSHOT, schemaName: getSchemaName(this.#schema) })} WHERE run_id = $1 AND workflow_name = $2`,\n [runId, workflowName],\n );\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'DELETE_WORKFLOW_RUN_BY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n runId,\n workflowName,\n },\n },\n error,\n );\n }\n }\n\n async listWorkflowRuns({\n workflowName,\n fromDate,\n toDate,\n perPage,\n page,\n resourceId,\n status,\n }: StorageListWorkflowRunsInput = {}): Promise<WorkflowRuns> {\n try {\n const conditions: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n if (workflowName) {\n conditions.push(`workflow_name = $${paramIndex}`);\n values.push(workflowName);\n paramIndex++;\n }\n\n if (status) {\n conditions.push(`snapshot::jsonb ->> 'status' = $${paramIndex}`);\n values.push(status);\n paramIndex++;\n }\n\n if (resourceId) {\n const hasResourceId = await this.#db.hasColumn(TABLE_WORKFLOW_SNAPSHOT, 'resourceId');\n if (hasResourceId) {\n conditions.push(`\"resourceId\" = $${paramIndex}`);\n values.push(resourceId);\n paramIndex++;\n } else {\n console.warn(`[${TABLE_WORKFLOW_SNAPSHOT}] resourceId column not found. Skipping resourceId filter.`);\n }\n }\n\n if (fromDate) {\n conditions.push(`\"createdAt\" >= $${paramIndex}`);\n values.push(fromDate instanceof Date ? fromDate.toISOString() : fromDate);\n paramIndex++;\n }\n\n if (toDate) {\n conditions.push(`\"createdAt\" <= $${paramIndex}`);\n values.push(toDate instanceof Date ? toDate.toISOString() : toDate);\n paramIndex++;\n }\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n let total = 0;\n const usePagination = typeof perPage === 'number' && typeof page === 'number';\n if (usePagination) {\n const countResult = await this.#db.client.one(\n `SELECT COUNT(*) as count FROM ${getTableName({ indexName: TABLE_WORKFLOW_SNAPSHOT, schemaName: getSchemaName(this.#schema) })} ${whereClause}`,\n values,\n );\n total = Number(countResult.count);\n }\n\n const normalizedPerPage = usePagination ? normalizePerPage(perPage, Number.MAX_SAFE_INTEGER) : 0;\n const offset = usePagination ? page! * normalizedPerPage : undefined;\n\n const query = `\n SELECT * FROM ${getTableName({ indexName: TABLE_WORKFLOW_SNAPSHOT, schemaName: getSchemaName(this.#schema) })}\n ${whereClause}\n ORDER BY \"createdAt\" DESC\n ${usePagination ? ` LIMIT $${paramIndex} OFFSET $${paramIndex + 1}` : ''}\n `;\n\n const queryValues = usePagination ? [...values, normalizedPerPage, offset] : values;\n\n const result = await this.#db.client.manyOrNone(query, queryValues);\n\n const runs = (result || []).map(row => {\n return parseWorkflowRun(row);\n });\n\n return { runs, total: total || runs.length };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'LIST_WORKFLOW_RUNS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n workflowName: workflowName || 'all',\n },\n },\n error,\n );\n }\n }\n}\n","import { AuroraDSQLClient } from '@aws/aurora-dsql-node-postgres-connector';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createStorageErrorId, MastraStorage } from '@mastra/core/storage';\nimport type { StorageDomains } from '@mastra/core/storage';\nimport { Pool } from 'pg';\nimport { validateConfig, getEffectiveRegion, DSQL_POOL_DEFAULTS, isHostConfig, isPoolConfig } from '../shared/config';\nimport type { DSQLStoreConfig } from '../shared/config';\nimport { PoolAdapter } from './client';\nimport type { DbClient } from './client';\nimport type { DsqlDomainClientConfig } from './db';\nimport { AgentsDSQL } from './domains/agents';\nimport { MemoryDSQL } from './domains/memory';\nimport { ObservabilityDSQL } from './domains/observability';\nimport { ScoresDSQL } from './domains/scores';\nimport { WorkflowsDSQL } from './domains/workflows';\n\nexport { AgentsDSQL, MemoryDSQL, ObservabilityDSQL, ScoresDSQL, WorkflowsDSQL };\nexport { PoolAdapter } from './client';\nexport type { DbClient, TxClient, QueryValues, Pool, PoolClient, QueryResult } from './client';\nexport type { DsqlDomainConfig, DsqlDomainClientConfig, DsqlDomainPoolConfig, DsqlDomainRestConfig } from './db';\n\nexport class DSQLStore extends MastraStorage {\n #pool: Pool;\n #db: DbClient;\n #ownsPool: boolean;\n private schema: string;\n private isInitialized: boolean = false;\n\n stores: StorageDomains;\n\n constructor(config: DSQLStoreConfig) {\n try {\n validateConfig(config);\n super({ id: config.id, name: 'DSQLStore', disableInit: config.disableInit });\n this.schema = config.schemaName || 'public';\n\n // Create or use provided pool\n if (isPoolConfig(config)) {\n this.#pool = config.pool;\n this.#ownsPool = false;\n } else {\n this.#pool = this.createPool(config);\n this.#ownsPool = true;\n }\n\n this.#db = new PoolAdapter(this.#pool);\n\n const domainConfig: DsqlDomainClientConfig = {\n client: this.#db,\n schemaName: this.schema,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n };\n\n this.stores = {\n scores: new ScoresDSQL(domainConfig),\n workflows: new WorkflowsDSQL(domainConfig),\n memory: new MemoryDSQL(domainConfig),\n observability: new ObservabilityDSQL(domainConfig),\n agents: new AgentsDSQL(domainConfig),\n };\n } catch (e) {\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'INITIALIZATION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n e,\n );\n }\n }\n\n /**\n * Creates a connection pool with AuroraDSQLClient for IAM authentication.\n */\n private createPool(config: DSQLStoreConfig): Pool {\n if (!isHostConfig(config)) {\n throw new Error('DSQLStore: Invalid configuration for creating pool.');\n }\n const region = getEffectiveRegion(config);\n const poolConfig = {\n host: config.host,\n user: config.user ?? 'admin',\n database: config.database ?? 'postgres',\n // Use AuroraDSQLClient for automatic IAM token generation\n Client: AuroraDSQLClient as any,\n // Pass region for IAM token generation\n region,\n // Custom credentials provider (optional)\n customCredentialsProvider: config.customCredentialsProvider,\n // Pool settings optimized for Aurora DSQL\n max: config.max ?? DSQL_POOL_DEFAULTS.max,\n min: config.min ?? DSQL_POOL_DEFAULTS.min,\n idleTimeoutMillis: config.idleTimeoutMillis ?? DSQL_POOL_DEFAULTS.idleTimeoutMillis,\n maxLifetimeSeconds: config.maxLifetimeSeconds ?? DSQL_POOL_DEFAULTS.maxLifetimeSeconds,\n connectionTimeoutMillis: config.connectionTimeoutMillis ?? DSQL_POOL_DEFAULTS.connectionTimeoutMillis,\n allowExitOnIdle: config.allowExitOnIdle ?? DSQL_POOL_DEFAULTS.allowExitOnIdle,\n };\n\n return new Pool(poolConfig as any);\n }\n\n async init(): Promise<void> {\n if (this.isInitialized) {\n return;\n }\n\n try {\n this.isInitialized = true;\n await super.init();\n } catch (error) {\n this.isInitialized = false;\n throw new MastraError(\n {\n id: createStorageErrorId('DSQL', 'INIT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n /**\n * Database client for executing queries.\n *\n * @example\n * ```typescript\n * const rows = await store.db.any('SELECT * FROM users WHERE active = $1', [true]);\n * const user = await store.db.one('SELECT * FROM users WHERE id = $1', [userId]);\n * ```\n */\n public get db(): DbClient {\n return this.#db;\n }\n\n /**\n * The underlying pg.Pool for direct database access or ORM integration.\n */\n public get pool(): Pool {\n return this.#pool;\n }\n\n /**\n * Closes the connection pool if it was created by this store.\n * If a pool was passed in via config, it will not be closed.\n */\n async close(): Promise<void> {\n if (this.#ownsPool) {\n await this.#pool.end();\n }\n this.isInitialized = false;\n }\n}\n"]}