@convex-dev/workpool 0.2.14 → 0.2.15
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/README.md +22 -13
- package/dist/commonjs/client/index.d.ts +191 -56
- package/dist/commonjs/client/index.d.ts.map +1 -1
- package/dist/commonjs/client/index.js +55 -6
- package/dist/commonjs/client/index.js.map +1 -1
- package/dist/commonjs/component/complete.js +2 -2
- package/dist/commonjs/component/complete.js.map +1 -1
- package/dist/commonjs/component/schema.js +2 -2
- package/dist/commonjs/component/schema.js.map +1 -1
- package/dist/commonjs/component/shared.d.ts +2 -2
- package/dist/commonjs/component/shared.d.ts.map +1 -1
- package/dist/commonjs/component/shared.js +1 -1
- package/dist/commonjs/component/shared.js.map +1 -1
- package/dist/esm/client/index.d.ts +191 -56
- package/dist/esm/client/index.d.ts.map +1 -1
- package/dist/esm/client/index.js +55 -6
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/component/complete.js +2 -2
- package/dist/esm/component/complete.js.map +1 -1
- package/dist/esm/component/schema.js +2 -2
- package/dist/esm/component/schema.js.map +1 -1
- package/dist/esm/component/shared.d.ts +2 -2
- package/dist/esm/component/shared.d.ts.map +1 -1
- package/dist/esm/component/shared.js +1 -1
- package/dist/esm/component/shared.js.map +1 -1
- package/package.json +1 -1
- package/src/client/index.ts +145 -59
- package/src/component/complete.ts +2 -2
- package/src/component/schema.ts +2 -2
- package/src/component/shared.ts +2 -2
package/README.md
CHANGED
|
@@ -102,21 +102,19 @@ const sendEmailReliablyWithRetries = mutation({
|
|
|
102
102
|
});
|
|
103
103
|
|
|
104
104
|
export const emailSent = internalMutation({
|
|
105
|
-
args:
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
handler: async (ctx, args) => {
|
|
111
|
-
if (args.result.kind === "canceled") return;
|
|
105
|
+
args: vOnCompleteValidator(
|
|
106
|
+
v.object({ emailType: v.string(), userId: v.id("users") })
|
|
107
|
+
),
|
|
108
|
+
handler: async (ctx, { workId, context, result }) => {
|
|
109
|
+
if (result.kind === "canceled") return;
|
|
112
110
|
const emailLogId = await ctx.db.insert("userEmailLog", {
|
|
113
|
-
userId:
|
|
114
|
-
emailType:
|
|
115
|
-
result:
|
|
116
|
-
error:
|
|
111
|
+
userId: context.userId,
|
|
112
|
+
emailType: context.emailType,
|
|
113
|
+
result: result.kind === "success" ? result.returnValue : null,
|
|
114
|
+
error: result.kind === "failed" ? result.error : null,
|
|
117
115
|
});
|
|
118
|
-
if (
|
|
119
|
-
await pool.enqueueAction(ctx, internal.email.checkResendStatus,
|
|
116
|
+
if (result.kind === "failed") {
|
|
117
|
+
await pool.enqueueAction(ctx, internal.email.checkResendStatus, context, {
|
|
120
118
|
retry: { maxAttempts: 10, initialBackoffMs: 250, base: 2 }, // custom
|
|
121
119
|
onComplete: internal.email.handleEmailStatus,
|
|
122
120
|
context: { emailLogId },
|
|
@@ -131,6 +129,17 @@ enqueued. If you want to run it in the same transaction, you can do that work
|
|
|
131
129
|
at the end of the enqueued function, before returning. This is generally faster
|
|
132
130
|
and more typesafe when handling the "success" case.
|
|
133
131
|
|
|
132
|
+
You can also use this equivalent helper to define an `onComplete` mutation.
|
|
133
|
+
Note the `DataModel` type parameter, if you want ctx.db to be type safe.
|
|
134
|
+
```ts
|
|
135
|
+
export const emailSent = pool.defineOnComplete<DataModel>({
|
|
136
|
+
context: v.object({ emailType: v.string(), userId: v.id("users") }),
|
|
137
|
+
handler: async (ctx, { workId, context, result }) => {
|
|
138
|
+
// ...
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
```
|
|
142
|
+
|
|
134
143
|
#### Idempotency?
|
|
135
144
|
|
|
136
145
|
Idempotent actions are actions that can be run multiple times safely. This typically
|
|
@@ -1,62 +1,22 @@
|
|
|
1
|
-
import { DefaultFunctionArgs, FunctionReference, FunctionVisibility } from "convex/server";
|
|
2
|
-
import { VString } from "convex/values";
|
|
1
|
+
import { DefaultFunctionArgs, FunctionReference, FunctionVisibility, GenericDataModel, GenericMutationCtx, RegisteredMutation } from "convex/server";
|
|
2
|
+
import { Infer, Validator, VAny, VString } from "convex/values";
|
|
3
3
|
import { Mounts } from "../component/_generated/api.js";
|
|
4
4
|
import { type LogLevel } from "../component/logging.js";
|
|
5
|
-
import { OnComplete,
|
|
5
|
+
import { OnComplete, vResultValidator, type RetryBehavior, RunResult, Status } from "../component/shared.js";
|
|
6
6
|
import { RunMutationCtx, RunQueryCtx, UseApi } from "./utils.js";
|
|
7
|
-
export {
|
|
7
|
+
export { vResultValidator, type RunResult, type RetryBehavior, type OnComplete, };
|
|
8
8
|
export { retryBehavior as vRetryBehavior, onComplete as vOnComplete, } from "../component/shared.js";
|
|
9
9
|
export { logLevel as vLogLevel, type LogLevel } from "../component/logging.js";
|
|
10
|
-
export { resultValidator as vResultValidator };
|
|
11
|
-
export declare const DEFAULT_RETRY_BEHAVIOR: RetryBehavior;
|
|
12
10
|
export type WorkId = string & {
|
|
13
11
|
__isWorkId: true;
|
|
14
12
|
};
|
|
15
|
-
export declare const
|
|
16
|
-
export {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
*/
|
|
23
|
-
name?: string;
|
|
24
|
-
};
|
|
25
|
-
export type RetryOption = {
|
|
26
|
-
/** Whether to retry the action if it fails.
|
|
27
|
-
* If true, it will use the default retry behavior.
|
|
28
|
-
* If custom behavior is provided, it will retry using that behavior.
|
|
29
|
-
* If unset, it will use the Workpool's configured default.
|
|
30
|
-
*/
|
|
31
|
-
retry?: boolean | RetryBehavior;
|
|
32
|
-
};
|
|
33
|
-
export type WorkpoolOptions = {
|
|
34
|
-
/** How many actions/mutations can be running at once within this pool.
|
|
35
|
-
* Min 1, Max 300.
|
|
36
|
-
*/
|
|
37
|
-
maxParallelism?: number;
|
|
38
|
-
/** How much to log. This is updated on each call to `enqueue*`,
|
|
39
|
-
* `status`, or `cancel*`.
|
|
40
|
-
* Default is REPORT, which logs warnings, errors, and a periodic report.
|
|
41
|
-
* With INFO, you can also see events for started and completed work.
|
|
42
|
-
* Stats generated can be parsed by tools like
|
|
43
|
-
* [Axiom](https://axiom.co) for monitoring.
|
|
44
|
-
* With DEBUG, you can see timers and internal events for work being
|
|
45
|
-
* scheduled.
|
|
46
|
-
*/
|
|
47
|
-
logLevel?: LogLevel;
|
|
48
|
-
} & WorkpoolRetryOptions;
|
|
49
|
-
export type WorkpoolRetryOptions = {
|
|
50
|
-
/** Default retry behavior for enqueued actions.
|
|
51
|
-
* See {@link RetryBehavior}.
|
|
52
|
-
*/
|
|
53
|
-
defaultRetryBehavior?: RetryBehavior;
|
|
54
|
-
/** Whether to retry actions that fail by default. Default: false.
|
|
55
|
-
* NOTE: Only enable this if your actions are idempotent.
|
|
56
|
-
* See the docs (README.md) for more details.
|
|
57
|
-
*/
|
|
58
|
-
retryActionsByDefault?: boolean;
|
|
59
|
-
};
|
|
13
|
+
export declare const vWorkIdValidator: VString<WorkId>;
|
|
14
|
+
export {
|
|
15
|
+
/** @deprecated Use `vWorkIdValidator` instead. */
|
|
16
|
+
vWorkIdValidator as workIdValidator,
|
|
17
|
+
/** @deprecated Use `vResultValidator` instead. */
|
|
18
|
+
vResultValidator as resultValidator, };
|
|
19
|
+
export declare const DEFAULT_RETRY_BEHAVIOR: RetryBehavior;
|
|
60
20
|
export declare class Workpool {
|
|
61
21
|
private component;
|
|
62
22
|
options: WorkpoolOptions;
|
|
@@ -124,7 +84,176 @@ export declare class Workpool {
|
|
|
124
84
|
* - `{ state: "finished" }`
|
|
125
85
|
*/
|
|
126
86
|
status(ctx: RunQueryCtx, id: WorkId): Promise<Status>;
|
|
87
|
+
/**
|
|
88
|
+
* Defines a mutation that will be run after a work item completes.
|
|
89
|
+
* You can pass this to a call to enqueue* like so:
|
|
90
|
+
* ```ts
|
|
91
|
+
* export const myOnComplete = workpool.defineOnComplete({
|
|
92
|
+
* context: v.literal("myContextValue"), // optional
|
|
93
|
+
* handler: async (ctx, {workId, context, result}) => {
|
|
94
|
+
* // ... do something with the result
|
|
95
|
+
* },
|
|
96
|
+
* });
|
|
97
|
+
*
|
|
98
|
+
* // in some other function:
|
|
99
|
+
* const workId = await workpool.enqueueAction(ctx, internal.foo.bar, {
|
|
100
|
+
* // ... args to action
|
|
101
|
+
* }, {
|
|
102
|
+
* onComplete: internal.foo.myOnComplete,
|
|
103
|
+
* });
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
defineOnComplete<DataModel extends GenericDataModel, V extends Validator<any, "required", any> = VAny>({ context, handler, }: {
|
|
107
|
+
context?: V;
|
|
108
|
+
handler: (ctx: GenericMutationCtx<DataModel>, args: {
|
|
109
|
+
workId: WorkId;
|
|
110
|
+
context: Infer<V>;
|
|
111
|
+
result: RunResult;
|
|
112
|
+
}) => Promise<void>;
|
|
113
|
+
}): RegisteredMutation<"internal", OnCompleteArgs, null>;
|
|
127
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Returns a validator to use for the onComplete mutation.
|
|
117
|
+
* To be used like:
|
|
118
|
+
* ```ts
|
|
119
|
+
* export const myOnComplete = internalMutation({
|
|
120
|
+
* args: vOnCompleteValidator(v.string()),
|
|
121
|
+
* handler: async (ctx, {workId, context, result}) => {
|
|
122
|
+
* // context has been validated as a string
|
|
123
|
+
* // ... do something with the result
|
|
124
|
+
* },
|
|
125
|
+
* });
|
|
126
|
+
* @param context - The context validator. If not provided, it will be `v.any()`.
|
|
127
|
+
* @returns The validator for the onComplete mutation.
|
|
128
|
+
*/
|
|
129
|
+
export declare function vOnCompleteValidator<V extends Validator<any, "required", any> = VAny>(context?: V): import("convex/values").VObject<import("convex/server").Expand<{ [Property in (VAny<any, "required", string> | V)["isOptional"] extends "optional" ? "context" : never]?: Exclude<Infer<{
|
|
130
|
+
workId: VString<WorkId, "required">;
|
|
131
|
+
context: VAny<any, "required", string> | V;
|
|
132
|
+
result: import("convex/values").VUnion<{
|
|
133
|
+
kind: "success";
|
|
134
|
+
returnValue: any;
|
|
135
|
+
} | {
|
|
136
|
+
kind: "failed";
|
|
137
|
+
error: string;
|
|
138
|
+
} | {
|
|
139
|
+
kind: "canceled";
|
|
140
|
+
}, [import("convex/values").VObject<{
|
|
141
|
+
kind: "success";
|
|
142
|
+
returnValue: any;
|
|
143
|
+
}, {
|
|
144
|
+
kind: import("convex/values").VLiteral<"success", "required">;
|
|
145
|
+
returnValue: VAny<any, "required", string>;
|
|
146
|
+
}, "required", "kind" | "returnValue" | `returnValue.${string}`>, import("convex/values").VObject<{
|
|
147
|
+
kind: "failed";
|
|
148
|
+
error: string;
|
|
149
|
+
}, {
|
|
150
|
+
kind: import("convex/values").VLiteral<"failed", "required">;
|
|
151
|
+
error: VString<string, "required">;
|
|
152
|
+
}, "required", "kind" | "error">, import("convex/values").VObject<{
|
|
153
|
+
kind: "canceled";
|
|
154
|
+
}, {
|
|
155
|
+
kind: import("convex/values").VLiteral<"canceled", "required">;
|
|
156
|
+
}, "required", "kind">], "required", "kind" | "returnValue" | `returnValue.${string}` | "error">;
|
|
157
|
+
}[Property]>, undefined> | undefined; } & { [Property_1 in Exclude<"context", (VAny<any, "required", string> | V)["isOptional"] extends "optional" ? "context" : never> | Exclude<"workId", (VAny<any, "required", string> | V)["isOptional"] extends "optional" ? "context" : never> | Exclude<"result", (VAny<any, "required", string> | V)["isOptional"] extends "optional" ? "context" : never>]: Infer<{
|
|
158
|
+
workId: VString<WorkId, "required">;
|
|
159
|
+
context: VAny<any, "required", string> | V;
|
|
160
|
+
result: import("convex/values").VUnion<{
|
|
161
|
+
kind: "success";
|
|
162
|
+
returnValue: any;
|
|
163
|
+
} | {
|
|
164
|
+
kind: "failed";
|
|
165
|
+
error: string;
|
|
166
|
+
} | {
|
|
167
|
+
kind: "canceled";
|
|
168
|
+
}, [import("convex/values").VObject<{
|
|
169
|
+
kind: "success";
|
|
170
|
+
returnValue: any;
|
|
171
|
+
}, {
|
|
172
|
+
kind: import("convex/values").VLiteral<"success", "required">;
|
|
173
|
+
returnValue: VAny<any, "required", string>;
|
|
174
|
+
}, "required", "kind" | "returnValue" | `returnValue.${string}`>, import("convex/values").VObject<{
|
|
175
|
+
kind: "failed";
|
|
176
|
+
error: string;
|
|
177
|
+
}, {
|
|
178
|
+
kind: import("convex/values").VLiteral<"failed", "required">;
|
|
179
|
+
error: VString<string, "required">;
|
|
180
|
+
}, "required", "kind" | "error">, import("convex/values").VObject<{
|
|
181
|
+
kind: "canceled";
|
|
182
|
+
}, {
|
|
183
|
+
kind: import("convex/values").VLiteral<"canceled", "required">;
|
|
184
|
+
}, "required", "kind">], "required", "kind" | "returnValue" | `returnValue.${string}` | "error">;
|
|
185
|
+
}[Property_1]>; }>, {
|
|
186
|
+
workId: VString<WorkId, "required">;
|
|
187
|
+
context: VAny<any, "required", string> | V;
|
|
188
|
+
result: import("convex/values").VUnion<{
|
|
189
|
+
kind: "success";
|
|
190
|
+
returnValue: any;
|
|
191
|
+
} | {
|
|
192
|
+
kind: "failed";
|
|
193
|
+
error: string;
|
|
194
|
+
} | {
|
|
195
|
+
kind: "canceled";
|
|
196
|
+
}, [import("convex/values").VObject<{
|
|
197
|
+
kind: "success";
|
|
198
|
+
returnValue: any;
|
|
199
|
+
}, {
|
|
200
|
+
kind: import("convex/values").VLiteral<"success", "required">;
|
|
201
|
+
returnValue: VAny<any, "required", string>;
|
|
202
|
+
}, "required", "kind" | "returnValue" | `returnValue.${string}`>, import("convex/values").VObject<{
|
|
203
|
+
kind: "failed";
|
|
204
|
+
error: string;
|
|
205
|
+
}, {
|
|
206
|
+
kind: import("convex/values").VLiteral<"failed", "required">;
|
|
207
|
+
error: VString<string, "required">;
|
|
208
|
+
}, "required", "kind" | "error">, import("convex/values").VObject<{
|
|
209
|
+
kind: "canceled";
|
|
210
|
+
}, {
|
|
211
|
+
kind: import("convex/values").VLiteral<"canceled", "required">;
|
|
212
|
+
}, "required", "kind">], "required", "kind" | "returnValue" | `returnValue.${string}` | "error">;
|
|
213
|
+
}, "required", "context" | "workId" | "result" | `context.${(VAny<any, "required", string> | V)["fieldPaths"]}` | "result.kind" | "result.returnValue" | `result.returnValue.${string}` | "result.error">;
|
|
214
|
+
export type NameOption = {
|
|
215
|
+
/**
|
|
216
|
+
* The name of the function. By default, if you pass in api.foo.bar.baz,
|
|
217
|
+
* it will use "foo/bar:baz" as the name. If you pass in a function handle,
|
|
218
|
+
* it will use the function handle directly.
|
|
219
|
+
*/
|
|
220
|
+
name?: string;
|
|
221
|
+
};
|
|
222
|
+
export type RetryOption = {
|
|
223
|
+
/** Whether to retry the action if it fails.
|
|
224
|
+
* If true, it will use the default retry behavior.
|
|
225
|
+
* If custom behavior is provided, it will retry using that behavior.
|
|
226
|
+
* If unset, it will use the Workpool's configured default.
|
|
227
|
+
*/
|
|
228
|
+
retry?: boolean | RetryBehavior;
|
|
229
|
+
};
|
|
230
|
+
export type WorkpoolOptions = {
|
|
231
|
+
/** How many actions/mutations can be running at once within this pool.
|
|
232
|
+
* Min 1, Max 300.
|
|
233
|
+
*/
|
|
234
|
+
maxParallelism?: number;
|
|
235
|
+
/** How much to log. This is updated on each call to `enqueue*`,
|
|
236
|
+
* `status`, or `cancel*`.
|
|
237
|
+
* Default is REPORT, which logs warnings, errors, and a periodic report.
|
|
238
|
+
* With INFO, you can also see events for started and completed work.
|
|
239
|
+
* Stats generated can be parsed by tools like
|
|
240
|
+
* [Axiom](https://axiom.co) for monitoring.
|
|
241
|
+
* With DEBUG, you can see timers and internal events for work being
|
|
242
|
+
* scheduled.
|
|
243
|
+
*/
|
|
244
|
+
logLevel?: LogLevel;
|
|
245
|
+
} & WorkpoolRetryOptions;
|
|
246
|
+
export type WorkpoolRetryOptions = {
|
|
247
|
+
/** Default retry behavior for enqueued actions.
|
|
248
|
+
* See {@link RetryBehavior}.
|
|
249
|
+
*/
|
|
250
|
+
defaultRetryBehavior?: RetryBehavior;
|
|
251
|
+
/** Whether to retry actions that fail by default. Default: false.
|
|
252
|
+
* NOTE: Only enable this if your actions are idempotent.
|
|
253
|
+
* See the docs (README.md) for more details.
|
|
254
|
+
*/
|
|
255
|
+
retryActionsByDefault?: boolean;
|
|
256
|
+
};
|
|
128
257
|
export type SchedulerOptions = {
|
|
129
258
|
/**
|
|
130
259
|
* The time (ms since epoch) to run the action at.
|
|
@@ -146,12 +275,18 @@ export type CallbackOptions = {
|
|
|
146
275
|
* The context type is for your use, feel free to provide a validator for it.
|
|
147
276
|
* e.g.
|
|
148
277
|
* ```ts
|
|
278
|
+
* export const completion = workpool.defineOnComplete({
|
|
279
|
+
* context: v.string(),
|
|
280
|
+
* handler: async (ctx, {workId, context, result}) => {
|
|
281
|
+
* // context has been validated as a string
|
|
282
|
+
* // ... do something with the result
|
|
283
|
+
* },
|
|
284
|
+
* });
|
|
285
|
+
* ```
|
|
286
|
+
* or more manually:
|
|
287
|
+
* ```ts
|
|
149
288
|
* export const completion = internalMutation({
|
|
150
|
-
* args:
|
|
151
|
-
* workId: workIdValidator,
|
|
152
|
-
* context: v.any(),
|
|
153
|
-
* result: resultValidator,
|
|
154
|
-
* },
|
|
289
|
+
* args: vOnCompleteValidator(v.string()),
|
|
155
290
|
* handler: async (ctx, args) => {
|
|
156
291
|
* console.log(args.result, "Got Context back -> ", args.context, Date.now() - args.context);
|
|
157
292
|
* },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,EAEnB,iBAAiB,EAEjB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,22 @@
|
|
|
1
|
-
import { createFunctionHandle, getFunctionName, } from "convex/server";
|
|
1
|
+
import { createFunctionHandle, getFunctionName, internalMutationGeneric, } from "convex/server";
|
|
2
2
|
import { v } from "convex/values";
|
|
3
3
|
import { DEFAULT_LOG_LEVEL } from "../component/logging.js";
|
|
4
|
-
import { DEFAULT_MAX_PARALLELISM,
|
|
5
|
-
export {
|
|
4
|
+
import { DEFAULT_MAX_PARALLELISM, vResultValidator, } from "../component/shared.js";
|
|
5
|
+
export { vResultValidator, };
|
|
6
6
|
export { retryBehavior as vRetryBehavior, onComplete as vOnComplete, } from "../component/shared.js";
|
|
7
7
|
export { logLevel as vLogLevel } from "../component/logging.js";
|
|
8
|
-
export
|
|
8
|
+
export const vWorkIdValidator = v.string();
|
|
9
|
+
export {
|
|
10
|
+
/** @deprecated Use `vWorkIdValidator` instead. */
|
|
11
|
+
vWorkIdValidator as workIdValidator,
|
|
12
|
+
/** @deprecated Use `vResultValidator` instead. */
|
|
13
|
+
vResultValidator as resultValidator, };
|
|
9
14
|
// Attempts will run with delay [0, 250, 500, 1000, 2000] (ms)
|
|
10
15
|
export const DEFAULT_RETRY_BEHAVIOR = {
|
|
11
16
|
maxAttempts: 5,
|
|
12
17
|
initialBackoffMs: 250,
|
|
13
18
|
base: 2,
|
|
14
19
|
};
|
|
15
|
-
export const workIdValidator = v.string();
|
|
16
|
-
export { workIdValidator as vWorkIdValidator };
|
|
17
20
|
export class Workpool {
|
|
18
21
|
component;
|
|
19
22
|
options;
|
|
@@ -142,6 +145,52 @@ export class Workpool {
|
|
|
142
145
|
async status(ctx, id) {
|
|
143
146
|
return ctx.runQuery(this.component.lib.status, { id });
|
|
144
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Defines a mutation that will be run after a work item completes.
|
|
150
|
+
* You can pass this to a call to enqueue* like so:
|
|
151
|
+
* ```ts
|
|
152
|
+
* export const myOnComplete = workpool.defineOnComplete({
|
|
153
|
+
* context: v.literal("myContextValue"), // optional
|
|
154
|
+
* handler: async (ctx, {workId, context, result}) => {
|
|
155
|
+
* // ... do something with the result
|
|
156
|
+
* },
|
|
157
|
+
* });
|
|
158
|
+
*
|
|
159
|
+
* // in some other function:
|
|
160
|
+
* const workId = await workpool.enqueueAction(ctx, internal.foo.bar, {
|
|
161
|
+
* // ... args to action
|
|
162
|
+
* }, {
|
|
163
|
+
* onComplete: internal.foo.myOnComplete,
|
|
164
|
+
* });
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
167
|
+
defineOnComplete({ context, handler, }) {
|
|
168
|
+
return internalMutationGeneric({
|
|
169
|
+
args: vOnCompleteValidator(context),
|
|
170
|
+
handler,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Returns a validator to use for the onComplete mutation.
|
|
176
|
+
* To be used like:
|
|
177
|
+
* ```ts
|
|
178
|
+
* export const myOnComplete = internalMutation({
|
|
179
|
+
* args: vOnCompleteValidator(v.string()),
|
|
180
|
+
* handler: async (ctx, {workId, context, result}) => {
|
|
181
|
+
* // context has been validated as a string
|
|
182
|
+
* // ... do something with the result
|
|
183
|
+
* },
|
|
184
|
+
* });
|
|
185
|
+
* @param context - The context validator. If not provided, it will be `v.any()`.
|
|
186
|
+
* @returns The validator for the onComplete mutation.
|
|
187
|
+
*/
|
|
188
|
+
export function vOnCompleteValidator(context) {
|
|
189
|
+
return v.object({
|
|
190
|
+
workId: vWorkIdValidator,
|
|
191
|
+
context: context ?? v.any(),
|
|
192
|
+
result: vResultValidator,
|
|
193
|
+
});
|
|
145
194
|
}
|
|
146
195
|
// ensure OnCompleteArgs satisfies SharedOnCompleteArgs
|
|
147
196
|
const _ = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,11 @@ import { v } from "convex/values";
|
|
|
2
2
|
import { internalMutation } from "./_generated/server.js";
|
|
3
3
|
import { kickMainLoop } from "./kick.js";
|
|
4
4
|
import { createLogger } from "./logging.js";
|
|
5
|
-
import {
|
|
5
|
+
import { vResultValidator } from "./shared.js";
|
|
6
6
|
import { recordCompleted } from "./stats.js";
|
|
7
7
|
export const completeArgs = v.object({
|
|
8
8
|
jobs: v.array(v.object({
|
|
9
|
-
runResult:
|
|
9
|
+
runResult: vResultValidator,
|
|
10
10
|
workId: v.id("work"),
|
|
11
11
|
attempt: v.number(),
|
|
12
12
|
})),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../src/component/complete.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,CAAC,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAe,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAA6B,
|
|
1
|
+
{"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../src/component/complete.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineSchema, defineTable } from "convex/server";
|
|
2
2
|
import { v } from "convex/values";
|
|
3
|
-
import { fnType, config, onComplete, retryBehavior,
|
|
3
|
+
import { fnType, config, onComplete, retryBehavior, vResultValidator, } from "./shared.js";
|
|
4
4
|
// Represents a slice of time to process work.
|
|
5
5
|
const segment = v.int64();
|
|
6
6
|
export default defineSchema({
|
|
@@ -62,7 +62,7 @@ export default defineSchema({
|
|
|
62
62
|
// Written by complete, read & deleted by `main`.
|
|
63
63
|
pendingCompletion: defineTable({
|
|
64
64
|
segment,
|
|
65
|
-
runResult,
|
|
65
|
+
runResult: vResultValidator,
|
|
66
66
|
workId: v.id("work"),
|
|
67
67
|
retry: v.boolean(),
|
|
68
68
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/component/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/component/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,7 +45,7 @@ export type RetryBehavior = {
|
|
|
45
45
|
*/
|
|
46
46
|
base: number;
|
|
47
47
|
};
|
|
48
|
-
export declare const
|
|
48
|
+
export declare const vResultValidator: import("convex/values").VUnion<{
|
|
49
49
|
kind: "success";
|
|
50
50
|
returnValue: any;
|
|
51
51
|
} | {
|
|
@@ -70,7 +70,7 @@ export declare const runResult: import("convex/values").VUnion<{
|
|
|
70
70
|
}, {
|
|
71
71
|
kind: import("convex/values").VLiteral<"canceled", "required">;
|
|
72
72
|
}, "required", "kind">], "required", "kind" | "returnValue" | `returnValue.${string}` | "error">;
|
|
73
|
-
export type RunResult = Infer<typeof
|
|
73
|
+
export type RunResult = Infer<typeof vResultValidator>;
|
|
74
74
|
export declare const onComplete: import("convex/values").VObject<{
|
|
75
75
|
context?: any;
|
|
76
76
|
fnHandle: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/component/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EAAE,MAAM,EAAY,MAAM,cAAc,CAAC;AAEhD,eAAO,MAAM,MAAM,+PAIlB,CAAC;AAEF,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,eAAO,MAAM,MAAM,OAAO,CAAC;AAC3B,eAAO,MAAM,MAAM,QAAc,CAAC;AAClC,eAAO,MAAM,IAAI,QAAc,CAAC;AAChC,eAAO,MAAM,GAAG,QAAY,CAAC;AAC7B,eAAO,MAAM,IAAI,QAAY,CAAC;AAE9B,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,eAAO,MAAM,MAAM;;;;;;6CAGjB,CAAC;AACH,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AAE1C,eAAO,MAAM,aAAa;;;;;;;;2DAIxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAIF,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/component/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EAAE,MAAM,EAAY,MAAM,cAAc,CAAC;AAEhD,eAAO,MAAM,MAAM,+PAIlB,CAAC;AAEF,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,eAAO,MAAM,MAAM,OAAO,CAAC;AAC3B,eAAO,MAAM,MAAM,QAAc,CAAC;AAClC,eAAO,MAAM,IAAI,QAAc,CAAC;AAChC,eAAO,MAAM,GAAG,QAAY,CAAC;AAC7B,eAAO,MAAM,IAAI,QAAY,CAAC;AAE9B,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,eAAO,MAAM,MAAM;;;;;;6CAGjB,CAAC;AACH,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AAE1C,eAAO,MAAM,aAAa;;;;;;;;2DAIxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAIF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;gGAY5B,CAAC;AACF,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEvD,eAAO,MAAM,UAAU;;;;;;4DAGrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG;IAC3B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+GAclB,CAAC;AACF,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AAE1C,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAatE;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAEnD;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAEnD"}
|
|
@@ -31,7 +31,7 @@ export const retryBehavior = v.object({
|
|
|
31
31
|
});
|
|
32
32
|
// This ensures that the type satisfies the schema.
|
|
33
33
|
const _ = {};
|
|
34
|
-
export const
|
|
34
|
+
export const vResultValidator = v.union(v.object({
|
|
35
35
|
kind: v.literal("success"),
|
|
36
36
|
returnValue: v.any(),
|
|
37
37
|
}), v.object({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/component/shared.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAU,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAC3B,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EACnB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EACrB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC;AAC3B,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC;AAClC,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC;AAChC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;AAC7B,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAE9B,MAAM,UAAU,SAAS,CAAC,EAAU;IAClC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,QAAQ;CACT,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAkBH,mDAAmD;AACnD,MAAM,CAAC,GAAG,EAAyD,CAAC;AAEpE,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/component/shared.ts"],"names":[],"mappings":"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"}
|