@juspay/shooter 1.24.1 → 1.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/hooks/notifier.cjs +32 -4
- package/bin/lib/service-manager.cjs +148 -0
- package/bin/shooter.cjs +151 -62
- package/build/client/_app/immutable/assets/{4.D4EDSN4H.css → 4.ChO_hlLs.css} +1 -1
- package/build/client/_app/immutable/assets/4.ChO_hlLs.css.br +0 -0
- package/build/client/_app/immutable/assets/4.ChO_hlLs.css.gz +0 -0
- package/build/client/_app/immutable/chunks/{DjWRwZyr.js → BstJSK2K.js} +1 -1
- package/build/client/_app/immutable/chunks/BstJSK2K.js.br +0 -0
- package/build/client/_app/immutable/chunks/BstJSK2K.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CfzjLyJm.js → DINqYbXU.js} +1 -1
- package/build/client/_app/immutable/chunks/DINqYbXU.js.br +0 -0
- package/build/client/_app/immutable/chunks/DINqYbXU.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ssAhjWfF.js +3 -0
- package/build/client/_app/immutable/chunks/ssAhjWfF.js.br +0 -0
- package/build/client/_app/immutable/chunks/ssAhjWfF.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.9F0rhLIY.js → app.BPK9s2o5.js} +2 -2
- package/build/client/_app/immutable/entry/app.BPK9s2o5.js.br +0 -0
- package/build/client/_app/immutable/entry/app.BPK9s2o5.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.DFPHuGE3.js +1 -0
- package/build/client/_app/immutable/entry/start.DFPHuGE3.js.br +2 -0
- package/build/client/_app/immutable/entry/start.DFPHuGE3.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{0.MlMcxYLT.js → 0.BEbzRcwm.js} +1 -1
- package/build/client/_app/immutable/nodes/0.BEbzRcwm.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.BEbzRcwm.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1._Bn-HQ9b.js → 1.C_V0SOr9.js} +1 -1
- package/build/client/_app/immutable/nodes/1.C_V0SOr9.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.C_V0SOr9.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{10.CsX0V4R9.js → 10.6V-37_Rl.js} +1 -1
- package/build/client/_app/immutable/nodes/10.6V-37_Rl.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.6V-37_Rl.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{11.lM_b6yUv.js → 11.Lzf-KC6L.js} +1 -1
- package/build/client/_app/immutable/nodes/11.Lzf-KC6L.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.Lzf-KC6L.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.sAnHf5go.js → 2.Cl2dMP2L.js} +1 -1
- package/build/client/_app/immutable/nodes/2.Cl2dMP2L.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.Cl2dMP2L.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{3.DEHWta3G.js → 3.CuX2eSna.js} +1 -1
- package/build/client/_app/immutable/nodes/3.CuX2eSna.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.CuX2eSna.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.2DvqoOaB.js +17 -0
- package/build/client/_app/immutable/nodes/4.2DvqoOaB.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.2DvqoOaB.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{6.-gDjaLSz.js → 6.C7e6zQyP.js} +1 -1
- package/build/client/_app/immutable/nodes/6.C7e6zQyP.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.C7e6zQyP.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.R-emDnvX.js → 7.1ygvNTnO.js} +1 -1
- package/build/client/_app/immutable/nodes/7.1ygvNTnO.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.1ygvNTnO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{8.DXNcFetv.js → 8.CBVmgOk0.js} +1 -1
- package/build/client/_app/immutable/nodes/8.CBVmgOk0.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.CBVmgOk0.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{9.Brv6N-Ji.js → 9.B-_ZFZhj.js} +1 -1
- package/build/client/_app/immutable/nodes/9.B-_ZFZhj.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.B-_ZFZhj.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/server/chunks/{0-CezVlDLP.js → 0-BHU07xt9.js} +2 -2
- package/build/server/chunks/{0-CezVlDLP.js.map → 0-BHU07xt9.js.map} +1 -1
- package/build/server/chunks/{1-CAwGzW00.js → 1-OVOd8GUH.js} +2 -2
- package/build/server/chunks/{1-CAwGzW00.js.map → 1-OVOd8GUH.js.map} +1 -1
- package/build/server/chunks/{10-pqorW2OP.js → 10-CRHtvb_u.js} +2 -2
- package/build/server/chunks/{10-pqorW2OP.js.map → 10-CRHtvb_u.js.map} +1 -1
- package/build/server/chunks/{11-Byxg_lSY.js → 11-CdSex9j1.js} +2 -2
- package/build/server/chunks/{11-Byxg_lSY.js.map → 11-CdSex9j1.js.map} +1 -1
- package/build/server/chunks/{2-Bbck5mN2.js → 2-bb78aIZ6.js} +2 -2
- package/build/server/chunks/{2-Bbck5mN2.js.map → 2-bb78aIZ6.js.map} +1 -1
- package/build/server/chunks/{3-BBFbA1P8.js → 3-CsTC6Lrn.js} +2 -2
- package/build/server/chunks/{3-BBFbA1P8.js.map → 3-CsTC6Lrn.js.map} +1 -1
- package/build/server/chunks/{4-w2W_T8ax.js → 4-DTTu8_Gr.js} +4 -4
- package/build/server/chunks/{4-w2W_T8ax.js.map → 4-DTTu8_Gr.js.map} +1 -1
- package/build/server/chunks/{6-BI3p-t3i.js → 6-BUgQGB_4.js} +2 -2
- package/build/server/chunks/{6-BI3p-t3i.js.map → 6-BUgQGB_4.js.map} +1 -1
- package/build/server/chunks/{7-6XKPVOSu.js → 7-CsQZnkcG.js} +2 -2
- package/build/server/chunks/{7-6XKPVOSu.js.map → 7-CsQZnkcG.js.map} +1 -1
- package/build/server/chunks/{8-VOztiJG_.js → 8-DcIuPdyW.js} +2 -2
- package/build/server/chunks/{8-VOztiJG_.js.map → 8-DcIuPdyW.js.map} +1 -1
- package/build/server/chunks/{9-DNUlBLEz.js → 9-D8bkM1uj.js} +2 -2
- package/build/server/chunks/{9-DNUlBLEz.js.map → 9-D8bkM1uj.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DDE2nChH.js → _page.svelte-BBbaKwNz.js} +101 -27
- package/build/server/chunks/_page.svelte-BBbaKwNz.js.map +1 -0
- package/build/server/chunks/{_server.ts-DfscXcFe.js → _server.ts-B7BLxK5u.js} +233 -186
- package/build/server/chunks/_server.ts-B7BLxK5u.js.map +1 -0
- package/build/server/chunks/{_server.ts-EJVmhLtg.js → _server.ts-BSS8cO80.js} +15 -3
- package/build/server/chunks/_server.ts-BSS8cO80.js.map +1 -0
- package/build/server/chunks/_server.ts-DNTxPoxO.js +115 -0
- package/build/server/chunks/_server.ts-DNTxPoxO.js.map +1 -0
- package/build/server/chunks/{_server.ts-D9_hkPQ6.js → _server.ts-DUb7fbuW.js} +17 -3
- package/build/server/chunks/_server.ts-DUb7fbuW.js.map +1 -0
- package/build/server/chunks/{_server.ts-v7TaT83B.js → _server.ts-FdKi8RwL.js} +7 -3
- package/build/server/chunks/_server.ts-FdKi8RwL.js.map +1 -0
- package/build/server/chunks/device-format-DTgEz4Yr.js +29 -0
- package/build/server/chunks/device-format-DTgEz4Yr.js.map +1 -0
- package/build/server/chunks/device-token-store-Ct7aTeR8.js +259 -0
- package/build/server/chunks/device-token-store-Ct7aTeR8.js.map +1 -0
- package/build/server/chunks/{library-apns-D8RPINlv.js → library-apns-DMlL1BAg.js} +158 -26
- package/build/server/chunks/library-apns-DMlL1BAg.js.map +1 -0
- package/build/server/index.js +1 -1
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +17 -17
- package/build/server/manifest.js.map +1 -1
- package/package.json +2 -2
- package/server.ts +15 -1
- package/src/app.d.ts +4 -0
- package/src/lib/modules/server/apn/apns-classify.ts +103 -0
- package/src/lib/modules/server/apn/library-apns.ts +151 -35
- package/src/lib/modules/server/apn/notify-fanout.ts +40 -0
- package/src/lib/modules/server/fcm/fcm-classify.ts +61 -0
- package/src/lib/modules/server/fcm/fcm-service.ts +128 -29
- package/src/lib/modules/server/push/device-format.ts +42 -0
- package/src/lib/modules/server/push/device-token-store.ts +354 -0
- package/src/lib/types/apn.ts +4 -0
- package/src/lib/types/device.ts +156 -0
- package/src/lib/types/index.ts +1 -0
- package/src/routes/api/debug/+server.ts +13 -1
- package/src/routes/api/device-token/+server.ts +122 -37
- package/src/routes/api/health/+server.ts +16 -2
- package/src/routes/api/notify/+server.ts +175 -168
- package/src/routes/api/qr-config/+server.ts +9 -2
- package/src/routes/config/+page.svelte +182 -44
- package/build/client/_app/immutable/assets/4.D4EDSN4H.css.br +0 -0
- package/build/client/_app/immutable/assets/4.D4EDSN4H.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BzW0vlVX.js +0 -3
- package/build/client/_app/immutable/chunks/BzW0vlVX.js.br +0 -0
- package/build/client/_app/immutable/chunks/BzW0vlVX.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CfzjLyJm.js.br +0 -0
- package/build/client/_app/immutable/chunks/CfzjLyJm.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DjWRwZyr.js.br +0 -0
- package/build/client/_app/immutable/chunks/DjWRwZyr.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.9F0rhLIY.js.br +0 -0
- package/build/client/_app/immutable/entry/app.9F0rhLIY.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.DGFWmhrj.js +0 -1
- package/build/client/_app/immutable/entry/start.DGFWmhrj.js.br +0 -2
- package/build/client/_app/immutable/entry/start.DGFWmhrj.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.MlMcxYLT.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.MlMcxYLT.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1._Bn-HQ9b.js.br +0 -0
- package/build/client/_app/immutable/nodes/1._Bn-HQ9b.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.CsX0V4R9.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.CsX0V4R9.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.lM_b6yUv.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.lM_b6yUv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.sAnHf5go.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.sAnHf5go.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.DEHWta3G.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.DEHWta3G.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.C9fv_m2R.js +0 -16
- package/build/client/_app/immutable/nodes/4.C9fv_m2R.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.C9fv_m2R.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.-gDjaLSz.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.-gDjaLSz.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.R-emDnvX.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.R-emDnvX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.DXNcFetv.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.DXNcFetv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.Brv6N-Ji.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.Brv6N-Ji.js.gz +0 -0
- package/build/server/chunks/_page.svelte-DDE2nChH.js.map +0 -1
- package/build/server/chunks/_server.ts-D2RS8TFd.js +0 -72
- package/build/server/chunks/_server.ts-D2RS8TFd.js.map +0 -1
- package/build/server/chunks/_server.ts-D9_hkPQ6.js.map +0 -1
- package/build/server/chunks/_server.ts-DfscXcFe.js.map +0 -1
- package/build/server/chunks/_server.ts-EJVmhLtg.js.map +0 -1
- package/build/server/chunks/_server.ts-v7TaT83B.js.map +0 -1
- package/build/server/chunks/library-apns-D8RPINlv.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_page.svelte-DDE2nChH.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/config/_page.svelte.js"],"sourcesContent":["import { b as attr_class, a as stringify, ab as attr, e as escape_html, c as ensure_array_like, h as head } from \"../../../chunks/index2.js\";\nimport \"../../../chunks/markdown.js\";\nimport { B as Button } from \"../../../chunks/Button.js\";\n/* empty css */\nimport { I as Input } from \"../../../chunks/Input.js\";\nimport { I as Icon } from \"../../../chunks/Icon.js\";\nimport { B as Banner } from \"../../../chunks/Banner.js\";\nfunction Step($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { stepIndex, label, icon, classes } = $$props;\n $$renderer2.push(`<div${attr_class(`step ${stringify(classes ?? \"\")}`, \"svelte-1i4mzd9\")} role=\"button\" tabindex=\"0\">`);\n if (typeof icon === \"string\" && icon.length > 0) {\n $$renderer2.push(\"<!--[0-->\");\n $$renderer2.push(`<div class=\"step-icon-container\"><img class=\"step-icon\"${attr(\"src\", icon)} alt=\"\"/></div>`);\n } else {\n $$renderer2.push(\"<!--[-1-->\");\n $$renderer2.push(`<div class=\"step-index-container svelte-1i4mzd9\"><div class=\"step-index-text svelte-1i4mzd9\">${escape_html(stepIndex)}</div></div>`);\n }\n $$renderer2.push(`<!--]--> <div class=\"step-text svelte-1i4mzd9\">${escape_html(label)}</div> <div class=\"separator svelte-1i4mzd9\"></div></div>`);\n });\n}\nfunction Stepper($$renderer, $$props) {\n let { steps, currentStepIndex, classes } = $$props;\n $$renderer.push(`<div${attr_class(`container ${stringify(classes ?? \"\")}`, \"svelte-dvxh34\")}><!--[-->`);\n const each_array = ensure_array_like(steps);\n for (let stepIndex = 0, $$length = each_array.length; stepIndex < $$length; stepIndex++) {\n let currentStep = each_array[stepIndex];\n $$renderer.push(`<div${attr_class(\"step-container svelte-dvxh34\", void 0, {\n \"active-step\": currentStepIndex === stepIndex,\n \"completed-step\": currentStepIndex > stepIndex\n })}>`);\n Step($$renderer, {\n label: currentStep.label,\n icon: currentStep.icon,\n stepIndex: stepIndex + 1\n });\n $$renderer.push(`<!----></div>`);\n }\n $$renderer.push(`<!--]--></div>`);\n}\nfunction Card($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { children, title, description, classes } = $$props;\n $$renderer2.push(`<div${attr_class(`card ${stringify(classes ?? \"\")}`, \"svelte-15b0v7e\")}>`);\n if (typeof title === \"string\" && title.length > 0) {\n $$renderer2.push(\"<!--[0-->\");\n $$renderer2.push(`<div class=\"card-header svelte-15b0v7e\"><div class=\"card-title svelte-15b0v7e\">${escape_html(title)}</div> `);\n if (typeof description === \"string\" && description.length > 0) {\n $$renderer2.push(\"<!--[0-->\");\n $$renderer2.push(`<div class=\"card-description svelte-15b0v7e\">${escape_html(description)}</div>`);\n } else {\n $$renderer2.push(\"<!--[-1-->\");\n }\n $$renderer2.push(`<!--]--></div>`);\n } else {\n $$renderer2.push(\"<!--[-1-->\");\n }\n $$renderer2.push(`<!--]--> <div class=\"card-content svelte-15b0v7e\">`);\n children($$renderer2);\n $$renderer2.push(`<!----></div></div>`);\n });\n}\nfunction toErrorMessage(err) {\n if (err instanceof Error) {\n return err.message;\n }\n if (typeof err === \"string\") {\n return err;\n }\n return String(err);\n}\nconst PROVIDERS = [\n {\n cors: \"proxy\",\n envKeys: [\"GOOGLE_AI_API_KEY\"],\n id: \"google-ai\",\n label: \"Google AI\",\n model: \"gemini-3.1-flash-lite-preview\"\n },\n {\n cors: \"proxy\",\n envKeys: [\"ANTHROPIC_API_KEY\"],\n id: \"anthropic\",\n label: \"Anthropic\",\n model: \"claude-haiku-4-5-20251001\"\n },\n {\n cors: \"proxy\",\n envKeys: [\"OPENAI_API_KEY\"],\n id: \"openai\",\n label: \"OpenAI\",\n model: \"gpt-4o-mini\"\n },\n {\n cors: \"proxy\",\n envKeys: [\"MISTRAL_API_KEY\"],\n id: \"mistral\",\n label: \"Mistral\",\n model: \"mistral-small-2506\"\n },\n {\n cors: \"proxy\",\n envKeys: [\"LITELLM_BASE_URL\"],\n id: \"litellm\",\n label: \"LiteLLM\",\n model: \"open-large\"\n }\n];\nconst AlertTriangleSvg = '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"/>\\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"/>\\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/>\\n</svg>\\n';\nconst CheckCircleSvg = '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"/>\\n <polyline points=\"22 4 12 14.01 9 11.01\"/>\\n</svg>\\n';\nconst PlaySvg = '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n <polygon points=\"5 3 19 12 5 21 5 3\"/>\\n</svg>\\n';\nconst XCircleSvg = '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"/>\\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"/>\\n</svg>\\n';\nfunction _page($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n const { data } = $$props;\n let serverUrl = \"\";\n let apiKey = \"\";\n let deviceToken = \"\";\n let result = \"\";\n let loading = false;\n let statusType = \"\";\n let qrDataUrl = \"\";\n let qrServerUrl = \"\";\n let qrLoading = false;\n let qrError = \"\";\n async function fetchQrCode() {\n if (!apiKey.trim()) {\n qrError = \"Save an API key first to generate a QR code\";\n return;\n }\n qrLoading = true;\n qrError = \"\";\n qrDataUrl = \"\";\n qrServerUrl = \"\";\n try {\n const response = await fetch(\"/api/qr-config\", { headers: { Authorization: `Bearer ${apiKey.trim()}` } });\n if (!response.ok) {\n const data3 = await response.json();\n qrError = data3.error || \"Failed to generate QR code\";\n return;\n }\n const data2 = await response.json();\n qrDataUrl = data2.dataUrl;\n qrServerUrl = data2.serverUrl;\n } catch (error) {\n qrError = `Network error: ${toErrorMessage(error)}`;\n } finally {\n qrLoading = false;\n }\n }\n function getNativeBridge() {\n if (typeof window === \"undefined\") {\n return null;\n }\n if (window.ShooterBridge) {\n return window.ShooterBridge;\n }\n if (window.ShooterNativeBridge) {\n return window.ShooterNativeBridge;\n }\n return null;\n }\n function getDefaultServerUrl() {\n return window.location.origin;\n }\n async function saveConfiguration() {\n loading = true;\n result = \"\";\n statusType = \"\";\n try {\n const trimmedUrl = serverUrl.trim().replace(/\\/+$/, \"\");\n localStorage.setItem(\"shooter_config\", JSON.stringify({\n apiKey: apiKey.trim(),\n deviceToken: deviceToken.trim(),\n lastUpdated: Date.now(),\n serverUrl: trimmedUrl || getDefaultServerUrl()\n }));\n const bridge = getNativeBridge();\n if (bridge) {\n bridge.saveConfig?.(JSON.stringify({\n apiKey: apiKey.trim(),\n serverUrl: trimmedUrl || getDefaultServerUrl()\n }));\n }\n const response = await fetch(\"/api/health\");\n if (response.ok) {\n result = \"Configuration saved successfully\";\n statusType = \"success\";\n } else {\n result = \"Configuration saved but system health check failed\";\n statusType = \"warning\";\n }\n } catch (error) {\n result = `Configuration failed: ${toErrorMessage(error)}`;\n statusType = \"error\";\n }\n loading = false;\n }\n async function testConfiguration() {\n if (!apiKey.trim()) {\n result = \"API key is required for testing\";\n statusType = \"error\";\n return;\n }\n loading = true;\n result = \"\";\n statusType = \"\";\n try {\n const testPayload = {\n data: { source: \"config-test\", timestamp: Date.now() },\n message: `Configuration test at ${(/* @__PURE__ */ new Date()).toLocaleTimeString()}`,\n title: \"Configuration Test\"\n };\n if (deviceToken.trim()) {\n testPayload.deviceToken = deviceToken.trim();\n }\n const response = await fetch(\"/api/notify\", {\n body: JSON.stringify(testPayload),\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\"\n },\n method: \"POST\"\n });\n const data2 = await response.json();\n if (response.ok) {\n result = \"Test notification sent successfully\";\n statusType = \"success\";\n } else {\n result = `Test failed: ${typeof data2.error === \"string\" ? data2.error : \"Unknown error\"}`;\n statusType = \"error\";\n }\n } catch (error) {\n result = `Network error: ${toErrorMessage(error)}`;\n statusType = \"error\";\n }\n loading = false;\n }\n function clearConfiguration() {\n }\n let $$settled = true;\n let $$inner_renderer;\n function $$render_inner($$renderer3) {\n head(\"1gp6n77\", $$renderer3, ($$renderer4) => {\n $$renderer4.title(($$renderer5) => {\n $$renderer5.push(`<title>Settings - Shooter</title>`);\n });\n $$renderer4.push(`<meta name=\"description\" content=\"Configure notification system settings\"/>`);\n });\n $$renderer3.push(`<main class=\"main\"><div class=\"settings-container svelte-1gp6n77\"><div style=\"margin-bottom: var(--space-4);\"><a href=\"/\" class=\"back-link\">← Back to Projects</a></div> <div class=\"page-header\"><h1 class=\"page-title\">Settings</h1> <p class=\"page-description\">Configure your API credentials and notification preferences</p></div> <div class=\"settings-grid svelte-1gp6n77\"><section class=\"settings-section svelte-1gp6n77\">`);\n Card($$renderer3, {\n title: \"Server Configuration\",\n description: \"Configure server connection and credentials\",\n children: ($$renderer4) => {\n Input($$renderer4, {\n name: \"serverUrl\",\n label: \"Server URL\",\n dataType: \"text\",\n placeholder: \"https://shooter.breezehq.dev\",\n infoMessage: \"Base URL of your Shooter server. Apps will reload with this URL on next launch.\",\n get value() {\n return serverUrl;\n },\n set value($$value) {\n serverUrl = $$value;\n $$settled = false;\n }\n });\n $$renderer4.push(`<!----> `);\n Input($$renderer4, {\n name: \"apiKey\",\n label: \"API Key\",\n dataType: \"password\",\n placeholder: \"Enter your API key\",\n infoMessage: \"Required for sending notifications\",\n get value() {\n return apiKey;\n },\n set value($$value) {\n apiKey = $$value;\n $$settled = false;\n }\n });\n $$renderer4.push(`<!----> <p class=\"input-help svelte-1gp6n77\">Find this in your <code class=\"svelte-1gp6n77\">~/.shooter/.env</code> file. Run <code class=\"svelte-1gp6n77\">shooter setup</code> to generate\n one.</p> `);\n Input($$renderer4, {\n name: \"deviceToken\",\n label: \"Device Token\",\n dataType: \"text\",\n placeholder: \"64-character hex string\",\n infoMessage: \"Device token from app registration\",\n classes: \"input-mono\",\n get value() {\n return deviceToken;\n },\n set value($$value) {\n deviceToken = $$value;\n $$settled = false;\n }\n });\n $$renderer4.push(`<!----> <p class=\"input-help svelte-1gp6n77\">Optional — only needed for iOS/Android push notifications.</p>`);\n }\n });\n $$renderer3.push(`<!----> `);\n if (result) {\n $$renderer3.push(\"<!--[0-->\");\n const bannerSvg = statusType === \"success\" ? CheckCircleSvg : statusType === \"error\" ? XCircleSvg : AlertTriangleSvg;\n {\n let icon = function($$renderer4) {\n Icon($$renderer4, { svg: bannerSvg, classes: \"icon-16\" });\n };\n Banner($$renderer3, {\n text: result,\n classes: `banner-${stringify(statusType || \"info\")}`,\n icon,\n $$slots: { icon: true }\n });\n }\n } else {\n $$renderer3.push(\"<!--[-1-->\");\n }\n $$renderer3.push(`<!--]--> <div class=\"button-group svelte-1gp6n77\">`);\n Button($$renderer3, {\n classes: \"btn-secondary\",\n onclick: testConfiguration,\n disabled: loading || !apiKey.trim(),\n children: ($$renderer4) => {\n if (!loading) {\n $$renderer4.push(\"<!--[0-->\");\n Icon($$renderer4, { svg: PlaySvg, classes: \"icon-14\" });\n } else {\n $$renderer4.push(\"<!--[-1-->\");\n }\n $$renderer4.push(`<!--]--> Test Connection`);\n },\n $$slots: { default: true }\n });\n $$renderer3.push(`<!----> `);\n Button($$renderer3, {\n classes: \"btn-primary\",\n onclick: saveConfiguration,\n disabled: loading || !apiKey.trim(),\n showLoader: loading,\n text: \"Save Changes\"\n });\n $$renderer3.push(`<!----></div></section> <aside class=\"settings-sidebar svelte-1gp6n77\">`);\n Card($$renderer3, {\n title: \"Setup Guide\",\n children: ($$renderer4) => {\n Stepper($$renderer4, {\n steps: [\n { label: \"Get API Key\" },\n { label: \"Find Device Token\" },\n { label: \"Test Connection\" }\n ],\n currentStepIndex: apiKey.trim() && deviceToken.trim() ? 2 : apiKey.trim() ? 1 : 0,\n classes: \"setup-stepper\"\n });\n }\n });\n $$renderer3.push(`<!----> `);\n Card($$renderer3, {\n title: \"Mobile App Setup\",\n description: \"Scan to connect your mobile app\",\n children: ($$renderer4) => {\n $$renderer4.push(`<div class=\"qr-section svelte-1gp6n77\">`);\n {\n $$renderer4.push(\"<!--[-1-->\");\n if (qrDataUrl) {\n $$renderer4.push(\"<!--[0-->\");\n $$renderer4.push(`<div class=\"qr-container svelte-1gp6n77\"><img${attr(\"src\", qrDataUrl)} alt=\"QR code for mobile app pairing\" class=\"qr-image svelte-1gp6n77\"/></div> <p class=\"qr-hint svelte-1gp6n77\">Scan this QR code with the Shooter iOS or Android app to connect.</p> `);\n if (qrServerUrl) {\n $$renderer4.push(\"<!--[0-->\");\n $$renderer4.push(`<p class=\"qr-server-url svelte-1gp6n77\">Server: <code class=\"svelte-1gp6n77\">${escape_html(qrServerUrl)}</code></p>`);\n } else {\n $$renderer4.push(\"<!--[-1-->\");\n }\n $$renderer4.push(`<!--]-->`);\n } else if (qrLoading) {\n $$renderer4.push(\"<!--[1-->\");\n $$renderer4.push(`<div class=\"qr-placeholder svelte-1gp6n77\"><p class=\"qr-loading-text svelte-1gp6n77\">Generating QR code...</p></div>`);\n } else if (qrError) {\n $$renderer4.push(\"<!--[2-->\");\n $$renderer4.push(`<p class=\"qr-error svelte-1gp6n77\">${escape_html(qrError)}</p>`);\n } else {\n $$renderer4.push(\"<!--[-1-->\");\n $$renderer4.push(`<p class=\"qr-description svelte-1gp6n77\">Generate a QR code containing your server URL and API key. Your mobile app can\n scan it to auto-configure the connection.</p>`);\n }\n $$renderer4.push(`<!--]--> `);\n Button($$renderer4, {\n classes: \"btn-secondary btn-sm\",\n onclick: fetchQrCode,\n disabled: qrLoading || !apiKey.trim(),\n text: qrDataUrl ? \"Regenerate QR Code\" : \"Generate QR Code\"\n });\n $$renderer4.push(`<!---->`);\n }\n $$renderer4.push(`<!--]--></div>`);\n }\n });\n $$renderer3.push(`<!----> `);\n Card($$renderer3, {\n title: \"AI Providers\",\n description: \"NeuroLink-powered summaries and AI features\",\n children: ($$renderer4) => {\n $$renderer4.push(`<div class=\"ai-providers svelte-1gp6n77\"><!--[-->`);\n const each_array = ensure_array_like(PROVIDERS);\n for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n let provider = each_array[$$index];\n $$renderer4.push(`<div class=\"provider-row svelte-1gp6n77\">`);\n Icon($$renderer4, {\n svg: data.aiProviders[provider.id] ? CheckCircleSvg : XCircleSvg,\n classes: \"icon-14\"\n });\n $$renderer4.push(`<!----> <span class=\"provider-label svelte-1gp6n77\">${escape_html(provider.label)}</span> <span${attr_class(\"provider-status svelte-1gp6n77\", void 0, { \"configured\": data.aiProviders[provider.id] })}>${escape_html(data.aiProviders[provider.id] ? \"configured\" : \"not configured\")}</span></div>`);\n }\n $$renderer4.push(`<!--]--> `);\n if (data.activeProvider) {\n $$renderer4.push(\"<!--[0-->\");\n $$renderer4.push(`<div class=\"active-provider svelte-1gp6n77\">Active: <strong>${escape_html(data.activeProvider)}</strong></div>`);\n } else if (Object.values(data.aiProviders).some(Boolean)) {\n $$renderer4.push(\"<!--[1-->\");\n $$renderer4.push(`<div class=\"active-provider svelte-1gp6n77\">Auto-detected from configured keys</div>`);\n } else {\n $$renderer4.push(\"<!--[-1-->\");\n $$renderer4.push(`<p class=\"ai-help svelte-1gp6n77\">Run <code class=\"svelte-1gp6n77\">shooter setup</code> to configure AI providers for summaries.</p>`);\n }\n $$renderer4.push(`<!--]--></div>`);\n }\n });\n $$renderer3.push(`<!----> `);\n Card($$renderer3, {\n title: \"Danger Zone\",\n children: ($$renderer4) => {\n $$renderer4.push(`<p class=\"danger-description svelte-1gp6n77\">Clear all saved configuration data from this device.</p> `);\n Button($$renderer4, {\n classes: \"btn-danger btn-sm\",\n onclick: clearConfiguration,\n text: \"Clear Configuration\"\n });\n $$renderer4.push(`<!---->`);\n }\n });\n $$renderer3.push(`<!----></aside></div></div></main>`);\n }\n do {\n $$settled = true;\n $$inner_renderer = $$renderer2.copy();\n $$render_inner($$inner_renderer);\n } while (!$$settled);\n $$renderer2.subsume($$inner_renderer);\n });\n}\nexport {\n _page as default\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { v as validateAuth } from './auth-DuunT7Cg.js';
|
|
2
|
-
import { j as json } from './index-lhTMmBNn.js';
|
|
3
|
-
import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
|
|
4
|
-
import { homedir } from 'os';
|
|
5
|
-
import { join } from 'path';
|
|
6
|
-
import './shared-server-DaWdgxVh.js';
|
|
7
|
-
import 'crypto';
|
|
8
|
-
|
|
9
|
-
const TOKENS_DIR = join(homedir(), ".shooter");
|
|
10
|
-
const TOKENS_FILE = join(TOKENS_DIR, "device-tokens.json");
|
|
11
|
-
function readTokens() {
|
|
12
|
-
try {
|
|
13
|
-
if (existsSync(TOKENS_FILE)) {
|
|
14
|
-
const parsed = JSON.parse(readFileSync(TOKENS_FILE, "utf-8"));
|
|
15
|
-
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
16
|
-
return {};
|
|
17
|
-
}
|
|
18
|
-
return parsed;
|
|
19
|
-
}
|
|
20
|
-
} catch {
|
|
21
|
-
}
|
|
22
|
-
return {};
|
|
23
|
-
}
|
|
24
|
-
function writeTokens(tokens) {
|
|
25
|
-
if (!existsSync(TOKENS_DIR)) {
|
|
26
|
-
mkdirSync(TOKENS_DIR, { mode: 448, recursive: true });
|
|
27
|
-
}
|
|
28
|
-
writeFileSync(TOKENS_FILE, JSON.stringify(tokens, null, 2), { encoding: "utf-8", mode: 384 });
|
|
29
|
-
}
|
|
30
|
-
const POST = async ({ request }) => {
|
|
31
|
-
const authError = validateAuth(request);
|
|
32
|
-
if (authError) {
|
|
33
|
-
return authError;
|
|
34
|
-
}
|
|
35
|
-
let body;
|
|
36
|
-
try {
|
|
37
|
-
const parsed = await request.json();
|
|
38
|
-
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
39
|
-
return json({ error: "Invalid JSON body: expected an object" }, { status: 400 });
|
|
40
|
-
}
|
|
41
|
-
body = parsed;
|
|
42
|
-
} catch {
|
|
43
|
-
return json({ error: "Invalid JSON body" }, { status: 400 });
|
|
44
|
-
}
|
|
45
|
-
const platform = body.platform;
|
|
46
|
-
if (!platform || platform !== "ios" && platform !== "android") {
|
|
47
|
-
return json(
|
|
48
|
-
{ error: 'Missing or invalid platform (must be "ios" or "android")' },
|
|
49
|
-
{ status: 400 }
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
const rawToken = body.deviceToken || body.token;
|
|
53
|
-
if (!rawToken || typeof rawToken !== "string" || rawToken.trim().length === 0) {
|
|
54
|
-
return json({ error: "Missing device token (deviceToken or token)" }, { status: 400 });
|
|
55
|
-
}
|
|
56
|
-
const token = rawToken.trim();
|
|
57
|
-
const tokens = readTokens();
|
|
58
|
-
tokens[platform] = token;
|
|
59
|
-
writeTokens(tokens);
|
|
60
|
-
if (platform === "ios") {
|
|
61
|
-
process.env.DEVICE_TOKEN = token;
|
|
62
|
-
}
|
|
63
|
-
console.log(`[device-token] Registered ${platform} token (length: ${token.length})`);
|
|
64
|
-
return json({
|
|
65
|
-
platform,
|
|
66
|
-
success: true,
|
|
67
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
68
|
-
});
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
export { POST };
|
|
72
|
-
//# sourceMappingURL=_server.ts-D2RS8TFd.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_server.ts-D2RS8TFd.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/device-token/_server.ts.js"],"sourcesContent":["import { 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 process.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":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_server.ts-D9_hkPQ6.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 { g as getProviderAvailability } from \"../../../../chunks/providers.js\";\nimport { json } from \"@sveltejs/kit\";\nimport { readFileSync } from \"fs\";\nimport { join } from \"path\";\nconst PKG_VERSION = (() => {\n const root = process.env.SHOOTER_PKG_ROOT || process.cwd();\n try {\n const pkg = JSON.parse(readFileSync(join(root, \"package.json\"), \"utf-8\"));\n return pkg.version || \"unknown\";\n } catch {\n return \"unknown\";\n }\n})();\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 aiProviders = getProviderAvailability(private_env);\n const hasAnyAiProvider = Object.values(aiProviders).some(Boolean);\n if (!hasAnyAiProvider) {\n warnings.push(\n 'No AI provider configured — AI summaries disabled. Run \"shooter setup\" to configure.'\n );\n }\n const health = {\n ai: {\n activeProvider: private_env.NEUROLINK_PROVIDER ?? \"auto\",\n hasAnyProvider: hasAnyAiProvider,\n providers: aiProviders\n },\n checks,\n configuration,\n environment: private_env.NODE_ENV || \"development\",\n status: \"healthy\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n version: PKG_VERSION,\n warnings\n };\n if (!wantsDetails) {\n const publicWarnings = health.warnings.filter((w) => !w.includes(\"AI provider\"));\n return json({\n status: health.status,\n timestamp: health.timestamp,\n version: health.version,\n warnings: publicWarnings\n });\n }\n return json(health);\n};\nexport {\n GET\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_server.ts-DfscXcFe.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 { existsSync, readFileSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\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 { b as broadcastEvent } from \"../../../../chunks/guest-registry.js\";\nimport \"../../../../chunks/super-session-handler.js\";\nimport { json } from \"@sveltejs/kit\";\nconst normalize = (value) => {\n const trimmed = value?.trim();\n return trimmed ? trimmed : void 0;\n};\nfunction readPersistedDeviceToken(platform) {\n const tokensFile = join(homedir(), \".shooter\", \"device-tokens.json\");\n if (!existsSync(tokensFile)) {\n return void 0;\n }\n try {\n const parsed = JSON.parse(readFileSync(tokensFile, \"utf-8\"));\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n const value = parsed[platform];\n return typeof value === \"string\" && value ? value : void 0;\n }\n } catch {\n }\n return void 0;\n}\nfunction resolveDeviceToken(requestToken, persistedToken, envToken) {\n return normalize(requestToken) ?? normalize(persistedToken) ?? normalize(envToken);\n}\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 subtitle: payload.subtitle ?? \"\",\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 broadcastHookEvent(body) {\n const data = body.data ?? {};\n const eventType = typeof data.eventType === \"string\" ? data.eventType : typeof body.eventType === \"string\" ? body.eventType : \"\";\n const tool = typeof data.tool === \"string\" ? data.tool : \"\";\n const terminalId = typeof data.terminalId === \"string\" ? data.terminalId : void 0;\n const sessionId = typeof data.sessionId === \"string\" ? data.sessionId : void 0;\n switch (eventType) {\n case \"error\":\n broadcastEvent({\n error: typeof data.error === \"string\" ? data.error : typeof data.message === \"string\" ? data.message : \"Unknown error\",\n terminalId,\n tool,\n type: \"tool-failed\"\n });\n break;\n case \"idle_input\":\n case \"session.idle\":\n broadcastEvent({\n message: typeof data.message === \"string\" ? data.message : \"\",\n sessionId,\n terminalId,\n type: \"agent-idle\"\n });\n break;\n case \"permission\":\n case \"permission_notification\":\n if (data.requestId && data.toolName) {\n broadcastEvent({\n input: typeof data.toolInput === \"object\" && data.toolInput !== null ? data.toolInput : {},\n requestId: data.requestId,\n tool: data.toolName,\n type: \"permission-requested\"\n });\n }\n break;\n case \"question\":\n broadcastEvent({\n message: typeof data.message === \"string\" ? data.message : \"\",\n sessionId,\n terminalId,\n type: \"agent-question\"\n });\n break;\n case \"tool.after\":\n broadcastEvent({ success: true, terminalId, tool, type: \"tool-completed\" });\n break;\n case \"tool.before\":\n broadcastEvent({\n command: typeof data.command === \"string\" ? data.command : \"\",\n filePath: typeof data.filePath === \"string\" ? data.filePath : typeof data.files === \"string\" ? data.files : \"\",\n terminalId,\n tool,\n type: \"tool-started\"\n });\n break;\n }\n}\nfunction buildNotificationRecord(id, title, message, status, data, error) {\n return {\n category: data?.category ?? null,\n data: data ?? null,\n error: error ?? null,\n id,\n message,\n project: data?.project ?? null,\n source: data?.source ?? null,\n status,\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n title,\n tool: data?.tool ?? null\n };\n}\nfunction intelligentNotificationFilter(title, message, data, waitForResponse = false) {\n const source = data?.source || \"unknown\";\n if (isDuplicateNotification(title, message, data, waitForResponse)) {\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 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, waitForResponse = false) {\n if (waitForResponse) {\n return false;\n }\n const dataRecord = data;\n const key = dataRecord?.dedupKey ? dataRecord.dedupKey : `${title}|${message}|${data?.category || \"unknown\"}`;\n const now = Date.now();\n if (notificationCache.has(key)) {\n const lastSent = notificationCache.get(key) ?? 0;\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 notificationCache.set(key, now);\n return false;\n}\nfunction notificationKey(title, message, data) {\n const dataRecord = data;\n return dataRecord?.dedupKey ?? `${title}|${message}|${data?.category || \"unknown\"}`;\n}\nfunction recordNotification(title, message, data) {\n notificationCache.set(notificationKey(title, message, data), Date.now());\n}\nfunction releaseNotification(title, message, data) {\n notificationCache.delete(notificationKey(title, message, data));\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 subtitle = typeof body.subtitle === \"string\" ? body.subtitle : void 0;\n const skipPush = typeof body.skipPush === \"boolean\" ? body.skipPush : false;\n const waitForResponse = typeof body.waitForResponse === \"boolean\" ? body.waitForResponse : false;\n const forcePush = typeof body.forcePush === \"boolean\" ? body.forcePush : false;\n const notificationCategory = typeof body.notificationCategory === \"string\" && body.notificationCategory.length > 0 ? body.notificationCategory : void 0;\n const question = typeof body.question === \"string\" ? body.question : void 0;\n const options = Array.isArray(body.options) && body.options.every((o) => o && typeof o === \"object\") ? body.options : void 0;\n const responseKindRaw = body.responseKind;\n const responseKind = responseKindRaw === \"hook\" || responseKindRaw === \"pty\" || responseKindRaw === \"info\" ? responseKindRaw : void 0;\n try {\n broadcastHookEvent(body);\n } catch {\n }\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(\n title,\n message,\n data,\n waitForResponse\n );\n if (!shouldSendNotification.send) {\n addNotification(\n buildNotificationRecord(\n canonicalRequestId,\n title,\n message,\n \"filtered\",\n data,\n shouldSendNotification.reason\n )\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 && !forcePush) {\n if (waitForResponse) {\n createPendingRequest(canonicalRequestId, {\n options,\n question: question ?? null,\n responseKind: responseKind ?? \"hook\",\n sessionId: data?.sessionId || \"\",\n toolInput: data?.toolInput || {},\n toolName: data?.toolName || \"\"\n });\n }\n addNotification(buildNotificationRecord(canonicalRequestId, title, message, \"skipped\", data));\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 // notificationCategory wins when explicitly set so plan-mode /\n // elicitation flows can pick CLAUDE_PLAN_APPROVAL / CHOICE_2..4.\n // Falls back to CLAUDE_PERMISSION for the legacy bidirectional\n // permission flow when only waitForResponse is provided.\n category: notificationCategory ?? (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 ...subtitle ? { subtitle } : {},\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 = resolveDeviceToken(\n requestDeviceToken,\n readPersistedDeviceToken(\"android\"),\n private_env.ANDROID_DEVICE_TOKEN\n );\n if (!androidToken) {\n return json(\n {\n details: \"No Android device token available — set ANDROID_DEVICE_TOKEN, pass deviceToken in the request body, or open the Android app so it can auto-register its FCM token.\",\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 options,\n question: question ?? null,\n responseKind: responseKind ?? \"hook\",\n sessionId: data?.sessionId || \"\",\n toolInput: data?.toolInput || {},\n toolName: data?.toolName || \"\"\n });\n }\n addNotification(buildNotificationRecord(canonicalRequestId, title, message, \"sent\", data));\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 releaseNotification(title, message, data);\n addNotification(\n buildNotificationRecord(\n canonicalRequestId,\n title,\n message,\n \"failed\",\n data,\n fcmResult.error\n )\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 = resolveDeviceToken(\n requestDeviceToken,\n readPersistedDeviceToken(\"ios\"),\n private_env.DEVICE_TOKEN\n );\n if (!deviceToken) {\n return json(\n {\n details: \"No iOS device token available — pass deviceToken in the request body, ensure ~/.shooter/device-tokens.json contains an ios token, or set DEVICE_TOKEN.\",\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 options,\n question: question ?? null,\n responseKind: responseKind ?? \"hook\",\n sessionId: data?.sessionId || \"\",\n toolInput: data?.toolInput || {},\n toolName: data?.toolName || \"\"\n });\n }\n addNotification(buildNotificationRecord(canonicalRequestId, title, message, \"sent\", data));\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 releaseNotification(title, message, data);\n addNotification(\n buildNotificationRecord(canonicalRequestId, title, message, \"failed\", data, notifErrMsg)\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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_server.ts-EJVmhLtg.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/debug/_server.ts.js"],"sourcesContent":["import { b as private_env } from \"../../../../chunks/shared-server.js\";\nimport { L as LibraryAPNsService } from \"../../../../chunks/library-apns.js\";\nimport { v as validateAuth } from \"../../../../chunks/auth.js\";\nimport { json } from \"@sveltejs/kit\";\nconst GET = ({ request }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n const apnsClient = new LibraryAPNsService();\n const deviceToken = private_env.DEVICE_TOKEN?.trim();\n return json({\n apns: {\n configured: apnsClient.isConfigured(),\n environment: private_env.APNS_PRODUCTION === \"true\" ? \"production\" : \"sandbox\",\n hasBundleId: !!private_env.APNS_BUNDLE_ID,\n hasKey: !!private_env.APNS_KEY,\n hasKeyId: !!private_env.APNS_KEY_ID,\n hasTeamId: !!private_env.APNS_TEAM_ID\n },\n deviceToken: {\n exists: !!deviceToken,\n length: deviceToken ? deviceToken.length : 0,\n valid: deviceToken ? /^[a-f0-9]{64}$/i.test(deviceToken) : false\n },\n environment: private_env.NODE_ENV || \"development\",\n hasApiKey: !!private_env.API_KEY,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n};\nexport {\n GET\n};\n"],"names":[],"mappings":";;;;;;;;;;AAIK,MAAC,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK;AAC7B,EAAE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;AACzC,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,OAAO,SAAS;AACpB,EAAE;AACF,EAAE,MAAM,UAAU,GAAG,IAAI,kBAAkB,EAAE;AAC7C,EAAE,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE;AACtD,EAAE,OAAO,IAAI,CAAC;AACd,IAAI,IAAI,EAAE;AACV,MAAM,UAAU,EAAE,UAAU,CAAC,YAAY,EAAE;AAC3C,MAAM,WAAW,EAAE,WAAW,CAAC,eAAe,KAAK,MAAM,GAAG,YAAY,GAAG,SAAS;AACpF,MAAM,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,cAAc;AAC/C,MAAM,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ;AACpC,MAAM,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW;AACzC,MAAM,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC;AAC/B,KAAK;AACL,IAAI,WAAW,EAAE;AACjB,MAAM,MAAM,EAAE,CAAC,CAAC,WAAW;AAC3B,MAAM,MAAM,EAAE,WAAW,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;AAClD,MAAM,KAAK,EAAE,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG;AACjE,KAAK;AACL,IAAI,WAAW,EAAE,WAAW,CAAC,QAAQ,IAAI,aAAa;AACtD,IAAI,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,OAAO;AACpC,IAAI,SAAS,EAAE,iBAAiB,IAAI,IAAI,EAAE,EAAE,WAAW;AACvD,GAAG,CAAC;AACJ;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_server.ts-v7TaT83B.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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"library-apns-D8RPINlv.js","sources":["../../../.svelte-kit/adapter-node/chunks/library-apns.js"],"sourcesContent":["import { b as private_env } from \"./shared-server.js\";\nimport { execFile, execFileSync } from \"child_process\";\nimport jwt from \"jsonwebtoken\";\nimport { promisify } from \"util\";\nimport { t as toErrorMessage } from \"./error.js\";\nconst APNS_MAX_BYTES = 3900;\nconst ELLIPSIS = \"…\";\nfunction fitApnsPayload(body, maxBytes = APNS_MAX_BYTES) {\n if (payloadBytes(body) <= maxBytes) {\n return body;\n }\n const aps = body.aps;\n const alert = aps?.alert;\n if (!alert) {\n return body;\n }\n for (const field of [\"body\", \"subtitle\"]) {\n if (payloadBytes(body) <= maxBytes) {\n break;\n }\n const value = alert[field];\n if (typeof value !== \"string\" || value.length === 0) {\n continue;\n }\n let text = value;\n while (payloadBytes(body) > maxBytes && text.length > 0) {\n const cut = Math.max(1, Math.ceil(text.length * 0.12));\n text = text.slice(0, text.length - cut);\n alert[field] = text.length > 0 ? text + ELLIPSIS : void 0;\n }\n }\n return body;\n}\nfunction payloadBytes(body) {\n return Buffer.byteLength(JSON.stringify(body), \"utf8\");\n}\nconst execFileAsync = promisify(execFile);\nconst APNS_HOST_PROD = \"api.push.apple.com\";\nconst APNS_HOST_SANDBOX = \"api.sandbox.push.apple.com\";\nconst JWT_REFRESH_INTERVAL_MS = 30 * 60 * 1e3;\nconst REQUEST_TIMEOUT_SECONDS = 15;\nclass LibraryAPNsService {\n bundleId;\n cachedJwt = null;\n cachedJwtAt = 0;\n configured = false;\n host = \"\";\n keyId;\n privateKey;\n teamId;\n constructor() {\n this.keyId = private_env.APNS_KEY_ID;\n this.teamId = private_env.APNS_TEAM_ID;\n this.bundleId = private_env.APNS_BUNDLE_ID;\n this.privateKey = private_env.APNS_KEY;\n if (!this.keyId || !this.teamId || !this.bundleId || !this.privateKey) {\n console.error(\n \"[apns] Missing required configuration (APNS_KEY_ID, APNS_TEAM_ID, APNS_BUNDLE_ID, or APNS_KEY)\"\n );\n this.configured = false;\n return;\n }\n const production = private_env.APNS_PRODUCTION === \"true\";\n this.host = production ? APNS_HOST_PROD : APNS_HOST_SANDBOX;\n try {\n execFileSync(\"curl\", [\"--version\"], { stdio: \"ignore\" });\n } catch (error) {\n console.error(\n \"[apns] curl binary not found — install curl to enable APNs delivery:\",\n toErrorMessage(error)\n );\n this.configured = false;\n return;\n }\n try {\n this.getJwt();\n this.configured = true;\n console.log(\n `[apns] Provider initialized (${production ? \"production\" : \"sandbox\"} mode, curl transport)`\n );\n } catch (error) {\n console.error(\"[apns] Failed to initialize:\", toErrorMessage(error));\n this.configured = false;\n }\n }\n isConfigured() {\n return this.configured;\n }\n async sendNotification(deviceToken, payload) {\n if (!this.configured) {\n throw new Error(\"APNs service not configured properly\");\n }\n if (!deviceToken || !payload) {\n throw new Error(\"Device token and payload are required\");\n }\n const aps = {\n alert: {\n body: payload.body ?? payload.message ?? \"\",\n title: payload.title,\n ...payload.subtitle ? { subtitle: payload.subtitle } : {}\n },\n badge: payload.badge ?? 1,\n sound: payload.sound ?? \"default\"\n };\n if (payload.category) {\n aps.category = payload.category;\n }\n const body = { aps };\n if (payload.data) {\n const { aps: _ignoredAps, ...customData } = payload.data;\n Object.assign(body, customData);\n }\n return this.deliver(deviceToken, body, \"alert\", \"10\");\n }\n /**\n * Send a SILENT (content-available) background push to wake a backgrounded app without\n * showing an alert — used to wake the phone-resident agent loop so it can run a burst.\n * Uses apns-push-type:background + apns-priority:5 (required by APNs for silent pushes).\n * iOS throttles these (a few per hour); delivery is best-effort.\n */\n async sendSilentNotification(deviceToken, data) {\n if (!this.configured) {\n throw new Error(\"APNs service not configured properly\");\n }\n if (!deviceToken) {\n throw new Error(\"Device token is required\");\n }\n const body = { aps: { \"content-available\": 1 } };\n if (data) {\n const { aps: _ignoredAps, ...customData } = data;\n Object.assign(body, customData);\n }\n return this.deliver(deviceToken, body, \"background\", \"5\");\n }\n shutdown() {\n }\n /** Shared curl/HTTP-2 delivery. `pushType` is 'alert' | 'background', `priority` '10' | '5'. */\n async deliver(deviceToken, body, pushType, priority) {\n const bodyJson = JSON.stringify(fitApnsPayload(body));\n const jwtToken = this.getJwt();\n const url = `https://${this.host}/3/device/${deviceToken}`;\n const args = [\n \"-sS\",\n \"--http2\",\n \"--max-time\",\n String(REQUEST_TIMEOUT_SECONDS),\n \"-X\",\n \"POST\",\n \"-H\",\n \"content-type: application/json\",\n \"-H\",\n `apns-topic: ${this.bundleId}`,\n \"-H\",\n `authorization: bearer ${jwtToken}`,\n \"-H\",\n `apns-push-type: ${pushType}`,\n \"-H\",\n `apns-priority: ${priority}`,\n \"-d\",\n bodyJson,\n \"-w\",\n \"\\n__SHOOTER_HTTP_STATUS__:%{http_code}\\n\",\n url\n ];\n try {\n const { stdout } = await execFileAsync(\"curl\", args, {\n maxBuffer: 1024 * 1024,\n timeout: (REQUEST_TIMEOUT_SECONDS + 5) * 1e3\n });\n const statusMatch = /__SHOOTER_HTTP_STATUS__:(\\d+)/.exec(stdout);\n const status = statusMatch ? parseInt(statusMatch[1], 10) : 0;\n const bodyText = stdout.replace(/\\n?__SHOOTER_HTTP_STATUS__:\\d+\\n?$/, \"\").trim();\n if (status === 200) {\n return { failed: 0, sent: 1, success: true };\n }\n let reason = bodyText;\n try {\n const parsed = JSON.parse(bodyText);\n if (parsed && typeof parsed === \"object\" && \"reason\" in parsed && typeof parsed.reason === \"string\") {\n reason = parsed.reason;\n }\n } catch {\n }\n console.error(`[apns] Delivery failed (status=${status}): ${reason}`);\n return { error: reason, failed: 1, sent: 0, success: false };\n } catch (err) {\n const msg = toErrorMessage(err).replace(/bearer\\s+[A-Za-z0-9._-]+/gi, \"bearer [REDACTED]\").replace(/device\\/[A-Fa-f0-9]+/g, \"device/[REDACTED]\");\n console.error(`[apns] curl transport error: ${msg}`);\n return { error: msg, failed: 1, sent: 0, success: false };\n }\n }\n getJwt() {\n const now = Date.now();\n if (this.cachedJwt && now - this.cachedJwtAt < JWT_REFRESH_INTERVAL_MS) {\n return this.cachedJwt;\n }\n if (!this.privateKey || !this.keyId || !this.teamId) {\n throw new Error(\"APNs credentials missing\");\n }\n const token = jwt.sign({ iat: Math.floor(now / 1e3), iss: this.teamId }, this.privateKey, {\n algorithm: \"ES256\",\n header: { alg: \"ES256\", kid: this.keyId }\n });\n this.cachedJwt = token;\n this.cachedJwtAt = now;\n return token;\n }\n}\nexport {\n LibraryAPNsService as L\n};\n"],"names":[],"mappings":"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"}
|