/**
 * Minified by jsDelivr using Terser v5.19.2.
 * Original file: /npm/fortune-http@1.2.28/lib/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
"use strict";var zlib=require("zlib"),crc32=require("@node-rs/crc32").crc32,Negotiator=require("negotiator"),HttpSerializer=require("./serializer"),jsonSerializer=require("./json_serializer"),htmlSerializer=require("./html_serializer"),HttpFormSerializer=require("./form_serializer"),statusMapFn=require("./status_map"),instantiateSerializer=require("./instantiate_serializer"),beforeSemicolon=/[^;]*/,availableEncodings=["gzip","deflate"],payloadMethods=["POST","PATCH","PUT"],buffer=Buffer.from||Buffer;function createListener(e,r){var t,n,i,a,o,s,u,d,l,c,p,m,f,h,g,z,S,y,H,E,v,C=[],w={};if(!e.request||!e.common)throw new TypeError("An instance of Fortune is required.");if(z=e.common.assign,S=e.message||e.common.message,y=e.common.responses,H=statusMapFn(y),p=e.common.errors,m=p.nativeErrors,f=p.BadRequestError,h=p.UnsupportedError,g=p.NotAcceptableError,void 0===r&&(r={}),"serializers"in r||(r.serializers=[jsonSerializer(HttpSerializer),htmlSerializer(HttpSerializer),HttpFormSerializer.formData,HttpFormSerializer.formUrlEncoded]),"settings"in r||(r.settings={}),i=r.settings,!r.serializers.length)throw new Error("At least one serializer must be defined.");for(E=0,v=r.serializers.length;E<v;E++)n=Array.isArray(r.serializers[E])?r.serializers[E]:[r.serializers[E]],t=instantiateSerializer(e,n[0],n[1],w),w[t.mediaType]=t,C.push(t.mediaType);return a=!("endResponse"in i)||i.endResponse,s=!("useETag"in i)||i.useETag,o=!("useCompression"in i)||i.useCompression,u="minimumRateKBPS"in i?i.minimumRateKBPS*Math.pow(2,3):28.8*Math.pow(2,3),d="maximumSizeMB"in i?i.maximumSizeMB*Math.pow(2,20):2*Math.pow(2,20),l="rateCheckMS"in i?i.rateCheckMS:3e3,c=Math.floor(u/(l/1e3)),b.statusMap=H,b;function b(r,t){var n,i,a,s,u,p,y,H,E;return u=new Negotiator(r),p=u.language(),y=u.mediaType(C),H=beforeSemicolon.exec(r.headers["content-type"]||"")[0]||null,void 0===y&&(y=u.mediaType()),y&&t.setHeader("Content-Type",y),o&&(n=u.encoding(availableEncodings))&&t.setHeader("Content-Encoding",n),t.statusCode=501,E={meta:{serializerInput:H,serializerOutput:y,request:r,headers:r.headers,language:p}},(w.hasOwnProperty(y)?new Promise((function(e,n){var i,a,o,s,u;return~payloadMethods.indexOf(r.method)||"content-length"in r.headers?"content-length"in r.headers?0===(s=parseInt(r.headers["content-length"],10))?e():s>d?(t.statusCode=413,n(Error())):(i=[],a=0,o=0,u=setInterval((function(){o-a<c?(clearInterval(u),t.statusCode=408,n(Error())):a=o}),l),r.on("error",(function(e){t.setHeader("Content-Type","text/plain"),e.payload=S("InvalidBody",p),Object.defineProperty(e,"isInputError",{value:!0}),n(e)})),r.on("data",(function(e){(o+=e.length)>d&&(t.statusCode=413,n(Error())),i.push(buffer(e))})),r.on("end",(function(){clearInterval(u),e(Buffer.concat(i))})),null):(t.statusCode=411,n(Error())):e()})):Promise.reject(new g(S("SerializerNotFound",p,{id:y})))).then((function(e){return e&&e.length&&(i=e),w[y].processRequest(E,r,t)})).then((function(e){if(e&&(E=e),!H)return E;if(!w.hasOwnProperty(H))throw new h(S("SerializerNotFound",p,{id:H}));return E.payload=i,Promise.resolve().then((function(){return i&&i.length?w[H].parsePayload(E,r,t):null})).then((function(e){return e&&(E.payload=e),E}),(function(e){throw Object.defineProperty(e,"isInputError",{value:!0}),e}))})).then((function(r){return e.request(r)})).then((function(e){return s=e,a=!0,w[y].processResponse(s,r,t)})).then((function(e){return P(e||s,r,t)})).catch((function(e){var n=e;return Promise.resolve().then((function(){return"payload"in e||"meta"in e||!~m.indexOf(e.constructor)||(s&&delete s.payload,n=z(e.isInputError?new f(S("InvalidBody",p)):new Error(S("GenericError",p)),s)),!a&&w.hasOwnProperty(y)?w[y].processResponse(n,r,t):n})).then((function(e){return P(e||n,r,t)}),(function(){return P(new Error(S("GenericError",p)),r,t)})).then((function(){if(t.statusCode<400)return e;throw e}))}))}function P(e,r,t){var n,i,o;return"meta"in e||(e.meta={}),"headers"in e.meta||(e.meta.headers={}),o=e.meta,i=e.payload,o.response=t,501===t.statusCode&&(t.statusCode=H.get(e.constructor)||H.get(Error)),new Promise((function(r,a){return Buffer.isBuffer(i)||"string"==typeof i?(n=t.getHeader("content-encoding"))&&~availableEncodings.indexOf(n)?zlib[n](i,(function(n,a){if(n)throw n;return i=e.payload=a,t.setHeader("Content-Length",String(i.length)),r()})):(t.removeHeader("content-encoding"),i=e.payload=buffer(i),t.setHeader("Content-Length",String(i.length)),r()):i?(t.statusCode=H.get(Error),a(new Error("Response payload type is invalid."))):(t.removeHeader("content-encoding"),t.removeHeader("content-type"),t.statusCode===H.get(y.OK)&&(t.statusCode=H.get(y.Empty)),i=e.payload="",r())})).then((function(){var n,u;for(n in o.headers)t.setHeader(n,o.headers[n]);if(s&&i){if(u="W/"+crc32(i).toString(16),t.setHeader("ETag",u),!a)return e;if(r.headers["if-none-match"]===u)return t.statusCode=304,t.removeHeader("content-encoding"),t.removeHeader("content-type"),t.removeHeader("content-length"),t.writeHead(t.statusCode,t.headers),t.end(),e}else if(!a)return e;return t.writeHead(t.statusCode,t.headers),t.end(i.length?i:e.toString()),e})).catch((function(e){var r=e.toString();return 501===t.statusCode&&(t.statusCode=H.get(Error)),t.removeHeader("content-encoding"),r&&(t.setHeader("Content-Type","text/plain"),t.setHeader("Content-Length",Buffer.byteLength(r))),t.writeHead(t.statusCode,t.headers),t.end(r),e}))}}createListener.instantiateSerializer=instantiateSerializer,createListener.Serializer=HttpSerializer,createListener.JsonSerializer=jsonSerializer(HttpSerializer),createListener.HtmlSerializer=htmlSerializer(HttpSerializer),createListener.FormDataSerializer=HttpFormSerializer.formData,createListener.FormUrlEncodedSerializer=HttpFormSerializer.formUrlEncoded,module.exports=createListener;
//# sourceMappingURL=/sm/2741e46213ec0cb5bb778a2bbf44650bb76e7a22e38d5eb2f118cafe1b65af5e.map