9remote 3.0.25 → 3.0.26

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.
Files changed (218) hide show
  1. package/dist/cli.cjs +97 -97
  2. package/dist/server.cjs +206 -203
  3. package/dist/ui/assets/index-QJ8XujYD.js +8 -0
  4. package/dist/ui/index.html +1 -1
  5. package/dist/web/404.html +1 -1
  6. package/dist/web/__next.__PAGE__.txt +2 -2
  7. package/dist/web/__next._full.txt +3 -3
  8. package/dist/web/__next._head.txt +1 -1
  9. package/dist/web/__next._index.txt +2 -2
  10. package/dist/web/__next._tree.txt +2 -2
  11. package/dist/web/_next/static/chunks/0fb7b532.2e7a08a3edb2d789.js +14 -0
  12. package/dist/web/_next/static/chunks/1750.2278b084cb33e817.js +1 -0
  13. package/dist/web/_next/static/chunks/5788-811d2ec2cd62d7dd.js +1 -0
  14. package/dist/web/_next/static/chunks/6552-1ddf0600fddfd553.js +1 -0
  15. package/dist/web/_next/static/chunks/app/_global-error/page-1105b0cfd58cfb3c.js +1 -0
  16. package/dist/web/_next/static/chunks/app/login/{page-5a8b059b59f831f9.js → page-b9bf23a0d85d4619.js} +1 -1
  17. package/dist/web/_next/static/chunks/app/{page-bd6ebc0a436fea70.js → page-2f7393a2e7449d58.js} +2 -2
  18. package/dist/web/_next/static/chunks/app/workspace/browse/page-1105b0cfd58cfb3c.js +1 -0
  19. package/dist/web/_next/static/chunks/app/workspace/editor/page-1105b0cfd58cfb3c.js +1 -0
  20. package/dist/web/_next/static/chunks/app/workspace/files/page-1105b0cfd58cfb3c.js +1 -0
  21. package/dist/web/_next/static/chunks/app/workspace/git/page-1105b0cfd58cfb3c.js +1 -0
  22. package/dist/web/_next/static/chunks/app/workspace/layout-42068ca26afe0bd6.js +15 -0
  23. package/dist/web/_next/static/chunks/app/workspace/mobile/page-1105b0cfd58cfb3c.js +1 -0
  24. package/dist/web/_next/static/chunks/app/workspace/page-1105b0cfd58cfb3c.js +1 -0
  25. package/dist/web/_next/static/chunks/app/workspace/remote/page-1105b0cfd58cfb3c.js +1 -0
  26. package/dist/web/_next/static/chunks/app/workspace/terminal/[sessionId]/page-1105b0cfd58cfb3c.js +1 -0
  27. package/dist/web/_next/static/chunks/app/workspace/workspaces/page-1105b0cfd58cfb3c.js +1 -0
  28. package/dist/web/_next/static/chunks/next/dist/client/components/builtin/app-error-1105b0cfd58cfb3c.js +1 -0
  29. package/dist/web/_next/static/chunks/next/dist/client/components/builtin/forbidden-1105b0cfd58cfb3c.js +1 -0
  30. package/dist/web/_next/static/chunks/next/dist/client/components/builtin/not-found-1105b0cfd58cfb3c.js +1 -0
  31. package/dist/web/_next/static/chunks/next/dist/client/components/builtin/unauthorized-1105b0cfd58cfb3c.js +1 -0
  32. package/dist/web/_next/static/chunks/webpack-6c9c0816af64073a.js +1 -0
  33. package/dist/web/_next/static/css/be666ba38225da3a.css +1 -0
  34. package/dist/web/_not-found/__next._full.txt +2 -2
  35. package/dist/web/_not-found/__next._head.txt +1 -1
  36. package/dist/web/_not-found/__next._index.txt +2 -2
  37. package/dist/web/_not-found/__next._not-found.__PAGE__.txt +1 -1
  38. package/dist/web/_not-found/__next._not-found.txt +1 -1
  39. package/dist/web/_not-found/__next._tree.txt +2 -2
  40. package/dist/web/_not-found.html +1 -1
  41. package/dist/web/_not-found.txt +2 -2
  42. package/dist/web/admin/__next._full.txt +2 -2
  43. package/dist/web/admin/__next._head.txt +1 -1
  44. package/dist/web/admin/__next._index.txt +2 -2
  45. package/dist/web/admin/__next._tree.txt +2 -2
  46. package/dist/web/admin/__next.admin.__PAGE__.txt +1 -1
  47. package/dist/web/admin/__next.admin.txt +1 -1
  48. package/dist/web/admin/admins/__next._full.txt +2 -2
  49. package/dist/web/admin/admins/__next._head.txt +1 -1
  50. package/dist/web/admin/admins/__next._index.txt +2 -2
  51. package/dist/web/admin/admins/__next._tree.txt +2 -2
  52. package/dist/web/admin/admins/__next.admin.admins.__PAGE__.txt +1 -1
  53. package/dist/web/admin/admins/__next.admin.admins.txt +1 -1
  54. package/dist/web/admin/admins/__next.admin.txt +1 -1
  55. package/dist/web/admin/admins.html +1 -1
  56. package/dist/web/admin/admins.txt +2 -2
  57. package/dist/web/admin/login/__next._full.txt +2 -2
  58. package/dist/web/admin/login/__next._head.txt +1 -1
  59. package/dist/web/admin/login/__next._index.txt +2 -2
  60. package/dist/web/admin/login/__next._tree.txt +2 -2
  61. package/dist/web/admin/login/__next.admin.login.__PAGE__.txt +1 -1
  62. package/dist/web/admin/login/__next.admin.login.txt +1 -1
  63. package/dist/web/admin/login/__next.admin.txt +1 -1
  64. package/dist/web/admin/login.html +1 -1
  65. package/dist/web/admin/login.txt +2 -2
  66. package/dist/web/admin/modes/__next._full.txt +2 -2
  67. package/dist/web/admin/modes/__next._head.txt +1 -1
  68. package/dist/web/admin/modes/__next._index.txt +2 -2
  69. package/dist/web/admin/modes/__next._tree.txt +2 -2
  70. package/dist/web/admin/modes/__next.admin.modes.__PAGE__.txt +1 -1
  71. package/dist/web/admin/modes/__next.admin.modes.txt +1 -1
  72. package/dist/web/admin/modes/__next.admin.txt +1 -1
  73. package/dist/web/admin/modes.html +1 -1
  74. package/dist/web/admin/modes.txt +2 -2
  75. package/dist/web/admin/ota/__next._full.txt +2 -2
  76. package/dist/web/admin/ota/__next._head.txt +1 -1
  77. package/dist/web/admin/ota/__next._index.txt +2 -2
  78. package/dist/web/admin/ota/__next._tree.txt +2 -2
  79. package/dist/web/admin/ota/__next.admin.ota.__PAGE__.txt +1 -1
  80. package/dist/web/admin/ota/__next.admin.ota.txt +1 -1
  81. package/dist/web/admin/ota/__next.admin.txt +1 -1
  82. package/dist/web/admin/ota.html +1 -1
  83. package/dist/web/admin/ota.txt +2 -2
  84. package/dist/web/admin/turn/__next._full.txt +2 -2
  85. package/dist/web/admin/turn/__next._head.txt +1 -1
  86. package/dist/web/admin/turn/__next._index.txt +2 -2
  87. package/dist/web/admin/turn/__next._tree.txt +2 -2
  88. package/dist/web/admin/turn/__next.admin.turn.__PAGE__.txt +1 -1
  89. package/dist/web/admin/turn/__next.admin.turn.txt +1 -1
  90. package/dist/web/admin/turn/__next.admin.txt +1 -1
  91. package/dist/web/admin/turn.html +1 -1
  92. package/dist/web/admin/turn.txt +2 -2
  93. package/dist/web/admin.html +1 -1
  94. package/dist/web/admin.txt +2 -2
  95. package/dist/web/dev/question/__next._full.txt +3 -3
  96. package/dist/web/dev/question/__next._head.txt +1 -1
  97. package/dist/web/dev/question/__next._index.txt +2 -2
  98. package/dist/web/dev/question/__next._tree.txt +2 -2
  99. package/dist/web/dev/question/__next.dev.question.__PAGE__.txt +2 -2
  100. package/dist/web/dev/question/__next.dev.question.txt +1 -1
  101. package/dist/web/dev/question/__next.dev.txt +1 -1
  102. package/dist/web/dev/question.html +1 -1
  103. package/dist/web/dev/question.txt +3 -3
  104. package/dist/web/index.html +1 -1
  105. package/dist/web/index.txt +3 -3
  106. package/dist/web/login/__next._full.txt +3 -3
  107. package/dist/web/login/__next._head.txt +1 -1
  108. package/dist/web/login/__next._index.txt +2 -2
  109. package/dist/web/login/__next._tree.txt +2 -2
  110. package/dist/web/login/__next.login.__PAGE__.txt +2 -2
  111. package/dist/web/login/__next.login.txt +1 -1
  112. package/dist/web/login.html +1 -1
  113. package/dist/web/login.txt +3 -3
  114. package/dist/web/workspace/__next._full.txt +3 -3
  115. package/dist/web/workspace/__next._head.txt +1 -1
  116. package/dist/web/workspace/__next._index.txt +2 -2
  117. package/dist/web/workspace/__next._tree.txt +2 -2
  118. package/dist/web/workspace/__next.workspace.__PAGE__.txt +1 -1
  119. package/dist/web/workspace/__next.workspace.txt +2 -2
  120. package/dist/web/workspace/browse/__next._full.txt +3 -3
  121. package/dist/web/workspace/browse/__next._head.txt +1 -1
  122. package/dist/web/workspace/browse/__next._index.txt +2 -2
  123. package/dist/web/workspace/browse/__next._tree.txt +2 -2
  124. package/dist/web/workspace/browse/__next.workspace.browse.__PAGE__.txt +1 -1
  125. package/dist/web/workspace/browse/__next.workspace.browse.txt +1 -1
  126. package/dist/web/workspace/browse/__next.workspace.txt +2 -2
  127. package/dist/web/workspace/browse.html +1 -1
  128. package/dist/web/workspace/browse.txt +3 -3
  129. package/dist/web/workspace/editor/__next._full.txt +3 -3
  130. package/dist/web/workspace/editor/__next._head.txt +1 -1
  131. package/dist/web/workspace/editor/__next._index.txt +2 -2
  132. package/dist/web/workspace/editor/__next._tree.txt +2 -2
  133. package/dist/web/workspace/editor/__next.workspace.editor.__PAGE__.txt +1 -1
  134. package/dist/web/workspace/editor/__next.workspace.editor.txt +1 -1
  135. package/dist/web/workspace/editor/__next.workspace.txt +2 -2
  136. package/dist/web/workspace/editor.html +1 -1
  137. package/dist/web/workspace/editor.txt +3 -3
  138. package/dist/web/workspace/files/__next._full.txt +3 -3
  139. package/dist/web/workspace/files/__next._head.txt +1 -1
  140. package/dist/web/workspace/files/__next._index.txt +2 -2
  141. package/dist/web/workspace/files/__next._tree.txt +2 -2
  142. package/dist/web/workspace/files/__next.workspace.files.__PAGE__.txt +1 -1
  143. package/dist/web/workspace/files/__next.workspace.files.txt +1 -1
  144. package/dist/web/workspace/files/__next.workspace.txt +2 -2
  145. package/dist/web/workspace/files.html +1 -1
  146. package/dist/web/workspace/files.txt +3 -3
  147. package/dist/web/workspace/git/__next._full.txt +3 -3
  148. package/dist/web/workspace/git/__next._head.txt +1 -1
  149. package/dist/web/workspace/git/__next._index.txt +2 -2
  150. package/dist/web/workspace/git/__next._tree.txt +2 -2
  151. package/dist/web/workspace/git/__next.workspace.git.__PAGE__.txt +1 -1
  152. package/dist/web/workspace/git/__next.workspace.git.txt +1 -1
  153. package/dist/web/workspace/git/__next.workspace.txt +2 -2
  154. package/dist/web/workspace/git.html +1 -1
  155. package/dist/web/workspace/git.txt +3 -3
  156. package/dist/web/workspace/mobile/__next._full.txt +3 -3
  157. package/dist/web/workspace/mobile/__next._head.txt +1 -1
  158. package/dist/web/workspace/mobile/__next._index.txt +2 -2
  159. package/dist/web/workspace/mobile/__next._tree.txt +2 -2
  160. package/dist/web/workspace/mobile/__next.workspace.mobile.__PAGE__.txt +1 -1
  161. package/dist/web/workspace/mobile/__next.workspace.mobile.txt +1 -1
  162. package/dist/web/workspace/mobile/__next.workspace.txt +2 -2
  163. package/dist/web/workspace/mobile.html +1 -1
  164. package/dist/web/workspace/mobile.txt +3 -3
  165. package/dist/web/workspace/remote/__next._full.txt +3 -3
  166. package/dist/web/workspace/remote/__next._head.txt +1 -1
  167. package/dist/web/workspace/remote/__next._index.txt +2 -2
  168. package/dist/web/workspace/remote/__next._tree.txt +2 -2
  169. package/dist/web/workspace/remote/__next.workspace.remote.__PAGE__.txt +1 -1
  170. package/dist/web/workspace/remote/__next.workspace.remote.txt +1 -1
  171. package/dist/web/workspace/remote/__next.workspace.txt +2 -2
  172. package/dist/web/workspace/remote.html +1 -1
  173. package/dist/web/workspace/remote.txt +3 -3
  174. package/dist/web/workspace/terminal/default/__next._full.txt +3 -3
  175. package/dist/web/workspace/terminal/default/__next._head.txt +1 -1
  176. package/dist/web/workspace/terminal/default/__next._index.txt +2 -2
  177. package/dist/web/workspace/terminal/default/__next._tree.txt +2 -2
  178. package/dist/web/workspace/terminal/default/__next.workspace.terminal.$d$sessionId.__PAGE__.txt +1 -1
  179. package/dist/web/workspace/terminal/default/__next.workspace.terminal.$d$sessionId.txt +1 -1
  180. package/dist/web/workspace/terminal/default/__next.workspace.terminal.txt +1 -1
  181. package/dist/web/workspace/terminal/default/__next.workspace.txt +2 -2
  182. package/dist/web/workspace/terminal/default.html +1 -1
  183. package/dist/web/workspace/terminal/default.txt +3 -3
  184. package/dist/web/workspace/workspaces/__next._full.txt +3 -3
  185. package/dist/web/workspace/workspaces/__next._head.txt +1 -1
  186. package/dist/web/workspace/workspaces/__next._index.txt +2 -2
  187. package/dist/web/workspace/workspaces/__next._tree.txt +2 -2
  188. package/dist/web/workspace/workspaces/__next.workspace.txt +2 -2
  189. package/dist/web/workspace/workspaces/__next.workspace.workspaces.__PAGE__.txt +1 -1
  190. package/dist/web/workspace/workspaces/__next.workspace.workspaces.txt +1 -1
  191. package/dist/web/workspace/workspaces.html +1 -1
  192. package/dist/web/workspace/workspaces.txt +3 -3
  193. package/dist/web/workspace.html +1 -1
  194. package/dist/web/workspace.txt +3 -3
  195. package/package.json +1 -1
  196. package/dist/ui/assets/index-BOOiLX1B.js +0 -8
  197. package/dist/web/_next/static/chunks/1750.0aa6aeecbaace8cb.js +0 -1
  198. package/dist/web/_next/static/chunks/5788-2151395b4db264e7.js +0 -1
  199. package/dist/web/_next/static/chunks/6552-26435ba7e21d8241.js +0 -1
  200. package/dist/web/_next/static/chunks/app/_global-error/page-5bd6526483106080.js +0 -1
  201. package/dist/web/_next/static/chunks/app/workspace/browse/page-5bd6526483106080.js +0 -1
  202. package/dist/web/_next/static/chunks/app/workspace/editor/page-5bd6526483106080.js +0 -1
  203. package/dist/web/_next/static/chunks/app/workspace/files/page-5bd6526483106080.js +0 -1
  204. package/dist/web/_next/static/chunks/app/workspace/git/page-5bd6526483106080.js +0 -1
  205. package/dist/web/_next/static/chunks/app/workspace/layout-4b7802a47d5a41d9.js +0 -14
  206. package/dist/web/_next/static/chunks/app/workspace/mobile/page-5bd6526483106080.js +0 -1
  207. package/dist/web/_next/static/chunks/app/workspace/page-5bd6526483106080.js +0 -1
  208. package/dist/web/_next/static/chunks/app/workspace/remote/page-5bd6526483106080.js +0 -1
  209. package/dist/web/_next/static/chunks/app/workspace/terminal/[sessionId]/page-5bd6526483106080.js +0 -1
  210. package/dist/web/_next/static/chunks/app/workspace/workspaces/page-5bd6526483106080.js +0 -1
  211. package/dist/web/_next/static/chunks/next/dist/client/components/builtin/app-error-5bd6526483106080.js +0 -1
  212. package/dist/web/_next/static/chunks/next/dist/client/components/builtin/forbidden-5bd6526483106080.js +0 -1
  213. package/dist/web/_next/static/chunks/next/dist/client/components/builtin/not-found-5bd6526483106080.js +0 -1
  214. package/dist/web/_next/static/chunks/next/dist/client/components/builtin/unauthorized-5bd6526483106080.js +0 -1
  215. package/dist/web/_next/static/chunks/webpack-34aa84f85d3087cb.js +0 -1
  216. package/dist/web/_next/static/css/99ebcb780b6d29f4.css +0 -1
  217. /package/dist/web/_next/static/{doBLJdxjaGN7ToTue-RM0 → 3Ub2UottdyLvMDIkOLKKI}/_buildManifest.js +0 -0
  218. /package/dist/web/_next/static/{doBLJdxjaGN7ToTue-RM0 → 3Ub2UottdyLvMDIkOLKKI}/_ssgManifest.js +0 -0
package/dist/cli.cjs CHANGED
@@ -1,29 +1,54 @@
1
1
  #!/usr/bin/env node
2
2
  const __importMetaUrl = require('url').pathToFileURL(__filename).href;
