@requence/task 1.0.0-alpha.11 → 1.0.0-alpha.13

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.
Files changed (45) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/build/chunk-4r30g3ha.js +38 -0
  3. package/build/chunk-4r30g3ha.js.map +10 -0
  4. package/build/cli.js +1 -1
  5. package/build/index.js +378 -154
  6. package/build/index.js.map +11 -7
  7. package/build/types/helpers/src/files/mapOutput.d.ts +4 -1
  8. package/build/types/helpers/src/files/mapOutput.d.ts.map +1 -1
  9. package/build/types/helpers/src/index.d.ts +8 -6
  10. package/build/types/helpers/src/index.d.ts.map +1 -1
  11. package/build/types/helpers/src/protocol/update.d.ts +8 -8
  12. package/build/types/helpers/src/utils/callbackToAsyncIterator.d.ts +3 -0
  13. package/build/types/helpers/src/utils/callbackToAsyncIterator.d.ts.map +1 -0
  14. package/build/types/helpers/src/utils/clone.d.ts +3 -0
  15. package/build/types/helpers/src/utils/clone.d.ts.map +1 -0
  16. package/build/types/helpers/src/utils/createObjectProxy.d.ts +2 -0
  17. package/build/types/helpers/src/utils/createObjectProxy.d.ts.map +1 -0
  18. package/build/types/helpers/src/{createRemotePromise.d.ts → utils/createRemotePromise.d.ts} +1 -1
  19. package/build/types/helpers/src/utils/createRemotePromise.d.ts.map +1 -0
  20. package/build/types/helpers/src/utils/isRecord.d.ts +2 -0
  21. package/build/types/helpers/src/utils/isRecord.d.ts.map +1 -0
  22. package/build/types/helpers/src/{utils.d.ts → utils/mapData.d.ts} +1 -5
  23. package/build/types/helpers/src/utils/mapData.d.ts.map +1 -0
  24. package/build/types/helpers/src/utils/matchSchema.d.ts +4 -0
  25. package/build/types/helpers/src/utils/matchSchema.d.ts.map +1 -0
  26. package/build/types/helpers/src/utils/obfuscate.d.ts.map +1 -0
  27. package/build/types/task/src/createTask.d.ts +3 -97
  28. package/build/types/task/src/createTask.d.ts.map +1 -1
  29. package/build/types/task/src/types.d.ts +24 -17
  30. package/build/types/task/src/types.d.ts.map +1 -1
  31. package/build/types/task/src/watchTasks.d.ts +2 -97
  32. package/build/types/task/src/watchTasks.d.ts.map +1 -1
  33. package/package.json +3 -3
  34. package/build/chunk-ajdmm777.js +0 -125
  35. package/build/chunk-ajdmm777.js.map +0 -12
  36. package/build/types/helpers/src/clone.d.ts +0 -3
  37. package/build/types/helpers/src/clone.d.ts.map +0 -1
  38. package/build/types/helpers/src/createObjectProxy.d.ts +0 -2
  39. package/build/types/helpers/src/createObjectProxy.d.ts.map +0 -1
  40. package/build/types/helpers/src/createRemotePromise.d.ts.map +0 -1
  41. package/build/types/helpers/src/obfuscate.d.ts.map +0 -1
  42. package/build/types/helpers/src/utils.d.ts.map +0 -1
  43. package/build/types/task/src/utils/callbackToAsyncIterator.d.ts +0 -5
  44. package/build/types/task/src/utils/callbackToAsyncIterator.d.ts.map +0 -1
  45. /package/build/types/helpers/src/{obfuscate.d.ts → utils/obfuscate.d.ts} +0 -0
package/build/index.js CHANGED
@@ -1,12 +1,253 @@
1
1
  import {
2
- createRemotePromise,
3
- deobfuscate,
4
- mapData
5
- } from "./chunk-ajdmm777.js";
2
+ deobfuscate
3
+ } from "./chunk-4r30g3ha.js";
6
4
 
