@juspay/shooter 1.0.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 (327) hide show
  1. package/.claude/hooks/notifier.cjs +1431 -0
  2. package/.claude/settings.json +162 -0
  3. package/README.md +515 -0
  4. package/bin/shooter.cjs +141 -0
  5. package/build/client/_app/immutable/assets/0.CM9Hl6d-.css +1 -0
  6. package/build/client/_app/immutable/assets/0.CM9Hl6d-.css.br +0 -0
  7. package/build/client/_app/immutable/assets/0.CM9Hl6d-.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/2.CAShZ7lQ.css +1 -0
  9. package/build/client/_app/immutable/assets/2.CAShZ7lQ.css.br +1 -0
  10. package/build/client/_app/immutable/assets/2.CAShZ7lQ.css.gz +0 -0
  11. package/build/client/_app/immutable/assets/3.C0uFg0IS.css +1 -0
  12. package/build/client/_app/immutable/assets/3.C0uFg0IS.css.br +0 -0
  13. package/build/client/_app/immutable/assets/3.C0uFg0IS.css.gz +0 -0
  14. package/build/client/_app/immutable/assets/4.cJuCkJKZ.css +1 -0
  15. package/build/client/_app/immutable/assets/4.cJuCkJKZ.css.br +0 -0
  16. package/build/client/_app/immutable/assets/4.cJuCkJKZ.css.gz +0 -0
  17. package/build/client/_app/immutable/assets/5.DRjApZQW.css +1 -0
  18. package/build/client/_app/immutable/assets/5.DRjApZQW.css.br +0 -0
  19. package/build/client/_app/immutable/assets/5.DRjApZQW.css.gz +0 -0
  20. package/build/client/_app/immutable/assets/6.AraZrY8I.css +1 -0
  21. package/build/client/_app/immutable/assets/6.AraZrY8I.css.br +0 -0
  22. package/build/client/_app/immutable/assets/6.AraZrY8I.css.gz +0 -0
  23. package/build/client/_app/immutable/assets/7.BCJ1IuMx.css +1 -0
  24. package/build/client/_app/immutable/assets/7.BCJ1IuMx.css.br +0 -0
  25. package/build/client/_app/immutable/assets/7.BCJ1IuMx.css.gz +0 -0
  26. package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css +1 -0
  27. package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css.br +0 -0
  28. package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css.gz +0 -0
  29. package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css +1 -0
  30. package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css.br +0 -0
  31. package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css.gz +0 -0
  32. package/build/client/_app/immutable/assets/xterm.DFuMZ0ql.css +1 -0
  33. package/build/client/_app/immutable/assets/xterm.DFuMZ0ql.css.br +0 -0
  34. package/build/client/_app/immutable/assets/xterm.DFuMZ0ql.css.gz +0 -0
  35. package/build/client/_app/immutable/chunks/BNJphC1q.js +56 -0
  36. package/build/client/_app/immutable/chunks/BNJphC1q.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/BNJphC1q.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/BTGVxaYV.js +9 -0
  39. package/build/client/_app/immutable/chunks/BTGVxaYV.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/BTGVxaYV.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/BlxrFPDK.js +1 -0
  42. package/build/client/_app/immutable/chunks/BlxrFPDK.js.br +0 -0
  43. package/build/client/_app/immutable/chunks/BlxrFPDK.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/Bvk7mfPM.js +1 -0
  45. package/build/client/_app/immutable/chunks/Bvk7mfPM.js.br +0 -0
  46. package/build/client/_app/immutable/chunks/Bvk7mfPM.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/CAokzuPQ.js +1 -0
  48. package/build/client/_app/immutable/chunks/CAokzuPQ.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/CAokzuPQ.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/CGLrx-H5.js +1 -0
  51. package/build/client/_app/immutable/chunks/CGLrx-H5.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/CGLrx-H5.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/CgCpWzEA.js +1 -0
  54. package/build/client/_app/immutable/chunks/CgCpWzEA.js.br +0 -0
  55. package/build/client/_app/immutable/chunks/CgCpWzEA.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/Cjwk_cGO.js +6 -0
  57. package/build/client/_app/immutable/chunks/Cjwk_cGO.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/Cjwk_cGO.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/CtQ8EED1.js +11 -0
  60. package/build/client/_app/immutable/chunks/CtQ8EED1.js.br +0 -0
  61. package/build/client/_app/immutable/chunks/CtQ8EED1.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/DERQCisl.js +1 -0
  63. package/build/client/_app/immutable/chunks/DERQCisl.js.br +0 -0
  64. package/build/client/_app/immutable/chunks/DERQCisl.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/DKrg8TQs.js +1 -0
  66. package/build/client/_app/immutable/chunks/DKrg8TQs.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/DKrg8TQs.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/DLu6yJIZ.js +1 -0
  69. package/build/client/_app/immutable/chunks/DLu6yJIZ.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/DLu6yJIZ.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/Dkkpz_4D.js +126 -0
  72. package/build/client/_app/immutable/chunks/Dkkpz_4D.js.br +0 -0
  73. package/build/client/_app/immutable/chunks/Dkkpz_4D.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/DoczjQhA.js +1 -0
  75. package/build/client/_app/immutable/chunks/DoczjQhA.js.br +0 -0
  76. package/build/client/_app/immutable/chunks/DoczjQhA.js.gz +0 -0
  77. package/build/client/_app/immutable/chunks/PPVm8Dsz.js +1 -0
  78. package/build/client/_app/immutable/chunks/PPVm8Dsz.js.br +0 -0
  79. package/build/client/_app/immutable/chunks/PPVm8Dsz.js.gz +0 -0
  80. package/build/client/_app/immutable/chunks/RpcNruLP.js +2 -0
  81. package/build/client/_app/immutable/chunks/RpcNruLP.js.br +0 -0
  82. package/build/client/_app/immutable/chunks/RpcNruLP.js.gz +0 -0
  83. package/build/client/_app/immutable/chunks/a-St0Zwo.js +1 -0
  84. package/build/client/_app/immutable/chunks/a-St0Zwo.js.br +0 -0
  85. package/build/client/_app/immutable/chunks/a-St0Zwo.js.gz +0 -0
  86. package/build/client/_app/immutable/chunks/bo70OQUZ.js +1 -0
  87. package/build/client/_app/immutable/chunks/bo70OQUZ.js.br +0 -0
  88. package/build/client/_app/immutable/chunks/bo70OQUZ.js.gz +0 -0
  89. package/build/client/_app/immutable/entry/app.QvGgdvTI.js +2 -0
  90. package/build/client/_app/immutable/entry/app.QvGgdvTI.js.br +0 -0
  91. package/build/client/_app/immutable/entry/app.QvGgdvTI.js.gz +0 -0
  92. package/build/client/_app/immutable/entry/start.BntDNRMC.js +1 -0
  93. package/build/client/_app/immutable/entry/start.BntDNRMC.js.br +0 -0
  94. package/build/client/_app/immutable/entry/start.BntDNRMC.js.gz +0 -0
  95. package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js +1 -0
  96. package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js.br +0 -0
  97. package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js.gz +0 -0
  98. package/build/client/_app/immutable/nodes/1.MG1QhfrI.js +1 -0
  99. package/build/client/_app/immutable/nodes/1.MG1QhfrI.js.br +0 -0
  100. package/build/client/_app/immutable/nodes/1.MG1QhfrI.js.gz +0 -0
  101. package/build/client/_app/immutable/nodes/2.B4MlOSh6.js +1 -0
  102. package/build/client/_app/immutable/nodes/2.B4MlOSh6.js.br +0 -0
  103. package/build/client/_app/immutable/nodes/2.B4MlOSh6.js.gz +0 -0
  104. package/build/client/_app/immutable/nodes/3.DIwYkjDn.js +3 -0
  105. package/build/client/_app/immutable/nodes/3.DIwYkjDn.js.br +0 -0
  106. package/build/client/_app/immutable/nodes/3.DIwYkjDn.js.gz +0 -0
  107. package/build/client/_app/immutable/nodes/4.D-cIe70D.js +1 -0
  108. package/build/client/_app/immutable/nodes/4.D-cIe70D.js.br +0 -0
  109. package/build/client/_app/immutable/nodes/4.D-cIe70D.js.gz +0 -0
  110. package/build/client/_app/immutable/nodes/5.D7zPRe3L.js +1 -0
  111. package/build/client/_app/immutable/nodes/5.D7zPRe3L.js.br +0 -0
  112. package/build/client/_app/immutable/nodes/5.D7zPRe3L.js.gz +0 -0
  113. package/build/client/_app/immutable/nodes/6.BB7QE48r.js +2 -0
  114. package/build/client/_app/immutable/nodes/6.BB7QE48r.js.br +0 -0
  115. package/build/client/_app/immutable/nodes/6.BB7QE48r.js.gz +0 -0
  116. package/build/client/_app/immutable/nodes/7.D8mqsrZG.js +2 -0
  117. package/build/client/_app/immutable/nodes/7.D8mqsrZG.js.br +0 -0
  118. package/build/client/_app/immutable/nodes/7.D8mqsrZG.js.gz +0 -0
  119. package/build/client/_app/version.json +1 -0
  120. package/build/client/_app/version.json.br +0 -0
  121. package/build/client/_app/version.json.gz +0 -0
  122. package/build/client/app-icon.png +0 -0
  123. package/build/client/apple-touch-icon.png +0 -0
  124. package/build/client/favicon.png +0 -0
  125. package/build/client/favicon.svg +10 -0
  126. package/build/client/favicon.svg.br +0 -0
  127. package/build/client/favicon.svg.gz +0 -0
  128. package/build/client/manifest.webmanifest +1 -0
  129. package/build/client/pwa-192x192.png +0 -0
  130. package/build/client/pwa-512x512.png +0 -0
  131. package/build/client/registerSW.js +1 -0
  132. package/build/client/registerSW.js.br +0 -0
  133. package/build/client/registerSW.js.gz +0 -0
  134. package/build/client/sw.js +222 -0
  135. package/build/client/sw.js.br +0 -0
  136. package/build/client/sw.js.gz +0 -0
  137. package/build/client/workbox-5119daf5.js +3395 -0
  138. package/build/client/workbox-5119daf5.js.br +0 -0
  139. package/build/client/workbox-5119daf5.js.gz +0 -0
  140. package/build/env.js +94 -0
  141. package/build/handler.js +1494 -0
  142. package/build/index.js +345 -0
  143. package/build/pty-holder.cjs +510 -0
  144. package/build/server/chunks/0-q2IUp76Y.js +9 -0
  145. package/build/server/chunks/0-q2IUp76Y.js.map +1 -0
  146. package/build/server/chunks/1-CU50G5wZ.js +9 -0
  147. package/build/server/chunks/1-CU50G5wZ.js.map +1 -0
  148. package/build/server/chunks/2-D01t9s8T.js +9 -0
  149. package/build/server/chunks/2-D01t9s8T.js.map +1 -0
  150. package/build/server/chunks/3-5PUQ04wC.js +9 -0
  151. package/build/server/chunks/3-5PUQ04wC.js.map +1 -0
  152. package/build/server/chunks/4-e7gywnSG.js +9 -0
  153. package/build/server/chunks/4-e7gywnSG.js.map +1 -0
  154. package/build/server/chunks/5-CA1SA6KZ.js +9 -0
  155. package/build/server/chunks/5-CA1SA6KZ.js.map +1 -0
  156. package/build/server/chunks/6-71H221sV.js +9 -0
  157. package/build/server/chunks/6-71H221sV.js.map +1 -0
  158. package/build/server/chunks/7-Bo-vmdyz.js +9 -0
  159. package/build/server/chunks/7-Bo-vmdyz.js.map +1 -0
  160. package/build/server/chunks/_layout.svelte-SFHOxs74.js +132 -0
  161. package/build/server/chunks/_layout.svelte-SFHOxs74.js.map +1 -0
  162. package/build/server/chunks/_page.svelte-B4w-2wD-.js +120 -0
  163. package/build/server/chunks/_page.svelte-B4w-2wD-.js.map +1 -0
  164. package/build/server/chunks/_page.svelte-B_qAXjkh.js +213 -0
  165. package/build/server/chunks/_page.svelte-B_qAXjkh.js.map +1 -0
  166. package/build/server/chunks/_page.svelte-CsF1_TRG.js +50 -0
  167. package/build/server/chunks/_page.svelte-CsF1_TRG.js.map +1 -0
  168. package/build/server/chunks/_page.svelte-DJC6U-P0.js +68 -0
  169. package/build/server/chunks/_page.svelte-DJC6U-P0.js.map +1 -0
  170. package/build/server/chunks/_page.svelte-DQ6HBtsz.js +407 -0
  171. package/build/server/chunks/_page.svelte-DQ6HBtsz.js.map +1 -0
  172. package/build/server/chunks/_page.svelte-LbhhjP21.js +148 -0
  173. package/build/server/chunks/_page.svelte-LbhhjP21.js.map +1 -0
  174. package/build/server/chunks/_server.ts-BL2FGb5Z.js +387 -0
  175. package/build/server/chunks/_server.ts-BL2FGb5Z.js.map +1 -0
  176. package/build/server/chunks/_server.ts-BgdjBZco.js +47 -0
  177. package/build/server/chunks/_server.ts-BgdjBZco.js.map +1 -0
  178. package/build/server/chunks/_server.ts-BihKSdj_.js +59 -0
  179. package/build/server/chunks/_server.ts-BihKSdj_.js.map +1 -0
  180. package/build/server/chunks/_server.ts-BjOJsoy4.js +63 -0
  181. package/build/server/chunks/_server.ts-BjOJsoy4.js.map +1 -0
  182. package/build/server/chunks/_server.ts-C29xzfaw.js +77 -0
  183. package/build/server/chunks/_server.ts-C29xzfaw.js.map +1 -0
  184. package/build/server/chunks/_server.ts-CPa6DgIt.js +71 -0
  185. package/build/server/chunks/_server.ts-CPa6DgIt.js.map +1 -0
  186. package/build/server/chunks/_server.ts-CbDRDIoP.js +36 -0
  187. package/build/server/chunks/_server.ts-CbDRDIoP.js.map +1 -0
  188. package/build/server/chunks/_server.ts-Cl1OEWL4.js +54 -0
  189. package/build/server/chunks/_server.ts-Cl1OEWL4.js.map +1 -0
  190. package/build/server/chunks/_server.ts-ColfDHW8.js +60 -0
  191. package/build/server/chunks/_server.ts-ColfDHW8.js.map +1 -0
  192. package/build/server/chunks/_server.ts-Cv_OrRuL.js +494 -0
  193. package/build/server/chunks/_server.ts-Cv_OrRuL.js.map +1 -0
  194. package/build/server/chunks/_server.ts-D4MNi4cD.js +25 -0
  195. package/build/server/chunks/_server.ts-D4MNi4cD.js.map +1 -0
  196. package/build/server/chunks/_server.ts-DRVbgm6k.js +125 -0
  197. package/build/server/chunks/_server.ts-DRVbgm6k.js.map +1 -0
  198. package/build/server/chunks/_server.ts-DfajWaqh.js +39 -0
  199. package/build/server/chunks/_server.ts-DfajWaqh.js.map +1 -0
  200. package/build/server/chunks/_server.ts-y9-WYDMa.js +35 -0
  201. package/build/server/chunks/_server.ts-y9-WYDMa.js.map +1 -0
  202. package/build/server/chunks/auth-CEgFis71.js +32 -0
  203. package/build/server/chunks/auth-CEgFis71.js.map +1 -0
  204. package/build/server/chunks/client-CxCatAKr.js +255 -0
  205. package/build/server/chunks/client-CxCatAKr.js.map +1 -0
  206. package/build/server/chunks/error.svelte-BqdwMWdK.js +26 -0
  207. package/build/server/chunks/error.svelte-BqdwMWdK.js.map +1 -0
  208. package/build/server/chunks/exports-CJ0Q5XmL.js +4081 -0
  209. package/build/server/chunks/exports-CJ0Q5XmL.js.map +1 -0
  210. package/build/server/chunks/index2-DAxIoAO-.js +36 -0
  211. package/build/server/chunks/index2-DAxIoAO-.js.map +1 -0
  212. package/build/server/chunks/jsonl-parser-dmZU_Hyu.js +137 -0
  213. package/build/server/chunks/jsonl-parser-dmZU_Hyu.js.map +1 -0
  214. package/build/server/chunks/library-apns-BHxLmuIx.js +104 -0
  215. package/build/server/chunks/library-apns-BHxLmuIx.js.map +1 -0
  216. package/build/server/chunks/markdown-Bxrl3cCF.js +1241 -0
  217. package/build/server/chunks/markdown-Bxrl3cCF.js.map +1 -0
  218. package/build/server/chunks/pending-requests-D8UiTw7L.js +44 -0
  219. package/build/server/chunks/pending-requests-D8UiTw7L.js.map +1 -0
  220. package/build/server/chunks/pty-manager-C0FhBiVq.js +1697 -0
  221. package/build/server/chunks/pty-manager-C0FhBiVq.js.map +1 -0
  222. package/build/server/chunks/shared-server-BDY8jh20.js +200 -0
  223. package/build/server/chunks/shared-server-BDY8jh20.js.map +1 -0
  224. package/build/server/chunks/stores-D0HorpgL.js +36 -0
  225. package/build/server/chunks/stores-D0HorpgL.js.map +1 -0
  226. package/build/server/index.js +6466 -0
  227. package/build/server/index.js.map +1 -0
  228. package/build/server/manifest.js +184 -0
  229. package/build/server/manifest.js.map +1 -0
  230. package/build/shims.js +32 -0
  231. package/package.json +94 -0
  232. package/scripts/clipboard-shims/wl-paste +48 -0
  233. package/scripts/clipboard-shims/xclip +31 -0
  234. package/scripts/install.sh +477 -0
  235. package/scripts/setup-node-pty.sh +63 -0
  236. package/scripts/setup.cjs +571 -0
  237. package/scripts/test-runner.ts +243 -0
  238. package/scripts/vercel-env-commands.sh +60 -0
  239. package/server.ts +139 -0
  240. package/src/app.css +1835 -0
  241. package/src/app.d.ts +31 -0
  242. package/src/app.html +24 -0
  243. package/src/generated/types/APN.ts +305 -0
  244. package/src/generated/types/CLI.ts +52 -0
  245. package/src/generated/types/JWT.ts +92 -0
  246. package/src/generated/types/Terminal.ts +2736 -0
  247. package/src/generated/types/index.ts +6 -0
  248. package/src/lib/assets/icons/alert-triangle.svg +5 -0
  249. package/src/lib/assets/icons/bell.svg +4 -0
  250. package/src/lib/assets/icons/check-circle.svg +4 -0
  251. package/src/lib/assets/icons/file.svg +4 -0
  252. package/src/lib/assets/icons/folder.svg +3 -0
  253. package/src/lib/assets/icons/play.svg +3 -0
  254. package/src/lib/assets/icons/refresh.svg +4 -0
  255. package/src/lib/assets/icons/settings.svg +4 -0
  256. package/src/lib/assets/icons/terminal.svg +1 -0
  257. package/src/lib/assets/icons/tool.svg +3 -0
  258. package/src/lib/assets/icons/x-circle.svg +5 -0
  259. package/src/lib/modules/client/common/Card.svelte +26 -0
  260. package/src/lib/modules/client/common/EmptyState.svelte +36 -0
  261. package/src/lib/modules/client/common/Icon.svelte +61 -0
  262. package/src/lib/modules/client/common/StatusBadge.svelte +38 -0
  263. package/src/lib/modules/client/common/cache.ts +31 -0
  264. package/src/lib/modules/client/common/config-guard.ts +18 -0
  265. package/src/lib/modules/client/common/index.ts +12 -0
  266. package/src/lib/modules/client/common/markdown.ts +23 -0
  267. package/src/lib/modules/client/common/native-bridge.ts +50 -0
  268. package/src/lib/modules/client/common/time.ts +22 -0
  269. package/src/lib/modules/client/common/tool-title.ts +28 -0
  270. package/src/lib/modules/client/terminal/ChatView.svelte +400 -0
  271. package/src/lib/modules/client/terminal/CommandPalette.svelte +60 -0
  272. package/src/lib/modules/client/terminal/ConnectionStatus.svelte +99 -0
  273. package/src/lib/modules/client/terminal/LaunchSheet.svelte +294 -0
  274. package/src/lib/modules/client/terminal/QuickKeys.svelte +71 -0
  275. package/src/lib/modules/client/terminal/ShortcutsHelp.svelte +79 -0
  276. package/src/lib/modules/client/terminal/keyboard-shortcuts.ts +70 -0
  277. package/src/lib/modules/client/terminal/xterm-wrapper.ts +243 -0
  278. package/src/lib/modules/server/apn/library-apns.ts +137 -0
  279. package/src/lib/modules/server/apn/notification-history.ts +35 -0
  280. package/src/lib/modules/server/apn/notification-sessions.ts +117 -0
  281. package/src/lib/modules/server/apn/pending-requests.ts +65 -0
  282. package/src/lib/modules/server/apn/types.ts +51 -0
  283. package/src/lib/modules/server/auth.ts +34 -0
  284. package/src/lib/modules/server/cli/index.ts +79 -0
  285. package/src/lib/modules/server/cli/runner.ts +162 -0
  286. package/src/lib/modules/server/fcm/fcm-service.ts +72 -0
  287. package/src/lib/modules/server/sessions/jsonl-parser.ts +197 -0
  288. package/src/lib/modules/server/sessions/jsonl-reader.ts +301 -0
  289. package/src/lib/modules/server/sessions/opencode-reader.ts +264 -0
  290. package/src/lib/modules/server/sessions/types.ts +53 -0
  291. package/src/lib/modules/server/terminal/holder-client.ts +273 -0
  292. package/src/lib/modules/server/terminal/opencode-watcher.ts +661 -0
  293. package/src/lib/modules/server/terminal/pty-holder.cjs +510 -0
  294. package/src/lib/modules/server/terminal/pty-manager.ts +1012 -0
  295. package/src/lib/modules/server/terminal/session-watcher.ts +320 -0
  296. package/src/lib/modules/server/terminal/terminal-store.ts +198 -0
  297. package/src/lib/modules/server/ws/events-handler.ts +73 -0
  298. package/src/lib/modules/server/ws/keepalive.ts +108 -0
  299. package/src/lib/modules/server/ws/server.ts +93 -0
  300. package/src/lib/modules/server/ws/session-handler.ts +462 -0
  301. package/src/lib/modules/server/ws/terminal-handler.ts +197 -0
  302. package/src/lib/modules/server/ws/ticket-store.ts +58 -0
  303. package/src/lib/theme.css +529 -0
  304. package/src/lib/types/config.ts +6 -0
  305. package/src/routes/+layout.svelte +218 -0
  306. package/src/routes/+page.svelte +261 -0
  307. package/src/routes/api/debug/+server.ts +33 -0
  308. package/src/routes/api/device-token/+server.ts +85 -0
  309. package/src/routes/api/health/+server.ts +100 -0
  310. package/src/routes/api/notify/+server.ts +418 -0
  311. package/src/routes/api/qr-config/+server.ts +45 -0
  312. package/src/routes/api/response/+server.ts +73 -0
  313. package/src/routes/api/sessions/+server.ts +120 -0
  314. package/src/routes/api/terminals/+server.ts +141 -0
  315. package/src/routes/api/terminals/[id]/+server.ts +75 -0
  316. package/src/routes/api/terminals/[id]/paste-image/+server.ts +61 -0
  317. package/src/routes/api/terminals/[id]/resize/+server.ts +60 -0
  318. package/src/routes/api/webhook/+server.ts +42 -0
  319. package/src/routes/api/ws-status/+server.ts +23 -0
  320. package/src/routes/api/ws-ticket/+server.ts +86 -0
  321. package/src/routes/config/+page.svelte +600 -0
  322. package/src/routes/project/+page.svelte +274 -0
  323. package/src/routes/session/[id]/+page.svelte +434 -0
  324. package/src/routes/terminals/+page.svelte +618 -0
  325. package/src/routes/terminals/[id]/+page.svelte +968 -0
  326. package/svelte.config.js +18 -0
  327. package/tsconfig.json +14 -0
