@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,321 @@
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.getProject = getProject;
37
+ exports.getDatasets = getDatasets;
38
+ exports.getTables = getTables;
39
+ exports.getTableSchema = getTableSchema;
40
+ exports.executeQuery = executeQuery;
41
+ exports.getExternalTables = getExternalTables;
42
+ exports.getExternalTableSchema = getExternalTableSchema;
43
+ exports.refreshSchemaCache = refreshSchemaCache;
44
+ const bigquery_1 = require("@google-cloud/bigquery");
45
+ const fs = __importStar(require("fs"));
46
+ const path = __importStar(require("path"));
47
+ function getBigQueryClient(config) {
48
+ return new bigquery_1.BigQuery({ projectId: config.project_id });
49
+ }
50
+ function getProject(config) {
51
+ return config.project_id;
52
+ }
53
+ function getDatasets(config) {
54
+ const datasets = [
55
+ {
56
+ dataset_id: 'ultracart_dw',
57
+ description: 'The standard data set. Does not contain any PII information.',
58
+ },
59
+ {
60
+ dataset_id: 'ultracart_dw_streaming',
61
+ description: 'The streaming data set. This is only for analytics and screen recordings tables because they are so large that views to see these tables in the standard or medium data sets is horrible for performance.',
62
+ },
63
+ ];
64
+ if (config.taxonomy_level === 'medium' || config.taxonomy_level === 'high') {
65
+ datasets.splice(1, 0, {
66
+ dataset_id: 'ultracart_dw_medium',
67
+ description: 'The medium data set. Contains PII information. Try using hashed versions of fields before accessing this data set for PII.',
68
+ });
69
+ }
70
+ return datasets;
71
+ }
72
+ const STREAMING_TABLES = [
73
+ {
74
+ table_name: 'uc_analytics_session_streaming',
75
+ description: 'UltraCart Analytics sessions. This is a huge table of detailed analytics information. Each session is a collection of different events (hits) that occurred within the session.',
76
+ },
77
+ {
78
+ table_name: 'uc_screen_recording_streaming',
79
+ description: 'UltraCart StoreFront screen recording sessions. These sessions contain all the meta data information about a customers session as captured by the StoreFront screen recording system.',
80
+ },
81
+ ];
82
+ const STANDARD_TABLES = [
83
+ { table_name: 'uc_auto_orders', description: 'Auto orders (subscriptions)' },
84
+ { table_name: 'uc_customers', description: 'customers' },
85
+ { table_name: 'uc_items', description: 'items' },
86
+ { table_name: 'uc_orders', description: 'orders' },
87
+ { table_name: 'uc_zoho_desk_tickets', description: 'Archive of Zoho Desk tickets from customer service' },
88
+ { table_name: 'uc_affiliate_clicks', description: 'Stores records of clicks on affiliate links, tracking user interactions with affiliate marketing campaigns, including click timestamps, affiliate IDs, and referral details.' },
89
+ { table_name: 'uc_affiliate_commission_groups', description: 'Contains configuration data for affiliate commission groups, defining commission structures, rates, and rules for affiliate payouts.' },
90
+ { table_name: 'uc_affiliate_ledgers', description: 'Tracks financial transactions related to affiliates, including earned commissions, adjustments, and payout statuses.' },
91
+ { table_name: 'uc_affiliate_payments', description: 'Records payment details made to affiliates, including payment amounts, dates, and methods for completed affiliate commissions.' },
92
+ { table_name: 'uc_affiliate_postback_logs', description: 'Logs postback events sent to or received from affiliate networks, capturing data for tracking conversions and campaign performance.' },
93
+ { table_name: 'uc_affiliates', description: 'Stores information about affiliate accounts, including affiliate IDs, contact details, and account settings.' },
94
+ { table_name: 'uc_affiliate_network_pixel_postback_logs', description: 'Affiliate Network Pixel server-to-server postback logs' },
95
+ { table_name: 'uc_affiliate_network_pixels', description: 'Affiliate Network Pixel configurations' },
96
+ { table_name: 'uc_cart_abandons', description: 'Abandon cart records' },
97
+ { table_name: 'uc_conversation_pbx_calls', description: 'Conversation system phone call records from the PBX module' },
98
+ { table_name: 'uc_conversations', description: 'Conversation system webchat and sms conversations' },
99
+ { table_name: 'uc_coupons', description: 'Contains details of coupons offered by the storefront, including coupon codes, discount types, expiration dates, and usage restrictions.' },
100
+ { table_name: 'uc_fraud_rules', description: 'Stores rules and configurations for detecting and preventing fraudulent transactions, such as thresholds and patterns for flagging suspicious activity.' },
101
+ { table_name: 'uc_gift_certificates', description: 'Tracks gift certificate details, including certificate codes, balances, issuance dates, and redemption status.' },
102
+ { table_name: 'uc_item_inventory_history', description: 'Records historical changes to item inventory levels, including restocks, sales, and adjustments over time.' },
103
+ { table_name: 'uc_rotating_transaction_gateway_history', description: 'Logs historical data on transactions processed through rotating payment gateways, including gateway assignments and transaction outcomes.' },
104
+ { table_name: 'uc_rotating_transaction_gateways', description: 'Stores configuration for rotating payment gateways, including gateway priorities and rules for transaction routing.' },
105
+ { table_name: 'uc_shipping_methods', description: 'Contains details of available shipping methods, including carrier names, costs, delivery times, and associated rules.' },
106
+ { table_name: 'uc_storefront_customers', description: 'Stores customer records associated with StoreFront Communications including the email and sms campaigns that the customer was sent through this system' },
107
+ { table_name: 'uc_storefront_experiments', description: 'Tracks A/B testing or other experiments run on storefronts, including experiment configurations, variants, and performance metrics.' },
108
+ { table_name: 'uc_storefront_pages', description: 'Contains data on storefront pages, including page URLs, assigned items, permissions, etc.' },
109
+ { table_name: 'uc_storefront_upsell_offer_events', description: 'Logs events related to upsell offers presented to customers, such as views, clicks, or conversions during the checkout process.' },
110
+ { table_name: 'uc_storefront_upsell_offers', description: 'Stores details of upsell offers, including offer descriptions, conditions, and associated products or discounts.' },
111
+ { table_name: 'uc_storefront_upsell_paths', description: 'Defines paths or sequences for presenting upsell offers to customers, including rules for offer eligibility and display order.' },
112
+ { table_name: 'uc_storefronts', description: 'Contains configuration and metadata for individual storefronts, including domain, theme, and operational settings.' },
113
+ { table_name: 'uc_surveys', description: 'Stores survey data, including questions, responses, and metadata for customer feedback collected through the platform.' },
114
+ { table_name: 'uc_workflow_tasks', description: 'Tracks tasks within workflows such as who they are assigned to, status, comments.' },
115
+ ];
116
+ function getTables(config, datasetId) {
117
+ if (datasetId === 'ultracart_dw_streaming') {
118
+ return STREAMING_TABLES;
119
+ }
120
+ return STANDARD_TABLES;
121
+ }
122
+ function getEnhancedSchemaPath(datasetId, tableName) {
123
+ return path.resolve(__dirname, '..', '..', 'schemas', 'tables', datasetId, `${tableName}.json`);
124
+ }
125
+ async function getTableSchema(config, datasetId, tableName, options) {
126
+ // Check for enhanced schema first (unless --live is forced)
127
+ if (!options?.live) {
128
+ const enhancedPath = getEnhancedSchemaPath(datasetId, tableName);
129
+ if (fs.existsSync(enhancedPath)) {
130
+ return JSON.parse(fs.readFileSync(enhancedPath, 'utf-8'));
131
+ }
132
+ }
133
+ // Fall back to live BigQuery
134
+ const bq = getBigQueryClient(config);
135
+ const [metadata] = await bq.dataset(datasetId).table(tableName).getMetadata();
136
+ return metadata.schema.fields;
137
+ }
138
+ function firstSecondOfDay(dateStr) {
139
+ return `${dateStr} 00:00:00`;
140
+ }
141
+ function lastSecondOfDay(dateStr) {
142
+ return `${dateStr} 23:59:59`;
143
+ }
144
+ async function executeQuery(config, sql, params = [], options = {}) {
145
+ const bq = getBigQueryClient(config);
146
+ // Apply sample limit like the Java code does
147
+ let querySql = sql;
148
+ if (options.sample) {
149
+ const limitRegex = /\s*LIMIT\s+(\d+)\s*$/i;
150
+ const match = querySql.match(limitRegex);
151
+ if (match) {
152
+ const existingLimit = parseInt(match[1], 10);
153
+ if (existingLimit > options.sample) {
154
+ querySql = querySql.substring(0, match.index) + ` LIMIT ${options.sample}`;
155
+ }
156
+ }
157
+ else {
158
+ querySql += ` LIMIT ${options.sample}`;
159
+ }
160
+ }
161
+ const queryOptions = {
162
+ query: querySql,
163
+ useLegacySql: false,
164
+ params: undefined,
165
+ dryRun: options.dryRun ?? false,
166
+ };
167
+ if (params.length > 0) {
168
+ queryOptions.params = {};
169
+ for (const p of params) {
170
+ let value = p.value;
171
+ switch (p.type) {
172
+ case 'INT64':
173
+ value = parseInt(p.value, 10);
174
+ break;
175
+ case 'FLOAT64':
176
+ value = parseFloat(p.value);
177
+ break;
178
+ case 'BOOL':
179
+ value = p.value === 'true' || p.value === '1' || p.value === 'yes';
180
+ break;
181
+ case 'DATE':
182
+ case 'DATETIME': {
183
+ // Match Java code: DATE and DATETIME params get start/end of day applied
184
+ const dateStr = p.value.substring(0, 10);
185
+ if (p.name === 'end_date') {
186
+ value = lastSecondOfDay(dateStr);
187
+ }
188
+ else if (p.name === 'start_date') {
189
+ value = firstSecondOfDay(dateStr);
190
+ }
191
+ else {
192
+ value = p.value;
193
+ }
194
+ break;
195
+ }
196
+ case 'STRING':
197
+ default:
198
+ value = p.value;
199
+ break;
200
+ }
201
+ queryOptions.params[p.name] = value;
202
+ }
203
+ }
204
+ if (options.dryRun) {
205
+ const [job, apiResponse] = await bq.createQueryJob(queryOptions);
206
+ const stats = apiResponse?.statistics;
207
+ return {
208
+ rows: [],
209
+ totalRows: 0,
210
+ schema: [],
211
+ bytesProcessed: parseInt(stats?.totalBytesProcessed ?? '0', 10),
212
+ };
213
+ }
214
+ // Cost protection: dry-run first to check bytes processed (unless --force)
215
+ const maxBytes = options.maxBytes ?? config.max_query_bytes ?? (10 * 1024 * 1024 * 1024);
216
+ if (!options.force) {
217
+ const dryRunOptions = { ...queryOptions, dryRun: true };
218
+ const [, dryRunApiResponse] = await bq.createQueryJob(dryRunOptions);
219
+ const dryRunStats = dryRunApiResponse?.statistics;
220
+ const estimatedBytes = parseInt(dryRunStats?.totalBytesProcessed ?? '0', 10);
221
+ const estimatedGB = estimatedBytes / (1024 * 1024 * 1024);
222
+ const estimatedCost = (estimatedBytes / (1024 * 1024 * 1024 * 1024)) * 6.25;
223
+ if (estimatedBytes > maxBytes) {
224
+ throw new Error(`Query would process ${estimatedGB.toFixed(1)} GB (estimated cost: $${estimatedCost.toFixed(4)}), ` +
225
+ `which exceeds the safety limit of ${(maxBytes / (1024 * 1024 * 1024)).toFixed(1)} GB. ` +
226
+ `Use --force to execute anyway, or set a higher limit with --max-bytes.`);
227
+ }
228
+ }
229
+ const [rows, jobResponse] = await bq.query(queryOptions);
230
+ const jobAny = jobResponse;
231
+ const stats = jobAny?.statistics;
232
+ // Flatten BigQuery date/timestamp objects (e.g., { value: "2026-03-21" }) to plain strings
233
+ const flattenedRows = rows.map(flattenRow);
234
+ return {
235
+ rows: flattenedRows,
236
+ totalRows: flattenedRows.length,
237
+ schema: [],
238
+ bytesProcessed: parseInt(stats?.totalBytesProcessed ?? '0', 10),
239
+ };
240
+ }
241
+ function flattenRow(row) {
242
+ const result = {};
243
+ for (const [key, val] of Object.entries(row)) {
244
+ result[key] = flattenValue(val);
245
+ }
246
+ return result;
247
+ }
248
+ function getExternalTables(config) {
249
+ const results = [];
250
+ if (!config.external_projects)
251
+ return results;
252
+ for (const [alias, project] of Object.entries(config.external_projects)) {
253
+ for (const [dataset, tables] of Object.entries(project.datasets)) {
254
+ for (const table of tables) {
255
+ results.push({
256
+ alias,
257
+ projectId: project.project_id,
258
+ description: project.description,
259
+ dataset,
260
+ table,
261
+ fullyQualified: `${project.project_id}.${dataset}.${table}`,
262
+ });
263
+ }
264
+ }
265
+ }
266
+ return results;
267
+ }
268
+ const CACHE_DIR = '.ultracart-bq-cache';
269
+ function sanitizePathComponent(name) {
270
+ return name.replace(/[^a-zA-Z0-9_-]/g, '_');
271
+ }
272
+ async function getExternalTableSchema(config, projectId, datasetId, tableName) {
273
+ // Check cache first
274
+ const cacheFile = path.join(process.cwd(), CACHE_DIR, sanitizePathComponent(projectId), sanitizePathComponent(datasetId), `${sanitizePathComponent(tableName)}.json`);
275
+ if (fs.existsSync(cacheFile)) {
276
+ return JSON.parse(fs.readFileSync(cacheFile, 'utf-8'));
277
+ }
278
+ // Fetch live from BigQuery
279
+ const bq = new bigquery_1.BigQuery({ projectId });
280
+ const [metadata] = await bq.dataset(datasetId).table(tableName).getMetadata();
281
+ const fields = metadata.schema.fields;
282
+ // Save to cache
283
+ const cacheDir = path.dirname(cacheFile);
284
+ fs.mkdirSync(cacheDir, { recursive: true });
285
+ fs.writeFileSync(cacheFile, JSON.stringify(fields, null, 2));
286
+ return fields;
287
+ }
288
+ async function refreshSchemaCache(config) {
289
+ const cachePath = path.join(process.cwd(), CACHE_DIR);
290
+ // Delete existing cache
291
+ if (fs.existsSync(cachePath)) {
292
+ fs.rmSync(cachePath, { recursive: true, force: true });
293
+ }
294
+ // Re-fetch all external table schemas
295
+ const tables = getExternalTables(config);
296
+ for (const table of tables) {
297
+ await getExternalTableSchema(config, table.projectId, table.dataset, table.table);
298
+ }
299
+ }
300
+ function flattenValue(val) {
301
+ if (val === null || val === undefined)
302
+ return val;
303
+ if (typeof val === 'object' && !Array.isArray(val)) {
304
+ const obj = val;
305
+ // BigQuery NUMERIC/BIGNUMERIC types return Big number objects with s, e, c properties
306
+ if ('s' in obj && 'e' in obj && 'c' in obj && typeof obj.toString === 'function') {
307
+ return parseFloat(obj.toString());
308
+ }
309
+ // BigQuery date/time objects have a single "value" property
310
+ if ('value' in obj && Object.keys(obj).length === 1) {
311
+ return obj.value;
312
+ }
313
+ // Recurse into nested records
314
+ return flattenRow(obj);
315
+ }
316
+ if (Array.isArray(val)) {
317
+ return val.map(flattenValue);
318
+ }
319
+ return val;
320
+ }
321
+ //# sourceMappingURL=bigquery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigquery.js","sourceRoot":"","sources":["../../src/lib/bigquery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function readRawConfig(): Record<string, any>;
2
+ export declare function writeConfig(config: Record<string, any>): void;
3
+ //# sourceMappingURL=config-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-writer.d.ts","sourceRoot":"","sources":["../../src/lib/config-writer.ts"],"names":[],"mappings":"AAMA,wBAAgB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAMnD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAY7D"}
@@ -0,0 +1,60 @@
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.readRawConfig = readRawConfig;
37
+ exports.writeConfig = writeConfig;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const config_1 = require("./config");
41
+ const CONFIG_FILENAME = '.ultracart-bq.json';
42
+ function readRawConfig() {
43
+ const configPath = path.join(process.cwd(), CONFIG_FILENAME);
44
+ if (!fs.existsSync(configPath)) {
45
+ throw new Error(`Config file not found at ${configPath}. Run "uc-bq init" first.`);
46
+ }
47
+ return JSON.parse(fs.readFileSync(configPath, 'utf-8'));
48
+ }
49
+ function writeConfig(config) {
50
+ // Ensure $schema is present
51
+ config.$schema = config.$schema || 'https://ultracart.com/schemas/ultracart-bq-config.schema.json';
52
+ // Validate before writing
53
+ const validation = (0, config_1.validateConfig)(config);
54
+ if (!validation.valid) {
55
+ throw new Error(`Config validation failed:\n ${validation.errors.join('\n ')}`);
56
+ }
57
+ const configPath = path.join(process.cwd(), CONFIG_FILENAME);
58
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
59
+ }
60
+ //# sourceMappingURL=config-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-writer.js","sourceRoot":"","sources":["../../src/lib/config-writer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,sCAMC;AAED,kCAYC;AA1BD,uCAAyB;AACzB,2CAA6B;AAC7B,qCAA0C;AAE1C,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAE7C,SAAgB,aAAa;IAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;IAC7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,4BAA4B,UAAU,2BAA2B,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,WAAW,CAAC,MAA2B;IACrD,4BAA4B;IAC5B,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,+DAA+D,CAAC;IAEnG,0BAA0B;IAC1B,MAAM,UAAU,GAAG,IAAA,uBAAc,EAAC,MAAa,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;IAC7D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,63 @@
1
+ export interface ExternalProject {
2
+ project_id: string;
3
+ description?: string;
4
+ datasets: Record<string, string[]>;
5
+ }
6
+ export interface MerchantConfig {
7
+ taxonomy_level: 'standard' | 'low' | 'medium' | 'high';
8
+ dataset: string;
9
+ external_projects?: Record<string, ExternalProject>;
10
+ }
11
+ export interface UcBqConfig {
12
+ default_merchant: string;
13
+ merchants: Record<string, MerchantConfig>;
14
+ default_output_dir: string;
15
+ output_format: 'png' | 'pdf' | 'both';
16
+ chart_theme: string;
17
+ chart_defaults: {
18
+ width: number;
19
+ height: number;
20
+ };
21
+ max_query_bytes?: number;
22
+ llm?: {
23
+ provider?: string;
24
+ api_key_env?: string;
25
+ analysis_model?: string;
26
+ schema_filter_model?: string;
27
+ region?: string;
28
+ };
29
+ }
30
+ export interface LlmConfig {
31
+ provider: string;
32
+ apiKey?: string;
33
+ apiKeyEnv?: string;
34
+ analysisModel?: string;
35
+ schemaFilterModel?: string;
36
+ region?: string;
37
+ }
38
+ export interface ResolvedMerchantConfig {
39
+ merchant_id: string;
40
+ project_id: string;
41
+ taxonomy_level: 'standard' | 'low' | 'medium' | 'high';
42
+ dataset: string;
43
+ default_output_dir: string;
44
+ output_format: 'png' | 'pdf' | 'both';
45
+ chart_theme: string;
46
+ chart_defaults: {
47
+ width: number;
48
+ height: number;
49
+ };
50
+ external_projects?: Record<string, ExternalProject>;
51
+ max_query_bytes: number;
52
+ }
53
+ export declare function loadConfig(): UcBqConfig;
54
+ export declare function resolveMerchant(config: UcBqConfig, merchantId?: string): ResolvedMerchantConfig;
55
+ export declare function validateConfig(config: UcBqConfig): {
56
+ valid: boolean;
57
+ errors: string[];
58
+ };
59
+ export declare function resolveLlmConfig(config: UcBqConfig, overrides?: {
60
+ provider?: string;
61
+ apiKey?: string;
62
+ }): LlmConfig;
63
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,UAAU;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE;QACJ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACpD,eAAe,EAAE,MAAM,CAAC;CACzB;AAsDD,wBAAgB,UAAU,IAAI,UAAU,CAmBvC;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAuB/F;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAEvF;AAUD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAuBlH"}
@@ -0,0 +1,151 @@
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.loadConfig = loadConfig;
37
+ exports.resolveMerchant = resolveMerchant;
38
+ exports.validateConfig = validateConfig;
39
+ exports.resolveLlmConfig = resolveLlmConfig;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const os = __importStar(require("os"));
43
+ const validator_1 = require("./validator");
44
+ const CONFIG_FILENAME = '.ultracart-bq.json';
45
+ const DEFAULT_MAX_QUERY_BYTES = 10 * 1024 * 1024 * 1024; // 10 GB
46
+ const DEFAULTS = {
47
+ default_output_dir: './reports',
48
+ output_format: 'png',
49
+ chart_theme: 'default',
50
+ chart_defaults: { width: 1200, height: 600 },
51
+ max_query_bytes: DEFAULT_MAX_QUERY_BYTES,
52
+ };
53
+ /**
54
+ * Detects old single-merchant config format (has `project_id`) and migrates
55
+ * it to the new multi-merchant format in memory. Logs a deprecation warning.
56
+ */
57
+ function migrateConfigIfNeeded(raw) {
58
+ if (!('project_id' in raw)) {
59
+ return raw;
60
+ }
61
+ const projectId = raw.project_id;
62
+ const prefix = 'ultracart-dw-';
63
+ const merchantId = projectId.startsWith(prefix)
64
+ ? projectId.substring(prefix.length)
65
+ : projectId;
66
+ const taxonomyLevel = raw.taxonomy_level || 'standard';
67
+ const dataset = raw.dataset || 'ultracart_dw';
68
+ console.error(`[WARNING] Old config format detected (project_id: "${projectId}"). ` +
69
+ `Auto-migrating to multi-merchant format with merchant "${merchantId}". ` +
70
+ `Please update your ${CONFIG_FILENAME} to the new format.`);
71
+ const migrated = { ...raw };
72
+ delete migrated.project_id;
73
+ delete migrated.taxonomy_level;
74
+ delete migrated.dataset;
75
+ migrated.default_merchant = merchantId;
76
+ migrated.merchants = {
77
+ [merchantId]: {
78
+ taxonomy_level: taxonomyLevel,
79
+ dataset: dataset,
80
+ },
81
+ };
82
+ return migrated;
83
+ }
84
+ function loadConfig() {
85
+ const candidates = [
86
+ path.join(process.cwd(), CONFIG_FILENAME),
87
+ path.join(os.homedir(), CONFIG_FILENAME),
88
+ ];
89
+ for (const filePath of candidates) {
90
+ if (fs.existsSync(filePath)) {
91
+ const raw = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
92
+ const migrated = migrateConfigIfNeeded(raw);
93
+ const config = { ...DEFAULTS, ...migrated };
94
+ return config;
95
+ }
96
+ }
97
+ throw new Error(`Config file not found. Create ${CONFIG_FILENAME} in the current directory or home directory.\n` +
98
+ `Required fields: default_merchant, merchants`);
99
+ }
100
+ function resolveMerchant(config, merchantId) {
101
+ const id = merchantId || config.default_merchant;
102
+ const merchantConfig = config.merchants[id];
103
+ if (!merchantConfig) {
104
+ const available = Object.keys(config.merchants).join(', ');
105
+ throw new Error(`Merchant "${id}" not found in config. Available merchants: ${available}`);
106
+ }
107
+ return {
108
+ merchant_id: id,
109
+ project_id: `ultracart-dw-${id.toLowerCase()}`,
110
+ taxonomy_level: merchantConfig.taxonomy_level,
111
+ dataset: merchantConfig.dataset,
112
+ default_output_dir: path.join(config.default_output_dir, id),
113
+ output_format: config.output_format,
114
+ chart_theme: config.chart_theme,
115
+ chart_defaults: config.chart_defaults,
116
+ external_projects: merchantConfig.external_projects,
117
+ max_query_bytes: config.max_query_bytes ?? DEFAULT_MAX_QUERY_BYTES,
118
+ };
119
+ }
120
+ function validateConfig(config) {
121
+ return (0, validator_1.validateConfig)(config);
122
+ }
123
+ const DEFAULT_API_KEY_ENV = {
124
+ anthropic: 'ANTHROPIC_API_KEY',
125
+ openai: 'OPENAI_API_KEY',
126
+ grok: 'XAI_API_KEY',
127
+ bedrock: '', // Uses AWS credential chain, no API key
128
+ gemini: 'GOOGLE_API_KEY',
129
+ };
130
+ function resolveLlmConfig(config, overrides) {
131
+ const provider = overrides?.provider || config.llm?.provider || 'anthropic';
132
+ // Resolve API key: CLI override > env var from config > default env var for provider
133
+ let apiKey = overrides?.apiKey;
134
+ let apiKeyEnv = config.llm?.api_key_env;
135
+ if (!apiKey) {
136
+ const envVarName = apiKeyEnv || DEFAULT_API_KEY_ENV[provider] || '';
137
+ if (envVarName) {
138
+ apiKey = process.env[envVarName];
139
+ apiKeyEnv = envVarName;
140
+ }
141
+ }
142
+ return {
143
+ provider,
144
+ apiKey,
145
+ apiKeyEnv,
146
+ analysisModel: config.llm?.analysis_model,
147
+ schemaFilterModel: config.llm?.schema_filter_model,
148
+ region: config.llm?.region,
149
+ };
150
+ }
151
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { DeckConfig } from './deck';
2
+ export declare function buildDashboardHtml(deck: DeckConfig, reportsBaseDir: string): string;
3
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/lib/dashboard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAiB,MAAM,QAAQ,CAAC;AAUnD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CA6UnF"}