@mastra/mssql 1.4.1-alpha.0 → 1.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 { AgentsStorage, TABLE_AGENTS, TABLE_AGENT_VERSIONS, AGENTS_SCHEMA, AGENT_VERSIONS_SCHEMA, createStorageErrorId, normalizePerPage, calculatePagination, BackgroundTasksStorage, TABLE_BACKGROUND_TASKS, TABLE_SCHEMAS, MemoryStorage, TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES, ObservabilityStorage, TABLE_SPANS, SPAN_SCHEMA, listTracesArgsSchema, toTraceSpans, ScoresStorage, TABLE_SCORERS, WorkflowsStorage, TABLE_WORKFLOW_SNAPSHOT, MastraCompositeStore, getDefaultValue, transformScoreRow as transformScoreRow$1, TraceStatus } from '@mastra/core/storage';
2
+ import { AgentsStorage, TABLE_AGENTS, TABLE_AGENT_VERSIONS, AGENTS_SCHEMA, AGENT_VERSIONS_SCHEMA, createStorageErrorId, normalizePerPage, calculatePagination, BackgroundTasksStorage, TABLE_BACKGROUND_TASKS, TABLE_SCHEMAS, MemoryStorage, TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES, validateStorageMetadataFilter, ObservabilityStorage, TABLE_SPANS, SPAN_SCHEMA, listTracesArgsSchema, toTraceSpans, ScoresStorage, TABLE_SCORERS, WorkflowsStorage, TABLE_WORKFLOW_SNAPSHOT, MastraCompositeStore, getDefaultValue, transformScoreRow as transformScoreRow$1, TraceStatus } from '@mastra/core/storage';
3
3
  import sql from 'mssql';
4
4
  import { randomUUID } from 'crypto';
5
5
  import { parseSqlIdentifier } from '@mastra/core/utils';
@@ -2286,6 +2286,32 @@ var BackgroundTasksMSSQL = class _BackgroundTasksMSSQL extends BackgroundTasksSt
2286
2286
  return Number(result.recordset[0]?.count ?? 0);
2287
2287
  }
2288
2288
  };
2289
+ function bindMssqlMetadataParams(request, params) {
2290
+ for (const [paramName, paramValue] of Object.entries(params)) {
2291
+ request.input(paramName, paramValue);
2292
+ }
2293
+ }
2294
+ function buildMssqlMessageMetadataFilter(metadataFilter) {
2295
+ if (!metadataFilter) return { clauses: [], params: {} };
2296
+ const clauses = [];
2297
+ const params = {};
2298
+ Object.entries(metadataFilter).forEach(([key, value], index) => {
2299
+ const keyParam = `metadataKey${index}`;
2300
+ params[keyParam] = key;
2301
+ clauses.push("ISJSON(content) = 1");
2302
+ if (value === null) {
2303
+ clauses.push(`EXISTS (SELECT 1 FROM OPENJSON(content, '$.metadata') WHERE [key] = @${keyParam} AND [type] = 0)`);
2304
+ return;
2305
+ }
2306
+ const valueParam = `metadataValue${index}`;
2307
+ params[valueParam] = String(value);
2308
+ const jsonType = typeof value === "string" ? 1 : typeof value === "number" ? 2 : 3;
2309
+ clauses.push(
2310
+ `EXISTS (SELECT 1 FROM OPENJSON(content, '$.metadata') WHERE [key] = @${keyParam} AND [type] = ${jsonType} AND [value] = @${valueParam})`
2311
+ );
2312
+ });
2313
+ return { clauses, params };
2314
+ }
2289
2315
  var MemoryMSSQL = class _MemoryMSSQL extends MemoryStorage {
2290
2316
  pool;
2291
2317
  schema;
@@ -2845,6 +2871,7 @@ var MemoryMSSQL = class _MemoryMSSQL extends MemoryStorage {
2845
2871
  }
2846
2872
  async listMessages(args) {
2847
2873
  const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;
2874
+ const metadataFilter = validateStorageMetadataFilter(filter?.metadata);
2848
2875
  const threadIds = Array.isArray(threadId) ? threadId : [threadId];
2849
2876
  if (threadIds.length === 0 || threadIds.some((id) => !id.trim())) {
2850
2877
  throw new MastraError(
@@ -2881,10 +2908,13 @@ var MemoryMSSQL = class _MemoryMSSQL extends MemoryStorage {
2881
2908
  ...resourceId ? { resourceId } : {},
2882
2909
  ...buildDateRangeFilter(filter?.dateRange, "createdAt")
2883
2910
  };
2884
- const { sql: actualWhereClause = "", params: whereParams } = prepareWhereClause(
2911
+ const { sql: preparedWhereClause = "", params: whereParams } = prepareWhereClause(
2885
2912
  filters);
2913
+ const metadataWhere = buildMssqlMessageMetadataFilter(metadataFilter);
2914
+ const actualWhereClause = metadataWhere.clauses.length ? `${preparedWhereClause || " WHERE 1 = 1"} AND ${metadataWhere.clauses.join(" AND ")}` : preparedWhereClause;
2886
2915
  const bindWhereParams = (req) => {
2887
2916
  Object.entries(whereParams).forEach(([paramName, paramValue]) => req.input(paramName, paramValue));
2917
+ bindMssqlMetadataParams(req, metadataWhere.params);
2888
2918
  };
2889
2919
  if (perPage === 0 && (!include || include.length === 0)) {
2890
2920
  return { messages: [], total: 0, page, perPage: perPageForResponse, hasMore: false };
@@ -2920,6 +2950,7 @@ var MemoryMSSQL = class _MemoryMSSQL extends MemoryStorage {
2920
2950
  };
2921
2951
  const baseRows = perPage === 0 ? [] : await fetchBaseMessages();
2922
2952
  const messages = [...baseRows];
2953
+ const primaryPageCount = messages.length;
2923
2954
  const seqById = /* @__PURE__ */ new Map();
2924
2955
  messages.forEach((msg) => {
2925
2956
  if (typeof msg.seq_id === "number") seqById.set(msg.id, msg.seq_id);
@@ -2960,7 +2991,7 @@ var MemoryMSSQL = class _MemoryMSSQL extends MemoryStorage {
2960
2991
  });
2961
2992
  const threadIdSet = new Set(threadIds);
2962
2993
  const returnedThreadMessageCount = finalMessages.filter((m) => m.threadId && threadIdSet.has(m.threadId)).length;
2963
- const hasMore = perPageInput !== false && returnedThreadMessageCount < total && offset + perPage < total;
2994
+ const hasMore = metadataFilter ? perPageInput !== false && offset + primaryPageCount < total : perPageInput !== false && returnedThreadMessageCount < total && offset + perPage < total;
2964
2995
  return {
2965
2996
  messages: finalMessages,
2966
2997
  total,