diff --git a/assets/init.js b/assets/init.js index 7994a0b..242cff1 100644 --- a/assets/init.js +++ b/assets/init.js @@ -486,6 +486,36 @@ let Network = { }, }; +/** + * [fetch] function for sending HTTP requests. Same api as the browser fetch. + * @param url {string} + * @param options {{method: string, headers: Object, body: any}} + * @returns {Promise<{ok: boolean, status: number, statusText: string, headers: {}, arrayBuffer: (function(): Promise), text: (function(): Promise), json: (function(): Promise)}>} + */ +async function fetch(url, options) { + let method = 'GET'; + let headers = {}; + let data = null; + + if (options) { + method = options.method || method; + headers = options.headers || headers; + data = options.body || data; + } + + let result = await Network.fetchBytes(method, url, headers, data); + + return { + ok: result.status >= 200 && result.status < 300, + status: result.status, + statusText: '', + headers: result.headers, + arrayBuffer: async () => result.body, + text: async () => Convert.decodeUtf8(result.body), + json: async () => JSON.parse(Convert.decodeUtf8(result.body)), + } +} + /** * HtmlDocument class for parsing HTML and querying elements. */