7
- // ../helpers/src/files/index.ts
5
+ // ../helpers/src/utils/createRemotePromise.ts
6
+ function createRemotePromise(onAwait) {
7
+ let resolvePromise;
8
+ let rejectPromise;
9
+ const internalPromise = new Promise((resolve, reject) => {
10
+ resolvePromise = resolve;
11
+ rejectPromise = reject;
12
+ });
13
+ let isAwaited = false;
14
+ const wrappedPromise = new Proxy(internalPromise, {
15
+ get(target, property) {
16
+ if (property === "then" || property === "catch" || property === "finally") {
17
+ if (!isAwaited && onAwait) {
18
+ isAwaited = true;
19
+ onAwait(resolvePromise, rejectPromise);
20
+ }
21
+ return target[property].bind(target);
22
+ }
23
+ return target[property];
24
+ }
25
+ });
26
+ return Object.assign(wrappedPromise, {
27
+ resolve: resolvePromise,
28
+ reject: rejectPromise,
29
+ promise: wrappedPromise
30
+ });
31
+ }
32
+
33
+ // ../helpers/src/utils/callbackToAsyncIterator.ts
34
+ function callbackToAsyncIterator(subscribe) {
35
+ const pullQueue = [];
36
+ const pushQueue = [];
37
+ const pushValue = (value) => {
38
+ if (pullQueue.length !== 0) {
39
+ const resolver = pullQueue.shift();
40
+ resolver(value);
41
+ } else {
42
+ pushQueue.push(value);
43
+ }
44
+ };
45
+ const pullValue = () => new Promise((resolve) => {
46
+ if (pushQueue.length !== 0) {
47
+ resolve(pushQueue.shift());
48
+ } else {
49
+ pullQueue.push(resolve);
50
+ }
51
+ });
52
+ subscribe((value) => {
53
+ pushValue({ value });
54
+ }, (error) => {
55
+ pushValue({ error });
56
+ }, () => {
57
+ pushValue({ done: true });
58
+ });
59
+ return {
60
+ async next() {
61
+ const value = await pullValue();
62
+ if (value.done) {
63
+ return { value: undefined, done: true };
64
+ }
65
+ if (value.error) {
66
+ throw value.error;
67
+ }
68
+ return { value: value.value, done: false };
69
+ }
70
+ };
71
+ }
72
+ function callbackToAsyncIterable(...args) {
73
+ return {
74
+ [Symbol.asyncIterator]() {
75
+ return callbackToAsyncIterator(...args);
76
+ }
77
+ };
78
+ }
79
+
80
+ // ../helpers/src/utils/isRecord.ts
8
81
  import { z } from "zod";
