Skip to content

Commit 32955d9

Browse files
committed
Add support for running jobs without waiting
The new Jobs.runStatus method returns a URL that may be polled using the helper Job.poll. This update also includes updated configuration to bundle the library as a EMCAScript module for the browser.
1 parent 12117bc commit 32955d9

File tree

6 files changed

+207
-20
lines changed

6 files changed

+207
-20
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
.nyc_output
2+
dist/
23
lib/
34
node_modules/
45
public/

.npmignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ examples
55
public
66
tsconfig.json
77
tsconfig.cjs.json
8+
bundle.mjs

bundle.mjs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import * as esbuild from "esbuild"
2+
3+
await esbuild.build({
4+
entryPoints: ["lib/metafold.js"],
5+
format: "esm",
6+
bundle: true,
7+
minify: true,
8+
sourcemap: true,
9+
outfile: "dist/metafold.min.js",
10+
})

package.json

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
{
22
"name": "metafold",
3-
"version": "0.1.1",
3+
"version": "0.2.0",
44
"description": "Metafold SDK for Node.js",
55
"main": "lib/metafold.js",
66
"scripts": {
7-
"build": "tsc && cp src/client.d.ts lib",
7+
"build": "tsc",
8+
"postbuild": "cp src/client.d.ts lib",
9+
"prebundle": "yarn build",
10+
"bundle": "node bundle.mjs",
811
"lint": "eslint --ext '.ts' .",
912
"test": "TS_NODE_PROJECT=tsconfig.cjs.json nyc mocha",
10-
"docs": "yarn build && jsdoc -c .jsdoc.json lib"
13+
"predocs": "yarn build",
14+
"docs": "jsdoc -c .jsdoc.json lib"
1115
},
1216
"repository": {
1317
"type": "git",
@@ -31,6 +35,7 @@
3135
"@typescript-eslint/eslint-plugin": "^7.0.1",
3236
"@typescript-eslint/parser": "^7.0.1",
3337
"commander": "^12.0.0",
38+
"esbuild": "^0.20.1",
3439
"eslint": "^8.56.0",
3540
"jsdoc": "^4.0.2",
3641
"minami": "^1.2.3",

src/resources/Jobs.ts

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,10 @@ class Jobs {
108108
name?: string,
109109
timeout: number = 1000 * 60 * 2, // 2 mins
110110
): Promise<Job> {
111-
const data = constructParams({ type, parameters: params, name })
112-
let r: AxiosResponse = await this.client.post(
113-
`/projects/${this.client.projectID}/jobs`, data, {
114-
headers: { "Content-Type": "application/json" },
115-
},
116-
)
111+
const url = await this.runStatus(type, params, name);
112+
let r = null;
117113
try {
118-
r = await this.poll(r.data.link, timeout)
114+
r = await this.poll(url, timeout)
119115
} catch (e) {
120116
if (e instanceof PollTimeout) {
121117
throw new Error(
@@ -129,21 +125,37 @@ class Jobs {
129125
return job(r.data)
130126
}
131127

128+
132129
/**
133-
* Update a job.
130+
* Dispatch a new job and return immediately without waiting for result.
134131
*
135-
* @param {string} id - ID of job to update.
136-
* @param {Object} [params] - Optional update parameters.
137-
* @param {string} [params.name] - New job name. The existing name remains unchanged if undefined.
138-
* @returns Update job resource.
132+
* See Metafold API docs for the full list of jobs.
133+
*
134+
* @param {string} type - Job type.
135+
* @param {Object} params - Job parameters.
136+
* @param {string} [name] - Job name.
137+
* @returns {string} Job status url.
139138
*/
140-
async update(id: string, { name }: { name?: string } = {}): Promise<Job> {
141-
const data = constructParams({ name })
142-
const r = await this.client.patch(`/projects/${this.client.projectID}/jobs/${id}`, data)
143-
return job(r.data)
139+
async runStatus(type: string, params: object, name?: string): Promise<string> {
140+
const data = constructParams({ type, parameters: params, name })
141+
const r: AxiosResponse = await this.client.post(
142+
`/projects/${this.client.projectID}/jobs`, data, {
143+
headers: { "Content-Type": "application/json" },
144+
},
145+
)
146+
return r.data.link;
144147
}
145148

146-
private poll(url: string, timeout: number): AxiosPromise {
149+
/**
150+
* Poll the given URL every one second.
151+
*
152+
* Helpful for waiting on job results given a status URL.
153+
*
154+
* @param {string} url - Job status url.
155+
* @param {number} [timeout=12000] - Time in seconds to wait for a result.
156+
* @returns Completed job resource.
157+
*/
158+
poll(url: string, timeout: number = 1000 * 60 * 2): AxiosPromise {
147159
return new Promise((resolve, reject) => {
148160
/* eslint-disable prefer-const */
149161
let intervalID: Timeout
@@ -176,5 +188,19 @@ class Jobs {
176188
}, timeout)
177189
})
178190
}
191+
192+
/**
193+
* Update a job.
194+
*
195+
* @param {string} id - ID of job to update.
196+
* @param {Object} [params] - Optional update parameters.
197+
* @param {string} [params.name] - New job name. The existing name remains unchanged if undefined.
198+
* @returns Update job resource.
199+
*/
200+
async update(id: string, { name }: { name?: string } = {}): Promise<Job> {
201+
const data = constructParams({ name })
202+
const r = await this.client.patch(`/projects/${this.client.projectID}/jobs/${id}`, data)
203+
return job(r.data)
204+
}
179205
}
180206
module.exports = Jobs

yarn.lock

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,121 @@
201201
dependencies:
202202
"@jridgewell/trace-mapping" "0.3.9"
203203

204+
"@esbuild/[email protected]":
205+
version "0.20.1"
206+
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz#eafa8775019b3650a77e8310ba4dbd17ca7af6d5"
207+
integrity sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==
208+
209+
"@esbuild/[email protected]":
210+
version "0.20.1"
211+
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz#68791afa389550736f682c15b963a4f37ec2f5f6"
212+
integrity sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==
213+
214+
"@esbuild/[email protected]":
215+
version "0.20.1"
216+
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.1.tgz#38c91d8ee8d5196f7fbbdf4f0061415dde3a473a"
217+
integrity sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==
218+
219+
"@esbuild/[email protected]":
220+
version "0.20.1"
221+
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.1.tgz#93f6190ce997b313669c20edbf3645fc6c8d8f22"
222+
integrity sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==
223+
224+
"@esbuild/[email protected]":
225+
version "0.20.1"
226+
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz#0d391f2e81fda833fe609182cc2fbb65e03a3c46"
227+
integrity sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==
228+
229+
"@esbuild/[email protected]":
230+
version "0.20.1"
231+
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz#92504077424584684862f483a2242cfde4055ba2"
232+
integrity sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==
233+
234+
"@esbuild/[email protected]":
235+
version "0.20.1"
236+
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz#a1646fa6ba87029c67ac8a102bb34384b9290774"
237+
integrity sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==
238+
239+
"@esbuild/[email protected]":
240+
version "0.20.1"
241+
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz#41c9243ab2b3254ea7fb512f71ffdb341562e951"
242+
integrity sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==
243+
244+
"@esbuild/[email protected]":
245+
version "0.20.1"
246+
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz#f3c1e1269fbc9eedd9591a5bdd32bf707a883156"
247+
integrity sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==
248+
249+
"@esbuild/[email protected]":
250+
version "0.20.1"
251+
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz#4503ca7001a8ee99589c072801ce9d7540717a21"
252+
integrity sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==
253+
254+
"@esbuild/[email protected]":
255+
version "0.20.1"
256+
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz#98c474e3e0cbb5bcbdd8561a6e65d18f5767ce48"
257+
integrity sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==
258+
259+
"@esbuild/[email protected]":
260+
version "0.20.1"
261+
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz#a8097d28d14b9165c725fe58fc438f80decd2f33"
262+
integrity sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==
263+
264+
"@esbuild/[email protected]":
265+
version "0.20.1"
266+
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz#c44f6f0d7d017c41ad3bb15bfdb69b690656b5ea"
267+
integrity sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==
268+
269+
"@esbuild/[email protected]":
270+
version "0.20.1"
271+
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz#0765a55389a99237b3c84227948c6e47eba96f0d"
272+
integrity sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==
273+
274+
"@esbuild/[email protected]":
275+
version "0.20.1"
276+
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz#e4153b032288e3095ddf4c8be07893781b309a7e"
277+
integrity sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==
278+
279+
"@esbuild/[email protected]":
280+
version "0.20.1"
281+
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz#b9ab8af6e4b73b26d63c1c426d7669a5d53eb5a7"
282+
integrity sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==
283+
284+
"@esbuild/[email protected]":
285+
version "0.20.1"
286+
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz#0b25da17ac38c3e11cdd06ca3691d4d6bef2755f"
287+
integrity sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==
288+
289+
"@esbuild/[email protected]":
290+
version "0.20.1"
291+
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz#3148e48406cd0d4f7ba1e0bf3f4d77d548c98407"
292+
integrity sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==
293+
294+
"@esbuild/[email protected]":
295+
version "0.20.1"
296+
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz#7b73e852986a9750192626d377ac96ac2b749b76"
297+
integrity sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==
298+
299+
"@esbuild/[email protected]":
300+
version "0.20.1"
301+
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz#402a441cdac2eee98d8be378c7bc23e00c1861c5"
302+
integrity sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==
303+
304+
"@esbuild/[email protected]":
305+
version "0.20.1"
306+
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz#36c4e311085806a6a0c5fc54d1ac4d7b27e94d7b"
307+
integrity sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==
308+
309+
"@esbuild/[email protected]":
310+
version "0.20.1"
311+
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz#0cf933be3fb9dc58b45d149559fe03e9e22b54fe"
312+
integrity sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==
313+
314+
"@esbuild/[email protected]":
315+
version "0.20.1"
316+
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz#77583b6ea54cee7c1410ebbd54051b6a3fcbd8ba"
317+
integrity sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==
318+
204319
"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
205320
version "4.4.0"
206321
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
@@ -892,6 +1007,35 @@ es6-error@^4.0.1:
8921007
resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
8931008
integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
8941009

1010+
esbuild@^0.20.1:
1011+
version "0.20.1"
1012+
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.1.tgz#1e4cbb380ad1959db7609cb9573ee77257724a3e"
1013+
integrity sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==
1014+
optionalDependencies:
1015+
"@esbuild/aix-ppc64" "0.20.1"
1016+
"@esbuild/android-arm" "0.20.1"
1017+
"@esbuild/android-arm64" "0.20.1"
1018+
"@esbuild/android-x64" "0.20.1"
1019+
"@esbuild/darwin-arm64" "0.20.1"
1020+
"@esbuild/darwin-x64" "0.20.1"
1021+
"@esbuild/freebsd-arm64" "0.20.1"
1022+
"@esbuild/freebsd-x64" "0.20.1"
1023+
"@esbuild/linux-arm" "0.20.1"
1024+
"@esbuild/linux-arm64" "0.20.1"
1025+
"@esbuild/linux-ia32" "0.20.1"
1026+
"@esbuild/linux-loong64" "0.20.1"
1027+
"@esbuild/linux-mips64el" "0.20.1"
1028+
"@esbuild/linux-ppc64" "0.20.1"
1029+
"@esbuild/linux-riscv64" "0.20.1"
1030+
"@esbuild/linux-s390x" "0.20.1"
1031+
"@esbuild/linux-x64" "0.20.1"
1032+
"@esbuild/netbsd-x64" "0.20.1"
1033+
"@esbuild/openbsd-x64" "0.20.1"
1034+
"@esbuild/sunos-x64" "0.20.1"
1035+
"@esbuild/win32-arm64" "0.20.1"
1036+
"@esbuild/win32-ia32" "0.20.1"
1037+
"@esbuild/win32-x64" "0.20.1"
1038+
8951039
escalade@^3.1.1:
8961040
version "3.1.2"
8971041
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"

0 commit comments

Comments
 (0)