UNPKG

@keload/node-red-contrib-happy-http-client

Version:
2 lines (1 loc) 8.47 kB
var I=Object.defineProperty;var Y=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var J=Object.prototype.hasOwnProperty;var X=(e,t)=>{for(var n in t)I(e,n,{get:t[n],enumerable:!0})},ee=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of G(t))!J.call(e,o)&&o!==n&&I(e,o,{get:()=>t[o],enumerable:!(r=Y(t,o))||r.enumerable});return e};var te=e=>ee(I({},"__esModule",{value:!0}),e);var ue={};X(ue,{default:()=>ae});module.exports=te(ue);var H={requestAuthPasswordSecret:{type:"text"}};function b(e){RED.nodes.createNode(this,e),this.name=e.name,this.baseUrl=e.baseUrl,this.defaultArgsHeaders=e.defaultArgsHeaders,this.defaultArgsHeadersType=e.defaultArgsHeadersType,this.defaultArgsQueryParams=e.defaultArgsQueryParams,this.defaultArgsQueryParamsType=e.defaultArgsQueryParamsType,this.connectionKeepAlive=e.connectionKeepAlive,this.connectionKeepAliveType=e.connectionKeepAliveType,this.connectionTimeout=e.connectionTimeout,this.connectionTimeoutType=e.connectionTimeoutType,this.caRejectUnauthorized=e.caRejectUnauthorized,this.caRejectUnauthorizedType=e.caRejectUnauthorizedType,this.requestAuthBearerToken=e.requestAuthBearerToken,this.requestAuthBearerTokenType=e.requestAuthBearerTokenType,this.requestAuthKind=e.requestAuthKind,this.requestAuthUsername=e.requestAuthUsername,this.requestAuthUsernameType=e.requestAuthUsernameType}function v(e,{lenient:t=!1}={}){if(typeof e!="string")throw new TypeError("isUrl: Expected a string");let n=e.trim();if(n.includes(" "))return!1;try{return new URL(n),!0}catch(r){return t?v(`https://${n}`):!1}}var re=(e,t,n)=>new Promise((r,o)=>{var i=s=>{try{l(n.next(s))}catch(u){o(u)}},a=s=>{try{l(n.throw(s))}catch(u){o(u)}},l=s=>s.done?r(s.value):Promise.resolve(s.value).then(i,a);l((n=n.apply(e,t)).next())});function x(e,t){return typeof e!="boolean"?(console.warn("Payload must be a boolean (true or false)."),[null,null]):e?[t,null]:[null,t]}function S(e){return RED.nodes.getNode(e)}function ne(e){return new Promise(t=>{try{RED.util.evaluateNodeProperty(e.value,e.type,e.node,e.msg,(n,r)=>{t([n,r])})}catch(n){t([n,void 0])}})}function g(e,t,n={typedSuffix:"Type"}){function r(a,l){return ne({value:a,type:l,node:e,msg:t})}function o(a){return typeof a!="boolean"&&a===""}function i(a,l){return re(this,arguments,function*(s,u,c={strictDefaultValue:void 0}){let[,d]=yield r(s==null?void 0:s[u],s==null?void 0:s[`${String(u)}${n.typedSuffix}`]);return(c==null?void 0:c.strictDefaultValue)!==void 0&&o(d)?c.strictDefaultValue:d})}return{evaluateNodeProperty:r,quickNodePropertyEval:i}}var L=require("urllib");var k=e=>!!e&&e.constructor===Symbol,B=Array.isArray,w=e=>!!e&&e.constructor===Object;var F=e=>!!(e&&e.constructor&&e.call&&e.apply);var N=e=>{try{return Number(e)===e}catch(t){return!1}},_=e=>Object.prototype.toString.call(e)==="[object Date]";var A=e=>{if(e===!0||e===!1||e==null)return!0;if(N(e))return e===0;if(_(e))return isNaN(e.getTime());if(F(e)||k(e))return!1;let t=e.length;if(N(t))return t===0;let n=e.size;return N(n)?n===0:Object.keys(e).length===0};var T=(e,t)=>{var n;return!e||!t?(n=e!=null?e:t)!=null?n:{}:Object.entries({...e,...t}).reduce((r,[o,i])=>({...r,[o]:w(e[o])?T(e[o],i):i}),{})};var K=["GET","POST","PUT","DELETE","CONNECT","OPTIONS","TRACE","PATCH"];async function D(e){let t=new URLSearchParams((e==null?void 0:e.queryParams)||{}).toString(),n=`${e.url}${A(t)?"":`?${t}`}`,r=(e==null?void 0:e.reqOptions)||{};try{let o=await e.client.request(n,{...r}),i=o.status>=200&&o.status<300,a={ok:i,request:{url:n,reqOptions:r},response:o};return i?[void 0,o.data,a]:[new Error(`Request failed with status ${o.status} (${o.url})`),void 0,a]}catch(o){return[o,void 0,{ok:!1,...o.res}]}}function $(e,t){let n=t.startsWith("/")?t.substring(1):t;return`${e.endsWith("/")?e.slice(0,-1):e}/${n}`}var z={INHERIT_CLIENT_TERM:"from_client"};var m=e=>e===z.INHERIT_CLIENT_TERM;async function M(e){let{node:t,msg:n,currentNode:r}=e;console.log("currentNode",r);let{quickNodePropertyEval:o}=g(t,n),i=await o(r,"endpoint"),a=await o(r,"body"),l=await o(r,"bodyContentType"),s=K.includes(r.methodType)?r.methodType:await o(r,"method"),u={connectionKeepAlive:m(r==null?void 0:r.connectionKeepAliveType),connectionTimeout:m(r==null?void 0:r.connectionTimeoutType),caRejectUnauthorized:m(r==null?void 0:r.caRejectUnauthorizedType),requestAuthBearerToken:m(r==null?void 0:r.requestAuthBearerTokenType),requestAuthKind:m(r==null?void 0:r.requestAuthKind),requestAuthUsername:m(r==null?void 0:r.requestAuthUsernameType)};return{nodeInstanceMethod:s,nodeInstanceBody:a||{},nodeInstanceBodyContentType:l,resolvedNodeEndpoint:i,isFromClient:u,currentNodeInstance:r,credentials:r.credentials}}var q={CONNECTION_TIMEOUT:5e3,CONNECTION_KEEP_ALIVE:4e3,CA_REJECT_UNAUTHORIZED:!0};async function V(e){let{clientInstance:t}=e;return{clientInstanceBaseUrl:t==null?void 0:t.baseUrl,credentials:t==null?void 0:t.credentials,currentClientInstance:t}}function se(e,t,n){return n&&e!==void 0?e:t}async function ie(e){let[t,n]=await Promise.all([V({node:e.node,msg:e.msg,clientInstance:e.clientInstance}),M({node:e.node,msg:e.msg,currentNode:e.currentNode})]),{quickNodePropertyEval:r}=g(e.node,e.msg);async function o(i,a){let{defaultValue:l,withInherit:s=!1}=a||{},[u,c]=await Promise.all([r(n.currentNodeInstance,i,{strictDefaultValue:l}),r(t.currentClientInstance,i,{strictDefaultValue:l})]),d=se(c,u,s);return[c,u,d]}return{configInstance:t,nodeInstance:n,resolveEachNodes:o}}async function j(e){let{configInstance:t,nodeInstance:n,resolveEachNodes:r}=await ie(e),{isFromClient:o}=n,[,,i]=await r("connectionTimeout",{defaultValue:q.CONNECTION_TIMEOUT,withInherit:o.connectionTimeout}),[,,a]=await r("connectionKeepAlive",{defaultValue:q.CONNECTION_KEEP_ALIVE,withInherit:o.connectionKeepAlive}),[,,l]=await r("caRejectUnauthorized",{defaultValue:q.CA_REJECT_UNAUTHORIZED,withInherit:o.caRejectUnauthorized}),[,,s]=await r("requestAuthBearerToken",{defaultValue:"",withInherit:o.requestAuthBearerToken}),[u,c]=await r("requestAuthKind",{defaultValue:""}),d=c==="from_client_or_none"?u:c,R=d!==void 0&&d!=="none",[,,C]=await r("requestAuthUsername",{defaultValue:"",withInherit:o.requestAuthUsername&&u!=="none"}),h=()=>n.credentials.requestAuthPasswordSecret?n.credentials.requestAuthPasswordSecret:t.credentials.requestAuthPasswordSecret?t.credentials.requestAuthPasswordSecret:"",[p,O]=await r("defaultArgsHeaders"),[E,y]=await r("defaultArgsQueryParams"),P={...T(p,O),...s&&{authorization:`Bearer ${s}`}},f=A(t==null?void 0:t.clientInstanceBaseUrl)?n.resolvedNodeEndpoint:$(t.clientInstanceBaseUrl,n.resolvedNodeEndpoint);return{resolvedRequestHeaders:P,resolvedRequestQueryParams:T(E,y),resolvedRequestMethod:n.nodeInstanceMethod,resolvedRequestBody:n.nodeInstanceBody,resolvedRequestBodyContentType:n.nodeInstanceBodyContentType,urlToFetch:f,resolvedConnectionTimeout:i,resolvedConnectionKeepAlive:a,resolvedCaRejectUnauthorized:l,resolvedRequestAuthBearerToken:s,resolvedRequestAuth:{hasAuth:R,authKind:d,username:C,password:h()}}}var Q={requestAuthPasswordSecret:{type:"text"}};function Z(e){RED.nodes.createNode(this,e),this.status({});let t={},n=S(e.clientInstance),{throwErrorOnError:r,splitBooleanOutputs:o}=e;this.on("input",async i=>{this.status({});let{resolvedRequestHeaders:a,resolvedRequestQueryParams:l,resolvedRequestMethod:s,resolvedRequestBody:u,resolvedRequestBodyContentType:c,resolvedConnectionTimeout:d,resolvedConnectionKeepAlive:R,resolvedCaRejectUnauthorized:C,urlToFetch:h,resolvedRequestAuth:p}=await j({node:this,msg:i,currentNode:{...e,credentials:this.credentials},clientInstance:n});if(!v(h)){this.error(`Invalid URL: ${h}`),this.status({fill:"red",text:"Invalid URL"});return}let E=new L.HttpClient({...t,connect:{timeout:Number(d),rejectUnauthorized:!!C}}),[y,P,f]=await D({url:h,client:E,queryParams:l,reqOptions:{method:s,headers:a,...s!=="GET"&&{data:u,contentType:c},dataType:e.responseFormat,keepAliveTimeout:Number(R),...p.hasAuth&&p.authKind==="basic"&&{auth:`${p.username}:${p.password}`},...p.hasAuth&&p.authKind==="digest"&&{digestAuth:`${p.username}:${p.password}`}}});r&&y&&(this.error({message:y.message,response:f==null?void 0:f.response}),this.status({fill:"red",text:"error"}));let U={...i,happyRequest:f,payload:P};if(o){let W=x(y===void 0,U);this.send(W)}else this.send(U)})}var ae=async e=>{global.RED=e,global.RED.nodes.registerType("happy-config",b,{credentials:H}),global.RED.nodes.registerType("happy-request",Z,{credentials:Q})};