UNPKG

@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
"use strict";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