diff --git a/additional/env.js b/additional/env.js index e1d5b2e..62f5e57 100644 --- a/additional/env.js +++ b/additional/env.js @@ -685,13 +685,33 @@ let env = { const response = await fetch(urlStr); const result = await response.text(); - console.log(result); - const ptr = writeStringToWasm(result); - console.log(ptr); const { ExecuteFetchHandler} = window.crafter_webbuild_wasi.instance.exports; - console.log("callback"); + ExecuteFetchHandler(handlerID, ptr); + WasmFree(ptr); + + } catch (error) { + return 0; + } + }, + fetchWithBody: async function(url, urlLenght, body, bodyLength, handlerID) { + try { + const urlStr = decoder.decode(new Int8Array(window.crafter_webbuild_wasi.instance.exports.memory.buffer, url, urlLenght)); + const bodyStr = decoder.decode(new Int8Array(window.crafter_webbuild_wasi.instance.exports.memory.buffer, body, bodyLength)); + + const response = await fetch(urlStr, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: bodyStr + }); + const result = await response.text(); + + const ptr = writeStringToWasm(result); + + const { ExecuteFetchHandler} = window.crafter_webbuild_wasi.instance.exports; ExecuteFetchHandler(handlerID, ptr); WasmFree(ptr); diff --git a/interfaces/Crafter.CppDOM-BindingsExport.cppm b/interfaces/Crafter.CppDOM-BindingsExport.cppm index d287705..15b59c5 100644 --- a/interfaces/Crafter.CppDOM-BindingsExport.cppm +++ b/interfaces/Crafter.CppDOM-BindingsExport.cppm @@ -217,9 +217,15 @@ extern "C" { export namespace Crafter::CppDOMBindings { __attribute__((import_module("env"), import_name("fetch"))) void Fetch(const char* url, std::int32_t urlLenght, std::int32_t handlerID); + __attribute__((import_module("env"), import_name("fetchWithBody"))) void FetchWithBody(const char* url, std::int32_t urlLenght, const char* body, std::int32_t bodyLength, std::int32_t handlerID); void Fetch(const std::string_view url, std::function callback) { std::int32_t id = fetchHandlerMaxId++; CppDOMBindings::fetchHandlers->insert({id, callback}); Fetch(url.data(), url.size(), id); } + void Fetch(const std::string_view url, const std::string_view body, std::function callback) { + std::int32_t id = fetchHandlerMaxId++; + CppDOMBindings::fetchHandlers->insert({id, callback}); + FetchWithBody(url.data(), url.size(), body.data(), body.size(), id); + } } \ No newline at end of file