@mastra/cloudflare-d1 0.13.8 → 1.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +189 -15
- package/README.md +10 -5
- package/dist/index.cjs +226 -586
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +226 -586
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/memory/index.d.ts +13 -44
- package/dist/storage/domains/memory/index.d.ts.map +1 -1
- package/dist/storage/domains/scores/index.d.ts +5 -5
- package/dist/storage/domains/scores/index.d.ts.map +1 -1
- package/dist/storage/domains/workflows/index.d.ts +3 -10
- package/dist/storage/domains/workflows/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +25 -83
- package/dist/storage/index.d.ts.map +1 -1
- package/package.json +8 -12
- package/dist/storage/domains/legacy-evals/index.d.ts +0 -20
- package/dist/storage/domains/legacy-evals/index.d.ts.map +0 -1
- package/dist/storage/domains/traces/index.d.ts +0 -18
- package/dist/storage/domains/traces/index.d.ts.map +0 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/storage/sql-builder.ts","../src/storage/domains/utils.ts","../src/storage/domains/legacy-evals/index.ts","../src/storage/domains/memory/index.ts","../src/storage/domains/operations/index.ts","../src/storage/domains/scores/index.ts","../src/storage/domains/traces/index.ts","../src/storage/domains/workflows/index.ts","../src/storage/index.ts"],"names":["parseSqlIdentifier","LegacyEvalsStorage","TABLE_EVALS","serializeDate","error","MastraError","ErrorDomain","ErrorCategory","MemoryStorage","TABLE_RESOURCES","ensureDate","TABLE_THREADS","TABLE_MESSAGES","MessageList","resolveMessageLimit","StoreOperations","TABLE_WORKFLOW_SNAPSHOT","safelyParseJSON","ScoresStorage","TABLE_SCORERS","saveScorePayloadSchema","isArrayOfRecords","TracesStorage","TABLE_TRACES","WorkflowsStorage","MastraStorage","Cloudflare"],"mappings":"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","file":"index.cjs","sourcesContent":["import { parseSqlIdentifier } from '@mastra/core/utils';\n\n/**\n * Type definition for SQL query parameters\n */\nexport type SqlParam = string | number | boolean | null | undefined;\n\n/**\n * Interface for SQL query options with generic type support\n */\nexport interface SqlQueryOptions {\n /** SQL query to execute */\n sql: string;\n /** Parameters to bind to the query */\n params?: SqlParam[];\n /** Whether to return only the first result */\n first?: boolean;\n}\n\n/**\n * SQL Builder class for constructing type-safe SQL queries\n * This helps create maintainable and secure SQL queries with proper parameter handling\n */\nexport class SqlBuilder {\n private sql: string = '';\n private params: SqlParam[] = [];\n private whereAdded: boolean = false;\n\n // Basic query building\n select(columns?: string | string[]): SqlBuilder {\n if (!columns || (Array.isArray(columns) && columns.length === 0)) {\n this.sql = 'SELECT *';\n } else {\n const cols = Array.isArray(columns) ? columns : [columns];\n const parsedCols = cols.map(col => parseSelectIdentifier(col));\n this.sql = `SELECT ${parsedCols.join(', ')}`;\n }\n return this;\n }\n\n from(table: string): SqlBuilder {\n const parsedTableName = parseSqlIdentifier(table, 'table name');\n this.sql += ` FROM ${parsedTableName}`;\n return this;\n }\n\n /**\n * Add a WHERE clause to the query\n * @param condition The condition to add\n * @param params Parameters to bind to the condition\n */\n where(condition: string, ...params: SqlParam[]): SqlBuilder {\n this.sql += ` WHERE ${condition}`;\n this.params.push(...params);\n this.whereAdded = true;\n return this;\n }\n\n /**\n * Add a WHERE clause if it hasn't been added yet, otherwise add an AND clause\n * @param condition The condition to add\n * @param params Parameters to bind to the condition\n */\n whereAnd(condition: string, ...params: SqlParam[]): SqlBuilder {\n if (this.whereAdded) {\n return this.andWhere(condition, ...params);\n } else {\n return this.where(condition, ...params);\n }\n }\n\n andWhere(condition: string, ...params: SqlParam[]): SqlBuilder {\n this.sql += ` AND ${condition}`;\n this.params.push(...params);\n return this;\n }\n\n orWhere(condition: string, ...params: SqlParam[]): SqlBuilder {\n this.sql += ` OR ${condition}`;\n this.params.push(...params);\n return this;\n }\n\n orderBy(column: string, direction: 'ASC' | 'DESC' = 'ASC'): SqlBuilder {\n const parsedColumn = parseSqlIdentifier(column, 'column name');\n if (!['ASC', 'DESC'].includes(direction)) {\n throw new Error(`Invalid sort direction: ${direction}`);\n }\n this.sql += ` ORDER BY ${parsedColumn} ${direction}`;\n return this;\n }\n\n limit(count: number): SqlBuilder {\n this.sql += ` LIMIT ?`;\n this.params.push(count);\n return this;\n }\n\n offset(count: number): SqlBuilder {\n this.sql += ` OFFSET ?`;\n this.params.push(count);\n return this;\n }\n\n count(): SqlBuilder {\n this.sql += 'SELECT COUNT(*) AS count';\n return this;\n }\n\n /**\n * Insert a row, or update specific columns on conflict (upsert).\n * @param table Table name\n * @param columns Columns to insert\n * @param values Values to insert\n * @param conflictColumns Columns to check for conflict (usually PK or UNIQUE)\n * @param updateMap Object mapping columns to update to their new value (e.g. { name: 'excluded.name' })\n */\n insert(\n table: string,\n columns: string[],\n values: SqlParam[],\n conflictColumns?: string[],\n updateMap?: Record<string, string>,\n ): SqlBuilder {\n const parsedTableName = parseSqlIdentifier(table, 'table name');\n const parsedColumns = columns.map(col => parseSqlIdentifier(col, 'column name'));\n const placeholders = parsedColumns.map(() => '?').join(', ');\n\n if (conflictColumns && updateMap) {\n const parsedConflictColumns = conflictColumns.map(col => parseSqlIdentifier(col, 'column name'));\n const updateClause = Object.entries(updateMap)\n .map(([col, expr]) => `${col} = ${expr}`)\n .join(', ');\n this.sql = `INSERT INTO ${parsedTableName} (${parsedColumns.join(', ')}) VALUES (${placeholders}) ON CONFLICT(${parsedConflictColumns.join(', ')}) DO UPDATE SET ${updateClause}`;\n this.params.push(...values);\n return this;\n }\n\n this.sql = `INSERT INTO ${parsedTableName} (${parsedColumns.join(', ')}) VALUES (${placeholders})`;\n this.params.push(...values);\n\n return this;\n }\n\n // Update operations\n update(table: string, columns: string[], values: SqlParam[]): SqlBuilder {\n const parsedTableName = parseSqlIdentifier(table, 'table name');\n const parsedColumns = columns.map(col => parseSqlIdentifier(col, 'column name'));\n const setClause = parsedColumns.map(col => `${col} = ?`).join(', ');\n this.sql = `UPDATE ${parsedTableName} SET ${setClause}`;\n this.params.push(...values);\n return this;\n }\n\n // Delete operations\n delete(table: string): SqlBuilder {\n const parsedTableName = parseSqlIdentifier(table, 'table name');\n this.sql = `DELETE FROM ${parsedTableName}`;\n return this;\n }\n\n /**\n * Create a table if it doesn't exist\n * @param table The table name\n * @param columnDefinitions The column definitions as an array of strings\n * @param tableConstraints Optional constraints for the table\n * @returns The builder instance\n */\n createTable(table: string, columnDefinitions: string[], tableConstraints?: string[]): SqlBuilder {\n const parsedTableName = parseSqlIdentifier(table, 'table name');\n // Naive validation: check the first word of each column definition\n const parsedColumnDefinitions = columnDefinitions.map(def => {\n const colName = def.split(/\\s+/)[0];\n if (!colName) throw new Error('Empty column name in definition');\n parseSqlIdentifier(colName, 'column name');\n return def;\n });\n const columns = parsedColumnDefinitions.join(', ');\n const constraints = tableConstraints && tableConstraints.length > 0 ? ', ' + tableConstraints.join(', ') : '';\n this.sql = `CREATE TABLE IF NOT EXISTS ${parsedTableName} (${columns}${constraints})`;\n return this;\n }\n\n /**\n * Check if an index exists in the database\n * @param indexName The name of the index to check\n * @param tableName The table the index is on\n * @returns The builder instance\n */\n checkIndexExists(indexName: string, tableName: string): SqlBuilder {\n this.sql = `SELECT name FROM sqlite_master WHERE type='index' AND name=? AND tbl_name=?`;\n this.params.push(indexName, tableName);\n return this;\n }\n\n /**\n * Create an index if it doesn't exist\n * @param indexName The name of the index to create\n * @param tableName The table to create the index on\n * @param columnName The column to index\n * @param indexType Optional index type (e.g., 'UNIQUE')\n * @returns The builder instance\n */\n createIndex(indexName: string, tableName: string, columnName: string, indexType: string = ''): SqlBuilder {\n const parsedIndexName = parseSqlIdentifier(indexName, 'index name');\n const parsedTableName = parseSqlIdentifier(tableName, 'table name');\n const parsedColumnName = parseSqlIdentifier(columnName, 'column name');\n this.sql = `CREATE ${indexType ? indexType + ' ' : ''}INDEX IF NOT EXISTS ${parsedIndexName} ON ${parsedTableName}(${parsedColumnName})`;\n return this;\n }\n\n /**\n * Add a LIKE condition to the query\n * @param column The column to check\n * @param value The value to match (will be wrapped with % for LIKE)\n * @param exact If true, will not add % wildcards\n */\n like(column: string, value: string, exact: boolean = false): SqlBuilder {\n const parsedColumnName = parseSqlIdentifier(column, 'column name');\n const likeValue = exact ? value : `%${value}%`;\n if (this.whereAdded) {\n this.sql += ` AND ${parsedColumnName} LIKE ?`;\n } else {\n this.sql += ` WHERE ${parsedColumnName} LIKE ?`;\n this.whereAdded = true;\n }\n this.params.push(likeValue);\n return this;\n }\n\n /**\n * Add a JSON LIKE condition for searching in JSON fields\n * @param column The JSON column to search in\n * @param key The JSON key to match\n * @param value The value to match\n */\n jsonLike(column: string, key: string, value: string): SqlBuilder {\n const parsedColumnName = parseSqlIdentifier(column, 'column name');\n const parsedKey = parseSqlIdentifier(key, 'key name');\n const jsonPattern = `%\"${parsedKey}\":\"${value}\"%`;\n if (this.whereAdded) {\n this.sql += ` AND ${parsedColumnName} LIKE ?`;\n } else {\n this.sql += ` WHERE ${parsedColumnName} LIKE ?`;\n this.whereAdded = true;\n }\n this.params.push(jsonPattern);\n return this;\n }\n\n /**\n * Get the built query\n * @returns Object containing the SQL string and parameters array\n */\n build(): { sql: string; params: SqlParam[] } {\n return {\n sql: this.sql,\n params: this.params,\n };\n }\n\n /**\n * Reset the builder for reuse\n * @returns The reset builder instance\n */\n reset(): SqlBuilder {\n this.sql = '';\n this.params = [];\n this.whereAdded = false;\n return this;\n }\n}\n\n// Factory function for easier creation\nexport function createSqlBuilder(): SqlBuilder {\n return new SqlBuilder();\n}\n\n/** Represents a validated SQL SELECT column identifier (or '*', optionally with 'AS alias'). */\ntype SelectIdentifier = string & { __brand: 'SelectIdentifier' };\n\nconst SQL_IDENTIFIER_PATTERN = /^[a-zA-Z0-9_]+(\\s+AS\\s+[a-zA-Z0-9_]+)?$/;\n\n/**\n * Parses and returns a valid SQL SELECT column identifier.\n * Allows a single identifier (letters, numbers, underscores), or '*', optionally with 'AS alias'.\n *\n * @param column - The column identifier string to parse.\n * @returns The validated column identifier as a branded type.\n * @throws {Error} If invalid.\n *\n * @example\n * const col = parseSelectIdentifier('user_id'); // Ok\n * parseSelectIdentifier('user_id AS uid'); // Ok\n * parseSelectIdentifier('*'); // Ok\n * parseSelectIdentifier('user id'); // Throws error\n */\nexport function parseSelectIdentifier(column: string): SelectIdentifier {\n if (column !== '*' && !SQL_IDENTIFIER_PATTERN.test(column)) {\n throw new Error(\n `Invalid column name: \"${column}\". Must be \"*\" or a valid identifier (letters, numbers, underscores), optionally with \"AS alias\".`,\n );\n }\n return column as SelectIdentifier;\n}\n","export function isArrayOfRecords(value: any): value is Record<string, any>[] {\n return value && Array.isArray(value) && value.length > 0;\n}\n\nexport function deserializeValue(value: any, type?: string): any {\n if (value === null || value === undefined) return null;\n\n if (type === 'date' && typeof value === 'string') {\n return new Date(value);\n }\n\n if (type === 'jsonb' && typeof value === 'string') {\n try {\n return JSON.parse(value) as Record<string, any>;\n } catch {\n return value;\n }\n }\n\n if (typeof value === 'string' && (value.startsWith('{') || value.startsWith('['))) {\n try {\n return JSON.parse(value) as Record<string, any>;\n } catch {\n return value;\n }\n }\n\n return value;\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { MetricResult, TestInfo } from '@mastra/core/eval';\nimport { LegacyEvalsStorage, serializeDate, TABLE_EVALS } from '@mastra/core/storage';\nimport type { EvalRow, PaginationArgs, PaginationInfo } from '@mastra/core/storage';\nimport type { SqlParam } from '../../sql-builder';\nimport { createSqlBuilder } from '../../sql-builder';\nimport type { StoreOperationsD1 } from '../operations';\nimport { deserializeValue, isArrayOfRecords } from '../utils';\n\nexport class LegacyEvalsStorageD1 extends LegacyEvalsStorage {\n private operations: StoreOperationsD1;\n constructor({ operations }: { operations: StoreOperationsD1 }) {\n super();\n this.operations = operations;\n }\n\n async getEvals(\n options: {\n agentName?: string;\n type?: 'test' | 'live';\n } & PaginationArgs,\n ): Promise<PaginationInfo & { evals: EvalRow[] }> {\n const { agentName, type, page = 0, perPage = 40, dateRange } = options || {};\n const fullTableName = this.operations.getTableName(TABLE_EVALS);\n\n const conditions: string[] = [];\n const queryParams: SqlParam[] = [];\n\n if (agentName) {\n conditions.push(`agent_name = ?`);\n queryParams.push(agentName);\n }\n\n if (type === 'test') {\n // For SQLite/D1, json_extract is used to query JSON fields\n conditions.push(`(test_info IS NOT NULL AND json_extract(test_info, '$.testPath') IS NOT NULL)`);\n } else if (type === 'live') {\n conditions.push(`(test_info IS NULL OR json_extract(test_info, '$.testPath') IS NULL)`);\n }\n\n if (dateRange?.start) {\n conditions.push(`created_at >= ?`);\n queryParams.push(serializeDate(dateRange.start));\n }\n\n if (dateRange?.end) {\n conditions.push(`created_at <= ?`);\n queryParams.push(serializeDate(dateRange.end));\n }\n\n const countQueryBuilder = createSqlBuilder().count().from(fullTableName);\n if (conditions.length > 0) {\n countQueryBuilder.where(conditions.join(' AND '), ...queryParams);\n }\n const { sql: countSql, params: countParams } = countQueryBuilder.build();\n\n try {\n const countResult = (await this.operations.executeQuery({\n sql: countSql,\n params: countParams,\n first: true,\n })) as {\n count: number;\n } | null;\n const total = Number(countResult?.count || 0);\n\n const currentOffset = page * perPage;\n\n if (total === 0) {\n return {\n evals: [],\n total: 0,\n page,\n perPage,\n hasMore: false,\n };\n }\n\n const dataQueryBuilder = createSqlBuilder().select('*').from(fullTableName);\n if (conditions.length > 0) {\n dataQueryBuilder.where(conditions.join(' AND '), ...queryParams);\n }\n dataQueryBuilder.orderBy('created_at', 'DESC').limit(perPage).offset(currentOffset);\n\n const { sql: dataSql, params: dataParams } = dataQueryBuilder.build();\n const rows = await this.operations.executeQuery({\n sql: dataSql,\n params: dataParams,\n });\n\n const evals = (isArrayOfRecords(rows) ? rows : []).map((row: Record<string, any>) => {\n const result = deserializeValue(row.result);\n const testInfo = row.test_info ? deserializeValue(row.test_info) : undefined;\n\n if (!result || typeof result !== 'object' || !('score' in result)) {\n throw new Error(`Invalid MetricResult format: ${JSON.stringify(result)}`);\n }\n\n return {\n input: row.input as string,\n output: row.output as string,\n result: result as MetricResult,\n agentName: row.agent_name as string,\n metricName: row.metric_name as string,\n instructions: row.instructions as string,\n testInfo: testInfo as TestInfo,\n globalRunId: row.global_run_id as string,\n runId: row.run_id as string,\n createdAt: row.created_at as string,\n } as EvalRow;\n });\n\n const hasMore = currentOffset + evals.length < total;\n\n return {\n evals,\n total,\n page,\n perPage,\n hasMore,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_GET_EVALS_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to retrieve evals for agent ${agentName}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n details: { agentName: agentName ?? '', type: type ?? '' },\n },\n error,\n );\n }\n }\n\n /**\n * @deprecated use getEvals instead\n */\n async getEvalsByAgentName(agentName: string, type?: 'test' | 'live'): Promise<EvalRow[]> {\n const fullTableName = this.operations.getTableName(TABLE_EVALS);\n\n try {\n let query = createSqlBuilder().select('*').from(fullTableName).where('agent_name = ?', agentName);\n\n // Match LibSQL implementation for type filtering\n if (type === 'test') {\n // For 'test' type: test_info must exist and have a testPath property\n query = query.andWhere(\"test_info IS NOT NULL AND json_extract(test_info, '$.testPath') IS NOT NULL\");\n } else if (type === 'live') {\n // For 'live' type: test_info is NULL or doesn't have a testPath property\n query = query.andWhere(\"(test_info IS NULL OR json_extract(test_info, '$.testPath') IS NULL)\");\n }\n\n query.orderBy('created_at', 'DESC');\n\n const { sql, params } = query.build();\n const results = await this.operations.executeQuery({ sql, params });\n\n return isArrayOfRecords(results)\n ? results.map((row: Record<string, any>) => {\n // Convert snake_case to camelCase for the response\n const result = deserializeValue(row.result);\n const testInfo = row.test_info ? deserializeValue(row.test_info) : undefined;\n\n return {\n input: row.input || '',\n output: row.output || '',\n result,\n agentName: row.agent_name || '',\n metricName: row.metric_name || '',\n instructions: row.instructions || '',\n runId: row.run_id || '',\n globalRunId: row.global_run_id || '',\n createdAt: row.created_at || '',\n testInfo,\n };\n })\n : [];\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_GET_EVALS_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to retrieve evals for agent ${agentName}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n details: { agentName },\n },\n error,\n );\n this.logger?.error(mastraError.toString());\n this.logger?.trackException(mastraError);\n return [];\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, MastraMessageV2, StorageThreadType } from '@mastra/core/memory';\nimport {\n ensureDate,\n MemoryStorage,\n resolveMessageLimit,\n serializeDate,\n TABLE_MESSAGES,\n TABLE_THREADS,\n TABLE_RESOURCES,\n} from '@mastra/core/storage';\nimport type { PaginationInfo, StorageGetMessagesArg, StorageResourceType } from '@mastra/core/storage';\nimport { createSqlBuilder } from '../../sql-builder';\nimport type { StoreOperationsD1 } from '../operations';\nimport { deserializeValue, isArrayOfRecords } from '../utils';\n\nexport class MemoryStorageD1 extends MemoryStorage {\n private operations: StoreOperationsD1;\n constructor({ operations }: { operations: StoreOperationsD1 }) {\n super();\n this.operations = operations;\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n const resource = await this.operations.load<StorageResourceType>({\n tableName: TABLE_RESOURCES,\n keys: { id: resourceId },\n });\n\n if (!resource) return null;\n\n try {\n return {\n ...resource,\n createdAt: ensureDate(resource.createdAt) as Date,\n updatedAt: ensureDate(resource.updatedAt) as Date,\n metadata:\n typeof resource.metadata === 'string'\n ? (JSON.parse(resource.metadata || '{}') as Record<string, any>)\n : resource.metadata,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_GET_RESOURCE_BY_ID_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error processing resource ${resourceId}: ${error instanceof Error ? error.message : String(error)}`,\n details: { resourceId },\n },\n error,\n );\n this.logger?.error(mastraError.toString());\n this.logger?.trackException(mastraError);\n return null;\n }\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n const fullTableName = this.operations.getTableName(TABLE_RESOURCES);\n\n // Prepare the record for SQL insertion\n const resourceToSave = {\n id: resource.id,\n workingMemory: resource.workingMemory,\n metadata: resource.metadata ? JSON.stringify(resource.metadata) : null,\n createdAt: resource.createdAt,\n updatedAt: resource.updatedAt,\n };\n\n // Process record for SQL insertion\n const processedRecord = await this.operations.processRecord(resourceToSave);\n\n const columns = Object.keys(processedRecord);\n const values = Object.values(processedRecord);\n\n // Specify which columns to update on conflict (all except id)\n const updateMap: Record<string, string> = {\n workingMemory: 'excluded.workingMemory',\n metadata: 'excluded.metadata',\n createdAt: 'excluded.createdAt',\n updatedAt: 'excluded.updatedAt',\n };\n\n // Use the new insert method with ON CONFLICT\n const query = createSqlBuilder().insert(fullTableName, columns, values, ['id'], updateMap);\n\n const { sql, params } = query.build();\n\n try {\n await this.operations.executeQuery({ sql, params });\n return resource;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_SAVE_RESOURCE_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to save resource to ${fullTableName}: ${error instanceof Error ? error.message : String(error)}`,\n details: { resourceId: resource.id },\n },\n error,\n );\n }\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 existingResource = await this.getResourceById({ resourceId });\n\n if (!existingResource) {\n // Create new resource if it doesn't exist\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 updatedAt = new Date();\n const updatedResource = {\n ...existingResource,\n workingMemory: workingMemory !== undefined ? workingMemory : existingResource.workingMemory,\n metadata: {\n ...existingResource.metadata,\n ...metadata,\n },\n updatedAt,\n };\n\n const fullTableName = this.operations.getTableName(TABLE_RESOURCES);\n\n const columns = ['workingMemory', 'metadata', 'updatedAt'];\n const values = [updatedResource.workingMemory, JSON.stringify(updatedResource.metadata), updatedAt.toISOString()];\n\n const query = createSqlBuilder().update(fullTableName, columns, values).where('id = ?', resourceId);\n\n const { sql, params } = query.build();\n\n try {\n await this.operations.executeQuery({ sql, params });\n return updatedResource;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_UPDATE_RESOURCE_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to update resource ${resourceId}: ${error instanceof Error ? error.message : String(error)}`,\n details: { resourceId },\n },\n error,\n );\n }\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n const thread = await this.operations.load<StorageThreadType>({\n tableName: TABLE_THREADS,\n keys: { id: threadId },\n });\n\n if (!thread) return null;\n\n try {\n return {\n ...thread,\n createdAt: ensureDate(thread.createdAt) as Date,\n updatedAt: ensureDate(thread.updatedAt) as Date,\n metadata:\n typeof thread.metadata === 'string'\n ? (JSON.parse(thread.metadata || '{}') as Record<string, any>)\n : thread.metadata || {},\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_GET_THREAD_BY_ID_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error processing thread ${threadId}: ${error instanceof Error ? error.message : String(error)}`,\n details: { threadId },\n },\n error,\n );\n this.logger?.error(mastraError.toString());\n this.logger?.trackException(mastraError);\n return null;\n }\n }\n\n /**\n * @deprecated use getThreadsByResourceIdPaginated instead\n */\n async getThreadsByResourceId({ resourceId }: { resourceId: string }): Promise<StorageThreadType[]> {\n const fullTableName = this.operations.getTableName(TABLE_THREADS);\n\n try {\n const query = createSqlBuilder().select('*').from(fullTableName).where('resourceId = ?', resourceId);\n\n const { sql, params } = query.build();\n const results = await this.operations.executeQuery({ sql, params });\n\n return (isArrayOfRecords(results) ? results : []).map((thread: any) => ({\n ...thread,\n createdAt: ensureDate(thread.createdAt) as Date,\n updatedAt: ensureDate(thread.updatedAt) as Date,\n metadata:\n typeof thread.metadata === 'string'\n ? (JSON.parse(thread.metadata || '{}') as Record<string, any>)\n : thread.metadata || {},\n }));\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_GET_THREADS_BY_RESOURCE_ID_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error getting threads by resourceId ${resourceId}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n details: { resourceId },\n },\n error,\n );\n this.logger?.error(mastraError.toString());\n this.logger?.trackException(mastraError);\n return [];\n }\n }\n\n public async getThreadsByResourceIdPaginated(args: {\n resourceId: string;\n page: number;\n perPage: number;\n }): Promise<PaginationInfo & { threads: StorageThreadType[] }> {\n const { resourceId, page, perPage } = args;\n const fullTableName = this.operations.getTableName(TABLE_THREADS);\n\n const mapRowToStorageThreadType = (row: Record<string, any>): StorageThreadType => ({\n ...(row as StorageThreadType),\n createdAt: ensureDate(row.createdAt) as Date,\n updatedAt: ensureDate(row.updatedAt) as Date,\n metadata:\n typeof row.metadata === 'string'\n ? (JSON.parse(row.metadata || '{}') as Record<string, any>)\n : row.metadata || {},\n });\n\n try {\n const countQuery = createSqlBuilder().count().from(fullTableName).where('resourceId = ?', resourceId);\n const countResult = (await this.operations.executeQuery(countQuery.build())) as {\n count: number;\n }[];\n const total = Number(countResult?.[0]?.count ?? 0);\n\n const selectQuery = createSqlBuilder()\n .select('*')\n .from(fullTableName)\n .where('resourceId = ?', resourceId)\n .orderBy('createdAt', 'DESC')\n .limit(perPage)\n .offset(page * perPage);\n\n const results = (await this.operations.executeQuery(selectQuery.build())) as Record<string, any>[];\n const threads = results.map(mapRowToStorageThreadType);\n\n return {\n threads,\n total,\n page,\n perPage,\n hasMore: page * perPage + threads.length < total,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_GET_THREADS_BY_RESOURCE_ID_PAGINATED_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error getting threads by resourceId ${resourceId}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n details: { resourceId },\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,\n hasMore: false,\n };\n }\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n const fullTableName = this.operations.getTableName(TABLE_THREADS);\n\n // Prepare the record for SQL insertion\n const threadToSave = {\n id: thread.id,\n resourceId: thread.resourceId,\n title: thread.title,\n metadata: thread.metadata ? JSON.stringify(thread.metadata) : null,\n createdAt: thread.createdAt.toISOString(),\n updatedAt: thread.updatedAt.toISOString(),\n };\n\n // Process record for SQL insertion\n const processedRecord = await this.operations.processRecord(threadToSave);\n\n const columns = Object.keys(processedRecord);\n const values = Object.values(processedRecord);\n\n // Specify which columns to update on conflict (all except id)\n const updateMap: Record<string, string> = {\n resourceId: 'excluded.resourceId',\n title: 'excluded.title',\n metadata: 'excluded.metadata',\n createdAt: 'excluded.createdAt',\n updatedAt: 'excluded.updatedAt',\n };\n\n // Use the new insert method with ON CONFLICT\n const query = createSqlBuilder().insert(fullTableName, columns, values, ['id'], updateMap);\n\n const { sql, params } = query.build();\n\n try {\n await this.operations.executeQuery({ sql, params });\n return thread;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_SAVE_THREAD_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to save thread to ${fullTableName}: ${error instanceof Error ? error.message : String(error)}`,\n details: { threadId: thread.id },\n },\n error,\n );\n }\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 thread = await this.getThreadById({ threadId: id });\n try {\n if (!thread) {\n throw new Error(`Thread ${id} not found`);\n }\n const fullTableName = this.operations.getTableName(TABLE_THREADS);\n\n const mergedMetadata = {\n ...(typeof thread.metadata === 'string' ? JSON.parse(thread.metadata) : thread.metadata),\n ...(metadata as Record<string, any>),\n };\n\n const updatedAt = new Date();\n const columns = ['title', 'metadata', 'updatedAt'];\n const values = [title, JSON.stringify(mergedMetadata), updatedAt.toISOString()];\n\n const query = createSqlBuilder().update(fullTableName, columns, values).where('id = ?', id);\n\n const { sql, params } = query.build();\n\n await this.operations.executeQuery({ sql, params });\n\n return {\n ...thread,\n title,\n metadata: {\n ...(typeof thread.metadata === 'string' ? JSON.parse(thread.metadata) : thread.metadata),\n ...(metadata as Record<string, any>),\n },\n updatedAt,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_UPDATE_THREAD_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to update thread ${id}: ${error instanceof Error ? error.message : String(error)}`,\n details: { threadId: id },\n },\n error,\n );\n }\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n const fullTableName = this.operations.getTableName(TABLE_THREADS);\n\n try {\n // Delete the thread\n const deleteThreadQuery = createSqlBuilder().delete(fullTableName).where('id = ?', threadId);\n\n const { sql: threadSql, params: threadParams } = deleteThreadQuery.build();\n await this.operations.executeQuery({ sql: threadSql, params: threadParams });\n\n // Also delete associated messages\n const messagesTableName = this.operations.getTableName(TABLE_MESSAGES);\n const deleteMessagesQuery = createSqlBuilder().delete(messagesTableName).where('thread_id = ?', threadId);\n\n const { sql: messagesSql, params: messagesParams } = deleteMessagesQuery.build();\n await this.operations.executeQuery({ sql: messagesSql, params: messagesParams });\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_DELETE_THREAD_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to delete thread ${threadId}: ${error instanceof Error ? error.message : String(error)}`,\n details: { threadId },\n },\n error,\n );\n }\n }\n\n async saveMessages(args: { messages: MastraMessageV1[]; format?: undefined | 'v1' }): Promise<MastraMessageV1[]>;\n async saveMessages(args: { messages: MastraMessageV2[]; format: 'v2' }): Promise<MastraMessageV2[]>;\n async saveMessages(\n args: { messages: MastraMessageV1[]; format?: undefined | 'v1' } | { messages: MastraMessageV2[]; format: 'v2' },\n ): Promise<MastraMessageV2[] | MastraMessageV1[]> {\n const { messages, format = 'v1' } = args;\n if (messages.length === 0) return [];\n\n try {\n const now = new Date();\n const threadId = messages[0]?.threadId;\n\n // Validate all messages before insert\n for (const [i, message] of messages.entries()) {\n if (!message.id) throw new Error(`Message at index ${i} missing id`);\n if (!message.threadId) {\n throw new Error(`Message at index ${i} missing threadId`);\n }\n if (!message.content) {\n throw new Error(`Message at index ${i} missing content`);\n }\n if (!message.role) {\n throw new Error(`Message at index ${i} missing role`);\n }\n if (!message.resourceId) {\n throw new Error(`Message at index ${i} missing resourceId`);\n }\n const thread = await this.getThreadById({ threadId: message.threadId });\n if (!thread) {\n throw new Error(`Thread ${message.threadId} not found`);\n }\n }\n\n // Prepare all messages for insertion (set timestamps, thread_id, etc.)\n const messagesToInsert = messages.map(message => {\n const createdAt = message.createdAt ? new Date(message.createdAt) : now;\n return {\n id: message.id,\n thread_id: message.threadId,\n content: typeof message.content === 'string' ? message.content : JSON.stringify(message.content),\n createdAt: createdAt.toISOString(),\n role: message.role,\n type: message.type || 'v2',\n resourceId: message.resourceId,\n };\n });\n\n // Insert messages and update thread's updatedAt in parallel\n await Promise.all([\n this.operations.batchUpsert({\n tableName: TABLE_MESSAGES,\n records: messagesToInsert,\n }),\n // Update thread's updatedAt timestamp\n this.operations.executeQuery({\n sql: `UPDATE ${this.operations.getTableName(TABLE_THREADS)} SET updatedAt = ? WHERE id = ?`,\n params: [now.toISOString(), threadId],\n }),\n ]);\n\n this.logger.debug(`Saved ${messages.length} messages`);\n const list = new MessageList().add(messages, 'memory');\n if (format === `v2`) return list.get.all.v2();\n return list.get.all.v1();\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_SAVE_MESSAGES_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to save messages: ${error instanceof Error ? error.message : String(error)}`,\n },\n error,\n );\n }\n }\n\n private async _getIncludedMessages(threadId: string, selectBy: StorageGetMessagesArg['selectBy']) {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n const include = selectBy?.include;\n if (!include) return null;\n\n const unionQueries: string[] = [];\n const params: any[] = [];\n let paramIdx = 1;\n\n for (const inc of include) {\n const { id, withPreviousMessages = 0, withNextMessages = 0 } = inc;\n // if threadId is provided, use it, otherwise use threadId from args\n const searchId = inc.threadId || threadId;\n\n unionQueries.push(`\n SELECT * FROM (\n WITH ordered_messages AS (\n SELECT\n *,\n ROW_NUMBER() OVER (ORDER BY createdAt ASC) AS row_num\n FROM ${this.operations.getTableName(TABLE_MESSAGES)}\n WHERE thread_id = ?\n )\n SELECT\n m.id,\n m.content,\n m.role,\n m.type,\n m.createdAt,\n m.thread_id AS threadId,\n m.resourceId\n FROM ordered_messages m\n WHERE m.id = ?\n OR EXISTS (\n SELECT 1 FROM ordered_messages target\n WHERE target.id = ?\n AND (\n (m.row_num <= target.row_num + ? AND m.row_num > target.row_num)\n OR\n (m.row_num >= target.row_num - ? AND m.row_num < target.row_num)\n )\n )\n ) AS query_${paramIdx}\n `);\n\n params.push(searchId, id, id, withNextMessages, withPreviousMessages);\n paramIdx++;\n }\n\n const finalQuery = unionQueries.join(' UNION ALL ') + ' ORDER BY createdAt ASC';\n const messages = await this.operations.executeQuery({ sql: finalQuery, params });\n\n if (!Array.isArray(messages)) {\n return [];\n }\n\n // Parse message content\n const processedMessages = messages.map((message: Record<string, any>) => {\n const processedMsg: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(message)) {\n if (key === `type` && value === `v2`) continue;\n processedMsg[key] = deserializeValue(value);\n }\n\n return processedMsg;\n });\n\n return processedMessages;\n }\n\n /**\n * @deprecated use getMessagesPaginated instead\n */\n public async getMessages(args: StorageGetMessagesArg & { format?: 'v1' }): Promise<MastraMessageV1[]>;\n public async getMessages(args: StorageGetMessagesArg & { format: 'v2' }): Promise<MastraMessageV2[]>;\n public async getMessages({\n threadId,\n resourceId,\n selectBy,\n format,\n }: StorageGetMessagesArg & { format?: 'v1' | 'v2' }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n try {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n const fullTableName = this.operations.getTableName(TABLE_MESSAGES);\n const limit = resolveMessageLimit({\n last: selectBy?.last,\n defaultLimit: 40,\n });\n const include = selectBy?.include || [];\n const messages: any[] = [];\n\n if (include.length) {\n const includeResult = await this._getIncludedMessages(threadId, selectBy);\n if (Array.isArray(includeResult)) messages.push(...includeResult);\n }\n\n // Exclude already fetched ids\n const excludeIds = messages.map(m => m.id);\n const query = createSqlBuilder()\n .select(['id', 'content', 'role', 'type', 'createdAt', 'thread_id AS threadId'])\n .from(fullTableName)\n .where('thread_id = ?', threadId);\n\n if (excludeIds.length > 0) {\n query.andWhere(`id NOT IN (${excludeIds.map(() => '?').join(',')})`, ...excludeIds);\n }\n\n query.orderBy('createdAt', 'DESC').limit(limit);\n\n const { sql, params } = query.build();\n\n const result = await this.operations.executeQuery({ sql, params });\n\n if (Array.isArray(result)) messages.push(...result);\n\n // Sort by creation time to ensure proper order\n messages.sort((a, b) => {\n const aRecord = a as Record<string, any>;\n const bRecord = b as Record<string, any>;\n const timeA = new Date(aRecord.createdAt as string).getTime();\n const timeB = new Date(bRecord.createdAt as string).getTime();\n return timeA - timeB;\n });\n\n // Parse message content\n const processedMessages = messages.map(message => {\n const processedMsg: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(message)) {\n if (key === `type` && value === `v2`) continue;\n processedMsg[key] = deserializeValue(value);\n }\n\n return processedMsg;\n });\n this.logger.debug(`Retrieved ${messages.length} messages for thread ${threadId}`);\n const list = new MessageList().add(processedMessages as MastraMessageV1[] | MastraMessageV2[], 'memory');\n if (format === `v2`) return list.get.all.v2();\n return list.get.all.v1();\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_GET_MESSAGES_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to retrieve messages for thread ${threadId}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n details: { threadId, resourceId: resourceId ?? '' },\n },\n error,\n );\n this.logger?.error(mastraError.toString());\n this.logger?.trackException(mastraError);\n throw mastraError;\n }\n }\n\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format: 'v1';\n }): Promise<MastraMessageV1[]>;\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v2';\n }): Promise<MastraMessageV2[]>;\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v1' | 'v2';\n }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n if (messageIds.length === 0) return [];\n const fullTableName = this.operations.getTableName(TABLE_MESSAGES);\n const messages: any[] = [];\n\n try {\n const query = createSqlBuilder()\n .select(['id', 'content', 'role', 'type', 'createdAt', 'thread_id AS threadId', 'resourceId'])\n .from(fullTableName)\n .where(`id in (${messageIds.map(() => '?').join(',')})`, ...messageIds);\n\n query.orderBy('createdAt', 'DESC');\n\n const { sql, params } = query.build();\n\n const result = await this.operations.executeQuery({ sql, params });\n\n if (Array.isArray(result)) messages.push(...result);\n\n // Parse message content\n const processedMessages = messages.map(message => {\n const processedMsg: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(message)) {\n if (key === `type` && value === `v2`) continue;\n processedMsg[key] = deserializeValue(value);\n }\n\n return processedMsg;\n });\n this.logger.debug(`Retrieved ${messages.length} messages`);\n const list = new MessageList().add(processedMessages as MastraMessageV1[] | MastraMessageV2[], 'memory');\n if (format === `v1`) return list.get.all.v1();\n return list.get.all.v2();\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_GET_MESSAGES_BY_ID_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to retrieve messages by ID: ${error instanceof Error ? error.message : String(error)}`,\n details: { messageIds: JSON.stringify(messageIds) },\n },\n error,\n );\n this.logger?.error(mastraError.toString());\n this.logger?.trackException(mastraError);\n throw mastraError;\n }\n }\n\n public async getMessagesPaginated({\n threadId,\n resourceId,\n selectBy,\n format,\n }: StorageGetMessagesArg & { format?: 'v1' | 'v2' }): Promise<\n PaginationInfo & { messages: MastraMessageV1[] | MastraMessageV2[] }\n > {\n const { dateRange, page = 0, perPage: perPageInput } = selectBy?.pagination || {};\n const { start: fromDate, end: toDate } = dateRange || {};\n const perPage =\n perPageInput !== undefined ? perPageInput : resolveMessageLimit({ last: selectBy?.last, defaultLimit: 40 });\n\n const fullTableName = this.operations.getTableName(TABLE_MESSAGES);\n const messages: any[] = [];\n\n try {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n if (selectBy?.include?.length) {\n const includeResult = await this._getIncludedMessages(threadId, selectBy);\n if (Array.isArray(includeResult)) messages.push(...includeResult);\n }\n\n const countQuery = createSqlBuilder().count().from(fullTableName).where('thread_id = ?', threadId);\n\n if (fromDate) {\n countQuery.andWhere('createdAt >= ?', serializeDate(fromDate));\n }\n if (toDate) {\n countQuery.andWhere('createdAt <= ?', serializeDate(toDate));\n }\n\n const countResult = (await this.operations.executeQuery(countQuery.build())) as {\n count: number;\n }[];\n const total = Number(countResult[0]?.count ?? 0);\n\n if (total === 0 && messages.length === 0) {\n return {\n messages: [],\n total: 0,\n page,\n perPage,\n hasMore: false,\n };\n }\n\n // Exclude already included messages\n const excludeIds = messages.map(m => m.id);\n const excludeCondition = excludeIds.length > 0 ? `AND id NOT IN (${excludeIds.map(() => '?').join(',')})` : '';\n\n let query: any;\n let queryParams: any[] = [threadId];\n\n if (fromDate) {\n queryParams.push(serializeDate(fromDate));\n }\n if (toDate) {\n queryParams.push(serializeDate(toDate));\n }\n\n if (excludeIds.length > 0) {\n queryParams.push(...excludeIds);\n }\n\n if (selectBy?.last && selectBy.last > 0) {\n // Handle selectBy.last: get last N messages\n query = `\n SELECT id, content, role, type, createdAt, thread_id AS threadId, resourceId\n FROM ${fullTableName}\n WHERE thread_id = ?\n ${fromDate ? 'AND createdAt >= ?' : ''}\n ${toDate ? 'AND createdAt <= ?' : ''}\n ${excludeCondition}\n ORDER BY createdAt DESC\n LIMIT ?\n `;\n queryParams.push(selectBy.last);\n } else {\n // Regular pagination\n query = `\n SELECT id, content, role, type, createdAt, thread_id AS threadId, resourceId\n FROM ${fullTableName}\n WHERE thread_id = ?\n ${fromDate ? 'AND createdAt >= ?' : ''}\n ${toDate ? 'AND createdAt <= ?' : ''}\n ${excludeCondition}\n ORDER BY createdAt DESC\n LIMIT ? OFFSET ?\n `;\n queryParams.push(perPage, page * perPage);\n }\n\n const results = (await this.operations.executeQuery({ sql: query, params: queryParams })) as any[];\n\n // Parse message content\n const processedMessages = results.map(message => {\n const processedMsg: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(message)) {\n if (key === `type` && value === `v2`) continue;\n processedMsg[key] = deserializeValue(value);\n }\n\n return processedMsg;\n });\n\n // For last N functionality, sort messages chronologically\n if (selectBy?.last) {\n processedMessages.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());\n }\n\n const list = new MessageList().add(processedMessages as MastraMessageV1[] | MastraMessageV2[], 'memory');\n messages.push(...(format === `v2` ? list.get.all.v2() : list.get.all.v1()));\n\n return {\n messages,\n total,\n page,\n perPage,\n hasMore: selectBy?.last ? false : page * perPage + messages.length < total,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_GET_MESSAGES_PAGINATED_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to retrieve messages for thread ${threadId}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n details: { threadId, resourceId: resourceId ?? '' },\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,\n hasMore: false,\n };\n }\n }\n\n async updateMessages(args: {\n messages: Partial<Omit<MastraMessageV2, 'createdAt'>> &\n {\n id: string;\n content?: {\n metadata?: MastraMessageContentV2['metadata'];\n content?: MastraMessageContentV2['content'];\n };\n }[];\n }): Promise<MastraMessageV2[]> {\n const { messages } = args;\n this.logger.debug('Updating messages', { count: messages.length });\n\n if (!messages.length) {\n return [];\n }\n\n const messageIds = messages.map(m => m.id);\n const fullTableName = this.operations.getTableName(TABLE_MESSAGES);\n const threadsTableName = this.operations.getTableName(TABLE_THREADS);\n\n try {\n // Get existing messages\n const placeholders = messageIds.map(() => '?').join(',');\n const selectQuery = `SELECT id, content, role, type, createdAt, thread_id AS threadId, resourceId FROM ${fullTableName} WHERE id IN (${placeholders})`;\n const existingMessages = (await this.operations.executeQuery({ sql: selectQuery, params: messageIds })) as any[];\n\n if (existingMessages.length === 0) {\n return [];\n }\n\n // Parse content from string to object for merging\n const parsedExistingMessages = existingMessages.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;\n });\n\n const threadIdsToUpdate = new Set<string>();\n const updateQueries: { sql: string; params: any[] }[] = [];\n\n for (const existingMessage of parsedExistingMessages) {\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 (\n 'threadId' in updatePayload &&\n updatePayload.threadId &&\n updatePayload.threadId !== existingMessage.threadId\n ) {\n threadIdsToUpdate.add(updatePayload.threadId as string);\n }\n\n const setClauses: string[] = [];\n const values: any[] = [];\n\n const updatableFields = { ...fieldsToUpdate };\n\n // Special handling for content: merge in code, then update the whole field\n if (updatableFields.content) {\n const existingContent = existingMessage.content || {};\n const newContent = {\n ...existingContent,\n ...updatableFields.content,\n // Deep merge metadata if it exists on both\n ...(existingContent?.metadata && updatableFields.content.metadata\n ? {\n metadata: {\n ...existingContent.metadata,\n ...updatableFields.content.metadata,\n },\n }\n : {}),\n };\n setClauses.push(`content = ?`);\n values.push(JSON.stringify(newContent));\n delete updatableFields.content;\n }\n\n // Handle other fields\n for (const key in updatableFields) {\n if (Object.prototype.hasOwnProperty.call(updatableFields, key)) {\n const dbColumn = key === 'threadId' ? 'thread_id' : key;\n setClauses.push(`${dbColumn} = ?`);\n values.push(updatableFields[key as keyof typeof updatableFields]);\n }\n }\n\n if (setClauses.length > 0) {\n values.push(id);\n const updateQuery = `UPDATE ${fullTableName} SET ${setClauses.join(', ')} WHERE id = ?`;\n updateQueries.push({ sql: updateQuery, params: values });\n }\n }\n\n // Execute all updates\n for (const query of updateQueries) {\n await this.operations.executeQuery(query);\n }\n\n // Update thread timestamps\n if (threadIdsToUpdate.size > 0) {\n const threadPlaceholders = Array.from(threadIdsToUpdate)\n .map(() => '?')\n .join(',');\n const threadUpdateQuery = `UPDATE ${threadsTableName} SET updatedAt = ? WHERE id IN (${threadPlaceholders})`;\n const threadUpdateParams = [new Date().toISOString(), ...Array.from(threadIdsToUpdate)];\n await this.operations.executeQuery({ sql: threadUpdateQuery, params: threadUpdateParams });\n }\n\n // Re-fetch updated messages\n const updatedMessages = (await this.operations.executeQuery({ sql: selectQuery, params: messageIds })) as any[];\n\n // Parse content back to objects\n return updatedMessages.map(message => {\n if (typeof message.content === 'string') {\n try {\n message.content = JSON.parse(message.content);\n } catch {\n // ignore if not valid json\n }\n }\n return message;\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_UPDATE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { count: messages.length },\n },\n error,\n );\n }\n }\n}\n","import type { D1Database } from '@cloudflare/workers-types';\nimport { MastraError, ErrorDomain, ErrorCategory } from '@mastra/core/error';\nimport { StoreOperations, TABLE_WORKFLOW_SNAPSHOT } from '@mastra/core/storage';\nimport type { TABLE_NAMES, StorageColumn } from '@mastra/core/storage';\nimport type Cloudflare from 'cloudflare';\nimport { createSqlBuilder } from '../../sql-builder';\nimport type { SqlParam, SqlQueryOptions } from '../../sql-builder';\nimport { deserializeValue } from '../utils';\n\nexport type D1QueryResult = Awaited<ReturnType<Cloudflare['d1']['database']['query']>>['result'];\n\nexport interface D1Client {\n query(args: { sql: string; params: string[] }): Promise<{ result: D1QueryResult }>;\n}\n\nexport interface StoreOperationsD1Config {\n client?: D1Client;\n binding?: D1Database;\n tablePrefix?: string;\n}\n\nexport class StoreOperationsD1 extends StoreOperations {\n private client?: D1Client;\n private binding?: D1Database;\n private tablePrefix: string;\n\n constructor(config: StoreOperationsD1Config) {\n super();\n this.client = config.client;\n this.binding = config.binding;\n this.tablePrefix = config.tablePrefix || '';\n }\n\n async hasColumn(table: string, column: string): Promise<boolean> {\n // For D1/SQLite, use PRAGMA table_info to get column info\n // Handle both prefixed and non-prefixed table names\n const fullTableName = table.startsWith(this.tablePrefix) ? table : `${this.tablePrefix}${table}`;\n const sql = `PRAGMA table_info(${fullTableName});`;\n const result = await this.executeQuery({ sql, params: [] });\n if (!result || !Array.isArray(result)) return false;\n return result.some((col: any) => col.name === column || col.name === column.toLowerCase());\n }\n\n getTableName(tableName: TABLE_NAMES): string {\n return `${this.tablePrefix}${tableName}`;\n }\n\n private formatSqlParams(params: SqlParam[]): string[] {\n return params.map(p => (p === undefined || p === null ? null : p) as string);\n }\n\n private async executeWorkersBindingQuery({\n sql,\n params = [],\n first = false,\n }: SqlQueryOptions): Promise<Record<string, any>[] | Record<string, any> | null> {\n if (!this.binding) {\n throw new Error('Workers binding is not configured');\n }\n\n try {\n const statement = this.binding.prepare(sql);\n const formattedParams = this.formatSqlParams(params);\n\n let result;\n if (formattedParams.length > 0) {\n if (first) {\n result = await statement.bind(...formattedParams).first();\n if (!result) return null;\n return result;\n } else {\n result = await statement.bind(...formattedParams).all();\n const results = result.results || [];\n return results;\n }\n } else {\n if (first) {\n result = await statement.first();\n if (!result) return null;\n return result;\n } else {\n result = await statement.all();\n const results = result.results || [];\n return results;\n }\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_WORKERS_BINDING_QUERY_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { sql },\n },\n error,\n );\n }\n }\n\n private async executeRestQuery({\n sql,\n params = [],\n first = false,\n }: SqlQueryOptions): Promise<Record<string, any>[] | Record<string, any> | null> {\n if (!this.client) {\n throw new Error('D1 client is not configured');\n }\n\n try {\n const formattedParams = this.formatSqlParams(params);\n const response = await this.client.query({\n sql,\n params: formattedParams,\n });\n const result = response.result || [];\n const results = result.flatMap(r => r.results || []);\n\n if (first) {\n return results[0] || null;\n }\n\n return results;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_REST_QUERY_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { sql },\n },\n error,\n );\n }\n }\n\n async executeQuery(options: SqlQueryOptions): Promise<Record<string, any>[] | Record<string, any> | null> {\n if (this.binding) {\n return this.executeWorkersBindingQuery(options);\n } else if (this.client) {\n return this.executeRestQuery(options);\n } else {\n throw new Error('Neither binding nor client is configured');\n }\n }\n\n private async getTableColumns(tableName: string): Promise<{ name: string; type: string }[]> {\n try {\n const sql = `PRAGMA table_info(${tableName})`;\n const result = await this.executeQuery({ sql });\n\n if (!result || !Array.isArray(result)) {\n return [];\n }\n\n return result.map(row => ({\n name: row.name as string,\n type: row.type as string,\n }));\n } catch (error) {\n this.logger.warn(`Failed to get table columns for ${tableName}:`, error);\n return [];\n }\n }\n\n private serializeValue(value: any): any {\n if (value === null || value === undefined) {\n return null;\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return value;\n }\n\n protected getSqlType(type: StorageColumn['type']): string {\n switch (type) {\n case 'bigint':\n return 'INTEGER'; // SQLite uses INTEGER for all integer sizes\n case 'jsonb':\n return 'TEXT'; // Store JSON as TEXT in SQLite\n default:\n return super.getSqlType(type);\n }\n }\n\n async createTable({\n tableName,\n schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n try {\n const fullTableName = this.getTableName(tableName);\n\n // Build SQL columns from schema\n const columnDefinitions = Object.entries(schema).map(([colName, colDef]) => {\n const type = this.getSqlType(colDef.type);\n const nullable = colDef.nullable === false ? 'NOT NULL' : '';\n const primaryKey = colDef.primaryKey ? 'PRIMARY KEY' : '';\n return `${colName} ${type} ${nullable} ${primaryKey}`.trim();\n });\n\n // Add table-level constraints if needed\n const tableConstraints: string[] = [];\n if (tableName === TABLE_WORKFLOW_SNAPSHOT) {\n tableConstraints.push('UNIQUE (workflow_name, run_id)');\n }\n\n const query = createSqlBuilder().createTable(fullTableName, columnDefinitions, tableConstraints);\n const { sql, params } = query.build();\n await this.executeQuery({ sql, params });\n this.logger.debug(`Created table ${fullTableName}`);\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_CREATE_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n const fullTableName = this.getTableName(tableName);\n const query = createSqlBuilder().delete(fullTableName);\n const { sql, params } = query.build();\n await this.executeQuery({ sql, params });\n this.logger.debug(`Cleared table ${fullTableName}`);\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_CLEAR_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n const fullTableName = this.getTableName(tableName);\n const sql = `DROP TABLE IF EXISTS ${fullTableName}`;\n await this.executeQuery({ sql });\n this.logger.debug(`Dropped table ${fullTableName}`);\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_DROP_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async alterTable(args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n try {\n const fullTableName = this.getTableName(args.tableName);\n const existingColumns = await this.getTableColumns(fullTableName);\n const existingColumnNames = new Set(existingColumns.map(col => col.name));\n\n for (const [columnName, column] of Object.entries(args.schema)) {\n if (!existingColumnNames.has(columnName) && args.ifNotExists.includes(columnName)) {\n const sqlType = this.getSqlType(column.type);\n const defaultValue = this.getDefaultValue(column.type);\n const sql = `ALTER TABLE ${fullTableName} ADD COLUMN ${columnName} ${sqlType} ${defaultValue}`;\n await this.executeQuery({ sql });\n this.logger.debug(`Added column ${columnName} to table ${fullTableName}`);\n }\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_ALTER_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName: args.tableName },\n },\n error,\n );\n }\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n try {\n const fullTableName = this.getTableName(tableName);\n const processedRecord = await this.processRecord(record);\n const columns = Object.keys(processedRecord);\n const values = Object.values(processedRecord);\n\n const query = createSqlBuilder().insert(fullTableName, columns, values);\n const { sql, params } = query.build();\n\n await this.executeQuery({ sql, params });\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n try {\n if (records.length === 0) return;\n\n const fullTableName = this.getTableName(tableName);\n const processedRecords = await Promise.all(records.map(record => this.processRecord(record)));\n const columns = Object.keys(processedRecords[0] || {});\n\n // For batch insert, we need to create multiple INSERT statements\n for (const record of processedRecords) {\n const values = Object.values(record);\n const query = createSqlBuilder().insert(fullTableName, columns, values);\n const { sql, params } = query.build();\n await this.executeQuery({ sql, params });\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_BATCH_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\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 fullTableName = this.getTableName(tableName);\n const query = createSqlBuilder().select('*').from(fullTableName);\n\n // Add WHERE conditions for each key\n let firstKey = true;\n for (const [key, value] of Object.entries(keys)) {\n if (firstKey) {\n query.where(`${key} = ?`, value);\n firstKey = false;\n } else {\n query.andWhere(`${key} = ?`, value);\n }\n }\n\n query.orderBy('createdAt', 'DESC');\n\n query.limit(1);\n const { sql, params } = query.build();\n\n const result = await this.executeQuery({ sql, params, first: true });\n\n if (!result) {\n return null;\n }\n\n // Deserialize JSON fields\n const deserializedResult: Record<string, any> = {};\n for (const [key, value] of Object.entries(result)) {\n deserializedResult[key] = deserializeValue(value);\n }\n\n return deserializedResult as R;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_LOAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async processRecord(record: Record<string, any>): Promise<Record<string, any>> {\n const processed: Record<string, any> = {};\n for (const [key, value] of Object.entries(record)) {\n processed[key] = this.serializeValue(value);\n }\n return processed;\n }\n\n /**\n * Upsert multiple records in a batch operation\n * @param tableName The table to insert into\n * @param records The records to insert\n */\n async batchUpsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n if (records.length === 0) return;\n\n const fullTableName = this.getTableName(tableName);\n\n try {\n // Process records in batches for better performance\n const batchSize = 50; // Adjust based on performance testing\n\n for (let i = 0; i < records.length; i += batchSize) {\n const batch = records.slice(i, i + batchSize);\n\n const recordsToInsert = batch;\n\n // For bulk insert, we need to determine the columns from the first record\n if (recordsToInsert.length > 0) {\n const firstRecord = recordsToInsert[0];\n // Ensure firstRecord is not undefined before calling Object.keys\n const columns = Object.keys(firstRecord || {});\n\n // Create a bulk insert statement\n for (const record of recordsToInsert) {\n // Use type-safe approach to extract values\n const values = columns.map(col => {\n if (!record) return null;\n // Safely access the record properties\n const value = typeof col === 'string' ? record[col as keyof typeof record] : null;\n return this.serializeValue(value);\n });\n\n const recordToUpsert = columns.reduce(\n (acc, col) => {\n if (col !== 'createdAt') acc[col] = `excluded.${col}`;\n return acc;\n },\n {} as Record<string, any>,\n );\n\n const query = createSqlBuilder().insert(fullTableName, columns, values, ['id'], recordToUpsert);\n\n const { sql, params } = query.build();\n await this.executeQuery({ sql, params });\n }\n }\n\n this.logger.debug(\n `Processed batch ${Math.floor(i / batchSize) + 1} of ${Math.ceil(records.length / batchSize)}`,\n );\n }\n\n this.logger.debug(`Successfully batch upserted ${records.length} records into ${tableName}`);\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_BATCH_UPSERT_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to batch upsert into ${tableName}: ${error instanceof Error ? error.message : String(error)}`,\n details: { tableName },\n },\n error,\n );\n }\n }\n}\n","import { ErrorDomain, ErrorCategory, MastraError } from '@mastra/core/error';\nimport type { ScoreRowData, ScoringSource, ValidatedSaveScorePayload } from '@mastra/core/scores';\nimport { saveScorePayloadSchema } from '@mastra/core/scores';\nimport { ScoresStorage, TABLE_SCORERS, safelyParseJSON } from '@mastra/core/storage';\nimport type { StoragePagination, PaginationInfo } from '@mastra/core/storage';\nimport type Cloudflare from 'cloudflare';\nimport { createSqlBuilder } from '../../sql-builder';\nimport type { StoreOperationsD1 } from '../operations';\n\nexport type D1QueryResult = Awaited<ReturnType<Cloudflare['d1']['database']['query']>>['result'];\n\nexport interface D1Client {\n query(args: { sql: string; params: string[] }): Promise<{ result: D1QueryResult }>;\n}\n\nfunction transformScoreRow(row: Record<string, any>): ScoreRowData {\n const deserialized: Record<string, any> = { ...row };\n\n // Reverse serialized JSON fields (stored as strings in D1)\n deserialized.input = safelyParseJSON(row.input);\n deserialized.output = safelyParseJSON(row.output);\n deserialized.scorer = safelyParseJSON(row.scorer);\n deserialized.preprocessStepResult = safelyParseJSON(row.preprocessStepResult);\n deserialized.analyzeStepResult = safelyParseJSON(row.analyzeStepResult);\n deserialized.metadata = safelyParseJSON(row.metadata);\n deserialized.additionalContext = safelyParseJSON(row.additionalContext);\n deserialized.runtimeContext = safelyParseJSON(row.runtimeContext);\n deserialized.entity = safelyParseJSON(row.entity);\n\n deserialized.createdAt = row.createdAtZ || row.createdAt;\n deserialized.updatedAt = row.updatedAtZ || row.updatedAt;\n\n return deserialized as ScoreRowData;\n}\n\nexport class ScoresStorageD1 extends ScoresStorage {\n private operations: StoreOperationsD1;\n\n constructor({ operations }: { operations: StoreOperationsD1 }) {\n super();\n this.operations = operations;\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n try {\n const fullTableName = this.operations.getTableName(TABLE_SCORERS);\n const query = createSqlBuilder().select('*').from(fullTableName).where('id = ?', id);\n const { sql, params } = query.build();\n\n const result = await this.operations.executeQuery({ sql, params, first: true });\n\n if (!result) {\n return null;\n }\n\n return transformScoreRow(result);\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_SCORES_GET_SCORE_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async saveScore(score: Omit<ScoreRowData, 'createdAt' | 'updatedAt'>): Promise<{ score: ScoreRowData }> {\n let parsedScore: ValidatedSaveScorePayload;\n try {\n parsedScore = saveScorePayloadSchema.parse(score);\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_SCORES_SAVE_SCORE_FAILED_INVALID_SCORE_PAYLOAD',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { scoreId: score.id },\n },\n error,\n );\n }\n\n try {\n const id = crypto.randomUUID();\n const fullTableName = this.operations.getTableName(TABLE_SCORERS);\n\n // Serialize all object values to JSON strings\n const serializedRecord: Record<string, any> = {};\n for (const [key, value] of Object.entries(parsedScore)) {\n if (value !== null && value !== undefined) {\n if (typeof value === 'object') {\n serializedRecord[key] = JSON.stringify(value);\n } else {\n serializedRecord[key] = value;\n }\n } else {\n serializedRecord[key] = null;\n }\n }\n\n serializedRecord.id = id;\n serializedRecord.createdAt = new Date().toISOString();\n serializedRecord.updatedAt = new Date().toISOString();\n\n const columns = Object.keys(serializedRecord);\n const values = Object.values(serializedRecord);\n\n const query = createSqlBuilder().insert(fullTableName, columns, values);\n const { sql, params } = query.build();\n\n await this.operations.executeQuery({ sql, params });\n\n const scoreFromDb = await this.getScoreById({ id });\n return { score: scoreFromDb! };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_SCORES_SAVE_SCORE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getScoresByScorerId({\n scorerId,\n entityId,\n entityType,\n source,\n pagination,\n }: {\n scorerId: string;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const fullTableName = this.operations.getTableName(TABLE_SCORERS);\n\n // Get total count\n const countQuery = createSqlBuilder().count().from(fullTableName).where('scorerId = ?', scorerId);\n if (entityId) {\n countQuery.andWhere('entityId = ?', entityId);\n }\n if (entityType) {\n countQuery.andWhere('entityType = ?', entityType);\n }\n if (source) {\n countQuery.andWhere('source = ?', source);\n }\n const countResult = await this.operations.executeQuery(countQuery.build());\n const total = Array.isArray(countResult) ? Number(countResult?.[0]?.count ?? 0) : Number(countResult?.count ?? 0);\n\n if (total === 0) {\n return {\n pagination: {\n total: 0,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore: false,\n },\n scores: [],\n };\n }\n\n // Get paginated results\n const selectQuery = createSqlBuilder().select('*').from(fullTableName).where('scorerId = ?', scorerId);\n\n if (entityId) {\n selectQuery.andWhere('entityId = ?', entityId);\n }\n if (entityType) {\n selectQuery.andWhere('entityType = ?', entityType);\n }\n if (source) {\n selectQuery.andWhere('source = ?', source);\n }\n selectQuery.limit(pagination.perPage).offset(pagination.page * pagination.perPage);\n\n const { sql, params } = selectQuery.build();\n const results = await this.operations.executeQuery({ sql, params });\n\n const scores = Array.isArray(results) ? results.map(transformScoreRow) : [];\n\n return {\n pagination: {\n total,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore: total > (pagination.page + 1) * pagination.perPage,\n },\n scores,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_SCORES_GET_SCORES_BY_SCORER_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const fullTableName = this.operations.getTableName(TABLE_SCORERS);\n\n // Get total count\n const countQuery = createSqlBuilder().count().from(fullTableName).where('runId = ?', runId);\n const countResult = await this.operations.executeQuery(countQuery.build());\n const total = Array.isArray(countResult) ? Number(countResult?.[0]?.count ?? 0) : Number(countResult?.count ?? 0);\n\n if (total === 0) {\n return {\n pagination: {\n total: 0,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore: false,\n },\n scores: [],\n };\n }\n\n // Get paginated results\n const selectQuery = createSqlBuilder()\n .select('*')\n .from(fullTableName)\n .where('runId = ?', runId)\n .limit(pagination.perPage)\n .offset(pagination.page * pagination.perPage);\n\n const { sql, params } = selectQuery.build();\n const results = await this.operations.executeQuery({ sql, params });\n\n const scores = Array.isArray(results) ? results.map(transformScoreRow) : [];\n\n return {\n pagination: {\n total,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore: total > (pagination.page + 1) * pagination.perPage,\n },\n scores,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_SCORES_GET_SCORES_BY_RUN_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const fullTableName = this.operations.getTableName(TABLE_SCORERS);\n\n // Get total count\n const countQuery = createSqlBuilder()\n .count()\n .from(fullTableName)\n .where('entityId = ?', entityId)\n .andWhere('entityType = ?', entityType);\n const countResult = await this.operations.executeQuery(countQuery.build());\n const total = Array.isArray(countResult) ? Number(countResult?.[0]?.count ?? 0) : Number(countResult?.count ?? 0);\n\n if (total === 0) {\n return {\n pagination: {\n total: 0,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore: false,\n },\n scores: [],\n };\n }\n\n // Get paginated results\n const selectQuery = createSqlBuilder()\n .select('*')\n .from(fullTableName)\n .where('entityId = ?', entityId)\n .andWhere('entityType = ?', entityType)\n .limit(pagination.perPage)\n .offset(pagination.page * pagination.perPage);\n\n const { sql, params } = selectQuery.build();\n const results = await this.operations.executeQuery({ sql, params });\n\n const scores = Array.isArray(results) ? results.map(transformScoreRow) : [];\n\n return {\n pagination: {\n total,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore: total > (pagination.page + 1) * pagination.perPage,\n },\n scores,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_SCORES_GET_SCORES_BY_ENTITY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const fullTableName = this.operations.getTableName(TABLE_SCORERS);\n\n // Get total count\n const countQuery = createSqlBuilder()\n .count()\n .from(fullTableName)\n .where('traceId = ?', traceId)\n .andWhere('spanId = ?', spanId);\n const countResult = await this.operations.executeQuery(countQuery.build());\n const total = Array.isArray(countResult) ? Number(countResult?.[0]?.count ?? 0) : Number(countResult?.count ?? 0);\n\n if (total === 0) {\n return {\n pagination: {\n total: 0,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore: false,\n },\n scores: [],\n };\n }\n\n // Get paginated results\n const limit = pagination.perPage + 1;\n const selectQuery = createSqlBuilder()\n .select('*')\n .from(fullTableName)\n .where('traceId = ?', traceId)\n .andWhere('spanId = ?', spanId)\n .orderBy('createdAt', 'DESC')\n .limit(limit)\n .offset(pagination.page * pagination.perPage);\n\n const { sql, params } = selectQuery.build();\n const results = await this.operations.executeQuery({ sql, params });\n const rows = Array.isArray(results) ? results : [];\n\n const scores = rows.slice(0, pagination.perPage).map(transformScoreRow);\n\n return {\n pagination: {\n total,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore: rows.length > pagination.perPage,\n },\n scores,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_SCORES_GET_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 type { PaginationInfo, StorageGetTracesArg, StorageGetTracesPaginatedArg } from '@mastra/core/storage';\nimport { TABLE_TRACES, TracesStorage } from '@mastra/core/storage';\nimport type { Trace } from '@mastra/core/telemetry';\nimport { createSqlBuilder } from '../../sql-builder';\nimport type { StoreOperationsD1 } from '../operations';\nimport { deserializeValue } from '../utils';\n\nfunction isArrayOfRecords(value: any): value is Record<string, any>[] {\n return value && Array.isArray(value) && value.length > 0;\n}\n\nexport class TracesStorageD1 extends TracesStorage {\n private operations: StoreOperationsD1;\n\n constructor({ operations }: { operations: StoreOperationsD1 }) {\n super();\n this.operations = operations;\n }\n\n async getTraces(args: StorageGetTracesArg): Promise<Trace[]> {\n // Convert the old interface to the new paginated interface\n const paginatedArgs: StorageGetTracesPaginatedArg = {\n name: args.name,\n scope: args.scope,\n page: args.page,\n perPage: args.perPage,\n attributes: args.attributes,\n filters: args.filters,\n dateRange:\n args.fromDate || args.toDate\n ? {\n start: args.fromDate,\n end: args.toDate,\n }\n : undefined,\n };\n\n try {\n const result = await this.getTracesPaginated(paginatedArgs);\n return result.traces;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_GET_TRACES_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to retrieve traces: ${error instanceof Error ? error.message : String(error)}`,\n details: {\n name: args.name ?? '',\n scope: args.scope ?? '',\n },\n },\n error,\n );\n }\n }\n\n async getTracesPaginated(args: StorageGetTracesPaginatedArg): Promise<PaginationInfo & { traces: Trace[] }> {\n const { name, scope, page = 0, perPage = 100, attributes, dateRange } = args;\n const fromDate = dateRange?.start;\n const toDate = dateRange?.end;\n const fullTableName = this.operations.getTableName(TABLE_TRACES);\n\n try {\n const dataQuery = createSqlBuilder().select('*').from(fullTableName).where('1=1');\n const countQuery = createSqlBuilder().count().from(fullTableName).where('1=1');\n\n if (name) {\n dataQuery.andWhere('name LIKE ?', `%${name}%`);\n countQuery.andWhere('name LIKE ?', `%${name}%`);\n }\n\n if (scope) {\n dataQuery.andWhere('scope = ?', scope);\n countQuery.andWhere('scope = ?', scope);\n }\n\n if (attributes && Object.keys(attributes).length > 0) {\n for (const [key, value] of Object.entries(attributes)) {\n dataQuery.jsonLike('attributes', key, value);\n countQuery.jsonLike('attributes', key, value);\n }\n }\n\n if (fromDate) {\n const fromDateStr = fromDate instanceof Date ? fromDate.toISOString() : fromDate;\n dataQuery.andWhere('createdAt >= ?', fromDateStr);\n countQuery.andWhere('createdAt >= ?', fromDateStr);\n }\n\n if (toDate) {\n const toDateStr = toDate instanceof Date ? toDate.toISOString() : toDate;\n dataQuery.andWhere('createdAt <= ?', toDateStr);\n countQuery.andWhere('createdAt <= ?', toDateStr);\n }\n\n const allDataResult = await this.operations.executeQuery(\n createSqlBuilder().select('*').from(fullTableName).where('1=1').build(),\n );\n\n console.info('allDataResult', allDataResult);\n\n const countResult = (await this.operations.executeQuery(countQuery.build())) as {\n count: number;\n }[];\n const total = Number(countResult?.[0]?.count ?? 0);\n\n dataQuery\n .orderBy('startTime', 'DESC')\n .limit(perPage)\n .offset(page * perPage);\n\n const results = await this.operations.executeQuery(dataQuery.build());\n\n const traces = isArrayOfRecords(results)\n ? results.map(\n (trace: Record<string, any>) =>\n ({\n ...trace,\n attributes: deserializeValue(trace.attributes, 'jsonb'),\n status: deserializeValue(trace.status, 'jsonb'),\n events: deserializeValue(trace.events, 'jsonb'),\n links: deserializeValue(trace.links, 'jsonb'),\n other: deserializeValue(trace.other, 'jsonb'),\n }) as Trace,\n )\n : [];\n\n return {\n traces,\n total,\n page,\n perPage,\n hasMore: page * perPage + traces.length < total,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_GET_TRACES_PAGINATED_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to retrieve traces: ${error instanceof Error ? error.message : String(error)}`,\n details: { name: name ?? '', scope: scope ?? '' },\n },\n error,\n );\n this.logger?.error(mastraError.toString());\n this.logger?.trackException(mastraError);\n return { traces: [], total: 0, page, perPage, hasMore: false };\n }\n }\n\n async batchTraceInsert({ records }: { records: Record<string, any>[] }): Promise<void> {\n this.logger.debug('Batch inserting traces', { count: records.length });\n await this.operations.batchInsert({\n tableName: TABLE_TRACES,\n records,\n });\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { WorkflowRun, WorkflowRuns } from '@mastra/core/storage';\nimport { ensureDate, TABLE_WORKFLOW_SNAPSHOT, WorkflowsStorage } from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport { createSqlBuilder } from '../../sql-builder';\nimport type { SqlParam } from '../../sql-builder';\nimport type { StoreOperationsD1 } from '../operations';\nimport { isArrayOfRecords } from '../utils';\n\nexport class WorkflowsStorageD1 extends WorkflowsStorage {\n private operations: StoreOperationsD1;\n\n constructor({ operations }: { operations: StoreOperationsD1 }) {\n super();\n this.operations = operations;\n }\n\n updateWorkflowResults(\n {\n // workflowName,\n // runId,\n // stepId,\n // result,\n // runtimeContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n runtimeContext: Record<string, any>;\n },\n ): Promise<Record<string, StepResult<any, any, any, any>>> {\n throw new Error('Method not implemented.');\n }\n updateWorkflowState(\n {\n // workflowName,\n // runId,\n // opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n },\n ): Promise<WorkflowRunState | undefined> {\n throw new Error('Method not implemented.');\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n const fullTableName = this.operations.getTableName(TABLE_WORKFLOW_SNAPSHOT);\n const now = new Date().toISOString();\n\n const currentSnapshot = await this.operations.load({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n const persisting = currentSnapshot\n ? {\n ...currentSnapshot,\n resourceId,\n snapshot: JSON.stringify(snapshot),\n updatedAt: now,\n }\n : {\n workflow_name: workflowName,\n run_id: runId,\n resourceId,\n snapshot: snapshot as Record<string, any>,\n createdAt: now,\n updatedAt: now,\n };\n\n // Process record for SQL insertion\n const processedRecord = await this.operations.processRecord(persisting);\n\n const columns = Object.keys(processedRecord);\n const values = Object.values(processedRecord);\n\n // Specify which columns to update on conflict (all except PKs)\n const updateMap: Record<string, string> = {\n snapshot: 'excluded.snapshot',\n updatedAt: 'excluded.updatedAt',\n };\n\n this.logger.debug('Persisting workflow snapshot', { workflowName, runId });\n\n // Use the new insert method with ON CONFLICT\n const query = createSqlBuilder().insert(fullTableName, columns, values, ['workflow_name', 'run_id'], updateMap);\n\n const { sql, params } = query.build();\n\n try {\n await this.operations.executeQuery({ sql, params });\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_PERSIST_WORKFLOW_SNAPSHOT_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to persist workflow snapshot: ${error instanceof Error ? error.message : String(error)}`,\n details: { workflowName, runId },\n },\n error,\n );\n }\n }\n\n async loadWorkflowSnapshot(params: { workflowName: string; runId: string }): Promise<WorkflowRunState | null> {\n const { workflowName, runId } = params;\n\n this.logger.debug('Loading workflow snapshot', { workflowName, runId });\n\n try {\n const d = await this.operations.load<{ snapshot: unknown }>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: {\n workflow_name: workflowName,\n run_id: runId,\n },\n });\n\n return d ? (d.snapshot as WorkflowRunState) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_LOAD_WORKFLOW_SNAPSHOT_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to load workflow snapshot: ${error instanceof Error ? error.message : String(error)}`,\n details: { workflowName, runId },\n },\n error,\n );\n }\n }\n\n private parseWorkflowRun(row: 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 // If parsing fails, return the raw snapshot string\n console.warn(`Failed to parse snapshot for workflow ${row.workflow_name}: ${e}`);\n }\n }\n\n return {\n workflowName: row.workflow_name,\n runId: row.run_id,\n snapshot: parsedSnapshot,\n createdAt: ensureDate(row.createdAt)!,\n updatedAt: ensureDate(row.updatedAt)!,\n resourceId: row.resourceId,\n };\n }\n\n async getWorkflowRuns({\n workflowName,\n fromDate,\n toDate,\n limit,\n offset,\n resourceId,\n }: {\n workflowName?: string;\n fromDate?: Date;\n toDate?: Date;\n limit?: number;\n offset?: number;\n resourceId?: string;\n } = {}): Promise<WorkflowRuns> {\n const fullTableName = this.operations.getTableName(TABLE_WORKFLOW_SNAPSHOT);\n try {\n const builder = createSqlBuilder().select().from(fullTableName);\n const countBuilder = createSqlBuilder().count().from(fullTableName);\n\n if (workflowName) builder.whereAnd('workflow_name = ?', workflowName);\n if (resourceId) {\n const hasResourceId = await this.operations.hasColumn(fullTableName, 'resourceId');\n if (hasResourceId) {\n builder.whereAnd('resourceId = ?', resourceId);\n countBuilder.whereAnd('resourceId = ?', resourceId);\n } else {\n console.warn(`[${fullTableName}] resourceId column not found. Skipping resourceId filter.`);\n }\n }\n if (fromDate) {\n builder.whereAnd('createdAt >= ?', fromDate instanceof Date ? fromDate.toISOString() : fromDate);\n countBuilder.whereAnd('createdAt >= ?', fromDate instanceof Date ? fromDate.toISOString() : fromDate);\n }\n if (toDate) {\n builder.whereAnd('createdAt <= ?', toDate instanceof Date ? toDate.toISOString() : toDate);\n countBuilder.whereAnd('createdAt <= ?', toDate instanceof Date ? toDate.toISOString() : toDate);\n }\n\n builder.orderBy('createdAt', 'DESC');\n if (typeof limit === 'number') builder.limit(limit);\n if (typeof offset === 'number') builder.offset(offset);\n\n const { sql, params } = builder.build();\n\n let total = 0;\n\n if (limit !== undefined && offset !== undefined) {\n const { sql: countSql, params: countParams } = countBuilder.build();\n const countResult = await this.operations.executeQuery({\n sql: countSql,\n params: countParams,\n first: true,\n });\n total = Number((countResult as Record<string, any>)?.count ?? 0);\n }\n\n const results = await this.operations.executeQuery({ sql, params });\n const runs = (isArrayOfRecords(results) ? results : []).map((row: any) => this.parseWorkflowRun(row));\n return { runs, total: total || runs.length };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_GET_WORKFLOW_RUNS_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to retrieve workflow runs: ${error instanceof Error ? error.message : String(error)}`,\n details: {\n workflowName: workflowName ?? '',\n resourceId: resourceId ?? '',\n },\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 const fullTableName = this.operations.getTableName(TABLE_WORKFLOW_SNAPSHOT);\n try {\n const conditions: string[] = [];\n const params: SqlParam[] = [];\n if (runId) {\n conditions.push('run_id = ?');\n params.push(runId);\n }\n if (workflowName) {\n conditions.push('workflow_name = ?');\n params.push(workflowName);\n }\n const whereClause = conditions.length > 0 ? 'WHERE ' + conditions.join(' AND ') : '';\n const sql = `SELECT * FROM ${fullTableName} ${whereClause} ORDER BY createdAt DESC LIMIT 1`;\n const result = await this.operations.executeQuery({ sql, params, first: true });\n if (!result) return null;\n return this.parseWorkflowRun(result);\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_GET_WORKFLOW_RUN_BY_ID_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to retrieve workflow run by ID: ${error instanceof Error ? error.message : String(error)}`,\n details: { runId, workflowName: workflowName ?? '' },\n },\n error,\n );\n }\n }\n}\n","import type { D1Database } from '@cloudflare/workers-types';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { MastraError, ErrorDomain, ErrorCategory } from '@mastra/core/error';\nimport type { StorageThreadType, MastraMessageV1, MastraMessageV2 } from '@mastra/core/memory';\nimport type { ScoreRowData, ScoringSource } from '@mastra/core/scores';\nimport { MastraStorage } from '@mastra/core/storage';\nimport type {\n EvalRow,\n PaginationInfo,\n StorageColumn,\n StorageGetMessagesArg,\n StorageGetTracesPaginatedArg,\n StorageResourceType,\n TABLE_NAMES,\n WorkflowRun,\n StoragePagination,\n WorkflowRuns,\n StorageDomains,\n PaginationArgs,\n} from '@mastra/core/storage';\nimport type { Trace } from '@mastra/core/telemetry';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport Cloudflare from 'cloudflare';\nimport { LegacyEvalsStorageD1 } from './domains/legacy-evals';\nimport { MemoryStorageD1 } from './domains/memory';\nimport { StoreOperationsD1 } from './domains/operations';\nimport { ScoresStorageD1 } from './domains/scores';\nimport { TracesStorageD1 } from './domains/traces';\nimport { WorkflowsStorageD1 } from './domains/workflows';\n\n/**\n * Configuration for D1 using the REST API\n */\nexport interface D1Config {\n /** Cloudflare account ID */\n accountId: string;\n /** Cloudflare API token with D1 access */\n apiToken: string;\n /** D1 database ID */\n databaseId: string;\n /** Optional prefix for table names */\n tablePrefix?: string;\n}\n\nexport interface D1ClientConfig {\n /** Optional prefix for table names */\n tablePrefix?: string;\n /** D1 Client */\n client: D1Client;\n}\n\n/**\n * Configuration for D1 using the Workers Binding API\n */\nexport interface D1WorkersConfig {\n /** D1 database binding from Workers environment */\n binding: D1Database; // D1Database binding from Workers\n /** Optional prefix for table names */\n tablePrefix?: string;\n}\n\n/**\n * Combined configuration type supporting both REST API and Workers Binding API\n */\nexport type D1StoreConfig = D1Config | D1WorkersConfig | D1ClientConfig;\n\nexport type D1QueryResult = Awaited<ReturnType<Cloudflare['d1']['database']['query']>>['result'];\nexport interface D1Client {\n query(args: { sql: string; params: string[] }): Promise<{ result: D1QueryResult }>;\n}\n\nexport class D1Store extends MastraStorage {\n private client?: D1Client;\n private binding?: D1Database; // D1Database binding\n private tablePrefix: string;\n\n stores: StorageDomains;\n\n /**\n * Creates a new D1Store instance\n * @param config Configuration for D1 access (either REST API or Workers Binding API)\n */\n constructor(config: D1StoreConfig) {\n try {\n super({ name: 'D1' });\n\n if (config.tablePrefix && !/^[a-zA-Z0-9_]*$/.test(config.tablePrefix)) {\n throw new Error('Invalid tablePrefix: only letters, numbers, and underscores are allowed.');\n }\n\n this.tablePrefix = config.tablePrefix || '';\n\n // Determine which API to use based on provided config\n if ('binding' in config) {\n if (!config.binding) {\n throw new Error('D1 binding is required when using Workers Binding API');\n }\n this.binding = config.binding;\n this.logger.info('Using D1 Workers Binding API');\n } else if ('client' in config) {\n if (!config.client) {\n throw new Error('D1 client is required when using D1ClientConfig');\n }\n this.client = config.client;\n this.logger.info('Using D1 Client');\n } else {\n if (!config.accountId || !config.databaseId || !config.apiToken) {\n throw new Error('accountId, databaseId, and apiToken are required when using REST API');\n }\n const cfClient = new Cloudflare({\n apiToken: config.apiToken,\n });\n this.client = {\n query: ({ sql, params }) => {\n return cfClient.d1.database.query(config.databaseId, {\n account_id: config.accountId,\n sql,\n params,\n });\n },\n };\n\n this.logger.info('Using D1 REST API');\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_INITIALIZATION_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: 'Error initializing D1Store',\n },\n error,\n );\n }\n\n const operations = new StoreOperationsD1({\n client: this.client,\n binding: this.binding,\n tablePrefix: this.tablePrefix,\n });\n\n const scores = new ScoresStorageD1({\n operations,\n });\n\n const legacyEvals = new LegacyEvalsStorageD1({\n operations,\n });\n\n const traces = new TracesStorageD1({\n operations,\n });\n\n const workflows = new WorkflowsStorageD1({\n operations,\n });\n\n const memory = new MemoryStorageD1({\n operations,\n });\n\n this.stores = {\n operations,\n scores,\n legacyEvals,\n traces,\n workflows,\n memory,\n };\n }\n\n get supports() {\n return {\n selectByIncludeResourceScope: true,\n resourceWorkingMemory: true,\n hasColumn: true,\n createTable: true,\n deleteMessages: false,\n getScoresBySpan: true,\n };\n }\n\n async createTable({\n tableName,\n schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n return this.stores.operations.createTable({ tableName, schema });\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 return this.stores.operations.alterTable({ tableName, schema, ifNotExists });\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.stores.operations.clearTable({ tableName });\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.stores.operations.dropTable({ tableName });\n }\n\n async hasColumn(table: string, column: string): Promise<boolean> {\n return this.stores.operations.hasColumn(table, column);\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n return this.stores.operations.insert({ tableName, record });\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, string> }): Promise<R | null> {\n return this.stores.operations.load({ tableName, keys });\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n return this.stores.memory.getThreadById({ threadId });\n }\n\n /**\n * @deprecated use getThreadsByResourceIdPaginated instead\n */\n async getThreadsByResourceId({ resourceId }: { resourceId: string }): Promise<StorageThreadType[]> {\n return this.stores.memory.getThreadsByResourceId({ resourceId });\n }\n\n public async getThreadsByResourceIdPaginated(args: {\n resourceId: string;\n page: number;\n perPage: number;\n }): Promise<PaginationInfo & { threads: StorageThreadType[] }> {\n return this.stores.memory.getThreadsByResourceIdPaginated(args);\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n return this.stores.memory.saveThread({ 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 return this.stores.memory.updateThread({ id, title, metadata });\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n return this.stores.memory.deleteThread({ threadId });\n }\n\n async saveMessages(args: { messages: MastraMessageV1[]; format?: undefined | 'v1' }): Promise<MastraMessageV1[]>;\n async saveMessages(args: { messages: MastraMessageV2[]; format: 'v2' }): Promise<MastraMessageV2[]>;\n async saveMessages(\n args: { messages: MastraMessageV1[]; format?: undefined | 'v1' } | { messages: MastraMessageV2[]; format: 'v2' },\n ): Promise<MastraMessageV2[] | MastraMessageV1[]> {\n return this.stores.memory.saveMessages(args);\n }\n\n /**\n * @deprecated use getMessagesPaginated instead\n */\n public async getMessages(args: StorageGetMessagesArg & { format?: 'v1' }): Promise<MastraMessageV1[]>;\n public async getMessages(args: StorageGetMessagesArg & { format: 'v2' }): Promise<MastraMessageV2[]>;\n public async getMessages({\n threadId,\n selectBy,\n format,\n }: StorageGetMessagesArg & { format?: 'v1' | 'v2' }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n return this.stores.memory.getMessages({ threadId, selectBy, format });\n }\n\n async getMessagesById({ messageIds, format }: { messageIds: string[]; format: 'v1' }): Promise<MastraMessageV1[]>;\n async getMessagesById({ messageIds, format }: { messageIds: string[]; format?: 'v2' }): Promise<MastraMessageV2[]>;\n async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v1' | 'v2';\n }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n return this.stores.memory.getMessagesById({ messageIds, format });\n }\n\n public async getMessagesPaginated({\n threadId,\n selectBy,\n format,\n }: StorageGetMessagesArg & { format?: 'v1' | 'v2' }): Promise<\n PaginationInfo & { messages: MastraMessageV1[] | MastraMessageV2[] }\n > {\n return this.stores.memory.getMessagesPaginated({ threadId, selectBy, format });\n }\n\n async updateWorkflowResults({\n workflowName,\n runId,\n stepId,\n result,\n runtimeContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n runtimeContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n return this.stores.workflows.updateWorkflowResults({ workflowName, runId, stepId, result, runtimeContext });\n }\n\n async updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n }): Promise<WorkflowRunState | undefined> {\n return this.stores.workflows.updateWorkflowState({ workflowName, runId, opts });\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n return this.stores.workflows.persistWorkflowSnapshot({ workflowName, runId, resourceId, snapshot });\n }\n\n async loadWorkflowSnapshot(params: { workflowName: string; runId: string }): Promise<WorkflowRunState | null> {\n return this.stores.workflows.loadWorkflowSnapshot(params);\n }\n\n async getWorkflowRuns({\n workflowName,\n fromDate,\n toDate,\n limit,\n offset,\n resourceId,\n }: {\n workflowName?: string;\n fromDate?: Date;\n toDate?: Date;\n limit?: number;\n offset?: number;\n resourceId?: string;\n } = {}): Promise<WorkflowRuns> {\n return this.stores.workflows.getWorkflowRuns({ workflowName, fromDate, toDate, limit, offset, resourceId });\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string;\n }): Promise<WorkflowRun | null> {\n return this.stores.workflows.getWorkflowRunById({ runId, workflowName });\n }\n\n /**\n * Insert multiple records in a batch operation\n * @param tableName The table to insert into\n * @param records The records to insert\n */\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n return this.stores.operations.batchInsert({ tableName, records });\n }\n\n /**\n * @deprecated use getTracesPaginated instead\n */\n async getTraces(args: {\n name?: string;\n scope?: string;\n page: number;\n perPage: number;\n attributes?: Record<string, string>;\n fromDate?: Date;\n toDate?: Date;\n }): Promise<Trace[]> {\n return this.stores.traces.getTraces(args);\n }\n\n public async getTracesPaginated(args: StorageGetTracesPaginatedArg): Promise<PaginationInfo & { traces: Trace[] }> {\n return this.stores.traces.getTracesPaginated(args);\n }\n\n /**\n * @deprecated use getEvals instead\n */\n async getEvalsByAgentName(agentName: string, type?: 'test' | 'live'): Promise<EvalRow[]> {\n return this.stores.legacyEvals.getEvalsByAgentName(agentName, type);\n }\n\n async getEvals(\n options: {\n agentName?: string;\n type?: 'test' | 'live';\n } & PaginationArgs,\n ): Promise<PaginationInfo & { evals: EvalRow[] }> {\n return this.stores.legacyEvals.getEvals(options);\n }\n\n async updateMessages(_args: {\n messages: Partial<Omit<MastraMessageV2, 'createdAt'>> &\n {\n id: string;\n content?: {\n metadata?: MastraMessageContentV2['metadata'];\n content?: MastraMessageContentV2['content'];\n };\n }[];\n }): Promise<MastraMessageV2[]> {\n return this.stores.memory.updateMessages(_args);\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n return this.stores.memory.getResourceById({ resourceId });\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n return this.stores.memory.saveResource({ 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 return this.stores.memory.updateResource({ resourceId, workingMemory, metadata });\n }\n\n async getScoreById({ id: _id }: { id: string }): Promise<ScoreRowData | null> {\n return this.stores.scores.getScoreById({ id: _id });\n }\n\n async saveScore(_score: ScoreRowData): Promise<{ score: ScoreRowData }> {\n return this.stores.scores.saveScore(_score);\n }\n\n async getScoresByRunId({\n runId: _runId,\n pagination: _pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByRunId({ runId: _runId, pagination: _pagination });\n }\n\n async getScoresByEntityId({\n entityId: _entityId,\n entityType: _entityType,\n pagination: _pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByEntityId({\n entityId: _entityId,\n entityType: _entityType,\n pagination: _pagination,\n });\n }\n\n async getScoresByScorerId({\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<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByScorerId({ scorerId, pagination, entityId, entityType, source });\n }\n\n async getScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresBySpan({ traceId, spanId, pagination });\n }\n\n /**\n * Close the database connection\n * No explicit cleanup needed for D1 in either REST or Workers Binding mode\n */\n async close(): Promise<void> {\n this.logger.debug('Closing D1 connection');\n // No explicit cleanup needed for D1\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/storage/sql-builder.ts","../src/storage/domains/utils.ts","../src/storage/domains/memory/index.ts","../src/storage/domains/operations/index.ts","../src/storage/domains/scores/index.ts","../src/storage/domains/workflows/index.ts","../src/storage/index.ts"],"names":["parseSqlIdentifier","MemoryStorage","TABLE_RESOURCES","ensureDate","error","MastraError","ErrorDomain","ErrorCategory","TABLE_THREADS","normalizePerPage","calculatePagination","TABLE_MESSAGES","MessageList","serializeDate","StoreOperations","TABLE_WORKFLOW_SNAPSHOT","safelyParseJSON","ScoresStorage","TABLE_SCORERS","saveScorePayloadSchema","WorkflowsStorage","MastraStorage","Cloudflare"],"mappings":"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","file":"index.cjs","sourcesContent":["import { parseSqlIdentifier } from '@mastra/core/utils';\n\n/**\n * Type definition for SQL query parameters\n */\nexport type SqlParam = string | number | boolean | null | undefined;\n\n/**\n * Interface for SQL query options with generic type support\n */\nexport interface SqlQueryOptions {\n /** SQL query to execute */\n sql: string;\n /** Parameters to bind to the query */\n params?: SqlParam[];\n /** Whether to return only the first result */\n first?: boolean;\n}\n\n/**\n * SQL Builder class for constructing type-safe SQL queries\n * This helps create maintainable and secure SQL queries with proper parameter handling\n */\nexport class SqlBuilder {\n private sql: string = '';\n private params: SqlParam[] = [];\n private whereAdded: boolean = false;\n\n // Basic query building\n select(columns?: string | string[]): SqlBuilder {\n if (!columns || (Array.isArray(columns) && columns.length === 0)) {\n this.sql = 'SELECT *';\n } else {\n const cols = Array.isArray(columns) ? columns : [columns];\n const parsedCols = cols.map(col => parseSelectIdentifier(col));\n this.sql = `SELECT ${parsedCols.join(', ')}`;\n }\n return this;\n }\n\n from(table: string): SqlBuilder {\n const parsedTableName = parseSqlIdentifier(table, 'table name');\n this.sql += ` FROM ${parsedTableName}`;\n return this;\n }\n\n /**\n * Add a WHERE clause to the query\n * @param condition The condition to add\n * @param params Parameters to bind to the condition\n */\n where(condition: string, ...params: SqlParam[]): SqlBuilder {\n this.sql += ` WHERE ${condition}`;\n this.params.push(...params);\n this.whereAdded = true;\n return this;\n }\n\n /**\n * Add a WHERE clause if it hasn't been added yet, otherwise add an AND clause\n * @param condition The condition to add\n * @param params Parameters to bind to the condition\n */\n whereAnd(condition: string, ...params: SqlParam[]): SqlBuilder {\n if (this.whereAdded) {\n return this.andWhere(condition, ...params);\n } else {\n return this.where(condition, ...params);\n }\n }\n\n andWhere(condition: string, ...params: SqlParam[]): SqlBuilder {\n this.sql += ` AND ${condition}`;\n this.params.push(...params);\n return this;\n }\n\n orWhere(condition: string, ...params: SqlParam[]): SqlBuilder {\n this.sql += ` OR ${condition}`;\n this.params.push(...params);\n return this;\n }\n\n orderBy(column: string, direction: 'ASC' | 'DESC' = 'ASC'): SqlBuilder {\n const parsedColumn = parseSqlIdentifier(column, 'column name');\n if (!['ASC', 'DESC'].includes(direction)) {\n throw new Error(`Invalid sort direction: ${direction}`);\n }\n this.sql += ` ORDER BY ${parsedColumn} ${direction}`;\n return this;\n }\n\n limit(count: number): SqlBuilder {\n this.sql += ` LIMIT ?`;\n this.params.push(count);\n return this;\n }\n\n offset(count: number): SqlBuilder {\n this.sql += ` OFFSET ?`;\n this.params.push(count);\n return this;\n }\n\n count(): SqlBuilder {\n this.sql += 'SELECT COUNT(*) AS count';\n return this;\n }\n\n /**\n * Insert a row, or update specific columns on conflict (upsert).\n * @param table Table name\n * @param columns Columns to insert\n * @param values Values to insert\n * @param conflictColumns Columns to check for conflict (usually PK or UNIQUE)\n * @param updateMap Object mapping columns to update to their new value (e.g. { name: 'excluded.name' })\n */\n insert(\n table: string,\n columns: string[],\n values: SqlParam[],\n conflictColumns?: string[],\n updateMap?: Record<string, string>,\n ): SqlBuilder {\n const parsedTableName = parseSqlIdentifier(table, 'table name');\n const parsedColumns = columns.map(col => parseSqlIdentifier(col, 'column name'));\n const placeholders = parsedColumns.map(() => '?').join(', ');\n\n if (conflictColumns && updateMap) {\n const parsedConflictColumns = conflictColumns.map(col => parseSqlIdentifier(col, 'column name'));\n const updateClause = Object.entries(updateMap)\n .map(([col, expr]) => `${col} = ${expr}`)\n .join(', ');\n this.sql = `INSERT INTO ${parsedTableName} (${parsedColumns.join(', ')}) VALUES (${placeholders}) ON CONFLICT(${parsedConflictColumns.join(', ')}) DO UPDATE SET ${updateClause}`;\n this.params.push(...values);\n return this;\n }\n\n this.sql = `INSERT INTO ${parsedTableName} (${parsedColumns.join(', ')}) VALUES (${placeholders})`;\n this.params.push(...values);\n\n return this;\n }\n\n // Update operations\n update(table: string, columns: string[], values: SqlParam[]): SqlBuilder {\n const parsedTableName = parseSqlIdentifier(table, 'table name');\n const parsedColumns = columns.map(col => parseSqlIdentifier(col, 'column name'));\n const setClause = parsedColumns.map(col => `${col} = ?`).join(', ');\n this.sql = `UPDATE ${parsedTableName} SET ${setClause}`;\n this.params.push(...values);\n return this;\n }\n\n // Delete operations\n delete(table: string): SqlBuilder {\n const parsedTableName = parseSqlIdentifier(table, 'table name');\n this.sql = `DELETE FROM ${parsedTableName}`;\n return this;\n }\n\n /**\n * Create a table if it doesn't exist\n * @param table The table name\n * @param columnDefinitions The column definitions as an array of strings\n * @param tableConstraints Optional constraints for the table\n * @returns The builder instance\n */\n createTable(table: string, columnDefinitions: string[], tableConstraints?: string[]): SqlBuilder {\n const parsedTableName = parseSqlIdentifier(table, 'table name');\n // Naive validation: check the first word of each column definition\n const parsedColumnDefinitions = columnDefinitions.map(def => {\n const colName = def.split(/\\s+/)[0];\n if (!colName) throw new Error('Empty column name in definition');\n parseSqlIdentifier(colName, 'column name');\n return def;\n });\n const columns = parsedColumnDefinitions.join(', ');\n const constraints = tableConstraints && tableConstraints.length > 0 ? ', ' + tableConstraints.join(', ') : '';\n this.sql = `CREATE TABLE IF NOT EXISTS ${parsedTableName} (${columns}${constraints})`;\n return this;\n }\n\n /**\n * Check if an index exists in the database\n * @param indexName The name of the index to check\n * @param tableName The table the index is on\n * @returns The builder instance\n */\n checkIndexExists(indexName: string, tableName: string): SqlBuilder {\n this.sql = `SELECT name FROM sqlite_master WHERE type='index' AND name=? AND tbl_name=?`;\n this.params.push(indexName, tableName);\n return this;\n }\n\n /**\n * Create an index if it doesn't exist\n * @param indexName The name of the index to create\n * @param tableName The table to create the index on\n * @param columnName The column to index\n * @param indexType Optional index type (e.g., 'UNIQUE')\n * @returns The builder instance\n */\n createIndex(indexName: string, tableName: string, columnName: string, indexType: string = ''): SqlBuilder {\n const parsedIndexName = parseSqlIdentifier(indexName, 'index name');\n const parsedTableName = parseSqlIdentifier(tableName, 'table name');\n const parsedColumnName = parseSqlIdentifier(columnName, 'column name');\n this.sql = `CREATE ${indexType ? indexType + ' ' : ''}INDEX IF NOT EXISTS ${parsedIndexName} ON ${parsedTableName}(${parsedColumnName})`;\n return this;\n }\n\n /**\n * Add a LIKE condition to the query\n * @param column The column to check\n * @param value The value to match (will be wrapped with % for LIKE)\n * @param exact If true, will not add % wildcards\n */\n like(column: string, value: string, exact: boolean = false): SqlBuilder {\n const parsedColumnName = parseSqlIdentifier(column, 'column name');\n const likeValue = exact ? value : `%${value}%`;\n if (this.whereAdded) {\n this.sql += ` AND ${parsedColumnName} LIKE ?`;\n } else {\n this.sql += ` WHERE ${parsedColumnName} LIKE ?`;\n this.whereAdded = true;\n }\n this.params.push(likeValue);\n return this;\n }\n\n /**\n * Add a JSON LIKE condition for searching in JSON fields\n * @param column The JSON column to search in\n * @param key The JSON key to match\n * @param value The value to match\n */\n jsonLike(column: string, key: string, value: string): SqlBuilder {\n const parsedColumnName = parseSqlIdentifier(column, 'column name');\n const parsedKey = parseSqlIdentifier(key, 'key name');\n const jsonPattern = `%\"${parsedKey}\":\"${value}\"%`;\n if (this.whereAdded) {\n this.sql += ` AND ${parsedColumnName} LIKE ?`;\n } else {\n this.sql += ` WHERE ${parsedColumnName} LIKE ?`;\n this.whereAdded = true;\n }\n this.params.push(jsonPattern);\n return this;\n }\n\n /**\n * Get the built query\n * @returns Object containing the SQL string and parameters array\n */\n build(): { sql: string; params: SqlParam[] } {\n return {\n sql: this.sql,\n params: this.params,\n };\n }\n\n /**\n * Reset the builder for reuse\n * @returns The reset builder instance\n */\n reset(): SqlBuilder {\n this.sql = '';\n this.params = [];\n this.whereAdded = false;\n return this;\n }\n}\n\n// Factory function for easier creation\nexport function createSqlBuilder(): SqlBuilder {\n return new SqlBuilder();\n}\n\n/** Represents a validated SQL SELECT column identifier (or '*', optionally with 'AS alias'). */\ntype SelectIdentifier = string & { __brand: 'SelectIdentifier' };\n\nconst SQL_IDENTIFIER_PATTERN = /^[a-zA-Z0-9_]+(\\s+AS\\s+[a-zA-Z0-9_]+)?$/;\n\n/**\n * Parses and returns a valid SQL SELECT column identifier.\n * Allows a single identifier (letters, numbers, underscores), or '*', optionally with 'AS alias'.\n *\n * @param column - The column identifier string to parse.\n * @returns The validated column identifier as a branded type.\n * @throws {Error} If invalid.\n *\n * @example\n * const col = parseSelectIdentifier('user_id'); // Ok\n * parseSelectIdentifier('user_id AS uid'); // Ok\n * parseSelectIdentifier('*'); // Ok\n * parseSelectIdentifier('user id'); // Throws error\n */\nexport function parseSelectIdentifier(column: string): SelectIdentifier {\n if (column !== '*' && !SQL_IDENTIFIER_PATTERN.test(column)) {\n throw new Error(\n `Invalid column name: \"${column}\". Must be \"*\" or a valid identifier (letters, numbers, underscores), optionally with \"AS alias\".`,\n );\n }\n return column as SelectIdentifier;\n}\n","export function isArrayOfRecords(value: any): value is Record<string, any>[] {\n return value && Array.isArray(value) && value.length > 0;\n}\n\nexport function deserializeValue(value: any, type?: string): any {\n if (value === null || value === undefined) return null;\n\n if (type === 'date' && typeof value === 'string') {\n return new Date(value);\n }\n\n if (type === 'jsonb' && typeof value === 'string') {\n try {\n return JSON.parse(value) as Record<string, any>;\n } catch {\n return value;\n }\n }\n\n if (typeof value === 'string' && (value.startsWith('{') || value.startsWith('['))) {\n try {\n return JSON.parse(value) as Record<string, any>;\n } catch {\n return value;\n }\n }\n\n return value;\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 ensureDate,\n MemoryStorage,\n serializeDate,\n TABLE_MESSAGES,\n TABLE_THREADS,\n TABLE_RESOURCES,\n normalizePerPage,\n calculatePagination,\n} from '@mastra/core/storage';\nimport type {\n StorageResourceType,\n StorageListMessagesInput,\n StorageListMessagesOutput,\n StorageListThreadsByResourceIdInput,\n StorageListThreadsByResourceIdOutput,\n} from '@mastra/core/storage';\nimport { createSqlBuilder } from '../../sql-builder';\nimport type { StoreOperationsD1 } from '../operations';\nimport { deserializeValue, isArrayOfRecords } from '../utils';\n\nexport class MemoryStorageD1 extends MemoryStorage {\n private operations: StoreOperationsD1;\n constructor({ operations }: { operations: StoreOperationsD1 }) {\n super();\n this.operations = operations;\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n const resource = await this.operations.load<StorageResourceType>({\n tableName: TABLE_RESOURCES,\n keys: { id: resourceId },\n });\n\n if (!resource) return null;\n\n try {\n return {\n ...resource,\n createdAt: ensureDate(resource.createdAt) as Date,\n updatedAt: ensureDate(resource.updatedAt) as Date,\n metadata:\n typeof resource.metadata === 'string'\n ? (JSON.parse(resource.metadata || '{}') as Record<string, any>)\n : resource.metadata,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_GET_RESOURCE_BY_ID_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error processing resource ${resourceId}: ${error instanceof Error ? error.message : String(error)}`,\n details: { resourceId },\n },\n error,\n );\n this.logger?.error(mastraError.toString());\n this.logger?.trackException(mastraError);\n return null;\n }\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n const fullTableName = this.operations.getTableName(TABLE_RESOURCES);\n\n // Prepare the record for SQL insertion\n const resourceToSave = {\n id: resource.id,\n workingMemory: resource.workingMemory,\n metadata: resource.metadata ? JSON.stringify(resource.metadata) : null,\n createdAt: resource.createdAt,\n updatedAt: resource.updatedAt,\n };\n\n // Process record for SQL insertion\n const processedRecord = await this.operations.processRecord(resourceToSave);\n\n const columns = Object.keys(processedRecord);\n const values = Object.values(processedRecord);\n\n // Specify which columns to update on conflict (all except id)\n const updateMap: Record<string, string> = {\n workingMemory: 'excluded.workingMemory',\n metadata: 'excluded.metadata',\n createdAt: 'excluded.createdAt',\n updatedAt: 'excluded.updatedAt',\n };\n\n // Use the new insert method with ON CONFLICT\n const query = createSqlBuilder().insert(fullTableName, columns, values, ['id'], updateMap);\n\n const { sql, params } = query.build();\n\n try {\n await this.operations.executeQuery({ sql, params });\n return resource;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_SAVE_RESOURCE_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to save resource to ${fullTableName}: ${error instanceof Error ? error.message : String(error)}`,\n details: { resourceId: resource.id },\n },\n error,\n );\n }\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 existingResource = await this.getResourceById({ resourceId });\n\n if (!existingResource) {\n // Create new resource if it doesn't exist\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 updatedAt = new Date();\n const updatedResource = {\n ...existingResource,\n workingMemory: workingMemory !== undefined ? workingMemory : existingResource.workingMemory,\n metadata: {\n ...existingResource.metadata,\n ...metadata,\n },\n updatedAt,\n };\n\n const fullTableName = this.operations.getTableName(TABLE_RESOURCES);\n\n const columns = ['workingMemory', 'metadata', 'updatedAt'];\n const values = [updatedResource.workingMemory, JSON.stringify(updatedResource.metadata), updatedAt.toISOString()];\n\n const query = createSqlBuilder().update(fullTableName, columns, values).where('id = ?', resourceId);\n\n const { sql, params } = query.build();\n\n try {\n await this.operations.executeQuery({ sql, params });\n return updatedResource;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_UPDATE_RESOURCE_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to update resource ${resourceId}: ${error instanceof Error ? error.message : String(error)}`,\n details: { resourceId },\n },\n error,\n );\n }\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n const thread = await this.operations.load<StorageThreadType>({\n tableName: TABLE_THREADS,\n keys: { id: threadId },\n });\n\n if (!thread) return null;\n\n try {\n return {\n ...thread,\n createdAt: ensureDate(thread.createdAt) as Date,\n updatedAt: ensureDate(thread.updatedAt) as Date,\n metadata:\n typeof thread.metadata === 'string'\n ? (JSON.parse(thread.metadata || '{}') as Record<string, any>)\n : thread.metadata || {},\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_GET_THREAD_BY_ID_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error processing thread ${threadId}: ${error instanceof Error ? error.message : String(error)}`,\n details: { threadId },\n },\n error,\n );\n this.logger?.error(mastraError.toString());\n this.logger?.trackException(mastraError);\n return null;\n }\n }\n\n public async listThreadsByResourceId(\n args: StorageListThreadsByResourceIdInput,\n ): Promise<StorageListThreadsByResourceIdOutput> {\n const { resourceId, page = 0, perPage: perPageInput, orderBy } = args;\n const perPage = normalizePerPage(perPageInput, 100);\n\n if (page < 0) {\n throw new MastraError(\n {\n id: 'STORAGE_CLOUDFLARE_D1_LIST_THREADS_BY_RESOURCE_ID_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 { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const { field, direction } = this.parseOrderBy(orderBy);\n const fullTableName = this.operations.getTableName(TABLE_THREADS);\n\n const mapRowToStorageThreadType = (row: Record<string, any>): StorageThreadType => ({\n ...(row as StorageThreadType),\n createdAt: ensureDate(row.createdAt) as Date,\n updatedAt: ensureDate(row.updatedAt) as Date,\n metadata:\n typeof row.metadata === 'string'\n ? (JSON.parse(row.metadata || '{}') as Record<string, any>)\n : row.metadata || {},\n });\n\n try {\n const countQuery = createSqlBuilder().count().from(fullTableName).where('resourceId = ?', resourceId);\n const countResult = (await this.operations.executeQuery(countQuery.build())) as {\n count: number;\n }[];\n const total = Number(countResult?.[0]?.count ?? 0);\n\n const limitValue = perPageInput === false ? total : perPage;\n const selectQuery = createSqlBuilder()\n .select('*')\n .from(fullTableName)\n .where('resourceId = ?', resourceId)\n .orderBy(field, direction)\n .limit(limitValue)\n .offset(offset);\n\n const results = (await this.operations.executeQuery(selectQuery.build())) as Record<string, any>[];\n const threads = results.map(mapRowToStorageThreadType);\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: 'CLOUDFLARE_D1_STORAGE_LIST_THREADS_BY_RESOURCE_ID_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error getting threads by resourceId ${resourceId}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n details: { resourceId },\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 fullTableName = this.operations.getTableName(TABLE_THREADS);\n\n // Prepare the record for SQL insertion\n const threadToSave = {\n id: thread.id,\n resourceId: thread.resourceId,\n title: thread.title,\n metadata: thread.metadata ? JSON.stringify(thread.metadata) : null,\n createdAt: thread.createdAt.toISOString(),\n updatedAt: thread.updatedAt.toISOString(),\n };\n\n // Process record for SQL insertion\n const processedRecord = await this.operations.processRecord(threadToSave);\n\n const columns = Object.keys(processedRecord);\n const values = Object.values(processedRecord);\n\n // Specify which columns to update on conflict (all except id)\n const updateMap: Record<string, string> = {\n resourceId: 'excluded.resourceId',\n title: 'excluded.title',\n metadata: 'excluded.metadata',\n createdAt: 'excluded.createdAt',\n updatedAt: 'excluded.updatedAt',\n };\n\n // Use the new insert method with ON CONFLICT\n const query = createSqlBuilder().insert(fullTableName, columns, values, ['id'], updateMap);\n\n const { sql, params } = query.build();\n\n try {\n await this.operations.executeQuery({ sql, params });\n return thread;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_SAVE_THREAD_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to save thread to ${fullTableName}: ${error instanceof Error ? error.message : String(error)}`,\n details: { threadId: thread.id },\n },\n error,\n );\n }\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 thread = await this.getThreadById({ threadId: id });\n try {\n if (!thread) {\n throw new Error(`Thread ${id} not found`);\n }\n const fullTableName = this.operations.getTableName(TABLE_THREADS);\n\n const mergedMetadata = {\n ...(typeof thread.metadata === 'string' ? JSON.parse(thread.metadata) : thread.metadata),\n ...(metadata as Record<string, any>),\n };\n\n const updatedAt = new Date();\n const columns = ['title', 'metadata', 'updatedAt'];\n const values = [title, JSON.stringify(mergedMetadata), updatedAt.toISOString()];\n\n const query = createSqlBuilder().update(fullTableName, columns, values).where('id = ?', id);\n\n const { sql, params } = query.build();\n\n await this.operations.executeQuery({ sql, params });\n\n return {\n ...thread,\n title,\n metadata: {\n ...(typeof thread.metadata === 'string' ? JSON.parse(thread.metadata) : thread.metadata),\n ...(metadata as Record<string, any>),\n },\n updatedAt,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_UPDATE_THREAD_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to update thread ${id}: ${error instanceof Error ? error.message : String(error)}`,\n details: { threadId: id },\n },\n error,\n );\n }\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n const fullTableName = this.operations.getTableName(TABLE_THREADS);\n\n try {\n // Delete the thread\n const deleteThreadQuery = createSqlBuilder().delete(fullTableName).where('id = ?', threadId);\n\n const { sql: threadSql, params: threadParams } = deleteThreadQuery.build();\n await this.operations.executeQuery({ sql: threadSql, params: threadParams });\n\n // Also delete associated messages\n const messagesTableName = this.operations.getTableName(TABLE_MESSAGES);\n const deleteMessagesQuery = createSqlBuilder().delete(messagesTableName).where('thread_id = ?', threadId);\n\n const { sql: messagesSql, params: messagesParams } = deleteMessagesQuery.build();\n await this.operations.executeQuery({ sql: messagesSql, params: messagesParams });\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_DELETE_THREAD_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to delete thread ${threadId}: ${error instanceof Error ? error.message : String(error)}`,\n details: { threadId },\n },\n error,\n );\n }\n }\n\n async saveMessages(args: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n const { messages } = args;\n if (messages.length === 0) return { messages: [] };\n\n try {\n const now = new Date();\n const threadId = messages[0]?.threadId;\n\n // Validate all messages before insert\n for (const [i, message] of messages.entries()) {\n if (!message.id) throw new Error(`Message at index ${i} missing id`);\n if (!message.threadId) {\n throw new Error(`Message at index ${i} missing threadId`);\n }\n if (!message.content) {\n throw new Error(`Message at index ${i} missing content`);\n }\n if (!message.role) {\n throw new Error(`Message at index ${i} missing role`);\n }\n if (!message.resourceId) {\n throw new Error(`Message at index ${i} missing resourceId`);\n }\n const thread = await this.getThreadById({ threadId: message.threadId });\n if (!thread) {\n throw new Error(`Thread ${message.threadId} not found`);\n }\n }\n\n // Prepare all messages for insertion (set timestamps, thread_id, etc.)\n const messagesToInsert = messages.map(message => {\n const createdAt = message.createdAt ? new Date(message.createdAt) : now;\n return {\n id: message.id,\n thread_id: message.threadId,\n content: typeof message.content === 'string' ? message.content : JSON.stringify(message.content),\n createdAt: createdAt.toISOString(),\n role: message.role,\n type: message.type || 'v2',\n resourceId: message.resourceId,\n };\n });\n\n // Insert messages and update thread's updatedAt in parallel\n await Promise.all([\n this.operations.batchUpsert({\n tableName: TABLE_MESSAGES,\n records: messagesToInsert,\n }),\n // Update thread's updatedAt timestamp\n this.operations.executeQuery({\n sql: `UPDATE ${this.operations.getTableName(TABLE_THREADS)} SET updatedAt = ? WHERE id = ?`,\n params: [now.toISOString(), threadId],\n }),\n ]);\n\n this.logger.debug(`Saved ${messages.length} messages`);\n const list = new MessageList().add(messages, 'memory');\n return { messages: list.get.all.db() };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_SAVE_MESSAGES_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to save messages: ${error instanceof Error ? error.message : String(error)}`,\n },\n error,\n );\n }\n }\n\n private async _getIncludedMessages(threadId: string, include: StorageListMessagesInput['include']) {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n if (!include) return null;\n\n const unionQueries: string[] = [];\n const params: any[] = [];\n let paramIdx = 1;\n\n for (const inc of include) {\n const { id, withPreviousMessages = 0, withNextMessages = 0 } = inc;\n // if threadId is provided, use it, otherwise use threadId from args\n const searchId = inc.threadId || threadId;\n\n unionQueries.push(`\n SELECT * FROM (\n WITH ordered_messages AS (\n SELECT\n *,\n ROW_NUMBER() OVER (ORDER BY createdAt ASC) AS row_num\n FROM ${this.operations.getTableName(TABLE_MESSAGES)}\n WHERE thread_id = ?\n )\n SELECT\n m.id,\n m.content,\n m.role,\n m.type,\n m.createdAt,\n m.thread_id AS threadId,\n m.resourceId\n FROM ordered_messages m\n WHERE m.id = ?\n OR EXISTS (\n SELECT 1 FROM ordered_messages target\n WHERE target.id = ?\n AND (\n (m.row_num <= target.row_num + ? AND m.row_num > target.row_num)\n OR\n (m.row_num >= target.row_num - ? AND m.row_num < target.row_num)\n )\n )\n ) AS query_${paramIdx}\n `);\n\n params.push(searchId, id, id, withNextMessages, withPreviousMessages);\n paramIdx++;\n }\n\n const finalQuery = unionQueries.join(' UNION ALL ') + ' ORDER BY createdAt ASC';\n const messages = await this.operations.executeQuery({ sql: finalQuery, params });\n\n if (!Array.isArray(messages)) {\n return [];\n }\n\n // Parse message content\n const processedMessages = messages.map((message: Record<string, any>) => {\n const processedMsg: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(message)) {\n if (key === `type` && value === `v2`) continue;\n processedMsg[key] = deserializeValue(value);\n }\n\n return processedMsg;\n });\n\n return processedMessages;\n }\n\n public async listMessagesById({ messageIds }: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messageIds.length === 0) return { messages: [] };\n const fullTableName = this.operations.getTableName(TABLE_MESSAGES);\n const messages: any[] = [];\n\n try {\n const query = createSqlBuilder()\n .select(['id', 'content', 'role', 'type', 'createdAt', 'thread_id AS threadId', 'resourceId'])\n .from(fullTableName)\n .where(`id in (${messageIds.map(() => '?').join(',')})`, ...messageIds);\n\n query.orderBy('createdAt', 'DESC');\n\n const { sql, params } = query.build();\n\n const result = await this.operations.executeQuery({ sql, params });\n\n if (Array.isArray(result)) messages.push(...result);\n\n // Parse message content\n const processedMessages = messages.map(message => {\n const processedMsg: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(message)) {\n if (key === `type` && value === `v2`) continue;\n processedMsg[key] = deserializeValue(value);\n }\n\n return processedMsg;\n });\n this.logger.debug(`Retrieved ${messages.length} messages`);\n const list = new MessageList().add(processedMessages as MastraMessageV1[] | MastraDBMessage[], 'memory');\n return { messages: list.get.all.db() };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_LIST_MESSAGES_BY_ID_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to retrieve messages by ID: ${error instanceof Error ? error.message : String(error)}`,\n details: { messageIds: JSON.stringify(messageIds) },\n },\n error,\n );\n this.logger?.error(mastraError.toString());\n this.logger?.trackException(mastraError);\n throw mastraError;\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 if (!threadId.trim()) {\n throw new MastraError(\n {\n id: 'STORAGE_CLOUDFLARE_D1_LIST_MESSAGES_INVALID_THREAD_ID',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { threadId },\n },\n new Error('threadId must be a non-empty string'),\n );\n }\n\n if (page < 0) {\n throw new MastraError(\n {\n id: 'STORAGE_CLOUDFLARE_D1_LIST_MESSAGES_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, 40);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n const fullTableName = this.operations.getTableName(TABLE_MESSAGES);\n\n // Step 1: Get paginated messages from the thread first (without excluding included ones)\n let query = `\n SELECT id, content, role, type, createdAt, thread_id AS threadId, resourceId\n FROM ${fullTableName}\n WHERE thread_id = ?\n `;\n const queryParams: any[] = [threadId];\n\n if (resourceId) {\n query += ` AND resourceId = ?`;\n queryParams.push(resourceId);\n }\n\n const dateRange = filter?.dateRange;\n if (dateRange?.start) {\n const startDate =\n dateRange.start instanceof Date ? serializeDate(dateRange.start) : serializeDate(new Date(dateRange.start));\n query += ` AND createdAt >= ?`;\n queryParams.push(startDate);\n }\n\n if (dateRange?.end) {\n const endDate =\n dateRange.end instanceof Date ? serializeDate(dateRange.end) : serializeDate(new Date(dateRange.end));\n query += ` AND createdAt <= ?`;\n queryParams.push(endDate);\n }\n\n // Build ORDER BY clause\n const { field, direction } = this.parseOrderBy(orderBy, 'ASC');\n query += ` ORDER BY \"${field}\" ${direction}`;\n\n // Apply pagination\n if (perPage !== Number.MAX_SAFE_INTEGER) {\n query += ` LIMIT ? OFFSET ?`;\n queryParams.push(perPage, offset);\n }\n\n const results = await this.operations.executeQuery({ sql: query, params: queryParams });\n\n // Parse message content\n const paginatedMessages = (isArrayOfRecords(results) ? results : []).map((message: Record<string, any>) => {\n const processedMsg: Record<string, any> = {};\n for (const [key, value] of Object.entries(message)) {\n if (key === `type` && value === `v2`) continue;\n processedMsg[key] = deserializeValue(value);\n }\n return processedMsg;\n });\n\n const paginatedCount = paginatedMessages.length;\n\n // Get total count\n let countQuery = `SELECT count() as count FROM ${fullTableName} WHERE thread_id = ?`;\n const countParams: any[] = [threadId];\n\n if (resourceId) {\n countQuery += ` AND resourceId = ?`;\n countParams.push(resourceId);\n }\n\n if (dateRange?.start) {\n const startDate =\n dateRange.start instanceof Date ? serializeDate(dateRange.start) : serializeDate(new Date(dateRange.start));\n countQuery += ` AND createdAt >= ?`;\n countParams.push(startDate);\n }\n\n if (dateRange?.end) {\n const endDate =\n dateRange.end instanceof Date ? serializeDate(dateRange.end) : serializeDate(new Date(dateRange.end));\n countQuery += ` AND createdAt <= ?`;\n countParams.push(endDate);\n }\n\n const countResult = (await this.operations.executeQuery({ sql: countQuery, params: countParams })) as {\n count: number;\n }[];\n const total = Number(countResult[0]?.count ?? 0);\n\n // Only return early if there are no messages AND no includes to process\n if (total === 0 && paginatedCount === 0 && (!include || include.length === 0)) {\n return {\n messages: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n // Step 2: Add included messages with context (if any), excluding duplicates\n const messageIds = new Set(paginatedMessages.map((m: Record<string, any>) => m.id as string));\n let includeMessages: MastraDBMessage[] = [];\n\n if (include && include.length > 0) {\n // Use the existing _getIncludedMessages helper, but adapt it for listMessages format\n const includeResult = (await this._getIncludedMessages(threadId, include)) as MastraDBMessage[];\n if (Array.isArray(includeResult)) {\n includeMessages = includeResult;\n\n // Deduplicate: only add messages that aren't already in the paginated results\n for (const includeMsg of includeMessages) {\n if (!messageIds.has(includeMsg.id)) {\n paginatedMessages.push(includeMsg);\n messageIds.add(includeMsg.id);\n }\n }\n }\n }\n\n // Use MessageList for proper deduplication and format conversion to V2\n const list = new MessageList().add(paginatedMessages as MastraMessageV1[] | MastraDBMessage[], 'memory');\n let finalMessages = list.get.all.db();\n\n // Sort all messages (paginated + included) for final output\n finalMessages = finalMessages.sort((a, b) => {\n const isDateField = field === 'createdAt' || field === 'updatedAt';\n const aValue = isDateField ? new Date((a as any)[field]).getTime() : (a as any)[field];\n const bValue = isDateField ? new Date((b as any)[field]).getTime() : (b as any)[field];\n\n // Handle tiebreaker for stable sorting\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 // Fallback to string comparison for non-numeric fields\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n\n // Calculate hasMore based on pagination window\n // If all thread messages have been returned (through pagination or include), hasMore = false\n // Otherwise, check if there are more pages in the pagination window\n const returnedThreadMessageIds = new Set(finalMessages.filter(m => m.threadId === threadId).map(m => m.id));\n const allThreadMessagesReturned = returnedThreadMessageIds.size >= total;\n const hasMore =\n perPageInput === false ? false : allThreadMessagesReturned ? false : offset + paginatedCount < total;\n\n return {\n messages: finalMessages,\n total,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n } catch (error: any) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_LIST_MESSAGES_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to list messages for thread ${threadId}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n details: {\n 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 updateMessages(args: {\n messages: Partial<Omit<MastraDBMessage, 'createdAt'>> &\n {\n id: string;\n content?: {\n metadata?: MastraMessageContentV2['metadata'];\n content?: MastraMessageContentV2['content'];\n };\n }[];\n }): Promise<MastraDBMessage[]> {\n const { messages } = args;\n this.logger.debug('Updating messages', { count: messages.length });\n\n if (!messages.length) {\n return [];\n }\n\n const messageIds = messages.map(m => m.id);\n const fullTableName = this.operations.getTableName(TABLE_MESSAGES);\n const threadsTableName = this.operations.getTableName(TABLE_THREADS);\n\n try {\n // Get existing messages\n const placeholders = messageIds.map(() => '?').join(',');\n const selectQuery = `SELECT id, content, role, type, createdAt, thread_id AS threadId, resourceId FROM ${fullTableName} WHERE id IN (${placeholders})`;\n const existingMessages = (await this.operations.executeQuery({ sql: selectQuery, params: messageIds })) as any[];\n\n if (existingMessages.length === 0) {\n return [];\n }\n\n // Parse content from string to object for merging\n const parsedExistingMessages = existingMessages.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;\n });\n\n const threadIdsToUpdate = new Set<string>();\n const updateQueries: { sql: string; params: any[] }[] = [];\n\n for (const existingMessage of parsedExistingMessages) {\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 (\n 'threadId' in updatePayload &&\n updatePayload.threadId &&\n updatePayload.threadId !== existingMessage.threadId\n ) {\n threadIdsToUpdate.add(updatePayload.threadId as string);\n }\n\n const setClauses: string[] = [];\n const values: any[] = [];\n\n const updatableFields = { ...fieldsToUpdate };\n\n // Special handling for content: merge in code, then update the whole field\n if (updatableFields.content) {\n const existingContent = existingMessage.content || {};\n const newContent = {\n ...existingContent,\n ...updatableFields.content,\n // Deep merge metadata if it exists on both\n ...(existingContent?.metadata && updatableFields.content.metadata\n ? {\n metadata: {\n ...existingContent.metadata,\n ...updatableFields.content.metadata,\n },\n }\n : {}),\n };\n setClauses.push(`content = ?`);\n values.push(JSON.stringify(newContent));\n delete updatableFields.content;\n }\n\n // Handle other fields\n for (const key in updatableFields) {\n if (Object.prototype.hasOwnProperty.call(updatableFields, key)) {\n const dbColumn = key === 'threadId' ? 'thread_id' : key;\n setClauses.push(`${dbColumn} = ?`);\n values.push(updatableFields[key as keyof typeof updatableFields]);\n }\n }\n\n if (setClauses.length > 0) {\n values.push(id);\n const updateQuery = `UPDATE ${fullTableName} SET ${setClauses.join(', ')} WHERE id = ?`;\n updateQueries.push({ sql: updateQuery, params: values });\n }\n }\n\n // Execute all updates\n for (const query of updateQueries) {\n await this.operations.executeQuery(query);\n }\n\n // Update thread timestamps\n if (threadIdsToUpdate.size > 0) {\n const threadPlaceholders = Array.from(threadIdsToUpdate)\n .map(() => '?')\n .join(',');\n const threadUpdateQuery = `UPDATE ${threadsTableName} SET updatedAt = ? WHERE id IN (${threadPlaceholders})`;\n const threadUpdateParams = [new Date().toISOString(), ...Array.from(threadIdsToUpdate)];\n await this.operations.executeQuery({ sql: threadUpdateQuery, params: threadUpdateParams });\n }\n\n // Re-fetch updated messages\n const updatedMessages = (await this.operations.executeQuery({ sql: selectQuery, params: messageIds })) as any[];\n\n // Parse content back to objects\n return updatedMessages.map(message => {\n if (typeof message.content === 'string') {\n try {\n message.content = JSON.parse(message.content);\n } catch {\n // ignore if not valid json\n }\n }\n return message;\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_UPDATE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { count: messages.length },\n },\n error,\n );\n }\n }\n}\n","import type { D1Database } from '@cloudflare/workers-types';\nimport { MastraError, ErrorDomain, ErrorCategory } from '@mastra/core/error';\nimport { StoreOperations, TABLE_WORKFLOW_SNAPSHOT } from '@mastra/core/storage';\nimport type { TABLE_NAMES, StorageColumn } from '@mastra/core/storage';\nimport type Cloudflare from 'cloudflare';\nimport { createSqlBuilder } from '../../sql-builder';\nimport type { SqlParam, SqlQueryOptions } from '../../sql-builder';\nimport { deserializeValue } from '../utils';\n\nexport type D1QueryResult = Awaited<ReturnType<Cloudflare['d1']['database']['query']>>['result'];\n\nexport interface D1Client {\n query(args: { sql: string; params: string[] }): Promise<{ result: D1QueryResult }>;\n}\n\nexport interface StoreOperationsD1Config {\n client?: D1Client;\n binding?: D1Database;\n tablePrefix?: string;\n}\n\nexport class StoreOperationsD1 extends StoreOperations {\n private client?: D1Client;\n private binding?: D1Database;\n private tablePrefix: string;\n\n constructor(config: StoreOperationsD1Config) {\n super();\n this.client = config.client;\n this.binding = config.binding;\n this.tablePrefix = config.tablePrefix || '';\n }\n\n async hasColumn(table: string, column: string): Promise<boolean> {\n // For D1/SQLite, use PRAGMA table_info to get column info\n // Handle both prefixed and non-prefixed table names\n const fullTableName = table.startsWith(this.tablePrefix) ? table : `${this.tablePrefix}${table}`;\n const sql = `PRAGMA table_info(${fullTableName});`;\n const result = await this.executeQuery({ sql, params: [] });\n if (!result || !Array.isArray(result)) return false;\n return result.some((col: any) => col.name === column || col.name === column.toLowerCase());\n }\n\n getTableName(tableName: TABLE_NAMES): string {\n return `${this.tablePrefix}${tableName}`;\n }\n\n private formatSqlParams(params: SqlParam[]): string[] {\n return params.map(p => (p === undefined || p === null ? null : p) as string);\n }\n\n private async executeWorkersBindingQuery({\n sql,\n params = [],\n first = false,\n }: SqlQueryOptions): Promise<Record<string, any>[] | Record<string, any> | null> {\n if (!this.binding) {\n throw new Error('Workers binding is not configured');\n }\n\n try {\n const statement = this.binding.prepare(sql);\n const formattedParams = this.formatSqlParams(params);\n\n let result;\n if (formattedParams.length > 0) {\n if (first) {\n result = await statement.bind(...formattedParams).first();\n if (!result) return null;\n return result;\n } else {\n result = await statement.bind(...formattedParams).all();\n const results = result.results || [];\n return results;\n }\n } else {\n if (first) {\n result = await statement.first();\n if (!result) return null;\n return result;\n } else {\n result = await statement.all();\n const results = result.results || [];\n return results;\n }\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_WORKERS_BINDING_QUERY_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { sql },\n },\n error,\n );\n }\n }\n\n private async executeRestQuery({\n sql,\n params = [],\n first = false,\n }: SqlQueryOptions): Promise<Record<string, any>[] | Record<string, any> | null> {\n if (!this.client) {\n throw new Error('D1 client is not configured');\n }\n\n try {\n const formattedParams = this.formatSqlParams(params);\n const response = await this.client.query({\n sql,\n params: formattedParams,\n });\n const result = response.result || [];\n const results = result.flatMap(r => r.results || []);\n\n if (first) {\n return results[0] || null;\n }\n\n return results;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_REST_QUERY_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { sql },\n },\n error,\n );\n }\n }\n\n async executeQuery(options: SqlQueryOptions): Promise<Record<string, any>[] | Record<string, any> | null> {\n if (this.binding) {\n return this.executeWorkersBindingQuery(options);\n } else if (this.client) {\n return this.executeRestQuery(options);\n } else {\n throw new Error('Neither binding nor client is configured');\n }\n }\n\n private async getTableColumns(tableName: string): Promise<{ name: string; type: string }[]> {\n try {\n const sql = `PRAGMA table_info(${tableName})`;\n const result = await this.executeQuery({ sql });\n\n if (!result || !Array.isArray(result)) {\n return [];\n }\n\n return result.map(row => ({\n name: row.name as string,\n type: row.type as string,\n }));\n } catch (error) {\n this.logger.warn(`Failed to get table columns for ${tableName}:`, error);\n return [];\n }\n }\n\n private serializeValue(value: any): any {\n if (value === null || value === undefined) {\n return null;\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return value;\n }\n\n protected getSqlType(type: StorageColumn['type']): string {\n switch (type) {\n case 'bigint':\n return 'INTEGER'; // SQLite uses INTEGER for all integer sizes\n case 'jsonb':\n return 'TEXT'; // Store JSON as TEXT in SQLite\n default:\n return super.getSqlType(type);\n }\n }\n\n async createTable({\n tableName,\n schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n try {\n const fullTableName = this.getTableName(tableName);\n\n // Build SQL columns from schema\n const columnDefinitions = Object.entries(schema).map(([colName, colDef]) => {\n const type = this.getSqlType(colDef.type);\n const nullable = colDef.nullable === false ? 'NOT NULL' : '';\n const primaryKey = colDef.primaryKey ? 'PRIMARY KEY' : '';\n return `${colName} ${type} ${nullable} ${primaryKey}`.trim();\n });\n\n // Add table-level constraints if needed\n const tableConstraints: string[] = [];\n if (tableName === TABLE_WORKFLOW_SNAPSHOT) {\n tableConstraints.push('UNIQUE (workflow_name, run_id)');\n }\n\n const query = createSqlBuilder().createTable(fullTableName, columnDefinitions, tableConstraints);\n const { sql, params } = query.build();\n await this.executeQuery({ sql, params });\n this.logger.debug(`Created table ${fullTableName}`);\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_CREATE_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n const fullTableName = this.getTableName(tableName);\n const query = createSqlBuilder().delete(fullTableName);\n const { sql, params } = query.build();\n await this.executeQuery({ sql, params });\n this.logger.debug(`Cleared table ${fullTableName}`);\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_CLEAR_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n const fullTableName = this.getTableName(tableName);\n const sql = `DROP TABLE IF EXISTS ${fullTableName}`;\n await this.executeQuery({ sql });\n this.logger.debug(`Dropped table ${fullTableName}`);\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_DROP_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async alterTable(args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n try {\n const fullTableName = this.getTableName(args.tableName);\n const existingColumns = await this.getTableColumns(fullTableName);\n const existingColumnNames = new Set(existingColumns.map(col => col.name));\n\n for (const [columnName, column] of Object.entries(args.schema)) {\n if (!existingColumnNames.has(columnName) && args.ifNotExists.includes(columnName)) {\n const sqlType = this.getSqlType(column.type);\n const defaultValue = this.getDefaultValue(column.type);\n const sql = `ALTER TABLE ${fullTableName} ADD COLUMN ${columnName} ${sqlType} ${defaultValue}`;\n await this.executeQuery({ sql });\n this.logger.debug(`Added column ${columnName} to table ${fullTableName}`);\n }\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_ALTER_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName: args.tableName },\n },\n error,\n );\n }\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n try {\n const fullTableName = this.getTableName(tableName);\n const processedRecord = await this.processRecord(record);\n const columns = Object.keys(processedRecord);\n const values = Object.values(processedRecord);\n\n const query = createSqlBuilder().insert(fullTableName, columns, values);\n const { sql, params } = query.build();\n\n await this.executeQuery({ sql, params });\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n try {\n if (records.length === 0) return;\n\n const fullTableName = this.getTableName(tableName);\n const processedRecords = await Promise.all(records.map(record => this.processRecord(record)));\n const columns = Object.keys(processedRecords[0] || {});\n\n // For batch insert, we need to create multiple INSERT statements\n for (const record of processedRecords) {\n const values = Object.values(record);\n const query = createSqlBuilder().insert(fullTableName, columns, values);\n const { sql, params } = query.build();\n await this.executeQuery({ sql, params });\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_BATCH_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\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 fullTableName = this.getTableName(tableName);\n const query = createSqlBuilder().select('*').from(fullTableName);\n\n // Add WHERE conditions for each key\n let firstKey = true;\n for (const [key, value] of Object.entries(keys)) {\n if (firstKey) {\n query.where(`${key} = ?`, value);\n firstKey = false;\n } else {\n query.andWhere(`${key} = ?`, value);\n }\n }\n\n query.orderBy('createdAt', 'DESC');\n\n query.limit(1);\n const { sql, params } = query.build();\n\n const result = await this.executeQuery({ sql, params, first: true });\n\n if (!result) {\n return null;\n }\n\n // Deserialize JSON fields\n const deserializedResult: Record<string, any> = {};\n for (const [key, value] of Object.entries(result)) {\n deserializedResult[key] = deserializeValue(value);\n }\n\n return deserializedResult as R;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_OPERATIONS_LOAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async processRecord(record: Record<string, any>): Promise<Record<string, any>> {\n const processed: Record<string, any> = {};\n for (const [key, value] of Object.entries(record)) {\n processed[key] = this.serializeValue(value);\n }\n return processed;\n }\n\n /**\n * Upsert multiple records in a batch operation\n * @param tableName The table to insert into\n * @param records The records to insert\n */\n async batchUpsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n if (records.length === 0) return;\n\n const fullTableName = this.getTableName(tableName);\n\n try {\n // Process records in batches for better performance\n const batchSize = 50; // Adjust based on performance testing\n\n for (let i = 0; i < records.length; i += batchSize) {\n const batch = records.slice(i, i + batchSize);\n\n const recordsToInsert = batch;\n\n // For bulk insert, we need to determine the columns from the first record\n if (recordsToInsert.length > 0) {\n const firstRecord = recordsToInsert[0];\n // Ensure firstRecord is not undefined before calling Object.keys\n const columns = Object.keys(firstRecord || {});\n\n // Create a bulk insert statement\n for (const record of recordsToInsert) {\n // Use type-safe approach to extract values\n const values = columns.map(col => {\n if (!record) return null;\n // Safely access the record properties\n const value = typeof col === 'string' ? record[col as keyof typeof record] : null;\n return this.serializeValue(value);\n });\n\n const recordToUpsert = columns.reduce(\n (acc, col) => {\n if (col !== 'createdAt') acc[col] = `excluded.${col}`;\n return acc;\n },\n {} as Record<string, any>,\n );\n\n const query = createSqlBuilder().insert(fullTableName, columns, values, ['id'], recordToUpsert);\n\n const { sql, params } = query.build();\n await this.executeQuery({ sql, params });\n }\n }\n\n this.logger.debug(\n `Processed batch ${Math.floor(i / batchSize) + 1} of ${Math.ceil(records.length / batchSize)}`,\n );\n }\n\n this.logger.debug(`Successfully batch upserted ${records.length} records into ${tableName}`);\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_BATCH_UPSERT_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to batch upsert into ${tableName}: ${error instanceof Error ? error.message : String(error)}`,\n details: { tableName },\n },\n error,\n );\n }\n }\n}\n","import { ErrorDomain, ErrorCategory, MastraError } from '@mastra/core/error';\nimport type { ScoreRowData, ScoringSource, ValidatedSaveScorePayload } from '@mastra/core/evals';\nimport { saveScorePayloadSchema } from '@mastra/core/evals';\nimport {\n ScoresStorage,\n TABLE_SCORERS,\n calculatePagination,\n normalizePerPage,\n safelyParseJSON,\n} from '@mastra/core/storage';\nimport type { StoragePagination, PaginationInfo } from '@mastra/core/storage';\nimport type Cloudflare from 'cloudflare';\nimport { createSqlBuilder } from '../../sql-builder';\nimport type { StoreOperationsD1 } from '../operations';\n\nexport type D1QueryResult = Awaited<ReturnType<Cloudflare['d1']['database']['query']>>['result'];\n\nexport interface D1Client {\n query(args: { sql: string; params: string[] }): Promise<{ result: D1QueryResult }>;\n}\n\nfunction transformScoreRow(row: Record<string, any>): ScoreRowData {\n const deserialized: Record<string, any> = { ...row };\n\n // Reverse serialized JSON fields (stored as strings in D1)\n deserialized.input = safelyParseJSON(row.input);\n deserialized.output = safelyParseJSON(row.output);\n deserialized.scorer = safelyParseJSON(row.scorer);\n deserialized.preprocessStepResult = safelyParseJSON(row.preprocessStepResult);\n deserialized.analyzeStepResult = safelyParseJSON(row.analyzeStepResult);\n deserialized.metadata = safelyParseJSON(row.metadata);\n deserialized.additionalContext = safelyParseJSON(row.additionalContext);\n deserialized.requestContext = safelyParseJSON(row.requestContext);\n deserialized.entity = safelyParseJSON(row.entity);\n\n deserialized.createdAt = row.createdAtZ || row.createdAt;\n deserialized.updatedAt = row.updatedAtZ || row.updatedAt;\n\n return deserialized as ScoreRowData;\n}\n\nexport class ScoresStorageD1 extends ScoresStorage {\n private operations: StoreOperationsD1;\n\n constructor({ operations }: { operations: StoreOperationsD1 }) {\n super();\n this.operations = operations;\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n try {\n const fullTableName = this.operations.getTableName(TABLE_SCORERS);\n const query = createSqlBuilder().select('*').from(fullTableName).where('id = ?', id);\n const { sql, params } = query.build();\n\n const result = await this.operations.executeQuery({ sql, params, first: true });\n\n if (!result) {\n return null;\n }\n\n return transformScoreRow(result);\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_SCORES_GET_SCORE_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async saveScore(score: Omit<ScoreRowData, 'createdAt' | 'updatedAt'>): Promise<{ score: ScoreRowData }> {\n let parsedScore: ValidatedSaveScorePayload;\n try {\n parsedScore = saveScorePayloadSchema.parse(score);\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_SCORES_SAVE_SCORE_FAILED_INVALID_SCORE_PAYLOAD',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { scoreId: score.id },\n },\n error,\n );\n }\n\n try {\n const id = crypto.randomUUID();\n const fullTableName = this.operations.getTableName(TABLE_SCORERS);\n\n // Serialize all object values to JSON strings\n const serializedRecord: Record<string, any> = {};\n for (const [key, value] of Object.entries(parsedScore)) {\n if (value !== null && value !== undefined) {\n if (typeof value === 'object') {\n serializedRecord[key] = JSON.stringify(value);\n } else {\n serializedRecord[key] = value;\n }\n } else {\n serializedRecord[key] = null;\n }\n }\n\n serializedRecord.id = id;\n serializedRecord.createdAt = new Date().toISOString();\n serializedRecord.updatedAt = new Date().toISOString();\n\n const columns = Object.keys(serializedRecord);\n const values = Object.values(serializedRecord);\n\n const query = createSqlBuilder().insert(fullTableName, columns, values);\n const { sql, params } = query.build();\n\n await this.operations.executeQuery({ sql, params });\n\n const scoreFromDb = await this.getScoreById({ id });\n return { score: scoreFromDb! };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_SCORES_SAVE_SCORE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listScoresByScorerId({\n scorerId,\n entityId,\n entityType,\n source,\n pagination,\n }: {\n scorerId: string;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n const fullTableName = this.operations.getTableName(TABLE_SCORERS);\n\n // Get total count\n const countQuery = createSqlBuilder().count().from(fullTableName).where('scorerId = ?', scorerId);\n if (entityId) {\n countQuery.andWhere('entityId = ?', entityId);\n }\n if (entityType) {\n countQuery.andWhere('entityType = ?', entityType);\n }\n if (source) {\n countQuery.andWhere('source = ?', source);\n }\n const countResult = await this.operations.executeQuery(countQuery.build());\n const total = Array.isArray(countResult) ? Number(countResult?.[0]?.count ?? 0) : Number(countResult?.count ?? 0);\n\n if (total === 0) {\n return {\n pagination: {\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n },\n scores: [],\n };\n }\n\n const end = perPageInput === false ? total : start + perPage;\n const limitValue = perPageInput === false ? total : perPage;\n\n // Get paginated results\n const selectQuery = createSqlBuilder().select('*').from(fullTableName).where('scorerId = ?', scorerId);\n\n if (entityId) {\n selectQuery.andWhere('entityId = ?', entityId);\n }\n if (entityType) {\n selectQuery.andWhere('entityType = ?', entityType);\n }\n if (source) {\n selectQuery.andWhere('source = ?', source);\n }\n selectQuery.limit(limitValue).offset(start);\n\n const { sql, params } = selectQuery.build();\n const results = await this.operations.executeQuery({ sql, params });\n\n const scores = Array.isArray(results) ? results.map(transformScoreRow) : [];\n\n return {\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: end < total,\n },\n scores,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_SCORES_GET_SCORES_BY_SCORER_ID_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<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n const fullTableName = this.operations.getTableName(TABLE_SCORERS);\n\n // Get total count\n const countQuery = createSqlBuilder().count().from(fullTableName).where('runId = ?', runId);\n const countResult = await this.operations.executeQuery(countQuery.build());\n const total = Array.isArray(countResult) ? Number(countResult?.[0]?.count ?? 0) : Number(countResult?.count ?? 0);\n\n if (total === 0) {\n return {\n pagination: {\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n },\n scores: [],\n };\n }\n\n const end = perPageInput === false ? total : start + perPage;\n const limitValue = perPageInput === false ? total : perPage;\n\n // Get paginated results\n const selectQuery = createSqlBuilder()\n .select('*')\n .from(fullTableName)\n .where('runId = ?', runId)\n .limit(limitValue)\n .offset(start);\n\n const { sql, params } = selectQuery.build();\n const results = await this.operations.executeQuery({ sql, params });\n\n const scores = Array.isArray(results) ? results.map(transformScoreRow) : [];\n\n return {\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: end < total,\n },\n scores,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_SCORES_GET_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<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n const fullTableName = this.operations.getTableName(TABLE_SCORERS);\n\n // Get total count\n const countQuery = createSqlBuilder()\n .count()\n .from(fullTableName)\n .where('entityId = ?', entityId)\n .andWhere('entityType = ?', entityType);\n const countResult = await this.operations.executeQuery(countQuery.build());\n const total = Array.isArray(countResult) ? Number(countResult?.[0]?.count ?? 0) : Number(countResult?.count ?? 0);\n\n if (total === 0) {\n return {\n pagination: {\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n },\n scores: [],\n };\n }\n\n const end = perPageInput === false ? total : start + perPage;\n const limitValue = perPageInput === false ? total : perPage;\n\n // Get paginated results\n const selectQuery = createSqlBuilder()\n .select('*')\n .from(fullTableName)\n .where('entityId = ?', entityId)\n .andWhere('entityType = ?', entityType)\n .limit(limitValue)\n .offset(start);\n\n const { sql, params } = selectQuery.build();\n const results = await this.operations.executeQuery({ sql, params });\n\n const scores = Array.isArray(results) ? results.map(transformScoreRow) : [];\n\n return {\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: end < total,\n },\n scores,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_SCORES_GET_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<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n const fullTableName = this.operations.getTableName(TABLE_SCORERS);\n\n // Get total count\n const countQuery = createSqlBuilder()\n .count()\n .from(fullTableName)\n .where('traceId = ?', traceId)\n .andWhere('spanId = ?', spanId);\n const countResult = await this.operations.executeQuery(countQuery.build());\n const total = Array.isArray(countResult) ? Number(countResult?.[0]?.count ?? 0) : Number(countResult?.count ?? 0);\n\n if (total === 0) {\n return {\n pagination: {\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n },\n scores: [],\n };\n }\n\n const end = perPageInput === false ? total : start + perPage;\n const limitValue = perPageInput === false ? total : perPage;\n\n // Get paginated results\n const selectQuery = createSqlBuilder()\n .select('*')\n .from(fullTableName)\n .where('traceId = ?', traceId)\n .andWhere('spanId = ?', spanId)\n .orderBy('createdAt', 'DESC')\n .limit(limitValue)\n .offset(start);\n\n const { sql, params } = selectQuery.build();\n const results = await this.operations.executeQuery({ sql, params });\n const scores = Array.isArray(results) ? results.map(transformScoreRow) : [];\n\n return {\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: end < total,\n },\n scores,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORE_SCORES_GET_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 type { WorkflowRun, WorkflowRuns, StorageListWorkflowRunsInput } from '@mastra/core/storage';\nimport { ensureDate, TABLE_WORKFLOW_SNAPSHOT, WorkflowsStorage } from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport { createSqlBuilder } from '../../sql-builder';\nimport type { SqlParam } from '../../sql-builder';\nimport type { StoreOperationsD1 } from '../operations';\nimport { isArrayOfRecords } from '../utils';\n\nexport class WorkflowsStorageD1 extends WorkflowsStorage {\n private operations: StoreOperationsD1;\n\n constructor({ operations }: { operations: StoreOperationsD1 }) {\n super();\n this.operations = operations;\n }\n\n updateWorkflowResults(\n {\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 },\n ): Promise<Record<string, StepResult<any, any, any, any>>> {\n throw new Error('Method not implemented.');\n }\n updateWorkflowState(\n {\n // workflowName,\n // runId,\n // opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n },\n ): Promise<WorkflowRunState | undefined> {\n throw new Error('Method not implemented.');\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n const fullTableName = this.operations.getTableName(TABLE_WORKFLOW_SNAPSHOT);\n const now = new Date().toISOString();\n\n const currentSnapshot = await this.operations.load({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n const persisting = currentSnapshot\n ? {\n ...currentSnapshot,\n resourceId,\n snapshot: JSON.stringify(snapshot),\n updatedAt: now,\n }\n : {\n workflow_name: workflowName,\n run_id: runId,\n resourceId,\n snapshot: snapshot as Record<string, any>,\n createdAt: now,\n updatedAt: now,\n };\n\n // Process record for SQL insertion\n const processedRecord = await this.operations.processRecord(persisting);\n\n const columns = Object.keys(processedRecord);\n const values = Object.values(processedRecord);\n\n // Specify which columns to update on conflict (all except PKs)\n const updateMap: Record<string, string> = {\n snapshot: 'excluded.snapshot',\n updatedAt: 'excluded.updatedAt',\n };\n\n this.logger.debug('Persisting workflow snapshot', { workflowName, runId });\n\n // Use the new insert method with ON CONFLICT\n const query = createSqlBuilder().insert(fullTableName, columns, values, ['workflow_name', 'run_id'], updateMap);\n\n const { sql, params } = query.build();\n\n try {\n await this.operations.executeQuery({ sql, params });\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_PERSIST_WORKFLOW_SNAPSHOT_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to persist workflow snapshot: ${error instanceof Error ? error.message : String(error)}`,\n details: { workflowName, runId },\n },\n error,\n );\n }\n }\n\n async loadWorkflowSnapshot(params: { workflowName: string; runId: string }): Promise<WorkflowRunState | null> {\n const { workflowName, runId } = params;\n\n this.logger.debug('Loading workflow snapshot', { workflowName, runId });\n\n try {\n const d = await this.operations.load<{ snapshot: unknown }>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: {\n workflow_name: workflowName,\n run_id: runId,\n },\n });\n\n return d ? (d.snapshot as WorkflowRunState) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_LOAD_WORKFLOW_SNAPSHOT_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to load workflow snapshot: ${error instanceof Error ? error.message : String(error)}`,\n details: { workflowName, runId },\n },\n error,\n );\n }\n }\n\n private parseWorkflowRun(row: 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 // If parsing fails, return the raw snapshot string\n console.warn(`Failed to parse snapshot for workflow ${row.workflow_name}: ${e}`);\n }\n }\n\n return {\n workflowName: row.workflow_name,\n runId: row.run_id,\n snapshot: parsedSnapshot,\n createdAt: ensureDate(row.createdAt)!,\n updatedAt: ensureDate(row.updatedAt)!,\n resourceId: row.resourceId,\n };\n }\n\n async listWorkflowRuns({\n workflowName,\n fromDate,\n toDate,\n page,\n perPage,\n resourceId,\n }: StorageListWorkflowRunsInput = {}): Promise<WorkflowRuns> {\n const fullTableName = this.operations.getTableName(TABLE_WORKFLOW_SNAPSHOT);\n try {\n const builder = createSqlBuilder().select().from(fullTableName);\n const countBuilder = createSqlBuilder().count().from(fullTableName);\n\n if (workflowName) builder.whereAnd('workflow_name = ?', workflowName);\n if (resourceId) {\n const hasResourceId = await this.operations.hasColumn(fullTableName, 'resourceId');\n if (hasResourceId) {\n builder.whereAnd('resourceId = ?', resourceId);\n countBuilder.whereAnd('resourceId = ?', resourceId);\n } else {\n console.warn(`[${fullTableName}] resourceId column not found. Skipping resourceId filter.`);\n }\n }\n if (fromDate) {\n builder.whereAnd('createdAt >= ?', fromDate instanceof Date ? fromDate.toISOString() : fromDate);\n countBuilder.whereAnd('createdAt >= ?', fromDate instanceof Date ? fromDate.toISOString() : fromDate);\n }\n if (toDate) {\n builder.whereAnd('createdAt <= ?', toDate instanceof Date ? toDate.toISOString() : toDate);\n countBuilder.whereAnd('createdAt <= ?', toDate instanceof Date ? toDate.toISOString() : toDate);\n }\n\n builder.orderBy('createdAt', 'DESC');\n if (typeof perPage === 'number' && typeof page === 'number') {\n const offset = page * perPage;\n builder.limit(perPage);\n builder.offset(offset);\n }\n\n const { sql, params } = builder.build();\n\n let total = 0;\n\n if (perPage !== undefined && page !== undefined) {\n const { sql: countSql, params: countParams } = countBuilder.build();\n const countResult = await this.operations.executeQuery({\n sql: countSql,\n params: countParams,\n first: true,\n });\n total = Number((countResult as Record<string, any>)?.count ?? 0);\n }\n\n const results = await this.operations.executeQuery({ sql, params });\n const runs = (isArrayOfRecords(results) ? results : []).map((row: any) => this.parseWorkflowRun(row));\n return { runs, total: total || runs.length };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_LIST_WORKFLOW_RUNS_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to retrieve workflow runs: ${error instanceof Error ? error.message : String(error)}`,\n details: {\n workflowName: workflowName ?? '',\n resourceId: resourceId ?? '',\n },\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 const fullTableName = this.operations.getTableName(TABLE_WORKFLOW_SNAPSHOT);\n try {\n const conditions: string[] = [];\n const params: SqlParam[] = [];\n if (runId) {\n conditions.push('run_id = ?');\n params.push(runId);\n }\n if (workflowName) {\n conditions.push('workflow_name = ?');\n params.push(workflowName);\n }\n const whereClause = conditions.length > 0 ? 'WHERE ' + conditions.join(' AND ') : '';\n const sql = `SELECT * FROM ${fullTableName} ${whereClause} ORDER BY createdAt DESC LIMIT 1`;\n const result = await this.operations.executeQuery({ sql, params, first: true });\n if (!result) return null;\n return this.parseWorkflowRun(result);\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_GET_WORKFLOW_RUN_BY_ID_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to retrieve workflow run by ID: ${error instanceof Error ? error.message : String(error)}`,\n details: { runId, workflowName: workflowName ?? '' },\n },\n error,\n );\n }\n }\n}\n","import type { D1Database } from '@cloudflare/workers-types';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { MastraError, ErrorDomain, ErrorCategory } from '@mastra/core/error';\nimport type { ScoreRowData, ScoringSource } from '@mastra/core/evals';\nimport type { StorageThreadType, MastraDBMessage } from '@mastra/core/memory';\nimport { MastraStorage } from '@mastra/core/storage';\nimport type {\n PaginationInfo,\n StorageColumn,\n StorageResourceType,\n TABLE_NAMES,\n WorkflowRun,\n StoragePagination,\n WorkflowRuns,\n StorageDomains,\n} from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport Cloudflare from 'cloudflare';\nimport { MemoryStorageD1 } from './domains/memory';\nimport { StoreOperationsD1 } from './domains/operations';\nimport { ScoresStorageD1 } from './domains/scores';\nimport { WorkflowsStorageD1 } from './domains/workflows';\n\n/**\n * Configuration for D1 using the REST API\n */\nexport interface D1Config {\n /** Storage instance ID */\n id: string;\n /** Cloudflare account ID */\n accountId: string;\n /** Cloudflare API token with D1 access */\n apiToken: string;\n /** D1 database ID */\n databaseId: string;\n /** Optional prefix for table names */\n tablePrefix?: string;\n}\n\nexport interface D1ClientConfig {\n /** Storage instance ID */\n id: string;\n /** Optional prefix for table names */\n tablePrefix?: string;\n /** D1 Client */\n client: D1Client;\n}\n\n/**\n * Configuration for D1 using the Workers Binding API\n */\nexport interface D1WorkersConfig {\n /** Storage instance ID */\n id: string;\n /** D1 database binding from Workers environment */\n binding: D1Database; // D1Database binding from Workers\n /** Optional prefix for table names */\n tablePrefix?: string;\n}\n\n/**\n * Combined configuration type supporting both REST API and Workers Binding API\n */\nexport type D1StoreConfig = D1Config | D1WorkersConfig | D1ClientConfig;\n\nexport type D1QueryResult = Awaited<ReturnType<Cloudflare['d1']['database']['query']>>['result'];\nexport interface D1Client {\n query(args: { sql: string; params: string[] }): Promise<{ result: D1QueryResult }>;\n}\n\nexport class D1Store extends MastraStorage {\n private client?: D1Client;\n private binding?: D1Database; // D1Database binding\n private tablePrefix: string;\n\n stores: StorageDomains;\n\n /**\n * Creates a new D1Store instance\n * @param config Configuration for D1 access (either REST API or Workers Binding API)\n */\n constructor(config: D1StoreConfig) {\n try {\n super({ id: config.id, name: 'D1' });\n\n if (config.tablePrefix && !/^[a-zA-Z0-9_]*$/.test(config.tablePrefix)) {\n throw new Error('Invalid tablePrefix: only letters, numbers, and underscores are allowed.');\n }\n\n this.tablePrefix = config.tablePrefix || '';\n\n // Determine which API to use based on provided config\n if ('binding' in config) {\n if (!config.binding) {\n throw new Error('D1 binding is required when using Workers Binding API');\n }\n this.binding = config.binding;\n this.logger.info('Using D1 Workers Binding API');\n } else if ('client' in config) {\n if (!config.client) {\n throw new Error('D1 client is required when using D1ClientConfig');\n }\n this.client = config.client;\n this.logger.info('Using D1 Client');\n } else {\n if (!config.accountId || !config.databaseId || !config.apiToken) {\n throw new Error('accountId, databaseId, and apiToken are required when using REST API');\n }\n const cfClient = new Cloudflare({\n apiToken: config.apiToken,\n });\n this.client = {\n query: ({ sql, params }) => {\n return cfClient.d1.database.query(config.databaseId, {\n account_id: config.accountId,\n sql,\n params,\n });\n },\n };\n\n this.logger.info('Using D1 REST API');\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_D1_STORAGE_INITIALIZATION_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: 'Error initializing D1Store',\n },\n error,\n );\n }\n\n const operations = new StoreOperationsD1({\n client: this.client,\n binding: this.binding,\n tablePrefix: this.tablePrefix,\n });\n\n const scores = new ScoresStorageD1({\n operations,\n });\n\n const workflows = new WorkflowsStorageD1({\n operations,\n });\n\n const memory = new MemoryStorageD1({\n operations,\n });\n\n this.stores = {\n operations,\n scores,\n workflows,\n memory,\n };\n }\n\n get supports() {\n return {\n selectByIncludeResourceScope: true,\n resourceWorkingMemory: true,\n hasColumn: true,\n createTable: true,\n deleteMessages: false,\n listScoresBySpan: true,\n };\n }\n\n async createTable({\n tableName,\n schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n return this.stores.operations.createTable({ tableName, schema });\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 return this.stores.operations.alterTable({ tableName, schema, ifNotExists });\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.stores.operations.clearTable({ tableName });\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.stores.operations.dropTable({ tableName });\n }\n\n async hasColumn(table: string, column: string): Promise<boolean> {\n return this.stores.operations.hasColumn(table, column);\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n return this.stores.operations.insert({ tableName, record });\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, string> }): Promise<R | null> {\n return this.stores.operations.load({ tableName, keys });\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n return this.stores.memory.getThreadById({ threadId });\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n return this.stores.memory.saveThread({ 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 return this.stores.memory.updateThread({ id, title, metadata });\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n return this.stores.memory.deleteThread({ threadId });\n }\n\n async saveMessages(args: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n return this.stores.memory.saveMessages(args);\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 return this.stores.workflows.updateWorkflowResults({ workflowName, runId, stepId, result, requestContext });\n }\n\n async updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n }): Promise<WorkflowRunState | undefined> {\n return this.stores.workflows.updateWorkflowState({ workflowName, runId, opts });\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n return this.stores.workflows.persistWorkflowSnapshot({ workflowName, runId, resourceId, snapshot });\n }\n\n async loadWorkflowSnapshot(params: { workflowName: string; runId: string }): Promise<WorkflowRunState | null> {\n return this.stores.workflows.loadWorkflowSnapshot(params);\n }\n\n async listWorkflowRuns({\n workflowName,\n fromDate,\n toDate,\n perPage,\n page,\n resourceId,\n }: {\n workflowName?: string;\n fromDate?: Date;\n toDate?: Date;\n perPage?: number;\n page?: number;\n resourceId?: string;\n } = {}): Promise<WorkflowRuns> {\n return this.stores.workflows.listWorkflowRuns({ workflowName, fromDate, toDate, perPage, page, resourceId });\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string;\n }): Promise<WorkflowRun | null> {\n return this.stores.workflows.getWorkflowRunById({ runId, workflowName });\n }\n\n /**\n * Insert multiple records in a batch operation\n * @param tableName The table to insert into\n * @param records The records to insert\n */\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n return this.stores.operations.batchInsert({ tableName, records });\n }\n\n async updateMessages(_args: {\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 return this.stores.memory.updateMessages(_args);\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n return this.stores.memory.getResourceById({ resourceId });\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n return this.stores.memory.saveResource({ 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 return this.stores.memory.updateResource({ resourceId, workingMemory, metadata });\n }\n\n async getScoreById({ id: _id }: { id: string }): Promise<ScoreRowData | null> {\n return this.stores.scores.getScoreById({ id: _id });\n }\n\n async saveScore(_score: ScoreRowData): Promise<{ score: ScoreRowData }> {\n return this.stores.scores.saveScore(_score);\n }\n\n async listScoresByRunId({\n runId: _runId,\n pagination: _pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.listScoresByRunId({ runId: _runId, pagination: _pagination });\n }\n\n async listScoresByEntityId({\n entityId: _entityId,\n entityType: _entityType,\n pagination: _pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.listScoresByEntityId({\n entityId: _entityId,\n entityType: _entityType,\n pagination: _pagination,\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<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.listScoresByScorerId({ scorerId, pagination, entityId, entityType, source });\n }\n\n async listScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.listScoresBySpan({ traceId, spanId, pagination });\n }\n\n /**\n * Close the database connection\n * No explicit cleanup needed for D1 in either REST or Workers Binding mode\n */\n async close(): Promise<void> {\n this.logger.debug('Closing D1 connection');\n // No explicit cleanup needed for D1\n }\n}\n"]}
|