{"version":3,"sources":["../../../src/storage/pglite/index.ts"],"names":["__name","MastraStorage","__publicField","PGlite","MemoryFS","isAbsolute","join","resolve","TABLE_WORKFLOW_SNAPSHOT","TABLE_THREADS","TABLE_MESSAGES","TABLE_TRACES","TABLE_EVALS"],"mappings":"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","file":"index.cjs","sourcesContent":["import { join, resolve, isAbsolute } from 'path';\nimport { PGlite } from '@electric-sql/pglite';\nimport { MemoryFS } from '@electric-sql/pglite';\n\nimport type { MetricResult, TestInfo } from '../../eval';\nimport type { MessageType, StorageThreadType } from '../../memory/types';\nimport { MastraStorage } from '../base';\nimport { TABLE_EVALS, TABLE_MESSAGES, TABLE_THREADS, TABLE_TRACES, TABLE_WORKFLOW_SNAPSHOT } from '../constants';\nimport type { TABLE_NAMES } from '../constants';\nimport type { StorageColumn, StorageGetMessagesArg, EvalRow } from '../types';\n\nfunction safelyParseJSON(jsonString: string): any {\n  try {\n    return JSON.parse(jsonString);\n  } catch {\n    return {};\n  }\n}\n\nexport interface PGliteConfig {\n  url: string;\n  authToken?: string;\n}\n\ninterface ThreadRow {\n  id: string;\n  resourceId: string;\n  title: string;\n  createdAt: string;\n  updatedAt: string;\n  metadata: string | Record<string, unknown>;\n}\n\ninterface TraceRow {\n  id: string;\n  parentSpanId: string;\n  traceId: string;\n  name: string;\n  scope: string;\n  kind: string;\n  status: string;\n  events: string;\n  links: string;\n  attributes: string;\n  startTime: string | number;  // Could be stored as number (bigint)\n  endTime: string | number;  // Could be stored as number (bigint)\n  other: string;\n  createdAt: string;\n}\n\nexport class PGliteStore extends MastraStorage {\n  private client: PGlite | null = null;\n  private clientPromise: Promise<PGlite> | null = null;\n\n  constructor({ config }: { config: PGliteConfig }) {\n    super({ name: `PGliteStore` });\n\n    // need to re-init every time for in memory dbs or the tables might not exist\n    if (config.url === ':memory:' || config.url.startsWith('file::memory:')) {\n      this.shouldCacheInit = false;\n    }\n\n    this.clientPromise = this.initClient(config);\n  }\n\n  private async initClient(config: PGliteConfig): Promise<PGlite> {\n    const url = this.rewriteDbUrl(config.url);\n    this.logger.debug(`Initializing PGlite with URL: ${url}`);\n    \n    try {\n      // interface PGliteOptions<TExtensions extends Extensions = Extensions> {\n      //   dataDir?: string;\n      //   username?: string;\n      //   database?: string;\n      //   fs?: Filesystem;\n      //   debug?: DebugLevel;\n      //   relaxedDurability?: boolean;\n      //   extensions?: TExtensions;\n      //   loadDataDir?: Blob | File;\n      //   initialMemory?: number;\n      //   wasmModule?: WebAssembly.Module;\n      //   fsBundle?: Blob | File;\n      //   parsers?: ParserOptions;\n      //   serializers?: SerializerOptions;\n      // }\n      const client = await PGlite.create(url, {\n        fs: new MemoryFS(),\n      });\n      this.client = client;\n      return client;\n    } catch (error) {\n      this.logger.error(`Error initializing PGlite client: ${error}`);\n      throw error;\n    }\n  }\n\n  private async getClient(): Promise<PGlite> {\n    if (!this.client && this.clientPromise) {\n      this.client = await this.clientPromise;\n    }\n    if (!this.client) {\n      throw new Error('PGlite client not initialized');\n    }\n    return this.client;\n  }\n\n  // Rewrite DB URL to match the LibSQLStore logic for consistent file paths\n  protected rewriteDbUrl(url: string): string {\n    if (url.startsWith('file:') && url !== 'file::memory:') {\n      const pathPart = url.slice('file:'.length);\n\n      if (isAbsolute(pathPart)) {\n        return url;\n      }\n\n      const cwd = process.cwd();\n\n      if (cwd.includes('.mastra') && (cwd.endsWith(`output`) || cwd.endsWith(`output/`) || cwd.endsWith(`output\\\\`))) {\n        const baseDir = join(cwd, `..`, `..`); // <- .mastra/output/../../\n\n        const fullPath = resolve(baseDir, pathPart);\n\n        this.logger.debug(\n          `Initializing PGlite db with url ${url} with relative file path from inside .mastra/output directory. Rewriting relative file url to \"file:${fullPath}\". This ensures it's outside the .mastra/output directory.`,\n        );\n\n        return `file:${fullPath}`;\n      }\n    }\n\n    return url;\n  }\n\n  private getCreateTableSQL(tableName: TABLE_NAMES, schema: Record<string, StorageColumn>): string {\n    const columns = Object.entries(schema).map(([name, col]) => {\n      let type = col.type.toUpperCase();\n      if (type === 'TEXT') type = 'TEXT';\n      if (type === 'TIMESTAMP') type = 'TEXT'; // Store timestamps as ISO strings\n      // Match LibSQL type handling\n      if (type === 'JSONB') type = 'JSONB';\n      if (type === 'BIGINT') type = 'BIGINT';\n      if (type === 'INTEGER') type = 'INTEGER';\n\n      const nullable = col.nullable ? '' : 'NOT NULL';\n      const primaryKey = col.primaryKey ? 'PRIMARY KEY' : '';\n\n      return `\"${name}\" ${type} ${nullable} ${primaryKey}`.trim();\n    });\n\n    // For workflow_snapshot table, create a composite primary key\n    if (tableName === TABLE_WORKFLOW_SNAPSHOT) {\n      const stmnt = `CREATE TABLE IF NOT EXISTS ${tableName} (\n                ${columns.join(',\\n')},\n                PRIMARY KEY (workflow_name, run_id)\n            )`;\n      return stmnt;\n    }\n\n    return `CREATE TABLE IF NOT EXISTS ${tableName} (${columns.join(', ')})`;\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      this.logger.debug(`Creating database table`, { tableName, operation: 'schema init' });\n      const sql = this.getCreateTableSQL(tableName, schema);\n      const client = await this.getClient();\n      await client.exec(sql);\n    } catch (error) {\n      this.logger.error(`Error creating table ${tableName}: ${error}`);\n      throw error;\n    }\n  }\n\n  async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n    try {\n      const client = await this.getClient();\n      await client.exec(`DELETE FROM ${tableName}`);\n    } catch (e) {\n      if (e instanceof Error) {\n        this.logger.error(e.message);\n      }\n    }\n  }\n\n  private prepareParams(record: Record<string, any>): Record<string, any> {\n    return Object.fromEntries(\n      Object.entries(record).map(([k, v]) => {\n        if (typeof v === `undefined`) {\n          // Return null for undefined values\n          return [k, null];\n        }\n        if (v instanceof Date) {\n          return [k, v.toISOString()];\n        }\n        if (typeof v === 'object') {\n          return [k, JSON.stringify(v)];\n        }\n        return [k, v];\n      })\n    );\n  }\n\n  async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n    try {\n      const client = await this.getClient();\n      const columns = Object.keys(record);\n      const placeholders = columns.map((_, i) => `$${i + 1}`).join(', ');\n      const params = this.prepareParams(record);\n      const values = Object.values(params);\n\n      // Quote all column names to preserve case\n      const quotedColumns = columns.map(col => `\"${col}\"`);\n      \n      await client.query(\n        `INSERT INTO ${tableName} (${quotedColumns.join(', ')}) VALUES (${placeholders}) \n         ON CONFLICT (${this.getPrimaryKeys(tableName)}) DO UPDATE SET \n         ${columns.map((col, i) => `\"${col}\" = $${i + 1}`).join(', ')}`,\n        values\n      );\n    } catch (error) {\n      this.logger.error(`Error upserting into table ${tableName}: ${error}`);\n      throw error;\n    }\n  }\n\n  // Helper to get primary keys for upsert operation\n  private getPrimaryKeys(tableName: TABLE_NAMES): string {\n    switch (tableName) {\n      case TABLE_THREADS:\n      case TABLE_MESSAGES:\n      case TABLE_TRACES:\n        return '\"id\"';\n      case TABLE_WORKFLOW_SNAPSHOT:\n        return '\"workflow_name\", \"run_id\"';\n      default:\n        return '\"id\"'; // Default to 'id' for other tables\n    }\n  }\n\n  async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n    if (records.length === 0) return;\n\n    try {\n      const client = await this.getClient();\n      \n      // Use a transaction for the batch insert\n      await client.transaction(async (tx) => {\n        for (const record of records) {\n          const columns = Object.keys(record);\n          const placeholders = columns.map((_, i) => `$${i + 1}`).join(', ');\n          const params = this.prepareParams(record);\n          const values = Object.values(params);\n          \n          // Quote all column names to preserve case\n          const quotedColumns = columns.map(col => `\"${col}\"`);\n\n          await tx.query(\n            `INSERT INTO ${tableName} (${quotedColumns.join(', ')}) VALUES (${placeholders}) \n             ON CONFLICT (${this.getPrimaryKeys(tableName)}) DO UPDATE SET \n             ${columns.map((col, i) => `\"${col}\" = $${i + 1}`).join(', ')}`,\n            values\n          );\n        }\n      });\n    } catch (error) {\n      this.logger.error(`Error batch upserting into table ${tableName}: ${error}`);\n      throw error;\n    }\n  }\n\n  async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, string> }): Promise<R | null> {\n    const conditions = Object.keys(keys).map((key, i) => `\"${key}\" = $${i + 1}`).join(' AND ');\n    const values = Object.values(keys);\n\n    const client = await this.getClient();\n    try {\n      const result = await client.query(\n        `SELECT * FROM ${tableName} WHERE ${conditions} ORDER BY \"createdAt\" DESC LIMIT 1`,\n        values\n      );\n\n      if (!result.rows || result.rows.length === 0) {\n        return null;\n      }\n\n      const row = result.rows[0];\n      // Parse JSON strings in the result\n      const parsed = Object.fromEntries(\n        Object.entries(row || {}).map(([k, v]) => {\n          try {\n            return [k, typeof v === 'string' ? (v.startsWith('{') || v.startsWith('[') ? JSON.parse(v) : v) : v];\n          } catch {\n            return [k, v];\n          }\n        }),\n      );\n\n      return parsed as R;\n    } catch (error) {\n      this.logger.error(`Error querying table ${tableName}: ${error}`);\n      throw error;\n    }\n  }\n\n  async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n    const result = await this.load<ThreadRow>({\n      tableName: TABLE_THREADS,\n      keys: { id: threadId },\n    });\n\n    if (!result) {\n      return null;\n    }\n\n    return {\n      ...result,\n      createdAt: typeof result.createdAt === 'string' ? new Date(result.createdAt) : result.createdAt,\n      updatedAt: typeof result.updatedAt === 'string' ? new Date(result.updatedAt) : result.updatedAt,\n      metadata: typeof result.metadata === 'string' ? JSON.parse(result.metadata) : result.metadata,\n    } as StorageThreadType;\n  }\n\n  async getThreadsByResourceId({ resourceId }: { resourceId: string }): Promise<StorageThreadType[]> {\n    const client = await this.getClient();\n    const result = await client.query<ThreadRow>(\n      `SELECT * FROM ${TABLE_THREADS} WHERE \"resourceId\" = $1`,\n      [resourceId]\n    );\n\n    return (result.rows ?? []).map(thread => ({\n      id: thread.id,\n      resourceId: thread.resourceId,\n      title: thread.title,\n      createdAt: typeof thread.createdAt === 'string' ? new Date(thread.createdAt) : thread.createdAt,\n      updatedAt: typeof thread.updatedAt === 'string' ? new Date(thread.updatedAt) : thread.updatedAt,\n      metadata: typeof thread.metadata === 'string' ? JSON.parse(thread.metadata) : thread.metadata,\n    })) as StorageThreadType[];\n  }\n\n  async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n    await this.insert({\n      tableName: TABLE_THREADS,\n      record: {\n        ...thread,\n        metadata: JSON.stringify(thread.metadata),\n      },\n    });\n\n    return thread;\n  }\n\n  async updateThread({\n    id,\n    title,\n    metadata,\n  }: {\n    id: string;\n    title: string;\n    metadata: Record<string, unknown>;\n  }): Promise<StorageThreadType> {\n    const thread = await this.getThreadById({ threadId: id });\n    if (!thread) {\n      throw new Error(`Thread ${id} not found`);\n    }\n\n    const updatedThread = {\n      ...thread,\n      title,\n      metadata: {\n        ...thread.metadata,\n        ...metadata,\n      },\n    };\n\n    const client = await this.getClient();\n    await client.query(\n      `UPDATE ${TABLE_THREADS} SET title = $1, metadata = $2 WHERE id = $3`,\n      [title, JSON.stringify(updatedThread.metadata), id]\n    );\n\n    return updatedThread;\n  }\n\n  async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n    const client = await this.getClient();\n    await client.query(\n      `DELETE FROM ${TABLE_THREADS} WHERE id = $1`,\n      [threadId]\n    );\n    // Messages will need to be deleted separately since PGlite might not support CASCADE\n    await client.query(\n      `DELETE FROM ${TABLE_MESSAGES} WHERE thread_id = $1`,\n      [threadId]\n    );\n  }\n\n  private parseRow(row: any): MessageType {\n    let content = row.content;\n    try {\n      content = JSON.parse(row.content);\n    } catch {\n      // use content as is if it's not JSON\n    }\n    return {\n      id: row.id,\n      content,\n      role: row.role,\n      type: row.type,\n      createdAt: new Date(row.createdAt as string),\n      threadId: row.thread_id,\n    } as MessageType;\n  }\n\n  async getMessages<T extends MessageType[]>({ threadId, selectBy }: StorageGetMessagesArg): Promise<T> {\n    try {\n      const client = await this.getClient();\n      const messages: MessageType[] = [];\n      const limit = typeof selectBy?.last === `number` ? selectBy.last : 40;\n\n      // If we have specific messages to select\n      if (selectBy?.include?.length) {\n        const includeIds = selectBy.include.map(i => i.id);\n        const maxPrev = Math.max(...selectBy.include.map(i => i.withPreviousMessages || 0));\n        const maxNext = Math.max(...selectBy.include.map(i => i.withNextMessages || 0));\n\n        // Get messages around all specified IDs using a window function\n        const includeResult = await client.query(\n          `\n          WITH numbered_messages AS (\n            SELECT \n              id,\n              content,\n              role,\n              type,\n              \"createdAt\",\n              thread_id,\n              ROW_NUMBER() OVER (ORDER BY \"createdAt\" ASC) as row_num\n            FROM \"${TABLE_MESSAGES}\"\n            WHERE thread_id = $1\n          ),\n          target_positions AS (\n            SELECT row_num as target_pos\n            FROM numbered_messages\n            WHERE id IN (${includeIds.map((_, i) => `$${i + 2}`).join(', ')})\n          )\n          SELECT DISTINCT m.*\n          FROM numbered_messages m\n          CROSS JOIN target_positions t\n          WHERE m.row_num BETWEEN (t.target_pos - $${includeIds.length + 2}) AND (t.target_pos + $${includeIds.length + 3})\n          ORDER BY m.\"createdAt\" ASC\n          `,\n          [threadId, ...includeIds, maxPrev, maxNext]\n        );\n\n        if (includeResult.rows && includeResult.rows.length > 0) {\n          messages.push(...includeResult.rows.map((row: any) => this.parseRow(row)));\n        }\n      }\n\n      // Get remaining messages, excluding already fetched IDs\n      const excludeIds = messages.map(m => m.id);\n      \n      let remainingSql;\n      let remainingArgs;\n      \n      if (excludeIds.length) {\n        remainingSql = `\n          SELECT \n            id, \n            content, \n            role, \n            type,\n            \"createdAt\", \n            thread_id\n          FROM \"${TABLE_MESSAGES}\"\n          WHERE thread_id = $1\n          AND id NOT IN (${excludeIds.map((_, i) => `$${i + 2}`).join(', ')})\n          ORDER BY \"createdAt\" DESC\n          LIMIT $${excludeIds.length + 2}\n        `;\n        remainingArgs = [threadId, ...excludeIds, limit];\n      } else {\n        remainingSql = `\n          SELECT \n            id, \n            content, \n            role, \n            type,\n            \"createdAt\", \n            thread_id\n          FROM \"${TABLE_MESSAGES}\"\n          WHERE thread_id = $1\n          ORDER BY \"createdAt\" DESC\n          LIMIT $2\n        `;\n        remainingArgs = [threadId, limit];\n      }\n\n      const remainingResult = await client.query(remainingSql, remainingArgs);\n      \n      if (remainingResult.rows && remainingResult.rows.length > 0) {\n        messages.push(...remainingResult.rows.map((row: any) => this.parseRow(row)));\n      }\n\n      // Sort all messages by creation date\n      messages.sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n\n      return messages as T;\n    } catch (error) {\n      this.logger.error('Error getting messages:', error as Error);\n      throw error;\n    }\n  }\n\n  async saveMessages({ messages }: { messages: MessageType[] }): Promise<MessageType[]> {\n    if (messages.length === 0) return messages;\n\n    const client = await this.getClient();\n    try {\n      const threadId = messages[0]?.threadId;\n      if (!threadId) {\n        throw new Error('Thread ID is required');\n      }\n\n      await client.transaction(async (tx) => {\n        for (const message of messages) {\n          const time = message.createdAt || new Date();\n          await tx.query(\n            `INSERT INTO ${TABLE_MESSAGES} (id, thread_id, content, role, type, \"createdAt\") \n              VALUES ($1, $2, $3, $4, $5, $6)\n              ON CONFLICT (id) DO UPDATE SET\n              content = $3, role = $4, type = $5, \"createdAt\" = $6`,\n            [\n              message.id,\n              threadId,\n              typeof message.content === 'object' ? JSON.stringify(message.content) : message.content,\n              message.role,\n              message.type,\n              time instanceof Date ? time.toISOString() : time,\n            ]\n          );\n        }\n      });\n\n      return messages;\n    } catch (error) {\n      this.logger.error('Failed to save messages in database: ' + (error as any)?.message);\n      throw error;\n    }\n  }\n\n  private transformEvalRow(row: Record<string, any>): EvalRow {\n    const resultValue = typeof row.result === 'string' ? JSON.parse(row.result) : row.result;\n    const testInfoValue = row.test_info ? \n      (typeof row.test_info === 'string' ? JSON.parse(row.test_info) : row.test_info) : \n      undefined;\n\n    if (!resultValue || typeof resultValue !== 'object' || !('score' in resultValue)) {\n      throw new Error(`Invalid MetricResult format: ${JSON.stringify(resultValue)}`);\n    }\n\n    return {\n      input: row.input as string,\n      output: row.output as string,\n      result: resultValue as MetricResult,\n      agentName: row.agent_name as string,\n      metricName: row.metric_name as string,\n      instructions: row.instructions as string,\n      testInfo: testInfoValue 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    };\n  }\n\n  async getEvalsByAgentName(agentName: string, type?: 'test' | 'live'): Promise<EvalRow[]> {\n    try {\n      const client = await this.getClient();\n      const baseQuery = `SELECT * FROM ${TABLE_EVALS} WHERE agent_name = $1`;\n      \n      let typeCondition = '';\n      if (type === 'test') {\n        typeCondition = \" AND test_info IS NOT NULL AND test_info->>'testPath' IS NOT NULL\";\n      } else if (type === 'live') {\n        typeCondition = \" AND (test_info IS NULL OR test_info->>'testPath' IS NULL)\";\n      }\n\n      const result = await client.query(\n        `${baseQuery}${typeCondition} ORDER BY created_at DESC`,\n        [agentName]\n      );\n\n      return (result.rows?.map(row => this.transformEvalRow(row as Record<string, any>)) ?? []);\n    } catch (error) {\n      // Handle case where table doesn't exist yet\n      if (error instanceof Error && error.message.includes('no such table')) {\n        return [];\n      }\n      this.logger.error('Failed to get evals for the specified agent: ' + (error as any)?.message);\n      throw error;\n    }\n  }\n\n  async getTraces(\n    {\n      name,\n      scope,\n      page,\n      perPage,\n      attributes,\n    }: { name?: string; scope?: string; page: number; perPage: number; attributes?: Record<string, string> } = {\n      page: 0,\n      perPage: 100,\n    },\n  ): Promise<any[]> {\n    const limit = perPage;\n    const offset = page * perPage;\n\n    const args: any[] = [];\n\n    const conditions: string[] = [];\n    if (name) {\n      conditions.push(\"name LIKE $\" + (args.length + 1) + \" || '%'\");\n      args.push(name);\n    }\n    if (scope) {\n      conditions.push('scope = $' + (args.length + 1));\n      args.push(scope);\n    }\n    if (attributes) {\n      Object.keys(attributes).forEach(key => {\n        conditions.push(`attributes->>'${key}' = $${args.length + 1}`);\n      });\n    }\n\n    if (attributes) {\n      for (const [_key, value] of Object.entries(attributes)) {\n        args.push(value);\n      }\n    }\n\n    const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n    args.push(limit, offset);\n\n    const client = await this.getClient();\n    const result = await client.query<TraceRow>(\n      `SELECT * FROM ${TABLE_TRACES} ${whereClause} ORDER BY \"startTime\" DESC LIMIT $${args.length-1} OFFSET $${args.length}`,\n      args\n    );\n\n    if (!result.rows) {\n      return [];\n    }\n\n    return result.rows.map(row => ({\n      id: row.id,\n      parentSpanId: row.parentSpanId,\n      traceId: row.traceId,\n      name: row.name,\n      scope: row.scope,\n      kind: row.kind,\n      status: safelyParseJSON(row.status as string),\n      events: safelyParseJSON(row.events as string),\n      links: safelyParseJSON(row.links as string),\n      attributes: safelyParseJSON(row.attributes as string),\n      startTime: row.startTime,\n      endTime: row.endTime,\n      other: safelyParseJSON(row.other as string),\n      createdAt: row.createdAt,\n    })) as any;\n  }\n}\n\nexport { PGliteStore as DefaultStorage };"]}