/**
 * Minified by jsDelivr using Terser v5.48.0.
 * Original file: /npm/stubby@5.1.1/src/main.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
"use strict";const Admin=require("./portals/admin").Admin,Stubs=require("./portals/stubs").Stubs,Endpoints=require("./models/endpoints").Endpoints,Watcher=require("./console/watch"),CLI=require("./console/cli"),out=require("./console/out"),http=require("http"),https=require("https"),contract=require("./models/contract"),couldNotSave="The supplied endpoint data couldn't be saved";function onListening(t,s,e,n){null==e&&(e="http"),out.status(t+" portal running at "+e+"://"+n+":"+s)}function onError(t,s,e){let n;switch(t.code){case"EACCES":n="Permission denied for use of port "+s+". Exiting...";break;case"EADDRINUSE":n="Port "+s+" is already in use! Exiting...";break;case"EADDRNOTAVAIL":n='Host "'+e+'" is not available! Exiting...';break;default:n=t.message+". Exiting..."}out.error(n),console.dir(t),process.exit()}function setupStartOptions(t){let s;null==(t=null==t?{}:t).quiet&&(t.quiet=!0);const e=CLI.getArgs([]);for(s in e)null==t[s]&&(t[s]=e[s]);return out.quiet=t.quiet,t}function createHttpsOptions(t){const s=t._httpsOptions||{};return t.key&&t.cert?(s.key=t.key,s.cert=t.cert):t.pfx&&(s.pfx=t.pfx),s}class Stubby{constructor(){this.endpoints=new Endpoints,this.stubsPortal=null,this.tlsPortal=null,this.adminPortal=null}async start(t){const s=setupStartOptions(t);await this.stop();const e=contract(s.data);if(e)throw new Error(e);null!=s.datadir&&(this.endpoints.datadir=s.datadir),null!=s["case-sensitive-headers"]&&(this.endpoints.caseSensitiveHeaders=s["case-sensitive-headers"]),this.endpoints.create(s.data).forEach(t=>{out.notice("Loaded: "+t.request.method+" "+t.request.url)}),this.tlsPortal=https.createServer(createHttpsOptions(s),new Stubs(this.endpoints).server),this.tlsPortal.on("listening",function(){onListening("Stubs",s.tls,"https",s.location)}),this.tlsPortal.on("error",function(t){onError(t,s.tls,s.location)}),await new Promise(t=>this.tlsPortal.listen(s.tls,s.location,t)),this.stubsPortal=http.createServer(new Stubs(this.endpoints).server),this.stubsPortal.on("listening",function(){onListening("Stubs",s.stubs,"http",s.location)}),this.stubsPortal.on("error",function(t){onError(t,s.stubs,s.location)}),await new Promise(t=>this.stubsPortal.listen(s.stubs,s.location,t)),this.adminPortal=http.createServer(new Admin(this.endpoints).server),this.adminPortal.on("listening",function(){onListening("Admin",s.admin,"http",s.location)}),this.adminPortal.on("error",function(t){onError(t,s.admin,s.location)}),await new Promise(t=>this.adminPortal.listen(s.admin,s.location,t)),s.watch&&(this.watcher=new Watcher(this.endpoints,s.watch)),out.info("\nQuit: ctrl-c\n")}async stop(){null!=this.watcher&&this.watcher.deactivate(),this.adminPortal&&this.adminPortal.address()&&await new Promise(t=>this.adminPortal.close(t)),this.stubsPortal&&this.stubsPortal.address()&&await new Promise(t=>this.stubsPortal.close(t)),this.tlsPortal&&this.tlsPortal.address()&&await new Promise(t=>this.tlsPortal.close(t))}post(t){if(contract(t))throw new Error(couldNotSave);this.endpoints.create(t)}get(t){return null==t?this.endpoints.gather():this.endpoints.retrieve(t)}put(t,s){if(contract(s))throw new Error(couldNotSave);return this.endpoints.update(t,s)}delete(t){null==t?this.endpoints.deleteAll():this.endpoints.delete(t)}}module.exports.Stubby=Stubby;
//# sourceMappingURL=/sm/5063afd94e65b71e4425ef66f3e12f5c9b4e61f2b45eac9d35f98a10737eac75.map