@juspay/shooter 1.0.0 → 1.1.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.
- package/.claude/hooks/notifier.cjs +117 -33
- package/.claude/settings.json +14 -14
- package/README.md +116 -84
- package/bin/shooter.cjs +471 -102
- package/build/client/_app/immutable/assets/{0.CM9Hl6d-.css → 0.DC5pAwP3.css} +1 -1
- package/build/client/_app/immutable/assets/0.DC5pAwP3.css.br +0 -0
- package/build/client/_app/immutable/assets/{0.CM9Hl6d-.css.gz → 0.DC5pAwP3.css.gz} +0 -0
- package/build/client/_app/immutable/assets/2.CAShZ7lQ.css.gz +0 -0
- package/build/client/_app/immutable/assets/3.BoXp0JoS.css +1 -0
- package/build/client/_app/immutable/assets/3.BoXp0JoS.css.br +0 -0
- package/build/client/_app/immutable/assets/3.BoXp0JoS.css.gz +0 -0
- package/build/client/_app/immutable/assets/4.cJuCkJKZ.css.gz +0 -0
- package/build/client/_app/immutable/assets/5.DRjApZQW.css.gz +0 -0
- package/build/client/_app/immutable/assets/6.eZGZN-BF.css +1 -0
- package/build/client/_app/immutable/assets/6.eZGZN-BF.css.br +0 -0
- package/build/client/_app/immutable/assets/6.eZGZN-BF.css.gz +0 -0
- package/build/client/_app/immutable/assets/{7.BCJ1IuMx.css → 7.PyEFVv_s.css} +1 -1
- package/build/client/_app/immutable/assets/7.PyEFVv_s.css.br +0 -0
- package/build/client/_app/immutable/assets/7.PyEFVv_s.css.gz +0 -0
- package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css.gz +0 -0
- package/build/client/_app/immutable/assets/Phone.FQEfwCX2.css +1 -0
- package/build/client/_app/immutable/assets/Phone.FQEfwCX2.css.br +0 -0
- package/build/client/_app/immutable/assets/Phone.FQEfwCX2.css.gz +0 -0
- package/build/client/_app/immutable/assets/markdown.Dc-OSJWY.css +1 -0
- package/build/client/_app/immutable/assets/markdown.Dc-OSJWY.css.br +0 -0
- package/build/client/_app/immutable/assets/markdown.Dc-OSJWY.css.gz +0 -0
- package/build/client/_app/immutable/assets/xterm.DFuMZ0ql.css.gz +0 -0
- package/build/client/_app/immutable/chunks/{Cjwk_cGO.js → 50RPd5u3.js} +1 -1
- package/build/client/_app/immutable/chunks/50RPd5u3.js.br +0 -0
- package/build/client/_app/immutable/chunks/50RPd5u3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BDC7XD4o.js +1 -0
- package/build/client/_app/immutable/chunks/BDC7XD4o.js.br +0 -0
- package/build/client/_app/immutable/chunks/BDC7XD4o.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BTGVxaYV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BeONA6_G.js +2 -0
- package/build/client/_app/immutable/chunks/BeONA6_G.js.br +0 -0
- package/build/client/_app/immutable/chunks/BeONA6_G.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BlxrFPDK.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BygiiMA0.js +1 -0
- package/build/client/_app/immutable/chunks/BygiiMA0.js.br +0 -0
- package/build/client/_app/immutable/chunks/BygiiMA0.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CGLrx-H5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CHvUpVYv.js +1 -0
- package/build/client/_app/immutable/chunks/CHvUpVYv.js.br +0 -0
- package/build/client/_app/immutable/chunks/CHvUpVYv.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CbqC9BW7.js +1 -0
- package/build/client/_app/immutable/chunks/CbqC9BW7.js.br +2 -0
- package/build/client/_app/immutable/chunks/CbqC9BW7.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CdL99jkG.js +1 -0
- package/build/client/_app/immutable/chunks/CdL99jkG.js.br +0 -0
- package/build/client/_app/immutable/chunks/CdL99jkG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ClK4wZbC.js +61 -0
- package/build/client/_app/immutable/chunks/ClK4wZbC.js.br +0 -0
- package/build/client/_app/immutable/chunks/ClK4wZbC.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CojFyTPp.js +1 -0
- package/build/client/_app/immutable/chunks/CojFyTPp.js.br +0 -0
- package/build/client/_app/immutable/chunks/CojFyTPp.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DLu6yJIZ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DREFAyhX.js +60 -0
- package/build/client/_app/immutable/chunks/DREFAyhX.js.br +0 -0
- package/build/client/_app/immutable/chunks/DREFAyhX.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DSU1n5N_.js +1 -0
- package/build/client/_app/immutable/chunks/DSU1n5N_.js.br +0 -0
- package/build/client/_app/immutable/chunks/DSU1n5N_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/K_aHH2KN.js +1 -0
- package/build/client/_app/immutable/chunks/K_aHH2KN.js.br +0 -0
- package/build/client/_app/immutable/chunks/K_aHH2KN.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Ona8oofC.js +1 -0
- package/build/client/_app/immutable/chunks/Ona8oofC.js.br +0 -0
- package/build/client/_app/immutable/chunks/Ona8oofC.js.gz +0 -0
- package/build/client/_app/immutable/chunks/PPVm8Dsz.js.gz +0 -0
- package/build/client/_app/immutable/chunks/tjbnEgXP.js +1 -0
- package/build/client/_app/immutable/chunks/tjbnEgXP.js.br +0 -0
- package/build/client/_app/immutable/chunks/tjbnEgXP.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.anqwe7ZL.js +2 -0
- package/build/client/_app/immutable/entry/app.anqwe7ZL.js.br +0 -0
- package/build/client/_app/immutable/entry/app.anqwe7ZL.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BV2VRv6h.js +1 -0
- package/build/client/_app/immutable/entry/start.BV2VRv6h.js.br +2 -0
- package/build/client/_app/immutable/entry/start.BV2VRv6h.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.D0i5MqcI.js +1 -0
- package/build/client/_app/immutable/nodes/0.D0i5MqcI.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.D0i5MqcI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.DN5n5c6F.js +1 -0
- package/build/client/_app/immutable/nodes/1.DN5n5c6F.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.DN5n5c6F.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.BTjkNKZJ.js +1 -0
- package/build/client/_app/immutable/nodes/2.BTjkNKZJ.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.BTjkNKZJ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.CEkigHDv.js +3 -0
- package/build/client/_app/immutable/nodes/3.CEkigHDv.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.CEkigHDv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.B-8Zsc9k.js +1 -0
- package/build/client/_app/immutable/nodes/4.B-8Zsc9k.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.B-8Zsc9k.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.shitbtHc.js +1 -0
- package/build/client/_app/immutable/nodes/5.shitbtHc.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.shitbtHc.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.CB8Q6eH8.js +2 -0
- package/build/client/_app/immutable/nodes/6.CB8Q6eH8.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.CB8Q6eH8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.D0CrR6pl.js +2 -0
- package/build/client/_app/immutable/nodes/7.D0CrR6pl.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.D0CrR6pl.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/client/favicon.svg.gz +0 -0
- package/build/pty-holder.cjs +37 -8
- package/build/server/chunks/0-Cs1dzfRz.js +9 -0
- package/build/server/chunks/{0-q2IUp76Y.js.map → 0-Cs1dzfRz.js.map} +1 -1
- package/build/server/chunks/1-BCSX7oED.js +9 -0
- package/build/server/chunks/{1-CU50G5wZ.js.map → 1-BCSX7oED.js.map} +1 -1
- package/build/server/chunks/2-6gkeO8b4.js +9 -0
- package/build/server/chunks/2-6gkeO8b4.js.map +1 -0
- package/build/server/chunks/3-DH9J9Vsc.js +9 -0
- package/build/server/chunks/3-DH9J9Vsc.js.map +1 -0
- package/build/server/chunks/4-Rzy5TYjl.js +9 -0
- package/build/server/chunks/4-Rzy5TYjl.js.map +1 -0
- package/build/server/chunks/5-D0wB7nfE.js +9 -0
- package/build/server/chunks/5-D0wB7nfE.js.map +1 -0
- package/build/server/chunks/6-DR2ABDPq.js +9 -0
- package/build/server/chunks/6-DR2ABDPq.js.map +1 -0
- package/build/server/chunks/7-D-oQJsia.js +9 -0
- package/build/server/chunks/7-D-oQJsia.js.map +1 -0
- package/build/server/chunks/Button-C7D5W6wV.js +80 -0
- package/build/server/chunks/Button-C7D5W6wV.js.map +1 -0
- package/build/server/chunks/EmptyState-Ci4pSpmY.js +20 -0
- package/build/server/chunks/EmptyState-Ci4pSpmY.js.map +1 -0
- package/build/server/chunks/Icon-DyrkHVnV.js +36 -0
- package/build/server/chunks/Icon-DyrkHVnV.js.map +1 -0
- package/build/server/chunks/Shimmer-BITK6wrm.js +10 -0
- package/build/server/chunks/Shimmer-BITK6wrm.js.map +1 -0
- package/build/server/chunks/_layout.svelte-CO4f8UD7.js +76 -0
- package/build/server/chunks/_layout.svelte-CO4f8UD7.js.map +1 -0
- package/build/server/chunks/_page.svelte-3Cc3NMAP.js +81 -0
- package/build/server/chunks/_page.svelte-3Cc3NMAP.js.map +1 -0
- package/build/server/chunks/_page.svelte-C0p3HsIW.js +46 -0
- package/build/server/chunks/_page.svelte-C0p3HsIW.js.map +1 -0
- package/build/server/chunks/_page.svelte-C6bns9aQ.js +41 -0
- package/build/server/chunks/_page.svelte-C6bns9aQ.js.map +1 -0
- package/build/server/chunks/_page.svelte-CFCONiDK.js +97 -0
- package/build/server/chunks/_page.svelte-CFCONiDK.js.map +1 -0
- package/build/server/chunks/_page.svelte-DskND_G9.js +550 -0
- package/build/server/chunks/_page.svelte-DskND_G9.js.map +1 -0
- package/build/server/chunks/_page.svelte-rTrWmhOp.js +651 -0
- package/build/server/chunks/_page.svelte-rTrWmhOp.js.map +1 -0
- package/build/server/chunks/{_server.ts-CbDRDIoP.js → _server.ts-BStnNIcq.js} +9 -11
- package/build/server/chunks/_server.ts-BStnNIcq.js.map +1 -0
- package/build/server/chunks/{_server.ts-C29xzfaw.js → _server.ts-C8slOHB0.js} +9 -10
- package/build/server/chunks/_server.ts-C8slOHB0.js.map +1 -0
- package/build/server/chunks/{_server.ts-CPa6DgIt.js → _server.ts-COu0vNpd.js} +6 -6
- package/build/server/chunks/_server.ts-COu0vNpd.js.map +1 -0
- package/build/server/chunks/{_server.ts-DRVbgm6k.js → _server.ts-CS5H5klP.js} +10 -17
- package/build/server/chunks/_server.ts-CS5H5klP.js.map +1 -0
- package/build/server/chunks/{_server.ts-D4MNi4cD.js → _server.ts-Cf84YIaW.js} +3 -3
- package/build/server/chunks/{_server.ts-D4MNi4cD.js.map → _server.ts-Cf84YIaW.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BL2FGb5Z.js → _server.ts-Ch-6iOHp.js} +99 -53
- package/build/server/chunks/_server.ts-Ch-6iOHp.js.map +1 -0
- package/build/server/chunks/{_server.ts-DfajWaqh.js → _server.ts-DV8zTCF9.js} +7 -9
- package/build/server/chunks/_server.ts-DV8zTCF9.js.map +1 -0
- package/build/server/chunks/{_server.ts-ColfDHW8.js → _server.ts-DYvb9ijZ.js} +21 -10
- package/build/server/chunks/_server.ts-DYvb9ijZ.js.map +1 -0
- package/build/server/chunks/_server.ts-DhTrdlWH.js +62 -0
- package/build/server/chunks/_server.ts-DhTrdlWH.js.map +1 -0
- package/build/server/chunks/{_server.ts-Cv_OrRuL.js → _server.ts-DpEVfp8W.js} +165 -8
- package/build/server/chunks/_server.ts-DpEVfp8W.js.map +1 -0
- package/build/server/chunks/{_server.ts-y9-WYDMa.js → _server.ts-WhTJBEJy.js} +5 -4
- package/build/server/chunks/{_server.ts-y9-WYDMa.js.map → _server.ts-WhTJBEJy.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BjOJsoy4.js → _server.ts-XzT2UHM1.js} +6 -5
- package/build/server/chunks/_server.ts-XzT2UHM1.js.map +1 -0
- package/build/server/chunks/{_server.ts-BgdjBZco.js → _server.ts-tSpgyl1D.js} +7 -5
- package/build/server/chunks/_server.ts-tSpgyl1D.js.map +1 -0
- package/build/server/chunks/{_server.ts-BihKSdj_.js → _server.ts-uHUi-4cd.js} +7 -8
- package/build/server/chunks/_server.ts-uHUi-4cd.js.map +1 -0
- package/build/server/chunks/{auth-CEgFis71.js → auth-DeCdZ83n.js} +2 -2
- package/build/server/chunks/{auth-CEgFis71.js.map → auth-DeCdZ83n.js.map} +1 -1
- package/build/server/chunks/client-BYT9c0ig.js +7 -0
- package/build/server/chunks/client-BYT9c0ig.js.map +1 -0
- package/build/server/chunks/client2-BjxIYuno.js +25 -0
- package/build/server/chunks/client2-BjxIYuno.js.map +1 -0
- package/build/server/chunks/error-DDXB3duW.js +12 -0
- package/build/server/chunks/error-DDXB3duW.js.map +1 -0
- package/build/server/chunks/error.svelte-BG_yE-Wt.js +27 -0
- package/build/server/chunks/error.svelte-BG_yE-Wt.js.map +1 -0
- package/build/server/chunks/{exports-CJ0Q5XmL.js → index-Cnl871UW.js} +1111 -1634
- package/build/server/chunks/index-Cnl871UW.js.map +1 -0
- package/build/server/chunks/index-server-CUC9Jt7r.js +9 -0
- package/build/server/chunks/index-server-CUC9Jt7r.js.map +1 -0
- package/build/server/chunks/index2-HA3VTH7y.js +58 -0
- package/build/server/chunks/index2-HA3VTH7y.js.map +1 -0
- package/build/server/chunks/{library-apns-BHxLmuIx.js → library-apns-BqJbvSKh.js} +4 -4
- package/build/server/chunks/library-apns-BqJbvSKh.js.map +1 -0
- package/build/server/chunks/markdown-W_mTBct0.js +8 -0
- package/build/server/chunks/markdown-W_mTBct0.js.map +1 -0
- package/build/server/chunks/{pty-manager-C0FhBiVq.js → pty-manager-DR0Wt2Ac.js} +146 -319
- package/build/server/chunks/pty-manager-DR0Wt2Ac.js.map +1 -0
- package/build/server/chunks/root-DhswcH6o.js +1171 -0
- package/build/server/chunks/root-DhswcH6o.js.map +1 -0
- package/build/server/chunks/{shared-server-BDY8jh20.js → shared-server-sSGG17Df.js} +2 -3
- package/build/server/chunks/{shared-server-BDY8jh20.js.map → shared-server-sSGG17Df.js.map} +1 -1
- package/build/server/chunks/state.svelte-2Lellg7t.js +11 -0
- package/build/server/chunks/state.svelte-2Lellg7t.js.map +1 -0
- package/build/server/index.js +1085 -2242
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +23 -23
- package/build/server/manifest.js.map +1 -1
- package/package.json +32 -9
- package/scripts/fix-generated-types.sh +37 -0
- package/scripts/homebrew/shooter.rb +51 -0
- package/scripts/install.sh +348 -186
- package/scripts/setup.cjs +139 -43
- package/server.ts +111 -71
- package/src/app.css +12 -3
- package/src/app.d.ts +13 -20
- package/src/app.html +0 -2
- package/src/generated/types/API.ts +280 -0
- package/src/generated/types/APN.ts +186 -203
- package/src/generated/types/CLI.ts +18 -25
- package/src/generated/types/Client.ts +589 -0
- package/src/generated/types/Config.ts +53 -0
- package/src/generated/types/Holder.ts +638 -0
- package/src/generated/types/JWT.ts +39 -50
- package/src/generated/types/Notification.ts +426 -0
- package/src/generated/types/OpenCode.ts +356 -0
- package/src/generated/types/Sessions.ts +570 -0
- package/src/generated/types/Terminal.ts +2184 -2071
- package/src/generated/types/WsProtocol.ts +2004 -0
- package/src/generated/types/index.ts +9 -3
- package/src/lib/env.ts +29 -0
- package/src/lib/modules/client/common/config-guard.ts +37 -5
- package/src/lib/modules/client/common/error.ts +10 -0
- package/src/lib/modules/client/common/index.ts +6 -5
- package/src/lib/modules/client/common/native-bridge.ts +28 -20
- package/src/lib/modules/client/terminal/ChatView.svelte +46 -23
- package/src/lib/modules/client/terminal/CommandPalette.svelte +3 -2
- package/src/lib/modules/client/terminal/ConnectionStatus.svelte +6 -1
- package/src/lib/modules/client/terminal/LaunchSheet.svelte +147 -84
- package/src/lib/modules/client/terminal/QuickKeys.svelte +3 -1
- package/src/lib/modules/client/terminal/ShortcutsHelp.svelte +2 -5
- package/src/lib/modules/client/terminal/keyboard-shortcuts.ts +27 -24
- package/src/lib/modules/client/terminal/xterm-wrapper.ts +70 -44
- package/src/lib/modules/server/apn/library-apns.ts +3 -2
- package/src/lib/modules/server/apn/notification-history.ts +2 -13
- package/src/lib/modules/server/apn/notification-sessions.ts +3 -13
- package/src/lib/modules/server/apn/pending-requests.ts +3 -8
- package/src/lib/modules/server/apn/types.ts +5 -4
- package/src/lib/modules/server/cli/index.ts +3 -2
- package/src/lib/modules/server/fcm/fcm-service.ts +8 -6
- package/src/lib/modules/server/sessions/jsonl-parser.ts +3 -3
- package/src/lib/modules/server/sessions/jsonl-reader.ts +60 -15
- package/src/lib/modules/server/sessions/types.ts +11 -22
- package/src/lib/modules/server/terminal/holder-client.ts +272 -248
- package/src/lib/modules/server/terminal/opencode-watcher.ts +555 -553
- package/src/lib/modules/server/terminal/pty-holder.cjs +37 -8
- package/src/lib/modules/server/terminal/pty-manager.ts +141 -111
- package/src/lib/modules/server/terminal/session-watcher.ts +6 -4
- package/src/lib/modules/server/terminal/terminal-store.ts +131 -128
- package/src/lib/modules/server/utils/error.ts +9 -0
- package/src/lib/modules/server/ws/events-handler.ts +12 -6
- package/src/lib/modules/server/ws/keepalive.ts +86 -69
- package/src/lib/modules/server/ws/server.ts +43 -37
- package/src/lib/modules/server/ws/session-handler.ts +52 -45
- package/src/lib/modules/server/ws/terminal-handler.ts +29 -17
- package/src/lib/modules/server/ws/ticket-store.ts +29 -26
- package/src/lib/types/config.ts +1 -6
- package/src/routes/+layout.svelte +66 -31
- package/src/routes/+page.svelte +8 -15
- package/src/routes/api/debug/+server.ts +3 -1
- package/src/routes/api/device-token/+server.ts +60 -60
- package/src/routes/api/health/+server.ts +69 -73
- package/src/routes/api/notify/+server.ts +115 -68
- package/src/routes/api/qr-config/+server.ts +30 -32
- package/src/routes/api/response/+server.ts +9 -4
- package/src/routes/api/sessions/+server.ts +3 -1
- package/src/routes/api/terminals/+server.ts +14 -15
- package/src/routes/api/terminals/[id]/+server.ts +13 -7
- package/src/routes/api/terminals/[id]/paste-image/+server.ts +54 -52
- package/src/routes/api/terminals/[id]/resize/+server.ts +6 -3
- package/src/routes/api/webhook/+server.ts +8 -10
- package/src/routes/api/ws-status/+server.ts +7 -5
- package/src/routes/api/ws-ticket/+server.ts +42 -41
- package/src/routes/config/+page.svelte +129 -76
- package/src/routes/project/+page.svelte +7 -28
- package/src/routes/session/[id]/+page.svelte +70 -52
- package/src/routes/terminals/+page.svelte +45 -43
- package/src/routes/terminals/[id]/+page.svelte +198 -91
- package/build/client/_app/immutable/assets/0.CM9Hl6d-.css.br +0 -0
- package/build/client/_app/immutable/assets/3.C0uFg0IS.css +0 -1
- package/build/client/_app/immutable/assets/3.C0uFg0IS.css.br +0 -0
- package/build/client/_app/immutable/assets/3.C0uFg0IS.css.gz +0 -0
- package/build/client/_app/immutable/assets/6.AraZrY8I.css +0 -1
- package/build/client/_app/immutable/assets/6.AraZrY8I.css.br +0 -0
- package/build/client/_app/immutable/assets/6.AraZrY8I.css.gz +0 -0
- package/build/client/_app/immutable/assets/7.BCJ1IuMx.css.br +0 -0
- package/build/client/_app/immutable/assets/7.BCJ1IuMx.css.gz +0 -0
- package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css +0 -1
- package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css.br +0 -0
- package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BNJphC1q.js +0 -56
- package/build/client/_app/immutable/chunks/BNJphC1q.js.br +0 -0
- package/build/client/_app/immutable/chunks/BNJphC1q.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bvk7mfPM.js +0 -1
- package/build/client/_app/immutable/chunks/Bvk7mfPM.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bvk7mfPM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CAokzuPQ.js +0 -1
- package/build/client/_app/immutable/chunks/CAokzuPQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/CAokzuPQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CgCpWzEA.js +0 -1
- package/build/client/_app/immutable/chunks/CgCpWzEA.js.br +0 -0
- package/build/client/_app/immutable/chunks/CgCpWzEA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cjwk_cGO.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cjwk_cGO.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CtQ8EED1.js +0 -11
- package/build/client/_app/immutable/chunks/CtQ8EED1.js.br +0 -0
- package/build/client/_app/immutable/chunks/CtQ8EED1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DERQCisl.js +0 -1
- package/build/client/_app/immutable/chunks/DERQCisl.js.br +0 -0
- package/build/client/_app/immutable/chunks/DERQCisl.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DKrg8TQs.js +0 -1
- package/build/client/_app/immutable/chunks/DKrg8TQs.js.br +0 -0
- package/build/client/_app/immutable/chunks/DKrg8TQs.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dkkpz_4D.js +0 -126
- package/build/client/_app/immutable/chunks/Dkkpz_4D.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dkkpz_4D.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DoczjQhA.js +0 -1
- package/build/client/_app/immutable/chunks/DoczjQhA.js.br +0 -0
- package/build/client/_app/immutable/chunks/DoczjQhA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/RpcNruLP.js +0 -2
- package/build/client/_app/immutable/chunks/RpcNruLP.js.br +0 -0
- package/build/client/_app/immutable/chunks/RpcNruLP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/a-St0Zwo.js +0 -1
- package/build/client/_app/immutable/chunks/a-St0Zwo.js.br +0 -0
- package/build/client/_app/immutable/chunks/a-St0Zwo.js.gz +0 -0
- package/build/client/_app/immutable/chunks/bo70OQUZ.js +0 -1
- package/build/client/_app/immutable/chunks/bo70OQUZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/bo70OQUZ.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.QvGgdvTI.js +0 -2
- package/build/client/_app/immutable/entry/app.QvGgdvTI.js.br +0 -0
- package/build/client/_app/immutable/entry/app.QvGgdvTI.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BntDNRMC.js +0 -1
- package/build/client/_app/immutable/entry/start.BntDNRMC.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BntDNRMC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js +0 -1
- package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.MG1QhfrI.js +0 -1
- package/build/client/_app/immutable/nodes/1.MG1QhfrI.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.MG1QhfrI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.B4MlOSh6.js +0 -1
- package/build/client/_app/immutable/nodes/2.B4MlOSh6.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.B4MlOSh6.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.DIwYkjDn.js +0 -3
- package/build/client/_app/immutable/nodes/3.DIwYkjDn.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.DIwYkjDn.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.D-cIe70D.js +0 -1
- package/build/client/_app/immutable/nodes/4.D-cIe70D.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.D-cIe70D.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.D7zPRe3L.js +0 -1
- package/build/client/_app/immutable/nodes/5.D7zPRe3L.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.D7zPRe3L.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BB7QE48r.js +0 -2
- package/build/client/_app/immutable/nodes/6.BB7QE48r.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BB7QE48r.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.D8mqsrZG.js +0 -2
- package/build/client/_app/immutable/nodes/7.D8mqsrZG.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.D8mqsrZG.js.gz +0 -0
- package/build/client/manifest.webmanifest +0 -1
- package/build/client/registerSW.js +0 -1
- package/build/client/registerSW.js.br +0 -0
- package/build/client/registerSW.js.gz +0 -0
- package/build/client/sw.js +0 -222
- package/build/client/sw.js.br +0 -0
- package/build/client/sw.js.gz +0 -0
- package/build/client/workbox-5119daf5.js +0 -3395
- package/build/client/workbox-5119daf5.js.br +0 -0
- package/build/client/workbox-5119daf5.js.gz +0 -0
- package/build/server/chunks/0-q2IUp76Y.js +0 -9
- package/build/server/chunks/1-CU50G5wZ.js +0 -9
- package/build/server/chunks/2-D01t9s8T.js +0 -9
- package/build/server/chunks/2-D01t9s8T.js.map +0 -1
- package/build/server/chunks/3-5PUQ04wC.js +0 -9
- package/build/server/chunks/3-5PUQ04wC.js.map +0 -1
- package/build/server/chunks/4-e7gywnSG.js +0 -9
- package/build/server/chunks/4-e7gywnSG.js.map +0 -1
- package/build/server/chunks/5-CA1SA6KZ.js +0 -9
- package/build/server/chunks/5-CA1SA6KZ.js.map +0 -1
- package/build/server/chunks/6-71H221sV.js +0 -9
- package/build/server/chunks/6-71H221sV.js.map +0 -1
- package/build/server/chunks/7-Bo-vmdyz.js +0 -9
- package/build/server/chunks/7-Bo-vmdyz.js.map +0 -1
- package/build/server/chunks/_layout.svelte-SFHOxs74.js +0 -132
- package/build/server/chunks/_layout.svelte-SFHOxs74.js.map +0 -1
- package/build/server/chunks/_page.svelte-B4w-2wD-.js +0 -120
- package/build/server/chunks/_page.svelte-B4w-2wD-.js.map +0 -1
- package/build/server/chunks/_page.svelte-B_qAXjkh.js +0 -213
- package/build/server/chunks/_page.svelte-B_qAXjkh.js.map +0 -1
- package/build/server/chunks/_page.svelte-CsF1_TRG.js +0 -50
- package/build/server/chunks/_page.svelte-CsF1_TRG.js.map +0 -1
- package/build/server/chunks/_page.svelte-DJC6U-P0.js +0 -68
- package/build/server/chunks/_page.svelte-DJC6U-P0.js.map +0 -1
- package/build/server/chunks/_page.svelte-DQ6HBtsz.js +0 -407
- package/build/server/chunks/_page.svelte-DQ6HBtsz.js.map +0 -1
- package/build/server/chunks/_page.svelte-LbhhjP21.js +0 -148
- package/build/server/chunks/_page.svelte-LbhhjP21.js.map +0 -1
- package/build/server/chunks/_server.ts-BL2FGb5Z.js.map +0 -1
- package/build/server/chunks/_server.ts-BgdjBZco.js.map +0 -1
- package/build/server/chunks/_server.ts-BihKSdj_.js.map +0 -1
- package/build/server/chunks/_server.ts-BjOJsoy4.js.map +0 -1
- package/build/server/chunks/_server.ts-C29xzfaw.js.map +0 -1
- package/build/server/chunks/_server.ts-CPa6DgIt.js.map +0 -1
- package/build/server/chunks/_server.ts-CbDRDIoP.js.map +0 -1
- package/build/server/chunks/_server.ts-Cl1OEWL4.js +0 -54
- package/build/server/chunks/_server.ts-Cl1OEWL4.js.map +0 -1
- package/build/server/chunks/_server.ts-ColfDHW8.js.map +0 -1
- package/build/server/chunks/_server.ts-Cv_OrRuL.js.map +0 -1
- package/build/server/chunks/_server.ts-DRVbgm6k.js.map +0 -1
- package/build/server/chunks/_server.ts-DfajWaqh.js.map +0 -1
- package/build/server/chunks/client-CxCatAKr.js +0 -255
- package/build/server/chunks/client-CxCatAKr.js.map +0 -1
- package/build/server/chunks/error.svelte-BqdwMWdK.js +0 -26
- package/build/server/chunks/error.svelte-BqdwMWdK.js.map +0 -1
- package/build/server/chunks/exports-CJ0Q5XmL.js.map +0 -1
- package/build/server/chunks/index2-DAxIoAO-.js +0 -36
- package/build/server/chunks/index2-DAxIoAO-.js.map +0 -1
- package/build/server/chunks/jsonl-parser-dmZU_Hyu.js +0 -137
- package/build/server/chunks/jsonl-parser-dmZU_Hyu.js.map +0 -1
- package/build/server/chunks/library-apns-BHxLmuIx.js.map +0 -1
- package/build/server/chunks/markdown-Bxrl3cCF.js +0 -1241
- package/build/server/chunks/markdown-Bxrl3cCF.js.map +0 -1
- package/build/server/chunks/pty-manager-C0FhBiVq.js.map +0 -1
- package/build/server/chunks/stores-D0HorpgL.js +0 -36
- package/build/server/chunks/stores-D0HorpgL.js.map +0 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { j as json, b as private_env } from './shared-server-
|
|
2
|
-
import { L as LibraryAPNsService } from './library-apns-
|
|
1
|
+
import { j as json, b as private_env } from './shared-server-sSGG17Df.js';
|
|
2
|
+
import { L as LibraryAPNsService } from './library-apns-BqJbvSKh.js';
|
|
3
3
|
import { c as createPendingRequest } from './pending-requests-D8UiTw7L.js';
|
|
4
|
-
import { v as validateAuth } from './auth-
|
|
4
|
+
import { v as validateAuth } from './auth-DeCdZ83n.js';
|
|
5
5
|
import admin from 'firebase-admin';
|
|
6
|
+
import { t as toErrorMessage } from './error-DDXB3duW.js';
|
|
6
7
|
import '@parse/node-apn';
|
|
7
8
|
import 'crypto';
|
|
8
9
|
|
|
@@ -33,15 +34,15 @@ async function sendFCMNotification(deviceToken, payload) {
|
|
|
33
34
|
},
|
|
34
35
|
data: {
|
|
35
36
|
body: payload.body || payload.message || "",
|
|
36
|
-
category: payload.category
|
|
37
|
-
project: payload.data?.project ?
|
|
38
|
-
requestId: payload.data?.requestId ?
|
|
39
|
-
source: payload.data?.source ?
|
|
37
|
+
category: payload.category ?? (typeof payload.data?.category === "string" ? payload.data.category : ""),
|
|
38
|
+
project: typeof payload.data?.project === "string" ? payload.data.project : "",
|
|
39
|
+
requestId: typeof payload.data?.requestId === "string" ? payload.data.requestId : "",
|
|
40
|
+
source: typeof payload.data?.source === "string" ? payload.data.source : "",
|
|
40
41
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
41
42
|
title: payload.title,
|
|
42
43
|
toolInput: payload.data?.toolInput ? JSON.stringify(payload.data.toolInput) : "",
|
|
43
|
-
toolName: payload.data?.toolName ?
|
|
44
|
-
type: payload.data?.type ?
|
|
44
|
+
toolName: typeof payload.data?.toolName === "string" ? payload.data.toolName : "",
|
|
45
|
+
type: typeof payload.data?.type === "string" ? payload.data.type : ""
|
|
45
46
|
},
|
|
46
47
|
token: deviceToken
|
|
47
48
|
};
|
|
@@ -161,11 +162,25 @@ const POST = async ({ request }) => {
|
|
|
161
162
|
try {
|
|
162
163
|
const apnsClient = getAPNsClient();
|
|
163
164
|
const authError = validateAuth(request);
|
|
164
|
-
if (authError)
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
165
|
+
if (authError) {
|
|
166
|
+
return authError;
|
|
167
|
+
}
|
|
168
|
+
const rawBody = await request.json();
|
|
169
|
+
if (!rawBody || typeof rawBody !== "object" || Array.isArray(rawBody)) {
|
|
170
|
+
return json({ error: "Request body must be a JSON object" }, { status: 400 });
|
|
171
|
+
}
|
|
172
|
+
const body = rawBody;
|
|
173
|
+
const data = body.data;
|
|
174
|
+
const requestDeviceToken = body.deviceToken;
|
|
175
|
+
const message = body.message;
|
|
176
|
+
const title = body.title;
|
|
177
|
+
const skipPush = typeof body.skipPush === "boolean" ? body.skipPush : false;
|
|
178
|
+
const waitForResponse = typeof body.waitForResponse === "boolean" ? body.waitForResponse : false;
|
|
179
|
+
if (!title || typeof title !== "string" || !message || typeof message !== "string") {
|
|
180
|
+
return json({ error: "Title and message are required and must be strings" }, { status: 400 });
|
|
181
|
+
}
|
|
182
|
+
if (requestDeviceToken !== void 0 && typeof requestDeviceToken !== "string") {
|
|
183
|
+
return json({ error: "deviceToken must be a string" }, { status: 400 });
|
|
169
184
|
}
|
|
170
185
|
const requestId = Math.random().toString(36).substring(2, 15);
|
|
171
186
|
const dataRequestId = typeof data?.requestId === "string" ? data.requestId : void 0;
|
|
@@ -173,17 +188,17 @@ const POST = async ({ request }) => {
|
|
|
173
188
|
const shouldSendNotification = intelligentNotificationFilter(title, message, data);
|
|
174
189
|
if (!shouldSendNotification.send) {
|
|
175
190
|
addNotification({
|
|
176
|
-
category: data?.category,
|
|
177
|
-
data,
|
|
191
|
+
category: data?.category ?? null,
|
|
192
|
+
data: data ?? null,
|
|
178
193
|
error: shouldSendNotification.reason,
|
|
179
194
|
id: canonicalRequestId,
|
|
180
195
|
message,
|
|
181
|
-
project: data?.project,
|
|
182
|
-
source: data?.source,
|
|
196
|
+
project: data?.project ?? null,
|
|
197
|
+
source: data?.source ?? null,
|
|
183
198
|
status: "filtered",
|
|
184
199
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
185
200
|
title,
|
|
186
|
-
tool: data?.tool
|
|
201
|
+
tool: data?.tool ?? null
|
|
187
202
|
});
|
|
188
203
|
return json({
|
|
189
204
|
message: "Notification filtered (not sent)",
|
|
@@ -192,6 +207,34 @@ const POST = async ({ request }) => {
|
|
|
192
207
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
193
208
|
});
|
|
194
209
|
}
|
|
210
|
+
if (skipPush) {
|
|
211
|
+
if (waitForResponse) {
|
|
212
|
+
createPendingRequest(canonicalRequestId, {
|
|
213
|
+
sessionId: data?.sessionId || "",
|
|
214
|
+
toolInput: data?.toolInput || {},
|
|
215
|
+
toolName: data?.toolName || ""
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
addNotification({
|
|
219
|
+
category: data?.category ?? null,
|
|
220
|
+
data: data ?? null,
|
|
221
|
+
error: null,
|
|
222
|
+
id: canonicalRequestId,
|
|
223
|
+
message,
|
|
224
|
+
project: data?.project ?? null,
|
|
225
|
+
source: data?.source ?? null,
|
|
226
|
+
status: "skipped",
|
|
227
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
228
|
+
title,
|
|
229
|
+
tool: data?.tool ?? null
|
|
230
|
+
});
|
|
231
|
+
return json({
|
|
232
|
+
message: "Push skipped (WebSocket clients connected)",
|
|
233
|
+
requestId: canonicalRequestId,
|
|
234
|
+
success: true,
|
|
235
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
236
|
+
});
|
|
237
|
+
}
|
|
195
238
|
const payload = {
|
|
196
239
|
badge: 1,
|
|
197
240
|
body: message,
|
|
@@ -218,11 +261,11 @@ const POST = async ({ request }) => {
|
|
|
218
261
|
{ status: 500 }
|
|
219
262
|
);
|
|
220
263
|
}
|
|
221
|
-
const androidToken = (private_env.ANDROID_DEVICE_TOKEN || private_env.DEVICE_TOKEN)?.trim();
|
|
264
|
+
const androidToken = requestDeviceToken?.trim() || (private_env.ANDROID_DEVICE_TOKEN || private_env.DEVICE_TOKEN)?.trim();
|
|
222
265
|
if (!androidToken) {
|
|
223
266
|
return json(
|
|
224
267
|
{
|
|
225
|
-
details: "ANDROID_DEVICE_TOKEN or DEVICE_TOKEN environment variable is missing",
|
|
268
|
+
details: "ANDROID_DEVICE_TOKEN or DEVICE_TOKEN environment variable is missing and no deviceToken in request body",
|
|
226
269
|
error: "No device token configured"
|
|
227
270
|
},
|
|
228
271
|
{ status: 500 }
|
|
@@ -239,16 +282,17 @@ const POST = async ({ request }) => {
|
|
|
239
282
|
});
|
|
240
283
|
}
|
|
241
284
|
addNotification({
|
|
242
|
-
category: data?.category,
|
|
243
|
-
data,
|
|
285
|
+
category: data?.category ?? null,
|
|
286
|
+
data: data ?? null,
|
|
287
|
+
error: null,
|
|
244
288
|
id: canonicalRequestId,
|
|
245
289
|
message,
|
|
246
|
-
project: data?.project,
|
|
247
|
-
source: data?.source,
|
|
290
|
+
project: data?.project ?? null,
|
|
291
|
+
source: data?.source ?? null,
|
|
248
292
|
status: "sent",
|
|
249
293
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
250
294
|
title,
|
|
251
|
-
tool: data?.tool
|
|
295
|
+
tool: data?.tool ?? null
|
|
252
296
|
});
|
|
253
297
|
return json({
|
|
254
298
|
message: "Notification sent successfully",
|
|
@@ -260,17 +304,17 @@ const POST = async ({ request }) => {
|
|
|
260
304
|
} else {
|
|
261
305
|
console.error(`[notify] FCM delivery failed: ${fcmResult.error}`);
|
|
262
306
|
addNotification({
|
|
263
|
-
category: data?.category,
|
|
264
|
-
data,
|
|
265
|
-
error: fcmResult.error,
|
|
307
|
+
category: data?.category ?? null,
|
|
308
|
+
data: data ?? null,
|
|
309
|
+
error: fcmResult.error ?? null,
|
|
266
310
|
id: canonicalRequestId,
|
|
267
311
|
message,
|
|
268
|
-
project: data?.project,
|
|
269
|
-
source: data?.source,
|
|
312
|
+
project: data?.project ?? null,
|
|
313
|
+
source: data?.source ?? null,
|
|
270
314
|
status: "failed",
|
|
271
315
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
272
316
|
title,
|
|
273
|
-
tool: data?.tool
|
|
317
|
+
tool: data?.tool ?? null
|
|
274
318
|
});
|
|
275
319
|
return json(
|
|
276
320
|
{
|
|
@@ -292,11 +336,11 @@ const POST = async ({ request }) => {
|
|
|
292
336
|
{ status: 500 }
|
|
293
337
|
);
|
|
294
338
|
}
|
|
295
|
-
const deviceToken = private_env.DEVICE_TOKEN?.trim();
|
|
339
|
+
const deviceToken = requestDeviceToken?.trim() || private_env.DEVICE_TOKEN?.trim();
|
|
296
340
|
if (!deviceToken) {
|
|
297
341
|
return json(
|
|
298
342
|
{
|
|
299
|
-
details: "DEVICE_TOKEN environment variable is missing",
|
|
343
|
+
details: "DEVICE_TOKEN environment variable is missing and no deviceToken in request body",
|
|
300
344
|
error: "No device token configured"
|
|
301
345
|
},
|
|
302
346
|
{ status: 500 }
|
|
@@ -313,16 +357,17 @@ const POST = async ({ request }) => {
|
|
|
313
357
|
});
|
|
314
358
|
}
|
|
315
359
|
addNotification({
|
|
316
|
-
category: data?.category,
|
|
317
|
-
data,
|
|
360
|
+
category: data?.category ?? null,
|
|
361
|
+
data: data ?? null,
|
|
362
|
+
error: null,
|
|
318
363
|
id: canonicalRequestId,
|
|
319
364
|
message,
|
|
320
|
-
project: data?.project,
|
|
321
|
-
source: data?.source,
|
|
365
|
+
project: data?.project ?? null,
|
|
366
|
+
source: data?.source ?? null,
|
|
322
367
|
status: "sent",
|
|
323
368
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
324
369
|
title,
|
|
325
|
-
tool: data?.tool
|
|
370
|
+
tool: data?.tool ?? null
|
|
326
371
|
});
|
|
327
372
|
return json({
|
|
328
373
|
message: "Notification sent successfully",
|
|
@@ -332,24 +377,24 @@ const POST = async ({ request }) => {
|
|
|
332
377
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
333
378
|
});
|
|
334
379
|
} catch (notificationError) {
|
|
335
|
-
const
|
|
336
|
-
console.error(`[notify] APNs delivery failed: ${
|
|
380
|
+
const notifErrMsg = toErrorMessage(notificationError);
|
|
381
|
+
console.error(`[notify] APNs delivery failed: ${notifErrMsg}`);
|
|
337
382
|
addNotification({
|
|
338
|
-
category: data?.category,
|
|
339
|
-
data,
|
|
340
|
-
error:
|
|
383
|
+
category: data?.category ?? null,
|
|
384
|
+
data: data ?? null,
|
|
385
|
+
error: notifErrMsg,
|
|
341
386
|
id: canonicalRequestId,
|
|
342
387
|
message,
|
|
343
|
-
project: data?.project,
|
|
344
|
-
source: data?.source,
|
|
388
|
+
project: data?.project ?? null,
|
|
389
|
+
source: data?.source ?? null,
|
|
345
390
|
status: "failed",
|
|
346
391
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
347
392
|
title,
|
|
348
|
-
tool: data?.tool
|
|
393
|
+
tool: data?.tool ?? null
|
|
349
394
|
});
|
|
350
395
|
return json(
|
|
351
396
|
{
|
|
352
|
-
details:
|
|
397
|
+
details: notifErrMsg,
|
|
353
398
|
error: "Failed to send notification",
|
|
354
399
|
requestId: canonicalRequestId,
|
|
355
400
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
@@ -359,11 +404,10 @@ const POST = async ({ request }) => {
|
|
|
359
404
|
}
|
|
360
405
|
}
|
|
361
406
|
} catch (error) {
|
|
362
|
-
|
|
363
|
-
console.error("Notification error:", err);
|
|
407
|
+
console.error("Notification error:", error);
|
|
364
408
|
return json(
|
|
365
409
|
{
|
|
366
|
-
details:
|
|
410
|
+
details: toErrorMessage(error),
|
|
367
411
|
error: "Failed to send notification",
|
|
368
412
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
369
413
|
},
|
|
@@ -373,7 +417,9 @@ const POST = async ({ request }) => {
|
|
|
373
417
|
};
|
|
374
418
|
const GET = ({ request, url }) => {
|
|
375
419
|
const authError = validateAuth(request);
|
|
376
|
-
if (authError)
|
|
420
|
+
if (authError) {
|
|
421
|
+
return authError;
|
|
422
|
+
}
|
|
377
423
|
const limit = parseInt(url.searchParams.get("limit") || "50");
|
|
378
424
|
const notifications = getNotifications(limit);
|
|
379
425
|
return json({
|
|
@@ -384,4 +430,4 @@ const GET = ({ request, url }) => {
|
|
|
384
430
|
};
|
|
385
431
|
|
|
386
432
|
export { GET, POST };
|
|
387
|
-
//# sourceMappingURL=_server.ts-
|
|
433
|
+
//# sourceMappingURL=_server.ts-Ch-6iOHp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-Ch-6iOHp.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/notify/_server.ts.js"],"sourcesContent":["import { b as private_env } from \"../../../../chunks/shared-server.js\";\nimport { L as LibraryAPNsService } from \"../../../../chunks/library-apns.js\";\nimport { c as createPendingRequest } from \"../../../../chunks/pending-requests.js\";\nimport { v as validateAuth } from \"../../../../chunks/auth.js\";\nimport admin from \"firebase-admin\";\nimport { t as toErrorMessage } from \"../../../../chunks/error.js\";\nimport { json } from \"@sveltejs/kit\";\nconst MAX_HISTORY = 100;\nconst history = [];\nfunction addNotification(record) {\n history.unshift(record);\n if (history.length > MAX_HISTORY) {\n history.length = MAX_HISTORY;\n }\n}\nfunction getNotifications(limit = 50) {\n return history.slice(0, limit);\n}\nlet app = null;\nfunction isFCMConfigured() {\n return !!(process.env.FCM_PROJECT_ID && process.env.FCM_CLIENT_EMAIL && process.env.FCM_PRIVATE_KEY);\n}\nasync function sendFCMNotification(deviceToken, payload) {\n try {\n const fcmApp = getApp();\n const message = {\n android: {\n priority: \"high\",\n // Ensures delivery even in Doze mode\n ttl: 3e5\n // 5 minutes TTL (matches pending request expiry)\n },\n data: {\n body: payload.body || payload.message || \"\",\n category: payload.category ?? (typeof payload.data?.category === \"string\" ? payload.data.category : \"\"),\n project: typeof payload.data?.project === \"string\" ? payload.data.project : \"\",\n requestId: typeof payload.data?.requestId === \"string\" ? payload.data.requestId : \"\",\n source: typeof payload.data?.source === \"string\" ? payload.data.source : \"\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n title: payload.title,\n toolInput: payload.data?.toolInput ? JSON.stringify(payload.data.toolInput) : \"\",\n toolName: typeof payload.data?.toolName === \"string\" ? payload.data.toolName : \"\",\n type: typeof payload.data?.type === \"string\" ? payload.data.type : \"\"\n },\n token: deviceToken\n };\n const messageId = await admin.messaging(fcmApp).send(message);\n return { messageId, success: true };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(\"[FCM] Send failed:\", errorMessage);\n return { error: errorMessage, success: false };\n }\n}\nfunction getApp() {\n if (!app) {\n const projectId = process.env.FCM_PROJECT_ID;\n const clientEmail = process.env.FCM_CLIENT_EMAIL;\n const privateKey = process.env.FCM_PRIVATE_KEY?.replace(/\\\\n/g, \"\\n\");\n if (!projectId || !clientEmail || !privateKey) {\n throw new Error(\n \"FCM not configured: missing FCM_PROJECT_ID, FCM_CLIENT_EMAIL, or FCM_PRIVATE_KEY\"\n );\n }\n app = admin.initializeApp({\n credential: admin.credential.cert({ clientEmail, privateKey, projectId })\n });\n }\n return app;\n}\nlet apnsSingleton = null;\nfunction getAPNsClient() {\n if (!apnsSingleton) {\n apnsSingleton = new LibraryAPNsService();\n }\n return apnsSingleton;\n}\nconst notificationCache = /* @__PURE__ */ new Map();\nconst DEDUP_WINDOW = 1e4;\nfunction intelligentNotificationFilter(title, message, data) {\n const source = data?.source || \"unknown\";\n if (isDuplicateNotification(title, message, data)) {\n return {\n reason: \"Duplicate notification within 10-second window\",\n send: false\n };\n }\n if (source === \"smart-completion-detector\" || source === \"shooter-completion-detector\") {\n return {\n reason: \"Smart completion detector - completion or intervention needed\",\n send: true\n };\n }\n if (source === \"stop-hook\") {\n return {\n reason: \"Stop hook completion notification - session finished\",\n send: true\n };\n }\n const spamPatterns = [\n /PreToolUse/i,\n // Any PreToolUse notifications\n /PostToolUse/i,\n // Any PostToolUse notifications\n /^(Read|Write|Edit|Bash)\\s+Starting\\s*\\|\\s*\\w+$/i,\n // Only basic tool starting patterns\n /^unknown\\s*\\|\\s*\\w+$/i\n // Only \"unknown | projectname\" exactly\n ];\n const isSpam = spamPatterns.some((pattern) => pattern.test(title) || pattern.test(message));\n if (isSpam) {\n return {\n reason: \"Filtered spam notification from old hook system\",\n send: false\n };\n }\n const importantPatterns = [\n /session complete/i,\n /intervention needed/i,\n /error/i,\n /failed/i,\n /blocked/i,\n /attention/i\n ];\n const isImportant = importantPatterns.some(\n (pattern) => pattern.test(title) || pattern.test(message)\n );\n if (isImportant) {\n return {\n reason: \"Important notification - completion or intervention\",\n send: true\n };\n }\n return {\n reason: \"General notification - allowing by default\",\n send: true\n };\n}\nfunction isDuplicateNotification(title, message, data) {\n const key = `${title}|${message}|${data?.category || \"unknown\"}`;\n const now = Date.now();\n if (notificationCache.has(key)) {\n const lastSent = notificationCache.get(key);\n if (now - lastSent < DEDUP_WINDOW) {\n return true;\n }\n }\n for (const [k, v] of notificationCache.entries()) {\n if (now - v > DEDUP_WINDOW) {\n notificationCache.delete(k);\n }\n }\n return false;\n}\nfunction recordNotification(title, message, data) {\n const key = `${title}|${message}|${data?.category || \"unknown\"}`;\n notificationCache.set(key, Date.now());\n}\nconst POST = async ({ request }) => {\n try {\n const apnsClient = getAPNsClient();\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n const rawBody = await request.json();\n if (!rawBody || typeof rawBody !== \"object\" || Array.isArray(rawBody)) {\n return json({ error: \"Request body must be a JSON object\" }, { status: 400 });\n }\n const body = rawBody;\n const data = body.data;\n const requestDeviceToken = body.deviceToken;\n const message = body.message;\n const title = body.title;\n const skipPush = typeof body.skipPush === \"boolean\" ? body.skipPush : false;\n const waitForResponse = typeof body.waitForResponse === \"boolean\" ? body.waitForResponse : false;\n if (!title || typeof title !== \"string\" || !message || typeof message !== \"string\") {\n return json({ error: \"Title and message are required and must be strings\" }, { status: 400 });\n }\n if (requestDeviceToken !== void 0 && typeof requestDeviceToken !== \"string\") {\n return json({ error: \"deviceToken must be a string\" }, { status: 400 });\n }\n const requestId = Math.random().toString(36).substring(2, 15);\n const dataRequestId = typeof data?.requestId === \"string\" ? data.requestId : void 0;\n const canonicalRequestId = dataRequestId || requestId;\n const shouldSendNotification = intelligentNotificationFilter(title, message, data);\n if (!shouldSendNotification.send) {\n addNotification({\n category: data?.category ?? null,\n data: data ?? null,\n error: shouldSendNotification.reason,\n id: canonicalRequestId,\n message,\n project: data?.project ?? null,\n source: data?.source ?? null,\n status: \"filtered\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n title,\n tool: data?.tool ?? null\n });\n return json({\n message: \"Notification filtered (not sent)\",\n reason: shouldSendNotification.reason,\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n }\n if (skipPush) {\n if (waitForResponse) {\n createPendingRequest(canonicalRequestId, {\n sessionId: data?.sessionId || \"\",\n toolInput: data?.toolInput || {},\n toolName: data?.toolName || \"\"\n });\n }\n addNotification({\n category: data?.category ?? null,\n data: data ?? null,\n error: null,\n id: canonicalRequestId,\n message,\n project: data?.project ?? null,\n source: data?.source ?? null,\n status: \"skipped\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n title,\n tool: data?.tool ?? null\n });\n return json({\n message: \"Push skipped (WebSocket clients connected)\",\n requestId: canonicalRequestId,\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n }\n const payload = {\n badge: 1,\n body: message,\n category: waitForResponse ? \"CLAUDE_PERMISSION\" : void 0,\n data: {\n ...data,\n requestId: canonicalRequestId,\n source: \"modern-apns-api\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n waitForResponse: waitForResponse || false\n },\n message: null,\n sound: \"default\",\n title\n };\n const platform = private_env.DEVICE_PLATFORM || \"ios\";\n if (platform === \"android\") {\n if (!isFCMConfigured()) {\n return json(\n {\n details: \"Missing FCM_PROJECT_ID, FCM_CLIENT_EMAIL, or FCM_PRIVATE_KEY environment variables\",\n error: \"FCM not configured\"\n },\n { status: 500 }\n );\n }\n const androidToken = requestDeviceToken?.trim() || (private_env.ANDROID_DEVICE_TOKEN || private_env.DEVICE_TOKEN)?.trim();\n if (!androidToken) {\n return json(\n {\n details: \"ANDROID_DEVICE_TOKEN or DEVICE_TOKEN environment variable is missing and no deviceToken in request body\",\n error: \"No device token configured\"\n },\n { status: 500 }\n );\n }\n const fcmResult = await sendFCMNotification(androidToken, payload);\n if (fcmResult.success) {\n recordNotification(title, message, data);\n if (waitForResponse) {\n createPendingRequest(canonicalRequestId, {\n sessionId: data?.sessionId || \"\",\n toolInput: data?.toolInput || {},\n toolName: data?.toolName || \"\"\n });\n }\n addNotification({\n category: data?.category ?? null,\n data: data ?? null,\n error: null,\n id: canonicalRequestId,\n message,\n project: data?.project ?? null,\n source: data?.source ?? null,\n status: \"sent\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n title,\n tool: data?.tool ?? null\n });\n return json({\n message: \"Notification sent successfully\",\n requestId: canonicalRequestId,\n result: { messageId: fcmResult.messageId },\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n } else {\n console.error(`[notify] FCM delivery failed: ${fcmResult.error}`);\n addNotification({\n category: data?.category ?? null,\n data: data ?? null,\n error: fcmResult.error ?? null,\n id: canonicalRequestId,\n message,\n project: data?.project ?? null,\n source: data?.source ?? null,\n status: \"failed\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n title,\n tool: data?.tool ?? null\n });\n return json(\n {\n details: fcmResult.error,\n error: \"Failed to send notification\",\n requestId: canonicalRequestId,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n },\n { status: 500 }\n );\n }\n } else {\n if (!apnsClient.isConfigured()) {\n return json(\n {\n details: \"Missing APNS_KEY, APNS_KEY_ID, or APNS_TEAM_ID environment variables\",\n error: \"APNs client not configured\"\n },\n { status: 500 }\n );\n }\n const deviceToken = requestDeviceToken?.trim() || private_env.DEVICE_TOKEN?.trim();\n if (!deviceToken) {\n return json(\n {\n details: \"DEVICE_TOKEN environment variable is missing and no deviceToken in request body\",\n error: \"No device token configured\"\n },\n { status: 500 }\n );\n }\n try {\n const result = await apnsClient.sendNotification(deviceToken, payload);\n recordNotification(title, message, data);\n if (waitForResponse) {\n createPendingRequest(canonicalRequestId, {\n sessionId: data?.sessionId || \"\",\n toolInput: data?.toolInput || {},\n toolName: data?.toolName || \"\"\n });\n }\n addNotification({\n category: data?.category ?? null,\n data: data ?? null,\n error: null,\n id: canonicalRequestId,\n message,\n project: data?.project ?? null,\n source: data?.source ?? null,\n status: \"sent\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n title,\n tool: data?.tool ?? null\n });\n return json({\n message: \"Notification sent successfully\",\n requestId: canonicalRequestId,\n result,\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n } catch (notificationError) {\n const notifErrMsg = toErrorMessage(notificationError);\n console.error(`[notify] APNs delivery failed: ${notifErrMsg}`);\n addNotification({\n category: data?.category ?? null,\n data: data ?? null,\n error: notifErrMsg,\n id: canonicalRequestId,\n message,\n project: data?.project ?? null,\n source: data?.source ?? null,\n status: \"failed\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n title,\n tool: data?.tool ?? null\n });\n return json(\n {\n details: notifErrMsg,\n error: \"Failed to send notification\",\n requestId: canonicalRequestId,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n },\n { status: 500 }\n );\n }\n }\n } catch (error) {\n console.error(\"Notification error:\", error);\n return json(\n {\n details: toErrorMessage(error),\n error: \"Failed to send notification\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n },\n { status: 500 }\n );\n }\n};\nconst GET = ({ request, url }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n const limit = parseInt(url.searchParams.get(\"limit\") || \"50\");\n const notifications = getNotifications(limit);\n return json({\n count: notifications.length,\n notifications,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n};\nexport {\n GET,\n POST\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { b as private_env, j as json } from './shared-server-
|
|
2
|
-
import { v as validateAuth } from './auth-
|
|
1
|
+
import { b as private_env, j as json } from './shared-server-sSGG17Df.js';
|
|
2
|
+
import { v as validateAuth } from './auth-DeCdZ83n.js';
|
|
3
|
+
import { t as toErrorMessage } from './error-DDXB3duW.js';
|
|
3
4
|
import QRCode from 'qrcode';
|
|
4
5
|
import 'crypto';
|
|
5
6
|
|
|
6
|
-
const GET = async ({ request }) => {
|
|
7
|
+
const GET = async ({ request, url }) => {
|
|
7
8
|
const authError = validateAuth(request);
|
|
8
9
|
if (authError) {
|
|
9
10
|
return authError;
|
|
@@ -12,9 +13,7 @@ const GET = async ({ request }) => {
|
|
|
12
13
|
if (!apiKey) {
|
|
13
14
|
return json({ error: "API_KEY not configured on server" }, { status: 500 });
|
|
14
15
|
}
|
|
15
|
-
const
|
|
16
|
-
const host = request.headers.get("x-forwarded-host") || request.headers.get("host") || "localhost:3000";
|
|
17
|
-
const serverUrl = `${proto}://${host}`;
|
|
16
|
+
const serverUrl = private_env.ORIGIN?.trim() || url.origin;
|
|
18
17
|
const configPayload = JSON.stringify({ apiKey, serverUrl });
|
|
19
18
|
try {
|
|
20
19
|
const dataUrl = await QRCode.toDataURL(configPayload, {
|
|
@@ -29,11 +28,10 @@ const GET = async ({ request }) => {
|
|
|
29
28
|
});
|
|
30
29
|
return json({ dataUrl, serverUrl });
|
|
31
30
|
} catch (error) {
|
|
32
|
-
|
|
33
|
-
console.error("[qr-config] QR generation failed:", err.message);
|
|
31
|
+
console.error("[qr-config] QR generation failed:", toErrorMessage(error));
|
|
34
32
|
return json({ error: "Failed to generate QR code" }, { status: 500 });
|
|
35
33
|
}
|
|
36
34
|
};
|
|
37
35
|
|
|
38
36
|
export { GET };
|
|
39
|
-
//# sourceMappingURL=_server.ts-
|
|
37
|
+
//# sourceMappingURL=_server.ts-DV8zTCF9.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-DV8zTCF9.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/qr-config/_server.ts.js"],"sourcesContent":["import { b as private_env } from \"../../../../chunks/shared-server.js\";\nimport { v as validateAuth } from \"../../../../chunks/auth.js\";\nimport { t as toErrorMessage } from \"../../../../chunks/error.js\";\nimport { json } from \"@sveltejs/kit\";\nimport QRCode from \"qrcode\";\nconst GET = async ({ request, url }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n const apiKey = private_env.API_KEY?.trim();\n if (!apiKey) {\n return json({ error: \"API_KEY not configured on server\" }, { status: 500 });\n }\n const serverUrl = private_env.ORIGIN?.trim() || url.origin;\n const configPayload = JSON.stringify({ apiKey, serverUrl });\n try {\n const dataUrl = await QRCode.toDataURL(configPayload, {\n color: {\n dark: \"#ededed\",\n light: \"#0a0a0a\"\n },\n errorCorrectionLevel: \"M\",\n margin: 2,\n type: \"image/png\",\n width: 280\n });\n return json({ dataUrl, serverUrl });\n } catch (error) {\n console.error(\"[qr-config] QR generation failed:\", toErrorMessage(error));\n return json({ error: \"Failed to generate QR code\" }, { status: 500 });\n }\n};\nexport {\n GET\n};\n"],"names":[],"mappings":";;;;;;AAKK,MAAC,GAAG,GAAG,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK;AACxC,EAAE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;AACzC,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,OAAO,SAAS;AACpB,EAAE;AACF,EAAE,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE;AAC5C,EAAE,IAAI,CAAC,MAAM,EAAE;AACf,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,kCAAkC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC/E,EAAE;AACF,EAAE,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM;AAC5D,EAAE,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC7D,EAAE,IAAI;AACN,IAAI,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE;AAC1D,MAAM,KAAK,EAAE;AACb,QAAQ,IAAI,EAAE,SAAS;AACvB,QAAQ,KAAK,EAAE;AACf,OAAO;AACP,MAAM,oBAAoB,EAAE,GAAG;AAC/B,MAAM,MAAM,EAAE,CAAC;AACf,MAAM,IAAI,EAAE,WAAW;AACvB,MAAM,KAAK,EAAE;AACb,KAAK,CAAC;AACN,IAAI,OAAO,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACvC,EAAE,CAAC,CAAC,OAAO,KAAK,EAAE;AAClB,IAAI,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;AAC7E,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzE,EAAE;AACF;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { j as json, b as private_env } from './shared-server-
|
|
2
|
-
import { v as validateAuth } from './auth-
|
|
1
|
+
import { j as json, b as private_env } from './shared-server-sSGG17Df.js';
|
|
2
|
+
import { v as validateAuth } from './auth-DeCdZ83n.js';
|
|
3
3
|
import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
|
|
4
4
|
import { homedir } from 'os';
|
|
5
5
|
import { join } from 'path';
|
|
@@ -10,7 +10,11 @@ const TOKENS_FILE = join(TOKENS_DIR, "device-tokens.json");
|
|
|
10
10
|
function readTokens() {
|
|
11
11
|
try {
|
|
12
12
|
if (existsSync(TOKENS_FILE)) {
|
|
13
|
-
|
|
13
|
+
const parsed = JSON.parse(readFileSync(TOKENS_FILE, "utf-8"));
|
|
14
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
15
|
+
return {};
|
|
16
|
+
}
|
|
17
|
+
return parsed;
|
|
14
18
|
}
|
|
15
19
|
} catch {
|
|
16
20
|
}
|
|
@@ -18,16 +22,22 @@ function readTokens() {
|
|
|
18
22
|
}
|
|
19
23
|
function writeTokens(tokens) {
|
|
20
24
|
if (!existsSync(TOKENS_DIR)) {
|
|
21
|
-
mkdirSync(TOKENS_DIR, { recursive: true });
|
|
25
|
+
mkdirSync(TOKENS_DIR, { mode: 448, recursive: true });
|
|
22
26
|
}
|
|
23
|
-
writeFileSync(TOKENS_FILE, JSON.stringify(tokens, null, 2), "utf-8");
|
|
27
|
+
writeFileSync(TOKENS_FILE, JSON.stringify(tokens, null, 2), { encoding: "utf-8", mode: 384 });
|
|
24
28
|
}
|
|
25
29
|
const POST = async ({ request }) => {
|
|
26
30
|
const authError = validateAuth(request);
|
|
27
|
-
if (authError)
|
|
31
|
+
if (authError) {
|
|
32
|
+
return authError;
|
|
33
|
+
}
|
|
28
34
|
let body;
|
|
29
35
|
try {
|
|
30
|
-
|
|
36
|
+
const parsed = await request.json();
|
|
37
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
38
|
+
return json({ error: "Invalid JSON body: expected an object" }, { status: 400 });
|
|
39
|
+
}
|
|
40
|
+
body = parsed;
|
|
31
41
|
} catch {
|
|
32
42
|
return json({ error: "Invalid JSON body" }, { status: 400 });
|
|
33
43
|
}
|
|
@@ -38,10 +48,11 @@ const POST = async ({ request }) => {
|
|
|
38
48
|
{ status: 400 }
|
|
39
49
|
);
|
|
40
50
|
}
|
|
41
|
-
const
|
|
42
|
-
if (!
|
|
51
|
+
const rawToken = body.deviceToken || body.token;
|
|
52
|
+
if (!rawToken || typeof rawToken !== "string" || rawToken.trim().length === 0) {
|
|
43
53
|
return json({ error: "Missing device token (deviceToken or token)" }, { status: 400 });
|
|
44
54
|
}
|
|
55
|
+
const token = rawToken.trim();
|
|
45
56
|
const tokens = readTokens();
|
|
46
57
|
tokens[platform] = token;
|
|
47
58
|
writeTokens(tokens);
|
|
@@ -57,4 +68,4 @@ const POST = async ({ request }) => {
|
|
|
57
68
|
};
|
|
58
69
|
|
|
59
70
|
export { POST };
|
|
60
|
-
//# sourceMappingURL=_server.ts-
|
|
71
|
+
//# sourceMappingURL=_server.ts-DYvb9ijZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-DYvb9ijZ.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/device-token/_server.ts.js"],"sourcesContent":["import { b as private_env } from \"../../../../chunks/shared-server.js\";\nimport { v as validateAuth } from \"../../../../chunks/auth.js\";\nimport { json } from \"@sveltejs/kit\";\nimport { existsSync, readFileSync, mkdirSync, writeFileSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\nconst TOKENS_DIR = join(homedir(), \".shooter\");\nconst TOKENS_FILE = join(TOKENS_DIR, \"device-tokens.json\");\nfunction readTokens() {\n try {\n if (existsSync(TOKENS_FILE)) {\n const parsed = JSON.parse(readFileSync(TOKENS_FILE, \"utf-8\"));\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return {};\n }\n return parsed;\n }\n } catch {\n }\n return {};\n}\nfunction writeTokens(tokens) {\n if (!existsSync(TOKENS_DIR)) {\n mkdirSync(TOKENS_DIR, { mode: 448, recursive: true });\n }\n writeFileSync(TOKENS_FILE, JSON.stringify(tokens, null, 2), { encoding: \"utf-8\", mode: 384 });\n}\nconst POST = async ({ request }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n let body;\n try {\n const parsed = await request.json();\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return json({ error: \"Invalid JSON body: expected an object\" }, { status: 400 });\n }\n body = parsed;\n } catch {\n return json({ error: \"Invalid JSON body\" }, { status: 400 });\n }\n const platform = body.platform;\n if (!platform || platform !== \"ios\" && platform !== \"android\") {\n return json(\n { error: 'Missing or invalid platform (must be \"ios\" or \"android\")' },\n { status: 400 }\n );\n }\n const rawToken = body.deviceToken || body.token;\n if (!rawToken || typeof rawToken !== \"string\" || rawToken.trim().length === 0) {\n return json({ error: \"Missing device token (deviceToken or token)\" }, { status: 400 });\n }\n const token = rawToken.trim();\n const tokens = readTokens();\n tokens[platform] = token;\n writeTokens(tokens);\n if (platform === \"ios\") {\n private_env.DEVICE_TOKEN = token;\n }\n console.log(`[device-token] Registered ${platform} token (length: ${token.length})`);\n return json({\n platform,\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n};\nexport {\n POST\n};\n"],"names":[],"mappings":";;;;;;;AAMA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC;AAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC;AAC1D,SAAS,UAAU,GAAG;AACtB,EAAE,IAAI;AACN,IAAI,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE;AACjC,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACnE,MAAM,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC1E,QAAQ,OAAO,EAAE;AACjB,MAAM;AACN,MAAM,OAAO,MAAM;AACnB,IAAI;AACJ,EAAE,CAAC,CAAC,MAAM;AACV,EAAE;AACF,EAAE,OAAO,EAAE;AACX;AACA,SAAS,WAAW,CAAC,MAAM,EAAE;AAC7B,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;AAC/B,IAAI,SAAS,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACzD,EAAE;AACF,EAAE,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC/F;AACK,MAAC,IAAI,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK;AACpC,EAAE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;AACzC,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,OAAO,SAAS;AACpB,EAAE;AACF,EAAE,IAAI,IAAI;AACV,EAAE,IAAI;AACN,IAAI,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE;AACvC,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACxE,MAAM,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,uCAAuC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACtF,IAAI;AACJ,IAAI,IAAI,GAAG,MAAM;AACjB,EAAE,CAAC,CAAC,MAAM;AACV,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAChE,EAAE;AACF,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAChC,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,SAAS,EAAE;AACjE,IAAI,OAAO,IAAI;AACf,MAAM,EAAE,KAAK,EAAE,0DAA0D,EAAE;AAC3E,MAAM,EAAE,MAAM,EAAE,GAAG;AACnB,KAAK;AACL,EAAE;AACF,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK;AACjD,EAAE,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AACjF,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,6CAA6C,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC1F,EAAE;AACF,EAAE,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE;AAC/B,EAAE,MAAM,MAAM,GAAG,UAAU,EAAE;AAC7B,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK;AAC1B,EAAE,WAAW,CAAC,MAAM,CAAC;AACrB,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,WAAW,CAAC,YAAY,GAAG,KAAK;AACpC,EAAE;AACF,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,0BAA0B,EAAE,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtF,EAAE,OAAO,IAAI,CAAC;AACd,IAAI,QAAQ;AACZ,IAAI,OAAO,EAAE,IAAI;AACjB,IAAI,SAAS,EAAE,iBAAiB,IAAI,IAAI,EAAE,EAAE,WAAW;AACvD,GAAG,CAAC;AACJ;;;;"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { b as private_env, j as json } from './shared-server-sSGG17Df.js';
|
|
2
|
+
import { v as validateAuth } from './auth-DeCdZ83n.js';
|
|
3
|
+
import 'crypto';
|
|
4
|
+
|
|
5
|
+
const GET = ({ request, url }) => {
|
|
6
|
+
const wantsDetails = url.searchParams.get("details") === "true";
|
|
7
|
+
if (wantsDetails) {
|
|
8
|
+
const authError = validateAuth(request);
|
|
9
|
+
if (authError) {
|
|
10
|
+
return authError;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
const hasProjectId = !!private_env.FCM_PROJECT_ID?.trim();
|
|
14
|
+
const hasClientEmail = !!private_env.FCM_CLIENT_EMAIL?.trim();
|
|
15
|
+
const hasPrivateKey = !!private_env.FCM_PRIVATE_KEY?.trim();
|
|
16
|
+
const checks = {
|
|
17
|
+
hasApiKey: !!private_env.API_KEY?.trim(),
|
|
18
|
+
hasAPNsConfig: !!(private_env.APNS_KEY_ID?.trim() && private_env.APNS_TEAM_ID?.trim() && private_env.APNS_KEY?.trim()),
|
|
19
|
+
hasBundleId: !!private_env.APNS_BUNDLE_ID?.trim(),
|
|
20
|
+
hasDeviceToken: !!private_env.DEVICE_TOKEN?.trim(),
|
|
21
|
+
hasFCMConfig: hasProjectId && hasClientEmail && hasPrivateKey
|
|
22
|
+
};
|
|
23
|
+
const fcm = {
|
|
24
|
+
configured: hasProjectId && hasClientEmail && hasPrivateKey,
|
|
25
|
+
hasClientEmail,
|
|
26
|
+
hasPrivateKey,
|
|
27
|
+
hasProjectId
|
|
28
|
+
};
|
|
29
|
+
const configuration = {
|
|
30
|
+
apnsKeyId: private_env.APNS_KEY_ID ? `${private_env.APNS_KEY_ID.substring(0, 4)}...` : "",
|
|
31
|
+
bundleId: private_env.APNS_BUNDLE_ID || "",
|
|
32
|
+
deviceTokenLength: private_env.DEVICE_TOKEN ? private_env.DEVICE_TOKEN.length : 0,
|
|
33
|
+
fcm,
|
|
34
|
+
production: private_env.APNS_PRODUCTION === "true"
|
|
35
|
+
};
|
|
36
|
+
const warnings = [];
|
|
37
|
+
if (!checks.hasAPNsConfig || !checks.hasBundleId) {
|
|
38
|
+
warnings.push("APNs not configured — iOS push notifications disabled");
|
|
39
|
+
}
|
|
40
|
+
if (!checks.hasDeviceToken) {
|
|
41
|
+
warnings.push("No device token set — push notifications have no target");
|
|
42
|
+
}
|
|
43
|
+
if (!checks.hasFCMConfig) {
|
|
44
|
+
warnings.push("FCM not configured — Android push notifications disabled");
|
|
45
|
+
}
|
|
46
|
+
const health = {
|
|
47
|
+
checks,
|
|
48
|
+
configuration,
|
|
49
|
+
environment: private_env.NODE_ENV || "development",
|
|
50
|
+
status: "healthy",
|
|
51
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
52
|
+
version: "1.1.0",
|
|
53
|
+
warnings
|
|
54
|
+
};
|
|
55
|
+
if (!wantsDetails) {
|
|
56
|
+
return json({ status: health.status, timestamp: health.timestamp, warnings: health.warnings });
|
|
57
|
+
}
|
|
58
|
+
return json(health);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export { GET };
|
|
62
|
+
//# sourceMappingURL=_server.ts-DhTrdlWH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-DhTrdlWH.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/health/_server.ts.js"],"sourcesContent":["import { b as private_env } from \"../../../../chunks/shared-server.js\";\nimport { v as validateAuth } from \"../../../../chunks/auth.js\";\nimport { json } from \"@sveltejs/kit\";\nconst GET = ({ request, url }) => {\n const wantsDetails = url.searchParams.get(\"details\") === \"true\";\n if (wantsDetails) {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n }\n const hasProjectId = !!private_env.FCM_PROJECT_ID?.trim();\n const hasClientEmail = !!private_env.FCM_CLIENT_EMAIL?.trim();\n const hasPrivateKey = !!private_env.FCM_PRIVATE_KEY?.trim();\n const checks = {\n hasApiKey: !!private_env.API_KEY?.trim(),\n hasAPNsConfig: !!(private_env.APNS_KEY_ID?.trim() && private_env.APNS_TEAM_ID?.trim() && private_env.APNS_KEY?.trim()),\n hasBundleId: !!private_env.APNS_BUNDLE_ID?.trim(),\n hasDeviceToken: !!private_env.DEVICE_TOKEN?.trim(),\n hasFCMConfig: hasProjectId && hasClientEmail && hasPrivateKey\n };\n const fcm = {\n configured: hasProjectId && hasClientEmail && hasPrivateKey,\n hasClientEmail,\n hasPrivateKey,\n hasProjectId\n };\n const configuration = {\n apnsKeyId: private_env.APNS_KEY_ID ? `${private_env.APNS_KEY_ID.substring(0, 4)}...` : \"\",\n bundleId: private_env.APNS_BUNDLE_ID || \"\",\n deviceTokenLength: private_env.DEVICE_TOKEN ? private_env.DEVICE_TOKEN.length : 0,\n fcm,\n production: private_env.APNS_PRODUCTION === \"true\"\n };\n const warnings = [];\n if (!checks.hasAPNsConfig || !checks.hasBundleId) {\n warnings.push(\"APNs not configured — iOS push notifications disabled\");\n }\n if (!checks.hasDeviceToken) {\n warnings.push(\"No device token set — push notifications have no target\");\n }\n if (!checks.hasFCMConfig) {\n warnings.push(\"FCM not configured — Android push notifications disabled\");\n }\n const health = {\n checks,\n configuration,\n environment: private_env.NODE_ENV || \"development\",\n status: \"healthy\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n version: \"1.1.0\",\n warnings\n };\n if (!wantsDetails) {\n return json({ status: health.status, timestamp: health.timestamp, warnings: health.warnings });\n }\n return json(health);\n};\nexport {\n GET\n};\n"],"names":[],"mappings":"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"}
|