@juspay/shooter 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/hooks/notifier.cjs +1431 -0
- package/.claude/settings.json +162 -0
- package/README.md +515 -0
- package/bin/shooter.cjs +141 -0
- package/build/client/_app/immutable/assets/0.CM9Hl6d-.css +1 -0
- package/build/client/_app/immutable/assets/0.CM9Hl6d-.css.br +0 -0
- package/build/client/_app/immutable/assets/0.CM9Hl6d-.css.gz +0 -0
- package/build/client/_app/immutable/assets/2.CAShZ7lQ.css +1 -0
- package/build/client/_app/immutable/assets/2.CAShZ7lQ.css.br +1 -0
- package/build/client/_app/immutable/assets/2.CAShZ7lQ.css.gz +0 -0
- package/build/client/_app/immutable/assets/3.C0uFg0IS.css +1 -0
- 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/4.cJuCkJKZ.css +1 -0
- package/build/client/_app/immutable/assets/4.cJuCkJKZ.css.br +0 -0
- package/build/client/_app/immutable/assets/4.cJuCkJKZ.css.gz +0 -0
- package/build/client/_app/immutable/assets/5.DRjApZQW.css +1 -0
- package/build/client/_app/immutable/assets/5.DRjApZQW.css.br +0 -0
- package/build/client/_app/immutable/assets/5.DRjApZQW.css.gz +0 -0
- package/build/client/_app/immutable/assets/6.AraZrY8I.css +1 -0
- 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 +1 -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/ChatView.CsdBAOKx.css +1 -0
- package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css.br +0 -0
- package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css.gz +0 -0
- package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css +1 -0
- 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/assets/xterm.DFuMZ0ql.css +1 -0
- package/build/client/_app/immutable/assets/xterm.DFuMZ0ql.css.br +0 -0
- package/build/client/_app/immutable/assets/xterm.DFuMZ0ql.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BNJphC1q.js +56 -0
- 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/BTGVxaYV.js +9 -0
- package/build/client/_app/immutable/chunks/BTGVxaYV.js.br +0 -0
- package/build/client/_app/immutable/chunks/BTGVxaYV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BlxrFPDK.js +1 -0
- package/build/client/_app/immutable/chunks/BlxrFPDK.js.br +0 -0
- package/build/client/_app/immutable/chunks/BlxrFPDK.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bvk7mfPM.js +1 -0
- 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 +1 -0
- 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/CGLrx-H5.js +1 -0
- package/build/client/_app/immutable/chunks/CGLrx-H5.js.br +0 -0
- package/build/client/_app/immutable/chunks/CGLrx-H5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CgCpWzEA.js +1 -0
- 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 +6 -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 +11 -0
- 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 +1 -0
- 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 +1 -0
- 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/DLu6yJIZ.js +1 -0
- package/build/client/_app/immutable/chunks/DLu6yJIZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/DLu6yJIZ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dkkpz_4D.js +126 -0
- 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 +1 -0
- 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/PPVm8Dsz.js +1 -0
- package/build/client/_app/immutable/chunks/PPVm8Dsz.js.br +0 -0
- package/build/client/_app/immutable/chunks/PPVm8Dsz.js.gz +0 -0
- package/build/client/_app/immutable/chunks/RpcNruLP.js +2 -0
- 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 +1 -0
- 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 +1 -0
- 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 +2 -0
- 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 +1 -0
- 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 +1 -0
- 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 +1 -0
- 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 +1 -0
- 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 +3 -0
- 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 +1 -0
- 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 +1 -0
- 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 +2 -0
- 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 +2 -0
- 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/_app/version.json +1 -0
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/client/app-icon.png +0 -0
- package/build/client/apple-touch-icon.png +0 -0
- package/build/client/favicon.png +0 -0
- package/build/client/favicon.svg +10 -0
- package/build/client/favicon.svg.br +0 -0
- package/build/client/favicon.svg.gz +0 -0
- package/build/client/manifest.webmanifest +1 -0
- package/build/client/pwa-192x192.png +0 -0
- package/build/client/pwa-512x512.png +0 -0
- package/build/client/registerSW.js +1 -0
- package/build/client/registerSW.js.br +0 -0
- package/build/client/registerSW.js.gz +0 -0
- package/build/client/sw.js +222 -0
- package/build/client/sw.js.br +0 -0
- package/build/client/sw.js.gz +0 -0
- package/build/client/workbox-5119daf5.js +3395 -0
- package/build/client/workbox-5119daf5.js.br +0 -0
- package/build/client/workbox-5119daf5.js.gz +0 -0
- package/build/env.js +94 -0
- package/build/handler.js +1494 -0
- package/build/index.js +345 -0
- package/build/pty-holder.cjs +510 -0
- package/build/server/chunks/0-q2IUp76Y.js +9 -0
- package/build/server/chunks/0-q2IUp76Y.js.map +1 -0
- package/build/server/chunks/1-CU50G5wZ.js +9 -0
- package/build/server/chunks/1-CU50G5wZ.js.map +1 -0
- package/build/server/chunks/2-D01t9s8T.js +9 -0
- package/build/server/chunks/2-D01t9s8T.js.map +1 -0
- package/build/server/chunks/3-5PUQ04wC.js +9 -0
- package/build/server/chunks/3-5PUQ04wC.js.map +1 -0
- package/build/server/chunks/4-e7gywnSG.js +9 -0
- package/build/server/chunks/4-e7gywnSG.js.map +1 -0
- package/build/server/chunks/5-CA1SA6KZ.js +9 -0
- package/build/server/chunks/5-CA1SA6KZ.js.map +1 -0
- package/build/server/chunks/6-71H221sV.js +9 -0
- package/build/server/chunks/6-71H221sV.js.map +1 -0
- package/build/server/chunks/7-Bo-vmdyz.js +9 -0
- package/build/server/chunks/7-Bo-vmdyz.js.map +1 -0
- package/build/server/chunks/_layout.svelte-SFHOxs74.js +132 -0
- package/build/server/chunks/_layout.svelte-SFHOxs74.js.map +1 -0
- package/build/server/chunks/_page.svelte-B4w-2wD-.js +120 -0
- package/build/server/chunks/_page.svelte-B4w-2wD-.js.map +1 -0
- package/build/server/chunks/_page.svelte-B_qAXjkh.js +213 -0
- package/build/server/chunks/_page.svelte-B_qAXjkh.js.map +1 -0
- package/build/server/chunks/_page.svelte-CsF1_TRG.js +50 -0
- package/build/server/chunks/_page.svelte-CsF1_TRG.js.map +1 -0
- package/build/server/chunks/_page.svelte-DJC6U-P0.js +68 -0
- package/build/server/chunks/_page.svelte-DJC6U-P0.js.map +1 -0
- package/build/server/chunks/_page.svelte-DQ6HBtsz.js +407 -0
- package/build/server/chunks/_page.svelte-DQ6HBtsz.js.map +1 -0
- package/build/server/chunks/_page.svelte-LbhhjP21.js +148 -0
- package/build/server/chunks/_page.svelte-LbhhjP21.js.map +1 -0
- package/build/server/chunks/_server.ts-BL2FGb5Z.js +387 -0
- package/build/server/chunks/_server.ts-BL2FGb5Z.js.map +1 -0
- package/build/server/chunks/_server.ts-BgdjBZco.js +47 -0
- package/build/server/chunks/_server.ts-BgdjBZco.js.map +1 -0
- package/build/server/chunks/_server.ts-BihKSdj_.js +59 -0
- package/build/server/chunks/_server.ts-BihKSdj_.js.map +1 -0
- package/build/server/chunks/_server.ts-BjOJsoy4.js +63 -0
- package/build/server/chunks/_server.ts-BjOJsoy4.js.map +1 -0
- package/build/server/chunks/_server.ts-C29xzfaw.js +77 -0
- package/build/server/chunks/_server.ts-C29xzfaw.js.map +1 -0
- package/build/server/chunks/_server.ts-CPa6DgIt.js +71 -0
- package/build/server/chunks/_server.ts-CPa6DgIt.js.map +1 -0
- package/build/server/chunks/_server.ts-CbDRDIoP.js +36 -0
- package/build/server/chunks/_server.ts-CbDRDIoP.js.map +1 -0
- package/build/server/chunks/_server.ts-Cl1OEWL4.js +54 -0
- package/build/server/chunks/_server.ts-Cl1OEWL4.js.map +1 -0
- package/build/server/chunks/_server.ts-ColfDHW8.js +60 -0
- package/build/server/chunks/_server.ts-ColfDHW8.js.map +1 -0
- package/build/server/chunks/_server.ts-Cv_OrRuL.js +494 -0
- package/build/server/chunks/_server.ts-Cv_OrRuL.js.map +1 -0
- package/build/server/chunks/_server.ts-D4MNi4cD.js +25 -0
- package/build/server/chunks/_server.ts-D4MNi4cD.js.map +1 -0
- package/build/server/chunks/_server.ts-DRVbgm6k.js +125 -0
- package/build/server/chunks/_server.ts-DRVbgm6k.js.map +1 -0
- package/build/server/chunks/_server.ts-DfajWaqh.js +39 -0
- package/build/server/chunks/_server.ts-DfajWaqh.js.map +1 -0
- package/build/server/chunks/_server.ts-y9-WYDMa.js +35 -0
- package/build/server/chunks/_server.ts-y9-WYDMa.js.map +1 -0
- package/build/server/chunks/auth-CEgFis71.js +32 -0
- package/build/server/chunks/auth-CEgFis71.js.map +1 -0
- package/build/server/chunks/client-CxCatAKr.js +255 -0
- package/build/server/chunks/client-CxCatAKr.js.map +1 -0
- package/build/server/chunks/error.svelte-BqdwMWdK.js +26 -0
- package/build/server/chunks/error.svelte-BqdwMWdK.js.map +1 -0
- package/build/server/chunks/exports-CJ0Q5XmL.js +4081 -0
- package/build/server/chunks/exports-CJ0Q5XmL.js.map +1 -0
- package/build/server/chunks/index2-DAxIoAO-.js +36 -0
- package/build/server/chunks/index2-DAxIoAO-.js.map +1 -0
- package/build/server/chunks/jsonl-parser-dmZU_Hyu.js +137 -0
- package/build/server/chunks/jsonl-parser-dmZU_Hyu.js.map +1 -0
- package/build/server/chunks/library-apns-BHxLmuIx.js +104 -0
- package/build/server/chunks/library-apns-BHxLmuIx.js.map +1 -0
- package/build/server/chunks/markdown-Bxrl3cCF.js +1241 -0
- package/build/server/chunks/markdown-Bxrl3cCF.js.map +1 -0
- package/build/server/chunks/pending-requests-D8UiTw7L.js +44 -0
- package/build/server/chunks/pending-requests-D8UiTw7L.js.map +1 -0
- package/build/server/chunks/pty-manager-C0FhBiVq.js +1697 -0
- package/build/server/chunks/pty-manager-C0FhBiVq.js.map +1 -0
- package/build/server/chunks/shared-server-BDY8jh20.js +200 -0
- package/build/server/chunks/shared-server-BDY8jh20.js.map +1 -0
- package/build/server/chunks/stores-D0HorpgL.js +36 -0
- package/build/server/chunks/stores-D0HorpgL.js.map +1 -0
- package/build/server/index.js +6466 -0
- package/build/server/index.js.map +1 -0
- package/build/server/manifest.js +184 -0
- package/build/server/manifest.js.map +1 -0
- package/build/shims.js +32 -0
- package/package.json +94 -0
- package/scripts/clipboard-shims/wl-paste +48 -0
- package/scripts/clipboard-shims/xclip +31 -0
- package/scripts/install.sh +477 -0
- package/scripts/setup-node-pty.sh +63 -0
- package/scripts/setup.cjs +571 -0
- package/scripts/test-runner.ts +243 -0
- package/scripts/vercel-env-commands.sh +60 -0
- package/server.ts +139 -0
- package/src/app.css +1835 -0
- package/src/app.d.ts +31 -0
- package/src/app.html +24 -0
- package/src/generated/types/APN.ts +305 -0
- package/src/generated/types/CLI.ts +52 -0
- package/src/generated/types/JWT.ts +92 -0
- package/src/generated/types/Terminal.ts +2736 -0
- package/src/generated/types/index.ts +6 -0
- package/src/lib/assets/icons/alert-triangle.svg +5 -0
- package/src/lib/assets/icons/bell.svg +4 -0
- package/src/lib/assets/icons/check-circle.svg +4 -0
- package/src/lib/assets/icons/file.svg +4 -0
- package/src/lib/assets/icons/folder.svg +3 -0
- package/src/lib/assets/icons/play.svg +3 -0
- package/src/lib/assets/icons/refresh.svg +4 -0
- package/src/lib/assets/icons/settings.svg +4 -0
- package/src/lib/assets/icons/terminal.svg +1 -0
- package/src/lib/assets/icons/tool.svg +3 -0
- package/src/lib/assets/icons/x-circle.svg +5 -0
- package/src/lib/modules/client/common/Card.svelte +26 -0
- package/src/lib/modules/client/common/EmptyState.svelte +36 -0
- package/src/lib/modules/client/common/Icon.svelte +61 -0
- package/src/lib/modules/client/common/StatusBadge.svelte +38 -0
- package/src/lib/modules/client/common/cache.ts +31 -0
- package/src/lib/modules/client/common/config-guard.ts +18 -0
- package/src/lib/modules/client/common/index.ts +12 -0
- package/src/lib/modules/client/common/markdown.ts +23 -0
- package/src/lib/modules/client/common/native-bridge.ts +50 -0
- package/src/lib/modules/client/common/time.ts +22 -0
- package/src/lib/modules/client/common/tool-title.ts +28 -0
- package/src/lib/modules/client/terminal/ChatView.svelte +400 -0
- package/src/lib/modules/client/terminal/CommandPalette.svelte +60 -0
- package/src/lib/modules/client/terminal/ConnectionStatus.svelte +99 -0
- package/src/lib/modules/client/terminal/LaunchSheet.svelte +294 -0
- package/src/lib/modules/client/terminal/QuickKeys.svelte +71 -0
- package/src/lib/modules/client/terminal/ShortcutsHelp.svelte +79 -0
- package/src/lib/modules/client/terminal/keyboard-shortcuts.ts +70 -0
- package/src/lib/modules/client/terminal/xterm-wrapper.ts +243 -0
- package/src/lib/modules/server/apn/library-apns.ts +137 -0
- package/src/lib/modules/server/apn/notification-history.ts +35 -0
- package/src/lib/modules/server/apn/notification-sessions.ts +117 -0
- package/src/lib/modules/server/apn/pending-requests.ts +65 -0
- package/src/lib/modules/server/apn/types.ts +51 -0
- package/src/lib/modules/server/auth.ts +34 -0
- package/src/lib/modules/server/cli/index.ts +79 -0
- package/src/lib/modules/server/cli/runner.ts +162 -0
- package/src/lib/modules/server/fcm/fcm-service.ts +72 -0
- package/src/lib/modules/server/sessions/jsonl-parser.ts +197 -0
- package/src/lib/modules/server/sessions/jsonl-reader.ts +301 -0
- package/src/lib/modules/server/sessions/opencode-reader.ts +264 -0
- package/src/lib/modules/server/sessions/types.ts +53 -0
- package/src/lib/modules/server/terminal/holder-client.ts +273 -0
- package/src/lib/modules/server/terminal/opencode-watcher.ts +661 -0
- package/src/lib/modules/server/terminal/pty-holder.cjs +510 -0
- package/src/lib/modules/server/terminal/pty-manager.ts +1012 -0
- package/src/lib/modules/server/terminal/session-watcher.ts +320 -0
- package/src/lib/modules/server/terminal/terminal-store.ts +198 -0
- package/src/lib/modules/server/ws/events-handler.ts +73 -0
- package/src/lib/modules/server/ws/keepalive.ts +108 -0
- package/src/lib/modules/server/ws/server.ts +93 -0
- package/src/lib/modules/server/ws/session-handler.ts +462 -0
- package/src/lib/modules/server/ws/terminal-handler.ts +197 -0
- package/src/lib/modules/server/ws/ticket-store.ts +58 -0
- package/src/lib/theme.css +529 -0
- package/src/lib/types/config.ts +6 -0
- package/src/routes/+layout.svelte +218 -0
- package/src/routes/+page.svelte +261 -0
- package/src/routes/api/debug/+server.ts +33 -0
- package/src/routes/api/device-token/+server.ts +85 -0
- package/src/routes/api/health/+server.ts +100 -0
- package/src/routes/api/notify/+server.ts +418 -0
- package/src/routes/api/qr-config/+server.ts +45 -0
- package/src/routes/api/response/+server.ts +73 -0
- package/src/routes/api/sessions/+server.ts +120 -0
- package/src/routes/api/terminals/+server.ts +141 -0
- package/src/routes/api/terminals/[id]/+server.ts +75 -0
- package/src/routes/api/terminals/[id]/paste-image/+server.ts +61 -0
- package/src/routes/api/terminals/[id]/resize/+server.ts +60 -0
- package/src/routes/api/webhook/+server.ts +42 -0
- package/src/routes/api/ws-status/+server.ts +23 -0
- package/src/routes/api/ws-ticket/+server.ts +86 -0
- package/src/routes/config/+page.svelte +600 -0
- package/src/routes/project/+page.svelte +274 -0
- package/src/routes/session/[id]/+page.svelte +434 -0
- package/src/routes/terminals/+page.svelte +618 -0
- package/src/routes/terminals/[id]/+page.svelte +968 -0
- package/svelte.config.js +18 -0
- package/tsconfig.json +14 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { v as validateAuth } from './auth-CEgFis71.js';
|
|
2
|
+
import { p as ptyManager } from './pty-manager-C0FhBiVq.js';
|
|
3
|
+
import { j as json } from './shared-server-BDY8jh20.js';
|
|
4
|
+
import 'crypto';
|
|
5
|
+
import 'child_process';
|
|
6
|
+
import 'fs';
|
|
7
|
+
import 'path';
|
|
8
|
+
import 'url';
|
|
9
|
+
import 'net';
|
|
10
|
+
import 'better-sqlite3';
|
|
11
|
+
import 'chokidar';
|
|
12
|
+
import './jsonl-parser-dmZU_Hyu.js';
|
|
13
|
+
|
|
14
|
+
const POST = async ({ params, request }) => {
|
|
15
|
+
const authError = validateAuth(request);
|
|
16
|
+
if (authError) {
|
|
17
|
+
return authError;
|
|
18
|
+
}
|
|
19
|
+
let body;
|
|
20
|
+
try {
|
|
21
|
+
body = await request.json();
|
|
22
|
+
} catch {
|
|
23
|
+
return json({ error: "Invalid JSON in request body" }, { status: 400 });
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const { cols, rows } = body;
|
|
27
|
+
if (cols === void 0 || rows === void 0) {
|
|
28
|
+
return json({ error: "cols and rows are required" }, { status: 400 });
|
|
29
|
+
}
|
|
30
|
+
if (typeof cols !== "number" || cols < 1) {
|
|
31
|
+
return json({ error: "cols must be a positive number" }, { status: 400 });
|
|
32
|
+
}
|
|
33
|
+
if (typeof rows !== "number" || rows < 1) {
|
|
34
|
+
return json({ error: "rows must be a positive number" }, { status: 400 });
|
|
35
|
+
}
|
|
36
|
+
if (cols > 500 || rows > 200) {
|
|
37
|
+
return json({ error: "cols must be <= 500 and rows must be <= 200" }, { status: 400 });
|
|
38
|
+
}
|
|
39
|
+
const terminal = ptyManager.get(params.id);
|
|
40
|
+
if (!terminal) {
|
|
41
|
+
return json({ error: "Terminal not found" }, { status: 404 });
|
|
42
|
+
}
|
|
43
|
+
if (terminal.status === "exited") {
|
|
44
|
+
return json({ error: "Terminal already exited" }, { status: 409 });
|
|
45
|
+
}
|
|
46
|
+
ptyManager.resize(params.id, cols, rows);
|
|
47
|
+
console.log(`[terminals] Resized terminal ${params.id} to ${cols}x${rows}`);
|
|
48
|
+
return json({
|
|
49
|
+
success: true,
|
|
50
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
51
|
+
});
|
|
52
|
+
} catch (error) {
|
|
53
|
+
const err = error;
|
|
54
|
+
return json({ details: err.message, error: "Failed to resize terminal" }, { status: 500 });
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export { POST };
|
|
59
|
+
//# sourceMappingURL=_server.ts-BihKSdj_.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-BihKSdj_.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/terminals/_id_/resize/_server.ts.js"],"sourcesContent":["import { v as validateAuth } from \"../../../../../../chunks/auth.js\";\nimport { p as ptyManager } from \"../../../../../../chunks/pty-manager.js\";\nimport { json } from \"@sveltejs/kit\";\nconst POST = async ({ params, request }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n let body;\n try {\n body = await request.json();\n } catch {\n return json({ error: \"Invalid JSON in request body\" }, { status: 400 });\n }\n try {\n const { cols, rows } = body;\n if (cols === void 0 || rows === void 0) {\n return json({ error: \"cols and rows are required\" }, { status: 400 });\n }\n if (typeof cols !== \"number\" || cols < 1) {\n return json({ error: \"cols must be a positive number\" }, { status: 400 });\n }\n if (typeof rows !== \"number\" || rows < 1) {\n return json({ error: \"rows must be a positive number\" }, { status: 400 });\n }\n if (cols > 500 || rows > 200) {\n return json({ error: \"cols must be <= 500 and rows must be <= 200\" }, { status: 400 });\n }\n const terminal = ptyManager.get(params.id);\n if (!terminal) {\n return json({ error: \"Terminal not found\" }, { status: 404 });\n }\n if (terminal.status === \"exited\") {\n return json({ error: \"Terminal already exited\" }, { status: 409 });\n }\n ptyManager.resize(params.id, cols, rows);\n console.log(`[terminals] Resized terminal ${params.id} to ${cols}x${rows}`);\n return json({\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n } catch (error) {\n const err = error;\n return json({ details: err.message, error: \"Failed to resize terminal\" }, { status: 500 });\n }\n};\nexport {\n POST\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;AAGK,MAAC,IAAI,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK;AAC5C,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,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE;AAC/B,EAAE,CAAC,CAAC,MAAM;AACV,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC3E,EAAE;AACF,EAAE,IAAI;AACN,IAAI,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI;AAC/B,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE;AAC5C,MAAM,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC3E,IAAI;AACJ,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,GAAG,CAAC,EAAE;AAC9C,MAAM,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,gCAAgC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC/E,IAAI;AACJ,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,GAAG,CAAC,EAAE;AAC9C,MAAM,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,gCAAgC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC/E,IAAI;AACJ,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE;AAClC,MAAM,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,6CAA6C,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC5F,IAAI;AACJ,IAAI,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;AAC9C,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,MAAM,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACnE,IAAI;AACJ,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE;AACtC,MAAM,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACxE,IAAI;AACJ,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC;AAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,6BAA6B,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/E,IAAI,OAAO,IAAI,CAAC;AAChB,MAAM,OAAO,EAAE,IAAI;AACnB,MAAM,SAAS,EAAE,iBAAiB,IAAI,IAAI,EAAE,EAAE,WAAW;AACzD,KAAK,CAAC;AACN,EAAE,CAAC,CAAC,OAAO,KAAK,EAAE;AAClB,IAAI,MAAM,GAAG,GAAG,KAAK;AACrB,IAAI,OAAO,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,2BAA2B,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC9F,EAAE;AACF;;;;"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { a as cleanup, g as getDecision, s as setDecision } from './pending-requests-D8UiTw7L.js';
|
|
2
|
+
import { v as validateAuth } from './auth-CEgFis71.js';
|
|
3
|
+
import { j as json } from './shared-server-BDY8jh20.js';
|
|
4
|
+
import 'crypto';
|
|
5
|
+
|
|
6
|
+
const POST = async ({ request }) => {
|
|
7
|
+
cleanup();
|
|
8
|
+
const authError = validateAuth(request);
|
|
9
|
+
if (authError) {
|
|
10
|
+
return authError;
|
|
11
|
+
}
|
|
12
|
+
let body;
|
|
13
|
+
try {
|
|
14
|
+
body = await request.json();
|
|
15
|
+
} catch {
|
|
16
|
+
return json({ error: "Invalid JSON in request body" }, { status: 400 });
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
const { decision, requestId } = body;
|
|
20
|
+
if (!requestId || !decision) {
|
|
21
|
+
return json({ error: "requestId and decision are required" }, { status: 400 });
|
|
22
|
+
}
|
|
23
|
+
if (decision !== "allow" && decision !== "deny") {
|
|
24
|
+
return json({ error: 'decision must be "allow" or "deny"' }, { status: 400 });
|
|
25
|
+
}
|
|
26
|
+
const found = setDecision(requestId, decision);
|
|
27
|
+
if (!found) {
|
|
28
|
+
return json({ error: "Request not found or expired" }, { status: 404 });
|
|
29
|
+
}
|
|
30
|
+
console.log(`[response] Decision received: ${decision} for request ${requestId}`);
|
|
31
|
+
return json({
|
|
32
|
+
message: "Decision recorded",
|
|
33
|
+
success: true,
|
|
34
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
35
|
+
});
|
|
36
|
+
} catch (error) {
|
|
37
|
+
const err = error;
|
|
38
|
+
return json({ details: err.message, error: "Failed to process response" }, { status: 500 });
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const GET = ({ request, url }) => {
|
|
42
|
+
cleanup();
|
|
43
|
+
const authErr = validateAuth(request);
|
|
44
|
+
if (authErr) {
|
|
45
|
+
return authErr;
|
|
46
|
+
}
|
|
47
|
+
const requestId = url.searchParams.get("requestId");
|
|
48
|
+
if (!requestId) {
|
|
49
|
+
return json({ error: "requestId query parameter is required" }, { status: 400 });
|
|
50
|
+
}
|
|
51
|
+
const result = getDecision(requestId);
|
|
52
|
+
if (result.status === "not_found") {
|
|
53
|
+
return json({ error: "Request not found or expired" }, { status: 404 });
|
|
54
|
+
}
|
|
55
|
+
return json({
|
|
56
|
+
decision: result.decision ?? null,
|
|
57
|
+
status: result.status,
|
|
58
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export { GET, POST };
|
|
63
|
+
//# sourceMappingURL=_server.ts-BjOJsoy4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-BjOJsoy4.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/response/_server.ts.js"],"sourcesContent":["import { a as cleanup, g as getDecision, s as setDecision } from \"../../../../chunks/pending-requests.js\";\nimport { v as validateAuth } from \"../../../../chunks/auth.js\";\nimport { json } from \"@sveltejs/kit\";\nconst POST = async ({ request }) => {\n cleanup();\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n let body;\n try {\n body = await request.json();\n } catch {\n return json({ error: \"Invalid JSON in request body\" }, { status: 400 });\n }\n try {\n const { decision, requestId } = body;\n if (!requestId || !decision) {\n return json({ error: \"requestId and decision are required\" }, { status: 400 });\n }\n if (decision !== \"allow\" && decision !== \"deny\") {\n return json({ error: 'decision must be \"allow\" or \"deny\"' }, { status: 400 });\n }\n const found = setDecision(requestId, decision);\n if (!found) {\n return json({ error: \"Request not found or expired\" }, { status: 404 });\n }\n console.log(`[response] Decision received: ${decision} for request ${requestId}`);\n return json({\n message: \"Decision recorded\",\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n } catch (error) {\n const err = error;\n return json({ details: err.message, error: \"Failed to process response\" }, { status: 500 });\n }\n};\nconst GET = ({ request, url }) => {\n cleanup();\n const authErr = validateAuth(request);\n if (authErr) {\n return authErr;\n }\n const requestId = url.searchParams.get(\"requestId\");\n if (!requestId) {\n return json({ error: \"requestId query parameter is required\" }, { status: 400 });\n }\n const result = getDecision(requestId);\n if (result.status === \"not_found\") {\n return json({ error: \"Request not found or expired\" }, { status: 404 });\n }\n return json({\n decision: result.decision ?? null,\n status: result.status,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n};\nexport {\n GET,\n POST\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { v as validateAuth } from './auth-CEgFis71.js';
|
|
2
|
+
import { p as ptyManager } from './pty-manager-C0FhBiVq.js';
|
|
3
|
+
import { j as json } from './shared-server-BDY8jh20.js';
|
|
4
|
+
import 'crypto';
|
|
5
|
+
import 'child_process';
|
|
6
|
+
import 'fs';
|
|
7
|
+
import 'path';
|
|
8
|
+
import 'url';
|
|
9
|
+
import 'net';
|
|
10
|
+
import 'better-sqlite3';
|
|
11
|
+
import 'chokidar';
|
|
12
|
+
import './jsonl-parser-dmZU_Hyu.js';
|
|
13
|
+
|
|
14
|
+
const GET = ({ params, request }) => {
|
|
15
|
+
const authError = validateAuth(request);
|
|
16
|
+
if (authError) {
|
|
17
|
+
return authError;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const terminal = ptyManager.get(params.id);
|
|
21
|
+
if (!terminal) {
|
|
22
|
+
return json({ error: "Terminal not found" }, { status: 404 });
|
|
23
|
+
}
|
|
24
|
+
return json({
|
|
25
|
+
args: terminal.args,
|
|
26
|
+
clientCount: terminal.clients.size,
|
|
27
|
+
command: terminal.command,
|
|
28
|
+
createdAt: terminal.createdAt.toISOString(),
|
|
29
|
+
cwd: terminal.cwd,
|
|
30
|
+
exitCode: terminal.exitCode,
|
|
31
|
+
exitedAt: terminal.exitedAt?.toISOString() ?? null,
|
|
32
|
+
id: terminal.id,
|
|
33
|
+
lastOutput: terminal.scrollback.length > 0 ? terminal.scrollback[terminal.scrollback.length - 1] : null,
|
|
34
|
+
pid: terminal.pid,
|
|
35
|
+
sessionWs: `/ws/session/${terminal.id}`,
|
|
36
|
+
status: terminal.status,
|
|
37
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
38
|
+
ws: `/ws/terminal/${terminal.id}`
|
|
39
|
+
});
|
|
40
|
+
} catch (error) {
|
|
41
|
+
const err = error;
|
|
42
|
+
return json({ details: err.message, error: "Failed to get terminal" }, { status: 500 });
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const DELETE = ({ params, request }) => {
|
|
46
|
+
const authError = validateAuth(request);
|
|
47
|
+
if (authError) {
|
|
48
|
+
return authError;
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const terminal = ptyManager.get(params.id);
|
|
52
|
+
if (!terminal) {
|
|
53
|
+
return json({ error: "Terminal not found" }, { status: 404 });
|
|
54
|
+
}
|
|
55
|
+
if (terminal.status === "exited") {
|
|
56
|
+
ptyManager.remove(params.id);
|
|
57
|
+
console.log(`[terminals] Removed exited terminal ${params.id}`);
|
|
58
|
+
return json({
|
|
59
|
+
removed: true,
|
|
60
|
+
success: true,
|
|
61
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
ptyManager.kill(params.id);
|
|
65
|
+
console.log(`[terminals] Killed terminal ${params.id} (pid=${terminal.pid})`);
|
|
66
|
+
return json({
|
|
67
|
+
success: true,
|
|
68
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
69
|
+
});
|
|
70
|
+
} catch (error) {
|
|
71
|
+
const err = error;
|
|
72
|
+
return json({ details: err.message, error: "Failed to kill terminal" }, { status: 500 });
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export { DELETE, GET };
|
|
77
|
+
//# sourceMappingURL=_server.ts-C29xzfaw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-C29xzfaw.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/terminals/_id_/_server.ts.js"],"sourcesContent":["import { v as validateAuth } from \"../../../../../chunks/auth.js\";\nimport { p as ptyManager } from \"../../../../../chunks/pty-manager.js\";\nimport { json } from \"@sveltejs/kit\";\nconst GET = ({ params, request }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n try {\n const terminal = ptyManager.get(params.id);\n if (!terminal) {\n return json({ error: \"Terminal not found\" }, { status: 404 });\n }\n return json({\n args: terminal.args,\n clientCount: terminal.clients.size,\n command: terminal.command,\n createdAt: terminal.createdAt.toISOString(),\n cwd: terminal.cwd,\n exitCode: terminal.exitCode,\n exitedAt: terminal.exitedAt?.toISOString() ?? null,\n id: terminal.id,\n lastOutput: terminal.scrollback.length > 0 ? terminal.scrollback[terminal.scrollback.length - 1] : null,\n pid: terminal.pid,\n sessionWs: `/ws/session/${terminal.id}`,\n status: terminal.status,\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n ws: `/ws/terminal/${terminal.id}`\n });\n } catch (error) {\n const err = error;\n return json({ details: err.message, error: \"Failed to get terminal\" }, { status: 500 });\n }\n};\nconst DELETE = ({ params, request }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n try {\n const terminal = ptyManager.get(params.id);\n if (!terminal) {\n return json({ error: \"Terminal not found\" }, { status: 404 });\n }\n if (terminal.status === \"exited\") {\n ptyManager.remove(params.id);\n console.log(`[terminals] Removed exited terminal ${params.id}`);\n return json({\n removed: true,\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n }\n ptyManager.kill(params.id);\n console.log(`[terminals] Killed terminal ${params.id} (pid=${terminal.pid})`);\n return json({\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n } catch (error) {\n const err = error;\n return json({ details: err.message, error: \"Failed to kill terminal\" }, { status: 500 });\n }\n};\nexport {\n DELETE,\n GET\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { v as validateAuth } from './auth-CEgFis71.js';
|
|
2
|
+
import { randomBytes } from 'crypto';
|
|
3
|
+
import { j as json } from './shared-server-BDY8jh20.js';
|
|
4
|
+
|
|
5
|
+
const GLOBAL_KEY = "__shooter_ws_tickets";
|
|
6
|
+
const tickets = globalThis[GLOBAL_KEY] || /* @__PURE__ */ new Map();
|
|
7
|
+
globalThis[GLOBAL_KEY] = tickets;
|
|
8
|
+
function generateTicket() {
|
|
9
|
+
const ticket = randomBytes(32).toString("hex");
|
|
10
|
+
tickets.set(ticket, { createdAt: Date.now(), used: false });
|
|
11
|
+
return ticket;
|
|
12
|
+
}
|
|
13
|
+
setInterval(() => {
|
|
14
|
+
const now = Date.now();
|
|
15
|
+
for (const [key, val] of tickets) {
|
|
16
|
+
if (now - val.createdAt > 6e4) {
|
|
17
|
+
tickets.delete(key);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}, 6e4).unref();
|
|
21
|
+
const RATE_LIMIT_WINDOW_MS = 6e4;
|
|
22
|
+
const RATE_LIMIT_MAX = 10;
|
|
23
|
+
const rateLimitMap = /* @__PURE__ */ new Map();
|
|
24
|
+
function checkRateLimit(apiKey) {
|
|
25
|
+
const now = Date.now();
|
|
26
|
+
const cutoff = now - RATE_LIMIT_WINDOW_MS;
|
|
27
|
+
let timestamps = rateLimitMap.get(apiKey);
|
|
28
|
+
if (!timestamps) {
|
|
29
|
+
timestamps = [];
|
|
30
|
+
rateLimitMap.set(apiKey, timestamps);
|
|
31
|
+
}
|
|
32
|
+
const recent = timestamps.filter((t) => t > cutoff);
|
|
33
|
+
rateLimitMap.set(apiKey, recent);
|
|
34
|
+
if (recent.length >= RATE_LIMIT_MAX) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
recent.push(now);
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
setInterval(() => {
|
|
41
|
+
const cutoff = Date.now() - RATE_LIMIT_WINDOW_MS;
|
|
42
|
+
for (const [key, timestamps] of rateLimitMap) {
|
|
43
|
+
const recent = timestamps.filter((t) => t > cutoff);
|
|
44
|
+
if (recent.length === 0) {
|
|
45
|
+
rateLimitMap.delete(key);
|
|
46
|
+
} else {
|
|
47
|
+
rateLimitMap.set(key, recent);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}, 3e5).unref();
|
|
51
|
+
const POST = async ({ request }) => {
|
|
52
|
+
const authError = validateAuth(request);
|
|
53
|
+
if (authError) {
|
|
54
|
+
return authError;
|
|
55
|
+
}
|
|
56
|
+
const apiKey = request.headers.get("authorization").substring(7);
|
|
57
|
+
if (!checkRateLimit(apiKey)) {
|
|
58
|
+
return json(
|
|
59
|
+
{ error: "Rate limit exceeded. Maximum 10 ticket requests per minute." },
|
|
60
|
+
{ status: 429 }
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
const ticket = generateTicket();
|
|
64
|
+
return json({
|
|
65
|
+
expiresIn: 30,
|
|
66
|
+
ticket
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export { POST };
|
|
71
|
+
//# sourceMappingURL=_server.ts-CPa6DgIt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-CPa6DgIt.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/ws-ticket/_server.ts.js"],"sourcesContent":["import { v as validateAuth } from \"../../../../chunks/auth.js\";\nimport { randomBytes } from \"crypto\";\nimport { json } from \"@sveltejs/kit\";\nconst GLOBAL_KEY = \"__shooter_ws_tickets\";\nconst tickets = globalThis[GLOBAL_KEY] || /* @__PURE__ */ new Map();\nglobalThis[GLOBAL_KEY] = tickets;\nfunction generateTicket() {\n const ticket = randomBytes(32).toString(\"hex\");\n tickets.set(ticket, { createdAt: Date.now(), used: false });\n return ticket;\n}\nsetInterval(() => {\n const now = Date.now();\n for (const [key, val] of tickets) {\n if (now - val.createdAt > 6e4) {\n tickets.delete(key);\n }\n }\n}, 6e4).unref();\nconst RATE_LIMIT_WINDOW_MS = 6e4;\nconst RATE_LIMIT_MAX = 10;\nconst rateLimitMap = /* @__PURE__ */ new Map();\nfunction checkRateLimit(apiKey) {\n const now = Date.now();\n const cutoff = now - RATE_LIMIT_WINDOW_MS;\n let timestamps = rateLimitMap.get(apiKey);\n if (!timestamps) {\n timestamps = [];\n rateLimitMap.set(apiKey, timestamps);\n }\n const recent = timestamps.filter((t) => t > cutoff);\n rateLimitMap.set(apiKey, recent);\n if (recent.length >= RATE_LIMIT_MAX) {\n return false;\n }\n recent.push(now);\n return true;\n}\nsetInterval(() => {\n const cutoff = Date.now() - RATE_LIMIT_WINDOW_MS;\n for (const [key, timestamps] of rateLimitMap) {\n const recent = timestamps.filter((t) => t > cutoff);\n if (recent.length === 0) {\n rateLimitMap.delete(key);\n } else {\n rateLimitMap.set(key, recent);\n }\n }\n}, 3e5).unref();\nconst POST = async ({ request }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n const apiKey = request.headers.get(\"authorization\").substring(7);\n if (!checkRateLimit(apiKey)) {\n return json(\n { error: \"Rate limit exceeded. Maximum 10 ticket requests per minute.\" },\n { status: 429 }\n );\n }\n const ticket = generateTicket();\n return json({\n expiresIn: 30,\n ticket\n });\n};\nexport {\n POST\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { v as validateAuth } from './auth-CEgFis71.js';
|
|
2
|
+
import { j as json } from './shared-server-BDY8jh20.js';
|
|
3
|
+
import 'crypto';
|
|
4
|
+
|
|
5
|
+
const POST = async ({ request }) => {
|
|
6
|
+
try {
|
|
7
|
+
const authError = validateAuth(request);
|
|
8
|
+
if (authError) return authError;
|
|
9
|
+
const body = await request.json();
|
|
10
|
+
console.log("Webhook received:", {
|
|
11
|
+
body,
|
|
12
|
+
headers: Object.fromEntries(request.headers.entries()),
|
|
13
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
14
|
+
});
|
|
15
|
+
return json({
|
|
16
|
+
data: body,
|
|
17
|
+
message: "Webhook received successfully",
|
|
18
|
+
success: true,
|
|
19
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
20
|
+
});
|
|
21
|
+
} catch (error) {
|
|
22
|
+
const err = error;
|
|
23
|
+
console.error("Webhook error:", err);
|
|
24
|
+
return json(
|
|
25
|
+
{
|
|
26
|
+
details: err.message,
|
|
27
|
+
error: "Failed to process webhook",
|
|
28
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
29
|
+
},
|
|
30
|
+
{ status: 500 }
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export { POST };
|
|
36
|
+
//# sourceMappingURL=_server.ts-CbDRDIoP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-CbDRDIoP.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/webhook/_server.ts.js"],"sourcesContent":["import { v as validateAuth } from \"../../../../chunks/auth.js\";\nimport { json } from \"@sveltejs/kit\";\nconst POST = async ({ request }) => {\n try {\n const authError = validateAuth(request);\n if (authError) return authError;\n const body = await request.json();\n console.log(\"Webhook received:\", {\n body,\n headers: Object.fromEntries(request.headers.entries()),\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n return json({\n data: body,\n message: \"Webhook received successfully\",\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n } catch (error) {\n const err = error;\n console.error(\"Webhook error:\", err);\n return json(\n {\n details: err.message,\n error: \"Failed to process webhook\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n },\n { status: 500 }\n );\n }\n};\nexport {\n POST\n};\n"],"names":[],"mappings":";;;;AAEK,MAAC,IAAI,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK;AACpC,EAAE,IAAI;AACN,IAAI,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;AAC3C,IAAI,IAAI,SAAS,EAAE,OAAO,SAAS;AACnC,IAAI,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE;AACrC,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE;AACrC,MAAM,IAAI;AACV,MAAM,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AAC5D,MAAM,SAAS,EAAE,iBAAiB,IAAI,IAAI,EAAE,EAAE,WAAW;AACzD,KAAK,CAAC;AACN,IAAI,OAAO,IAAI,CAAC;AAChB,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,OAAO,EAAE,+BAA+B;AAC9C,MAAM,OAAO,EAAE,IAAI;AACnB,MAAM,SAAS,EAAE,iBAAiB,IAAI,IAAI,EAAE,EAAE,WAAW;AACzD,KAAK,CAAC;AACN,EAAE,CAAC,CAAC,OAAO,KAAK,EAAE;AAClB,IAAI,MAAM,GAAG,GAAG,KAAK;AACrB,IAAI,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC;AACxC,IAAI,OAAO,IAAI;AACf,MAAM;AACN,QAAQ,OAAO,EAAE,GAAG,CAAC,OAAO;AAC5B,QAAQ,KAAK,EAAE,2BAA2B;AAC1C,QAAQ,SAAS,EAAE,iBAAiB,IAAI,IAAI,EAAE,EAAE,WAAW;AAC3D,OAAO;AACP,MAAM,EAAE,MAAM,EAAE,GAAG;AACnB,KAAK;AACL,EAAE;AACF;;;;"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { b as private_env, j as json } from './shared-server-BDY8jh20.js';
|
|
2
|
+
import { v as validateAuth } from './auth-CEgFis71.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) return authError;
|
|
10
|
+
}
|
|
11
|
+
const hasProjectId = !!private_env.FCM_PROJECT_ID;
|
|
12
|
+
const hasClientEmail = !!private_env.FCM_CLIENT_EMAIL;
|
|
13
|
+
const hasPrivateKey = !!private_env.FCM_PRIVATE_KEY;
|
|
14
|
+
const health = {
|
|
15
|
+
checks: {
|
|
16
|
+
hasApiKey: !!private_env.API_KEY,
|
|
17
|
+
hasAPNsConfig: !!(private_env.APNS_KEY_ID && private_env.APNS_TEAM_ID && private_env.APNS_KEY),
|
|
18
|
+
hasBundleId: !!private_env.APNS_BUNDLE_ID,
|
|
19
|
+
hasDeviceToken: !!private_env.DEVICE_TOKEN,
|
|
20
|
+
hasFCMConfig: hasProjectId && hasClientEmail && hasPrivateKey
|
|
21
|
+
},
|
|
22
|
+
configuration: {
|
|
23
|
+
apnsKeyId: private_env.APNS_KEY_ID ? `${private_env.APNS_KEY_ID.substring(0, 4)}...` : null,
|
|
24
|
+
bundleId: private_env.APNS_BUNDLE_ID || null,
|
|
25
|
+
deviceTokenLength: private_env.DEVICE_TOKEN ? private_env.DEVICE_TOKEN.length : 0,
|
|
26
|
+
fcm: {
|
|
27
|
+
configured: hasProjectId && hasClientEmail && hasPrivateKey,
|
|
28
|
+
hasClientEmail,
|
|
29
|
+
hasPrivateKey,
|
|
30
|
+
hasProjectId
|
|
31
|
+
},
|
|
32
|
+
production: private_env.APNS_PRODUCTION === "true"
|
|
33
|
+
},
|
|
34
|
+
environment: private_env.NODE_ENV || "development",
|
|
35
|
+
status: "healthy",
|
|
36
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
37
|
+
version: "1.1.0"
|
|
38
|
+
};
|
|
39
|
+
const criticalChecks = [
|
|
40
|
+
health.checks.hasDeviceToken,
|
|
41
|
+
health.checks.hasAPNsConfig,
|
|
42
|
+
health.checks.hasBundleId
|
|
43
|
+
];
|
|
44
|
+
if (criticalChecks.some((check) => !check)) {
|
|
45
|
+
health.status = "degraded";
|
|
46
|
+
}
|
|
47
|
+
if (!wantsDetails) {
|
|
48
|
+
return json({ status: health.status, timestamp: health.timestamp });
|
|
49
|
+
}
|
|
50
|
+
return json(health);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export { GET };
|
|
54
|
+
//# sourceMappingURL=_server.ts-Cl1OEWL4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-Cl1OEWL4.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) return authError;\n }\n const hasProjectId = !!private_env.FCM_PROJECT_ID;\n const hasClientEmail = !!private_env.FCM_CLIENT_EMAIL;\n const hasPrivateKey = !!private_env.FCM_PRIVATE_KEY;\n const health = {\n checks: {\n hasApiKey: !!private_env.API_KEY,\n hasAPNsConfig: !!(private_env.APNS_KEY_ID && private_env.APNS_TEAM_ID && private_env.APNS_KEY),\n hasBundleId: !!private_env.APNS_BUNDLE_ID,\n hasDeviceToken: !!private_env.DEVICE_TOKEN,\n hasFCMConfig: hasProjectId && hasClientEmail && hasPrivateKey\n },\n configuration: {\n apnsKeyId: private_env.APNS_KEY_ID ? `${private_env.APNS_KEY_ID.substring(0, 4)}...` : null,\n bundleId: private_env.APNS_BUNDLE_ID || null,\n deviceTokenLength: private_env.DEVICE_TOKEN ? private_env.DEVICE_TOKEN.length : 0,\n fcm: {\n configured: hasProjectId && hasClientEmail && hasPrivateKey,\n hasClientEmail,\n hasPrivateKey,\n hasProjectId\n },\n production: private_env.APNS_PRODUCTION === \"true\"\n },\n environment: private_env.NODE_ENV || \"development\",\n status: \"healthy\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n version: \"1.1.0\"\n };\n const criticalChecks = [\n health.checks.hasDeviceToken,\n health.checks.hasAPNsConfig,\n health.checks.hasBundleId\n ];\n if (criticalChecks.some((check) => !check)) {\n health.status = \"degraded\";\n }\n if (!wantsDetails) {\n return json({ status: health.status, timestamp: health.timestamp });\n }\n return json(health);\n};\nexport {\n GET\n};\n"],"names":[],"mappings":";;;;AAGK,MAAC,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK;AAClC,EAAE,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,MAAM;AACjE,EAAE,IAAI,YAAY,EAAE;AACpB,IAAI,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;AAC3C,IAAI,IAAI,SAAS,EAAE,OAAO,SAAS;AACnC,EAAE;AACF,EAAE,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,cAAc;AACnD,EAAE,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,gBAAgB;AACvD,EAAE,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,eAAe;AACrD,EAAE,MAAM,MAAM,GAAG;AACjB,IAAI,MAAM,EAAE;AACZ,MAAM,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,OAAO;AACtC,MAAM,aAAa,EAAE,CAAC,EAAE,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,YAAY,IAAI,WAAW,CAAC,QAAQ,CAAC;AACpG,MAAM,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,cAAc;AAC/C,MAAM,cAAc,EAAE,CAAC,CAAC,WAAW,CAAC,YAAY;AAChD,MAAM,YAAY,EAAE,YAAY,IAAI,cAAc,IAAI;AACtD,KAAK;AACL,IAAI,aAAa,EAAE;AACnB,MAAM,SAAS,EAAE,WAAW,CAAC,WAAW,GAAG,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;AACjG,MAAM,QAAQ,EAAE,WAAW,CAAC,cAAc,IAAI,IAAI;AAClD,MAAM,iBAAiB,EAAE,WAAW,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;AACvF,MAAM,GAAG,EAAE;AACX,QAAQ,UAAU,EAAE,YAAY,IAAI,cAAc,IAAI,aAAa;AACnE,QAAQ,cAAc;AACtB,QAAQ,aAAa;AACrB,QAAQ;AACR,OAAO;AACP,MAAM,UAAU,EAAE,WAAW,CAAC,eAAe,KAAK;AAClD,KAAK;AACL,IAAI,WAAW,EAAE,WAAW,CAAC,QAAQ,IAAI,aAAa;AACtD,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,SAAS,EAAE,iBAAiB,IAAI,IAAI,EAAE,EAAE,WAAW,EAAE;AACzD,IAAI,OAAO,EAAE;AACb,GAAG;AACH,EAAE,MAAM,cAAc,GAAG;AACzB,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc;AAChC,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa;AAC/B,IAAI,MAAM,CAAC,MAAM,CAAC;AAClB,GAAG;AACH,EAAE,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE;AAC9C,IAAI,MAAM,CAAC,MAAM,GAAG,UAAU;AAC9B,EAAE;AACF,EAAE,IAAI,CAAC,YAAY,EAAE;AACrB,IAAI,OAAO,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;AACvE,EAAE;AACF,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB;;;;"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { j as json, b as private_env } from './shared-server-BDY8jh20.js';
|
|
2
|
+
import { v as validateAuth } from './auth-CEgFis71.js';
|
|
3
|
+
import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
|
|
4
|
+
import { homedir } from 'os';
|
|
5
|
+
import { join } from 'path';
|
|
6
|
+
import 'crypto';
|
|
7
|
+
|
|
8
|
+
const TOKENS_DIR = join(homedir(), ".shooter");
|
|
9
|
+
const TOKENS_FILE = join(TOKENS_DIR, "device-tokens.json");
|
|
10
|
+
function readTokens() {
|
|
11
|
+
try {
|
|
12
|
+
if (existsSync(TOKENS_FILE)) {
|
|
13
|
+
return JSON.parse(readFileSync(TOKENS_FILE, "utf-8"));
|
|
14
|
+
}
|
|
15
|
+
} catch {
|
|
16
|
+
}
|
|
17
|
+
return {};
|
|
18
|
+
}
|
|
19
|
+
function writeTokens(tokens) {
|
|
20
|
+
if (!existsSync(TOKENS_DIR)) {
|
|
21
|
+
mkdirSync(TOKENS_DIR, { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
writeFileSync(TOKENS_FILE, JSON.stringify(tokens, null, 2), "utf-8");
|
|
24
|
+
}
|
|
25
|
+
const POST = async ({ request }) => {
|
|
26
|
+
const authError = validateAuth(request);
|
|
27
|
+
if (authError) return authError;
|
|
28
|
+
let body;
|
|
29
|
+
try {
|
|
30
|
+
body = await request.json();
|
|
31
|
+
} catch {
|
|
32
|
+
return json({ error: "Invalid JSON body" }, { status: 400 });
|
|
33
|
+
}
|
|
34
|
+
const platform = body.platform;
|
|
35
|
+
if (!platform || platform !== "ios" && platform !== "android") {
|
|
36
|
+
return json(
|
|
37
|
+
{ error: 'Missing or invalid platform (must be "ios" or "android")' },
|
|
38
|
+
{ status: 400 }
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
const token = body.deviceToken || body.token;
|
|
42
|
+
if (!token || typeof token !== "string" || token.trim().length === 0) {
|
|
43
|
+
return json({ error: "Missing device token (deviceToken or token)" }, { status: 400 });
|
|
44
|
+
}
|
|
45
|
+
const tokens = readTokens();
|
|
46
|
+
tokens[platform] = token;
|
|
47
|
+
writeTokens(tokens);
|
|
48
|
+
if (platform === "ios") {
|
|
49
|
+
private_env.DEVICE_TOKEN = token;
|
|
50
|
+
}
|
|
51
|
+
console.log(`[device-token] Registered ${platform} token (length: ${token.length})`);
|
|
52
|
+
return json({
|
|
53
|
+
platform,
|
|
54
|
+
success: true,
|
|
55
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export { POST };
|
|
60
|
+
//# sourceMappingURL=_server.ts-ColfDHW8.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-ColfDHW8.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 return JSON.parse(readFileSync(TOKENS_FILE, \"utf-8\"));\n }\n } catch {\n }\n return {};\n}\nfunction writeTokens(tokens) {\n if (!existsSync(TOKENS_DIR)) {\n mkdirSync(TOKENS_DIR, { recursive: true });\n }\n writeFileSync(TOKENS_FILE, JSON.stringify(tokens, null, 2), \"utf-8\");\n}\nconst POST = async ({ request }) => {\n const authError = validateAuth(request);\n if (authError) return authError;\n let body;\n try {\n body = await request.json();\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 token = body.deviceToken || body.token;\n if (!token || typeof token !== \"string\" || token.trim().length === 0) {\n return json({ error: \"Missing device token (deviceToken or token)\" }, { status: 400 });\n }\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,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AAC3D,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,SAAS,EAAE,IAAI,EAAE,CAAC;AAC9C,EAAE;AACF,EAAE,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC;AACtE;AACK,MAAC,IAAI,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK;AACpC,EAAE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;AACzC,EAAE,IAAI,SAAS,EAAE,OAAO,SAAS;AACjC,EAAE,IAAI,IAAI;AACV,EAAE,IAAI;AACN,IAAI,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE;AAC/B,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,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK;AAC9C,EAAE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AACxE,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,6CAA6C,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC1F,EAAE;AACF,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;;;;"}
|