@transloadit/convex 0.0.6 → 0.1.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.
- package/README.md +26 -17
- package/dist/client/index.d.ts +39 -92
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +34 -104
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/component.d.ts +18 -0
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/apiUtils.d.ts +1 -32
- package/dist/component/apiUtils.d.ts.map +1 -1
- package/dist/component/apiUtils.js.map +1 -1
- package/dist/component/lib.d.ts +33 -90
- package/dist/component/lib.d.ts.map +1 -1
- package/dist/component/lib.js +48 -157
- package/dist/component/lib.js.map +1 -1
- package/dist/component/schema.d.ts +4 -4
- package/dist/component/schema.d.ts.map +1 -1
- package/dist/component/schema.js +3 -31
- package/dist/component/schema.js.map +1 -1
- package/dist/shared/schemas.d.ts +419 -0
- package/dist/shared/schemas.d.ts.map +1 -0
- package/dist/shared/schemas.js +194 -0
- package/dist/shared/schemas.js.map +1 -0
- package/dist/test/index.d.ts +4 -4
- package/package.json +4 -16
- package/src/client/index.ts +68 -123
- package/src/component/_generated/component.ts +17 -0
- package/src/component/apiUtils.ts +7 -38
- package/src/component/lib.test.ts +19 -0
- package/src/component/lib.ts +80 -180
- package/src/component/schema.ts +3 -31
- package/src/shared/schemas.ts +279 -0
- package/dist/react/index.d.ts +0 -281
- package/dist/react/index.d.ts.map +0 -1
- package/dist/react/index.js +0 -784
- package/dist/react/index.js.map +0 -1
- package/dist/shared/tusUpload.d.ts +0 -13
- package/dist/shared/tusUpload.d.ts.map +0 -1
- package/dist/shared/tusUpload.js +0 -32
- package/dist/shared/tusUpload.js.map +0 -1
- package/src/react/index.test.tsx +0 -340
- package/src/react/index.tsx +0 -1245
- package/src/react/uploadWithTus.test.tsx +0 -192
- package/src/shared/tusUpload.ts +0 -59
|
@@ -256,6 +256,25 @@ describe("Transloadit component lib", () => {
|
|
|
256
256
|
expect(result.resultCount).toBe(1);
|
|
257
257
|
});
|
|
258
258
|
|
|
259
|
+
test("createAssemblyOptions includes expected upload count when provided", async () => {
|
|
260
|
+
const t = convexTest(schema, modules);
|
|
261
|
+
|
|
262
|
+
const result = await t.action(api.lib.createAssemblyOptions, {
|
|
263
|
+
steps: {
|
|
264
|
+
resize: {
|
|
265
|
+
robot: "/image/resize",
|
|
266
|
+
width: 120,
|
|
267
|
+
height: 120,
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
numExpectedUploadFiles: 3,
|
|
271
|
+
config: { authKey: "test-key", authSecret: "test-secret" },
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
const params = JSON.parse(result.params) as Record<string, unknown>;
|
|
275
|
+
expect(params.num_expected_upload_files).toBe(3);
|
|
276
|
+
});
|
|
277
|
+
|
|
259
278
|
test("queueWebhook rejects invalid signature", async () => {
|
|
260
279
|
const t = convexTest(schema, modules);
|
|
261
280
|
const payload = { assembly_id: "asm_bad" };
|
package/src/component/lib.ts
CHANGED
|
@@ -1,10 +1,33 @@
|
|
|
1
1
|
import type { AssemblyStatus } from "@transloadit/zod/v3/assemblyStatus";
|
|
2
2
|
import type { AssemblyInstructionsInput } from "@transloadit/zod/v3/template";
|
|
3
3
|
import { anyApi, type FunctionReference } from "convex/server";
|
|
4
|
-
import {
|
|
4
|
+
import { v } from "convex/values";
|
|
5
5
|
import { parseAssemblyStatus } from "../shared/assemblyUrls.ts";
|
|
6
6
|
import { transloaditError } from "../shared/errors.ts";
|
|
7
7
|
import { getResultUrl } from "../shared/resultUtils.ts";
|
|
8
|
+
import {
|
|
9
|
+
type ProcessWebhookResult,
|
|
10
|
+
vAssembly,
|
|
11
|
+
vAssemblyBaseArgs,
|
|
12
|
+
vAssemblyIdArgs,
|
|
13
|
+
vAssemblyOptions,
|
|
14
|
+
vAssemblyResult,
|
|
15
|
+
vCreateAssemblyReturn,
|
|
16
|
+
vHandleWebhookArgs,
|
|
17
|
+
vListAlbumResultsArgs,
|
|
18
|
+
vListAssembliesArgs,
|
|
19
|
+
vListResultsArgs,
|
|
20
|
+
vPurgeAlbumArgs,
|
|
21
|
+
vPurgeAlbumResponse,
|
|
22
|
+
vQueueWebhookResponse,
|
|
23
|
+
vRefreshAssemblyArgs,
|
|
24
|
+
vReplaceResultsArgs,
|
|
25
|
+
vStoreAssemblyMetadataArgs,
|
|
26
|
+
vTransloaditConfig,
|
|
27
|
+
vUpsertAssemblyArgs,
|
|
28
|
+
vWebhookArgs,
|
|
29
|
+
vWebhookResponse,
|
|
30
|
+
} from "../shared/schemas.ts";
|
|
8
31
|
import {
|
|
9
32
|
action,
|
|
10
33
|
internalAction,
|
|
@@ -21,12 +44,8 @@ import {
|
|
|
21
44
|
|
|
22
45
|
const TRANSLOADIT_ASSEMBLY_URL = "https://api2.transloadit.com/assemblies";
|
|
23
46
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
resultCount: number;
|
|
27
|
-
ok?: string;
|
|
28
|
-
status?: string;
|
|
29
|
-
};
|
|
47
|
+
export { vAssembly, vAssemblyResult, vTransloaditConfig };
|
|
48
|
+
export type { Assembly, AssemblyResult } from "../shared/schemas.ts";
|
|
30
49
|
|
|
31
50
|
type InternalApi = {
|
|
32
51
|
lib: {
|
|
@@ -147,78 +166,8 @@ const applyAssemblyStatus = async (
|
|
|
147
166
|
};
|
|
148
167
|
};
|
|
149
168
|
|
|
150
|
-
export const vAssembly = v.object({
|
|
151
|
-
_id: v.id("assemblies"),
|
|
152
|
-
_creationTime: v.number(),
|
|
153
|
-
assemblyId: v.string(),
|
|
154
|
-
status: v.optional(v.string()),
|
|
155
|
-
ok: v.optional(v.string()),
|
|
156
|
-
message: v.optional(v.string()),
|
|
157
|
-
templateId: v.optional(v.string()),
|
|
158
|
-
notifyUrl: v.optional(v.string()),
|
|
159
|
-
numExpectedUploadFiles: v.optional(v.number()),
|
|
160
|
-
fields: v.optional(v.record(v.string(), v.any())),
|
|
161
|
-
uploads: v.optional(v.array(v.any())),
|
|
162
|
-
results: v.optional(v.record(v.string(), v.array(v.any()))),
|
|
163
|
-
error: v.optional(v.any()),
|
|
164
|
-
raw: v.optional(v.any()),
|
|
165
|
-
createdAt: v.number(),
|
|
166
|
-
updatedAt: v.number(),
|
|
167
|
-
userId: v.optional(v.string()),
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
export type Assembly = Infer<typeof vAssembly>;
|
|
171
|
-
|
|
172
|
-
export const vAssemblyResult = v.object({
|
|
173
|
-
_id: v.id("results"),
|
|
174
|
-
_creationTime: v.number(),
|
|
175
|
-
assemblyId: v.string(),
|
|
176
|
-
album: v.optional(v.string()),
|
|
177
|
-
userId: v.optional(v.string()),
|
|
178
|
-
stepName: v.string(),
|
|
179
|
-
resultId: v.optional(v.string()),
|
|
180
|
-
sslUrl: v.optional(v.string()),
|
|
181
|
-
name: v.optional(v.string()),
|
|
182
|
-
size: v.optional(v.number()),
|
|
183
|
-
mime: v.optional(v.string()),
|
|
184
|
-
raw: v.any(),
|
|
185
|
-
createdAt: v.number(),
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
export type AssemblyResult = Infer<typeof vAssemblyResult>;
|
|
189
|
-
|
|
190
|
-
export const vTransloaditConfig = v.object({
|
|
191
|
-
authKey: v.string(),
|
|
192
|
-
authSecret: v.string(),
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
const vAssemblyBaseArgs = {
|
|
196
|
-
templateId: v.optional(v.string()),
|
|
197
|
-
steps: v.optional(v.record(v.string(), v.any())),
|
|
198
|
-
fields: v.optional(v.record(v.string(), v.any())),
|
|
199
|
-
notifyUrl: v.optional(v.string()),
|
|
200
|
-
numExpectedUploadFiles: v.optional(v.number()),
|
|
201
|
-
expires: v.optional(v.string()),
|
|
202
|
-
additionalParams: v.optional(v.record(v.string(), v.any())),
|
|
203
|
-
userId: v.optional(v.string()),
|
|
204
|
-
};
|
|
205
|
-
|
|
206
169
|
export const upsertAssembly = internalMutation({
|
|
207
|
-
args:
|
|
208
|
-
assemblyId: v.string(),
|
|
209
|
-
status: v.optional(v.string()),
|
|
210
|
-
ok: v.optional(v.string()),
|
|
211
|
-
message: v.optional(v.string()),
|
|
212
|
-
templateId: v.optional(v.string()),
|
|
213
|
-
notifyUrl: v.optional(v.string()),
|
|
214
|
-
numExpectedUploadFiles: v.optional(v.number()),
|
|
215
|
-
fields: v.optional(v.record(v.string(), v.any())),
|
|
216
|
-
uploads: v.optional(v.array(v.any())),
|
|
217
|
-
results: v.optional(v.record(v.string(), v.array(v.any()))),
|
|
218
|
-
error: v.optional(v.any()),
|
|
219
|
-
raw: v.optional(v.any()),
|
|
220
|
-
userId: v.optional(v.string()),
|
|
221
|
-
},
|
|
170
|
+
args: vUpsertAssemblyArgs,
|
|
222
171
|
returns: v.id("assemblies"),
|
|
223
172
|
handler: async (ctx, args) => {
|
|
224
173
|
// Note: we persist full `raw` + `results` for debugging/fidelity. Large
|
|
@@ -272,15 +221,7 @@ export const upsertAssembly = internalMutation({
|
|
|
272
221
|
});
|
|
273
222
|
|
|
274
223
|
export const replaceResultsForAssembly = internalMutation({
|
|
275
|
-
args:
|
|
276
|
-
assemblyId: v.string(),
|
|
277
|
-
results: v.array(
|
|
278
|
-
v.object({
|
|
279
|
-
stepName: v.string(),
|
|
280
|
-
result: v.any(),
|
|
281
|
-
}),
|
|
282
|
-
),
|
|
283
|
-
},
|
|
224
|
+
args: vReplaceResultsArgs,
|
|
284
225
|
returns: v.null(),
|
|
285
226
|
handler: async (ctx, args) => {
|
|
286
227
|
// We store raw result payloads for fidelity. For very large assemblies,
|
|
@@ -334,10 +275,7 @@ export const createAssembly = action({
|
|
|
334
275
|
config: vTransloaditConfig,
|
|
335
276
|
...vAssemblyBaseArgs,
|
|
336
277
|
},
|
|
337
|
-
returns:
|
|
338
|
-
assemblyId: v.string(),
|
|
339
|
-
data: v.any(),
|
|
340
|
-
}),
|
|
278
|
+
returns: vCreateAssemblyReturn,
|
|
341
279
|
handler: async (ctx, args) => {
|
|
342
280
|
const { paramsString, params } = buildTransloaditParams({
|
|
343
281
|
authKey: args.config.authKey,
|
|
@@ -345,7 +283,7 @@ export const createAssembly = action({
|
|
|
345
283
|
steps: args.steps as AssemblyInstructionsInput["steps"],
|
|
346
284
|
fields: args.fields as AssemblyInstructionsInput["fields"],
|
|
347
285
|
notifyUrl: args.notifyUrl,
|
|
348
|
-
numExpectedUploadFiles:
|
|
286
|
+
numExpectedUploadFiles: args.numExpectedUploadFiles,
|
|
349
287
|
expires: args.expires,
|
|
350
288
|
additionalParams: args.additionalParams as
|
|
351
289
|
| Record<string, unknown>
|
|
@@ -414,29 +352,47 @@ export const createAssembly = action({
|
|
|
414
352
|
},
|
|
415
353
|
});
|
|
416
354
|
|
|
417
|
-
const
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
355
|
+
export const createAssemblyOptions = action({
|
|
356
|
+
args: {
|
|
357
|
+
config: vTransloaditConfig,
|
|
358
|
+
...vAssemblyBaseArgs,
|
|
359
|
+
},
|
|
360
|
+
returns: vAssemblyOptions,
|
|
361
|
+
handler: async (_ctx, args) => {
|
|
362
|
+
const { paramsString, params } = buildTransloaditParams({
|
|
363
|
+
authKey: args.config.authKey,
|
|
364
|
+
templateId: args.templateId,
|
|
365
|
+
steps: args.steps as AssemblyInstructionsInput["steps"],
|
|
366
|
+
fields: args.fields as AssemblyInstructionsInput["fields"],
|
|
367
|
+
notifyUrl: args.notifyUrl,
|
|
368
|
+
numExpectedUploadFiles: args.numExpectedUploadFiles,
|
|
369
|
+
expires: args.expires,
|
|
370
|
+
additionalParams: args.additionalParams as
|
|
371
|
+
| Record<string, unknown>
|
|
372
|
+
| undefined,
|
|
373
|
+
});
|
|
424
374
|
|
|
425
|
-
const
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
375
|
+
const signature = await signTransloaditParams(
|
|
376
|
+
paramsString,
|
|
377
|
+
args.config.authSecret,
|
|
378
|
+
);
|
|
379
|
+
|
|
380
|
+
const fields =
|
|
381
|
+
params && typeof params.fields === "object" && params.fields
|
|
382
|
+
? (params.fields as Record<string, unknown>)
|
|
383
|
+
: undefined;
|
|
384
|
+
|
|
385
|
+
return {
|
|
386
|
+
params: paramsString,
|
|
387
|
+
signature,
|
|
388
|
+
fields,
|
|
389
|
+
};
|
|
390
|
+
},
|
|
391
|
+
});
|
|
431
392
|
|
|
432
393
|
export const processWebhook = internalAction({
|
|
433
394
|
args: vWebhookArgs,
|
|
434
|
-
returns:
|
|
435
|
-
assemblyId: v.string(),
|
|
436
|
-
resultCount: v.number(),
|
|
437
|
-
ok: v.optional(v.string()),
|
|
438
|
-
status: v.optional(v.string()),
|
|
439
|
-
}),
|
|
395
|
+
returns: vWebhookResponse,
|
|
440
396
|
handler: async (ctx, args) => {
|
|
441
397
|
const rawBody = resolveWebhookRawBody(args);
|
|
442
398
|
const shouldVerify = args.verifySignature ?? true;
|
|
@@ -474,20 +430,8 @@ export const processWebhook = internalAction({
|
|
|
474
430
|
});
|
|
475
431
|
|
|
476
432
|
export const handleWebhook = action({
|
|
477
|
-
args:
|
|
478
|
-
|
|
479
|
-
config: v.optional(
|
|
480
|
-
v.object({
|
|
481
|
-
authSecret: v.string(),
|
|
482
|
-
}),
|
|
483
|
-
),
|
|
484
|
-
},
|
|
485
|
-
returns: v.object({
|
|
486
|
-
assemblyId: v.string(),
|
|
487
|
-
resultCount: v.number(),
|
|
488
|
-
ok: v.optional(v.string()),
|
|
489
|
-
status: v.optional(v.string()),
|
|
490
|
-
}),
|
|
433
|
+
args: vHandleWebhookArgs,
|
|
434
|
+
returns: vWebhookResponse,
|
|
491
435
|
handler: async (ctx, args) => {
|
|
492
436
|
const verifySignature = args.verifySignature ?? true;
|
|
493
437
|
return ctx.runAction(internal.lib.processWebhook, {
|
|
@@ -501,18 +445,8 @@ export const handleWebhook = action({
|
|
|
501
445
|
});
|
|
502
446
|
|
|
503
447
|
export const queueWebhook = action({
|
|
504
|
-
args:
|
|
505
|
-
|
|
506
|
-
config: v.optional(
|
|
507
|
-
v.object({
|
|
508
|
-
authSecret: v.string(),
|
|
509
|
-
}),
|
|
510
|
-
),
|
|
511
|
-
},
|
|
512
|
-
returns: v.object({
|
|
513
|
-
assemblyId: v.string(),
|
|
514
|
-
queued: v.boolean(),
|
|
515
|
-
}),
|
|
448
|
+
args: vHandleWebhookArgs,
|
|
449
|
+
returns: vQueueWebhookResponse,
|
|
516
450
|
handler: async (ctx, args) => {
|
|
517
451
|
const rawBody = resolveWebhookRawBody(args);
|
|
518
452
|
const shouldVerify = args.verifySignature ?? true;
|
|
@@ -564,21 +498,8 @@ export const queueWebhook = action({
|
|
|
564
498
|
});
|
|
565
499
|
|
|
566
500
|
export const refreshAssembly = action({
|
|
567
|
-
args:
|
|
568
|
-
|
|
569
|
-
config: v.optional(
|
|
570
|
-
v.object({
|
|
571
|
-
authKey: v.string(),
|
|
572
|
-
authSecret: v.string(),
|
|
573
|
-
}),
|
|
574
|
-
),
|
|
575
|
-
},
|
|
576
|
-
returns: v.object({
|
|
577
|
-
assemblyId: v.string(),
|
|
578
|
-
resultCount: v.number(),
|
|
579
|
-
ok: v.optional(v.string()),
|
|
580
|
-
status: v.optional(v.string()),
|
|
581
|
-
}),
|
|
501
|
+
args: vRefreshAssemblyArgs,
|
|
502
|
+
returns: vWebhookResponse,
|
|
582
503
|
handler: async (ctx, args) => {
|
|
583
504
|
const { assemblyId } = args;
|
|
584
505
|
const authKey = args.config?.authKey ?? process.env.TRANSLOADIT_KEY;
|
|
@@ -603,7 +524,7 @@ export const refreshAssembly = action({
|
|
|
603
524
|
});
|
|
604
525
|
|
|
605
526
|
export const getAssemblyStatus = query({
|
|
606
|
-
args:
|
|
527
|
+
args: vAssemblyIdArgs,
|
|
607
528
|
returns: v.union(vAssembly, v.null()),
|
|
608
529
|
handler: async (ctx, args) => {
|
|
609
530
|
return await ctx.db
|
|
@@ -614,11 +535,7 @@ export const getAssemblyStatus = query({
|
|
|
614
535
|
});
|
|
615
536
|
|
|
616
537
|
export const listAssemblies = query({
|
|
617
|
-
args:
|
|
618
|
-
status: v.optional(v.string()),
|
|
619
|
-
userId: v.optional(v.string()),
|
|
620
|
-
limit: v.optional(v.number()),
|
|
621
|
-
},
|
|
538
|
+
args: vListAssembliesArgs,
|
|
622
539
|
returns: v.array(vAssembly),
|
|
623
540
|
handler: async (ctx, args) => {
|
|
624
541
|
if (args.userId) {
|
|
@@ -644,11 +561,7 @@ export const listAssemblies = query({
|
|
|
644
561
|
});
|
|
645
562
|
|
|
646
563
|
export const listResults = query({
|
|
647
|
-
args:
|
|
648
|
-
assemblyId: v.string(),
|
|
649
|
-
stepName: v.optional(v.string()),
|
|
650
|
-
limit: v.optional(v.number()),
|
|
651
|
-
},
|
|
564
|
+
args: vListResultsArgs,
|
|
652
565
|
returns: v.array(vAssemblyResult),
|
|
653
566
|
handler: async (ctx, args) => {
|
|
654
567
|
if (args.stepName) {
|
|
@@ -671,10 +584,7 @@ export const listResults = query({
|
|
|
671
584
|
});
|
|
672
585
|
|
|
673
586
|
export const listAlbumResults = query({
|
|
674
|
-
args:
|
|
675
|
-
album: v.string(),
|
|
676
|
-
limit: v.optional(v.number()),
|
|
677
|
-
},
|
|
587
|
+
args: vListAlbumResultsArgs,
|
|
678
588
|
returns: v.array(vAssemblyResult),
|
|
679
589
|
handler: async (ctx, args) => {
|
|
680
590
|
return ctx.db
|
|
@@ -686,14 +596,8 @@ export const listAlbumResults = query({
|
|
|
686
596
|
});
|
|
687
597
|
|
|
688
598
|
export const purgeAlbum = mutation({
|
|
689
|
-
args:
|
|
690
|
-
|
|
691
|
-
deleteAssemblies: v.optional(v.boolean()),
|
|
692
|
-
},
|
|
693
|
-
returns: v.object({
|
|
694
|
-
deletedResults: v.number(),
|
|
695
|
-
deletedAssemblies: v.number(),
|
|
696
|
-
}),
|
|
599
|
+
args: vPurgeAlbumArgs,
|
|
600
|
+
returns: vPurgeAlbumResponse,
|
|
697
601
|
handler: async (ctx, args) => {
|
|
698
602
|
const results = await ctx.db
|
|
699
603
|
.query("results")
|
|
@@ -725,11 +629,7 @@ export const purgeAlbum = mutation({
|
|
|
725
629
|
});
|
|
726
630
|
|
|
727
631
|
export const storeAssemblyMetadata = mutation({
|
|
728
|
-
args:
|
|
729
|
-
assemblyId: v.string(),
|
|
730
|
-
userId: v.optional(v.string()),
|
|
731
|
-
fields: v.optional(v.record(v.string(), v.any())),
|
|
732
|
-
},
|
|
632
|
+
args: vStoreAssemblyMetadataArgs,
|
|
733
633
|
returns: v.union(vAssembly, v.null()),
|
|
734
634
|
handler: async (ctx, args) => {
|
|
735
635
|
const existing = await ctx.db
|
package/src/component/schema.ts
CHANGED
|
@@ -1,40 +1,12 @@
|
|
|
1
1
|
import { defineSchema, defineTable } from "convex/server";
|
|
2
|
-
import {
|
|
2
|
+
import { vAssemblyFields, vAssemblyResultFields } from "../shared/schemas.ts";
|
|
3
3
|
|
|
4
4
|
export default defineSchema({
|
|
5
|
-
assemblies: defineTable(
|
|
6
|
-
assemblyId: v.string(),
|
|
7
|
-
status: v.optional(v.string()),
|
|
8
|
-
ok: v.optional(v.string()),
|
|
9
|
-
message: v.optional(v.string()),
|
|
10
|
-
templateId: v.optional(v.string()),
|
|
11
|
-
notifyUrl: v.optional(v.string()),
|
|
12
|
-
numExpectedUploadFiles: v.optional(v.number()),
|
|
13
|
-
fields: v.optional(v.record(v.string(), v.any())),
|
|
14
|
-
uploads: v.optional(v.array(v.any())),
|
|
15
|
-
results: v.optional(v.record(v.string(), v.array(v.any()))),
|
|
16
|
-
error: v.optional(v.any()),
|
|
17
|
-
raw: v.optional(v.any()),
|
|
18
|
-
createdAt: v.number(),
|
|
19
|
-
updatedAt: v.number(),
|
|
20
|
-
userId: v.optional(v.string()),
|
|
21
|
-
})
|
|
5
|
+
assemblies: defineTable(vAssemblyFields)
|
|
22
6
|
.index("by_assemblyId", ["assemblyId"])
|
|
23
7
|
.index("by_status", ["status"])
|
|
24
8
|
.index("by_userId", ["userId"]),
|
|
25
|
-
results: defineTable(
|
|
26
|
-
assemblyId: v.string(),
|
|
27
|
-
album: v.optional(v.string()),
|
|
28
|
-
userId: v.optional(v.string()),
|
|
29
|
-
stepName: v.string(),
|
|
30
|
-
resultId: v.optional(v.string()),
|
|
31
|
-
sslUrl: v.optional(v.string()),
|
|
32
|
-
name: v.optional(v.string()),
|
|
33
|
-
size: v.optional(v.number()),
|
|
34
|
-
mime: v.optional(v.string()),
|
|
35
|
-
raw: v.any(),
|
|
36
|
-
createdAt: v.number(),
|
|
37
|
-
})
|
|
9
|
+
results: defineTable(vAssemblyResultFields)
|
|
38
10
|
.index("by_assemblyId", ["assemblyId"])
|
|
39
11
|
.index("by_assemblyId_and_step", ["assemblyId", "stepName"])
|
|
40
12
|
.index("by_album", ["album"]),
|