convex-batch-processor 1.0.3 → 1.0.5

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.
@@ -41,6 +41,9 @@ export type ComponentApi<Name extends string | undefined = string | undefined> =
41
41
  flushBatch: FunctionReference<"mutation", "internal", {
42
42
  batchId: string;
43
43
  }, any, Name>;
44
+ getAllBatchesForBaseId: FunctionReference<"query", "internal", {
45
+ baseBatchId: string;
46
+ }, any, Name>;
44
47
  getBatchStatus: FunctionReference<"query", "internal", {
45
48
  batchId: string;
46
49
  }, any, Name>;
@@ -1 +1 @@
1
- {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/component/_generated/component.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,CAAC,IAAI,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,IAC3E;IACE,GAAG,EAAE;QACH,QAAQ,EAAE,iBAAiB,CACzB,UAAU,EACV,UAAU,EACV;YACE,OAAO,EAAE,MAAM,CAAC;YAChB,MAAM,EAAE;gBACN,eAAe,EAAE,MAAM,CAAC;gBACxB,YAAY,EAAE,MAAM,CAAC;gBACrB,kBAAkB,EAAE,MAAM,CAAC;aAC5B,CAAC;YACF,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;SACnB,EACD,GAAG,EACH,IAAI,CACL,CAAC;QACF,iBAAiB,EAAE,iBAAiB,CAClC,UAAU,EACV,UAAU,EACV;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,EACjB,GAAG,EACH,IAAI,CACL,CAAC;QACF,WAAW,EAAE,iBAAiB,CAC5B,UAAU,EACV,UAAU,EACV;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,EACnB,GAAG,EACH,IAAI,CACL,CAAC;QACF,iBAAiB,EAAE,iBAAiB,CAClC,UAAU,EACV,UAAU,EACV;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,EACjB,GAAG,EACH,IAAI,CACL,CAAC;QACF,UAAU,EAAE,iBAAiB,CAC3B,UAAU,EACV,UAAU,EACV;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,EACnB,GAAG,EACH,IAAI,CACL,CAAC;QACF,cAAc,EAAE,iBAAiB,CAC/B,OAAO,EACP,UAAU,EACV;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,EACnB,GAAG,EACH,IAAI,CACL,CAAC;QACF,eAAe,EAAE,iBAAiB,CAChC,OAAO,EACP,UAAU,EACV;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,EACnC,GAAG,EACH,IAAI,CACL,CAAC;QACF,oBAAoB,EAAE,iBAAiB,CACrC,OAAO,EACP,UAAU,EACV;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,EACjB,GAAG,EACH,IAAI,CACL,CAAC;QACF,gBAAgB,EAAE,iBAAiB,CACjC,OAAO,EACP,UAAU,EACV;YACE,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;SACpE,EACD,GAAG,EACH,IAAI,CACL,CAAC;QACF,gBAAgB,EAAE,iBAAiB,CACjC,UAAU,EACV,UAAU,EACV;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,EACjB,GAAG,EACH,IAAI,CACL,CAAC;QACF,iBAAiB,EAAE,iBAAiB,CAClC,UAAU,EACV,UAAU,EACV;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,EACjB,GAAG,EACH,IAAI,CACL,CAAC;QACF,gBAAgB,EAAE,iBAAiB,CACjC,UAAU,EACV,UAAU,EACV;YACE,MAAM,EAAE;gBACN,SAAS,EAAE,MAAM,CAAC;gBAClB,qBAAqB,CAAC,EAAE,MAAM,CAAC;gBAC/B,kBAAkB,EAAE,MAAM,CAAC;gBAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;gBACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;gBAC1B,kBAAkB,EAAE,MAAM,CAAC;aAC5B,CAAC;YACF,KAAK,EAAE,MAAM,CAAC;SACf,EACD,GAAG,EACH,IAAI,CACL,CAAC;KACH,CAAC;CACH,CAAC"}
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/component/_generated/component.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- declare const _default: import("convex/server").ComponentDefinition<any>;
2
- export default _default;
1
+ declare const component: import("convex/server").ComponentDefinition<any>;
2
+ export default component;
3
3
  //# sourceMappingURL=convex.config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"convex.config.d.ts","sourceRoot":"","sources":["../../src/component/convex.config.ts"],"names":[],"mappings":";AAEA,wBAAiD"}
1
+ {"version":3,"file":"convex.config.d.ts","sourceRoot":"","sources":["../../src/component/convex.config.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,SAAS,kDAAoC,CAAC;AACpD,eAAe,SAAS,CAAC"}
@@ -1,3 +1,4 @@
1
1
  import { defineComponent } from "convex/server";
2
- export default defineComponent("batchProcessor");
2
+ const component = defineComponent("batchProcessor");
3
+ export default component;
3
4
  //# sourceMappingURL=convex.config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"convex.config.js","sourceRoot":"","sources":["../../src/component/convex.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,eAAe,eAAe,CAAC,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"convex.config.js","sourceRoot":"","sources":["../../src/component/convex.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,SAAS,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;AACpD,eAAe,SAAS,CAAC"}
@@ -81,7 +81,7 @@ export declare const getBatch: import("convex/server").RegisteredQuery<"internal
81
81
  _id: import("convex/values").GenericId<"batches">;
82
82
  _creationTime: number;
83
83
  scheduledFlushId?: import("convex/values").GenericId<"_scheduled_functions"> | undefined;
84
- items: any[];
84
+ flushStartedAt?: number | undefined;
85
85
  batchId: string;
86
86
  config: {
87
87
  maxBatchSize: number;
@@ -91,41 +91,116 @@ export declare const getBatch: import("convex/server").RegisteredQuery<"internal
91
91
  baseBatchId: string;
92
92
  status: "accumulating" | "flushing" | "completed";
93
93
  sequence: number;
94
- itemCount: number;
95
94
  createdAt: number;
96
95
  lastUpdatedAt: number;
97
96
  } | null>>;
97
+ export declare const collectBatchItems: import("convex/server").RegisteredQuery<"internal", {
98
+ batchDocId: import("convex/values").GenericId<"batches">;
99
+ }, Promise<{
100
+ items: never[];
101
+ flushStartedAt: undefined;
102
+ } | {
103
+ items: unknown[];
104
+ flushStartedAt: number;
105
+ }>>;
106
+ type FlushTransitionResult = {
107
+ flushed: true;
108
+ itemCount: number;
109
+ } | {
110
+ flushed: false;
111
+ reason: string;
112
+ };
113
+ /**
114
+ * maybeFlush - Attempts to transition a batch from "accumulating" to "flushing" state.
115
+ *
116
+ * This is an internal action scheduled by addItems (when threshold is reached) or
117
+ * flushBatch (for manual flushes). It serves as a lightweight coordinator that
118
+ * delegates the actual state transition to doFlushTransition (a mutation).
119
+ *
120
+ * ## Why this architecture?
121
+ *
122
+ * 1. **OCC is handled automatically by Convex**: When doFlushTransition (a mutation)
123
+ * encounters an OCC conflict, Convex automatically retries it. We don't need
124
+ * external retry logic like ActionRetrier for database operations.
125
+ *
126
+ * 2. **Race conditions are handled gracefully**: Multiple maybeFlush calls can be
127
+ * scheduled concurrently (e.g., rapid addItems calls all hitting threshold).
128
+ * The first one to execute wins the race and transitions the batch to "flushing".
129
+ * Subsequent calls see status !== "accumulating" and return early with
130
+ * reason: "not_accumulating". This is expected behavior, not an error.
131
+ *
132
+ * 3. **Mutations can't call actions directly**: Convex mutations are deterministic
133
+ * and can't have side effects. To execute the user's processBatchHandle (an action),
134
+ * we need this action layer. The flow is:
135
+ * mutation (addItems) → schedules action (maybeFlush)
136
+ * action (maybeFlush) → calls mutation (doFlushTransition)
137
+ * mutation (doFlushTransition) → schedules action (executeFlush)
138
+ *
139
+ * 4. **Non-blocking for callers**: addItems returns immediately after scheduling
140
+ * maybeFlush. Users don't wait for the flush to complete.
141
+ *
142
+ * ## Failure scenarios
143
+ *
144
+ * - If maybeFlush fails completely (rare), the batch stays in "accumulating" state.
145
+ * The next addItems call that hits threshold will schedule another maybeFlush.
146
+ * - If a scheduled interval flush exists, it will also attempt the transition.
147
+ *
148
+ * @param batchDocId - The batch document ID to potentially flush
149
+ * @param force - If true, flush regardless of threshold (used by manual flush and interval timer)
150
+ */
151
+ export declare const maybeFlush: import("convex/server").RegisteredAction<"internal", {
152
+ force?: boolean | undefined;
153
+ batchDocId: import("convex/values").GenericId<"batches">;
154
+ }, Promise<void>>;
155
+ /**
156
+ * doFlushTransition - The actual state machine transition from "accumulating" to "flushing".
157
+ *
158
+ * This mutation is the source of truth for batch state transitions. It's designed to be
159
+ * idempotent and race-condition safe:
160
+ *
161
+ * - Returns early if batch is already flushing/completed (another caller won the race)
162
+ * - Returns early if batch is empty or below threshold (unless force=true)
163
+ * - On success, atomically updates status and schedules executeFlush
164
+ *
165
+ * OCC (Optimistic Concurrency Control) note:
166
+ * If two doFlushTransition calls race, Convex detects the conflict when both try to
167
+ * patch the same batch document. One succeeds, the other is auto-retried by Convex.
168
+ * On retry, it sees status="flushing" and returns { flushed: false, reason: "not_accumulating" }.
169
+ */
170
+ export declare const doFlushTransition: import("convex/server").RegisteredMutation<"internal", {
171
+ force?: boolean | undefined;
172
+ batchDocId: import("convex/values").GenericId<"batches">;
173
+ }, Promise<FlushTransitionResult>>;
98
174
  export declare const executeFlush: import("convex/server").RegisteredAction<"internal", {
99
- items: any[];
100
175
  processBatchHandle: string;
101
176
  batchDocId: import("convex/values").GenericId<"batches">;
102
177
  }, Promise<{
178
+ success: boolean;
179
+ durationMs: number;
180
+ errorMessage?: undefined;
181
+ } | {
103
182
  success: boolean;
104
183
  errorMessage: string | undefined;
105
184
  durationMs: number;
106
185
  }>>;
107
186
  export declare const recordFlushResult: import("convex/server").RegisteredMutation<"internal", {
187
+ flushStartedAt?: number | undefined;
108
188
  errorMessage?: string | undefined;
189
+ batchDocId: import("convex/values").GenericId<"batches">;
109
190
  itemCount: number;
110
191
  durationMs: number;
111
192
  success: boolean;
112
- batchDocId: import("convex/values").GenericId<"batches">;
113
193
  }, Promise<void>>;
114
- export declare const markBatchFlushing: import("convex/server").RegisteredMutation<"internal", {
115
- batchDocId: import("convex/values").GenericId<"batches">;
116
- }, Promise<{
117
- items: any[];
118
- processBatchHandle: string;
119
- } | null>>;
194
+ /**
195
+ * scheduledIntervalFlush - Timer-triggered flush that runs after flushIntervalMs.
196
+ *
197
+ * Scheduled once when a batch is created (if flushIntervalMs > 0). Uses force=true
198
+ * to flush regardless of whether the batch has reached maxBatchSize threshold.
199
+ * This ensures batches don't sit indefinitely waiting for more items.
200
+ */
120
201
  export declare const scheduledIntervalFlush: import("convex/server").RegisteredAction<"internal", {
121
202
  batchDocId: import("convex/values").GenericId<"batches">;
122
- }, Promise<{
123
- flushed: boolean;
124
- reason?: string;
125
- success?: boolean;
126
- errorMessage?: string;
127
- durationMs?: number;
128
- }>>;
203
+ }, Promise<void>>;
129
204
  export declare const startIteratorJob: import("convex/server").RegisteredMutation<"public", {
130
205
  jobId: string;
131
206
  config: {
@@ -272,4 +347,5 @@ export declare const incrementRetryCount: import("convex/server").RegisteredMuta
272
347
  errorMessage: string;
273
348
  jobDocId: import("convex/values").GenericId<"iteratorJobs">;
274
349
  }, Promise<void>>;
350
+ export {};
275
351
  //# sourceMappingURL=lib.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../src/component/lib.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;GAqHnB,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;GAyDrB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;gBAmCC,cAAc,GAAG,UAAU;;;;;;;;;UAWrD,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;KAkBjC,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;KAiB1B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;GA2BtB,CAAC;AAMH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;UAQnB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;GA+BvB,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;iBA2D5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;UAkB5B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;aAGxB,OAAO;aACP,MAAM;cACL,OAAO;mBACF,MAAM;iBACR,MAAM;GAkBnB,CAAC;AAMH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;GA8C3B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;GAsB3B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;GAyB5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;GAuB5B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;UA2B/B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;KAmC3B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;GAmB5B,CAAC;AAMH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;UAQzB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;UAK7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;eAGhB,OAAO;WACX,OAAO;qBACG,MAAM;aACd,MAAM;YACP,MAAM;iBACD,MAAM;GA+FnB,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;iBAc5B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;iBAY3B,CAAC;AAEH,eAAO,MAAM,aAAa;;;;iBAcxB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;iBAa9B,CAAC"}
1
+ {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../src/component/lib.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;GA2FnB,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;GAwDrB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;gBA6CE,cAAc,GAAG,UAAU;;;;;;;;;UAiBtD,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;KAiCjC,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;KAiB1B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;GAuCtB,CAAC;AAMH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;UAQnB,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;GA0B5B,CAAC;AAGH,KAAK,qBAAqB,GACvB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,UAAU;;;iBAcrB,CAAC;AAEH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB;;;kCAqD5B,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;GA+CvB,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;iBAgH5B,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB;;iBASjC,CAAC;AAMH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;GA8C3B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;GAsB3B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;GAyB5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;GAuB5B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;UA2B/B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;KAmC3B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;GAmB5B,CAAC;AAMH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;UAQzB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;UAK7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;eAGhB,OAAO;WACX,OAAO;qBACG,MAAM;aACd,MAAM;YACP,MAAM;iBACD,MAAM;GA+FnB,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;iBAc5B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;iBAY3B,CAAC;AAEH,eAAO,MAAM,aAAa;;;;iBAcxB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;iBAa9B,CAAC"}