@mastra/mysql 0.4.0 → 0.5.0-alpha.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/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { MastraError, ErrorCategory, ErrorDomain } from '@mastra/core/error';
2
- import { StoreOperations, TABLE_CONFIGS, TABLE_WORKFLOW_SNAPSHOT, TABLE_SPANS, AgentsStorage, TABLE_AGENTS, TABLE_AGENT_VERSIONS, AGENTS_SCHEMA, AGENT_VERSIONS_SCHEMA, createStorageErrorId, normalizePerPage, calculatePagination, BlobStore, SKILL_BLOBS_SCHEMA, TABLE_SKILL_BLOBS, DatasetsStorage, TABLE_DATASETS, TABLE_DATASET_ITEMS, TABLE_DATASET_VERSIONS, DATASETS_SCHEMA, DATASET_ITEMS_SCHEMA, DATASET_VERSIONS_SCHEMA, TABLE_EXPERIMENTS, TABLE_EXPERIMENT_RESULTS, hasErrorCode, ExperimentsStorage, EXPERIMENTS_SCHEMA, EXPERIMENT_RESULTS_SCHEMA, MCPClientsStorage, TABLE_MCP_CLIENTS, TABLE_MCP_CLIENT_VERSIONS, MCP_CLIENTS_SCHEMA, MCP_CLIENT_VERSIONS_SCHEMA, MCPServersStorage, TABLE_MCP_SERVERS, TABLE_MCP_SERVER_VERSIONS, MCP_SERVERS_SCHEMA, MCP_SERVER_VERSIONS_SCHEMA, MemoryStorage, TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES, TABLE_SCHEMAS, OBSERVATIONAL_MEMORY_TABLE_SCHEMA, ObservabilityStorage, SPAN_SCHEMA, listTracesArgsSchema, TraceStatus, toTraceSpans, PromptBlocksStorage, TABLE_PROMPT_BLOCKS, TABLE_PROMPT_BLOCK_VERSIONS, PROMPT_BLOCKS_SCHEMA, PROMPT_BLOCK_VERSIONS_SCHEMA, ScorerDefinitionsStorage, TABLE_SCORER_DEFINITIONS, TABLE_SCORER_DEFINITION_VERSIONS, SCORER_DEFINITIONS_SCHEMA, SCORER_DEFINITION_VERSIONS_SCHEMA, ScoresStorage, TABLE_SCORERS, SCORERS_SCHEMA, SkillsStorage, TABLE_SKILLS, TABLE_SKILL_VERSIONS, SKILLS_SCHEMA, SKILL_VERSIONS_SCHEMA, WorkflowsStorage, WorkspacesStorage, TABLE_WORKSPACES, TABLE_WORKSPACE_VERSIONS, WORKSPACES_SCHEMA, WORKSPACE_VERSIONS_SCHEMA, MastraCompositeStore, TABLE_FAVORITES, BackgroundTasksStorage, TABLE_BACKGROUND_TASKS, ChannelsStorage, TABLE_CHANNEL_INSTALLATIONS, TABLE_CHANNEL_CONFIG, FavoritesStorage, FAVORITES_SCHEMA, SchedulesStorage, TABLE_SCHEDULES, TABLE_SCHEDULE_TRIGGERS, ToolProviderConnectionsStorage, TABLE_TOOL_PROVIDER_CONNECTIONS, TOOL_PROVIDER_CONNECTIONS_SCHEMA, normalizeScheduleTarget } from '@mastra/core/storage';
2
+ import { StoreOperations, TABLE_CONFIGS, TABLE_WORKFLOW_SNAPSHOT, TABLE_SPANS, AgentsStorage, TABLE_AGENTS, TABLE_AGENT_VERSIONS, AGENTS_SCHEMA, AGENT_VERSIONS_SCHEMA, createStorageErrorId, normalizePerPage, calculatePagination, BlobStore, SKILL_BLOBS_SCHEMA, TABLE_SKILL_BLOBS, DatasetsStorage, TABLE_DATASETS, TABLE_DATASET_ITEMS, TABLE_DATASET_VERSIONS, DATASETS_SCHEMA, DATASET_ITEMS_SCHEMA, DATASET_VERSIONS_SCHEMA, TABLE_EXPERIMENTS, TABLE_EXPERIMENT_RESULTS, hasErrorCode, ExperimentsStorage, EXPERIMENTS_SCHEMA, EXPERIMENT_RESULTS_SCHEMA, MCPClientsStorage, TABLE_MCP_CLIENTS, TABLE_MCP_CLIENT_VERSIONS, MCP_CLIENTS_SCHEMA, MCP_CLIENT_VERSIONS_SCHEMA, MCPServersStorage, TABLE_MCP_SERVERS, TABLE_MCP_SERVER_VERSIONS, MCP_SERVERS_SCHEMA, MCP_SERVER_VERSIONS_SCHEMA, MemoryStorage, TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES, TABLE_SCHEMAS, OBSERVATIONAL_MEMORY_TABLE_SCHEMA, validateStorageMetadataFilter, ObservabilityStorage, SPAN_SCHEMA, listTracesArgsSchema, TraceStatus, toTraceSpans, PromptBlocksStorage, TABLE_PROMPT_BLOCKS, TABLE_PROMPT_BLOCK_VERSIONS, PROMPT_BLOCKS_SCHEMA, PROMPT_BLOCK_VERSIONS_SCHEMA, ScorerDefinitionsStorage, TABLE_SCORER_DEFINITIONS, TABLE_SCORER_DEFINITION_VERSIONS, SCORER_DEFINITIONS_SCHEMA, SCORER_DEFINITION_VERSIONS_SCHEMA, ScoresStorage, TABLE_SCORERS, SCORERS_SCHEMA, SkillsStorage, TABLE_SKILLS, TABLE_SKILL_VERSIONS, SKILLS_SCHEMA, SKILL_VERSIONS_SCHEMA, WorkflowsStorage, WorkspacesStorage, TABLE_WORKSPACES, TABLE_WORKSPACE_VERSIONS, WORKSPACES_SCHEMA, WORKSPACE_VERSIONS_SCHEMA, MastraCompositeStore, TABLE_FAVORITES, BackgroundTasksStorage, TABLE_BACKGROUND_TASKS, ChannelsStorage, TABLE_CHANNEL_INSTALLATIONS, TABLE_CHANNEL_CONFIG, FavoritesStorage, FAVORITES_SCHEMA, SchedulesStorage, TABLE_SCHEDULES, TABLE_SCHEDULE_TRIGGERS, ToolProviderConnectionsStorage, TABLE_TOOL_PROVIDER_CONNECTIONS, TOOL_PROVIDER_CONNECTIONS_SCHEMA, normalizeScheduleTarget } from '@mastra/core/storage';
3
3
  import { createPool } from 'mysql2/promise';
