@mastra/libsql 1.0.0-beta.12 → 1.0.0-beta.13

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
@@ -2645,33 +2645,76 @@ var MemoryLibSQL = class extends MemoryStorage {
2645
2645
  );
2646
2646
  }
2647
2647
  }
2648
- async listThreadsByResourceId(args) {
2649
- const { resourceId, page = 0, perPage: perPageInput, orderBy } = args;
2650
- if (page < 0) {
2648
+ async listThreads(args) {
2649
+ const { page = 0, perPage: perPageInput, orderBy, filter } = args;
2650
+ try {
2651
+ this.validatePaginationInput(page, perPageInput ?? 100);
2652
+ } catch (error) {
2651
2653
  throw new MastraError(
2652
2654
  {
2653
- id: createStorageErrorId("LIBSQL", "LIST_THREADS_BY_RESOURCE_ID", "INVALID_PAGE"),
2655
+ id: createStorageErrorId("LIBSQL", "LIST_THREADS", "INVALID_PAGE"),
2654
2656
  domain: ErrorDomain.STORAGE,
2655
2657
  category: ErrorCategory.USER,
2656
- details: { page }
2658
+ details: { page, ...perPageInput !== void 0 && { perPage: perPageInput } }
2657
2659
  },
2658
- new Error("page must be >= 0")
2660
+ error instanceof Error ? error : new Error("Invalid pagination parameters")
2659
2661
  );
2660
2662
  }
2661
2663
  const perPage = normalizePerPage(perPageInput, 100);
2664
+ try {
2665
+ this.validateMetadataKeys(filter?.metadata);
2666
+ } catch (error) {
2667
+ throw new MastraError(
2668
+ {
2669
+ id: createStorageErrorId("LIBSQL", "LIST_THREADS", "INVALID_METADATA_KEY"),
2670
+ domain: ErrorDomain.STORAGE,
2671
+ category: ErrorCategory.USER,
2672
+ details: { metadataKeys: filter?.metadata ? Object.keys(filter.metadata).join(", ") : "" }
2673
+ },
2674
+ error instanceof Error ? error : new Error("Invalid metadata key")
2675
+ );
2676
+ }
2662
2677
  const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);
2663
2678
  const { field, direction } = this.parseOrderBy(orderBy);
2664
2679
  try {
2665
- const baseQuery = `FROM ${TABLE_THREADS} WHERE resourceId = ?`;
2666
- const queryParams = [resourceId];
2680
+ const whereClauses = [];
2681
+ const queryParams = [];
2682
+ if (filter?.resourceId) {
2683
+ whereClauses.push("resourceId = ?");
2684
+ queryParams.push(filter.resourceId);
2685
+ }
2686
+ if (filter?.metadata && Object.keys(filter.metadata).length > 0) {
2687
+ for (const [key, value] of Object.entries(filter.metadata)) {
2688
+ if (value === null) {
2689
+ whereClauses.push(`json_extract(metadata, '$.${key}') IS NULL`);
2690
+ } else if (typeof value === "boolean") {
2691
+ whereClauses.push(`json_extract(metadata, '$.${key}') = ?`);
2692
+ queryParams.push(value ? 1 : 0);
2693
+ } else if (typeof value === "number") {
2694
+ whereClauses.push(`json_extract(metadata, '$.${key}') = ?`);
2695
+ queryParams.push(value);
2696
+ } else if (typeof value === "string") {
2697
+ whereClauses.push(`json_extract(metadata, '$.${key}') = ?`);
2698
+ queryParams.push(value);
2699
+ } else {
2700
+ throw new MastraError({
2701
+ id: createStorageErrorId("LIBSQL", "LIST_THREADS", "INVALID_METADATA_VALUE"),
2702
+ domain: ErrorDomain.STORAGE,
2703
+ category: ErrorCategory.USER,
2704
+ text: `Metadata filter value for key "${key}" must be a scalar type (string, number, boolean, or null), got ${typeof value}`,
2705
+ details: { key, valueType: typeof value }
2706
+ });
2707
+ }
2708
+ }
2709
+ }
2710
+ const whereClause = whereClauses.length > 0 ? `WHERE ${whereClauses.join(" AND ")}` : "";
2711
+ const baseQuery = `FROM ${TABLE_THREADS} ${whereClause}`;
2667
2712
  const mapRowToStorageThreadType = (row) => ({
2668
2713
  id: row.id,
2669
2714
  resourceId: row.resourceId,
2670
2715
  title: row.title,
2671
2716
  createdAt: new Date(row.createdAt),
2672
- // Convert string to Date
2673
2717
  updatedAt: new Date(row.updatedAt),
2674
- // Convert string to Date
2675
2718
  metadata: typeof row.metadata === "string" ? JSON.parse(row.metadata) : row.metadata
2676
2719
  });
2677
2720
  const countResult = await this.#client.execute({
@@ -2702,12 +2745,18 @@ var MemoryLibSQL = class extends MemoryStorage {
2702
2745
  hasMore: perPageInput === false ? false : offset + perPage < total
2703
2746
  };
2704
2747
  } catch (error) {
2748
+ if (error instanceof MastraError && error.category === ErrorCategory.USER) {
2749
+ throw error;
2750
+ }
2705
2751
  const mastraError = new MastraError(
2706
2752
  {
2707
- id: createStorageErrorId("LIBSQL", "LIST_THREADS_BY_RESOURCE_ID", "FAILED"),
2753
+ id: createStorageErrorId("LIBSQL", "LIST_THREADS", "FAILED"),
2708
2754
  domain: ErrorDomain.STORAGE,
2709
2755
  category: ErrorCategory.THIRD_PARTY,
2710
- details: { resourceId }
2756
+ details: {
2757
+ ...filter?.resourceId && { resourceId: filter.resourceId },
2758
+ hasMetadataFilter: !!filter?.metadata
2759
+ }
2711
2760
  },
2712
2761
  error
2713
2762
  );