82
+ var recordSchema = z.record(z.unknown());
83
+ function isRecord(data) {
84
+ return recordSchema.safeParse(data).success;
85
+ }
86
+
87
+ // ../helpers/src/utils/mapData.ts
88
+ function resolve(value, onResolve) {
89
+ if (value instanceof Promise) {
90
+ return Promise.resolve().then(() => value).then(onResolve);
91
+ }
92
+ return onResolve(value);
93
+ }
94
+ function notUndefined(value, fallback) {
95
+ return resolve(value, (resolvedValue) => typeof resolvedValue === "undefined" ? fallback : resolvedValue);
96
+ }
97
+ function mapData(data, visitors) {
98
+ const traverseData = (data2, path) => {
99
+ if (Array.isArray(data2)) {
100
+ return resolve(visitors.Array?.(data2, path), (resolvedData) => {
101
+ if (resolvedData) {
102
+ return resolvedData;
103
+ }
104
+ const items = data2.map((item, index) => traverseData(item, [...path, index]));
105
+ if (items.some((item) => item instanceof Promise)) {
106
+ return Promise.all(items);
107
+ }
108
+ return items;
109
+ });
110
+ }
111
+ if (data2 === null) {
112
+ return notUndefined(visitors.Null?.(data2, path), data2);
113
+ }
114
+ if (typeof Buffer !== "undefined" && Buffer.isBuffer(data2)) {
115
+ return notUndefined(visitors.Buffer?.(data2, path), data2);
116
+ }
117
+ if (typeof data2 === "string") {
118
+ return notUndefined(visitors.String?.(data2, path), data2);
119
+ }
120
+ if (typeof data2 === "number") {
121
+ return notUndefined(visitors.Number?.(data2, path), data2);
122
+ }
123
+ if (isRecord(data2)) {
124
+ return resolve(visitors.Object?.(data2, path), (resolvedData) => {
125
+ if (resolvedData) {
126
+ return resolvedData;
127
+ }
128
+ const entries = Object.entries(data2).map(([key, value]) => [
129
+ key,
130
+ traverseData(value, [...path, key])
131
+ ]);
132
+ if (entries.some(([, value]) => value instanceof Promise)) {
133
+ return Promise.all(entries.map(([key, value]) => Promise.resolve().then(() => value).then((resolvedValue) => [key, resolvedValue]))).then((entries2) => Object.fromEntries(entries2));
134
+ }
135
+ return Object.fromEntries(entries);
136
+ });
137
+ }
138
+ return data2;
139
+ };
140
+ return traverseData(data, []);
141
+ }
9
142
 
143
+ // ../helpers/src/files/index.ts
144
+ import { z as z2 } from "zod";
145
+
146
+ // ../helpers/src/files/mapOutput.ts
147
+ async function upload(uploadUrl, body, signal, contentType) {
148
+ const uploadResponse = await fetch(uploadUrl, {
149
+ method: "POST",
150
+ signal,
151
+ headers: contentType ? {
152
+ "Content-Type": contentType
153
+ } : {},
154
+ body
155
+ });
156
+ const data = await uploadResponse.json();
157
+ if (!data || typeof data !== "object") {
158
+ throw new Error("invalid upload response");
159
+ }
160
+ return toFileObject(data);
161
+ }
162
+ async function stream(streamUrl, stream2, signal, contentType) {
163
+ const [testStream, dataStream] = stream2.tee();
164
+ const reader = testStream.getReader();
165
+ const dataPromise = reader.read().then(({ done: done2 }) => {
166
+ if (done2) {
167
+ throw new Error("No streaming date received");
168
+ }
169
+ reader.cancel();
170
+ });
171
+ const streamResponse = await fetch(streamUrl, {
172
+ method: "POST",
173
+ signal,
174
+ headers: contentType ? { "Content-Type": contentType } : {}
175
+ });
176
+ const data = await streamResponse.json();
177
+ if (!data || typeof data !== "object") {
178
+ throw new Error("invalid stream response");
179
+ }
180
+ const { mime, url } = data;
181
+ await dataPromise;
182
+ const done = fetch(url, {
183
+ method: "POST",
184
+ signal,
185
+ duplex: "half",
186
+ body: dataStream
187
+ });
188
+ return [toStreamObject({ mime, url }), done];
189
+ }
190
+ async function mapOutput(params) {
191
+ const streamPromises = [];
192
+ const mapped = await mapData(params.value, {
193
+ async Object(obj) {
194
+ if (obj instanceof Blob || obj instanceof RequenceFile) {
195
+ if (obj instanceof RequenceFile && obj.fileObject) {
196
+ return obj.fileObject;
197
+ }
198
+ if (params.options.uploadUrl) {
199
+ try {
200
+ if (obj instanceof Blob) {
201
+ return await upload(params.options.uploadUrl, obj, params.signal, obj.type);
202
+ }
203
+ if (obj instanceof RequenceFile) {
204
+ return await upload(params.options.uploadUrl, await obj.blob(), params.signal, obj.mimeType);
205
+ }
206
+ } catch (error) {
207
+ if (!(error instanceof Error)) {
208
+ throw error;
209
+ }
210
+ params.onFail?.(error);
211
+ return null;
212
+ }
213
+ } else {
214
+ params.onSkip?.();
215
+ return null;
216
+ }
217
+ }
218
+ if (obj instanceof Response || obj instanceof RequenceStream) {
219
+ if (obj instanceof RequenceStream && obj.streamObject) {
220
+ return obj.streamObject;
221
+ }
222
+ if (params.options.streamUrl) {
223
+ try {
224
+ if (obj instanceof Response && obj.body) {
225
+ const [streamObject, streamPromise] = await stream(params.options.streamUrl, obj.body, params.signal, obj.headers.get("Content-Type"));
226
+ streamPromises.push(streamPromise);
227
+ return streamObject;
228
+ }
229
+ if (obj instanceof RequenceStream) {
230
+ const [streamObject, streamPromise] = await stream(params.options.streamUrl, obj.stream(), params.signal, obj.mimeType);
231
+ streamPromises.push(streamPromise);
232
+ return streamObject;
233
+ }
234
+ } catch (error) {
235
+ if (!(error instanceof Error)) {
236
+ throw error;
237
+ }
238
+ params.onFail?.(error);
239
+ return null;
240
+ }
241
+ } else {
242
+ params.onSkip?.();
243
+ return null;
244
+ }
245
+ }
246
+ }
247
+ });
248
+ Promise.allSettled(streamPromises).then(() => params.onDone?.());
249
+ return mapped;
250
+ }
10
251
  // ../helpers/src/files/RequenceFile.ts
