first commit

This commit is contained in:
2026-09-08 20:28:54 +08:00
commit 2ada8d3d5a
37380 changed files with 4886169 additions and 0 deletions
+2
View File
@@ -0,0 +1,2 @@
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _default={index:"/",register:"/postwsid",searchSn:"/searchsn",startDebug:"/poststdbg",qrCode:"/qrcode",reportSn:"/reportsn"};exports.default=_default;
//# sourceMappingURL=index.js.map
+2
View File
@@ -0,0 +1,2 @@
"use strict";var _koaRouter=_interopRequireDefault(require("koa-router")),_koaBody=_interopRequireDefault(require("koa-body")),_koaStatic=_interopRequireDefault(require("koa-static")),_config=_interopRequireDefault(require("@hap-toolkit/shared-utils/config")),_conf=require("./lib/conf"),_api=_interopRequireDefault(require("./api")),_routes=_interopRequireDefault(require("./routes")),_service=require("./service"),_wsserver=require("./wsserver"),_adb=require("../adb");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function applyRouter(e){const t=new _koaRouter.default;return t.conf=(0,_conf.init)(__dirname),e.context.router=t,e.use(_routes.default.redirectHtmlReq),e.use((0,_koaStatic.default)(t.conf.staticDir)),t.get(_api.default.index,_routes.default.index),t.post(_api.default.index,(0,_koaBody.default)(),_routes.default.adapterForBackwardComp),t.post(_api.default.register,(0,_koaBody.default)(),_routes.default.register),t.get(_api.default.searchSn,(0,_koaBody.default)(),_routes.default.searchSn),t.post(_api.default.startDebug,(0,_koaBody.default)(),_routes.default.startDebug),t.get(_api.default.qrCode,_routes.default.qrCode),t}async function beforeStart(e,t){await(0,_wsserver.createSocketServer)(e,t);const r=(0,_service.serverConf)(t.context),{disableADB:a}=r.options;a||(t.context.adbDebugger=(0,_adb.createADBDebugger)({pathClientLog:_config.default.clientRecordPath,localReversePort:r.defaults.serverPort}))}module.exports={applyRouter:applyRouter,beforeStart:beforeStart};
//# sourceMappingURL=index.js.map
+2
View File
@@ -0,0 +1,2 @@
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.init=init;var _path=_interopRequireDefault(require("path"));function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}function init(t){const e=_path.default.join(t,".."),i=_path.default.join(e,"client"),r=_path.default.join(i,"html");return{moduleDir:e,staticDir:i,htmlPageDir:r,inspectorHtmlDir:_path.default.join(r,"inspector"),inspectorTarFile:_path.default.join(r,"inspector.tar.gz")}}
//# sourceMappingURL=conf.js.map
+2
View File
@@ -0,0 +1,2 @@
"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;
//# sourceMappingURL=index.js.map
+2
View File
@@ -0,0 +1,2 @@
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getInspectorUrl=getInspectorUrl,exports.routerConf=routerConf,exports.serverConf=serverConf,exports.getDebugInfoFromRequest=getDebugInfoFromRequest,exports.callDeviceWithOwnSn=callDeviceWithOwnSn,exports.LINK_MODE=void 0;var _http=_interopRequireDefault(require("http")),_sharedUtils=require("@hap-toolkit/shared-utils"),_utils=require("../../lib/utils"),_api=_interopRequireDefault(require("../api"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const LINK_MODE={NULL:0,WIFI:1,ADB:2};function getInspectorUrl(e){const{ws:t,serverPort:r}=e;return`${`http://${(0,_utils.getServerIPAndPort)(r)}`}/inspector/inspector.html${`?ws=${encodeURI(t)}&remoteFrontend=true&dockSide=undocked`}`}function routerConf(e){return e.router.conf}function serverConf(e){return e.conf}function getClientFromRequest(e){const t=(0,_utils.getClientIPAddress)(e),r=(0,_utils.getIPv4IPAddress)(),o=e.header["device-serial-number"];let n=LINK_MODE.NULL;return"127.0.0.1"===t&&o?n=LINK_MODE.ADB:"127.0.0.1"!==t&&t!==r&&(n=LINK_MODE.WIFI),{clientIp:t,sn:o,linkMode:n}}function getDebugInfoFromRequest(e){const{sn:t,linkMode:r}=getClientFromRequest(e),{ws:o,application:n}=e.body,s=o.split(":")[1].split("/")[0];return{sn:t,linkMode:r,ws:o,application:n,devicePort:s}}function callDeviceWithOwnSn(e){const t={host:e.ip,port:e.port,path:_api.default.reportSn,headers:{"device-serial-number":e.sn},timeout:3e3},r=_http.default.request(t,()=>{_sharedUtils.colorconsole.log(`### App Server ### 通知手机设备(${e.sn})下发SN成功`)}).on("error",t=>{_sharedUtils.colorconsole.warn(`### App Server ### 通知手机设备(${e.sn})下发SN失败 错误信息: ${t.message}`)}).on("timeout",(function(){_sharedUtils.colorconsole.warn(`### App Server ### 通知手机设备(${e.sn})下发SN失败`),r.abort()}));r.end()}exports.LINK_MODE=LINK_MODE;
//# sourceMappingURL=index.js.map
+2
View File
@@ -0,0 +1,2 @@
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createSocketServer=createSocketServer;var _socket=_interopRequireDefault(require("socket.io")),_utils=require("../lib/utils");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function createSocketServer(e,o){const r=(0,_socket.default)(e);o.context.io=r,r.on("connection",e=>{r.on("error",e=>{_utils.colorconsole.error(`### App Socket Server ### websocket server发生错误: ${e.message}`)}),_utils.colorconsole.info(`### App Socket Server ### websocket用户(${(0,_utils.stripPrefixForIPV4MappedIPV6Address)(e.conn.remoteAddress)})连入到websocket server`),e.on("disconnect",()=>{_utils.colorconsole.info("### App Socket Server ### websocket client与websocket server断开"),r.emit("user disconnected")})})}
//# sourceMappingURL=wsserver.js.map