@h4ad/serverless-adapter
Version:
Run REST APIs and other web applications using your existing Node.js application framework (NestJS, Express, Koa, Hapi, Fastify and many others), on top of AWS, Azure, Digital Ocean and many other clouds.
7 lines • 6.83 kB
JavaScript
;var _=Object.create;var y=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,V=Object.prototype.hasOwnProperty;var s=(t,e)=>y(t,"name",{value:e,configurable:!0});var D=(t,e)=>{for(var r in e)y(t,r,{get:e[r],enumerable:!0})},C=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of I(e))!V.call(t,o)&&o!==r&&y(t,o,{get:()=>e[o],enumerable:!(n=P(e,o))||n.enumerable});return t};var N=(t,e,r)=>(r=t!=null?_(F(t)):{},C(e||!t||!t.__esModule?y(r,"default",{value:t,enumerable:!0}):r,t)),W=t=>C(y({},"__esModule",{value:!0}),t);var Y={};D(Y,{DefaultHandler:()=>x});module.exports=W(Y);var S=N(require("util"),1);var b=require("http");var q=443,E=class extends b.IncomingMessage{static{s(this,"ServerlessRequest")}constructor({method:e,url:r,headers:n,body:o,remoteAddress:i}){super({encrypted:!0,readable:!0,remoteAddress:i,address:s(()=>({port:q}),"address"),on:u,removeListener:u,removeEventListener:u,end:u,destroy:u}),this.statusCode=200,this.statusMessage="OK",this.complete=!0,this.httpVersion="1.1",this.httpVersionMajor=1,this.httpVersionMinor=1,this.method=e,this.headers=n,this.body=o,this.url=r,this.ip=i,this._read=()=>{this.push(o),this.push(null)}}ip;body};var k=require("http");function v(t){if(Buffer.isBuffer(t))return t.toString("utf8");if(typeof t=="string")return t;if(t instanceof Uint8Array)return new TextDecoder().decode(t);throw new Error(`response.write() of unexpected type: ${typeof t}`)}s(v,"getString");var w=`\r
\r
`,U=`0\r
\r
`,m=Symbol("Response body"),R=Symbol("Response headers");function A(t,e){if(Buffer.isBuffer(e)||typeof e=="string"||e instanceof Uint8Array)t[m].push(Buffer.from(e));else throw new Error(`response.write() of unexpected type: ${typeof e}`)}s(A,"addData");var f=class t extends k.ServerResponse{static{s(this,"ServerlessResponse")}constructor({method:e}){super({method:e}),this[m]=[],this[R]={},this.useChunkedEncodingByDefault=!1,this.chunkedEncoding=!1,this._header="";let r=1,n={_writableState:{},writable:!0,on:u,removeListener:u,destroy:u,cork:u,uncork:u,write:s((o,i,d)=>{if(typeof i=="function"&&(d=i,i=null),this._header===""||this._wroteHeader)this.chunkedEncoding?r>0?r--:o!==U&&(A(this,o),r=3):A(this,o);else{let a=v(o),p=a.indexOf(w);if(p!==-1){let c=a.slice(p+w.length);c&&!this.chunkedEncoding&&A(this,c),this._wroteHeader=!0}}typeof d=="function"&&d()},"write")};this.assignSocket(n)}_header;_headers;_wroteHeader;[m];[R];get headers(){return this[R]}static from(e){let r=new t({method:e.method});return r.statusCode=e.statusCode||0,r[R]=e.headers,r[m]=e.body?[Buffer.from(e.body)]:[],r.end(),r}static body(e){return Buffer.concat(e[m])}static headers(e){let r=e.getHeaders();return Object.assign(r,e[R])}setHeader(e,r){this._wroteHeader?this[R][e]=r:super.setHeader(e,r)}writeHead(e,r,n){let o=typeof r=="string"?n:r,i=Array.isArray(o)?o:[o||{}];for(let d of i)for(let a in d)if(this.setHeader(a,d[a]),!this._wroteHeader)break;return this.callNativeWriteHead(e,r,n)}callNativeWriteHead(e,r,n){return super.writeHead(e,r,n)}};var M=require("http");var de=Buffer.from(`\r
`);var T=class{static{s(this,"BaseHandler")}getAdapterByEventAndContext(e,r,n,o){let i=n.filter(d=>d.canHandle(e,r,o));if(i.length===0)throw new Error("SERVERLESS_ADAPTER: Couldn't find adapter to handle this event.");if(i.length>1)throw new Error(`SERVERLESS_ADAPTER: Two or more adapters was resolved by the event, the adapters are: ${n.map(d=>d.getAdapterName()).join(", ")}.`);return i[0]}getServerlessRequestResponseFromAdapterRequest(e){let r=new E({method:e.method,headers:e.headers,body:e.body,remoteAddress:e.remoteAddress,url:e.path}),n=new f({method:e.method});return[r,n]}};var L={context:null,event:null};function B({event:t,context:e}){L.event=t,L.context=e}s(B,"setCurrentInvoke");function j(t,e){let r=t["content-encoding"];return r?(Array.isArray(r)||(r=r.split(",")),r.some(n=>e.includes(n.trim()))):!1}s(j,"isContentEncodingBinary");function $(t){let e=t["content-type"],r=Array.isArray(e)?e[0]||"":e||"";if(!e)return"";let n=r.indexOf(";");return n===-1?r:r.slice(0,n)}s($,"getContentType");function K(t,e){let r=$(t);return r?e.includes(r.trim()):!1}s(K,"isContentTypeBinary");function H(t,e){return"isBinary"in e?e.isBinary===!1?!1:e.isBinary(t):j(t,e.contentEncodings)||K(t,e.contentTypes)}s(H,"isBinary");var u=s(()=>{},"NO_OP");var Oe=Symbol("InternalLogger");var Ne=require("stream");function Q(t){return!!("readableEnded"in t&&t.readableEnded||"writableEnded"in t&&t.writableEnded)}s(Q,"isStreamEnded");function O(t){return Q(t)?Promise.resolve(t):new Promise((e,r)=>{let n=!1;function o(i){n||(n=!0,t.removeListener("error",o),t.removeListener("end",o),t.removeListener("finish",o),i?r(i):e(t))}s(o,"complete"),t.once("error",o),t.once("end",o),t.once("finish",o)})}s(O,"waitForStreamComplete");var x=class extends T{static{s(this,"DefaultHandler")}getHandler(e,r,n,o,i,d,a){return(p,c,l)=>{this.onReceiveRequest(a,p,c,i,d);let g=this.getAdapterByEventAndContext(p,c,n,a);return this.onResolveAdapter(a,g),B({event:p,context:c}),o.createResolver({event:p,context:c,callback:l,log:a,respondWithErrors:d,adapter:g}).run(()=>this.forwardRequestToFramework(e,r,p,c,g,i,a))}}onReceiveRequest(e,r,n,o,i){e.debug("SERVERLESS_ADAPTER:PROXY",()=>({event:S.default.inspect(r,{depth:null}),context:S.default.inspect(n,{depth:null}),binarySettings:o,respondWithErrors:i}))}onResolveAdapter(e,r){e.debug("SERVERLESS_ADAPTER:RESOLVED_ADAPTER_NAME: ",r.getAdapterName())}onResolveRequestValues(e,r){e.debug("SERVERLESS_ADAPTER:FORWARD_REQUEST_TO_FRAMEWORK:REQUEST_VALUES",()=>({requestValues:{...r,body:r.body?.toString()}}))}onResolveForwardedResponseToFramework(e,r){e.debug("SERVERLESS_ADAPTER:FORWARD_REQUEST_TO_FRAMEWORK:RESPONSE",()=>({response:r}))}onForwardResponse(e,r,n,o,i){e.debug("SERVERLESS_ADAPTER:FORWARD_RESPONSE:EVENT_SOURCE_RESPONSE_PARAMS",()=>({statusCode:r,body:n,headers:o,isBase64Encoded:i}))}onForwardResponseAdapterResponse(e,r,n){e.debug("SERVERLESS_ADAPTER:FORWARD_RESPONSE:EVENT_SOURCE_RESPONSE",()=>({successResponse:S.default.inspect(r,{depth:null}),body:n}))}async forwardRequestToFramework(e,r,n,o,i,d,a){let p=i.getRequest(n,o,a);this.onResolveRequestValues(a,p);let[c,l]=this.getServerlessRequestResponseFromAdapterRequest(p);return r.sendRequest(e,c,l),await O(l),this.onResolveForwardedResponseToFramework(a,l),this.forwardResponse(n,l,i,d,a)}forwardResponse(e,r,n,o,i){let d=r.statusCode,a=f.headers(r),p=H(a,o),c=p?"base64":"utf8",l=f.body(r).toString(c),g=p?"[BASE64_ENCODED]":l;this.onForwardResponse(i,d,g,a,p);let h=n.getResponse({event:e,statusCode:d,body:l,headers:a,isBase64Encoded:p,response:r,log:i});return this.onForwardResponseAdapterResponse(i,h,g),h}};0&&(module.exports={DefaultHandler});
//# sourceMappingURL=index.cjs.map