@requence/task 1.0.0-alpha.2 → 1.0.0-alpha.4
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/CHANGELOG.md +13 -0
- package/build/{chunk-s4kgf465.js → chunk-6pjtq0hg.js} +4 -5
- package/build/{chunk-s4kgf465.js.map → chunk-6pjtq0hg.js.map} +5 -5
- package/build/cli.js +1 -1
- package/build/index.js +120 -44
- package/build/index.js.map +8 -6
- package/build/types/task/src/createTask.d.ts +110 -0
- package/build/types/task/src/createTask.d.ts.map +1 -0
- package/build/types/task/src/index.d.ts +2 -101
- package/build/types/task/src/index.d.ts.map +1 -1
- package/build/types/task/src/types.d.ts +536 -24
- package/build/types/task/src/types.d.ts.map +1 -1
- package/build/types/task/src/utils/callbackToAsyncIterator.d.ts +1 -1
- package/build/types/task/src/utils/callbackToAsyncIterator.d.ts.map +1 -1
- package/build/types/task/src/utils/getAccessToken.d.ts +5 -0
- package/build/types/task/src/utils/getAccessToken.d.ts.map +1 -0
- package/build/types/task/src/watchTasks.d.ts +105 -0
- package/build/types/task/src/watchTasks.d.ts.map +1 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -31,7 +31,8 @@ function deobfuscate(str) {
|
|
|
31
31
|
}
|
|
32
32
|
return decodedString.split(separator);
|
|
33
33
|
}
|
|
34
|
-
|
|
34
|
+
// ../helpers/src/clone.ts
|
|
35
|
+
var CLONE_SYMBOL = Symbol("original");
|
|
35
36
|
// ../helpers/src/createRemotePromise.ts
|
|
36
37
|
function createRemotePromise(onAwait) {
|
|
37
38
|
let resolvePromise;
|
|
@@ -59,9 +60,7 @@ function createRemotePromise(onAwait) {
|
|
|
59
60
|
promise: wrappedPromise
|
|
60
61
|
});
|
|
61
62
|
}
|
|
62
|
-
// ../helpers/src/clone.ts
|
|
63
|
-
var CLONE_SYMBOL = Symbol("original");
|
|
64
63
|
export { __require, deobfuscate, createRemotePromise };
|
|
65
64
|
|
|
66
|
-
//# debugId=
|
|
67
|
-
//# sourceMappingURL=chunk-
|
|
65
|
+
//# debugId=E213FAEB0716353764756E2164756E21
|
|
66
|
+
//# sourceMappingURL=chunk-6pjtq0hg.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../helpers/src/obfuscate.ts", "../../helpers/src/
|
|
3
|
+
"sources": ["../../helpers/src/obfuscate.ts", "../../helpers/src/clone.ts", "../../helpers/src/createRemotePromise.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"const separator = '\\u{f6ee}'\n\nconst base65Chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$'\n\nconst base65CharToIndex: Record<string, number> = {}\nfor (let i = 0; i < base65Chars.length; i++) {\n base65CharToIndex[base65Chars[i]] = i\n}\n\nexport function obfuscate(...parts: Array<string>) {\n const str = parts.join(separator)\n let binaryString = ''\n\n for (let i = 0; i < str.length; i++) {\n const charCode = str.charCodeAt(i)\n binaryString += charCode.toString(2).padStart(16, '0')\n }\n\n let encodedString = ''\n const chunkSize = 6\n let paddingCount = 0\n\n for (let i = 0; i < binaryString.length; i += chunkSize) {\n let chunk = binaryString.substring(i, i + chunkSize)\n\n if (chunk.length < chunkSize) {\n paddingCount = chunkSize - chunk.length\n chunk = chunk.padEnd(chunkSize, '0')\n }\n\n const decimalValue = parseInt(chunk, 2)\n encodedString += base65Chars[decimalValue]\n }\n\n return encodedString + paddingCount.toString()\n}\n\nexport function randomString(length: number) {\n const randomValues = new Uint8Array(length)\n crypto.getRandomValues(randomValues)\n\n let randomString = ''\n for (let i = 0; i < length; i++) {\n randomString += base65Chars[randomValues[i] % base65Chars.length]\n }\n\n return randomString\n}\n\nexport function deobfuscate(str: string) {\n const paddingCount = parseInt(str.slice(-1), 10)\n str = str.slice(0, -1)\n\n let binaryString = ''\n\n for (let i = 0; i < str.length; i++) {\n const decimalValue = base65CharToIndex[str[i]]\n const binaryChunk = decimalValue.toString(2).padStart(6, '0')\n binaryString += binaryChunk\n }\n\n if (paddingCount > 0) {\n binaryString = binaryString.slice(0, -paddingCount)\n }\n\n let decodedString = ''\n const charSize = 16\n\n for (let i = 0; i < binaryString.length; i += charSize) {\n const byte = binaryString.substring(i, i + charSize)\n if (byte.length === 16) {\n const charCode = parseInt(byte, 2)\n decodedString += String.fromCharCode(charCode)\n }\n }\n\n return decodedString.split(separator)\n}\n",
|
|
6
|
-
"export
|
|
7
|
-
"export
|
|
6
|
+
"export const CLONE_SYMBOL = Symbol('original')\n\nexport default function clone(data: any): any {\n if (typeof data !== 'object' || data === null) {\n return data\n }\n\n const target = (data as any)[CLONE_SYMBOL]\n if (target) {\n return clone(target)\n }\n\n if (Array.isArray(data)) {\n return data.map(clone)\n }\n\n return Object.fromEntries(\n Object.entries(data).map(([key, value]) => [key, clone(value)]),\n )\n}\n",
|
|
7
|
+
"export default function createRemotePromise<T = void>(\n onAwait?: (\n resolve: (value: T) => void,\n reject: (error: any) => void,\n ) => void | Promise<void>,\n) {\n let resolvePromise!: (value: T | PromiseLike<T>) => void\n let rejectPromise!: (reason?: any) => void\n\n const internalPromise = new Promise<T>((resolve, reject) => {\n resolvePromise = resolve\n rejectPromise = reject\n })\n\n let isAwaited = false\n\n const wrappedPromise = new Proxy(internalPromise, {\n get(target, property: keyof PromiseLike<T>) {\n if (\n property === 'then' ||\n property === 'catch' ||\n property === 'finally'\n ) {\n if (!isAwaited && onAwait) {\n isAwaited = true\n onAwait(resolvePromise, rejectPromise)\n }\n return target[property].bind(target)\n }\n\n return target[property]\n },\n })\n\n return Object.assign(wrappedPromise, {\n resolve: resolvePromise,\n reject: rejectPromise,\n promise: wrappedPromise,\n })\n}\n\nexport type RemotePromise<T> = ReturnType<typeof createRemotePromise<T>>\n"
|
|
8
8
|
],
|
|
9
|
-
"mappings": ";;;;AAAA,IAAM,YAAY;AAElB,IAAM,cACJ;AAEF,IAAM,oBAA4C,CAAC;AACnD,SAAS,IAAI,EAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,oBAAkB,YAAY,MAAM;AACtC;AA0CO,SAAS,WAAW,CAAC,KAAa;AACvC,QAAM,eAAe,SAAS,IAAI,MAAM,EAAE,GAAG,EAAE;AAC/C,QAAM,IAAI,MAAM,GAAG,EAAE;AAErB,MAAI,eAAe;AAEnB,WAAS,IAAI,EAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAM,eAAe,kBAAkB,IAAI;AAC3C,UAAM,cAAc,aAAa,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG;AAC5D,oBAAgB;AAAA,EAClB;AAEA,MAAI,eAAe,GAAG;AACpB,mBAAe,aAAa,MAAM,IAAI,YAAY;AAAA,EACpD;AAEA,MAAI,gBAAgB;AACpB,QAAM,WAAW;AAEjB,WAAS,IAAI,EAAG,IAAI,aAAa,QAAQ,KAAK,UAAU;AACtD,UAAM,OAAO,aAAa,UAAU,GAAG,IAAI,QAAQ;AACnD,QAAI,KAAK,WAAW,IAAI;AACtB,YAAM,WAAW,SAAS,MAAM,CAAC;AACjC,uBAAiB,OAAO,aAAa,QAAQ;AAAA,IAC/C;AAAA,EACF;AAEA,SAAO,cAAc,MAAM,SAAS;AAAA
|
|
10
|
-
"debugId": "
|
|
9
|
+
"mappings": ";;;;AAAA,IAAM,YAAY;AAElB,IAAM,cACJ;AAEF,IAAM,oBAA4C,CAAC;AACnD,SAAS,IAAI,EAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,oBAAkB,YAAY,MAAM;AACtC;AA0CO,SAAS,WAAW,CAAC,KAAa;AACvC,QAAM,eAAe,SAAS,IAAI,MAAM,EAAE,GAAG,EAAE;AAC/C,QAAM,IAAI,MAAM,GAAG,EAAE;AAErB,MAAI,eAAe;AAEnB,WAAS,IAAI,EAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAM,eAAe,kBAAkB,IAAI;AAC3C,UAAM,cAAc,aAAa,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG;AAC5D,oBAAgB;AAAA,EAClB;AAEA,MAAI,eAAe,GAAG;AACpB,mBAAe,aAAa,MAAM,IAAI,YAAY;AAAA,EACpD;AAEA,MAAI,gBAAgB;AACpB,QAAM,WAAW;AAEjB,WAAS,IAAI,EAAG,IAAI,aAAa,QAAQ,KAAK,UAAU;AACtD,UAAM,OAAO,aAAa,UAAU,GAAG,IAAI,QAAQ;AACnD,QAAI,KAAK,WAAW,IAAI;AACtB,YAAM,WAAW,SAAS,MAAM,CAAC;AACjC,uBAAiB,OAAO,aAAa,QAAQ;AAAA,IAC/C;AAAA,EACF;AAEA,SAAO,cAAc,MAAM,SAAS;AAAA;;AC7E/B,IAAM,eAAe,OAAO,UAAU;;ACA7C,SAAwB,mBAA6B,CACnD,SAIA;AACA,MAAI;AACJ,MAAI;AAEJ,QAAM,kBAAkB,IAAI,QAAW,CAAC,SAAS,WAAW;AAC1D,qBAAiB;AACjB,oBAAgB;AAAA,GACjB;AAED,MAAI,YAAY;AAEhB,QAAM,iBAAiB,IAAI,MAAM,iBAAiB;AAAA,IAChD,GAAG,CAAC,QAAQ,UAAgC;AAC1C,UACE,aAAa,UACb,aAAa,WACb,aAAa,WACb;AACA,aAAK,aAAa,SAAS;AACzB,sBAAY;AACZ,kBAAQ,gBAAgB,aAAa;AAAA,QACvC;AACA,eAAO,OAAO,UAAU,KAAK,MAAM;AAAA,MACrC;AAEA,aAAO,OAAO;AAAA;AAAA,EAElB,CAAC;AAED,SAAO,OAAO,OAAO,gBAAgB;AAAA,IACnC,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX,CAAC;AAAA;",
|
|
10
|
+
"debugId": "E213FAEB0716353764756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
package/build/cli.js
CHANGED
package/build/index.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createRemotePromise,
|
|
3
3
|
deobfuscate
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-6pjtq0hg.js";
|
|
5
5
|
|
|
6
|
-
// src/
|
|
7
|
-
import { readFileSync } from "node:fs";
|
|
6
|
+
// src/createTask.ts
|
|
8
7
|
import { EventSource } from "eventsource";
|
|
9
|
-
import { z as z2 } from "zod";
|
|
10
8
|
|
|
11
9
|
// src/types.ts
|
|
12
10
|
import { z } from "zod";
|
|
@@ -32,20 +30,21 @@ var nodeInfoSchema = z.discriminatedUnion("type", [
|
|
|
32
30
|
serviceNodeInfoSchema,
|
|
33
31
|
logicNodeInfoSchema
|
|
34
32
|
]);
|
|
35
|
-
var
|
|
36
|
-
type: z.literal("taskStart"),
|
|
33
|
+
var baseUpdate = z.object({
|
|
37
34
|
timestamp: z.coerce.date(),
|
|
35
|
+
taskId: z.string().uuid()
|
|
36
|
+
});
|
|
37
|
+
var taskStartUpdateSchema = baseUpdate.extend({
|
|
38
|
+
type: z.literal("taskStart"),
|
|
38
39
|
input: z.unknown(),
|
|
39
40
|
meta: z.unknown()
|
|
40
41
|
});
|
|
41
|
-
var taskErrorUpdateSchema =
|
|
42
|
+
var taskErrorUpdateSchema = baseUpdate.extend({
|
|
42
43
|
type: z.literal("taskError"),
|
|
43
|
-
timestamp: z.coerce.date(),
|
|
44
44
|
error: z.string()
|
|
45
45
|
});
|
|
46
|
-
var taskEndUpdateSchema =
|
|
46
|
+
var taskEndUpdateSchema = baseUpdate.extend({
|
|
47
47
|
type: z.literal("taskEnd"),
|
|
48
|
-
timestamp: z.coerce.date(),
|
|
49
48
|
result: z.record(z.string(), z.unknown()),
|
|
50
49
|
partialResults: z.array(z.object({
|
|
51
50
|
node: nodeInfoSchema,
|
|
@@ -54,29 +53,24 @@ var taskEndUpdateSchema = z.object({
|
|
|
54
53
|
error: z.string().optional()
|
|
55
54
|
}))
|
|
56
55
|
});
|
|
57
|
-
var nodeStartUpdateSchema =
|
|
56
|
+
var nodeStartUpdateSchema = baseUpdate.extend({
|
|
58
57
|
type: z.literal("nodeStart"),
|
|
59
|
-
timestamp: z.coerce.date(),
|
|
60
58
|
node: nodeInfoSchema
|
|
61
59
|
});
|
|
62
|
-
var nodeUpdateUpdateSchema =
|
|
60
|
+
var nodeUpdateUpdateSchema = baseUpdate.extend({
|
|
63
61
|
type: z.literal("nodeUpdate"),
|
|
64
|
-
timestamp: z.coerce.date(),
|
|
65
62
|
data: z.unknown()
|
|
66
63
|
});
|
|
67
|
-
var nodeErrorUpdateSchema =
|
|
64
|
+
var nodeErrorUpdateSchema = baseUpdate.extend({
|
|
68
65
|
type: z.literal("nodeError"),
|
|
69
|
-
timestamp: z.coerce.date(),
|
|
70
66
|
error: z.string()
|
|
71
67
|
});
|
|
72
|
-
var nodeDeferUpdateSchema =
|
|
68
|
+
var nodeDeferUpdateSchema = baseUpdate.extend({
|
|
73
69
|
type: z.literal("nodeDefer"),
|
|
74
|
-
timestamp: z.coerce.date(),
|
|
75
70
|
reason: z.string().optional()
|
|
76
71
|
});
|
|
77
|
-
var nodeEndUpdateSchema =
|
|
72
|
+
var nodeEndUpdateSchema = baseUpdate.extend({
|
|
78
73
|
type: z.literal("nodeEnd"),
|
|
79
|
-
timestamp: z.coerce.date(),
|
|
80
74
|
node: nodeInfoSchema
|
|
81
75
|
});
|
|
82
76
|
var updateSchema = z.discriminatedUnion("type", [
|
|
@@ -89,6 +83,7 @@ var updateSchema = z.discriminatedUnion("type", [
|
|
|
89
83
|
nodeDeferUpdateSchema,
|
|
90
84
|
nodeEndUpdateSchema
|
|
91
85
|
]);
|
|
86
|
+
var eventSchema = z.object({ type: z.string(), data: z.string() }).transform((event) => ({ type: event.type, ...JSON.parse(event.data) })).pipe(updateSchema);
|
|
92
87
|
|
|
93
88
|
// src/utils/callbackToAsyncIterator.ts
|
|
94
89
|
function callbackToAsyncIterator(options) {
|
|
@@ -119,7 +114,9 @@ function callbackToAsyncIterator(options) {
|
|
|
119
114
|
return { value: undefined, done: true };
|
|
120
115
|
}
|
|
121
116
|
const value = await pullValue();
|
|
122
|
-
|
|
117
|
+
if (options.done) {
|
|
118
|
+
done = options.done(value);
|
|
119
|
+
}
|
|
123
120
|
return { value, done: false };
|
|
124
121
|
},
|
|
125
122
|
async return() {
|
|
@@ -131,30 +128,38 @@ function callbackToAsyncIterator(options) {
|
|
|
131
128
|
};
|
|
132
129
|
}
|
|
133
130
|
|
|
134
|
-
// src/
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
this.taskTemplate = taskTemplate;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
var eventSchema = z2.object({ type: z2.string(), data: z2.string() }).transform((event) => ({ type: event.type, ...JSON.parse(event.data) })).pipe(updateSchema);
|
|
143
|
-
function createTask(params, onUpdate) {
|
|
144
|
-
const taskUpdateHandlers = new Set;
|
|
145
|
-
const accessKey = params.accessToken ?? process.env.REQUENCE_ACCESS_TOKEN ?? JSON.parse(readFileSync("package.json", "utf-8")).requence?.accessToken;
|
|
146
|
-
if (!accessKey) {
|
|
131
|
+
// src/utils/getAccessToken.ts
|
|
132
|
+
import { readFileSync } from "node:fs";
|
|
133
|
+
function getAccessToken(accessToken) {
|
|
134
|
+
const token = accessToken ?? process.env.REQUENCE_ACCESS_TOKEN ?? JSON.parse(readFileSync("package.json", "utf-8")).requence?.accessToken;
|
|
135
|
+
if (!token) {
|
|
147
136
|
throw new Error(`No access token found
|
|
148
137
|
You can provide the access token as argument to createTask,
|
|
149
138
|
as environment variable REQUENCE_ACCESS_TOKEN or
|
|
150
139
|
in your package.json in requence.accessToken`);
|
|
151
140
|
}
|
|
152
|
-
const parts = deobfuscate(
|
|
141
|
+
const parts = deobfuscate(token);
|
|
153
142
|
if (parts.length < 2 || parts[0] !== "api") {
|
|
154
143
|
throw new Error("Invalid api key");
|
|
155
144
|
}
|
|
156
|
-
|
|
157
|
-
|
|
145
|
+
return {
|
|
146
|
+
token: parts[1],
|
|
147
|
+
apiBaseUrl: parts[2]
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// src/createTask.ts
|
|
152
|
+
class TaskError extends Error {
|
|
153
|
+
taskTemplate;
|
|
154
|
+
constructor(message, taskTemplate) {
|
|
155
|
+
super(message);
|
|
156
|
+
this.taskTemplate = taskTemplate;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function createTask(options, onUpdate) {
|
|
160
|
+
const taskUpdateHandlers = new Set;
|
|
161
|
+
const { apiBaseUrl, token } = getAccessToken(options.accessToken);
|
|
162
|
+
const startUrl = `${apiBaseUrl}/task/start/${options.taskTemplate}`;
|
|
158
163
|
const payloadPromise = createRemotePromise();
|
|
159
164
|
let isMonitoring = false;
|
|
160
165
|
const startMonitoring = async () => {
|
|
@@ -163,6 +168,23 @@ in your package.json in requence.accessToken`);
|
|
|
163
168
|
}
|
|
164
169
|
isMonitoring = true;
|
|
165
170
|
const payload = await payloadPromise;
|
|
171
|
+
if (!payload.urls) {
|
|
172
|
+
resultPromise.resolve({
|
|
173
|
+
getInput() {
|
|
174
|
+
return input;
|
|
175
|
+
},
|
|
176
|
+
getMeta() {
|
|
177
|
+
return meta;
|
|
178
|
+
},
|
|
179
|
+
getError(_alias) {
|
|
180
|
+
return null;
|
|
181
|
+
},
|
|
182
|
+
getData(_alias) {
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
166
188
|
const eventSource = new EventSource(payload.urls.watch, {
|
|
167
189
|
fetch: (input2, init) => fetch(input2, {
|
|
168
190
|
...init,
|
|
@@ -188,7 +210,7 @@ in your package.json in requence.accessToken`);
|
|
|
188
210
|
const updateResult = eventSchema.safeParse(event);
|
|
189
211
|
if (!updateResult.success) {
|
|
190
212
|
eventSource.close();
|
|
191
|
-
resultPromise.reject(new TaskError(`Invalid ${taskEvent} update received`,
|
|
213
|
+
resultPromise.reject(new TaskError(`Invalid ${taskEvent} update received`, options.taskTemplate));
|
|
192
214
|
return;
|
|
193
215
|
}
|
|
194
216
|
const update = updateResult.data;
|
|
@@ -220,7 +242,7 @@ in your package.json in requence.accessToken`);
|
|
|
220
242
|
});
|
|
221
243
|
}
|
|
222
244
|
if (update.type === "taskError") {
|
|
223
|
-
resultPromise.reject(new TaskError(update.error,
|
|
245
|
+
resultPromise.reject(new TaskError(update.error, options.taskTemplate));
|
|
224
246
|
}
|
|
225
247
|
taskUpdateHandlers.forEach((handler) => handler(update));
|
|
226
248
|
});
|
|
@@ -236,10 +258,10 @@ in your package.json in requence.accessToken`);
|
|
|
236
258
|
"Content-Type": "application/json",
|
|
237
259
|
Authorization: `Bearer ${token}`
|
|
238
260
|
},
|
|
239
|
-
body: JSON.stringify({ input:
|
|
261
|
+
body: JSON.stringify({ input: options.input, meta: options.meta })
|
|
240
262
|
});
|
|
241
263
|
if (!response.ok) {
|
|
242
|
-
const error = new TaskError(await response.text(),
|
|
264
|
+
const error = new TaskError(await response.text(), options.taskTemplate);
|
|
243
265
|
taskIdPromise.reject(error);
|
|
244
266
|
resultPromise.reject(error);
|
|
245
267
|
return;
|
|
@@ -256,6 +278,9 @@ in your package.json in requence.accessToken`);
|
|
|
256
278
|
subscribe: (push) => {
|
|
257
279
|
taskUpdateHandlers.add(push);
|
|
258
280
|
startMonitoring();
|
|
281
|
+
return () => {
|
|
282
|
+
taskUpdateHandlers.delete(push);
|
|
283
|
+
};
|
|
259
284
|
},
|
|
260
285
|
done: (value) => value.type === "taskError" || value.type === "taskEnd"
|
|
261
286
|
});
|
|
@@ -265,10 +290,61 @@ in your package.json in requence.accessToken`);
|
|
|
265
290
|
}
|
|
266
291
|
});
|
|
267
292
|
}
|
|
293
|
+
// src/watchTasks.ts
|
|
294
|
+
import { EventSource as EventSource2 } from "eventsource";
|
|
295
|
+
function watchTasks(options) {
|
|
296
|
+
const { apiBaseUrl, token } = getAccessToken(options.accessToken);
|
|
297
|
+
const taskUpdateHandlers = new Set;
|
|
298
|
+
if (options.onUpdate) {
|
|
299
|
+
taskUpdateHandlers.add(options.onUpdate);
|
|
300
|
+
}
|
|
301
|
+
const watchUrl = new URL(`${apiBaseUrl}/task/watch-all`);
|
|
302
|
+
watchUrl.searchParams.set("since", options.since.toISOString());
|
|
303
|
+
const eventSource = new EventSource2(watchUrl, {
|
|
304
|
+
fetch: (input, init) => fetch(input, {
|
|
305
|
+
...init,
|
|
306
|
+
headers: {
|
|
307
|
+
Authorization: `Bearer ${token}`
|
|
308
|
+
}
|
|
309
|
+
})
|
|
310
|
+
});
|
|
311
|
+
const asyncIterable = callbackToAsyncIterator({
|
|
312
|
+
subscribe: (push) => {
|
|
313
|
+
taskUpdateHandlers.add(push);
|
|
314
|
+
return () => {
|
|
315
|
+
taskUpdateHandlers.delete(push);
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
const taskEvents = [
|
|
320
|
+
"taskStart",
|
|
321
|
+
"taskError",
|
|
322
|
+
"taskEnd",
|
|
323
|
+
"nodeStart",
|
|
324
|
+
"nodeUpdate",
|
|
325
|
+
"nodeDefer",
|
|
326
|
+
"nodeError",
|
|
327
|
+
"nodeEnd"
|
|
328
|
+
];
|
|
329
|
+
taskEvents.forEach((taskEvent) => {
|
|
330
|
+
eventSource.addEventListener(taskEvent, (event) => {
|
|
331
|
+
const updateResult = eventSchema.safeParse(event);
|
|
332
|
+
if (!updateResult.success) {
|
|
333
|
+
eventSource.close();
|
|
334
|
+
throw new Error("invalid update");
|
|
335
|
+
}
|
|
336
|
+
taskUpdateHandlers.forEach((handler) => handler(updateResult.data));
|
|
337
|
+
});
|
|
338
|
+
});
|
|
339
|
+
const stopWatching = () => {
|
|
340
|
+
eventSource.close();
|
|
341
|
+
};
|
|
342
|
+
return Object.assign(stopWatching, asyncIterable);
|
|
343
|
+
}
|
|
268
344
|
export {
|
|
269
|
-
|
|
270
|
-
|
|
345
|
+
watchTasks,
|
|
346
|
+
createTask
|
|
271
347
|
};
|
|
272
348
|
|
|
273
|
-
//# debugId=
|
|
349
|
+
//# debugId=13556CDD3F92A75464756E2164756E21
|
|
274
350
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/
|
|
3
|
+
"sources": ["../src/createTask.ts", "../src/types.ts", "../src/utils/callbackToAsyncIterator.ts", "../src/utils/getAccessToken.ts", "../src/watchTasks.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import {
|
|
6
|
-
"import { z } from 'zod'\n\ntype Prettify<T> = {\n [K in keyof T]: T[K]\n} & {}\n\ntype IfUnknown<T, Then, Else> = unknown extends T\n ? T extends unknown\n ? Then\n : Else\n : Else\n\ntype IfNull<T, Then, Else> = T extends null\n ? null extends T\n ? Then\n : Else\n : Else\n\nexport type CreateTaskOptions<T> = {\n taskTemplate: T\n accessToken?: string\n} & IfNull<\n Input<T>,\n { input?: null },\n IfUnknown<Input<T>, { input?: any }, { input: Input<T> }>\n> &\n IfNull<\n Meta<T>,\n { meta?: null },\n IfUnknown<Meta<T>, { meta?: any }, { meta: Meta<T> }>\n >\n\ntype Input<T> = T extends keyof Requence.TaskTemplate\n ? Requence.TaskTemplate[T]['input']\n : unknown\ntype Meta<T> = T extends keyof Requence.TaskTemplate\n ? Requence.TaskTemplate[T]['meta']\n : unknown\ntype Data<T> = T extends keyof Requence.TaskTemplate\n ? Prettify<Requence.TaskTemplate[T]['results']>\n : unknown\ntype NamedData<T, A> = T extends keyof Requence.TaskTemplate\n ? A extends keyof Requence.TaskTemplate[T]['namedResults']\n ? Prettify<Requence.TaskTemplate[T]['namedResults'][A]>\n : unknown\n : unknown\ntype Alias<T> = T extends keyof Requence.TaskTemplate\n ? keyof Requence.TaskTemplate[T]['namedResults']\n : string\n\nexport interface Result<T> {\n getInput(): Input<T>\n getMeta(): Meta<T>\n getData: {\n (): Data<T>\n <A extends Alias<T>>(alias: A): NamedData<T, A>\n }\n getError(alias: Alias<T>): string | null\n}\n\nconst serviceNodeInfoSchema = z.object({\n id: z.string().uuid(),\n type: z.literal('service'),\n alias: z.string().optional(),\n service: z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n version: z.string(),\n })\n .optional(),\n})\n\nconst logicNodeInfoSchema = z.object({\n id: z.string().uuid(),\n type: z.literal('logic'),\n alias: z.string().optional(),\n logic: z\n .object({\n language: z.enum(['typescript', 'javascript', 'python']),\n })\n .optional(),\n})\n\nconst nodeInfoSchema = z.discriminatedUnion('type', [\n serviceNodeInfoSchema,\n logicNodeInfoSchema,\n])\n\nconst
|
|
7
|
-
"export default function callbackToAsyncIterator<T>(options: {\n subscribe: (push: (value: T) => void) => void | (() => void)\n done
|
|
5
|
+
"import { createRemotePromise } from '@requence/helpers'\nimport { EventSource } from 'eventsource'\n\nimport {\n type CreateTaskOptions,\n type Result,\n type Update,\n eventSchema,\n} from './types.ts'\nimport callbackToAsyncIterator from './utils/callbackToAsyncIterator.ts'\nimport getAccessToken from './utils/getAccessToken.ts'\n\nexport class TaskError extends Error {\n constructor(\n message: string,\n public readonly taskTemplate: string,\n ) {\n super(message)\n }\n}\n\ntype TaskUpdateHandler = (update: Update) => void\n\nexport function createTask<\n T extends keyof Requence.TaskTemplate | (string & {}),\n>(options: CreateTaskOptions<T>, onUpdate?: TaskUpdateHandler) {\n const taskUpdateHandlers = new Set<TaskUpdateHandler>()\n\n const { apiBaseUrl, token } = getAccessToken(options.accessToken)\n\n const startUrl = `${apiBaseUrl}/task/start/${options.taskTemplate}`\n\n const payloadPromise = createRemotePromise<{\n id: string\n urls?: { watch: string }\n }>()\n\n let isMonitoring = false\n const startMonitoring = async () => {\n if (isMonitoring) {\n return\n }\n\n isMonitoring = true\n const payload = await payloadPromise\n\n if (!payload.urls) {\n resultPromise.resolve({\n getInput() {\n return input\n },\n getMeta() {\n return meta\n },\n getError(_alias) {\n return null\n },\n getData(_alias) {\n return null\n },\n } as Result<T>)\n return\n }\n\n const eventSource = new EventSource(payload.urls.watch, {\n fetch: (input, init) =>\n fetch(input, {\n ...init,\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }),\n })\n\n const taskEvents: Array<Update['type']> = [\n 'taskStart',\n 'taskError',\n 'taskEnd',\n 'nodeStart',\n 'nodeUpdate',\n 'nodeDefer',\n 'nodeError',\n 'nodeEnd',\n ]\n\n let input: unknown = null\n let meta: unknown = null\n taskEvents.forEach((taskEvent) => {\n eventSource.addEventListener(taskEvent, (event) => {\n const updateResult = eventSchema.safeParse(event)\n\n if (!updateResult.success) {\n eventSource.close()\n resultPromise.reject(\n new TaskError(\n `Invalid ${taskEvent} update received`,\n options.taskTemplate,\n ),\n )\n return\n }\n\n const update = updateResult.data\n\n if (update.type === 'taskEnd' || update.type === 'taskError') {\n eventSource.close()\n }\n\n if (update.type === 'taskStart') {\n input = update.input\n meta = update.meta\n }\n\n if (update.type === 'taskEnd') {\n const getPartialResult = (alias: string) =>\n update.partialResults.find(\n (partialResult) => partialResult.node.alias === alias,\n )\n\n resultPromise.resolve({\n getInput() {\n return input\n },\n getMeta() {\n return meta\n },\n getError(alias) {\n return getPartialResult(alias)?.error ?? null\n },\n getData(alias) {\n if (!alias) {\n return update.result\n }\n\n return getPartialResult(alias)?.data ?? null\n },\n } as Result<T>)\n }\n\n if (update.type === 'taskError') {\n resultPromise.reject(\n new TaskError(update.error, options.taskTemplate),\n )\n }\n\n taskUpdateHandlers.forEach((handler) => handler(update))\n })\n })\n }\n\n const taskIdPromise = createRemotePromise<string>()\n const resultPromise = createRemotePromise<Result<T>>(startMonitoring)\n\n ;(async () => {\n const response = await fetch(startUrl, {\n method: 'post',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({ input: options.input, meta: options.meta }),\n })\n\n if (!response.ok) {\n const error = new TaskError(await response.text(), options.taskTemplate)\n taskIdPromise.reject(error)\n resultPromise.reject(error)\n return\n }\n\n const payload = await response.json()\n taskIdPromise.resolve(payload.id)\n payloadPromise.resolve(payload)\n if (onUpdate) {\n taskUpdateHandlers.add(onUpdate)\n startMonitoring()\n }\n })()\n\n const asyncIterable = callbackToAsyncIterator<Update>({\n subscribe: (push) => {\n taskUpdateHandlers.add(push)\n startMonitoring()\n\n return () => {\n taskUpdateHandlers.delete(push)\n }\n },\n done: (value) => value.type === 'taskError' || value.type === 'taskEnd',\n })\n\n return Object.assign(resultPromise.promise, asyncIterable, {\n getTaskId() {\n return taskIdPromise\n },\n })\n}\n",
|
|
6
|
+
"import { z } from 'zod'\n\ntype Prettify<T> = {\n [K in keyof T]: T[K]\n} & {}\n\ntype IfUnknown<T, Then, Else> = unknown extends T\n ? T extends unknown\n ? Then\n : Else\n : Else\n\ntype IfNull<T, Then, Else> = T extends null\n ? null extends T\n ? Then\n : Else\n : Else\n\nexport type CreateTaskOptions<T> = {\n taskTemplate: T\n accessToken?: string\n} & IfNull<\n Input<T>,\n { input?: null },\n IfUnknown<Input<T>, { input?: any }, { input: Input<T> }>\n> &\n IfNull<\n Meta<T>,\n { meta?: null },\n IfUnknown<Meta<T>, { meta?: any }, { meta: Meta<T> }>\n >\n\ntype Input<T> = T extends keyof Requence.TaskTemplate\n ? Requence.TaskTemplate[T]['input']\n : unknown\ntype Meta<T> = T extends keyof Requence.TaskTemplate\n ? Requence.TaskTemplate[T]['meta']\n : unknown\ntype Data<T> = T extends keyof Requence.TaskTemplate\n ? Prettify<Requence.TaskTemplate[T]['results']>\n : unknown\ntype NamedData<T, A> = T extends keyof Requence.TaskTemplate\n ? A extends keyof Requence.TaskTemplate[T]['namedResults']\n ? Prettify<Requence.TaskTemplate[T]['namedResults'][A]>\n : unknown\n : unknown\ntype Alias<T> = T extends keyof Requence.TaskTemplate\n ? keyof Requence.TaskTemplate[T]['namedResults']\n : string\n\nexport interface Result<T> {\n getInput(): Input<T>\n getMeta(): Meta<T>\n getData: {\n (): Data<T>\n <A extends Alias<T>>(alias: A): NamedData<T, A>\n }\n getError(alias: Alias<T>): string | null\n}\n\nconst serviceNodeInfoSchema = z.object({\n id: z.string().uuid(),\n type: z.literal('service'),\n alias: z.string().optional(),\n service: z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n version: z.string(),\n })\n .optional(),\n})\n\nconst logicNodeInfoSchema = z.object({\n id: z.string().uuid(),\n type: z.literal('logic'),\n alias: z.string().optional(),\n logic: z\n .object({\n language: z.enum(['typescript', 'javascript', 'python']),\n })\n .optional(),\n})\n\nconst nodeInfoSchema = z.discriminatedUnion('type', [\n serviceNodeInfoSchema,\n logicNodeInfoSchema,\n])\n\nconst baseUpdate = z.object({\n timestamp: z.coerce.date(),\n taskId: z.string().uuid(),\n})\n\nconst taskStartUpdateSchema = baseUpdate.extend({\n type: z.literal('taskStart'),\n input: z.unknown(),\n meta: z.unknown(),\n})\n\nconst taskErrorUpdateSchema = baseUpdate.extend({\n type: z.literal('taskError'),\n error: z.string(),\n})\n\nconst taskEndUpdateSchema = baseUpdate.extend({\n type: z.literal('taskEnd'),\n result: z.record(z.string(), z.unknown()),\n partialResults: z.array(\n z.object({\n node: nodeInfoSchema,\n timestamp: z.coerce.date().nullable(),\n data: z.unknown(),\n error: z.string().optional(),\n }),\n ),\n})\n\nconst nodeStartUpdateSchema = baseUpdate.extend({\n type: z.literal('nodeStart'),\n node: nodeInfoSchema,\n})\n\nconst nodeUpdateUpdateSchema = baseUpdate.extend({\n type: z.literal('nodeUpdate'),\n data: z.unknown(),\n})\n\nconst nodeErrorUpdateSchema = baseUpdate.extend({\n type: z.literal('nodeError'),\n error: z.string(),\n})\n\nconst nodeDeferUpdateSchema = baseUpdate.extend({\n type: z.literal('nodeDefer'),\n reason: z.string().optional(),\n})\n\nconst nodeEndUpdateSchema = baseUpdate.extend({\n type: z.literal('nodeEnd'),\n node: nodeInfoSchema,\n})\n\nexport const updateSchema = z.discriminatedUnion('type', [\n taskStartUpdateSchema,\n taskErrorUpdateSchema,\n taskEndUpdateSchema,\n nodeStartUpdateSchema,\n nodeUpdateUpdateSchema,\n nodeErrorUpdateSchema,\n nodeDeferUpdateSchema,\n nodeEndUpdateSchema,\n])\n\nexport type Update = z.infer<typeof updateSchema>\n\nexport const eventSchema = z\n .object({ type: z.string(), data: z.string() })\n .transform((event) => ({ type: event.type, ...JSON.parse(event.data) }))\n .pipe(updateSchema)\n",
|
|
7
|
+
"export default function callbackToAsyncIterator<T>(options: {\n subscribe: (push: (value: T) => void) => void | (() => void)\n done?: (value: T) => boolean\n}): AsyncIterable<T> {\n const pullQueue: Array<(value: T) => void> = []\n const pushQueue: Array<T> = []\n\n const pushValue = (value: T) => {\n if (pullQueue.length !== 0) {\n const resolver = pullQueue.shift()\n resolver!(value)\n } else {\n pushQueue.push(value)\n }\n }\n\n const pullValue = () =>\n new Promise<T>((resolve) => {\n if (pushQueue.length !== 0) {\n resolve(pushQueue.shift()!)\n } else {\n pullQueue.push(resolve)\n }\n })\n\n return {\n [Symbol.asyncIterator]() {\n let done = false\n const unsubscribe = options.subscribe(pushValue)\n return {\n async next() {\n if (done) {\n return { value: undefined, done: true }\n }\n\n const value = await pullValue()\n if (options.done) {\n done = options.done(value)\n }\n return { value, done: false }\n },\n async return() {\n unsubscribe?.()\n return { value: undefined, done: true }\n },\n }\n },\n }\n}\n",
|
|
8
|
+
"import { readFileSync } from 'node:fs'\n\nimport { deobfuscate } from '@requence/helpers'\n\nexport default function getAccessToken(accessToken?: string) {\n const token =\n accessToken ??\n process.env.REQUENCE_ACCESS_TOKEN ??\n (JSON.parse(readFileSync('package.json', 'utf-8')) as any).requence\n ?.accessToken\n\n if (!token) {\n throw new Error(\n 'No access token found\\nYou can provide the access token as argument to createTask,\\nas environment variable REQUENCE_ACCESS_TOKEN or\\nin your package.json in requence.accessToken',\n )\n }\n\n const parts = deobfuscate(token)\n if (parts.length < 2 || parts[0] !== 'api') {\n throw new Error('Invalid api key')\n }\n\n return {\n token: parts[1],\n apiBaseUrl: parts[2],\n }\n}\n",
|
|
9
|
+
"import { EventSource } from 'eventsource'\n\nimport { type Update, eventSchema } from './types.ts'\nimport callbackToAsyncIterator from './utils/callbackToAsyncIterator.ts'\nimport getAccessToken from './utils/getAccessToken.ts'\n\ntype TaskUpdateHandler = (update: Update) => void\n\ninterface WatchTasksOptions {\n accessToken?: string\n since: Date\n onUpdate?: TaskUpdateHandler\n}\nexport function watchTasks(options: WatchTasksOptions) {\n const { apiBaseUrl, token } = getAccessToken(options.accessToken)\n const taskUpdateHandlers = new Set<TaskUpdateHandler>()\n\n if (options.onUpdate) {\n taskUpdateHandlers.add(options.onUpdate)\n }\n\n const watchUrl = new URL(`${apiBaseUrl}/task/watch-all`)\n watchUrl.searchParams.set('since', options.since.toISOString())\n\n const eventSource = new EventSource(watchUrl, {\n fetch: (input, init) =>\n fetch(input, {\n ...init,\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }),\n })\n\n const asyncIterable = callbackToAsyncIterator<Update>({\n subscribe: (push) => {\n taskUpdateHandlers.add(push)\n return () => {\n taskUpdateHandlers.delete(push)\n }\n },\n })\n\n const taskEvents: Array<Update['type']> = [\n 'taskStart',\n 'taskError',\n 'taskEnd',\n 'nodeStart',\n 'nodeUpdate',\n 'nodeDefer',\n 'nodeError',\n 'nodeEnd',\n ]\n\n taskEvents.forEach((taskEvent) => {\n eventSource.addEventListener(taskEvent, (event) => {\n const updateResult = eventSchema.safeParse(event)\n\n if (!updateResult.success) {\n eventSource.close()\n throw new Error('invalid update')\n }\n\n taskUpdateHandlers.forEach((handler) => handler(updateResult.data))\n })\n })\n\n const stopWatching = () => {\n eventSource.close()\n }\n\n return Object.assign(stopWatching, asyncIterable)\n}\n"
|
|
8
10
|
],
|
|
9
|
-
"mappings": ";;;;;;
|
|
10
|
-
"debugId": "
|
|
11
|
+
"mappings": "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",
|
|
12
|
+
"debugId": "13556CDD3F92A75464756E2164756E21",
|
|
11
13
|
"names": []
|
|
12
14
|
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { type CreateTaskOptions, type Result, type Update } from './types.ts';
|
|
2
|
+
export declare class TaskError extends Error {
|
|
3
|
+
readonly taskTemplate: string;
|
|
4
|
+
constructor(message: string, taskTemplate: string);
|
|
5
|
+
}
|
|
6
|
+
type TaskUpdateHandler = (update: Update) => void;
|
|
7
|
+
export declare function createTask<T extends keyof Requence.TaskTemplate | (string & {})>(options: CreateTaskOptions<T>, onUpdate?: TaskUpdateHandler): Promise<Result<T>> & AsyncIterable<{
|
|
8
|
+
type: "taskStart";
|
|
9
|
+
timestamp: Date;
|
|
10
|
+
taskId: string;
|
|
11
|
+
input?: unknown;
|
|
12
|
+
meta?: unknown;
|
|
13
|
+
} | {
|
|
14
|
+
type: "taskError";
|
|
15
|
+
timestamp: Date;
|
|
16
|
+
taskId: string;
|
|
17
|
+
error: string;
|
|
18
|
+
} | {
|
|
19
|
+
type: "taskEnd";
|
|
20
|
+
timestamp: Date;
|
|
21
|
+
taskId: string;
|
|
22
|
+
result: Record<string, unknown>;
|
|
23
|
+
partialResults: {
|
|
24
|
+
timestamp: Date | null;
|
|
25
|
+
node: {
|
|
26
|
+
type: "service";
|
|
27
|
+
id: string;
|
|
28
|
+
service?: {
|
|
29
|
+
id: string;
|
|
30
|
+
name: string;
|
|
31
|
+
version: string;
|
|
32
|
+
} | undefined;
|
|
33
|
+
alias?: string | undefined;
|
|
34
|
+
} | {
|
|
35
|
+
type: "logic";
|
|
36
|
+
id: string;
|
|
37
|
+
alias?: string | undefined;
|
|
38
|
+
logic?: {
|
|
39
|
+
language: "typescript" | "javascript" | "python";
|
|
40
|
+
} | undefined;
|
|
41
|
+
};
|
|
42
|
+
error?: string | undefined;
|
|
43
|
+
data?: unknown;
|
|
44
|
+
}[];
|
|
45
|
+
} | {
|
|
46
|
+
type: "nodeStart";
|
|
47
|
+
timestamp: Date;
|
|
48
|
+
taskId: string;
|
|
49
|
+
node: {
|
|
50
|
+
type: "service";
|
|
51
|
+
id: string;
|
|
52
|
+
service?: {
|
|
53
|
+
id: string;
|
|
54
|
+
name: string;
|
|
55
|
+
version: string;
|
|
56
|
+
} | undefined;
|
|
57
|
+
alias?: string | undefined;
|
|
58
|
+
} | {
|
|
59
|
+
type: "logic";
|
|
60
|
+
id: string;
|
|
61
|
+
alias?: string | undefined;
|
|
62
|
+
logic?: {
|
|
63
|
+
language: "typescript" | "javascript" | "python";
|
|
64
|
+
} | undefined;
|
|
65
|
+
};
|
|
66
|
+
} | {
|
|
67
|
+
type: "nodeUpdate";
|
|
68
|
+
timestamp: Date;
|
|
69
|
+
taskId: string;
|
|
70
|
+
data?: unknown;
|
|
71
|
+
} | {
|
|
72
|
+
type: "nodeError";
|
|
73
|
+
timestamp: Date;
|
|
74
|
+
taskId: string;
|
|
75
|
+
error: string;
|
|
76
|
+
} | {
|
|
77
|
+
type: "nodeDefer";
|
|
78
|
+
timestamp: Date;
|
|
79
|
+
taskId: string;
|
|
80
|
+
reason?: string | undefined;
|
|
81
|
+
} | {
|
|
82
|
+
type: "nodeEnd";
|
|
83
|
+
timestamp: Date;
|
|
84
|
+
taskId: string;
|
|
85
|
+
node: {
|
|
86
|
+
type: "service";
|
|
87
|
+
id: string;
|
|
88
|
+
service?: {
|
|
89
|
+
id: string;
|
|
90
|
+
name: string;
|
|
91
|
+
version: string;
|
|
92
|
+
} | undefined;
|
|
93
|
+
alias?: string | undefined;
|
|
94
|
+
} | {
|
|
95
|
+
type: "logic";
|
|
96
|
+
id: string;
|
|
97
|
+
alias?: string | undefined;
|
|
98
|
+
logic?: {
|
|
99
|
+
language: "typescript" | "javascript" | "python";
|
|
100
|
+
} | undefined;
|
|
101
|
+
};
|
|
102
|
+
}> & {
|
|
103
|
+
getTaskId(): Promise<string> & {
|
|
104
|
+
resolve: (value: string | PromiseLike<string>) => void;
|
|
105
|
+
reject: (reason?: any) => void;
|
|
106
|
+
promise: Promise<string>;
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
export {};
|
|
110
|
+
//# sourceMappingURL=createTask.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTask.d.ts","sourceRoot":"","sources":["../../../../src/createTask.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,MAAM,EACX,KAAK,MAAM,EAEZ,MAAM,YAAY,CAAA;AAInB,qBAAa,SAAU,SAAQ,KAAK;aAGhB,YAAY,EAAE,MAAM;gBADpC,OAAO,EAAE,MAAM,EACC,YAAY,EAAE,MAAM;CAIvC;AAED,KAAK,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;AAEjD,wBAAgB,UAAU,CACxB,CAAC,SAAS,MAAM,QAAQ,CAAC,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,EACrD,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4K5D"}
|