@mastra/lance 1.0.0-beta.11 → 1.0.0-beta.12

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
@@ -950,27 +950,63 @@ var StoreMemoryLance = class extends MemoryStorage {
950
950
  );
951
951
  }
952
952
  }
953
- async listThreadsByResourceId(args) {
953
+ async listThreads(args) {
954
+ const { page = 0, perPage: perPageInput, orderBy, filter } = args;
955
+ try {
956
+ this.validatePaginationInput(page, perPageInput ?? 100);
957
+ } catch (error) {
958
+ throw new MastraError(
959
+ {
960
+ id: createStorageErrorId("LANCE", "LIST_THREADS", "INVALID_PAGE"),
961
+ domain: ErrorDomain.STORAGE,
962
+ category: ErrorCategory.USER,
963
+ details: { page, ...perPageInput !== void 0 && { perPage: perPageInput } }
964
+ },
965
+ error instanceof Error ? error : new Error("Invalid pagination parameters")
966
+ );
967
+ }
968
+ const perPage = normalizePerPage(perPageInput, 100);
969
+ try {
970
+ this.validateMetadataKeys(filter?.metadata);
971
+ } catch (error) {
972
+ throw new MastraError(
973
+ {
974
+ id: createStorageErrorId("LANCE", "LIST_THREADS", "INVALID_METADATA_KEY"),
975
+ domain: ErrorDomain.STORAGE,
976
+ category: ErrorCategory.USER,
977
+ details: { metadataKeys: filter?.metadata ? Object.keys(filter.metadata).join(", ") : "" }
978
+ },
979
+ error instanceof Error ? error : new Error("Invalid metadata key")
980
+ );
981
+ }
954
982
  try {
955
- const { resourceId, page = 0, perPage: perPageInput, orderBy } = args;
956
- const perPage = normalizePerPage(perPageInput, 100);
957
- if (page < 0) {
958
- throw new MastraError(
959
- {
960
- id: createStorageErrorId("LANCE", "LIST_THREADS_BY_RESOURCE_ID", "INVALID_PAGE"),
961
- domain: ErrorDomain.STORAGE,
962
- category: ErrorCategory.USER,
963
- details: { page }
964
- },
965
- new Error("page must be >= 0")
966
- );
967
- }
968
983
  const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);
969
984
  const { field, direction } = this.parseOrderBy(orderBy);
970
985
  const table = await this.client.openTable(TABLE_THREADS);
971
- const total = await table.countRows(`\`resourceId\` = '${this.escapeSql(resourceId)}'`);
972
- const query = table.query().where(`\`resourceId\` = '${this.escapeSql(resourceId)}'`);
973
- const records = await query.toArray();
986
+ const whereClauses = [];
987
+ if (filter?.resourceId) {
988
+ whereClauses.push(`\`resourceId\` = '${this.escapeSql(filter.resourceId)}'`);
989
+ }
990
+ const whereClause = whereClauses.length > 0 ? whereClauses.join(" AND ") : "";
991
+ const query = whereClause ? table.query().where(whereClause) : table.query();
992
+ let records = await query.toArray();
993
+ if (filter?.metadata && Object.keys(filter.metadata).length > 0) {
994
+ records = records.filter((record) => {
995
+ if (!record.metadata) return false;
996
+ let recordMeta;
997
+ if (typeof record.metadata === "string") {
998
+ try {
999
+ recordMeta = JSON.parse(record.metadata);
1000
+ } catch {
1001
+ return false;
1002
+ }
1003
+ } else {
1004
+ recordMeta = record.metadata;
1005
+ }
1006
+ return Object.entries(filter.metadata).every(([key, value]) => recordMeta[key] === value);
1007
+ });
1008
+ }
1009
+ const total = records.length;
974
1010
  records.sort((a, b) => {
975
1011
  const aValue = ["createdAt", "updatedAt"].includes(field) ? new Date(a[field]).getTime() : a[field];
976
1012
  const bValue = ["createdAt", "updatedAt"].includes(field) ? new Date(b[field]).getTime() : b[field];
@@ -997,7 +1033,7 @@ var StoreMemoryLance = class extends MemoryStorage {
997
1033
  } catch (error) {
998
1034
  throw new MastraError(
999
1035
  {
1000
- id: createStorageErrorId("LANCE", "LIST_THREADS_BY_RESOURCE_ID", "FAILED"),
1036
+ id: createStorageErrorId("LANCE", "LIST_THREADS", "FAILED"),
1001
1037
  domain: ErrorDomain.STORAGE,
1002
1038
  category: ErrorCategory.THIRD_PARTY
1003
1039
  },