@xenon-device-management/xenon 2.1.0 → 2.3.0

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 (124) hide show
  1. package/lib/package.json +3 -3
  2. package/lib/public/assets/{AnnotationOverlay-C-Pw_hvw.js → AnnotationOverlay-AxcBYoKp.js} +1 -1
  3. package/lib/public/assets/{ApiKeyGate-DmYQ0oSk.js → ApiKeyGate-CIU02EIx.js} +1 -1
  4. package/lib/public/assets/{BugReportButton-n8T1dFUp.js → BugReportButton-_akEEjXm.js} +1 -1
  5. package/lib/public/assets/DeviceMosaicView-Bhk1udmn.js +2 -0
  6. package/lib/public/assets/{EmptyState-DExETevp.js → EmptyState-DRKRm19_.js} +1 -1
  7. package/lib/public/assets/{FieldGroup-CCdFlZm6.js → FieldGroup-zQQHPh7x.js} +1 -1
  8. package/lib/public/assets/{FilterMenu-DiUSOSL-.js → FilterMenu-C9_StnDi.js} +1 -1
  9. package/lib/public/assets/{Menu-ZOfpH6gh.js → Menu-0J7io6pF.js} +1 -1
  10. package/lib/public/assets/{Modal-CZNtoB-1.js → Modal-C677ljNX.js} +1 -1
  11. package/lib/public/assets/{RecordingPage-BKp6h8Jl.js → RecordingPage-BDJFck-L.js} +1 -1
  12. package/lib/public/assets/{RecordingsPage-Bf881FX4.js → RecordingsPage-DQkimbKK.js} +1 -1
  13. package/lib/public/assets/{SegmentedControl-EUoyizvW.js → SegmentedControl-DvGMZBIE.js} +1 -1
  14. package/lib/public/assets/{SettingCard-ClT4hf4_.js → SettingCard-ogyouYBq.js} +1 -1
  15. package/lib/public/assets/{Table-ucR4bnmc.js → Table-BLFCOLlO.js} +1 -1
  16. package/lib/public/assets/{activity-K-hdylwq.js → activity-BU55TGRG.js} +1 -1
  17. package/lib/public/assets/{ai-settings-BLhdwI3c.js → ai-settings-GpDAiHav.js} +1 -1
  18. package/lib/public/assets/{api-keys-BbiN7rBI.js → api-keys-dOzP0k8_.js} +1 -1
  19. package/lib/public/assets/{apps-Dez1petz.js → apps-mAwAQmkn.js} +1 -1
  20. package/lib/public/assets/{arrow-left-UjmFHLAJ.js → arrow-left-Dg9mxe9T.js} +1 -1
  21. package/lib/public/assets/{arrow-right-BVyEigbu.js → arrow-right-BVcmUyq3.js} +1 -1
  22. package/lib/public/assets/{arrow-up-right-B-ZlBof3.js → arrow-up-right-ByR5pZrH.js} +1 -1
  23. package/lib/public/assets/{auth-shell-DAQjAgUv.js → auth-shell-Jpgk8CgY.js} +2 -2
  24. package/lib/public/assets/{builds-page-CmIPa5JK.js → builds-page-VnRTrcdl.js} +1 -1
  25. package/lib/public/assets/{button-Dd-IhMC1.js → button-D-X4wjO8.js} +1 -1
  26. package/lib/public/assets/{calendar-CAIeJwa5.js → calendar-ur_p5ETA.js} +1 -1
  27. package/lib/public/assets/{check-C4Jrjg8f.js → check-K33iMeyq.js} +1 -1
  28. package/lib/public/assets/{chevron-left-BGzlf-4i.js → chevron-left-DMVWShd-.js} +1 -1
  29. package/lib/public/assets/{chevron-right-_wYqDjDC.js → chevron-right-DphLJ2_X.js} +1 -1
  30. package/lib/public/assets/{circle-check-Ckn00yMB.js → circle-check-CNFhu8oE.js} +1 -1
  31. package/lib/public/assets/{circle-x-pdVkomLa.js → circle-x-BH_cUbqZ.js} +1 -1
  32. package/lib/public/assets/{clock-B8vmwkHj.js → clock-CVMVdVvp.js} +1 -1
  33. package/lib/public/assets/{copy-BAqnFI-F.js → copy-CZ2XHafL.js} +1 -1
  34. package/lib/public/assets/{device-explorer-CYq_4F_N.js → device-explorer-B94BhaqF.js} +52 -52
  35. package/lib/public/assets/{download-B6UEAp_1.js → download-UUiyw7kO.js} +1 -1
  36. package/lib/public/assets/{forgot-password-CLqNvmrN.js → forgot-password-CrS14F79.js} +1 -1
  37. package/lib/public/assets/{funnel-Da90BBbT.js → funnel-BMOE5qJY.js} +1 -1
  38. package/lib/public/assets/{index-BuIIcmGp.js → index-2XPPbPwy.js} +43 -43
  39. package/lib/public/assets/{index-MX7IzqyW.js → index-D0R9Yic3.js} +1 -1
  40. package/lib/public/assets/{input-Bq9aY-We.js → input-C-1b8J7i.js} +1 -1
  41. package/lib/public/assets/{keycodes-CIhXIJyP.js → keycodes-Cly7dQc9.js} +4 -4
  42. package/lib/public/assets/{layers-bXjpswQI.js → layers-DFZfqGdX.js} +1 -1
  43. package/lib/public/assets/{lock-pJ72y5Fy.js → lock-ylHMJpfP.js} +1 -1
  44. package/lib/public/assets/{login-UOcHALV2.js → login-DWsWKqDx.js} +1 -1
  45. package/lib/public/assets/{maintenance-settings-XnJgp5yb.js → maintenance-settings-9B6_MTqW.js} +1 -1
  46. package/lib/public/assets/{monitor-QkAhI1Jx.js → monitor-CzX0hBH1.js} +1 -1
  47. package/lib/public/assets/{mouse-pointer-2-B42Da0m4.js → mouse-pointer-2-CZHD7N3z.js} +1 -1
  48. package/lib/public/assets/{network-CKVqcyp6.js → network-Bikc4MyT.js} +1 -1
  49. package/lib/public/assets/{overview-BORGkN3N.js → overview-DzaA0aMe.js} +1 -1
  50. package/lib/public/assets/{page-header-CKWFOjOI.js → page-header-DqGlDufy.js} +1 -1
  51. package/lib/public/assets/{plus-BpFKVdC8.js → plus-Ct6aQTGM.js} +1 -1
  52. package/lib/public/assets/{profile-page-CcbKBicY.js → profile-page-CCnUQ1Qk.js} +1 -1
  53. package/lib/public/assets/{reset-password-BA0W9bxl.js → reset-password-AmkGGXo5.js} +1 -1
  54. package/lib/public/assets/{runbook-page-Cp7ZBq3s.js → runbook-page-DQQn9VyE.js} +1 -1
  55. package/lib/public/assets/{select-DIZWIoVR.js → select-k5ogtEWW.js} +1 -1
  56. package/lib/public/assets/{selector-detail-page-C_4YuvAp.js → selector-detail-page-BCcwC5ku.js} +1 -1
  57. package/lib/public/assets/{selector-health-CXjD_Xth.js → selector-health-BVyX6kIh.js} +1 -1
  58. package/lib/public/assets/{selector-health-page-CTqIHeoG.js → selector-health-page-CElBB6XT.js} +1 -1
  59. package/lib/public/assets/{session-detail-page-B0KYkk8z.js → session-detail-page-6bqo_-ND.js} +1 -1
  60. package/lib/public/assets/{settings-BcRBKUXd.js → settings-DKBj9KyN.js} +1 -1
  61. package/lib/public/assets/{status-pill-outline-Dh2PXSf_.js → status-pill-outline-CZNpvqej.js} +1 -1
  62. package/lib/public/assets/{tablet-_sXqZztt.js → tablet-B6HI5OxV.js} +1 -1
  63. package/lib/public/assets/{teams-DGHT8MKm.js → teams-owoDHbOU.js} +1 -1
  64. package/lib/public/assets/{trash-2-BV88cV3Z.js → trash-2-D61PoUrZ.js} +1 -1
  65. package/lib/public/assets/{upload-CIDH9wkj.js → upload-1ZYEVvgD.js} +1 -1
  66. package/lib/public/assets/{use-password-reset-mode-DYGuSNwl.js → use-password-reset-mode-Dx0ghiiQ.js} +1 -1
  67. package/lib/public/assets/{users-7yviqflc.js → users-C5CS5Qez.js} +1 -1
  68. package/lib/public/assets/{users-BUE7MoTq.js → users-PbGMd5sD.js} +1 -1
  69. package/lib/public/assets/{video-off-BTRxtlGo.js → video-off-_XusI0HK.js} +1 -1
  70. package/lib/public/assets/{webhook-settings-DMKD9Pgm.js → webhook-settings-Bi_HHQlQ.js} +1 -1
  71. package/lib/public/assets/{zap-CWE94qcK.js → zap-uzHWFAKI.js} +1 -1
  72. package/lib/public/index.html +1 -1
  73. package/lib/src/app/routers/control.js +119 -203
  74. package/lib/src/app/routers/nodePhoneControl.js +520 -0
  75. package/lib/src/app/ws/h264StreamWs.js +30 -4
  76. package/lib/src/app/ws/logcatWs.js +36 -7
  77. package/lib/src/app/ws/nodeSocketRelay.js +167 -0
  78. package/lib/src/data-service/device-store.js +17 -2
  79. package/lib/src/data-service/deviceClaims.js +32 -0
  80. package/lib/src/data-service/deviceFieldOwners.js +3 -1
  81. package/lib/src/data-service/prisma-store.js +9 -1
  82. package/lib/src/device-managers/AndroidDeviceManager.js +38 -28
  83. package/lib/src/device-managers/android/AndroidH264StreamService.js +10 -2
  84. package/lib/src/device-managers/android/AndroidStreamService.js +3 -1
  85. package/lib/src/device-managers/ios/IOSStreamService.js +4 -2
  86. package/lib/src/gateway/forwardToNode.js +10 -3
  87. package/lib/src/generated/client/edge.js +5 -4
  88. package/lib/src/generated/client/index-browser.js +2 -1
  89. package/lib/src/generated/client/index.d.ts +36 -1
  90. package/lib/src/generated/client/index.js +5 -4
  91. package/lib/src/generated/client/package.json +1 -1
  92. package/lib/src/generated/client/schema.prisma +4 -0
  93. package/lib/src/generated/client/wasm.js +2 -1
  94. package/lib/src/middleware/deviceAccessGuard.js +4 -1
  95. package/lib/src/services/ServerManager.js +13 -0
  96. package/lib/src/services/device-access/ticketActorAccess.js +3 -1
  97. package/lib/src/services/lease/LeaseOrphanSweeper.js +4 -2
  98. package/lib/test/helpers/own-node-id.js +29 -0
  99. package/lib/test/setup/scratch-default-database.js +32 -0
  100. package/lib/test/unit/AndroidDeviceManager.spec.js +60 -0
  101. package/lib/test/unit/android-h264-service.spec.js +18 -0
  102. package/lib/test/unit/clipboard-route.spec.js +4 -0
  103. package/lib/test/unit/control-forward-decision.spec.js +17 -17
  104. package/lib/test/unit/device-access-guard.spec.js +38 -0
  105. package/lib/test/unit/hub-node-control-forward.spec.js +374 -1
  106. package/lib/test/unit/hub-node-race.spec.js +51 -0
  107. package/lib/test/unit/install-repository-app-team.spec.js +4 -0
  108. package/lib/test/unit/lease/lease-sweeper-expiry.spec.js +15 -0
  109. package/lib/test/unit/logcat-ws.spec.js +8 -0
  110. package/lib/test/unit/mark-node-busy-loki.spec.js +66 -0
  111. package/lib/test/unit/node-phone-control.spec.js +225 -0
  112. package/lib/test/unit/node-socket-relay.spec.js +357 -0
  113. package/lib/test/unit/screenshot-route.spec.js +104 -0
  114. package/lib/test/unit/stream-leave-route.spec.js +4 -0
  115. package/lib/test/unit/stream-stop-ownership.spec.js +4 -0
  116. package/lib/test/unit/stream-stop-recording.spec.js +4 -0
  117. package/lib/test/unit/stream-ticket-identity.spec.js +11 -1
  118. package/lib/test/unit/stream-watchdog-timers.spec.js +46 -0
  119. package/lib/test/unit/upload-install-route.spec.js +205 -0
  120. package/lib/tsconfig.tsbuildinfo +1 -1
  121. package/package.json +3 -3
  122. package/prisma/migrations/20261001120000_device_node_hold/migration.sql +2 -0
  123. package/prisma/schema.prisma +4 -0
  124. package/lib/public/assets/DeviceMosaicView-D-rGOBbJ.js +0 -2
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-BuIIcmGp.js";/**
1
+ import{c as o}from"./index-2XPPbPwy.js";/**
2
2
  * @license lucide-react v0.555.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{r as t,j as e,e as m,g as b}from"./index-BuIIcmGp.js";import{u as g}from"./use-password-reset-mode-DYGuSNwl.js";import{A as c}from"./auth-shell-DAQjAgUv.js";import"./network-CKVqcyp6.js";function N(){const[s,d]=t.useState(""),[a,o]=t.useState(!1),[u,x]=t.useState(!1),[n,l]=t.useState(null),i=g();async function f(r){r.preventDefault(),o(!0),l(null);try{await b(s),x(!0)}catch(h){l(h.message||"Request failed")}finally{o(!1)}}return i!=="email"?e.jsxs(c,{children:[e.jsx("h1",{className:"text-2xl font-semibold mb-1",children:"Forgot password?"}),i==="admin"&&e.jsx("p",{className:"text-sm text-[var(--text-muted)] mb-6",children:"This Xenon server can't send email, so passwords are reset by an administrator. Ask a Xenon admin to send you a reset link from the Users page."}),e.jsx("div",{className:"mt-6 text-center",children:e.jsx(m,{to:"/login",className:"text-sm text-[var(--color-accent)] underline-offset-4 hover:underline",children:"Back to sign in"})})]}):e.jsx(c,{children:e.jsxs("form",{onSubmit:f,children:[e.jsx("h1",{className:"text-2xl font-semibold mb-1",children:"Forgot password?"}),e.jsx("p",{className:"text-sm text-[var(--text-muted)] mb-6",children:"Enter your email and we'll send you a reset link if your account exists."}),u?e.jsx("div",{className:"text-sm text-[var(--text)] mb-6",children:"If your email is registered, you'll receive a reset link shortly. Check your spam folder if you don't see it within a minute."}):e.jsxs(e.Fragment,{children:[e.jsx("label",{htmlFor:"forgot-email",className:"block text-sm font-medium text-[var(--text)] mb-1.5",children:"Email"}),e.jsx("input",{id:"forgot-email",type:"email",autoComplete:"username",value:s,onChange:r=>d(r.target.value),autoFocus:!0,required:!0,className:"w-full mb-4 h-10 px-3 rounded-lg bg-[var(--bg)] border border-[var(--border-strong)] text-sm text-[var(--text)] outline-none focus:border-[var(--color-accent)] focus:shadow-[0_0_0_3px_var(--accent-subtle)]"}),n&&e.jsx("div",{role:"alert",className:"text-sm text-[var(--red)] mb-3",children:n}),e.jsx("button",{type:"submit",disabled:a||!s,className:"mt-5 w-full h-10 rounded-md bg-[var(--color-accent)] text-[var(--color-on-accent)] font-medium text-sm disabled:opacity-50",children:a?"Sending…":"Send reset link"})]}),e.jsx("div",{className:"mt-6 text-center",children:e.jsx(m,{to:"/login",className:"text-sm text-[var(--color-accent)] underline-offset-4 hover:underline",children:"Back to sign in"})})]})})}export{N as default};
1
+ import{r as t,j as e,e as m,g as b}from"./index-2XPPbPwy.js";import{u as g}from"./use-password-reset-mode-Dx0ghiiQ.js";import{A as c}from"./auth-shell-Jpgk8CgY.js";import"./network-Bikc4MyT.js";function N(){const[s,d]=t.useState(""),[a,o]=t.useState(!1),[u,x]=t.useState(!1),[n,l]=t.useState(null),i=g();async function f(r){r.preventDefault(),o(!0),l(null);try{await b(s),x(!0)}catch(h){l(h.message||"Request failed")}finally{o(!1)}}return i!=="email"?e.jsxs(c,{children:[e.jsx("h1",{className:"text-2xl font-semibold mb-1",children:"Forgot password?"}),i==="admin"&&e.jsx("p",{className:"text-sm text-[var(--text-muted)] mb-6",children:"This Xenon server can't send email, so passwords are reset by an administrator. Ask a Xenon admin to send you a reset link from the Users page."}),e.jsx("div",{className:"mt-6 text-center",children:e.jsx(m,{to:"/login",className:"text-sm text-[var(--color-accent)] underline-offset-4 hover:underline",children:"Back to sign in"})})]}):e.jsx(c,{children:e.jsxs("form",{onSubmit:f,children:[e.jsx("h1",{className:"text-2xl font-semibold mb-1",children:"Forgot password?"}),e.jsx("p",{className:"text-sm text-[var(--text-muted)] mb-6",children:"Enter your email and we'll send you a reset link if your account exists."}),u?e.jsx("div",{className:"text-sm text-[var(--text)] mb-6",children:"If your email is registered, you'll receive a reset link shortly. Check your spam folder if you don't see it within a minute."}):e.jsxs(e.Fragment,{children:[e.jsx("label",{htmlFor:"forgot-email",className:"block text-sm font-medium text-[var(--text)] mb-1.5",children:"Email"}),e.jsx("input",{id:"forgot-email",type:"email",autoComplete:"username",value:s,onChange:r=>d(r.target.value),autoFocus:!0,required:!0,className:"w-full mb-4 h-10 px-3 rounded-lg bg-[var(--bg)] border border-[var(--border-strong)] text-sm text-[var(--text)] outline-none focus:border-[var(--color-accent)] focus:shadow-[0_0_0_3px_var(--accent-subtle)]"}),n&&e.jsx("div",{role:"alert",className:"text-sm text-[var(--red)] mb-3",children:n}),e.jsx("button",{type:"submit",disabled:a||!s,className:"mt-5 w-full h-10 rounded-md bg-[var(--color-accent)] text-[var(--color-on-accent)] font-medium text-sm disabled:opacity-50",children:a?"Sending…":"Send reset link"})]}),e.jsx("div",{className:"mt-6 text-center",children:e.jsx(m,{to:"/login",className:"text-sm text-[var(--color-accent)] underline-offset-4 hover:underline",children:"Back to sign in"})})]})})}export{N as default};
@@ -1,4 +1,4 @@
1
- import{c}from"./index-BuIIcmGp.js";/**
1
+ import{c}from"./index-2XPPbPwy.js";/**
2
2
  * @license lucide-react v0.555.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.