@juspay/shooter 1.24.2 → 1.25.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 (163) hide show
  1. package/.claude/hooks/notifier.cjs +32 -4
  2. package/build/client/_app/immutable/assets/{4.D4EDSN4H.css → 4.ChO_hlLs.css} +1 -1
  3. package/build/client/_app/immutable/assets/4.ChO_hlLs.css.br +0 -0
  4. package/build/client/_app/immutable/assets/4.ChO_hlLs.css.gz +0 -0
  5. package/build/client/_app/immutable/chunks/{BBuzUXZ9.js → BstJSK2K.js} +1 -1
  6. package/build/client/_app/immutable/chunks/BstJSK2K.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/BstJSK2K.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/{Dqmsaccg.js → DINqYbXU.js} +1 -1
  9. package/build/client/_app/immutable/chunks/DINqYbXU.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/DINqYbXU.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/ssAhjWfF.js +3 -0
  12. package/build/client/_app/immutable/chunks/ssAhjWfF.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/ssAhjWfF.js.gz +0 -0
  14. package/build/client/_app/immutable/entry/{app.Bu4nq_bk.js → app.BPK9s2o5.js} +2 -2
  15. package/build/client/_app/immutable/entry/app.BPK9s2o5.js.br +0 -0
  16. package/build/client/_app/immutable/entry/app.BPK9s2o5.js.gz +0 -0
  17. package/build/client/_app/immutable/entry/start.DFPHuGE3.js +1 -0
  18. package/build/client/_app/immutable/entry/start.DFPHuGE3.js.br +2 -0
  19. package/build/client/_app/immutable/entry/start.DFPHuGE3.js.gz +0 -0
  20. package/build/client/_app/immutable/nodes/{0.CnSSjKHX.js → 0.BEbzRcwm.js} +1 -1
  21. package/build/client/_app/immutable/nodes/0.BEbzRcwm.js.br +0 -0
  22. package/build/client/_app/immutable/nodes/0.BEbzRcwm.js.gz +0 -0
  23. package/build/client/_app/immutable/nodes/{1.D_5wZINa.js → 1.C_V0SOr9.js} +1 -1
  24. package/build/client/_app/immutable/nodes/1.C_V0SOr9.js.br +0 -0
  25. package/build/client/_app/immutable/nodes/1.C_V0SOr9.js.gz +0 -0
  26. package/build/client/_app/immutable/nodes/{10.C_B2eMms.js → 10.6V-37_Rl.js} +1 -1
  27. package/build/client/_app/immutable/nodes/10.6V-37_Rl.js.br +0 -0
  28. package/build/client/_app/immutable/nodes/10.6V-37_Rl.js.gz +0 -0
  29. package/build/client/_app/immutable/nodes/{11.DUKnn5ja.js → 11.Lzf-KC6L.js} +1 -1
  30. package/build/client/_app/immutable/nodes/11.Lzf-KC6L.js.br +0 -0
  31. package/build/client/_app/immutable/nodes/11.Lzf-KC6L.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/{2.C37CZKYv.js → 2.Cl2dMP2L.js} +1 -1
  33. package/build/client/_app/immutable/nodes/2.Cl2dMP2L.js.br +0 -0
  34. package/build/client/_app/immutable/nodes/2.Cl2dMP2L.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/{3.C48G514u.js → 3.CuX2eSna.js} +1 -1
  36. package/build/client/_app/immutable/nodes/3.CuX2eSna.js.br +0 -0
  37. package/build/client/_app/immutable/nodes/3.CuX2eSna.js.gz +0 -0
  38. package/build/client/_app/immutable/nodes/4.2DvqoOaB.js +17 -0
  39. package/build/client/_app/immutable/nodes/4.2DvqoOaB.js.br +0 -0
  40. package/build/client/_app/immutable/nodes/4.2DvqoOaB.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/{6.DGlutNk6.js → 6.C7e6zQyP.js} +1 -1
  42. package/build/client/_app/immutable/nodes/6.C7e6zQyP.js.br +0 -0
  43. package/build/client/_app/immutable/nodes/6.C7e6zQyP.js.gz +0 -0
  44. package/build/client/_app/immutable/nodes/{7.BXAYsEHF.js → 7.1ygvNTnO.js} +1 -1
  45. package/build/client/_app/immutable/nodes/7.1ygvNTnO.js.br +0 -0
  46. package/build/client/_app/immutable/nodes/7.1ygvNTnO.js.gz +0 -0
  47. package/build/client/_app/immutable/nodes/{8.D-SxCq24.js → 8.CBVmgOk0.js} +1 -1
  48. package/build/client/_app/immutable/nodes/8.CBVmgOk0.js.br +0 -0
  49. package/build/client/_app/immutable/nodes/8.CBVmgOk0.js.gz +0 -0
  50. package/build/client/_app/immutable/nodes/{9.Bek2YR4U.js → 9.B-_ZFZhj.js} +1 -1
  51. package/build/client/_app/immutable/nodes/9.B-_ZFZhj.js.br +0 -0
  52. package/build/client/_app/immutable/nodes/9.B-_ZFZhj.js.gz +0 -0
  53. package/build/client/_app/version.json +1 -1
  54. package/build/client/_app/version.json.br +0 -0
  55. package/build/client/_app/version.json.gz +0 -0
  56. package/build/server/chunks/{0-ByOnI9Md.js → 0-BHU07xt9.js} +2 -2
  57. package/build/server/chunks/{0-ByOnI9Md.js.map → 0-BHU07xt9.js.map} +1 -1
  58. package/build/server/chunks/{1-DcJwehLu.js → 1-OVOd8GUH.js} +2 -2
  59. package/build/server/chunks/{1-DcJwehLu.js.map → 1-OVOd8GUH.js.map} +1 -1
  60. package/build/server/chunks/{10-B5bdfDfK.js → 10-CRHtvb_u.js} +2 -2
  61. package/build/server/chunks/{10-B5bdfDfK.js.map → 10-CRHtvb_u.js.map} +1 -1
  62. package/build/server/chunks/{11-DOJ9j7KC.js → 11-CdSex9j1.js} +2 -2
  63. package/build/server/chunks/{11-DOJ9j7KC.js.map → 11-CdSex9j1.js.map} +1 -1
  64. package/build/server/chunks/{2-BY0LGSMl.js → 2-bb78aIZ6.js} +2 -2
  65. package/build/server/chunks/{2-BY0LGSMl.js.map → 2-bb78aIZ6.js.map} +1 -1
  66. package/build/server/chunks/{3-DEa6RtDT.js → 3-CsTC6Lrn.js} +2 -2
  67. package/build/server/chunks/{3-DEa6RtDT.js.map → 3-CsTC6Lrn.js.map} +1 -1
  68. package/build/server/chunks/{4-w2W_T8ax.js → 4-DTTu8_Gr.js} +4 -4
  69. package/build/server/chunks/{4-w2W_T8ax.js.map → 4-DTTu8_Gr.js.map} +1 -1
  70. package/build/server/chunks/{6-DoTu6ygH.js → 6-BUgQGB_4.js} +2 -2
  71. package/build/server/chunks/{6-DoTu6ygH.js.map → 6-BUgQGB_4.js.map} +1 -1
  72. package/build/server/chunks/{7-CYQ9V6d4.js → 7-CsQZnkcG.js} +2 -2
  73. package/build/server/chunks/{7-CYQ9V6d4.js.map → 7-CsQZnkcG.js.map} +1 -1
  74. package/build/server/chunks/{8-DMwmCD5X.js → 8-DcIuPdyW.js} +2 -2
  75. package/build/server/chunks/{8-DMwmCD5X.js.map → 8-DcIuPdyW.js.map} +1 -1
  76. package/build/server/chunks/{9-CNmPa2Jo.js → 9-D8bkM1uj.js} +2 -2
  77. package/build/server/chunks/{9-CNmPa2Jo.js.map → 9-D8bkM1uj.js.map} +1 -1
  78. package/build/server/chunks/{_page.svelte-DDE2nChH.js → _page.svelte-BBbaKwNz.js} +101 -27
  79. package/build/server/chunks/_page.svelte-BBbaKwNz.js.map +1 -0
  80. package/build/server/chunks/{_server.ts-DfscXcFe.js → _server.ts-B7BLxK5u.js} +233 -186
  81. package/build/server/chunks/_server.ts-B7BLxK5u.js.map +1 -0
  82. package/build/server/chunks/{_server.ts-EJVmhLtg.js → _server.ts-BSS8cO80.js} +15 -3
  83. package/build/server/chunks/_server.ts-BSS8cO80.js.map +1 -0
  84. package/build/server/chunks/_server.ts-DNTxPoxO.js +115 -0
  85. package/build/server/chunks/_server.ts-DNTxPoxO.js.map +1 -0
  86. package/build/server/chunks/{_server.ts-D9_hkPQ6.js → _server.ts-DUb7fbuW.js} +17 -3
  87. package/build/server/chunks/_server.ts-DUb7fbuW.js.map +1 -0
  88. package/build/server/chunks/{_server.ts-v7TaT83B.js → _server.ts-FdKi8RwL.js} +7 -3
  89. package/build/server/chunks/_server.ts-FdKi8RwL.js.map +1 -0
  90. package/build/server/chunks/device-format-DTgEz4Yr.js +29 -0
  91. package/build/server/chunks/device-format-DTgEz4Yr.js.map +1 -0
  92. package/build/server/chunks/device-token-store-Ct7aTeR8.js +259 -0
  93. package/build/server/chunks/device-token-store-Ct7aTeR8.js.map +1 -0
  94. package/build/server/chunks/{library-apns-D8RPINlv.js → library-apns-DMlL1BAg.js} +158 -26
  95. package/build/server/chunks/library-apns-DMlL1BAg.js.map +1 -0
  96. package/build/server/index.js +1 -1
  97. package/build/server/index.js.map +1 -1
  98. package/build/server/manifest.js +17 -17
  99. package/build/server/manifest.js.map +1 -1
  100. package/package.json +2 -2
  101. package/server.ts +15 -1
  102. package/src/app.d.ts +4 -0
  103. package/src/lib/modules/server/apn/apns-classify.ts +103 -0
  104. package/src/lib/modules/server/apn/library-apns.ts +151 -35
  105. package/src/lib/modules/server/apn/notify-fanout.ts +40 -0
  106. package/src/lib/modules/server/fcm/fcm-classify.ts +61 -0
  107. package/src/lib/modules/server/fcm/fcm-service.ts +128 -29
  108. package/src/lib/modules/server/push/device-format.ts +42 -0
  109. package/src/lib/modules/server/push/device-token-store.ts +354 -0
  110. package/src/lib/types/apn.ts +4 -0
  111. package/src/lib/types/device.ts +156 -0
  112. package/src/lib/types/index.ts +1 -0
  113. package/src/routes/api/debug/+server.ts +13 -1
  114. package/src/routes/api/device-token/+server.ts +122 -37
  115. package/src/routes/api/health/+server.ts +16 -2
  116. package/src/routes/api/notify/+server.ts +175 -168
  117. package/src/routes/api/qr-config/+server.ts +9 -2
  118. package/src/routes/config/+page.svelte +182 -44
  119. package/build/client/_app/immutable/assets/4.D4EDSN4H.css.br +0 -0
  120. package/build/client/_app/immutable/assets/4.D4EDSN4H.css.gz +0 -0
  121. package/build/client/_app/immutable/chunks/BBuzUXZ9.js.br +0 -0
  122. package/build/client/_app/immutable/chunks/BBuzUXZ9.js.gz +0 -0
  123. package/build/client/_app/immutable/chunks/BPIV28L3.js +0 -3
  124. package/build/client/_app/immutable/chunks/BPIV28L3.js.br +0 -0
  125. package/build/client/_app/immutable/chunks/BPIV28L3.js.gz +0 -0
  126. package/build/client/_app/immutable/chunks/Dqmsaccg.js.br +0 -0
  127. package/build/client/_app/immutable/chunks/Dqmsaccg.js.gz +0 -0
  128. package/build/client/_app/immutable/entry/app.Bu4nq_bk.js.br +0 -0
  129. package/build/client/_app/immutable/entry/app.Bu4nq_bk.js.gz +0 -0
  130. package/build/client/_app/immutable/entry/start.CbpzR6Gp.js +0 -1
  131. package/build/client/_app/immutable/entry/start.CbpzR6Gp.js.br +0 -2
  132. package/build/client/_app/immutable/entry/start.CbpzR6Gp.js.gz +0 -0
  133. package/build/client/_app/immutable/nodes/0.CnSSjKHX.js.br +0 -0
  134. package/build/client/_app/immutable/nodes/0.CnSSjKHX.js.gz +0 -0
  135. package/build/client/_app/immutable/nodes/1.D_5wZINa.js.br +0 -0
  136. package/build/client/_app/immutable/nodes/1.D_5wZINa.js.gz +0 -0
  137. package/build/client/_app/immutable/nodes/10.C_B2eMms.js.br +0 -0
  138. package/build/client/_app/immutable/nodes/10.C_B2eMms.js.gz +0 -0
  139. package/build/client/_app/immutable/nodes/11.DUKnn5ja.js.br +0 -0
  140. package/build/client/_app/immutable/nodes/11.DUKnn5ja.js.gz +0 -0
  141. package/build/client/_app/immutable/nodes/2.C37CZKYv.js.br +0 -0
  142. package/build/client/_app/immutable/nodes/2.C37CZKYv.js.gz +0 -0
  143. package/build/client/_app/immutable/nodes/3.C48G514u.js.br +0 -0
  144. package/build/client/_app/immutable/nodes/3.C48G514u.js.gz +0 -0
  145. package/build/client/_app/immutable/nodes/4.C9fv_m2R.js +0 -16
  146. package/build/client/_app/immutable/nodes/4.C9fv_m2R.js.br +0 -0
  147. package/build/client/_app/immutable/nodes/4.C9fv_m2R.js.gz +0 -0
  148. package/build/client/_app/immutable/nodes/6.DGlutNk6.js.br +0 -0
  149. package/build/client/_app/immutable/nodes/6.DGlutNk6.js.gz +0 -0
  150. package/build/client/_app/immutable/nodes/7.BXAYsEHF.js.br +0 -0
  151. package/build/client/_app/immutable/nodes/7.BXAYsEHF.js.gz +0 -0
  152. package/build/client/_app/immutable/nodes/8.D-SxCq24.js.br +0 -0
  153. package/build/client/_app/immutable/nodes/8.D-SxCq24.js.gz +0 -0
  154. package/build/client/_app/immutable/nodes/9.Bek2YR4U.js.br +0 -0
  155. package/build/client/_app/immutable/nodes/9.Bek2YR4U.js.gz +0 -0
  156. package/build/server/chunks/_page.svelte-DDE2nChH.js.map +0 -1
  157. package/build/server/chunks/_server.ts-D2RS8TFd.js +0 -72
  158. package/build/server/chunks/_server.ts-D2RS8TFd.js.map +0 -1
  159. package/build/server/chunks/_server.ts-D9_hkPQ6.js.map +0 -1
  160. package/build/server/chunks/_server.ts-DfscXcFe.js.map +0 -1
  161. package/build/server/chunks/_server.ts-EJVmhLtg.js.map +0 -1
  162. package/build/server/chunks/_server.ts-v7TaT83B.js.map +0 -1
  163. package/build/server/chunks/library-apns-D8RPINlv.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"6-DoTu6ygH.js","sources":["../../../.svelte-kit/adapter-node/nodes/6.js"],"sourcesContent":["\n\nexport const index = 6;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/project/_page.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/6.DGlutNk6.js\",\"_app/immutable/chunks/DoGIJDSZ.js\",\"_app/immutable/chunks/kzeZOqU5.js\",\"_app/immutable/chunks/aiM7Bbhi.js\",\"_app/immutable/chunks/BQJR1fvD.js\",\"_app/immutable/chunks/BPIV28L3.js\",\"_app/immutable/chunks/Dqmsaccg.js\",\"_app/immutable/chunks/DzuS5Nbr.js\",\"_app/immutable/chunks/Bn-6X1BO.js\",\"_app/immutable/chunks/etLjvmY8.js\",\"_app/immutable/chunks/xs1Xl3_e.js\",\"_app/immutable/chunks/gQJcRhou.js\",\"_app/immutable/chunks/Dk1NUsIU.js\",\"_app/immutable/chunks/BdtLzPpO.js\",\"_app/immutable/chunks/BLszSzTT.js\",\"_app/immutable/chunks/DFa6kKPT.js\"];\nexport const stylesheets = [\"_app/immutable/assets/ColorPicker.CV4IKef4.css\",\"_app/immutable/assets/6.DzV0p3l-.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAA0C,CAAC,EAAE;AACxG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AAC5kB,MAAC,WAAW,GAAG,CAAC,gDAAgD,CAAC,sCAAsC;AACvG,MAAC,KAAK,GAAG;;;;"}