3
- var Xa=Object.create;var Yr=Object.defineProperty;var Qa=Object.getOwnPropertyDescriptor;var qa=Object.getOwnPropertyNames;var Ja=Object.getPrototypeOf,Za=Object.prototype.hasOwnProperty;var za=(e,t)=>()=>(e&&(t=e(e=0)),t);var ge=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ec=(e,t)=>{for(var r in t)Yr(e,r,{get:t[r],enumerable:!0})},tc=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of qa(t))!Za.call(e,n)&&n!==r&&Yr(e,n,{get:()=>t[n],enumerable:!(o=Qa(t,n))||o.enumerable});return e};var R=(e,t,r)=>(r=e!=null?Xa(Ja(e)):{},tc(t||!e||!e.__esModule?Yr(r,"default",{value:e,enumerable:!0}):r,e));var ai=ge((On,qr)=>{(function(e,t){typeof On=="object"&&typeof qr=="object"?qr.exports=t(require("child_process"),require("crypto")):typeof define=="function"&&define.amd?define(["child_process","crypto"],t):typeof On=="object"?On["electron-machine-id"]=t(require("child_process"),require("crypto")):e["electron-machine-id"]=t(e.child_process,e.crypto)})(On,function(e,t){return(function(r){function o(i){if(n[i])return n[i].exports;var s=n[i]={exports:{},id:i,loaded:!1};return r[i].call(s.exports,s,s.exports,o),s.loaded=!0,s.exports}var n={};return o.m=r,o.c=n,o.p="",o(0)})([function(r,o,n){r.exports=n(34)},function(r,o,n){var i=n(29)("wks"),s=n(33),a=n(2).Symbol,c=typeof a=="function",l=r.exports=function(u){return i[u]||(i[u]=c&&a[u]||(c?a:s)("Symbol."+u))};l.store=i},function(r,o){var n=r.exports=typeof window<"u"&&window.Math==Math?window:typeof self<"u"&&self.Math==Math?self:Function("return this")();typeof __g=="number"&&(__g=n)},function(r,o,n){var i=n(9);r.exports=function(s){if(!i(s))throw TypeError(s+" is not an object!");return s}},function(r,o,n){r.exports=!n(24)(function(){return Object.defineProperty({},"a",{get:function(){return 7}}).a!=7})},function(r,o,n){var i=n(12),s=n(17);r.exports=n(4)?function(a,c,l){return i.f(a,c,s(1,l))}:function(a,c,l){return a[c]=l,a}},function(r,o){var n=r.exports={version:"2.4.0"};typeof __e=="number"&&(__e=n)},function(r,o,n){var i=n(14);r.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,u){return s.call(a,l,u)};case 3:return function(l,u,f){return s.call(a,l,u,f)}}return function(){return s.apply(a,arguments)}}},function(r,o){var n={}.hasOwnProperty;r.exports=function(i,s){return n.call(i,s)}},function(r,o){r.exports=function(n){return typeof n=="object"?n!==null:typeof n=="function"}},function(r,o){r.exports={}},function(r,o){var n={}.toString;r.exports=function(i){return n.call(i).slice(8,-1)}},function(r,o,n){var i=n(3),s=n(26),a=n(32),c=Object.defineProperty;o.f=n(4)?Object.defineProperty:function(l,u,f){if(i(l),u=a(u,!0),i(f),s)try{return c(l,u,f)}catch{}if("get"in f||"set"in f)throw TypeError("Accessors not supported!");return"value"in f&&(l[u]=f.value),l}},function(r,o,n){var i=n(42),s=n(15);r.exports=function(a){return i(s(a))}},function(r,o){r.exports=function(n){if(typeof n!="function")throw TypeError(n+" is not a function!");return n}},function(r,o){r.exports=function(n){if(n==null)throw TypeError("Can't call method on "+n);return n}},function(r,o,n){var i=n(9),s=n(2).document,a=i(s)&&i(s.createElement);r.exports=function(c){return a?s.createElement(c):{}}},function(r,o){r.exports=function(n,i){return{enumerable:!(1&n),configurable:!(2&n),writable:!(4&n),value:i}}},function(r,o,n){var i=n(12).f,s=n(8),a=n(1)("toStringTag");r.exports=function(c,l,u){c&&!s(c=u?c:c.prototype,a)&&i(c,a,{configurable:!0,value:l})}},function(r,o,n){var i=n(29)("keys"),s=n(33);r.exports=function(a){return i[a]||(i[a]=s(a))}},function(r,o){var n=Math.ceil,i=Math.floor;r.exports=function(s){return isNaN(s=+s)?0:(s>0?i:n)(s)}},function(r,o,n){var i=n(11),s=n(1)("toStringTag"),a=i((function(){return arguments})())=="Arguments",c=function(l,u){try{return l[u]}catch{}};r.exports=function(l){var u,f,p;return l===void 0?"Undefined":l===null?"Null":typeof(f=c(u=Object(l),s))=="string"?f:a?i(u):(p=i(u))=="Object"&&typeof u.callee=="function"?"Arguments":p}},function(r,o){r.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(r,o,n){var i=n(2),s=n(6),a=n(7),c=n(5),l="prototype",u=function(f,p,d){var h,w,E,O=f&u.F,T=f&u.G,A=f&u.S,k=f&u.P,C=f&u.B,g=f&u.W,b=T?s:s[p]||(s[p]={}),L=b[l],$=T?i:A?i[p]:(i[p]||{})[l];T&&(d=p);for(h in d)w=!O&&$&&$[h]!==void 0,w&&h in b||(E=w?$[h]:d[h],b[h]=T&&typeof $[h]!="function"?d[h]:C&&w?a(E,i):g&&$[h]==E?(function(Y){var se=function(Ee,ae,Be){if(this instanceof Y){switch(arguments.length){case 0:return new Y;case 1:return new Y(Ee);case 2:return new Y(Ee,ae)}return new Y(Ee,ae,Be)}return Y.apply(this,arguments)};return se[l]=Y[l],se})(E):k&&typeof E=="function"?a(Function.call,E):E,k&&((b.virtual||(b.virtual={}))[h]=E,f&u.R&&L&&!L[h]&&c(L,h,E)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,r.exports=u},function(r,o){r.exports=function(n){try{return!!n()}catch{return!0}}},function(r,o,n){r.exports=n(2).document&&document.documentElement},function(r,o,n){r.exports=!n(4)&&!n(24)(function(){return Object.defineProperty(n(16)("div"),"a",{get:function(){return 7}}).a!=7})},function(r,o,n){"use strict";var i=n(28),s=n(23),a=n(57),c=n(5),l=n(8),u=n(10),f=n(45),p=n(18),d=n(52),h=n(1)("iterator"),w=!([].keys&&"next"in[].keys()),E="@@iterator",O="keys",T="values",A=function(){return this};r.exports=function(k,C,g,b,L,$,Y){f(g,C,b);var se,Ee,ae,Be=function(v){if(!w&&v in ce)return ce[v];switch(v){case O:return function(){return new g(this,v)};case T:return function(){return new g(this,v)}}return function(){return new g(this,v)}},Nt=C+" Iterator",wt=L==T,Tn=!1,ce=k.prototype,et=ce[h]||ce[E]||L&&ce[L],pe=et||Be(L),bn=L?wt?Be("entries"):pe:void 0,y=C=="Array"&&ce.entries||et;if(y&&(ae=d(y.call(new k)),ae!==Object.prototype&&(p(ae,Nt,!0),i||l(ae,h)||c(ae,h,A))),wt&&et&&et.name!==T&&(Tn=!0,pe=function(){return et.call(this)}),i&&!Y||!w&&!Tn&&ce[h]||c(ce,h,pe),u[C]=pe,u[Nt]=A,L)if(se={values:wt?pe:Be(T),keys:$?pe:Be(O),entries:bn},Y)for(Ee in se)Ee in ce||a(ce,Ee,se[Ee]);else s(s.P+s.F*(w||Tn),C,se);return se}},function(r,o){r.exports=!0},function(r,o,n){var i=n(2),s="__core-js_shared__",a=i[s]||(i[s]={});r.exports=function(c){return a[c]||(a[c]={})}},function(r,o,n){var i,s,a,c=n(7),l=n(41),u=n(25),f=n(16),p=n(2),d=p.process,h=p.setImmediate,w=p.clearImmediate,E=p.MessageChannel,O=0,T={},A="onreadystatechange",k=function(){var g=+this;if(T.hasOwnProperty(g)){var b=T[g];delete T[g],b()}},C=function(g){k.call(g.data)};h&&w||(h=function(g){for(var b=[],L=1;arguments.length>L;)b.push(arguments[L++]);return T[++O]=function(){l(typeof g=="function"?g:Function(g),b)},i(O),O},w=function(g){delete T[g]},n(11)(d)=="process"?i=function(g){d.nextTick(c(k,g,1))}:E?(s=new E,a=s.port2,s.port1.onmessage=C,i=c(a.postMessage,a,1)):p.addEventListener&&typeof postMessage=="function"&&!p.importScripts?(i=function(g){p.postMessage(g+"","*")},p.addEventListener("message",C,!1)):i=A in f("script")?function(g){u.appendChild(f("script"))[A]=function(){u.removeChild(this),k.call(g)}}:function(g){setTimeout(c(k,g,1),0)}),r.exports={set:h,clear:w}},function(r,o,n){var i=n(20),s=Math.min;r.exports=function(a){return a>0?s(i(a),9007199254740991):0}},function(r,o,n){var i=n(9);r.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(r,o){var n=0,i=Math.random();r.exports=function(s){return"Symbol(".concat(s===void 0?"":s,")_",(++n+i).toString(36))}},function(r,o,n){"use strict";function i(A){return A&&A.__esModule?A:{default:A}}function s(){return process.platform!=="win32"?"":process.arch==="ia32"&&process.env.hasOwnProperty("PROCESSOR_ARCHITEW6432")?"mixed":"native"}function a(A){return(0,h.createHash)("sha256").update(A).digest("hex")}function c(A){switch(E){case"darwin":return A.split("IOPlatformUUID")[1].split(`
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)(T[E]).toString());return A?k:a(k)}function u(A){return new p.default(function(k,C){return(0,d.exec)(T[E],{},function(g,b,L){if(g)return C(new Error("Error while obtaining machine id: "+g.stack));var $=c(b.toString());return k(A?$:a($))})})}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"},T={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,T){var A,k,C,g,b=T?function(){return h}:u(h),L=i(E,O,w?2:1),$=0;if(typeof b!="function")throw TypeError(h+" is not iterable!");if(a(b)){for(A=l(h.length);A>$;$++)if(g=w?L(c(k=h[$])[0],k[1]):L(h[$]),g===f||g===p)return g}else for(C=b.call(h);!(k=C.next()).done;)if(g=s(C,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 T,A;for(u&&(T=c.domain)&&T.exit();f;){A=f.fn,f=f.next;try{A()}catch(k){throw f?d():p=void 0,k}}p=void 0,T&&T.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(T){var A={fn:T,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)),T=n(30).set,A=n(48)(),k="Promise",C=l.TypeError,b=l.process,g=l[k],b=l.process,L=f(b)=="process",$=function(){},Y=!!(function(){try{var y=g.resolve(1),v=(y.constructor={})[n(1)("species")]=function(x){x($,$)};return(L||typeof PromiseRejectionEvent=="function")&&y.then($)instanceof v}catch{}})(),se=function(y,v){return y===v||y===g&&v===a},Ee=function(y){var v;return!(!d(y)||typeof(v=y.then)!="function")&&v},ae=function(y){return se(g,y)?new Be(y):new s(y)},Be=s=function(y){var v,x;this.promise=new y(function(D,ee){if(v!==void 0||x!==void 0)throw C("Bad Promise constructor");v=D,x=ee}),this.resolve=h(v),this.reject=h(x)},Nt=function(y){try{y()}catch(v){return{error:v}}},wt=function(y,v){if(!y._n){y._n=!0;var x=y._c;A(function(){for(var D=y._v,ee=y._s==1,vt=0,Dt=function(tt){var Re,ar,An=ee?tt.ok:tt.fail,xn=tt.resolve,Bt=tt.reject,cr=tt.domain;try{An?(ee||(y._h==2&&et(y),y._h=1),An===!0?Re=D:(cr&&cr.enter(),Re=An(D),cr&&cr.exit()),Re===tt.promise?Bt(C("Promise-chain cycle")):(ar=Ee(Re))?ar.call(Re,xn,Bt):xn(Re)):Bt(D)}catch(Ya){Bt(Ya)}};x.length>vt;)Dt(x[vt++]);y._c=[],y._n=!1,v&&!y._h&&Tn(y)})}},Tn=function(y){T.call(l,function(){var v,x,D,ee=y._v;if(ce(y)&&(v=Nt(function(){L?b.emit("unhandledRejection",ee,y):(x=l.onunhandledrejection)?x({promise:y,reason:ee}):(D=l.console)&&D.error&&D.error("Unhandled promise rejection",ee)}),y._h=L||ce(y)?2:1),y._a=void 0,v)throw v.error})},ce=function(y){if(y._h==1)return!1;for(var v,x=y._a||y._c,D=0;x.length>D;)if(v=x[D++],v.fail||!ce(v.promise))return!1;return!0},et=function(y){T.call(l,function(){var v;L?b.emit("rejectionHandled",y):(v=l.onrejectionhandled)&&v({promise:y,reason:y._v})})},pe=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()),wt(v,!0))},bn=function(y){var v,x=this;if(!x._d){x._d=!0,x=x._w||x;try{if(x===y)throw C("Promise can't be resolved itself");(v=Ee(y))?A(function(){var D={_w:x,_d:!1};try{v.call(y,u(bn,D,1),u(pe,D,1))}catch(ee){pe.call(D,ee)}}):(x._v=y,x._s=1,wt(x,!1))}catch(D){pe.call({_w:x,_d:!1},D)}}};Y||(g=function(y){w(this,g,k,"_h"),h(y),i.call(this);try{y(u(bn,this,1),u(pe,this,1))}catch(v){pe.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 x=ae(O(this,g));return x.ok=typeof y!="function"||y,x.fail=typeof v=="function"&&v,x.domain=L?b.domain:void 0,this._c.push(x),this._a&&this._a.push(x),this._s&&wt(this,!1),x.promise},catch:function(y){return this.then(void 0,y)}}),Be=function(){var y=new i;this.promise=y,this.resolve=u(bn,y,1),this.reject=u(pe,y,1)}),p(p.G+p.W+p.F*!Y,{Promise:g}),n(18)(g,k),n(59)(k),a=n(6)[k],p(p.S+p.F*!Y,k,{reject:function(y){var v=ae(this),x=v.reject;return x(y),v.promise}}),p(p.S+p.F*(c||!Y),k,{resolve:function(y){if(y instanceof g&&se(y.constructor,this))return y;var v=ae(this),x=v.resolve;return x(y),v.promise}}),p(p.S+p.F*!(Y&&n(46)(function(y){g.all(y).catch($)})),k,{all:function(y){var v=this,x=ae(v),D=x.resolve,ee=x.reject,vt=Nt(function(){var Dt=[],tt=0,Re=1;E(y,!1,function(ar){var An=tt++,xn=!1;Dt.push(void 0),Re++,v.resolve(ar).then(function(Bt){xn||(xn=!0,Dt[An]=Bt,--Re||D(Dt))},ee)}),--Re||D(Dt)});return vt&&ee(vt.error),x.promise},race:function(y){var v=this,x=ae(v),D=x.reject,ee=Nt(function(){E(y,!1,function(vt){v.resolve(vt).then(x.resolve,D)})});return ee&&D(ee.error),x.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 Xs={};ec(Xs,{initTray:()=>zn,killTray:()=>kt,openBrowser:()=>Pt,showTrayNotification:()=>_o,updateTrayTooltip:()=>mn});function Fs(e){for(let t of e)try{if(pn.default.existsSync(t))return t}catch{}return null}function Ml(){if(process.platform==="win32"){for(let e of Gs)try{if(pn.default.existsSync(e))return pn.default.readFileSync(e).toString("base64")}catch{}return Us}return Us}function Cl(){if(process.env.NREMOTE_DESKTOP)return!1;let e=process.platform;return!(!["darwin","win32","linux"].includes(e)||e==="linux"&&!process.env.DISPLAY)}function Vs(){let{port:e,tunnelUrl:t,running:r}=dn,o=r?t?"Tunnel ON":"Local only":"Idle",n=`http://localhost:${e}`;return`9Remote \u2022 ${o}
3
+ var qa=Object.create;var Yr=Object.defineProperty;var Ja=Object.getOwnPropertyDescriptor;var Za=Object.getOwnPropertyNames;var za=Object.getPrototypeOf,ec=Object.prototype.hasOwnProperty;var tc=(e,t)=>()=>(e&&(t=e(e=0)),t);var ge=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),nc=(e,t)=>{for(var r in t)Yr(e,r,{get:t[r],enumerable:!0})},rc=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Za(t))!ec.call(e,n)&&n!==r&&Yr(e,n,{get:()=>t[n],enumerable:!(o=Ja(t,n))||o.enumerable});return e};var R=(e,t,r)=>(r=e!=null?qa(za(e)):{},rc(t||!e||!e.__esModule?Yr(r,"default",{value:e,enumerable:!0}):r,e));var ci=ge((In,qr)=>{(function(e,t){typeof In=="object"&&typeof qr=="object"?qr.exports=t(require("child_process"),require("crypto")):typeof define=="function"&&define.amd?define(["child_process","crypto"],t):typeof In=="object"?In["electron-machine-id"]=t(require("child_process"),require("crypto")):e["electron-machine-id"]=t(e.child_process,e.crypto)})(In,function(e,t){return(function(r){function o(i){if(n[i])return n[i].exports;var s=n[i]={exports:{},id:i,loaded:!1};return r[i].call(s.exports,s,s.exports,o),s.loaded=!0,s.exports}var n={};return o.m=r,o.c=n,o.p="",o(0)})([function(r,o,n){r.exports=n(34)},function(r,o,n){var i=n(29)("wks"),s=n(33),a=n(2).Symbol,c=typeof a=="function",l=r.exports=function(u){return i[u]||(i[u]=c&&a[u]||(c?a:s)("Symbol."+u))};l.store=i},function(r,o){var n=r.exports=typeof window<"u"&&window.Math==Math?window:typeof self<"u"&&self.Math==Math?self:Function("return this")();typeof __g=="number"&&(__g=n)},function(r,o,n){var i=n(9);r.exports=function(s){if(!i(s))throw TypeError(s+" is not an object!");return s}},function(r,o,n){r.exports=!n(24)(function(){return Object.defineProperty({},"a",{get:function(){return 7}}).a!=7})},function(r,o,n){var i=n(12),s=n(17);r.exports=n(4)?function(a,c,l){return i.f(a,c,s(1,l))}:function(a,c,l){return a[c]=l,a}},function(r,o){var n=r.exports={version:"2.4.0"};typeof __e=="number"&&(__e=n)},function(r,o,n){var i=n(14);r.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,u){return s.call(a,l,u)};case 3:return function(l,u,f){return s.call(a,l,u,f)}}return function(){return s.apply(a,arguments)}}},function(r,o){var n={}.hasOwnProperty;r.exports=function(i,s){return n.call(i,s)}},function(r,o){r.exports=function(n){return typeof n=="object"?n!==null:typeof n=="function"}},function(r,o){r.exports={}},function(r,o){var n={}.toString;r.exports=function(i){return n.call(i).slice(8,-1)}},function(r,o,n){var i=n(3),s=n(26),a=n(32),c=Object.defineProperty;o.f=n(4)?Object.defineProperty:function(l,u,f){if(i(l),u=a(u,!0),i(f),s)try{return c(l,u,f)}catch{}if("get"in f||"set"in f)throw TypeError("Accessors not supported!");return"value"in f&&(l[u]=f.value),l}},function(r,o,n){var i=n(42),s=n(15);r.exports=function(a){return i(s(a))}},function(r,o){r.exports=function(n){if(typeof n!="function")throw TypeError(n+" is not a function!");return n}},function(r,o){r.exports=function(n){if(n==null)throw TypeError("Can't call method on "+n);return n}},function(r,o,n){var i=n(9),s=n(2).document,a=i(s)&&i(s.createElement);r.exports=function(c){return a?s.createElement(c):{}}},function(r,o){r.exports=function(n,i){return{enumerable:!(1&n),configurable:!(2&n),writable:!(4&n),value:i}}},function(r,o,n){var i=n(12).f,s=n(8),a=n(1)("toStringTag");r.exports=function(c,l,u){c&&!s(c=u?c:c.prototype,a)&&i(c,a,{configurable:!0,value:l})}},function(r,o,n){var i=n(29)("keys"),s=n(33);r.exports=function(a){return i[a]||(i[a]=s(a))}},function(r,o){var n=Math.ceil,i=Math.floor;r.exports=function(s){return isNaN(s=+s)?0:(s>0?i:n)(s)}},function(r,o,n){var i=n(11),s=n(1)("toStringTag"),a=i((function(){return arguments})())=="Arguments",c=function(l,u){try{return l[u]}catch{}};r.exports=function(l){var u,f,p;return l===void 0?"Undefined":l===null?"Null":typeof(f=c(u=Object(l),s))=="string"?f:a?i(u):(p=i(u))=="Object"&&typeof u.callee=="function"?"Arguments":p}},function(r,o){r.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(r,o,n){var i=n(2),s=n(6),a=n(7),c=n(5),l="prototype",u=function(f,p,d){var h,w,E,O=f&u.F,T=f&u.G,A=f&u.S,k=f&u.P,M=f&u.B,g=f&u.W,b=T?s:s[p]||(s[p]={}),_=b[l],$=T?i:A?i[p]:(i[p]||{})[l];T&&(d=p);for(h in d)w=!O&&$&&$[h]!==void 0,w&&h in b||(E=w?$[h]:d[h],b[h]=T&&typeof $[h]!="function"?d[h]:M&&w?a(E,i):g&&$[h]==E?(function(X){var se=function(Ee,ae,Be){if(this instanceof X){switch(arguments.length){case 0:return new X;case 1:return new X(Ee);case 2:return new X(Ee,ae)}return new X(Ee,ae,Be)}return X.apply(this,arguments)};return se[l]=X[l],se})(E):k&&typeof E=="function"?a(Function.call,E):E,k&&((b.virtual||(b.virtual={}))[h]=E,f&u.R&&_&&!_[h]&&c(_,h,E)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,r.exports=u},function(r,o){r.exports=function(n){try{return!!n()}catch{return!0}}},function(r,o,n){r.exports=n(2).document&&document.documentElement},function(r,o,n){r.exports=!n(4)&&!n(24)(function(){return Object.defineProperty(n(16)("div"),"a",{get:function(){return 7}}).a!=7})},function(r,o,n){"use strict";var i=n(28),s=n(23),a=n(57),c=n(5),l=n(8),u=n(10),f=n(45),p=n(18),d=n(52),h=n(1)("iterator"),w=!([].keys&&"next"in[].keys()),E="@@iterator",O="keys",T="values",A=function(){return this};r.exports=function(k,M,g,b,_,$,X){f(g,M,b);var se,Ee,ae,Be=function(v){if(!w&&v in ce)return ce[v];switch(v){case O:return function(){return new g(this,v)};case T:return function(){return new g(this,v)}}return function(){return new g(this,v)}},Bt=M+" Iterator",vt=_==T,bn=!1,ce=k.prototype,tt=ce[h]||ce[E]||_&&ce[_],pe=tt||Be(_),An=_?vt?Be("entries"):pe:void 0,y=M=="Array"&&ce.entries||tt;if(y&&(ae=d(y.call(new k)),ae!==Object.prototype&&(p(ae,Bt,!0),i||l(ae,h)||c(ae,h,A))),vt&&tt&&tt.name!==T&&(bn=!0,pe=function(){return tt.call(this)}),i&&!X||!w&&!bn&&ce[h]||c(ce,h,pe),u[M]=pe,u[Bt]=A,_)if(se={values:vt?pe:Be(T),keys:$?pe:Be(O),entries:An},X)for(Ee in se)Ee in ce||a(ce,Ee,se[Ee]);else s(s.P+s.F*(w||bn),M,se);return se}},function(r,o){r.exports=!0},function(r,o,n){var i=n(2),s="__core-js_shared__",a=i[s]||(i[s]={});r.exports=function(c){return a[c]||(a[c]={})}},function(r,o,n){var i,s,a,c=n(7),l=n(41),u=n(25),f=n(16),p=n(2),d=p.process,h=p.setImmediate,w=p.clearImmediate,E=p.MessageChannel,O=0,T={},A="onreadystatechange",k=function(){var g=+this;if(T.hasOwnProperty(g)){var b=T[g];delete T[g],b()}},M=function(g){k.call(g.data)};h&&w||(h=function(g){for(var b=[],_=1;arguments.length>_;)b.push(arguments[_++]);return T[++O]=function(){l(typeof g=="function"?g:Function(g),b)},i(O),O},w=function(g){delete T[g]},n(11)(d)=="process"?i=function(g){d.nextTick(c(k,g,1))}:E?(s=new E,a=s.port2,s.port1.onmessage=M,i=c(a.postMessage,a,1)):p.addEventListener&&typeof postMessage=="function"&&!p.importScripts?(i=function(g){p.postMessage(g+"","*")},p.addEventListener("message",M,!1)):i=A in f("script")?function(g){u.appendChild(f("script"))[A]=function(){u.removeChild(this),k.call(g)}}:function(g){setTimeout(c(k,g,1),0)}),r.exports={set:h,clear:w}},function(r,o,n){var i=n(20),s=Math.min;r.exports=function(a){return a>0?s(i(a),9007199254740991):0}},function(r,o,n){var i=n(9);r.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(r,o){var n=0,i=Math.random();r.exports=function(s){return"Symbol(".concat(s===void 0?"":s,")_",(++n+i).toString(36))}},function(r,o,n){"use strict";function i(A){return A&&A.__esModule?A:{default:A}}function s(){return process.platform!=="win32"?"":process.arch==="ia32"&&process.env.hasOwnProperty("PROCESSOR_ARCHITEW6432")?"mixed":"native"}function a(A){return(0,h.createHash)("sha256").update(A).digest("hex")}function c(A){switch(E){case"darwin":return A.split("IOPlatformUUID")[1].split(`
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)(T[E]).toString());return A?k:a(k)}function u(A){return new p.default(function(k,M){return(0,d.exec)(T[E],{},function(g,b,_){if(g)return M(new Error("Error while obtaining machine id: "+g.stack));var $=c(b.toString());return k(A?$:a($))})})}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"},T={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,T){var A,k,M,g,b=T?function(){return h}:u(h),_=i(E,O,w?2:1),$=0;if(typeof b!="function")throw TypeError(h+" is not iterable!");if(a(b)){for(A=l(h.length);A>$;$++)if(g=w?_(c(k=h[$])[0],k[1]):_(h[$]),g===f||g===p)return g}else for(M=b.call(h);!(k=M.next()).done;)if(g=s(M,_,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 T,A;for(u&&(T=c.domain)&&T.exit();f;){A=f.fn,f=f.next;try{A()}catch(k){throw f?d():p=void 0,k}}p=void 0,T&&T.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(T){var A={fn:T,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)),T=n(30).set,A=n(48)(),k="Promise",M=l.TypeError,b=l.process,g=l[k],b=l.process,_=f(b)=="process",$=function(){},X=!!(function(){try{var y=g.resolve(1),v=(y.constructor={})[n(1)("species")]=function(x){x($,$)};return(_||typeof PromiseRejectionEvent=="function")&&y.then($)instanceof v}catch{}})(),se=function(y,v){return y===v||y===g&&v===a},Ee=function(y){var v;return!(!d(y)||typeof(v=y.then)!="function")&&v},ae=function(y){return se(g,y)?new Be(y):new s(y)},Be=s=function(y){var v,x;this.promise=new y(function(D,te){if(v!==void 0||x!==void 0)throw M("Bad Promise constructor");v=D,x=te}),this.resolve=h(v),this.reject=h(x)},Bt=function(y){try{y()}catch(v){return{error:v}}},vt=function(y,v){if(!y._n){y._n=!0;var x=y._c;A(function(){for(var D=y._v,te=y._s==1,Et=0,Ut=function(nt){var Re,cr,xn=te?nt.ok:nt.fail,Rn=nt.resolve,Ft=nt.reject,lr=nt.domain;try{xn?(te||(y._h==2&&tt(y),y._h=1),xn===!0?Re=D:(lr&&lr.enter(),Re=xn(D),lr&&lr.exit()),Re===nt.promise?Ft(M("Promise-chain cycle")):(cr=Ee(Re))?cr.call(Re,Rn,Ft):Rn(Re)):Ft(D)}catch(Qa){Ft(Qa)}};x.length>Et;)Ut(x[Et++]);y._c=[],y._n=!1,v&&!y._h&&bn(y)})}},bn=function(y){T.call(l,function(){var v,x,D,te=y._v;if(ce(y)&&(v=Bt(function(){_?b.emit("unhandledRejection",te,y):(x=l.onunhandledrejection)?x({promise:y,reason:te}):(D=l.console)&&D.error&&D.error("Unhandled promise rejection",te)}),y._h=_||ce(y)?2:1),y._a=void 0,v)throw v.error})},ce=function(y){if(y._h==1)return!1;for(var v,x=y._a||y._c,D=0;x.length>D;)if(v=x[D++],v.fail||!ce(v.promise))return!1;return!0},tt=function(y){T.call(l,function(){var v;_?b.emit("rejectionHandled",y):(v=l.onrejectionhandled)&&v({promise:y,reason:y._v})})},pe=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()),vt(v,!0))},An=function(y){var v,x=this;if(!x._d){x._d=!0,x=x._w||x;try{if(x===y)throw M("Promise can't be resolved itself");(v=Ee(y))?A(function(){var D={_w:x,_d:!1};try{v.call(y,u(An,D,1),u(pe,D,1))}catch(te){pe.call(D,te)}}):(x._v=y,x._s=1,vt(x,!1))}catch(D){pe.call({_w:x,_d:!1},D)}}};X||(g=function(y){w(this,g,k,"_h"),h(y),i.call(this);try{y(u(An,this,1),u(pe,this,1))}catch(v){pe.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 x=ae(O(this,g));return x.ok=typeof y!="function"||y,x.fail=typeof v=="function"&&v,x.domain=_?b.domain:void 0,this._c.push(x),this._a&&this._a.push(x),this._s&&vt(this,!1),x.promise},catch:function(y){return this.then(void 0,y)}}),Be=function(){var y=new i;this.promise=y,this.resolve=u(An,y,1),this.reject=u(pe,y,1)}),p(p.G+p.W+p.F*!X,{Promise:g}),n(18)(g,k),n(59)(k),a=n(6)[k],p(p.S+p.F*!X,k,{reject:function(y){var v=ae(this),x=v.reject;return x(y),v.promise}}),p(p.S+p.F*(c||!X),k,{resolve:function(y){if(y instanceof g&&se(y.constructor,this))return y;var v=ae(this),x=v.resolve;return x(y),v.promise}}),p(p.S+p.F*!(X&&n(46)(function(y){g.all(y).catch($)})),k,{all:function(y){var v=this,x=ae(v),D=x.resolve,te=x.reject,Et=Bt(function(){var Ut=[],nt=0,Re=1;E(y,!1,function(cr){var xn=nt++,Rn=!1;Ut.push(void 0),Re++,v.resolve(cr).then(function(Ft){Rn||(Rn=!0,Ut[xn]=Ft,--Re||D(Ut))},te)}),--Re||D(Ut)});return Et&&te(Et.error),x.promise},race:function(y){var v=this,x=ae(v),D=x.reject,te=Bt(function(){E(y,!1,function(Et){v.resolve(Et).then(x.resolve,D)})});return te&&D(te.error),x.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 oa={};nc(oa,{initTray:()=>rr,killTray:()=>It,openBrowser:()=>Lt,showTrayNotification:()=>$o,updateTrayTooltip:()=>yn});function qs(e){for(let t of e)try{if(hn.default.existsSync(t))return t}catch{}return null}function Hl(){if(process.platform==="win32"){for(let e of ta)try{if(hn.default.existsSync(e))return hn.default.readFileSync(e).toString("base64")}catch{}return Qs}return Qs}function Wl(){if(process.env.NREMOTE_DESKTOP)return!1;let e=process.platform;return!(!["darwin","win32","linux"].includes(e)||e==="linux"&&!process.env.DISPLAY)}function na(){let{port:e,tunnelUrl:t,running:r}=gn,o=r?t?"Tunnel ON":"Local only":"Idle",n=`http://localhost:${e}`;return`9Remote \u2022 ${o}
5
5
  Local: ${n}
6
- Right-click to open / quit`}function Ys(){let{port:e,tunnelUrl:t}=dn,r=process.platform==="win32",o=t?`9Remote (Port ${e}) \u2022 Tunnel ON`:`9Remote (Port ${e}) \u2022 Local only`;return{icon:Ml(),title:r?`9Remote - Port ${e}`:"",tooltip:Vs(),items:[{title:o,tooltip:t||`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 $l(){try{let e=require($e.default.join(js,"systray2"));return e.default?.default||e.default||e}catch{return null}}function Nl({port:e,onQuit:t,onOpenUI:r}){let o=Fs(Gs),n=Fs(_l);if(!o||!n)return null;let i;try{i=(0,Xe.spawn)("powershell.exe",["-NoProfile","-ExecutionPolicy","Bypass","-WindowStyle","Hidden","-InputFormat","Text","-OutputFormat","Text","-File",n,"-IconPath",o,"-Tooltip",`9Remote - Port ${e}`],{windowsHide:!0,stdio:["pipe","pipe","pipe"]})}catch{return null}let s=c=>{try{i.stdin.writable&&i.stdin.write(`${JSON.stringify(c)}
7
- `,"utf8")}catch{}};return Ks.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?.(),kt(),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 zn({port:e,onQuit:t,onOpenUI:r}){if(!Cl())return null;if(process.platform==="win32")return dn={port:e,tunnelUrl:"",running:!0},oe=Nl({port:e,onQuit:t,onOpenUI:r}),oe;try{let o=$l();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=$e.default.join(js,"systray2","traybin",i);if(!pn.default.existsSync(s))return null;if(process.platform!=="win32")try{pn.default.chmodSync(s,493)}catch{}if(dn={port:e,tunnelUrl:"",running:!0},oe=new o({menu:Ys(),debug:!1,copyDir:!0}),oe.onClick(a=>{let c=a.item?.title||a.item;c==="Open Web UI"?r?.():c==="Shutdown"&&(t?.(),kt(),setTimeout(()=>process.exit(0),500))}),typeof oe.ready=="function")try{await oe.ready()}catch{return oe=null,null}else oe.onReady(()=>{}),oe.onError(()=>{});return oe}catch{return null}}function mn({tunnelUrl:e,running:t}={}){if(e!==void 0&&(dn.tunnelUrl=e),t!==void 0&&(dn.running=t),!!oe){if(oe._isWin){oe._setTooltip?.(Vs());return}try{oe.sendAction({type:"update-menu",menu:Ys(),seq_id:-1})?.catch?.(()=>{})}catch{}}}function kt(){let e=oe;if(oe=null,e)try{e.kill(!0)}catch{}}function _o({title:e="9Remote",message:t}){let r=process.platform;if(t){if(r==="win32"){let o=c=>String(c).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&apos;").replace(/"/g,"&quot;"),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,Xe.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,Xe.spawn)("osascript",["-e",n],{detached:!0,stdio:"ignore"}).unref()}catch{}return}try{(0,Xe.spawn)("notify-send",[e,t],{detached:!0,stdio:"ignore"}).unref()}catch{}}}function Pt(e){let t=process.platform;if(t==="win32"){try{(0,Xe.spawn)("rundll32.exe",["url.dll,FileProtocolHandler",e],{detached:!0,stdio:"ignore",windowsHide:!0}).unref();return}catch{}try{(0,Xe.spawn)("cmd.exe",["/d","/s","/c","start","",e],{detached:!0,stdio:"ignore",windowsHide:!0}).unref()}catch{}return}if(t==="darwin"){try{(0,Xe.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,Xe.spawn)(o,n,{detached:!0,stdio:"ignore",env:{...process.env}}).unref();return}catch{}}var Xe,Ks,pn,$e,Hs,Ws,js,oe,dn,Dr,Us,Gs,_l,Ot=za(()=>{Xe=require("child_process"),Ks=R(require("readline"),1),pn=R(require("fs"),1),$e=R(require("path"),1),Hs=R(require("os"),1),Ws=require("url"),js=(0,$e.join)(Hs.default.homedir(),".9remote","runtime","node_modules"),oe=null,dn={port:0,tunnelUrl:"",running:!1},Dr=$e.default.dirname((0,Ws.fileURLToPath)(__importMetaUrl)),Us="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",Gs=[$e.default.join(Dr,"assets","trayIcon.ico"),$e.default.join(Dr,"..","assets","trayIcon.ico")],_l=[$e.default.join(Dr,"assets","tray.ps1"),$e.default.join(Dr,"..","assets","tray.ps1")]});var Ko=ge((Lp,ua)=>{ua.exports={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8}});var da=ge((_p,pa)=>{var Yl=Ko();function fa(e){this.mode=Yl.MODE_8BIT_BYTE,this.data=e}fa.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)}};pa.exports=fa});var Ho=ge((Mp,ma)=>{var xe={glog:function(e){if(e<1)throw new Error("glog("+e+")");return xe.LOG_TABLE[e]},gexp:function(e){for(;e<0;)e+=255;for(;e>=256;)e-=255;return xe.EXP_TABLE[e]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(j=0;j<8;j++)xe.EXP_TABLE[j]=1<<j;var j;for(j=8;j<256;j++)xe.EXP_TABLE[j]=xe.EXP_TABLE[j-4]^xe.EXP_TABLE[j-5]^xe.EXP_TABLE[j-6]^xe.EXP_TABLE[j-8];var j;for(j=0;j<255;j++)xe.LOG_TABLE[xe.EXP_TABLE[j]]=j;var j;ma.exports=xe});var Wo=ge((Cp,ha)=>{var Ct=Ho();function Hr(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]}Hr.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]^=Ct.gexp(Ct.glog(this.get(r))+Ct.glog(e.get(o)));return new Hr(t,0)},mod:function(e){if(this.getLength()-e.getLength()<0)return this;for(var t=Ct.glog(this.get(0))-Ct.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]^=Ct.gexp(Ct.glog(e.get(n))+t);return new Hr(r,0).mod(e)}};ha.exports=Hr});var ya=ge(($p,ga)=>{ga.exports={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7}});var Ea=ge((Np,va)=>{var ve=Ko(),wa=Wo(),Xl=Ho(),ht=ya(),z={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;z.getBCHDigit(t)-z.getBCHDigit(z.G15)>=0;)t^=z.G15<<z.getBCHDigit(t)-z.getBCHDigit(z.G15);return(e<<10|t)^z.G15_MASK},getBCHTypeNumber:function(e){for(var t=e<<12;z.getBCHDigit(t)-z.getBCHDigit(z.G18)>=0;)t^=z.G18<<z.getBCHDigit(t)-z.getBCHDigit(z.G18);return e<<12|t},getBCHDigit:function(e){for(var t=0;e!==0;)t++,e>>>=1;return t},getPatternPosition:function(e){return z.PATTERN_POSITION_TABLE[e-1]},getMask:function(e,t,r){switch(e){case ht.PATTERN000:return(t+r)%2===0;case ht.PATTERN001:return t%2===0;case ht.PATTERN010:return r%3===0;case ht.PATTERN011:return(t+r)%3===0;case ht.PATTERN100:return(Math.floor(t/2)+Math.floor(r/3))%2===0;case ht.PATTERN101:return t*r%2+t*r%3===0;case ht.PATTERN110:return(t*r%2+t*r%3)%2===0;case ht.PATTERN111:return(t*r%3+(t+r)%2)%2===0;default:throw new Error("bad maskPattern:"+e)}},getErrorCorrectPolynomial:function(e){for(var t=new wa([1],0),r=0;r<e;r++)t=t.multiply(new wa([1,Xl.gexp(r)],0));return t},getLengthInBits:function(e,t){if(1<=t&&t<10)switch(e){case ve.MODE_NUMBER:return 10;case ve.MODE_ALPHA_NUM:return 9;case ve.MODE_8BIT_BYTE:return 8;case ve.MODE_KANJI:return 8;default:throw new Error("mode:"+e)}else if(t<27)switch(e){case ve.MODE_NUMBER:return 12;case ve.MODE_ALPHA_NUM:return 11;case ve.MODE_8BIT_BYTE:return 16;case ve.MODE_KANJI:return 10;default:throw new Error("mode:"+e)}else if(t<41)switch(e){case ve.MODE_NUMBER:return 14;case ve.MODE_ALPHA_NUM:return 13;case ve.MODE_8BIT_BYTE:return 16;case ve.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}};va.exports=z});var jo=ge((Dp,Sa)=>{Sa.exports={L:1,M:0,Q:3,H:2}});var ba=ge((Bp,Ta)=>{var Wr=jo();function Ne(e,t){this.totalCount=e,this.dataCount=t}Ne.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]];Ne.getRSBlocks=function(e,t){var r=Ne.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 Ne(a,c));return n};Ne.getRsBlockTable=function(e,t){switch(t){case Wr.L:return Ne.RS_BLOCK_TABLE[(e-1)*4+0];case Wr.M:return Ne.RS_BLOCK_TABLE[(e-1)*4+1];case Wr.Q:return Ne.RS_BLOCK_TABLE[(e-1)*4+2];case Wr.H:return Ne.RS_BLOCK_TABLE[(e-1)*4+3];default:return}};Ta.exports=Ne});var Ra=ge((Up,xa)=>{function Aa(){this.buffer=[],this.length=0}Aa.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++}};xa.exports=Aa});var Ia=ge((Fp,Oa)=>{var Ql=da(),gt=Ea(),ql=Wo(),ka=ba(),Pa=Ra();function De(e,t){this.typeNumber=e,this.errorCorrectLevel=t,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}De.prototype={addData:function(e){var t=new Ql(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=ka.getRSBlocks(e,this.errorCorrectLevel),r=new Pa,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(),gt.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=De.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=gt.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=gt.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=gt.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=gt.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=gt.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}}}};De.PAD0=236;De.PAD1=17;De.createData=function(e,t,r){for(var o=ka.getRSBlocks(e,t),n=new Pa,i=0;i<r.length;i++){var s=r[i];n.put(s.mode,4),n.put(s.getLength(),gt.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(De.PAD0,8),n.getLengthInBits()>=a*8));)n.put(De.PAD1,8);return De.createBytes(n,o)};De.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=gt.getErrorCorrectPolynomial(l),p=new ql(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 T=new Array(E),A=0,k=0;k<o;k++)for(var C=0;C<t.length;C++)k<i[C].length&&(T[A++]=i[C][k]);for(var g=0;g<n;g++)for(var b=0;b<t.length;b++)g<s[b].length&&(T[A++]=s[b][g]);return T};Oa.exports=De});var Ma=ge((Kp,_a)=>{var Jl=Ia(),La=jo(),Zl="\x1B[40m \x1B[0m",jr="\x1B[47m \x1B[0m",zl=function(e){return e?Zl:jr},Go=function(e){return{times:function(t){return new Array(t).join(e)}}},eu=function(e,t){for(var r=new Array(e),o=0;o<e;o++)r[o]=t;return r};_a.exports={error:La.L,generate:function(e,t,r){typeof t=="function"&&(r=t,t={});var o=new Jl(-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(eu(a,s));var u={WHITE_ALL:"\u2588",WHITE_BLACK:"\u2580",BLACK_WHITE:"\u2584",BLACK_ALL:" "},f=Go(u.BLACK_WHITE).times(a+3),p=Go(u.WHITE_BLACK).times(a+3);n+=f+`
6
+ Right-click to open / quit`}function ra(){let{port:e,tunnelUrl:t}=gn,r=process.platform==="win32",o=t?`9Remote (Port ${e}) \u2022 Tunnel ON`:`9Remote (Port ${e}) \u2022 Local only`;return{icon:Hl(),title:r?`9Remote - Port ${e}`:"",tooltip:na(),items:[{title:o,tooltip:t||`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 jl(){try{let e=require($e.default.join(ea,"systray2"));return e.default?.default||e.default||e}catch{return null}}function Gl({port:e,onQuit:t,onOpenUI:r}){let o=qs(ta),n=qs(Kl);if(!o||!n)return null;let i;try{i=(0,Qe.spawn)("powershell.exe",["-NoProfile","-ExecutionPolicy","Bypass","-WindowStyle","Hidden","-InputFormat","Text","-OutputFormat","Text","-File",n,"-IconPath",o,"-Tooltip",`9Remote - Port ${e}`],{windowsHide:!0,stdio:["pipe","pipe","pipe"]})}catch{return null}let s=c=>{try{i.stdin.writable&&i.stdin.write(`${JSON.stringify(c)}
7
+ `,"utf8")}catch{}};return Js.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?.(),It(),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 rr({port:e,onQuit:t,onOpenUI:r}){if(!Wl())return null;if(process.platform==="win32")return gn={port:e,tunnelUrl:"",running:!0},oe=Gl({port:e,onQuit:t,onOpenUI:r}),oe;try{let o=jl();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=$e.default.join(ea,"systray2","traybin",i);if(!hn.default.existsSync(s))return null;if(process.platform!=="win32")try{hn.default.chmodSync(s,493)}catch{}if(gn={port:e,tunnelUrl:"",running:!0},oe=new o({menu:ra(),debug:!1,copyDir:!0}),oe.onClick(a=>{let c=a.item?.title||a.item;c==="Open Web UI"?r?.():c==="Shutdown"&&(t?.(),It(),setTimeout(()=>process.exit(0),500))}),typeof oe.ready=="function")try{await oe.ready()}catch{return oe=null,null}else oe.onReady(()=>{}),oe.onError(()=>{});return oe}catch{return null}}function yn({tunnelUrl:e,running:t}={}){if(e!==void 0&&(gn.tunnelUrl=e),t!==void 0&&(gn.running=t),!!oe){if(oe._isWin){oe._setTooltip?.(na());return}try{oe.sendAction({type:"update-menu",menu:ra(),seq_id:-1})?.catch?.(()=>{})}catch{}}}function It(){let e=oe;if(oe=null,e)try{e.kill(!0)}catch{}}function $o({title:e="9Remote",message:t}){let r=process.platform;if(t){if(r==="win32"){let o=c=>String(c).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&apos;").replace(/"/g,"&quot;"),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,Qe.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,Qe.spawn)("osascript",["-e",n],{detached:!0,stdio:"ignore"}).unref()}catch{}return}try{(0,Qe.spawn)("notify-send",[e,t],{detached:!0,stdio:"ignore"}).unref()}catch{}}}function Lt(e){let t=process.platform;if(t==="win32"){try{(0,Qe.spawn)("rundll32.exe",["url.dll,FileProtocolHandler",e],{detached:!0,stdio:"ignore",windowsHide:!0}).unref();return}catch{}try{(0,Qe.spawn)("cmd.exe",["/d","/s","/c","start","",e],{detached:!0,stdio:"ignore",windowsHide:!0}).unref()}catch{}return}if(t==="darwin"){try{(0,Qe.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,Qe.spawn)(o,n,{detached:!0,stdio:"ignore",env:{...process.env}}).unref();return}catch{}}var Qe,Js,hn,$e,Zs,zs,ea,oe,gn,Br,Qs,ta,Kl,_t=tc(()=>{Qe=require("child_process"),Js=R(require("readline"),1),hn=R(require("fs"),1),$e=R(require("path"),1),Zs=R(require("os"),1),zs=require("url"),ea=(0,$e.join)(Zs.default.homedir(),".9remote","runtime","node_modules"),oe=null,gn={port:0,tunnelUrl:"",running:!1},Br=$e.default.dirname((0,zs.fileURLToPath)(__importMetaUrl)),Qs="iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAHhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAAEsAAAAAQAAASwAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAAECgAwAEAAAAAQAAAEAAAAAAEz0GrAAAAAlwSFlzAAAuIwAALiMBeKU/dgAAGNhJREFUeAHVm1lsncd1x8/dF5IiJZmSbMlUJFuWE8l2FMdNlDSrYANugSLphqZ9KZo8JECbti/tQ1HA701fkj4VyWMTBAhaBEGBJM2CpLHj2nVtI5LtWLaszRIlUiTF5e5L/78z39z7kbxXko2+dMi5s505c/5nzpxZLpmx24dpkTyieDKbzX5B6f1ju2TMMv2M9fWjrPUzmZCqzG9SGHSnNdCSqlmd+n31pTNtyicF76qKwMP7iYSyt5AOcm/0er2vq/is4kuKNxXfVTisXl9RPKfICIMoAQf5dH0i1+i2VP9NfWL9OJ6xPZWOHT9Fk4zxllIw3Kd4xwH9f1lxQfHdgfk/6vcOgN5OTrD8paLbltKxoaSWbyjejuH/13awgXFkyKp2AH6r9jOZzHbQI8x2K53WOQ5he9+Ukr0P/CMdacyn6CTfoB75to4lf3HLcbx/wAhWD2mT+AvVfDWpH3iUWNaAwedQoXxwb7E1ppIvckzSWEy60dW1MaxXziuRfdiWRhIb3Od5gY8hh0GVMu44aU0E2VpmBPFhiX+NfpHLIeVfUNyZSEPbyBD4xm6BxCdLVV7LR5JPsthAUucU3slzfATcXhezPoYKPTX2EpII3lO1BdohPxikwZKPu4wz3/yxpOKjiudzSf3fK/10kr9lEjUbiJIZlxwudJJiXzlJmJUIWTVksoqZbMhDo7LX08aPyjDgh/qcaJV48FrQqqwd1utjW6DgMxC7bDRGbQ0JtuYqqugq/pCeOxRPK96reIsgUcI4ThOWWzI09YokWYCL0EmpS/IOJJCpzVuTzzibpP2gtFzGegLR6fU8BQ86oA4l9CgkoS8TGRYD32gJkWZMelH1D+X18X7FTeAROs0kDRxmA/CMp5gkEl55ZltpeoZRiisioaVH5AEgRyAajDYv8HkxajE/vax1MlICNGrNKoMyWHLUAVzGEjIkVChE+UkJm7EMsM2p6REU8FGI0mFzB1oYMnwOlAFvRcbfBFAEXqdGloCbfiBQ3rvQLXSOiZjHE2FZ6HMi7Pc7WkeilBLcF0hTPfgAHq0JrfuHhKcrRs6m7xrVOImgaSwMt6X8UcmXfaPf6409KQU+UWQJwIChqFlOwLOmxZxBcwBX6j+qBAx09HN6bwk8EjbBpCV8VtM5USi4smutltW7PdOvuZknSuqJrgt4rQPAdMUEtfCBEjxlsCRsARyrPRX4N4Q/K/zocnsIQAMztwFlQ10y8+oCaAADLseckxdwB0udYl4VUUFhaaAPfkJwufVRzGVtR6lgjU7X1lptq3U68gOigYBEvLvSSFsaARiA8QssB0egMnVERvAQCpFFqEs+hd1YAiNDNKHQKI7ip/FDqsStWigdvMqAz3o50DHzRaEPFhDohnkUKAW4jC6tW8FkMW/T5bwt1XvyBVkrCFkCwxXaFWlPdTlfDgF8RuWsQPqqgDiIqgS+qtAg461A/iaOAOBI6PnQXZ/pjLMUWKUJWBSAQFlVMuvMOLGgAjMPaGLey4nC1B6sRhlft/DN2Gy1aOVCzjbaXSsodsQ0x9KAsfBgGViXq4+ZVRuR2c+KAL+poQJ0Nen3tkEWEMgieHoM8mJGIEmyYUwVQl0CXgICGlAFCVgAuGJRMe/gwzLAw3sbdPBA2iTQf7Za8rGrmv0N8ewrBRF8WzL9TEYKoAtKADW2rzzy+g4hLFR5cFi3V0HebWeErqJskR9MqcN0EQLhcXieSghmGfDMeiGXs5KISgKAKTP75AFWUSyqf5E+GheFFOX51zt92zdRspVG22krhbz49KVIrXs5vFa368pk28MvdJQS+jhDycFOkZUl9t0qVI/gt8c/3gc4dz4Am6SMSR7QBT+thXWM+QqXgwE8W1lZFeV83v0AoKdVt7dgdqCatd3Tkza9c8aqVR3INHsba2tW39gQbc5O3+jaTS2DrhwzTg+FLtZaruCi+FEPXPw2OwLWgSNU4oYBZpYCgqKL2+lgrBMMUJPuMPcBAuDgYDTbsltMV3rX7DDbOasIaCWPEnI2WczZtMDsyWfsfTuLduzRE3bvxx63yaMnrLBrn2WKZUmora62Zu3rl6x2+pc287P/sOor5+ytjaL7gNVWx1ak3Ir4dOQFG8IGYKxHic+0z7xosAZAEyTWHViB6OVgtA1u1lNYm6FOE+Dc8ipSj0Nyx6YhckJfFWC2L0JBTmtSgk7Im5POVgr23smcPXz4bjv0e39mez7xGStO6b7FNuZbbxxX/TUQdRuXX7dL//rPdvk/f2y/Xm7Z6aWa3Wh2rAb4dkcOsmfNXtdacohN1XWkhS6pFNJ1vloeKEfyqKgPFBZkR8aBf1M+6042k30qXQkRiDEpj5INbfp6V56ZZt2ytr1dbZjuRLGgZRFMdocUsFv7+fHpgr3/6EHb//m/s3s/9VnLc8jp6oTn4BP+DKdyX6CQuDyzx6oPfURjtqxy+VVbXG/rsBPubMLuAADkAPUZ5i7sYMDGKgikyO1BmVgfq0g5pQpX5qmtrQALBEFI5pe1hkNCAcw86xpTx9vDnPL+ybJbQ1ntRyaL9uGj+23mj/7Kjnz8Sct028KHycl/FEvu1ev1prXl0Yrlki8fDmQoolwqW+nww7a2NG+zi+flIE0WoAMQ614gcYqadAdPmfE9BrFVCBl3hLFuRIoCtDoH9CNIQhU0HqUElgF5lkJRCgA4ykGCm1qv+7SXH1B8eFfJZh7/Azvyid+yfqfpAuZEiwd/+t+/a0svP2OV5rrMuGvtnfvswU//jh0/ccLazYZ1Om2bmpq0ud/9kk0svW3Xnnnello50fbUP2etXM9a4pMlJrIhT74v/uyPCCgtBOsgPz4MzgGbSeCg2dJnjGFbkWpVobG8Ha2z/mfKMn9V+lLSqPfo1e3oB0/Y7k9+RiaGxw6HGcB//xv/ZMs/+pZdunLdFjaablUHdlRs9cWf2+qf/o19+NTj1tE9gLh7335rfPL37dDrr9il+rqt6orIlooPQgQUX9Q6zurG2JYscguyIFmkyq5xxEwCc4TwW5e7FEBLYjOQBEqo3YsmWFVPjX8k1IEZd/aOAO7SEXZ3uWi7tPbnqj2bOfmETczMWqfdxtNq/ZfsmR993659/1/suV9ftDPLTWtoWEBMX6vZSW113W9+zeYePGb79u6xNr6i3bKZh05a79hDNnv1GVuQY11ptn1rrCqP72lp/CbIZUlsf+4H/BN5N4et4KHGgjaFQDRUCI1eQljlhUVqCIogxQrYlljLtO+t5u2RI3dbce5B68qUuxKsp3XdaLbsxotP2+sXrtpLNxq2qklaV581xQUdgn7x9qrVLp2zCy89pwFkNyhW/XPlCZs69iGb0jYE/+mSFF0p2s5KSY43545X1b608A0DkAgdIwQjg5bNyPpYKQbOA7yKHDMll46owRYKcnac4jjuQsdxtaFbnFUmrT+x07o++6JVe6NZs8zKdbu4UvO9vK5ZYwsjdLV2OVidv75ij1y7JGV2XHEoD8eZP3DEDuyetBuZts3XOrZQk/XowtSS8uDDHQFLTAefIv9QLTjCUGkSz/sTw7badAUdEwZ+9ZRA3MfbGpDjKeaPT0AZHIwmdB7Ge7SlDGa+K1PuiC4vh1nQSW5VCkIYzJWHja5H9nOzVZn3Tp0SOe0BnogvMC2luf17bEa867okrehcsCbaGhemBLhbZrROgEvpaSWoODIEfzayKalURxxgogel8q5SNlsSXhmB1uT9ucG1tTe5prstq62u+NLoMjuaUdbOXXOHrKwRsQisRmcwrWeiLyabmajY7nsPud9AcV0sgWWUL+tUWLYb6w1blwKZCHyHO0TxZXve/iP5JfcY3APEHPC2BUCgMU/V6uD9YK1zt1Lu35p4n+WGbmjspRyUCta0K7rmLc4vWv7yOZvaf0gA5ANEn9EpbvLw++y+2Z329uUVv+mhBMYpyvx3Zzv2wKGDltl1j3XZBUTv/oOtT4otloo2zdFaTrapwTkFtt0C9WQm/n42kKTMqB+HSVmu29BtrpDyMk8NHEeqDcH06wKSwQFRpsIfM1SChgFDK7PPza1nO3ry1Dt32q5jj2n2tY51woMsMzljpfqKLZ89Yxs6BLF1VtSwU7v3x+7fZx/83BfsrgdPWC9ZNlEJnA0qZ5+1pesLtigXUxPPhhTTliI64i1XEJaNxlC1H5aYPJ841Xl+hCb8IKT2sYE+jk8ZHGBGnGDWlYrRMuuXbUiwXRFZOalruq28tty33a++YFffOmt75w77EmCWiuWKHf/cl2zf/Q/YuWd/bpcvXLKijtAPHD9u95w8ZdMP6rsK+Y1WsntgPe4LWk3LK892t6713/DlBnAi1iifkcgGmMGEIjwgFJgsZN8ahrvAJuJhgT7eOWEAE7k3/WSlbVYe8y8FyKvhiPLyB29umL3n3FtW+9F3bPqPv6z+opLwbGv5SsUO6F5w+NRntG3UJV/GOoWytfyc27Vr1+YdwOTklLW1iwCm2ahZvt6Q05USZTX4JEcmWZAnAvZ6b9OHGjwL6digW6WEeyoySNMhM4HEsxqIOi8rQ55rKBk1KYTzOWuxqZlZqnfsQH3BajqpzcwdcSFxhsxqWzPakBevS2l1AW8IXL+n3aJZt//5wb/Zjtl7LK/7Agro9btWv7lspTNP28WFmzbfkBWIT/ABYRm0BTa8FGOVsghJIzFcLleQy7f9g4kZqwDIAZlOQe9OJlFLaA7KgNbLKESDN6WcpZsbVpk/a7XaulX3zVlelxzf2lCElISX5wpM343lG3bxB9+2PatvW+m9HwqWoXa20uaNa5Y984y9ubhqV6TYNR2JUQD3CKyC8wRLIa5/VbnCUUSYHMoBS/rTd6MR9WmaYT6gdUbRBHuSnF2fReDbo7JtCZzRSUlvOnZeB5zVs9ftA2vfsd7bb9rMwyetevCIlaZ36XjMNUSefGPN1i6+rlPiL+zqfz9rx5/4bf9uoCnHxxM4t8fW0nXr1HWAEiK2P1ZLABxnPsw6kgQ8SBPzQwijciNvg2gmLAtQB2YJ/iEPKhR9IH1ARZ7rcokDiRTRF4B1aev5Kzft3MLP7J7nXrC7daCpzuy2bKniPmFjZdmuXrlqFxfXbF8lbx9/4Jg/drR0dMZaStr2OEEurG7YosyfMwejcQ3mKh480hCwzzSCxJDOx7pBylF4CzLAD8Pm3umSU2k03GBGhxlS9vWi4kG9BXzwvv3+MsSZgcDn4s1V+8FL57SFveF1rN025iQ/UVLygcN7bGLuAbuyUfPlofWhGdd3BEuX7Vq9bYuKa9oB2ALxNZg/uwu8h6MkZQQMlT7W6A8dwrYSpR0isqMPT+EAU0WSdAEa6rimTshkT+6ftic+/0Ur+YVIM6bGbC5v9Rd/auf/8av2ei1jddasGHOmKMqk95e69hsf/01bzlbkFFddeI7PGwvzNjV/3q7L/hvyF5wBOAIDviUeDh4liAfXbiUhqAG5aR8fNGm3JtjcFZDxlAVnPxyBXgHwVT1lH5yp2myhb2+efllOb5/27o6v25zuAQfvO2FPPPqgLT592hblHzhB8Li5Sy8bp44ftqlHT9mllXWdBPH+Pd0dKpadf9PaK0t2RQoAMI7OZ1957iLcSTiPoAqwABrYwzzlccGf3Udvg+ku7vmFE6wRtJa6A+MlpqRL0LTeAWf1rs/7f07b1716DG0fOOogeRPoSRH1XMnump2193SXrdKu27Redo7fNWFPfvhhO3Dqs3atMmvtBi9CHalGwulEef/1F21l/pq9fKNpy/J+KAEnyAMIFsQS8odRFANw1QPfLcGVEZWSRhTyvgtsrwZodIIBtNOEiU56KhENP3z/N6GZ53nMb2eaoh2ZgmUXr1r73MuWPfKYrrdtKStra/IBtZk5O/gnf22Pddesox2gr/v+SuUuu1Jra0fYEABJLTMrl6o2feMN6557za639eo0WbX5Vk2mzuUn7ydDbpk5nYO7WhLaCKUBhJR7jMApJvkg+NZPLFAHoUGPre0qM+vw8aiPaAHxdbik9wC8MUdizJMnsrIUkpdwh7Nrtlje7dteSxccPwPokrPS1InPKnajMGNXOjm7sVrTtbfp7dwbyno9zq/oQfSVn9gvX5+3Cy15inzBunKWdRaN8hnRWLZgfY3NbKM4f0SRHDISB+7WgD4RfkRgorlJPhU1NoJmqAAxgRHLga+VecDgOkrgTE4ORUgfTtfRGj9azdiB3LpdaBetuGPGPTaXIw5A7WZTR1yZO8uDLVM8CrIieDbOn7E9p39sL7163t5o5uxmL289fYkyoeNxoVI1052iWK7qhliRYtSmaY4HLJaDW5GAuyJcwtEfyRJA9PF2Elscqj6C4WNofrx3UIBGBazJhrwzX140dM17bb1vD5y/aO9bW7W31t5rnb1HLFedFBPsKATpTArTDEsJneV5y196xWYv/MpevLpsr9U147pu7zm4z/7wi39u0zNSosbhRZjTHjKwvL79rW/a9777XbEVH8mIzFHuZJixychdwH0ALCIn0Dv4wMf3Xr9sSx14c9G5QxIITmoIhxs7s7RhF1azdmy1ZYdX162vNb02c7dtTM5at1C1rGYvoztAvqEj8+o1y119yxavXrefLNZsXt9+NqSclvjtldIe+9TjVp2Q8kaE55/7LylDM4+cCJoEV4ZXAmRUkPzSmpYduhwdUAaa8JlSjpL8nh9R+XM2TlJ8UUId5lvRS+3sRFlboqTXuFN6vZ3RDrFTXwffO5G3I7sqeiGW2UowFIn5r+mlZ2GjYRfX2nZJp72bWJBE6uvswHqf2nWXHT123KpTO3SeYM3r/om18VVZrWavvnrG3jyn22e9rlulXpDkGJkUhz0Ou3Dw1ZjwD/9EJmhMLVsC9QD3VBkMmJn2LyNQgLSDgjgJ8oXolI6vPGayJfLtUfjCVH//o/xefWmC965LeN4XeAusCTAvxBx06kp5amOr62HS7vCk5pwcY6GoFIuTlcnMmjL/DfmRpvxJQ060qWf0tnaE8PdDUkAKvFt1ugIMUsDwPUBA0qfAtA7oB3gCPLEXfxxRpsvXdlgQX0iIG4cUHjf5kxmqmamWvs0BWJ1vdFTmQYMyFxGet3jZ4XbIBYfHVN4WOSb3WGYq93hpzvH9QpORgwzQ6qrcliKZdXxBTzyRNUy90lQYjY2j8CCk1DWoG2ZiKydBlpVEU1CBDCahPO+C/GUXjyNF/XEDPxxUANiUBlvyloLis88Jju7q4sABj5C8//nBBgWouceuIaKeXpsYiCMvL1I8ybCEMHdXnpQhFuLJqOnAzG2uSbemFDCsZrbFZxCiH6DOLUGpfJ8LiEL863UBBlRHr0SyUg3JEVUaVhlwHJUBhjJ4SXb+jKNR6O9fbatAH9pI/c2AdhSAvlTH0xxt7oihUeQngIcmio2Dg9egwmVPFZ12pAIii5gyAHokMBDbPzNBJd5XK1VPeQKnATGGvrTDQJocOUaOtOHpm/OaX2LkA6JYCEg+AAr86Ct2Phbj4U9QEL2g9T7eHhQSQSET7YRYF0rhc2sdk6ldIKM/lOzflyYcl/fZVyPKGOSFGNDhGxZpnbIaUYpHytIYFsArMMpj1ggDgQBD2evCbMa8VpTD9m0OOjopQo81OA8nDjxUPeRL4RZB4M9yGZsQzalb0HlTOBsE8JHWlYA8qiASpAIvxH2ZGaSR2aEOJ4llAMxnWfRu7qKhDlOHxmnVlTRah7NKwIc8I4o3/EP2jsEH8v5XWAJPJ30Hyagtg0bAYX4A9wH1MVCC6sKMhGWgos8SFxu2Layhr8uK8DkPFZ2f/9F0Ir0DhTfRUUWTFy+VIYsxIk6Dh2OgUDImbMH2ND34c/lfKc7FPluIAuBESGgcdEIMg3Q5AAt1OEjaWRLYflCWKkHoHWGieucdAFITwAfQlF2xXk8pBICjBO+arkvyIWGQIcUWXBfV+BC7OJvrAcWPKIZAvzsIm4CLPt1tOGwUIUiLQ3MnJvoAAuABPGWWgC8f8tAkMeKgTN5T8grOJ2TfyefXRfy9KPMhFZJ/mXknPAQ6clC3QVaZmKcdYUmpQ1hv84J/hMYE0jZgsUJpKvtuQUdw2/5lZkUtNcUnI8WdpA4uSkUHRxZ6xmpPk0KcKVZA8AUBVKR1h5kMHGlBTXuk8TQWEtp3kfyt+vxwaz92s28o4uVu/y9p4V8+omyBPpxSB3Vb+WgNOt3WFDopT/1ol4dI8/a22B50Efu7rFE/6T6xbnQKRrCODPxT4dddmATMJmFGM9ws8Bga8Q2KuYWgiTscKjD2uU16JzIm47Pux/7jpNo8YMhfVlwYqekRwrwDAd4xOMnxjvsIwNY+/OssmFKLVKXbhMNq/wfFc4pjZ/mOwLsZbxPKhcTk4e/LYLvgm4EkyyTQI9MYnkM+yH7Lf56+E42k/n0+83kdH4+Ew1AYnU/37Js4qTZ6Ma/nCEUItORwoC6+Z6jx1qRu+1Slx0jnQ8/QLTDpn9XlinV+R/8+/7/EshPRLVmq9wAAAABJRU5ErkJggg==",ta=[$e.default.join(Br,"assets","trayIcon.ico"),$e.default.join(Br,"..","assets","trayIcon.ico")],Kl=[$e.default.join(Br,"assets","tray.ps1"),$e.default.join(Br,"..","assets","tray.ps1")]});var Ho=ge((Np,pa)=>{pa.exports={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8}});var ha=ge((Dp,ma)=>{var Ql=Ho();function da(e){this.mode=Ql.MODE_8BIT_BYTE,this.data=e}da.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)}};ma.exports=da});var Wo=ge((Bp,ga)=>{var xe={glog:function(e){if(e<1)throw new Error("glog("+e+")");return xe.LOG_TABLE[e]},gexp:function(e){for(;e<0;)e+=255;for(;e>=256;)e-=255;return xe.EXP_TABLE[e]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(G=0;G<8;G++)xe.EXP_TABLE[G]=1<<G;var G;for(G=8;G<256;G++)xe.EXP_TABLE[G]=xe.EXP_TABLE[G-4]^xe.EXP_TABLE[G-5]^xe.EXP_TABLE[G-6]^xe.EXP_TABLE[G-8];var G;for(G=0;G<255;G++)xe.LOG_TABLE[xe.EXP_TABLE[G]]=G;var G;ga.exports=xe});var jo=ge((Up,ya)=>{var Nt=Wo();function Hr(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]}Hr.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]^=Nt.gexp(Nt.glog(this.get(r))+Nt.glog(e.get(o)));return new Hr(t,0)},mod:function(e){if(this.getLength()-e.getLength()<0)return this;for(var t=Nt.glog(this.get(0))-Nt.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]^=Nt.gexp(Nt.glog(e.get(n))+t);return new Hr(r,0).mod(e)}};ya.exports=Hr});var va=ge((Fp,wa)=>{wa.exports={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7}});var Ta=ge((Kp,Sa)=>{var ve=Ho(),Ea=jo(),ql=Wo(),gt=va(),ee={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;ee.getBCHDigit(t)-ee.getBCHDigit(ee.G15)>=0;)t^=ee.G15<<ee.getBCHDigit(t)-ee.getBCHDigit(ee.G15);return(e<<10|t)^ee.G15_MASK},getBCHTypeNumber:function(e){for(var t=e<<12;ee.getBCHDigit(t)-ee.getBCHDigit(ee.G18)>=0;)t^=ee.G18<<ee.getBCHDigit(t)-ee.getBCHDigit(ee.G18);return e<<12|t},getBCHDigit:function(e){for(var t=0;e!==0;)t++,e>>>=1;return t},getPatternPosition:function(e){return ee.PATTERN_POSITION_TABLE[e-1]},getMask:function(e,t,r){switch(e){case gt.PATTERN000:return(t+r)%2===0;case gt.PATTERN001:return t%2===0;case gt.PATTERN010:return r%3===0;case gt.PATTERN011:return(t+r)%3===0;case gt.PATTERN100:return(Math.floor(t/2)+Math.floor(r/3))%2===0;case gt.PATTERN101:return t*r%2+t*r%3===0;case gt.PATTERN110:return(t*r%2+t*r%3)%2===0;case gt.PATTERN111:return(t*r%3+(t+r)%2)%2===0;default:throw new Error("bad maskPattern:"+e)}},getErrorCorrectPolynomial:function(e){for(var t=new Ea([1],0),r=0;r<e;r++)t=t.multiply(new Ea([1,ql.gexp(r)],0));return t},getLengthInBits:function(e,t){if(1<=t&&t<10)switch(e){case ve.MODE_NUMBER:return 10;case ve.MODE_ALPHA_NUM:return 9;case ve.MODE_8BIT_BYTE:return 8;case ve.MODE_KANJI:return 8;default:throw new Error("mode:"+e)}else if(t<27)switch(e){case ve.MODE_NUMBER:return 12;case ve.MODE_ALPHA_NUM:return 11;case ve.MODE_8BIT_BYTE:return 16;case ve.MODE_KANJI:return 10;default:throw new Error("mode:"+e)}else if(t<41)switch(e){case ve.MODE_NUMBER:return 14;case ve.MODE_ALPHA_NUM:return 13;case ve.MODE_8BIT_BYTE:return 16;case ve.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}};Sa.exports=ee});var Go=ge((Hp,ba)=>{ba.exports={L:1,M:0,Q:3,H:2}});var xa=ge((Wp,Aa)=>{var Wr=Go();function Ne(e,t){this.totalCount=e,this.dataCount=t}Ne.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]];Ne.getRSBlocks=function(e,t){var r=Ne.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 Ne(a,c));return n};Ne.getRsBlockTable=function(e,t){switch(t){case Wr.L:return Ne.RS_BLOCK_TABLE[(e-1)*4+0];case Wr.M:return Ne.RS_BLOCK_TABLE[(e-1)*4+1];case Wr.Q:return Ne.RS_BLOCK_TABLE[(e-1)*4+2];case Wr.H:return Ne.RS_BLOCK_TABLE[(e-1)*4+3];default:return}};Aa.exports=Ne});var Pa=ge((jp,ka)=>{function Ra(){this.buffer=[],this.length=0}Ra.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++}};ka.exports=Ra});var _a=ge((Gp,La)=>{var Jl=ha(),yt=Ta(),Zl=jo(),Oa=xa(),Ia=Pa();function De(e,t){this.typeNumber=e,this.errorCorrectLevel=t,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}De.prototype={addData:function(e){var t=new Jl(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=Oa.getRSBlocks(e,this.errorCorrectLevel),r=new Ia,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(),yt.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=De.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=yt.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=yt.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=yt.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=yt.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=yt.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}}}};De.PAD0=236;De.PAD1=17;De.createData=function(e,t,r){for(var o=Oa.getRSBlocks(e,t),n=new Ia,i=0;i<r.length;i++){var s=r[i];n.put(s.mode,4),n.put(s.getLength(),yt.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(De.PAD0,8),n.getLengthInBits()>=a*8));)n.put(De.PAD1,8);return De.createBytes(n,o)};De.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=yt.getErrorCorrectPolynomial(l),p=new Zl(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 T=new Array(E),A=0,k=0;k<o;k++)for(var M=0;M<t.length;M++)k<i[M].length&&(T[A++]=i[M][k]);for(var g=0;g<n;g++)for(var b=0;b<t.length;b++)g<s[b].length&&(T[A++]=s[b][g]);return T};La.exports=De});var $a=ge((Vp,Ma)=>{var zl=_a(),Ca=Go(),eu="\x1B[40m \x1B[0m",jr="\x1B[47m \x1B[0m",tu=function(e){return e?eu:jr},Vo=function(e){return{times:function(t){return new Array(t).join(e)}}},nu=function(e,t){for(var r=new Array(e),o=0;o<e;o++)r[o]=t;return r};Ma.exports={error:Ca.L,generate:function(e,t,r){typeof t=="function"&&(r=t,t={});var o=new zl(-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(nu(a,s));var u={WHITE_ALL:"\u2588",WHITE_BLACK:"\u2580",BLACK_WHITE:"\u2584",BLACK_ALL:" "},f=Vo(u.BLACK_WHITE).times(a+3),p=Vo(u.WHITE_BLACK).times(a+3);n+=f+`
8
8
  `;for(var d=0;d<a;d+=2){n+=u.WHITE_ALL;for(var h=0;h<a;h++)c[d][h]===s&&c[d+1][h]===s?n+=u.WHITE_ALL:c[d][h]===s&&c[d+1][h]===i?n+=u.WHITE_BLACK:c[d][h]===i&&c[d+1][h]===s?n+=u.BLACK_WHITE:n+=u.BLACK_ALL;n+=u.WHITE_ALL+`
9
- `}l||(n+=p)}else{var w=Go(jr).times(o.getModuleCount()+3);n+=w+`
10
- `,o.modules.forEach(function(E){n+=jr,n+=E.map(zl).join(""),n+=jr+`
11
- `}),n+=w}r?r(n):console.log(n)},setErrorLevel:function(e){this.error=La[e]||this.error}}});var ur=require("fs"),Pn=require("path"),ii=require("url"),si=R(require("os"),1);var lr=R(require("dns"),1),Se=R(require("path"),1),Zo=R(require("os"),1),le="9remote",Qr=process.env.NREMOTE_REGISTRY||`https://registry.npmjs.org/${le}/latest`,Ue=`${le}@latest`,ke=process.env.NREMOTE_HOME||Se.default.join(Zo.default.homedir(),".9remote"),G={ROOT:ke,LOGS:Se.default.join(ke,"logs"),STATE:Se.default.join(ke,"state"),CONFIG:Se.default.join(ke,"config"),BIN:Se.default.join(ke,"bin"),PIDS:Se.default.join(ke,"pids"),BUFFERS:Se.default.join(ke,"buffers"),DAEMON:Se.default.join(ke,"daemon"),AI_SESSIONS:Se.default.join(ke,"ai-sessions"),BACKGROUNDS:Se.default.join(ke,"backgrounds")},Rn=new lr.default.promises.Resolver;Rn.setServers(["1.1.1.1","1.0.0.1","8.8.8.8"]);var Xr=lr.default.lookup,nc=/^(\d{1,3}\.){3}\d{1,3}$|^::1$|^[0-9a-f:]+$/i;lr.default.lookup=(e,t,r)=>{if(typeof t=="function"&&(r=t,t={}),e==="localhost"||nc.test(e))return Xr(e,t,r);(async()=>{if(t.family===6)return{addrs:await Rn.resolve6(e),family:6};if(t.family===4)return{addrs:await Rn.resolve4(e),family:4};let[n,i]=await Promise.allSettled([Rn.resolve4(e),Rn.resolve6(e)]);return n.status==="fulfilled"&&n.value?.length?{addrs:n.value,family:4}:i.status==="fulfilled"&&i.value?.length?{addrs:i.value,family:6}:null})().then(n=>{if(!n?.addrs?.length)return Xr(e,t,r);t.all?r(null,n.addrs.map(i=>({address:i,family:n.family}))):r(null,n.addrs[0],n.family)}).catch(()=>Xr(e,t,r))};var P=2208,zo=process.execPath,ei=(e=process.env)=>process.versions.electron?{...e,ELECTRON_RUN_AS_NODE:"1"}:{...e};var qo=5173,Jo=3e3;var Su=[`http://localhost:${P}`,`http://127.0.0.1:${P}`,`http://localhost:${qo}`,`http://127.0.0.1:${qo}`,`http://localhost:${Jo}`,`http://127.0.0.1:${Jo}`],kn={fileName:"agent.log",rotatedName:"agent.log.1",maxBytes:2*1024*1024,cleanupAfterDays:7},ti=60,I={STOPPED:0,PREPARING:1,CONNECTING:2,TUNNELING:3,VERIFYING:4,READY:5},ni={showTunnelUrlInMenu:!1};var ri={CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN:"1"};var oi={checkIntervalMs:3e4,requestTimeoutMs:5e3},de={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}},rc={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 H(e,t={}){return fetch(e,{...t,headers:{...rc,...t.headers}})}var oc=(0,Pn.dirname)((0,ii.fileURLToPath)(__importMetaUrl)),ic=[(0,Pn.join)(si.default.homedir(),".9remote",".env"),(0,Pn.join)(oc,"..",".env")];function sc(e){for(let t of e.split(`
12
- `)){let r=t.trim();if(!r||r.startsWith("#"))continue;let o=r.match(/^([A-Z_][A-Z0-9_]*)\s*=\s*"?(.*?)"?$/);o&&!process.env[o[1]]&&(process.env[o[1]]=o[2])}}for(let e of ic)if((0,ur.existsSync)(e))try{sc((0,ur.readFileSync)(e,"utf8"))}catch{}for(let[e,t]of Object.entries(ri))process.env[e]||(process.env[e]=t);var zr=R(require("path"),1),vi=R(require("fs"),1),Ei=require("url");var ci=R(ai(),1),Jr=R(require("crypto"),1),{machineIdSync:ac}=ci.default;async function Ut(e=null){let t=e||process.env.MACHINE_ID_SALT||"9remote-salt";try{let r=ac();return Jr.default.createHash("sha256").update(r+t).digest("hex").substring(0,16)}catch(r){return console.error("Error getting machine ID:",r),Jr.default.randomUUID().replace(/-/g,"").substring(0,16)}}var fi=R(require("crypto"),1),li="abcdefghijklmnpqrstuvwxyz123456789",cc=8;function ui(){let e="";for(let t=0;t<cc;t++)e+=li[fi.default.randomInt(li.length)];return e}function Ft(e){return`sk-${(e||"").slice(0,8).toLowerCase()}-${ui()}-${ui()}`}function lc(e){return/^sk-[a-z0-9]{8}-[a-np-z1-9]{8}-[a-np-z1-9]{8}$/.test(e||"")}function V(e){if(!lc(e))return e||null;let t=e.split("-");return`${t[0]}-${t[1]}-${t[2]}`}function fr(e){return!e||e.length<8?"sk-***":`${e.slice(0,3)}***${e.slice(-4)}`}var ue=R(require("fs"),1),Ln=R(require("path"),1);var me=require("fs"),pi=require("path"),uc=0;function Fe(e,t,r={}){let{mode:o=384,spaces:n=2}=r;(0,me.mkdirSync)((0,pi.dirname)(e),{recursive:!0});let i=`${e}.${process.pid}.${++uc}.tmp`;try{(0,me.writeFileSync)(i,JSON.stringify(t,null,n),{mode:o}),(0,me.renameSync)(i,e)}catch(s){try{(0,me.existsSync)(i)&&(0,me.unlinkSync)(i)}catch{}throw s}}function di(e,t=null){try{return(0,me.existsSync)(e)?JSON.parse((0,me.readFileSync)(e,"utf8")):t}catch{return t}}var Ou=G.STATE,In=Ln.default.join(G.STATE,"state.json"),Zr=Ln.default.join(G.ROOT,"keys.json"),pr=Ln.default.join(G.STATE,"cmd.json"),mi=Ln.default.join(G.STATE,"settings.json");function Kt(){for(let e of[G.ROOT,G.STATE])ue.default.existsSync(e)||ue.default.mkdirSync(e,{recursive:!0})}function hi(){try{return Kt(),ue.default.existsSync(In)?JSON.parse(ue.default.readFileSync(In,"utf8")):null}catch{return null}}function _n(e){try{Kt(),Fe(In,e)}catch(t){console.error("Error saving state:",t)}}function gi(){try{ue.default.existsSync(In)&&ue.default.unlinkSync(In)}catch{}}function X(){try{return Kt(),ue.default.existsSync(mi)?JSON.parse(ue.default.readFileSync(mi,"utf8"))||{}:{}}catch{return{}}}function dr(){try{return Kt(),ue.default.existsSync(Zr)?JSON.parse(ue.default.readFileSync(Zr,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function Ht(e){try{Kt(),Fe(pr,{cmd:e,ts:Date.now()},{spaces:0})}catch{}}function yi(){try{if(!ue.default.existsSync(pr))return null;let e=JSON.parse(ue.default.readFileSync(pr,"utf8"));return ue.default.unlinkSync(pr),e.cmd}catch{return null}}function Et(e,t,r="Default"){try{Kt();let o={machineId:e,key:t,name:r,createdAt:new Date().toISOString()};return Fe(Zr,o),o}catch(o){return console.error("Error saving key:",o),null}}function wi(){return process.env.CODESPACES==="true"}var fc=zr.default.dirname((0,Ei.fileURLToPath)(__importMetaUrl));async function nt(){let e=await Ut();if(wi()&&process.env.NREMOTE_API_KEY)return Et(e,process.env.NREMOTE_API_KEY,"Codespace");let t=dr();if(!t.key){let r=Ft(e);t=Et(e,r,"Default")}return t}function Pe(){return"3.0.25"}var Oe=R(require("fs"),1),eo=R(require("path"),1);var hr=G.LOGS,Mn=eo.default.join(hr,kn.fileName),gr=eo.default.join(hr,kn.rotatedName),Si=!1,Ti=null;function pc(){Oe.default.existsSync(hr)||Oe.default.mkdirSync(hr,{recursive:!0})}function dc(){try{if(Oe.default.statSync(Mn).size<kn.maxBytes)return;try{Oe.default.rmSync(gr,{force:!0})}catch{}Oe.default.renameSync(Mn,gr)}catch{}}function mc(){try{let e=Oe.default.statSync(gr);Date.now()-e.mtimeMs>kn.cleanupAfterDays*864e5&&Oe.default.rmSync(gr,{force:!0})}catch{}}function to(e){try{dc(),Oe.default.appendFileSync(Mn,e+`
13
- `)}catch{}}function mr(e){return e.map(t=>{if(t instanceof Error)return t.stack||t.message;if(typeof t=="object")try{return JSON.stringify(t)}catch{return String(t)}return String(t)}).join(" ")}function bi(){let e=new Date,t=(r,o=2)=>String(r).padStart(o,"0");return`${t(e.getHours())}:${t(e.getMinutes())}:${t(e.getSeconds())}.${t(e.getMilliseconds(),3)}`}var hc=/\x1b\[[0-9;]*m/g,gc=/https?:\/\/[^\s]+/g;function yc(e){return String(e).replace(hc,"").replace(gc,"").replace(/\s+$/g,"")}function Wt(e,t,r){let o=yc(r);if(!o)return;let n=t==="info"?e:`${e}:${t}`,i=`${bi()} [${n}] ${o}`;if(to(i),Ti)try{Ti(i)}catch{}}function wc(){process.on("uncaughtException",e=>Wt("crash","error",`uncaughtException: ${e?.stack||e?.message||e}`)),process.on("unhandledRejection",e=>{let t=e instanceof Error?e.stack||e.message:String(e);Wt("crash","error",`unhandledRejection: ${t}`)}),process.on("exit",e=>to(`${bi()} [exit] code=${e} pid=${process.pid}`))}function Ai(){Si||(Si=!0,pc(),mc(),to(`
14
- === SESSION ${new Date().toISOString()} pid=${process.pid} argv=${process.argv.slice(2).join(" ")} ===`),wc())}function xi(e=60){try{return Oe.default.readFileSync(Mn,"utf8").split(`
15
- `).filter(Boolean).slice(-e)}catch{return[]}}var vc=process.env.NODE_ENV==="development"||process.env.AGENT_DEBUG==="1";function B(e){return{debug:(...t)=>{vc&&Wt(e,"debug",mr(t))},info:(...t)=>Wt(e,"info",mr(t)),warn:(...t)=>Wt(e,"warn",mr(t)),error:(...t)=>Wt(e,"error",mr(t))}}var Cn=Mn;var Ri=(e=0)=>t=>`\x1B[${t+e}m`,ki=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,Pi=(e=0)=>(t,r,o)=>`\x1B[${38+e};2;${t};${r};${o}m`,U={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]}},Uu=Object.keys(U.modifier),Ec=Object.keys(U.color),Sc=Object.keys(U.bgColor),Fu=[...Ec,...Sc];function Tc(){let e=new Map;for(let[t,r]of Object.entries(U)){for(let[o,n]of Object.entries(r))U[o]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},r[o]=U[o],e.set(n[0],n[1]);Object.defineProperty(U,t,{value:r,enumerable:!1})}return Object.defineProperty(U,"codes",{value:e,enumerable:!1}),U.color.close="\x1B[39m",U.bgColor.close="\x1B[49m",U.color.ansi=Ri(),U.color.ansi256=ki(),U.color.ansi16m=Pi(),U.bgColor.ansi=Ri(10),U.bgColor.ansi256=ki(10),U.bgColor.ansi16m=Pi(10),Object.defineProperties(U,{rgbToAnsi256:{value(t,r,o){return t===r&&r===o?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5)},enumerable:!1},hexToRgb:{value(t){let r=/[a-f\d]{6}|[a-f\d]{3}/i.exec(t.toString(16));if(!r)return[0,0,0];let[o]=r;o.length===3&&(o=[...o].map(i=>i+i).join(""));let n=Number.parseInt(o,16);return[n>>16&255,n>>8&255,n&255]},enumerable:!1},hexToAnsi256:{value:t=>U.rgbToAnsi256(...U.hexToRgb(t)),enumerable:!1},ansi256ToAnsi:{value(t){if(t<8)return 30+t;if(t<16)return 90+(t-8);let r,o,n;if(t>=232)r=((t-232)*10+8)/255,o=r,n=r;else{t-=16;let a=t%36;r=Math.floor(t/36)/5,o=Math.floor(a/6)/5,n=a%6/5}let i=Math.max(r,o,n)*2;if(i===0)return 30;let s=30+(Math.round(n)<<2|Math.round(o)<<1|Math.round(r));return i===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(t,r,o)=>U.ansi256ToAnsi(U.rgbToAnsi256(t,r,o)),enumerable:!1},hexToAnsi:{value:t=>U.ansi256ToAnsi(U.hexToAnsi256(t)),enumerable:!1}}),U}var bc=Tc(),Te=bc;var wr=R(require("node:process"),1),Ii=R(require("node:os"),1),no=R(require("node:tty"),1);function ye(e,t=globalThis.Deno?globalThis.Deno.args:wr.default.argv){let r=e.startsWith("-")?"":e.length===1?"-":"--",o=t.indexOf(r+e),n=t.indexOf("--");return o!==-1&&(n===-1||o<n)}var{env:F}=wr.default,yr;ye("no-color")||ye("no-colors")||ye("color=false")||ye("color=never")?yr=0:(ye("color")||ye("colors")||ye("color=true")||ye("color=always"))&&(yr=1);function Ac(){if("FORCE_COLOR"in F)return F.FORCE_COLOR==="true"?1:F.FORCE_COLOR==="false"?0:F.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(F.FORCE_COLOR,10),3)}function xc(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function Rc(e,{streamIsTTY:t,sniffFlags:r=!0}={}){let o=Ac();o!==void 0&&(yr=o);let n=r?yr:o;if(n===0)return 0;if(r){if(ye("color=16m")||ye("color=full")||ye("color=truecolor"))return 3;if(ye("color=256"))return 2}if("TF_BUILD"in F&&"AGENT_NAME"in F)return 1;if(e&&!t&&n===void 0)return 0;let i=n||0;if(F.TERM==="dumb")return i;if(wr.default.platform==="win32"){let s=Ii.default.release().split(".");return Number(s[0])>=10&&Number(s[2])>=10586?Number(s[2])>=14931?3:2:1}if("CI"in F)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(s=>s in F)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(s=>s in F)||F.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in F)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(F.TEAMCITY_VERSION)?1:0;if(F.COLORTERM==="truecolor"||F.TERM==="xterm-kitty"||F.TERM==="xterm-ghostty"||F.TERM==="wezterm")return 3;if("TERM_PROGRAM"in F){let s=Number.parseInt((F.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(F.TERM_PROGRAM){case"iTerm.app":return s>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(F.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(F.TERM)||"COLORTERM"in F?1:i}function Oi(e,t={}){let r=Rc(e,{streamIsTTY:e&&e.isTTY,...t});return xc(r)}var kc={stdout:Oi({isTTY:no.default.isatty(1)}),stderr:Oi({isTTY:no.default.isatty(2)})},Li=kc;function _i(e,t,r){let o=e.indexOf(t);if(o===-1)return e;let n=t.length,i=0,s="";do s+=e.slice(i,o)+t+r,i=o+n,o=e.indexOf(t,i);while(o!==-1);return s+=e.slice(i),s}function Mi(e,t,r,o){let n=0,i="";do{let s=e[o-1]==="\r";i+=e.slice(n,s?o-1:o)+t+(s?`\r
9
+ `}l||(n+=p)}else{var w=Vo(jr).times(o.getModuleCount()+3);n+=w+`
10
+ `,o.modules.forEach(function(E){n+=jr,n+=E.map(tu).join(""),n+=jr+`
11
+ `}),n+=w}r?r(n):console.log(n)},setErrorLevel:function(e){this.error=Ca[e]||this.error}}});var fr=require("fs"),On=require("path"),si=require("url"),ai=R(require("os"),1);var ur=R(require("dns"),1),Se=R(require("path"),1),zo=R(require("os"),1),le="9remote",Qr=process.env.NREMOTE_REGISTRY||`https://registry.npmjs.org/${le}/latest`,Ue=`${le}@latest`,ke=process.env.NREMOTE_HOME||Se.default.join(zo.default.homedir(),".9remote"),V={ROOT:ke,LOGS:Se.default.join(ke,"logs"),STATE:Se.default.join(ke,"state"),CONFIG:Se.default.join(ke,"config"),BIN:Se.default.join(ke,"bin"),PIDS:Se.default.join(ke,"pids"),BUFFERS:Se.default.join(ke,"buffers"),DAEMON:Se.default.join(ke,"daemon"),AI_SESSIONS:Se.default.join(ke,"ai-sessions"),BACKGROUNDS:Se.default.join(ke,"backgrounds")},kn=new ur.default.promises.Resolver;kn.setServers(["1.1.1.1","1.0.0.1","8.8.8.8"]);var Xr=ur.default.lookup,oc=/^(\d{1,3}\.){3}\d{1,3}$|^::1$|^[0-9a-f:]+$/i;ur.default.lookup=(e,t,r)=>{if(typeof t=="function"&&(r=t,t={}),e==="localhost"||oc.test(e))return Xr(e,t,r);(async()=>{if(t.family===6)return{addrs:await kn.resolve6(e),family:6};if(t.family===4)return{addrs:await kn.resolve4(e),family:4};let[n,i]=await Promise.allSettled([kn.resolve4(e),kn.resolve6(e)]);return n.status==="fulfilled"&&n.value?.length?{addrs:n.value,family:4}:i.status==="fulfilled"&&i.value?.length?{addrs:i.value,family:6}:null})().then(n=>{if(!n?.addrs?.length)return Xr(e,t,r);t.all?r(null,n.addrs.map(i=>({address:i,family:n.family}))):r(null,n.addrs[0],n.family)}).catch(()=>Xr(e,t,r))};var P=2208,ei=process.execPath,ti=(e=process.env)=>process.versions.electron?{...e,ELECTRON_RUN_AS_NODE:"1"}:{...e};var Jo=5173,Zo=3e3;var bu=[`http://localhost:${P}`,`http://127.0.0.1:${P}`,`http://localhost:${Jo}`,`http://127.0.0.1:${Jo}`,`http://localhost:${Zo}`,`http://127.0.0.1:${Zo}`],Pn={fileName:"agent.log",rotatedName:"agent.log.1",maxBytes:2*1024*1024,cleanupAfterDays:7},ni=60,I={STOPPED:0,PREPARING:1,CONNECTING:2,TUNNELING:3,VERIFYING:4,READY:5},ri={showTunnelUrlInMenu:!1};var oi={CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN:"1"};var ii={checkIntervalMs:3e4,requestTimeoutMs:5e3},de={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}},ic={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 H(e,t={}){return fetch(e,{...t,headers:{...ic,...t.headers}})}var sc=(0,On.dirname)((0,si.fileURLToPath)(__importMetaUrl)),ac=[(0,On.join)(ai.default.homedir(),".9remote",".env"),(0,On.join)(sc,"..",".env")];function cc(e){for(let t of e.split(`
12
+ `)){let r=t.trim();if(!r||r.startsWith("#"))continue;let o=r.match(/^([A-Z_][A-Z0-9_]*)\s*=\s*"?(.*?)"?$/);o&&!process.env[o[1]]&&(process.env[o[1]]=o[2])}}for(let e of ac)if((0,fr.existsSync)(e))try{cc((0,fr.readFileSync)(e,"utf8"))}catch{}for(let[e,t]of Object.entries(oi))process.env[e]||(process.env[e]=t);var yo=R(require("path"),1),ps=R(require("fs"),1),ds=require("url");var li=R(ci(),1),Jr=R(require("crypto"),1),{machineIdSync:lc}=li.default;async function Kt(e=null){let t=e||process.env.MACHINE_ID_SALT||"9remote-salt";try{let r=lc();return Jr.default.createHash("sha256").update(r+t).digest("hex").substring(0,16)}catch(r){return console.error("Error getting machine ID:",r),Jr.default.randomUUID().replace(/-/g,"").substring(0,16)}}var pi=R(require("crypto"),1),ui="abcdefghijklmnpqrstuvwxyz123456789",uc=8;function fi(){let e="";for(let t=0;t<uc;t++)e+=ui[pi.default.randomInt(ui.length)];return e}function St(e){return`sk-${(e||"").slice(0,8).toLowerCase()}-${fi()}-${fi()}`}function Zr(e){return/^sk-[a-z0-9]{8}-[a-np-z1-9]{8}-[a-np-z1-9]{8}$/.test(e||"")}function Y(e){if(!Zr(e))return e||null;let t=e.split("-");return`${t[0]}-${t[1]}-${t[2]}`}function di(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 pr(e){return!e||e.length<8?"sk-***":`${e.slice(0,3)}***${e.slice(-4)}`}var ue=R(require("fs"),1),_n=R(require("path"),1);var me=require("fs"),mi=require("path"),fc=0;function Fe(e,t,r={}){let{mode:o=384,spaces:n=2}=r;(0,me.mkdirSync)((0,mi.dirname)(e),{recursive:!0});let i=`${e}.${process.pid}.${++fc}.tmp`;try{(0,me.writeFileSync)(i,JSON.stringify(t,null,n),{mode:o}),(0,me.renameSync)(i,e)}catch(s){try{(0,me.existsSync)(i)&&(0,me.unlinkSync)(i)}catch{}throw s}}function hi(e,t=null){try{return(0,me.existsSync)(e)?JSON.parse((0,me.readFileSync)(e,"utf8")):t}catch{return t}}var Lu=V.STATE,Ln=_n.default.join(V.STATE,"state.json"),zr=_n.default.join(V.ROOT,"keys.json"),dr=_n.default.join(V.STATE,"cmd.json"),gi=_n.default.join(V.STATE,"settings.json");function Ht(){for(let e of[V.ROOT,V.STATE])ue.default.existsSync(e)||ue.default.mkdirSync(e,{recursive:!0})}function yi(){try{return Ht(),ue.default.existsSync(Ln)?JSON.parse(ue.default.readFileSync(Ln,"utf8")):null}catch{return null}}function Cn(e){try{Ht(),Fe(Ln,e)}catch(t){console.error("Error saving state:",t)}}function wi(){try{ue.default.existsSync(Ln)&&ue.default.unlinkSync(Ln)}catch{}}function j(){try{return Ht(),ue.default.existsSync(gi)?JSON.parse(ue.default.readFileSync(gi,"utf8"))||{}:{}}catch{return{}}}function Mn(){try{return Ht(),ue.default.existsSync(zr)?JSON.parse(ue.default.readFileSync(zr,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function Wt(e){try{Ht(),Fe(dr,{cmd:e,ts:Date.now()},{spaces:0})}catch{}}function vi(){try{if(!ue.default.existsSync(dr))return null;let e=JSON.parse(ue.default.readFileSync(dr,"utf8"));return ue.default.unlinkSync(dr),e.cmd}catch{return null}}function Ke(e,t,r="Default"){try{Ht();let o={machineId:e,key:t,name:r,createdAt:new Date().toISOString()};return Fe(zr,o),o}catch(o){return console.error("Error saving key:",o),null}}var Pe=R(require("fs"),1),eo=R(require("path"),1);var hr=V.LOGS,$n=eo.default.join(hr,Pn.fileName),gr=eo.default.join(hr,Pn.rotatedName),Ei=!1,Si=null;function pc(){Pe.default.existsSync(hr)||Pe.default.mkdirSync(hr,{recursive:!0})}function dc(){try{if(Pe.default.statSync($n).size<Pn.maxBytes)return;try{Pe.default.rmSync(gr,{force:!0})}catch{}Pe.default.renameSync($n,gr)}catch{}}function mc(){try{let e=Pe.default.statSync(gr);Date.now()-e.mtimeMs>Pn.cleanupAfterDays*864e5&&Pe.default.rmSync(gr,{force:!0})}catch{}}function to(e){try{dc(),Pe.default.appendFileSync($n,e+`
13
+ `)}catch{}}function mr(e){return e.map(t=>{if(t instanceof Error)return t.stack||t.message;if(typeof t=="object")try{return JSON.stringify(t)}catch{return String(t)}return String(t)}).join(" ")}function Ti(){let e=new Date,t=(r,o=2)=>String(r).padStart(o,"0");return`${t(e.getHours())}:${t(e.getMinutes())}:${t(e.getSeconds())}.${t(e.getMilliseconds(),3)}`}var hc=/\x1b\[[0-9;]*m/g,gc=/https?:\/\/[^\s]+/g;function yc(e){return String(e).replace(hc,"").replace(gc,"").replace(/\s+$/g,"")}function jt(e,t,r){let o=yc(r);if(!o)return;let n=t==="info"?e:`${e}:${t}`,i=`${Ti()} [${n}] ${o}`;if(to(i),Si)try{Si(i)}catch{}}function wc(){process.on("uncaughtException",e=>jt("crash","error",`uncaughtException: ${e?.stack||e?.message||e}`)),process.on("unhandledRejection",e=>{let t=e instanceof Error?e.stack||e.message:String(e);jt("crash","error",`unhandledRejection: ${t}`)}),process.on("exit",e=>to(`${Ti()} [exit] code=${e} pid=${process.pid}`))}function bi(){Ei||(Ei=!0,pc(),mc(),to(`
14
+ === SESSION ${new Date().toISOString()} pid=${process.pid} argv=${process.argv.slice(2).join(" ")} ===`),wc())}function Ai(e=60){try{return Pe.default.readFileSync($n,"utf8").split(`
15
+ `).filter(Boolean).slice(-e)}catch{return[]}}var vc=process.env.NODE_ENV==="development"||process.env.AGENT_DEBUG==="1";function B(e){return{debug:(...t)=>{vc&&jt(e,"debug",mr(t))},info:(...t)=>jt(e,"info",mr(t)),warn:(...t)=>jt(e,"warn",mr(t)),error:(...t)=>jt(e,"error",mr(t))}}var Nn=$n;var rt=R(require("crypto"),1),Vt=require("fs");var xi=require("path");var $u=Buffer.from("302a300506032b656e","hex");var yr=(0,xi.join)(V.CONFIG,"hostKey.json"),Ku=Buffer.from("302a300506032b6570032100","hex"),Gt=null;function no(){if(Gt)return Gt;try{if((0,Vt.existsSync)(yr)){let s=JSON.parse((0,Vt.readFileSync)(yr,"utf8")),a=Buffer.from(s.publicKey,"base64");if(!s.x25519PrivateKey){let l=rt.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"),Fe(yr,s)}let c=Buffer.from(s.x25519PublicKey,"base64");return Gt={privateKey:rt.default.createPrivateKey({key:Buffer.from(s.privateKey,"base64"),format:"der",type:"pkcs8"}),publicKey:rt.default.createPublicKey({key:a,format:"der",type:"spki"}),publicKeyB64:a.subarray(-32).toString("base64"),x25519PrivateKey:rt.default.createPrivateKey({key:Buffer.from(s.x25519PrivateKey,"base64"),format:"der",type:"pkcs8"}),x25519PublicKeyB64:c.subarray(-32).toString("base64")},Gt}}catch{}(0,Vt.mkdirSync)(V.CONFIG,{recursive:!0});let{privateKey:e,publicKey:t}=rt.default.generateKeyPairSync("ed25519"),r=t.export({type:"spki",format:"der"}).toString("base64"),o=e.export({type:"pkcs8",format:"der"}).toString("base64"),n=rt.default.generateKeyPairSync("x25519"),i=n.publicKey.export({type:"spki",format:"der"}).toString("base64");return Fe(yr,{privateKey:o,publicKey:r,x25519PrivateKey:n.privateKey.export({type:"pkcs8",format:"der"}).toString("base64"),x25519PublicKey:i}),Gt={privateKey:e,publicKey:t,publicKeyB64:Buffer.from(r,"base64").subarray(-32).toString("base64"),x25519PrivateKey:n.privateKey,x25519PublicKeyB64:Buffer.from(i,"base64").subarray(-32).toString("base64")},Gt}function ot(){return no().publicKeyB64}function it(){return no().x25519PublicKeyB64}var Ec="9remote-session-v1";function Sc({apiKey:e,tunnelUrl:t,localIp:r,expiryMinutes:o,ts:n}){let i=a=>{let c=a==null?"":String(a);return`${c.length}:${c}`},s=`${Ec}|${i(e)}${i(t)}${i(r)}${i(o)}${i(n)}`;return rt.default.sign(null,Buffer.from(s,"utf8"),no().privateKey).toString("base64")}function Tt(e){let t=Date.now();return{ts:t,sig:Sc({...e,ts:t})}}var ki=R(require("crypto"),1),Pi=require("path");var Tc=B("pairing"),Oi=(0,Pi.join)(V.STATE,"pairing.json"),Ri="ABCDEFGHIJKLMNPQRSTUVWXYZ123456789",bc=2;function Ii(){let e="";for(let t=0;t<bc;t++)e+=Ri[ki.default.randomInt(Ri.length)];return e}function Ac(){let e=hi(Oi,null);return!e||Date.now()>e.expiresAt?null:e}function xc(e){try{Fe(Oi,e)}catch(t){Tc.error(`persist pairing state: ${t.message}`)}}function Li(e,t,r,o=null){xc({tempKey:e,tail:t,expiresAt:r,workerUrl:o})}function _i(){let e=Ac();return e?{tempKey:e.tempKey,tail:e.tail,expiresAt:e.expiresAt}:null}var ro=B("session"),Rc=10;async function Dn(e,t){let r=async()=>{let o=await H(`${t}/api/temp-key/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify((()=>{let n={apiKey:Y(e),expiryMinutes:Rc};return{...n,...Tt(n)}})())});if(!o.ok){let n=await o.json().catch(()=>null);throw new Error(n?.error||`HTTP ${o.status}`)}return o.json()};try{let o;try{o=await r()}catch(i){if(ro.warn(`Temp key creation failed (${i.message}) \u2014 re-registering session`),!await bt(e,t))throw i;o=await r()}let n=Ii();return Li(o.tempKey,n,o.expiresAt,t),{...o,oneTimeKey:`${o.tempKey}${n}`}}catch(o){return ro.error(`Temp key creation failed: ${o?.message||o}`),null}}function Bn(e,t){return t?.tempKey?`${e}/login?k=${t.tempKey}#${t.oneTimeKey}`:`${e}/login`}async function bt(e,t,r,o){try{let n=await H(`${t}/api/session/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:Y(e),hostPublicKey:ot(),hostX25519Key:it(),tempKey:_i()?.tempKey||void 0})});if(!n.ok)throw new Error(`HTTP ${n.status}`);return r&&await H(`${t}/api/session/update`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:Y(e),tunnelUrl:r,...Tt({apiKey:Y(e),tunnelUrl:r})})}).catch(()=>{}),o&&Y(o)!==Y(e)&&await H(`${t}/api/session/delete`,{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:Y(o),...Tt({apiKey:Y(o)})})}).catch(()=>{}),!0}catch(n){return ro.error(`Session registration failed: ${n?.message||n}`),!1}}var Gi=R(require("os"),1);var Tr=R(require("readline"),1),Mi=R(require("http"),1);var oo=require("child_process"),kc={screenRecording:"x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture",accessibility:"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"};function wr(e){let t=kc[e];t&&process.platform==="darwin"&&(0,oo.exec)(`open "${t}"`,()=>{})}function Te({strategy:e,baseMs:t,maxMs:r},o){let n=Math.max(1,o),i=e==="exp"?t*Math.pow(2,n-1):t*n;return Math.min(i,r)}async function vr({config:e,task:t,label:r="task",log:o=()=>{},ctx:n={}}){let i=0;for(;!n.cancelled;){i++;try{if(await t(i))return!0}catch(a){o(`\u274C ${r} attempt ${i} error: ${a?.message||a}`)}if(n.cancelled)return!1;let s=Te(e,i);o(`\u{1F504} ${r} 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"},$i=()=>Math.min(44,process.stdout.columns||44);function so(e,t=null){let o=$i()-2,n=(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,""),u=Math.floor((o-l.length)/2),f=o-l.length-u;return S.orange+"\u2551"+S.reset+" ".repeat(u)+c(a)+" ".repeat(f)+S.orange+"\u2551"+S.reset},s=["",S.orange+"\u2554"+"\u2550".repeat(o)+"\u2557"+S.reset,n(),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),n()];return t&&(s.push(i(`\u2B06 New version v${t} available!`,a=>S.yellow+S.bold+a+S.reset)),s.push(i(`Run: npm i -g ${Ue}`,a=>S.dim+a+S.reset)),s.push(n())),s.push(S.orange+"\u255A"+"\u2550".repeat(o)+"\u255D"+S.reset),s.push(""),s.join(`
16
+ `)}function Xt(e,t=null){console.log(so(e,t))}var Ci=["\u28FE","\u28FD","\u28FB","\u28BF","\u287F","\u28DF","\u28EF","\u28F7"],io=[{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"}],Pc=process.platform==="win32",Oc=Pc?120:80;process.on("exit",()=>process.stdout.write("\x1B[?25h"));var Ni=(e,t)=>{process.stdout.write("\x1B[?25h"),process.listenerCount(e)<=1&&process.exit(t)};process.on("SIGINT",()=>Ni("SIGINT",130));process.on("SIGTERM",()=>Ni("SIGTERM",143));var He=0,At=null,Er=0,Oe=-1,Un=null,Yt=null,Sr=!1;function Di(){let e=[],t=Oe===io.length-1;return io.forEach((r,o)=>{let n=o===Oe&&Un?Un:r.desc;if(o<Oe||t&&o===Oe)e.push(` ${S.green}\u2713${S.reset} ${S.dim}${r.label}${S.reset}`),Yt&&o===Yt.afterIdx&&e.push(` ${S.green}\u2713${S.reset} ${S.cyan}${Yt.text}${S.reset}`);else if(o===Oe){let i=Ci[Er%Ci.length];e.push(` ${S.orange}${i}${S.reset} ${S.bold}${r.label}${S.reset} ${S.dim}${n}${S.reset}`)}else e.push(` ${S.dim}\u25CB ${r.label}${S.reset}`)}),e}function Bi(){let e=Di();He>0&&process.stdout.write(`\x1B[${He}A\x1B[0J`),process.stdout.write(e.join(`
17
+ `)+`
18
+ `),He=e.length}function Ui(){if(He===0||Oe<0)return;let e=Di();if(e.length!==He){Bi();return}let t=Oe+(Yt&&Yt.afterIdx<Oe?1:0),r=He-t;process.stdout.write(`\x1B[${r}A\r\x1B[2K${e[t]}\x1B[${r}B\r`)}function Ic(){Sr||(process.stdout.write("\x1B[?25l"),Sr=!0)}function Fi(){Sr&&(process.stdout.write("\x1B[?25h"),Sr=!1)}function Ki(e,t=!1,r=null){At&&(clearInterval(At),At=null),Oe=e,Un=r,Er=0,t||(He=0),Bi(),e>=0&&e<io.length-1?(Ic(),At=setInterval(()=>{Er++,Ui()},Oc)):Fi()}function Qt(e){Un=e,He>0&&Ui()}function Hi(){At&&(clearInterval(At),At=null),Fi(),He=0,Oe=-1,Un=null,Yt=null,Er=0}function Ie(e,t,r=0,o="",n=null,i=null){return new Promise(s=>{let a=r,c=!0,l=!0,u=process.platform==="win32",f=()=>{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 E of w.split(`
19
+ `))process.stdout.write(E+`\x1B[K
20
+ `);e&&process.stdout.write(`${S.dim}${e}${S.reset}\x1B[K
21
+ \x1B[K
22
+ `),t.forEach((E,O)=>{let T=O===a?u?">":"\u2605":u?" ":"\u2606",A=O===a?` \x1B[7m${S.bold}${T} ${E.label}${S.reset}`:` ${T} ${E.label}`;process.stdout.write(A+`\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,E)=>{!c||!E||(E.name==="up"?(a=(a-1+t.length)%t.length,f()):E.name==="down"?(a=(a+1)%t.length,f()):E.name==="return"?(p(),s(a)):E.name==="escape"?(p(),s(-1)):E.ctrl&&E.name==="c"&&(p(),i&&i(),process.exit(0)))};if(process.stdin.removeAllListeners("keypress"),Tr.default.emitKeypressEvents(process.stdin),process.stdin.isTTY)try{process.stdin.setRawMode(!0)}catch{s(-1);return}process.stdin.on("keypress",d),process.stdin.resume(),f(),n&&n(f,()=>{c&&(p(),s(-2))})})}function ao(e){return new Promise(t=>{if(process.stdin.removeAllListeners("keypress"),process.stdin.isTTY)try{process.stdin.setRawMode(!1)}catch{}if(process.stdin.pause(),process.stdout.write(`${e} (y/N): `),Tr.default.emitKeypressEvents(process.stdin),process.stdin.isTTY)try{process.stdin.setRawMode(!0)}catch{}process.stdin.resume();let r=(o,n)=>{if(!n)return;if(process.stdin.removeListener("keypress",r),process.stdin.isTTY)try{process.stdin.setRawMode(!1)}catch{}process.stdin.pause(),n.ctrl&&n.name==="c"&&(process.stdout.write(`
24
+ `),process.exit(0));let i=(n.name||"").toLowerCase()==="y";process.stdout.write((i?"y":"n")+`
25
+ `),t(i)};process.stdin.on("keypress",r)})}function Wi(e,t){return new Promise(r=>{let o=e?e.slice(0,8):"unknown",n=$i(),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(n)}${S.reset}`;if(process.stdout.write(`\x1B[2J\x1B[H
26
+ ${s}
27
+ ${S.orange}${S.bold} \u{1F514} New Device Connection${S.reset}
28
+ ${s}
29
+ Device: ${S.cyan}${o}...${S.reset}
30
+ IP: ${S.cyan}${t}${S.reset}
31
+ ${s}
32
+
33
+ Allow this device? ${S.dim}(y/n)${S.reset} `),Tr.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,u)=>{if(!u)return;let f=(u.name||"").toLowerCase(),p=f==="y"||u.name==="return",d=f==="n"||u.name==="escape",h=u.ctrl&&u.name==="c";if(!p&&!d&&!h)return;try{if(process.stdin.removeListener("keypress",c),process.stdin.isTTY)try{process.stdin.setRawMode(!1)}catch{}process.stdin.pause()}catch{}h&&process.exit(0);let w=p,E=w?`${S.green}y${S.reset}
34
+
35
+ ${S.green}\u2713 Device approved${S.reset}
36
+ `:`${S.red}n${S.reset}
37
+
38
+ ${S.red}\u2717 Device rejected${S.reset}
39
+ `;process.stdout.write(E),setTimeout(()=>{try{a()}catch{}r(w)},500)};process.stdin.on("keypress",c)})}function ji(e,t){let r=null,o=!1,n=null,i=45e3,s=()=>{n&&clearTimeout(n),n=setTimeout(()=>{try{r?.destroy()}catch{}},i)},a=async()=>{if(o)return;let c=await qt();r=Mi.default.get(`http://${c}:${e}/api/ui/events`,l=>{let u="";s(),l.on("data",f=>{s(),u+=f.toString();let p=u.split(`
40
+ `);u=p.pop();let d="";for(let h of p)if(h.startsWith("data: "))d=h.slice(6);else if(h===""&&d){try{let w=JSON.parse(d);Promise.resolve(t(w.type,w)).catch(()=>{})}catch{}d=""}}),l.on("end",()=>{n&&clearTimeout(n),o||setTimeout(a,Te(de.sse,1))})}),r.on("error",()=>{n&&clearTimeout(n),o||setTimeout(a,Te(de.sse,1))})};return a(),()=>{o=!0,n&&clearTimeout(n),r?.destroy()}}var co=!1;function Vi(e){co=e}var Fn=null;async function qt(){if(Fn)return Fn;let e=o=>fetch(`http://${o}:${P}/api/health`,{signal:AbortSignal.timeout(2e3)}).then(n=>n.ok?o:Promise.reject()),r=(await Promise.allSettled(["localhost","127.0.0.1"].map(e))).map((o,n)=>o.status==="fulfilled"?["localhost","127.0.0.1"][n]:null);return Fn=r.find(o=>o==="localhost")||r.find(Boolean)||null,Fn||"127.0.0.1"}function Yi(){Fn=null}async function Q(e,t){let r=await qt();try{return await fetch(`http://${r}:${P}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}catch{return Yi(),null}}async function J(e){let t=await qt();try{let r=await fetch(`http://${t}:${P}${e}`);return r.ok?await r.json():null}catch{return Yi(),null}}async function K(e){await Q("/api/ui/state",e)}async function C(e,t={}){co&&Ki(e-1,e>I.PREPARING),await K({step:e,stepDesc:"",...t})}function br({phase:e,percent:t}){let r=e==="download"?`Downloading tunnel binary ${t??0}%`:"Extracting tunnel binary";co&&Qt(r),K({stepDesc:r})}async function q(){return!!await J("/api/health")}async function lo(){let[e,t,r,o]=await Promise.all([J("/api/ui/state"),J("/api/device/auto-approve"),J("/api/autostart"),J("/api/sleep-inhibit")]);return{desktopEnabled:!!e?.desktopEnabled,remoteAvailable:!!e?.remoteAvailable,autoApprove:!!t?.enabled,autoStart:!!r?.enabled,sleepInhibitMode:o?.mode||"never",sleepInhibitActive:!!o?.active,sleepInhibitPresets:Array.isArray(o?.presets)?o.presets:[]}}function Xi(){let e=Gi.default.networkInterfaces();for(let t of Object.values(e))for(let r of t)if(r.family==="IPv4"&&!r.internal)return r.address;return null}var Qi=(e=0)=>t=>`\x1B[${t+e}m`,qi=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,Ji=(e=0)=>(t,r,o)=>`\x1B[${38+e};2;${t};${r};${o}m`,U={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]}},ff=Object.keys(U.modifier),Lc=Object.keys(U.color),_c=Object.keys(U.bgColor),pf=[...Lc,..._c];function Cc(){let e=new Map;for(let[t,r]of Object.entries(U)){for(let[o,n]of Object.entries(r))U[o]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},r[o]=U[o],e.set(n[0],n[1]);Object.defineProperty(U,t,{value:r,enumerable:!1})}return Object.defineProperty(U,"codes",{value:e,enumerable:!1}),U.color.close="\x1B[39m",U.bgColor.close="\x1B[49m",U.color.ansi=Qi(),U.color.ansi256=qi(),U.color.ansi16m=Ji(),U.bgColor.ansi=Qi(10),U.bgColor.ansi256=qi(10),U.bgColor.ansi16m=Ji(10),Object.defineProperties(U,{rgbToAnsi256:{value(t,r,o){return t===r&&r===o?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5)},enumerable:!1},hexToRgb:{value(t){let r=/[a-f\d]{6}|[a-f\d]{3}/i.exec(t.toString(16));if(!r)return[0,0,0];let[o]=r;o.length===3&&(o=[...o].map(i=>i+i).join(""));let n=Number.parseInt(o,16);return[n>>16&255,n>>8&255,n&255]},enumerable:!1},hexToAnsi256:{value:t=>U.rgbToAnsi256(...U.hexToRgb(t)),enumerable:!1},ansi256ToAnsi:{value(t){if(t<8)return 30+t;if(t<16)return 90+(t-8);let r,o,n;if(t>=232)r=((t-232)*10+8)/255,o=r,n=r;else{t-=16;let a=t%36;r=Math.floor(t/36)/5,o=Math.floor(a/6)/5,n=a%6/5}let i=Math.max(r,o,n)*2;if(i===0)return 30;let s=30+(Math.round(n)<<2|Math.round(o)<<1|Math.round(r));return i===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(t,r,o)=>U.ansi256ToAnsi(U.rgbToAnsi256(t,r,o)),enumerable:!1},hexToAnsi:{value:t=>U.ansi256ToAnsi(U.hexToAnsi256(t)),enumerable:!1}}),U}var Mc=Cc(),be=Mc;var xr=R(require("node:process"),1),zi=R(require("node:os"),1),uo=R(require("node:tty"),1);function ye(e,t=globalThis.Deno?globalThis.Deno.args:xr.default.argv){let r=e.startsWith("-")?"":e.length===1?"-":"--",o=t.indexOf(r+e),n=t.indexOf("--");return o!==-1&&(n===-1||o<n)}var{env:F}=xr.default,Ar;ye("no-color")||ye("no-colors")||ye("color=false")||ye("color=never")?Ar=0:(ye("color")||ye("colors")||ye("color=true")||ye("color=always"))&&(Ar=1);function $c(){if("FORCE_COLOR"in F)return F.FORCE_COLOR==="true"?1:F.FORCE_COLOR==="false"?0:F.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(F.FORCE_COLOR,10),3)}function Nc(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function Dc(e,{streamIsTTY:t,sniffFlags:r=!0}={}){let o=$c();o!==void 0&&(Ar=o);let n=r?Ar:o;if(n===0)return 0;if(r){if(ye("color=16m")||ye("color=full")||ye("color=truecolor"))return 3;if(ye("color=256"))return 2}if("TF_BUILD"in F&&"AGENT_NAME"in F)return 1;if(e&&!t&&n===void 0)return 0;let i=n||0;if(F.TERM==="dumb")return i;if(xr.default.platform==="win32"){let s=zi.default.release().split(".");return Number(s[0])>=10&&Number(s[2])>=10586?Number(s[2])>=14931?3:2:1}if("CI"in F)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(s=>s in F)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(s=>s in F)||F.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in F)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(F.TEAMCITY_VERSION)?1:0;if(F.COLORTERM==="truecolor"||F.TERM==="xterm-kitty"||F.TERM==="xterm-ghostty"||F.TERM==="wezterm")return 3;if("TERM_PROGRAM"in F){let s=Number.parseInt((F.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(F.TERM_PROGRAM){case"iTerm.app":return s>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(F.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(F.TERM)||"COLORTERM"in F?1:i}function Zi(e,t={}){let r=Dc(e,{streamIsTTY:e&&e.isTTY,...t});return Nc(r)}var Bc={stdout:Zi({isTTY:uo.default.isatty(1)}),stderr:Zi({isTTY:uo.default.isatty(2)})},es=Bc;function ts(e,t,r){let o=e.indexOf(t);if(o===-1)return e;let n=t.length,i=0,s="";do s+=e.slice(i,o)+t+r,i=o+n,o=e.indexOf(t,i);while(o!==-1);return s+=e.slice(i),s}function ns(e,t,r,o){let n=0,i="";do{let s=e[o-1]==="\r";i+=e.slice(n,s?o-1:o)+t+(s?`\r
16
41
  `:`
17
42
  `)+r,n=o+1,o=e.indexOf(`
18
- `,n)}while(o!==-1);return i+=e.slice(n),i}var{stdout:Ci,stderr:$i}=Li,ro=Symbol("GENERATOR"),jt=Symbol("STYLER"),$n=Symbol("IS_EMPTY"),Ni=["ansi","ansi","ansi256","ansi16m"],Gt=Object.create(null),Pc=(e,t={})=>{if(t.level&&!(Number.isInteger(t.level)&&t.level>=0&&t.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=Ci?Ci.level:0;e.level=t.level===void 0?r:t.level};var Oc=e=>{let t=(...r)=>r.join(" ");return Pc(t,e),Object.setPrototypeOf(t,Nn.prototype),t};function Nn(e){return Oc(e)}Object.setPrototypeOf(Nn.prototype,Function.prototype);for(let[e,t]of Object.entries(Te))Gt[e]={get(){let r=vr(this,io(t.open,t.close,this[jt]),this[$n]);return Object.defineProperty(this,e,{value:r}),r}};Gt.visible={get(){let e=vr(this,this[jt],!0);return Object.defineProperty(this,"visible",{value:e}),e}};var oo=(e,t,r,...o)=>e==="rgb"?t==="ansi16m"?Te[r].ansi16m(...o):t==="ansi256"?Te[r].ansi256(Te.rgbToAnsi256(...o)):Te[r].ansi(Te.rgbToAnsi(...o)):e==="hex"?oo("rgb",t,r,...Te.hexToRgb(...o)):Te[r][e](...o),Ic=["rgb","hex","ansi256"];for(let e of Ic){Gt[e]={get(){let{level:r}=this;return function(...o){let n=io(oo(e,Ni[r],"color",...o),Te.color.close,this[jt]);return vr(this,n,this[$n])}}};let t="bg"+e[0].toUpperCase()+e.slice(1);Gt[t]={get(){let{level:r}=this;return function(...o){let n=io(oo(e,Ni[r],"bgColor",...o),Te.bgColor.close,this[jt]);return vr(this,n,this[$n])}}}}var Lc=Object.defineProperties(()=>{},{...Gt,level:{enumerable:!0,get(){return this[ro].level},set(e){this[ro].level=e}}}),io=(e,t,r)=>{let o,n;return r===void 0?(o=e,n=t):(o=r.openAll+e,n=t+r.closeAll),{open:e,close:t,openAll:o,closeAll:n,parent:r}},vr=(e,t,r)=>{let o=(...n)=>_c(o,n.length===1?""+n[0]:n.join(" "));return Object.setPrototypeOf(o,Lc),o[ro]=e,o[jt]=t,o[$n]=r,o},_c=(e,t)=>{if(e.level<=0||!t)return e[$n]?"":t;let r=e[jt];if(r===void 0)return t;let{openAll:o,closeAll:n}=r;if(t.includes("\x1B"))for(;r!==void 0;)t=_i(t,r.close,r.open),r=r.parent;let i=t.indexOf(`
19
- `);return i!==-1&&(t=Mi(t,n,o,i)),o+t+n};Object.defineProperties(Nn.prototype,Gt);var Mc=Nn(),Yu=Nn({level:$i?$i.level:0});var m=Mc;var q=require("fs"),zi=require("url"),Un=require("child_process"),_e=R(require("path"),1),Qt=R(require("os"),1);var Vt=R(require("fs"),1),so=R(require("path"),1),Di=R(require("os"),1),Bi=require("child_process"),Er=so.default.join(Di.default.homedir(),".9remote","pids");function Cc(){try{Vt.default.existsSync(Er)||Vt.default.mkdirSync(Er,{recursive:!0})}catch{}}function ao(e){return so.default.join(Er,`${e}.pid`)}function Ie(e,t){if(t)try{Cc(),Vt.default.writeFileSync(ao(e),String(t))}catch{}}function Dn(e){try{let t=Vt.default.readFileSync(ao(e),"utf8").trim(),r=parseInt(t,10);return Number.isFinite(r)&&r>0?r:null}catch{return null}}function Ke(e){try{Vt.default.unlinkSync(ao(e))}catch{}}function co(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function $c(e){let t=Dn(e);if(Ke(e),!t)return!1;try{process.platform==="win32"?(0,Bi.execSync)(`taskkill /F /T /PID ${t}`,{stdio:"ignore",windowsHide:!0}):process.kill(t,"SIGKILL")}catch{}return!0}var Nc=["cloudflared","agent"];function Ui(){for(let e of Nc)$c(e)}function Fi(){return Er}var bt=require("child_process"),N=require("fs"),St=require("path"),uo=R(require("os"),1),Tt=R(require("path"),1),Hi=require("url");var Tr=(0,St.join)(G.LOGS,"autostart.log"),Sr="cc.9remote.agent",br="9Remote",Ar=["--tray","--skip-update","--start"],Bn=uo.default.homedir(),Ki=Tt.default.dirname((0,Hi.fileURLToPath)(__importMetaUrl)),te={darwin:(0,St.join)(Bn,"Library","LaunchAgents",`${Sr}.plist`),linux:(0,St.join)(Bn,".config","autostart",`${Sr}.desktop`),linuxSystemd:(0,St.join)(Bn,".config","systemd","user",`${Sr}.service`),win:(0,St.join)(process.env.APPDATA||"","Microsoft","Windows","Start Menu","Programs","Startup",`${br}.vbs`)};function rt(){for(let e=Ki,t=null;e!==t;t=e,e=Tt.default.dirname(e)){let r=Tt.default.join(e,"package.json");if((0,N.existsSync)(r)){try{let o=JSON.parse((0,N.readFileSync)(r,"utf8"));if(o.name!==le)continue;let n=typeof o.bin=="string"?o.bin:o.bin?.[le];if(n){let i=Tt.default.resolve(e,n);if((0,N.existsSync)(i))return i}}catch{}break}}return process.argv[1]||Tt.default.resolve(Ki,"..","index.js")}function Le(){return process.execPath}function Wi(){return process.versions.electron?"env ELECTRON_RUN_AS_NODE=1 ":""}function ji(e){let t=Le(),r=rt();if(process.platform==="win32"){let n=e.join(" "),i=(0,St.join)(uo.default.tmpdir(),`${le}-launch.vbs`);return(0,N.writeFileSync)(i,`CreateObject("WScript.Shell").Run """${t}"" ""${r}"" ${n}", 0, False
20
- `),(0,bt.execFile)("wscript.exe",[i],{windowsHide:!0}).unref?.(),null}let o=(0,bt.spawn)(t,[r,...e],{detached:!0,stdio:"ignore"});return o.unref(),o.pid||null}function Gi(){let e=Tt.default.dirname(Le()),t=["/usr/local/bin","/usr/bin","/bin","/usr/sbin","/sbin","/opt/homebrew/bin"];return t.includes(e)||t.unshift(e),t.join(":")}function lo(e){return String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Dc(e,t){let r=[e,t,...Ar].map(o=>` <string>${lo(o)}</string>`).join(`
43
+ `,n)}while(o!==-1);return i+=e.slice(n),i}var{stdout:rs,stderr:os}=es,fo=Symbol("GENERATOR"),Jt=Symbol("STYLER"),Kn=Symbol("IS_EMPTY"),is=["ansi","ansi","ansi256","ansi16m"],Zt=Object.create(null),Uc=(e,t={})=>{if(t.level&&!(Number.isInteger(t.level)&&t.level>=0&&t.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=rs?rs.level:0;e.level=t.level===void 0?r:t.level};var Fc=e=>{let t=(...r)=>r.join(" ");return Uc(t,e),Object.setPrototypeOf(t,Hn.prototype),t};function Hn(e){return Fc(e)}Object.setPrototypeOf(Hn.prototype,Function.prototype);for(let[e,t]of Object.entries(be))Zt[e]={get(){let r=Rr(this,mo(t.open,t.close,this[Jt]),this[Kn]);return Object.defineProperty(this,e,{value:r}),r}};Zt.visible={get(){let e=Rr(this,this[Jt],!0);return Object.defineProperty(this,"visible",{value:e}),e}};var po=(e,t,r,...o)=>e==="rgb"?t==="ansi16m"?be[r].ansi16m(...o):t==="ansi256"?be[r].ansi256(be.rgbToAnsi256(...o)):be[r].ansi(be.rgbToAnsi(...o)):e==="hex"?po("rgb",t,r,...be.hexToRgb(...o)):be[r][e](...o),Kc=["rgb","hex","ansi256"];for(let e of Kc){Zt[e]={get(){let{level:r}=this;return function(...o){let n=mo(po(e,is[r],"color",...o),be.color.close,this[Jt]);return Rr(this,n,this[Kn])}}};let t="bg"+e[0].toUpperCase()+e.slice(1);Zt[t]={get(){let{level:r}=this;return function(...o){let n=mo(po(e,is[r],"bgColor",...o),be.bgColor.close,this[Jt]);return Rr(this,n,this[Kn])}}}}var Hc=Object.defineProperties(()=>{},{...Zt,level:{enumerable:!0,get(){return this[fo].level},set(e){this[fo].level=e}}}),mo=(e,t,r)=>{let o,n;return r===void 0?(o=e,n=t):(o=r.openAll+e,n=t+r.closeAll),{open:e,close:t,openAll:o,closeAll:n,parent:r}},Rr=(e,t,r)=>{let o=(...n)=>Wc(o,n.length===1?""+n[0]:n.join(" "));return Object.setPrototypeOf(o,Hc),o[fo]=e,o[Jt]=t,o[Kn]=r,o},Wc=(e,t)=>{if(e.level<=0||!t)return e[Kn]?"":t;let r=e[Jt];if(r===void 0)return t;let{openAll:o,closeAll:n}=r;if(t.includes("\x1B"))for(;r!==void 0;)t=ts(t,r.close,r.open),r=r.parent;let i=t.indexOf(`
44
+ `);return i!==-1&&(t=ns(t,n,o,i)),o+t+n};Object.defineProperties(Hn.prototype,Zt);var jc=Hn(),vf=Hn({level:os?os.level:0});var m=jc;var Tf=process.env.NODE_ENV==="development";var L=process.env.NREMOTE_WORKER_URL||"https://9remote.cc",ss=3e4,as=500,ho=300,Ae={cmdMs:1e3,pendingApprovalMs:3e3,statsMs:5e3,serverReadyIntervalMs:200,serverReadyTimeoutMs:5e3,bgServerReadyTimeoutMs:15e3,bgServerReadyIntervalMs:300},st={intervalMs:2e3,timeoutMs:12e4,fetchTimeoutMs:5e3,dnsTimeoutMs:2e3,maxLogEntries:80,postReadyHoldMs:2e3},ne={killCloudflaredMs:500,killCloudflaredTuiMs:300,serverBootMs:2e3,guestRecheckMs:3e3,trayReadyMs:1e3,postReadyHoldMs:2e3,bgSpawnFlushMs:400};var We={maxLogLines:200,headerWidth:44},zt={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock"},cs=5e3,go=12e4,kr=1500,ls=2,us=3e4,fe={orange:m.rgb(230,138,110),orangeDim:m.rgb(200,120,95)};function fs(){return process.env.CODESPACES==="true"}var Gc=yo.default.dirname((0,ds.fileURLToPath)(__importMetaUrl));async function at(){let e=await Kt();if(fs()&&process.env.NREMOTE_API_KEY)return Ke(e,process.env.NREMOTE_API_KEY,"Codespace");let t=Mn();if(t.key)di(t.key)&&(t=await Vc(e,t));else{let r=St(e);t=Ke(e,r,"Default")}return t}async function Vc(e,t){if(await q())return t;let r=St(e);if(j().remoteEnabled===!1)return Ke(e,r,t.name||"Default");await bt(r,L,null,t.key);let o=Mn();return Zr(o.key)?o:Ke(e,r,t.name||"Default")}function Le(){return"3.0.26"}var Z=require("fs"),xs=require("url"),Gn=require("child_process"),Me=R(require("path"),1),nn=R(require("os"),1);var en=R(require("fs"),1),wo=R(require("path"),1),ms=R(require("os"),1),hs=require("child_process"),Pr=wo.default.join(ms.default.homedir(),".9remote","pids");function Yc(){try{en.default.existsSync(Pr)||en.default.mkdirSync(Pr,{recursive:!0})}catch{}}function vo(e){return wo.default.join(Pr,`${e}.pid`)}function _e(e,t){if(t)try{Yc(),en.default.writeFileSync(vo(e),String(t))}catch{}}function Wn(e){try{let t=en.default.readFileSync(vo(e),"utf8").trim(),r=parseInt(t,10);return Number.isFinite(r)&&r>0?r:null}catch{return null}}function je(e){try{en.default.unlinkSync(vo(e))}catch{}}function Eo(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function Xc(e){let t=Wn(e);if(je(e),!t)return!1;try{process.platform==="win32"?(0,hs.execSync)(`taskkill /F /T /PID ${t}`,{stdio:"ignore",windowsHide:!0}):process.kill(t,"SIGKILL")}catch{}return!0}var Qc=["cloudflared","agent"];function gs(){for(let e of Qc)Xc(e)}function ys(){return Pr}var kt=require("child_process"),N=require("fs"),xt=require("path"),To=R(require("os"),1),Rt=R(require("path"),1),vs=require("url");var Ir=(0,xt.join)(V.LOGS,"autostart.log"),Or="cc.9remote.agent",Lr="9Remote",_r=["--tray","--skip-update","--start"],jn=To.default.homedir(),ws=Rt.default.dirname((0,vs.fileURLToPath)(__importMetaUrl)),re={darwin:(0,xt.join)(jn,"Library","LaunchAgents",`${Or}.plist`),linux:(0,xt.join)(jn,".config","autostart",`${Or}.desktop`),linuxSystemd:(0,xt.join)(jn,".config","systemd","user",`${Or}.service`),win:(0,xt.join)(process.env.APPDATA||"","Microsoft","Windows","Start Menu","Programs","Startup",`${Lr}.vbs`)};function ct(){for(let e=ws,t=null;e!==t;t=e,e=Rt.default.dirname(e)){let r=Rt.default.join(e,"package.json");if((0,N.existsSync)(r)){try{let o=JSON.parse((0,N.readFileSync)(r,"utf8"));if(o.name!==le)continue;let n=typeof o.bin=="string"?o.bin:o.bin?.[le];if(n){let i=Rt.default.resolve(e,n);if((0,N.existsSync)(i))return i}}catch{}break}}return process.argv[1]||Rt.default.resolve(ws,"..","index.js")}function Ce(){return process.execPath}function Es(){return process.versions.electron?"env ELECTRON_RUN_AS_NODE=1 ":""}function Ss(e){let t=Ce(),r=ct();if(process.platform==="win32"){let n=e.join(" "),i=(0,xt.join)(To.default.tmpdir(),`${le}-launch.vbs`);return(0,N.writeFileSync)(i,`CreateObject("WScript.Shell").Run """${t}"" ""${r}"" ${n}", 0, False
45
+ `),(0,kt.execFile)("wscript.exe",[i],{windowsHide:!0}).unref?.(),null}let o=(0,kt.spawn)(t,[r,...e],{detached:!0,stdio:"ignore"});return o.unref(),o.pid||null}function Ts(){let e=Rt.default.dirname(Ce()),t=["/usr/local/bin","/usr/bin","/bin","/usr/sbin","/sbin","/opt/homebrew/bin"];return t.includes(e)||t.unshift(e),t.join(":")}function So(e){return String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function qc(e,t){let r=[e,t,..._r].map(o=>` <string>${So(o)}</string>`).join(`
21
46
  `);return`<?xml version="1.0" encoding="UTF-8"?>
22
47
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
23
48
  <plist version="1.0">
24
49
  <dict>
25
50
  <key>Label</key>
26
- <string>${Sr}</string>
51
+ <string>${Or}</string>
27
52
  <key>ProgramArguments</key>
28
53
  <array>
29
54
  ${r}
@@ -35,43 +60,43 @@ ${r}
35
60
  <key>EnvironmentVariables</key>
36
61
  <dict>
37
62
  <key>PATH</key>
38
- <string>${lo(Gi())}</string>
63
+ <string>${So(Ts())}</string>
39
64
  <key>HOME</key>
40
- <string>${lo(Bn)}</string>
65
+ <string>${So(jn)}</string>
41
66
  </dict>
42
67
  <key>StandardOutPath</key>
43
- <string>${Tr}</string>
68
+ <string>${Ir}</string>
44
69
  <key>StandardErrorPath</key>
45
- <string>${Tr}</string>
70
+ <string>${Ir}</string>
46
71
  </dict>
47
72
  </plist>
48
- `}function Bc(){return(0,N.existsSync)(te.darwin)}function Uc(){let e=Ar.join(" ");return`Set WshShell = CreateObject("WScript.Shell")
49
- WshShell.Run """${Le()}"" ""${rt()}"" ${e}", 0, False
50
- `}function Fc(){try{(0,bt.execFileSync)("reg",["DELETE","HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run","/V",br,"/F"],{windowsHide:!0,stdio:"ignore"})}catch{}}function Kc(){return(0,N.existsSync)(te.win)}function Hc(){let e=`${Le()} ${rt()} ${Ar.join(" ")}`;return`[Desktop Entry]
73
+ `}function Jc(){return(0,N.existsSync)(re.darwin)}function Zc(){let e=_r.join(" ");return`Set WshShell = CreateObject("WScript.Shell")
74
+ WshShell.Run """${Ce()}"" ""${ct()}"" ${e}", 0, False
75
+ `}function zc(){try{(0,kt.execFileSync)("reg",["DELETE","HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run","/V",Lr,"/F"],{windowsHide:!0,stdio:"ignore"})}catch{}}function el(){return(0,N.existsSync)(re.win)}function tl(){let e=`${Ce()} ${ct()} ${_r.join(" ")}`;return`[Desktop Entry]
51
76
  Type=Application
52
- Name=${br}
77
+ Name=${Lr}
53
78
  Exec=${e}
54
79
  X-GNOME-Autostart-enabled=true
55
80
  NoDisplay=false
56
81
  Terminal=false
57
- `}function Wc(){let e=Ar.map(t=>`'${t}'`).join(" ");return`[Unit]
58
- Description=${br} Agent
82
+ `}function nl(){let e=_r.map(t=>`'${t}'`).join(" ");return`[Unit]
83
+ Description=${Lr} Agent
59
84
  After=network-online.target
60
85
  Wants=network-online.target
61
86
 
62
87
  [Service]
63
88
  Type=simple
64
- ExecStart=${Le()} ${rt()} ${e}
89
+ ExecStart=${Ce()} ${ct()} ${e}
65
90
  Restart=always
66
91
  RestartSec=10
67
- Environment=PATH=${Gi()}
68
- Environment=HOME=${Bn}
69
- StandardOutput=append:${Tr}
70
- StandardError=append:${Tr}
92
+ Environment=PATH=${Ts()}
93
+ Environment=HOME=${jn}
94
+ StandardOutput=append:${Ir}
95
+ StandardError=append:${Ir}
71
96
 
72
97
  [Install]
73
98
  WantedBy=default.target
74
- `}function jc(e){try{return(0,bt.execFileSync)("systemctl",["--user",...e],{stdio:"ignore"}),!0}catch{return!1}}function Gc(){return(0,N.existsSync)(te.linux)||(0,N.existsSync)(te.linuxSystemd)}async function Vc(){try{if(process.platform==="darwin")return Bc();if(process.platform==="win32")return await Kc();if(process.platform==="linux")return Gc()}catch{}return!1}async function Vi(){try{if(process.platform==="win32"&&Fc(),!await Vc())return!1;if(process.platform==="darwin"){let e=Dc(Le(),rt());return((0,N.existsSync)(te.darwin)?(0,N.readFileSync)(te.darwin,"utf8"):"")===e?!1:((0,N.writeFileSync)(te.darwin,e),!0)}if(process.platform==="win32"){let e=Uc();return((0,N.existsSync)(te.win)?(0,N.readFileSync)(te.win,"utf8"):"")===e?!1:((0,N.writeFileSync)(te.win,e),!0)}if(process.platform==="linux"){if((0,N.existsSync)(te.linuxSystemd)){let e=Wc();return(0,N.readFileSync)(te.linuxSystemd,"utf8")===e?!1:((0,N.writeFileSync)(te.linuxSystemd,e),jc(["daemon-reload"]),!0)}if((0,N.existsSync)(te.linux)){let e=Hc();return(0,N.readFileSync)(te.linux,"utf8")===e?!1:((0,N.writeFileSync)(te.linux,e),!0)}}}catch{}return!1}var zu=process.env.NODE_ENV==="development";var _=process.env.NREMOTE_WORKER_URL||"https://9remote.cc",Yi=3e4,Xi=500,fo=300,be={cmdMs:1e3,pendingApprovalMs:3e3,statsMs:5e3,serverReadyIntervalMs:200,serverReadyTimeoutMs:5e3,bgServerReadyTimeoutMs:15e3,bgServerReadyIntervalMs:300},ot={intervalMs:2e3,timeoutMs:12e4,fetchTimeoutMs:5e3,dnsTimeoutMs:2e3,maxLogEntries:80,postReadyHoldMs:2e3},ne={killCloudflaredMs:500,killCloudflaredTuiMs:300,serverBootMs:2e3,guestRecheckMs:3e3,trayReadyMs:1e3,postReadyHoldMs:2e3,bgSpawnFlushMs:400};var He={maxLogLines:200,headerWidth:44},Yt={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock"},Qi=5e3,po=12e4,xr=1500,qi=2,Ji=3e4,fe={orange:m.rgb(230,138,110),orangeDim:m.rgb(200,120,95)};var Xt=B("update"),Yc=_e.default.dirname((0,zi.fileURLToPath)(__importMetaUrl)),es=8e3;var kr=2208,mo=_e.default.join(Qt.default.homedir(),".9remote","cloudflared.pid");function Xc(){try{Ui()}catch{}try{if((0,q.existsSync)(mo)){let e=parseInt((0,q.readFileSync)(mo,"utf8"));if(Number.isFinite(e))try{process.kill(e)}catch{}try{(0,q.unlinkSync)(mo)}catch{}}}catch{}try{process.platform==="win32"?(0,Un.execSync)(`for /f "tokens=5" %a in ('netstat -aon ^| findstr :${kr}') do taskkill /F /PID %a`,{stdio:"ignore",windowsHide:!0}):(0,Un.execSync)(`lsof -ti:${kr} | xargs kill -9 2>/dev/null || true`,{stdio:"ignore"})}catch{}if(process.platform==="win32"){let e=Date.now()+1500;for(;Date.now()<e;);}}function ts(){return"3.0.25"}function ns(e,t){let r=e.split(".").map(Number),o=t.split(".").map(Number);for(let n=0;n<3;n++){if(o[n]>r[n])return!0;if(o[n]<r[n])return!1}return!1}function Qc(){return process.env.CODESPACES==="true"||process.env.GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN?"GitHub Codespaces":(0,q.existsSync)("/.dockerenv")?"Docker":null}function Pr(){Xc()}async function rs(){try{let e=ts();if(!e)return null;let t=await H(Qr,{signal:AbortSignal.timeout(es)});if(!t.ok)return null;let{version:r}=await t.json();return r&&ns(e,r)?{current:e,latest:r}:null}catch{return null}}var Rr=_e.default.join(G.STATE,Yt.lockFile);function qc(){try{if((0,q.existsSync)(Rr)){let{pid:e,ts:t}=JSON.parse((0,q.readFileSync)(Rr,"utf8")),r=Date.now()-t<Yt.lockTtlMs,o=!1;try{process.kill(e,0),o=!0}catch{}if(r&&o)return!1}}catch{}try{(0,q.writeFileSync)(Rr,JSON.stringify({pid:process.pid,ts:Date.now()}))}catch{}return!0}async function Jc(){try{let e=await H(Qr,{signal:AbortSignal.timeout(es)});if(!e.ok)return null;let{version:t}=await e.json();return t||null}catch{return null}}function Zc(){try{if(process.env.NREMOTE_REGISTRY)return`--registry ${new URL(process.env.NREMOTE_REGISTRY).origin}`}catch{}return""}function zc(){let e=rt(),t=_e.default.sep,r=`${t}lib${t}node_modules${t}`,o=e.indexOf(r);return o>0?{global:"-g",prefix:`--prefix "${e.slice(0,o)}"`}:(o=e.indexOf(`${t}node_modules${t}`),o>0?{global:"",prefix:`--prefix "${e.slice(0,o)}"`}:{global:"-g",prefix:""})}function Zi(){let e=process.argv.slice(2).filter(n=>n!=="--skip-update"),r=e.includes("ui")||e.includes("start")||e.some(n=>["--tray","--auto","--start"].includes(n))?e.join(" "):"--tray";return`${r.includes("--start")||r.includes("start")?r:`${r} --start`} --skip-update`}function el(){let e=process.env.NREMOTE_NPM_CLI;return e&&(0,q.existsSync)(e)?process.platform==="win32"?`"${Le()}" "${e}"`:`env ELECTRON_RUN_AS_NODE=1 "${Le()}" "${e}"`:"npm"}function tl({currentVersion:e,latest:t,agentPid:r}){let o=Fi(),n=Zc(),i=Le(),s=Wi(),a=rt(),c=Rr,{global:l,prefix:u}=zc(),f=`${l} --prefer-online --no-audit --no-fund ${n} ${u}`.trim(),p=el();if(process.platform==="win32"){let w=_e.default.join(Qt.default.tmpdir(),`${le}-restart.vbs`),E=`@echo off
99
+ `}function rl(e){try{return(0,kt.execFileSync)("systemctl",["--user",...e],{stdio:"ignore"}),!0}catch{return!1}}function ol(){return(0,N.existsSync)(re.linux)||(0,N.existsSync)(re.linuxSystemd)}async function il(){try{if(process.platform==="darwin")return Jc();if(process.platform==="win32")return await el();if(process.platform==="linux")return ol()}catch{}return!1}async function bs(){try{if(process.platform==="win32"&&zc(),!await il())return!1;if(process.platform==="darwin"){let e=qc(Ce(),ct());return((0,N.existsSync)(re.darwin)?(0,N.readFileSync)(re.darwin,"utf8"):"")===e?!1:((0,N.writeFileSync)(re.darwin,e),!0)}if(process.platform==="win32"){let e=Zc();return((0,N.existsSync)(re.win)?(0,N.readFileSync)(re.win,"utf8"):"")===e?!1:((0,N.writeFileSync)(re.win,e),!0)}if(process.platform==="linux"){if((0,N.existsSync)(re.linuxSystemd)){let e=nl();return(0,N.readFileSync)(re.linuxSystemd,"utf8")===e?!1:((0,N.writeFileSync)(re.linuxSystemd,e),rl(["daemon-reload"]),!0)}if((0,N.existsSync)(re.linux)){let e=tl();return(0,N.readFileSync)(re.linux,"utf8")===e?!1:((0,N.writeFileSync)(re.linux,e),!0)}}}catch{}return!1}var tn=B("update"),sl=Me.default.dirname((0,xs.fileURLToPath)(__importMetaUrl)),Rs=8e3;var Mr=2208,bo=Me.default.join(nn.default.homedir(),".9remote","cloudflared.pid");function al(){try{gs()}catch{}try{if((0,Z.existsSync)(bo)){let e=parseInt((0,Z.readFileSync)(bo,"utf8"));if(Number.isFinite(e))try{process.kill(e)}catch{}try{(0,Z.unlinkSync)(bo)}catch{}}}catch{}try{process.platform==="win32"?(0,Gn.execSync)(`for /f "tokens=5" %a in ('netstat -aon ^| findstr :${Mr}') do taskkill /F /PID %a`,{stdio:"ignore",windowsHide:!0}):(0,Gn.execSync)(`lsof -ti:${Mr} | xargs kill -9 2>/dev/null || true`,{stdio:"ignore"})}catch{}if(process.platform==="win32"){let e=Date.now()+1500;for(;Date.now()<e;);}}function ks(){return"3.0.26"}function Ps(e,t){let r=e.split(".").map(Number),o=t.split(".").map(Number);for(let n=0;n<3;n++){if(o[n]>r[n])return!0;if(o[n]<r[n])return!1}return!1}function cl(){return process.env.CODESPACES==="true"||process.env.GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN?"GitHub Codespaces":(0,Z.existsSync)("/.dockerenv")?"Docker":null}function $r(){al()}async function Os(){try{let e=ks();if(!e)return null;let t=await H(Qr,{signal:AbortSignal.timeout(Rs)});if(!t.ok)return null;let{version:r}=await t.json();return r&&Ps(e,r)?{current:e,latest:r}:null}catch{return null}}var Cr=Me.default.join(V.STATE,zt.lockFile);function ll(){try{if((0,Z.existsSync)(Cr)){let{pid:e,ts:t}=JSON.parse((0,Z.readFileSync)(Cr,"utf8")),r=Date.now()-t<zt.lockTtlMs,o=!1;try{process.kill(e,0),o=!0}catch{}if(r&&o)return!1}}catch{}try{(0,Z.writeFileSync)(Cr,JSON.stringify({pid:process.pid,ts:Date.now()}))}catch{}return!0}async function ul(){try{let e=await H(Qr,{signal:AbortSignal.timeout(Rs)});if(!e.ok)return null;let{version:t}=await e.json();return t||null}catch{return null}}function fl(){try{if(process.env.NREMOTE_REGISTRY)return`--registry ${new URL(process.env.NREMOTE_REGISTRY).origin}`}catch{}return""}function pl(){let e=ct(),t=Me.default.sep,r=`${t}lib${t}node_modules${t}`,o=e.indexOf(r);return o>0?{global:"-g",prefix:`--prefix "${e.slice(0,o)}"`}:(o=e.indexOf(`${t}node_modules${t}`),o>0?{global:"",prefix:`--prefix "${e.slice(0,o)}"`}:{global:"-g",prefix:""})}function As(){let e=process.argv.slice(2).filter(n=>n!=="--skip-update"),r=e.includes("ui")||e.includes("start")||e.some(n=>["--tray","--auto","--start"].includes(n))?e.join(" "):"--tray";return`${r.includes("--start")||r.includes("start")?r:`${r} --start`} --skip-update`}function dl(){let e=process.env.NREMOTE_NPM_CLI;return e&&(0,Z.existsSync)(e)?process.platform==="win32"?`"${Ce()}" "${e}"`:`env ELECTRON_RUN_AS_NODE=1 "${Ce()}" "${e}"`:"npm"}function ml({currentVersion:e,latest:t,agentPid:r}){let o=ys(),n=fl(),i=Ce(),s=Es(),a=ct(),c=Cr,{global:l,prefix:u}=pl(),f=`${l} --prefer-online --no-audit --no-fund ${n} ${u}`.trim(),p=dl();if(process.platform==="win32"){let w=Me.default.join(nn.default.tmpdir(),`${le}-restart.vbs`),E=`@echo off
75
100
  setlocal EnableDelayedExpansion
76
101
  set "NODE=${i}"
77
102
  set "CLI=${a}"
@@ -90,7 +115,7 @@ for %%N in (cloudflared agent) do (
90
115
  del /f /q "${o}\\%%N.pid" >nul 2>&1
91
116
  )
92
117
  )
93
- for /f "tokens=5" %%a in ('netstat -aon ^| findstr :${kr}') do taskkill /F /PID %%a >nul 2>&1
118
+ for /f "tokens=5" %%a in ('netstat -aon ^| findstr :${Mr}') do taskkill /F /PID %%a >nul 2>&1
94
119
  timeout /t 3 /nobreak >nul
95
120
 
96
121
  set ATTEMPT=0
@@ -98,7 +123,7 @@ set ATTEMPT=0
98
123
  set /a ATTEMPT+=1
99
124
  call ${p} install ${Ue} ${f} >nul 2>&1
100
125
  if !ERRORLEVEL! EQU 0 goto verify
101
- if !ATTEMPT! GEQ ${Yt.maxRetry} (
126
+ if !ATTEMPT! GEQ ${zt.maxRetry} (
102
127
  call ${p} install ${Ue} ${f} --omit=optional >nul 2>&1
103
128
  goto verify
104
129
  )
@@ -124,8 +149,8 @@ del /f /q "${c}" >nul 2>&1
124
149
 
125
150
  wscript "${w}"
126
151
  exit /b 0
127
- `,O=_e.default.join(Qt.default.tmpdir(),`${le}-update.bat`);(0,q.writeFileSync)(O,E),(0,q.writeFileSync)(w,`CreateObject("WScript.Shell").Run """%NODE%"" ""%CLI%"" ${Zi()}", 0, False`.replace("%NODE%",i).replace("%CLI%",a)+`
128
- `);let T=_e.default.join(Qt.default.tmpdir(),`${le}-update.vbs`);return(0,q.writeFileSync)(T,`CreateObject("WScript.Shell").Run "cmd /c ""${O}""", 0, False
152
+ `,O=Me.default.join(nn.default.tmpdir(),`${le}-update.bat`);(0,Z.writeFileSync)(O,E),(0,Z.writeFileSync)(w,`CreateObject("WScript.Shell").Run """%NODE%"" ""%CLI%"" ${As()}", 0, False`.replace("%NODE%",i).replace("%CLI%",a)+`
153
+ `);let T=Me.default.join(nn.default.tmpdir(),`${le}-update.vbs`);return(0,Z.writeFileSync)(T,`CreateObject("WScript.Shell").Run "cmd /c ""${O}""", 0, False
129
154
  `),{shellCmd:["wscript.exe",[T]],windowsVerbatim:!1}}let d=`#!/bin/bash
130
155
  # Wait for agent to exit so it releases the cli.cjs file lock
131
156
  while kill -0 ${r} 2>/dev/null; do sleep 1; done
@@ -139,15 +164,15 @@ for name in cloudflared agent; do
139
164
  rm -f "$f"
140
165
  fi
141
166
  done
142
- lsof -ti:${kr} | xargs kill -9 2>/dev/null || true
167
+ lsof -ti:${Mr} | xargs kill -9 2>/dev/null || true
143
168
  sleep 2
144
169
 
145
170
  attempt=0
146
- while [ $attempt -lt ${Yt.maxRetry} ]; do
171
+ while [ $attempt -lt ${zt.maxRetry} ]; do
147
172
  attempt=$((attempt+1))
148
173
  echo "Installing (attempt $attempt)..."
149
174
  if ${p} install ${Ue} ${f}; then break; fi
150
- if [ $attempt -eq ${Yt.maxRetry} ]; then
175
+ if [ $attempt -eq ${zt.maxRetry} ]; then
151
176
  ${p} install ${Ue} ${f} --omit=optional || true
152
177
  fi
153
178
  sleep 3
@@ -163,92 +188,67 @@ fi
163
188
 
164
189
  rm -f "${c}"
165
190
  ${process.env.NREMOTE_REGISTRY?`export NREMOTE_REGISTRY="${process.env.NREMOTE_REGISTRY}"
166
- `:""}${s}"${i}" "${a}" ${Zi()}
167
- `,h=_e.default.join(Qt.default.tmpdir(),`${le}-update.sh`);return(0,q.writeFileSync)(h,d,{mode:493}),{shellCmd:["sh",[h]],windowsVerbatim:!1}}async function os(){let e=ts();if(!e)return Xt.warn("update skipped: no version (source run?)"),!1;let t=Qc();if(t)return Xt.warn(`update skipped: restricted env (${t})`),!1;let r=await Jc();if(!r)return Xt.warn("update skipped: registry unreachable"),!1;if(!ns(e,r))return Xt.info(`update skipped: ${e} >= registry ${r}`),!1;if(!qc())return Xt.warn("update skipped: lock held by another run"),!1;Xt.info(`update go: ${e} -> ${r}`);let{shellCmd:o,windowsVerbatim:n}=tl({currentVersion:e,latest:r,agentPid:process.pid});return(0,Un.spawn)(o[0],o[1],{detached:!0,stdio:"ignore",windowsHide:!0,windowsVerbatimArguments:n}).unref(),setTimeout(()=>process.exit(0),500),!0}var ys=R(require("os"),1);var Mr=R(require("readline"),1),ss=R(require("http"),1);var ho=require("child_process"),nl={screenRecording:"x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture",accessibility:"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"};function Or(e){let t=nl[e];t&&process.platform==="darwin"&&(0,ho.exec)(`open "${t}"`,()=>{})}function Ae({strategy:e,baseMs:t,maxMs:r},o){let n=Math.max(1,o),i=e==="exp"?t*Math.pow(2,n-1):t*n;return Math.min(i,r)}async function Ir({config:e,task:t,label:r="task",log:o=()=>{},ctx:n={}}){let i=0;for(;!n.cancelled;){i++;try{if(await t(i))return!0}catch(a){o(`\u274C ${r} attempt ${i} error: ${a?.message||a}`)}if(n.cancelled)return!1;let s=Ae(e,i);o(`\u{1F504} ${r} 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"},as=()=>Math.min(44,process.stdout.columns||44);function yo(e,t=null){let o=as()-2,n=(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,""),u=Math.floor((o-l.length)/2),f=o-l.length-u;return S.orange+"\u2551"+S.reset+" ".repeat(u)+c(a)+" ".repeat(f)+S.orange+"\u2551"+S.reset},s=["",S.orange+"\u2554"+"\u2550".repeat(o)+"\u2557"+S.reset,n(),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),n()];return t&&(s.push(i(`\u2B06 New version v${t} available!`,a=>S.yellow+S.bold+a+S.reset)),s.push(i(`Run: npm i -g ${Ue}`,a=>S.dim+a+S.reset)),s.push(n())),s.push(S.orange+"\u255A"+"\u2550".repeat(o)+"\u255D"+S.reset),s.push(""),s.join(`
168
- `)}function Jt(e,t=null){console.log(yo(e,t))}var is=["\u28FE","\u28FD","\u28FB","\u28BF","\u287F","\u28DF","\u28EF","\u28F7"],go=[{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"}],rl=process.platform==="win32",ol=rl?120:80;process.on("exit",()=>process.stdout.write("\x1B[?25h"));var cs=(e,t)=>{process.stdout.write("\x1B[?25h"),process.listenerCount(e)<=1&&process.exit(t)};process.on("SIGINT",()=>cs("SIGINT",130));process.on("SIGTERM",()=>cs("SIGTERM",143));var We=0,At=null,Lr=0,Me=-1,Fn=null,qt=null,_r=!1;function ls(){let e=[],t=Me===go.length-1;return go.forEach((r,o)=>{let n=o===Me&&Fn?Fn:r.desc;if(o<Me||t&&o===Me)e.push(` ${S.green}\u2713${S.reset} ${S.dim}${r.label}${S.reset}`),qt&&o===qt.afterIdx&&e.push(` ${S.green}\u2713${S.reset} ${S.cyan}${qt.text}${S.reset}`);else if(o===Me){let i=is[Lr%is.length];e.push(` ${S.orange}${i}${S.reset} ${S.bold}${r.label}${S.reset} ${S.dim}${n}${S.reset}`)}else e.push(` ${S.dim}\u25CB ${r.label}${S.reset}`)}),e}function us(){let e=ls();We>0&&process.stdout.write(`\x1B[${We}A\x1B[0J`),process.stdout.write(e.join(`
169
- `)+`
170
- `),We=e.length}function fs(){if(We===0||Me<0)return;let e=ls();if(e.length!==We){us();return}let t=Me+(qt&&qt.afterIdx<Me?1:0),r=We-t;process.stdout.write(`\x1B[${r}A\r\x1B[2K${e[t]}\x1B[${r}B\r`)}function il(){_r||(process.stdout.write("\x1B[?25l"),_r=!0)}function ps(){_r&&(process.stdout.write("\x1B[?25h"),_r=!1)}function ds(e,t=!1,r=null){At&&(clearInterval(At),At=null),Me=e,Fn=r,Lr=0,t||(We=0),us(),e>=0&&e<go.length-1?(il(),At=setInterval(()=>{Lr++,fs()},ol)):ps()}function Zt(e){Fn=e,We>0&&fs()}function ms(){At&&(clearInterval(At),At=null),ps(),We=0,Me=-1,Fn=null,qt=null,Lr=0}function Ce(e,t,r=0,o="",n=null,i=null){return new Promise(s=>{let a=r,c=!0,l=!0,u=process.platform==="win32",f=()=>{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 E of w.split(`
171
- `))process.stdout.write(E+`\x1B[K
172
- `);e&&process.stdout.write(`${S.dim}${e}${S.reset}\x1B[K
173
- \x1B[K
174
- `),t.forEach((E,O)=>{let T=O===a?u?">":"\u2605":u?" ":"\u2606",A=O===a?` \x1B[7m${S.bold}${T} ${E.label}${S.reset}`:` ${T} ${E.label}`;process.stdout.write(A+`\x1B[K
175
- `)}),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,E)=>{!c||!E||(E.name==="up"?(a=(a-1+t.length)%t.length,f()):E.name==="down"?(a=(a+1)%t.length,f()):E.name==="return"?(p(),s(a)):E.name==="escape"?(p(),s(-1)):E.ctrl&&E.name==="c"&&(p(),i&&i(),process.exit(0)))};if(process.stdin.removeAllListeners("keypress"),Mr.default.emitKeypressEvents(process.stdin),process.stdin.isTTY)try{process.stdin.setRawMode(!0)}catch{s(-1);return}process.stdin.on("keypress",d),process.stdin.resume(),f(),n&&n(f,()=>{c&&(p(),s(-2))})})}function wo(e){return new Promise(t=>{if(process.stdin.removeAllListeners("keypress"),process.stdin.isTTY)try{process.stdin.setRawMode(!1)}catch{}if(process.stdin.pause(),process.stdout.write(`${e} (y/N): `),Mr.default.emitKeypressEvents(process.stdin),process.stdin.isTTY)try{process.stdin.setRawMode(!0)}catch{}process.stdin.resume();let r=(o,n)=>{if(!n)return;if(process.stdin.removeListener("keypress",r),process.stdin.isTTY)try{process.stdin.setRawMode(!1)}catch{}process.stdin.pause(),n.ctrl&&n.name==="c"&&(process.stdout.write(`
176
- `),process.exit(0));let i=(n.name||"").toLowerCase()==="y";process.stdout.write((i?"y":"n")+`
177
- `),t(i)};process.stdin.on("keypress",r)})}function hs(e,t){return new Promise(r=>{let o=e?e.slice(0,8):"unknown",n=as(),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(n)}${S.reset}`;if(process.stdout.write(`\x1B[2J\x1B[H
178
- ${s}
179
- ${S.orange}${S.bold} \u{1F514} New Device Connection${S.reset}
180
- ${s}
181
- Device: ${S.cyan}${o}...${S.reset}
182
- IP: ${S.cyan}${t}${S.reset}
183
- ${s}
184
-
185
- Allow this device? ${S.dim}(y/n)${S.reset} `),Mr.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,u)=>{if(!u)return;let f=(u.name||"").toLowerCase(),p=f==="y"||u.name==="return",d=f==="n"||u.name==="escape",h=u.ctrl&&u.name==="c";if(!p&&!d&&!h)return;try{if(process.stdin.removeListener("keypress",c),process.stdin.isTTY)try{process.stdin.setRawMode(!1)}catch{}process.stdin.pause()}catch{}h&&process.exit(0);let w=p,E=w?`${S.green}y${S.reset}
186
-
187
- ${S.green}\u2713 Device approved${S.reset}
188
- `:`${S.red}n${S.reset}
189
-
190
- ${S.red}\u2717 Device rejected${S.reset}
191
- `;process.stdout.write(E),setTimeout(()=>{try{a()}catch{}r(w)},500)};process.stdin.on("keypress",c)})}function gs(e,t){let r=null,o=!1,n=null,i=45e3,s=()=>{n&&clearTimeout(n),n=setTimeout(()=>{try{r?.destroy()}catch{}},i)},a=async()=>{if(o)return;let c=await zt();r=ss.default.get(`http://${c}:${e}/api/ui/events`,l=>{let u="";s(),l.on("data",f=>{s(),u+=f.toString();let p=u.split(`
192
- `);u=p.pop();let d="";for(let h of p)if(h.startsWith("data: "))d=h.slice(6);else if(h===""&&d){try{let w=JSON.parse(d);Promise.resolve(t(w.type,w)).catch(()=>{})}catch{}d=""}}),l.on("end",()=>{n&&clearTimeout(n),o||setTimeout(a,Ae(de.sse,1))})}),r.on("error",()=>{n&&clearTimeout(n),o||setTimeout(a,Ae(de.sse,1))})};return a(),()=>{o=!0,n&&clearTimeout(n),r?.destroy()}}var vo=!1;function ws(e){vo=e}var Kn=null;async function zt(){if(Kn)return Kn;let e=o=>fetch(`http://${o}:${P}/api/health`,{signal:AbortSignal.timeout(2e3)}).then(n=>n.ok?o:Promise.reject()),r=(await Promise.allSettled(["localhost","127.0.0.1"].map(e))).map((o,n)=>o.status==="fulfilled"?["localhost","127.0.0.1"][n]:null);return Kn=r.find(o=>o==="localhost")||r.find(Boolean)||null,Kn||"127.0.0.1"}function vs(){Kn=null}async function Q(e,t){let r=await zt();try{return await fetch(`http://${r}:${P}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}catch{return vs(),null}}async function J(e){let t=await zt();try{let r=await fetch(`http://${t}:${P}${e}`);return r.ok?await r.json():null}catch{return vs(),null}}async function K(e){await Q("/api/ui/state",e)}async function M(e,t={}){vo&&ds(e-1,e>I.PREPARING),await K({step:e,stepDesc:"",...t})}function Cr({phase:e,percent:t}){let r=e==="download"?`Downloading tunnel binary ${t??0}%`:"Extracting tunnel binary";vo&&Zt(r),K({stepDesc:r})}async function re(){return!!await J("/api/health")}async function Eo(){let[e,t,r,o]=await Promise.all([J("/api/ui/state"),J("/api/device/auto-approve"),J("/api/autostart"),J("/api/sleep-inhibit")]);return{desktopEnabled:!!e?.desktopEnabled,remoteAvailable:!!e?.remoteAvailable,autoApprove:!!t?.enabled,autoStart:!!r?.enabled,sleepInhibitMode:o?.mode||"never",sleepInhibitActive:!!o?.active,sleepInhibitPresets:Array.isArray(o?.presets)?o.presets:[]}}function Es(){let e=ys.default.networkInterfaces();for(let t of Object.values(e))for(let r of t)if(r.family==="IPv4"&&!r.internal)return r.address;return null}var tr=require("child_process"),nr=R(require("path"),1),Uo=R(require("fs"),1),ea=require("url");var W=R(require("fs"),1),st=R(require("path"),1),Lo=R(require("https"),1),at=R(require("os"),1),_s=R(require("net"),1),Ve=require("child_process");var Ss=R(require("dns"),1),Ts=require("child_process");var sl=2e3,al=5e3,So=new Ss.default.promises.Resolver;So.setServers(["1.1.1.1","1.0.0.1","8.8.8.8"]);function en(){process.platform==="win32"&&(0,Ts.execFile)("ipconfig",["/flushdns"],{windowsHide:!0},()=>{})}async function To(e,t=sl){let r=Date.now();try{let o=async()=>{let[i,s]=await Promise.allSettled([So.resolve4(e),So.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"})),t))]),elapsedMs:Date.now()-r}}catch(o){return{ok:!1,code:o.code||o.message,elapsedMs:Date.now()-r}}}async function tn(e,{flushDns:t=!1}={}){let r=Date.now(),o=null;try{o=new URL(e).hostname}catch{}if(t&&en(),o){let n=await To(o);if(!n.ok)return en(),{ok:!1,dnsCode:n.code,elapsedMs:Date.now()-r}}try{let n=await H(`${e}/api/health`,{signal:AbortSignal.timeout(al)});return{ok:n.ok,httpStatus:n.status,elapsedMs:Date.now()-r}}catch(n){return{ok:!1,dnsCode:n.cause?.code||n.code||n.message,elapsedMs:Date.now()-r}}}var cl=B("tunnel"),Hn=null,Wn=null,nn=null,xt=null,it=0,Ao=!1;async function xo(e){try{let t=await zt();await fetch(`http://${t}:${P}/api/ui/state`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}catch{}}var bo=!1;async function bs(){if(!(!Wn||Ao||bo)){bo=!0;try{await ll()}finally{bo=!1}}}async function ll(){let e=await tn(Wn),t=e.ok?"healthy":"unreachable";if(t===nn){xt=null,it=0;return}if(t!==xt){xt=t,it=1;return}it++,!(it<qi)&&(cl.info(`${nn??"init"} \u2192 ${t}${e.ok?"":` (http=${e.httpStatus??"-"} dns=${e.dnsCode??"-"})`}`),nn=t,xt=null,it=0,await xo({tunnelHealth:{status:t,checkedAt:Date.now()}}))}function As(e){if(!e)return jn();e!==Wn&&(Wn=e,nn=null,xt=null,it=0,en(),Hn||(Hn=setInterval(bs,oi.checkIntervalMs)),bs())}var xs=As,rn=As;function Rs(){Ao=!0}function ks(){Ao=!1}function Rt(e){nn=e,xt=null,it=0,xo({tunnelHealth:{status:e,checkedAt:Date.now()}})}function jn(){Hn&&(clearInterval(Hn),Hn=null),Wn=null,nn=null,xt=null,it=0,xo({tunnelHealth:{status:"unknown",checkedAt:null}})}var Z=B("tunnel"),je={networkCheckIntervalMs:5e3,networkRestoreDelayMs:2500,internetCheckTimeoutMs:3e3,internetCheckHost:"1.1.1.1",internetCheckPort:443,edgeProbeIntervalMs:15e3,edgeProbeFailureThreshold:3,readyTimeoutMs:1500},ul=[20241,20242,20243,20244,20245],an=null;async function fl(e,t){try{let o=await(await fetch(`http://localhost:${e}/ready`,{signal:AbortSignal.timeout(t)})).json();return typeof o?.readyConnections=="number"?o:null}catch{return null}}async function Ps(e,t){let r=await fl(e,t);if(!r)return null;let o=await dl(e,t);return o&&we&&!we.includes(o)?null:r.readyConnections}async function pl(e){if(an!==null){let o=await Ps(an,e);if(o!==null)return o;an=null}let r=(await Promise.all(ul.map(async o=>({port:o,conns:await Ps(o,e)})))).find(o=>o.conns!==null);return r?(an=r.port,r.conns):null}async function dl(e,t){try{return(await(await fetch(`http://localhost:${e}/quicktunnel`,{signal:AbortSignal.timeout(t)})).json())?.hostname||null}catch{return null}}var ml=3e4,Ro=0,Yn=null,$r=null,cn=null,qn=null,ln=!1,Gn=0,Io=!1,we=null,un=0,ko=0,Po=!1,Jn=0,Ge=0,Os=3e4,hl=5e3,Vn=st.default.join(at.default.homedir(),".9remote","bin"),Is="cloudflared",fn=at.default.platform()==="win32",gl=fn?`${Is}.exe`:Is,on=st.default.join(Vn,gl),Oo=st.default.join(at.default.homedir(),".9remote","cloudflared.pid"),Xn=!1,sn=null,yl="2026.6.1",Ms=`https://github.com/cloudflare/cloudflared/releases/download/${yl}`;function Cs(){return new Promise(e=>{let t=new _s.default.Socket,r=!1,o=n=>{if(!r){r=!0;try{t.destroy()}catch{}e(n)}};t.setTimeout(je.internetCheckTimeoutMs),t.once("connect",()=>o(!0)),t.once("timeout",()=>o(!1)),t.once("error",()=>o(!1));try{t.connect(je.internetCheckPort,je.internetCheckHost)}catch{o(!1)}})}async function wl(){Io=!0;try{let e=0;for(;;){if(e++,await Cs())return;await new Promise(t=>setTimeout(t,Ae(de.internet,e)))}}finally{Io=!1}}async function Qn(e,t){if(!qn){Z.warn("No restartCallback registered \u2014 skip");return}if(!ln&&!(Date.now()-ko<hl)){ko=Date.now(),ln=!0;try{await wl();let r=Ae(de.tunnelRestart,Gn+1);await new Promise(o=>setTimeout(o,r)),await qn(e),Gn=0,ko=0}catch(r){Gn++,Z.error(`restart failed (#${Gn}): ${r?.message||r}`),setImmediate(()=>{ln=!1,Qn(e,"retry after fail")});return}finally{ln=!1}}}var vl={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 El(){let e=at.default.platform(),t=at.default.arch(),r=vl[e];if(!r)throw new Error(`Unsupported platform: ${e}`);let o=r[t];if(!o)throw new Error(`Unsupported architecture: ${t} for platform ${e}`);return`${Ms}/${o}`}var Sl=150;async function $s(e,t,r){return new Promise((o,n)=>{let i=W.default.createWriteStream(t);Lo.default.get(e,s=>{if([301,302].includes(s.statusCode)){i.close(),W.default.unlinkSync(t),$s(s.headers.location,t,r).then(o).catch(n);return}if(s.statusCode!==200){i.close(),W.default.unlinkSync(t),n(new Error(`Download failed with status ${s.statusCode}`));return}let a=parseInt(s.headers["content-length"]||"0",10),c=0,l=0,u=-1;s.on("data",f=>{if(c+=f.length,!r||!a)return;let p=Date.now(),d=Math.min(100,Math.floor(c/a*100));d!==u&&p-l>=Sl&&(l=p,u=d,r(d))}),s.pipe(i),i.on("finish",()=>{r&&a&&r(100),i.close(()=>o(t))}),i.on("error",f=>{i.close(),W.default.unlinkSync(t),n(f)})}).on("error",s=>{i.close(),W.default.existsSync(t)&&W.default.unlinkSync(t),n(s)})})}async function Zn(e){if(W.default.existsSync(Vn)||W.default.mkdirSync(Vn,{recursive:!0}),W.default.existsSync(on))return fn||W.default.chmodSync(on,"755"),on;let t=El(),r=t.endsWith(".tgz"),o=r?st.default.join(Vn,"cloudflared.tgz"):on;try{return e?.({phase:"download",percent:0}),await $s(t,o,n=>{e?.({phase:"download",percent:n})}),await Tl(t,o),r&&(e?.({phase:"extract"}),(0,Ve.execSync)(`tar -xzf "${o}" -C "${Vn}"`,{stdio:"pipe",windowsHide:!0}),W.default.unlinkSync(o)),fn||W.default.chmodSync(on,"755"),on}catch(n){try{W.default.existsSync(o)&&W.default.unlinkSync(o)}catch{}throw console.error("Failed to download cloudflared:",n.message),n}}function Ns(e){return new Promise((t,r)=>{Lo.default.get(e,o=>{if([301,302].includes(o.statusCode))return Ns(o.headers.location).then(t).catch(r);if(o.statusCode!==200)return r(new Error(`HTTP ${o.statusCode}`));let n="";o.on("data",i=>n+=i),o.on("end",()=>t(n))}).on("error",r)})}async function Tl(e,t){let r=st.default.basename(e),o;try{o=await Ns(`${Ms}/sha256sum.txt`)}catch(c){Z.warn(`sha256 manifest unavailable (${c.message}), skipping verify`);return}let n=o.split(`
193
- `).find(c=>c.includes(r));if(!n){Z.warn(`No sha256 entry for ${r}, skipping verify`);return}let i=n.trim().split(/\s+/)[0],{createHash:s}=await import("crypto"),a=s("sha256").update(W.default.readFileSync(t)).digest("hex");if(a!==i)throw new Error(`Integrity check failed: SHA256 mismatch (expected ${i}, got ${a})`)}function bl(e){let t=/https:\/\/([a-z0-9-]+)\.trycloudflare\.com/gi,r=[];for(let o of e.matchAll(t))o[1]!=="api"&&r.push(`https://${o[1]}.trycloudflare.com`);return r.length?r[r.length-1]:null}async function Ye(e,t=null,r=null){let o=await Zn();kl(o),r&&(qn=r),cn=e;let n=W.default.mkdtempSync(st.default.join(at.default.tmpdir(),"9remote-quick-")),i=st.default.join(n,"config.yml");W.default.writeFileSync(i,`# quick-tunnel
194
- `,"utf8");let s=!1,a=()=>{if(!s){s=!0;try{W.default.rmSync(n,{recursive:!0,force:!0})}catch{}}},c=(0,Ve.spawn)(o,["tunnel","--url",`http://localhost:${e}`,"--config",i,"--no-autoupdate","--protocol","http2"],{detached:!1,windowsHide:!0,stdio:["ignore","pipe","pipe"]});return Ie("cloudflared",c.pid),sn=c.pid,Xn=!1,new Promise((l,u)=>{let f=!1,p=null,d="",h=setTimeout(()=>{if(!f){f=!0,a(),sn===c.pid&&(sn=null);try{c.kill("SIGKILL")}catch{}Ke("cloudflared"),u(new Error("Quick tunnel timed out after 90s"))}},9e4),w=E=>{let O=E.toString();d+=O,d.length>4096&&(d=d.slice(-4096));let T=bl(O);if(T){if(!f){f=!0,p=T,we=T,un=Date.now(),Ge=0,Jn=0,an=null,clearTimeout(h),a(),Il(),Z.info(`tunnel ready: ${T}`),l({child:c,tunnelUrl:T});return}T!==p&&(Z.info(`URL rotated: ${T}`),p=T,we=T,un=Date.now(),Ge=0,Jn=0,t?.(T))}};c.stdout.on("data",w),c.stderr.on("data",w),c.on("error",E=>{f||(f=!0,clearTimeout(h),a(),u(E))}),c.on("exit",(E,O)=>{a();let T=sn!==c.pid,A=Xn||T;if(Z.info(`cloudflared exited (intentional=${Xn} superseded=${T})`),A||Rt("unreachable"),!f){f=!0,clearTimeout(h);let k=d.trim().split(`
195
- `).slice(-5).join(" | ");sn=null,u(new Error(`cloudflared exited (code=${E}, signal=${O}) output: ${k||"(empty)"}`));return}A||Qn(e,`quick tunnel exit code ${E}`)})})}function Nr(e){if(fn)try{(0,Ve.execSync)(`taskkill /PID ${e} /T /F`,{windowsHide:!0,stdio:"ignore"})}catch{}else try{process.kill(e,"SIGKILL")}catch{}}function Al(e){return e?e.split(`
196
- `).flatMap(t=>{let r=t.match(/^\s*(\d+)\s+(.+)$/);return r?[{pid:Number(r[1]),args:r[2].trim()}]:[]}):[]}function xl(e,t){return Array.isArray(e)?e.filter(r=>{if(!r?.args||typeof r.pid!="number")return!1;let o=r.args.split(/\s+/);return o.includes(t)&&o.includes("tunnel")}).map(r=>r.pid):[]}function Rl(e){try{let t=fn?(0,Ve.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,Ve.execSync)("ps -eo pid=,args=",{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return xl(Al(t),e)}catch{return[]}}function kl(e){let t=Rl(e);for(let r of t)r!==process.pid&&(Z.info(`killing leftover cloudflared pid=${r}`),Nr(r));return t}function Pl(e){try{let t=[];if(fn){let r=`Get-NetTCPConnection -LocalPort ${e} -State Established -ErrorAction SilentlyContinue | Where-Object { (Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name -eq 'cloudflared' } | Select-Object -ExpandProperty OwningProcess -Unique`;t=(0,Ve.execSync)(`powershell -NoProfile -Command "${r}"`,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"]}).split(/\r?\n/).map(n=>+n.trim()).filter(Boolean)}else t=(0,Ve.execSync)(`lsof -nP -iTCP:${e} -sTCP:ESTABLISHED 2>/dev/null | awk '/cloudflar/ {print $2}' | sort -u`,{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).split(`
197
- `).map(o=>+o.trim()).filter(Boolean);for(let r of new Set(t))Nr(r)}catch{}}function ie(){if(!Po){Po=!0;try{try{if(W.default.existsSync(Oo)){let t=parseInt(W.default.readFileSync(Oo,"utf8"));Number.isFinite(t)&&(Xn=!0,Nr(t)),W.default.unlinkSync(Oo)}}catch{}let e=Dn("cloudflared");Xn=!0,sn=null,e&&(Nr(e),Ke("cloudflared")),Pl(P)}finally{setTimeout(()=>{Po=!1},2e3)}}}function Ds(){if(!we)return!1;let e=Dn("cloudflared");return!!e&&co(e)}function Bs(){Gn=0,ln=!1,qn=null,cn=null,we=null,Ge=0,Jn=0,an=null,Ll()}var Ol=/^(utun|awdl|llw|anpi|bridge|gif|stf|ipsec|ap|tun|tap|vmnet|veth|docker)/i;function Ls(){let e=at.default.networkInterfaces(),t=[];for(let[r,o]of Object.entries(e))if(o&&!Ol.test(r))for(let n of o)!n.internal&&n.family==="IPv4"&&t.push(`${r}:${n.address}`);return t.sort().join("|")}function Il(){Yn||($r=Ls(),Ro=Date.now(),Yn=setInterval(async()=>{try{let e=Date.now(),t=e-Ro;if(Ro=e,Io||ln||!qn||cn==null)return;if(t>ml){if(Z.info(`Sleep/wake detected (gap=${t}ms)`),we){let s=!1;for(let a=0;a<3;a++){if((await tn(we)).ok){s=!0;break}a<2&&await new Promise(l=>setTimeout(l,3e3))}if(s)return;Z.info("tunnel unresponsive after sleep \u2192 restarting")}Rt("unreachable"),ie(),Qn(cn,"woke from sleep");return}let r=Ls(),o=r!==$r;$r=r;let n=Dn("cloudflared"),i=!n||!co(n);if(!o&&!i){if(we&&un&&Date.now()-un>Os&&e-Jn>=je.edgeProbeIntervalMs){Jn=e;let s=await tn(we);if(s.ok)Ge=0;else if(++Ge>=je.edgeProbeFailureThreshold){let a=await pl(je.readyTimeoutMs);if(a>0){Z.info(`edge probe failing but cloudflared holds ${a} connection(s) \u2014 not restarting`),Ge=0;return}Z.warn(`tunnel unreachable but cloudflared alive \u2014 edge lost after ${Ge} probes (ready=${a??"unknown"}), restarting`),Ge=0,Rt("unreachable"),ie(),Qn(cn,"tunnel unreachable (edge lost)")}else Z.debug(`edge probe failed (${Ge}/${je.edgeProbeFailureThreshold}) \u2014 ${s.dnsCode??s.httpStatus??"no response"}`)}return}if(o&&!i&&un&&Date.now()-un<Os||(o&&Z.info("Network change detected"),i&&Z.warn("cloudflared not alive \u2014 watchdog"),Rt("unreachable"),await new Promise(s=>setTimeout(s,je.networkRestoreDelayMs)),!await Cs()))return;if(o&&!i&&we){let s=!1;for(let a=0;a<2;a++){if((await tn(we)).ok){s=!0;break}a===0&&await new Promise(l=>setTimeout(l,2e3))}if(s){Z.info("Tunnel survived network change, skip restart");return}}o&&!i&&ie(),Qn(cn,o?"network change":"liveness watchdog")}catch(e){Z.error(`network monitor tick failed: ${e?.message||e}`)}},je.networkCheckIntervalMs))}function Ll(){Yn&&(clearInterval(Yn),Yn=null),$r=null}Ot();var ct=R(require("crypto"),1),gn=require("fs");var Qs=require("path");var Mf=Buffer.from("302a300506032b656e","hex");var Br=(0,Qs.join)(G.CONFIG,"hostKey.json"),Uf=Buffer.from("302a300506032b6570032100","hex"),hn=null;function Mo(){if(hn)return hn;try{if((0,gn.existsSync)(Br)){let s=JSON.parse((0,gn.readFileSync)(Br,"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"),Fe(Br,s)}let c=Buffer.from(s.x25519PublicKey,"base64");return hn={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")},hn}}catch{}(0,gn.mkdirSync)(G.CONFIG,{recursive:!0});let{privateKey:e,publicKey:t}=ct.default.generateKeyPairSync("ed25519"),r=t.export({type:"spki",format:"der"}).toString("base64"),o=e.export({type:"pkcs8",format:"der"}).toString("base64"),n=ct.default.generateKeyPairSync("x25519"),i=n.publicKey.export({type:"spki",format:"der"}).toString("base64");return Fe(Br,{privateKey:o,publicKey:r,x25519PrivateKey:n.privateKey.export({type:"pkcs8",format:"der"}).toString("base64"),x25519PublicKey:i}),hn={privateKey:e,publicKey:t,publicKeyB64:Buffer.from(r,"base64").subarray(-32).toString("base64"),x25519PrivateKey:n.privateKey,x25519PublicKeyB64:Buffer.from(i,"base64").subarray(-32).toString("base64")},hn}function lt(){return Mo().publicKeyB64}function ut(){return Mo().x25519PublicKeyB64}var Dl="9remote-session-v1";function Bl({apiKey:e,tunnelUrl:t,localIp:r,expiryMinutes:o,ts:n}){let i=a=>{let c=a==null?"":String(a);return`${c.length}:${c}`},s=`${Dl}|${i(e)}${i(t)}${i(r)}${i(o)}${i(n)}`;return ct.default.sign(null,Buffer.from(s,"utf8"),Mo().privateKey).toString("base64")}function It(e){let t=Date.now();return{ts:t,sig:Bl({...e,ts:t})}}async function ft(e,t={}){let r=t.intervalMs??ot.intervalMs,o=t.timeoutMs??ot.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>ot.maxLogEntries?c.slice(-ot.maxLogEntries):c;K({healthCheck:{running:!0,timeoutMs:o,startedAt:s,logs:f}})};for(;Date.now()-s<o;){if(a++,en(),i){let f=await To(i,ot.dnsTimeoutMs);if(!f.ok){let p=f.code==="ENOTFOUND"||f.code==="ETIMEOUT"||f.code==="ESERVFAIL",d=p?"connecting...":f.code;Zt(`#${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(ot.fetchTimeoutMs)}),p=Date.now()-u;if(Zt(`#${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,ot.postReadyHoldMs)),!0}catch(f){let p=Date.now()-u,d=f.cause?.code||f.code||f.message,h=d==="ENOTFOUND",w=h?"connecting...":d;Zt(`#${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 Qe=B("tunnel"),Co=null,qs=null,Js=0;async function Lt(e,t){if(Qe.debug(`updateTunnelUrl: key=${e?.slice(0,8)} url=${t}`),X().remoteEnabled===!1)return;if(_t(e),t&&t===qs&&Date.now()-Js<Qi){Qe.debug("updateTunnelUrl: skipped (debounce, same URL)");return}Co&&(Co.cancelled=!0);let r={cancelled:!1};Co=r;let o=Es();Ir({config:de.urlSync,label:`urlSync ${t}`,log:n=>Qe.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:V(e),tunnelUrl:t,localIp:o?`${o}:${P}`:null};return{...s,...It(s)}})())});if(r.cancelled)return!0;if(n.ok)return qs=t,Js=Date.now(),Qe.debug(`urlSync OK: pushed ${t} to server`),Ul(t),!0;let i=await n.text().catch(()=>"");return Qe.warn(`urlSync HTTP ${n.status}: ${i.slice(0,200)}`),!1}}),t&&xs(t)}var yn=null,wn=null,$o=!1,Do=0;async function Bo(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,...It(r)})});return o.ok||Qe.warn(`heartbeat online=${t} HTTP ${o.status}`),o.ok}async function No(){if(!($o||!wn)){$o=!0;try{await Bo(wn,!0),Do=Date.now()}catch(e){Qe.debug(`heartbeat failed: ${e?.message||e}`)}finally{$o=!1}}}function _t(e){let t=V(e);if(t&&X().remoteEnabled!==!1){if(yn&&wn===t){Date.now()-Do>=po&&No();return}Ur(),wn=t,No(),yn=setInterval(No,po),yn.unref?.()}}function Ur({offline:e=!1}={}){yn&&(clearInterval(yn),yn=null);let t=wn;return wn=null,Do=0,!e||!t?null:Bo(t,!1).catch(r=>Qe.debug(`goodbye failed: ${r?.message||r}`))}function pt(e){let t=V(e);if(!t)return Promise.resolve(!1);Ur();let r=Bo(t,!1).catch(o=>(Qe.debug(`offline mark failed: ${o?.message||o}`),!1));return Promise.race([r,new Promise(o=>setTimeout(()=>o(!1),xr))])}var er=null;async function Ul(e){if(er?.url===e)return;let t={url:e};er=t,Rs();try{let r=await ft(e,{timeoutMs:Ji});if(er!==t)return;r&&Rt("healthy")}catch{}finally{er===t&&(er=null),ks()}}var qe=B("server"),ta=nr.default.dirname((0,ea.fileURLToPath)(__importMetaUrl)),Fl=nr.default.resolve(ta,"./server.cjs"),Zs=nr.default.resolve(ta,"../../index.js");function Fr(e){try{process.platform==="win32"?(0,tr.execSync)(`for /f "tokens=5" %a in ('netstat -aon ^| findstr :${e}') do taskkill /F /PID %a`,{stdio:"ignore",windowsHide:!0}):(0,tr.execSync)(`lsof -ti:${e} | xargs kill -9 2>/dev/null || true`,{stdio:"ignore"})}catch{}}function dt(e,t,r){let o=null,n=!1,i=!1,s=!0,a=0,c=null,l=()=>{s&&(Fr(P),s=!1);let u=process.env.NODE_ENV==="development"&&Uo.default.existsSync(Zs),f=u?Zs:Fl;Uo.default.existsSync(f)||(qe.error(`Server not found: ${f}`),process.exit(1));let p={...process.env,PORT:String(P)};u||delete p.NODE_ENV,o=(0,tr.spawn)(zo,[f],{cwd:nr.default.dirname(f),stdio:["ignore","inherit","inherit"],detached:!1,windowsHide:!0,env:ei(p)}),c&&clearTimeout(c),c=setTimeout(()=>{a=0},Yi),o.on("exit",(d,h)=>{if(c&&(clearTimeout(c),c=null),n)return;if(i){i=!1,qe.info("Restarting server (requested)..."),setTimeout(()=>{l(),r?.()},500);return}qe.error(`Server exited unexpectedly (code: ${d}, signal: ${h})`),a++;let w=Ae(de.server,a);qe.warn(`Restarting server in ${w}ms (fail#${a})`),t&&t(),setTimeout(()=>{l(),r?.()},w)}),o.on("error",d=>{qe.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 na(e){return e?.restart?e.restart():!1}function Je({serverManager:e,tunnelProcess:t,exit:r=!0,code:o=0}={}){try{jn()}catch{}try{e?.shutdown?.()}catch{}try{t?.kill?.()}catch{}try{ie()}catch{}try{kt()}catch{}try{Fr(P)}catch{}try{Bs()}catch{}try{gi()}catch{}try{Ke("agent")}catch{}try{Ke("cloudflared")}catch{}let n=Ur({offline:!0});if(r){let i=new Promise(a=>setTimeout(a,Xi)),s=n?Promise.race([n,new Promise(a=>setTimeout(a,xr))]):null;Promise.all([i,s]).finally(()=>process.exit(o))}}var zs=!1;function mt(e,t){if(zs)return;zs=!0;let r=!1,o=n=>{r||(r=!0,qe.info(`Stopping 9Remote (${n})...`),Je({serverManager:e,tunnelProcess:t}),qe.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=>{qe.error(`Uncaught exception: ${n?.stack||n?.message||n}`),o("uncaughtException"),setTimeout(()=>process.exit(1),fo)}),process.on("unhandledRejection",n=>{qe.error(`Unhandled rejection: ${n?.stack||n?.message||n}`),o("unhandledRejection"),setTimeout(()=>process.exit(1),fo)})}Ot();var oa=R(require("crypto"),1),ia=require("path");var Kl=B("pairing"),sa=(0,ia.join)(G.STATE,"pairing.json"),ra="ABCDEFGHIJKLMNPQRSTUVWXYZ123456789",Hl=2;function aa(){let e="";for(let t=0;t<Hl;t++)e+=ra[oa.default.randomInt(ra.length)];return e}function Wl(){let e=di(sa,null);return!e||Date.now()>e.expiresAt?null:e}function jl(e){try{Fe(sa,e)}catch(t){Kl.error(`persist pairing state: ${t.message}`)}}function ca(e,t,r,o=null){jl({tempKey:e,tail:t,expiresAt:r,workerUrl:o})}function la(){let e=Wl();return e?{tempKey:e.tempKey,tail:e.tail,expiresAt:e.expiresAt}:null}var Fo=B("session"),Gl=10;async function rr(e,t){let r=async()=>{let o=await H(`${t}/api/temp-key/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify((()=>{let n={apiKey:V(e),expiryMinutes:Gl};return{...n,...It(n)}})())});if(!o.ok){let n=await o.json().catch(()=>null);throw new Error(n?.error||`HTTP ${o.status}`)}return o.json()};try{let o;try{o=await r()}catch(i){if(Fo.warn(`Temp key creation failed (${i.message}) \u2014 re-registering session`),!await ir(e,t))throw i;o=await r()}let n=aa();return ca(o.tempKey,n,o.expiresAt,t),{...o,oneTimeKey:`${o.tempKey}${n}`}}catch(o){return Fo.error(`Temp key creation failed: ${o?.message||o}`),null}}function or(e,t){return t?.tempKey?`${e}/login?k=${t.tempKey}#${t.oneTimeKey}`:`${e}/login`}async function ir(e,t,r,o){try{let n=await H(`${t}/api/session/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:V(e),hostPublicKey:lt(),hostX25519Key:ut(),tempKey:la()?.tempKey||void 0})});if(!n.ok)throw new Error(`HTTP ${n.status}`);return r&&await H(`${t}/api/session/update`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:V(e),tunnelUrl:r,...It({apiKey:V(e),tunnelUrl:r})})}).catch(()=>{}),o&&V(o)!==V(e)&&await H(`${t}/api/session/delete`,{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:V(o),...It({apiKey:V(o)})})}).catch(()=>{}),!0}catch(n){return Fo.error(`Session registration failed: ${n?.message||n}`),!1}}var Mt=B("tunnel");async function Vl(e,t,r,o){let n=0;for(;;){n++;try{return await Ye(e,t,r)}catch(i){let s=Ae(de.tunnelSpawn,n);Mt.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 Ze({onUrlUpdate:e,setTunnel:t,onRetry:r}){return async o=>{try{let n=await Vl(o,e,null,r);ze(),t(n.child),await e(n.tunnelUrl),Mt.info(`Tunnel restarted: ${n.tunnelUrl}`)}catch(n){Mt.error(`Tunnel restart failed: ${n?.message||n}`)}}}var Kr=null;function ze(){Kr&&(Kr.cancelled=!0,Kr=null)}function vn(e,{onUrlUpdate:t,onRestart:r,setActiveTunnel:o,onReady:n}){ze();let i={cancelled:!1};return Kr=i,Ir({config:de.tunnelRateLimit,task:async()=>{if(i.cancelled)return!0;if(Ds())return Mt.info("bg-tunnel: a tunnel is already live \u2014 standing down"),!0;let s=await Ye(e,t,r);if(i.cancelled){try{ie()}catch{}return!0}try{o?.(s.child),await t?.(s.tunnelUrl),await n?.(s),Mt.info(`bg tunnel up: ${s.tunnelUrl}`)}catch(a){Mt.error(`bg tunnel post-spawn failed: ${a?.message||a}`)}return!0},label:"bg-tunnel",log:s=>Mt.info(s),ctx:i}),i}var Vo=R(Ma(),1);var tu=B("session");function nu(e,t="\u{1F4F1} Scan QR to connect:"){console.log(fe.orange(`
198
- ${t}`)),Vo.default.generate(e,{small:!0,type:"terminal",margin:0},r=>{console.log(r.trim())})}function ru(e){return new Promise(t=>{Vo.default.generate(e,{small:!0,type:"terminal",margin:0},r=>{t(fe.orangeDim("\u{1F4F1} Scan QR to connect:")+`
199
- `+r.trim())})})}async function Gr(e,t){let r=await rr(e,_),o=Math.min(He.headerWidth,process.stdout.columns||55);if(!r){tu.warn("Temp key creation failed \u2014 showing UI without a QR"),await M(I.READY,{tunnelUrl:t,permanentKey:e,workerUrl:_}),console.log(m.red(`
200
- \u274C Failed to create one-time key \u2014 generate a new one from the menu`)),console.log(fe.orange("\u2550".repeat(o))),console.log(m.white("App URL".padEnd(14))+m.gray(`${_}/login`)),console.log(m.white("Key".padEnd(14))+m.gray(e)),console.log(fe.orange("\u2550".repeat(o)));return}let n=or(_,r);await M(I.READY,{tunnelUrl:t,oneTimeKey:r.oneTimeKey,oneTimeKeyExpiresAt:r.expiresAt,permanentKey:e,qrUrl:n,workerUrl:_}),nu(n),console.log(m.gray(`
191
+ `:""}${s}"${i}" "${a}" ${As()}
192
+ `,h=Me.default.join(nn.default.tmpdir(),`${le}-update.sh`);return(0,Z.writeFileSync)(h,d,{mode:493}),{shellCmd:["sh",[h]],windowsVerbatim:!1}}async function Is(){let e=ks();if(!e)return tn.warn("update skipped: no version (source run?)"),!1;let t=cl();if(t)return tn.warn(`update skipped: restricted env (${t})`),!1;let r=await ul();if(!r)return tn.warn("update skipped: registry unreachable"),!1;if(!Ps(e,r))return tn.info(`update skipped: ${e} >= registry ${r}`),!1;if(!ll())return tn.warn("update skipped: lock held by another run"),!1;tn.info(`update go: ${e} -> ${r}`);let{shellCmd:o,windowsVerbatim:n}=ml({currentVersion:e,latest:r,agentPid:process.pid});return(0,Gn.spawn)(o[0],o[1],{detached:!0,stdio:"ignore",windowsHide:!0,windowsVerbatimArguments:n}).unref(),setTimeout(()=>process.exit(0),500),!0}var ir=require("child_process"),sr=R(require("path"),1),Ko=R(require("fs"),1),la=require("url");var W=R(require("fs"),1),ut=R(require("path"),1),Mo=R(require("https"),1),ft=R(require("os"),1),Hs=R(require("net"),1),Ye=require("child_process");var Ls=R(require("dns"),1),_s=require("child_process");var hl=2e3,gl=5e3,Ao=new Ls.default.promises.Resolver;Ao.setServers(["1.1.1.1","1.0.0.1","8.8.8.8"]);function rn(){process.platform==="win32"&&(0,_s.execFile)("ipconfig",["/flushdns"],{windowsHide:!0},()=>{})}async function xo(e,t=hl){let r=Date.now();try{let o=async()=>{let[i,s]=await Promise.allSettled([Ao.resolve4(e),Ao.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"})),t))]),elapsedMs:Date.now()-r}}catch(o){return{ok:!1,code:o.code||o.message,elapsedMs:Date.now()-r}}}async function on(e,{flushDns:t=!1}={}){let r=Date.now(),o=null;try{o=new URL(e).hostname}catch{}if(t&&rn(),o){let n=await xo(o);if(!n.ok)return rn(),{ok:!1,dnsCode:n.code,elapsedMs:Date.now()-r}}try{let n=await H(`${e}/api/health`,{signal:AbortSignal.timeout(gl)});return{ok:n.ok,httpStatus:n.status,elapsedMs:Date.now()-r}}catch(n){return{ok:!1,dnsCode:n.cause?.code||n.code||n.message,elapsedMs:Date.now()-r}}}var yl=B("tunnel"),Vn=null,Yn=null,sn=null,Pt=null,lt=0,ko=!1;async function Po(e){try{let t=await qt();await fetch(`http://${t}:${P}/api/ui/state`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}catch{}}var Ro=!1;async function Cs(){if(!(!Yn||ko||Ro)){Ro=!0;try{await wl()}finally{Ro=!1}}}async function wl(){let e=await on(Yn),t=e.ok?"healthy":"unreachable";if(t===sn){Pt=null,lt=0;return}if(t!==Pt){Pt=t,lt=1;return}lt++,!(lt<ls)&&(yl.info(`${sn??"init"} \u2192 ${t}${e.ok?"":` (http=${e.httpStatus??"-"} dns=${e.dnsCode??"-"})`}`),sn=t,Pt=null,lt=0,await Po({tunnelHealth:{status:t,checkedAt:Date.now()}}))}function Ms(e){if(!e)return Xn();e!==Yn&&(Yn=e,sn=null,Pt=null,lt=0,rn(),Vn||(Vn=setInterval(Cs,ii.checkIntervalMs)),Cs())}var $s=Ms,an=Ms;function Ns(){ko=!0}function Ds(){ko=!1}function Ot(e){sn=e,Pt=null,lt=0,Po({tunnelHealth:{status:e,checkedAt:Date.now()}})}function Xn(){Vn&&(clearInterval(Vn),Vn=null),Yn=null,sn=null,Pt=null,lt=0,Po({tunnelHealth:{status:"unknown",checkedAt:null}})}var z=B("tunnel"),Ge={networkCheckIntervalMs:5e3,networkRestoreDelayMs:2500,internetCheckTimeoutMs:3e3,internetCheckHost:"1.1.1.1",internetCheckPort:443,edgeProbeIntervalMs:15e3,edgeProbeFailureThreshold:3,readyTimeoutMs:1500},vl=[20241,20242,20243,20244,20245],un=null;async function El(e,t){try{let o=await(await fetch(`http://localhost:${e}/ready`,{signal:AbortSignal.timeout(t)})).json();return typeof o?.readyConnections=="number"?o:null}catch{return null}}async function Bs(e,t){let r=await El(e,t);if(!r)return null;let o=await Tl(e,t);return o&&we&&!we.includes(o)?null:r.readyConnections}async function Sl(e){if(un!==null){let o=await Bs(un,e);if(o!==null)return o;un=null}let r=(await Promise.all(vl.map(async o=>({port:o,conns:await Bs(o,e)})))).find(o=>o.conns!==null);return r?(un=r.port,r.conns):null}async function Tl(e,t){try{return(await(await fetch(`http://localhost:${e}/quicktunnel`,{signal:AbortSignal.timeout(t)})).json())?.hostname||null}catch{return null}}var bl=3e4,Oo=0,Jn=null,Nr=null,fn=null,er=null,pn=!1,Qn=0,Co=!1,we=null,dn=0,Io=0,Lo=!1,tr=0,Ve=0,Us=3e4,Al=5e3,qn=ut.default.join(ft.default.homedir(),".9remote","bin"),Fs="cloudflared",mn=ft.default.platform()==="win32",xl=mn?`${Fs}.exe`:Fs,cn=ut.default.join(qn,xl),_o=ut.default.join(ft.default.homedir(),".9remote","cloudflared.pid"),Zn=!1,ln=null,Rl="2026.6.1",Ws=`https://github.com/cloudflare/cloudflared/releases/download/${Rl}`;function js(){return new Promise(e=>{let t=new Hs.default.Socket,r=!1,o=n=>{if(!r){r=!0;try{t.destroy()}catch{}e(n)}};t.setTimeout(Ge.internetCheckTimeoutMs),t.once("connect",()=>o(!0)),t.once("timeout",()=>o(!1)),t.once("error",()=>o(!1));try{t.connect(Ge.internetCheckPort,Ge.internetCheckHost)}catch{o(!1)}})}async function kl(){Co=!0;try{let e=0;for(;;){if(e++,await js())return;await new Promise(t=>setTimeout(t,Te(de.internet,e)))}}finally{Co=!1}}async function zn(e,t){if(!er){z.warn("No restartCallback registered \u2014 skip");return}if(!pn&&!(Date.now()-Io<Al)){Io=Date.now(),pn=!0;try{await kl();let r=Te(de.tunnelRestart,Qn+1);await new Promise(o=>setTimeout(o,r)),await er(e),Qn=0,Io=0}catch(r){Qn++,z.error(`restart failed (#${Qn}): ${r?.message||r}`),setImmediate(()=>{pn=!1,zn(e,"retry after fail")});return}finally{pn=!1}}}var Pl={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 Ol(){let e=ft.default.platform(),t=ft.default.arch(),r=Pl[e];if(!r)throw new Error(`Unsupported platform: ${e}`);let o=r[t];if(!o)throw new Error(`Unsupported architecture: ${t} for platform ${e}`);return`${Ws}/${o}`}var Il=150;async function Gs(e,t,r){return new Promise((o,n)=>{let i=W.default.createWriteStream(t);Mo.default.get(e,s=>{if([301,302].includes(s.statusCode)){i.close(),W.default.unlinkSync(t),Gs(s.headers.location,t,r).then(o).catch(n);return}if(s.statusCode!==200){i.close(),W.default.unlinkSync(t),n(new Error(`Download failed with status ${s.statusCode}`));return}let a=parseInt(s.headers["content-length"]||"0",10),c=0,l=0,u=-1;s.on("data",f=>{if(c+=f.length,!r||!a)return;let p=Date.now(),d=Math.min(100,Math.floor(c/a*100));d!==u&&p-l>=Il&&(l=p,u=d,r(d))}),s.pipe(i),i.on("finish",()=>{r&&a&&r(100),i.close(()=>o(t))}),i.on("error",f=>{i.close(),W.default.unlinkSync(t),n(f)})}).on("error",s=>{i.close(),W.default.existsSync(t)&&W.default.unlinkSync(t),n(s)})})}async function nr(e){if(W.default.existsSync(qn)||W.default.mkdirSync(qn,{recursive:!0}),W.default.existsSync(cn))return mn||W.default.chmodSync(cn,"755"),cn;let t=Ol(),r=t.endsWith(".tgz"),o=r?ut.default.join(qn,"cloudflared.tgz"):cn;try{return e?.({phase:"download",percent:0}),await Gs(t,o,n=>{e?.({phase:"download",percent:n})}),await Ll(t,o),r&&(e?.({phase:"extract"}),(0,Ye.execSync)(`tar -xzf "${o}" -C "${qn}"`,{stdio:"pipe",windowsHide:!0}),W.default.unlinkSync(o)),mn||W.default.chmodSync(cn,"755"),cn}catch(n){try{W.default.existsSync(o)&&W.default.unlinkSync(o)}catch{}throw console.error("Failed to download cloudflared:",n.message),n}}function Vs(e){return new Promise((t,r)=>{Mo.default.get(e,o=>{if([301,302].includes(o.statusCode))return Vs(o.headers.location).then(t).catch(r);if(o.statusCode!==200)return r(new Error(`HTTP ${o.statusCode}`));let n="";o.on("data",i=>n+=i),o.on("end",()=>t(n))}).on("error",r)})}async function Ll(e,t){let r=ut.default.basename(e),o;try{o=await Vs(`${Ws}/sha256sum.txt`)}catch(c){z.warn(`sha256 manifest unavailable (${c.message}), skipping verify`);return}let n=o.split(`
193
+ `).find(c=>c.includes(r));if(!n){z.warn(`No sha256 entry for ${r}, skipping verify`);return}let i=n.trim().split(/\s+/)[0],{createHash:s}=await import("crypto"),a=s("sha256").update(W.default.readFileSync(t)).digest("hex");if(a!==i)throw new Error(`Integrity check failed: SHA256 mismatch (expected ${i}, got ${a})`)}function _l(e){let t=/https:\/\/([a-z0-9-]+)\.trycloudflare\.com/gi,r=[];for(let o of e.matchAll(t))o[1]!=="api"&&r.push(`https://${o[1]}.trycloudflare.com`);return r.length?r[r.length-1]:null}async function Xe(e,t=null,r=null){let o=await nr();Nl(o),r&&(er=r),fn=e;let n=W.default.mkdtempSync(ut.default.join(ft.default.tmpdir(),"9remote-quick-")),i=ut.default.join(n,"config.yml");W.default.writeFileSync(i,`# quick-tunnel
194
+ `,"utf8");let s=!1,a=()=>{if(!s){s=!0;try{W.default.rmSync(n,{recursive:!0,force:!0})}catch{}}},c=(0,Ye.spawn)(o,["tunnel","--url",`http://localhost:${e}`,"--config",i,"--no-autoupdate","--protocol","http2"],{detached:!1,windowsHide:!0,stdio:["ignore","pipe","pipe"]});return _e("cloudflared",c.pid),ln=c.pid,Zn=!1,new Promise((l,u)=>{let f=!1,p=null,d="",h=setTimeout(()=>{if(!f){f=!0,a(),ln===c.pid&&(ln=null);try{c.kill("SIGKILL")}catch{}je("cloudflared"),u(new Error("Quick tunnel timed out after 90s"))}},9e4),w=E=>{let O=E.toString();d+=O,d.length>4096&&(d=d.slice(-4096));let T=_l(O);if(T){if(!f){f=!0,p=T,we=T,dn=Date.now(),Ve=0,tr=0,un=null,clearTimeout(h),a(),Ul(),z.info(`tunnel ready: ${T}`),l({child:c,tunnelUrl:T});return}T!==p&&(z.info(`URL rotated: ${T}`),p=T,we=T,dn=Date.now(),Ve=0,tr=0,t?.(T))}};c.stdout.on("data",w),c.stderr.on("data",w),c.on("error",E=>{f||(f=!0,clearTimeout(h),a(),u(E))}),c.on("exit",(E,O)=>{a();let T=ln!==c.pid,A=Zn||T;if(z.info(`cloudflared exited (intentional=${Zn} superseded=${T})`),A||Ot("unreachable"),!f){f=!0,clearTimeout(h);let k=d.trim().split(`
195
+ `).slice(-5).join(" | ");ln=null,u(new Error(`cloudflared exited (code=${E}, signal=${O}) output: ${k||"(empty)"}`));return}A||zn(e,`quick tunnel exit code ${E}`)})})}function Dr(e){if(mn)try{(0,Ye.execSync)(`taskkill /PID ${e} /T /F`,{windowsHide:!0,stdio:"ignore"})}catch{}else try{process.kill(e,"SIGKILL")}catch{}}function Cl(e){return e?e.split(`
196
+ `).flatMap(t=>{let r=t.match(/^\s*(\d+)\s+(.+)$/);return r?[{pid:Number(r[1]),args:r[2].trim()}]:[]}):[]}function Ml(e,t){return Array.isArray(e)?e.filter(r=>{if(!r?.args||typeof r.pid!="number")return!1;let o=r.args.split(/\s+/);return o.includes(t)&&o.includes("tunnel")}).map(r=>r.pid):[]}function $l(e){try{let t=mn?(0,Ye.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,Ye.execSync)("ps -eo pid=,args=",{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return Ml(Cl(t),e)}catch{return[]}}function Nl(e){let t=$l(e);for(let r of t)r!==process.pid&&(z.info(`killing leftover cloudflared pid=${r}`),Dr(r));return t}function Dl(e){try{let t=[];if(mn){let r=`Get-NetTCPConnection -LocalPort ${e} -State Established -ErrorAction SilentlyContinue | Where-Object { (Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name -eq 'cloudflared' } | Select-Object -ExpandProperty OwningProcess -Unique`;t=(0,Ye.execSync)(`powershell -NoProfile -Command "${r}"`,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"]}).split(/\r?\n/).map(n=>+n.trim()).filter(Boolean)}else t=(0,Ye.execSync)(`lsof -nP -iTCP:${e} -sTCP:ESTABLISHED 2>/dev/null | awk '/cloudflar/ {print $2}' | sort -u`,{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).split(`
197
+ `).map(o=>+o.trim()).filter(Boolean);for(let r of new Set(t))Dr(r)}catch{}}function ie(){if(!Lo){Lo=!0;try{try{if(W.default.existsSync(_o)){let t=parseInt(W.default.readFileSync(_o,"utf8"));Number.isFinite(t)&&(Zn=!0,Dr(t)),W.default.unlinkSync(_o)}}catch{}let e=Wn("cloudflared");Zn=!0,ln=null,e&&(Dr(e),je("cloudflared")),Dl(P)}finally{setTimeout(()=>{Lo=!1},2e3)}}}function Ys(){if(!we)return!1;let e=Wn("cloudflared");return!!e&&Eo(e)}function Xs(){Qn=0,pn=!1,er=null,fn=null,we=null,Ve=0,tr=0,un=null,Fl()}var Bl=/^(utun|awdl|llw|anpi|bridge|gif|stf|ipsec|ap|tun|tap|vmnet|veth|docker)/i;function Ks(){let e=ft.default.networkInterfaces(),t=[];for(let[r,o]of Object.entries(e))if(o&&!Bl.test(r))for(let n of o)!n.internal&&n.family==="IPv4"&&t.push(`${r}:${n.address}`);return t.sort().join("|")}function Ul(){Jn||(Nr=Ks(),Oo=Date.now(),Jn=setInterval(async()=>{try{let e=Date.now(),t=e-Oo;if(Oo=e,Co||pn||!er||fn==null)return;if(t>bl){if(z.info(`Sleep/wake detected (gap=${t}ms)`),we){let s=!1;for(let a=0;a<3;a++){if((await on(we)).ok){s=!0;break}a<2&&await new Promise(l=>setTimeout(l,3e3))}if(s)return;z.info("tunnel unresponsive after sleep \u2192 restarting")}Ot("unreachable"),ie(),zn(fn,"woke from sleep");return}let r=Ks(),o=r!==Nr;Nr=r;let n=Wn("cloudflared"),i=!n||!Eo(n);if(!o&&!i){if(we&&dn&&Date.now()-dn>Us&&e-tr>=Ge.edgeProbeIntervalMs){tr=e;let s=await on(we);if(s.ok)Ve=0;else if(++Ve>=Ge.edgeProbeFailureThreshold){let a=await Sl(Ge.readyTimeoutMs);if(a>0){z.info(`edge probe failing but cloudflared holds ${a} connection(s) \u2014 not restarting`),Ve=0;return}z.warn(`tunnel unreachable but cloudflared alive \u2014 edge lost after ${Ve} probes (ready=${a??"unknown"}), restarting`),Ve=0,Ot("unreachable"),ie(),zn(fn,"tunnel unreachable (edge lost)")}else z.debug(`edge probe failed (${Ve}/${Ge.edgeProbeFailureThreshold}) \u2014 ${s.dnsCode??s.httpStatus??"no response"}`)}return}if(o&&!i&&dn&&Date.now()-dn<Us||(o&&z.info("Network change detected"),i&&z.warn("cloudflared not alive \u2014 watchdog"),Ot("unreachable"),await new Promise(s=>setTimeout(s,Ge.networkRestoreDelayMs)),!await js()))return;if(o&&!i&&we){let s=!1;for(let a=0;a<2;a++){if((await on(we)).ok){s=!0;break}a===0&&await new Promise(l=>setTimeout(l,2e3))}if(s){z.info("Tunnel survived network change, skip restart");return}}o&&!i&&ie(),zn(fn,o?"network change":"liveness watchdog")}catch(e){z.error(`network monitor tick failed: ${e?.message||e}`)}},Ge.networkCheckIntervalMs))}function Fl(){Jn&&(clearInterval(Jn),Jn=null),Nr=null}_t();async function pt(e,t={}){let r=t.intervalMs??st.intervalMs,o=t.timeoutMs??st.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>st.maxLogEntries?c.slice(-st.maxLogEntries):c;K({healthCheck:{running:!0,timeoutMs:o,startedAt:s,logs:f}})};for(;Date.now()-s<o;){if(a++,rn(),i){let f=await xo(i,st.dnsTimeoutMs);if(!f.ok){let p=f.code==="ENOTFOUND"||f.code==="ETIMEOUT"||f.code==="ESERVFAIL",d=p?"connecting...":f.code;Qt(`#${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(st.fetchTimeoutMs)}),p=Date.now()-u;if(Qt(`#${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,st.postReadyHoldMs)),!0}catch(f){let p=Date.now()-u,d=f.cause?.code||f.code||f.message,h=d==="ENOTFOUND",w=h?"connecting...":d;Qt(`#${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 qe=B("tunnel"),No=null,ia=null,sa=0;async function Ct(e,t){if(qe.debug(`updateTunnelUrl: key=${e?.slice(0,8)} url=${t}`),j().remoteEnabled===!1)return;if(Mt(e),t&&t===ia&&Date.now()-sa<cs){qe.debug("updateTunnelUrl: skipped (debounce, same URL)");return}No&&(No.cancelled=!0);let r={cancelled:!1};No=r;let o=Xi();vr({config:de.urlSync,label:`urlSync ${t}`,log:n=>qe.warn(n),ctx:r,task:async()=>{let n=await H(`${L}/api/session/update`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify((()=>{let s={apiKey:Y(e),tunnelUrl:t,localIp:o?`${o}:${P}`:null};return{...s,...Tt(s)}})())});if(r.cancelled)return!0;if(n.ok)return ia=t,sa=Date.now(),qe.debug(`urlSync OK: pushed ${t} to server`),Vl(t),!0;let i=await n.text().catch(()=>"");return qe.warn(`urlSync HTTP ${n.status}: ${i.slice(0,200)}`),!1}}),t&&$s(t)}var wn=null,vn=null,Do=!1,Uo=0;async function Fo(e,t){let r={apiKey:e,online:t},o=await H(`${L}/api/session/heartbeat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...r,...Tt(r)})});return o.ok||qe.warn(`heartbeat online=${t} HTTP ${o.status}`),o.ok}async function Bo(){if(!(Do||!vn)){Do=!0;try{await Fo(vn,!0),Uo=Date.now()}catch(e){qe.debug(`heartbeat failed: ${e?.message||e}`)}finally{Do=!1}}}function Mt(e){let t=Y(e);if(t&&j().remoteEnabled!==!1){if(wn&&vn===t){Date.now()-Uo>=go&&Bo();return}Ur(),vn=t,Bo(),wn=setInterval(Bo,go),wn.unref?.()}}function Ur({offline:e=!1}={}){wn&&(clearInterval(wn),wn=null);let t=vn;return vn=null,Uo=0,!e||!t?null:Fo(t,!1).catch(r=>qe.debug(`goodbye failed: ${r?.message||r}`))}function dt(e){let t=Y(e);if(!t)return Promise.resolve(!1);Ur();let r=Fo(t,!1).catch(o=>(qe.debug(`offline mark failed: ${o?.message||o}`),!1));return Promise.race([r,new Promise(o=>setTimeout(()=>o(!1),kr))])}var or=null;async function Vl(e){if(or?.url===e)return;let t={url:e};or=t,Ns();try{let r=await pt(e,{timeoutMs:us});if(or!==t)return;r&&Ot("healthy")}catch{}finally{or===t&&(or=null),Ds()}}var Je=B("server"),ua=sr.default.dirname((0,la.fileURLToPath)(__importMetaUrl)),Yl=sr.default.resolve(ua,"./server.cjs"),aa=sr.default.resolve(ua,"../../index.js");function Fr(e){try{process.platform==="win32"?(0,ir.execSync)(`for /f "tokens=5" %a in ('netstat -aon ^| findstr :${e}') do taskkill /F /PID %a`,{stdio:"ignore",windowsHide:!0}):(0,ir.execSync)(`lsof -ti:${e} | xargs kill -9 2>/dev/null || true`,{stdio:"ignore"})}catch{}}function mt(e,t,r){let o=null,n=!1,i=!1,s=!0,a=0,c=null,l=()=>{s&&(Fr(P),s=!1);let u=process.env.NODE_ENV==="development"&&Ko.default.existsSync(aa),f=u?aa:Yl;Ko.default.existsSync(f)||(Je.error(`Server not found: ${f}`),process.exit(1));let p={...process.env,PORT:String(P)};u||delete p.NODE_ENV,o=(0,ir.spawn)(ei,[f],{cwd:sr.default.dirname(f),stdio:["ignore","inherit","inherit"],detached:!1,windowsHide:!0,env:ti(p)}),c&&clearTimeout(c),c=setTimeout(()=>{a=0},ss),o.on("exit",(d,h)=>{if(c&&(clearTimeout(c),c=null),n)return;if(i){i=!1,Je.info("Restarting server (requested)..."),setTimeout(()=>{l(),r?.()},500);return}Je.error(`Server exited unexpectedly (code: ${d}, signal: ${h})`),a++;let w=Te(de.server,a);Je.warn(`Restarting server in ${w}ms (fail#${a})`),t&&t(),setTimeout(()=>{l(),r?.()},w)}),o.on("error",d=>{Je.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 fa(e){return e?.restart?e.restart():!1}function Ze({serverManager:e,tunnelProcess:t,exit:r=!0,code:o=0}={}){try{Xn()}catch{}try{e?.shutdown?.()}catch{}try{t?.kill?.()}catch{}try{ie()}catch{}try{It()}catch{}try{Fr(P)}catch{}try{Xs()}catch{}try{wi()}catch{}try{je("agent")}catch{}try{je("cloudflared")}catch{}let n=Ur({offline:!0});if(r){let i=new Promise(a=>setTimeout(a,as)),s=n?Promise.race([n,new Promise(a=>setTimeout(a,kr))]):null;Promise.all([i,s]).finally(()=>process.exit(o))}}var ca=!1;function ht(e,t){if(ca)return;ca=!0;let r=!1,o=n=>{r||(r=!0,Je.info(`Stopping 9Remote (${n})...`),Ze({serverManager:e,tunnelProcess:t}),Je.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=>{Je.error(`Uncaught exception: ${n?.stack||n?.message||n}`),o("uncaughtException"),setTimeout(()=>process.exit(1),ho)}),process.on("unhandledRejection",n=>{Je.error(`Unhandled rejection: ${n?.stack||n?.message||n}`),o("unhandledRejection"),setTimeout(()=>process.exit(1),ho)})}_t();var $t=B("tunnel");async function Xl(e,t,r,o){let n=0;for(;;){n++;try{return await Xe(e,t,r)}catch(i){let s=Te(de.tunnelSpawn,n);$t.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 ze({onUrlUpdate:e,setTunnel:t,onRetry:r}){return async o=>{try{let n=await Xl(o,e,null,r);et(),t(n.child),await e(n.tunnelUrl),$t.info(`Tunnel restarted: ${n.tunnelUrl}`)}catch(n){$t.error(`Tunnel restart failed: ${n?.message||n}`)}}}var Kr=null;function et(){Kr&&(Kr.cancelled=!0,Kr=null)}function En(e,{onUrlUpdate:t,onRestart:r,setActiveTunnel:o,onReady:n}){et();let i={cancelled:!1};return Kr=i,vr({config:de.tunnelRateLimit,task:async()=>{if(i.cancelled)return!0;if(Ys())return $t.info("bg-tunnel: a tunnel is already live \u2014 standing down"),!0;let s=await Xe(e,t,r);if(i.cancelled){try{ie()}catch{}return!0}try{o?.(s.child),await t?.(s.tunnelUrl),await n?.(s),$t.info(`bg tunnel up: ${s.tunnelUrl}`)}catch(a){$t.error(`bg tunnel post-spawn failed: ${a?.message||a}`)}return!0},label:"bg-tunnel",log:s=>$t.info(s),ctx:i}),i}var Yo=R($a(),1);var ru=B("session");function ou(e,t="\u{1F4F1} Scan QR to connect:"){console.log(fe.orange(`
198
+ ${t}`)),Yo.default.generate(e,{small:!0,type:"terminal",margin:0},r=>{console.log(r.trim())})}function iu(e){return new Promise(t=>{Yo.default.generate(e,{small:!0,type:"terminal",margin:0},r=>{t(fe.orangeDim("\u{1F4F1} Scan QR to connect:")+`
199
+ `+r.trim())})})}async function Gr(e,t){let r=await Dn(e,L),o=Math.min(We.headerWidth,process.stdout.columns||55);if(!r){ru.warn("Temp key creation failed \u2014 showing UI without a QR"),await C(I.READY,{tunnelUrl:t,permanentKey:e,workerUrl:L}),console.log(m.red(`
200
+ \u274C Failed to create one-time key \u2014 generate a new one from the menu`)),console.log(fe.orange("\u2550".repeat(o))),console.log(m.white("App URL".padEnd(14))+m.gray(`${L}/login`)),console.log(m.white("Key".padEnd(14))+m.gray(e)),console.log(fe.orange("\u2550".repeat(o)));return}let n=Bn(L,r);await C(I.READY,{tunnelUrl:t,oneTimeKey:r.oneTimeKey,oneTimeKeyExpiresAt:r.expiresAt,permanentKey:e,qrUrl:n,workerUrl:L}),ou(n),console.log(m.gray(`
201
201
  QR will expire in 10 minutes (one-time use)
202
- `)),console.log(fe.orange("\u2550".repeat(o))),console.log(m.white("App URL".padEnd(14))+m.gray(`${_}/login`)),console.log(m.white("One-Time Key".padEnd(14))+fe.orange.bold(r.oneTimeKey)),console.log(m.white("Key".padEnd(14))+m.gray(e)),console.log(fe.orange("\u2550".repeat(o)))}async function En(e,t,r,o=""){let n=Math.min(He.headerWidth,process.stdout.columns||He.headerWidth),i=[];return e&&r?(i.push(await ru(r)),i.push(m.gray(`
202
+ `)),console.log(fe.orange("\u2550".repeat(o))),console.log(m.white("App URL".padEnd(14))+m.gray(`${L}/login`)),console.log(m.white("One-Time Key".padEnd(14))+fe.orange.bold(r.oneTimeKey)),console.log(m.white("Key".padEnd(14))+m.gray(e)),console.log(fe.orange("\u2550".repeat(o)))}async function Sn(e,t,r,o=""){let n=Math.min(We.headerWidth,process.stdout.columns||We.headerWidth),i=[];return e&&r?(i.push(await iu(r)),i.push(m.gray(`
203
203
  QR expires in 30 minutes (one-time use)
204
204
  `))):i.push(m.gray(`
205
205
  (One-time key used \u2014 generate a new one from menu)
206
- `)),i.push(fe.orange("\u2550".repeat(n)),m.white("App URL".padEnd(14))+m.gray(`${_}/login`)),ni.showTunnelUrlInMenu&&i.push(m.white("Tunnel".padEnd(14))+(o?m.cyan(o):m.gray("\u2014"))),i.push(m.white("One-Time Key".padEnd(14))+(e?fe.orange.bold(e)+m.dim(" (expires in 30m)"):m.gray("\u2014")),m.white("Key".padEnd(14))+m.dim(t),fe.orange("\u2550".repeat(n))),i.join(`
207
- `)}var he=B("cmd");function yt(e,t,r,o){let n=!1;setInterval(async()=>{if(n)return;let i=yi();if(i){n=!0;try{if(i==="stop-tunnel")await Ca(e,t,r);else if(i==="restart-tunnel")await Ca(e,t,r),await $a(e,t,r);else if(i==="start-tunnel"){if(await $a(e,t,r)==="alreadyRunning"){n=!1;return}}else if(i==="regenerate-key")await ou();else if(i==="shutdown")iu(e,t);else if(i==="update"){let s=await os();he.info(`cmd update -> ${s?"started":"SKIPPED (see reasons above)"}`)}else i==="restart"&&na(o?.())}catch(s){he.error(`cmd "${i}" failed: ${s?.message||s}`)}finally{n=!1}}},be.cmdMs)}async function Ca(e,t,r){ze(),jn();let o=e();o&&(o.kill(),t(null),he.info("Tunnel stopped")),r&&await pt(r),await M(I.STOPPED,{tunnelUrl:"",oneTimeKey:"",oneTimeKeyExpiresAt:null,qrUrl:""}),mn({tunnelUrl:"",running:!0})}async function $a(e,t,r){if(X().remoteEnabled===!1){he.info("Start skipped \u2014 remote is disabled");return}let o=e();if(o)if(o.killed||o.exitCode!=null)t(null);else{let n=await J("/api/ui/state");return await M(I.READY,{tunnelUrl:n?.tunnelUrl||""}),"alreadyRunning"}ze(),he.info("Starting...");try{await M(I.PREPARING),await Zn(Cr),await M(I.CONNECTING);let n=await H(`${_}/api/session/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:V(r),hostPublicKey:lt(),hostX25519Key:ut()})});if(!n.ok)throw new Error(`Session create failed: ${n.status}`);await Q("/api/signaling/retry",{}),_t(r),await M(I.TUNNELING);let i=async l=>{await Lt(r,l),await K({tunnelUrl:l}),rn(l),mn({tunnelUrl:l,running:!0})},s=({attempt:l,delay:u})=>{K({tunnelRetry:{attempt:l,delay:u,at:Date.now()}})},a=null;try{a=await Ye(P,i,Ze({onUrlUpdate:i,setTunnel:l=>t(l),onRetry:s}))}catch(l){he.error(`Tunnel spawn failed: ${l?.message||l} \u2014 QR RTC-only, bg retry`)}K({tunnelRetry:null});let c="";a&&(t(a.child),c=a.tunnelUrl,await M(I.VERIFYING),await ft(c)||(he.warn("Tunnel health check timed out \u2014 bg reconnect"),c="",t(null),a=null)),await Gr(r,c),await M(I.READY,{tunnelUrl:c}),a||vn(P,{onUrlUpdate:i,onRestart:Ze({onUrlUpdate:i,setTunnel:l=>t(l),onRetry:s}),setActiveTunnel:t,onReady:async l=>{await M(I.READY,{tunnelUrl:l.tunnelUrl})}})}catch(n){he.error(`Failed to start: ${n.message}`),await M(I.STOPPED)}}async function ou(){if(X().remoteEnabled===!1){he.info("Key regeneration skipped \u2014 remote is disabled");return}let e=await Ut(),t=Ft(e),r=dr();if(!await ir(t,_,hi()?.tunnelUrl,r?.key)){he.error("Key regeneration aborted \u2014 could not register the new key");return}Et(e,t,r?.name||"Default"),await K({permanentKey:t,oneTimeKey:"",oneTimeKeyExpiresAt:null,qrUrl:"",pairingUsed:!0}),he.info(`Key regenerated: ${fr(t)}`)}function iu(e,t){ze(),he.info("Shutting down 9Remote completely...");let r=e();t(null),Je({tunnelProcess:r}),he.info("9Remote stopped")}Ot();async function Na(){if(await re()&&(await new Promise(a=>setTimeout(a,ne.guestRecheckMs)),await re())){console.log(m.green(`
208
- \u{1F310} UI already served at http://localhost:${P}`));return}Ie("agent",process.pid),Jt(Pe());let e=await nt(),t=process.argv.find(a=>a.startsWith("--theme=")),r=t?t.split("=")[1]:null;try{ie(),await new Promise(a=>setTimeout(a,ne.killCloudflaredMs))}catch{}let o=dt(null,null);await new Promise(a=>setTimeout(a,ne.serverBootMs));let n=`http://localhost:${P}`;console.log(m.green(`
209
- \u{1F310} UI ready at ${n}`));let i=null;X().remoteEnabled===!1&&await pt(e.key),await K({permanentKey:e.key,step:I.STOPPED,theme:r}),mt(o,null),yt(()=>i,a=>{i=a},e.key,()=>o),await zn({port:P,onQuit:()=>{let a=i;i=null,Je({serverManager:o,tunnelProcess:a,exit:!1}),kt(),setTimeout(()=>process.exit(0),500)},onOpenUI:()=>Pt(n)}),mn({tunnelUrl:"",running:!0}),(process.argv.includes("--start")||process.argv.includes("--skip-update"))&&X().remoteEnabled!==!1&&Ht("start-tunnel"),await new Promise(()=>{})}Ot();async function Da(){if(await re()&&(await new Promise(l=>setTimeout(l,ne.guestRecheckMs)),await re())){console.log(`
210
- \u{1F310} 9Remote already running at http://localhost:${P}`);return}Ie("agent",process.pid),Vi().catch(()=>{});let e=await nt(),t=process.argv.find(l=>l.startsWith("--theme=")),r=t?t.split("=")[1]:null;try{ie(),await new Promise(l=>setTimeout(l,ne.killCloudflaredMs))}catch{}let o=dt(null,null);await new Promise(l=>setTimeout(l,ne.serverBootMs));let n=`http://localhost:${P}`,i=null;await K({permanentKey:e.key,step:I.STOPPED,theme:r});let s=()=>{let l=i;i=null,Je({serverManager:o,tunnelProcess:l,exit:!1})};mt(o,null),yt(()=>i,l=>{i=l},e.key,()=>o);try{Ke("cloudflared")}catch{}(process.argv.includes("--start")||process.argv.includes("--skip-update"))&&X().remoteEnabled!==!1&&Ht("start-tunnel"),await zn({port:P,onQuit:s,onOpenUI:()=>Pt(n)})&&_o({title:"9Remote is running",message:`Open ${n} or use the tray icon to manage.`}),await new Promise(()=>{})}var $t=B("mode");async function su(e){$t.info("Starting server..."),await M(I.PREPARING);try{ie(),await new Promise(l=>setTimeout(l,ne.killCloudflaredMs))}catch{}let t=X().remoteEnabled===!1,r=!t;if(t&&await pt(e),r)try{let l=await H(`${_}/api/session/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:V(e),hostPublicKey:lt(),hostX25519Key:ut()})});if(!l.ok)throw new Error(`Session create failed: ${l.status}`);_t(e)}catch(l){$t.error(`Session create failed: ${l.message} \u2014 local-only, retry from Web UI`),r=!1}let o=await re(),n=o?{getProcess:()=>null,shutdown:()=>{}}:dt(null,null);o||await new Promise(l=>setTimeout(l,ne.serverBootMs)),$t.info("Starting tunnel..."),await M(I.CONNECTING);let i={current:null},s="",a=async l=>{$t.info(`Tunnel URL rotated: ${l}`),await Lt(e,l),K({tunnelUrl:l}),rn(l)},c=null;if(r)try{c=await Ye(P,a,Ze({onUrlUpdate:a,setTunnel:l=>{i.current=l}}))}catch(l){$t.error(`Tunnel spawn failed: ${l.message} \u2014 RTC-only, bg retry`)}return c&&(i.current=c.child,s=c.tunnelUrl,await ft(s)||($t.warn("Tunnel health check timed out \u2014 bg reconnect"),i.current=null,s="",c=null)),!c&&r&&vn(P,{onUrlUpdate:a,onRestart:Ze({onUrlUpdate:a,setTunnel:l=>{i.current=l}}),setActiveTunnel:l=>{i.current=l},onReady:async l=>{await M(I.READY,{tunnelUrl:l.tunnelUrl})}}),s&&await Lt(e,s),r?await M(I.READY,{tunnelUrl:s}):await M(I.STOPPED,{tunnelUrl:""}),_n({apiKey:e,tunnelUrl:s,serverPid:n.getProcess()?.pid,tunnelPid:i.current?.pid}),{serverManager:n,tunnelRef:i,tunnelUrl:s,remoteOnline:r}}async function Ba(){Jt(Pe());let e=await nt();$t.info(`Using key: ${fr(e.key)} (${e.name})`);let{serverManager:t,tunnelRef:r,tunnelUrl:o,remoteOnline:n}=await su(e.key);n?await Gr(e.key,o):console.log(`\u26A0 ${X().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.`),mt(t,r.current),yt(()=>r.current,s=>{r.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;K({uptime:`${a}:${String(c).padStart(2,"0")}:${String(l).padStart(2,"0")}`})},be.statsMs),await new Promise(()=>{})}var Ua=R(require("path"),1),Fa=R(require("fs"),1);Ot();async function Ka(){let e=`http://localhost:${P}`;await re()&&(Fr(P),await new Promise(c=>setTimeout(c,500)));let t=["--tray"],r=process.argv.find(c=>c.startsWith("--theme="));r&&t.push(r);let o=Cn;try{Fa.default.mkdirSync(Ua.default.dirname(o),{recursive:!0})}catch{}let n=null;try{n=ji(t),n&&Ie("agent",n)}catch(c){console.log(m.red(`
211
- \u274C Failed to launch background: ${c.message}`)),process.exit(1)}let i=Date.now()+be.bgServerReadyTimeoutMs,s=!1;for(;Date.now()<i;){if(await re()){s=!0;break}await new Promise(c=>setTimeout(c,be.bgServerReadyIntervalMs))}s||(console.log(m.red(`
206
+ `)),i.push(fe.orange("\u2550".repeat(n)),m.white("App URL".padEnd(14))+m.gray(`${L}/login`)),ri.showTunnelUrlInMenu&&i.push(m.white("Tunnel".padEnd(14))+(o?m.cyan(o):m.gray("\u2014"))),i.push(m.white("One-Time Key".padEnd(14))+(e?fe.orange.bold(e)+m.dim(" (expires in 30m)"):m.gray("\u2014")),m.white("Key".padEnd(14))+m.dim(t),fe.orange("\u2550".repeat(n))),i.join(`
207
+ `)}var he=B("cmd");function wt(e,t,r,o){let n=!1;setInterval(async()=>{if(n)return;let i=vi();if(i){n=!0;try{if(i==="stop-tunnel")await Na(e,t,r);else if(i==="restart-tunnel")await Na(e,t,r),await Da(e,t,r);else if(i==="start-tunnel"){if(await Da(e,t,r)==="alreadyRunning"){n=!1;return}}else if(i==="regenerate-key")await su();else if(i==="shutdown")au(e,t);else if(i==="update"){let s=await Is();he.info(`cmd update -> ${s?"started":"SKIPPED (see reasons above)"}`)}else i==="restart"&&fa(o?.())}catch(s){he.error(`cmd "${i}" failed: ${s?.message||s}`)}finally{n=!1}}},Ae.cmdMs)}async function Na(e,t,r){et(),Xn();let o=e();o&&(o.kill(),t(null),he.info("Tunnel stopped")),r&&await dt(r),await C(I.STOPPED,{tunnelUrl:"",oneTimeKey:"",oneTimeKeyExpiresAt:null,qrUrl:""}),yn({tunnelUrl:"",running:!0})}async function Da(e,t,r){if(j().remoteEnabled===!1){he.info("Start skipped \u2014 remote is disabled");return}let o=e();if(o)if(o.killed||o.exitCode!=null)t(null);else{let n=await J("/api/ui/state");return await C(I.READY,{tunnelUrl:n?.tunnelUrl||""}),"alreadyRunning"}et(),he.info("Starting...");try{await C(I.PREPARING),await nr(br),await C(I.CONNECTING);let n=await H(`${L}/api/session/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:Y(r),hostPublicKey:ot(),hostX25519Key:it()})});if(!n.ok)throw new Error(`Session create failed: ${n.status}`);await Q("/api/signaling/retry",{}),Mt(r),await C(I.TUNNELING);let i=async l=>{await Ct(r,l),await K({tunnelUrl:l}),an(l),yn({tunnelUrl:l,running:!0})},s=({attempt:l,delay:u})=>{K({tunnelRetry:{attempt:l,delay:u,at:Date.now()}})},a=null;try{a=await Xe(P,i,ze({onUrlUpdate:i,setTunnel:l=>t(l),onRetry:s}))}catch(l){he.error(`Tunnel spawn failed: ${l?.message||l} \u2014 QR RTC-only, bg retry`)}K({tunnelRetry:null});let c="";a&&(t(a.child),c=a.tunnelUrl,await C(I.VERIFYING),await pt(c)||(he.warn("Tunnel health check timed out \u2014 bg reconnect"),c="",t(null),a=null)),await Gr(r,c),await C(I.READY,{tunnelUrl:c}),a||En(P,{onUrlUpdate:i,onRestart:ze({onUrlUpdate:i,setTunnel:l=>t(l),onRetry:s}),setActiveTunnel:t,onReady:async l=>{await C(I.READY,{tunnelUrl:l.tunnelUrl})}})}catch(n){he.error(`Failed to start: ${n.message}`),await C(I.STOPPED)}}async function su(){if(j().remoteEnabled===!1){he.info("Key regeneration skipped \u2014 remote is disabled");return}let e=await Kt(),t=St(e),r=Mn();if(!await bt(t,L,yi()?.tunnelUrl,r?.key)){he.error("Key regeneration aborted \u2014 could not register the new key");return}Ke(e,t,r?.name||"Default"),await K({permanentKey:t,oneTimeKey:"",oneTimeKeyExpiresAt:null,qrUrl:"",pairingUsed:!0}),he.info(`Key regenerated: ${pr(t)}`)}function au(e,t){et(),he.info("Shutting down 9Remote completely...");let r=e();t(null),Ze({tunnelProcess:r}),he.info("9Remote stopped")}_t();async function Ba(){if(await q()&&(await new Promise(a=>setTimeout(a,ne.guestRecheckMs)),await q())){console.log(m.green(`
208
+ \u{1F310} UI already served at http://localhost:${P}`));return}_e("agent",process.pid),Xt(Le());let e=await at(),t=process.argv.find(a=>a.startsWith("--theme=")),r=t?t.split("=")[1]:null;try{ie(),await new Promise(a=>setTimeout(a,ne.killCloudflaredMs))}catch{}let o=mt(null,null);await new Promise(a=>setTimeout(a,ne.serverBootMs));let n=`http://localhost:${P}`;console.log(m.green(`
209
+ \u{1F310} UI ready at ${n}`));let i=null;j().remoteEnabled===!1&&await dt(e.key),await K({permanentKey:e.key,step:I.STOPPED,theme:r}),ht(o,null),wt(()=>i,a=>{i=a},e.key,()=>o),await rr({port:P,onQuit:()=>{let a=i;i=null,Ze({serverManager:o,tunnelProcess:a,exit:!1}),It(),setTimeout(()=>process.exit(0),500)},onOpenUI:()=>Lt(n)}),yn({tunnelUrl:"",running:!0}),(process.argv.includes("--start")||process.argv.includes("--skip-update"))&&j().remoteEnabled!==!1&&Wt("start-tunnel"),await new Promise(()=>{})}_t();async function Ua(){if(await q()&&(await new Promise(l=>setTimeout(l,ne.guestRecheckMs)),await q())){console.log(`
210
+ \u{1F310} 9Remote already running at http://localhost:${P}`);return}_e("agent",process.pid),bs().catch(()=>{});let e=await at(),t=process.argv.find(l=>l.startsWith("--theme=")),r=t?t.split("=")[1]:null;try{ie(),await new Promise(l=>setTimeout(l,ne.killCloudflaredMs))}catch{}let o=mt(null,null);await new Promise(l=>setTimeout(l,ne.serverBootMs));let n=`http://localhost:${P}`,i=null;await K({permanentKey:e.key,step:I.STOPPED,theme:r});let s=()=>{let l=i;i=null,Ze({serverManager:o,tunnelProcess:l,exit:!1})};ht(o,null),wt(()=>i,l=>{i=l},e.key,()=>o);try{je("cloudflared")}catch{}(process.argv.includes("--start")||process.argv.includes("--skip-update"))&&j().remoteEnabled!==!1&&Wt("start-tunnel"),await rr({port:P,onQuit:s,onOpenUI:()=>Lt(n)})&&$o({title:"9Remote is running",message:`Open ${n} or use the tray icon to manage.`}),await new Promise(()=>{})}var Dt=B("mode");async function cu(e){Dt.info("Starting server..."),await C(I.PREPARING);try{ie(),await new Promise(l=>setTimeout(l,ne.killCloudflaredMs))}catch{}let t=j().remoteEnabled===!1,r=!t;if(t&&await dt(e),r)try{let l=await H(`${L}/api/session/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:Y(e),hostPublicKey:ot(),hostX25519Key:it()})});if(!l.ok)throw new Error(`Session create failed: ${l.status}`);Mt(e)}catch(l){Dt.error(`Session create failed: ${l.message} \u2014 local-only, retry from Web UI`),r=!1}let o=await q(),n=o?{getProcess:()=>null,shutdown:()=>{}}:mt(null,null);o||await new Promise(l=>setTimeout(l,ne.serverBootMs)),Dt.info("Starting tunnel..."),await C(I.CONNECTING);let i={current:null},s="",a=async l=>{Dt.info(`Tunnel URL rotated: ${l}`),await Ct(e,l),K({tunnelUrl:l}),an(l)},c=null;if(r)try{c=await Xe(P,a,ze({onUrlUpdate:a,setTunnel:l=>{i.current=l}}))}catch(l){Dt.error(`Tunnel spawn failed: ${l.message} \u2014 RTC-only, bg retry`)}return c&&(i.current=c.child,s=c.tunnelUrl,await pt(s)||(Dt.warn("Tunnel health check timed out \u2014 bg reconnect"),i.current=null,s="",c=null)),!c&&r&&En(P,{onUrlUpdate:a,onRestart:ze({onUrlUpdate:a,setTunnel:l=>{i.current=l}}),setActiveTunnel:l=>{i.current=l},onReady:async l=>{await C(I.READY,{tunnelUrl:l.tunnelUrl})}}),s&&await Ct(e,s),r?await C(I.READY,{tunnelUrl:s}):await C(I.STOPPED,{tunnelUrl:""}),Cn({apiKey:e,tunnelUrl:s,serverPid:n.getProcess()?.pid,tunnelPid:i.current?.pid}),{serverManager:n,tunnelRef:i,tunnelUrl:s,remoteOnline:r}}async function Fa(){Xt(Le());let e=await at();Dt.info(`Using key: ${pr(e.key)} (${e.name})`);let{serverManager:t,tunnelRef:r,tunnelUrl:o,remoteOnline:n}=await cu(e.key);n?await Gr(e.key,o):console.log(`\u26A0 ${j().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.`),ht(t,r.current),wt(()=>r.current,s=>{r.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;K({uptime:`${a}:${String(c).padStart(2,"0")}:${String(l).padStart(2,"0")}`})},Ae.statsMs),await new Promise(()=>{})}var Ka=R(require("path"),1),Ha=R(require("fs"),1);_t();async function Wa(){let e=`http://localhost:${P}`;await q()&&(Fr(P),await new Promise(c=>setTimeout(c,500)));let t=["--tray"],r=process.argv.find(c=>c.startsWith("--theme="));r&&t.push(r);let o=Nn;try{Ha.default.mkdirSync(Ka.default.dirname(o),{recursive:!0})}catch{}let n=null;try{n=Ss(t),n&&_e("agent",n)}catch(c){console.log(m.red(`
211
+ \u274C Failed to launch background: ${c.message}`)),process.exit(1)}let i=Date.now()+Ae.bgServerReadyTimeoutMs,s=!1;for(;Date.now()<i;){if(await q()){s=!0;break}await new Promise(c=>setTimeout(c,Ae.bgServerReadyIntervalMs))}s||(console.log(m.red(`
212
212
  \u274C Background server failed to start.`)),console.log(m.gray(` Check log: ${o}
213
- `)),process.exit(1)),Ht("start-tunnel"),Pt(e);let a=n?` (PID: ${n})`:"";console.log(m.green(`
213
+ `)),process.exit(1)),Wt("start-tunnel"),Lt(e);let a=n?` (PID: ${n})`:"";console.log(m.green(`
214
214
  \u{1F310} 9Remote running at ${e}${a}`)),console.log(m.gray(`\u{1F4A1} Log: ${o}
215
- `)),await new Promise(c=>setTimeout(c,ne.bgSpawnFlushMs)),process.exit(0)}var Ha=R(require("readline"),1);var Vr=B("mode"),Sn=null;async function Wa(){Ie("agent",process.pid),console.clear(),ms(),ws(!0),await M(I.PREPARING);let e=await nt(),t=null,r={getProcess:()=>null,shutdown:()=>{}};if(!await re()){r=dt(null,null,()=>{if(process.stdin.isTTY){try{process.stdin.setRawMode(!1)}catch{}try{process.stdin.setRawMode(!0),process.stdin.resume()}catch{}}try{Ha.default.emitKeypressEvents(process.stdin)}catch{}t?.()});let g=Date.now()+be.serverReadyTimeoutMs;for(;Date.now()<g&&!await re();)await new Promise(b=>setTimeout(b,be.serverReadyIntervalMs))}try{ie(),await new Promise(g=>setTimeout(g,ne.killCloudflaredTuiMs))}catch{}try{await Zn(Cr)}catch(g){Vr.error(`cloudflared setup failed: ${g?.message||g} \u2014 retry from Web UI`)}await M(I.CONNECTING);let n=X().remoteEnabled===!1,i=!n;if(n&&await pt(e.key),i)try{let g=await H(`${_}/api/session/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:V(e.key),hostPublicKey:lt(),hostX25519Key:ut()})});if(!g.ok)throw new Error(`Session create failed: ${g.status}`);await Q("/api/signaling/retry",{}),_t(e.key)}catch(g){Vr.error(`Failed to connect: ${g.message}`),i=!1}await M(I.TUNNELING);let s=i?await rr(e.key,_):null,a=or(_,s),c=s?.oneTimeKey||"",l=a,u="",f=null,p={current:null},d=async g=>{u=g,await Lt(e.key,g),await K({tunnelUrl:g}),rn(g),f!==null&&(f=await En(c,e.key,l,u),t?.())},h=null;if(i)try{h=await Ye(P,d,Ze({onUrlUpdate:d,setTunnel:g=>{p.current=g}}))}catch(g){Vr.error(`Tunnel spawn failed: ${g?.message||g} \u2014 QR RTC-only, bg retry`)}h&&(p.current=h.child,u=h.tunnelUrl,_n({apiKey:e.key,tunnelUrl:h.tunnelUrl,tunnelPid:h.child?.pid}),await M(I.VERIFYING),await ft(h.tunnelUrl)?await d(h.tunnelUrl):(Vr.warn("Tunnel health check timed out \u2014 bg reconnect"),p.current=null,u="",h=null)),!h&&i&&vn(P,{onUrlUpdate:d,onRestart:Ze({onUrlUpdate:d,setTunnel:g=>{p.current=g}}),setActiveTunnel:g=>{p.current=g},onReady:async g=>{_n({apiKey:e.key,tunnelUrl:g.tunnelUrl,tunnelPid:g.child?.pid}),await M(I.READY,{tunnelUrl:g.tunnelUrl})}}),i?await M(I.READY,{tunnelUrl:u,oneTimeKey:s?.oneTimeKey||"",oneTimeKeyExpiresAt:s?.expiresAt||null,permanentKey:e.key,qrUrl:a,workerUrl:_}):(await M(I.STOPPED,{tunnelUrl:"",oneTimeKey:"",oneTimeKeyExpiresAt:null,permanentKey:e.key,qrUrl:"",workerUrl:_}),console.log(m.red(`
215
+ `)),await new Promise(c=>setTimeout(c,ne.bgSpawnFlushMs)),process.exit(0)}var ja=R(require("readline"),1);var Vr=B("mode"),Tn=null;async function Ga(){_e("agent",process.pid),console.clear(),Hi(),Vi(!0),await C(I.PREPARING);let e=await at(),t=null,r={getProcess:()=>null,shutdown:()=>{}};if(!await q()){r=mt(null,null,()=>{if(process.stdin.isTTY){try{process.stdin.setRawMode(!1)}catch{}try{process.stdin.setRawMode(!0),process.stdin.resume()}catch{}}try{ja.default.emitKeypressEvents(process.stdin)}catch{}t?.()});let g=Date.now()+Ae.serverReadyTimeoutMs;for(;Date.now()<g&&!await q();)await new Promise(b=>setTimeout(b,Ae.serverReadyIntervalMs))}try{ie(),await new Promise(g=>setTimeout(g,ne.killCloudflaredTuiMs))}catch{}try{await nr(br)}catch(g){Vr.error(`cloudflared setup failed: ${g?.message||g} \u2014 retry from Web UI`)}await C(I.CONNECTING);let n=j().remoteEnabled===!1,i=!n;if(n&&await dt(e.key),i)try{let g=await H(`${L}/api/session/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:Y(e.key),hostPublicKey:ot(),hostX25519Key:it()})});if(!g.ok)throw new Error(`Session create failed: ${g.status}`);await Q("/api/signaling/retry",{}),Mt(e.key)}catch(g){Vr.error(`Failed to connect: ${g.message}`),i=!1}await C(I.TUNNELING);let s=i?await Dn(e.key,L):null,a=Bn(L,s),c=s?.oneTimeKey||"",l=a,u="",f=null,p={current:null},d=async g=>{u=g,await Ct(e.key,g),await K({tunnelUrl:g}),an(g),f!==null&&(f=await Sn(c,e.key,l,u),t?.())},h=null;if(i)try{h=await Xe(P,d,ze({onUrlUpdate:d,setTunnel:g=>{p.current=g}}))}catch(g){Vr.error(`Tunnel spawn failed: ${g?.message||g} \u2014 QR RTC-only, bg retry`)}h&&(p.current=h.child,u=h.tunnelUrl,Cn({apiKey:e.key,tunnelUrl:h.tunnelUrl,tunnelPid:h.child?.pid}),await C(I.VERIFYING),await pt(h.tunnelUrl)?await d(h.tunnelUrl):(Vr.warn("Tunnel health check timed out \u2014 bg reconnect"),p.current=null,u="",h=null)),!h&&i&&En(P,{onUrlUpdate:d,onRestart:ze({onUrlUpdate:d,setTunnel:g=>{p.current=g}}),setActiveTunnel:g=>{p.current=g},onReady:async g=>{Cn({apiKey:e.key,tunnelUrl:g.tunnelUrl,tunnelPid:g.child?.pid}),await C(I.READY,{tunnelUrl:g.tunnelUrl})}}),i?await C(I.READY,{tunnelUrl:u,oneTimeKey:s?.oneTimeKey||"",oneTimeKeyExpiresAt:s?.expiresAt||null,permanentKey:e.key,qrUrl:a,workerUrl:L}):(await C(I.STOPPED,{tunnelUrl:"",oneTimeKey:"",oneTimeKeyExpiresAt:null,permanentKey:e.key,qrUrl:"",workerUrl:L}),console.log(m.red(`
216
216
  \u26A0 ${n?"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.
217
- `))),await new Promise(g=>setTimeout(g,ne.trayReadyMs)),f=await En(c,e.key,l,u);let w=[],E=!1,O=()=>{E||t?.()},T=async(g,b,L)=>{if(!E){E=!0;try{let $=await hs(b,L);await Q(`/api/device/${$?"approve":"reject"}`,{socketId:g})}catch{}finally{E=!1,t?.()}}},A=gs(P,async(g,b)=>{if(g==="log"&&b.message)w.push(b.message),w.length>He.maxLogLines&&w.shift();else if(g==="state"){let L=b.permanentKey||e.key,$=b.oneTimeKey!==void 0?b.oneTimeKey:c,Y=b.qrUrl!==void 0?b.qrUrl:l,se=b.tunnelUrl!==void 0?b.tunnelUrl:u;($!==c||L!==e.key||se!==u)&&(c=$,l=Y,u=se,b.permanentKey&&(e={...e,key:b.permanentKey}),f=await En(c,e.key,l,u),O())}else g==="permissions"?(E||Promise.resolve(Sn?.()).catch(()=>{}),O()):g==="autostart"||g==="sleepInhibit"?(E||Promise.resolve(Sn?.()).catch(()=>{}),O()):g==="deviceApproval"&&b.action==="pending"&&await T(b.socketId,b.deviceId,b.ip)}),k=setInterval(async()=>{if(!E)try{let b=(await J("/api/device/pending"))?.pending?.[0];b&&await T(b.socketId,b.deviceId,b.ip)}catch{}},be.pendingApprovalMs);mt({getProcess:r.getProcess,shutdown:()=>{ze(),r.shutdown();try{p.current?.kill()}catch{}A(),clearInterval(k)}}),yt(()=>p.current,g=>{p.current=g},e.key,()=>r),await au(e,u,()=>f,g=>{f=g},g=>{t=g},()=>{ze();try{A()}catch{}try{clearInterval(k)}catch{}Je({serverManager:r,tunnelProcess:p.current,exit:!1})},w)}async function au(e,t,r,o,n,i,s){for(;;){let{desktopEnabled:a,remoteAvailable:c,autoApprove:l}=await Eo(),u=[{label:"Open Web UI",action:"webui"}];X().remoteEnabled!==!1&&u.push({label:"Keys \u25B6",action:"keys"}),c&&u.push({label:`Remote Desktop: ${a?m.green("ON"):m.gray("OFF")} \u25B6`,action:"desktop"}),u.push({label:`Manage Devices \u25B6 ${m.dim("(Auto-approve:")} ${l?m.green("ON"):m.gray("OFF")}${m.dim(")")}`,action:"devices"},{label:"Settings \u25B6",action:"settings"},{label:"View Logs",action:"logs"},{label:m.gray("Exit"),action:"exit"});let f=null;n(()=>f?.());let p=await Ce("",u,0,r,h=>{f=h},i),d=p>=0?u[p].action:"exit";if(d==="webui"){let h=`http://localhost:${P}`,{openBrowser:w}=await Promise.resolve().then(()=>(Ot(),Xs));w(h),console.log(m.green(`
217
+ `))),await new Promise(g=>setTimeout(g,ne.trayReadyMs)),f=await Sn(c,e.key,l,u);let w=[],E=!1,O=()=>{E||t?.()},T=async(g,b,_)=>{if(!E){E=!0;try{let $=await Wi(b,_);await Q(`/api/device/${$?"approve":"reject"}`,{socketId:g})}catch{}finally{E=!1,t?.()}}},A=ji(P,async(g,b)=>{if(g==="log"&&b.message)w.push(b.message),w.length>We.maxLogLines&&w.shift();else if(g==="state"){let _=b.permanentKey||e.key,$=b.oneTimeKey!==void 0?b.oneTimeKey:c,X=b.qrUrl!==void 0?b.qrUrl:l,se=b.tunnelUrl!==void 0?b.tunnelUrl:u;($!==c||_!==e.key||se!==u)&&(c=$,l=X,u=se,b.permanentKey&&(e={...e,key:b.permanentKey}),f=await Sn(c,e.key,l,u),O())}else g==="permissions"?(E||Promise.resolve(Tn?.()).catch(()=>{}),O()):g==="autostart"||g==="sleepInhibit"?(E||Promise.resolve(Tn?.()).catch(()=>{}),O()):g==="deviceApproval"&&b.action==="pending"&&await T(b.socketId,b.deviceId,b.ip)}),k=setInterval(async()=>{if(!E)try{let b=(await J("/api/device/pending"))?.pending?.[0];b&&await T(b.socketId,b.deviceId,b.ip)}catch{}},Ae.pendingApprovalMs);ht({getProcess:r.getProcess,shutdown:()=>{et(),r.shutdown();try{p.current?.kill()}catch{}A(),clearInterval(k)}}),wt(()=>p.current,g=>{p.current=g},e.key,()=>r),await lu(e,u,()=>f,g=>{f=g},g=>{t=g},()=>{et();try{A()}catch{}try{clearInterval(k)}catch{}Ze({serverManager:r,tunnelProcess:p.current,exit:!1})},w)}async function lu(e,t,r,o,n,i,s){for(;;){let{desktopEnabled:a,remoteAvailable:c,autoApprove:l}=await lo(),u=[{label:"Open Web UI",action:"webui"}];j().remoteEnabled!==!1&&u.push({label:"Keys \u25B6",action:"keys"}),c&&u.push({label:`Remote Desktop: ${a?m.green("ON"):m.gray("OFF")} \u25B6`,action:"desktop"}),u.push({label:`Manage Devices \u25B6 ${m.dim("(Auto-approve:")} ${l?m.green("ON"):m.gray("OFF")}${m.dim(")")}`,action:"devices"},{label:"Settings \u25B6",action:"settings"},{label:"View Logs",action:"logs"},{label:m.gray("Exit"),action:"exit"});let f=null;n(()=>f?.());let p=await Ie("",u,0,r,h=>{f=h},i),d=p>=0?u[p].action:"exit";if(d==="webui"){let h=`http://localhost:${P}`,{openBrowser:w}=await Promise.resolve().then(()=>(_t(),oa));w(h),console.log(m.green(`
218
218
  \u{1F310} Opening ${h}
219
- `))}else if(d==="keys")await cu(e,t,o,r);else if(d==="desktop")await fu();else if(d==="devices")await pu();else if(d==="settings")await uu();else if(d==="logs")await du();else{try{i?.()}catch{}console.log(m.gray(`
219
+ `))}else if(d==="keys")await uu(e,t,o,r);else if(d==="desktop")await du();else if(d==="devices")await mu();else if(d==="settings")await pu();else if(d==="logs")await hu();else{try{i?.()}catch{}console.log(m.gray(`
220
220
  Goodbye!
221
- `)),process.exit(0)}}}async function cu(e,t,r,o){let n=X().remoteEnabled===!1?[{label:m.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:m.gray("\u2190 Back"),action:"back"}],i=await Ce("Keys",n,0,o),s=i>=0?n[i].action:"back";if(s==="otk"){let a=await rr(e.key,_);if(a){let c=or(_,a);r(await En(a.oneTimeKey,e.key,c,t)),await K({oneTimeKey:a.oneTimeKey,oneTimeKeyExpiresAt:a.expiresAt,qrUrl:c})}}else if(s==="regen"&&await wo(m.yellow("Replace current key and disconnect all sessions? Continue?"))){let c=await Ut(),l=Ft(c);if(!await ir(l,_,t,e.key)){r(m.red("Key regeneration failed \u2014 could not reach the server"));return}let u=Et(c,l,e.name||"Default");Object.assign(e,u),r(await En("",e.key,"",t)),await K({permanentKey:e.key,oneTimeKey:"",oneTimeKeyExpiresAt:null,qrUrl:"",pairingUsed:!0})}}var Yo={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 lu(e,t){let r=t.map(s=>({label:Yo[s]||s,action:s}));r.push({label:m.gray("\u2190 Back"),action:"back"});let o=Math.max(0,t.indexOf(e)),n=await Ce("Prevent sleep",r,o),i=n>=0?r[n].action:"back";i!=="back"&&await Q("/api/sleep-inhibit",{mode:i})}async function uu(){for(;;){let e=!1,t="never",r=[],o=()=>[{label:`Launch on system startup: ${e?m.green("ON"):m.gray("OFF")}`,action:"autostart"},{label:`Prevent sleep: ${t==="none"?m.gray(Yo.none):m.green(Yo[t]||t)} \u25B6`,action:"sleep"},{label:m.gray("\u2190 Back"),action:"back"}],n=o(),i=null,s=async()=>{let l=await Eo();e=!!l.autoStart,t=l.sleepInhibitMode||"never",r=l.sleepInhibitPresets||[],n=o(),i?.()};await s(),Sn=s;let a=await Ce("Settings",n,0,"",l=>{i=l});Sn=null;let c=a>=0?n[a].action:"back";if(c==="autostart")await Q("/api/autostart",{enabled:!e});else if(c==="sleep")await lu(t,r);else return}}async function fu(){for(;;){let e=!1,t={screenRecording:!1,accessibility:!1},r=()=>({toggle:`Toggle: ${e?m.green("ON \u2192 turn OFF"):m.gray("OFF \u2192 turn ON")}`,sr:`Screen Recording ${t.screenRecording?m.green("\u2713"):m.red("\u2717 (click to grant)")}`,ax:`Mouse & Keyboard control ${t.accessibility?m.green("\u2713"):m.red("\u2717 (click to grant)")}`}),o=[{label:""},{label:""},{label:""},{label:m.gray("\u2190 Back")}],n=null,i=async()=>{let a=await J("/api/ui/state")||{};e=!!a.desktopEnabled,t={screenRecording:!!a.screenRecording,accessibility:!!a.accessibility};let c=r();o[0].label=c.toggle,o[1].label=c.sr,o[2].label=c.ax,n?.()};await i(),Sn=i;let s=await Ce("Remote Desktop",o,0,"",a=>{n=a});if(Sn=null,s===0)await Q("/api/desktop/toggle",{enabled:!e});else if(s===1&&!t.screenRecording)await Q("/api/permissions/request",{type:"screenRecording"})||Or("screenRecording");else if(s===2&&!t.accessibility)await Q("/api/permissions/request",{type:"accessibility"})||Or("accessibility");else if(s===3||s===-1)return}}async function pu(){for(;;){let[e,t]=await Promise.all([J("/api/device/approved"),J("/api/device/auto-approve")]),r=e?.devices||[],o=!!t?.enabled,n=[{label:`Auto-approve new devices: ${o?m.green("ON"):m.gray("OFF")}`,action:"toggle"},...r.map(a=>{let c=a.deviceId.slice(0,8),l=a.approvedAt?new Date(a.approvedAt).toLocaleString():"unknown";return{label:`${c}... ${m.dim(l)}`,action:"remove",deviceId:a.deviceId}}),{label:m.gray("\u2190 Back"),action:"back"}],i=await Ce(`Approved Devices (${r.length})`,n,0);if(i===-1)return;let s=n[i];if(s.action==="back")return;if(s.action==="toggle"){await Q("/api/device/auto-approve",{enabled:!o});continue}s.action==="remove"&&await wo(m.yellow(`Remove device ${s.deviceId.slice(0,8)}...?`))&&await Q("/api/device/remove",{deviceId:s.deviceId})}}async function du(){let e=xi(ti),t=e.length?e.join(`
221
+ `)),process.exit(0)}}}async function uu(e,t,r,o){let n=j().remoteEnabled===!1?[{label:m.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:m.gray("\u2190 Back"),action:"back"}],i=await Ie("Keys",n,0,o),s=i>=0?n[i].action:"back";if(s==="otk"){let a=await Dn(e.key,L);if(a){let c=Bn(L,a);r(await Sn(a.oneTimeKey,e.key,c,t)),await K({oneTimeKey:a.oneTimeKey,oneTimeKeyExpiresAt:a.expiresAt,qrUrl:c})}}else if(s==="regen"&&await ao(m.yellow("Replace current key and disconnect all sessions? Continue?"))){let c=await Kt(),l=St(c);if(!await bt(l,L,t,e.key)){r(m.red("Key regeneration failed \u2014 could not reach the server"));return}let u=Ke(c,l,e.name||"Default");Object.assign(e,u),r(await Sn("",e.key,"",t)),await K({permanentKey:e.key,oneTimeKey:"",oneTimeKeyExpiresAt:null,qrUrl:"",pairingUsed:!0})}}var Xo={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 fu(e,t){let r=t.map(s=>({label:Xo[s]||s,action:s}));r.push({label:m.gray("\u2190 Back"),action:"back"});let o=Math.max(0,t.indexOf(e)),n=await Ie("Prevent sleep",r,o),i=n>=0?r[n].action:"back";i!=="back"&&await Q("/api/sleep-inhibit",{mode:i})}async function pu(){for(;;){let e=!1,t="never",r=[],o=()=>[{label:`Launch on system startup: ${e?m.green("ON"):m.gray("OFF")}`,action:"autostart"},{label:`Prevent sleep: ${t==="none"?m.gray(Xo.none):m.green(Xo[t]||t)} \u25B6`,action:"sleep"},{label:m.gray("\u2190 Back"),action:"back"}],n=o(),i=null,s=async()=>{let l=await lo();e=!!l.autoStart,t=l.sleepInhibitMode||"never",r=l.sleepInhibitPresets||[],n=o(),i?.()};await s(),Tn=s;let a=await Ie("Settings",n,0,"",l=>{i=l});Tn=null;let c=a>=0?n[a].action:"back";if(c==="autostart")await Q("/api/autostart",{enabled:!e});else if(c==="sleep")await fu(t,r);else return}}async function du(){for(;;){let e=!1,t={screenRecording:!1,accessibility:!1},r=()=>({toggle:`Toggle: ${e?m.green("ON \u2192 turn OFF"):m.gray("OFF \u2192 turn ON")}`,sr:`Screen Recording ${t.screenRecording?m.green("\u2713"):m.red("\u2717 (click to grant)")}`,ax:`Mouse & Keyboard control ${t.accessibility?m.green("\u2713"):m.red("\u2717 (click to grant)")}`}),o=[{label:""},{label:""},{label:""},{label:m.gray("\u2190 Back")}],n=null,i=async()=>{let a=await J("/api/ui/state")||{};e=!!a.desktopEnabled,t={screenRecording:!!a.screenRecording,accessibility:!!a.accessibility};let c=r();o[0].label=c.toggle,o[1].label=c.sr,o[2].label=c.ax,n?.()};await i(),Tn=i;let s=await Ie("Remote Desktop",o,0,"",a=>{n=a});if(Tn=null,s===0)await Q("/api/desktop/toggle",{enabled:!e});else if(s===1&&!t.screenRecording)await Q("/api/permissions/request",{type:"screenRecording"})||wr("screenRecording");else if(s===2&&!t.accessibility)await Q("/api/permissions/request",{type:"accessibility"})||wr("accessibility");else if(s===3||s===-1)return}}async function mu(){for(;;){let[e,t]=await Promise.all([J("/api/device/approved"),J("/api/device/auto-approve")]),r=e?.devices||[],o=!!t?.enabled,n=[{label:`Auto-approve new devices: ${o?m.green("ON"):m.gray("OFF")}`,action:"toggle"},...r.map(a=>{let c=a.deviceId.slice(0,8),l=a.approvedAt?new Date(a.approvedAt).toLocaleString():"unknown";return{label:`${c}... ${m.dim(l)}`,action:"remove",deviceId:a.deviceId}}),{label:m.gray("\u2190 Back"),action:"back"}],i=await Ie(`Approved Devices (${r.length})`,n,0);if(i===-1)return;let s=n[i];if(s.action==="back")return;if(s.action==="toggle"){await Q("/api/device/auto-approve",{enabled:!o});continue}s.action==="remove"&&await ao(m.yellow(`Remove device ${s.deviceId.slice(0,8)}...?`))&&await Q("/api/device/remove",{deviceId:s.deviceId})}}async function hu(){let e=Ai(ni),t=e.length?e.join(`
222
222
  `):m.gray(" No logs yet"),r=`
223
- ${m.dim("Log file:")} ${m.cyan(Cn)}
224
- ${m.dim(`Tail: tail -f ${Cn}`)}`;await Ce("Logs",[{label:m.gray("\u2190 Back")}],0,t+r)}async function ja(){let e=Pe(),t=await rs(),r=yo(e,t?.latest??null),o=[];t?.latest&&o.push({label:m.yellow(`Update to v${t.latest}`),action:"update"}),o.push({label:"Open Web UI (background)",action:"ui"},{label:"Terminal UI",action:"tui"},{label:m.gray("Exit"),action:"exit"});let n=await Ce("",o,0,r),i=n>=0?o[n].action:"exit";if(i==="update"){let s=Math.min(He.headerWidth,process.stdout.columns||He.headerWidth);Pr(),console.log(fe.orange(`
223
+ ${m.dim("Log file:")} ${m.cyan(Nn)}
224
+ ${m.dim(`Tail: tail -f ${Nn}`)}`;await Ie("Logs",[{label:m.gray("\u2190 Back")}],0,t+r)}async function Va(){let e=Le(),t=await Os(),r=so(e,t?.latest??null),o=[];t?.latest&&o.push({label:m.yellow(`Update to v${t.latest}`),action:"update"}),o.push({label:"Open Web UI (background)",action:"ui"},{label:"Terminal UI",action:"tui"},{label:m.gray("Exit"),action:"exit"});let n=await Ie("",o,0,r),i=n>=0?o[n].action:"exit";if(i==="update"){let s=Math.min(We.headerWidth,process.stdout.columns||We.headerWidth);$r(),console.log(fe.orange(`
225
225
  `+"\u2550".repeat(s))),console.log(m.gray(` \u2713 Stopped running instances
226
226
  `)),console.log(m.yellow(` \u2B06 Run this command to update:
227
227
  `)),console.log(m.white.bold(` npm i -g ${Ue}
228
228
  `)),console.log(fe.orange("\u2550".repeat(s))+`
229
- `),process.exit(0)}else i==="ui"?await Ka():i==="tui"?await Wa():process.exit(0)}var Ga=[["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 Xo(){Jt(Pe()),console.log(m.white.bold(`
229
+ `),process.exit(0)}else i==="ui"?await Wa():i==="tui"?await Ga():process.exit(0)}var Ya=[["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 Qo(){Xt(Le()),console.log(m.white.bold(`
230
230
  Usage:
231
- `));let e=Math.max(...Ga.map(([t])=>t.length))+2;for(let[t,r]of Ga)console.log(" "+m.cyan(t.padEnd(e))+m.gray(r));console.log()}async function sr(){return await re()?!0:(console.log(m.red(`
231
+ `));let e=Math.max(...Ya.map(([t])=>t.length))+2;for(let[t,r]of Ya)console.log(" "+m.cyan(t.padEnd(e))+m.gray(r));console.log()}async function ar(){return await q()?!0:(console.log(m.red(`
232
232
  \u2717 Server not running. Start it first: `)+m.cyan("9remote start")+`
233
- `),!1)}async function mu(e){if(!await sr())return;if(e){let r=await Q("/api/key/regenerate"),o=r&&r.ok?await r.json():null;if(!o?.permanentKey){console.log(m.red(`
233
+ `),!1)}async function gu(e){if(!await ar())return;if(e){let r=await Q("/api/key/regenerate"),o=r&&r.ok?await r.json():null;if(!o?.permanentKey){console.log(m.red(`
234
234
  \u2717 Regenerate failed
235
235
  `));return}console.log(m.green(`
236
236
  \u2713 New key: `)+m.white.bold(o.permanentKey)+`
237
237
  `);return}let t=await J("/api/ui/state")||{};if(!t.permanentKey){console.log(m.red(`
238
238
  \u2717 No key yet. Run: `)+m.cyan("9remote start")+`
239
239
  `);return}console.log(m.white(`
240
- Key`.padEnd(14))+m.white.bold(t.permanentKey)),t.qrUrl&&console.log(m.white("Connect URL".padEnd(14))+m.cyan(t.qrUrl)),console.log(m.white("App URL".padEnd(14))+m.gray(`${_}/login`)+`
241
- `)}async function hu(){if(!await sr())return;let e=await Q("/api/key/one-time"),t=e&&e.ok?await e.json():null;if(!t?.qrUrl){console.log(m.red(`
240
+ Key`.padEnd(14))+m.white.bold(t.permanentKey)),t.qrUrl&&console.log(m.white("Connect URL".padEnd(14))+m.cyan(t.qrUrl)),console.log(m.white("App URL".padEnd(14))+m.gray(`${L}/login`)+`
241
+ `)}async function yu(){if(!await ar())return;let e=await Q("/api/key/one-time"),t=e&&e.ok?await e.json():null;if(!t?.qrUrl){console.log(m.red(`
242
242
  \u2717 Failed to create one-time key
243
243
  `));return}console.log(m.green(`
244
244
  \u2713 One-time key (30 min): `)+m.white.bold(t.oneTimeKey)),console.log(m.white("Connect URL ")+m.cyan(t.qrUrl)+`
245
- `)}async function gu(){if(!await sr())return;let t=(await J("/api/device/approved")||{}).devices||[],r=await J("/api/device/auto-approve")||{};if(console.log(m.white(`
245
+ `)}async function wu(){if(!await ar())return;let t=(await J("/api/device/approved")||{}).devices||[],r=await J("/api/device/auto-approve")||{};if(console.log(m.white(`
246
246
  Auto-approve: `)+(r.enabled?m.green("ON"):m.gray("OFF"))),!t.length){console.log(m.gray(`No approved devices
247
- `));return}console.log(m.white(`Approved devices (${t.length}):`));for(let o of t)console.log(" "+m.cyan(o.deviceId));console.log()}async function yu(e){if(!await sr())return;let t=e==="on";if(e!=="on"&&e!=="off"){console.log(m.red(`
247
+ `));return}console.log(m.white(`Approved devices (${t.length}):`));for(let o of t)console.log(" "+m.cyan(o.deviceId));console.log()}async function vu(e){if(!await ar())return;let t=e==="on";if(e!=="on"&&e!=="off"){console.log(m.red(`
248
248
  \u2717 Usage: 9remote auto-approve <on|off>
249
249
  `));return}let r=await Q("/api/device/auto-approve",{enabled:t}),o=r&&r.ok?await r.json():null;console.log(m.green(`
250
250
  \u2713 Auto-approve: `)+(o?.enabled?m.green("ON"):m.gray("OFF"))+`
251
- `)}async function wu(e){if(!await sr())return;if(!e){let n=(await J("/api/device/pending")||{}).pending||[];if(!n.length){console.log(m.gray(`
251
+ `)}async function Eu(e){if(!await ar())return;if(!e){let n=(await J("/api/device/pending")||{}).pending||[];if(!n.length){console.log(m.gray(`
252
252
  No pending devices
253
253
  `));return}console.log(m.white(`
254
254
  Pending devices (${n.length}):`));for(let i of n)console.log(" "+m.cyan(i.socketId)+m.gray(` ${i.deviceId?.slice(0,8)||""} ${i.ip||""}`));console.log(m.gray(`
@@ -257,5 +257,5 @@ Approve with: `)+m.cyan("9remote approve <socketId>")+`
257
257
  \u2713 Approved
258
258
  `):m.red(`
259
259
  \u2717 Approve failed (invalid socketId?)
260
- `))}async function Va(e){let t=e[2],r=e.slice(3);switch(t){case"help":case"-h":case"--help":return Xo(),!0;case"key":return await mu(r.includes("--new")),!0;case"otk":return await hu(),!0;case"devices":return await gu(),!0;case"auto-approve":return await yu(r[0]),!0;case"approve":return await wu(r[0]),!0;default:return!1}}var Qo=process.argv[2];(Qo==="version"||Qo==="--version"||Qo==="-v")&&(process.stdout.write(Pe()+`
261
- `),process.exit(0));Ai();async function vu(){let e=process.argv[2];if(await Va(process.argv))return;process.argv.includes("--tray")||process.argv.includes("--auto")||process.argv.includes("--start")||Pr(),e==="ui"?await Na():e==="start"||process.argv.includes("--auto")?await Ba():process.argv.includes("--tray")||process.argv.includes("--start")?await Da():process.stdin.isTTY?await ja():Xo()}vu().catch(console.error);
260
+ `))}async function Xa(e){let t=e[2],r=e.slice(3);switch(t){case"help":case"-h":case"--help":return Qo(),!0;case"key":return await gu(r.includes("--new")),!0;case"otk":return await yu(),!0;case"devices":return await wu(),!0;case"auto-approve":return await vu(r[0]),!0;case"approve":return await Eu(r[0]),!0;default:return!1}}var qo=process.argv[2];(qo==="version"||qo==="--version"||qo==="-v")&&(process.stdout.write(Le()+`
261
+ `),process.exit(0));bi();async function Su(){let e=process.argv[2];if(await Xa(process.argv))return;process.argv.includes("--tray")||process.argv.includes("--auto")||process.argv.includes("--start")||$r(),e==="ui"?await Ba():e==="start"||process.argv.includes("--auto")?await Fa():process.argv.includes("--tray")||process.argv.includes("--start")?await Ua():process.stdin.isTTY?await Va():Qo()}Su().catch(console.error);