@mastra/spanner 1.10.1 → 1.11.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.
@@ -3,7 +3,7 @@ name: mastra-spanner
3
3
  description: Documentation for @mastra/spanner. Use when working with @mastra/spanner APIs, configuration, or implementation.
4
4
  metadata:
5
5
  package: "@mastra/spanner"
6
- version: "1.10.1"
6
+ version: "1.11.0"
7
7
  ---
8
8
 
9
9
  ## When to use
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.10.1",
2
+ "version": "1.11.0",
3
3
  "package": "@mastra/spanner",
4
4
  "exports": {},
5
5
  "modules": {}
package/dist/index.cjs CHANGED
@@ -1908,10 +1908,13 @@ function rowToTask(row) {
1908
1908
  suspendedAt: transformed.suspendedAt ? transformed.suspendedAt instanceof Date ? transformed.suspendedAt : new Date(transformed.suspendedAt) : void 0,
1909
1909
  completedAt: transformed.completedAt ? transformed.completedAt instanceof Date ? transformed.completedAt : new Date(transformed.completedAt) : void 0,
1910
1910
  ownerId: transformed.ownerId != null ? String(transformed.ownerId) : void 0,
1911
- leaseExpiresAt: transformed.leaseExpiresAt ? transformed.leaseExpiresAt instanceof Date ? transformed.leaseExpiresAt : new Date(transformed.leaseExpiresAt) : void 0
1911
+ leaseExpiresAt: transformed.leaseExpiresAt ? transformed.leaseExpiresAt instanceof Date ? transformed.leaseExpiresAt : new Date(transformed.leaseExpiresAt) : void 0,
1912
+ expiresAt: transformed.expiresAt ? transformed.expiresAt instanceof Date ? transformed.expiresAt : new Date(transformed.expiresAt) : void 0,
1913
+ metadata: parseJson(transformed.metadata) ?? void 0
1912
1914
  };
1913
1915
  }
1914
1916
  var BackgroundTasksSpanner = class BackgroundTasksSpanner extends _mastra_core_storage.BackgroundTasksStorage {
1917
+ supportsTaskExpiry = true;
1915
1918
  database;
1916
1919
  db;
1917
1920
  skipDefaultIndexes;
@@ -1941,7 +1944,9 @@ var BackgroundTasksSpanner = class BackgroundTasksSpanner extends _mastra_core_s
1941
1944
  "suspend_payload",
1942
1945
  "suspendedAt",
1943
1946
  "ownerId",
1944
- "leaseExpiresAt"
1947
+ "leaseExpiresAt",
1948
+ "expiresAt",
1949
+ "metadata"
1945
1950
  ]
1946
1951
  });
1947
1952
  await this.createDefaultIndexes();
@@ -2024,7 +2029,9 @@ var BackgroundTasksSpanner = class BackgroundTasksSpanner extends _mastra_core_s
2024
2029
  suspendedAt: task.suspendedAt ?? null,
2025
2030
  completedAt: task.completedAt ?? null,
2026
2031
  ownerId: task.ownerId ?? null,
2027
- leaseExpiresAt: task.leaseExpiresAt ?? null
2032
+ leaseExpiresAt: task.leaseExpiresAt ?? null,
2033
+ expiresAt: task.expiresAt ?? null,
2034
+ metadata: task.metadata ?? null
2028
2035
  }
2029
2036
  });
2030
2037
  }
@@ -2040,12 +2047,18 @@ var BackgroundTasksSpanner = class BackgroundTasksSpanner extends _mastra_core_s
2040
2047
  if ("completedAt" in update) data.completedAt = update.completedAt ?? null;
2041
2048
  if ("ownerId" in update) data.ownerId = update.ownerId ?? null;
2042
2049
  if ("leaseExpiresAt" in update) data.leaseExpiresAt = update.leaseExpiresAt ?? null;
2050
+ if ("expiresAt" in update) data.expiresAt = update.expiresAt ?? null;
2051
+ if ("metadata" in update) data.metadata = update.metadata ?? null;
2043
2052
  if (Object.keys(data).length === 0) return false;
2044
2053
  const setClauses = Object.keys(data).map((field) => `${quoteIdent(field, "column name")} = @${field}`);
2045
- const params = {
2046
- ...data,
2047
- id: taskId
2048
- };
2054
+ const params = { id: taskId };
2055
+ const types = {};
2056
+ for (const [field, value] of Object.entries(data)) {
2057
+ const prepared = this.db.prepareValue(value, field, _mastra_core_storage.TABLE_BACKGROUND_TASKS);
2058
+ params[field] = prepared;
2059
+ const colType = getColumnDef(_mastra_core_storage.TABLE_BACKGROUND_TASKS, field)?.type;
2060
+ if (prepared === null || colType === "jsonb" || colType === "timestamp") types[field] = getSpannerParamType(colType);
2061
+ }
2049
2062
  const predicates = [];
