File: //volume1/@appstore/Contacts/nodejs/pushserver/api_runner.js
const e=require("child_process"),n={CONTENT_LENGTH:"content-length",CONTENT_TYPE:"content-type",HTTP_ACCEPT_LANGUAGE:"accept-language",HTTP_CLIENT_IP:"client-ip",HTTP_COOKIE:"cookie",HTTP_HOST:"host",HTTP_QUICKCONNECT_TOKEN:"quickconnect-token",HTTP_REFERER:"referer",HTTP_USER_AGENT:"user-agent",HTTP_X_FORWARDED_FOR:"x-forwarded-for",HTTP_X_FORWARDED_PROTO:"x-forwarded-proto",HTTP_X_SYNO_RELAY_LANGUAGE:"x-syno-relay-language",REMOTE_ADDR:"x-real-ip",SERVER_PORT:"x-server-port",HTTP_X_TYPE_NAME:"x-type-name",HTTP_X_EXTRA_AUTH_PARAMS:"x-extra-auth-params"},r=307200;function o(){}o.prototype.getQueryString=function(e){const n=e.socket.handshake,r=Object.create(e.params);r.api=e.api,r.version=e.version,r.method=e.method;const o=[];for(const e in r)o.push(e+"="+encodeURIComponent(JSON.stringify(r[e])));return n.query.SynoToken&&o.push("SynoToken="+n.query.SynoToken),n.query.dsmSID&&o.push("sid="+n.query.dsmSID),o.join("&")},o.prototype.getEnv=function(e){const r=e.socket.handshake,o={HTTPS:r.secure?"ON":"OFF",QUERY_STRING:this.getQueryString(e),REQUEST_METHOD:e.socket.request.method};r.query.SynoToken&&(o.HTTP_X_SYNO_TOKEN=r.query.SynoToken),r.query.SynoSharing&&(o.HTTP_X_SYNO_SHARING=r.query.SynoSharing),r.query.dsmSID&&(o.HTTP_COOKIE=(o.HTTP_COOKIE||"")+" id="+r.query.dsmSID);const t=r.headers;return Object.keys(n).forEach(function(e){t[n[e]]&&(o[e]=t[n[e]])}),o},o.prototype.run=function(n){return new Promise((r,o)=>{e.execFile("/usr/syno/synoman/webapi/entry.cgi",{maxBuffer:307200,env:this.getEnv(n),cwd:"/usr/syno/synoman/webapi/"},(e,n,t)=>{if(e||!n)return void o(e);const T=n.indexOf("\r\n\r\n");let s;try{s=JSON.parse(-1<T?n.substr(T+4):n)}catch(e){return console.log("parse error "+n),void o(e)}s.success?r(s.data):o(s.error)})})},module.exports=o;