1
+ {"version":3,"file":"6-BUgQGB_4.js","sources":["../../../.svelte-kit/adapter-node/nodes/6.js"],"sourcesContent":["\n\nexport const index = 6;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/project/_page.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/6.C7e6zQyP.js\",\"_app/immutable/chunks/DoGIJDSZ.js\",\"_app/immutable/chunks/kzeZOqU5.js\",\"_app/immutable/chunks/aiM7Bbhi.js\",\"_app/immutable/chunks/BQJR1fvD.js\",\"_app/immutable/chunks/ssAhjWfF.js\",\"_app/immutable/chunks/DINqYbXU.js\",\"_app/immutable/chunks/DzuS5Nbr.js\",\"_app/immutable/chunks/Bn-6X1BO.js\",\"_app/immutable/chunks/etLjvmY8.js\",\"_app/immutable/chunks/xs1Xl3_e.js\",\"_app/immutable/chunks/gQJcRhou.js\",\"_app/immutable/chunks/Dk1NUsIU.js\",\"_app/immutable/chunks/BdtLzPpO.js\",\"_app/immutable/chunks/BLszSzTT.js\",\"_app/immutable/chunks/DFa6kKPT.js\"];\nexport const stylesheets = [\"_app/immutable/assets/ColorPicker.CV4IKef4.css\",\"_app/immutable/assets/6.DzV0p3l-.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAA0C,CAAC,EAAE;AACxG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AAC5kB,MAAC,WAAW,GAAG,CAAC,gDAAgD,CAAC,sCAAsC;AACvG,MAAC,KAAK,GAAG;;;;"}
@@ -1,9 +1,9 @@
1
1
  const index = 7;
2
2
  let component_cache;
3
3
  const component = async () => component_cache ??= (await import('./_page.svelte-BDoNXDBU.js')).default;
4
- const imports = ["_app/immutable/nodes/7.BXAYsEHF.js","_app/immutable/chunks/DoGIJDSZ.js","_app/immutable/chunks/kzeZOqU5.js","_app/immutable/chunks/BQJR1fvD.js","_app/immutable/chunks/aiM7Bbhi.js","_app/immutable/chunks/Dqmsaccg.js","_app/immutable/chunks/BPIV28L3.js","_app/immutable/chunks/xs1Xl3_e.js","_app/immutable/chunks/Dk1NUsIU.js","_app/immutable/chunks/BdtLzPpO.js","_app/immutable/chunks/oIHVoAuz.js","_app/immutable/chunks/DcXdn821.js"];
4
+ const imports = ["_app/immutable/nodes/7.1ygvNTnO.js","_app/immutable/chunks/DoGIJDSZ.js","_app/immutable/chunks/kzeZOqU5.js","_app/immutable/chunks/BQJR1fvD.js","_app/immutable/chunks/aiM7Bbhi.js","_app/immutable/chunks/DINqYbXU.js","_app/immutable/chunks/ssAhjWfF.js","_app/immutable/chunks/xs1Xl3_e.js","_app/immutable/chunks/Dk1NUsIU.js","_app/immutable/chunks/BdtLzPpO.js","_app/immutable/chunks/oIHVoAuz.js","_app/immutable/chunks/DcXdn821.js"];
5
5
  const stylesheets = ["_app/immutable/assets/ColorPicker.CV4IKef4.css","_app/immutable/assets/ChatView.Bnlg-oAF.css","_app/immutable/assets/7.CEbRAOOf.css"];
6
6
  const fonts = [];
7
7
 
8
8
  export { component, fonts, imports, index, stylesheets };
9
- //# sourceMappingURL=7-CYQ9V6d4.js.map
9
+ //# sourceMappingURL=7-CsQZnkcG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"7-CYQ9V6d4.js","sources":["../../../.svelte-kit/adapter-node/nodes/7.js"],"sourcesContent":["\n\nexport const index = 7;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/session/_id_/_page.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/7.BXAYsEHF.js\",\"_app/immutable/chunks/DoGIJDSZ.js\",\"_app/immutable/chunks/kzeZOqU5.js\",\"_app/immutable/chunks/BQJR1fvD.js\",\"_app/immutable/chunks/aiM7Bbhi.js\",\"_app/immutable/chunks/Dqmsaccg.js\",\"_app/immutable/chunks/BPIV28L3.js\",\"_app/immutable/chunks/xs1Xl3_e.js\",\"_app/immutable/chunks/Dk1NUsIU.js\",\"_app/immutable/chunks/BdtLzPpO.js\",\"_app/immutable/chunks/oIHVoAuz.js\",\"_app/immutable/chunks/DcXdn821.js\"];\nexport const stylesheets = [\"_app/immutable/assets/ColorPicker.CV4IKef4.css\",\"_app/immutable/assets/ChatView.Bnlg-oAF.css\",\"_app/immutable/assets/7.CEbRAOOf.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAA+C,CAAC,EAAE;AAC7G,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AAC5b,MAAC,WAAW,GAAG,CAAC,gDAAgD,CAAC,6CAA6C,CAAC,sCAAsC;AACrJ,MAAC,KAAK,GAAG;;;;"}
1
+ {"version":3,"file":"7-CsQZnkcG.js","sources":["../../../.svelte-kit/adapter-node/nodes/7.js"],"sourcesContent":["\n\nexport const index = 7;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/session/_id_/_page.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/7.1ygvNTnO.js\",\"_app/immutable/chunks/DoGIJDSZ.js\",\"_app/immutable/chunks/kzeZOqU5.js\",\"_app/immutable/chunks/BQJR1fvD.js\",\"_app/immutable/chunks/aiM7Bbhi.js\",\"_app/immutable/chunks/DINqYbXU.js\",\"_app/immutable/chunks/ssAhjWfF.js\",\"_app/immutable/chunks/xs1Xl3_e.js\",\"_app/immutable/chunks/Dk1NUsIU.js\",\"_app/immutable/chunks/BdtLzPpO.js\",\"_app/immutable/chunks/oIHVoAuz.js\",\"_app/immutable/chunks/DcXdn821.js\"];\nexport const stylesheets = [\"_app/immutable/assets/ColorPicker.CV4IKef4.css\",\"_app/immutable/assets/ChatView.Bnlg-oAF.css\",\"_app/immutable/assets/7.CEbRAOOf.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAA+C,CAAC,EAAE;AAC7G,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AAC5b,MAAC,WAAW,GAAG,CAAC,gDAAgD,CAAC,6CAA6C,CAAC,sCAAsC;AACrJ,MAAC,KAAK,GAAG;;;;"}
@@ -1,9 +1,9 @@
1
1
  const index = 8;
2
2
  let component_cache;
3
3
  const component = async () => component_cache ??= (await import('./_page.svelte-CUfOc8Hm.js')).default;
4
- const imports = ["_app/immutable/nodes/8.D-SxCq24.js","_app/immutable/chunks/DoGIJDSZ.js","_app/immutable/chunks/kzeZOqU5.js","_app/immutable/chunks/aiM7Bbhi.js","_app/immutable/chunks/BQJR1fvD.js","_app/immutable/chunks/BPIV28L3.js","_app/immutable/chunks/DFa6kKPT.js"];
4
+ const imports = ["_app/immutable/nodes/8.CBVmgOk0.js","_app/immutable/chunks/DoGIJDSZ.js","_app/immutable/chunks/kzeZOqU5.js","_app/immutable/chunks/aiM7Bbhi.js","_app/immutable/chunks/BQJR1fvD.js","_app/immutable/chunks/ssAhjWfF.js","_app/immutable/chunks/DFa6kKPT.js"];
5
5
  const stylesheets = ["_app/immutable/assets/ColorPicker.CV4IKef4.css","_app/immutable/assets/8.BYgAX7hR.css"];
6
6
  const fonts = [];
7
7
 
8
8
  export { component, fonts, imports, index, stylesheets };
9
- //# sourceMappingURL=8-DMwmCD5X.js.map
9
+ //# sourceMappingURL=8-DcIuPdyW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"8-DMwmCD5X.js","sources":["../../../.svelte-kit/adapter-node/nodes/8.js"],"sourcesContent":["\n\nexport const index = 8;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/sos/_page.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/8.D-SxCq24.js\",\"_app/immutable/chunks/DoGIJDSZ.js\",\"_app/immutable/chunks/kzeZOqU5.js\",\"_app/immutable/chunks/aiM7Bbhi.js\",\"_app/immutable/chunks/BQJR1fvD.js\",\"_app/immutable/chunks/BPIV28L3.js\",\"_app/immutable/chunks/DFa6kKPT.js\"];\nexport const stylesheets = [\"_app/immutable/assets/ColorPicker.CV4IKef4.css\",\"_app/immutable/assets/8.BYgAX7hR.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAAsC,CAAC,EAAE;AACpG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AACxQ,MAAC,WAAW,GAAG,CAAC,gDAAgD,CAAC,sCAAsC;AACvG,MAAC,KAAK,GAAG;;;;"}
1
+ {"version":3,"file":"8-DcIuPdyW.js","sources":["../../../.svelte-kit/adapter-node/nodes/8.js"],"sourcesContent":["\n\nexport const index = 8;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/sos/_page.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/8.CBVmgOk0.js\",\"_app/immutable/chunks/DoGIJDSZ.js\",\"_app/immutable/chunks/kzeZOqU5.js\",\"_app/immutable/chunks/aiM7Bbhi.js\",\"_app/immutable/chunks/BQJR1fvD.js\",\"_app/immutable/chunks/ssAhjWfF.js\",\"_app/immutable/chunks/DFa6kKPT.js\"];\nexport const stylesheets = [\"_app/immutable/assets/ColorPicker.CV4IKef4.css\",\"_app/immutable/assets/8.BYgAX7hR.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAAsC,CAAC,EAAE;AACpG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AACxQ,MAAC,WAAW,GAAG,CAAC,gDAAgD,CAAC,sCAAsC;AACvG,MAAC,KAAK,GAAG;;;;"}
@@ -1,9 +1,9 @@
1
1
  const index = 9;
2
2
  let component_cache;
3
3
  const component = async () => component_cache ??= (await import('./_page.svelte-Cj5OW0HR.js')).default;
4
- const imports = ["_app/immutable/nodes/9.Bek2YR4U.js","_app/immutable/chunks/DoGIJDSZ.js","_app/immutable/chunks/kzeZOqU5.js","_app/immutable/chunks/aiM7Bbhi.js","_app/immutable/chunks/BQJR1fvD.js","_app/immutable/chunks/BBuzUXZ9.js","_app/immutable/chunks/BPIV28L3.js"];
4
+ const imports = ["_app/immutable/nodes/9.B-_ZFZhj.js","_app/immutable/chunks/DoGIJDSZ.js","_app/immutable/chunks/kzeZOqU5.js","_app/immutable/chunks/aiM7Bbhi.js","_app/immutable/chunks/BQJR1fvD.js","_app/immutable/chunks/BstJSK2K.js","_app/immutable/chunks/ssAhjWfF.js"];
5
5
  const stylesheets = ["_app/immutable/assets/ColorPicker.CV4IKef4.css","_app/immutable/assets/9.DV6pZunn.css"];
6
6
  const fonts = [];
7
7
 
8
8
  export { component, fonts, imports, index, stylesheets };
9
- //# sourceMappingURL=9-CNmPa2Jo.js.map
9
+ //# sourceMappingURL=9-D8bkM1uj.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"9-CNmPa2Jo.js","sources":["../../../.svelte-kit/adapter-node/nodes/9.js"],"sourcesContent":["\n\nexport const index = 9;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/sos/_id_/_page.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/9.Bek2YR4U.js\",\"_app/immutable/chunks/DoGIJDSZ.js\",\"_app/immutable/chunks/kzeZOqU5.js\",\"_app/immutable/chunks/aiM7Bbhi.js\",\"_app/immutable/chunks/BQJR1fvD.js\",\"_app/immutable/chunks/BBuzUXZ9.js\",\"_app/immutable/chunks/BPIV28L3.js\"];\nexport const stylesheets = [\"_app/immutable/assets/ColorPicker.CV4IKef4.css\",\"_app/immutable/assets/9.DV6pZunn.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAA2C,CAAC,EAAE;AACzG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AACxQ,MAAC,WAAW,GAAG,CAAC,gDAAgD,CAAC,sCAAsC;AACvG,MAAC,KAAK,GAAG;;;;"}
1
+ {"version":3,"file":"9-D8bkM1uj.js","sources":["../../../.svelte-kit/adapter-node/nodes/9.js"],"sourcesContent":["\n\nexport const index = 9;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/sos/_id_/_page.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/9.B-_ZFZhj.js\",\"_app/immutable/chunks/DoGIJDSZ.js\",\"_app/immutable/chunks/kzeZOqU5.js\",\"_app/immutable/chunks/aiM7Bbhi.js\",\"_app/immutable/chunks/BQJR1fvD.js\",\"_app/immutable/chunks/BstJSK2K.js\",\"_app/immutable/chunks/ssAhjWfF.js\"];\nexport const stylesheets = [\"_app/immutable/assets/ColorPicker.CV4IKef4.css\",\"_app/immutable/assets/9.DV6pZunn.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAA2C,CAAC,EAAE;AACzG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AACxQ,MAAC,WAAW,GAAG,CAAC,gDAAgD,CAAC,sCAAsC;AACvG,MAAC,KAAK,GAAG;;;;"}
@@ -118,7 +118,10 @@ function _page($$renderer, $$props) {
118
118
  const { data } = $$props;
119
119
  let serverUrl = "";
120
120
  let apiKey = "";
121
- let deviceToken = "";
121
+ let registeredDevices = [];
122
+ let loadingDevices = false;
123
+ let loadDevicesError = "";
124
+ let thisDeviceId = "";
122
125
  let result = "";
123
126
  let loading = false;
124
127
  let statusType = "";
@@ -174,7 +177,7 @@ function _page($$renderer, $$props) {
174
177
  const trimmedUrl = serverUrl.trim().replace(/\/+$/, "");
175
178
  localStorage.setItem("shooter_config", JSON.stringify({
176
179
  apiKey: apiKey.trim(),
177
- deviceToken: deviceToken.trim(),
180
+ deviceToken: null,
178
181
  lastUpdated: Date.now(),
179
182
  serverUrl: trimmedUrl || getDefaultServerUrl()
180
183
  }));
@@ -193,6 +196,7 @@ function _page($$renderer, $$props) {
193
196
  result = "Configuration saved but system health check failed";
194
197
  statusType = "warning";
195
198
  }
199
+ void loadDevices();
196
200
  } catch (error) {
197
201
  result = `Configuration failed: ${toErrorMessage(error)}`;
198
202
  statusType = "error";
@@ -214,9 +218,6 @@ function _page($$renderer, $$props) {
214
218
  message: `Configuration test at ${(/* @__PURE__ */ new Date()).toLocaleTimeString()}`,
215
219
  title: "Configuration Test"
216
220
  };
217
- if (deviceToken.trim()) {
218
- testPayload.deviceToken = deviceToken.trim();
219
- }
220
221
  const response = await fetch("/api/notify", {
221
222
  body: JSON.stringify(testPayload),
222
223
  headers: {
@@ -241,6 +242,54 @@ function _page($$renderer, $$props) {
241
242
  }
242
243
  function clearConfiguration() {
243
244
  }
245
+ async function loadDevices() {
246
+ if (!apiKey.trim()) {
247
+ registeredDevices = [];
248
+ loadDevicesError = "";
249
+ return;
250
+ }
251
+ loadingDevices = true;
252
+ try {
253
+ const response = await fetch("/api/device-token", { headers: { Authorization: `Bearer ${apiKey.trim()}` } });
254
+ if (response.ok) {
255
+ const data2 = await response.json();
256
+ registeredDevices = Array.isArray(data2.devices) ? data2.devices : [];
257
+ loadDevicesError = "";
258
+ } else {
259
+ registeredDevices = [];
260
+ loadDevicesError = response.status === 401 ? "Could not load devices: the API key was rejected (401). Check the key above." : `Could not load devices (HTTP ${response.status}).`;
261
+ }
262
+ } catch (error) {
263
+ registeredDevices = [];
264
+ loadDevicesError = `Could not load devices: ${toErrorMessage(error)}`;
265
+ }
266
+ loadingDevices = false;
267
+ }
268
+ async function removeDevice(id) {
269
+ result = "";
270
+ statusType = "";
271
+ try {
272
+ const response = await fetch("/api/device-token", {
273
+ body: JSON.stringify({ id }),
274
+ headers: {
275
+ Authorization: `Bearer ${apiKey.trim()}`,
276
+ "Content-Type": "application/json"
277
+ },
278
+ method: "DELETE"
279
+ });
280
+ if (!response.ok) {
281
+ const data2 = await response.json().catch(() => ({}));
282
+ result = `Failed to remove device: ${data2.error ?? response.statusText}`;
283
+ statusType = "error";
284
+ return;
285
+ }
286
+ } catch (error) {
287
+ result = `Failed to remove device: ${toErrorMessage(error)}`;
288
+ statusType = "error";
289
+ return;
290
+ }
291
+ await loadDevices();
292
+ }
244
293
  let $$settled = true;
245
294
  let $$inner_renderer;
246
295
  function $$render_inner($$renderer3) {
@@ -285,23 +334,48 @@ function _page($$renderer, $$props) {
285
334
  }
286
335
  });
287
336
  $$renderer4.push(`<!----> <p class="input-help svelte-1gp6n77">Find this in your <code class="svelte-1gp6n77">~/.shooter/.env</code> file. Run <code class="svelte-1gp6n77">shooter setup</code> to generate
288
- one.</p> `);
289
- Input($$renderer4, {
290
- name: "deviceToken",
291
- label: "Device Token",
292
- dataType: "text",
293
- placeholder: "64-character hex string",
294
- infoMessage: "Device token from app registration",
295
- classes: "input-mono",
296
- get value() {
297
- return deviceToken;
298
- },
299
- set value($$value) {
300
- deviceToken = $$value;
301
- $$settled = false;
337
+ one.</p>`);
338
+ }
339
+ });
340
+ $$renderer3.push(`<!----> `);
341
+ Card($$renderer3, {
342
+ title: "Registered Devices",
343
+ description: "Phones that receive push notifications",
344
+ children: ($$renderer4) => {
345
+ if (loadingDevices) {
346
+ $$renderer4.push("<!--[0-->");
347
+ $$renderer4.push(`<p class="input-help svelte-1gp6n77">Loading…</p>`);
348
+ } else if (loadDevicesError) {
349
+ $$renderer4.push("<!--[1-->");
350
+ $$renderer4.push(`<p class="input-help svelte-1gp6n77" style="color: var(--color-error, #f87171);">${escape_html(loadDevicesError)}</p>`);
351
+ } else if (registeredDevices.length === 0) {
352
+ $$renderer4.push("<!--[2-->");
353
+ $$renderer4.push(`<p class="input-help svelte-1gp6n77">No devices registered yet. Open the Shooter app on your phone with this server's URL +
354
+ API key — it registers automatically. Every notification fans out to all devices here.</p>`);
355
+ } else {
356
+ $$renderer4.push("<!--[-1-->");
357
+ $$renderer4.push(`<ul class="device-list svelte-1gp6n77"><!--[-->`);
358
+ const each_array = ensure_array_like(registeredDevices);
359
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
360
+ let device = each_array[$$index];
361
+ $$renderer4.push(`<li class="device-row svelte-1gp6n77"><div class="device-meta svelte-1gp6n77"><span class="device-name svelte-1gp6n77">${escape_html(device.friendlyName || device.deviceId || "Unknown device")} `);
362
+ if (device.deviceId && device.deviceId === thisDeviceId) {
363
+ $$renderer4.push("<!--[0-->");
364
+ $$renderer4.push(`<span class="device-badge svelte-1gp6n77">this device</span>`);
365
+ } else {
366
+ $$renderer4.push("<!--[-1-->");
367
+ }
368
+ $$renderer4.push(`<!--]--></span> <span class="device-sub svelte-1gp6n77">${escape_html(device.platform)} · ${escape_html(device.appEnv)} · ${escape_html(device.tokenMasked)}</span></div> `);
369
+ Button($$renderer4, {
370
+ classes: "btn-secondary",
371
+ onclick: () => void removeDevice(device.id),
372
+ text: "Remove"
373
+ });
374
+ $$renderer4.push(`<!----></li>`);
302
375
  }
303
- });
304
- $$renderer4.push(`<!----> <p class="input-help svelte-1gp6n77">Optional — only needed for iOS/Android push notifications.</p>`);
376
+ $$renderer4.push(`<!--]--></ul>`);
377
+ }
378
+ $$renderer4.push(`<!--]-->`);
305
379
  }
306
380
  });
307
381
  $$renderer3.push(`<!----> `);
@@ -353,10 +427,10 @@ function _page($$renderer, $$props) {
353
427
  Stepper($$renderer4, {
354
428
  steps: [
355
429
  { label: "Get API Key" },
356
- { label: "Find Device Token" },
430
+ { label: "Register a Device" },
357
431
  { label: "Test Connection" }
358
432
  ],
359
- currentStepIndex: apiKey.trim() && deviceToken.trim() ? 2 : apiKey.trim() ? 1 : 0,
433
+ currentStepIndex: apiKey.trim() && registeredDevices.length > 0 ? 2 : apiKey.trim() ? 1 : 0,
360
434
  classes: "setup-stepper"
361
435
  });
362
436
  }
@@ -408,9 +482,9 @@ function _page($$renderer, $$props) {
408
482
  description: "NeuroLink-powered summaries and AI features",
409
483
  children: ($$renderer4) => {
410
484
  $$renderer4.push(`<div class="ai-providers svelte-1gp6n77"><!--[-->`);
411
- const each_array = ensure_array_like(PROVIDERS);
412
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
413
- let provider = each_array[$$index];
485
+ const each_array_1 = ensure_array_like(PROVIDERS);
486
+ for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
487
+ let provider = each_array_1[$$index_1];
414
488
  $$renderer4.push(`<div class="provider-row svelte-1gp6n77">`);
415
489
  Icon($$renderer4, {
416
490
  svg: data.aiProviders[provider.id] ? CheckCircleSvg : XCircleSvg,
@@ -457,4 +531,4 @@ function _page($$renderer, $$props) {
457
531
  }
458
532
 
459
533
  export { _page as default };
460
- //# sourceMappingURL=_page.svelte-DDE2nChH.js.map
534
+ //# sourceMappingURL=_page.svelte-BBbaKwNz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_page.svelte-BBbaKwNz.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/config/_page.svelte.js"],"sourcesContent":["import { b as attr_class, a as stringify, ab as attr, e as escape_html, c as ensure_array_like, h as head } from \"../../../chunks/index2.js\";\nimport \"../../../chunks/markdown.js\";\nimport { B as Button } from \"../../../chunks/Button.js\";\n/* empty css */\nimport { I as Input } from \"../../../chunks/Input.js\";\nimport { I as Icon } from \"../../../chunks/Icon.js\";\nimport { B as Banner } from \"../../../chunks/Banner.js\";\nfunction Step($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { stepIndex, label, icon, classes } = $$props;\n $$renderer2.push(`<div${attr_class(`step ${stringify(classes ?? \"\")}`, \"svelte-1i4mzd9\")} role=\"button\" tabindex=\"0\">`);\n if (typeof icon === \"string\" && icon.length > 0) {\n $$renderer2.push(\"<!--[0-->\");\n $$renderer2.push(`<div class=\"step-icon-container\"><img class=\"step-icon\"${attr(\"src\", icon)} alt=\"\"/></div>`);\n } else {\n $$renderer2.push(\"<!--[-1-->\");\n $$renderer2.push(`<div class=\"step-index-container svelte-1i4mzd9\"><div class=\"step-index-text svelte-1i4mzd9\">${escape_html(stepIndex)}</div></div>`);\n }\n $$renderer2.push(`<!--]--> <div class=\"step-text svelte-1i4mzd9\">${escape_html(label)}</div> <div class=\"separator svelte-1i4mzd9\"></div></div>`);\n });\n}\nfunction Stepper($$renderer, $$props) {\n let { steps, currentStepIndex, classes } = $$props;\n $$renderer.push(`<div${attr_class(`container ${stringify(classes ?? \"\")}`, \"svelte-dvxh34\")}><!--[-->`);\n const each_array = ensure_array_like(steps);\n for (let stepIndex = 0, $$length = each_array.length; stepIndex < $$length; stepIndex++) {\n let currentStep = each_array[stepIndex];\n $$renderer.push(`<div${attr_class(\"step-container svelte-dvxh34\", void 0, {\n \"active-step\": currentStepIndex === stepIndex,\n \"completed-step\": currentStepIndex > stepIndex\n })}>`);\n Step($$renderer, {\n label: currentStep.label,\n icon: currentStep.icon,\n stepIndex: stepIndex + 1\n });\n $$renderer.push(`<!----></div>`);\n }\n $$renderer.push(`<!--]--></div>`);\n}\nfunction Card($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { children, title, description, classes } = $$props;\n $$renderer2.push(`<div${attr_class(`card ${stringify(classes ?? \"\")}`, \"svelte-15b0v7e\")}>`);\n if (typeof title === \"string\" && title.length > 0) {\n $$renderer2.push(\"<!--[0-->\");\n $$renderer2.push(`<div class=\"card-header svelte-15b0v7e\"><div class=\"card-title svelte-15b0v7e\">${escape_html(title)}</div> `);\n if (typeof description === \"string\" && description.length > 0) {\n $$renderer2.push(\"<!--[0-->\");\n $$renderer2.push(`<div class=\"card-description svelte-15b0v7e\">${escape_html(description)}</div>`);\n } else {\n $$renderer2.push(\"<!--[-1-->\");\n }\n $$renderer2.push(`<!--]--></div>`);\n } else {\n $$renderer2.push(\"<!--[-1-->\");\n }\n $$renderer2.push(`<!--]--> <div class=\"card-content svelte-15b0v7e\">`);\n children($$renderer2);\n $$renderer2.push(`<!----></div></div>`);\n });\n}\nfunction toErrorMessage(err) {\n if (err instanceof Error) {\n return err.message;\n }\n if (typeof err === \"string\") {\n return err;\n }\n return String(err);\n}\nconst PROVIDERS = [\n {\n cors: \"proxy\",\n envKeys: [\"GOOGLE_AI_API_KEY\"],\n id: \"google-ai\",\n label: \"Google AI\",\n model: \"gemini-3.1-flash-lite-preview\"\n },\n {\n cors: \"proxy\",\n envKeys: [\"ANTHROPIC_API_KEY\"],\n id: \"anthropic\",\n label: \"Anthropic\",\n model: \"claude-haiku-4-5-20251001\"\n },\n {\n cors: \"proxy\",\n envKeys: [\"OPENAI_API_KEY\"],\n id: \"openai\",\n label: \"OpenAI\",\n model: \"gpt-4o-mini\"\n },\n {\n cors: \"proxy\",\n envKeys: [\"MISTRAL_API_KEY\"],\n id: \"mistral\",\n label: \"Mistral\",\n model: \"mistral-small-2506\"\n },\n {\n cors: \"proxy\",\n envKeys: [\"LITELLM_BASE_URL\"],\n id: \"litellm\",\n label: \"LiteLLM\",\n model: \"open-large\"\n }\n];\nconst AlertTriangleSvg = '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"/>\\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"/>\\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/>\\n</svg>\\n';\nconst CheckCircleSvg = '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"/>\\n <polyline points=\"22 4 12 14.01 9 11.01\"/>\\n</svg>\\n';\nconst PlaySvg = '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n <polygon points=\"5 3 19 12 5 21 5 3\"/>\\n</svg>\\n';\nconst XCircleSvg = '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"/>\\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"/>\\n</svg>\\n';\nfunction _page($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n const { data } = $$props;\n let serverUrl = \"\";\n let apiKey = \"\";\n let registeredDevices = [];\n let loadingDevices = false;\n let loadDevicesError = \"\";\n let thisDeviceId = \"\";\n let result = \"\";\n let loading = false;\n let statusType = \"\";\n let qrDataUrl = \"\";\n let qrServerUrl = \"\";\n let qrLoading = false;\n let qrError = \"\";\n async function fetchQrCode() {\n if (!apiKey.trim()) {\n qrError = \"Save an API key first to generate a QR code\";\n return;\n }\n qrLoading = true;\n qrError = \"\";\n qrDataUrl = \"\";\n qrServerUrl = \"\";\n try {\n const response = await fetch(\"/api/qr-config\", { headers: { Authorization: `Bearer ${apiKey.trim()}` } });\n if (!response.ok) {\n const data3 = await response.json();\n qrError = data3.error || \"Failed to generate QR code\";\n return;\n }\n const data2 = await response.json();\n qrDataUrl = data2.dataUrl;\n qrServerUrl = data2.serverUrl;\n } catch (error) {\n qrError = `Network error: ${toErrorMessage(error)}`;\n } finally {\n qrLoading = false;\n }\n }\n function getNativeBridge() {\n if (typeof window === \"undefined\") {\n return null;\n }\n if (window.ShooterBridge) {\n return window.ShooterBridge;\n }\n if (window.ShooterNativeBridge) {\n return window.ShooterNativeBridge;\n }\n return null;\n }\n function getDefaultServerUrl() {\n return window.location.origin;\n }\n async function saveConfiguration() {\n loading = true;\n result = \"\";\n statusType = \"\";\n try {\n const trimmedUrl = serverUrl.trim().replace(/\\/+$/, \"\");\n localStorage.setItem(\"shooter_config\", JSON.stringify({\n apiKey: apiKey.trim(),\n deviceToken: null,\n lastUpdated: Date.now(),\n serverUrl: trimmedUrl || getDefaultServerUrl()\n }));\n const bridge = getNativeBridge();\n if (bridge) {\n bridge.saveConfig?.(JSON.stringify({\n apiKey: apiKey.trim(),\n serverUrl: trimmedUrl || getDefaultServerUrl()\n }));\n }\n const response = await fetch(\"/api/health\");\n if (response.ok) {\n result = \"Configuration saved successfully\";\n statusType = \"success\";\n } else {\n result = \"Configuration saved but system health check failed\";\n statusType = \"warning\";\n }\n void loadDevices();\n } catch (error) {\n result = `Configuration failed: ${toErrorMessage(error)}`;\n statusType = \"error\";\n }\n loading = false;\n }\n async function testConfiguration() {\n if (!apiKey.trim()) {\n result = \"API key is required for testing\";\n statusType = \"error\";\n return;\n }\n loading = true;\n result = \"\";\n statusType = \"\";\n try {\n const testPayload = {\n data: { source: \"config-test\", timestamp: Date.now() },\n message: `Configuration test at ${(/* @__PURE__ */ new Date()).toLocaleTimeString()}`,\n title: \"Configuration Test\"\n };\n const response = await fetch(\"/api/notify\", {\n body: JSON.stringify(testPayload),\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\"\n },\n method: \"POST\"\n });\n const data2 = await response.json();\n if (response.ok) {\n result = \"Test notification sent successfully\";\n statusType = \"success\";\n } else {\n result = `Test failed: ${typeof data2.error === \"string\" ? data2.error : \"Unknown error\"}`;\n statusType = \"error\";\n }\n } catch (error) {\n result = `Network error: ${toErrorMessage(error)}`;\n statusType = \"error\";\n }\n loading = false;\n }\n function clearConfiguration() {\n }\n async function loadDevices() {\n if (!apiKey.trim()) {\n registeredDevices = [];\n loadDevicesError = \"\";\n return;\n }\n loadingDevices = true;\n try {\n const response = await fetch(\"/api/device-token\", { headers: { Authorization: `Bearer ${apiKey.trim()}` } });\n if (response.ok) {\n const data2 = await response.json();\n registeredDevices = Array.isArray(data2.devices) ? data2.devices : [];\n loadDevicesError = \"\";\n } else {\n registeredDevices = [];\n loadDevicesError = response.status === 401 ? \"Could not load devices: the API key was rejected (401). Check the key above.\" : `Could not load devices (HTTP ${response.status}).`;\n }\n } catch (error) {\n registeredDevices = [];\n loadDevicesError = `Could not load devices: ${toErrorMessage(error)}`;\n }\n loadingDevices = false;\n }\n async function removeDevice(id) {\n result = \"\";\n statusType = \"\";\n try {\n const response = await fetch(\"/api/device-token\", {\n body: JSON.stringify({ id }),\n headers: {\n Authorization: `Bearer ${apiKey.trim()}`,\n \"Content-Type\": \"application/json\"\n },\n method: \"DELETE\"\n });\n if (!response.ok) {\n const data2 = await response.json().catch(() => ({}));\n result = `Failed to remove device: ${data2.error ?? response.statusText}`;\n statusType = \"error\";\n return;\n }\n } catch (error) {\n result = `Failed to remove device: ${toErrorMessage(error)}`;\n statusType = \"error\";\n return;\n }\n await loadDevices();\n }\n let $$settled = true;\n let $$inner_renderer;\n function $$render_inner($$renderer3) {\n head(\"1gp6n77\", $$renderer3, ($$renderer4) => {\n $$renderer4.title(($$renderer5) => {\n $$renderer5.push(`<title>Settings - Shooter</title>`);\n });\n $$renderer4.push(`<meta name=\"description\" content=\"Configure notification system settings\"/>`);\n });\n $$renderer3.push(`<main class=\"main\"><div class=\"settings-container svelte-1gp6n77\"><div style=\"margin-bottom: var(--space-4);\"><a href=\"/\" class=\"back-link\">← Back to Projects</a></div> <div class=\"page-header\"><h1 class=\"page-title\">Settings</h1> <p class=\"page-description\">Configure your API credentials and notification preferences</p></div> <div class=\"settings-grid svelte-1gp6n77\"><section class=\"settings-section svelte-1gp6n77\">`);\n Card($$renderer3, {\n title: \"Server Configuration\",\n description: \"Configure server connection and credentials\",\n children: ($$renderer4) => {\n Input($$renderer4, {\n name: \"serverUrl\",\n label: \"Server URL\",\n dataType: \"text\",\n placeholder: \"https://shooter.breezehq.dev\",\n infoMessage: \"Base URL of your Shooter server. Apps will reload with this URL on next launch.\",\n get value() {\n return serverUrl;\n },\n set value($$value) {\n serverUrl = $$value;\n $$settled = false;\n }\n });\n $$renderer4.push(`<!----> `);\n Input($$renderer4, {\n name: \"apiKey\",\n label: \"API Key\",\n dataType: \"password\",\n placeholder: \"Enter your API key\",\n infoMessage: \"Required for sending notifications\",\n get value() {\n return apiKey;\n },\n set value($$value) {\n apiKey = $$value;\n $$settled = false;\n }\n });\n $$renderer4.push(`<!----> <p class=\"input-help svelte-1gp6n77\">Find this in your <code class=\"svelte-1gp6n77\">~/.shooter/.env</code> file. Run <code class=\"svelte-1gp6n77\">shooter setup</code> to generate\n one.</p>`);\n }\n });\n $$renderer3.push(`<!----> `);\n Card($$renderer3, {\n title: \"Registered Devices\",\n description: \"Phones that receive push notifications\",\n children: ($$renderer4) => {\n if (loadingDevices) {\n $$renderer4.push(\"<!--[0-->\");\n $$renderer4.push(`<p class=\"input-help svelte-1gp6n77\">Loading…</p>`);\n } else if (loadDevicesError) {\n $$renderer4.push(\"<!--[1-->\");\n $$renderer4.push(`<p class=\"input-help svelte-1gp6n77\" style=\"color: var(--color-error, #f87171);\">${escape_html(loadDevicesError)}</p>`);\n } else if (registeredDevices.length === 0) {\n $$renderer4.push(\"<!--[2-->\");\n $$renderer4.push(`<p class=\"input-help svelte-1gp6n77\">No devices registered yet. Open the Shooter app on your phone with this server's URL +\n API key — it registers automatically. Every notification fans out to all devices here.</p>`);\n } else {\n $$renderer4.push(\"<!--[-1-->\");\n $$renderer4.push(`<ul class=\"device-list svelte-1gp6n77\"><!--[-->`);\n const each_array = ensure_array_like(registeredDevices);\n for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n let device = each_array[$$index];\n $$renderer4.push(`<li class=\"device-row svelte-1gp6n77\"><div class=\"device-meta svelte-1gp6n77\"><span class=\"device-name svelte-1gp6n77\">${escape_html(device.friendlyName || device.deviceId || \"Unknown device\")} `);\n if (device.deviceId && device.deviceId === thisDeviceId) {\n $$renderer4.push(\"<!--[0-->\");\n $$renderer4.push(`<span class=\"device-badge svelte-1gp6n77\">this device</span>`);\n } else {\n $$renderer4.push(\"<!--[-1-->\");\n }\n $$renderer4.push(`<!--]--></span> <span class=\"device-sub svelte-1gp6n77\">${escape_html(device.platform)} · ${escape_html(device.appEnv)} · ${escape_html(device.tokenMasked)}</span></div> `);\n Button($$renderer4, {\n classes: \"btn-secondary\",\n onclick: () => void removeDevice(device.id),\n text: \"Remove\"\n });\n $$renderer4.push(`<!----></li>`);\n }\n $$renderer4.push(`<!--]--></ul>`);\n }\n $$renderer4.push(`<!--]-->`);\n }\n });\n $$renderer3.push(`<!----> `);\n if (result) {\n $$renderer3.push(\"<!--[0-->\");\n const bannerSvg = statusType === \"success\" ? CheckCircleSvg : statusType === \"error\" ? XCircleSvg : AlertTriangleSvg;\n {\n let icon = function($$renderer4) {\n Icon($$renderer4, { svg: bannerSvg, classes: \"icon-16\" });\n };\n Banner($$renderer3, {\n text: result,\n classes: `banner-${stringify(statusType || \"info\")}`,\n icon,\n $$slots: { icon: true }\n });\n }\n } else {\n $$renderer3.push(\"<!--[-1-->\");\n }\n $$renderer3.push(`<!--]--> <div class=\"button-group svelte-1gp6n77\">`);\n Button($$renderer3, {\n classes: \"btn-secondary\",\n onclick: testConfiguration,\n disabled: loading || !apiKey.trim(),\n children: ($$renderer4) => {\n if (!loading) {\n $$renderer4.push(\"<!--[0-->\");\n Icon($$renderer4, { svg: PlaySvg, classes: \"icon-14\" });\n } else {\n $$renderer4.push(\"<!--[-1-->\");\n }\n $$renderer4.push(`<!--]--> Test Connection`);\n },\n $$slots: { default: true }\n });\n $$renderer3.push(`<!----> `);\n Button($$renderer3, {\n classes: \"btn-primary\",\n onclick: saveConfiguration,\n disabled: loading || !apiKey.trim(),\n showLoader: loading,\n text: \"Save Changes\"\n });\n $$renderer3.push(`<!----></div></section> <aside class=\"settings-sidebar svelte-1gp6n77\">`);\n Card($$renderer3, {\n title: \"Setup Guide\",\n children: ($$renderer4) => {\n Stepper($$renderer4, {\n steps: [\n { label: \"Get API Key\" },\n { label: \"Register a Device\" },\n { label: \"Test Connection\" }\n ],\n currentStepIndex: apiKey.trim() && registeredDevices.length > 0 ? 2 : apiKey.trim() ? 1 : 0,\n classes: \"setup-stepper\"\n });\n }\n });\n $$renderer3.push(`<!----> `);\n Card($$renderer3, {\n title: \"Mobile App Setup\",\n description: \"Scan to connect your mobile app\",\n children: ($$renderer4) => {\n $$renderer4.push(`<div class=\"qr-section svelte-1gp6n77\">`);\n {\n $$renderer4.push(\"<!--[-1-->\");\n if (qrDataUrl) {\n $$renderer4.push(\"<!--[0-->\");\n $$renderer4.push(`<div class=\"qr-container svelte-1gp6n77\"><img${attr(\"src\", qrDataUrl)} alt=\"QR code for mobile app pairing\" class=\"qr-image svelte-1gp6n77\"/></div> <p class=\"qr-hint svelte-1gp6n77\">Scan this QR code with the Shooter iOS or Android app to connect.</p> `);\n if (qrServerUrl) {\n $$renderer4.push(\"<!--[0-->\");\n $$renderer4.push(`<p class=\"qr-server-url svelte-1gp6n77\">Server: <code class=\"svelte-1gp6n77\">${escape_html(qrServerUrl)}</code></p>`);\n } else {\n $$renderer4.push(\"<!--[-1-->\");\n }\n $$renderer4.push(`<!--]-->`);\n } else if (qrLoading) {\n $$renderer4.push(\"<!--[1-->\");\n $$renderer4.push(`<div class=\"qr-placeholder svelte-1gp6n77\"><p class=\"qr-loading-text svelte-1gp6n77\">Generating QR code...</p></div>`);\n } else if (qrError) {\n $$renderer4.push(\"<!--[2-->\");\n $$renderer4.push(`<p class=\"qr-error svelte-1gp6n77\">${escape_html(qrError)}</p>`);\n } else {\n $$renderer4.push(\"<!--[-1-->\");\n $$renderer4.push(`<p class=\"qr-description svelte-1gp6n77\">Generate a QR code containing your server URL and API key. Your mobile app can\n scan it to auto-configure the connection.</p>`);\n }\n $$renderer4.push(`<!--]--> `);\n Button($$renderer4, {\n classes: \"btn-secondary btn-sm\",\n onclick: fetchQrCode,\n disabled: qrLoading || !apiKey.trim(),\n text: qrDataUrl ? \"Regenerate QR Code\" : \"Generate QR Code\"\n });\n $$renderer4.push(`<!---->`);\n }\n $$renderer4.push(`<!--]--></div>`);\n }\n });\n $$renderer3.push(`<!----> `);\n Card($$renderer3, {\n title: \"AI Providers\",\n description: \"NeuroLink-powered summaries and AI features\",\n children: ($$renderer4) => {\n $$renderer4.push(`<div class=\"ai-providers svelte-1gp6n77\"><!--[-->`);\n const each_array_1 = ensure_array_like(PROVIDERS);\n for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {\n let provider = each_array_1[$$index_1];\n $$renderer4.push(`<div class=\"provider-row svelte-1gp6n77\">`);\n Icon($$renderer4, {\n svg: data.aiProviders[provider.id] ? CheckCircleSvg : XCircleSvg,\n classes: \"icon-14\"\n });\n $$renderer4.push(`<!----> <span class=\"provider-label svelte-1gp6n77\">${escape_html(provider.label)}</span> <span${attr_class(\"provider-status svelte-1gp6n77\", void 0, { \"configured\": data.aiProviders[provider.id] })}>${escape_html(data.aiProviders[provider.id] ? \"configured\" : \"not configured\")}</span></div>`);\n }\n $$renderer4.push(`<!--]--> `);\n if (data.activeProvider) {\n $$renderer4.push(\"<!--[0-->\");\n $$renderer4.push(`<div class=\"active-provider svelte-1gp6n77\">Active: <strong>${escape_html(data.activeProvider)}</strong></div>`);\n } else if (Object.values(data.aiProviders).some(Boolean)) {\n $$renderer4.push(\"<!--[1-->\");\n $$renderer4.push(`<div class=\"active-provider svelte-1gp6n77\">Auto-detected from configured keys</div>`);\n } else {\n $$renderer4.push(\"<!--[-1-->\");\n $$renderer4.push(`<p class=\"ai-help svelte-1gp6n77\">Run <code class=\"svelte-1gp6n77\">shooter setup</code> to configure AI providers for summaries.</p>`);\n }\n $$renderer4.push(`<!--]--></div>`);\n }\n });\n $$renderer3.push(`<!----> `);\n Card($$renderer3, {\n title: \"Danger Zone\",\n children: ($$renderer4) => {\n $$renderer4.push(`<p class=\"danger-description svelte-1gp6n77\">Clear all saved configuration data from this device.</p> `);\n Button($$renderer4, {\n classes: \"btn-danger btn-sm\",\n onclick: clearConfiguration,\n text: \"Clear Configuration\"\n });\n $$renderer4.push(`<!---->`);\n }\n });\n $$renderer3.push(`<!----></aside></div></div></main>`);\n }\n do {\n $$settled = true;\n $$inner_renderer = $$renderer2.copy();\n $$render_inner($$inner_renderer);\n } while (!$$settled);\n $$renderer2.subsume($$inner_renderer);\n });\n}\nexport {\n _page as default\n};\n"],"names":[],"mappings":"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"}