package/build/index.js ADDED
@@ -0,0 +1,345 @@
1
+ import http from 'node:http';
2
+ import process from 'node:process';
3
+ import { handler } from './handler.js';
4
+ import { env, timeout_env } from './env.js';
5
+ import { setImmediate } from 'node:timers';
6
+ import * as qs from 'node:querystring';
7
+
8
+ /**
9
+ * @param {string|RegExp} input The route pattern
10
+ * @param {boolean} [loose] Allow open-ended matching. Ignored with `RegExp` input.
11
+ */
12
+ function parse$1(input, loose) {
13
+ if (input instanceof RegExp) return { keys:false, pattern:input };
14
+ var c, o, tmp, ext, keys=[], pattern='', arr = input.split('/');
15
+ arr[0] || arr.shift();
16
+
17
+ while (tmp = arr.shift()) {
18
+ c = tmp[0];
19
+ if (c === '*') {
20
+ keys.push(c);
21
+ pattern += tmp[1] === '?' ? '(?:/(.*))?' : '/(.*)';
22
+ } else if (c === ':') {
23
+ o = tmp.indexOf('?', 1);
24
+ ext = tmp.indexOf('.', 1);
25
+ keys.push( tmp.substring(1, !!~o ? o : !!~ext ? ext : tmp.length) );
26
+ pattern += !!~o && !~ext ? '(?:/([^/]+?))?' : '/([^/]+?)';
27
+ if (!!~ext) pattern += (!!~o ? '?' : '') + '\\' + tmp.substring(ext);
28
+ } else {
29
+ pattern += '/' + tmp;
30
+ }
31
+ }
32
+
33
+ return {
34
+ keys: keys,
35
+ pattern: new RegExp('^' + pattern + (loose ? '(?=$|\/)' : '\/?$'), 'i')
36
+ };
37
+ }
38
+
39
+ const MAP = {
40
+ "": 0,
41
+ GET: 1,
42
+ HEAD: 2,
43
+ PATCH: 3,
44
+ OPTIONS: 4,
45
+ CONNECT: 5,
46
+ DELETE: 6,
47
+ TRACE: 7,
48
+ POST: 8,
49
+ PUT: 9,
50
+ };
51
+
52
+ class Trouter {
53
+ constructor() {
54
+ this.routes = [];
55
+
56
+ this.all = this.add.bind(this, '');
57
+ this.get = this.add.bind(this, 'GET');
58
+ this.head = this.add.bind(this, 'HEAD');
59
+ this.patch = this.add.bind(this, 'PATCH');
60
+ this.options = this.add.bind(this, 'OPTIONS');
61
+ this.connect = this.add.bind(this, 'CONNECT');
62
+ this.delete = this.add.bind(this, 'DELETE');
63
+ this.trace = this.add.bind(this, 'TRACE');
64
+ this.post = this.add.bind(this, 'POST');
65
+ this.put = this.add.bind(this, 'PUT');
66
+ }
67
+
68
+ use(route, ...fns) {
69
+ let handlers = [].concat.apply([], fns);
70
+ let { keys, pattern } = parse$1(route, true);
71
+ this.routes.push({ keys, pattern, method: '', handlers, midx: MAP[''] });
72
+ return this;
73
+ }
74
+
75
+ add(method, route, ...fns) {
76
+ let { keys, pattern } = parse$1(route);
77
+ let handlers = [].concat.apply([], fns);
78
+ this.routes.push({ keys, pattern, method, handlers, midx: MAP[method] });
79
+ return this;
80
+ }
81
+
82
+ find(method, url) {
83
+ let midx = MAP[method];
84
+ let isHEAD = (midx === 2);
85
+ let i=0, j=0, k, tmp, arr=this.routes;
86
+ let matches=[], params={}, handlers=[];
87
+ for (; i < arr.length; i++) {
88
+ tmp = arr[i];
89
+ if (tmp.midx === midx || tmp.midx === 0 || (isHEAD && tmp.midx===1) ) {
90
+ if (tmp.keys === false) {
91
+ matches = tmp.pattern.exec(url);
92
+ if (matches === null) continue;
93
+ if (matches.groups !== void 0) for (k in matches.groups) params[k]=matches.groups[k];
94
+ tmp.handlers.length > 1 ? (handlers=handlers.concat(tmp.handlers)) : handlers.push(tmp.handlers[0]);
95
+ } else if (tmp.keys.length > 0) {
96
+ matches = tmp.pattern.exec(url);
97
+ if (matches === null) continue;
98
+ for (j=0; j < tmp.keys.length;) params[tmp.keys[j]]=matches[++j];
99
+ tmp.handlers.length > 1 ? (handlers=handlers.concat(tmp.handlers)) : handlers.push(tmp.handlers[0]);
100
+ } else if (tmp.pattern.test(url)) {
101
+ tmp.handlers.length > 1 ? (handlers=handlers.concat(tmp.handlers)) : handlers.push(tmp.handlers[0]);
102
+ }
103
+ } // else not a match
104
+ }
105
+
106
+ return { params, handlers };
107
+ }
108
+ }
109
+
110
+ /**
111
+ * @typedef ParsedURL
112
+ * @type {import('.').ParsedURL}
113
+ */
114
+
115
+ /**
116
+ * @typedef Request
117
+ * @property {string} url
118
+ * @property {ParsedURL} _parsedUrl
119
+ */
120
+
121
+ /**
122
+ * @param {Request} req
123
+ * @returns {ParsedURL|void}
124
+ */
125
+ function parse(req) {
126
+ let raw = req.url;
127
+ if (raw == null) return;
128
+
129
+ let prev = req._parsedUrl;
130
+ if (prev && prev.raw === raw) return prev;
131
+
132
+ let pathname=raw, search='', query;
133
+
134
+ if (raw.length > 1) {
135
+ let idx = raw.indexOf('?', 1);
136
+
137
+ if (idx !== -1) {
138
+ search = raw.substring(idx);
139
+ pathname = raw.substring(0, idx);
140
+ if (search.length > 1) {
141
+ query = qs.parse(search.substring(1));
142
+ }
143
+ }
144
+ }
145
+
146
+ return req._parsedUrl = { pathname, search, query, raw };
147
+ }
148
+
149
+ function onError(err, req, res) {
150
+ let code = typeof err.status === 'number' && err.status;
151
+ code = res.statusCode = (code && code >= 100 ? code : 500);
152
+ if (typeof err === 'string' || Buffer.isBuffer(err)) res.end(err);
153
+ else res.end(err.message || http.STATUS_CODES[code]);
154
+ }
155
+
156
+ const mount = fn => fn instanceof Polka ? fn.attach : fn;
157
+
158
+ class Polka extends Trouter {
159
+ constructor(opts={}) {
160
+ super();
161
+ this.parse = parse;
162
+ this.server = opts.server;
163
+ this.handler = this.handler.bind(this);
164
+ this.onError = opts.onError || onError; // catch-all handler
165
+ this.onNoMatch = opts.onNoMatch || this.onError.bind(null, { status: 404 });
166
+ this.attach = (req, res) => setImmediate(this.handler, req, res);
167
+ }
168
+
169
+ use(base, ...fns) {
170
+ if (base === '/') {
171
+ super.use(base, fns.map(mount));
172
+ } else if (typeof base === 'function' || base instanceof Polka) {
173
+ super.use('/', [base, ...fns].map(mount));
174
+ } else {
175
+ super.use(base,
176
+ (req, _, next) => {
177
+ if (typeof base === 'string') {
178
+ let len = base.length;
179
+ base.startsWith('/') || len++;
180
+ req.url = req.url.substring(len) || '/';
181
+ req.path = req.path.substring(len) || '/';
182
+ } else {
183
+ req.url = req.url.replace(base, '') || '/';
184
+ req.path = req.path.replace(base, '') || '/';
185
+ }
186
+ if (req.url.charAt(0) !== '/') {
187
+ req.url = '/' + req.url;
188
+ }
189
+ next();
190
+ },
191
+ fns.map(mount),
192
+ (req, _, next) => {
193
+ req.path = req._parsedUrl.pathname;
194
+ req.url = req.path + req._parsedUrl.search;
195
+ next();
196
+ }
197
+ );
198
+ }
199
+ return this; // chainable
200
+ }
201
+
202
+ listen() {
203
+ (this.server = this.server || http.createServer()).on('request', this.attach);
204
+ this.server.listen.apply(this.server, arguments);
205
+ return this;
206
+ }
207
+
208
+ handler(req, res, next) {
209
+ let info = this.parse(req), path = info.pathname;
210
+ let obj = this.find(req.method, req.path=path);
211
+
212
+ req.url = path + info.search;
213
+ req.originalUrl = req.originalUrl || req.url;
214
+ req.query = info.query || {};
215
+ req.search = info.search;
216
+ req.params = obj.params;
217
+
218
+ if (path.length > 1 && path.indexOf('%', 1) !== -1) {
219
+ for (let k in req.params) {
220
+ try { req.params[k] = decodeURIComponent(req.params[k]); }
221
+ catch (e) { /* malform uri segment */ }
222
+ }
223
+ }
224
+
225
+ let i=0, arr=obj.handlers.concat(this.onNoMatch), len=arr.length;
226
+ let loop = async () => res.finished || (i < len) && arr[i++](req, res, next);
227
+ (next = next || (err => err ? this.onError(err, req, res, next) : loop().catch(next)))(); // init
228
+ }
229
+ }
230
+
231
+ function polka (opts) {
232
+ return new Polka(opts);
233
+ }
234
+
235
+ const path = env('SOCKET_PATH', false);
236
+ const host = env('HOST', '0.0.0.0');
237
+ const port = env('PORT', !path && '3000');
238
+
239
+ const shutdown_timeout = parseInt(env('SHUTDOWN_TIMEOUT', '30'));
240
+ const idle_timeout = parseInt(env('IDLE_TIMEOUT', '0'));
241
+ const listen_pid = parseInt(env('LISTEN_PID', '0'));
242
+ const listen_fds = parseInt(env('LISTEN_FDS', '0'));
243
+ // https://www.freedesktop.org/software/systemd/man/latest/sd_listen_fds.html
244
+ const SD_LISTEN_FDS_START = 3;
245
+
246
+ if (listen_pid !== 0 && listen_pid !== process.pid) {
247
+ throw new Error(`received LISTEN_PID ${listen_pid} but current process id is ${process.pid}`);
248
+ }
249
+ if (listen_fds > 1) {
250
+ throw new Error(
251
+ `only one socket is allowed for socket activation, but LISTEN_FDS was set to ${listen_fds}`
252
+ );
253
+ }
254
+
255
+ const socket_activation = listen_pid === process.pid && listen_fds === 1;
256
+
257
+ let requests = 0;
258
+ /** @type {NodeJS.Timeout | void} */
259
+ let shutdown_timeout_id;
260
+ /** @type {NodeJS.Timeout | void} */
261
+ let idle_timeout_id;
262
+
263
+ // Initialize the HTTP server here so that we can set properties before starting to listen.
264
+ // Otherwise, polka delays creating the server until listen() is called. Settings these
265
+ // properties after the server has started listening could lead to race conditions.
266
+ const httpServer = http.createServer();
267
+
268
+ const keep_alive_timeout = timeout_env('KEEP_ALIVE_TIMEOUT');
269
+ if (keep_alive_timeout !== undefined) {
270
+ // Convert the keep-alive timeout from seconds to milliseconds (the unit Node.js expects).
271
+ httpServer.keepAliveTimeout = keep_alive_timeout * 1000;
272
+ }
273
+
274
+ const headers_timeout = timeout_env('HEADERS_TIMEOUT');
275
+ if (headers_timeout !== undefined) {
276
+ // Convert the headers timeout from seconds to milliseconds (the unit Node.js expects).
277
+ httpServer.headersTimeout = headers_timeout * 1000;
278
+ }
279
+
280
+ const server = polka({ server: httpServer }).use(handler);
281
+
282
+ if (socket_activation) {
283
+ server.listen({ fd: SD_LISTEN_FDS_START }, () => {
284
+ console.log(`Listening on file descriptor ${SD_LISTEN_FDS_START}`);
285
+ });
286
+ } else {
287
+ server.listen({ path, host, port }, () => {
288
+ console.log(`Listening on ${path || `http://${host}:${port}`}`);
289
+ });
290
+ }
291
+
292
+ /** @param {'SIGINT' | 'SIGTERM' | 'IDLE'} reason */
293
+ function graceful_shutdown(reason) {
294
+ if (shutdown_timeout_id) return;
295
+
296
+ // If a connection was opened with a keep-alive header close() will wait for the connection to
297
+ // time out rather than close it even if it is not handling any requests, so call this first
298
+ httpServer.closeIdleConnections();
299
+
300
+ httpServer.close((error) => {
301
+ // occurs if the server is already closed
302
+ if (error) return;
303
+
304
+ if (shutdown_timeout_id) {
305
+ clearTimeout(shutdown_timeout_id);
306
+ }
307
+ if (idle_timeout_id) {
308
+ clearTimeout(idle_timeout_id);
309
+ }
310
+
311
+ // @ts-expect-error custom events cannot be typed
312
+ process.emit('sveltekit:shutdown', reason);
313
+ });
314
+
315
+ shutdown_timeout_id = setTimeout(() => httpServer.closeAllConnections(), shutdown_timeout * 1000);
316
+ }
317
+
318
+ httpServer.on(
319
+ 'request',
320
+ /** @param {import('node:http').IncomingMessage} req */
321
+ (req) => {
322
+ requests++;
323
+
324
+ if (socket_activation && idle_timeout_id) {
325
+ idle_timeout_id = clearTimeout(idle_timeout_id);
326
+ }
327
+
328
+ req.on('close', () => {
329
+ requests--;
330
+
331
+ if (shutdown_timeout_id) {
332
+ // close connections as soon as they become idle, so they don't accept new requests
333
+ httpServer.closeIdleConnections();
334
+ }
335
+ if (requests === 0 && socket_activation && idle_timeout) {
336
+ idle_timeout_id = setTimeout(() => graceful_shutdown('IDLE'), idle_timeout * 1000);
337
+ }
338
+ });
339
+ }
340
+ );
341
+
342
+ process.on('SIGTERM', graceful_shutdown);
343
+ process.on('SIGINT', graceful_shutdown);
344
+
345
+ export { host, path, port, server };