request-json-rpc2
Version:
Simplified JSON-RPC2 request nodejs and browser client
3 lines (2 loc) • 1.69 kB
JavaScript
var e=async({url:e,body:r,headers:s={},auth:t,signature:a,dev:o=!1,credentials:n="omit",signal:d},i)=>{if("production"!==process.env.NODE_ENV&&o){if(!i)return Promise.reject({jsonrpc:"2.0",error:{code:-32603,message:'"app" not found in second argument'},id:null});let o={method:"POST",url:e,headers:{"Content-Type":"application/json; charset=utf-8",...s},body:{jsonrpc:"2.0",...r},json:!0};a&&(o.headers.Signature=JSON.stringify(a)),t&&(o.auth=t);let{post:n}=(await import("supertest")).default(i);return n(e).send({method:o.method,url:o.url,headers:o.headers,body:r}).then(e=>e.body).catch(e=>({jsonrpc:"2.0",error:{code:-32603,message:e.message},id:null}))}let p=new Headers;if(Object.keys(s).forEach(e=>{p.append(e,s[e])}),p.has("Accept")||p.append("Accept","application/json"),p.has("Content-Type")||p.append("Content-Type","application/json"),a&&p.append("Signature",JSON.stringify(a)),t&&t.user&&t.pass){let e="Basic "+Buffer.from(t.user+":"+t.pass).toString("base64");p.set("Authorization",e)}let c={jsonrpc:"2.0",method:r.method};return(r.id&&(c.id=r.id),r.params&&"object"!=typeof r.params)?{jsonrpc:"2.0",error:{code:-32602,message:"Invalid params"},id:null}:(r.params&&(c.params=r.params),fetch(e,{body:JSON.stringify(c),headers:p,method:"POST",credentials:n,signal:d||AbortSignal.timeout(3e4)}).then(e=>{if(e.status>=400)throw Error(e.statusText);return e.json()}).then(e=>"InternalServerError"===e.name?{jsonrpc:"2.0",error:{code:e.code,message:e.message},id:null}:e).catch(({message:e})=>"Not Found"===e?{jsonrpc:"2.0",error:{code:-32603,message:e},id:null}:{jsonrpc:"2.0",error:{code:-32099,message:e},id:null}))};export{e as default};
//# sourceMappingURL=index.mjs.map