@ultracart/bq-skill 0.1.2

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 (303) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +952 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +42 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/alarm.d.ts +3 -0
  8. package/dist/commands/alarm.d.ts.map +1 -0
  9. package/dist/commands/alarm.js +146 -0
  10. package/dist/commands/alarm.js.map +1 -0
  11. package/dist/commands/config.d.ts +3 -0
  12. package/dist/commands/config.d.ts.map +1 -0
  13. package/dist/commands/config.js +749 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/deck.d.ts +3 -0
  16. package/dist/commands/deck.d.ts.map +1 -0
  17. package/dist/commands/deck.js +567 -0
  18. package/dist/commands/deck.js.map +1 -0
  19. package/dist/commands/dry-run.d.ts +3 -0
  20. package/dist/commands/dry-run.d.ts.map +1 -0
  21. package/dist/commands/dry-run.js +105 -0
  22. package/dist/commands/dry-run.js.map +1 -0
  23. package/dist/commands/history.d.ts +3 -0
  24. package/dist/commands/history.d.ts.map +1 -0
  25. package/dist/commands/history.js +127 -0
  26. package/dist/commands/history.js.map +1 -0
  27. package/dist/commands/init.d.ts +3 -0
  28. package/dist/commands/init.d.ts.map +1 -0
  29. package/dist/commands/init.js +302 -0
  30. package/dist/commands/init.js.map +1 -0
  31. package/dist/commands/install-skill.d.ts +3 -0
  32. package/dist/commands/install-skill.d.ts.map +1 -0
  33. package/dist/commands/install-skill.js +132 -0
  34. package/dist/commands/install-skill.js.map +1 -0
  35. package/dist/commands/list.d.ts +3 -0
  36. package/dist/commands/list.d.ts.map +1 -0
  37. package/dist/commands/list.js +89 -0
  38. package/dist/commands/list.js.map +1 -0
  39. package/dist/commands/query.d.ts +3 -0
  40. package/dist/commands/query.d.ts.map +1 -0
  41. package/dist/commands/query.js +152 -0
  42. package/dist/commands/query.js.map +1 -0
  43. package/dist/commands/render.d.ts +3 -0
  44. package/dist/commands/render.d.ts.map +1 -0
  45. package/dist/commands/render.js +107 -0
  46. package/dist/commands/render.js.map +1 -0
  47. package/dist/commands/run-all.d.ts +3 -0
  48. package/dist/commands/run-all.d.ts.map +1 -0
  49. package/dist/commands/run-all.js +285 -0
  50. package/dist/commands/run-all.js.map +1 -0
  51. package/dist/commands/run.d.ts +3 -0
  52. package/dist/commands/run.d.ts.map +1 -0
  53. package/dist/commands/run.js +321 -0
  54. package/dist/commands/run.js.map +1 -0
  55. package/dist/commands/schema.d.ts +3 -0
  56. package/dist/commands/schema.d.ts.map +1 -0
  57. package/dist/commands/schema.js +271 -0
  58. package/dist/commands/schema.js.map +1 -0
  59. package/dist/commands/validate.d.ts +3 -0
  60. package/dist/commands/validate.d.ts.map +1 -0
  61. package/dist/commands/validate.js +109 -0
  62. package/dist/commands/validate.js.map +1 -0
  63. package/dist/lib/alarm-notify.d.ts +16 -0
  64. package/dist/lib/alarm-notify.d.ts.map +1 -0
  65. package/dist/lib/alarm-notify.js +312 -0
  66. package/dist/lib/alarm-notify.js.map +1 -0
  67. package/dist/lib/alarm-state.d.ts +26 -0
  68. package/dist/lib/alarm-state.d.ts.map +1 -0
  69. package/dist/lib/alarm-state.js +118 -0
  70. package/dist/lib/alarm-state.js.map +1 -0
  71. package/dist/lib/alarm.d.ts +28 -0
  72. package/dist/lib/alarm.d.ts.map +1 -0
  73. package/dist/lib/alarm.js +215 -0
  74. package/dist/lib/alarm.js.map +1 -0
  75. package/dist/lib/analysis.d.ts +16 -0
  76. package/dist/lib/analysis.d.ts.map +1 -0
  77. package/dist/lib/analysis.js +134 -0
  78. package/dist/lib/analysis.js.map +1 -0
  79. package/dist/lib/bigquery.d.ts +55 -0
  80. package/dist/lib/bigquery.d.ts.map +1 -0
  81. package/dist/lib/bigquery.js +321 -0
  82. package/dist/lib/bigquery.js.map +1 -0
  83. package/dist/lib/config-writer.d.ts +3 -0
  84. package/dist/lib/config-writer.d.ts.map +1 -0
  85. package/dist/lib/config-writer.js +60 -0
  86. package/dist/lib/config-writer.js.map +1 -0
  87. package/dist/lib/config.d.ts +63 -0
  88. package/dist/lib/config.d.ts.map +1 -0
  89. package/dist/lib/config.js +151 -0
  90. package/dist/lib/config.js.map +1 -0
  91. package/dist/lib/dashboard.d.ts +3 -0
  92. package/dist/lib/dashboard.d.ts.map +1 -0
  93. package/dist/lib/dashboard.js +468 -0
  94. package/dist/lib/dashboard.js.map +1 -0
  95. package/dist/lib/deck.d.ts +58 -0
  96. package/dist/lib/deck.d.ts.map +1 -0
  97. package/dist/lib/deck.js +232 -0
  98. package/dist/lib/deck.js.map +1 -0
  99. package/dist/lib/deliver-email.d.ts +14 -0
  100. package/dist/lib/deliver-email.d.ts.map +1 -0
  101. package/dist/lib/deliver-email.js +360 -0
  102. package/dist/lib/deliver-email.js.map +1 -0
  103. package/dist/lib/deliver-slack.d.ts +6 -0
  104. package/dist/lib/deliver-slack.d.ts.map +1 -0
  105. package/dist/lib/deliver-slack.js +73 -0
  106. package/dist/lib/deliver-slack.js.map +1 -0
  107. package/dist/lib/deliver.d.ts +10 -0
  108. package/dist/lib/deliver.d.ts.map +1 -0
  109. package/dist/lib/deliver.js +95 -0
  110. package/dist/lib/deliver.js.map +1 -0
  111. package/dist/lib/llm/anthropic.d.ts +7 -0
  112. package/dist/lib/llm/anthropic.d.ts.map +1 -0
  113. package/dist/lib/llm/anthropic.js +69 -0
  114. package/dist/lib/llm/anthropic.js.map +1 -0
  115. package/dist/lib/llm/bedrock.d.ts +7 -0
  116. package/dist/lib/llm/bedrock.d.ts.map +1 -0
  117. package/dist/lib/llm/bedrock.js +67 -0
  118. package/dist/lib/llm/bedrock.js.map +1 -0
  119. package/dist/lib/llm/gemini.d.ts +7 -0
  120. package/dist/lib/llm/gemini.d.ts.map +1 -0
  121. package/dist/lib/llm/gemini.js +67 -0
  122. package/dist/lib/llm/gemini.js.map +1 -0
  123. package/dist/lib/llm/index.d.ts +5 -0
  124. package/dist/lib/llm/index.d.ts.map +1 -0
  125. package/dist/lib/llm/index.js +61 -0
  126. package/dist/lib/llm/index.js.map +1 -0
  127. package/dist/lib/llm/models.d.ts +5 -0
  128. package/dist/lib/llm/models.d.ts.map +1 -0
  129. package/dist/lib/llm/models.js +33 -0
  130. package/dist/lib/llm/models.js.map +1 -0
  131. package/dist/lib/llm/openai.d.ts +8 -0
  132. package/dist/lib/llm/openai.d.ts.map +1 -0
  133. package/dist/lib/llm/openai.js +48 -0
  134. package/dist/lib/llm/openai.js.map +1 -0
  135. package/dist/lib/llm/provider.d.ts +28 -0
  136. package/dist/lib/llm/provider.d.ts.map +1 -0
  137. package/dist/lib/llm/provider.js +3 -0
  138. package/dist/lib/llm/provider.js.map +1 -0
  139. package/dist/lib/manifest.d.ts +95 -0
  140. package/dist/lib/manifest.d.ts.map +1 -0
  141. package/dist/lib/manifest.js +105 -0
  142. package/dist/lib/manifest.js.map +1 -0
  143. package/dist/lib/params.d.ts +27 -0
  144. package/dist/lib/params.d.ts.map +1 -0
  145. package/dist/lib/params.js +192 -0
  146. package/dist/lib/params.js.map +1 -0
  147. package/dist/lib/pdf.d.ts +8 -0
  148. package/dist/lib/pdf.d.ts.map +1 -0
  149. package/dist/lib/pdf.js +86 -0
  150. package/dist/lib/pdf.js.map +1 -0
  151. package/dist/lib/renderer.d.ts +17 -0
  152. package/dist/lib/renderer.d.ts.map +1 -0
  153. package/dist/lib/renderer.js +166 -0
  154. package/dist/lib/renderer.js.map +1 -0
  155. package/dist/lib/schema-filter.d.ts +3 -0
  156. package/dist/lib/schema-filter.d.ts.map +1 -0
  157. package/dist/lib/schema-filter.js +49 -0
  158. package/dist/lib/schema-filter.js.map +1 -0
  159. package/dist/lib/template.d.ts +4 -0
  160. package/dist/lib/template.d.ts.map +1 -0
  161. package/dist/lib/template.js +37 -0
  162. package/dist/lib/template.js.map +1 -0
  163. package/dist/lib/validator.d.ts +8 -0
  164. package/dist/lib/validator.d.ts.map +1 -0
  165. package/dist/lib/validator.js +88 -0
  166. package/dist/lib/validator.js.map +1 -0
  167. package/package.json +59 -0
  168. package/schemas/deck.schema.json +122 -0
  169. package/schemas/report-manifest.schema.json +309 -0
  170. package/schemas/tables/README.md +45 -0
  171. package/schemas/tables/ultracart_dw/uc_affiliate_clicks.json +186 -0
  172. package/schemas/tables/ultracart_dw/uc_affiliate_commission_groups.json +317 -0
  173. package/schemas/tables/ultracart_dw/uc_affiliate_ledgers.json +404 -0
  174. package/schemas/tables/ultracart_dw/uc_affiliate_network_pixel_postback_logs.json +166 -0
  175. package/schemas/tables/ultracart_dw/uc_affiliate_network_pixels.json +106 -0
  176. package/schemas/tables/ultracart_dw/uc_affiliate_payments.json +204 -0
  177. package/schemas/tables/ultracart_dw/uc_affiliate_postback_logs.json +90 -0
  178. package/schemas/tables/ultracart_dw/uc_affiliates.json +425 -0
  179. package/schemas/tables/ultracart_dw/uc_auto_orders.json +13848 -0
  180. package/schemas/tables/ultracart_dw/uc_cart_abandons.json +3971 -0
  181. package/schemas/tables/ultracart_dw/uc_conversation_pbx_calls.json +374 -0
  182. package/schemas/tables/ultracart_dw/uc_conversations.json +374 -0
  183. package/schemas/tables/ultracart_dw/uc_coupons.json +1893 -0
  184. package/schemas/tables/ultracart_dw/uc_customers.json +11886 -0
  185. package/schemas/tables/ultracart_dw/uc_fraud_rules.json +239 -0
  186. package/schemas/tables/ultracart_dw/uc_gift_certificates.json +135 -0
  187. package/schemas/tables/ultracart_dw/uc_item_inventory_history.json +79 -0
  188. package/schemas/tables/ultracart_dw/uc_items.json +4437 -0
  189. package/schemas/tables/ultracart_dw/uc_orders.json +6629 -0
  190. package/schemas/tables/ultracart_dw/uc_rotating_transaction_gateway_history.json +271 -0
  191. package/schemas/tables/ultracart_dw/uc_rotating_transaction_gateways.json +416 -0
  192. package/schemas/tables/ultracart_dw/uc_shipping_methods.json +1372 -0
  193. package/schemas/tables/ultracart_dw/uc_storefront_customers.json +261 -0
  194. package/schemas/tables/ultracart_dw/uc_storefront_experiments.json +386 -0
  195. package/schemas/tables/ultracart_dw/uc_storefront_pages.json +513 -0
  196. package/schemas/tables/ultracart_dw/uc_storefront_upsell_offer_events.json +338 -0
  197. package/schemas/tables/ultracart_dw/uc_storefront_upsell_offers.json +431 -0
  198. package/schemas/tables/ultracart_dw/uc_storefront_upsell_paths.json +163 -0
  199. package/schemas/tables/ultracart_dw/uc_storefronts.json +62 -0
  200. package/schemas/tables/ultracart_dw/uc_surveys.json +238 -0
  201. package/schemas/tables/ultracart_dw/uc_workflow_tasks.json +377 -0
  202. package/schemas/tables/ultracart_dw/uc_zoho_desk_tickets.json +1184 -0
  203. package/schemas/tables/ultracart_dw_high/uc_affiliate_clicks.json +186 -0
  204. package/schemas/tables/ultracart_dw_high/uc_affiliate_commission_groups.json +317 -0
  205. package/schemas/tables/ultracart_dw_high/uc_affiliate_ledgers.json +404 -0
  206. package/schemas/tables/ultracart_dw_high/uc_affiliate_network_pixel_postback_logs.json +166 -0
  207. package/schemas/tables/ultracart_dw_high/uc_affiliate_network_pixels.json +106 -0
  208. package/schemas/tables/ultracart_dw_high/uc_affiliate_payments.json +204 -0
  209. package/schemas/tables/ultracart_dw_high/uc_affiliate_postback_logs.json +90 -0
  210. package/schemas/tables/ultracart_dw_high/uc_affiliates.json +425 -0
  211. package/schemas/tables/ultracart_dw_high/uc_auto_orders.json +14332 -0
  212. package/schemas/tables/ultracart_dw_high/uc_cart_abandons.json +4245 -0
  213. package/schemas/tables/ultracart_dw_high/uc_conversation_pbx_calls.json +415 -0
  214. package/schemas/tables/ultracart_dw_high/uc_conversations.json +415 -0
  215. package/schemas/tables/ultracart_dw_high/uc_coupons.json +1893 -0
  216. package/schemas/tables/ultracart_dw_high/uc_customers.json +12250 -0
  217. package/schemas/tables/ultracart_dw_high/uc_fraud_rules.json +239 -0
  218. package/schemas/tables/ultracart_dw_high/uc_gift_certificates.json +135 -0
  219. package/schemas/tables/ultracart_dw_high/uc_item_inventory_history.json +79 -0
  220. package/schemas/tables/ultracart_dw_high/uc_items.json +4437 -0
  221. package/schemas/tables/ultracart_dw_high/uc_orders.json +6871 -0
  222. package/schemas/tables/ultracart_dw_high/uc_rotating_transaction_gateway_history.json +271 -0
  223. package/schemas/tables/ultracart_dw_high/uc_rotating_transaction_gateways.json +416 -0
  224. package/schemas/tables/ultracart_dw_high/uc_shipping_methods.json +1372 -0
  225. package/schemas/tables/ultracart_dw_high/uc_storefront_customers.json +261 -0
  226. package/schemas/tables/ultracart_dw_high/uc_storefront_experiments.json +386 -0
  227. package/schemas/tables/ultracart_dw_high/uc_storefront_pages.json +513 -0
  228. package/schemas/tables/ultracart_dw_high/uc_storefront_upsell_offer_events.json +338 -0
  229. package/schemas/tables/ultracart_dw_high/uc_storefront_upsell_offers.json +431 -0
  230. package/schemas/tables/ultracart_dw_high/uc_storefront_upsell_paths.json +163 -0
  231. package/schemas/tables/ultracart_dw_high/uc_storefronts.json +62 -0
  232. package/schemas/tables/ultracart_dw_high/uc_surveys.json +269 -0
  233. package/schemas/tables/ultracart_dw_high/uc_workflow_tasks.json +377 -0
  234. package/schemas/tables/ultracart_dw_high/uc_zoho_desk_tickets.json +1330 -0
  235. package/schemas/tables/ultracart_dw_low/uc_affiliate_clicks.json +186 -0
  236. package/schemas/tables/ultracart_dw_low/uc_affiliate_commission_groups.json +317 -0
  237. package/schemas/tables/ultracart_dw_low/uc_affiliate_ledgers.json +404 -0
  238. package/schemas/tables/ultracart_dw_low/uc_affiliate_network_pixel_postback_logs.json +166 -0
  239. package/schemas/tables/ultracart_dw_low/uc_affiliate_network_pixels.json +106 -0
  240. package/schemas/tables/ultracart_dw_low/uc_affiliate_payments.json +204 -0
  241. package/schemas/tables/ultracart_dw_low/uc_affiliate_postback_logs.json +90 -0
  242. package/schemas/tables/ultracart_dw_low/uc_affiliates.json +425 -0
  243. package/schemas/tables/ultracart_dw_low/uc_auto_orders.json +13868 -0
  244. package/schemas/tables/ultracart_dw_low/uc_cart_abandons.json +3971 -0
  245. package/schemas/tables/ultracart_dw_low/uc_conversation_pbx_calls.json +374 -0
  246. package/schemas/tables/ultracart_dw_low/uc_conversations.json +374 -0
  247. package/schemas/tables/ultracart_dw_low/uc_coupons.json +1893 -0
  248. package/schemas/tables/ultracart_dw_low/uc_customers.json +11900 -0
  249. package/schemas/tables/ultracart_dw_low/uc_fraud_rules.json +239 -0
  250. package/schemas/tables/ultracart_dw_low/uc_gift_certificates.json +135 -0
  251. package/schemas/tables/ultracart_dw_low/uc_item_inventory_history.json +79 -0
  252. package/schemas/tables/ultracart_dw_low/uc_items.json +4437 -0
  253. package/schemas/tables/ultracart_dw_low/uc_orders.json +6639 -0
  254. package/schemas/tables/ultracart_dw_low/uc_rotating_transaction_gateway_history.json +271 -0
  255. package/schemas/tables/ultracart_dw_low/uc_rotating_transaction_gateways.json +416 -0
  256. package/schemas/tables/ultracart_dw_low/uc_shipping_methods.json +1372 -0
  257. package/schemas/tables/ultracart_dw_low/uc_storefront_customers.json +261 -0
  258. package/schemas/tables/ultracart_dw_low/uc_storefront_experiments.json +386 -0
  259. package/schemas/tables/ultracart_dw_low/uc_storefront_pages.json +513 -0
  260. package/schemas/tables/ultracart_dw_low/uc_storefront_upsell_offer_events.json +338 -0
  261. package/schemas/tables/ultracart_dw_low/uc_storefront_upsell_offers.json +431 -0
  262. package/schemas/tables/ultracart_dw_low/uc_storefront_upsell_paths.json +163 -0
  263. package/schemas/tables/ultracart_dw_low/uc_storefronts.json +62 -0
  264. package/schemas/tables/ultracart_dw_low/uc_surveys.json +238 -0
  265. package/schemas/tables/ultracart_dw_low/uc_workflow_tasks.json +377 -0
  266. package/schemas/tables/ultracart_dw_low/uc_zoho_desk_tickets.json +1184 -0
  267. package/schemas/tables/ultracart_dw_medium/uc_affiliate_clicks.json +186 -0
  268. package/schemas/tables/ultracart_dw_medium/uc_affiliate_commission_groups.json +317 -0
  269. package/schemas/tables/ultracart_dw_medium/uc_affiliate_ledgers.json +404 -0
  270. package/schemas/tables/ultracart_dw_medium/uc_affiliate_network_pixel_postback_logs.json +166 -0
  271. package/schemas/tables/ultracart_dw_medium/uc_affiliate_network_pixels.json +106 -0
  272. package/schemas/tables/ultracart_dw_medium/uc_affiliate_payments.json +204 -0
  273. package/schemas/tables/ultracart_dw_medium/uc_affiliate_postback_logs.json +90 -0
  274. package/schemas/tables/ultracart_dw_medium/uc_affiliates.json +425 -0
  275. package/schemas/tables/ultracart_dw_medium/uc_auto_orders.json +14320 -0
  276. package/schemas/tables/ultracart_dw_medium/uc_cart_abandons.json +4245 -0
  277. package/schemas/tables/ultracart_dw_medium/uc_conversation_pbx_calls.json +415 -0
  278. package/schemas/tables/ultracart_dw_medium/uc_conversations.json +415 -0
  279. package/schemas/tables/ultracart_dw_medium/uc_coupons.json +1893 -0
  280. package/schemas/tables/ultracart_dw_medium/uc_customers.json +12250 -0
  281. package/schemas/tables/ultracart_dw_medium/uc_fraud_rules.json +239 -0
  282. package/schemas/tables/ultracart_dw_medium/uc_gift_certificates.json +135 -0
  283. package/schemas/tables/ultracart_dw_medium/uc_item_inventory_history.json +79 -0
  284. package/schemas/tables/ultracart_dw_medium/uc_items.json +4437 -0
  285. package/schemas/tables/ultracart_dw_medium/uc_orders.json +6865 -0
  286. package/schemas/tables/ultracart_dw_medium/uc_rotating_transaction_gateway_history.json +271 -0
  287. package/schemas/tables/ultracart_dw_medium/uc_rotating_transaction_gateways.json +416 -0
  288. package/schemas/tables/ultracart_dw_medium/uc_shipping_methods.json +1372 -0
  289. package/schemas/tables/ultracart_dw_medium/uc_storefront_customers.json +261 -0
  290. package/schemas/tables/ultracart_dw_medium/uc_storefront_experiments.json +386 -0
  291. package/schemas/tables/ultracart_dw_medium/uc_storefront_pages.json +513 -0
  292. package/schemas/tables/ultracart_dw_medium/uc_storefront_upsell_offer_events.json +338 -0
  293. package/schemas/tables/ultracart_dw_medium/uc_storefront_upsell_offers.json +431 -0
  294. package/schemas/tables/ultracart_dw_medium/uc_storefront_upsell_paths.json +163 -0
  295. package/schemas/tables/ultracart_dw_medium/uc_storefronts.json +62 -0
  296. package/schemas/tables/ultracart_dw_medium/uc_surveys.json +269 -0
  297. package/schemas/tables/ultracart_dw_medium/uc_workflow_tasks.json +377 -0
  298. package/schemas/tables/ultracart_dw_medium/uc_zoho_desk_tickets.json +1330 -0
  299. package/schemas/tables/ultracart_dw_streaming/uc_analytics_session_streaming.json +2444 -0
  300. package/schemas/tables/ultracart_dw_streaming/uc_screen_recording_streaming.json +509 -0
  301. package/schemas/ultracart-bq-config.schema.json +140 -0
  302. package/skill/skill.md +1228 -0
  303. package/templates/render.html +73 -0
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getReportName = getReportName;
37
+ exports.getReportOverrides = getReportOverrides;
38
+ exports.loadDeck = loadDeck;
39
+ exports.saveDeck = saveDeck;
40
+ exports.listDecks = listDecks;
41
+ exports.buildDeckMarkdown = buildDeckMarkdown;
42
+ exports.generateDeckPdf = generateDeckPdf;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const yaml = __importStar(require("js-yaml"));
46
+ const md_to_pdf_1 = require("md-to-pdf");
47
+ const manifest_1 = require("./manifest");
48
+ /** Get the report directory name from a deck report entry. */
49
+ function getReportName(entry) {
50
+ return typeof entry === 'string' ? entry : entry.name;
51
+ }
52
+ /** Get per-report parameter overrides from a deck report entry. */
53
+ function getReportOverrides(entry) {
54
+ return typeof entry === 'string' ? {} : (entry.parameters || {});
55
+ }
56
+ /**
57
+ * Load a deck definition from a YAML file.
58
+ */
59
+ function loadDeck(decksDir, deckName) {
60
+ const filePath = path.join(decksDir, `${deckName}.yaml`);
61
+ if (!fs.existsSync(filePath)) {
62
+ throw new Error(`Deck file not found: ${filePath}`);
63
+ }
64
+ const content = fs.readFileSync(filePath, 'utf-8');
65
+ return yaml.load(content, { schema: yaml.JSON_SCHEMA });
66
+ }
67
+ /**
68
+ * Save a deck definition to a YAML file.
69
+ */
70
+ function saveDeck(decksDir, deckName, config) {
71
+ if (!fs.existsSync(decksDir)) {
72
+ fs.mkdirSync(decksDir, { recursive: true });
73
+ }
74
+ const filePath = path.join(decksDir, `${deckName}.yaml`);
75
+ const content = yaml.dump(config, {
76
+ lineWidth: 120,
77
+ noRefs: true,
78
+ sortKeys: false,
79
+ });
80
+ fs.writeFileSync(filePath, content, 'utf-8');
81
+ }
82
+ /**
83
+ * List all deck definitions in the decks directory.
84
+ */
85
+ function listDecks(decksDir) {
86
+ if (!fs.existsSync(decksDir)) {
87
+ return [];
88
+ }
89
+ const files = fs.readdirSync(decksDir).filter((f) => f.endsWith('.yaml'));
90
+ const decks = [];
91
+ for (const file of files) {
92
+ try {
93
+ const content = fs.readFileSync(path.join(decksDir, file), 'utf-8');
94
+ const config = yaml.load(content, { schema: yaml.JSON_SCHEMA });
95
+ decks.push({
96
+ name: config.name,
97
+ title: config.title,
98
+ reportCount: config.reports.length,
99
+ });
100
+ }
101
+ catch {
102
+ // Skip invalid YAML files
103
+ }
104
+ }
105
+ return decks;
106
+ }
107
+ /**
108
+ * Build a combined markdown document from a deck and its constituent reports.
109
+ * Chart images use relative paths from the decks directory (e.g., ../report-name/chart.png).
110
+ * The report.md content for each report is read from the reports base directory.
111
+ */
112
+ function buildDeckMarkdown(deck, reportsBaseDir) {
113
+ const sections = [];
114
+ const dateStr = new Date().toISOString().split('T')[0];
115
+ // --- Cover page ---
116
+ sections.push(`# ${deck.title}`);
117
+ sections.push('');
118
+ if (deck.cover?.company) {
119
+ sections.push(`**${deck.cover.company}**`);
120
+ }
121
+ sections.push(`**Generated:** ${dateStr}`);
122
+ sections.push('');
123
+ if (deck.cover?.logo_url) {
124
+ // If logo has been downloaded locally, use relative path; otherwise use the URL directly
125
+ const logoLocalPath = path.join(reportsBaseDir, 'decks', 'logo.png');
126
+ if (fs.existsSync(logoLocalPath)) {
127
+ sections.push('![Logo](logo.png)');
128
+ }
129
+ else {
130
+ sections.push(`![Logo](${deck.cover.logo_url})`);
131
+ }
132
+ sections.push('');
133
+ }
134
+ sections.push('---');
135
+ sections.push('');
136
+ // --- Table of Contents ---
137
+ sections.push('## Table of Contents');
138
+ sections.push('');
139
+ for (let i = 0; i < deck.reports.length; i++) {
140
+ const reportDirName = getReportName(deck.reports[i]);
141
+ const reportDir = path.join(reportsBaseDir, reportDirName);
142
+ let reportTitle = reportDirName;
143
+ // Try to load the manifest to get the actual report name
144
+ try {
145
+ const manifest = (0, manifest_1.loadManifest)(reportDir);
146
+ reportTitle = manifest.name;
147
+ }
148
+ catch {
149
+ // Fall back to directory name
150
+ }
151
+ sections.push(`${i + 1}. [${reportTitle}](#${reportDirName})`);
152
+ }
153
+ sections.push('');
154
+ sections.push('---');
155
+ // --- Report sections ---
156
+ for (const reportEntry of deck.reports) {
157
+ const reportDirName = getReportName(reportEntry);
158
+ const reportDir = path.join(reportsBaseDir, reportDirName);
159
+ let reportTitle = reportDirName;
160
+ try {
161
+ const manifest = (0, manifest_1.loadManifest)(reportDir);
162
+ reportTitle = manifest.name;
163
+ }
164
+ catch {
165
+ // Fall back to directory name
166
+ }
167
+ sections.push('');
168
+ sections.push('<div style="page-break-before: always;"></div>');
169
+ sections.push('');
170
+ sections.push(`## ${reportTitle} {#${reportDirName}}`);
171
+ sections.push('');
172
+ // Chart image — embed as base64 data URI so md-to-pdf renders it reliably
173
+ const chartPngPath = path.join(reportDir, 'chart.png');
174
+ if (fs.existsSync(chartPngPath)) {
175
+ const chartData = fs.readFileSync(chartPngPath);
176
+ const base64 = chartData.toString('base64');
177
+ sections.push(`![Chart](data:image/png;base64,${base64})`);
178
+ sections.push('');
179
+ }
180
+ // Report analysis content
181
+ const reportMdPath = path.join(reportDir, 'report.md');
182
+ if (fs.existsSync(reportMdPath)) {
183
+ let reportContent = fs.readFileSync(reportMdPath, 'utf-8');
184
+ // Strip the top-level heading from report.md to avoid duplicate headings
185
+ reportContent = reportContent.replace(/^#\s+.*\n+/, '');
186
+ sections.push(reportContent.trim());
187
+ }
188
+ else {
189
+ sections.push('*No analysis available for this report.*');
190
+ }
191
+ }
192
+ sections.push('');
193
+ return sections.join('\n');
194
+ }
195
+ /**
196
+ * Generate a PDF from combined deck markdown using md-to-pdf.
197
+ * basedir should be the merchant's report output dir so relative image paths resolve.
198
+ */
199
+ async function generateDeckPdf(markdown, outputPath, basedir, landscape) {
200
+ const pdf = await (0, md_to_pdf_1.mdToPdf)({ content: markdown }, {
201
+ basedir,
202
+ pdf_options: {
203
+ format: 'Letter',
204
+ landscape: landscape ?? false,
205
+ margin: { top: '20mm', bottom: '20mm', left: '15mm', right: '15mm' },
206
+ printBackground: true,
207
+ },
208
+ css: `
209
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif; font-size: 12px; line-height: 1.6; color: #333; }
210
+ h1 { font-size: 26px; border-bottom: 2px solid #333; padding-bottom: 8px; margin-bottom: 16px; }
211
+ h2 { font-size: 19px; color: #444; margin-top: 24px; }
212
+ h3 { font-size: 14px; color: #555; }
213
+ table { border-collapse: collapse; width: 100%; margin: 12px 0; }
214
+ th, td { border: 1px solid #ddd; padding: 6px 10px; text-align: left; font-size: 11px; }
215
+ th { background: #f5f5f5; font-weight: 600; }
216
+ img { max-width: 100%; height: auto; margin: 16px 0; }
217
+ strong { color: #222; }
218
+ ol, ul { margin: 8px 0; padding-left: 24px; }
219
+ li { margin: 4px 0; }
220
+ div[style*="page-break"] { page-break-before: always; }
221
+ `,
222
+ });
223
+ if (pdf.content) {
224
+ const outputDir = path.dirname(outputPath);
225
+ if (!fs.existsSync(outputDir)) {
226
+ fs.mkdirSync(outputDir, { recursive: true });
227
+ }
228
+ fs.writeFileSync(outputPath, pdf.content);
229
+ }
230
+ return outputPath;
231
+ }
232
+ //# sourceMappingURL=deck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deck.js","sourceRoot":"","sources":["../../src/lib/deck.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Deliver a file via email using one of the supported REST API providers.
3
+ * Requires EMAIL_FROM environment variable for the sender address.
4
+ */
5
+ export declare function deliverEmail(filePath: string, fileName: string, config: {
6
+ to: string[];
7
+ subject: string;
8
+ provider: string;
9
+ }): Promise<void>;
10
+ export declare function sendAlarmEmail(htmlBody: string, subject: string, config: {
11
+ to: string[];
12
+ provider: string;
13
+ }): Promise<void>;
14
+ //# sourceMappingURL=deliver-email.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deliver-email.d.ts","sourceRoot":"","sources":["../../src/lib/deliver-email.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE;IAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC1D,OAAO,CAAC,IAAI,CAAC,CAoCf;AAsPD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE;IAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACzC,OAAO,CAAC,IAAI,CAAC,CAyBf"}
@@ -0,0 +1,360 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.deliverEmail = deliverEmail;
37
+ exports.sendAlarmEmail = sendAlarmEmail;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ /**
41
+ * Deliver a file via email using one of the supported REST API providers.
42
+ * Requires EMAIL_FROM environment variable for the sender address.
43
+ */
44
+ async function deliverEmail(filePath, fileName, config) {
45
+ const from = process.env.EMAIL_FROM;
46
+ if (!from) {
47
+ throw new Error('EMAIL_FROM environment variable is required for email delivery (e.g., reports@mycompany.com).');
48
+ }
49
+ const fileBuffer = fs.readFileSync(filePath);
50
+ const contentType = fileName.endsWith('.pdf') ? 'application/pdf' : 'image/png';
51
+ const reportName = path.basename(path.dirname(filePath));
52
+ const dateStr = new Date().toISOString().split('T')[0];
53
+ const htmlBody = `<p>Your scheduled report is attached.</p>\n<p><strong>${reportName}</strong> &mdash; Generated ${dateStr}</p>`;
54
+ switch (config.provider.toLowerCase()) {
55
+ case 'sendgrid':
56
+ await sendViaSendGrid(fileBuffer, fileName, contentType, config.to, config.subject, from, htmlBody);
57
+ break;
58
+ case 'postmark':
59
+ await sendViaPostmark(fileBuffer, fileName, contentType, config.to, config.subject, from, htmlBody);
60
+ break;
61
+ case 'mailgun':
62
+ await sendViaMailgun(filePath, fileBuffer, fileName, contentType, config.to, config.subject, from, htmlBody);
63
+ break;
64
+ case 'resend':
65
+ await sendViaResend(fileBuffer, fileName, config.to, config.subject, from, htmlBody);
66
+ break;
67
+ case 'ses':
68
+ await sendViaSes(fileBuffer, fileName, contentType, config.to, config.subject, from, htmlBody);
69
+ break;
70
+ default:
71
+ throw new Error(`Unsupported email provider: "${config.provider}". ` +
72
+ 'Supported providers: sendgrid, postmark, mailgun, resend, ses.');
73
+ }
74
+ }
75
+ // ---------------------------------------------------------------------------
76
+ // SendGrid
77
+ // ---------------------------------------------------------------------------
78
+ async function sendViaSendGrid(fileBuffer, fileName, contentType, to, subject, from, htmlBody) {
79
+ const apiKey = requireEnv('SENDGRID_API_KEY', 'SendGrid');
80
+ const body = {
81
+ personalizations: [{ to: to.map((email) => ({ email })) }],
82
+ from: { email: from },
83
+ subject,
84
+ content: [{ type: 'text/html', value: htmlBody }],
85
+ attachments: [
86
+ {
87
+ content: fileBuffer.toString('base64'),
88
+ filename: fileName,
89
+ type: contentType,
90
+ disposition: 'attachment',
91
+ },
92
+ ],
93
+ };
94
+ const resp = await fetch('https://api.sendgrid.com/v3/mail/send', {
95
+ method: 'POST',
96
+ headers: {
97
+ Authorization: `Bearer ${apiKey}`,
98
+ 'Content-Type': 'application/json',
99
+ },
100
+ body: JSON.stringify(body),
101
+ });
102
+ if (!resp.ok) {
103
+ const text = await resp.text();
104
+ throw new Error(`SendGrid API error ${resp.status}: ${text}`);
105
+ }
106
+ }
107
+ // ---------------------------------------------------------------------------
108
+ // Postmark
109
+ // ---------------------------------------------------------------------------
110
+ async function sendViaPostmark(fileBuffer, fileName, contentType, to, subject, from, htmlBody) {
111
+ const apiKey = requireEnv('POSTMARK_API_KEY', 'Postmark');
112
+ const body = {
113
+ From: from,
114
+ To: to.join(', '),
115
+ Subject: subject,
116
+ HtmlBody: htmlBody,
117
+ Attachments: [
118
+ {
119
+ Name: fileName,
120
+ Content: fileBuffer.toString('base64'),
121
+ ContentType: contentType,
122
+ },
123
+ ],
124
+ };
125
+ const resp = await fetch('https://api.postmarkapp.com/email', {
126
+ method: 'POST',
127
+ headers: {
128
+ 'X-Postmark-Server-Token': apiKey,
129
+ 'Content-Type': 'application/json',
130
+ Accept: 'application/json',
131
+ },
132
+ body: JSON.stringify(body),
133
+ });
134
+ if (!resp.ok) {
135
+ const text = await resp.text();
136
+ throw new Error(`Postmark API error ${resp.status}: ${text}`);
137
+ }
138
+ }
139
+ // ---------------------------------------------------------------------------
140
+ // Mailgun
141
+ // ---------------------------------------------------------------------------
142
+ async function sendViaMailgun(filePath, fileBuffer, fileName, _contentType, to, subject, from, htmlBody) {
143
+ const apiKey = requireEnv('MAILGUN_API_KEY', 'Mailgun');
144
+ const domain = process.env.MAILGUN_DOMAIN;
145
+ if (!domain) {
146
+ throw new Error('MAILGUN_DOMAIN environment variable is required for Mailgun delivery.');
147
+ }
148
+ const form = new FormData();
149
+ form.append('from', from);
150
+ for (const recipient of to) {
151
+ form.append('to', recipient);
152
+ }
153
+ form.append('subject', subject);
154
+ form.append('html', htmlBody);
155
+ form.append('attachment', new Blob([fileBuffer]), fileName);
156
+ const credentials = Buffer.from(`api:${apiKey}`).toString('base64');
157
+ const resp = await fetch(`https://api.mailgun.net/v3/${domain}/messages`, {
158
+ method: 'POST',
159
+ headers: {
160
+ Authorization: `Basic ${credentials}`,
161
+ },
162
+ body: form,
163
+ });
164
+ if (!resp.ok) {
165
+ const text = await resp.text();
166
+ throw new Error(`Mailgun API error ${resp.status}: ${text}`);
167
+ }
168
+ }
169
+ // ---------------------------------------------------------------------------
170
+ // Resend
171
+ // ---------------------------------------------------------------------------
172
+ async function sendViaResend(fileBuffer, fileName, to, subject, from, htmlBody) {
173
+ const apiKey = requireEnv('RESEND_API_KEY', 'Resend');
174
+ const body = {
175
+ from,
176
+ to,
177
+ subject,
178
+ html: htmlBody,
179
+ attachments: [
180
+ {
181
+ filename: fileName,
182
+ content: fileBuffer.toString('base64'),
183
+ },
184
+ ],
185
+ };
186
+ const resp = await fetch('https://api.resend.com/emails', {
187
+ method: 'POST',
188
+ headers: {
189
+ Authorization: `Bearer ${apiKey}`,
190
+ 'Content-Type': 'application/json',
191
+ },
192
+ body: JSON.stringify(body),
193
+ });
194
+ if (!resp.ok) {
195
+ const text = await resp.text();
196
+ throw new Error(`Resend API error ${resp.status}: ${text}`);
197
+ }
198
+ }
199
+ // ---------------------------------------------------------------------------
200
+ // AWS SES (requires @aws-sdk/client-sesv2 as optional peer dependency)
201
+ // ---------------------------------------------------------------------------
202
+ async function sendViaSes(fileBuffer, fileName, contentType, to, subject, from, htmlBody) {
203
+ let sesModule;
204
+ try {
205
+ sesModule = require('@aws-sdk/client-sesv2');
206
+ }
207
+ catch {
208
+ throw new Error('AWS SES requires @aws-sdk/client-sesv2. Install it with: npm install @aws-sdk/client-sesv2');
209
+ }
210
+ const { SESv2Client, SendEmailCommand } = sesModule;
211
+ // Build raw MIME message with attachment
212
+ const boundary = `----boundary-${Date.now()}`;
213
+ const mimeMessage = [
214
+ `From: ${from}`,
215
+ `To: ${to.join(', ')}`,
216
+ `Subject: ${subject}`,
217
+ `MIME-Version: 1.0`,
218
+ `Content-Type: multipart/mixed; boundary="${boundary}"`,
219
+ '',
220
+ `--${boundary}`,
221
+ 'Content-Type: text/html; charset=UTF-8',
222
+ 'Content-Transfer-Encoding: 7bit',
223
+ '',
224
+ htmlBody,
225
+ '',
226
+ `--${boundary}`,
227
+ `Content-Type: ${contentType}; name="${fileName}"`,
228
+ 'Content-Transfer-Encoding: base64',
229
+ `Content-Disposition: attachment; filename="${fileName}"`,
230
+ '',
231
+ fileBuffer.toString('base64'),
232
+ '',
233
+ `--${boundary}--`,
234
+ ].join('\r\n');
235
+ const region = process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || 'us-east-1';
236
+ const client = new SESv2Client({ region });
237
+ const command = new SendEmailCommand({
238
+ Content: {
239
+ Raw: {
240
+ Data: Buffer.from(mimeMessage),
241
+ },
242
+ },
243
+ });
244
+ await client.send(command);
245
+ }
246
+ // ---------------------------------------------------------------------------
247
+ // Alarm email delivery (no attachment — just HTML body with custom subject)
248
+ // ---------------------------------------------------------------------------
249
+ async function sendAlarmEmail(htmlBody, subject, config) {
250
+ const from = process.env.EMAIL_FROM;
251
+ if (!from) {
252
+ throw new Error('EMAIL_FROM environment variable is required for email alarm delivery.');
253
+ }
254
+ switch (config.provider.toLowerCase()) {
255
+ case 'sendgrid':
256
+ await sendAlarmViaSendGrid(config.to, subject, from, htmlBody);
257
+ break;
258
+ case 'postmark':
259
+ await sendAlarmViaPostmark(config.to, subject, from, htmlBody);
260
+ break;
261
+ case 'mailgun':
262
+ await sendAlarmViaMailgun(config.to, subject, from, htmlBody);
263
+ break;
264
+ case 'resend':
265
+ await sendAlarmViaResend(config.to, subject, from, htmlBody);
266
+ break;
267
+ case 'ses':
268
+ await sendAlarmViaSes(config.to, subject, from, htmlBody);
269
+ break;
270
+ default:
271
+ throw new Error(`Unsupported email provider: "${config.provider}".`);
272
+ }
273
+ }
274
+ async function sendAlarmViaSendGrid(to, subject, from, htmlBody) {
275
+ const apiKey = requireEnv('SENDGRID_API_KEY', 'SendGrid');
276
+ const body = {
277
+ personalizations: [{ to: to.map((email) => ({ email })) }],
278
+ from: { email: from },
279
+ subject,
280
+ content: [{ type: 'text/html', value: htmlBody }],
281
+ };
282
+ const resp = await fetch('https://api.sendgrid.com/v3/mail/send', {
283
+ method: 'POST',
284
+ headers: { Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json' },
285
+ body: JSON.stringify(body),
286
+ });
287
+ if (!resp.ok)
288
+ throw new Error(`SendGrid API error ${resp.status}: ${await resp.text()}`);
289
+ }
290
+ async function sendAlarmViaPostmark(to, subject, from, htmlBody) {
291
+ const apiKey = requireEnv('POSTMARK_API_KEY', 'Postmark');
292
+ const body = { From: from, To: to.join(', '), Subject: subject, HtmlBody: htmlBody };
293
+ const resp = await fetch('https://api.postmarkapp.com/email', {
294
+ method: 'POST',
295
+ headers: { 'X-Postmark-Server-Token': apiKey, 'Content-Type': 'application/json', Accept: 'application/json' },
296
+ body: JSON.stringify(body),
297
+ });
298
+ if (!resp.ok)
299
+ throw new Error(`Postmark API error ${resp.status}: ${await resp.text()}`);
300
+ }
301
+ async function sendAlarmViaMailgun(to, subject, from, htmlBody) {
302
+ const apiKey = requireEnv('MAILGUN_API_KEY', 'Mailgun');
303
+ const domain = process.env.MAILGUN_DOMAIN;
304
+ if (!domain)
305
+ throw new Error('MAILGUN_DOMAIN environment variable is required for Mailgun delivery.');
306
+ const form = new FormData();
307
+ form.append('from', from);
308
+ for (const recipient of to)
309
+ form.append('to', recipient);
310
+ form.append('subject', subject);
311
+ form.append('html', htmlBody);
312
+ const credentials = Buffer.from(`api:${apiKey}`).toString('base64');
313
+ const resp = await fetch(`https://api.mailgun.net/v3/${domain}/messages`, {
314
+ method: 'POST',
315
+ headers: { Authorization: `Basic ${credentials}` },
316
+ body: form,
317
+ });
318
+ if (!resp.ok)
319
+ throw new Error(`Mailgun API error ${resp.status}: ${await resp.text()}`);
320
+ }
321
+ async function sendAlarmViaResend(to, subject, from, htmlBody) {
322
+ const apiKey = requireEnv('RESEND_API_KEY', 'Resend');
323
+ const body = { from, to, subject, html: htmlBody };
324
+ const resp = await fetch('https://api.resend.com/emails', {
325
+ method: 'POST',
326
+ headers: { Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json' },
327
+ body: JSON.stringify(body),
328
+ });
329
+ if (!resp.ok)
330
+ throw new Error(`Resend API error ${resp.status}: ${await resp.text()}`);
331
+ }
332
+ async function sendAlarmViaSes(to, subject, from, htmlBody) {
333
+ let sesModule;
334
+ try {
335
+ sesModule = require('@aws-sdk/client-sesv2');
336
+ }
337
+ catch {
338
+ throw new Error('AWS SES requires @aws-sdk/client-sesv2. Install it with: npm install @aws-sdk/client-sesv2');
339
+ }
340
+ const { SESv2Client, SendEmailCommand } = sesModule;
341
+ const boundary = `----boundary-${Date.now()}`;
342
+ const mimeMessage = [
343
+ `From: ${from}`, `To: ${to.join(', ')}`, `Subject: ${subject}`,
344
+ 'MIME-Version: 1.0', `Content-Type: text/html; charset=UTF-8`, 'Content-Transfer-Encoding: 7bit', '', htmlBody,
345
+ ].join('\r\n');
346
+ const region = process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || 'us-east-1';
347
+ const client = new SESv2Client({ region });
348
+ await client.send(new SendEmailCommand({ Content: { Raw: { Data: Buffer.from(mimeMessage) } } }));
349
+ }
350
+ // ---------------------------------------------------------------------------
351
+ // Helpers
352
+ // ---------------------------------------------------------------------------
353
+ function requireEnv(name, providerLabel) {
354
+ const value = process.env[name];
355
+ if (!value) {
356
+ throw new Error(`${name} environment variable is required for ${providerLabel} email delivery.`);
357
+ }
358
+ return value;
359
+ }
360
+ //# sourceMappingURL=deliver-email.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deliver-email.js","sourceRoot":"","sources":["../../src/lib/deliver-email.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Deliver a file to one or more Slack channels via the files.upload API.
3
+ * Requires SLACK_BOT_TOKEN environment variable.
4
+ */
5
+ export declare function deliverSlack(filePath: string, fileName: string, channels: string[], comment?: string): Promise<void>;
6
+ //# sourceMappingURL=deliver-slack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deliver-slack.d.ts","sourceRoot":"","sources":["../../src/lib/deliver-slack.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAqCf"}