@dudousxd/nestjs-durable-store-drizzle 0.17.0 → 0.18.1

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.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { StateStore, WorkflowRun, StepCheckpoint, RunQuery, RunFacetQuery, RunFacetRow, RunValueAxis, RunValueFacetOptions, RunValueFacetRow, SignalWaiter } from '@dudousxd/nestjs-durable-core';
1
+ import { StateStore, WorkflowRun, RetentionPolicy, StepCheckpoint, RunQuery, RunFacetQuery, RunFacetRow, RunValueAxis, RunValueFacetOptions, RunValueFacetRow, ScheduleRecord, ScheduleQuery, SignalWaiter } from '@dudousxd/nestjs-durable-core';
2
2
  import * as drizzle_orm_sqlite_core from 'drizzle-orm/sqlite-core';
3
3
  import { BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core';
4
4
 
@@ -11,13 +11,16 @@ type DrizzleSqlite = BaseSQLiteDatabase<'sync' | 'async', unknown>;
11
11
  declare class DrizzleStateStore implements StateStore {
12
12
  private readonly db;
13
13
  constructor(db: DrizzleSqlite);
14
+ tryAdmitSingleton(runId: string, tag: string, workflow: string, limit: number, retryWakeAt?: number): Promise<boolean>;
14
15
  createRun(run: WorkflowRun): Promise<void>;
15
- updateRun(runId: string, patch: Partial<WorkflowRun>): Promise<void>;
16
+ updateRun(runId: string, inputPatch: Partial<WorkflowRun>): Promise<void>;
16
17
  /** Rewrite a run's normalized attribute rows: delete the old set, insert the current one. Mirrors
17
18
  * the in-memory store's reindex so the side-table always reflects the run's live searchAttributes. */
18
19
  private reindexAttributes;
19
20
  getRun(runId: string): Promise<WorkflowRun | null>;
20
21
  deleteRun(runId: string): Promise<void>;
22
+ deleteRuns(runIds: string[]): Promise<void>;
23
+ pruneTerminalRuns(policy: RetentionPolicy, nowMs: number, limit: number): Promise<number>;
21
24
  getCheckpoint(runId: string, seq: number): Promise<StepCheckpoint | null>;
22
25
  saveCheckpoint(checkpoint: StepCheckpoint): Promise<void>;
23
26
  transaction<T>(work: (tx: {
@@ -39,6 +42,7 @@ declare class DrizzleStateStore implements StateStore {
39
42
  * them, so a facet count and the page it labels are always taken over the same set. */
40
43
  private runFilters;
41
44
  listRuns(query: RunQuery): Promise<WorkflowRun[]>;
45
+ countRuns(query: Omit<RunQuery, 'limit' | 'offset'>): Promise<number>;
42
46
  /** `GROUP BY status, origin` over the same predicates {@link listRuns} pages — one aggregate, so a
43
47
  * console can show whole-set counts next to a bounded page instead of downloading every run to
44
48
  * count them in the browser. */
@@ -53,6 +57,11 @@ declare class DrizzleStateStore implements StateStore {
53
57
  * contract): EXISTS already requires the key row to be present, so EXISTS(... <> ...) is exactly
54
58
  * ne-with-present. Numeric operands compare `num_value`, everything else `str_value`. */
55
59
  private attributeExists;
60
+ saveSchedule(record: ScheduleRecord): Promise<void>;
61
+ getSchedule(id: string): Promise<ScheduleRecord | null>;
62
+ updateSchedule(id: string, patch: Partial<Omit<ScheduleRecord, 'id' | 'createdAt'>>, expectedNextFireAt?: number | null): Promise<boolean>;
63
+ deleteSchedule(id: string): Promise<boolean>;
64
+ listSchedules(query: ScheduleQuery): Promise<ScheduleRecord[]>;
56
65
  listCheckpoints(runId: string): Promise<StepCheckpoint[]>;
57
66
  getLatestCheckpointByName(runId: string, name: string): Promise<StepCheckpoint | undefined>;
58
67
  listCheckpointsByNamePrefix(runId: string, prefixes: string[]): Promise<StepCheckpoint[]>;
@@ -1042,6 +1051,203 @@ declare const bufferedEvents: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
1042
1051
  };
1043
1052
  dialect: "sqlite";
1044
1053
  }>;
1054
+ /**
1055
+ * Persisted schedules (`engine.schedules`). `spec`/`state` are JSON documents the engine owns; the
1056
+ * store only filters on the columns. `next_fire_at` is epoch ms, NULL when it never fires again.
1057
+ *
1058
+ * MIGRATION (you own this adapter's migrations): `drizzle-kit generate` picks the table up from
1059
+ * `durableSchema`; by hand it is the `durable_schedules` CREATE TABLE + index in the package docs.
1060
+ * Only needed if you use persisted schedules.
1061
+ */
1062
+ declare const durableSchedules: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
1063
+ name: "durable_schedules";
1064
+ schema: undefined;
1065
+ columns: {
1066
+ id: drizzle_orm_sqlite_core.SQLiteColumn<{
1067
+ name: "id";
1068
+ tableName: "durable_schedules";
1069
+ dataType: "string";
1070
+ columnType: "SQLiteText";
1071
+ data: string;
1072
+ driverParam: string;
1073
+ notNull: true;
1074
+ hasDefault: false;
1075
+ isPrimaryKey: true;
1076
+ isAutoincrement: false;
1077
+ hasRuntimeDefault: false;
1078
+ enumValues: [string, ...string[]];
1079
+ baseColumn: never;
1080
+ identity: undefined;
1081
+ generated: undefined;
1082
+ }, {}, {
1083
+ length: number | undefined;
1084
+ }>;
1085
+ namespace: drizzle_orm_sqlite_core.SQLiteColumn<{
1086
+ name: "namespace";
1087
+ tableName: "durable_schedules";
1088
+ dataType: "string";
1089
+ columnType: "SQLiteText";
1090
+ data: string;
1091
+ driverParam: string;
1092
+ notNull: true;
1093
+ hasDefault: true;
1094
+ isPrimaryKey: false;
1095
+ isAutoincrement: false;
1096
+ hasRuntimeDefault: false;
1097
+ enumValues: [string, ...string[]];
1098
+ baseColumn: never;
1099
+ identity: undefined;
1100
+ generated: undefined;
1101
+ }, {}, {
1102
+ length: number | undefined;
1103
+ }>;
1104
+ workflow: drizzle_orm_sqlite_core.SQLiteColumn<{
1105
+ name: "workflow";
1106
+ tableName: "durable_schedules";
1107
+ dataType: "string";
1108
+ columnType: "SQLiteText";
1109
+ data: string;
1110
+ driverParam: string;
1111
+ notNull: true;
1112
+ hasDefault: false;
1113
+ isPrimaryKey: false;
1114
+ isAutoincrement: false;
1115
+ hasRuntimeDefault: false;
1116
+ enumValues: [string, ...string[]];
1117
+ baseColumn: never;
1118
+ identity: undefined;
1119
+ generated: undefined;
1120
+ }, {}, {
1121
+ length: number | undefined;
1122
+ }>;
1123
+ paused: drizzle_orm_sqlite_core.SQLiteColumn<{
1124
+ name: "paused";
1125
+ tableName: "durable_schedules";
1126
+ dataType: "boolean";
1127
+ columnType: "SQLiteBoolean";
1128
+ data: boolean;
1129
+ driverParam: number;
1130
+ notNull: true;
1131
+ hasDefault: true;
1132
+ isPrimaryKey: false;
1133
+ isAutoincrement: false;
1134
+ hasRuntimeDefault: false;
1135
+ enumValues: undefined;
1136
+ baseColumn: never;
1137
+ identity: undefined;
1138
+ generated: undefined;
1139
+ }, {}, {}>;
1140
+ nextFireAt: drizzle_orm_sqlite_core.SQLiteColumn<{
1141
+ name: "next_fire_at";
1142
+ tableName: "durable_schedules";
1143
+ dataType: "number";
1144
+ columnType: "SQLiteInteger";
1145
+ data: number;
1146
+ driverParam: number;
1147
+ notNull: false;
1148
+ hasDefault: false;
1149
+ isPrimaryKey: false;
1150
+ isAutoincrement: false;
1151
+ hasRuntimeDefault: false;
1152
+ enumValues: undefined;
1153
+ baseColumn: never;
1154
+ identity: undefined;
1155
+ generated: undefined;
1156
+ }, {}, {}>;
1157
+ tags: drizzle_orm_sqlite_core.SQLiteColumn<{
1158
+ name: "tags";
1159
+ tableName: "durable_schedules";
1160
+ dataType: "json";
1161
+ columnType: "SQLiteTextJson";
1162
+ data: string[];
1163
+ driverParam: string;
1164
+ notNull: false;
1165
+ hasDefault: false;
1166
+ isPrimaryKey: false;
1167
+ isAutoincrement: false;
1168
+ hasRuntimeDefault: false;
1169
+ enumValues: undefined;
1170
+ baseColumn: never;
1171
+ identity: undefined;
1172
+ generated: undefined;
1173
+ }, {}, {
1174
+ $type: string[];
1175
+ }>;
1176
+ spec: drizzle_orm_sqlite_core.SQLiteColumn<{
1177
+ name: "spec";
1178
+ tableName: "durable_schedules";
1179
+ dataType: "json";
1180
+ columnType: "SQLiteTextJson";
1181
+ data: Record<string, unknown>;
1182
+ driverParam: string;
1183
+ notNull: true;
1184
+ hasDefault: false;
1185
+ isPrimaryKey: false;
1186
+ isAutoincrement: false;
1187
+ hasRuntimeDefault: false;
1188
+ enumValues: undefined;
1189
+ baseColumn: never;
1190
+ identity: undefined;
1191
+ generated: undefined;
1192
+ }, {}, {
1193
+ $type: Record<string, unknown>;
1194
+ }>;
1195
+ state: drizzle_orm_sqlite_core.SQLiteColumn<{
1196
+ name: "state";
1197
+ tableName: "durable_schedules";
1198
+ dataType: "json";
1199
+ columnType: "SQLiteTextJson";
1200
+ data: Record<string, unknown>;
1201
+ driverParam: string;
1202
+ notNull: true;
1203
+ hasDefault: false;
1204
+ isPrimaryKey: false;
1205
+ isAutoincrement: false;
1206
+ hasRuntimeDefault: false;
1207
+ enumValues: undefined;
1208
+ baseColumn: never;
1209
+ identity: undefined;
1210
+ generated: undefined;
1211
+ }, {}, {
1212
+ $type: Record<string, unknown>;
1213
+ }>;
1214
+ createdAt: drizzle_orm_sqlite_core.SQLiteColumn<{
1215
+ name: "created_at";
1216
+ tableName: "durable_schedules";
1217
+ dataType: "number";
1218
+ columnType: "SQLiteInteger";
1219
+ data: number;
1220
+ driverParam: number;
1221
+ notNull: true;
1222
+ hasDefault: false;
1223
+ isPrimaryKey: false;
1224
+ isAutoincrement: false;
1225
+ hasRuntimeDefault: false;
1226
+ enumValues: undefined;
1227
+ baseColumn: never;
1228
+ identity: undefined;
1229
+ generated: undefined;
1230
+ }, {}, {}>;
1231
+ updatedAt: drizzle_orm_sqlite_core.SQLiteColumn<{
1232
+ name: "updated_at";
1233
+ tableName: "durable_schedules";
1234
+ dataType: "number";
1235
+ columnType: "SQLiteInteger";
1236
+ data: number;
1237
+ driverParam: number;
1238
+ notNull: true;
1239
+ hasDefault: false;
1240
+ isPrimaryKey: false;
1241
+ isAutoincrement: false;
1242
+ hasRuntimeDefault: false;
1243
+ enumValues: undefined;
1244
+ baseColumn: never;
1245
+ identity: undefined;
1246
+ generated: undefined;
1247
+ }, {}, {}>;
1248
+ };
1249
+ dialect: "sqlite";
1250
+ }>;
1045
1251
  declare const durableSchema: {
1046
1252
  workflowRuns: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
1047
1253
  name: "durable_workflow_runs";
@@ -2004,6 +2210,195 @@ declare const durableSchema: {
2004
2210
  };
2005
2211
  dialect: "sqlite";
2006
2212
  }>;
2213
+ durableSchedules: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
2214
+ name: "durable_schedules";
2215
+ schema: undefined;
2216
+ columns: {
2217
+ id: drizzle_orm_sqlite_core.SQLiteColumn<{
2218
+ name: "id";
2219
+ tableName: "durable_schedules";
2220
+ dataType: "string";
2221
+ columnType: "SQLiteText";
2222
+ data: string;
2223
+ driverParam: string;
2224
+ notNull: true;
2225
+ hasDefault: false;
2226
+ isPrimaryKey: true;
2227
+ isAutoincrement: false;
2228
+ hasRuntimeDefault: false;
2229
+ enumValues: [string, ...string[]];
2230
+ baseColumn: never;
2231
+ identity: undefined;
2232
+ generated: undefined;
2233
+ }, {}, {
2234
+ length: number | undefined;
2235
+ }>;
2236
+ namespace: drizzle_orm_sqlite_core.SQLiteColumn<{
2237
+ name: "namespace";
2238
+ tableName: "durable_schedules";
2239
+ dataType: "string";
2240
+ columnType: "SQLiteText";
2241
+ data: string;
2242
+ driverParam: string;
2243
+ notNull: true;
2244
+ hasDefault: true;
2245
+ isPrimaryKey: false;
2246
+ isAutoincrement: false;
2247
+ hasRuntimeDefault: false;
2248
+ enumValues: [string, ...string[]];
2249
+ baseColumn: never;
2250
+ identity: undefined;
2251
+ generated: undefined;
2252
+ }, {}, {
2253
+ length: number | undefined;
2254
+ }>;
2255
+ workflow: drizzle_orm_sqlite_core.SQLiteColumn<{
2256
+ name: "workflow";
2257
+ tableName: "durable_schedules";
2258
+ dataType: "string";
2259
+ columnType: "SQLiteText";
2260
+ data: string;
2261
+ driverParam: string;
2262
+ notNull: true;
2263
+ hasDefault: false;
2264
+ isPrimaryKey: false;
2265
+ isAutoincrement: false;
2266
+ hasRuntimeDefault: false;
2267
+ enumValues: [string, ...string[]];
2268
+ baseColumn: never;
2269
+ identity: undefined;
2270
+ generated: undefined;
2271
+ }, {}, {
2272
+ length: number | undefined;
2273
+ }>;
2274
+ paused: drizzle_orm_sqlite_core.SQLiteColumn<{
2275
+ name: "paused";
2276
+ tableName: "durable_schedules";
2277
+ dataType: "boolean";
2278
+ columnType: "SQLiteBoolean";
2279
+ data: boolean;
2280
+ driverParam: number;
2281
+ notNull: true;
2282
+ hasDefault: true;
2283
+ isPrimaryKey: false;
2284
+ isAutoincrement: false;
2285
+ hasRuntimeDefault: false;
2286
+ enumValues: undefined;
2287
+ baseColumn: never;
2288
+ identity: undefined;
2289
+ generated: undefined;
2290
+ }, {}, {}>;
2291
+ nextFireAt: drizzle_orm_sqlite_core.SQLiteColumn<{
2292
+ name: "next_fire_at";
2293
+ tableName: "durable_schedules";
2294
+ dataType: "number";
2295
+ columnType: "SQLiteInteger";
2296
+ data: number;
2297
+ driverParam: number;
2298
+ notNull: false;
2299
+ hasDefault: false;
2300
+ isPrimaryKey: false;
2301
+ isAutoincrement: false;
2302
+ hasRuntimeDefault: false;
2303
+ enumValues: undefined;
2304
+ baseColumn: never;
2305
+ identity: undefined;
2306
+ generated: undefined;
2307
+ }, {}, {}>;
2308
+ tags: drizzle_orm_sqlite_core.SQLiteColumn<{
2309
+ name: "tags";
2310
+ tableName: "durable_schedules";
2311
+ dataType: "json";
2312
+ columnType: "SQLiteTextJson";
2313
+ data: string[];
2314
+ driverParam: string;
2315
+ notNull: false;
2316
+ hasDefault: false;
2317
+ isPrimaryKey: false;
2318
+ isAutoincrement: false;
2319
+ hasRuntimeDefault: false;
2320
+ enumValues: undefined;
2321
+ baseColumn: never;
2322
+ identity: undefined;
2323
+ generated: undefined;
2324
+ }, {}, {
2325
+ $type: string[];
2326
+ }>;
2327
+ spec: drizzle_orm_sqlite_core.SQLiteColumn<{
2328
+ name: "spec";
2329
+ tableName: "durable_schedules";
2330
+ dataType: "json";
2331
+ columnType: "SQLiteTextJson";
2332
+ data: Record<string, unknown>;
2333
+ driverParam: string;
2334
+ notNull: true;
2335
+ hasDefault: false;
2336
+ isPrimaryKey: false;
2337
+ isAutoincrement: false;
2338
+ hasRuntimeDefault: false;
2339
+ enumValues: undefined;
2340
+ baseColumn: never;
2341
+ identity: undefined;
2342
+ generated: undefined;
2343
+ }, {}, {
2344
+ $type: Record<string, unknown>;
2345
+ }>;
2346
+ state: drizzle_orm_sqlite_core.SQLiteColumn<{
2347
+ name: "state";
2348
+ tableName: "durable_schedules";
2349
+ dataType: "json";
2350
+ columnType: "SQLiteTextJson";
2351
+ data: Record<string, unknown>;
2352
+ driverParam: string;
2353
+ notNull: true;
2354
+ hasDefault: false;
2355
+ isPrimaryKey: false;
2356
+ isAutoincrement: false;
2357
+ hasRuntimeDefault: false;
2358
+ enumValues: undefined;
2359
+ baseColumn: never;
2360
+ identity: undefined;
2361
+ generated: undefined;
2362
+ }, {}, {
2363
+ $type: Record<string, unknown>;
2364
+ }>;
2365
+ createdAt: drizzle_orm_sqlite_core.SQLiteColumn<{
2366
+ name: "created_at";
2367
+ tableName: "durable_schedules";
2368
+ dataType: "number";
2369
+ columnType: "SQLiteInteger";
2370
+ data: number;
2371
+ driverParam: number;
2372
+ notNull: true;
2373
+ hasDefault: false;
2374
+ isPrimaryKey: false;
2375
+ isAutoincrement: false;
2376
+ hasRuntimeDefault: false;
2377
+ enumValues: undefined;
2378
+ baseColumn: never;
2379
+ identity: undefined;
2380
+ generated: undefined;
2381
+ }, {}, {}>;
2382
+ updatedAt: drizzle_orm_sqlite_core.SQLiteColumn<{
2383
+ name: "updated_at";
2384
+ tableName: "durable_schedules";
2385
+ dataType: "number";
2386
+ columnType: "SQLiteInteger";
2387
+ data: number;
2388
+ driverParam: number;
2389
+ notNull: true;
2390
+ hasDefault: false;
2391
+ isPrimaryKey: false;
2392
+ isAutoincrement: false;
2393
+ hasRuntimeDefault: false;
2394
+ enumValues: undefined;
2395
+ baseColumn: never;
2396
+ identity: undefined;
2397
+ generated: undefined;
2398
+ }, {}, {}>;
2399
+ };
2400
+ dialect: "sqlite";
2401
+ }>;
2007
2402
  };
2008
2403
  /**
2009
2404
  * Tables this store creates and manages (you run the migrations — see the package README — but
@@ -2021,4 +2416,4 @@ declare const durableSchema: {
2021
2416
  */
2022
2417
  declare function durableManagedTables(): string[];
2023
2418
 
2024
- export { DEFAULT_NAMESPACE, DrizzleStateStore, bufferedEvents, bufferedSignals, durableManagedTables, durableSchema, runAttributes, signalWaiters, stepCheckpoints, workflowRuns };
2419
+ export { DEFAULT_NAMESPACE, DrizzleStateStore, bufferedEvents, bufferedSignals, durableManagedTables, durableSchedules, durableSchema, runAttributes, signalWaiters, stepCheckpoints, workflowRuns };