@juspay/shooter 1.8.0 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/.claude/hooks/notifier.cjs +490 -136
  2. package/bin/shooter.cjs +50 -14
  3. package/build/client/_app/immutable/chunks/3EfvnCrr.js +1 -0
  4. package/build/client/_app/immutable/chunks/3EfvnCrr.js.br +0 -0
  5. package/build/client/_app/immutable/chunks/3EfvnCrr.js.gz +0 -0
  6. package/build/client/_app/immutable/chunks/{B6b4w6vf.js → DaomQix1.js} +1 -1
  7. package/build/client/_app/immutable/chunks/DaomQix1.js.br +0 -0
  8. package/build/client/_app/immutable/chunks/{B6b4w6vf.js.gz → DaomQix1.js.gz} +0 -0
  9. package/build/client/_app/immutable/chunks/Dfn9ME_a.js +3 -0
  10. package/build/client/_app/immutable/chunks/Dfn9ME_a.js.br +0 -0
  11. package/build/client/_app/immutable/chunks/Dfn9ME_a.js.gz +0 -0
  12. package/build/client/_app/immutable/chunks/{C7SeOWDG.js → DuaEmHXZ.js} +1 -1
  13. package/build/client/_app/immutable/chunks/DuaEmHXZ.js.br +0 -0
  14. package/build/client/_app/immutable/chunks/DuaEmHXZ.js.gz +0 -0
  15. package/build/client/_app/immutable/entry/{app.CP7226A7.js → app.C23A4_LP.js} +2 -2
  16. package/build/client/_app/immutable/entry/app.C23A4_LP.js.br +0 -0
  17. package/build/client/_app/immutable/entry/app.C23A4_LP.js.gz +0 -0
  18. package/build/client/_app/immutable/entry/start.Dzoby1AT.js +1 -0
  19. package/build/client/_app/immutable/entry/start.Dzoby1AT.js.br +2 -0
  20. package/build/client/_app/immutable/entry/start.Dzoby1AT.js.gz +0 -0
  21. package/build/client/_app/immutable/nodes/{0.DwU44ZAj.js → 0.BgwfOZTV.js} +1 -1
  22. package/build/client/_app/immutable/nodes/0.BgwfOZTV.js.br +0 -0
  23. package/build/client/_app/immutable/nodes/0.BgwfOZTV.js.gz +0 -0
  24. package/build/client/_app/immutable/nodes/{1.CChG-n6d.js → 1.DunuP0ec.js} +1 -1
  25. package/build/client/_app/immutable/nodes/1.DunuP0ec.js.br +0 -0
  26. package/build/client/_app/immutable/nodes/1.DunuP0ec.js.gz +0 -0
  27. package/build/client/_app/immutable/nodes/{2.CzexDbwp.js → 2.dWYUfDXP.js} +2 -2
  28. package/build/client/_app/immutable/nodes/2.dWYUfDXP.js.br +0 -0
  29. package/build/client/_app/immutable/nodes/2.dWYUfDXP.js.gz +0 -0
  30. package/build/client/_app/immutable/nodes/{3.DC3WghxB.js → 3.rBWJMWFr.js} +3 -3
  31. package/build/client/_app/immutable/nodes/3.rBWJMWFr.js.br +0 -0
  32. package/build/client/_app/immutable/nodes/3.rBWJMWFr.js.gz +0 -0
  33. package/build/client/_app/immutable/nodes/5.BN2SM61w.js +1 -0
  34. package/build/client/_app/immutable/nodes/5.BN2SM61w.js.br +0 -0
  35. package/build/client/_app/immutable/nodes/5.BN2SM61w.js.gz +0 -0
  36. package/build/client/_app/immutable/nodes/{6.C4aXlZQd.js → 6.DDMVIiVk.js} +1 -1
  37. package/build/client/_app/immutable/nodes/6.DDMVIiVk.js.br +0 -0
  38. package/build/client/_app/immutable/nodes/6.DDMVIiVk.js.gz +0 -0
  39. package/build/client/_app/immutable/nodes/{7.DfniCleW.js → 7.DijtBcpt.js} +1 -1
  40. package/build/client/_app/immutable/nodes/7.DijtBcpt.js.br +0 -0
  41. package/build/client/_app/immutable/nodes/7.DijtBcpt.js.gz +0 -0
  42. package/build/client/_app/immutable/nodes/{8.D4AzZWcq.js → 8.Y_8EIs9h.js} +1 -1
  43. package/build/client/_app/immutable/nodes/8.Y_8EIs9h.js.br +0 -0
  44. package/build/client/_app/immutable/nodes/8.Y_8EIs9h.js.gz +0 -0
  45. package/build/client/_app/immutable/nodes/{9.gV8oJWv_.js → 9.BoJIHqox.js} +1 -1
  46. package/build/client/_app/immutable/nodes/9.BoJIHqox.js.br +0 -0
  47. package/build/client/_app/immutable/nodes/9.BoJIHqox.js.gz +0 -0
  48. package/build/client/_app/version.json +1 -1
  49. package/build/client/_app/version.json.br +0 -0
  50. package/build/client/_app/version.json.gz +0 -0
  51. package/build/server/chunks/{0-XyVDlEyN.js → 0-0CZFKlE-.js} +2 -2
  52. package/build/server/chunks/{0-XyVDlEyN.js.map → 0-0CZFKlE-.js.map} +1 -1
  53. package/build/server/chunks/{1-C3vZx9QL.js → 1-DLzdA7q9.js} +2 -2
  54. package/build/server/chunks/{1-C3vZx9QL.js.map → 1-DLzdA7q9.js.map} +1 -1
  55. package/build/server/chunks/{2-LWO3Q9-s.js → 2-DssNCbHE.js} +2 -2
  56. package/build/server/chunks/{2-LWO3Q9-s.js.map → 2-DssNCbHE.js.map} +1 -1
  57. package/build/server/chunks/{3-3WzO52IA.js → 3-xYdrp1JC.js} +2 -2
  58. package/build/server/chunks/{3-3WzO52IA.js.map → 3-xYdrp1JC.js.map} +1 -1
  59. package/build/server/chunks/{5-Bj49x3to.js → 5-DRhcUdp_.js} +2 -2
  60. package/build/server/chunks/{5-Bj49x3to.js.map → 5-DRhcUdp_.js.map} +1 -1
  61. package/build/server/chunks/{6-DjPIWYcj.js → 6-DpmjM0Zz.js} +2 -2
  62. package/build/server/chunks/{6-DjPIWYcj.js.map → 6-DpmjM0Zz.js.map} +1 -1
  63. package/build/server/chunks/{7-DF5FUXhP.js → 7-fZr6V0jx.js} +2 -2
  64. package/build/server/chunks/{7-DF5FUXhP.js.map → 7-fZr6V0jx.js.map} +1 -1
  65. package/build/server/chunks/{8-CejJgM0l.js → 8-C92Y2pM_.js} +2 -2
  66. package/build/server/chunks/{8-CejJgM0l.js.map → 8-C92Y2pM_.js.map} +1 -1
  67. package/build/server/chunks/{9-D1YMozmH.js → 9-xiLWXynw.js} +2 -2
  68. package/build/server/chunks/{9-D1YMozmH.js.map → 9-xiLWXynw.js.map} +1 -1
  69. package/build/server/chunks/{_server.ts-G8OeADGj.js → _server.ts-BMcbwZ2r.js} +8 -3
  70. package/build/server/chunks/_server.ts-BMcbwZ2r.js.map +1 -0
  71. package/build/server/chunks/{_server.ts-A9_tRR-K.js → _server.ts-D-vgx5UZ.js} +5 -3
  72. package/build/server/chunks/{_server.ts-A9_tRR-K.js.map → _server.ts-D-vgx5UZ.js.map} +1 -1
  73. package/build/server/chunks/library-apns-Dl3iRE2h.js +157 -0
  74. package/build/server/chunks/library-apns-Dl3iRE2h.js.map +1 -0
  75. package/build/server/index.js +1 -1
  76. package/build/server/index.js.map +1 -1
  77. package/build/server/manifest.js +12 -12
  78. package/build/server/manifest.js.map +1 -1
  79. package/package.json +1 -2
  80. package/server.ts +55 -3
  81. package/src/lib/modules/client/activity/summarizer.ts +1 -1
  82. package/src/lib/modules/client/dashboard/summarizer.ts +1 -2
  83. package/src/lib/modules/client/neurolink/cdn.ts +6 -0
  84. package/src/lib/modules/client/terminal/LaunchSheet.svelte +5 -12
  85. package/src/lib/modules/server/apn/library-apns.ts +138 -77
  86. package/src/lib/modules/server/fcm/fcm-service.ts +1 -0
  87. package/src/lib/types/apn.ts +11 -0
  88. package/src/routes/api/notify/+server.ts +2 -0
  89. package/src/routes/neurolink/+page.svelte +4 -6
  90. package/build/client/_app/immutable/chunks/B6b4w6vf.js.br +0 -0
  91. package/build/client/_app/immutable/chunks/BEa4nlMF.js +0 -3
  92. package/build/client/_app/immutable/chunks/BEa4nlMF.js.br +0 -0
  93. package/build/client/_app/immutable/chunks/BEa4nlMF.js.gz +0 -0
  94. package/build/client/_app/immutable/chunks/C7SeOWDG.js.br +0 -0
  95. package/build/client/_app/immutable/chunks/C7SeOWDG.js.gz +0 -0
  96. package/build/client/_app/immutable/chunks/DQM017d5.js +0 -1
  97. package/build/client/_app/immutable/chunks/DQM017d5.js.br +0 -0
  98. package/build/client/_app/immutable/chunks/DQM017d5.js.gz +0 -0
  99. package/build/client/_app/immutable/entry/app.CP7226A7.js.br +0 -0
  100. package/build/client/_app/immutable/entry/app.CP7226A7.js.gz +0 -0
  101. package/build/client/_app/immutable/entry/start.mGPvkOah.js +0 -1
  102. package/build/client/_app/immutable/entry/start.mGPvkOah.js.br +0 -2
  103. package/build/client/_app/immutable/entry/start.mGPvkOah.js.gz +0 -0
  104. package/build/client/_app/immutable/nodes/0.DwU44ZAj.js.br +0 -0
  105. package/build/client/_app/immutable/nodes/0.DwU44ZAj.js.gz +0 -0
  106. package/build/client/_app/immutable/nodes/1.CChG-n6d.js.br +0 -0
  107. package/build/client/_app/immutable/nodes/1.CChG-n6d.js.gz +0 -0
  108. package/build/client/_app/immutable/nodes/2.CzexDbwp.js.br +0 -0
  109. package/build/client/_app/immutable/nodes/2.CzexDbwp.js.gz +0 -0
  110. package/build/client/_app/immutable/nodes/3.DC3WghxB.js.br +0 -0
  111. package/build/client/_app/immutable/nodes/3.DC3WghxB.js.gz +0 -0
  112. package/build/client/_app/immutable/nodes/5.DRvLQ5NR.js +0 -1
  113. package/build/client/_app/immutable/nodes/5.DRvLQ5NR.js.br +0 -0
  114. package/build/client/_app/immutable/nodes/5.DRvLQ5NR.js.gz +0 -0
  115. package/build/client/_app/immutable/nodes/6.C4aXlZQd.js.br +0 -0
  116. package/build/client/_app/immutable/nodes/6.C4aXlZQd.js.gz +0 -0
  117. package/build/client/_app/immutable/nodes/7.DfniCleW.js.br +0 -0
  118. package/build/client/_app/immutable/nodes/7.DfniCleW.js.gz +0 -0
  119. package/build/client/_app/immutable/nodes/8.D4AzZWcq.js.br +0 -0
  120. package/build/client/_app/immutable/nodes/8.D4AzZWcq.js.gz +0 -0
  121. package/build/client/_app/immutable/nodes/9.gV8oJWv_.js.br +0 -0
  122. package/build/client/_app/immutable/nodes/9.gV8oJWv_.js.gz +0 -0
  123. package/build/server/chunks/_server.ts-G8OeADGj.js.map +0 -1
  124. package/build/server/chunks/library-apns-Cf-E-DhM.js +0 -107
  125. package/build/server/chunks/library-apns-Cf-E-DhM.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { b as private_env } from './shared-server-DaWdgxVh.js';