2050
2063
  if (options?.expectedStatus) {
2051
2064
  predicates.push("status = @expectedStatus");
@@ -2062,15 +2075,24 @@ var BackgroundTasksSpanner = class BackgroundTasksSpanner extends _mastra_core_s
2062
2075
  if (options.expectedLeaseExpiresAt === null) predicates.push("leaseExpiresAt IS NULL");
2063
2076
  else {
2064
2077
  predicates.push("leaseExpiresAt = @expectedLeaseExpiresAt");
2065
- params.expectedLeaseExpiresAt = options.expectedLeaseExpiresAt;
2078
+ params.expectedLeaseExpiresAt = this.db.prepareValue(options.expectedLeaseExpiresAt, "leaseExpiresAt", _mastra_core_storage.TABLE_BACKGROUND_TASKS);
2079
+ types.expectedLeaseExpiresAt = getSpannerParamType("timestamp");
2080
+ }
2081
+ }
2082
+ if (options?.expectedSuspendedAt !== void 0) {
2083
+ if (options.expectedSuspendedAt === null) predicates.push("suspendedAt IS NULL");
2084
+ else {
2085
+ predicates.push("suspendedAt = @expectedSuspendedAt");
2086
+ params.expectedSuspendedAt = this.db.prepareValue(options.expectedSuspendedAt, "suspendedAt", _mastra_core_storage.TABLE_BACKGROUND_TASKS);
2087
+ types.expectedSuspendedAt = getSpannerParamType("timestamp");
2066
2088
  }
2067
2089
  }
2068
2090
  const predicateSql = predicates.length > 0 ? ` AND ${predicates.join(" AND ")}` : "";
2069
- const [rowCount] = await this.database.runUpdate({
2091
+ return await this.db.runDml({
2070
2092
  sql: `UPDATE ${this.tableName()} SET ${setClauses.join(", ")} WHERE id = @id${predicateSql}`,
2071
- params
2072
- });
2073
- return rowCount > 0;
2093
+ params,
2094
+ types
2095
+ }) > 0;
2074
2096
  }
2075
2097
  async getTask(taskId) {
2076
2098
  const [rows] = await this.database.run({
@@ -2140,7 +2162,8 @@ var BackgroundTasksSpanner = class BackgroundTasksSpanner extends _mastra_core_s
2140
2162
  params[name] = filter.toolCallId;
2141
2163
  conditions.push(`${quoteIdent("tool_call_id", "column name")} = @${name}`);
2142
2164
  }
2143
- const dateCol = filter.dateFilterBy === "startedAt" ? quoteIdent("startedAt", "column name") : filter.dateFilterBy === "suspendedAt" ? quoteIdent("suspendedAt", "column name") : filter.dateFilterBy === "completedAt" ? quoteIdent("completedAt", "column name") : quoteIdent("createdAt", "column name");
2165
+ const dateCol = filter.dateFilterBy === "startedAt" ? quoteIdent("startedAt", "column name") : filter.dateFilterBy === "suspendedAt" ? quoteIdent("suspendedAt", "column name") : filter.dateFilterBy === "completedAt" ? quoteIdent("completedAt", "column name") : filter.dateFilterBy === "expiresAt" ? quoteIdent("expiresAt", "column name") : quoteIdent("createdAt", "column name");
2166
+ if (filter.hasExpiresAt !== void 0) conditions.push(`${quoteIdent("expiresAt", "column name")} IS ${filter.hasExpiresAt ? "NOT NULL" : "NULL"}`);
2144
2167
  if (filter.fromDate) {
2145
2168
  const name = `p${idx++}`;
2146
2169
  params[name] = filter.fromDate.toISOString();
@@ -2205,7 +2228,8 @@ var BackgroundTasksSpanner = class BackgroundTasksSpanner extends _mastra_core_s
2205
2228
  conditions.push(statusCondition.sql);
2206
2229
  idx = statusCondition.nextIdx;
2207
2230
  }
2208
- const dateCol = filter.dateFilterBy === "startedAt" ? quoteIdent("startedAt", "column name") : filter.dateFilterBy === "completedAt" ? quoteIdent("completedAt", "column name") : quoteIdent("createdAt", "column name");
2231
+ const dateCol = filter.dateFilterBy === "startedAt" ? quoteIdent("startedAt", "column name") : filter.dateFilterBy === "suspendedAt" ? quoteIdent("suspendedAt", "column name") : filter.dateFilterBy === "completedAt" ? quoteIdent("completedAt", "column name") : filter.dateFilterBy === "expiresAt" ? quoteIdent("expiresAt", "column name") : quoteIdent("createdAt", "column name");
2232
+ if (filter.hasExpiresAt !== void 0) conditions.push(`${quoteIdent("expiresAt", "column name")} IS ${filter.hasExpiresAt ? "NOT NULL" : "NULL"}`);
2209
2233
  if (filter.fromDate) {
2210
2234
  const name = `p${idx++}`;
2211
2235
  params[name] = filter.fromDate.toISOString();