/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/passionfruit@0.7.2/app.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
const path=require("path"),http=require("http"),{Z_SYNC_FLUSH:Z_SYNC_FLUSH}=require("zlib");require("colors");const frida=require("frida"),FRIDA_VERSION=require("frida/package.json").version,Koa=require("koa"),logger=require("koa-logger"),json=require("koa-json"),compress=require("koa-compress"),bodyParser=require("koa-bodyparser"),send=require("koa-send"),Router=require("koa-router"),{FridaUtil:FridaUtil,serializeDevice:serializeDevice,serializeApp:serializeApp}=require("./lib/utils"),channels=require("./lib/channels.js"),{KnownError:KnownError,InvalidDeviceError:InvalidDeviceError,VersionMismatchError:VersionMismatchError}=require("./lib/error"),app=new Koa,router=new Router({prefix:"/api"});function start({host:e,port:r}){console.info(`listening on http://${e}:${r}`.green);const t=http.createServer(app.callback());channels.attach(t),t.listen(r,e),process.on("unhandledRejection",(e=>{console.error("An unhandledRejection occurred: ".red),console.error(`Rejection: ${e}`.red),console.error(e.stack),channels.broadcast("unhandledRejection",{err:e.toString(),stack:e.stack})}))}router.get("/devices",(async e=>{const r=await frida.getDeviceManager(),t=await r.enumerateDevices();e.body={version:FRIDA_VERSION,list:t.map(serializeDevice)}})).get("/device/:device/apps",(async e=>{const r=e.params.device;try{const t=await FridaUtil.getDevice(r),a=await t.enumerateApplications();e.body=a.map(serializeApp)}catch(e){if(e.message.startsWith("Unable to connect to remote frida-server"))throw new InvalidDeviceError(r);throw e.message.startsWith("Unable to communicate with remote frida-server")?new VersionMismatchError(e.message):e}})).post("/url/start",(async e=>{const{device:r,bundle:t,url:a}=e.request.body,s=await FridaUtil.getDevice(r),o=await s.spawn([t],{url:a});await s.resume(o),e.body={status:"ok",pid:o}})).put("/device/add",(async e=>{const r=e.request.rawBody,t=await frida.getDeviceManager();try{t.addRemoteDevice(r)}catch(r){return e.status=400,void(e.body={status:"failed",error:r.message})}e.body={status:"ok"}})).delete("/device/:device",(async e=>{const r=await frida.getDeviceManager();try{await r.removeRemoteDevice(e.params.device)}catch(r){return e.status=404,void(e.body={status:"failed",error:r.message})}e.body={status:"ok"}})),app.use(compress({filter:e=>/text|json/i.test(e),threshold:2048,flush:Z_SYNC_FLUSH})).use(bodyParser()).use((async(e,r)=>{try{await r()}catch(r){if(r instanceof KnownError&&e.throw(404,r.message),"development"===process.env.NODE_ENV)throw r;e.throw(500,r.message)}})).use(router.routes()).use(router.allowedMethods()),"development"===process.env.NODE_ENV?app.use(json({pretty:!1,param:"pretty"})):(app.use((async(e,r)=>{const t={root:path.join(__dirname,"gui")};e.path.startsWith("/static/")?await send(e,e.path,t):await send(e,"/index.html",t),r()})),app.use(logger())),module.exports={app:app,start:start};
//# sourceMappingURL=/sm/482e695174f55c14bc7854870c0947929706ec562dd864d3719b632f9dc385cc.map