@mastra/dynamodb 1.1.3 → 1.2.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,7 +1,7 @@
1
1
  import { DynamoDBClient, DescribeTableCommand } from '@aws-sdk/client-dynamodb';
2
2
  import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
3
3
  import { MastraError, ErrorCategory, ErrorDomain } from '@mastra/core/error';
4
- import { BackgroundTasksStorage, createStorageErrorId, MemoryStorage, normalizePerPage, calculatePagination, ScoresStorage, SCORERS_SCHEMA, WorkflowsStorage, MastraCompositeStore, TABLE_BACKGROUND_TASKS, TABLE_SCORERS, TABLE_WORKFLOW_SNAPSHOT, TABLE_RESOURCES, TABLE_MESSAGES, TABLE_THREADS } from '@mastra/core/storage';
4
+ import { BackgroundTasksStorage, createStorageErrorId, MemoryStorage, validateStorageMetadataFilter, normalizePerPage, calculatePagination, storageMessageMatchesMetadataFilter, ScoresStorage, SCORERS_SCHEMA, WorkflowsStorage, MastraCompositeStore, TABLE_BACKGROUND_TASKS, TABLE_SCORERS, TABLE_WORKFLOW_SNAPSHOT, TABLE_RESOURCES, TABLE_MESSAGES, TABLE_THREADS } from '@mastra/core/storage';
5
5
  import { Entity, Service } from 'electrodb';
6
6
  import { MessageList } from '@mastra/core/agent';
7
7
  import { saveScorePayloadSchema } from '@mastra/core/evals';
@@ -1747,6 +1747,7 @@ var MemoryStorageDynamoDB = class extends MemoryStorage {
1747
1747
  }
1748
1748
  async listMessages(args) {
1749
1749
  const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;
1750
+ const metadataFilter = validateStorageMetadataFilter(filter?.metadata);
1750
1751
  const threadIds = Array.isArray(threadId) ? threadId : [threadId];
1751
1752
  if (threadIds.length === 0 || threadIds.some((id) => !id.trim())) {
1752
1753
  throw new MastraError(
@@ -1836,19 +1837,24 @@ var MemoryStorageDynamoDB = class extends MemoryStorage {
1836
1837
  let paginatedMessages = [];
1837
1838
  let total = 0;
1838
1839
  const filteredMessageIds = /* @__PURE__ */ new Set();
1839
- if (threadIds.length > 1) {
1840
+ if (threadIds.length > 1 || metadataFilter) {
1840
1841
  const threadResults = await Promise.all(
1841
1842
  threadIds.map(async (tid) => {
1842
1843
  const q = applyQueryFilters(
1843
1844
  this.service.entities.message.query.byThread({ entity: "message", threadId: tid })
1844
1845
  );
1845
- const countResult = await q.go({ pages: "all", attributes: ["id"] });
1846
1846
  const results = await q.go({ pages: "all", order });
1847
- return { ids: countResult.data.map((item) => item.id), messages: parseQueryMessages(results.data) };
1847
+ let messages = parseQueryMessages(results.data);
1848
+ if (metadataFilter) {
1849
+ messages = messages.filter(
1850
+ (message) => storageMessageMatchesMetadataFilter(message.content, metadataFilter)
1851
+ );
1852
+ }
1853
+ return { ids: messages.map((message) => message.id), messages };
1848
1854
  })
1849
1855
  );
1850
- for (const r of threadResults) {
1851
- for (const id of r.ids) filteredMessageIds.add(id);
1856
+ for (const result of threadResults) {
1857
+ for (const id of result.ids) filteredMessageIds.add(id);
1852
1858
  }
1853
1859
  total = threadResults.reduce((sum, r) => sum + r.ids.length, 0);
1854
1860
  const merged = threadResults.flatMap((r) => r.messages);
@@ -1895,10 +1901,9 @@ var MemoryStorageDynamoDB = class extends MemoryStorage {
1895
1901
  let finalMessages = list.get.all.db();
1896
1902
  finalMessages = this._sortMessages(finalMessages, field, direction);
1897
1903
  const returnedFilteredMessageIds = new Set(
1898
- finalMessages.filter((m) => filteredMessageIds.has(m.id)).map((m) => m.id)
1904
+ finalMessages.filter((message) => filteredMessageIds.has(message.id)).map((message) => message.id)
1899
1905
  );
1900
- const allFilteredMessagesReturned = returnedFilteredMessageIds.size >= total;
1901
- const hasMore = perPageInput !== false && !allFilteredMessagesReturned && offset + perPage < total;
1906
+ const hasMore = perPageInput !== false && (metadataFilter || returnedFilteredMessageIds.size < total) && offset + perPage < total;
1902
1907
  return {
1903
1908
  messages: finalMessages,
1904
1909
  total,