2
- import { L as LibraryAPNsService } from './library-apns-Cf-E-DhM.js';
2
+ import { L as LibraryAPNsService } from './library-apns-Dl3iRE2h.js';
3
3
  import { c as createPendingRequest } from './pending-requests-D8UiTw7L.js';
4
4
  import { v as validateAuth } from './auth-DuunT7Cg.js';
5
5
  import admin from 'firebase-admin';
@@ -9,7 +9,9 @@ import { existsSync, readFileSync } from 'fs';
9
9
  import { join } from 'path';
10
10
  import { j as json } from './index-CoD1IJuy.js';
11
11
  import { homedir } from 'os';
12
- import '@parse/node-apn';
12
+ import 'child_process';
13
+ import 'jsonwebtoken';
14
+ import 'util';
13
15
  import 'crypto';
14
16
 
15
17
  const MAX_HISTORY = 100;
@@ -43,6 +45,7 @@ async function sendFCMNotification(deviceToken, payload) {
43
45
  project: typeof payload.data?.project === "string" ? payload.data.project : "",
44
46
  requestId: typeof payload.data?.requestId === "string" ? payload.data.requestId : "",
45
47
  source: typeof payload.data?.source === "string" ? payload.data.source : "",
48
+ subtitle: payload.subtitle ?? "",
46
49
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
47
50
  title: payload.title,
48
51
  toolInput: payload.data?.toolInput ? JSON.stringify(payload.data.toolInput) : "",
@@ -269,6 +272,7 @@ const POST = async ({ request }) => {
269
272
  const requestDeviceToken = body.deviceToken;
270
273
  const message = body.message;
271
274
  const title = body.title;
275
+ const subtitle = typeof body.subtitle === "string" ? body.subtitle : void 0;
272
276
  const skipPush = typeof body.skipPush === "boolean" ? body.skipPush : false;
273
277
  const waitForResponse = typeof body.waitForResponse === "boolean" ? body.waitForResponse : false;
274
278
  try {
@@ -337,6 +341,7 @@ const POST = async ({ request }) => {
337
341
  },
338
342
  message: null,
339
343
  sound: "default",
344
+ ...subtitle ? { subtitle } : {},
340
345
  title
341
346
  };
342
347
  const platform = private_env.DEVICE_PLATFORM || "ios";
@@ -482,4 +487,4 @@ const GET = ({ request, url }) => {
482
487
  };
483
488
 
484
489
  export { GET, POST };
485
- //# sourceMappingURL=_server.ts-G8OeADGj.js.map
490
+ //# sourceMappingURL=_server.ts-BMcbwZ2r.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_server.ts-BMcbwZ2r.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/notify/_server.ts.js"],"sourcesContent":["import { b as private_env } from \"../../../../chunks/shared-server.js\";\nimport { L as LibraryAPNsService } from \"../../../../chunks/library-apns.js\";\nimport { c as createPendingRequest } from \"../../../../chunks/pending-requests.js\";\nimport { v as validateAuth } from \"../../../../chunks/auth.js\";\nimport admin from \"firebase-admin\";\nimport { t as toErrorMessage } from \"../../../../chunks/error.js\";\nimport { b as broadcastEvent } from \"../../../../chunks/events-handler.js\";\nimport { existsSync, readFileSync } from \"fs\";\nimport { join } from \"path\";\nimport { json } from \"@sveltejs/kit\";\nimport { homedir } from \"os\";\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}\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}\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 if (source === \"stop-hook\") {\n return {\n reason: \"Stop hook completion notification - session finished\",\n send: true\n };\n }\n const spamPatterns = [\n /PreToolUse/i,\n // Any PreToolUse notifications\n /PostToolUse/i,\n // Any PostToolUse notifications\n /^(Read|Write|Edit|Bash)\\s+Starting\\s*\\|\\s*\\w+$/i,\n // Only basic tool starting patterns\n /^unknown\\s*\\|\\s*\\w+$/i\n // Only \"unknown | projectname\" exactly\n ];\n const isSpam = spamPatterns.some((pattern) => pattern.test(title) || pattern.test(message));\n if (isSpam) {\n return {\n reason: \"Filtered spam notification from old hook system\",\n send: false\n };\n }\n const importantPatterns = [\n /session complete/i,\n /intervention needed/i,\n /error/i,\n /failed/i,\n /blocked/i,\n /attention/i\n ];\n const isImportant = importantPatterns.some(\n (pattern) => pattern.test(title) || pattern.test(message)\n );\n if (isImportant) {\n return {\n reason: \"Important notification - completion or intervention\",\n send: true\n };\n }\n return {\n reason: \"General notification - allowing by default\",\n send: true\n };\n}\nfunction isDuplicateNotification(title, message, data, waitForResponse = false) {\n if (waitForResponse) {\n return false;\n }\n const key = `${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 return false;\n}\nfunction recordNotification(title, message, data) {\n const key = `${title}|${message}|${data?.category || \"unknown\"}`;\n notificationCache.set(key, Date.now());\n}\nconst POST = async ({ request }) => {\n try {\n const apnsClient = getAPNsClient();\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n const rawBody = await request.json();\n if (!rawBody || typeof rawBody !== \"object\" || Array.isArray(rawBody)) {\n return json({ error: \"Request body must be a JSON object\" }, { status: 400 });\n }\n const body = rawBody;\n const data = body.data;\n const requestDeviceToken = body.deviceToken;\n const message = body.message;\n const title = body.title;\n const 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 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) {\n if (waitForResponse) {\n createPendingRequest(canonicalRequestId, {\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 category: waitForResponse ? \"CLAUDE_PERMISSION\" : void 0,\n data: {\n ...data,\n requestId: canonicalRequestId,\n source: \"modern-apns-api\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n waitForResponse: waitForResponse || false\n },\n message: null,\n sound: \"default\",\n ...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 = requestDeviceToken?.trim() || private_env.ANDROID_DEVICE_TOKEN?.trim() || readPersistedDeviceToken(\"android\");\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 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 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 = requestDeviceToken?.trim() || private_env.DEVICE_TOKEN?.trim();\n if (!deviceToken) {\n return json(\n {\n details: \"DEVICE_TOKEN environment variable is missing and no deviceToken in request body\",\n error: \"No device token configured\"\n },\n { status: 500 }\n );\n }\n try {\n const result = await apnsClient.sendNotification(deviceToken, payload);\n recordNotification(title, message, data);\n if (waitForResponse) {\n createPendingRequest(canonicalRequestId, {\n sessionId: data?.sessionId || \"\",\n toolInput: data?.toolInput || {},\n toolName: data?.toolName || \"\"\n });\n }\n addNotification(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 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,8 +1,10 @@
1
1
  import { b as private_env } from './shared-server-DaWdgxVh.js';
2
- import { L as LibraryAPNsService } from './library-apns-Cf-E-DhM.js';
2
+ import { L as LibraryAPNsService } from './library-apns-Dl3iRE2h.js';
3
3
  import { v as validateAuth } from './auth-DuunT7Cg.js';
4
4
  import { j as json } from './index-CoD1IJuy.js';
5
- import '@parse/node-apn';
5
+ import 'child_process';
6
+ import 'jsonwebtoken';
7
+ import 'util';
6
8
  import './error-DDXB3duW.js';
7
9
  import 'crypto';
8
10
 
@@ -34,4 +36,4 @@ const GET = ({ request }) => {
34
36
  };
35
37
 
36
38
  export { GET };
37
- //# sourceMappingURL=_server.ts-A9_tRR-K.js.map
39
+ //# sourceMappingURL=_server.ts-D-vgx5UZ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-A9_tRR-K.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
+ {"version":3,"file":"_server.ts-D-vgx5UZ.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;;;;"}
@@ -0,0 +1,157 @@
1
+ import { b as private_env } from './shared-server-DaWdgxVh.js';
2
+ import { execFileSync, execFile } from 'child_process';
3
+ import jwt from 'jsonwebtoken';
4
+ import { promisify } from 'util';
5
+ import { t as toErrorMessage } from './error-DDXB3duW.js';
6
+
7
+ const execFileAsync = promisify(execFile);
8
+ const APNS_HOST_PROD = "api.push.apple.com";
9
+ const APNS_HOST_SANDBOX = "api.sandbox.push.apple.com";
10
+ const JWT_REFRESH_INTERVAL_MS = 30 * 60 * 1e3;
11
+ const REQUEST_TIMEOUT_SECONDS = 15;
12
+ class LibraryAPNsService {
13
+ bundleId;
14
+ cachedJwt = null;
15
+ cachedJwtAt = 0;
16
+ configured = false;
17
+ host = "";
18
+ keyId;
19
+ privateKey;
20
+ teamId;
21
+ constructor() {
22
+ this.keyId = private_env.APNS_KEY_ID;
23
+ this.teamId = private_env.APNS_TEAM_ID;
24
+ this.bundleId = private_env.APNS_BUNDLE_ID;
25
+ this.privateKey = private_env.APNS_KEY;
26
+ if (!this.keyId || !this.teamId || !this.bundleId || !this.privateKey) {
27
+ console.error(
28
+ "[apns] Missing required configuration (APNS_KEY_ID, APNS_TEAM_ID, APNS_BUNDLE_ID, or APNS_KEY)"
29
+ );
30
+ this.configured = false;
31
+ return;
32
+ }
33
+ const production = private_env.APNS_PRODUCTION === "true";
34
+ this.host = production ? APNS_HOST_PROD : APNS_HOST_SANDBOX;
35
+ try {
36
+ execFileSync("curl", ["--version"], { stdio: "ignore" });
37
+ } catch (error) {
38
+ console.error(
39
+ "[apns] curl binary not found — install curl to enable APNs delivery:",
40
+ toErrorMessage(error)
41
+ );
42
+ this.configured = false;
43
+ return;
44
+ }
45
+ try {
46
+ this.getJwt();
47
+ this.configured = true;
48
+ console.log(
49
+ `[apns] Provider initialized (${production ? "production" : "sandbox"} mode, curl transport)`
50
+ );
51
+ } catch (error) {
52
+ console.error("[apns] Failed to initialize:", toErrorMessage(error));
53
+ this.configured = false;
54
+ }
55
+ }
56
+ isConfigured() {
57
+ return this.configured;
58
+ }
59
+ async sendNotification(deviceToken, payload) {
60
+ if (!this.configured) {
61
+ throw new Error("APNs service not configured properly");
62
+ }
63
+ if (!deviceToken || !payload) {
64
+ throw new Error("Device token and payload are required");
65
+ }
66
+ const aps = {
67
+ alert: {
68
+ body: payload.body ?? payload.message ?? "",
69
+ title: payload.title,
70
+ ...payload.subtitle ? { subtitle: payload.subtitle } : {}
71
+ },
72
+ badge: payload.badge ?? 1,
73
+ sound: payload.sound ?? "default"
74
+ };
75
+ if (payload.category) {
76
+ aps.category = payload.category;
77
+ }
78
+ const body = { aps };
79
+ if (payload.data) {
80
+ const { aps: _ignoredAps, ...customData } = payload.data;
81
+ Object.assign(body, customData);
82
+ }
83
+ const bodyJson = JSON.stringify(body);
84
+ const jwtToken = this.getJwt();
85
+ const url = `https://${this.host}/3/device/${deviceToken}`;
86
+ const args = [
87
+ "-sS",
88
+ "--http2",
89
+ "--max-time",
90
+ String(REQUEST_TIMEOUT_SECONDS),
91
+ "-X",
92
+ "POST",
93
+ "-H",
94
+ "content-type: application/json",
95
+ "-H",
96
+ `apns-topic: ${this.bundleId}`,
97
+ "-H",
98
+ `authorization: bearer ${jwtToken}`,
99
+ "-H",
100
+ "apns-push-type: alert",
101
+ "-H",
102
+ "apns-priority: 10",
103
+ "-d",
104
+ bodyJson,
105
+ "-w",
106
+ "\n__SHOOTER_HTTP_STATUS__:%{http_code}\n",
107
+ url
108
+ ];
109
+ try {
110
+ const { stdout } = await execFileAsync("curl", args, {
111
+ maxBuffer: 1024 * 1024,
112
+ timeout: (REQUEST_TIMEOUT_SECONDS + 5) * 1e3
113
+ });
114
+ const statusMatch = /__SHOOTER_HTTP_STATUS__:(\d+)/.exec(stdout);
115
+ const status = statusMatch ? parseInt(statusMatch[1], 10) : 0;
116
+ const bodyText = stdout.replace(/\n?__SHOOTER_HTTP_STATUS__:\d+\n?$/, "").trim();
117
+ if (status === 200) {
118
+ return { failed: 0, sent: 1, success: true };
119
+ }
120
+ let reason = bodyText;
121
+ try {
122
+ const parsed = JSON.parse(bodyText);
123
+ if (parsed && typeof parsed === "object" && "reason" in parsed && typeof parsed.reason === "string") {
124
+ reason = parsed.reason;
125
+ }
126
+ } catch {
127
+ }
128
+ console.error(`[apns] Delivery failed (status=${status}): ${reason}`);
129
+ return { error: reason, failed: 1, sent: 0, success: false };
130
+ } catch (err) {
131
+ const msg = toErrorMessage(err);
132
+ console.error(`[apns] curl transport error: ${msg}`);
133
+ return { error: msg, failed: 1, sent: 0, success: false };
134
+ }
135
+ }
136
+ shutdown() {
137
+ }
138
+ getJwt() {
139
+ const now = Date.now();
140
+ if (this.cachedJwt && now - this.cachedJwtAt < JWT_REFRESH_INTERVAL_MS) {
141
+ return this.cachedJwt;
142
+ }
143
+ if (!this.privateKey || !this.keyId || !this.teamId) {
144
+ throw new Error("APNs credentials missing");
145
+ }
146
+ const token = jwt.sign({ iat: Math.floor(now / 1e3), iss: this.teamId }, this.privateKey, {
147
+ algorithm: "ES256",
148
+ header: { alg: "ES256", kid: this.keyId }
149
+ });
150
+ this.cachedJwt = token;
151
+ this.cachedJwtAt = now;
152
+ return token;
153
+ }
154
+ }
155
+
156
+ export { LibraryAPNsService as L };
157
+ //# sourceMappingURL=library-apns-Dl3iRE2h.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library-apns-Dl3iRE2h.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 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 const bodyJson = JSON.stringify(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: alert\",\n \"-H\",\n \"apns-priority: 10\",\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);\n console.error(`[apns] curl transport error: ${msg}`);\n return { error: msg, failed: 1, sent: 0, success: false };\n }\n }\n shutdown() {\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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"}
@@ -1322,7 +1322,7 @@ const options = {
1322
1322
  <div class="error">
1323
1323
  <span class="status">` + status + '</span>\n <div class="message">\n <h1>' + message + "</h1>\n </div>\n </div>\n </body>\n</html>\n"
1324
1324
  },
1325
- version_hash: "jtudgz"
1325
+ version_hash: "1viglpw"
1326
1326
  };
1327
1327
  async function get_hooks() {
1328
1328
  let handle;