9remote 3.0.33 → 3.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +181 -163
- package/dist/extension/background.js +261 -0
- package/dist/extension/icons/icon128.png +0 -0
- package/dist/extension/icons/icon16.png +0 -0
- package/dist/extension/icons/icon48.png +0 -0
- package/dist/extension/manifest.json +11 -0
- package/dist/extension/popup.html +58 -0
- package/dist/extension/popup.js +23 -0
- package/dist/ptyDaemon.cjs +9 -9
- package/dist/server.cjs +843 -529
- package/dist/ui/assets/index-BKC13tXO.js +8 -0
- package/dist/ui/index.html +1 -1
- package/dist/web/404.html +1 -1
- package/dist/web/__next.__PAGE__.txt +2 -2
- package/dist/web/__next._full.txt +8 -8
- package/dist/web/__next._head.txt +1 -1
- package/dist/web/__next._index.txt +7 -7
- package/dist/web/__next._tree.txt +2 -2
- package/dist/web/_next/static/chunks/1222.16edfbb0beb9081f.js +1 -0
- package/dist/web/_next/static/chunks/1228.c4aa83586b3730b6.js +1 -0
- package/dist/web/_next/static/chunks/1243.3f23d89283c156ea.js +1 -0
- package/dist/web/_next/static/chunks/132.71f657e5a607b7d3.js +1 -0
- package/dist/web/_next/static/chunks/1750.ea89a41e86ac2790.js +1 -0
- package/dist/web/_next/static/chunks/2038.b77e2c3d38385a76.js +1 -0
- package/dist/web/_next/static/chunks/213.ae43f03862ad9cc1.js +1 -0
- package/dist/web/_next/static/chunks/2180.edcf5dc3d77ceee8.js +1 -0
- package/dist/web/_next/static/chunks/2849.d810c3fdb2054b14.js +1 -0
- package/dist/web/_next/static/chunks/3429.e69c6bd48e1207a9.js +1 -0
- package/dist/web/_next/static/chunks/3514.20bd03c8194dec25.js +1 -0
- package/dist/web/_next/static/chunks/{4300-07e861bf93bf7d91.js → 4300-a66b52c9e1a27db3.js} +1 -1
- package/dist/web/_next/static/chunks/4643.1e356e007756e19d.js +1 -0
- package/dist/web/_next/static/chunks/5788-f0c87f9c14fa0ff9.js +1 -0
- package/dist/web/_next/static/chunks/6419.34fdd4aa97c5cc5d.js +1 -0
- package/dist/web/_next/static/chunks/6739.22a05398bfd34922.js +1 -0
- package/dist/web/_next/static/chunks/674.b2f5d5fc3fb84c4a.js +1 -0
- package/dist/web/_next/static/chunks/6742.88fddf128fbeb43d.js +1 -0
- package/dist/web/_next/static/chunks/7507.77d9ac9eb03518f7.js +1 -0
- package/dist/web/_next/static/chunks/7960.2754ce9111bef59e.js +1 -0
- package/dist/web/_next/static/chunks/8467.c2c0273ac5e97e34.js +1 -0
- package/dist/web/_next/static/chunks/8638.f44546e4532d76e8.js +1 -0
- package/dist/web/_next/static/chunks/8762-e88a7f91d20d82bd.js +1 -0
- package/dist/web/_next/static/chunks/8922-4c589850b01d2e12.js +1 -0
- package/dist/web/_next/static/chunks/925.7cfb725e605559a0.js +1 -0
- package/dist/web/_next/static/chunks/9259.97e2f3306fc149c7.js +1 -0
- package/dist/web/_next/static/chunks/9299.e37149b455be7e9d.js +1 -0
- package/dist/web/_next/static/chunks/app/dev/question/page-c7128ddf798789f1.js +1 -0
- package/dist/web/_next/static/chunks/app/layout-a0e78c8427f97e4f.js +1 -0
- package/dist/web/_next/static/chunks/app/login/{page-df0619de376c5db8.js → page-2a046d10af50c87a.js} +1 -1
- package/dist/web/_next/static/chunks/app/{page-d0e1fb551728bb6f.js → page-8387dba850541259.js} +2 -2
- package/dist/web/_next/static/chunks/app/workspace/layout-9b28454945238595.js +20 -0
- package/dist/web/_next/static/chunks/webpack-beef15eb580fc66b.js +1 -0
- package/dist/web/_next/static/css/c48f9629be2a67b4.css +1 -0
- package/dist/web/_not-found/__next._full.txt +7 -7
- package/dist/web/_not-found/__next._head.txt +1 -1
- package/dist/web/_not-found/__next._index.txt +7 -7
- package/dist/web/_not-found/__next._not-found.__PAGE__.txt +1 -1
- package/dist/web/_not-found/__next._not-found.txt +1 -1
- package/dist/web/_not-found/__next._tree.txt +2 -2
- package/dist/web/_not-found.html +1 -1
- package/dist/web/_not-found.txt +7 -7
- package/dist/web/admin/__next._full.txt +8 -8
- package/dist/web/admin/__next._head.txt +1 -1
- package/dist/web/admin/__next._index.txt +7 -7
- package/dist/web/admin/__next._tree.txt +2 -2
- package/dist/web/admin/__next.admin.__PAGE__.txt +2 -2
- package/dist/web/admin/__next.admin.txt +1 -1
- package/dist/web/admin/access/__next._full.txt +8 -8
- package/dist/web/admin/access/__next._head.txt +1 -1
- package/dist/web/admin/access/__next._index.txt +7 -7
- package/dist/web/admin/access/__next._tree.txt +2 -2
- package/dist/web/admin/access/__next.admin.access.__PAGE__.txt +2 -2
- package/dist/web/admin/access/__next.admin.access.txt +1 -1
- package/dist/web/admin/access/__next.admin.txt +1 -1
- package/dist/web/admin/access.html +1 -1
- package/dist/web/admin/access.txt +8 -8
- package/dist/web/admin/login/__next._full.txt +8 -8
- package/dist/web/admin/login/__next._head.txt +1 -1
- package/dist/web/admin/login/__next._index.txt +7 -7
- package/dist/web/admin/login/__next._tree.txt +2 -2
- package/dist/web/admin/login/__next.admin.login.__PAGE__.txt +2 -2
- package/dist/web/admin/login/__next.admin.login.txt +1 -1
- package/dist/web/admin/login/__next.admin.txt +1 -1
- package/dist/web/admin/login.html +1 -1
- package/dist/web/admin/login.txt +8 -8
- package/dist/web/admin/ota/__next._full.txt +8 -8
- package/dist/web/admin/ota/__next._head.txt +1 -1
- package/dist/web/admin/ota/__next._index.txt +7 -7
- package/dist/web/admin/ota/__next._tree.txt +2 -2
- package/dist/web/admin/ota/__next.admin.ota.__PAGE__.txt +2 -2
- package/dist/web/admin/ota/__next.admin.ota.txt +1 -1
- package/dist/web/admin/ota/__next.admin.txt +1 -1
- package/dist/web/admin/ota.html +1 -1
- package/dist/web/admin/ota.txt +8 -8
- package/dist/web/admin/turn/__next._full.txt +8 -8
- package/dist/web/admin/turn/__next._head.txt +1 -1
- package/dist/web/admin/turn/__next._index.txt +7 -7
- package/dist/web/admin/turn/__next._tree.txt +2 -2
- package/dist/web/admin/turn/__next.admin.turn.__PAGE__.txt +2 -2
- package/dist/web/admin/turn/__next.admin.turn.txt +1 -1
- package/dist/web/admin/turn/__next.admin.txt +1 -1
- package/dist/web/admin/turn.html +1 -1
- package/dist/web/admin/turn.txt +8 -8
- package/dist/web/admin.html +1 -1
- package/dist/web/admin.txt +8 -8
- package/dist/web/dev/question/__next._full.txt +8 -8
- package/dist/web/dev/question/__next._head.txt +1 -1
- package/dist/web/dev/question/__next._index.txt +7 -7
- package/dist/web/dev/question/__next._tree.txt +2 -2
- package/dist/web/dev/question/__next.dev.question.__PAGE__.txt +2 -2
- package/dist/web/dev/question/__next.dev.question.txt +1 -1
- package/dist/web/dev/question/__next.dev.txt +1 -1
- package/dist/web/dev/question.html +1 -1
- package/dist/web/dev/question.txt +8 -8
- package/dist/web/download/__next._full.txt +8 -8
- package/dist/web/download/__next._head.txt +1 -1
- package/dist/web/download/__next._index.txt +7 -7
- package/dist/web/download/__next._tree.txt +2 -2
- package/dist/web/download/__next.download.__PAGE__.txt +2 -2
- package/dist/web/download/__next.download.txt +1 -1
- package/dist/web/download.html +1 -1
- package/dist/web/download.txt +8 -8
- package/dist/web/index.html +1 -1
- package/dist/web/index.txt +8 -8
- package/dist/web/login/__next._full.txt +8 -8
- package/dist/web/login/__next._head.txt +1 -1
- package/dist/web/login/__next._index.txt +7 -7
- package/dist/web/login/__next._tree.txt +2 -2
- package/dist/web/login/__next.login.__PAGE__.txt +2 -2
- package/dist/web/login/__next.login.txt +1 -1
- package/dist/web/login.html +1 -1
- package/dist/web/login.txt +8 -8
- package/dist/web/sw.js +2 -8
- package/dist/web/workspace/__next._full.txt +8 -8
- package/dist/web/workspace/__next._head.txt +1 -1
- package/dist/web/workspace/__next._index.txt +7 -7
- package/dist/web/workspace/__next._tree.txt +2 -2
- package/dist/web/workspace/__next.workspace.__PAGE__.txt +1 -1
- package/dist/web/workspace/__next.workspace.txt +2 -2
- package/dist/web/workspace/browse/__next._full.txt +8 -8
- package/dist/web/workspace/browse/__next._head.txt +1 -1
- package/dist/web/workspace/browse/__next._index.txt +7 -7
- package/dist/web/workspace/browse/__next._tree.txt +2 -2
- package/dist/web/workspace/browse/__next.workspace.browse.__PAGE__.txt +1 -1
- package/dist/web/workspace/browse/__next.workspace.browse.txt +1 -1
- package/dist/web/workspace/browse/__next.workspace.txt +2 -2
- package/dist/web/workspace/browse.html +1 -1
- package/dist/web/workspace/browse.txt +8 -8
- package/dist/web/workspace/editor/__next._full.txt +8 -8
- package/dist/web/workspace/editor/__next._head.txt +1 -1
- package/dist/web/workspace/editor/__next._index.txt +7 -7
- package/dist/web/workspace/editor/__next._tree.txt +2 -2
- package/dist/web/workspace/editor/__next.workspace.editor.__PAGE__.txt +1 -1
- package/dist/web/workspace/editor/__next.workspace.editor.txt +1 -1
- package/dist/web/workspace/editor/__next.workspace.txt +2 -2
- package/dist/web/workspace/editor.html +1 -1
- package/dist/web/workspace/editor.txt +8 -8
- package/dist/web/workspace/files/__next._full.txt +8 -8
- package/dist/web/workspace/files/__next._head.txt +1 -1
- package/dist/web/workspace/files/__next._index.txt +7 -7
- package/dist/web/workspace/files/__next._tree.txt +2 -2
- package/dist/web/workspace/files/__next.workspace.files.__PAGE__.txt +1 -1
- package/dist/web/workspace/files/__next.workspace.files.txt +1 -1
- package/dist/web/workspace/files/__next.workspace.txt +2 -2
- package/dist/web/workspace/files.html +1 -1
- package/dist/web/workspace/files.txt +8 -8
- package/dist/web/workspace/git/__next._full.txt +8 -8
- package/dist/web/workspace/git/__next._head.txt +1 -1
- package/dist/web/workspace/git/__next._index.txt +7 -7
- package/dist/web/workspace/git/__next._tree.txt +2 -2
- package/dist/web/workspace/git/__next.workspace.git.__PAGE__.txt +1 -1
- package/dist/web/workspace/git/__next.workspace.git.txt +1 -1
- package/dist/web/workspace/git/__next.workspace.txt +2 -2
- package/dist/web/workspace/git.html +1 -1
- package/dist/web/workspace/git.txt +8 -8
- package/dist/web/workspace/mobile/__next._full.txt +8 -8
- package/dist/web/workspace/mobile/__next._head.txt +1 -1
- package/dist/web/workspace/mobile/__next._index.txt +7 -7
- package/dist/web/workspace/mobile/__next._tree.txt +2 -2
- package/dist/web/workspace/mobile/__next.workspace.mobile.__PAGE__.txt +1 -1
- package/dist/web/workspace/mobile/__next.workspace.mobile.txt +1 -1
- package/dist/web/workspace/mobile/__next.workspace.txt +2 -2
- package/dist/web/workspace/mobile.html +1 -1
- package/dist/web/workspace/mobile.txt +8 -8
- package/dist/web/workspace/pair/__next._full.txt +8 -8
- package/dist/web/workspace/pair/__next._head.txt +1 -1
- package/dist/web/workspace/pair/__next._index.txt +7 -7
- package/dist/web/workspace/pair/__next._tree.txt +2 -2
- package/dist/web/workspace/pair/__next.workspace.pair.__PAGE__.txt +1 -1
- package/dist/web/workspace/pair/__next.workspace.pair.txt +1 -1
- package/dist/web/workspace/pair/__next.workspace.txt +2 -2
- package/dist/web/workspace/pair.html +1 -1
- package/dist/web/workspace/pair.txt +8 -8
- package/dist/web/workspace/remote/__next._full.txt +8 -8
- package/dist/web/workspace/remote/__next._head.txt +1 -1
- package/dist/web/workspace/remote/__next._index.txt +7 -7
- package/dist/web/workspace/remote/__next._tree.txt +2 -2
- package/dist/web/workspace/remote/__next.workspace.remote.__PAGE__.txt +1 -1
- package/dist/web/workspace/remote/__next.workspace.remote.txt +1 -1
- package/dist/web/workspace/remote/__next.workspace.txt +2 -2
- package/dist/web/workspace/remote.html +1 -1
- package/dist/web/workspace/remote.txt +8 -8
- package/dist/web/workspace/terminal/default/__next._full.txt +22 -21
- package/dist/web/workspace/terminal/default/__next._head.txt +1 -1
- package/dist/web/workspace/terminal/default/__next._index.txt +7 -7
- package/dist/web/workspace/terminal/default/__next._tree.txt +2 -2
- package/dist/web/workspace/terminal/default/__next.workspace.terminal.$d$sessionId.__PAGE__.txt +1 -1
- package/dist/web/workspace/terminal/default/__next.workspace.terminal.$d$sessionId.txt +1 -1
- package/dist/web/workspace/terminal/default/__next.workspace.terminal.txt +1 -1
- package/dist/web/workspace/terminal/default/__next.workspace.txt +2 -2
- package/dist/web/workspace/terminal/default.html +1 -1
- package/dist/web/workspace/terminal/default.txt +22 -21
- package/dist/web/workspace/welcome/__next._full.txt +8 -8
- package/dist/web/workspace/welcome/__next._head.txt +1 -1
- package/dist/web/workspace/welcome/__next._index.txt +7 -7
- package/dist/web/workspace/welcome/__next._tree.txt +2 -2
- package/dist/web/workspace/welcome/__next.workspace.txt +2 -2
- package/dist/web/workspace/welcome/__next.workspace.welcome.__PAGE__.txt +1 -1
- package/dist/web/workspace/welcome/__next.workspace.welcome.txt +1 -1
- package/dist/web/workspace/welcome.html +1 -1
- package/dist/web/workspace/welcome.txt +8 -8
- package/dist/web/workspace/workspaces/__next._full.txt +8 -8
- package/dist/web/workspace/workspaces/__next._head.txt +1 -1
- package/dist/web/workspace/workspaces/__next._index.txt +7 -7
- package/dist/web/workspace/workspaces/__next._tree.txt +2 -2
- package/dist/web/workspace/workspaces/__next.workspace.txt +2 -2
- package/dist/web/workspace/workspaces/__next.workspace.workspaces.__PAGE__.txt +1 -1
- package/dist/web/workspace/workspaces/__next.workspace.workspaces.txt +1 -1
- package/dist/web/workspace/workspaces.html +1 -1
- package/dist/web/workspace/workspaces.txt +8 -8
- package/dist/web/workspace.html +1 -1
- package/dist/web/workspace.txt +8 -8
- package/package.json +5 -2
- package/dist/ui/assets/index-DaXUWL4p.js +0 -8
- package/dist/web/_next/static/chunks/1222.a2ce7d7f04241e2a.js +0 -1
- package/dist/web/_next/static/chunks/1228.046ad5fd038f5192.js +0 -1
- package/dist/web/_next/static/chunks/1243.1d11020940b8a88b.js +0 -1
- package/dist/web/_next/static/chunks/132.1ed2fce3a4b6f7ee.js +0 -1
- package/dist/web/_next/static/chunks/1750.09ca4eade7a6e5d3.js +0 -1
- package/dist/web/_next/static/chunks/2038.b7c72b442a1b2d92.js +0 -1
- package/dist/web/_next/static/chunks/2081-e831caac4b77c71b.js +0 -1
- package/dist/web/_next/static/chunks/213.f07a816120a320ba.js +0 -1
- package/dist/web/_next/static/chunks/2180.23585bd3f3308f3a.js +0 -1
- package/dist/web/_next/static/chunks/2849.360e2c64521fa795.js +0 -1
- package/dist/web/_next/static/chunks/3429.98d7e79ff6d2a6ce.js +0 -1
- package/dist/web/_next/static/chunks/3514.9079bf49bb3e05c9.js +0 -1
- package/dist/web/_next/static/chunks/4643.ddf3ea3a760e73a5.js +0 -1
- package/dist/web/_next/static/chunks/5788-1564be0da354c064.js +0 -1
- package/dist/web/_next/static/chunks/6419.99aa173d83f20370.js +0 -1
- package/dist/web/_next/static/chunks/6739.82570eba0a02cb26.js +0 -1
- package/dist/web/_next/static/chunks/674.97a7237f011fb986.js +0 -1
- package/dist/web/_next/static/chunks/6742.bc3783b9784ead96.js +0 -1
- package/dist/web/_next/static/chunks/7507.28a3807b5d02a5c1.js +0 -1
- package/dist/web/_next/static/chunks/7960.026e07028dd25edb.js +0 -1
- package/dist/web/_next/static/chunks/8467.290e9bde34b58e7c.js +0 -1
- package/dist/web/_next/static/chunks/8638.237712645dcdcb8a.js +0 -1
- package/dist/web/_next/static/chunks/8922-6961d48ca52e1c93.js +0 -1
- package/dist/web/_next/static/chunks/925.fe600c6039a3201d.js +0 -1
- package/dist/web/_next/static/chunks/9259.c450f561db04037d.js +0 -1
- package/dist/web/_next/static/chunks/9299.83236781dfa74eb0.js +0 -1
- package/dist/web/_next/static/chunks/app/dev/question/page-4bb0cca12fac67eb.js +0 -1
- package/dist/web/_next/static/chunks/app/layout-db3ce810a0a58245.js +0 -1
- package/dist/web/_next/static/chunks/app/workspace/layout-962bdc55fd3688d7.js +0 -15
- package/dist/web/_next/static/chunks/webpack-d2ee6953aa988e78.js +0 -1
- package/dist/web/_next/static/css/68a0b2d972b421cb.css +0 -1
- package/dist/web/proxy.html +0 -179
- package/dist/web/sw-site.js +0 -283
- package/dist/web/swBridgeClaim.js +0 -57
- /package/dist/web/_next/static/{wQF273g4wNnUv72vtLjBT → hFRLMLaLieW6POo9cLvLQ}/_buildManifest.js +0 -0
- /package/dist/web/_next/static/{wQF273g4wNnUv72vtLjBT → hFRLMLaLieW6POo9cLvLQ}/_ssgManifest.js +0 -0
package/dist/cli.cjs
CHANGED
|
@@ -1,57 +1,57 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
const __importMetaUrl = require('url').pathToFileURL(__filename).href;
|
|
3
|
-
var
|
|
4
|
-
`)[0].replace(/\=|\s+|\"/gi,"").toLowerCase();case"win32":return A.toString().split("REG_SZ")[1].replace(/\r+|\n+|\s+/gi,"").toLowerCase();case"linux":return A.toString().replace(/\r+|\n+|\s+/gi,"").toLowerCase();case"freebsd":return A.toString().replace(/\r+|\n+|\s+/gi,"").toLowerCase();default:throw new Error("Unsupported platform: "+process.platform)}}function l(A){var k=c((0,d.execSync)(S[E]).toString());return A?k:a(k)}function u(A){return new p.default(function(k,M){return(0,d.exec)(S[E],{},function(g,T,L){if(g)return M(new Error("Error while obtaining machine id: "+g.stack));var C=c(T.toString());return k(A?C:a(C))})})}Object.defineProperty(o,"__esModule",{value:!0});var f=n(35),p=i(f);o.machineIdSync=l,o.machineId=u;var d=n(70),h=n(71),w=process,E=w.platform,O={native:"%windir%\\System32",mixed:"%windir%\\sysnative\\cmd.exe /c %windir%\\System32"},S={darwin:"ioreg -rd1 -c IOPlatformExpertDevice",win32:O[s()]+"\\REG.exe QUERY HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography /v MachineGuid",linux:"( cat /var/lib/dbus/machine-id /etc/machine-id 2> /dev/null || hostname ) | head -n 1 || :",freebsd:"kenv -q smbios.system.uuid || sysctl -n kern.hostuuid"}},function(r,o,n){r.exports={default:n(36),__esModule:!0}},function(r,o,n){n(66),n(68),n(69),n(67),r.exports=n(6).Promise},function(r,o){r.exports=function(){}},function(r,o){r.exports=function(n,i,s,a){if(!(n instanceof i)||a!==void 0&&a in n)throw TypeError(s+": incorrect invocation!");return n}},function(r,o,n){var i=n(13),s=n(31),a=n(62);r.exports=function(c){return function(l,u,f){var p,d=i(l),h=s(d.length),w=a(f,h);if(c&&u!=u){for(;h>w;)if(p=d[w++],p!=p)return!0}else for(;h>w;w++)if((c||w in d)&&d[w]===u)return c||w||0;return!c&&-1}}},function(r,d,n){var i=n(7),s=n(44),a=n(43),c=n(3),l=n(31),u=n(64),f={},p={},d=r.exports=function(h,w,E,O,S){var A,k,M,g,T=S?function(){return h}:u(h),L=i(E,O,w?2:1),C=0;if(typeof T!="function")throw TypeError(h+" is not iterable!");if(a(T)){for(A=l(h.length);A>C;C++)if(g=w?L(c(k=h[C])[0],k[1]):L(h[C]),g===f||g===p)return g}else for(M=T.call(h);!(k=M.next()).done;)if(g=s(M,L,k.value,w),g===f||g===p)return g};d.BREAK=f,d.RETURN=p},function(r,o){r.exports=function(n,i,s){var a=s===void 0;switch(i.length){case 0:return a?n():n.call(s);case 1:return a?n(i[0]):n.call(s,i[0]);case 2:return a?n(i[0],i[1]):n.call(s,i[0],i[1]);case 3:return a?n(i[0],i[1],i[2]):n.call(s,i[0],i[1],i[2]);case 4:return a?n(i[0],i[1],i[2],i[3]):n.call(s,i[0],i[1],i[2],i[3])}return n.apply(s,i)}},function(r,o,n){var i=n(11);r.exports=Object("z").propertyIsEnumerable(0)?Object:function(s){return i(s)=="String"?s.split(""):Object(s)}},function(r,o,n){var i=n(10),s=n(1)("iterator"),a=Array.prototype;r.exports=function(c){return c!==void 0&&(i.Array===c||a[s]===c)}},function(r,o,n){var i=n(3);r.exports=function(s,a,c,l){try{return l?a(i(c)[0],c[1]):a(c)}catch(f){var u=s.return;throw u!==void 0&&i(u.call(s)),f}}},function(r,o,n){"use strict";var i=n(49),s=n(17),a=n(18),c={};n(5)(c,n(1)("iterator"),function(){return this}),r.exports=function(l,u,f){l.prototype=i(c,{next:s(1,f)}),a(l,u+" Iterator")}},function(r,o,n){var i=n(1)("iterator"),s=!1;try{var a=[7][i]();a.return=function(){s=!0},Array.from(a,function(){throw 2})}catch{}r.exports=function(c,l){if(!l&&!s)return!1;var u=!1;try{var f=[7],p=f[i]();p.next=function(){return{done:u=!0}},f[i]=function(){return p},c(f)}catch{}return u}},function(r,o){r.exports=function(n,i){return{value:i,done:!!n}}},function(r,o,n){var i=n(2),s=n(30).set,a=i.MutationObserver||i.WebKitMutationObserver,c=i.process,l=i.Promise,u=n(11)(c)=="process";r.exports=function(){var f,p,d,h=function(){var S,A;for(u&&(S=c.domain)&&S.exit();f;){A=f.fn,f=f.next;try{A()}catch(k){throw f?d():p=void 0,k}}p=void 0,S&&S.enter()};if(u)d=function(){c.nextTick(h)};else if(a){var w=!0,E=document.createTextNode("");new a(h).observe(E,{characterData:!0}),d=function(){E.data=w=!w}}else if(l&&l.resolve){var O=l.resolve();d=function(){O.then(h)}}else d=function(){s.call(i,h)};return function(S){var A={fn:S,next:void 0};p&&(p.next=A),f||(f=A,d()),p=A}}},function(r,o,n){var i=n(3),s=n(50),a=n(22),c=n(19)("IE_PROTO"),l=function(){},u="prototype",f=function(){var p,d=n(16)("iframe"),h=a.length,w=">";for(d.style.display="none",n(25).appendChild(d),d.src="javascript:",p=d.contentWindow.document,p.open(),p.write("<script>document.F=Object</script"+w),p.close(),f=p.F;h--;)delete f[u][a[h]];return f()};r.exports=Object.create||function(p,d){var h;return p!==null?(l[u]=i(p),h=new l,l[u]=null,h[c]=p):h=f(),d===void 0?h:s(h,d)}},function(r,o,n){var i=n(12),s=n(3),a=n(54);r.exports=n(4)?Object.defineProperties:function(c,l){s(c);for(var u,f=a(l),p=f.length,d=0;p>d;)i.f(c,u=f[d++],l[u]);return c}},function(r,o,n){var i=n(55),s=n(17),a=n(13),c=n(32),l=n(8),u=n(26),f=Object.getOwnPropertyDescriptor;o.f=n(4)?f:function(p,d){if(p=a(p),d=c(d,!0),u)try{return f(p,d)}catch{}if(l(p,d))return s(!i.f.call(p,d),p[d])}},function(r,o,n){var i=n(8),s=n(63),a=n(19)("IE_PROTO"),c=Object.prototype;r.exports=Object.getPrototypeOf||function(l){return l=s(l),i(l,a)?l[a]:typeof l.constructor=="function"&&l instanceof l.constructor?l.constructor.prototype:l instanceof Object?c:null}},function(r,o,n){var i=n(8),s=n(13),a=n(39)(!1),c=n(19)("IE_PROTO");r.exports=function(l,u){var f,p=s(l),d=0,h=[];for(f in p)f!=c&&i(p,f)&&h.push(f);for(;u.length>d;)i(p,f=u[d++])&&(~a(h,f)||h.push(f));return h}},function(r,o,n){var i=n(53),s=n(22);r.exports=Object.keys||function(a){return i(a,s)}},function(r,o){o.f={}.propertyIsEnumerable},function(r,o,n){var i=n(5);r.exports=function(s,a,c){for(var l in a)c&&s[l]?s[l]=a[l]:i(s,l,a[l]);return s}},function(r,o,n){r.exports=n(5)},function(r,o,n){var i=n(9),s=n(3),a=function(c,l){if(s(c),!i(l)&&l!==null)throw TypeError(l+": can't set as prototype!")};r.exports={set:Object.setPrototypeOf||("__proto__"in{}?(function(c,l,u){try{u=n(7)(Function.call,n(51).f(Object.prototype,"__proto__").set,2),u(c,[]),l=!(c instanceof Array)}catch{l=!0}return function(f,p){return a(f,p),l?f.__proto__=p:u(f,p),f}})({},!1):void 0),check:a}},function(r,o,n){"use strict";var i=n(2),s=n(6),a=n(12),c=n(4),l=n(1)("species");r.exports=function(u){var f=typeof s[u]=="function"?s[u]:i[u];c&&f&&!f[l]&&a.f(f,l,{configurable:!0,get:function(){return this}})}},function(r,o,n){var i=n(3),s=n(14),a=n(1)("species");r.exports=function(c,l){var u,f=i(c).constructor;return f===void 0||(u=i(f)[a])==null?l:s(u)}},function(r,o,n){var i=n(20),s=n(15);r.exports=function(a){return function(c,l){var u,f,p=String(s(c)),d=i(l),h=p.length;return d<0||d>=h?a?"":void 0:(u=p.charCodeAt(d),u<55296||u>56319||d+1===h||(f=p.charCodeAt(d+1))<56320||f>57343?a?p.charAt(d):u:a?p.slice(d,d+2):(u-55296<<10)+(f-56320)+65536)}}},function(r,o,n){var i=n(20),s=Math.max,a=Math.min;r.exports=function(c,l){return c=i(c),c<0?s(c+l,0):a(c,l)}},function(r,o,n){var i=n(15);r.exports=function(s){return Object(i(s))}},function(r,o,n){var i=n(21),s=n(1)("iterator"),a=n(10);r.exports=n(6).getIteratorMethod=function(c){if(c!=null)return c[s]||c["@@iterator"]||a[i(c)]}},function(r,o,n){"use strict";var i=n(37),s=n(47),a=n(10),c=n(13);r.exports=n(27)(Array,"Array",function(l,u){this._t=c(l),this._i=0,this._k=u},function(){var l=this._t,u=this._k,f=this._i++;return!l||f>=l.length?(this._t=void 0,s(1)):u=="keys"?s(0,f):u=="values"?s(0,l[f]):s(0,[f,l[f]])},"values"),a.Arguments=a.Array,i("keys"),i("values"),i("entries")},function(r,o){},function(r,o,n){"use strict";var i,s,a,c=n(28),l=n(2),u=n(7),f=n(21),p=n(23),d=n(9),h=(n(3),n(14)),w=n(38),E=n(40),O=(n(58).set,n(60)),S=n(30).set,A=n(48)(),k="Promise",M=l.TypeError,T=l.process,g=l[k],T=l.process,L=f(T)=="process",C=function(){},J=!!(function(){try{var y=g.resolve(1),v=(y.constructor={})[n(1)("species")]=function(R){R(C,C)};return(L||typeof PromiseRejectionEvent=="function")&&y.then(C)instanceof v}catch{}})(),le=function(y,v){return y===v||y===g&&v===a},Te=function(y){var v;return!(!d(y)||typeof(v=y.then)!="function")&&v},ue=function(y){return le(g,y)?new Ke(y):new s(y)},Ke=s=function(y){var v,R;this.promise=new y(function(D,oe){if(v!==void 0||R!==void 0)throw M("Bad Promise constructor");v=D,R=oe}),this.resolve=h(v),this.reject=h(R)},Vt=function(y){try{y()}catch(v){return{error:v}}},Tt=function(y,v){if(!y._n){y._n=!0;var R=y._c;A(function(){for(var D=y._v,oe=y._s==1,At=0,Yt=function(st){var $e,dr,$n=oe?st.ok:st.fail,Ln=st.resolve,Xt=st.reject,mr=st.domain;try{$n?(oe||(y._h==2&&it(y),y._h=1),$n===!0?$e=D:(mr&&mr.enter(),$e=$n(D),mr&&mr.exit()),$e===st.promise?Xt(M("Promise-chain cycle")):(dr=Te($e))?dr.call($e,Ln,Xt):Ln($e)):Xt(D)}catch(ic){Xt(ic)}};R.length>At;)Yt(R[At++]);y._c=[],y._n=!1,v&&!y._h&&On(y)})}},On=function(y){S.call(l,function(){var v,R,D,oe=y._v;if(fe(y)&&(v=Vt(function(){L?T.emit("unhandledRejection",oe,y):(R=l.onunhandledrejection)?R({promise:y,reason:oe}):(D=l.console)&&D.error&&D.error("Unhandled promise rejection",oe)}),y._h=L||fe(y)?2:1),y._a=void 0,v)throw v.error})},fe=function(y){if(y._h==1)return!1;for(var v,R=y._a||y._c,D=0;R.length>D;)if(v=R[D++],v.fail||!fe(v.promise))return!1;return!0},it=function(y){S.call(l,function(){var v;L?T.emit("rejectionHandled",y):(v=l.onrejectionhandled)&&v({promise:y,reason:y._v})})},me=function(y){var v=this;v._d||(v._d=!0,v=v._w||v,v._v=y,v._s=2,v._a||(v._a=v._c.slice()),Tt(v,!0))},In=function(y){var v,R=this;if(!R._d){R._d=!0,R=R._w||R;try{if(R===y)throw M("Promise can't be resolved itself");(v=Te(y))?A(function(){var D={_w:R,_d:!1};try{v.call(y,u(In,D,1),u(me,D,1))}catch(oe){me.call(D,oe)}}):(R._v=y,R._s=1,Tt(R,!1))}catch(D){me.call({_w:R,_d:!1},D)}}};J||(g=function(y){w(this,g,k,"_h"),h(y),i.call(this);try{y(u(In,this,1),u(me,this,1))}catch(v){me.call(this,v)}},i=function(y){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},i.prototype=n(56)(g.prototype,{then:function(y,v){var R=ue(O(this,g));return R.ok=typeof y!="function"||y,R.fail=typeof v=="function"&&v,R.domain=L?T.domain:void 0,this._c.push(R),this._a&&this._a.push(R),this._s&&Tt(this,!1),R.promise},catch:function(y){return this.then(void 0,y)}}),Ke=function(){var y=new i;this.promise=y,this.resolve=u(In,y,1),this.reject=u(me,y,1)}),p(p.G+p.W+p.F*!J,{Promise:g}),n(18)(g,k),n(59)(k),a=n(6)[k],p(p.S+p.F*!J,k,{reject:function(y){var v=ue(this),R=v.reject;return R(y),v.promise}}),p(p.S+p.F*(c||!J),k,{resolve:function(y){if(y instanceof g&&le(y.constructor,this))return y;var v=ue(this),R=v.resolve;return R(y),v.promise}}),p(p.S+p.F*!(J&&n(46)(function(y){g.all(y).catch(C)})),k,{all:function(y){var v=this,R=ue(v),D=R.resolve,oe=R.reject,At=Vt(function(){var Yt=[],st=0,$e=1;E(y,!1,function(dr){var $n=st++,Ln=!1;Yt.push(void 0),$e++,v.resolve(dr).then(function(Xt){Ln||(Ln=!0,Yt[$n]=Xt,--$e||D(Yt))},oe)}),--$e||D(Yt)});return At&&oe(At.error),R.promise},race:function(y){var v=this,R=ue(v),D=R.reject,oe=Vt(function(){E(y,!1,function(At){v.resolve(At).then(R.resolve,D)})});return oe&&D(oe.error),R.promise}})},function(r,o,n){"use strict";var i=n(61)(!0);n(27)(String,"String",function(s){this._t=String(s),this._i=0},function(){var s,a=this._t,c=this._i;return c>=a.length?{value:void 0,done:!0}:(s=i(a,c),this._i+=s.length,{value:s,done:!1})})},function(r,o,n){n(65);for(var i=n(2),s=n(5),a=n(10),c=n(1)("toStringTag"),l=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],u=0;u<5;u++){var f=l[u],p=i[f],d=p&&p.prototype;d&&!d[c]&&s(d,c,f),a[f]=a.Array}},function(r,o){r.exports=require("child_process")},function(r,o){r.exports=require("crypto")}])})});var fa={};pc(fa,{initTray:()=>cr,killTray:()=>Dt,openBrowser:()=>Bt,showTrayNotification:()=>Fo,updateTrayTooltip:()=>Tn});function ra(e){for(let t of e)try{if(bn.default.existsSync(t))return t}catch{}return null}function Zl(){if(process.platform==="win32"){for(let e of ca)try{if(bn.default.existsSync(e))return bn.default.readFileSync(e).toString("base64")}catch{}return na}return na}function zl(){if(process.env.NREMOTE_DESKTOP)return!1;let e=process.platform;return!(!["darwin","win32","linux"].includes(e)||e==="linux"&&!process.env.DISPLAY)}function la(){let{port:e,tunnelUrl:t,running:r}=Sn,o=r?t?"Tunnel ON":"Local only":"Idle",n=`http://localhost:${e}`;return`9Remote \u2022 ${o}
|
|
5
|
-
Local: ${
|
|
6
|
-
Right-click to open / quit`}function
|
|
7
|
-
`,"utf8")}catch{}};return oa.default.createInterface({input:i.stdout}).on("line",c=>{try{let l=JSON.parse(c);if(l.type!=="click")return;l.index===0?r?.():l.index===1&&(t?.(),Dt(),setTimeout(()=>process.exit(0),500))}catch{}}),i.on("error",()=>{}),i.stderr.on("data",()=>{}),["Open Web UI","Shutdown"].forEach((c,l)=>s({action:"add-item",index:l,title:c,enabled:!0})),{_isWin:!0,_setTooltip(c){s({action:"set-tooltip",text:c})},sendAction(){},kill(){try{s({action:"kill"})}catch{}setTimeout(()=>{try{i&&!i.killed&&i.kill()}catch{}},300)}}}async function cr({port:e,onQuit:t,onOpenUI:r}){if(!zl())return null;if(process.platform==="win32")return Sn={port:e,tunnelUrl:"",running:!0},ae=tu({port:e,onQuit:t,onOpenUI:r}),ae;try{let o=eu();if(!o)return null;let i={darwin:"tray_darwin_release",win32:"tray_windows_release.exe",linux:"tray_linux_release"}[process.platform];if(!i)return null;let s=Be.default.join(aa,"systray2","traybin",i);if(!bn.default.existsSync(s))return null;if(process.platform!=="win32")try{bn.default.chmodSync(s,493)}catch{}if(Sn={port:e,tunnelUrl:"",running:!0},ae=new o({menu:ua(),debug:!1,copyDir:!0}),ae.onClick(a=>{let c=a.item?.title||a.item;c==="Open Web UI"?r?.():c==="Shutdown"&&(t?.(),Dt(),setTimeout(()=>process.exit(0),500))}),typeof ae.ready=="function")try{await ae.ready()}catch{return ae=null,null}else ae.onReady(()=>{}),ae.onError(()=>{});return ae}catch{return null}}function Tn({tunnelUrl:e,running:t}={}){if(e!==void 0&&(Sn.tunnelUrl=e),t!==void 0&&(Sn.running=t),!!ae){if(ae._isWin){ae._setTooltip?.(la());return}try{ae.sendAction({type:"update-menu",menu:ua(),seq_id:-1})?.catch?.(()=>{})}catch{}}}function Dt(){let e=ae;if(ae=null,e)try{e.kill(!0)}catch{}}function Fo({title:e="9Remote",message:t}){let r=process.platform;if(t){if(r==="win32"){let o=c=>String(c).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/'/g,"'").replace(/"/g,"""),n=c=>String(c).replace(/'/g,"''"),i="9Remote",s=`<toast><visual><binding template="ToastText02"><text id="1">${o(e)}</text><text id="2">${o(t)}</text></binding></visual></toast>`,a=["try {","[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType=WindowsRuntime] > $null;","[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType=WindowsRuntime] > $null;","$xml = New-Object Windows.Data.Xml.Dom.XmlDocument;",`$xml.LoadXml('${n(s)}');`,"$toast = [Windows.UI.Notifications.ToastNotification]::new($xml);",`[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier('${n(i)}').Show($toast);`,"} catch {","Add-Type -AssemblyName System.Windows.Forms;","$n = New-Object System.Windows.Forms.NotifyIcon;","$n.Icon = [System.Drawing.SystemIcons]::Information;",`$n.BalloonTipTitle = '${n(e)}';`,`$n.BalloonTipText = '${n(t)}';`,"$n.Visible = $true;","$n.ShowBalloonTip(5000);","Start-Sleep -Seconds 6;","$n.Dispose();","}"].join(" ");try{(0,ze.spawn)("powershell.exe",["-NoProfile","-WindowStyle","Hidden","-Command",a],{detached:!0,stdio:"ignore",windowsHide:!0}).unref()}catch{}return}if(r==="darwin"){try{let o=s=>String(s).replace(/"/g,'\\"'),n=`display notification "${o(t)}" with title "${o(e)}"`;(0,ze.spawn)("osascript",["-e",n],{detached:!0,stdio:"ignore"}).unref()}catch{}return}try{(0,ze.spawn)("notify-send",[e,t],{detached:!0,stdio:"ignore"}).unref()}catch{}}}function Bt(e){let t=process.platform;if(t==="win32"){try{(0,ze.spawn)("rundll32.exe",["url.dll,FileProtocolHandler",e],{detached:!0,stdio:"ignore",windowsHide:!0}).unref();return}catch{}try{(0,ze.spawn)("cmd.exe",["/d","/s","/c","start","",e],{detached:!0,stdio:"ignore",windowsHide:!0}).unref()}catch{}return}if(t==="darwin"){try{(0,ze.spawn)("open",[e],{detached:!0,stdio:"ignore"}).unref()}catch{}return}let r=[["setsid",["--fork","xdg-open",e]],["setsid",["xdg-open",e]],["xdg-open",[e]],["gio",["open",e]],["sensible-browser",[e]],["x-www-browser",[e]]];for(let[o,n]of r)try{(0,ze.spawn)(o,n,{detached:!0,stdio:"ignore",env:{...process.env}}).unref();return}catch{}}var ze,oa,bn,Be,ia,sa,aa,ae,Sn,Kr,na,ca,Jl,Ut=fc(()=>{ze=require("child_process"),oa=x(require("readline"),1),bn=x(require("fs"),1),Be=x(require("path"),1),ia=x(require("os"),1),sa=require("url"),aa=(0,Be.join)(ia.default.homedir(),".9remote","runtime","node_modules"),ae=null,Sn={port:0,tunnelUrl:"",running:!1},Kr=Be.default.dirname((0,sa.fileURLToPath)(__importMetaUrl)),na="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",ca=[Be.default.join(Kr,"assets","trayIcon.ico"),Be.default.join(Kr,"..","assets","trayIcon.ico")],Jl=[Be.default.join(Kr,"assets","tray.ps1"),Be.default.join(Kr,"..","assets","tray.ps1")]});var Yo=we((Jp,va)=>{va.exports={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8}});var Sa=we((Zp,ba)=>{var iu=Yo();function Ea(e){this.mode=iu.MODE_8BIT_BYTE,this.data=e}Ea.prototype={getLength:function(){return this.data.length},write:function(e){for(var t=0;t<this.data.length;t++)e.put(this.data.charCodeAt(t),8)}};ba.exports=Ea});var Xo=we((zp,Ta)=>{var Ie={glog:function(e){if(e<1)throw new Error("glog("+e+")");return Ie.LOG_TABLE[e]},gexp:function(e){for(;e<0;)e+=255;for(;e>=256;)e-=255;return Ie.EXP_TABLE[e]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(Y=0;Y<8;Y++)Ie.EXP_TABLE[Y]=1<<Y;var Y;for(Y=8;Y<256;Y++)Ie.EXP_TABLE[Y]=Ie.EXP_TABLE[Y-4]^Ie.EXP_TABLE[Y-5]^Ie.EXP_TABLE[Y-6]^Ie.EXP_TABLE[Y-8];var Y;for(Y=0;Y<255;Y++)Ie.LOG_TABLE[Ie.EXP_TABLE[Y]]=Y;var Y;Ta.exports=Ie});var qo=we((ed,Aa)=>{var jt=Xo();function Gr(e,t){if(e.length===void 0)throw new Error(e.length+"/"+t);for(var r=0;r<e.length&&e[r]===0;)r++;this.num=new Array(e.length-r+t);for(var o=0;o<e.length-r;o++)this.num[o]=e[o+r]}Gr.prototype={get:function(e){return this.num[e]},getLength:function(){return this.num.length},multiply:function(e){for(var t=new Array(this.getLength()+e.getLength()-1),r=0;r<this.getLength();r++)for(var o=0;o<e.getLength();o++)t[r+o]^=jt.gexp(jt.glog(this.get(r))+jt.glog(e.get(o)));return new Gr(t,0)},mod:function(e){if(this.getLength()-e.getLength()<0)return this;for(var t=jt.glog(this.get(0))-jt.glog(e.get(0)),r=new Array(this.getLength()),o=0;o<this.getLength();o++)r[o]=this.get(o);for(var n=0;n<e.getLength();n++)r[n]^=jt.gexp(jt.glog(e.get(n))+t);return new Gr(r,0).mod(e)}};Aa.exports=Gr});var Ra=we((td,xa)=>{xa.exports={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7}});var Oa=we((nd,Pa)=>{var Se=Yo(),ka=qo(),su=Xo(),Et=Ra(),te={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(e){for(var t=e<<10;te.getBCHDigit(t)-te.getBCHDigit(te.G15)>=0;)t^=te.G15<<te.getBCHDigit(t)-te.getBCHDigit(te.G15);return(e<<10|t)^te.G15_MASK},getBCHTypeNumber:function(e){for(var t=e<<12;te.getBCHDigit(t)-te.getBCHDigit(te.G18)>=0;)t^=te.G18<<te.getBCHDigit(t)-te.getBCHDigit(te.G18);return e<<12|t},getBCHDigit:function(e){for(var t=0;e!==0;)t++,e>>>=1;return t},getPatternPosition:function(e){return te.PATTERN_POSITION_TABLE[e-1]},getMask:function(e,t,r){switch(e){case Et.PATTERN000:return(t+r)%2===0;case Et.PATTERN001:return t%2===0;case Et.PATTERN010:return r%3===0;case Et.PATTERN011:return(t+r)%3===0;case Et.PATTERN100:return(Math.floor(t/2)+Math.floor(r/3))%2===0;case Et.PATTERN101:return t*r%2+t*r%3===0;case Et.PATTERN110:return(t*r%2+t*r%3)%2===0;case Et.PATTERN111:return(t*r%3+(t+r)%2)%2===0;default:throw new Error("bad maskPattern:"+e)}},getErrorCorrectPolynomial:function(e){for(var t=new ka([1],0),r=0;r<e;r++)t=t.multiply(new ka([1,su.gexp(r)],0));return t},getLengthInBits:function(e,t){if(1<=t&&t<10)switch(e){case Se.MODE_NUMBER:return 10;case Se.MODE_ALPHA_NUM:return 9;case Se.MODE_8BIT_BYTE:return 8;case Se.MODE_KANJI:return 8;default:throw new Error("mode:"+e)}else if(t<27)switch(e){case Se.MODE_NUMBER:return 12;case Se.MODE_ALPHA_NUM:return 11;case Se.MODE_8BIT_BYTE:return 16;case Se.MODE_KANJI:return 10;default:throw new Error("mode:"+e)}else if(t<41)switch(e){case Se.MODE_NUMBER:return 14;case Se.MODE_ALPHA_NUM:return 13;case Se.MODE_8BIT_BYTE:return 16;case Se.MODE_KANJI:return 12;default:throw new Error("mode:"+e)}else throw new Error("type:"+t)},getLostPoint:function(e){var t=e.getModuleCount(),r=0,o=0,n=0;for(o=0;o<t;o++)for(n=0;n<t;n++){for(var i=0,s=e.isDark(o,n),a=-1;a<=1;a++)if(!(o+a<0||t<=o+a))for(var c=-1;c<=1;c++)n+c<0||t<=n+c||a===0&&c===0||s===e.isDark(o+a,n+c)&&i++;i>5&&(r+=3+i-5)}for(o=0;o<t-1;o++)for(n=0;n<t-1;n++){var l=0;e.isDark(o,n)&&l++,e.isDark(o+1,n)&&l++,e.isDark(o,n+1)&&l++,e.isDark(o+1,n+1)&&l++,(l===0||l===4)&&(r+=3)}for(o=0;o<t;o++)for(n=0;n<t-6;n++)e.isDark(o,n)&&!e.isDark(o,n+1)&&e.isDark(o,n+2)&&e.isDark(o,n+3)&&e.isDark(o,n+4)&&!e.isDark(o,n+5)&&e.isDark(o,n+6)&&(r+=40);for(n=0;n<t;n++)for(o=0;o<t-6;o++)e.isDark(o,n)&&!e.isDark(o+1,n)&&e.isDark(o+2,n)&&e.isDark(o+3,n)&&e.isDark(o+4,n)&&!e.isDark(o+5,n)&&e.isDark(o+6,n)&&(r+=40);var u=0;for(n=0;n<t;n++)for(o=0;o<t;o++)e.isDark(o,n)&&u++;var f=Math.abs(100*u/t/t-50)/5;return r+=f*10,r}};Pa.exports=te});var Qo=we((rd,Ia)=>{Ia.exports={L:1,M:0,Q:3,H:2}});var La=we((od,$a)=>{var Vr=Qo();function Ue(e,t){this.totalCount=e,this.dataCount=t}Ue.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];Ue.getRSBlocks=function(e,t){var r=Ue.getRsBlockTable(e,t);if(r===void 0)throw new Error("bad rs block @ typeNumber:"+e+"/errorCorrectLevel:"+t);for(var o=r.length/3,n=[],i=0;i<o;i++)for(var s=r[i*3+0],a=r[i*3+1],c=r[i*3+2],l=0;l<s;l++)n.push(new Ue(a,c));return n};Ue.getRsBlockTable=function(e,t){switch(t){case Vr.L:return Ue.RS_BLOCK_TABLE[(e-1)*4+0];case Vr.M:return Ue.RS_BLOCK_TABLE[(e-1)*4+1];case Vr.Q:return Ue.RS_BLOCK_TABLE[(e-1)*4+2];case Vr.H:return Ue.RS_BLOCK_TABLE[(e-1)*4+3];default:return}};$a.exports=Ue});var Ca=we((id,Ma)=>{function _a(){this.buffer=[],this.length=0}_a.prototype={get:function(e){var t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)==1},put:function(e,t){for(var r=0;r<t;r++)this.putBit((e>>>t-r-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){var t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}};Ma.exports=_a});var Ua=we((sd,Ba)=>{var au=Sa(),bt=Oa(),cu=qo(),Na=La(),Da=Ca();function Fe(e,t){this.typeNumber=e,this.errorCorrectLevel=t,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}Fe.prototype={addData:function(e){var t=new au(e);this.dataList.push(t),this.dataCache=null},isDark:function(e,t){if(e<0||this.moduleCount<=e||t<0||this.moduleCount<=t)throw new Error(e+","+t);return this.modules[e][t]},getModuleCount:function(){return this.moduleCount},make:function(){if(this.typeNumber<1){var e=1;for(e=1;e<40;e++){for(var t=Na.getRSBlocks(e,this.errorCorrectLevel),r=new Da,o=0,n=0;n<t.length;n++)o+=t[n].dataCount;for(var i=0;i<this.dataList.length;i++){var s=this.dataList[i];r.put(s.mode,4),r.put(s.getLength(),bt.getLengthInBits(s.mode,e)),s.write(r)}if(r.getLengthInBits()<=o*8)break}this.typeNumber=e}this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(e,t){this.moduleCount=this.typeNumber*4+17,this.modules=new Array(this.moduleCount);for(var r=0;r<this.moduleCount;r++){this.modules[r]=new Array(this.moduleCount);for(var o=0;o<this.moduleCount;o++)this.modules[r][o]=null}this.setupPositionProbePattern(0,0),this.setupPositionProbePattern(this.moduleCount-7,0),this.setupPositionProbePattern(0,this.moduleCount-7),this.setupPositionAdjustPattern(),this.setupTimingPattern(),this.setupTypeInfo(e,t),this.typeNumber>=7&&this.setupTypeNumber(e),this.dataCache===null&&(this.dataCache=Fe.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,t)},setupPositionProbePattern:function(e,t){for(var r=-1;r<=7;r++)if(!(e+r<=-1||this.moduleCount<=e+r))for(var o=-1;o<=7;o++)t+o<=-1||this.moduleCount<=t+o||(0<=r&&r<=6&&(o===0||o===6)||0<=o&&o<=6&&(r===0||r===6)||2<=r&&r<=4&&2<=o&&o<=4?this.modules[e+r][t+o]=!0:this.modules[e+r][t+o]=!1)},getBestMaskPattern:function(){for(var e=0,t=0,r=0;r<8;r++){this.makeImpl(!0,r);var o=bt.getLostPoint(this);(r===0||e>o)&&(e=o,t=r)}return t},createMovieClip:function(e,t,r){var o=e.createEmptyMovieClip(t,r),n=1;this.make();for(var i=0;i<this.modules.length;i++)for(var s=i*n,a=0;a<this.modules[i].length;a++){var c=a*n,l=this.modules[i][a];l&&(o.beginFill(0,100),o.moveTo(c,s),o.lineTo(c+n,s),o.lineTo(c+n,s+n),o.lineTo(c,s+n),o.endFill())}return o},setupTimingPattern:function(){for(var e=8;e<this.moduleCount-8;e++)this.modules[e][6]===null&&(this.modules[e][6]=e%2===0);for(var t=8;t<this.moduleCount-8;t++)this.modules[6][t]===null&&(this.modules[6][t]=t%2===0)},setupPositionAdjustPattern:function(){for(var e=bt.getPatternPosition(this.typeNumber),t=0;t<e.length;t++)for(var r=0;r<e.length;r++){var o=e[t],n=e[r];if(this.modules[o][n]===null)for(var i=-2;i<=2;i++)for(var s=-2;s<=2;s++)Math.abs(i)===2||Math.abs(s)===2||i===0&&s===0?this.modules[o+i][n+s]=!0:this.modules[o+i][n+s]=!1}},setupTypeNumber:function(e){for(var t=bt.getBCHTypeNumber(this.typeNumber),r,o=0;o<18;o++)r=!e&&(t>>o&1)===1,this.modules[Math.floor(o/3)][o%3+this.moduleCount-8-3]=r;for(var n=0;n<18;n++)r=!e&&(t>>n&1)===1,this.modules[n%3+this.moduleCount-8-3][Math.floor(n/3)]=r},setupTypeInfo:function(e,t){for(var r=this.errorCorrectLevel<<3|t,o=bt.getBCHTypeInfo(r),n,i=0;i<15;i++)n=!e&&(o>>i&1)===1,i<6?this.modules[i][8]=n:i<8?this.modules[i+1][8]=n:this.modules[this.moduleCount-15+i][8]=n;for(var s=0;s<15;s++)n=!e&&(o>>s&1)===1,s<8?this.modules[8][this.moduleCount-s-1]=n:s<9?this.modules[8][15-s-1+1]=n:this.modules[8][15-s-1]=n;this.modules[this.moduleCount-8][8]=!e},mapData:function(e,t){for(var r=-1,o=this.moduleCount-1,n=7,i=0,s=this.moduleCount-1;s>0;s-=2)for(s===6&&s--;;){for(var a=0;a<2;a++)if(this.modules[o][s-a]===null){var c=!1;i<e.length&&(c=(e[i]>>>n&1)===1);var l=bt.getMask(t,o,s-a);l&&(c=!c),this.modules[o][s-a]=c,n--,n===-1&&(i++,n=7)}if(o+=r,o<0||this.moduleCount<=o){o-=r,r=-r;break}}}};Fe.PAD0=236;Fe.PAD1=17;Fe.createData=function(e,t,r){for(var o=Na.getRSBlocks(e,t),n=new Da,i=0;i<r.length;i++){var s=r[i];n.put(s.mode,4),n.put(s.getLength(),bt.getLengthInBits(s.mode,e)),s.write(n)}for(var a=0,c=0;c<o.length;c++)a+=o[c].dataCount;if(n.getLengthInBits()>a*8)throw new Error("code length overflow. ("+n.getLengthInBits()+">"+a*8+")");for(n.getLengthInBits()+4<=a*8&&n.put(0,4);n.getLengthInBits()%8!==0;)n.putBit(!1);for(;!(n.getLengthInBits()>=a*8||(n.put(Fe.PAD0,8),n.getLengthInBits()>=a*8));)n.put(Fe.PAD1,8);return Fe.createBytes(n,o)};Fe.createBytes=function(e,t){for(var r=0,o=0,n=0,i=new Array(t.length),s=new Array(t.length),a=0;a<t.length;a++){var c=t[a].dataCount,l=t[a].totalCount-c;o=Math.max(o,c),n=Math.max(n,l),i[a]=new Array(c);for(var u=0;u<i[a].length;u++)i[a][u]=255&e.buffer[u+r];r+=c;var f=bt.getErrorCorrectPolynomial(l),p=new cu(i[a],f.getLength()-1),d=p.mod(f);s[a]=new Array(f.getLength()-1);for(var h=0;h<s[a].length;h++){var w=h+d.getLength()-s[a].length;s[a][h]=w>=0?d.get(w):0}}for(var E=0,O=0;O<t.length;O++)E+=t[O].totalCount;for(var S=new Array(E),A=0,k=0;k<o;k++)for(var M=0;M<t.length;M++)k<i[M].length&&(S[A++]=i[M][k]);for(var g=0;g<n;g++)for(var T=0;T<t.length;T++)g<s[T].length&&(S[A++]=s[T][g]);return S};Ba.exports=Fe});var Ha=we((ad,Ka)=>{var lu=Ua(),Fa=Qo(),uu="\x1B[40m \x1B[0m",Yr="\x1B[47m \x1B[0m",fu=function(e){return e?uu:Yr},Jo=function(e){return{times:function(t){return new Array(t).join(e)}}},pu=function(e,t){for(var r=new Array(e),o=0;o<e;o++)r[o]=t;return r};Ka.exports={error:Fa.L,generate:function(e,t,r){typeof t=="function"&&(r=t,t={});var o=new lu(-1,this.error);o.addData(e),o.make();var n="";if(t&&t.small){var i=!0,s=!1,a=o.getModuleCount(),c=o.modules.slice(),l=a%2===1;l&&c.push(pu(a,s));var u={WHITE_ALL:"\u2588",WHITE_BLACK:"\u2580",BLACK_WHITE:"\u2584",BLACK_ALL:" "},f=Jo(u.BLACK_WHITE).times(a+3),p=Jo(u.WHITE_BLACK).times(a+3);n+=f+`
|
|
8
|
-
`;for(var d=0;d<a;d+=2){
|
|
9
|
-
`}l||(
|
|
10
|
-
`,o.modules.forEach(function(
|
|
11
|
-
`}),
|
|
12
|
-
`)){let r
|
|
13
|
-
`)}catch{}}function
|
|
14
|
-
=== SESSION ${new Date().toISOString()} pid=${process.pid} argv=${process.argv.slice(2).join(" ")} ===`),
|
|
15
|
-
`).filter(Boolean).slice(-e)}catch{return[]}}var
|
|
16
|
-
`)}function
|
|
3
|
+
var yc=Object.create;var Zr=Object.defineProperty;var wc=Object.getOwnPropertyDescriptor;var vc=Object.getOwnPropertyNames;var bc=Object.getPrototypeOf,Ec=Object.prototype.hasOwnProperty;var Sc=(e,r)=>()=>(e&&(r=e(e=0)),r);var ve=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports),Tc=(e,r)=>{for(var n in r)Zr(e,n,{get:r[n],enumerable:!0})},xc=(e,r,n,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of vc(r))!Ec.call(e,t)&&t!==n&&Zr(e,t,{get:()=>r[t],enumerable:!(o=wc(r,t))||o.enumerable});return e};var A=(e,r,n)=>(n=e!=null?yc(bc(e)):{},xc(r||!e||!e.__esModule?Zr(n,"default",{value:e,enumerable:!0}):n,e));var bi=ve((Dn,no)=>{(function(e,r){typeof Dn=="object"&&typeof no=="object"?no.exports=r(require("child_process"),require("crypto")):typeof define=="function"&&define.amd?define(["child_process","crypto"],r):typeof Dn=="object"?Dn["electron-machine-id"]=r(require("child_process"),require("crypto")):e["electron-machine-id"]=r(e.child_process,e.crypto)})(Dn,function(e,r){return(function(n){function o(i){if(t[i])return t[i].exports;var s=t[i]={exports:{},id:i,loaded:!1};return n[i].call(s.exports,s,s.exports,o),s.loaded=!0,s.exports}var t={};return o.m=n,o.c=t,o.p="",o(0)})([function(n,o,t){n.exports=t(34)},function(n,o,t){var i=t(29)("wks"),s=t(33),a=t(2).Symbol,c=typeof a=="function",l=n.exports=function(f){return i[f]||(i[f]=c&&a[f]||(c?a:s)("Symbol."+f))};l.store=i},function(n,o){var t=n.exports=typeof window<"u"&&window.Math==Math?window:typeof self<"u"&&self.Math==Math?self:Function("return this")();typeof __g=="number"&&(__g=t)},function(n,o,t){var i=t(9);n.exports=function(s){if(!i(s))throw TypeError(s+" is not an object!");return s}},function(n,o,t){n.exports=!t(24)(function(){return Object.defineProperty({},"a",{get:function(){return 7}}).a!=7})},function(n,o,t){var i=t(12),s=t(17);n.exports=t(4)?function(a,c,l){return i.f(a,c,s(1,l))}:function(a,c,l){return a[c]=l,a}},function(n,o){var t=n.exports={version:"2.4.0"};typeof __e=="number"&&(__e=t)},function(n,o,t){var i=t(14);n.exports=function(s,a,c){if(i(s),a===void 0)return s;switch(c){case 1:return function(l){return s.call(a,l)};case 2:return function(l,f){return s.call(a,l,f)};case 3:return function(l,f,u){return s.call(a,l,f,u)}}return function(){return s.apply(a,arguments)}}},function(n,o){var t={}.hasOwnProperty;n.exports=function(i,s){return t.call(i,s)}},function(n,o){n.exports=function(t){return typeof t=="object"?t!==null:typeof t=="function"}},function(n,o){n.exports={}},function(n,o){var t={}.toString;n.exports=function(i){return t.call(i).slice(8,-1)}},function(n,o,t){var i=t(3),s=t(26),a=t(32),c=Object.defineProperty;o.f=t(4)?Object.defineProperty:function(l,f,u){if(i(l),f=a(f,!0),i(u),s)try{return c(l,f,u)}catch{}if("get"in u||"set"in u)throw TypeError("Accessors not supported!");return"value"in u&&(l[f]=u.value),l}},function(n,o,t){var i=t(42),s=t(15);n.exports=function(a){return i(s(a))}},function(n,o){n.exports=function(t){if(typeof t!="function")throw TypeError(t+" is not a function!");return t}},function(n,o){n.exports=function(t){if(t==null)throw TypeError("Can't call method on "+t);return t}},function(n,o,t){var i=t(9),s=t(2).document,a=i(s)&&i(s.createElement);n.exports=function(c){return a?s.createElement(c):{}}},function(n,o){n.exports=function(t,i){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:i}}},function(n,o,t){var i=t(12).f,s=t(8),a=t(1)("toStringTag");n.exports=function(c,l,f){c&&!s(c=f?c:c.prototype,a)&&i(c,a,{configurable:!0,value:l})}},function(n,o,t){var i=t(29)("keys"),s=t(33);n.exports=function(a){return i[a]||(i[a]=s(a))}},function(n,o){var t=Math.ceil,i=Math.floor;n.exports=function(s){return isNaN(s=+s)?0:(s>0?i:t)(s)}},function(n,o,t){var i=t(11),s=t(1)("toStringTag"),a=i((function(){return arguments})())=="Arguments",c=function(l,f){try{return l[f]}catch{}};n.exports=function(l){var f,u,p;return l===void 0?"Undefined":l===null?"Null":typeof(u=c(f=Object(l),s))=="string"?u:a?i(f):(p=i(f))=="Object"&&typeof f.callee=="function"?"Arguments":p}},function(n,o){n.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(n,o,t){var i=t(2),s=t(6),a=t(7),c=t(5),l="prototype",f=function(u,p,d){var m,w,v,P=u&f.F,E=u&f.G,x=u&f.S,R=u&f.P,N=u&f.B,g=u&f.W,T=E?s:s[p]||(s[p]={}),_=T[l],D=E?i:x?i[p]:(i[p]||{})[l];E&&(d=p);for(m in d)w=!P&&D&&D[m]!==void 0,w&&m in T||(v=w?D[m]:d[m],T[m]=E&&typeof D[m]!="function"?d[m]:N&&w?a(v,i):g&&D[m]==v?(function(Z){var ue=function(xe,fe,He){if(this instanceof Z){switch(arguments.length){case 0:return new Z;case 1:return new Z(xe);case 2:return new Z(xe,fe)}return new Z(xe,fe,He)}return Z.apply(this,arguments)};return ue[l]=Z[l],ue})(v):R&&typeof v=="function"?a(Function.call,v):v,R&&((T.virtual||(T.virtual={}))[m]=v,u&f.R&&_&&!_[m]&&c(_,m,v)))};f.F=1,f.G=2,f.S=4,f.P=8,f.B=16,f.W=32,f.U=64,f.R=128,n.exports=f},function(n,o){n.exports=function(t){try{return!!t()}catch{return!0}}},function(n,o,t){n.exports=t(2).document&&document.documentElement},function(n,o,t){n.exports=!t(4)&&!t(24)(function(){return Object.defineProperty(t(16)("div"),"a",{get:function(){return 7}}).a!=7})},function(n,o,t){"use strict";var i=t(28),s=t(23),a=t(57),c=t(5),l=t(8),f=t(10),u=t(45),p=t(18),d=t(52),m=t(1)("iterator"),w=!([].keys&&"next"in[].keys()),v="@@iterator",P="keys",E="values",x=function(){return this};n.exports=function(R,N,g,T,_,D,Z){u(g,N,T);var ue,xe,fe,He=function(b){if(!w&&b in pe)return pe[b];switch(b){case P:return function(){return new g(this,b)};case E:return function(){return new g(this,b)}}return function(){return new g(this,b)}},Vt=N+" Iterator",xt=_==E,On=!1,pe=R.prototype,st=pe[m]||pe[v]||_&&pe[_],he=st||He(_),In=_?xt?He("entries"):he:void 0,y=N=="Array"&&pe.entries||st;if(y&&(fe=d(y.call(new R)),fe!==Object.prototype&&(p(fe,Vt,!0),i||l(fe,m)||c(fe,m,x))),xt&&st&&st.name!==E&&(On=!0,he=function(){return st.call(this)}),i&&!Z||!w&&!On&&pe[m]||c(pe,m,he),f[N]=he,f[Vt]=x,_)if(ue={values:xt?he:He(E),keys:D?he:He(P),entries:In},Z)for(xe in ue)xe in pe||a(pe,xe,ue[xe]);else s(s.P+s.F*(w||On),N,ue);return ue}},function(n,o){n.exports=!0},function(n,o,t){var i=t(2),s="__core-js_shared__",a=i[s]||(i[s]={});n.exports=function(c){return a[c]||(a[c]={})}},function(n,o,t){var i,s,a,c=t(7),l=t(41),f=t(25),u=t(16),p=t(2),d=p.process,m=p.setImmediate,w=p.clearImmediate,v=p.MessageChannel,P=0,E={},x="onreadystatechange",R=function(){var g=+this;if(E.hasOwnProperty(g)){var T=E[g];delete E[g],T()}},N=function(g){R.call(g.data)};m&&w||(m=function(g){for(var T=[],_=1;arguments.length>_;)T.push(arguments[_++]);return E[++P]=function(){l(typeof g=="function"?g:Function(g),T)},i(P),P},w=function(g){delete E[g]},t(11)(d)=="process"?i=function(g){d.nextTick(c(R,g,1))}:v?(s=new v,a=s.port2,s.port1.onmessage=N,i=c(a.postMessage,a,1)):p.addEventListener&&typeof postMessage=="function"&&!p.importScripts?(i=function(g){p.postMessage(g+"","*")},p.addEventListener("message",N,!1)):i=x in u("script")?function(g){f.appendChild(u("script"))[x]=function(){f.removeChild(this),R.call(g)}}:function(g){setTimeout(c(R,g,1),0)}),n.exports={set:m,clear:w}},function(n,o,t){var i=t(20),s=Math.min;n.exports=function(a){return a>0?s(i(a),9007199254740991):0}},function(n,o,t){var i=t(9);n.exports=function(s,a){if(!i(s))return s;var c,l;if(a&&typeof(c=s.toString)=="function"&&!i(l=c.call(s))||typeof(c=s.valueOf)=="function"&&!i(l=c.call(s))||!a&&typeof(c=s.toString)=="function"&&!i(l=c.call(s)))return l;throw TypeError("Can't convert object to primitive value")}},function(n,o){var t=0,i=Math.random();n.exports=function(s){return"Symbol(".concat(s===void 0?"":s,")_",(++t+i).toString(36))}},function(n,o,t){"use strict";function i(x){return x&&x.__esModule?x:{default:x}}function s(){return process.platform!=="win32"?"":process.arch==="ia32"&&process.env.hasOwnProperty("PROCESSOR_ARCHITEW6432")?"mixed":"native"}function a(x){return(0,m.createHash)("sha256").update(x).digest("hex")}function c(x){switch(v){case"darwin":return x.split("IOPlatformUUID")[1].split(`
|
|
4
|
+
`)[0].replace(/\=|\s+|\"/gi,"").toLowerCase();case"win32":return x.toString().split("REG_SZ")[1].replace(/\r+|\n+|\s+/gi,"").toLowerCase();case"linux":return x.toString().replace(/\r+|\n+|\s+/gi,"").toLowerCase();case"freebsd":return x.toString().replace(/\r+|\n+|\s+/gi,"").toLowerCase();default:throw new Error("Unsupported platform: "+process.platform)}}function l(x){var R=c((0,d.execSync)(E[v]).toString());return x?R:a(R)}function f(x){return new p.default(function(R,N){return(0,d.exec)(E[v],{},function(g,T,_){if(g)return N(new Error("Error while obtaining machine id: "+g.stack));var D=c(T.toString());return R(x?D:a(D))})})}Object.defineProperty(o,"__esModule",{value:!0});var u=t(35),p=i(u);o.machineIdSync=l,o.machineId=f;var d=t(70),m=t(71),w=process,v=w.platform,P={native:"%windir%\\System32",mixed:"%windir%\\sysnative\\cmd.exe /c %windir%\\System32"},E={darwin:"ioreg -rd1 -c IOPlatformExpertDevice",win32:P[s()]+"\\REG.exe QUERY HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography /v MachineGuid",linux:"( cat /var/lib/dbus/machine-id /etc/machine-id 2> /dev/null || hostname ) | head -n 1 || :",freebsd:"kenv -q smbios.system.uuid || sysctl -n kern.hostuuid"}},function(n,o,t){n.exports={default:t(36),__esModule:!0}},function(n,o,t){t(66),t(68),t(69),t(67),n.exports=t(6).Promise},function(n,o){n.exports=function(){}},function(n,o){n.exports=function(t,i,s,a){if(!(t instanceof i)||a!==void 0&&a in t)throw TypeError(s+": incorrect invocation!");return t}},function(n,o,t){var i=t(13),s=t(31),a=t(62);n.exports=function(c){return function(l,f,u){var p,d=i(l),m=s(d.length),w=a(u,m);if(c&&f!=f){for(;m>w;)if(p=d[w++],p!=p)return!0}else for(;m>w;w++)if((c||w in d)&&d[w]===f)return c||w||0;return!c&&-1}}},function(n,d,t){var i=t(7),s=t(44),a=t(43),c=t(3),l=t(31),f=t(64),u={},p={},d=n.exports=function(m,w,v,P,E){var x,R,N,g,T=E?function(){return m}:f(m),_=i(v,P,w?2:1),D=0;if(typeof T!="function")throw TypeError(m+" is not iterable!");if(a(T)){for(x=l(m.length);x>D;D++)if(g=w?_(c(R=m[D])[0],R[1]):_(m[D]),g===u||g===p)return g}else for(N=T.call(m);!(R=N.next()).done;)if(g=s(N,_,R.value,w),g===u||g===p)return g};d.BREAK=u,d.RETURN=p},function(n,o){n.exports=function(t,i,s){var a=s===void 0;switch(i.length){case 0:return a?t():t.call(s);case 1:return a?t(i[0]):t.call(s,i[0]);case 2:return a?t(i[0],i[1]):t.call(s,i[0],i[1]);case 3:return a?t(i[0],i[1],i[2]):t.call(s,i[0],i[1],i[2]);case 4:return a?t(i[0],i[1],i[2],i[3]):t.call(s,i[0],i[1],i[2],i[3])}return t.apply(s,i)}},function(n,o,t){var i=t(11);n.exports=Object("z").propertyIsEnumerable(0)?Object:function(s){return i(s)=="String"?s.split(""):Object(s)}},function(n,o,t){var i=t(10),s=t(1)("iterator"),a=Array.prototype;n.exports=function(c){return c!==void 0&&(i.Array===c||a[s]===c)}},function(n,o,t){var i=t(3);n.exports=function(s,a,c,l){try{return l?a(i(c)[0],c[1]):a(c)}catch(u){var f=s.return;throw f!==void 0&&i(f.call(s)),u}}},function(n,o,t){"use strict";var i=t(49),s=t(17),a=t(18),c={};t(5)(c,t(1)("iterator"),function(){return this}),n.exports=function(l,f,u){l.prototype=i(c,{next:s(1,u)}),a(l,f+" Iterator")}},function(n,o,t){var i=t(1)("iterator"),s=!1;try{var a=[7][i]();a.return=function(){s=!0},Array.from(a,function(){throw 2})}catch{}n.exports=function(c,l){if(!l&&!s)return!1;var f=!1;try{var u=[7],p=u[i]();p.next=function(){return{done:f=!0}},u[i]=function(){return p},c(u)}catch{}return f}},function(n,o){n.exports=function(t,i){return{value:i,done:!!t}}},function(n,o,t){var i=t(2),s=t(30).set,a=i.MutationObserver||i.WebKitMutationObserver,c=i.process,l=i.Promise,f=t(11)(c)=="process";n.exports=function(){var u,p,d,m=function(){var E,x;for(f&&(E=c.domain)&&E.exit();u;){x=u.fn,u=u.next;try{x()}catch(R){throw u?d():p=void 0,R}}p=void 0,E&&E.enter()};if(f)d=function(){c.nextTick(m)};else if(a){var w=!0,v=document.createTextNode("");new a(m).observe(v,{characterData:!0}),d=function(){v.data=w=!w}}else if(l&&l.resolve){var P=l.resolve();d=function(){P.then(m)}}else d=function(){s.call(i,m)};return function(E){var x={fn:E,next:void 0};p&&(p.next=x),u||(u=x,d()),p=x}}},function(n,o,t){var i=t(3),s=t(50),a=t(22),c=t(19)("IE_PROTO"),l=function(){},f="prototype",u=function(){var p,d=t(16)("iframe"),m=a.length,w=">";for(d.style.display="none",t(25).appendChild(d),d.src="javascript:",p=d.contentWindow.document,p.open(),p.write("<script>document.F=Object</script"+w),p.close(),u=p.F;m--;)delete u[f][a[m]];return u()};n.exports=Object.create||function(p,d){var m;return p!==null?(l[f]=i(p),m=new l,l[f]=null,m[c]=p):m=u(),d===void 0?m:s(m,d)}},function(n,o,t){var i=t(12),s=t(3),a=t(54);n.exports=t(4)?Object.defineProperties:function(c,l){s(c);for(var f,u=a(l),p=u.length,d=0;p>d;)i.f(c,f=u[d++],l[f]);return c}},function(n,o,t){var i=t(55),s=t(17),a=t(13),c=t(32),l=t(8),f=t(26),u=Object.getOwnPropertyDescriptor;o.f=t(4)?u:function(p,d){if(p=a(p),d=c(d,!0),f)try{return u(p,d)}catch{}if(l(p,d))return s(!i.f.call(p,d),p[d])}},function(n,o,t){var i=t(8),s=t(63),a=t(19)("IE_PROTO"),c=Object.prototype;n.exports=Object.getPrototypeOf||function(l){return l=s(l),i(l,a)?l[a]:typeof l.constructor=="function"&&l instanceof l.constructor?l.constructor.prototype:l instanceof Object?c:null}},function(n,o,t){var i=t(8),s=t(13),a=t(39)(!1),c=t(19)("IE_PROTO");n.exports=function(l,f){var u,p=s(l),d=0,m=[];for(u in p)u!=c&&i(p,u)&&m.push(u);for(;f.length>d;)i(p,u=f[d++])&&(~a(m,u)||m.push(u));return m}},function(n,o,t){var i=t(53),s=t(22);n.exports=Object.keys||function(a){return i(a,s)}},function(n,o){o.f={}.propertyIsEnumerable},function(n,o,t){var i=t(5);n.exports=function(s,a,c){for(var l in a)c&&s[l]?s[l]=a[l]:i(s,l,a[l]);return s}},function(n,o,t){n.exports=t(5)},function(n,o,t){var i=t(9),s=t(3),a=function(c,l){if(s(c),!i(l)&&l!==null)throw TypeError(l+": can't set as prototype!")};n.exports={set:Object.setPrototypeOf||("__proto__"in{}?(function(c,l,f){try{f=t(7)(Function.call,t(51).f(Object.prototype,"__proto__").set,2),f(c,[]),l=!(c instanceof Array)}catch{l=!0}return function(u,p){return a(u,p),l?u.__proto__=p:f(u,p),u}})({},!1):void 0),check:a}},function(n,o,t){"use strict";var i=t(2),s=t(6),a=t(12),c=t(4),l=t(1)("species");n.exports=function(f){var u=typeof s[f]=="function"?s[f]:i[f];c&&u&&!u[l]&&a.f(u,l,{configurable:!0,get:function(){return this}})}},function(n,o,t){var i=t(3),s=t(14),a=t(1)("species");n.exports=function(c,l){var f,u=i(c).constructor;return u===void 0||(f=i(u)[a])==null?l:s(f)}},function(n,o,t){var i=t(20),s=t(15);n.exports=function(a){return function(c,l){var f,u,p=String(s(c)),d=i(l),m=p.length;return d<0||d>=m?a?"":void 0:(f=p.charCodeAt(d),f<55296||f>56319||d+1===m||(u=p.charCodeAt(d+1))<56320||u>57343?a?p.charAt(d):f:a?p.slice(d,d+2):(f-55296<<10)+(u-56320)+65536)}}},function(n,o,t){var i=t(20),s=Math.max,a=Math.min;n.exports=function(c,l){return c=i(c),c<0?s(c+l,0):a(c,l)}},function(n,o,t){var i=t(15);n.exports=function(s){return Object(i(s))}},function(n,o,t){var i=t(21),s=t(1)("iterator"),a=t(10);n.exports=t(6).getIteratorMethod=function(c){if(c!=null)return c[s]||c["@@iterator"]||a[i(c)]}},function(n,o,t){"use strict";var i=t(37),s=t(47),a=t(10),c=t(13);n.exports=t(27)(Array,"Array",function(l,f){this._t=c(l),this._i=0,this._k=f},function(){var l=this._t,f=this._k,u=this._i++;return!l||u>=l.length?(this._t=void 0,s(1)):f=="keys"?s(0,u):f=="values"?s(0,l[u]):s(0,[u,l[u]])},"values"),a.Arguments=a.Array,i("keys"),i("values"),i("entries")},function(n,o){},function(n,o,t){"use strict";var i,s,a,c=t(28),l=t(2),f=t(7),u=t(21),p=t(23),d=t(9),m=(t(3),t(14)),w=t(38),v=t(40),P=(t(58).set,t(60)),E=t(30).set,x=t(48)(),R="Promise",N=l.TypeError,T=l.process,g=l[R],T=l.process,_=u(T)=="process",D=function(){},Z=!!(function(){try{var y=g.resolve(1),b=(y.constructor={})[t(1)("species")]=function(k){k(D,D)};return(_||typeof PromiseRejectionEvent=="function")&&y.then(D)instanceof b}catch{}})(),ue=function(y,b){return y===b||y===g&&b===a},xe=function(y){var b;return!(!d(y)||typeof(b=y.then)!="function")&&b},fe=function(y){return ue(g,y)?new He(y):new s(y)},He=s=function(y){var b,k;this.promise=new y(function(U,oe){if(b!==void 0||k!==void 0)throw N("Bad Promise constructor");b=U,k=oe}),this.resolve=m(b),this.reject=m(k)},Vt=function(y){try{y()}catch(b){return{error:b}}},xt=function(y,b){if(!y._n){y._n=!0;var k=y._c;x(function(){for(var U=y._v,oe=y._s==1,At=0,Yt=function(at){var _e,hr,_n=oe?at.ok:at.fail,Ln=at.resolve,qt=at.reject,gr=at.domain;try{_n?(oe||(y._h==2&&st(y),y._h=1),_n===!0?_e=U:(gr&&gr.enter(),_e=_n(U),gr&&gr.exit()),_e===at.promise?qt(N("Promise-chain cycle")):(hr=xe(_e))?hr.call(_e,Ln,qt):Ln(_e)):qt(U)}catch(gc){qt(gc)}};k.length>At;)Yt(k[At++]);y._c=[],y._n=!1,b&&!y._h&&On(y)})}},On=function(y){E.call(l,function(){var b,k,U,oe=y._v;if(pe(y)&&(b=Vt(function(){_?T.emit("unhandledRejection",oe,y):(k=l.onunhandledrejection)?k({promise:y,reason:oe}):(U=l.console)&&U.error&&U.error("Unhandled promise rejection",oe)}),y._h=_||pe(y)?2:1),y._a=void 0,b)throw b.error})},pe=function(y){if(y._h==1)return!1;for(var b,k=y._a||y._c,U=0;k.length>U;)if(b=k[U++],b.fail||!pe(b.promise))return!1;return!0},st=function(y){E.call(l,function(){var b;_?T.emit("rejectionHandled",y):(b=l.onrejectionhandled)&&b({promise:y,reason:y._v})})},he=function(y){var b=this;b._d||(b._d=!0,b=b._w||b,b._v=y,b._s=2,b._a||(b._a=b._c.slice()),xt(b,!0))},In=function(y){var b,k=this;if(!k._d){k._d=!0,k=k._w||k;try{if(k===y)throw N("Promise can't be resolved itself");(b=xe(y))?x(function(){var U={_w:k,_d:!1};try{b.call(y,f(In,U,1),f(he,U,1))}catch(oe){he.call(U,oe)}}):(k._v=y,k._s=1,xt(k,!1))}catch(U){he.call({_w:k,_d:!1},U)}}};Z||(g=function(y){w(this,g,R,"_h"),m(y),i.call(this);try{y(f(In,this,1),f(he,this,1))}catch(b){he.call(this,b)}},i=function(y){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},i.prototype=t(56)(g.prototype,{then:function(y,b){var k=fe(P(this,g));return k.ok=typeof y!="function"||y,k.fail=typeof b=="function"&&b,k.domain=_?T.domain:void 0,this._c.push(k),this._a&&this._a.push(k),this._s&&xt(this,!1),k.promise},catch:function(y){return this.then(void 0,y)}}),He=function(){var y=new i;this.promise=y,this.resolve=f(In,y,1),this.reject=f(he,y,1)}),p(p.G+p.W+p.F*!Z,{Promise:g}),t(18)(g,R),t(59)(R),a=t(6)[R],p(p.S+p.F*!Z,R,{reject:function(y){var b=fe(this),k=b.reject;return k(y),b.promise}}),p(p.S+p.F*(c||!Z),R,{resolve:function(y){if(y instanceof g&&ue(y.constructor,this))return y;var b=fe(this),k=b.resolve;return k(y),b.promise}}),p(p.S+p.F*!(Z&&t(46)(function(y){g.all(y).catch(D)})),R,{all:function(y){var b=this,k=fe(b),U=k.resolve,oe=k.reject,At=Vt(function(){var Yt=[],at=0,_e=1;v(y,!1,function(hr){var _n=at++,Ln=!1;Yt.push(void 0),_e++,b.resolve(hr).then(function(qt){Ln||(Ln=!0,Yt[_n]=qt,--_e||U(Yt))},oe)}),--_e||U(Yt)});return At&&oe(At.error),k.promise},race:function(y){var b=this,k=fe(b),U=k.reject,oe=Vt(function(){v(y,!1,function(At){b.resolve(At).then(k.resolve,U)})});return oe&&U(oe.error),k.promise}})},function(n,o,t){"use strict";var i=t(61)(!0);t(27)(String,"String",function(s){this._t=String(s),this._i=0},function(){var s,a=this._t,c=this._i;return c>=a.length?{value:void 0,done:!0}:(s=i(a,c),this._i+=s.length,{value:s,done:!1})})},function(n,o,t){t(65);for(var i=t(2),s=t(5),a=t(10),c=t(1)("toStringTag"),l=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],f=0;f<5;f++){var u=l[f],p=i[u],d=p&&p.prototype;d&&!d[c]&&s(d,c,u),a[u]=a.Array}},function(n,o){n.exports=require("child_process")},function(n,o){n.exports=require("crypto")}])})});var va={};Tc(va,{initTray:()=>lr,killTray:()=>Bt,openBrowser:()=>Ut,showTrayNotification:()=>jo,updateTrayTooltip:()=>xn});function fa(e){for(let r of e)try{if(Sn.default.existsSync(r))return r}catch{}return null}function lu(){if(process.platform==="win32"){for(let e of ga)try{if(Sn.default.existsSync(e))return Sn.default.readFileSync(e).toString("base64")}catch{}return ua}return ua}function uu(){if(process.env.NREMOTE_DESKTOP)return!1;let e=process.platform;return!(!["darwin","win32","linux"].includes(e)||e==="linux"&&!process.env.DISPLAY)}function ya(){let{port:e,tunnelUrl:r,running:n}=Tn,o=n?r?"Tunnel ON":"Local only":"Idle",t=`http://localhost:${e}`;return`9Remote \u2022 ${o}
|
|
5
|
+
Local: ${t}
|
|
6
|
+
Right-click to open / quit`}function wa(){let{port:e,tunnelUrl:r}=Tn,n=process.platform==="win32",o=r?`9Remote (Port ${e}) \u2022 Tunnel ON`:`9Remote (Port ${e}) \u2022 Local only`;return{icon:lu(),title:n?`9Remote - Port ${e}`:"",tooltip:ya(),items:[{title:o,tooltip:r||`http://localhost:${e}`,checked:!1,enabled:!1},{title:"Open Web UI",tooltip:`Open http://localhost:${e} in your browser`,checked:!1,enabled:!0},{title:"Shutdown",tooltip:"Stop 9Remote server, tunnel and quit",checked:!1,enabled:!0}]}}function fu(){try{let e=require(Ue.default.join(ha,"systray2"));return e.default?.default||e.default||e}catch{return null}}function pu({port:e,onQuit:r,onOpenUI:n}){let o=fa(ga),t=fa(cu);if(!o||!t)return null;let i;try{i=(0,et.spawn)("powershell.exe",["-NoProfile","-ExecutionPolicy","Bypass","-WindowStyle","Hidden","-InputFormat","Text","-OutputFormat","Text","-File",t,"-IconPath",o,"-Tooltip",`9Remote - Port ${e}`],{windowsHide:!0,stdio:["pipe","pipe","pipe"]})}catch{return null}i.stdin.on("error",()=>{});let s=c=>{try{i.stdin.writable&&i.stdin.write(`${JSON.stringify(c)}
|
|
7
|
+
`,"utf8")}catch{}};return pa.default.createInterface({input:i.stdout}).on("line",c=>{try{let l=JSON.parse(c);if(l.type!=="click")return;l.index===0?n?.():l.index===1&&(r?.(),Bt(),setTimeout(()=>process.exit(0),500))}catch{}}),i.on("error",()=>{}),i.stderr.on("data",()=>{}),["Open Web UI","Shutdown"].forEach((c,l)=>s({action:"add-item",index:l,title:c,enabled:!0})),{_isWin:!0,_setTooltip(c){s({action:"set-tooltip",text:c})},sendAction(){},kill(){try{s({action:"kill"})}catch{}setTimeout(()=>{try{i&&!i.killed&&i.kill()}catch{}},300)}}}async function lr({port:e,onQuit:r,onOpenUI:n}){if(!uu())return null;if(process.platform==="win32")return Tn={port:e,tunnelUrl:"",running:!0},ae=pu({port:e,onQuit:r,onOpenUI:n}),ae;try{let o=fu();if(!o)return null;let i={darwin:"tray_darwin_release",win32:"tray_windows_release.exe",linux:"tray_linux_release"}[process.platform];if(!i)return null;let s=Ue.default.join(ha,"systray2","traybin",i);if(!Sn.default.existsSync(s))return null;if(process.platform!=="win32")try{Sn.default.chmodSync(s,493)}catch{}if(Tn={port:e,tunnelUrl:"",running:!0},ae=new o({menu:wa(),debug:!1,copyDir:!0}),ae.onClick(a=>{let c=a.item?.title||a.item;c==="Open Web UI"?n?.():c==="Shutdown"&&(r?.(),Bt(),setTimeout(()=>process.exit(0),500))}),typeof ae.ready=="function")try{await ae.ready()}catch{return ae=null,null}else ae.onReady(()=>{}),ae.onError(()=>{});return ae}catch{return null}}function xn({tunnelUrl:e,running:r}={}){if(e!==void 0&&(Tn.tunnelUrl=e),r!==void 0&&(Tn.running=r),!!ae){if(ae._isWin){ae._setTooltip?.(ya());return}try{ae.sendAction({type:"update-menu",menu:wa(),seq_id:-1})?.catch?.(()=>{})}catch{}}}function Bt(){let e=ae;if(ae=null,e)try{e.kill(!0)}catch{}}function jo({title:e="9Remote",message:r}){let n=process.platform;if(r){if(n==="win32"){let o=c=>String(c).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/'/g,"'").replace(/"/g,"""),t=c=>String(c).replace(/'/g,"''"),i="9Remote",s=`<toast><visual><binding template="ToastText02"><text id="1">${o(e)}</text><text id="2">${o(r)}</text></binding></visual></toast>`,a=["try {","[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType=WindowsRuntime] > $null;","[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType=WindowsRuntime] > $null;","$xml = New-Object Windows.Data.Xml.Dom.XmlDocument;",`$xml.LoadXml('${t(s)}');`,"$toast = [Windows.UI.Notifications.ToastNotification]::new($xml);",`[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier('${t(i)}').Show($toast);`,"} catch {","Add-Type -AssemblyName System.Windows.Forms;","$n = New-Object System.Windows.Forms.NotifyIcon;","$n.Icon = [System.Drawing.SystemIcons]::Information;",`$n.BalloonTipTitle = '${t(e)}';`,`$n.BalloonTipText = '${t(r)}';`,"$n.Visible = $true;","$n.ShowBalloonTip(5000);","Start-Sleep -Seconds 6;","$n.Dispose();","}"].join(" ");try{(0,et.spawn)("powershell.exe",["-NoProfile","-WindowStyle","Hidden","-Command",a],{detached:!0,stdio:"ignore",windowsHide:!0}).unref()}catch{}return}if(n==="darwin"){try{let o=s=>String(s).replace(/"/g,'\\"'),t=`display notification "${o(r)}" with title "${o(e)}"`;(0,et.spawn)("osascript",["-e",t],{detached:!0,stdio:"ignore"}).unref()}catch{}return}try{(0,et.spawn)("notify-send",[e,r],{detached:!0,stdio:"ignore"}).unref()}catch{}}}function Ut(e){let r=process.platform;if(r==="win32"){try{(0,et.spawn)("rundll32.exe",["url.dll,FileProtocolHandler",e],{detached:!0,stdio:"ignore",windowsHide:!0}).unref();return}catch{}try{(0,et.spawn)("cmd.exe",["/d","/s","/c","start","",e],{detached:!0,stdio:"ignore",windowsHide:!0}).unref()}catch{}return}if(r==="darwin"){try{(0,et.spawn)("open",[e],{detached:!0,stdio:"ignore"}).unref()}catch{}return}let n=[["setsid",["--fork","xdg-open",e]],["setsid",["xdg-open",e]],["xdg-open",[e]],["gio",["open",e]],["sensible-browser",[e]],["x-www-browser",[e]]];for(let[o,t]of n)try{(0,et.spawn)(o,t,{detached:!0,stdio:"ignore",env:{...process.env}}).unref();return}catch{}}var et,pa,Sn,Ue,da,ma,ha,ae,Tn,Hr,ua,ga,cu,Ft=Sc(()=>{et=require("child_process"),pa=A(require("readline"),1),Sn=A(require("fs"),1),Ue=A(require("path"),1),da=A(require("os"),1),ma=require("url"),ha=(0,Ue.join)(da.default.homedir(),".9remote","runtime","node_modules"),ae=null,Tn={port:0,tunnelUrl:"",running:!1},Hr=Ue.default.dirname((0,ma.fileURLToPath)(__importMetaUrl)),ua="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",ga=[Ue.default.join(Hr,"assets","trayIcon.ico"),Ue.default.join(Hr,"..","assets","trayIcon.ico")],cu=[Ue.default.join(Hr,"assets","tray.ps1"),Ue.default.join(Hr,"..","assets","tray.ps1")]});var Jo=ve((md,Ra)=>{Ra.exports={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8}});var Oa=ve((hd,$a)=>{var gu=Jo();function Pa(e){this.mode=gu.MODE_8BIT_BYTE,this.data=e}Pa.prototype={getLength:function(){return this.data.length},write:function(e){for(var r=0;r<this.data.length;r++)e.put(this.data.charCodeAt(r),8)}};$a.exports=Pa});var Qo=ve((gd,Ia)=>{var Ie={glog:function(e){if(e<1)throw new Error("glog("+e+")");return Ie.LOG_TABLE[e]},gexp:function(e){for(;e<0;)e+=255;for(;e>=256;)e-=255;return Ie.EXP_TABLE[e]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(X=0;X<8;X++)Ie.EXP_TABLE[X]=1<<X;var X;for(X=8;X<256;X++)Ie.EXP_TABLE[X]=Ie.EXP_TABLE[X-4]^Ie.EXP_TABLE[X-5]^Ie.EXP_TABLE[X-6]^Ie.EXP_TABLE[X-8];var X;for(X=0;X<255;X++)Ie.LOG_TABLE[Ie.EXP_TABLE[X]]=X;var X;Ia.exports=Ie});var zo=ve((yd,_a)=>{var Wt=Qo();function Vr(e,r){if(e.length===void 0)throw new Error(e.length+"/"+r);for(var n=0;n<e.length&&e[n]===0;)n++;this.num=new Array(e.length-n+r);for(var o=0;o<e.length-n;o++)this.num[o]=e[o+n]}Vr.prototype={get:function(e){return this.num[e]},getLength:function(){return this.num.length},multiply:function(e){for(var r=new Array(this.getLength()+e.getLength()-1),n=0;n<this.getLength();n++)for(var o=0;o<e.getLength();o++)r[n+o]^=Wt.gexp(Wt.glog(this.get(n))+Wt.glog(e.get(o)));return new Vr(r,0)},mod:function(e){if(this.getLength()-e.getLength()<0)return this;for(var r=Wt.glog(this.get(0))-Wt.glog(e.get(0)),n=new Array(this.getLength()),o=0;o<this.getLength();o++)n[o]=this.get(o);for(var t=0;t<e.getLength();t++)n[t]^=Wt.gexp(Wt.glog(e.get(t))+r);return new Vr(n,0).mod(e)}};_a.exports=Vr});var Ma=ve((wd,La)=>{La.exports={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7}});var Da=ve((vd,Na)=>{var Te=Jo(),Ca=zo(),yu=Qo(),Et=Ma(),re={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(e){for(var r=e<<10;re.getBCHDigit(r)-re.getBCHDigit(re.G15)>=0;)r^=re.G15<<re.getBCHDigit(r)-re.getBCHDigit(re.G15);return(e<<10|r)^re.G15_MASK},getBCHTypeNumber:function(e){for(var r=e<<12;re.getBCHDigit(r)-re.getBCHDigit(re.G18)>=0;)r^=re.G18<<re.getBCHDigit(r)-re.getBCHDigit(re.G18);return e<<12|r},getBCHDigit:function(e){for(var r=0;e!==0;)r++,e>>>=1;return r},getPatternPosition:function(e){return re.PATTERN_POSITION_TABLE[e-1]},getMask:function(e,r,n){switch(e){case Et.PATTERN000:return(r+n)%2===0;case Et.PATTERN001:return r%2===0;case Et.PATTERN010:return n%3===0;case Et.PATTERN011:return(r+n)%3===0;case Et.PATTERN100:return(Math.floor(r/2)+Math.floor(n/3))%2===0;case Et.PATTERN101:return r*n%2+r*n%3===0;case Et.PATTERN110:return(r*n%2+r*n%3)%2===0;case Et.PATTERN111:return(r*n%3+(r+n)%2)%2===0;default:throw new Error("bad maskPattern:"+e)}},getErrorCorrectPolynomial:function(e){for(var r=new Ca([1],0),n=0;n<e;n++)r=r.multiply(new Ca([1,yu.gexp(n)],0));return r},getLengthInBits:function(e,r){if(1<=r&&r<10)switch(e){case Te.MODE_NUMBER:return 10;case Te.MODE_ALPHA_NUM:return 9;case Te.MODE_8BIT_BYTE:return 8;case Te.MODE_KANJI:return 8;default:throw new Error("mode:"+e)}else if(r<27)switch(e){case Te.MODE_NUMBER:return 12;case Te.MODE_ALPHA_NUM:return 11;case Te.MODE_8BIT_BYTE:return 16;case Te.MODE_KANJI:return 10;default:throw new Error("mode:"+e)}else if(r<41)switch(e){case Te.MODE_NUMBER:return 14;case Te.MODE_ALPHA_NUM:return 13;case Te.MODE_8BIT_BYTE:return 16;case Te.MODE_KANJI:return 12;default:throw new Error("mode:"+e)}else throw new Error("type:"+r)},getLostPoint:function(e){var r=e.getModuleCount(),n=0,o=0,t=0;for(o=0;o<r;o++)for(t=0;t<r;t++){for(var i=0,s=e.isDark(o,t),a=-1;a<=1;a++)if(!(o+a<0||r<=o+a))for(var c=-1;c<=1;c++)t+c<0||r<=t+c||a===0&&c===0||s===e.isDark(o+a,t+c)&&i++;i>5&&(n+=3+i-5)}for(o=0;o<r-1;o++)for(t=0;t<r-1;t++){var l=0;e.isDark(o,t)&&l++,e.isDark(o+1,t)&&l++,e.isDark(o,t+1)&&l++,e.isDark(o+1,t+1)&&l++,(l===0||l===4)&&(n+=3)}for(o=0;o<r;o++)for(t=0;t<r-6;t++)e.isDark(o,t)&&!e.isDark(o,t+1)&&e.isDark(o,t+2)&&e.isDark(o,t+3)&&e.isDark(o,t+4)&&!e.isDark(o,t+5)&&e.isDark(o,t+6)&&(n+=40);for(t=0;t<r;t++)for(o=0;o<r-6;o++)e.isDark(o,t)&&!e.isDark(o+1,t)&&e.isDark(o+2,t)&&e.isDark(o+3,t)&&e.isDark(o+4,t)&&!e.isDark(o+5,t)&&e.isDark(o+6,t)&&(n+=40);var f=0;for(t=0;t<r;t++)for(o=0;o<r;o++)e.isDark(o,t)&&f++;var u=Math.abs(100*f/r/r-50)/5;return n+=u*10,n}};Na.exports=re});var Zo=ve((bd,Ba)=>{Ba.exports={L:1,M:0,Q:3,H:2}});var Fa=ve((Ed,Ua)=>{var Yr=Zo();function Fe(e,r){this.totalCount=e,this.dataCount=r}Fe.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];Fe.getRSBlocks=function(e,r){var n=Fe.getRsBlockTable(e,r);if(n===void 0)throw new Error("bad rs block @ typeNumber:"+e+"/errorCorrectLevel:"+r);for(var o=n.length/3,t=[],i=0;i<o;i++)for(var s=n[i*3+0],a=n[i*3+1],c=n[i*3+2],l=0;l<s;l++)t.push(new Fe(a,c));return t};Fe.getRsBlockTable=function(e,r){switch(r){case Yr.L:return Fe.RS_BLOCK_TABLE[(e-1)*4+0];case Yr.M:return Fe.RS_BLOCK_TABLE[(e-1)*4+1];case Yr.Q:return Fe.RS_BLOCK_TABLE[(e-1)*4+2];case Yr.H:return Fe.RS_BLOCK_TABLE[(e-1)*4+3];default:return}};Ua.exports=Fe});var ja=ve((Sd,Ha)=>{function Ka(){this.buffer=[],this.length=0}Ka.prototype={get:function(e){var r=Math.floor(e/8);return(this.buffer[r]>>>7-e%8&1)==1},put:function(e,r){for(var n=0;n<r;n++)this.putBit((e>>>r-n-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){var r=Math.floor(this.length/8);this.buffer.length<=r&&this.buffer.push(0),e&&(this.buffer[r]|=128>>>this.length%8),this.length++}};Ha.exports=Ka});var Ya=ve((Td,Va)=>{var wu=Oa(),St=Da(),vu=zo(),Wa=Fa(),Ga=ja();function Ke(e,r){this.typeNumber=e,this.errorCorrectLevel=r,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}Ke.prototype={addData:function(e){var r=new wu(e);this.dataList.push(r),this.dataCache=null},isDark:function(e,r){if(e<0||this.moduleCount<=e||r<0||this.moduleCount<=r)throw new Error(e+","+r);return this.modules[e][r]},getModuleCount:function(){return this.moduleCount},make:function(){if(this.typeNumber<1){var e=1;for(e=1;e<40;e++){for(var r=Wa.getRSBlocks(e,this.errorCorrectLevel),n=new Ga,o=0,t=0;t<r.length;t++)o+=r[t].dataCount;for(var i=0;i<this.dataList.length;i++){var s=this.dataList[i];n.put(s.mode,4),n.put(s.getLength(),St.getLengthInBits(s.mode,e)),s.write(n)}if(n.getLengthInBits()<=o*8)break}this.typeNumber=e}this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(e,r){this.moduleCount=this.typeNumber*4+17,this.modules=new Array(this.moduleCount);for(var n=0;n<this.moduleCount;n++){this.modules[n]=new Array(this.moduleCount);for(var o=0;o<this.moduleCount;o++)this.modules[n][o]=null}this.setupPositionProbePattern(0,0),this.setupPositionProbePattern(this.moduleCount-7,0),this.setupPositionProbePattern(0,this.moduleCount-7),this.setupPositionAdjustPattern(),this.setupTimingPattern(),this.setupTypeInfo(e,r),this.typeNumber>=7&&this.setupTypeNumber(e),this.dataCache===null&&(this.dataCache=Ke.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,r)},setupPositionProbePattern:function(e,r){for(var n=-1;n<=7;n++)if(!(e+n<=-1||this.moduleCount<=e+n))for(var o=-1;o<=7;o++)r+o<=-1||this.moduleCount<=r+o||(0<=n&&n<=6&&(o===0||o===6)||0<=o&&o<=6&&(n===0||n===6)||2<=n&&n<=4&&2<=o&&o<=4?this.modules[e+n][r+o]=!0:this.modules[e+n][r+o]=!1)},getBestMaskPattern:function(){for(var e=0,r=0,n=0;n<8;n++){this.makeImpl(!0,n);var o=St.getLostPoint(this);(n===0||e>o)&&(e=o,r=n)}return r},createMovieClip:function(e,r,n){var o=e.createEmptyMovieClip(r,n),t=1;this.make();for(var i=0;i<this.modules.length;i++)for(var s=i*t,a=0;a<this.modules[i].length;a++){var c=a*t,l=this.modules[i][a];l&&(o.beginFill(0,100),o.moveTo(c,s),o.lineTo(c+t,s),o.lineTo(c+t,s+t),o.lineTo(c,s+t),o.endFill())}return o},setupTimingPattern:function(){for(var e=8;e<this.moduleCount-8;e++)this.modules[e][6]===null&&(this.modules[e][6]=e%2===0);for(var r=8;r<this.moduleCount-8;r++)this.modules[6][r]===null&&(this.modules[6][r]=r%2===0)},setupPositionAdjustPattern:function(){for(var e=St.getPatternPosition(this.typeNumber),r=0;r<e.length;r++)for(var n=0;n<e.length;n++){var o=e[r],t=e[n];if(this.modules[o][t]===null)for(var i=-2;i<=2;i++)for(var s=-2;s<=2;s++)Math.abs(i)===2||Math.abs(s)===2||i===0&&s===0?this.modules[o+i][t+s]=!0:this.modules[o+i][t+s]=!1}},setupTypeNumber:function(e){for(var r=St.getBCHTypeNumber(this.typeNumber),n,o=0;o<18;o++)n=!e&&(r>>o&1)===1,this.modules[Math.floor(o/3)][o%3+this.moduleCount-8-3]=n;for(var t=0;t<18;t++)n=!e&&(r>>t&1)===1,this.modules[t%3+this.moduleCount-8-3][Math.floor(t/3)]=n},setupTypeInfo:function(e,r){for(var n=this.errorCorrectLevel<<3|r,o=St.getBCHTypeInfo(n),t,i=0;i<15;i++)t=!e&&(o>>i&1)===1,i<6?this.modules[i][8]=t:i<8?this.modules[i+1][8]=t:this.modules[this.moduleCount-15+i][8]=t;for(var s=0;s<15;s++)t=!e&&(o>>s&1)===1,s<8?this.modules[8][this.moduleCount-s-1]=t:s<9?this.modules[8][15-s-1+1]=t:this.modules[8][15-s-1]=t;this.modules[this.moduleCount-8][8]=!e},mapData:function(e,r){for(var n=-1,o=this.moduleCount-1,t=7,i=0,s=this.moduleCount-1;s>0;s-=2)for(s===6&&s--;;){for(var a=0;a<2;a++)if(this.modules[o][s-a]===null){var c=!1;i<e.length&&(c=(e[i]>>>t&1)===1);var l=St.getMask(r,o,s-a);l&&(c=!c),this.modules[o][s-a]=c,t--,t===-1&&(i++,t=7)}if(o+=n,o<0||this.moduleCount<=o){o-=n,n=-n;break}}}};Ke.PAD0=236;Ke.PAD1=17;Ke.createData=function(e,r,n){for(var o=Wa.getRSBlocks(e,r),t=new Ga,i=0;i<n.length;i++){var s=n[i];t.put(s.mode,4),t.put(s.getLength(),St.getLengthInBits(s.mode,e)),s.write(t)}for(var a=0,c=0;c<o.length;c++)a+=o[c].dataCount;if(t.getLengthInBits()>a*8)throw new Error("code length overflow. ("+t.getLengthInBits()+">"+a*8+")");for(t.getLengthInBits()+4<=a*8&&t.put(0,4);t.getLengthInBits()%8!==0;)t.putBit(!1);for(;!(t.getLengthInBits()>=a*8||(t.put(Ke.PAD0,8),t.getLengthInBits()>=a*8));)t.put(Ke.PAD1,8);return Ke.createBytes(t,o)};Ke.createBytes=function(e,r){for(var n=0,o=0,t=0,i=new Array(r.length),s=new Array(r.length),a=0;a<r.length;a++){var c=r[a].dataCount,l=r[a].totalCount-c;o=Math.max(o,c),t=Math.max(t,l),i[a]=new Array(c);for(var f=0;f<i[a].length;f++)i[a][f]=255&e.buffer[f+n];n+=c;var u=St.getErrorCorrectPolynomial(l),p=new vu(i[a],u.getLength()-1),d=p.mod(u);s[a]=new Array(u.getLength()-1);for(var m=0;m<s[a].length;m++){var w=m+d.getLength()-s[a].length;s[a][m]=w>=0?d.get(w):0}}for(var v=0,P=0;P<r.length;P++)v+=r[P].totalCount;for(var E=new Array(v),x=0,R=0;R<o;R++)for(var N=0;N<r.length;N++)R<i[N].length&&(E[x++]=i[N][R]);for(var g=0;g<t;g++)for(var T=0;T<r.length;T++)g<s[T].length&&(E[x++]=s[T][g]);return E};Va.exports=Ke});var Ja=ve((xd,Xa)=>{var bu=Ya(),qa=Zo(),Eu="\x1B[40m \x1B[0m",qr="\x1B[47m \x1B[0m",Su=function(e){return e?Eu:qr},ei=function(e){return{times:function(r){return new Array(r).join(e)}}},Tu=function(e,r){for(var n=new Array(e),o=0;o<e;o++)n[o]=r;return n};Xa.exports={error:qa.L,generate:function(e,r,n){typeof r=="function"&&(n=r,r={});var o=new bu(-1,this.error);o.addData(e),o.make();var t="";if(r&&r.small){var i=!0,s=!1,a=o.getModuleCount(),c=o.modules.slice(),l=a%2===1;l&&c.push(Tu(a,s));var f={WHITE_ALL:"\u2588",WHITE_BLACK:"\u2580",BLACK_WHITE:"\u2584",BLACK_ALL:" "},u=ei(f.BLACK_WHITE).times(a+3),p=ei(f.WHITE_BLACK).times(a+3);t+=u+`
|
|
8
|
+
`;for(var d=0;d<a;d+=2){t+=f.WHITE_ALL;for(var m=0;m<a;m++)c[d][m]===s&&c[d+1][m]===s?t+=f.WHITE_ALL:c[d][m]===s&&c[d+1][m]===i?t+=f.WHITE_BLACK:c[d][m]===i&&c[d+1][m]===s?t+=f.BLACK_WHITE:t+=f.BLACK_ALL;t+=f.WHITE_ALL+`
|
|
9
|
+
`}l||(t+=p)}else{var w=ei(qr).times(o.getModuleCount()+3);t+=w+`
|
|
10
|
+
`,o.modules.forEach(function(v){t+=qr,t+=v.map(Su).join(""),t+=qr+`
|
|
11
|
+
`}),t+=w}n?n(t):console.log(t)},setErrorLevel:function(e){this.error=qa[e]||this.error}}});var wr=require("fs"),Nn=require("path"),wi=require("url"),vi=A(require("os"),1);var yr=A(require("dns"),1),Ae=A(require("path"),1),fi=A(require("os"),1),ee="9remote",to=process.env.NREMOTE_REGISTRY||`https://registry.npmjs.org/${ee}/latest`,ke=`${ee}@latest`,Le=process.env.NREMOTE_HOME||Ae.default.join(fi.default.homedir(),".9remote"),J={ROOT:Le,LOGS:Ae.default.join(Le,"logs"),STATE:Ae.default.join(Le,"state"),CONFIG:Ae.default.join(Le,"config"),BIN:Ae.default.join(Le,"bin"),PIDS:Ae.default.join(Le,"pids"),BUFFERS:Ae.default.join(Le,"buffers"),DAEMON:Ae.default.join(Le,"daemon"),AI_SESSIONS:Ae.default.join(Le,"ai-sessions"),BACKGROUNDS:Ae.default.join(Le,"backgrounds")},Mn=new yr.default.promises.Resolver;Mn.setServers(["1.1.1.1","1.0.0.1","8.8.8.8"]);var eo=yr.default.lookup,Ac=/^(\d{1,3}\.){3}\d{1,3}$|^::1$|^[0-9a-f:]+$/i;yr.default.lookup=(e,r,n)=>{if(typeof r=="function"&&(n=r,r={}),e==="localhost"||Ac.test(e))return eo(e,r,n);(async()=>{if(r.family===6)return{addrs:await Mn.resolve6(e),family:6};if(r.family===4)return{addrs:await Mn.resolve4(e),family:4};let[t,i]=await Promise.allSettled([Mn.resolve4(e),Mn.resolve6(e)]);return t.status==="fulfilled"&&t.value?.length?{addrs:t.value,family:4}:i.status==="fulfilled"&&i.value?.length?{addrs:i.value,family:6}:null})().then(t=>{if(!t?.addrs?.length)return eo(e,r,n);r.all?n(null,t.addrs.map(i=>({address:i,family:t.family}))):n(null,t.addrs[0],t.family)}).catch(()=>eo(e,r,n))};var $=2208,pi=process.execPath,di=(e=process.env)=>process.versions.electron?{...e,ELECTRON_RUN_AS_NODE:"1"}:{...e};var li=5173,ui=3e3;var tf=[`http://localhost:${$}`,`http://127.0.0.1:${$}`,`http://localhost:${li}`,`http://127.0.0.1:${li}`,`http://localhost:${ui}`,`http://127.0.0.1:${ui}`],Cn={fileName:"agent.log",rotatedName:"agent.log.1",maxBytes:2*1024*1024,cleanupAfterDays:7},mi=60,O={STOPPED:0,PREPARING:1,CONNECTING:2,TUNNELING:3,VERIFYING:4,READY:5},hi={showTunnelUrlInMenu:!1};var gi={CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN:"1"};var yi={checkIntervalMs:3e4,requestTimeoutMs:5e3},ge={server:{strategy:"exp",baseMs:1e3,maxMs:6e4},tunnelRestart:{strategy:"exp",baseMs:2e3,maxMs:3e5},tunnelSpawn:{strategy:"linear",baseMs:5e3,maxMs:6e4},tunnelRateLimit:{strategy:"exp",baseMs:6e4,maxMs:9e5},internet:{strategy:"linear",baseMs:3e3,maxMs:6e4},sse:{strategy:"linear",baseMs:2e3,maxMs:2e3},urlSync:{strategy:"linear",baseMs:5e3,maxMs:6e4}},kc={Accept:"application/json, text/plain, */*","Accept-Language":"en-US,en;q=0.9","Cache-Control":"no-cache",Pragma:"no-cache","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"};function W(e,r={}){return fetch(e,{...r,headers:{...kc,...r.headers}})}var Rc=(0,Nn.dirname)((0,wi.fileURLToPath)(__importMetaUrl)),Pc=[(0,Nn.join)(vi.default.homedir(),".9remote",".env"),(0,Nn.join)(Rc,"..",".env")];function $c(e){for(let r of e.split(`
|
|
12
|
+
`)){let n=r.trim();if(!n||n.startsWith("#"))continue;let o=n.match(/^([A-Z_][A-Z0-9_]*)\s*=\s*"?(.*?)"?$/);o&&!process.env[o[1]]&&(process.env[o[1]]=o[2])}}for(let e of Pc)if((0,wr.existsSync)(e))try{$c((0,wr.readFileSync)(e,"utf8"))}catch{}for(let[e,r]of Object.entries(gi))process.env[e]||(process.env[e]=r);var xo=A(require("path"),1),Ts=A(require("fs"),1),xs=require("url");var Ei=A(bi(),1),ro=A(require("crypto"),1),{machineIdSync:Oc}=Ei.default;async function Xt(e=null){let r=e||process.env.MACHINE_ID_SALT||"9remote-salt";try{let n=Oc();return ro.default.createHash("sha256").update(n+r).digest("hex").substring(0,16)}catch(n){return console.error("Error getting machine ID:",n),ro.default.randomUUID().replace(/-/g,"").substring(0,16)}}var xi=A(require("crypto"),1),Si="abcdefghijklmnpqrstuvwxyz123456789",Ic=8;function Ti(){let e="";for(let r=0;r<Ic;r++)e+=Si[xi.default.randomInt(Si.length)];return e}function kt(e){return`sk-${(e||"").slice(0,8).toLowerCase()}-${Ti()}-${Ti()}`}function oo(e){return/^sk-[a-z0-9]{8}-[a-np-z1-9]{8}-[a-np-z1-9]{8}$/.test(e||"")}function Q(e){if(!oo(e))return e||null;let r=e.split("-");return`${r[0]}-${r[1]}-${r[2]}`}function Ai(e){return typeof e!="string"||!e?!1:/^sk-[a-z0-9]{8}-[a-z0-9]{4}-[0-9a-f]{6}$/.test(e.trim().toLowerCase())}function vr(e){return!e||e.length<8?"sk-***":`${e.slice(0,3)}***${e.slice(-4)}`}var de=A(require("fs"),1),Un=A(require("path"),1);var ye=require("fs"),ki=require("path"),_c=0;function je(e,r,n={}){let{mode:o=384,spaces:t=2}=n;(0,ye.mkdirSync)((0,ki.dirname)(e),{recursive:!0});let i=`${e}.${process.pid}.${++_c}.tmp`;try{(0,ye.writeFileSync)(i,JSON.stringify(r,null,t),{mode:o}),(0,ye.renameSync)(i,e)}catch(s){try{(0,ye.existsSync)(i)&&(0,ye.unlinkSync)(i)}catch{}throw s}}function Ri(e,r=null){try{return(0,ye.existsSync)(e)?JSON.parse((0,ye.readFileSync)(e,"utf8")):r}catch{return r}}var uf=J.STATE,Bn=Un.default.join(J.STATE,"state.json"),io=Un.default.join(J.ROOT,"keys.json"),br=Un.default.join(J.STATE,"cmd.json"),Pi=Un.default.join(J.STATE,"settings.json");function Jt(){for(let e of[J.ROOT,J.STATE])de.default.existsSync(e)||de.default.mkdirSync(e,{recursive:!0})}function $i(){try{return Jt(),de.default.existsSync(Bn)?JSON.parse(de.default.readFileSync(Bn,"utf8")):null}catch{return null}}function Fn(e){try{Jt(),je(Bn,e)}catch(r){console.error("Error saving state:",r)}}function Oi(){try{de.default.existsSync(Bn)&&de.default.unlinkSync(Bn)}catch{}}function V(){try{return Jt(),de.default.existsSync(Pi)?JSON.parse(de.default.readFileSync(Pi,"utf8"))||{}:{}}catch{return{}}}function Kn(){try{return Jt(),de.default.existsSync(io)?JSON.parse(de.default.readFileSync(io,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function Qt(e){try{Jt(),je(br,{cmd:e,ts:Date.now()},{spaces:0})}catch{}}function Ii(){try{if(!de.default.existsSync(br))return null;let e=JSON.parse(de.default.readFileSync(br,"utf8"));return de.default.unlinkSync(br),e.cmd}catch{return null}}function We(e,r,n="Default"){try{Jt();let o={machineId:e,key:r,name:n,createdAt:new Date().toISOString()};return je(io,o),o}catch(o){return console.error("Error saving key:",o),null}}var Me=A(require("fs"),1),so=A(require("path"),1);var Sr=J.LOGS,Hn=so.default.join(Sr,Cn.fileName),Tr=so.default.join(Sr,Cn.rotatedName),_i=!1,Li=null;function Lc(){Me.default.existsSync(Sr)||Me.default.mkdirSync(Sr,{recursive:!0})}function Mc(){try{if(Me.default.statSync(Hn).size<Cn.maxBytes)return;try{Me.default.rmSync(Tr,{force:!0})}catch{}Me.default.renameSync(Hn,Tr)}catch{}}function Cc(){try{let e=Me.default.statSync(Tr);Date.now()-e.mtimeMs>Cn.cleanupAfterDays*864e5&&Me.default.rmSync(Tr,{force:!0})}catch{}}function ao(e){try{Mc(),Me.default.appendFileSync(Hn,e+`
|
|
13
|
+
`)}catch{}}function Er(e){return e.map(r=>{if(r instanceof Error)return r.stack||r.message;if(typeof r=="object")try{return JSON.stringify(r)}catch{return String(r)}return String(r)}).join(" ")}var Nc=/\x1b\[[0-9;]*m/g,Dc=/https?:\/\/[^\s]+/g;function Bc(e){return String(e).replace(Nc,"").replace(Dc,"").replace(/\s+$/g,"")}function zt(e,r,n){let o=Bc(n);if(!o)return;let t=`${new Date().toISOString()} ${r.toUpperCase()} [${e}] ${o}`;if(ao(t),Li)try{Li(t)}catch{}}function Uc(){process.on("uncaughtException",e=>zt("crash","error",`uncaughtException: ${e?.stack||e?.message||e}`)),process.on("unhandledRejection",e=>{let r=e instanceof Error?e.stack||e.message:String(e);zt("crash","error",`unhandledRejection: ${r}`)}),process.on("exit",e=>ao(`${new Date().toISOString()} INFO [exit] code=${e} pid=${process.pid}`))}function Mi(){_i||(_i=!0,Lc(),Cc(),ao(`
|
|
14
|
+
=== SESSION ${new Date().toISOString()} pid=${process.pid} argv=${process.argv.slice(2).join(" ")} ===`),Uc())}function Ci(e=60){try{return Me.default.readFileSync(Hn,"utf8").split(`
|
|
15
|
+
`).filter(Boolean).slice(-e)}catch{return[]}}var Fc=process.env.NODE_ENV==="development"||process.env.AGENT_DEBUG==="1";function F(e){return{debug:(...r)=>{Fc&&zt(e,"debug",Er(r))},info:(...r)=>zt(e,"info",Er(r)),warn:(...r)=>zt(e,"warn",Er(r)),error:(...r)=>zt(e,"error",Er(r))}}var jn=Hn;var ct=A(require("crypto"),1),en=require("fs");var Ni=require("path");var mf=Buffer.from("302a300506032b656e","hex");var xr=(0,Ni.join)(J.CONFIG,"hostKey.json"),bf=Buffer.from("302a300506032b6570032100","hex"),Zt=null;function co(){if(Zt)return Zt;try{if((0,en.existsSync)(xr)){let s=JSON.parse((0,en.readFileSync)(xr,"utf8")),a=Buffer.from(s.publicKey,"base64");if(!s.x25519PrivateKey){let l=ct.default.generateKeyPairSync("x25519");s.x25519PrivateKey=l.privateKey.export({type:"pkcs8",format:"der"}).toString("base64"),s.x25519PublicKey=l.publicKey.export({type:"spki",format:"der"}).toString("base64"),je(xr,s)}let c=Buffer.from(s.x25519PublicKey,"base64");return Zt={privateKey:ct.default.createPrivateKey({key:Buffer.from(s.privateKey,"base64"),format:"der",type:"pkcs8"}),publicKey:ct.default.createPublicKey({key:a,format:"der",type:"spki"}),publicKeyB64:a.subarray(-32).toString("base64"),x25519PrivateKey:ct.default.createPrivateKey({key:Buffer.from(s.x25519PrivateKey,"base64"),format:"der",type:"pkcs8"}),x25519PublicKeyB64:c.subarray(-32).toString("base64")},Zt}}catch{}(0,en.mkdirSync)(J.CONFIG,{recursive:!0});let{privateKey:e,publicKey:r}=ct.default.generateKeyPairSync("ed25519"),n=r.export({type:"spki",format:"der"}).toString("base64"),o=e.export({type:"pkcs8",format:"der"}).toString("base64"),t=ct.default.generateKeyPairSync("x25519"),i=t.publicKey.export({type:"spki",format:"der"}).toString("base64");return je(xr,{privateKey:o,publicKey:n,x25519PrivateKey:t.privateKey.export({type:"pkcs8",format:"der"}).toString("base64"),x25519PublicKey:i}),Zt={privateKey:e,publicKey:r,publicKeyB64:Buffer.from(n,"base64").subarray(-32).toString("base64"),x25519PrivateKey:t.privateKey,x25519PublicKeyB64:Buffer.from(i,"base64").subarray(-32).toString("base64")},Zt}function lt(){return co().publicKeyB64}function ut(){return co().x25519PublicKeyB64}var Kc="9remote-session-v1";function Hc({apiKey:e,tunnelUrl:r,localIp:n,expiryMinutes:o,ts:t}){let i=a=>{let c=a==null?"":String(a);return`${c.length}:${c}`},s=`${Kc}|${i(e)}${i(r)}${i(n)}${i(o)}${i(t)}`;return ct.default.sign(null,Buffer.from(s,"utf8"),co().privateKey).toString("base64")}function Rt(e){let r=Date.now();return{ts:r,sig:Hc({...e,ts:r})}}var Bi=A(require("crypto"),1),Ui=require("path");var jc=F("pairing"),Fi=(0,Ui.join)(J.STATE,"pairing.json"),Di="ABCDEFGHIJKLMNPQRSTUVWXYZ123456789",Wc=2;function Ki(){let e="";for(let r=0;r<Wc;r++)e+=Di[Bi.default.randomInt(Di.length)];return e}function Gc(){let e=Ri(Fi,null);return!e||Date.now()>e.expiresAt?null:e}function Vc(e){try{je(Fi,e)}catch(r){jc.error(`persist pairing state: ${r.message}`)}}function Hi(e,r,n,o=null){Vc({tempKey:e,tail:r,expiresAt:n,workerUrl:o})}function ji(){let e=Gc();return e?{tempKey:e.tempKey,tail:e.tail,expiresAt:e.expiresAt}:null}var lo=F("session"),Yc=10;async function Wn(e,r){let n=async()=>{let o=await W(`${r}/api/temp-key/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify((()=>{let t={apiKey:Q(e),expiryMinutes:Yc};return{...t,...Rt(t)}})())});if(!o.ok){let t=await o.json().catch(()=>null);throw new Error(t?.error||`HTTP ${o.status}`)}return o.json()};try{let o;try{o=await n()}catch(i){if(lo.warn(`Temp key creation failed (${i.message}) \u2014 re-registering session`),!await Pt(e,r))throw i;o=await n()}let t=Ki();return Hi(o.tempKey,t,o.expiresAt,r),{...o,oneTimeKey:`${o.tempKey}${t}`}}catch(o){return lo.error(`Temp key creation failed: ${o?.message||o}`),null}}function Gn(e,r){return r?.tempKey?`${e}/login?k=${r.tempKey}#${r.oneTimeKey}`:`${e}/login`}async function Pt(e,r,n,o){try{let t=await W(`${r}/api/session/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:Q(e),hostPublicKey:lt(),hostX25519Key:ut(),tempKey:ji()?.tempKey||void 0})});if(!t.ok)throw new Error(`HTTP ${t.status}`);return n&&await W(`${r}/api/session/update`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:Q(e),tunnelUrl:n,...Rt({apiKey:Q(e),tunnelUrl:n})})}).catch(()=>{}),o&&Q(o)!==Q(e)&&await W(`${r}/api/session/delete`,{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:Q(o),...Rt({apiKey:Q(o)})})}).catch(()=>{}),!0}catch(t){return lo.error(`Session registration failed: ${t?.message||t}`),!1}}var ns=A(require("os"),1);var Pr=A(require("readline"),1),Gi=A(require("http"),1);var uo=require("child_process"),qc={screenRecording:"x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture",accessibility:"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"};function Ar(e){let r=qc[e];r&&process.platform==="darwin"&&(0,uo.exec)(`open "${r}"`,()=>{})}function Re({strategy:e,baseMs:r,maxMs:n},o){let t=Math.max(1,o),i=e==="exp"?r*Math.pow(2,t-1):r*t;return Math.min(i,n)}async function kr({config:e,task:r,label:n="task",log:o=()=>{},ctx:t={}}){let i=0;for(;!t.cancelled;){i++;try{if(await r(i))return!0}catch(a){o(`\u274C ${n} attempt ${i} error: ${a?.message||a}`)}if(t.cancelled)return!1;let s=Re(e,i);o(`\u{1F504} ${n} retry in ${s}ms (attempt ${i})`),await new Promise(a=>setTimeout(a,s))}return!1}var S={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",orange:"\x1B[38;2;230;138;110m",green:"\x1B[32m",red:"\x1B[31m",yellow:"\x1B[33m",cyan:"\x1B[36m",white:"\x1B[37m"},Vi=()=>Math.min(44,process.stdout.columns||44);function po(e,r=null){let o=Vi()-2,t=(a="")=>{let c=a.replace(/\x1b\[[0-9;]*m/g,""),l=Math.max(0,o-c.length);return S.orange+"\u2551"+S.reset+a+" ".repeat(l)+S.orange+"\u2551"+S.reset},i=(a,c=l=>l)=>{let l=a.replace(/\x1b\[[0-9;]*m/g,""),f=Math.floor((o-l.length)/2),u=o-l.length-f;return S.orange+"\u2551"+S.reset+" ".repeat(f)+c(a)+" ".repeat(u)+S.orange+"\u2551"+S.reset},s=["",S.orange+"\u2554"+"\u2550".repeat(o)+"\u2557"+S.reset,t(),i(`\u{1F680} 9Remote v${e}`,a=>S.bold+S.orange+a+S.reset),i("Remote terminal access from anywhere",a=>S.dim+a+S.reset),t()];return r&&(s.push(i(`\u2B06 New version v${r} available!`,a=>S.yellow+S.bold+a+S.reset)),s.push(i(`Run: npm i -g ${ke}`,a=>S.dim+a+S.reset)),s.push(t())),s.push(S.orange+"\u255A"+"\u2550".repeat(o)+"\u255D"+S.reset),s.push(""),s.join(`
|
|
16
|
+
`)}function rn(e,r=null){console.log(po(e,r))}var Wi=["\u28FE","\u28FD","\u28FB","\u28BF","\u287F","\u28DF","\u28EF","\u28F7"],fo=[{label:"Preparing",desc:"Checking dependencies"},{label:"Connecting",desc:"Creating session"},{label:"Starting tunnel",desc:"Spawning tunnel"},{label:"Verifying tunnel",desc:"Health check"},{label:"Ready",desc:"Tunnel is live"}],Xc=process.platform==="win32",Jc=Xc?120:80;process.on("exit",()=>{nn&&process.stdout.isTTY&&process.stdout.write("\x1B[?25h")});var Yi=(e,r)=>{nn&&process.stdout.isTTY&&process.stdout.write("\x1B[?25h"),process.listenerCount(e)<=1&&process.exit(r)};process.on("SIGINT",()=>Yi("SIGINT",130));process.on("SIGTERM",()=>Yi("SIGTERM",143));var Ge=0,$t=null,Rr=0,Ce=-1,Vn=null,tn=null,nn=!1;function qi(){let e=[],r=Ce===fo.length-1;return fo.forEach((n,o)=>{let t=o===Ce&&Vn?Vn:n.desc;if(o<Ce||r&&o===Ce)e.push(` ${S.green}\u2713${S.reset} ${S.dim}${n.label}${S.reset}`),tn&&o===tn.afterIdx&&e.push(` ${S.green}\u2713${S.reset} ${S.cyan}${tn.text}${S.reset}`);else if(o===Ce){let i=Wi[Rr%Wi.length];e.push(` ${S.orange}${i}${S.reset} ${S.bold}${n.label}${S.reset} ${S.dim}${t}${S.reset}`)}else e.push(` ${S.dim}\u25CB ${n.label}${S.reset}`)}),e}function Xi(){let e=qi();Ge>0&&process.stdout.write(`\x1B[${Ge}A\x1B[0J`),process.stdout.write(e.join(`
|
|
17
17
|
`)+`
|
|
18
|
-
`),
|
|
19
|
-
`))process.stdout.write(
|
|
20
|
-
`);e&&process.stdout.write(`${
|
|
18
|
+
`),Ge=e.length}function Ji(){if(Ge===0||Ce<0)return;let e=qi();if(e.length!==Ge){Xi();return}let r=Ce+(tn&&tn.afterIdx<Ce?1:0),n=Ge-r;process.stdout.write(`\x1B[${n}A\r\x1B[2K${e[r]}\x1B[${n}B\r`)}function Qc(){nn||(process.stdout.write("\x1B[?25l"),nn=!0)}function Qi(){nn&&(process.stdout.write("\x1B[?25h"),nn=!1)}function zi(e,r=!1,n=null){$t&&(clearInterval($t),$t=null),Ce=e,Vn=n,Rr=0,r||(Ge=0),Xi(),e>=0&&e<fo.length-1?(Qc(),$t=setInterval(()=>{Rr++,Ji()},Jc)):Qi()}function on(e){Vn=e,Ge>0&&Ji()}function Zi(){$t&&(clearInterval($t),$t=null),Qi(),Ge=0,Ce=-1,Vn=null,tn=null,Rr=0}function Ne(e,r,n=0,o="",t=null,i=null){return new Promise(s=>{let a=n,c=!0,l=!0,f=process.platform==="win32",u=()=>{if(!c)return;process.stdout.write(l?"\x1B[2J\x1B[H":"\x1B[H"),l=!1;let w=typeof o=="function"?o():o;if(w)for(let v of w.split(`
|
|
19
|
+
`))process.stdout.write(v+`\x1B[K
|
|
20
|
+
`);e&&process.stdout.write(`${S.dim}${e}${S.reset}\x1B[K
|
|
21
21
|
\x1B[K
|
|
22
|
-
`),
|
|
23
|
-
`)}),process.stdout.write("\x1B[J")},p=()=>{if(c){if(c=!1,process.stdin.isTTY)try{process.stdin.setRawMode(!1)}catch{}process.stdin.removeListener("keypress",d),process.stdin.pause()}},d=(w,
|
|
24
|
-
`),process.exit(0));let i=(
|
|
25
|
-
`),
|
|
22
|
+
`),r.forEach((v,P)=>{let E=P===a?f?">":"\u2605":f?" ":"\u2606",x=P===a?` \x1B[7m${S.bold}${E} ${v.label}${S.reset}`:` ${E} ${v.label}`;process.stdout.write(x+`\x1B[K
|
|
23
|
+
`)}),process.stdout.write("\x1B[J")},p=()=>{if(c){if(c=!1,process.stdin.isTTY)try{process.stdin.setRawMode(!1)}catch{}process.stdin.removeListener("keypress",d),process.stdin.pause()}},d=(w,v)=>{!c||!v||(v.name==="up"?(a=(a-1+r.length)%r.length,u()):v.name==="down"?(a=(a+1)%r.length,u()):v.name==="return"?(p(),s(a)):v.name==="escape"?(p(),s(-1)):v.ctrl&&v.name==="c"&&(p(),i&&i(),process.exit(0)))};if(process.stdin.removeAllListeners("keypress"),Pr.default.emitKeypressEvents(process.stdin),process.stdin.isTTY)try{process.stdin.setRawMode(!0)}catch{s(-1);return}process.stdin.on("keypress",d),process.stdin.resume(),u(),t&&t(u,()=>{c&&(p(),s(-2))})})}function mo(e){return new Promise(r=>{if(process.stdin.removeAllListeners("keypress"),process.stdin.isTTY)try{process.stdin.setRawMode(!1)}catch{}if(process.stdin.pause(),process.stdout.write(`${e} (y/N): `),Pr.default.emitKeypressEvents(process.stdin),process.stdin.isTTY)try{process.stdin.setRawMode(!0)}catch{}process.stdin.resume();let n=(o,t)=>{if(!t)return;if(process.stdin.removeListener("keypress",n),process.stdin.isTTY)try{process.stdin.setRawMode(!1)}catch{}process.stdin.pause(),t.ctrl&&t.name==="c"&&(process.stdout.write(`
|
|
24
|
+
`),process.exit(0));let i=(t.name||"").toLowerCase()==="y";process.stdout.write((i?"y":"n")+`
|
|
25
|
+
`),r(i)};process.stdin.on("keypress",n)})}function es(e,r){return new Promise(n=>{let o=e?e.slice(0,8):"unknown",t=Vi(),i=process.stdin.listeners("keypress").slice();if(process.stdin.removeAllListeners("keypress"),process.stdin.isTTY)try{process.stdin.setRawMode(!1)}catch{}process.stdin.pause();let s=`${S.orange}${"\u2550".repeat(t)}${S.reset}`;if(process.stdout.write(`\x1B[2J\x1B[H
|
|
26
26
|
${s}
|
|
27
|
-
${
|
|
27
|
+
${S.orange}${S.bold} \u{1F514} New Device Connection${S.reset}
|
|
28
28
|
${s}
|
|
29
|
-
Device: ${
|
|
30
|
-
IP: ${
|
|
29
|
+
Device: ${S.cyan}${o}...${S.reset}
|
|
30
|
+
IP: ${S.cyan}${r}${S.reset}
|
|
31
31
|
${s}
|
|
32
32
|
|
|
33
|
-
Allow this device? ${
|
|
33
|
+
Allow this device? ${S.dim}(y/n)${S.reset} `),Pr.default.emitKeypressEvents(process.stdin),process.stdin.isTTY)try{process.stdin.setRawMode(!0)}catch{}process.stdin.resume();let a=()=>{for(let l of i)process.stdin.on("keypress",l);if(i.length>0){if(process.stdin.isTTY)try{process.stdin.setRawMode(!0)}catch{}process.stdin.resume()}},c=(l,f)=>{if(!f)return;let u=(f.name||"").toLowerCase(),p=u==="y"||f.name==="return",d=u==="n"||f.name==="escape",m=f.ctrl&&f.name==="c";if(!p&&!d&&!m)return;try{if(process.stdin.removeListener("keypress",c),process.stdin.isTTY)try{process.stdin.setRawMode(!1)}catch{}process.stdin.pause()}catch{}m&&process.exit(0);let w=p,v=w?`${S.green}y${S.reset}
|
|
34
34
|
|
|
35
|
-
${
|
|
36
|
-
`:`${
|
|
35
|
+
${S.green}\u2713 Device approved${S.reset}
|
|
36
|
+
`:`${S.red}n${S.reset}
|
|
37
37
|
|
|
38
|
-
${
|
|
39
|
-
`;process.stdout.write(
|
|
40
|
-
`);
|
|
38
|
+
${S.red}\u2717 Device rejected${S.reset}
|
|
39
|
+
`;process.stdout.write(v),setTimeout(()=>{try{a()}catch{}n(w)},500)};process.stdin.on("keypress",c)})}function ts(e,r){let n=null,o=!1,t=null,i=45e3,s=()=>{t&&clearTimeout(t),t=setTimeout(()=>{try{n?.destroy()}catch{}},i)},a=async()=>{if(o)return;let c=await sn();n=Gi.default.get(`http://${c}:${e}/api/ui/events`,l=>{let f="";s(),l.on("data",u=>{s(),f+=u.toString();let p=f.split(`
|
|
40
|
+
`);f=p.pop();let d="";for(let m of p)if(m.startsWith("data: "))d=m.slice(6);else if(m===""&&d){try{let w=JSON.parse(d);Promise.resolve(r(w.type,w)).catch(()=>{})}catch{}d=""}}),l.on("end",()=>{t&&clearTimeout(t),o||setTimeout(a,Re(ge.sse,1))})}),n.on("error",()=>{t&&clearTimeout(t),o||setTimeout(a,Re(ge.sse,1))})};return a(),()=>{o=!0,t&&clearTimeout(t),n?.destroy()}}var ho=Number(process.env.NREMOTE_LOCAL_API_PORT)||$,go=!1;function rs(e){go=e}var Yn=null;async function sn(){if(Yn)return Yn;let e=o=>fetch(`http://${o}:${ho}/api/health`,{signal:AbortSignal.timeout(2e3)}).then(t=>t.ok?o:Promise.reject()),n=(await Promise.allSettled(["localhost","127.0.0.1"].map(e))).map((o,t)=>o.status==="fulfilled"?["localhost","127.0.0.1"][t]:null);return Yn=n.find(o=>o==="localhost")||n.find(Boolean)||null,Yn||"127.0.0.1"}function os(){Yn=null}async function Y(e,r){let n=await sn();try{return await fetch(`http://${n}:${ho}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}catch{return os(),null}}async function te(e){let r=await sn();try{let n=await fetch(`http://${r}:${ho}${e}`);return n.ok?await n.json():null}catch{return os(),null}}async function j(e){await Y("/api/ui/state",e)}async function C(e,r={}){go&&zi(e-1,e>O.PREPARING),await j({step:e,stepDesc:"",...r})}function $r({phase:e,percent:r}){let n=e==="download"?`Downloading tunnel binary ${r??0}%`:"Extracting tunnel binary";go&&on(n),j({stepDesc:n})}async function q(){return!!await te("/api/health")}async function yo(){let[e,r,n,o]=await Promise.all([te("/api/ui/state"),te("/api/device/auto-approve"),te("/api/autostart"),te("/api/sleep-inhibit")]);return{desktopEnabled:!!e?.desktopEnabled,remoteAvailable:!!e?.remoteAvailable,autoApprove:!!r?.enabled,autoStart:!!n?.enabled,sleepInhibitMode:o?.mode||"never",sleepInhibitActive:!!o?.active,sleepInhibitPresets:Array.isArray(o?.presets)?o.presets:[]}}function is(){let e=ns.default.networkInterfaces();for(let r of Object.values(e))for(let n of r)if(n.family==="IPv4"&&!n.internal)return n.address;return null}var ss=(e=0)=>r=>`\x1B[${r+e}m`,as=(e=0)=>r=>`\x1B[${38+e};5;${r}m`,cs=(e=0)=>(r,n,o)=>`\x1B[${38+e};2;${r};${n};${o}m`,K={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},jf=Object.keys(K.modifier),zc=Object.keys(K.color),Zc=Object.keys(K.bgColor),Wf=[...zc,...Zc];function el(){let e=new Map;for(let[r,n]of Object.entries(K)){for(let[o,t]of Object.entries(n))K[o]={open:`\x1B[${t[0]}m`,close:`\x1B[${t[1]}m`},n[o]=K[o],e.set(t[0],t[1]);Object.defineProperty(K,r,{value:n,enumerable:!1})}return Object.defineProperty(K,"codes",{value:e,enumerable:!1}),K.color.close="\x1B[39m",K.bgColor.close="\x1B[49m",K.color.ansi=ss(),K.color.ansi256=as(),K.color.ansi16m=cs(),K.bgColor.ansi=ss(10),K.bgColor.ansi256=as(10),K.bgColor.ansi16m=cs(10),Object.defineProperties(K,{rgbToAnsi256:{value(r,n,o){return r===n&&n===o?r<8?16:r>248?231:Math.round((r-8)/247*24)+232:16+36*Math.round(r/255*5)+6*Math.round(n/255*5)+Math.round(o/255*5)},enumerable:!1},hexToRgb:{value(r){let n=/[a-f\d]{6}|[a-f\d]{3}/i.exec(r.toString(16));if(!n)return[0,0,0];let[o]=n;o.length===3&&(o=[...o].map(i=>i+i).join(""));let t=Number.parseInt(o,16);return[t>>16&255,t>>8&255,t&255]},enumerable:!1},hexToAnsi256:{value:r=>K.rgbToAnsi256(...K.hexToRgb(r)),enumerable:!1},ansi256ToAnsi:{value(r){if(r<8)return 30+r;if(r<16)return 90+(r-8);let n,o,t;if(r>=232)n=((r-232)*10+8)/255,o=n,t=n;else{r-=16;let a=r%36;n=Math.floor(r/36)/5,o=Math.floor(a/6)/5,t=a%6/5}let i=Math.max(n,o,t)*2;if(i===0)return 30;let s=30+(Math.round(t)<<2|Math.round(o)<<1|Math.round(n));return i===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(r,n,o)=>K.ansi256ToAnsi(K.rgbToAnsi256(r,n,o)),enumerable:!1},hexToAnsi:{value:r=>K.ansi256ToAnsi(K.hexToAnsi256(r)),enumerable:!1}}),K}var tl=el(),Pe=tl;var Ir=A(require("node:process"),1),us=A(require("node:os"),1),wo=A(require("node:tty"),1);function be(e,r=globalThis.Deno?globalThis.Deno.args:Ir.default.argv){let n=e.startsWith("-")?"":e.length===1?"-":"--",o=r.indexOf(n+e),t=r.indexOf("--");return o!==-1&&(t===-1||o<t)}var{env:H}=Ir.default,Or;be("no-color")||be("no-colors")||be("color=false")||be("color=never")?Or=0:(be("color")||be("colors")||be("color=true")||be("color=always"))&&(Or=1);function nl(){if("FORCE_COLOR"in H)return H.FORCE_COLOR==="true"?1:H.FORCE_COLOR==="false"?0:H.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(H.FORCE_COLOR,10),3)}function rl(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function ol(e,{streamIsTTY:r,sniffFlags:n=!0}={}){let o=nl();o!==void 0&&(Or=o);let t=n?Or:o;if(t===0)return 0;if(n){if(be("color=16m")||be("color=full")||be("color=truecolor"))return 3;if(be("color=256"))return 2}if("TF_BUILD"in H&&"AGENT_NAME"in H)return 1;if(e&&!r&&t===void 0)return 0;let i=t||0;if(H.TERM==="dumb")return i;if(Ir.default.platform==="win32"){let s=us.default.release().split(".");return Number(s[0])>=10&&Number(s[2])>=10586?Number(s[2])>=14931?3:2:1}if("CI"in H)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(s=>s in H)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(s=>s in H)||H.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in H)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(H.TEAMCITY_VERSION)?1:0;if(H.COLORTERM==="truecolor"||H.TERM==="xterm-kitty"||H.TERM==="xterm-ghostty"||H.TERM==="wezterm")return 3;if("TERM_PROGRAM"in H){let s=Number.parseInt((H.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(H.TERM_PROGRAM){case"iTerm.app":return s>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(H.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(H.TERM)||"COLORTERM"in H?1:i}function ls(e,r={}){let n=ol(e,{streamIsTTY:e&&e.isTTY,...r});return rl(n)}var il={stdout:ls({isTTY:wo.default.isatty(1)}),stderr:ls({isTTY:wo.default.isatty(2)})},fs=il;function ps(e,r,n){let o=e.indexOf(r);if(o===-1)return e;let t=r.length,i=0,s="";do s+=e.slice(i,o)+r+n,i=o+t,o=e.indexOf(r,i);while(o!==-1);return s+=e.slice(i),s}function ds(e,r,n,o){let t=0,i="";do{let s=e[o-1]==="\r";i+=e.slice(t,s?o-1:o)+r+(s?`\r
|
|
41
41
|
`:`
|
|
42
|
-
`)+
|
|
43
|
-
`,
|
|
44
|
-
`);return i!==-1&&(
|
|
45
|
-
`),(0
|
|
42
|
+
`)+n,t=o+1,o=e.indexOf(`
|
|
43
|
+
`,t)}while(o!==-1);return i+=e.slice(t),i}var{stdout:ms,stderr:hs}=fs,vo=Symbol("GENERATOR"),an=Symbol("STYLER"),qn=Symbol("IS_EMPTY"),gs=["ansi","ansi","ansi256","ansi16m"],cn=Object.create(null),sl=(e,r={})=>{if(r.level&&!(Number.isInteger(r.level)&&r.level>=0&&r.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let n=ms?ms.level:0;e.level=r.level===void 0?n:r.level};var al=e=>{let r=(...n)=>n.join(" ");return sl(r,e),Object.setPrototypeOf(r,Xn.prototype),r};function Xn(e){return al(e)}Object.setPrototypeOf(Xn.prototype,Function.prototype);for(let[e,r]of Object.entries(Pe))cn[e]={get(){let n=_r(this,Eo(r.open,r.close,this[an]),this[qn]);return Object.defineProperty(this,e,{value:n}),n}};cn.visible={get(){let e=_r(this,this[an],!0);return Object.defineProperty(this,"visible",{value:e}),e}};var bo=(e,r,n,...o)=>e==="rgb"?r==="ansi16m"?Pe[n].ansi16m(...o):r==="ansi256"?Pe[n].ansi256(Pe.rgbToAnsi256(...o)):Pe[n].ansi(Pe.rgbToAnsi(...o)):e==="hex"?bo("rgb",r,n,...Pe.hexToRgb(...o)):Pe[n][e](...o),cl=["rgb","hex","ansi256"];for(let e of cl){cn[e]={get(){let{level:n}=this;return function(...o){let t=Eo(bo(e,gs[n],"color",...o),Pe.color.close,this[an]);return _r(this,t,this[qn])}}};let r="bg"+e[0].toUpperCase()+e.slice(1);cn[r]={get(){let{level:n}=this;return function(...o){let t=Eo(bo(e,gs[n],"bgColor",...o),Pe.bgColor.close,this[an]);return _r(this,t,this[qn])}}}}var ll=Object.defineProperties(()=>{},{...cn,level:{enumerable:!0,get(){return this[vo].level},set(e){this[vo].level=e}}}),Eo=(e,r,n)=>{let o,t;return n===void 0?(o=e,t=r):(o=n.openAll+e,t=r+n.closeAll),{open:e,close:r,openAll:o,closeAll:t,parent:n}},_r=(e,r,n)=>{let o=(...t)=>ul(o,t.length===1?""+t[0]:t.join(" "));return Object.setPrototypeOf(o,ll),o[vo]=e,o[an]=r,o[qn]=n,o},ul=(e,r)=>{if(e.level<=0||!r)return e[qn]?"":r;let n=e[an];if(n===void 0)return r;let{openAll:o,closeAll:t}=n;if(r.includes("\x1B"))for(;n!==void 0;)r=ps(r,n.close,n.open),n=n.parent;let i=r.indexOf(`
|
|
44
|
+
`);return i!==-1&&(r=ds(r,t,o,i)),o+r+t};Object.defineProperties(Xn.prototype,cn);var fl=Xn(),Qf=Xn({level:hs?hs.level:0});var h=fl;var ep=process.env.NODE_ENV==="development";var I=process.env.NREMOTE_WORKER_URL||"https://9remote.cc",ys=3e4,ws=500,So=300,$e={cmdMs:1e3,pendingApprovalMs:3e3,statsMs:5e3,serverReadyIntervalMs:200,serverReadyTimeoutMs:5e3,bgServerReadyTimeoutMs:15e3,bgServerReadyIntervalMs:300},ft={intervalMs:2e3,timeoutMs:12e4,fetchTimeoutMs:5e3,dnsTimeoutMs:2e3,maxLogEntries:80,postReadyHoldMs:2e3},ie={killCloudflaredMs:500,killCloudflaredTuiMs:300,serverBootMs:2e3,guestRecheckMs:3e3,trayReadyMs:1e3,postReadyHoldMs:2e3,bgSpawnFlushMs:400};var Ve={maxLogLines:200,headerWidth:44},Ye={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock",gateTimeoutMs:6e4},vs=5e3,To=12e4;var Lr=1500,bs=2,Es=3e4,me={orange:h.rgb(230,138,110),orangeDim:h.rgb(200,120,95)};function Ss(){return process.env.CODESPACES==="true"}var pl=xo.default.dirname((0,xs.fileURLToPath)(__importMetaUrl));async function pt(){let e=await Xt();if(Ss()&&process.env.NREMOTE_API_KEY)return We(e,process.env.NREMOTE_API_KEY,"Codespace");let r=Kn();if(r.key)Ai(r.key)&&(r=await dl(e,r));else{let n=kt(e);r=We(e,n,"Default")}return r}async function dl(e,r){if(await q())return r;let n=kt(e);if(V().remoteEnabled===!1)return We(e,n,r.name||"Default");await Pt(n,I,null,r.key);let o=Kn();return oo(o.key)?o:We(e,n,r.name||"Default")}function De(){return"3.0.39"}var z=require("fs"),Cs=require("url"),un=require("child_process"),Ee=A(require("path"),1),dt=A(require("os"),1);var ln=A(require("fs"),1),Ao=A(require("path"),1),As=A(require("os"),1),ks=require("child_process"),Mr=Ao.default.join(As.default.homedir(),".9remote","pids");function ml(){try{ln.default.existsSync(Mr)||ln.default.mkdirSync(Mr,{recursive:!0})}catch{}}function ko(e){return Ao.default.join(Mr,`${e}.pid`)}function Be(e,r){if(r)try{ml(),ln.default.writeFileSync(ko(e),String(r))}catch{}}function Jn(e){try{let r=ln.default.readFileSync(ko(e),"utf8").trim(),n=parseInt(r,10);return Number.isFinite(n)&&n>0?n:null}catch{return null}}function qe(e){try{ln.default.unlinkSync(ko(e))}catch{}}function Ro(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function hl(e){let r=Jn(e);if(qe(e),!r)return!1;try{process.platform==="win32"?(0,ks.execSync)(`taskkill /F /T /PID ${r}`,{stdio:"ignore",windowsHide:!0}):process.kill(r,"SIGKILL")}catch{}return!0}var gl=["cloudflared","agent"];function Rs(){for(let e of gl)hl(e)}function Ps(){return Mr}var _t=require("child_process"),B=require("fs"),Ot=require("path"),$o=A(require("os"),1),It=A(require("path"),1),Os=require("url");var Nr=(0,Ot.join)(J.LOGS,"autostart.log"),Cr="cc.9remote.agent",Dr="9Remote",Br=["--tray","--skip-update","--start"],Qn=$o.default.homedir(),$s=It.default.dirname((0,Os.fileURLToPath)(__importMetaUrl)),se={darwin:(0,Ot.join)(Qn,"Library","LaunchAgents",`${Cr}.plist`),linux:(0,Ot.join)(Qn,".config","autostart",`${Cr}.desktop`),linuxSystemd:(0,Ot.join)(Qn,".config","systemd","user",`${Cr}.service`),win:(0,Ot.join)(process.env.APPDATA||"","Microsoft","Windows","Start Menu","Programs","Startup",`${Dr}.vbs`)};function Xe(){for(let e=$s,r=null;e!==r;r=e,e=It.default.dirname(e)){let n=It.default.join(e,"package.json");if((0,B.existsSync)(n)){try{let o=JSON.parse((0,B.readFileSync)(n,"utf8"));if(o.name!==ee)continue;let t=typeof o.bin=="string"?o.bin:o.bin?.[ee];if(t){let i=It.default.resolve(e,t);if((0,B.existsSync)(i))return i}}catch{}break}}return process.argv[1]||It.default.resolve($s,"..","index.js")}function Oe(){return process.execPath}function Oo(){return process.versions.electron?"env ELECTRON_RUN_AS_NODE=1 ":""}function Is(e){let r=Oe(),n=Xe();if(process.platform==="win32"){let t=e.join(" "),i=(0,Ot.join)($o.default.tmpdir(),`${ee}-launch.vbs`);return(0,B.writeFileSync)(i,`CreateObject("WScript.Shell").Run """${r}"" ""${n}"" ${t}", 0, False
|
|
45
|
+
`),(0,_t.execFile)("wscript.exe",[i],{windowsHide:!0}).unref?.(),null}let o=(0,_t.spawn)(r,[n,...e],{detached:!0,stdio:"ignore"});return o.unref(),o.pid||null}function _s(){let e=It.default.dirname(Oe()),r=["/usr/local/bin","/usr/bin","/bin","/usr/sbin","/sbin","/opt/homebrew/bin"];return r.includes(e)||r.unshift(e),r.join(":")}function Po(e){return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function yl(e,r){let n=[e,r,...Br].map(o=>` <string>${Po(o)}</string>`).join(`
|
|
46
46
|
`);return`<?xml version="1.0" encoding="UTF-8"?>
|
|
47
47
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
48
48
|
<plist version="1.0">
|
|
49
49
|
<dict>
|
|
50
50
|
<key>Label</key>
|
|
51
|
-
<string>${
|
|
51
|
+
<string>${Cr}</string>
|
|
52
52
|
<key>ProgramArguments</key>
|
|
53
53
|
<array>
|
|
54
|
-
${
|
|
54
|
+
${n}
|
|
55
55
|
</array>
|
|
56
56
|
<key>RunAtLoad</key>
|
|
57
57
|
<true/>
|
|
@@ -60,27 +60,27 @@ ${r}
|
|
|
60
60
|
<key>EnvironmentVariables</key>
|
|
61
61
|
<dict>
|
|
62
62
|
<key>PATH</key>
|
|
63
|
-
<string>${
|
|
63
|
+
<string>${Po(_s())}</string>
|
|
64
64
|
<key>HOME</key>
|
|
65
|
-
<string>${
|
|
65
|
+
<string>${Po(Qn)}</string>
|
|
66
66
|
</dict>
|
|
67
67
|
<key>StandardOutPath</key>
|
|
68
|
-
<string>${
|
|
68
|
+
<string>${Nr}</string>
|
|
69
69
|
<key>StandardErrorPath</key>
|
|
70
|
-
<string>${
|
|
70
|
+
<string>${Nr}</string>
|
|
71
71
|
</dict>
|
|
72
72
|
</plist>
|
|
73
|
-
`}function
|
|
73
|
+
`}function wl(){return(0,B.existsSync)(se.darwin)}function vl(){let e=Br.join(" ");return`Set WshShell = CreateObject("WScript.Shell")
|
|
74
74
|
WshShell.Run """${Oe()}"" ""${Xe()}"" ${e}", 0, False
|
|
75
|
-
`}function
|
|
75
|
+
`}function bl(){try{(0,_t.execFileSync)("reg",["DELETE","HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run","/V",Dr,"/F"],{windowsHide:!0,stdio:"ignore"})}catch{}}function El(){return(0,B.existsSync)(se.win)}function Sl(){let e=`${Oe()} ${Xe()} ${Br.join(" ")}`;return`[Desktop Entry]
|
|
76
76
|
Type=Application
|
|
77
|
-
Name=${
|
|
77
|
+
Name=${Dr}
|
|
78
78
|
Exec=${e}
|
|
79
79
|
X-GNOME-Autostart-enabled=true
|
|
80
80
|
NoDisplay=false
|
|
81
81
|
Terminal=false
|
|
82
|
-
`}function
|
|
83
|
-
Description=${
|
|
82
|
+
`}function Tl(){let e=Br.map(r=>`'${r}'`).join(" ");return`[Unit]
|
|
83
|
+
Description=${Dr} Host
|
|
84
84
|
After=network-online.target
|
|
85
85
|
Wants=network-online.target
|
|
86
86
|
|
|
@@ -89,16 +89,16 @@ Type=simple
|
|
|
89
89
|
ExecStart=${Oe()} ${Xe()} ${e}
|
|
90
90
|
Restart=always
|
|
91
91
|
RestartSec=10
|
|
92
|
-
Environment=PATH=${
|
|
92
|
+
Environment=PATH=${_s()}
|
|
93
93
|
Environment=HOME=${Qn}
|
|
94
|
-
StandardOutput=append:${
|
|
95
|
-
StandardError=append:${
|
|
94
|
+
StandardOutput=append:${Nr}
|
|
95
|
+
StandardError=append:${Nr}
|
|
96
96
|
|
|
97
97
|
[Install]
|
|
98
98
|
WantedBy=default.target
|
|
99
|
-
`}function
|
|
99
|
+
`}function xl(e){try{return(0,_t.execFileSync)("systemctl",["--user",...e],{stdio:"ignore"}),!0}catch{return!1}}function Al(){return(0,B.existsSync)(se.linux)||(0,B.existsSync)(se.linuxSystemd)}async function kl(){try{if(process.platform==="darwin")return wl();if(process.platform==="win32")return await El();if(process.platform==="linux")return Al()}catch{}return!1}async function Ls(){try{if(process.platform==="win32"&&bl(),!await kl())return!1;if(process.platform==="darwin"){let e=yl(Oe(),Xe());return((0,B.existsSync)(se.darwin)?(0,B.readFileSync)(se.darwin,"utf8"):"")===e?!1:((0,B.writeFileSync)(se.darwin,e),!0)}if(process.platform==="win32"){let e=vl();return((0,B.existsSync)(se.win)?(0,B.readFileSync)(se.win,"utf8"):"")===e?!1:((0,B.writeFileSync)(se.win,e),!0)}if(process.platform==="linux"){if((0,B.existsSync)(se.linuxSystemd)){let e=Tl();return(0,B.readFileSync)(se.linuxSystemd,"utf8")===e?!1:((0,B.writeFileSync)(se.linuxSystemd,e),xl(["daemon-reload"]),!0)}if((0,B.existsSync)(se.linux)){let e=Sl();return(0,B.readFileSync)(se.linux,"utf8")===e?!1:((0,B.writeFileSync)(se.linux,e),!0)}}}catch{}return!1}var Mt=F("update"),Rl=Ee.default.dirname((0,Cs.fileURLToPath)(__importMetaUrl)),Ns=(0,z.existsSync)("/.dockerenv"),Ds=8e3;var Lt=2208,Io=Ee.default.join(dt.default.homedir(),".9remote","cloudflared.pid");function Pl(){try{Rs()}catch{}try{if((0,z.existsSync)(Io)){let e=parseInt((0,z.readFileSync)(Io,"utf8"));if(Number.isFinite(e))try{process.kill(e)}catch{}try{(0,z.unlinkSync)(Io)}catch{}}}catch{}try{process.platform==="win32"?(0,un.execSync)(`for /f "tokens=5" %a in ('netstat -aon ^| findstr :${Lt}') do taskkill /F /PID %a`,{stdio:"ignore",windowsHide:!0}):(0,un.execSync)(`lsof -ti:${Lt} | xargs kill -9 2>/dev/null || true`,{stdio:"ignore"})}catch{}if(process.platform==="win32"){let e=Date.now()+1500;for(;Date.now()<e;);}}function Bs(){return"3.0.39"}function Us(e,r){let n=e.split(".").map(Number),o=r.split(".").map(Number);for(let t=0;t<3;t++){if(o[t]>n[t])return!0;if(o[t]<n[t])return!1}return!1}function $l(){return process.env.CODESPACES==="true"||process.env.GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN?"GitHub Codespaces":Ns?"Docker":null}function Ur(){Pl()}async function Fs(){try{let e=Bs();if(!e)return null;let r=await W(to,{signal:AbortSignal.timeout(Ds)});if(!r.ok)return null;let{version:n}=await r.json();return n&&Us(e,n)?{current:e,latest:n}:null}catch{return null}}var Ct=Ee.default.join(J.STATE,Ye.lockFile);function Ol(){try{if((0,z.existsSync)(Ct)){let{pid:e,ts:r}=JSON.parse((0,z.readFileSync)(Ct,"utf8")),n=Date.now()-r<Ye.lockTtlMs,o=!1;try{process.kill(e,0),o=!0}catch{}if(n&&o)return!1}}catch{}try{(0,z.writeFileSync)(Ct,JSON.stringify({pid:process.pid,ts:Date.now()}))}catch{}return!0}async function Il(){try{let e=await W(to,{signal:AbortSignal.timeout(Ds)});if(!e.ok)return null;let{version:r}=await e.json();return r||null}catch{return null}}function Ks(){try{if(process.env.NREMOTE_REGISTRY)return`--registry ${new URL(process.env.NREMOTE_REGISTRY).origin}`}catch{}return""}function Hs(){let e=Xe(),r=Ee.default.sep,n=`${r}lib${r}node_modules${r}`,o=e.indexOf(n);return o>0?{global:"-g",prefix:`--prefix "${e.slice(0,o)}"`}:(o=e.indexOf(`${r}node_modules${r}`),o>0?{global:"",prefix:`--prefix "${e.slice(0,o)}"`}:{global:"-g",prefix:""})}function Ms(){let e=process.argv.slice(2).filter(t=>t!=="--skip-update"),n=e.includes("ui")||e.includes("start")||e.some(t=>["--tray","--auto","--start"].includes(t))?e.join(" "):"--tray";return`${n.includes("--start")||n.includes("start")?n:`${n} --start`} --skip-update`}function js(){let e=process.env.NREMOTE_NPM_CLI;return e&&(0,z.existsSync)(e)?process.platform==="win32"?`"${Oe()}" "${e}"`:`env ELECTRON_RUN_AS_NODE=1 "${Oe()}" "${e}"`:"npm"}function _l(e,r){let n=Ee.default.join(dt.default.tmpdir(),`${ee}-gate.cjs`),o=`const http = require("http");
|
|
100
100
|
const PORT = ${e};
|
|
101
|
-
const EXIT_MS = ${
|
|
101
|
+
const EXIT_MS = ${r};
|
|
102
102
|
const HTML = '<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>9Remote</title><style>body{margin:0;height:100vh;display:flex;align-items:center;justify-content:center;background:#101218;color:#c9ced6;font-family:system-ui,-apple-system,sans-serif}.spin{width:26px;height:26px;border:3px solid #2a2f3a;border-top-color:#e68a6e;border-radius:50%;animation:r 1s linear infinite;margin:0 auto 14px}@keyframes r{to{transform:rotate(360deg)}}</style></head><body><div><div class="spin"></div><div>9Remote is updating\u2026</div></div><script>setInterval(function(){fetch("/api/health",{cache:"no-store"}).then(function(r){if(r.ok)location.reload()}).catch(function(){})},1500)</script></body></html>';
|
|
103
103
|
function handler(req, res) {
|
|
104
104
|
if (req.url.startsWith("/api/health")) { res.writeHead(503, { "Content-Type": "text/plain" }); return res.end("updating"); }
|
|
@@ -115,14 +115,14 @@ function bind(host, attempt) {
|
|
|
115
115
|
bind("127.0.0.1", 0);
|
|
116
116
|
bind("::1", 0);
|
|
117
117
|
setTimeout(() => process.exit(0), EXIT_MS);
|
|
118
|
-
`;return(0,
|
|
118
|
+
`;return(0,z.writeFileSync)(n,o),n}function Ll({currentVersion:e,latest:r,agentPid:n}){let o=Ps(),t=Ks(),i=Oe(),s=_l(Lt,Ye.gateTimeoutMs),a=Oo(),c=Xe(),l=Ct,{global:f,prefix:u}=Hs(),p=`${f} --prefer-online --no-audit --no-fund ${t} ${u}`.trim(),d=js();if(process.platform==="win32"){let v=Ee.default.join(dt.default.tmpdir(),`${ee}-restart.vbs`),P=`@echo off
|
|
119
119
|
setlocal EnableDelayedExpansion
|
|
120
120
|
set "NODE=${i}"
|
|
121
121
|
set "CLI=${c}"
|
|
122
122
|
${process.env.NREMOTE_NPM_CLI?'set "ELECTRON_RUN_AS_NODE=1"':""}
|
|
123
123
|
|
|
124
124
|
:waitloop
|
|
125
|
-
tasklist /FI "PID eq ${
|
|
125
|
+
tasklist /FI "PID eq ${n}" 2>nul | find "${n}" >nul
|
|
126
126
|
if not errorlevel 1 (
|
|
127
127
|
timeout /t 1 /nobreak >nul
|
|
128
128
|
goto waitloop
|
|
@@ -143,10 +143,10 @@ start "" /b "%NODE%" "${s}"
|
|
|
143
143
|
set ATTEMPT=0
|
|
144
144
|
:installloop
|
|
145
145
|
set /a ATTEMPT+=1
|
|
146
|
-
call ${d} install ${
|
|
146
|
+
call ${d} install ${ke} ${p} >nul 2>&1
|
|
147
147
|
if !ERRORLEVEL! EQU 0 goto verify
|
|
148
|
-
if !ATTEMPT! GEQ ${
|
|
149
|
-
call ${d} install ${
|
|
148
|
+
if !ATTEMPT! GEQ ${Ye.maxRetry} (
|
|
149
|
+
call ${d} install ${ke} ${p} --omit=optional >nul 2>&1
|
|
150
150
|
goto verify
|
|
151
151
|
)
|
|
152
152
|
timeout /t 3 /nobreak >nul
|
|
@@ -154,7 +154,7 @@ goto installloop
|
|
|
154
154
|
|
|
155
155
|
:verify
|
|
156
156
|
set "NEWVER="
|
|
157
|
-
set "VERFILE=%TEMP%\\${
|
|
157
|
+
set "VERFILE=%TEMP%\\${ee}-ver.txt"
|
|
158
158
|
"%NODE%" "%CLI%" --version > "%VERFILE%" 2>nul
|
|
159
159
|
REM Read first line + strip surrounding whitespace/CR via for/f tokens
|
|
160
160
|
for /f "usebackq tokens=* delims= " %%V in ("%VERFILE%") do (
|
|
@@ -164,8 +164,8 @@ for /f "usebackq tokens=* delims= " %%V in ("%VERFILE%") do (
|
|
|
164
164
|
:gotver
|
|
165
165
|
del /f /q "%VERFILE%" >nul 2>&1
|
|
166
166
|
if defined NEWVER set "NEWVER=!NEWVER: =!"
|
|
167
|
-
if not "!NEWVER!"=="${
|
|
168
|
-
call ${d} install ${
|
|
167
|
+
if not "!NEWVER!"=="${r}" (
|
|
168
|
+
call ${d} install ${ee}@${e} ${p} >nul 2>&1
|
|
169
169
|
)
|
|
170
170
|
del /f /q "${l}" >nul 2>&1
|
|
171
171
|
|
|
@@ -173,13 +173,13 @@ REM Free the port for the new agent (kills the loading gate)
|
|
|
173
173
|
for /f "tokens=5" %%a in ('netstat -aon ^| findstr :${Lt}') do taskkill /F /PID %%a >nul 2>&1
|
|
174
174
|
timeout /t 1 /nobreak >nul
|
|
175
175
|
|
|
176
|
-
wscript "${
|
|
176
|
+
wscript "${v}"
|
|
177
177
|
exit /b 0
|
|
178
|
-
`,
|
|
179
|
-
`);let
|
|
180
|
-
`),{shellCmd:["wscript.exe",[
|
|
178
|
+
`,E=Ee.default.join(dt.default.tmpdir(),`${ee}-update.bat`);(0,z.writeFileSync)(E,P),(0,z.writeFileSync)(v,`CreateObject("WScript.Shell").Run """%NODE%"" ""%CLI%"" ${Ms()}", 0, False`.replace("%NODE%",i).replace("%CLI%",c)+`
|
|
179
|
+
`);let x=Ee.default.join(dt.default.tmpdir(),`${ee}-update.vbs`);return(0,z.writeFileSync)(x,`CreateObject("WScript.Shell").Run "cmd /c ""${E}""", 0, False
|
|
180
|
+
`),{shellCmd:["wscript.exe",[x]],windowsVerbatim:!1}}let m=`#!/bin/bash
|
|
181
181
|
# Wait for agent to exit so it releases the cli.cjs file lock
|
|
182
|
-
while kill -0 ${
|
|
182
|
+
while kill -0 ${n} 2>/dev/null; do sleep 1; done
|
|
183
183
|
|
|
184
184
|
# Kill tracked PIDs only (never ptyDaemon \u2192 sessions survive)
|
|
185
185
|
for name in cloudflared agent; do
|
|
@@ -197,12 +197,12 @@ sleep 2
|
|
|
197
197
|
(${a}"${i}" "${s}" >/dev/null 2>&1 &)
|
|
198
198
|
|
|
199
199
|
attempt=0
|
|
200
|
-
while [ $attempt -lt ${
|
|
200
|
+
while [ $attempt -lt ${Ye.maxRetry} ]; do
|
|
201
201
|
attempt=$((attempt+1))
|
|
202
202
|
echo "Installing (attempt $attempt)..."
|
|
203
|
-
if ${d} install ${
|
|
204
|
-
if [ $attempt -eq ${
|
|
205
|
-
${d} install ${
|
|
203
|
+
if ${d} install ${ke} ${p}; then break; fi
|
|
204
|
+
if [ $attempt -eq ${Ye.maxRetry} ]; then
|
|
205
|
+
${d} install ${ke} ${p} --omit=optional || true
|
|
206
206
|
fi
|
|
207
207
|
sleep 3
|
|
208
208
|
done
|
|
@@ -210,9 +210,9 @@ done
|
|
|
210
210
|
# Verify version == latest; roll back if the new binary is broken/wrong (R2)
|
|
211
211
|
# Take first line + strip ANSI escapes so trailing cursor codes don't corrupt compare
|
|
212
212
|
NEWVER=$(${a}"${i}" "${c}" --version 2>/dev/null | head -1 | sed 's/\x1B[[0-9;?]*[a-zA-Z]//g' | tr -d '[:space:]')
|
|
213
|
-
if [ "$NEWVER" != "${
|
|
214
|
-
echo "Verify failed (got $NEWVER, want ${
|
|
215
|
-
${d} install ${
|
|
213
|
+
if [ "$NEWVER" != "${r}" ]; then
|
|
214
|
+
echo "Verify failed (got $NEWVER, want ${r}), rolling back to ${e}..."
|
|
215
|
+
${d} install ${ee}@${e} ${p} || true
|
|
216
216
|
fi
|
|
217
217
|
|
|
218
218
|
# Free the port for the new agent (kills the loading gate)
|
|
@@ -221,120 +221,138 @@ sleep 1
|
|
|
221
221
|
|
|
222
222
|
rm -f "${l}"
|
|
223
223
|
${process.env.NREMOTE_REGISTRY?`export NREMOTE_REGISTRY="${process.env.NREMOTE_REGISTRY}"
|
|
224
|
-
`:""}${a}"${i}" "${c}" ${
|
|
225
|
-
`,w=Ee.default.join(
|
|
226
|
-
LOG_DIR="$(dirname "${
|
|
224
|
+
`:""}${a}"${i}" "${c}" ${Ms()}
|
|
225
|
+
`,w=Ee.default.join(dt.default.tmpdir(),`${ee}-update.sh`);return(0,z.writeFileSync)(w,m,{mode:493}),{shellCmd:["sh",[w]],windowsVerbatim:!1}}async function Ws(e){let r=await Il();return r?Us(e,r)?Ol()?r:(Mt.warn("update skipped: lock held by another run"),null):(Mt.info(`update skipped: ${e} >= registry ${r}`),null):(Mt.warn("update skipped: registry unreachable"),null)}function Ml({currentVersion:e,latest:r,agentPid:n}){let{global:o,prefix:t}=Hs(),i=`${o} --prefer-online --no-audit --no-fund ${Ks()} ${t}`.trim(),s=js(),a=Oe(),c=Oo(),l=Xe(),f=`#!/bin/bash
|
|
226
|
+
LOG_DIR="$(dirname "${Ct}")"; mkdir -p "$LOG_DIR"
|
|
227
227
|
exec >>"$LOG_DIR/update-script.log" 2>&1
|
|
228
|
-
echo "=== $(date -u +%FT%TZ) docker update ${e} -> ${
|
|
228
|
+
echo "=== $(date -u +%FT%TZ) docker update ${e} -> ${r} ==="
|
|
229
229
|
|
|
230
230
|
attempt=0
|
|
231
|
-
while [ $attempt -lt ${
|
|
231
|
+
while [ $attempt -lt ${Ye.maxRetry} ]; do
|
|
232
232
|
attempt=$((attempt+1))
|
|
233
|
-
if ${s} install ${
|
|
234
|
-
if [ $attempt -eq ${
|
|
235
|
-
${s} install ${
|
|
233
|
+
if ${s} install ${ke} ${i}; then break; fi
|
|
234
|
+
if [ $attempt -eq ${Ye.maxRetry} ]; then
|
|
235
|
+
${s} install ${ke} ${i} --omit=optional || true
|
|
236
236
|
fi
|
|
237
237
|
sleep 3
|
|
238
238
|
done
|
|
239
239
|
|
|
240
240
|
NEWVER=$(${c}"${a}" "${l}" --version 2>/dev/null | head -1 | sed 's/\x1B[[0-9;?]*[a-zA-Z]//g' | tr -d '[:space:]')
|
|
241
|
-
if [ "$NEWVER" != "${
|
|
242
|
-
echo "Verify failed (got $NEWVER, want ${
|
|
243
|
-
${s} install ${
|
|
244
|
-
rm -f "${
|
|
241
|
+
if [ "$NEWVER" != "${r}" ]; then
|
|
242
|
+
echo "Verify failed (got $NEWVER, want ${r}), rolling back to ${e}..."
|
|
243
|
+
${s} install ${ee}@${e} ${i} || true
|
|
244
|
+
rm -f "${Ct}"
|
|
245
245
|
exit 0
|
|
246
246
|
fi
|
|
247
247
|
|
|
248
|
-
rm -f "${
|
|
249
|
-
kill -9 ${
|
|
250
|
-
`,
|
|
251
|
-
`).find(c=>c.includes(
|
|
252
|
-
`,"utf8");let s=!1,a=()=>{if(!s){s=!0;try{
|
|
253
|
-
`).slice(-5).join(" | ");
|
|
254
|
-
`).flatMap(
|
|
255
|
-
`).map(o=>+o.trim()).filter(Boolean);for(let r of new Set(t))Fr(r)}catch{}}function ce(){if(!No){No=!0;try{try{if(j.default.existsSync(Do)){let t=parseInt(j.default.readFileSync(Do,"utf8"));Number.isFinite(t)&&(rr=!0,Fr(t)),j.default.unlinkSync(Do)}}catch{}let e=qn("cloudflared");rr=!0,hn=null,e&&(Fr(e),Ye("cloudflared")),Yl(P)}finally{setTimeout(()=>{No=!1},2e3)}}}function ea(){if(!be)return!1;let e=qn("cloudflared");return!!e&&Ao(e)}function ta(){er=0,wn=!1,ir=null,yn=null,be=null,Qe=0,sr=0,gn=null,Ql()}var Xl=/^(utun|awdl|llw|anpi|bridge|gif|stf|ipsec|ap|tun|tap|vmnet|veth|docker)/i;function Xs(){let e=ht.default.networkInterfaces(),t=[];for(let[r,o]of Object.entries(e))if(o&&!Xl.test(r))for(let n of o)!n.internal&&n.family==="IPv4"&&t.push(`${r}:${n.address}`);return t.sort().join("|")}function ql(){nr||(Ur=Xs(),Mo=Date.now(),nr=setInterval(async()=>{try{let e=Date.now(),t=e-Mo;if(Mo=e,Bo||wn||!ir||yn==null)return;if(t>_l){if(ee.info(`Sleep/wake detected (gap=${t}ms)`),be){let s=!1;for(let a=0;a<3;a++){if((await fn(be)).ok){s=!0;break}a<2&&await new Promise(l=>setTimeout(l,3e3))}if(s)return;ee.info("tunnel unresponsive after sleep \u2192 restarting")}Nt("unreachable"),ce(),or(yn,"woke from sleep");return}let r=Xs(),o=r!==Ur;Ur=r;let n=qn("cloudflared"),i=!n||!Ao(n);if(!o&&!i){if(be&&vn&&Date.now()-vn>Vs&&e-sr>=qe.edgeProbeIntervalMs){sr=e;let s=await fn(be);if(s.ok)Qe=0;else if(++Qe>=qe.edgeProbeFailureThreshold){let a=await $l(qe.readyTimeoutMs);if(a>0){ee.info(`edge probe failing but cloudflared holds ${a} connection(s) \u2014 not restarting`),Qe=0;return}ee.warn(`tunnel unreachable but cloudflared alive \u2014 edge lost after ${Qe} probes (ready=${a??"unknown"}), restarting`),Qe=0,Nt("unreachable"),ce(),or(yn,"tunnel unreachable (edge lost)")}else ee.debug(`edge probe failed (${Qe}/${qe.edgeProbeFailureThreshold}) \u2014 ${s.dnsCode??s.httpStatus??"no response"}`)}return}if(o&&!i&&vn&&Date.now()-vn<Vs||(o&&ee.info("Network change detected"),i&&ee.warn("cloudflared not alive \u2014 watchdog"),Nt("unreachable"),await new Promise(s=>setTimeout(s,qe.networkRestoreDelayMs)),!await Js()))return;if(o&&!i&&be){let s=!1;for(let a=0;a<2;a++){if((await fn(be)).ok){s=!0;break}a===0&&await new Promise(l=>setTimeout(l,2e3))}if(s){ee.info("Tunnel survived network change, skip restart");return}}o&&!i&&ce(),or(yn,o?"network change":"liveness watchdog")}catch(e){ee.error(`network monitor tick failed: ${e?.message||e}`)}},qe.networkCheckIntervalMs))}function Ql(){nr&&(clearInterval(nr),nr=null),Ur=null}Ut();async function gt(e,t={}){let r=t.intervalMs??ut.intervalMs,o=t.timeoutMs??ut.timeoutMs,n=`${e}/api/health`,i=(()=>{try{return new URL(e).hostname}catch{return null}})(),s=Date.now(),a=0,c=[];await K({healthCheck:{running:!0,timeoutMs:o,startedAt:s,logs:[]}});let l=u=>{c.push(u);let f=c.length>ut.maxLogEntries?c.slice(-ut.maxLogEntries):c;K({healthCheck:{running:!0,timeoutMs:o,startedAt:s,logs:f}})};for(;Date.now()-s<o;){if(a++,un(),i){let f=await Io(i,ut.dnsTimeoutMs);if(!f.ok){let p=f.code==="ENOTFOUND"||f.code==="ETIMEOUT"||f.code==="ESERVFAIL",d=p?"connecting...":f.code;rn(`#${a} \u2192 ${d}`),l({attempt:a,status:d,elapsedMs:f.elapsedMs,ok:!1,waiting:p,time:Date.now()}),await new Promise(h=>setTimeout(h,r));continue}}let u=Date.now();try{let f=await H(n,{signal:AbortSignal.timeout(ut.fetchTimeoutMs)}),p=Date.now()-u;if(rn(`#${a} \u2192 ${f.status}`),l({attempt:a,status:String(f.status),elapsedMs:p,ok:f.ok,time:Date.now()}),f.ok)return await K({healthCheck:{running:!1,timeoutMs:0,startedAt:null,logs:[]}}),await new Promise(d=>setTimeout(d,ut.postReadyHoldMs)),!0}catch(f){let p=Date.now()-u,d=f.cause?.code||f.code||f.message,h=d==="ENOTFOUND",w=h?"connecting...":d;rn(`#${a} \u2192 ${w}`),l({attempt:a,status:w,elapsedMs:p,ok:!1,waiting:h,time:Date.now()})}await new Promise(f=>setTimeout(f,r))}return await K({healthCheck:{running:!1,timeoutMs:o,startedAt:s,logs:c}}),!1}var et=B("tunnel"),Ko=null,pa=null,da=0;async function Ft(e,t){if(et.debug(`updateTunnelUrl: key=${e?.slice(0,8)} url=${t}`),W().remoteEnabled===!1)return;if(Kt(e),t&&t===pa&&Date.now()-da<fs){et.debug("updateTunnelUrl: skipped (debounce, same URL)");return}Ko&&(Ko.cancelled=!0);let r={cancelled:!1};Ko=r;let o=Ji();Ar({config:he.urlSync,label:`urlSync ${t}`,log:n=>et.warn(n),ctx:r,task:async()=>{let n=await H(`${$}/api/session/update`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify((()=>{let s={apiKey:q(e),tunnelUrl:t,localIp:o?`${o}:${P}`:null};return{...s,...Rt(s)}})())});if(r.cancelled)return!0;if(n.ok)return pa=t,da=Date.now(),et.debug(`urlSync OK: pushed ${t} to server`),nu(t),!0;let i=await n.text().catch(()=>"");return et.warn(`urlSync HTTP ${n.status}: ${i.slice(0,200)}`),!1}}),t&&Hs(t)}var An=null,xn=null,Ho=!1,Wo=0;async function Go(e,t){let r={apiKey:e,online:t},o=await H(`${$}/api/session/heartbeat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...r,...Rt(r)})});return o.ok||et.warn(`heartbeat online=${t} HTTP ${o.status}`),o.ok}async function jo(){if(!(Ho||!xn)){Ho=!0;try{await Go(xn,!0),Wo=Date.now()}catch(e){et.debug(`heartbeat failed: ${e?.message||e}`)}finally{Ho=!1}}}function Kt(e){let t=q(e);if(t&&W().remoteEnabled!==!1){if(An&&xn===t){Date.now()-Wo>=Eo&&jo();return}Hr(),xn=t,jo(),An=setInterval(jo,Eo),An.unref?.()}}function Hr({offline:e=!1}={}){An&&(clearInterval(An),An=null);let t=xn;return xn=null,Wo=0,!e||!t?null:Go(t,!1).catch(r=>et.debug(`goodbye failed: ${r?.message||r}`))}function yt(e){let t=q(e);if(!t)return Promise.resolve(!1);Hr();let r=Go(t,!1).catch(o=>(et.debug(`offline mark failed: ${o?.message||o}`),!1));return Promise.race([r,new Promise(o=>setTimeout(()=>o(!1),Lr))])}var lr=null;async function nu(e){if(lr?.url===e)return;let t={url:e};lr=t,js();try{let r=await gt(e,{timeoutMs:ds});if(lr!==t)return;r&&Nt("healthy")}catch{}finally{lr===t&&(lr=null),Ws()}}var tt=B("server"),ya=fr.default.dirname((0,ga.fileURLToPath)(__importMetaUrl)),ru=fr.default.resolve(ya,"./server.cjs"),ma=fr.default.resolve(ya,"../../index.js");function jr(e){try{process.platform==="win32"?(0,ur.execSync)(`for /f "tokens=5" %a in ('netstat -aon ^| findstr :${e}') do taskkill /F /PID %a`,{stdio:"ignore",windowsHide:!0}):(0,ur.execSync)(`lsof -ti:${e} | xargs kill -9 2>/dev/null || true`,{stdio:"ignore"})}catch{}}function wt(e,t,r){let o=null,n=!1,i=!1,s=!0,a=0,c=null,l=()=>{s&&(jr(P),s=!1);let u=process.env.NODE_ENV==="development"&&Vo.default.existsSync(ma),f=u?ma:ru;Vo.default.existsSync(f)||(tt.error(`Server not found: ${f}`),process.exit(1));let p={...process.env,PORT:String(P)};u||delete p.NODE_ENV,o=(0,ur.spawn)(oi,[f],{cwd:fr.default.dirname(f),stdio:["ignore","inherit","inherit"],detached:!1,windowsHide:!0,env:ii(p)}),c&&clearTimeout(c),c=setTimeout(()=>{a=0},ls),o.on("exit",(d,h)=>{if(c&&(clearTimeout(c),c=null),n)return;if(i){i=!1,tt.info("Restarting server (requested)..."),setTimeout(()=>{l(),r?.()},500);return}tt.error(`Server exited unexpectedly (code: ${d}, signal: ${h})`),a++;let w=Re(he.server,a);tt.warn(`Restarting server in ${w}ms (fail#${a})`),t&&t(),setTimeout(()=>{l(),r?.()},w)}),o.on("error",d=>{tt.error(`Server error: ${d.message}`)}),e?.(o)};return l(),{getProcess:()=>o,shutdown:()=>{if(n=!0,!!o){try{o.kill("SIGTERM")}catch{}setTimeout(()=>{try{o&&o.kill("SIGKILL")}catch{}},2e3)}},restart:()=>{if(!o)return!1;i=!0;try{o.kill("SIGTERM")}catch{}return setTimeout(()=>{try{o&&i&&o.kill("SIGKILL")}catch{}},2e3),!0}}}function wa(e){return e?.restart?e.restart():!1}function nt({serverManager:e,tunnelProcess:t,exit:r=!0,code:o=0}={}){try{zn()}catch{}try{e?.shutdown?.()}catch{}try{t?.kill?.()}catch{}try{ce()}catch{}try{Dt()}catch{}try{jr(P)}catch{}try{ta()}catch{}try{Si()}catch{}try{Ye("agent")}catch{}try{Ye("cloudflared")}catch{}let n=Hr({offline:!0});if(r){let i=new Promise(a=>setTimeout(a,us)),s=n?Promise.race([n,new Promise(a=>setTimeout(a,Lr))]):null;Promise.all([i,s]).finally(()=>process.exit(o))}}var ha=!1;function vt(e,t){if(ha)return;ha=!0;let r=!1,o=n=>{r||(r=!0,tt.info(`Stopping 9Remote (${n})...`),nt({serverManager:e,tunnelProcess:t}),tt.info("Server stopped"))};if(process.on("SIGINT",()=>o("SIGINT")),process.on("SIGTERM",()=>o("SIGTERM")),process.on("SIGHUP",()=>o("SIGHUP")),process.platform==="win32"){process.on("SIGBREAK",()=>o("SIGBREAK"));try{import("readline").then(({createInterface:n})=>{n({input:process.stdin,output:process.stdout}).on("SIGINT",()=>o("SIGINT")),process.stdin.isTTY&&process.stdin.unref?.()}).catch(()=>{})}catch{}}process.on("uncaughtException",n=>{tt.error(`Uncaught exception: ${n?.stack||n?.message||n}`),o("uncaughtException"),setTimeout(()=>process.exit(1),vo)}),process.on("unhandledRejection",n=>{tt.error(`Unhandled rejection: ${n?.stack||n?.message||n}`),o("unhandledRejection"),setTimeout(()=>process.exit(1),vo)})}Ut();var Ht=B("tunnel");async function ou(e,t,r,o){let n=0;for(;;){n++;try{return await Ze(e,t,r)}catch(i){let s=Re(he.tunnelSpawn,n);Ht.warn(`spawn attempt ${n} failed: ${i?.message||i} \u2014 retry in ${s}ms`),o?.({attempt:n,delay:s}),await new Promise(a=>setTimeout(a,s))}}}function rt({onUrlUpdate:e,setTunnel:t,onRetry:r}){return async o=>{try{let n=await ou(o,e,null,r);ot(),t(n.child),await e(n.tunnelUrl),Ht.info(`Tunnel restarted: ${n.tunnelUrl}`)}catch(n){Ht.error(`Tunnel restart failed: ${n?.message||n}`)}}}var Wr=null;function ot(){Wr&&(Wr.cancelled=!0,Wr=null)}function Rn(e,{onUrlUpdate:t,onRestart:r,setActiveTunnel:o,onReady:n}){ot();let i={cancelled:!1};return Wr=i,Ar({config:he.tunnelRateLimit,task:async()=>{if(i.cancelled)return!0;if(ea())return Ht.info("bg-tunnel: a tunnel is already live \u2014 standing down"),!0;let s=await Ze(e,t,r);if(i.cancelled){try{ce()}catch{}return!0}try{o?.(s.child),await t?.(s.tunnelUrl),await n?.(s),Ht.info(`bg tunnel up: ${s.tunnelUrl}`)}catch(a){Ht.error(`bg tunnel post-spawn failed: ${a?.message||a}`)}return!0},label:"bg-tunnel",log:s=>Ht.info(s),ctx:i}),i}var Zo=x(Ha(),1);var du=B("session");function mu(e,t="\u{1F4F1} Scan QR to connect:"){console.log(de.orange(`
|
|
256
|
-
${
|
|
257
|
-
`+
|
|
258
|
-
\u274C Failed to create one-time key \u2014 generate a new one from the menu`)),console.log(
|
|
248
|
+
rm -f "${Ct}"
|
|
249
|
+
kill -9 ${n} 2>/dev/null
|
|
250
|
+
`,u=Ee.default.join(dt.default.tmpdir(),`${ee}-update-docker.sh`);return(0,z.writeFileSync)(u,f,{mode:493}),u}async function Cl(e){let r=await Ws(e);if(!r)return!1;Mt.info(`update go (docker): ${e} -> ${r}`);let n=Ml({currentVersion:e,latest:r,agentPid:process.pid});return(0,un.spawn)("sh",[n],{detached:!0,stdio:"ignore"}).unref(),!0}async function Gs(){let e=Bs();if(!e)return Mt.warn("update skipped: no version (source run?)"),!1;if(Ns)return Cl(e);let r=$l();if(r)return Mt.warn(`update skipped: restricted env (${r})`),!1;let n=await Ws(e);if(!n)return!1;Mt.info(`update go: ${e} -> ${n}`);let{shellCmd:o,windowsVerbatim:t}=Ll({currentVersion:e,latest:n,agentPid:process.pid});return(0,un.spawn)(o[0],o[1],{detached:!0,stdio:"ignore",windowsHide:!0,windowsVerbatimArguments:t}).unref(),setTimeout(()=>process.exit(0),500),!0}var fr=require("child_process"),pr=A(require("path"),1),Xo=A(require("fs"),1),xa=require("url");var G=A(require("fs"),1),ht=A(require("path"),1),Ho=A(require("https"),1),gt=A(require("os"),1),ra=A(require("net"),1),ze=require("child_process");var Vs=A(require("dns"),1),Ys=require("child_process");var Nl=2e3,Dl=5e3,_o=new Vs.default.promises.Resolver;_o.setServers(["1.1.1.1","1.0.0.1","8.8.8.8"]);function fn(){process.platform==="win32"&&(0,Ys.execFile)("ipconfig",["/flushdns"],{windowsHide:!0},()=>{})}async function Lo(e,r=Nl){let n=Date.now();try{let o=async()=>{let[i,s]=await Promise.allSettled([_o.resolve4(e),_o.resolve6(e)]);if(i.status==="fulfilled"&&i.value?.length)return i.value;if(s.status==="fulfilled"&&s.value?.length)return s.value;throw i.reason||s.reason||Object.assign(new Error("DNS query failed"),{code:"ENOTFOUND"})};return{ok:!0,addrs:await Promise.race([o(),new Promise((i,s)=>setTimeout(()=>s(Object.assign(new Error("DNS timeout"),{code:"ETIMEOUT"})),r))]),elapsedMs:Date.now()-n}}catch(o){return{ok:!1,code:o.code||o.message,elapsedMs:Date.now()-n}}}async function pn(e,{flushDns:r=!1}={}){let n=Date.now(),o=null;try{o=new URL(e).hostname}catch{}if(r&&fn(),o){let t=await Lo(o);if(!t.ok)return fn(),{ok:!1,dnsCode:t.code,elapsedMs:Date.now()-n}}try{let t=await W(`${e}/api/health`,{signal:AbortSignal.timeout(Dl)});return{ok:t.ok,httpStatus:t.status,elapsedMs:Date.now()-n}}catch(t){return{ok:!1,dnsCode:t.cause?.code||t.code||t.message,elapsedMs:Date.now()-n}}}var Bl=F("tunnel"),zn=null,Zn=null,dn=null,Nt=null,mt=0,Co=!1;async function No(e){try{let r=await sn();await fetch(`http://${r}:${$}/api/ui/state`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}catch{}}var Mo=!1;async function qs(){if(!(!Zn||Co||Mo)){Mo=!0;try{await Ul()}finally{Mo=!1}}}async function Ul(){let e=await pn(Zn),r=e.ok?"healthy":"unreachable";if(r===dn){Nt=null,mt=0;return}if(r!==Nt){Nt=r,mt=1;return}mt++,!(mt<bs)&&(Bl.info(`${dn??"init"} \u2192 ${r}${e.ok?"":` (http=${e.httpStatus??"-"} dns=${e.dnsCode??"-"})`}`),dn=r,Nt=null,mt=0,await No({tunnelHealth:{status:r,checkedAt:Date.now()}}))}function Xs(e){if(!e)return er();e!==Zn&&(Zn=e,dn=null,Nt=null,mt=0,fn(),zn||(zn=setInterval(qs,yi.checkIntervalMs)),qs())}var Js=Xs,mn=Xs;function Qs(){Co=!0}function zs(){Co=!1}function Dt(e){dn=e,Nt=null,mt=0,No({tunnelHealth:{status:e,checkedAt:Date.now()}})}function er(){zn&&(clearInterval(zn),zn=null),Zn=null,dn=null,Nt=null,mt=0,No({tunnelHealth:{status:"unknown",checkedAt:null}})}var ne=F("tunnel"),Je={networkCheckIntervalMs:5e3,networkRestoreDelayMs:2500,internetCheckTimeoutMs:3e3,internetCheckHost:"1.1.1.1",internetCheckPort:443,edgeProbeIntervalMs:15e3,edgeProbeFailureThreshold:3,readyTimeoutMs:1500},Fl=[20241,20242,20243,20244,20245],yn=null;async function Kl(e,r){try{let o=await(await fetch(`http://localhost:${e}/ready`,{signal:AbortSignal.timeout(r)})).json();return typeof o?.readyConnections=="number"?o:null}catch{return null}}async function Zs(e,r){let n=await Kl(e,r);if(!n)return null;let o=await jl(e,r);return o&&Se&&!Se.includes(o)?null:n.readyConnections}async function Hl(e){if(yn!==null){let o=await Zs(yn,e);if(o!==null)return o;yn=null}let n=(await Promise.all(Fl.map(async o=>({port:o,conns:await Zs(o,e)})))).find(o=>o.conns!==null);return n?(yn=n.port,n.conns):null}async function jl(e,r){try{return(await(await fetch(`http://localhost:${e}/quicktunnel`,{signal:AbortSignal.timeout(r)})).json())?.hostname||null}catch{return null}}var Wl=3e4,Do=0,rr=null,Fr=null,wn=null,sr=null,vn=!1,tr=0,Ko=!1,Se=null,bn=0,Bo=0,Uo=!1,ar=0,Qe=0,ea=3e4,Gl=5e3,nr=ht.default.join(gt.default.homedir(),".9remote","bin"),ta="cloudflared",En=gt.default.platform()==="win32",Vl=En?`${ta}.exe`:ta,hn=ht.default.join(nr,Vl),Fo=ht.default.join(gt.default.homedir(),".9remote","cloudflared.pid"),or=!1,gn=null,Yl="2026.6.1",oa=`https://github.com/cloudflare/cloudflared/releases/download/${Yl}`;function ia(){return new Promise(e=>{let r=new ra.default.Socket,n=!1,o=t=>{if(!n){n=!0;try{r.destroy()}catch{}e(t)}};r.setTimeout(Je.internetCheckTimeoutMs),r.once("connect",()=>o(!0)),r.once("timeout",()=>o(!1)),r.once("error",()=>o(!1));try{r.connect(Je.internetCheckPort,Je.internetCheckHost)}catch{o(!1)}})}async function ql(){Ko=!0;try{let e=0;for(;;){if(e++,await ia())return;await new Promise(r=>setTimeout(r,Re(ge.internet,e)))}}finally{Ko=!1}}async function ir(e,r){if(!sr){ne.warn("No restartCallback registered \u2014 skip");return}if(!vn&&!(Date.now()-Bo<Gl)){Bo=Date.now(),vn=!0;try{await ql();let n=Re(ge.tunnelRestart,tr+1);await new Promise(o=>setTimeout(o,n)),await sr(e),tr=0,Bo=0}catch(n){tr++,ne.error(`restart failed (#${tr}): ${n?.message||n}`),setImmediate(()=>{vn=!1,ir(e,"retry after fail")});return}finally{vn=!1}}}var Xl={darwin:{x64:"cloudflared-darwin-amd64.tgz",arm64:"cloudflared-darwin-arm64.tgz"},win32:{x64:"cloudflared-windows-amd64.exe"},linux:{x64:"cloudflared-linux-amd64",arm64:"cloudflared-linux-arm64"}};function Jl(){let e=gt.default.platform(),r=gt.default.arch(),n=Xl[e];if(!n)throw new Error(`Unsupported platform: ${e}`);let o=n[r];if(!o)throw new Error(`Unsupported architecture: ${r} for platform ${e}`);return`${oa}/${o}`}var Ql=150;async function sa(e,r,n){return new Promise((o,t)=>{let i=G.default.createWriteStream(r);Ho.default.get(e,s=>{if([301,302].includes(s.statusCode)){i.close(),G.default.unlinkSync(r),sa(s.headers.location,r,n).then(o).catch(t);return}if(s.statusCode!==200){i.close(),G.default.unlinkSync(r),t(new Error(`Download failed with status ${s.statusCode}`));return}let a=parseInt(s.headers["content-length"]||"0",10),c=0,l=0,f=-1;s.on("data",u=>{if(c+=u.length,!n||!a)return;let p=Date.now(),d=Math.min(100,Math.floor(c/a*100));d!==f&&p-l>=Ql&&(l=p,f=d,n(d))}),s.pipe(i),i.on("finish",()=>{n&&a&&n(100),i.close(()=>o(r))}),i.on("error",u=>{i.close(),G.default.unlinkSync(r),t(u)})}).on("error",s=>{i.close(),G.default.existsSync(r)&&G.default.unlinkSync(r),t(s)})})}async function cr(e){if(G.default.existsSync(nr)||G.default.mkdirSync(nr,{recursive:!0}),G.default.existsSync(hn))return En||G.default.chmodSync(hn,"755"),hn;let r=Jl(),n=r.endsWith(".tgz"),o=n?ht.default.join(nr,"cloudflared.tgz"):hn;try{return e?.({phase:"download",percent:0}),await sa(r,o,t=>{e?.({phase:"download",percent:t})}),await zl(r,o),n&&(e?.({phase:"extract"}),(0,ze.execSync)(`tar -xzf "${o}" -C "${nr}"`,{stdio:"pipe",windowsHide:!0}),G.default.unlinkSync(o)),En||G.default.chmodSync(hn,"755"),hn}catch(t){try{G.default.existsSync(o)&&G.default.unlinkSync(o)}catch{}throw console.error("Failed to download cloudflared:",t.message),t}}function aa(e){return new Promise((r,n)=>{Ho.default.get(e,o=>{if([301,302].includes(o.statusCode))return aa(o.headers.location).then(r).catch(n);if(o.statusCode!==200)return n(new Error(`HTTP ${o.statusCode}`));let t="";o.on("data",i=>t+=i),o.on("end",()=>r(t))}).on("error",n)})}async function zl(e,r){let n=ht.default.basename(e),o;try{o=await aa(`${oa}/sha256sum.txt`)}catch(c){ne.warn(`sha256 manifest unavailable (${c.message}), skipping verify`);return}let t=o.split(`
|
|
251
|
+
`).find(c=>c.includes(n));if(!t){ne.warn(`No sha256 entry for ${n}, skipping verify`);return}let i=t.trim().split(/\s+/)[0],{createHash:s}=await import("crypto"),a=s("sha256").update(G.default.readFileSync(r)).digest("hex");if(a!==i)throw new Error(`Integrity check failed: SHA256 mismatch (expected ${i}, got ${a})`)}function Zl(e){let r=/https:\/\/([a-z0-9-]+)\.trycloudflare\.com/gi,n=[];for(let o of e.matchAll(r))o[1]!=="api"&&n.push(`https://${o[1]}.trycloudflare.com`);return n.length?n[n.length-1]:null}async function Ze(e,r=null,n=null){let o=await cr();ru(o),n&&(sr=n),wn=e;let t=G.default.mkdtempSync(ht.default.join(gt.default.tmpdir(),"9remote-quick-")),i=ht.default.join(t,"config.yml");G.default.writeFileSync(i,`# quick-tunnel
|
|
252
|
+
`,"utf8");let s=!1,a=()=>{if(!s){s=!0;try{G.default.rmSync(t,{recursive:!0,force:!0})}catch{}}},c=(0,ze.spawn)(o,["tunnel","--url",`http://localhost:${e}`,"--config",i,"--no-autoupdate","--protocol","http2"],{detached:!1,windowsHide:!0,stdio:["ignore","pipe","pipe"]});return Be("cloudflared",c.pid),gn=c.pid,or=!1,new Promise((l,f)=>{let u=!1,p=null,d="",m=setTimeout(()=>{if(!u){u=!0,a(),gn===c.pid&&(gn=null);try{c.kill("SIGKILL")}catch{}qe("cloudflared"),f(new Error("Quick tunnel timed out after 90s"))}},9e4),w=v=>{let P=v.toString();d+=P,d.length>4096&&(d=d.slice(-4096));let E=Zl(P);if(E){if(!u){u=!0,p=E,Se=E,bn=Date.now(),Qe=0,ar=0,yn=null,clearTimeout(m),a(),su(),ne.info(`tunnel ready: ${E}`),l({child:c,tunnelUrl:E});return}E!==p&&(ne.info(`URL rotated: ${E}`),p=E,Se=E,bn=Date.now(),Qe=0,ar=0,r?.(E))}};c.stdout.on("data",w),c.stderr.on("data",w),c.on("error",v=>{u||(u=!0,clearTimeout(m),a(),f(v))}),c.on("exit",(v,P)=>{a();let E=gn!==c.pid,x=or||E;if(ne.info(`cloudflared exited (intentional=${or} superseded=${E})`),x||Dt("unreachable"),!u){u=!0,clearTimeout(m);let R=d.trim().split(`
|
|
253
|
+
`).slice(-5).join(" | ");gn=null,f(new Error(`cloudflared exited (code=${v}, signal=${P}) output: ${R||"(empty)"}`));return}x||ir(e,`quick tunnel exit code ${v}`)})})}function Kr(e){if(En)try{(0,ze.execSync)(`taskkill /PID ${e} /T /F`,{windowsHide:!0,stdio:"ignore"})}catch{}else try{process.kill(e,"SIGKILL")}catch{}}function eu(e){return e?e.split(`
|
|
254
|
+
`).flatMap(r=>{let n=r.match(/^\s*(\d+)\s+(.+)$/);return n?[{pid:Number(n[1]),args:n[2].trim()}]:[]}):[]}function tu(e,r){return Array.isArray(e)?e.filter(n=>{if(!n?.args||typeof n.pid!="number")return!1;let o=n.args.split(/\s+/);return o.includes(r)&&o.includes("tunnel")}).map(n=>n.pid):[]}function nu(e){try{let r=En?(0,ze.execSync)(`powershell -NoProfile -Command "Get-CimInstance Win32_Process -Filter 'Name=\\'cloudflared.exe\\'' | ForEach-Object { \\"$($_.ProcessId) $($_.CommandLine)\\"" }"`,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"]}):(0,ze.execSync)("ps -eo pid=,args=",{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return tu(eu(r),e)}catch{return[]}}function ru(e){let r=nu(e);for(let n of r)n!==process.pid&&(ne.info(`killing leftover cloudflared pid=${n}`),Kr(n));return r}function ou(e){try{let r=[];if(En){let n=`Get-NetTCPConnection -LocalPort ${e} -State Established -ErrorAction SilentlyContinue | Where-Object { (Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name -eq 'cloudflared' } | Select-Object -ExpandProperty OwningProcess -Unique`;r=(0,ze.execSync)(`powershell -NoProfile -Command "${n}"`,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"]}).split(/\r?\n/).map(t=>+t.trim()).filter(Boolean)}else r=(0,ze.execSync)(`lsof -nP -iTCP:${e} -sTCP:ESTABLISHED 2>/dev/null | awk '/cloudflar/ {print $2}' | sort -u`,{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).split(`
|
|
255
|
+
`).map(o=>+o.trim()).filter(Boolean);for(let n of new Set(r))Kr(n)}catch{}}function le(){if(!Uo){Uo=!0;try{try{if(G.default.existsSync(Fo)){let r=parseInt(G.default.readFileSync(Fo,"utf8"));Number.isFinite(r)&&(or=!0,Kr(r)),G.default.unlinkSync(Fo)}}catch{}let e=Jn("cloudflared");or=!0,gn=null,e&&(Kr(e),qe("cloudflared")),ou($)}finally{setTimeout(()=>{Uo=!1},2e3)}}}function ca(){if(!Se)return!1;let e=Jn("cloudflared");return!!e&&Ro(e)}function la(){tr=0,vn=!1,sr=null,wn=null,Se=null,Qe=0,ar=0,yn=null,au()}var iu=/^(utun|awdl|llw|anpi|bridge|gif|stf|ipsec|ap|tun|tap|vmnet|veth|docker)/i;function na(){let e=gt.default.networkInterfaces(),r=[];for(let[n,o]of Object.entries(e))if(o&&!iu.test(n))for(let t of o)!t.internal&&t.family==="IPv4"&&r.push(`${n}:${t.address}`);return r.sort().join("|")}function su(){rr||(Fr=na(),Do=Date.now(),rr=setInterval(async()=>{try{let e=Date.now(),r=e-Do;if(Do=e,Ko||vn||!sr||wn==null)return;if(r>Wl){if(ne.info(`Sleep/wake detected (gap=${r}ms)`),Se){let s=!1;for(let a=0;a<3;a++){if((await pn(Se)).ok){s=!0;break}a<2&&await new Promise(l=>setTimeout(l,3e3))}if(s)return;ne.info("tunnel unresponsive after sleep \u2192 restarting")}Dt("unreachable"),le(),ir(wn,"woke from sleep");return}let n=na(),o=n!==Fr;Fr=n;let t=Jn("cloudflared"),i=!t||!Ro(t);if(!o&&!i){if(Se&&bn&&Date.now()-bn>ea&&e-ar>=Je.edgeProbeIntervalMs){ar=e;let s=await pn(Se);if(s.ok)Qe=0;else if(++Qe>=Je.edgeProbeFailureThreshold){let a=await Hl(Je.readyTimeoutMs);if(a>0){ne.info(`edge probe failing but cloudflared holds ${a} connection(s) \u2014 not restarting`),Qe=0;return}ne.warn(`tunnel unreachable but cloudflared alive \u2014 edge lost after ${Qe} probes (ready=${a??"unknown"}), restarting`),Qe=0,Dt("unreachable"),le(),ir(wn,"tunnel unreachable (edge lost)")}else ne.debug(`edge probe failed (${Qe}/${Je.edgeProbeFailureThreshold}) \u2014 ${s.dnsCode??s.httpStatus??"no response"}`)}return}if(o&&!i&&bn&&Date.now()-bn<ea||(o&&ne.info("Network change detected"),i&&ne.warn("cloudflared not alive \u2014 watchdog"),Dt("unreachable"),await new Promise(s=>setTimeout(s,Je.networkRestoreDelayMs)),!await ia()))return;if(o&&!i&&Se){let s=!1;for(let a=0;a<2;a++){if((await pn(Se)).ok){s=!0;break}a===0&&await new Promise(l=>setTimeout(l,2e3))}if(s){ne.info("Tunnel survived network change, skip restart");return}}o&&!i&&le(),ir(wn,o?"network change":"liveness watchdog")}catch(e){ne.error(`network monitor tick failed: ${e?.message||e}`)}},Je.networkCheckIntervalMs))}function au(){rr&&(clearInterval(rr),rr=null),Fr=null}Ft();async function yt(e,r={}){let n=r.intervalMs??ft.intervalMs,o=r.timeoutMs??ft.timeoutMs,t=`${e}/api/health`,i=(()=>{try{return new URL(e).hostname}catch{return null}})(),s=Date.now(),a=0,c=[];await j({healthCheck:{running:!0,timeoutMs:o,startedAt:s,logs:[]}});let l=f=>{c.push(f);let u=c.length>ft.maxLogEntries?c.slice(-ft.maxLogEntries):c;j({healthCheck:{running:!0,timeoutMs:o,startedAt:s,logs:u}})};for(;Date.now()-s<o;){if(a++,fn(),i){let u=await Lo(i,ft.dnsTimeoutMs);if(!u.ok){let p=u.code==="ENOTFOUND"||u.code==="ETIMEOUT"||u.code==="ESERVFAIL",d=p?"connecting...":u.code;on(`#${a} \u2192 ${d}`),l({attempt:a,status:d,elapsedMs:u.elapsedMs,ok:!1,waiting:p,time:Date.now()}),await new Promise(m=>setTimeout(m,n));continue}}let f=Date.now();try{let u=await W(t,{signal:AbortSignal.timeout(ft.fetchTimeoutMs)}),p=Date.now()-f;if(on(`#${a} \u2192 ${u.status}`),l({attempt:a,status:String(u.status),elapsedMs:p,ok:u.ok,time:Date.now()}),u.ok)return await j({healthCheck:{running:!1,timeoutMs:0,startedAt:null,logs:[]}}),await new Promise(d=>setTimeout(d,ft.postReadyHoldMs)),!0}catch(u){let p=Date.now()-f,d=u.cause?.code||u.code||u.message,m=d==="ENOTFOUND",w=m?"connecting...":d;on(`#${a} \u2192 ${w}`),l({attempt:a,status:w,elapsedMs:p,ok:!1,waiting:m,time:Date.now()})}await new Promise(u=>setTimeout(u,n))}return await j({healthCheck:{running:!1,timeoutMs:o,startedAt:s,logs:c}}),!1}var tt=F("tunnel"),Wo=null,ba=null,Ea=0;async function Kt(e,r){if(tt.debug(`updateTunnelUrl: key=${e?.slice(0,8)} url=${r}`),V().remoteEnabled===!1)return;if(Ht(e),r&&r===ba&&Date.now()-Ea<vs){tt.debug("updateTunnelUrl: skipped (debounce, same URL)");return}Wo&&(Wo.cancelled=!0);let n={cancelled:!1};Wo=n;let o=is();kr({config:ge.urlSync,label:`urlSync ${r}`,log:t=>tt.warn(t),ctx:n,task:async()=>{let t=await W(`${I}/api/session/update`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify((()=>{let s={apiKey:Q(e),tunnelUrl:r,localIp:o?`${o}:${$}`:null};return{...s,...Rt(s)}})())});if(n.cancelled)return!0;if(t.ok)return ba=r,Ea=Date.now(),tt.debug(`urlSync OK: pushed ${r} to server`),du(r),!0;let i=await t.text().catch(()=>"");return tt.warn(`urlSync HTTP ${t.status}: ${i.slice(0,200)}`),!1}}),r&&Js(r)}var An=null,kn=null,Go=!1,Yo=0;async function qo(e,r){let n={apiKey:e,online:r},o=await W(`${I}/api/session/heartbeat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...n,...Rt(n)})});return o.ok||tt.warn(`heartbeat online=${r} HTTP ${o.status}`),o.ok}async function Vo(){if(!(Go||!kn)){Go=!0;try{await qo(kn,!0),Yo=Date.now()}catch(e){tt.debug(`heartbeat failed: ${e?.message||e}`)}finally{Go=!1}}}function Ht(e){let r=Q(e);if(r&&V().remoteEnabled!==!1){if(An&&kn===r){Date.now()-Yo>=To&&Vo();return}jr(),kn=r,Vo(),An=setInterval(Vo,To),An.unref?.()}}function jr({offline:e=!1}={}){An&&(clearInterval(An),An=null);let r=kn;return kn=null,Yo=0,!e||!r?null:qo(r,!1).catch(n=>tt.debug(`goodbye failed: ${n?.message||n}`))}function wt(e){let r=Q(e);if(!r)return Promise.resolve(!1);jr();let n=qo(r,!1).catch(o=>(tt.debug(`offline mark failed: ${o?.message||o}`),!1));return Promise.race([n,new Promise(o=>setTimeout(()=>o(!1),Lr))])}var ur=null;async function du(e){if(ur?.url===e)return;let r={url:e};ur=r,Qs();try{let n=await yt(e,{timeoutMs:Es});if(ur!==r)return;n&&Dt("healthy")}catch{}finally{ur===r&&(ur=null),zs()}}var nt=F("server"),Aa=pr.default.dirname((0,xa.fileURLToPath)(__importMetaUrl)),mu=pr.default.resolve(Aa,"./server.cjs"),Sa=pr.default.resolve(Aa,"../../index.js");function Wr(e){try{process.platform==="win32"?(0,fr.execSync)(`for /f "tokens=5" %a in ('netstat -aon ^| findstr :${e}') do taskkill /F /PID %a`,{stdio:"ignore",windowsHide:!0}):(0,fr.execSync)(`lsof -ti:${e} | xargs kill -9 2>/dev/null || true`,{stdio:"ignore"})}catch{}}function vt(e,r,n){let o=null,t=!1,i=!1,s=!0,a=0,c=null,l=()=>{s&&(Wr($),s=!1);let f=process.env.NODE_ENV==="development"&&Xo.default.existsSync(Sa),u=f?Sa:mu;Xo.default.existsSync(u)||(nt.error(`Server not found: ${u}`),process.exit(1));let p={...process.env,PORT:String($)};f||delete p.NODE_ENV,o=(0,fr.spawn)(pi,[u],{cwd:pr.default.dirname(u),stdio:["ignore","inherit","inherit"],detached:!1,windowsHide:!0,env:di(p)}),c&&clearTimeout(c),c=setTimeout(()=>{a=0},ys),o.on("exit",(d,m)=>{if(c&&(clearTimeout(c),c=null),t)return;if(i){i=!1,nt.info("Restarting server (requested)..."),setTimeout(()=>{l(),n?.()},500);return}nt.error(`Server exited unexpectedly (code: ${d}, signal: ${m})`),a++;let w=Re(ge.server,a);nt.warn(`Restarting server in ${w}ms (fail#${a})`),r&&r(),setTimeout(()=>{l(),n?.()},w)}),o.on("error",d=>{nt.error(`Server error: ${d.message}`)}),e?.(o)};return l(),{getProcess:()=>o,shutdown:()=>{if(t=!0,!!o){try{o.kill("SIGTERM")}catch{}setTimeout(()=>{try{o&&o.kill("SIGKILL")}catch{}},2e3)}},restart:()=>{if(!o)return!1;i=!0;try{o.kill("SIGTERM")}catch{}return setTimeout(()=>{try{o&&i&&o.kill("SIGKILL")}catch{}},2e3),!0}}}function ka(e){return e?.restart?e.restart():!1}function rt({serverManager:e,tunnelProcess:r,exit:n=!0,code:o=0}={}){try{er()}catch{}try{e?.shutdown?.()}catch{}try{r?.kill?.()}catch{}try{le()}catch{}try{Bt()}catch{}try{Wr($)}catch{}try{la()}catch{}try{Oi()}catch{}try{qe("agent")}catch{}try{qe("cloudflared")}catch{}let t=jr({offline:!0});if(n){let i=new Promise(a=>setTimeout(a,ws)),s=t?Promise.race([t,new Promise(a=>setTimeout(a,Lr))]):null;Promise.all([i,s]).finally(()=>process.exit(o))}}var Ta=!1;function bt(e,r){if(Ta)return;Ta=!0;let n=!1,o=t=>{n||(n=!0,nt.info(`Stopping 9Remote (${t})...`),rt({serverManager:e,tunnelProcess:r}),nt.info("Server stopped"))};if(process.on("SIGINT",()=>o("SIGINT")),process.on("SIGTERM",()=>o("SIGTERM")),process.on("SIGHUP",()=>o("SIGHUP")),process.platform==="win32"){process.on("SIGBREAK",()=>o("SIGBREAK"));try{import("readline").then(({createInterface:t})=>{t({input:process.stdin,output:process.stdout}).on("SIGINT",()=>o("SIGINT")),process.stdin.isTTY&&process.stdin.unref?.()}).catch(()=>{})}catch{}}process.on("uncaughtException",t=>{nt.error(`Uncaught exception: ${t?.stack||t?.message||t}`),o("uncaughtException"),setTimeout(()=>process.exit(1),So)}),process.on("unhandledRejection",t=>{nt.error(`Unhandled rejection: ${t?.stack||t?.message||t}`),o("unhandledRejection"),setTimeout(()=>process.exit(1),So)})}Ft();var jt=F("tunnel");async function hu(e,r,n,o){let t=0;for(;;){t++;try{return await Ze(e,r,n)}catch(i){let s=Re(ge.tunnelSpawn,t);jt.warn(`spawn attempt ${t} failed: ${i?.message||i} \u2014 retry in ${s}ms`),o?.({attempt:t,delay:s}),await new Promise(a=>setTimeout(a,s))}}}function ot({onUrlUpdate:e,setTunnel:r,onRetry:n}){return async o=>{try{let t=await hu(o,e,null,n);it(),r(t.child),await e(t.tunnelUrl),jt.info(`Tunnel restarted: ${t.tunnelUrl}`)}catch(t){jt.error(`Tunnel restart failed: ${t?.message||t}`)}}}var Gr=null;function it(){Gr&&(Gr.cancelled=!0,Gr=null)}function Rn(e,{onUrlUpdate:r,onRestart:n,setActiveTunnel:o,onReady:t}){it();let i={cancelled:!1};return Gr=i,kr({config:ge.tunnelRateLimit,task:async()=>{if(i.cancelled)return!0;if(ca())return jt.info("bg-tunnel: a tunnel is already live \u2014 standing down"),!0;let s=await Ze(e,r,n);if(i.cancelled){try{le()}catch{}return!0}try{o?.(s.child),await r?.(s.tunnelUrl),await t?.(s),jt.info(`bg tunnel up: ${s.tunnelUrl}`)}catch(a){jt.error(`bg tunnel post-spawn failed: ${a?.message||a}`)}return!0},label:"bg-tunnel",log:s=>jt.info(s),ctx:i}),i}var ti=A(Ja(),1);var xu=F("session");function Au(e,r="\u{1F4F1} Scan QR to connect:"){console.log(me.orange(`
|
|
256
|
+
${r}`)),ti.default.generate(e,{small:!0,type:"terminal",margin:0},n=>{console.log(n.trim())})}function ku(e){return new Promise(r=>{ti.default.generate(e,{small:!0,type:"terminal",margin:0},n=>{r(me.orangeDim("\u{1F4F1} Scan QR to connect:")+`
|
|
257
|
+
`+n.trim())})})}async function Xr(e,r){let n=await Wn(e,I),o=Math.min(Ve.headerWidth,process.stdout.columns||55);if(!n){xu.warn("Temp key creation failed \u2014 showing UI without a QR"),await C(O.READY,{tunnelUrl:r,permanentKey:e,workerUrl:I}),console.log(h.red(`
|
|
258
|
+
\u274C Failed to create one-time key \u2014 generate a new one from the menu`)),console.log(me.orange("\u2550".repeat(o))),console.log(h.white("App URL".padEnd(14))+h.gray(`${I}/login`)),console.log(h.white("Key".padEnd(14))+h.gray(e)),console.log(me.orange("\u2550".repeat(o)));return}let t=Gn(I,n);await C(O.READY,{tunnelUrl:r,oneTimeKey:n.oneTimeKey,oneTimeKeyExpiresAt:n.expiresAt,permanentKey:e,qrUrl:t,workerUrl:I}),Au(t),console.log(h.gray(`
|
|
259
259
|
QR will expire in 10 minutes (one-time use)
|
|
260
|
-
`)),console.log(
|
|
260
|
+
`)),console.log(me.orange("\u2550".repeat(o))),console.log(h.white("App URL".padEnd(14))+h.gray(`${I}/login`)),console.log(h.white("One-Time Key".padEnd(14))+me.orange.bold(n.oneTimeKey)),console.log(h.white("Key".padEnd(14))+h.gray(e)),console.log(me.orange("\u2550".repeat(o)))}async function Pn(e,r,n,o=""){let t=Math.min(Ve.headerWidth,process.stdout.columns||Ve.headerWidth),i=[];return e&&n?(i.push(await ku(n)),i.push(h.gray(`
|
|
261
261
|
QR expires in 30 minutes (one-time use)
|
|
262
|
-
`))):i.push(
|
|
262
|
+
`))):i.push(h.gray(`
|
|
263
263
|
(One-time key used \u2014 generate a new one from menu)
|
|
264
|
-
`)),i.push(
|
|
265
|
-
`)}var
|
|
266
|
-
\u{1F310} UI already served at http://localhost:${
|
|
267
|
-
\u{1F310} UI ready at ${
|
|
268
|
-
\u{1F310} 9Remote already running at http://localhost:${
|
|
269
|
-
\u274C Failed to launch background: ${c.message}`)),process.exit(1)}let i=Date.now()
|
|
270
|
-
\u274C Background server failed to start.`)),console.log(
|
|
271
|
-
`)),process.exit(1)),
|
|
272
|
-
\u{1F310} 9Remote running at ${e}${a}`)),console.log(
|
|
273
|
-
`)),await new Promise(c=>setTimeout(c,ie.bgSpawnFlushMs)),process.exit(0)}var
|
|
274
|
-
\u26A0 ${
|
|
275
|
-
`))),await new Promise(g=>setTimeout(g,ie.trayReadyMs)),
|
|
276
|
-
\u{1F310} Opening ${
|
|
277
|
-
`))}else if(d==="keys")await
|
|
264
|
+
`)),i.push(me.orange("\u2550".repeat(t)),h.white("App URL".padEnd(14))+h.gray(`${I}/login`)),hi.showTunnelUrlInMenu&&i.push(h.white("Tunnel".padEnd(14))+(o?h.cyan(o):h.gray("\u2014"))),i.push(h.white("One-Time Key".padEnd(14))+(e?me.orange.bold(e)+h.dim(" (expires in 30m)"):h.gray("\u2014")),h.white("Key".padEnd(14))+h.dim(r),me.orange("\u2550".repeat(t))),i.join(`
|
|
265
|
+
`)}var we=F("cmd");function Tt(e,r,n,o){let t=!1;setInterval(async()=>{if(t)return;let i=Ii();if(i){t=!0;try{if(i==="stop-tunnel")await Qa(e,r,n);else if(i==="restart-tunnel")await Qa(e,r,n),await za(e,r,n);else if(i==="start-tunnel"){if(await za(e,r,n)==="alreadyRunning"){t=!1;return}}else if(i==="regenerate-key")await Ru();else if(i==="shutdown")Pu(e,r);else if(i==="update"){let s=await Gs();we.info(`cmd update -> ${s?"started":"SKIPPED (see reasons above)"}`)}else i==="restart"&&ka(o?.())}catch(s){we.error(`cmd "${i}" failed: ${s?.message||s}`)}finally{t=!1}}},$e.cmdMs)}async function Qa(e,r,n){it(),er();let o=e();o&&(o.kill(),r(null),we.info("Tunnel stopped")),n&&await wt(n),await C(O.STOPPED,{tunnelUrl:"",oneTimeKey:"",oneTimeKeyExpiresAt:null,qrUrl:""}),xn({tunnelUrl:"",running:!0})}async function za(e,r,n){if(V().remoteEnabled===!1){we.info("Start skipped \u2014 remote is disabled");return}let o=e();if(o)if(o.killed||o.exitCode!=null)r(null);else{let t=await te("/api/ui/state");return await C(O.READY,{tunnelUrl:t?.tunnelUrl||""}),"alreadyRunning"}it(),we.info("Starting...");try{await C(O.PREPARING),await cr($r),await C(O.CONNECTING);let t=await W(`${I}/api/session/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:Q(n),hostPublicKey:lt(),hostX25519Key:ut()})});if(!t.ok)throw new Error(`Session create failed: ${t.status}`);await Y("/api/signaling/retry",{}),Ht(n),await C(O.TUNNELING);let i=async l=>{await Kt(n,l),await j({tunnelUrl:l}),mn(l),xn({tunnelUrl:l,running:!0})},s=({attempt:l,delay:f})=>{j({tunnelRetry:{attempt:l,delay:f,at:Date.now()}})},a=null;try{a=await Ze($,i,ot({onUrlUpdate:i,setTunnel:l=>r(l),onRetry:s}))}catch(l){we.error(`Tunnel spawn failed: ${l?.message||l} \u2014 QR RTC-only, bg retry`)}j({tunnelRetry:null});let c="";a&&(r(a.child),c=a.tunnelUrl,await C(O.VERIFYING),await yt(c)||(we.warn("Tunnel health check timed out \u2014 bg reconnect"),c="",r(null),a=null)),await Xr(n,c),await C(O.READY,{tunnelUrl:c}),a||Rn($,{onUrlUpdate:i,onRestart:ot({onUrlUpdate:i,setTunnel:l=>r(l),onRetry:s}),setActiveTunnel:r,onReady:async l=>{await C(O.READY,{tunnelUrl:l.tunnelUrl})}})}catch(t){we.error(`Failed to start: ${t.message}`),await C(O.STOPPED)}}async function Ru(){if(V().remoteEnabled===!1){we.info("Key regeneration skipped \u2014 remote is disabled");return}let e=await Xt(),r=kt(e),n=Kn();if(!await Pt(r,I,$i()?.tunnelUrl,n?.key)){we.error("Key regeneration aborted \u2014 could not register the new key");return}We(e,r,n?.name||"Default"),await j({permanentKey:r,oneTimeKey:"",oneTimeKeyExpiresAt:null,qrUrl:"",pairingUsed:!0}),we.info(`Key regenerated: ${vr(r)}`)}function Pu(e,r){it(),we.info("Shutting down 9Remote completely...");let n=e();r(null),rt({tunnelProcess:n}),we.info("9Remote stopped")}Ft();async function Za(){if(await q()&&(await new Promise(a=>setTimeout(a,ie.guestRecheckMs)),await q())){console.log(h.green(`
|
|
266
|
+
\u{1F310} UI already served at http://localhost:${$}`));return}Be("agent",process.pid),rn(De());let e=await pt(),r=process.argv.find(a=>a.startsWith("--theme=")),n=r?r.split("=")[1]:null;try{le(),await new Promise(a=>setTimeout(a,ie.killCloudflaredMs))}catch{}let o=vt(null,null);await new Promise(a=>setTimeout(a,ie.serverBootMs));let t=`http://localhost:${$}`;console.log(h.green(`
|
|
267
|
+
\u{1F310} UI ready at ${t}`));let i=null;V().remoteEnabled===!1&&await wt(e.key),await j({permanentKey:e.key,step:O.STOPPED,theme:n}),bt(o,null),Tt(()=>i,a=>{i=a},e.key,()=>o),await lr({port:$,onQuit:()=>{let a=i;i=null,rt({serverManager:o,tunnelProcess:a,exit:!1}),Bt(),setTimeout(()=>process.exit(0),500)},onOpenUI:()=>Ut(t)}),xn({tunnelUrl:"",running:!0}),(process.argv.includes("--start")||process.argv.includes("--skip-update"))&&V().remoteEnabled!==!1&&Qt("start-tunnel"),await new Promise(()=>{})}Ft();async function ec(){if(await q()&&(await new Promise(l=>setTimeout(l,ie.guestRecheckMs)),await q())){console.log(`
|
|
268
|
+
\u{1F310} 9Remote already running at http://localhost:${$}`);return}Be("agent",process.pid),Ls().catch(()=>{});let e=await pt(),r=process.argv.find(l=>l.startsWith("--theme=")),n=r?r.split("=")[1]:null;try{le(),await new Promise(l=>setTimeout(l,ie.killCloudflaredMs))}catch{}let o=vt(null,null);await new Promise(l=>setTimeout(l,ie.serverBootMs));let t=`http://localhost:${$}`,i=null;await j({permanentKey:e.key,step:O.STOPPED,theme:n});let s=()=>{let l=i;i=null,rt({serverManager:o,tunnelProcess:l,exit:!1})};bt(o,null),Tt(()=>i,l=>{i=l},e.key,()=>o);try{qe("cloudflared")}catch{}(process.argv.includes("--start")||process.argv.includes("--skip-update"))&&V().remoteEnabled!==!1&&Qt("start-tunnel"),await lr({port:$,onQuit:s,onOpenUI:()=>Ut(t)})&&jo({title:"9Remote is running",message:`Open ${t} or use the tray icon to manage.`}),await new Promise(()=>{})}var Gt=F("mode");async function $u(e){Gt.info("Starting server..."),await C(O.PREPARING);try{le(),await new Promise(l=>setTimeout(l,ie.killCloudflaredMs))}catch{}let r=V().remoteEnabled===!1,n=!r;if(r&&await wt(e),n)try{let l=await W(`${I}/api/session/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:Q(e),hostPublicKey:lt(),hostX25519Key:ut()})});if(!l.ok)throw new Error(`Session create failed: ${l.status}`);Ht(e)}catch(l){Gt.error(`Session create failed: ${l.message} \u2014 local-only, retry from Web UI`),n=!1}let o=await q(),t=o?{getProcess:()=>null,shutdown:()=>{}}:vt(null,null);o||await new Promise(l=>setTimeout(l,ie.serverBootMs)),Gt.info("Starting tunnel..."),await C(O.CONNECTING);let i={current:null},s="",a=async l=>{Gt.info(`Tunnel URL rotated: ${l}`),await Kt(e,l),j({tunnelUrl:l}),mn(l)},c=null;if(n)try{c=await Ze($,a,ot({onUrlUpdate:a,setTunnel:l=>{i.current=l}}))}catch(l){Gt.error(`Tunnel spawn failed: ${l.message} \u2014 RTC-only, bg retry`)}return c&&(i.current=c.child,s=c.tunnelUrl,await yt(s)||(Gt.warn("Tunnel health check timed out \u2014 bg reconnect"),i.current=null,s="",c=null)),!c&&n&&Rn($,{onUrlUpdate:a,onRestart:ot({onUrlUpdate:a,setTunnel:l=>{i.current=l}}),setActiveTunnel:l=>{i.current=l},onReady:async l=>{await C(O.READY,{tunnelUrl:l.tunnelUrl})}}),s&&await Kt(e,s),n?await C(O.READY,{tunnelUrl:s}):await C(O.STOPPED,{tunnelUrl:""}),Fn({apiKey:e,tunnelUrl:s,serverPid:t.getProcess()?.pid,tunnelPid:i.current?.pid}),{serverManager:t,tunnelRef:i,tunnelUrl:s,remoteOnline:n}}async function tc(){rn(De());let e=await pt();Gt.info(`Using key: ${vr(e.key)} (${e.name})`);let{serverManager:r,tunnelRef:n,tunnelUrl:o,remoteOnline:t}=await $u(e.key);t?await Xr(e.key,o):console.log(`\u26A0 ${V().remoteEnabled===!1?"Remote is disabled \u2014 enable it in Web UI settings":'Remote not connected \u2014 tap "remote \xB7 offline" in the Web UI to retry'}. Local mode.`),bt(r,n.current),Tt(()=>n.current,s=>{n.current=s},e.key);let i=Date.now();setInterval(()=>{let s=Math.floor((Date.now()-i)/1e3),a=Math.floor(s/3600),c=Math.floor(s%3600/60),l=s%60;j({uptime:`${a}:${String(c).padStart(2,"0")}:${String(l).padStart(2,"0")}`})},$e.statsMs),await new Promise(()=>{})}var nc=A(require("path"),1),rc=A(require("fs"),1);Ft();async function oc(){let e=`http://localhost:${$}`;await q()&&(Wr($),await new Promise(c=>setTimeout(c,500)));let r=["--tray"],n=process.argv.find(c=>c.startsWith("--theme="));n&&r.push(n);let o=jn;try{rc.default.mkdirSync(nc.default.dirname(o),{recursive:!0})}catch{}let t=null;try{t=Is(r),t&&Be("agent",t)}catch(c){console.log(h.red(`
|
|
269
|
+
\u274C Failed to launch background: ${c.message}`)),process.exit(1)}let i=Date.now()+$e.bgServerReadyTimeoutMs,s=!1;for(;Date.now()<i;){if(await q()){s=!0;break}await new Promise(c=>setTimeout(c,$e.bgServerReadyIntervalMs))}s||(console.log(h.red(`
|
|
270
|
+
\u274C Background server failed to start.`)),console.log(h.gray(` Check log: ${o}
|
|
271
|
+
`)),process.exit(1)),Qt("start-tunnel"),Ut(e);let a=t?` (PID: ${t})`:"";console.log(h.green(`
|
|
272
|
+
\u{1F310} 9Remote running at ${e}${a}`)),console.log(h.gray(`\u{1F4A1} Log: ${o}
|
|
273
|
+
`)),await new Promise(c=>setTimeout(c,ie.bgSpawnFlushMs)),process.exit(0)}var ic=A(require("readline"),1);var Jr=F("mode"),$n=null;async function Qr(){Be("agent",process.pid),console.clear(),Zi(),rs(!0),await C(O.PREPARING);let e=await pt(),r=null,n={getProcess:()=>null,shutdown:()=>{}};if(!await q()){n=vt(null,null,()=>{if(process.stdin.isTTY){try{process.stdin.setRawMode(!1)}catch{}try{process.stdin.setRawMode(!0),process.stdin.resume()}catch{}}try{ic.default.emitKeypressEvents(process.stdin)}catch{}r?.()});let g=Date.now()+$e.serverReadyTimeoutMs;for(;Date.now()<g&&!await q();)await new Promise(T=>setTimeout(T,$e.serverReadyIntervalMs))}try{le(),await new Promise(g=>setTimeout(g,ie.killCloudflaredTuiMs))}catch{}try{await cr($r)}catch(g){Jr.error(`cloudflared setup failed: ${g?.message||g} \u2014 retry from Web UI`)}await C(O.CONNECTING);let t=V().remoteEnabled===!1,i=!t;if(t&&await wt(e.key),i)try{let g=await W(`${I}/api/session/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:Q(e.key),hostPublicKey:lt(),hostX25519Key:ut()})});if(!g.ok)throw new Error(`Session create failed: ${g.status}`);await Y("/api/signaling/retry",{}),Ht(e.key)}catch(g){Jr.error(`Failed to connect: ${g.message}`),i=!1}await C(O.TUNNELING);let s=i?await Wn(e.key,I):null,a=Gn(I,s),c=s?.oneTimeKey||"",l=a,f="",u=null,p={current:null},d=async g=>{f=g,await Kt(e.key,g),await j({tunnelUrl:g}),mn(g),u!==null&&(u=await Pn(c,e.key,l,f),r?.())},m=null;if(i)try{m=await Ze($,d,ot({onUrlUpdate:d,setTunnel:g=>{p.current=g}}))}catch(g){Jr.error(`Tunnel spawn failed: ${g?.message||g} \u2014 QR RTC-only, bg retry`)}m&&(p.current=m.child,f=m.tunnelUrl,Fn({apiKey:e.key,tunnelUrl:m.tunnelUrl,tunnelPid:m.child?.pid}),await C(O.VERIFYING),await yt(m.tunnelUrl)?await d(m.tunnelUrl):(Jr.warn("Tunnel health check timed out \u2014 bg reconnect"),p.current=null,f="",m=null)),!m&&i&&Rn($,{onUrlUpdate:d,onRestart:ot({onUrlUpdate:d,setTunnel:g=>{p.current=g}}),setActiveTunnel:g=>{p.current=g},onReady:async g=>{Fn({apiKey:e.key,tunnelUrl:g.tunnelUrl,tunnelPid:g.child?.pid}),await C(O.READY,{tunnelUrl:g.tunnelUrl})}}),i?await C(O.READY,{tunnelUrl:f,oneTimeKey:s?.oneTimeKey||"",oneTimeKeyExpiresAt:s?.expiresAt||null,permanentKey:e.key,qrUrl:a,workerUrl:I}):(await C(O.STOPPED,{tunnelUrl:"",oneTimeKey:"",oneTimeKeyExpiresAt:null,permanentKey:e.key,qrUrl:"",workerUrl:I}),console.log(h.red(`
|
|
274
|
+
\u26A0 ${t?"Remote is disabled \u2014 enable it in Web UI settings":'Remote not connected \u2014 tap "remote \xB7 offline" in the Web UI to retry'}. Local mode.
|
|
275
|
+
`))),await new Promise(g=>setTimeout(g,ie.trayReadyMs)),u=await Pn(c,e.key,l,f);let w=[],v=!1,P=()=>{v||r?.()},E=async(g,T,_)=>{if(!v){v=!0;try{let D=await es(T,_);await Y(`/api/device/${D?"approve":"reject"}`,{socketId:g})}catch{}finally{v=!1,r?.()}}},x=ts($,async(g,T)=>{if(g==="log"&&T.message)w.push(T.message),w.length>Ve.maxLogLines&&w.shift();else if(g==="state"){let _=T.permanentKey||e.key,D=T.oneTimeKey!==void 0?T.oneTimeKey:c,Z=T.qrUrl!==void 0?T.qrUrl:l,ue=T.tunnelUrl!==void 0?T.tunnelUrl:f;(D!==c||_!==e.key||ue!==f)&&(c=D,l=Z,f=ue,T.permanentKey&&(e={...e,key:T.permanentKey}),u=await Pn(c,e.key,l,f),P())}else g==="permissions"?(v||Promise.resolve($n?.()).catch(()=>{}),P()):g==="autostart"||g==="sleepInhibit"?(v||Promise.resolve($n?.()).catch(()=>{}),P()):g==="deviceApproval"&&T.action==="pending"&&await E(T.socketId,T.deviceId,T.ip)}),R=setInterval(async()=>{if(!v)try{let T=(await te("/api/device/pending"))?.pending?.[0];T&&await E(T.socketId,T.deviceId,T.ip)}catch{}},$e.pendingApprovalMs);bt({getProcess:n.getProcess,shutdown:()=>{it(),n.shutdown();try{p.current?.kill()}catch{}x(),clearInterval(R)}}),Tt(()=>p.current,g=>{p.current=g},e.key,()=>n),await Ou(e,f,()=>u,g=>{u=g},g=>{r=g},()=>{it();try{x()}catch{}try{clearInterval(R)}catch{}rt({serverManager:n,tunnelProcess:p.current,exit:!1})},w)}async function Ou(e,r,n,o,t,i,s){for(;;){let{desktopEnabled:a,remoteAvailable:c,autoApprove:l}=await yo(),f=[{label:"Open Web UI",action:"webui"}];V().remoteEnabled!==!1&&f.push({label:"Keys \u25B6",action:"keys"}),c&&f.push({label:`Remote Desktop: ${a?h.green("ON"):h.gray("OFF")} \u25B6`,action:"desktop"}),f.push({label:`Manage Devices \u25B6 ${h.dim("(Auto-approve:")} ${l?h.green("ON"):h.gray("OFF")}${h.dim(")")}`,action:"devices"},{label:"Settings \u25B6",action:"settings"},{label:"View Logs",action:"logs"},{label:h.gray("Exit"),action:"exit"});let u=null;t(()=>u?.());let p=await Ne("",f,0,n,m=>{u=m},i),d=p>=0?f[p].action:"exit";if(d==="webui"){let m=`http://localhost:${$}`,{openBrowser:w}=await Promise.resolve().then(()=>(Ft(),va));w(m),console.log(h.green(`
|
|
276
|
+
\u{1F310} Opening ${m}
|
|
277
|
+
`))}else if(d==="keys")await Iu(e,r,o,n);else if(d==="desktop")await Mu();else if(d==="devices")await Cu();else if(d==="settings")await Lu();else if(d==="logs")await Nu();else{try{i?.()}catch{}console.log(h.gray(`
|
|
278
278
|
Goodbye!
|
|
279
|
-
`)),process.exit(0)}}}async function
|
|
280
|
-
`):
|
|
281
|
-
${
|
|
282
|
-
${
|
|
283
|
-
`+"\u2550".repeat(s))),console.log(
|
|
284
|
-
`)),console.log(
|
|
285
|
-
`)),console.log(
|
|
286
|
-
`)),console.log(
|
|
287
|
-
`),process.exit(0)}else i==="ui"?await
|
|
279
|
+
`)),process.exit(0)}}}async function Iu(e,r,n,o){let t=V().remoteEnabled===!1?[{label:h.gray("Remote access is off \u2014 enable it in the Web UI"),action:"back"}]:[{label:"New One-Time Key",action:"otk"},{label:"Regenerate Permanent Key",action:"regen"},{label:h.gray("\u2190 Back"),action:"back"}],i=await Ne("Keys",t,0,o),s=i>=0?t[i].action:"back";if(s==="otk"){let a=await Wn(e.key,I);if(a){let c=Gn(I,a);n(await Pn(a.oneTimeKey,e.key,c,r)),await j({oneTimeKey:a.oneTimeKey,oneTimeKeyExpiresAt:a.expiresAt,qrUrl:c})}}else if(s==="regen"&&await mo(h.yellow("Replace current key and disconnect all sessions? Continue?"))){let c=await Xt(),l=kt(c);if(!await Pt(l,I,r,e.key)){n(h.red("Key regeneration failed \u2014 could not reach the server"));return}let f=We(c,l,e.name||"Default");Object.assign(e,f),n(await Pn("",e.key,"",r)),await j({permanentKey:e.key,oneTimeKey:"",oneTimeKeyExpiresAt:null,qrUrl:"",pairingUsed:!0})}}var ni={none:"Off","30m":"Off after 30 min idle","1h":"Off after 1 hour idle","2h":"Off after 2 hours idle","4h":"Off after 4 hours idle","24h":"Off after 24 hours idle",never:"Never off"};async function _u(e,r){let n=r.map(s=>({label:ni[s]||s,action:s}));n.push({label:h.gray("\u2190 Back"),action:"back"});let o=Math.max(0,r.indexOf(e)),t=await Ne("Prevent sleep",n,o),i=t>=0?n[t].action:"back";i!=="back"&&await Y("/api/sleep-inhibit",{mode:i})}async function Lu(){for(;;){let e=!1,r="never",n=[],o=()=>[{label:`Launch on system startup: ${e?h.green("ON"):h.gray("OFF")}`,action:"autostart"},{label:`Prevent sleep: ${r==="none"?h.gray(ni.none):h.green(ni[r]||r)} \u25B6`,action:"sleep"},{label:h.gray("\u2190 Back"),action:"back"}],t=o(),i=null,s=async()=>{let l=await yo();e=!!l.autoStart,r=l.sleepInhibitMode||"never",n=l.sleepInhibitPresets||[],t=o(),i?.()};await s(),$n=s;let a=await Ne("Settings",t,0,"",l=>{i=l});$n=null;let c=a>=0?t[a].action:"back";if(c==="autostart")await Y("/api/autostart",{enabled:!e});else if(c==="sleep")await _u(r,n);else return}}async function Mu(){for(;;){let e=!1,r={screenRecording:!1,accessibility:!1},n=()=>({toggle:`Toggle: ${e?h.green("ON \u2192 turn OFF"):h.gray("OFF \u2192 turn ON")}`,sr:`Screen Recording ${r.screenRecording?h.green("\u2713"):h.red("\u2717 (click to grant)")}`,ax:`Mouse & Keyboard control ${r.accessibility?h.green("\u2713"):h.red("\u2717 (click to grant)")}`}),o=[{label:""},{label:""},{label:""},{label:h.gray("\u2190 Back")}],t=null,i=async()=>{let a=await te("/api/ui/state")||{};e=!!a.desktopEnabled,r={screenRecording:!!a.screenRecording,accessibility:!!a.accessibility};let c=n();o[0].label=c.toggle,o[1].label=c.sr,o[2].label=c.ax,t?.()};await i(),$n=i;let s=await Ne("Remote Desktop",o,0,"",a=>{t=a});if($n=null,s===0)await Y("/api/desktop/toggle",{enabled:!e});else if(s===1&&!r.screenRecording)await Y("/api/permissions/request",{type:"screenRecording"})||Ar("screenRecording");else if(s===2&&!r.accessibility)await Y("/api/permissions/request",{type:"accessibility"})||Ar("accessibility");else if(s===3||s===-1)return}}async function Cu(){for(;;){let[e,r]=await Promise.all([te("/api/device/approved"),te("/api/device/auto-approve")]),n=e?.devices||[],o=!!r?.enabled,t=[{label:`Auto-approve new devices: ${o?h.green("ON"):h.gray("OFF")}`,action:"toggle"},...n.map(a=>{let c=a.deviceId.slice(0,8),l=a.approvedAt?new Date(a.approvedAt).toLocaleString():"unknown";return{label:`${c}... ${h.dim(l)}`,action:"remove",deviceId:a.deviceId}}),{label:h.gray("\u2190 Back"),action:"back"}],i=await Ne(`Approved Devices (${n.length})`,t,0);if(i===-1)return;let s=t[i];if(s.action==="back")return;if(s.action==="toggle"){await Y("/api/device/auto-approve",{enabled:!o});continue}s.action==="remove"&&await mo(h.yellow(`Remove device ${s.deviceId.slice(0,8)}...?`))&&await Y("/api/device/remove",{deviceId:s.deviceId})}}async function Nu(){let e=Ci(mi),r=e.length?e.join(`
|
|
280
|
+
`):h.gray(" No logs yet"),n=`
|
|
281
|
+
${h.dim("Log file:")} ${h.cyan(jn)}
|
|
282
|
+
${h.dim(`Tail: tail -f ${jn}`)}`;await Ne("Logs",[{label:h.gray("\u2190 Back")}],0,r+n)}async function sc(){let e=De(),r=await Fs(),n=po(e,r?.latest??null),o=[];r?.latest&&o.push({label:h.yellow(`Update to v${r.latest}`),action:"update"}),o.push({label:"Open Web UI (background)",action:"ui"},{label:"Terminal UI",action:"tui"},{label:h.gray("Exit"),action:"exit"});let t=await Ne("",o,0,n),i=t>=0?o[t].action:"exit";if(i==="update"){let s=Math.min(Ve.headerWidth,process.stdout.columns||Ve.headerWidth);Ur(),console.log(me.orange(`
|
|
283
|
+
`+"\u2550".repeat(s))),console.log(h.gray(` \u2713 Stopped running instances
|
|
284
|
+
`)),console.log(h.yellow(` \u2B06 Run this command to update:
|
|
285
|
+
`)),console.log(h.white.bold(` npm i -g ${ke}
|
|
286
|
+
`)),console.log(me.orange("\u2550".repeat(s))+`
|
|
287
|
+
`),process.exit(0)}else i==="ui"?await oc():i==="tui"?await Qr():process.exit(0)}var ii=A(require("node:fs"),1);function Du(e){let r=new Set;return e.map(n=>{if(!r.has(n))return r.add(n),n;let o=2;for(;r.has(`${n} (${o})`);)o++;let t=`${n} (${o})`;return r.add(t),t})}function Bu(e,r){let n=new Map;for(let o of e){let t=r(o)||"Page";n.has(t)||n.set(t,[]),n.get(t).push(o)}return[...n].map(([o,t])=>({path:o,items:t}))}var ri=e=>`${e.role}|${e.kind}`;var lc=e=>String(e??"").replace(/\s+/g," ").trim(),dr=(e,r=80)=>{let n=lc(e);return n.length>r?n.slice(0,r-1)+"\u2026":n},ac=(e,r,n=!1)=>{let o=e.value?` =${lc(e.value).slice(0,30)}`:"",t=e.checked?` [${e.checked}]`:"",i=e.href?` -> ${dr(e.href,70)}`:"",s=n&&e.rect?` [${Math.round(e.rect.x+(e.rect.w?e.rect.w/2:0))},${Math.round(e.rect.y+(e.rect.h?e.rect.h/2:0))}]`:"";return`${e.id} ${e.role||e.kind} "${dr(r)}"${t}${o}${i}${s}`};function Uu(e,r,n){let{period:o,cycles:t,constant:i}=r;if(o===1&&i[0])return[`${e[0].role} "${dr(e[0].label)}" \xD7${t}: `+e.map(c=>c.id).join(" ")];let s=Array.from({length:o},(c,l)=>i[l]?`${e[l].role} "${dr(e[l].label)}"`:e[l].role),a=[];for(let c=0;c<t;c++)a.push(Array.from({length:o},(l,f)=>{let u=e[c*o+f];return i[f]?u.id:`${u.id} ${dr(n.get(u.id))}`}).join(" \xB7 "));return[`row \xD7${t} [${s.join(", ")}]`,...a]}function Fu(e,r,n){let o=0;for(;r+(o+1)*n<=e.length&&e.slice(r+o*n,r+(o+1)*n).every((t,i)=>ri(t)===ri(e[r+i]));)o++;return o}function uc(e,r,n=!1){let o=null,t=(c,l,f)=>!o||c>o.density+1e-9||Math.abs(c-o.density)<1e-9&&(l>o.len||l===o.len&&f<o.cycle.period);for(let c=0;c+6<=e.length;c++){let l=Math.min(50,Math.floor((e.length-c)/3));for(let f=1;f<=l;f++){let u=Fu(e,c,f);if(u<3||f===1&&new Set(e.slice(c,c+u).map(w=>w.label)).size>1)continue;let p=Array.from({length:f},(w,v)=>{let P=e[c+v].label;for(let E=1;E<u;E++)if(e[c+E*f+v].label!==P)return!1;return!0}),d=p.filter(Boolean).length;if(d===0&&new Set(e.slice(c,c+f).map(ri)).size<2)continue;let m=u*f;t(d/f,m,f)&&(o={start:c,len:m,cycle:{period:f,cycles:u,constant:p},density:d/f})}}if(!o)return e.map(c=>ac(c,r.get(c.id),n));let i=e.slice(0,o.start).map(c=>ac(c,r.get(c.id),n)),s=Uu(e.slice(o.start,o.start+o.len),o.cycle,r),a=uc(e.slice(o.start+o.len),r,n);return[...i,...s,...a]}var cc=e=>" ".repeat(e);function oi(e,{coords:r=!1}={}){let n=Du(e.map(s=>s.label)),o=new Map(e.map((s,a)=>[s.id,n[a]])),t=[],i=(s,a)=>{for(let{path:c,items:l}of Bu(s,f=>f.path?.[0])){t.push(`${cc(a)}${c}:`);let f=l.filter(p=>(p.path?.length??1)>1).map(p=>({...p,path:p.path.slice(1)})),u=l.filter(p=>(p.path?.length??1)<=1);for(let p of uc(u,o,r))t.push(`${cc(a+1)}${p}`);f.length&&i(f,a+1)}};return i(e,0),t.join(`
|
|
288
|
+
`)}function Ku(e){let r=[],n={};for(let o=0;o<e.length;o++){let t=e[o];if(t==="--url"){n.url=e[++o];continue}if(t==="--max-steps"){n.maxSteps=Number(e[++o]);continue}if(t==="--attach")throw new Error("--attach is temporarily disabled \u2014 own-profile Chrome only");if(t==="--extension")throw new Error("--extension is temporarily disabled \u2014 own-profile Chrome only");if(t==="--no-headless"){n.headless=!1;continue}if(t==="--enter"){n.enter=!0;continue}if(t==="--only"){n.only=e[++o];continue}if(t==="--parent"){n.parent=e[++o];continue}if(t==="--from"){n.from=Number(e[++o]);continue}if(t==="--len"){n.len=Number(e[++o]);continue}if(t==="--head"){n.head=Number(e[++o]);continue}if(t==="--tail"){n.tail=/^\d+$/.test(e[o+1]??"")?Number(e[++o]):!0;continue}if(t==="-C"){n.context=Number(e[++o]);continue}if(t==="-B"){n.before=Number(e[++o]);continue}if(t==="-A"){n.after=Number(e[++o]);continue}if(t==="-n"){n.lineNumbers=!0;continue}if(t==="-v"){n.invert=!0;continue}if(t==="-m"){n.max=Number(e[++o]);continue}if(t==="-q"){n.quiet=!0;continue}if(t==="--links"||t==="-l"){n.links=!0;continue}if(t==="--light"){n.light=!0;continue}if(t==="--nowait"){n.nowait=!0;continue}if(t==="--fields"){n.fields=pc(e[++o]);continue}if(t==="--expect-text"){(n.expectText||=[]).push(e[++o]);continue}if(t==="--expect-url"){n.expectUrl=e[++o];continue}if(t==="--expect-title"){n.expectTitle=e[++o];continue}if(t==="--prompt"){n.promptText=e[++o];continue}if(t==="--wait"){n.wait=e[++o];continue}if(t==="--no-coords"){n.noCoords=!0;continue}if(t==="--new"||t==="--new-tab"){n.newTab=!0;continue}if(t==="--timeout-ms"){n.timeoutMs=Number(e[++o]);continue}if(t==="--steps"){n.stepsJson=e[++o];continue}if(t==="--goal"){n.goal=e[++o];continue}r.push(t)}return{positional:r,opts:n}}function pc(e){let r={};for(let n of String(e||"").split(";")){let o=n.indexOf("=");o>0&&(r[n.slice(0,o).trim()]=n.slice(o+1))}return Object.keys(r).length?r:void 0}async function L(e,r){await q()||(console.error("9remote server is not running \u2014 start it first (9remote ui / start)"),process.exit(1));let n=process.env.NINE_REMOTE_SESSION_ID;/^[a-z0-9][a-z0-9_-]{0,40}$/i.test(n??"")&&(r.tabKey=n.toLowerCase());let o=await Y("/api/browser-use",{action:e,payload:r});return o||(console.error("Local API unreachable"),process.exit(1)),o.json()}function M(e){if(!e?.ok)throw new Error(e?.error||"Request failed");return e}var si={};function ce(e){console.log(`${e.url}`),console.log(`${e.title||""} \xB7 ${e.actions?.length??0} elements \xB7 ${e.w}x${e.h}`);let r=e.actions?.filter(n=>typeof n.node=="number").length??0;if(e.element_from!=null&&e.total_elements>r&&console.log(`[elements ${e.element_from+1}-${e.element_from+r} of ${e.total_elements}]`),!si.light){if(!e.element_from){let n=String(e.text||"").replace(/\s+/g," ").trim();n&&console.log(`text: ${n.slice(0,800)}${n.length>800?" \u2026":""}`)}console.log(oi(e.actions||[],{coords:!si.noCoords})),e.omitted_actions&&console.log(`\u2026 ${e.omitted_actions} more elements cut by the cap`)}}function Hu(e){let r=[],n="",o=null;for(let t of e){if(o){n+=t,t===o&&(o=null);continue}if(t==='"'||t==="'"){o=t,n+=t;continue}if(t===";"){r.push(n.trim()),n="";continue}n+=t}return n.trim()&&r.push(n.trim()),r.filter(Boolean)}function ju(e){let r=e.match(/^(go|click|select|type|enter|scroll|wait|run|read|search|find|hover|upload|shot)\b\s*(.*)$/);if(!r)throw new Error(`Cannot parse step: ${e}`);let[,n,o]=r,t=o.match(/"[^"]*"|'[^']*'|\S+/g)||[],i=c=>String(c).replace(/^["']|["']$/g,""),s=c=>{let l=t.indexOf(c);return l>=0?i(t[l+1]):void 0},a=c=>{let l=t.indexOf(c);return l>=0?Number(i(t[l+1])):void 0};switch(n){case"click":case"select":case"hover":return{op:n,id:i(t[0]),label:t[1]?i(t[1]):void 0};case"type":{let c=t.includes("--enter"),l=t.indexOf("--label"),f=l>=0?i(t[l+1]):void 0,u=new Set(["--enter"]);l>=0&&(u.add(l),u.add(l+1));let p=t.filter((d,m)=>!u.has(m));return{op:n,id:i(p[0]),label:f,text:i(p.slice(1).join(" ")),enter:c}}case"go":{let c=i(t[0]);if(!c)throw new Error(`go step needs a url or tab selector: ${e}`);return c==="tab"?{op:n,tab:i(t[1])}:/^#?\d+$/.test(c)?{op:n,tab:c}:{op:n,url:c,newTab:t.includes("--new")}}case"read":return{op:"read",parent:s("--parent"),head:a("--head"),tail:a("--tail"),from:a("--from"),len:a("--len")};case"search":return{op:"search",pattern:i(t[0]??""),context:a("-C"),before:a("-B"),after:a("-A"),lineNumbers:!t.includes("--no-numbers"),invert:t.includes("-v"),max:a("-m"),quiet:t.includes("-q"),links:t.includes("--links"),head:a("--head"),tail:a("--tail"),parent:s("--parent"),for:a("--for")};case"find":return{op:"find",pattern:i(t.join(" "))||void 0,from:a("--from"),tail:a("--tail"),parent:s("--parent")};case"upload":return{op:"upload",label:i(t[0]),file:i(t[1])};case"shot":return{op:n};case"enter":return{op:n};case"scroll":{let c=i(t[0]);return c==="to"?{op:n,to:i(t[1])}:c==="y"?{op:n,y:Number(i(t[1]))}:{op:n,direction:c||"down"}}case"wait":{let c=t[0];if(c&&/^["']/.test(c)){let l=Number(i(t[1]));return Number.isFinite(l)&&l>0?{op:n,text:i(c),ms:l}:{op:n,text:i(c)}}return{op:n,ms:Number(c)||300}}default:{let c=["--only","--parent","--expect-url","--expect-text","--fields","--max-steps","--prompt"],l=new Set;for(let d=0;d<t.length;d++)c.includes(t[d])&&(l.add(d),d+1<t.length&&l.add(d+1));let f=i(t.filter((d,m)=>!l.has(m)).join(" "));if(!f)throw new Error(`run step needs a goal (flags alone are not one): ${e}`);let u=t.indexOf("--expect-text"),p=u>=0?[i(t[u+1])]:void 0;return{op:"run",goal:f,only:s("--only"),parent:s("--parent"),fields:s("--fields")?pc(s("--fields")):void 0,maxSteps:s("--max-steps")?Number(s("--max-steps")):void 0,expectUrl:s("--expect-url"),expectText:p}}}}function Wu(e){for(let r of e.steps||[]){let n=[`#${r.seq}`,r.operation,r.targetIndex?`[${r.targetIndex}]`:"",r.label||""].filter(Boolean).join(" ");console.log(` ${n} \xB7 ${r.result}`)}console.log(`outcome: ${e.outcome}${e.reason?` \u2014 ${e.reason}`:""}`),console.log(`metrics: ${e.metrics?.steps??0} steps \xB7 ${e.metrics?.modelCalls??0} jev calls \xB7 ${Math.round((e.metrics?.elapsedMs??0)/100)/10}s`),console.log(`url: ${e.url||""}`),dc(e.console),e.outcome==="needs_verification"&&console.log("element table below \u2014 verify before claiming success (shot for visual).")}function dc(e){if(e?.length){console.log("console (tail):");for(let r of e)console.log(` ${r.level.padEnd(7)} ${r.text}`)}}var fc=`9remote browser \u2014 one-shot journeys: chain | batch | run
|
|
289
|
+
|
|
290
|
+
EVERY browser task is ONE call. Never poke one verb at a time.
|
|
291
|
+
|
|
292
|
+
1) chain \u2014 the one interface (14 ops). ALWAYS --goal, ALWAYS to the end of the task:
|
|
293
|
+
9remote browser chain --goal "weekly trending report" --steps '[
|
|
294
|
+
{"op":"go","url":"https://github.com/trending?since=weekly"},
|
|
295
|
+
{"op":"run","goal":"dismiss any cookie banner","expectText":["Trending"]},
|
|
296
|
+
{"op":"click","label":"Skip","when":{"text":"Skip tutorial"}},
|
|
297
|
+
{"op":"search","pattern":"stars this week","context":2},
|
|
298
|
+
{"op":"find","pattern":"Load more"},
|
|
299
|
+
{"op":"shot"}
|
|
300
|
+
]'
|
|
301
|
+
Ops: go(tab/url/newTab) scroll(to/y/down/up) click(label/id/tryLabels/prompt/nav)
|
|
302
|
+
type(label,text,enter) select(option) hover enter upload(label,file)
|
|
303
|
+
read(parent,head,tail,from,len) search(pattern,context,links,for) find(pattern,from,tail) shot
|
|
304
|
+
run(goal,fields,expectText,steps)
|
|
305
|
+
Every op takes when:{text|textNot|url} (skip-if-unmet, composes into if/else).
|
|
306
|
+
Unknown labels are not a reason to stop \u2014 a run step carries the journey
|
|
307
|
+
through them. The engine settles adaptively between steps \u2014 never declare
|
|
308
|
+
waits; only search takes for:<ms> when evidence is KNOWN to arrive late.
|
|
309
|
+
|
|
310
|
+
2) batch \u2014 same ops as one-per-line text (heredoc, no JSON quoting):
|
|
311
|
+
9remote browser batch <<'EOF'
|
|
312
|
+
go https://github.com/trending
|
|
313
|
+
search "stars this week" -C 2
|
|
314
|
+
EOF
|
|
315
|
+
|
|
316
|
+
3) run \u2014 hand a whole unknown-label segment to Jev (the fast model
|
|
317
|
+
decides on the live table, you keep the text):
|
|
318
|
+
9remote browser run "log in" --fields "Email=me@x.co;Password=s3cret" --expect-text "Dashboard"
|
|
288
319
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
9remote browser
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
# engine verifies them on a fresh read \u2014 only PASSED is success
|
|
297
|
-
9remote browser click <id> [options] click table id (e3)
|
|
298
|
-
9remote browser type <id> "<text>" [--enter] type exact text (+ Enter) into field
|
|
299
|
-
9remote browser chain "click e1; type e2 'hi' --enter; wait 'result'" # many steps, ONE call
|
|
300
|
-
9remote browser enter press Enter
|
|
301
|
-
9remote browser shot [--profile N] writes /tmp/9remote-shot-*.jpg, prints the path
|
|
302
|
-
9remote browser tabs [--profile N] [--attach] # list open browser tabs
|
|
303
|
-
9remote browser close [--profile N]
|
|
304
|
-
9remote browser profiles list|create <name>|delete <name>
|
|
305
|
-
9remote browser attach check real-browser attach status
|
|
306
|
-
9remote browser status config + sessions`;async function nc(e){let{positional:t,opts:r}=ku(e),[o,...n]=t,i=r.mode==="attach",s=(a={})=>({profile:i?"__attach__":r.profile,...r,...a});switch(o){case void 0:case"help":console.log(ec);return;case"tabs":{let a=re(await ne("tabs",s()));for(let c of a.tabs||[]){let l=c.active?"* ":" ";console.log(`${l}[${c.id}] ${c.title||"(untitled)"} \u2014 ${c.url}`)}return}case"open":{let a=re(await ne("open",s({url:n[0]})));console.log(`opened ${n[0]} (${i?"real browser":`profile ${r.profile||"default"}`})`),a.state&&Gt(a.state);return}case"state":{let a=re(await ne("state",s()));Gt(a);return}case"read":{let a=re(await ne("state",s())),c=(a.headings||[]).join(" \u203A ");c&&console.log(`## ${c}`);let l=a.text||"";console.log(r.tail?l.slice(Math.floor(l.length/2)):l),l.trim()||console.log("(no readable text in view \u2014 scroll or open an article first)");return}case"run":{let a=re(await ne("run",s({goal:n.join(" ")})));if(Iu(a),a.verification){console.log(`verification: ${a.verification.passed?"PASSED \u2014 independently verified, safe to report success":"FAILED"}`);for(let[c,l]of Object.entries(a.verification.checks))l||console.log(` not met: ${c}`)}a.state&&Gt(a.state);return}case"click":{let a=re(await ne("click",s({id:n[0]})));console.log(`clicked ${n[0]}`),a.state&&Gt(a.state);return}case"type":{let a=re(await ne("type",s({id:n[0],text:n.slice(1).join(" "),enter:!!r.enter})));console.log(`typed into ${n[0]}${r.enter?" + enter":""}`),a.state&&Gt(a.state);return}case"enter":{let a=re(await ne("enter",s()));console.log("enter pressed"),a.state&&Gt(a.state);return}case"shot":{let a=re(await ne("shot",s())),c=`/tmp/9remote-shot-${Date.now()}.jpg`;tc.default.writeFileSync(c,Buffer.from(a.image,"base64")),console.log(c);return}case"chain":{let a=Pu(n.join(" ")).map(Ou),c=await ne("chain",s({steps:a}));if(!c?.results){re(c);return}for(let l of c.results)console.log(` ${l.ok?"ok":"FAIL"} #${l.step} ${l.summary||l.op}${l.error?` \u2014 ${l.error}`:""}`);c.failedStep&&console.error(`chain stopped at step ${c.failedStep}`),c.state&&Gt(c.state);return}case"close":re(await ne("close",s())),console.log("closed");return;case"profiles":{if(n[0]==="create"){re(await ne("profiles.create",{name:n[1]})),console.log(`created ${n[1]}`);return}if(n[0]==="delete"){re(await ne("profiles.delete",{name:n[1]})),console.log(`deleted ${n[1]}`);return}if(n[0]==="rename"){re(await ne("profiles.rename",{from:n[1],to:n[2]})),console.log(`renamed ${n[1]} -> ${n[2]}`);return}let a=re(await ne("profiles.list",{}));console.log((a.profiles||[]).map(c=>c.name).join(`
|
|
307
|
-
`));return}case"attach":{let a=re(await ne("attach.status",{}));a.available?console.log(`attached (port ${a.port})`):(console.log("not attached:"),(a.guide||[]).forEach((c,l)=>console.log(` ${l+1}. ${c}`)));return}case"status":{let a=re(await ne("status",{}));console.log(JSON.stringify(a,null,2));return}default:console.error(`Unknown browser subcommand: ${o}
|
|
308
|
-
`),console.log(ec),process.exit(1)}}var rc=[["9remote","Interactive menu (TUI). Falls back to help with no TTY."],["9remote start","Run server + tunnel in foreground (headless)."],["9remote key","Show permanent key + connect URL."],["9remote key --new","Regenerate the permanent key."],["9remote otk","Create a fresh one-time connect key + URL."],["9remote devices","List approved devices."],["9remote auto-approve <on|off>","Toggle device auto-approve."],["9remote approve <socketId>","Approve a pending device."],["9remote help","Show this help."]];function Qr(){nn(Ne()),console.log(m.white.bold(`
|
|
320
|
+
WHEN A CHAIN BREAKS: the response names the failing step, returns the live
|
|
321
|
+
state/console AND \`pending\` (the steps not yet run). Issue ONE new chain
|
|
322
|
+
with the pending steps adjusted \u2014 never fall back to single verbs.`,Gu=new Set(["chain","batch","sh","run","help","--help","-h",void 0]);function Vu(e,{fromBatch:r=!1}={}){if(r||Gu.has(e))return null;let n={cat:"read",grep:"search",text:"search",elements:"find",ls:"find",jev:"run",delegate:"run"}[e]||e;return new Error(`single "${e}" is agent-disabled \u2014 pack it into a chain: 9remote browser chain --steps '[{"op":"${n}","label":"\u2026"}]' (or: 9remote browser batch < script)`)}var Yu=(e,r)=>{if(!e[0])throw new Error(`Missing ${r}`);return e[0]};async function ai(e,{fromBatch:r=!1}={}){let{positional:n,opts:o}=Ku(e);si=o;let[t,...i]=n,s=f=>String(f).replace(/^["']|["']$/g,""),a=i.map(s),c=o.mode==="attach";o.mode==="extension"&&(o.profile="__extension__");let l=(f={})=>({profile:c?"__attach__":void 0,...o,...f});try{let f=Vu(t,{fromBatch:r});if(f)throw f;switch(t){case void 0:case"help":case"--help":case"-h":console.log(fc);return;case"tabs":{let u=M(await L("tabs",l()));for(let p of u.tabs||[]){let d=p.active?"* ":" ",m=p.index?`#${p.index} `:"";console.log(`${d}${m}[${p.id}] ${p.title||"(untitled)"} \u2014 ${p.url}`)}return}case"go":{let u=a[0],p=u==="tab"||/^#?\d+$/.test(u||""),d=p?{tab:u==="tab"?a[1]:u}:{url:Yu(a,"url"),newTab:!!o.newTab},m=M(await L("go",l({...d,wait:o.wait,timeoutMs:o.timeoutMs}))),w=c?"real browser (debug)":o.mode==="extension"?"real browser (extension)":"isolated Chrome";console.log(p?`switched: #${m.index||""} ${m.title||""} \u2014 ${m.url||""}`:`went to ${a[0]} (${w})`),m.state&&ce(m.state);return}case"ls":{let u=M(await L("ls",l()));ce(u);return}case"undbg":{let u=M(await L("undbg",{...l(),ms:Number(o.ms)||void 0}));console.log(`debugger detached ${u.ms}ms \u2014 state re-served after re-attach`),o.state!==!1&&u.state&&ce(u.state);break}case"clear":{let u=M(await L("clear",l()));console.log(`cleared site data: ${u.cleared}`);break}case"console":{let p=M(await L("console",l())).lines||[];p.length||console.log("(console empty)");for(let d of p)console.log(`${d.level.padEnd(7)} ${d.text}`);return}case"read":{let u=M(await L("read",l())),p=u.text||"",d=u.from||0;(d>0||(u.total||0)>d+p.length)&&console.log(`[chunk ${d}-${d+p.length} of ${u.total??"?"} chars]`),console.log(p),p.trim()||console.log("(no readable text \u2014 wrong section name? ls shows sections in the tree)");return}case"search":{let u=M(await L("search",l({pattern:a.join(" ")})));u.text&&console.log(u.text),console.log(`(${u.matched??0} matches)`),!u.quiet&&!(u.matched>0)&&(process.exitCode=1);return}case"find":{let u=M(await L("find",l({pattern:a.join(" ")})));console.log(`${u.matched??0}/${u.total??"?"} elements:`),console.log(oi(u.actions||[],{coords:!0}));return}case"sh":case"batch":{let u="";try{u=ii.default.readFileSync(0,"utf8")}catch{console.error("batch reads commands from stdin: 9remote browser batch < script.txt"),process.exitCode=1;return}let p=u.split(`
|
|
323
|
+
`).map(d=>d.trim()).filter(d=>d&&!d.startsWith("#"));for(let d of p){let m=/\s*&\s*$/.test(d),w=d.replace(/\s*&\s*$/,""),v=w.match(/"[^"]*"|'[^']*'|\S+/g)||[];m&&v.push("--light"),console.log(`
|
|
324
|
+
$ ${w}`);try{await ai(v,{fromBatch:!0})}catch(P){console.error(` \u2717 ${P.message}`)}}return}case"run":{let u=M(await L("run",l({goal:a.join(" ")})));if(Wu(u),u.verification){console.log(`verification: ${u.verification.passed?"PASSED \u2014 independently verified, safe to report success":"FAILED"}`);for(let[p,d]of Object.entries(u.verification.checks))d||console.log(` not met: ${p}`)}u.frame&&console.log(`frame: ${u.frame}`),u.state&&ce(u.state);return}case"click":{let u=M(await L("click",l({id:a[0],wait:o.wait,timeoutMs:o.timeoutMs})));console.log(`clicked ${a[0]}`),u.state&&ce(u.state);return}case"clickxy":{let u=M(await L("clickxy",l({x:Number(a[0]),y:Number(a[1])})));console.log(`clicked x=${a[0]} y=${a[1]}`),u.state&&ce(u.state);return}case"scroll":{let u=String(a[0]||"").toLowerCase(),p;["top","bottom"].includes(u)?p={edge:u}:["down","up"].includes(u)?p={direction:u}:u==="to"?p={to:String(a[1]||"")}:u==="y"?p={y:Number(a[1])}:p={px:Number(u)||void 0,direction:"down"};let d=M(await L("scroll",l(p)));d.state&&ce(d.state);return}case"back":case"forward":{let u=M(await L(t,l()));u.state&&ce(u.state);return}case"reload":{let u=M(await L("reload",l()));u.state&&ce(u.state);return}case"key":{let u=M(await L("key",l({name:a[0]})));u.state&&ce(u.state);return}case"hover":{let u=M(await L("hover",l({id:a[0]})));console.log(`hovered ${a[0]}`),u.state&&ce(u.state);return}case"wait":{let u=/^\d+$/.test(i.at(-1)??"")?Number(i.at(-1)):null,d=(u!=null?a.slice(0,-1):a).join(" "),m=M(await L("wait",l({text:d,timeoutMs:u??void 0})));console.log(`wait "${d}": ${m.found?"FOUND":"TIMEOUT"}`),m.state&&ce(m.state);return}case"tabclose":{let u=a[0]??null,p=M(await L("tabclose",l(u!=null?{target:u}:{})));console.log(`closed: ${p.closed}`);return}case"type":{let u=M(await L("type",l({id:a[0],text:a.slice(1).join(" "),enter:!!o.enter,wait:o.wait,timeoutMs:o.timeoutMs})));console.log(`typed into ${a[0]}${o.enter?" + enter":""}`),u.state&&ce(u.state);return}case"upload":{let u=M(await L("upload",l({id:a[0],file:a[1]})));console.log(`uploaded ${u.uploaded} into ${a[0]}`),u.state&&ce(u.state);return}case"download":{let u=M(await L("download",l({timeout:o.timeout})));console.log(`downloaded: ${u.download.path}`);return}case"drag":{let u=M(await L("drag",l({from:a[0],to:a[1]})));console.log(`dragged ${a[0]} onto ${a[1]}`);return}case"enter":{let u=M(await L("enter",l()));console.log("enter pressed"),u.state&&ce(u.state);return}case"shot":{let u=M(await L("shot",l())),p=`/tmp/9remote-shot-${Date.now()}.jpg`;ii.default.writeFileSync(p,Buffer.from(u.image,"base64")),console.log(p);return}case"chain":{let u;if(o.stepsJson){try{u=JSON.parse(o.stepsJson)}catch{throw new Error("--steps is not valid JSON")}if(!Array.isArray(u)||!u.length)throw new Error("--steps needs a non-empty JSON array")}else u=Hu(a.join(" ")).map(ju);let p=await L("chain",l({steps:u}));if(!p?.results){M(p);return}for(let m of p.results)if(console.log(` ${m.ok?m.skipped?"skip":"ok":"FAIL"} #${m.step} ${m.summary||m.op}${m.error?` \u2014 ${m.error}`:""}`),["read","search","find"].includes(m.op)&&m.text)for(let w of m.text.split(`
|
|
325
|
+
`))console.log(` ${w}`);p.failedStep&&(console.error(`chain stopped at step ${p.failedStep}`),process.exitCode=1),p.goal&&console.error(`goal "${p.goal}" \u2014 reached ${p.progress}`),p.pending?.length&&console.log(`pending: ${JSON.stringify(p.pending)}`),p.note&&console.log(p.note),dc(p.console);let d=p.results?.some(m=>m.text?.trim());p.state&&(p.failedStep||!d)?ce(p.state):p.state&&console.log(`${p.state.url} \xB7 ${p.state.title||""} \xB7 ${p.state.actions?.length??0} elements`);return}case"close":M(await L("close",l())),console.log("closed");return;case"attach":throw new Error("attach is temporarily disabled \u2014 own-profile Chrome only");case"status":{let u=M(await L("status",{}));console.log(JSON.stringify(u,null,2));return}default:throw new Error(`Unknown browser subcommand: ${t}
|
|
326
|
+
${fc}`)}}catch(f){console.error(f.message),process.exitCode=1}}var mc=[["9remote","Interactive menu (TUI). Falls back to help with no TTY."],["9remote start","Run server + tunnel in foreground (headless)."],["9remote key","Show permanent key + connect URL."],["9remote key --new","Regenerate the permanent key."],["9remote otk","Create a fresh one-time connect key + URL."],["9remote devices","List approved devices."],["9remote auto-approve <on|off>","Toggle device auto-approve."],["9remote approve <socketId>","Approve a pending device."],["9remote help","Show this help."]];function zr(){rn(De()),console.log(h.white.bold(`
|
|
309
327
|
Usage:
|
|
310
|
-
`));let e=Math.max(...
|
|
311
|
-
\u2717 Server not running. Start it first: `)+
|
|
312
|
-
`),!1)}async function
|
|
328
|
+
`));let e=Math.max(...mc.map(([r])=>r.length))+2;for(let[r,n]of mc)console.log(" "+h.cyan(r.padEnd(e))+h.gray(n));console.log()}async function mr(){return await q()?!0:(console.log(h.red(`
|
|
329
|
+
\u2717 Server not running. Start it first: `)+h.cyan("9remote start")+`
|
|
330
|
+
`),!1)}async function qu(e){if(!await mr())return;if(e){let n=await Y("/api/key/regenerate"),o=n&&n.ok?await n.json():null;if(!o?.permanentKey){console.log(h.red(`
|
|
313
331
|
\u2717 Regenerate failed
|
|
314
|
-
`));return}console.log(
|
|
315
|
-
\u2713 New key: `)+
|
|
316
|
-
`);return}let
|
|
317
|
-
\u2717 No key yet. Run: `)+
|
|
318
|
-
`);return}console.log(
|
|
319
|
-
Key`.padEnd(14))+
|
|
320
|
-
`)}async function
|
|
332
|
+
`));return}console.log(h.green(`
|
|
333
|
+
\u2713 New key: `)+h.white.bold(o.permanentKey)+`
|
|
334
|
+
`);return}let r=await te("/api/ui/state")||{};if(!r.permanentKey){console.log(h.red(`
|
|
335
|
+
\u2717 No key yet. Run: `)+h.cyan("9remote start")+`
|
|
336
|
+
`);return}console.log(h.white(`
|
|
337
|
+
Key`.padEnd(14))+h.white.bold(r.permanentKey)),r.qrUrl&&console.log(h.white("Connect URL".padEnd(14))+h.cyan(r.qrUrl)),console.log(h.white("App URL".padEnd(14))+h.gray(`${I}/login`)+`
|
|
338
|
+
`)}async function Xu(){if(!await mr())return;let e=await Y("/api/key/one-time"),r=e&&e.ok?await e.json():null;if(!r?.qrUrl){console.log(h.red(`
|
|
321
339
|
\u2717 Failed to create one-time key
|
|
322
|
-
`));return}console.log(
|
|
323
|
-
\u2713 One-time key (30 min): `)+
|
|
324
|
-
`)}async function
|
|
325
|
-
Auto-approve: `)+(
|
|
326
|
-
`));return}console.log(
|
|
340
|
+
`));return}console.log(h.green(`
|
|
341
|
+
\u2713 One-time key (30 min): `)+h.white.bold(r.oneTimeKey)),console.log(h.white("Connect URL ")+h.cyan(r.qrUrl)+`
|
|
342
|
+
`)}async function Ju(){if(!await mr())return;let r=(await te("/api/device/approved")||{}).devices||[],n=await te("/api/device/auto-approve")||{};if(console.log(h.white(`
|
|
343
|
+
Auto-approve: `)+(n.enabled?h.green("ON"):h.gray("OFF"))),!r.length){console.log(h.gray(`No approved devices
|
|
344
|
+
`));return}console.log(h.white(`Approved devices (${r.length}):`));for(let o of r)console.log(" "+h.cyan(o.deviceId));console.log()}async function Qu(e){if(!await mr())return;let r=e==="on";if(e!=="on"&&e!=="off"){console.log(h.red(`
|
|
327
345
|
\u2717 Usage: 9remote auto-approve <on|off>
|
|
328
|
-
`));return}let
|
|
329
|
-
\u2713 Auto-approve: `)+(o?.enabled?
|
|
330
|
-
`)}async function
|
|
346
|
+
`));return}let n=await Y("/api/device/auto-approve",{enabled:r}),o=n&&n.ok?await n.json():null;console.log(h.green(`
|
|
347
|
+
\u2713 Auto-approve: `)+(o?.enabled?h.green("ON"):h.gray("OFF"))+`
|
|
348
|
+
`)}async function zu(e){if(!await mr())return;if(!e){let t=(await te("/api/device/pending")||{}).pending||[];if(!t.length){console.log(h.gray(`
|
|
331
349
|
No pending devices
|
|
332
|
-
`));return}console.log(
|
|
333
|
-
Pending devices (${
|
|
334
|
-
Approve with: `)+
|
|
335
|
-
`);return}let
|
|
350
|
+
`));return}console.log(h.white(`
|
|
351
|
+
Pending devices (${t.length}):`));for(let i of t)console.log(" "+h.cyan(i.socketId)+h.gray(` ${i.deviceId?.slice(0,8)||""} ${i.ip||""}`));console.log(h.gray(`
|
|
352
|
+
Approve with: `)+h.cyan("9remote approve <socketId>")+`
|
|
353
|
+
`);return}let r=await Y("/api/device/approve",{socketId:e}),n=r&&r.ok?await r.json():null;console.log(n?.ok?h.green(`
|
|
336
354
|
\u2713 Approved
|
|
337
|
-
`):
|
|
355
|
+
`):h.red(`
|
|
338
356
|
\u2717 Approve failed (invalid socketId?)
|
|
339
|
-
`))}async function
|
|
340
|
-
`),process.exit(0));
|
|
357
|
+
`))}async function hc(e){let r=e[2],n=e.slice(3);switch(r){case"help":case"-h":case"--help":return zr(),!0;case"key":return await qu(n.includes("--new")),!0;case"otk":return await Xu(),!0;case"devices":return await Ju(),!0;case"browser":return await ai(n),!0;case"auto-approve":return await Qu(n[0]),!0;case"approve":return await zu(n[0]),!0;default:return!1}}var ci=process.argv[2];(ci==="version"||ci==="--version"||ci==="-v")&&(process.stdout.write(De()+`
|
|
358
|
+
`),process.exit(0));Mi();async function Zu(){let e=process.argv[2];if(await hc(process.argv))return;let r=process.argv.includes("--tray")||process.argv.includes("--auto")||process.argv.includes("--start"),n=["ui","tui","start","help","-h","--help"].includes(e);if(e&&!e.startsWith("--")&&!n&&!r){zr();return}r||Ur(),e==="ui"?await Za():e==="tui"?await Qr():e==="start"||process.argv.includes("--auto")?await tc():process.argv.includes("--tray")||process.argv.includes("--start")?await ec():process.stdin.isTTY?await sc():zr()}Zu().catch(console.error);
|