4
4
  import { parseSqlIdentifier } from '@mastra/core/utils';
5
5
  import { randomUUID } from 'crypto';
@@ -5214,6 +5214,22 @@ function parseJSON3(value) {
5214
5214
  return null;
5215
5215
  }
5216
5216
  }
5217
+ function addMySQLMessageMetadataFilter(conditions, params, metadataFilter) {
5218
+ if (!metadataFilter) return;
5219
+ for (const [key, value] of Object.entries(metadataFilter)) {
5220
+ const path = `$.metadata.${key}`;
5221
+ conditions.push(`JSON_VALID(${quoteIdentifier("content", "column name")})`);
5222
+ conditions.push(`JSON_CONTAINS_PATH(${quoteIdentifier("content", "column name")}, 'one', ?)`);
5223
+ params.push(path);
5224
+ if (value === null) {
5225
+ conditions.push(`JSON_TYPE(JSON_EXTRACT(${quoteIdentifier("content", "column name")}, ?)) = 'NULL'`);
5226
+ params.push(path);
5227
+ } else {
5228
+ conditions.push(`JSON_EXTRACT(${quoteIdentifier("content", "column name")}, ?) = CAST(? AS JSON)`);
5229
+ params.push(path, JSON.stringify(value));
5230
+ }
5231
+ }
5232
+ }
5217
5233
  var MemoryMySQL = class _MemoryMySQL extends MemoryStorage {
5218
5234
  supportsObservationalMemory = true;
5219
5235
  pool;
@@ -6069,6 +6085,7 @@ var MemoryMySQL = class _MemoryMySQL extends MemoryStorage {
6069
6085
  const { threadId, resourceId, filter, orderBy, page = 0, perPage: perPageInput } = args;
6070
6086
  const selectBy = args.selectBy;
6071
6087
  const include = args.include ?? selectBy?.include;
6088
+ const metadataFilter = validateStorageMetadataFilter(filter?.metadata);
6072
6089
  const threadIds = Array.isArray(threadId) ? threadId : [threadId];
6073
6090
  if (threadIds.length === 0 || threadIds.some((id) => !id.trim())) {
6074
6091
  throw emitValidationError("threadId must be a non-empty string or array of non-empty strings");
@@ -6115,6 +6132,7 @@ var MemoryMySQL = class _MemoryMySQL extends MemoryStorage {
6115
6132
  conditions.push(`${quoteIdentifier("createdAt", "column name")} ${endOp} ?`);
6116
6133
  params.push(transformToSqlValue(filter.dateRange.end));
6117
6134
  }
6135
+ addMySQLMessageMetadataFilter(conditions, params, metadataFilter);
6118
6136
  if (selectBy?.vectorSearchString) {
6119
6137
  conditions.push(`${quoteIdentifier("content", "column name")} LIKE ?`);
6120
6138
  params.push(`%${selectBy.vectorSearchString}%`);
@@ -6196,7 +6214,7 @@ var MemoryMySQL = class _MemoryMySQL extends MemoryStorage {
6196
6214
  const mainThreadMessageCount = messages.filter(
6197
6215
  (msg) => msg.threadId !== void 0 && threadIdSet.has(msg.threadId)
6198
6216
  ).length;
6199
- const hasMore = include && include.length ? mainThreadMessageCount >= total ? false : baseHasMore : baseHasMore;
6217
+ const hasMore = metadataFilter || !include?.length || mainThreadMessageCount < total ? baseHasMore : false;
6200
6218
  return {
6201
6219
  messages,
6202
6220
  total,
@@ -6225,6 +6243,7 @@ var MemoryMySQL = class _MemoryMySQL extends MemoryStorage {
6225
6243
  }
6226
6244
  async listMessagesByResourceId(args) {
6227
6245
  const { resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;
6246
+ const metadataFilter = validateStorageMetadataFilter(filter?.metadata);
6228
6247
  if (!resourceId || typeof resourceId !== "string" || resourceId.trim().length === 0) {
6229
6248
  throw new MastraError(
6230
6249
  {
@@ -6265,6 +6284,7 @@ var MemoryMySQL = class _MemoryMySQL extends MemoryStorage {
6265
6284
  conditions.push(`${quoteIdentifier("createdAt", "column name")} ${endOp} ?`);
6266
6285
  params.push(transformToSqlValue(filter.dateRange.end));
6267
6286
  }
6287
+ addMySQLMessageMetadataFilter(conditions, params, metadataFilter);
6268
6288
  const whereSql = `WHERE ${conditions.join(" AND ")}`;
6269
6289
  const tableName = formatTableName(TABLE_MESSAGES);
6270
6290
  const [countRows] = await this.pool.execute(