"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.redirectHtmlReq=redirectHtmlReq,exports.searchSn=searchSn,exports.startDebug=startDebug,exports.default=void 0;var _path=_interopRequireDefault(require("path")),_fs=_interopRequireDefault(require("fs")),_url=_interopRequireDefault(require("url")),_qrImage=_interopRequireDefault(require("qr-image")),_utils=require("../../lib/utils"),_recordClient=require("@hap-toolkit/shared-utils/lib/record-client"),_sharedUtils=require("@hap-toolkit/shared-utils"),_config=_interopRequireDefault(require("@hap-toolkit/shared-utils/config")),_service=require("../service");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}async function index(e,r){const{htmlPageDir:t}=(0,_service.routerConf)(e),o=_path.default.join(t,"index.html");try{_fs.default.existsSync(o)?(e.set("Content-Type","text/html"),e.body=_fs.default.createReadStream(o)):(await r(),e.throw("404",`无法找到${o}文件`))}catch(r){_utils.colorconsole.error(`### App Server ### 无法获取${o}文件: ${r}`),e.body=`404 Not found ${o}`}}async function register(e,r){_utils.colorconsole.info(`### App Server ### 收到App注册信息, 格式:\n${JSON.stringify(e.request.body)}\n`),await r();const{ws:t,application:o}=e.request.body,{serverPort:i}=(0,_service.serverConf)(e).defaults,s=(0,_service.getInspectorUrl)({ws:t,serverPort:i});emitWSEvent(e.io,"appRegistered",{inspectorUrl:s,application:o}),_utils.colorconsole.info(`请访问以下链接进行调试:\n\n${s}\n`)}async function adapterForBackwardComp(e,r){try{const t=e.request.body,{method:o,path:i}=e,s="ws"in t&&t.ws.indexOf("inspector")>=0,n="application"in t&&t.application.indexOf("hybrid.loader")>=0;if("post"===o.toLowerCase()&&"/"===i&&s&&n){_utils.colorconsole.warn("调试器已有重要更新,请更新调试器"),emitWSEvent(e.io,"informUpdate");const{ws:r,application:o}=t,{serverPort:i}=(0,_service.serverConf)(e).defaults,s=(0,_service.getInspectorUrl)({ws:r,serverPort:i});emitWSEvent(e.io,"appRegistered",{inspectorUrl:s,application:o}),_utils.colorconsole.info(`请访问以下链接进行调试:\n\n${s}\n`)}else await r()}catch(e){_utils.colorconsole.error(`### App Server ### 出错信息: ${e.message}`),_utils.colorconsole.error("### App Server ### 当前调试器与toolkit不兼容,请更新调试器。"),await r()}}async function redirectHtmlReq(e,r){const t=new _url.default.URL(e.URL.href);/.*\.html?$/.test(t.pathname)&&!/^\/html/.test(t.pathname)?(_utils.colorconsole.info("### App Server ### 重定向html文件请求"),e.redirect("/html"+t.pathname+t.search)):await r()}async function qrCode(e,r){const{serverPort:t}=(0,_service.serverConf)(e).defaults,o=`http://${(0,_utils.getServerIPAndPort)(t)}`,i=_qrImage.default.image(o,{size:9});await r(),e.type="image/png",e.body=i}async function searchSn(e,r){e.status=200;const t=_config.default.clientRecordPath;try{if(_fs.default.existsSync(t)){const e=(0,_recordClient.getRecords)(t),r=(0,_recordClient.getProjectClients)(e);r.length>0&&(_utils.colorconsole.log("### App Loader ### 通知设备开始下发SN"),r.forEach((function(e){"127.0.0.1"===e.ip&&(0,_sharedUtils.getDeviceInfo)(e,(r,t)=>{r||t.sn||(0,_service.callDeviceWithOwnSn)(e)})})))}else await r(),e.throw("404","无法获取设备SN")}catch(e){_utils.colorconsole.warn(`### App Server ### 没有记录设备信息,请尝试重新连接: ${e}`)}}async function startDebug(e,r){e.status=200;const t=(0,_service.getDebugInfoFromRequest)(e.request),{sn:o,linkMode:i,devicePort:s,application:n}=t;let a=t.ws;if(i===_service.LINK_MODE.ADB){const{localWsPort:t,err:i}=await e.adbDebugger.forwardForWsChannel(o,s);if(i)return console.error(`startDebug(): adb forward 端口映射失败: ${i.message}`),void await r();a=a.replace(s,t)}const{serverPort:c}=(0,_service.serverConf)(e).defaults,l=(0,_service.getInspectorUrl)({ws:a,serverPort:c});emitWSEvent(e.io,"appRegistered",{inspectorUrl:l,application:n}),_utils.colorconsole.info(`请访问以下链接进行调试:\n\n${l}\n`);const u=(0,_service.serverConf)(e).options.callback;if(u&&"function"==typeof u){u({url:l,action:"openDebugWin"})}!1!==(0,_service.serverConf)(e).options.openDebugger&&await(0,_utils.startChrome)(l,{chromePath:(0,_service.serverConf)(e).options.chromePath}),await r()}function emitWSEvent(e,r,t){e.sockets.emit(r,t||{})}var _default={index:index,register:register,adapterForBackwardComp:adapterForBackwardComp,redirectHtmlReq:redirectHtmlReq,qrCode:qrCode,searchSn:searchSn,startDebug:startDebug};exports.default=_default;
|