11
252
  class RequenceFile {
12
253
  #data;
@@ -70,15 +311,15 @@ class RequenceStream {
70
311
  #data;
71
312
  #stream = null;
72
313
  #options;
73
- constructor(stream, options) {
74
- this.#data = stream;
314
+ constructor(stream2, options) {
315
+ this.#data = stream2;
75
316
  this.#options = options;
76
317
  }
77
- static fromStreamObject(stream) {
318
+ static fromStreamObject(stream2) {
78
319
  const instance = new this(null, {
79
320
  type: "x/x"
80
321
  });
81
- instance.#stream = stream;
322
+ instance.#stream = stream2;
82
323
  return instance;
83
324
  }
84
325
  get streamObject() {
@@ -127,20 +368,32 @@ class RequenceStream {
127
368
  }
128
369
 
129
370
  // ../helpers/src/files/index.ts
130
- var fileObjectSchema = z.object({
131
- size: z.number().int().positive(),
132
- mime: z.string(),
133
- url: z.string().url(),
134
- __REQUENCE_type: z.literal("RequenceFile")
371
+ var fileObjectSchema = z2.object({
372
+ size: z2.number().int().positive(),
373
+ mime: z2.string(),
374
+ url: z2.string().url(),
375
+ __REQUENCE_type: z2.literal("RequenceFile")
135
376
  });
377
+ function toFileObject(fileInfo) {
378
+ return {
379
+ ...fileInfo,
380
+ __REQUENCE_type: "RequenceFile"
381
+ };
382
+ }
136
383
  function isFileObject(data) {
137
384
  return fileObjectSchema.safeParse(data).success;
138
385
  }
139
- var streamObjectSchema = z.object({
140
- mime: z.string(),
141
- url: z.string().url(),
142
- __REQUENCE_type: z.literal("RequenceStream")
386
+ var streamObjectSchema = z2.object({
387
+ mime: z2.string(),
388
+ url: z2.string().url(),
389
+ __REQUENCE_type: z2.literal("RequenceStream")
143
390
  });
391
+ function toStreamObject(streamInfo) {
392
+ return {
393
+ ...streamInfo,
394
+ __REQUENCE_type: "RequenceStream"
395
+ };
396
+ }
144
397
  function isStreamObject(data) {
145
398
  return streamObjectSchema.safeParse(data).success;
146
399
  }
@@ -149,73 +402,73 @@ function isStreamObject(data) {
149
402
  import { EventSource } from "eventsource";
150
403
 
151
404
  // src/types.ts
152
- import { z as z2 } from "zod";
153
- var serviceNodeInfoSchema = z2.object({
154
- id: z2.string().uuid(),
155
- type: z2.literal("service"),
156
- alias: z2.string().optional(),
157
- service: z2.object({
158
- id: z2.string().uuid(),
159
- name: z2.string(),
160
- version: z2.string()
405
+ import { z as z3 } from "zod";
406
+ var serviceNodeInfoSchema = z3.object({
407
+ id: z3.string().uuid(),
408
+ type: z3.literal("service"),
409
+ alias: z3.string().optional(),
410
+ service: z3.object({
411
+ id: z3.string().uuid(),
412
+ name: z3.string(),
413
+ version: z3.string()
161
414
  }).optional()
162
415
  });
163
- var logicNodeInfoSchema = z2.object({
164
- id: z2.string().uuid(),
165
- type: z2.literal("logic"),
166
- alias: z2.string().optional(),
167
- logic: z2.object({
168
- language: z2.enum(["typescript", "javascript", "python"])
416
+ var logicNodeInfoSchema = z3.object({
417
+ id: z3.string().uuid(),
418
+ type: z3.literal("logic"),
419
+ alias: z3.string().optional(),
420
+ logic: z3.object({
421
+ language: z3.enum(["typescript", "javascript", "python"])
169
422
  }).optional()
170
423
  });
171
- var nodeInfoSchema = z2.discriminatedUnion("type", [
424
+ var nodeInfoSchema = z3.discriminatedUnion("type", [
172
425
  serviceNodeInfoSchema,
173
426
  logicNodeInfoSchema
174
427
  ]);
175
- var baseUpdate = z2.object({
176
- timestamp: z2.coerce.date(),
177
- taskId: z2.string().uuid()
428
+ var baseUpdate = z3.object({
429
+ timestamp: z3.coerce.date(),
430
+ taskId: z3.string().uuid()
178
431
  });
179
432
  var taskStartUpdateSchema = baseUpdate.extend({
180
- type: z2.literal("taskStart"),
181
- input: z2.unknown(),
182
- meta: z2.unknown()
433
+ type: z3.literal("taskStart"),
434
+ input: z3.unknown(),
435
+ meta: z3.unknown()
183
436
  });
184
437
  var taskErrorUpdateSchema = baseUpdate.extend({
185
- type: z2.literal("taskError"),
186
- error: z2.string()
438
+ type: z3.literal("taskError"),
439
+ error: z3.string()
187
440
  });
188
441
  var taskEndUpdateSchema = baseUpdate.extend({
189
- type: z2.literal("taskEnd"),
190
- result: z2.record(z2.string(), z2.unknown()),
191
- partialResults: z2.array(z2.object({
442
+ type: z3.literal("taskEnd"),
443
+ result: z3.record(z3.string(), z3.unknown()),
444
+ partialResults: z3.array(z3.object({
192
445
  node: nodeInfoSchema,
193
- timestamp: z2.coerce.date().nullable(),
194
- data: z2.unknown(),
195
- error: z2.string().optional()
446
+ timestamp: z3.coerce.date().nullable(),
447
+ data: z3.unknown(),
448
+ error: z3.string().optional()
196
449
  }))
197
450
  });
198
451
  var nodeStartUpdateSchema = baseUpdate.extend({
199
- type: z2.literal("nodeStart"),
452
+ type: z3.literal("nodeStart"),
200
453
  node: nodeInfoSchema
201
454
  });
202
455
  var nodeUpdateUpdateSchema = baseUpdate.extend({
203
- type: z2.literal("nodeUpdate"),
204
- data: z2.unknown()
456
+ type: z3.literal("nodeUpdate"),
457
+ data: z3.unknown()
205
458
  });
206
459
  var nodeErrorUpdateSchema = baseUpdate.extend({
207
- type: z2.literal("nodeError"),
208
- error: z2.string()
460
+ type: z3.literal("nodeError"),
461
+ error: z3.string()
209
462
  });
210
463
  var nodeDeferUpdateSchema = baseUpdate.extend({
211
- type: z2.literal("nodeDefer"),
212
- reason: z2.string().optional()
464
+ type: z3.literal("nodeDefer"),
465
+ reason: z3.string().optional()
213
466
  });
214
467
  var nodeEndUpdateSchema = baseUpdate.extend({
215
- type: z2.literal("nodeEnd"),
468
+ type: z3.literal("nodeEnd"),
216
469
  node: nodeInfoSchema
217
470
  });
218
- var updateSchema = z2.discriminatedUnion("type", [
471
+ var updateSchema = z3.discriminatedUnion("type", [
219
472
  taskStartUpdateSchema,
220
473
  taskErrorUpdateSchema,
221
474
  taskEndUpdateSchema,
@@ -225,50 +478,7 @@ var updateSchema = z2.discriminatedUnion("type", [
225
478
  nodeDeferUpdateSchema,
226
479
  nodeEndUpdateSchema
227
480
  ]);
228
- var eventSchema = z2.object({ type: z2.string(), data: z2.string() }).transform((event) => ({ type: event.type, ...JSON.parse(event.data) })).pipe(updateSchema);
229
-
230
- // src/utils/callbackToAsyncIterator.ts
231
- function callbackToAsyncIterator(options) {
232
- const pullQueue = [];
233
- const pushQueue = [];
234
- const pushValue = (value) => {
235
- if (pullQueue.length !== 0) {
236
- const resolver = pullQueue.shift();
237
- resolver(value);
238
- } else {
239
- pushQueue.push(value);
240
- }
241
- };
242
- const pullValue = () => new Promise((resolve) => {
243
- if (pushQueue.length !== 0) {
244
- resolve(pushQueue.shift());
245
- } else {
246
- pullQueue.push(resolve);
247
- }
248
- });
249
- return {
250
- [Symbol.asyncIterator]() {
251
- let done = false;
252
- const unsubscribe = options.subscribe(pushValue);
253
- return {
254
- async next() {
255
- if (done) {
256
- return { value: undefined, done: true };
257
- }
258
- const value = await pullValue();
259
- if (options.done) {
260
- done = options.done(value);
261
- }
262
- return { value, done: false };
263
- },
264
- async return() {
265
- unsubscribe?.();
266
- return { value: undefined, done: true };
267
- }
268
- };
269
- }
270
- };
271
- }
481
+ var eventSchema = z3.object({ type: z3.string(), data: z3.string() }).transform((event) => ({ type: event.type, ...JSON.parse(event.data) })).pipe(updateSchema);
272
482
 
273
483
  // src/utils/getAccessToken.ts
274
484
  import { readFileSync } from "node:fs";
@@ -291,7 +501,7 @@ in your package.json in requence.accessToken`);
291
501
  }
292
502
 
293
503
  // src/utils/mapOutput.ts
294
- function mapOutput2(data) {
504
+ function mapOutput3(data) {
295
505
  return mapData(data, {
296
506
  Object(obj) {
297
507
  if (isFileObject(obj)) {
@@ -315,7 +525,7 @@ class TaskError extends Error {
315
525
  function createTask(options, onUpdate) {
316
526
  const taskUpdateHandlers = new Set;
317
527
  const { apiBaseUrl, token } = getAccessToken(options.accessToken);
318
- const startUrl = `${apiBaseUrl}/task/start/${options.taskTemplate}`;
528
+ const prepareUrl = `${apiBaseUrl}/task/prepare/${options.taskTemplate}`;
319
529
  const payloadPromise = createRemotePromise();
320
530
  let isMonitoring = false;
321
531
  const startMonitoring = async () => {
@@ -337,6 +547,12 @@ function createTask(options, onUpdate) {
337
547
  },
338
548
  getData(_alias) {
339
549
  return null;
550
+ },
551
+ getTaskId() {
552
+ return payload.taskId;
553
+ },
554
+ getTaskUrl() {
555
+ return "";
340
556
  }
341
557
  });
342
558
  return;
@@ -381,89 +597,100 @@ function createTask(options, onUpdate) {
381
597
  const getPartialResult = (alias) => update.partialResults.find((partialResult) => partialResult.node.alias === alias);
382
598
  resultPromise.resolve({
383
599
  getInput() {
384
- return mapOutput2(input);
600
+ return mapOutput3(input);
385
601
  },
386
602
  getMeta() {
387
- return mapOutput2(meta);
603
+ return mapOutput3(meta);
388
604
  },
389
605
  getError(alias) {
390
606
  return getPartialResult(alias)?.error ?? null;
391
607
  },
392
608
  getData(alias) {
393
609
  if (!alias) {
394
- return mapOutput2(update.result);
610
+ return mapOutput3(update.result);
395
611
  }
396
- return mapOutput2(getPartialResult(alias)?.data ?? null);
612
+ return mapOutput3(getPartialResult(alias)?.data ?? null);
613
+ },
614
+ getTaskId() {
615
+ return payload.taskId;
616
+ },
617
+ getTaskUrl() {
618
+ return payload.urls?.show ?? "";
397
619
  }
398
620
  });
399
621
  }
400
622
  if (update.type === "taskError") {
401
623
  resultPromise.reject(new TaskError(update.error, options.taskTemplate));
402
624
  }
403
- taskUpdateHandlers.forEach((handler) => handler(update));
625
+ const extendedUpdate = update.type === "nodeUpdate" ? { type: "nodeUpdate", data: mapOutput3(update.data) } : update;
626
+ taskUpdateHandlers.forEach((handler) => handler(extendedUpdate));
404
627
  });
405
628
  });
406
629
  };
407
630
  const taskIdPromise = createRemotePromise();
408
631
  const resultPromise = createRemotePromise(startMonitoring);
409
632
  (async () => {
410
- const formData = new FormData;
411
- const walkData = async (data, path = []) => {
412
- const name = path.map((segment, index) => index === 0 ? segment : typeof segment === "string" ? `.${segment}` : `[${segment}]`).join("");
413
- if (data instanceof RequenceFile) {
414
- formData.append(name, await data.blob(), name);
415
- } else if (data instanceof RequenceStream) {
416
- console.warn("stream not supported");
417
- formData.append(name, `json://null`);
418
- } else if (Array.isArray(data)) {
419
- await Promise.all(data.map((item, index) => walkData(item, [...path, index])));
420
- } else if (data && typeof data === "object") {
421
- for (const [key, value] of Object.entries(data)) {
422
- await walkData(value, [...path, key]);
423
- }
424
- } else if (typeof data !== "undefined") {
425
- formData.append(name, `json://${JSON.stringify(data)}`);
633
+ const prepareResponse = await fetch(prepareUrl, {
634
+ method: "POST",
635
+ headers: {
636
+ Authorization: `Bearer ${token}`
637
+ }
638
+ });
639
+ if (!prepareResponse.ok) {
640
+ const error = new TaskError(await prepareResponse.text(), options.taskTemplate);
641
+ taskIdPromise.reject(error);
642
+ resultPromise.reject(error);
643
+ return;
644
+ }
645
+ const prepareData = await prepareResponse.json();
646
+ const mappedParams = await mapOutput({
647
+ value: {
648
+ name: options.name,
649
+ input: options.input,
650
+ meta: options.meta
651
+ },
652
+ options: {
653
+ uploadUrl: prepareData.fileUrls?.uploadUrl,
654
+ streamUrl: prepareData.fileUrls?.streamUrl
426
655
  }
427
- };
428
- await walkData({
429
- input: options.input ?? null,
430
- meta: options.meta ?? null,
431
- name: options.name ?? null
432
656
  });
433
- const response = await fetch(startUrl, {
657
+ const finalizeResponse = await fetch(prepareData.finalizeUrl, {
434
658
  method: "POST",
435
- body: formData,
659
+ body: JSON.stringify(mappedParams),
436
660
  headers: {
437
- Authorization: `Bearer ${token}`
661
+ Authorization: `Bearer ${token}`,
662
+ "Content-Type": "application/json"
438
663
  }
439
664
  });
440
- if (!response.ok) {
441
- const error = new TaskError(await response.text(), options.taskTemplate);
665
+ if (!finalizeResponse.ok) {
666
+ const error = new TaskError(await prepareResponse.text(), options.taskTemplate);
442
667
  taskIdPromise.reject(error);
443
668
  resultPromise.reject(error);
444
669
  return;
445
670
  }
446
- const payload = await response.json();
447
- taskIdPromise.resolve(payload.id);
671
+ const payload = await finalizeResponse.json();
672
+ taskIdPromise.resolve(payload.taskId);
448
673
  payloadPromise.resolve(payload);
449
674
  if (onUpdate) {
450
675
  taskUpdateHandlers.add(onUpdate);
451
676
  startMonitoring();
452
677
  }
453
678
  })();
454
- const asyncIterable = callbackToAsyncIterator({
455
- subscribe: (push) => {
456
- taskUpdateHandlers.add(push);
457
- startMonitoring();
458
- return () => {
459
- taskUpdateHandlers.delete(push);
460
- };
461
- },
462
- done: (value) => value.type === "taskError" || value.type === "taskEnd"
679
+ const asyncIterable = callbackToAsyncIterable((push, _fail, done) => {
680
+ taskUpdateHandlers.add(function handleUpdate(update) {
681
+ push(update);
682
+ if (update.type === "taskEnd" || update.type === "taskError") {
683
+ done();
684
+ taskUpdateHandlers.delete(handleUpdate);
685
+ }
686
+ });
687
+ startMonitoring();
463
688
  });
464
689
  return Object.assign(resultPromise.promise, asyncIterable, {
465
690
  getTaskId() {
466
691
  return taskIdPromise;
692
+ },
693
+ getTaskUrl() {
467
694
  }
468
695
  });
469
696
  }
@@ -485,13 +712,8 @@ function watchTasks(options) {
485
712
  }
486
713
  })
487
714
  });
488
- const asyncIterable = callbackToAsyncIterator({
489
- subscribe: (push) => {
490
- taskUpdateHandlers.add(push);
491
- return () => {
492
- taskUpdateHandlers.delete(push);
493
- };
494
- }
715
+ const asyncIterable = callbackToAsyncIterable((push) => {
716
+ taskUpdateHandlers.add(push);
495
717
  });
496
718
  const taskEvents = [
497
719
  "taskStart",
@@ -510,7 +732,9 @@ function watchTasks(options) {
510
732
  eventSource.close();
511
733
  throw new Error("invalid update");
512
734
  }
513
- taskUpdateHandlers.forEach((handler) => handler(updateResult.data));
735
+ const update = updateResult.data;
736
+ const extendedUpdate = update.type === "nodeUpdate" ? { type: "nodeUpdate", data: mapOutput3(update.data) } : update;
737
+ taskUpdateHandlers.forEach((handler) => handler(extendedUpdate));
514
738
  });
515
739
  });
516
740
  const stopWatching = () => {
@@ -525,5 +749,5 @@ export {
525
749
  RequenceFile
526
750
  };
527
751
 
528
- //# debugId=0DC345883E2D093D64756E2164756E21
752
+ //# debugId=17D151A31EA3238664756E2164756E21
529
753
  //# sourceMappingURL=index.js.map