whale-code 6.5.11 → 6.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (613) hide show
  1. package/dist/cli/chat/ChatApp.js +7 -11
  2. package/dist/cli/chat/ChatApp.js.map +1 -1
  3. package/dist/cli/chat/ChatInput.js +7 -3
  4. package/dist/cli/chat/ChatInput.js.map +1 -1
  5. package/dist/cli/chat/MessageList.js +5 -6
  6. package/dist/cli/chat/MessageList.js.map +1 -1
  7. package/dist/cli/chat/StatusBar.d.ts +2 -2
  8. package/dist/cli/chat/StatusBar.js +90 -160
  9. package/dist/cli/chat/StatusBar.js.map +1 -1
  10. package/dist/cli/chat/components/LiveArea.js +78 -115
  11. package/dist/cli/chat/components/LiveArea.js.map +1 -1
  12. package/dist/cli/chat/components/StaticMessages.js +60 -79
  13. package/dist/cli/chat/components/StaticMessages.js.map +1 -1
  14. package/dist/cli/chat/hooks/useAgentLoop.js +45 -37
  15. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -1
  16. package/dist/cli/chat/store.d.ts +12 -0
  17. package/dist/cli/chat/store.js +19 -0
  18. package/dist/cli/chat/store.js.map +1 -1
  19. package/dist/cli/services/agent-loop-tools.js +10 -1
  20. package/dist/cli/services/agent-loop-tools.js.map +1 -1
  21. package/dist/cli/services/cli-agent-loop.js +3 -2
  22. package/dist/cli/services/cli-agent-loop.js.map +1 -1
  23. package/dist/cli/services/config-store.js +4 -3
  24. package/dist/cli/services/config-store.js.map +1 -1
  25. package/dist/cli/services/memory-manager.js +2 -2
  26. package/dist/cli/services/memory-manager.js.map +1 -1
  27. package/dist/cli/services/permission-modes.js +14 -10
  28. package/dist/cli/services/permission-modes.js.map +1 -1
  29. package/dist/cli/services/session-client.js +2 -1
  30. package/dist/cli/services/session-client.js.map +1 -1
  31. package/dist/cli/services/session-persistence.js +14 -6
  32. package/dist/cli/services/session-persistence.js.map +1 -1
  33. package/dist/cli/shared/SpinnerSlot.js +4 -1
  34. package/dist/cli/shared/SpinnerSlot.js.map +1 -1
  35. package/dist/server/handlers/browser-lifecycle.js +10 -0
  36. package/dist/server/handlers/browser-lifecycle.js.map +1 -1
  37. package/dist/server/handlers/browser.js +16 -1
  38. package/dist/server/handlers/browser.js.map +1 -1
  39. package/dist/server/handlers/campaigns.js +11 -0
  40. package/dist/server/handlers/campaigns.js.map +1 -1
  41. package/dist/server/handlers/catalog-products.js +19 -5
  42. package/dist/server/handlers/catalog-products.js.map +1 -1
  43. package/dist/server/handlers/catalog.js +42 -8
  44. package/dist/server/handlers/catalog.js.map +1 -1
  45. package/dist/server/handlers/clickhouse.js +4 -4
  46. package/dist/server/handlers/clickhouse.js.map +1 -1
  47. package/dist/server/handlers/comms-email.js +70 -8
  48. package/dist/server/handlers/comms-email.js.map +1 -1
  49. package/dist/server/handlers/comms.js +63 -21
  50. package/dist/server/handlers/comms.js.map +1 -1
  51. package/dist/server/handlers/coupons.js +141 -77
  52. package/dist/server/handlers/coupons.js.map +1 -1
  53. package/dist/server/handlers/google-ads.js +280 -8
  54. package/dist/server/handlers/google-ads.js.map +1 -1
  55. package/dist/server/handlers/remove-bg.d.ts +33 -0
  56. package/dist/server/handlers/remove-bg.js +698 -44
  57. package/dist/server/handlers/remove-bg.js.map +1 -1
  58. package/dist/server/handlers/supply-chain.js +93 -1
  59. package/dist/server/handlers/supply-chain.js.map +1 -1
  60. package/dist/server/handlers/workflow-steps-types.d.ts +1 -1
  61. package/dist/server/handlers/workflow-steps-types.js +7 -1
  62. package/dist/server/handlers/workflow-steps-types.js.map +1 -1
  63. package/dist/server/handlers/workflow-steps.js +1 -1
  64. package/dist/server/handlers/workflow-steps.js.map +1 -1
  65. package/dist/server/index.js +122 -29
  66. package/dist/server/index.js.map +1 -1
  67. package/dist/server/lib/agent-loop-turn.js +33 -3
  68. package/dist/server/lib/agent-loop-turn.js.map +1 -1
  69. package/dist/server/lib/agent-loop-types.d.ts +6 -2
  70. package/dist/server/lib/agent-loop-types.js +14 -2
  71. package/dist/server/lib/agent-loop-types.js.map +1 -1
  72. package/dist/server/lib/clickhouse-client.js +4 -2
  73. package/dist/server/lib/clickhouse-client.js.map +1 -1
  74. package/dist/server/lib/code-worker.js +4 -1
  75. package/dist/server/lib/code-worker.js.map +1 -1
  76. package/dist/server/providers/anthropic.js +103 -33
  77. package/dist/server/providers/anthropic.js.map +1 -1
  78. package/dist/server/server-chat.js +2 -2
  79. package/dist/server/server-chat.js.map +1 -1
  80. package/dist/server/server-helpers.d.ts +8 -1
  81. package/dist/server/server-helpers.js +17 -3
  82. package/dist/server/server-helpers.js.map +1 -1
  83. package/dist/server/server-persist.js +34 -21
  84. package/dist/server/server-persist.js.map +1 -1
  85. package/dist/server/server-rate-limit.d.ts +0 -1
  86. package/dist/server/server-rate-limit.js +5 -5
  87. package/dist/server/server-rate-limit.js.map +1 -1
  88. package/dist/server/server-routes-approvals.js +2 -2
  89. package/dist/server/server-routes-approvals.js.map +1 -1
  90. package/dist/server/server-routes-auth.js +2 -2
  91. package/dist/server/server-routes-auth.js.map +1 -1
  92. package/dist/server/server-routes-events.js +2 -2
  93. package/dist/server/server-routes-events.js.map +1 -1
  94. package/dist/server/server-routes-public.js +4 -4
  95. package/dist/server/server-routes-public.js.map +1 -1
  96. package/dist/server/server-routes-webchat.js +3 -3
  97. package/dist/server/server-routes-webchat.js.map +1 -1
  98. package/dist/server/server-store-circuit-breaker.js +1 -1
  99. package/dist/server/server-store-circuit-breaker.js.map +1 -1
  100. package/dist/server/tool-router.js +7 -4
  101. package/dist/server/tool-router.js.map +1 -1
  102. package/dist/server/validation.js +11 -0
  103. package/dist/server/validation.js.map +1 -1
  104. package/dist/shared/api-client.js +38 -11
  105. package/dist/shared/api-client.js.map +1 -1
  106. package/package.json +12 -10
  107. package/vendor/ink/build/ink.js +68 -24
  108. package/vendor/ink/node_modules/react-devtools-core/README.md +152 -0
  109. package/vendor/ink/node_modules/react-devtools-core/backend.js +1 -0
  110. package/vendor/ink/node_modules/react-devtools-core/dist/648.chunk.js +2 -0
  111. package/vendor/ink/node_modules/react-devtools-core/dist/648.chunk.js.map +1 -0
  112. package/vendor/ink/node_modules/react-devtools-core/dist/backend.js +15691 -0
  113. package/vendor/ink/node_modules/react-devtools-core/dist/backend.js.map +1 -0
  114. package/vendor/ink/node_modules/react-devtools-core/dist/importFile.worker.worker.js +2 -0
  115. package/vendor/ink/node_modules/react-devtools-core/dist/importFile.worker.worker.js.map +1 -0
  116. package/vendor/ink/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js +14 -0
  117. package/vendor/ink/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js.map +1 -0
  118. package/vendor/ink/node_modules/react-devtools-core/dist/standalone.js +2 -0
  119. package/vendor/ink/node_modules/react-devtools-core/dist/standalone.js.map +1 -0
  120. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/LICENSE +21 -0
  121. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/README.md +495 -0
  122. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/browser.js +8 -0
  123. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/index.js +10 -0
  124. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/buffer-util.js +129 -0
  125. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/constants.js +10 -0
  126. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/event-target.js +184 -0
  127. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/extension.js +223 -0
  128. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/limiter.js +55 -0
  129. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/permessage-deflate.js +518 -0
  130. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/receiver.js +607 -0
  131. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/sender.js +409 -0
  132. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/stream.js +180 -0
  133. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/validation.js +104 -0
  134. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/websocket-server.js +449 -0
  135. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/websocket.js +1197 -0
  136. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/package.json +56 -0
  137. package/vendor/ink/node_modules/react-devtools-core/package.json +38 -0
  138. package/vendor/ink/node_modules/react-devtools-core/standalone.js +1 -0
  139. package/dist/cli/__tests__/print-mode-streaming.test.js +0 -270
  140. package/dist/cli/__tests__/print-mode.basic-output.test.js +0 -230
  141. package/dist/cli/__tests__/print-mode.session-errors.test.js +0 -252
  142. package/dist/cli/__tests__/print-mode.test.js +0 -273
  143. package/dist/cli/__tests__/serve-mode-messages.test.js +0 -338
  144. package/dist/cli/__tests__/serve-mode.messages.part2.test.js +0 -266
  145. package/dist/cli/__tests__/serve-mode.messages.test.js +0 -277
  146. package/dist/cli/__tests__/serve-mode.startup-http.test.js +0 -279
  147. package/dist/cli/__tests__/serve-mode.test.js +0 -345
  148. package/dist/cli/chat/NodeManager.d.ts +0 -30
  149. package/dist/cli/chat/NodeManager.js +0 -66
  150. package/dist/cli/chat/NodeManager.js.map +0 -1
  151. package/dist/cli/chat/chat-input-menu-handler.d.ts +0 -32
  152. package/dist/cli/chat/hooks/slash-imsg-handlers.js +0 -148
  153. package/dist/cli/chat/hooks/slash-imsg-handlers.js.map +0 -1
  154. package/dist/cli/chat/hooks/useStreamingReducer.d.ts +0 -66
  155. package/dist/cli/commands/__tests__/config-cmd.test.js +0 -270
  156. package/dist/cli/commands/__tests__/doctor.test.js +0 -257
  157. package/dist/cli/commands/__tests__/imsg-node-bridge.test.js +0 -99
  158. package/dist/cli/commands/__tests__/imsg-utils.test.js +0 -73
  159. package/dist/cli/commands/__tests__/init.test.js +0 -214
  160. package/dist/cli/commands/__tests__/mcp.test.js +0 -287
  161. package/dist/cli/commands/imsg-watcher-helpers.d.ts +0 -40
  162. package/dist/cli/commands/imsg-watcher-helpers.js +0 -184
  163. package/dist/cli/commands/imsg-watcher-helpers.js.map +0 -1
  164. package/dist/cli/commands/imsg-watcher.d.ts +0 -11
  165. package/dist/cli/commands/imsg-watcher.js +0 -230
  166. package/dist/cli/commands/imsg-watcher.js.map +0 -1
  167. package/dist/cli/services/__tests__/agent-definitions.test.js +0 -153
  168. package/dist/cli/services/__tests__/agent-events-global.test.js +0 -39
  169. package/dist/cli/services/__tests__/agent-events.part2.test.js +0 -113
  170. package/dist/cli/services/__tests__/agent-events.test.js +0 -157
  171. package/dist/cli/services/__tests__/agent-loop-auth.test.js +0 -392
  172. package/dist/cli/services/__tests__/agent-loop-budget.test.js +0 -389
  173. package/dist/cli/services/__tests__/agent-loop-tools-lifecycle.test.js +0 -430
  174. package/dist/cli/services/__tests__/agent-loop-tools-maxturns.test.js +0 -486
  175. package/dist/cli/services/__tests__/agent-loop-utils-execution.test.js +0 -528
  176. package/dist/cli/services/__tests__/agent-loop-utils-helpers.test.js +0 -466
  177. package/dist/cli/services/__tests__/agent-worker-base-execute.test.js +0 -257
  178. package/dist/cli/services/__tests__/agent-worker-base-helpers.test.js +0 -198
  179. package/dist/cli/services/__tests__/agent-worker-base.test.js +0 -278
  180. package/dist/cli/services/__tests__/auth-service-exports.test.js +0 -41
  181. package/dist/cli/services/__tests__/auth-service.part2.test.js +0 -169
  182. package/dist/cli/services/__tests__/auth-service.test.js +0 -242
  183. package/dist/cli/services/__tests__/background-processes.test.js +0 -282
  184. package/dist/cli/services/__tests__/claude-md-loader.test.js +0 -134
  185. package/dist/cli/services/__tests__/config-store.test.js +0 -247
  186. package/dist/cli/services/__tests__/debug-log.test.js +0 -199
  187. package/dist/cli/services/__tests__/edge-cases-caching.test.js +0 -174
  188. package/dist/cli/services/__tests__/edge-cases-compaction-core.test.js +0 -226
  189. package/dist/cli/services/__tests__/edge-cases-compaction-openai.test.js +0 -152
  190. package/dist/cli/services/__tests__/edge-cases-compaction-shapes.test.js +0 -53
  191. package/dist/cli/services/__tests__/edge-cases-compaction-thinking.test.js +0 -226
  192. package/dist/cli/services/__tests__/edge-cases-compaction.test.js +0 -131
  193. package/dist/cli/services/__tests__/edge-cases-paths.test.js +0 -86
  194. package/dist/cli/services/__tests__/error-logger-messages.test.js +0 -81
  195. package/dist/cli/services/__tests__/error-logger-transport.test.js +0 -119
  196. package/dist/cli/services/__tests__/error-logger.test.js +0 -264
  197. package/dist/cli/services/__tests__/file-history.test.js +0 -136
  198. package/dist/cli/services/__tests__/git-context-cache-reset.test.js +0 -223
  199. package/dist/cli/services/__tests__/git-context.test.js +0 -241
  200. package/dist/cli/services/__tests__/interactive-tools-execute.test.js +0 -166
  201. package/dist/cli/services/__tests__/interactive-tools-plan.test.js +0 -197
  202. package/dist/cli/services/__tests__/interactive-tools.part2.test.js +0 -168
  203. package/dist/cli/services/__tests__/interactive-tools.test.js +0 -179
  204. package/dist/cli/services/__tests__/keybinding-manager.test.js +0 -205
  205. package/dist/cli/services/__tests__/local-tools-dispatch.test.js +0 -404
  206. package/dist/cli/services/__tests__/local-tools.test.js +0 -238
  207. package/dist/cli/services/__tests__/lsp-manager.test.js +0 -364
  208. package/dist/cli/services/__tests__/mcp-client-connect-disconnect.test.js +0 -310
  209. package/dist/cli/services/__tests__/mcp-client.test.js +0 -93
  210. package/dist/cli/services/__tests__/memory-manager.test.js +0 -154
  211. package/dist/cli/services/__tests__/model-manager-utils.test.js +0 -154
  212. package/dist/cli/services/__tests__/model-manager.test.js +0 -175
  213. package/dist/cli/services/__tests__/permission-modes.test.js +0 -222
  214. package/dist/cli/services/__tests__/ripgrep.test.js +0 -328
  215. package/dist/cli/services/__tests__/server-tools-execute.test.js +0 -317
  216. package/dist/cli/services/__tests__/server-tools.test.js +0 -272
  217. package/dist/cli/services/__tests__/session-persistence.test.js +0 -245
  218. package/dist/cli/services/__tests__/subagent-basic.test.js +0 -489
  219. package/dist/cli/services/__tests__/subagent-edge.test.js +0 -545
  220. package/dist/cli/services/__tests__/subagent-prompts.test.js +0 -558
  221. package/dist/cli/services/__tests__/subagent-worker-errors.test.js +0 -255
  222. package/dist/cli/services/__tests__/subagent-worker.test.js +0 -242
  223. package/dist/cli/services/__tests__/system-prompt.test.js +0 -210
  224. package/dist/cli/services/__tests__/team-lead-comms-messaging.test.js +0 -250
  225. package/dist/cli/services/__tests__/team-lead-comms-result.test.js +0 -232
  226. package/dist/cli/services/__tests__/team-lead-comms-stop.test.js +0 -344
  227. package/dist/cli/services/__tests__/team-lead-comms.test.js +0 -285
  228. package/dist/cli/services/__tests__/team-lead-create.test.js +0 -327
  229. package/dist/cli/services/__tests__/team-lead-run.test.js +0 -318
  230. package/dist/cli/services/__tests__/team-lead-stop.test.js +0 -199
  231. package/dist/cli/services/__tests__/team-state-comms.test.js +0 -240
  232. package/dist/cli/services/__tests__/team-state-core.test.js +0 -230
  233. package/dist/cli/services/__tests__/team-state-tasks-complete-fail-available.test.js +0 -224
  234. package/dist/cli/services/__tests__/team-state-tasks.test.js +0 -184
  235. package/dist/cli/services/__tests__/telemetry-ai-metadata.test.js +0 -116
  236. package/dist/cli/services/__tests__/telemetry.part2.test.js +0 -195
  237. package/dist/cli/services/__tests__/telemetry.test.js +0 -176
  238. package/dist/cli/services/agent-loop-iteration.d.ts +0 -13
  239. package/dist/cli/services/agent-loop-setup.d.ts +0 -32
  240. package/dist/cli/services/agent-worker-base-api.d.ts +0 -19
  241. package/dist/cli/services/agent-worker-base-helpers.d.ts +0 -27
  242. package/dist/cli/services/agent-worker-base-tools.d.ts +0 -16
  243. package/dist/cli/services/agent-worker-base-types.d.ts +0 -81
  244. package/dist/cli/services/background-agents.d.ts +0 -26
  245. package/dist/cli/services/background-processes-ops.d.ts +0 -24
  246. package/dist/cli/services/background-tool-defs.d.ts +0 -50
  247. package/dist/cli/services/config-modules-model.test.js +0 -133
  248. package/dist/cli/services/config-modules-permission.test.js +0 -85
  249. package/dist/cli/services/config-modules-permissions.test.js +0 -85
  250. package/dist/cli/services/config-modules-session.test.js +0 -297
  251. package/dist/cli/services/format-server-response-columns.test.js +0 -265
  252. package/dist/cli/services/format-server-response-fallback.test.js +0 -65
  253. package/dist/cli/services/format-server-response-primitives-basic.test.js +0 -261
  254. package/dist/cli/services/format-server-response-primitives-nested.test.js +0 -188
  255. package/dist/cli/services/format-server-response-primitives.test.js +0 -300
  256. package/dist/cli/services/format-server-response-realworld.test.js +0 -248
  257. package/dist/cli/services/format-server-response-values.test.js +0 -247
  258. package/dist/cli/services/hooks-runners.test.js +0 -184
  259. package/dist/cli/services/hooks.glob-load.test.js +0 -233
  260. package/dist/cli/services/hooks.run-hooks.test.js +0 -184
  261. package/dist/cli/services/hooks.test.js +0 -233
  262. package/dist/cli/services/ink-incremental.d.ts +0 -19
  263. package/dist/cli/services/ink-incremental.js +0 -59
  264. package/dist/cli/services/ink-incremental.js.map +0 -1
  265. package/dist/cli/services/ink-resize-fix.d.ts +0 -18
  266. package/dist/cli/services/ink-resize-fix.js +0 -76
  267. package/dist/cli/services/ink-resize-fix.js.map +0 -1
  268. package/dist/cli/services/ink-sync-output.d.ts +0 -12
  269. package/dist/cli/services/ink-sync-output.js +0 -16
  270. package/dist/cli/services/ink-sync-output.js.map +0 -1
  271. package/dist/cli/services/interactive-tool-defs.d.ts +0 -80
  272. package/dist/cli/services/local-tools-definitions.d.ts +0 -6
  273. package/dist/cli/services/local-tools-files.test.js +0 -256
  274. package/dist/cli/services/local-tools-read-many.d.ts +0 -6
  275. package/dist/cli/services/model-router.test.js +0 -245
  276. package/dist/cli/services/rewind-rewindTo.test.js +0 -202
  277. package/dist/cli/services/rewind.test.js +0 -175
  278. package/dist/cli/services/sandbox.test.js +0 -198
  279. package/dist/cli/services/subagent-execution.d.ts +0 -12
  280. package/dist/cli/services/team-lead-auto.d.ts +0 -11
  281. package/dist/cli/services/team-lead-execution.d.ts +0 -28
  282. package/dist/cli/services/teammate-loop.js +0 -557
  283. package/dist/cli/services/teammate-loop.js.map +0 -1
  284. package/dist/cli/services/tools/__tests__/agent-tools-tasks-teams.test.js +0 -250
  285. package/dist/cli/services/tools/__tests__/agent-tools-teams.test.js +0 -200
  286. package/dist/cli/services/tools/__tests__/agent-tools.test.js +0 -340
  287. package/dist/cli/services/tools/__tests__/file-ops-cache.test.js +0 -152
  288. package/dist/cli/services/tools/__tests__/file-ops-notebook.test.js +0 -249
  289. package/dist/cli/services/tools/__tests__/file-ops-read.test.js +0 -261
  290. package/dist/cli/services/tools/__tests__/file-ops-write.test.js +0 -292
  291. package/dist/cli/services/tools/__tests__/search-tools-rg.test.js +0 -92
  292. package/dist/cli/services/tools/__tests__/search-tools.part2.test.js +0 -174
  293. package/dist/cli/services/tools/__tests__/search-tools.test.js +0 -227
  294. package/dist/cli/services/tools/__tests__/shell-exec-allowed-core.test.js +0 -163
  295. package/dist/cli/services/tools/__tests__/shell-exec-allowed-extended.test.js +0 -220
  296. package/dist/cli/services/tools/__tests__/shell-exec-allowed.part2.test.js +0 -215
  297. package/dist/cli/services/tools/__tests__/shell-exec-allowed.test.js +0 -154
  298. package/dist/cli/services/tools/__tests__/shell-exec-blocked.test.js +0 -132
  299. package/dist/cli/services/tools/__tests__/shell-exec-execution.test.js +0 -245
  300. package/dist/cli/services/tools/__tests__/task-manager-create.test.js +0 -110
  301. package/dist/cli/services/tools/__tests__/task-manager-crud.test.js +0 -339
  302. package/dist/cli/services/tools/__tests__/task-manager-list-get.test.js +0 -343
  303. package/dist/cli/services/tools/__tests__/task-manager-query.test.js +0 -346
  304. package/dist/cli/services/tools/__tests__/task-manager-routing.test.js +0 -58
  305. package/dist/cli/services/tools/__tests__/task-manager-update.test.js +0 -224
  306. package/dist/cli/services/tools/__tests__/task-manager.test.js +0 -159
  307. package/dist/cli/services/tools/__tests__/web-tools-html-search.test.js +0 -227
  308. package/dist/cli/services/tools/__tests__/web-tools.test.js +0 -285
  309. package/dist/cli/services/tools/shell-exec.test.js +0 -148
  310. package/dist/cli/shared/SharedTick.d.ts +0 -10
  311. package/dist/cli/shared/__tests__/markdown.test.js +0 -188
  312. package/dist/local-agent/__tests__/connection-disconnect.test.js +0 -201
  313. package/dist/local-agent/__tests__/connection-lifecycle.test.js +0 -289
  314. package/dist/local-agent/__tests__/connection-msghandling.test.js +0 -311
  315. package/dist/local-agent/__tests__/connection-reconnect.test.js +0 -230
  316. package/dist/local-agent/__tests__/connection-toolexec.test.js +0 -253
  317. package/dist/local-agent/__tests__/discovery.test.js +0 -328
  318. package/dist/local-agent/__tests__/executor-background.test.js +0 -219
  319. package/dist/local-agent/__tests__/executor-exec.test.js +0 -221
  320. package/dist/local-agent/__tests__/executor-jobs-sessions.test.js +0 -220
  321. package/dist/local-agent/__tests__/executor-system-info.test.js +0 -133
  322. package/dist/local-agent/__tests__/executor-systeminfo.test.js +0 -109
  323. package/dist/local-agent/__tests__/executor.test.js +0 -235
  324. package/dist/local-agent/__tests__/index.test.js +0 -139
  325. package/dist/node/__tests__/cli-channels.test.js +0 -293
  326. package/dist/node/__tests__/cli-config-edge.test.js +0 -154
  327. package/dist/node/__tests__/cli-config.test.js +0 -215
  328. package/dist/node/__tests__/config.test.js +0 -292
  329. package/dist/node/__tests__/runtime-heartbeat.test.js +0 -153
  330. package/dist/node/__tests__/runtime-lifecycle-init.test.js +0 -263
  331. package/dist/node/__tests__/runtime-lifecycle-stats.test.js +0 -180
  332. package/dist/node/__tests__/runtime-lifecycle.test.js +0 -305
  333. package/dist/node/__tests__/runtime-relay.test.js +0 -341
  334. package/dist/node/adapters/__tests__/base.test.js +0 -286
  335. package/dist/node/adapters/__tests__/discord.test.js +0 -284
  336. package/dist/node/adapters/__tests__/email-send.test.js +0 -295
  337. package/dist/node/adapters/__tests__/email.inbound-send.test.js +0 -217
  338. package/dist/node/adapters/__tests__/email.lifecycle.test.js +0 -211
  339. package/dist/node/adapters/__tests__/email.test.js +0 -290
  340. package/dist/node/adapters/__tests__/email.webhook-send.test.js +0 -251
  341. package/dist/node/adapters/__tests__/imessage-filter.test.js +0 -183
  342. package/dist/node/adapters/__tests__/imessage-lifecycle.test.js +0 -215
  343. package/dist/node/adapters/__tests__/imessage-send-restart.test.js +0 -227
  344. package/dist/node/adapters/__tests__/slack.part2.test.js +0 -135
  345. package/dist/node/adapters/__tests__/slack.test.js +0 -241
  346. package/dist/node/adapters/__tests__/sms-extras.test.js +0 -108
  347. package/dist/node/adapters/__tests__/sms-lifecycle.test.js +0 -203
  348. package/dist/node/adapters/__tests__/sms-messaging.test.js +0 -266
  349. package/dist/node/adapters/__tests__/sms.part2.test.js +0 -174
  350. package/dist/node/adapters/__tests__/sms.test.js +0 -253
  351. package/dist/node/adapters/__tests__/telegram-polling.test.js +0 -256
  352. package/dist/node/adapters/__tests__/telegram-send.test.js +0 -166
  353. package/dist/node/adapters/__tests__/webchat-inbound.test.js +0 -188
  354. package/dist/node/adapters/__tests__/webchat-outbound.test.js +0 -178
  355. package/dist/node/adapters/__tests__/whatsapp-inbound.test.js +0 -200
  356. package/dist/node/adapters/__tests__/whatsapp-send.test.js +0 -212
  357. package/dist/node/adapters/__tests__/whatsapp.test.js +0 -280
  358. package/dist/server/__tests__/gateway-fast-fail.test.js +0 -160
  359. package/dist/server/__tests__/local-agent-gateway.test.js +0 -186
  360. package/dist/server/__tests__/proxy-handlers-delegation.test.js +0 -240
  361. package/dist/server/__tests__/proxy-handlers-validation.test.js +0 -211
  362. package/dist/server/__tests__/proxy-handlers.part2.test.js +0 -240
  363. package/dist/server/__tests__/proxy-handlers.test.js +0 -213
  364. package/dist/server/__tests__/strip-base64-e2e.test.js +0 -303
  365. package/dist/server/__tests__/strip-base64.test.js +0 -256
  366. package/dist/server/__tests__/tool-router-agent-tools.test.js +0 -324
  367. package/dist/server/__tests__/tool-router-execute-core.test.js +0 -357
  368. package/dist/server/__tests__/tool-router-execute-permissions.test.js +0 -332
  369. package/dist/server/__tests__/tool-router-execute.test.js +0 -348
  370. package/dist/server/__tests__/tool-router-load.test.js +0 -432
  371. package/dist/server/__tests__/tool-router-permissions.test.js +0 -359
  372. package/dist/server/__tests__/tool-router-registry-cache.test.js +0 -383
  373. package/dist/server/__tests__/tool-router-registry-handlers.test.js +0 -272
  374. package/dist/server/__tests__/tool-router-registry.test.js +0 -331
  375. package/dist/server/__tests__/validation-inventory.test.js +0 -250
  376. package/dist/server/__tests__/validation-misc.test.js +0 -243
  377. package/dist/server/__tests__/validation-supply-chain.test.js +0 -188
  378. package/dist/server/__tests__/worker.test.js +0 -265
  379. package/dist/server/handlers/__tests__/conversation-lock.test.js +0 -117
  380. package/dist/server/handlers/__tests__/e2e/auth-cross-platform-login.e2e.test.js +0 -268
  381. package/dist/server/handlers/__tests__/e2e/auth-cross-platform-tokens.e2e.test.js +0 -264
  382. package/dist/server/handlers/__tests__/e2e/email-pipeline-send.e2e.test.js +0 -214
  383. package/dist/server/handlers/__tests__/e2e/email-pipeline-threads.e2e.test.js +0 -168
  384. package/dist/server/handlers/__tests__/e2e/error-logging-pipeline-dedup.e2e.test.js +0 -229
  385. package/dist/server/handlers/__tests__/e2e/error-logging-pipeline.e2e.test.js +0 -239
  386. package/dist/server/handlers/__tests__/e2e/error-logging-rate-limit.e2e.test.js +0 -150
  387. package/dist/server/handlers/__tests__/e2e/inventory-sync-guards.e2e.test.js +0 -177
  388. package/dist/server/handlers/__tests__/e2e/inventory-sync.e2e.test.js +0 -228
  389. package/dist/server/handlers/__tests__/e2e/inventory-sync.part2.e2e.test.js +0 -188
  390. package/dist/server/handlers/__tests__/e2e/order-lifecycle-fulfillment.e2e.test.js +0 -295
  391. package/dist/server/handlers/__tests__/e2e/order-lifecycle.e2e.test.js +0 -277
  392. package/dist/server/handlers/__tests__/e2e/order-lifecycle.fulfillment.e2e.test.js +0 -307
  393. package/dist/server/handlers/__tests__/e2e/order-lifecycle.setup.e2e.test.js +0 -177
  394. package/dist/server/handlers/__tests__/e2e/storefront-checkout-cart.e2e.test.js +0 -255
  395. package/dist/server/handlers/__tests__/e2e/storefront-checkout-webhook.e2e.test.js +0 -231
  396. package/dist/server/handlers/__tests__/e2e/workflow-execution-failures.e2e.test.js +0 -235
  397. package/dist/server/handlers/__tests__/e2e/workflow-execution.e2e.test.js +0 -294
  398. package/dist/server/handlers/__tests__/e2e/workflow-security.e2e.test.js +0 -311
  399. package/dist/server/handlers/__tests__/e2e/workflow-security.part2.e2e.test.js +0 -267
  400. package/dist/server/handlers/__tests__/workflow-cache.test.js +0 -237
  401. package/dist/server/handlers/analytics-errors-edge.test.js +0 -173
  402. package/dist/server/handlers/analytics.test.js +0 -280
  403. package/dist/server/handlers/api-docs-examples-ext.d.ts +0 -9
  404. package/dist/server/handlers/api-docs-examples-ext.js +0 -278
  405. package/dist/server/handlers/api-docs-examples-ext.js.map +0 -1
  406. package/dist/server/handlers/api-docs-examples.d.ts +0 -8
  407. package/dist/server/handlers/api-docs-examples.js +0 -221
  408. package/dist/server/handlers/api-docs-examples.js.map +0 -1
  409. package/dist/server/handlers/api-docs-sections-ext.d.ts +0 -2
  410. package/dist/server/handlers/api-docs-sections-ext.js +0 -497
  411. package/dist/server/handlers/api-docs-sections-ext.js.map +0 -1
  412. package/dist/server/handlers/api-docs-sections.d.ts +0 -21
  413. package/dist/server/handlers/api-docs-sections.js +0 -293
  414. package/dist/server/handlers/api-docs-sections.js.map +0 -1
  415. package/dist/server/handlers/api-keys.part2.test.js +0 -157
  416. package/dist/server/handlers/api-keys.test.js +0 -161
  417. package/dist/server/handlers/billing-routes.test.js +0 -123
  418. package/dist/server/handlers/billing.test.js +0 -215
  419. package/dist/server/handlers/browser-actions-errors.test.js +0 -94
  420. package/dist/server/handlers/browser-actions.part2.test.js +0 -190
  421. package/dist/server/handlers/browser-actions.test.js +0 -190
  422. package/dist/server/handlers/browser-validation.test.js +0 -257
  423. package/dist/server/handlers/catalog.test.js +0 -297
  424. package/dist/server/handlers/comms.test.js +0 -289
  425. package/dist/server/handlers/creations-advanced-collections.test.js +0 -214
  426. package/dist/server/handlers/creations-advanced-generate.test.js +0 -142
  427. package/dist/server/handlers/creations-advanced.test.js +0 -171
  428. package/dist/server/handlers/creations-collections-preview.test.js +0 -214
  429. package/dist/server/handlers/creations-crud.test.js +0 -260
  430. package/dist/server/handlers/creations-mutations.test.js +0 -197
  431. package/dist/server/handlers/crm.test.js +0 -179
  432. package/dist/server/handlers/discovery-advertise.test.js +0 -185
  433. package/dist/server/handlers/discovery-scan.test.js +0 -233
  434. package/dist/server/handlers/embeddings-embed-search.test.js +0 -196
  435. package/dist/server/handlers/embeddings-index-delete-stats.test.js +0 -140
  436. package/dist/server/handlers/embeddings-search.test.js +0 -221
  437. package/dist/server/handlers/embeddings.test.js +0 -137
  438. package/dist/server/handlers/enrichment-breach.d.ts +0 -8
  439. package/dist/server/handlers/enrichment-breach.js +0 -266
  440. package/dist/server/handlers/enrichment-breach.js.map +0 -1
  441. package/dist/server/handlers/enrichment-data.d.ts +0 -13
  442. package/dist/server/handlers/enrichment-data.js +0 -145
  443. package/dist/server/handlers/enrichment-data.js.map +0 -1
  444. package/dist/server/handlers/enrichment-mutations.test.js +0 -240
  445. package/dist/server/handlers/enrichment-queries.test.js +0 -181
  446. package/dist/server/handlers/enrichment-validation.test.js +0 -177
  447. package/dist/server/handlers/enrichment-writes.d.ts +0 -16
  448. package/dist/server/handlers/enrichment-writes.js +0 -226
  449. package/dist/server/handlers/enrichment-writes.js.map +0 -1
  450. package/dist/server/handlers/image-gen.test.js +0 -205
  451. package/dist/server/handlers/inventory.test.js +0 -380
  452. package/dist/server/handlers/kali-background.test.js +0 -222
  453. package/dist/server/handlers/kali-errors.test.js +0 -92
  454. package/dist/server/handlers/kali-validation.test.js +0 -234
  455. package/dist/server/handlers/llm-providers-actions.test.js +0 -220
  456. package/dist/server/handlers/llm-providers-anthropic.test.js +0 -239
  457. package/dist/server/handlers/llm-providers-failover.test.js +0 -232
  458. package/dist/server/handlers/llm-providers-providers.test.js +0 -300
  459. package/dist/server/handlers/llm-providers-validation.test.js +0 -239
  460. package/dist/server/handlers/local-agent-tools.test.js +0 -224
  461. package/dist/server/handlers/local-agent.test.js +0 -198
  462. package/dist/server/handlers/local-agent.tools-status.test.js +0 -204
  463. package/dist/server/handlers/local-agent.validation-exec.test.js +0 -182
  464. package/dist/server/handlers/meta-ads-audience-rules.test.js +0 -243
  465. package/dist/server/handlers/meta-ads-audience-targeting.test.js +0 -205
  466. package/dist/server/handlers/meta-ads-audiences-targeting.test.js +0 -383
  467. package/dist/server/handlers/meta-ads-crud-ads.test.js +0 -136
  468. package/dist/server/handlers/meta-ads-crud-campaigns.test.js +0 -189
  469. package/dist/server/handlers/meta-ads-crud-create.test.js +0 -303
  470. package/dist/server/handlers/meta-ads-crud-list-update.test.js +0 -259
  471. package/dist/server/handlers/meta-ads-delete-publish-sync.test.js +0 -282
  472. package/dist/server/handlers/meta-ads-insights.test.js +0 -80
  473. package/dist/server/handlers/meta-ads-list-get.test.js +0 -237
  474. package/dist/server/handlers/meta-ads-publish-delete.test.js +0 -254
  475. package/dist/server/handlers/meta-ads-publish-helpers.js +0 -117
  476. package/dist/server/handlers/meta-ads-publish-helpers.js.map +0 -1
  477. package/dist/server/handlers/meta-ads-publish-sync.test.js +0 -205
  478. package/dist/server/handlers/meta-ads-publish.test.js +0 -254
  479. package/dist/server/handlers/meta-ads-sync-insights.test.js +0 -184
  480. package/dist/server/handlers/meta-ads-update.test.js +0 -117
  481. package/dist/server/handlers/nodes-channels.test.js +0 -413
  482. package/dist/server/handlers/nodes-events.test.js +0 -131
  483. package/dist/server/handlers/nodes-list-delete.test.js +0 -171
  484. package/dist/server/handlers/nodes-messages-delivery.test.js +0 -208
  485. package/dist/server/handlers/nodes-messages.test.js +0 -211
  486. package/dist/server/handlers/nodes-register.test.js +0 -277
  487. package/dist/server/handlers/nodes.test.js +0 -353
  488. package/dist/server/handlers/operations.test.js +0 -136
  489. package/dist/server/handlers/platform-telemetry.test.js +0 -200
  490. package/dist/server/handlers/platform-websearch.test.js +0 -160
  491. package/dist/server/handlers/storefront.test.js +0 -329
  492. package/dist/server/handlers/supply-chain.test.js +0 -347
  493. package/dist/server/handlers/transcription.test.js +0 -118
  494. package/dist/server/handlers/video-gen-veo.js +0 -114
  495. package/dist/server/handlers/video-gen-veo.js.map +0 -1
  496. package/dist/server/handlers/video-gen.test.js +0 -146
  497. package/dist/server/handlers/voice.test.js +0 -153
  498. package/dist/server/handlers/workflow-steps.test.js +0 -330
  499. package/dist/server/handlers/workflows-extras.test.js +0 -65
  500. package/dist/server/handlers/workflows.part2.test.js +0 -170
  501. package/dist/server/handlers/workflows.test.js +0 -281
  502. package/dist/server/lib/__tests__/batch-client-conversion-jsonl.test.js +0 -171
  503. package/dist/server/lib/__tests__/batch-client-polling.test.js +0 -292
  504. package/dist/server/lib/__tests__/batch-client-queue.test.js +0 -270
  505. package/dist/server/lib/__tests__/clickhouse-buffer.test.js +0 -236
  506. package/dist/server/lib/__tests__/code-worker-edge-cases.test.js +0 -118
  507. package/dist/server/lib/__tests__/code-worker-pool-execute.test.js +0 -193
  508. package/dist/server/lib/__tests__/code-worker-pool-execution.test.js +0 -165
  509. package/dist/server/lib/__tests__/code-worker-pool-init.test.js +0 -131
  510. package/dist/server/lib/__tests__/code-worker-pool.test.js +0 -194
  511. package/dist/server/lib/__tests__/code-worker-sandbox-ops.test.js +0 -123
  512. package/dist/server/lib/__tests__/code-worker-sandbox.test.js +0 -217
  513. package/dist/server/lib/__tests__/code-worker.test.js +0 -179
  514. package/dist/server/lib/__tests__/compaction-service-generate.test.js +0 -229
  515. package/dist/server/lib/__tests__/compaction-service.test.js +0 -319
  516. package/dist/server/lib/__tests__/otel.test.js +0 -146
  517. package/dist/server/lib/__tests__/prompt-sanitizer-validation.test.js +0 -165
  518. package/dist/server/lib/__tests__/prompt-sanitizer.sanitize.test.js +0 -343
  519. package/dist/server/lib/__tests__/prompt-sanitizer.test.js +0 -328
  520. package/dist/server/lib/__tests__/prompt-sanitizer.validate-tool.test.js +0 -145
  521. package/dist/server/lib/__tests__/provider-capabilities.test.js +0 -263
  522. package/dist/server/lib/__tests__/provider-failover-routing.test.js +0 -145
  523. package/dist/server/lib/__tests__/provider-failover-state.test.js +0 -131
  524. package/dist/server/lib/__tests__/rate-limiter-budgets.test.js +0 -216
  525. package/dist/server/lib/__tests__/rate-limiter.budgets-tools.test.js +0 -113
  526. package/dist/server/lib/__tests__/rate-limiter.check-request.test.js +0 -141
  527. package/dist/server/lib/__tests__/rate-limiter.stats-lifecycle.test.js +0 -135
  528. package/dist/server/lib/__tests__/rate-limiter.test.js +0 -207
  529. package/dist/server/lib/__tests__/server-agent-loop-abort-conditions.test.js +0 -544
  530. package/dist/server/lib/__tests__/server-agent-loop-abort.part2.test.js +0 -504
  531. package/dist/server/lib/__tests__/server-agent-loop-abort.test.js +0 -396
  532. package/dist/server/lib/__tests__/server-agent-loop-compaction.test.js +0 -397
  533. package/dist/server/lib/__tests__/server-agent-loop-failover.test.js +0 -356
  534. package/dist/server/lib/__tests__/server-agent-loop-features-caching.test.js +0 -519
  535. package/dist/server/lib/__tests__/server-agent-loop-features-edges.test.js +0 -512
  536. package/dist/server/lib/__tests__/server-subagent-bailout.test.js +0 -194
  537. package/dist/server/lib/__tests__/server-subagent-basics.test.js +0 -348
  538. package/dist/server/lib/__tests__/server-subagent-errors-abort.test.js +0 -319
  539. package/dist/server/lib/__tests__/server-subagent-errors-progress.test.js +0 -253
  540. package/dist/server/lib/__tests__/server-subagent-errors.part2.test.js +0 -253
  541. package/dist/server/lib/__tests__/server-subagent-errors.test.js +0 -319
  542. package/dist/server/lib/__tests__/session-checkpoint-load.test.js +0 -275
  543. package/dist/server/lib/__tests__/session-checkpoint-save.test.js +0 -159
  544. package/dist/server/lib/__tests__/ssrf-guard.test.js +0 -93
  545. package/dist/server/lib/__tests__/supabase-client.test.js +0 -111
  546. package/dist/server/lib/__tests__/template-resolver.test.js +0 -317
  547. package/dist/server/lib/__tests__/utils-timeout.test.js +0 -49
  548. package/dist/server/lib/__tests__/utils.test.js +0 -322
  549. package/dist/server/providers/__tests__/anthropic-adapter.test.js +0 -228
  550. package/dist/server/providers/__tests__/anthropic-betas-toolchoice.test.js +0 -257
  551. package/dist/server/providers/__tests__/anthropic-errors.test.js +0 -262
  552. package/dist/server/providers/__tests__/anthropic-stream-core.test.js +0 -275
  553. package/dist/server/providers/__tests__/anthropic-streaming-betas.test.js +0 -247
  554. package/dist/server/providers/__tests__/anthropic-streaming-core.test.js +0 -275
  555. package/dist/server/providers/__tests__/bedrock-config.test.js +0 -177
  556. package/dist/server/providers/__tests__/bedrock-stream-behavior-streaming.test.js +0 -272
  557. package/dist/server/providers/__tests__/bedrock-stream-behavior-toolchoice.test.js +0 -214
  558. package/dist/server/providers/__tests__/bedrock-stream-behavior.part2.test.js +0 -165
  559. package/dist/server/providers/__tests__/bedrock-stream-behavior.test.js +0 -309
  560. package/dist/server/providers/__tests__/bedrock-stream-body-credentials.test.js +0 -170
  561. package/dist/server/providers/__tests__/bedrock-stream-body-extras.test.js +0 -183
  562. package/dist/server/providers/__tests__/bedrock-stream-body-request.test.js +0 -305
  563. package/dist/server/providers/__tests__/bedrock-stream-body.part2.test.js +0 -305
  564. package/dist/server/providers/__tests__/bedrock-stream-body.test.js +0 -175
  565. package/dist/server/providers/__tests__/bedrock-stream-errors.test.js +0 -165
  566. package/dist/server/providers/__tests__/gemini-config-methods.test.js +0 -182
  567. package/dist/server/providers/__tests__/gemini-config-streaming.test.js +0 -257
  568. package/dist/server/providers/__tests__/gemini-conversion-messages.test.js +0 -247
  569. package/dist/server/providers/__tests__/gemini-conversion-schema.test.js +0 -365
  570. package/dist/server/providers/__tests__/gemini-tools-choice.test.js +0 -221
  571. package/dist/server/providers/__tests__/gemini-tools-fn.test.js +0 -252
  572. package/dist/server/providers/__tests__/openai-config.test.js +0 -194
  573. package/dist/server/providers/__tests__/openai-conversion.test.js +0 -276
  574. package/dist/server/providers/__tests__/openai-messages.test.js +0 -261
  575. package/dist/server/providers/__tests__/openai-streaming.test.js +0 -394
  576. package/dist/server/providers/__tests__/openai-tools-cache.test.js +0 -227
  577. package/dist/server/providers/__tests__/registry.test.js +0 -183
  578. package/dist/server/providers/__tests__/shared.test.js +0 -297
  579. package/dist/shared/agent-core-config.test.js +0 -132
  580. package/dist/shared/agent-core-context-thinking.test.js +0 -293
  581. package/dist/shared/agent-core-loop-calls.test.js +0 -174
  582. package/dist/shared/agent-core-loop-detector-bail.test.js +0 -201
  583. package/dist/shared/agent-core-loop-detector.test.js +0 -195
  584. package/dist/shared/agent-core-loop-errors.test.js +0 -258
  585. package/dist/shared/agent-core-pricing.test.js +0 -191
  586. package/dist/shared/agent-core-sanitize-retry.test.js +0 -129
  587. package/dist/shared/api-client-build-request.test.js +0 -228
  588. package/dist/shared/api-client-build-system-caching.test.js +0 -107
  589. package/dist/shared/api-client-build.test.js +0 -223
  590. package/dist/shared/api-client-config.d.ts +0 -21
  591. package/dist/shared/api-client-helpers.d.ts +0 -57
  592. package/dist/shared/api-client-helpers.test.js +0 -261
  593. package/dist/shared/api-client-proxy-happy.test.js +0 -255
  594. package/dist/shared/api-client-proxy-retry.test.js +0 -307
  595. package/dist/shared/api-client-proxy.d.ts +0 -26
  596. package/dist/shared/api-client-proxy.test.js +0 -255
  597. package/dist/shared/api-client-retry.test.js +0 -307
  598. package/dist/shared/api-client-system-trimming.test.js +0 -261
  599. package/dist/shared/api-client-trimming.d.ts +0 -36
  600. package/dist/shared/api-client.test.js +0 -228
  601. package/dist/shared/compaction-thinking.test.js +0 -315
  602. package/dist/shared/compaction-trimming.test.js +0 -223
  603. package/dist/shared/sse-parser-callbacks.test.js +0 -422
  604. package/dist/shared/sse-parser-collect.test.js +0 -252
  605. package/dist/shared/sse-parser-e2e.test.js +0 -558
  606. package/dist/shared/sse-parser-parse.test.js +0 -253
  607. package/dist/shared/tool-dispatch-advanced-batch-build.test.js +0 -405
  608. package/dist/shared/tool-dispatch-advanced.test.js +0 -320
  609. package/dist/shared/tool-dispatch-basic.test.js +0 -278
  610. package/dist/shared/tool-dispatch-content.d.ts +0 -14
  611. package/dist/shared/tool-dispatch-parallel.test.js +0 -378
  612. package/dist/webchat/__tests__/widget-messaging.test.js +0 -323
  613. package/dist/webchat/__tests__/widget.test.js +0 -273
@@ -1 +1 @@
1
- {"version":3,"file":"google-ads.js","names":["createLogger","log","GOOGLE_ADS_API","GOOGLE_ADS_BASE","GOOGLE_TOKEN_URL","DAILY_MUTATION_LIMIT","getIntegration","sb","storeId","data","config","error","rpcErr","rpc","p_store_id","getIntegrationDirect","Error","accessToken","access_token","refreshToken","refresh_token","clientId","client_id","clientSecret","client_secret","customerId","customer_id","developerToken","developer_token","status","refreshed","refreshAccessToken","loginCustomerId","login_customer_id","tokenExpiresAt","finalToken","token_expires_at","expiresAt","Date","bufferMs","getTime","now","from","select","eq","limit","single","client_secret_encrypted","developer_token_encrypted","access_token_encrypted","refresh_token_encrypted","info","res","fetch","method","headers","body","URLSearchParams","grant_type","ok","errText","text","err","update","slice","updated_at","toISOString","tokenData","json","newToken","expiresIn","expires_in","checkAndIncrementMutationQuota","operationCount","operation","today","usage","maybeSingle","currentCount","mutation_count","upsert","store_id","usage_date","last_operation","onConflict","authHeaders","int","h","parseGoogleError","parsed","JSON","parse","details","length","detail","errors","map","e","errorCode","stringify","message","join","gaqlSearch","query","cid","errBody","results","mutate","resourcePath","operations","startMs","durationMs","errMsg","ops","batchMutate","mutateOperations","downloadAndEncodeImage","url","maxBytes","buf","Buffer","arrayBuffer","warn","split","pop","size","toString","getResource","resourceName","isLocalId","id","test","toMicros","dollars","Math","round","fromMicros","micros","publishCampaignToGoogle","campaignId","campaign","campaign_type","pmaxResult","publishPMaxCampaign","googleCampaignId","google_campaign_id","budgetOps","create","name","amountMicros","daily_budget","deliveryMethod","budgetResult","budgetResourceName","campaignOp","advertisingChannelType","campaignBudget","containsEuPoliticalAdvertising","bidding","bidding_strategy","targetSpend","maximizeConversions","maximizeConversionValue","targetCpa","targetCpaMicros","bidding_target","targetRoas","manualCpc","start_date","startDate","replace","end_date","endDate","result","google_customer_id","google_status","publishAdGroupToGoogle","adGroupId","adGroup","google_ad_group_id","googleAdGroupId","campaignResource","adGroupOp","type","ad_group_type","cpc_bid","cpcBidMicros","publishAdToGoogle","adId","ad","google_ad_id","googleAdId","adGroupResource","ad_group_id","adOp","buildAdPayload","adType","ad_type","headlines","i","pinnedField","undefined","descriptions","responsiveSearchAd","finalUrls","final_urls","path1","path2","responsiveDisplayAd","longHeadline","businessName","creative","business_name","assetGroupId","imageAssets","adGroups","longHeadlines","long_headlines","logoUrls","logo_urls","marketingImages","marketing_images","squareImages","square_marketing_images","nextTempId","getTempId","toTransformUrl","w","includes","logos","landscape","square","logoB64","landscapeB64","b64","push","squareB64","agAssetLinks","budgetTempId","campaignTempId","assetGroupTempId","campaignBudgetOperation","resource_name","amount_micros","delivery_method","explicitly_shared","campaignCreate","advertising_channel_type","campaign_budget","contains_eu_political_advertising","maximize_conversions","maximize_conversion_value","target_cpa","target_cpa_micros","target_roas","campaignOperation","bnTempId","assetOperation","text_asset","campaignAssetOperation","asset","field_type","logoTempId","image_asset","tempId","fieldType","d","lh","assetGroupOperation","link","assetGroupAssetOperation","asset_group","imageAssetsCreated","images","campaignName","responses","mutateOperationResponses","mutate_operation_responses","campaignResourceName","assetGroupResourceName","r","key","cr","rn","agr","ag","publishKeywordsToGoogle","keywords","is","published","kw","keyword","matchType","match_type","criterionId","google_criterion_id","publishConversionAction","conversionActionId","ca","google_conversion_id","CATEGORY_MAP","PURCHASE","LEAD","SIGNUP","ADD_TO_CART","PAGE_VIEW","OTHER","category","countingType","counting_type","attributionModelSettings","attributionModel","attribution_model","default_value","defaultValue","alwaysUseDefaultValue","always_use_default_value","googleId","tagSnippet","rows","snippets","conversionAction","tagSnippets","eventSnippet","google_tag_snippet","syncCampaignMetrics","dateRange","VALID_DATE_RANGES","range","synced","row","c","m","metrics","b","String","Number","ignoreDuplicates","handleGoogleAds","args","success","action","campaign_id","insert","order","ascending","updates","googleUpdates","budgetQuery","budgetRows","budgetResource","updateMask","warning","remove","delete","deleted","targeting","ad_id","keyword_id","keywordsPublished","kResult","newStatus","date_range","totalResults","audience_type","description","language","geoTargetConstants","geo_targets","keywordPlanNetwork","keywordSeed","urlSeed","campaignRow","campErr","adGroupRow","ad_group_name","agErr","adRow","adErr","keywordCount","kwRows","kwErr","auto_publish","pubErr","publishError"],"sources":["../../../src/server/handlers/google-ads.ts"],"sourcesContent":["/**\n * Google Ads Handler — campaign/ad group/ad/keyword CRUD + publish to Google Ads API v23.\n *\n * Mirrors the Meta Ads handler pattern:\n * - Draft objects stored in Supabase with local UUIDs\n * - Publish pushes drafts to Google Ads API\n * - Sync pulls metrics from Google Ads into local DB\n * - GAQL queries for custom reporting\n *\n * Actions:\n * create_campaign, list_campaigns, get_campaign, update_campaign, delete_campaign,\n * create_ad_group, list_ad_groups, get_ad_group, update_ad_group,\n * create_ad, list_ads, get_ad, update_ad,\n * create_keyword, list_keywords, update_keyword, delete_keyword,\n * publish, sync, search (GAQL), list_accessible_customers,\n * keyword_ideas, create_conversion_action, list_conversion_actions,\n * create_audience, list_audiences, pause, enable\n */\n\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport { createLogger } from \"../lib/logger.js\";\n\nconst log = createLogger(\"google-ads\");\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst GOOGLE_ADS_API = \"v23\";\nconst GOOGLE_ADS_BASE = `https://googleads.googleapis.com/${GOOGLE_ADS_API}`;\nconst GOOGLE_TOKEN_URL = \"https://oauth2.googleapis.com/token\";\nconst DAILY_MUTATION_LIMIT = 10_000; // Google Basic Access limit\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface GoogleIntegration {\n accessToken: string;\n refreshToken: string;\n clientId: string;\n clientSecret: string;\n customerId: string;\n loginCustomerId: string | null;\n developerToken: string;\n tokenExpiresAt: string | null;\n}\n\n// ============================================================================\n// CREDENTIALS\n// ============================================================================\n\nasync function getIntegration(sb: SupabaseClient, storeId: string): Promise<GoogleIntegration> {\n // Use RPC to read platform secrets + per-store data in one call\n const { data: config, error: rpcErr } = await sb.rpc(\"get_google_config\", { p_store_id: storeId });\n\n // Fallback to direct table read if RPC not yet deployed\n const data = rpcErr ? await getIntegrationDirect(sb, storeId) : config;\n if (!data || data.error) {\n throw new Error(data?.error || \"Google Ads not connected. Go to Settings → Google Ads to link your account.\");\n }\n\n const accessToken = data.access_token;\n const refreshToken = data.refresh_token;\n const clientId = data.client_id;\n const clientSecret = data.client_secret;\n const customerId = data.customer_id;\n const developerToken = data.developer_token;\n const status = data.status;\n\n if (!accessToken || !customerId) {\n throw new Error(\"Google Ads not connected. Go to Settings → Google Ads to link your account.\");\n }\n\n if (status === \"token_expired\") {\n // Attempt one auto-refresh before giving up\n if (refreshToken && clientId && clientSecret) {\n const refreshed = await refreshAccessToken(sb, storeId, refreshToken, clientId, clientSecret);\n return { accessToken: refreshed, refreshToken, clientId, clientSecret, customerId, loginCustomerId: data.login_customer_id || null, developerToken, tokenExpiresAt: null };\n }\n throw new Error(\"Google Ads token expired. Reconnect in Settings → Google Ads.\");\n }\n\n if (status !== \"connected\") {\n throw new Error(`Google Ads integration status is '${status}'. Reconnect in Settings → Google Ads.`);\n }\n\n // Check token expiry and auto-refresh if needed\n let finalToken = accessToken;\n if (data.token_expires_at) {\n const expiresAt = new Date(data.token_expires_at);\n const bufferMs = 5 * 60 * 1000; // refresh 5 min before expiry\n if (expiresAt.getTime() - Date.now() < bufferMs && refreshToken && clientId && clientSecret) {\n finalToken = await refreshAccessToken(sb, storeId, refreshToken, clientId, clientSecret);\n }\n }\n\n return {\n accessToken: finalToken,\n refreshToken,\n clientId,\n clientSecret,\n customerId,\n loginCustomerId: data.login_customer_id || null,\n developerToken,\n tokenExpiresAt: data.token_expires_at || null,\n };\n}\n\n/** Fallback: direct table read (used if get_google_config RPC not deployed) */\nasync function getIntegrationDirect(sb: SupabaseClient, storeId: string): Promise<Record<string, unknown> | null> {\n const { data, error } = await sb\n .from(\"google_integrations\")\n .select(\"client_id, client_secret_encrypted, developer_token_encrypted, customer_id, login_customer_id, access_token_encrypted, refresh_token_encrypted, token_expires_at, status, measurement_id, ga4_api_secret_encrypted\")\n .eq(\"store_id\", storeId)\n .limit(1)\n .single();\n if (error || !data) return null;\n return {\n client_id: data.client_id,\n client_secret: data.client_secret_encrypted,\n developer_token: data.developer_token_encrypted,\n customer_id: data.customer_id,\n login_customer_id: data.login_customer_id,\n access_token: data.access_token_encrypted,\n refresh_token: data.refresh_token_encrypted,\n token_expires_at: data.token_expires_at,\n status: data.status,\n };\n}\n\nasync function refreshAccessToken(\n sb: SupabaseClient,\n storeId: string,\n refreshToken: string,\n clientId: string,\n clientSecret: string,\n): Promise<string> {\n log.info({ storeId }, \"refreshing Google Ads access token\");\n\n const res = await fetch(GOOGLE_TOKEN_URL, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n client_id: clientId,\n client_secret: clientSecret,\n refresh_token: refreshToken,\n grant_type: \"refresh_token\",\n }),\n });\n\n if (!res.ok) {\n const errText = await res.text();\n log.error({ storeId, status: res.status, err: errText }, \"token refresh failed\");\n\n // Mark integration as token_expired so UI can prompt reconnect\n await sb.from(\"google_integrations\").update({\n status: \"token_expired\",\n error: `Token refresh failed (${res.status}): ${errText.slice(0, 200)}`,\n updated_at: new Date().toISOString(),\n }).eq(\"store_id\", storeId);\n\n throw new Error(`Token refresh failed (${res.status}). Reconnect in Settings → Google Ads.`);\n }\n\n const tokenData = (await res.json()) as Record<string, unknown>;\n const newToken = tokenData.access_token as string;\n const expiresIn = (tokenData.expires_in as number) ?? 3600;\n const expiresAt = new Date(Date.now() + expiresIn * 1000).toISOString();\n\n // Persist the new token and ensure status is connected\n await sb.from(\"google_integrations\").update({\n access_token_encrypted: newToken,\n token_expires_at: expiresAt,\n status: \"connected\",\n error: null,\n updated_at: new Date().toISOString(),\n }).eq(\"store_id\", storeId);\n\n log.info({ storeId, expiresAt }, \"Google Ads token refreshed\");\n return newToken;\n}\n\n// ============================================================================\n// RATE LIMITING — 10,000 mutations/day (Google Basic Access)\n// ============================================================================\n\nasync function checkAndIncrementMutationQuota(\n sb: SupabaseClient,\n storeId: string,\n operationCount: number,\n operation: string,\n): Promise<void> {\n const today = new Date().toISOString().slice(0, 10);\n\n // Upsert today's counter\n const { data: usage } = await sb\n .from(\"google_ads_daily_usage\")\n .select(\"mutation_count\")\n .eq(\"store_id\", storeId)\n .eq(\"usage_date\", today)\n .maybeSingle();\n\n const currentCount = usage?.mutation_count ?? 0;\n if (currentCount + operationCount > DAILY_MUTATION_LIMIT) {\n throw new Error(`Google Ads daily mutation limit reached (${currentCount}/${DAILY_MUTATION_LIMIT}). Resets at midnight UTC.`);\n }\n\n await sb.from(\"google_ads_daily_usage\").upsert({\n store_id: storeId,\n usage_date: today,\n mutation_count: currentCount + operationCount,\n last_operation: operation,\n updated_at: new Date().toISOString(),\n }, { onConflict: \"store_id,usage_date\" });\n}\n\n// ============================================================================\n// GOOGLE ADS API HELPERS\n// ============================================================================\n\nfunction authHeaders(int: GoogleIntegration): Record<string, string> {\n const h: Record<string, string> = {\n \"Authorization\": `Bearer ${int.accessToken}`,\n \"developer-token\": int.developerToken,\n \"Content-Type\": \"application/json\",\n };\n if (int.loginCustomerId) {\n h[\"login-customer-id\"] = int.loginCustomerId;\n }\n return h;\n}\n\nfunction parseGoogleError(body: string, status: number): string {\n try {\n const parsed = JSON.parse(body);\n const err = parsed.error;\n if (err?.details?.length) {\n const detail = err.details[0];\n if (detail.errors?.length) {\n return detail.errors.map((e: Record<string, unknown>) =>\n `${e.errorCode ? JSON.stringify(e.errorCode) : \"\"}: ${e.message}`\n ).join(\"; \");\n }\n }\n return err?.message || body.slice(0, 500);\n } catch {\n return body.slice(0, 500);\n }\n}\n\n/** Execute a GAQL search query. */\nasync function gaqlSearch(\n int: GoogleIntegration,\n query: string,\n customerId?: string,\n): Promise<Record<string, unknown>[]> {\n const cid = customerId || int.customerId;\n const res = await fetch(`${GOOGLE_ADS_BASE}/customers/${cid}/googleAds:search`, {\n method: \"POST\",\n headers: authHeaders(int),\n body: JSON.stringify({ query }),\n });\n\n if (!res.ok) {\n const errBody = await res.text();\n throw new Error(`GAQL query failed (${res.status}): ${parseGoogleError(errBody, res.status)}`);\n }\n\n const json = (await res.json()) as Record<string, unknown>;\n return (json.results as Record<string, unknown>[]) || [];\n}\n\n/** Execute a Google Ads API mutate operation with rate limiting and telemetry. */\nasync function mutate(\n int: GoogleIntegration,\n resourcePath: string,\n operations: Record<string, unknown>[],\n sb?: SupabaseClient,\n storeId?: string,\n): Promise<Record<string, unknown>> {\n // Rate limit check (if sb/storeId available)\n if (sb && storeId) {\n await checkAndIncrementMutationQuota(sb, storeId, operations.length, `mutate:${resourcePath}`);\n }\n\n const cid = int.customerId;\n const startMs = Date.now();\n const res = await fetch(`${GOOGLE_ADS_BASE}/customers/${cid}/${resourcePath}:mutate`, {\n method: \"POST\",\n headers: authHeaders(int),\n body: JSON.stringify({ operations }),\n });\n\n const durationMs = Date.now() - startMs;\n\n if (!res.ok) {\n const errBody = await res.text();\n const errMsg = parseGoogleError(errBody, res.status);\n log.error({ resourcePath, status: res.status, durationMs, storeId, err: errMsg }, \"Google Ads mutate failed\");\n throw new Error(`Mutate ${resourcePath} failed (${res.status}): ${errMsg}`);\n }\n\n log.info({ resourcePath, ops: operations.length, durationMs, storeId }, \"Google Ads mutate succeeded\");\n return (await res.json()) as Record<string, unknown>;\n}\n\n/** Unified batch mutate — creates multiple resource types atomically with temporary IDs. */\nasync function batchMutate(\n int: GoogleIntegration,\n mutateOperations: Record<string, unknown>[],\n sb?: SupabaseClient,\n storeId?: string,\n): Promise<Record<string, unknown>> {\n if (sb && storeId) {\n await checkAndIncrementMutationQuota(sb, storeId, mutateOperations.length, \"batchMutate\");\n }\n\n const cid = int.customerId;\n const startMs = Date.now();\n const res = await fetch(`${GOOGLE_ADS_BASE}/customers/${cid}/googleAds:mutate`, {\n method: \"POST\",\n headers: authHeaders(int),\n body: JSON.stringify({ mutateOperations }),\n });\n\n const durationMs = Date.now() - startMs;\n\n if (!res.ok) {\n const errBody = await res.text();\n const errMsg = parseGoogleError(errBody, res.status);\n log.error({ status: res.status, durationMs, storeId, err: errMsg }, \"Google Ads batch mutate failed\");\n throw new Error(`Batch mutate failed (${res.status}): ${errMsg}`);\n }\n\n log.info({ ops: mutateOperations.length, durationMs, storeId }, \"Google Ads batch mutate succeeded\");\n return (await res.json()) as Record<string, unknown>;\n}\n\n/** Download image from URL and return base64 data. Returns null if download fails or exceeds maxBytes. */\nasync function downloadAndEncodeImage(url: string, maxBytes = 5_000_000): Promise<string | null> {\n try {\n const res = await fetch(url);\n if (!res.ok) return null;\n const buf = Buffer.from(await res.arrayBuffer());\n if (buf.length > maxBytes) {\n log.warn({ url: url.split(\"/\").pop(), size: buf.length }, \"Image exceeds size limit, skipping\");\n return null;\n }\n return buf.toString(\"base64\");\n } catch (err) {\n log.warn({ url: url.split(\"/\").pop(), err }, \"Failed to download image\");\n return null;\n }\n}\n\n/** Get a resource by resource name. */\nasync function getResource(int: GoogleIntegration, resourceName: string): Promise<Record<string, unknown>> {\n const res = await fetch(`${GOOGLE_ADS_BASE}/${resourceName}`, {\n method: \"GET\",\n headers: authHeaders(int),\n });\n\n if (!res.ok) {\n const errBody = await res.text();\n throw new Error(`GET ${resourceName} failed (${res.status}): ${parseGoogleError(errBody, res.status)}`);\n }\n\n return (await res.json()) as Record<string, unknown>;\n}\n\n// ============================================================================\n// ID HELPERS\n// ============================================================================\n\n/** Local draft IDs contain non-numeric chars. Google IDs are purely numeric. */\nfunction isLocalId(id: string | null | undefined): boolean {\n if (!id) return true;\n return /[^0-9]/.test(id);\n}\n\n/** Convert budget in dollars to micros (Google uses micros). */\nfunction toMicros(dollars: number): number {\n return Math.round(dollars * 1_000_000);\n}\n\n/** Convert micros to dollars. */\nfunction fromMicros(micros: number): number {\n return micros / 1_000_000;\n}\n\n// ============================================================================\n// PUBLISH HELPERS\n// ============================================================================\n\nasync function publishCampaignToGoogle(\n sb: SupabaseClient,\n int: GoogleIntegration,\n storeId: string,\n campaignId: string,\n): Promise<{ googleCampaignId: string; resourceName: string }> {\n // Fetch the draft campaign\n const { data: campaign, error } = await sb\n .from(\"google_campaigns\")\n .select(\"*\")\n .eq(\"id\", campaignId)\n .eq(\"store_id\", storeId)\n .single();\n\n if (error || !campaign) throw new Error(`Campaign ${campaignId} not found`);\n\n // Performance Max uses a dedicated publish path (asset groups, not ad groups)\n if (campaign.campaign_type === \"PERFORMANCE_MAX\") {\n const pmaxResult = await publishPMaxCampaign(sb, int, storeId, campaignId);\n return { googleCampaignId: pmaxResult.googleCampaignId, resourceName: pmaxResult.resourceName };\n }\n\n // Already published?\n if (campaign.google_campaign_id && !isLocalId(campaign.google_campaign_id)) {\n return { googleCampaignId: campaign.google_campaign_id, resourceName: `customers/${int.customerId}/campaigns/${campaign.google_campaign_id}` };\n }\n\n // Create budget first\n const budgetOps = [{\n create: {\n name: `${campaign.name} Budget`,\n amountMicros: toMicros(campaign.daily_budget || 10).toString(),\n deliveryMethod: \"STANDARD\",\n },\n }];\n const budgetResult = await mutate(int, \"campaignBudgets\", budgetOps, sb, storeId);\n const budgetResourceName = (budgetResult as Record<string, unknown>).results\n ? ((budgetResult as Record<string, unknown>).results as Array<Record<string, unknown>>)[0]?.resourceName as string\n : null;\n\n if (!budgetResourceName) throw new Error(\"Failed to create campaign budget\");\n\n // Build campaign operation\n const campaignOp: Record<string, unknown> = {\n create: {\n name: campaign.name,\n advertisingChannelType: campaign.campaign_type || \"SEARCH\",\n status: \"PAUSED\",\n campaignBudget: budgetResourceName,\n },\n };\n\n // EU political advertising compliance (required in v23+)\n (campaignOp.create as Record<string, unknown>).containsEuPoliticalAdvertising = \"DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING\";\n\n // Bidding strategy (v23: maximizeClicks → targetSpend)\n const bidding = campaign.bidding_strategy || \"MAXIMIZE_CLICKS\";\n switch (bidding) {\n case \"MAXIMIZE_CLICKS\":\n (campaignOp.create as Record<string, unknown>).targetSpend = {};\n break;\n case \"MAXIMIZE_CONVERSIONS\":\n (campaignOp.create as Record<string, unknown>).maximizeConversions = {};\n break;\n case \"MAXIMIZE_CONVERSION_VALUE\":\n (campaignOp.create as Record<string, unknown>).maximizeConversionValue = {};\n break;\n case \"TARGET_CPA\":\n (campaignOp.create as Record<string, unknown>).targetCpa = {\n targetCpaMicros: toMicros(campaign.bidding_target || 10).toString(),\n };\n break;\n case \"TARGET_ROAS\":\n (campaignOp.create as Record<string, unknown>).targetRoas = {\n targetRoas: campaign.bidding_target || 1.0,\n };\n break;\n case \"MANUAL_CPC\":\n (campaignOp.create as Record<string, unknown>).manualCpc = {};\n break;\n default:\n (campaignOp.create as Record<string, unknown>).targetSpend = {};\n }\n\n // Start/end dates\n if (campaign.start_date) {\n (campaignOp.create as Record<string, unknown>).startDate = campaign.start_date.slice(0, 10).replace(/-/g, \"-\");\n }\n if (campaign.end_date) {\n (campaignOp.create as Record<string, unknown>).endDate = campaign.end_date.slice(0, 10).replace(/-/g, \"-\");\n }\n\n const result = await mutate(int, \"campaigns\", [campaignOp], sb, storeId);\n const results = (result as Record<string, unknown>).results as Array<Record<string, unknown>>;\n const resourceName = results?.[0]?.resourceName as string;\n\n if (!resourceName) throw new Error(\"Campaign creation returned no resource name\");\n\n const googleCampaignId = resourceName.split(\"/\").pop()!;\n\n // Update local record\n await sb.from(\"google_campaigns\").update({\n google_campaign_id: googleCampaignId,\n google_customer_id: int.customerId,\n google_status: \"PAUSED\",\n status: \"PUBLISHED\",\n updated_at: new Date().toISOString(),\n }).eq(\"id\", campaignId);\n\n return { googleCampaignId, resourceName };\n}\n\nasync function publishAdGroupToGoogle(\n sb: SupabaseClient,\n int: GoogleIntegration,\n storeId: string,\n adGroupId: string,\n): Promise<{ googleAdGroupId: string; resourceName: string }> {\n const { data: adGroup, error } = await sb\n .from(\"google_ad_groups\")\n .select(\"*\")\n .eq(\"id\", adGroupId)\n .eq(\"store_id\", storeId)\n .single();\n\n if (error || !adGroup) throw new Error(`Ad group ${adGroupId} not found`);\n\n if (adGroup.google_ad_group_id && !isLocalId(adGroup.google_ad_group_id)) {\n return { googleAdGroupId: adGroup.google_ad_group_id, resourceName: `customers/${int.customerId}/adGroups/${adGroup.google_ad_group_id}` };\n }\n\n // Auto-publish parent campaign if needed\n const { googleCampaignId, resourceName: campaignResource } = await publishCampaignToGoogle(sb, int, storeId, adGroup.google_campaign_id);\n\n const adGroupOp = {\n create: {\n name: adGroup.name,\n campaign: campaignResource,\n type: adGroup.ad_group_type || \"SEARCH_STANDARD\",\n status: \"ENABLED\",\n ...(adGroup.cpc_bid ? { cpcBidMicros: toMicros(adGroup.cpc_bid).toString() } : {}),\n },\n };\n\n const result = await mutate(int, \"adGroups\", [adGroupOp], sb, storeId);\n const results = (result as Record<string, unknown>).results as Array<Record<string, unknown>>;\n const resourceName = results?.[0]?.resourceName as string;\n\n if (!resourceName) throw new Error(\"Ad group creation returned no resource name\");\n\n const googleAdGroupId = resourceName.split(\"/\").pop()!;\n\n await sb.from(\"google_ad_groups\").update({\n google_ad_group_id: googleAdGroupId,\n google_status: \"ENABLED\",\n status: \"PUBLISHED\",\n updated_at: new Date().toISOString(),\n }).eq(\"id\", adGroupId);\n\n return { googleAdGroupId, resourceName };\n}\n\nasync function publishAdToGoogle(\n sb: SupabaseClient,\n int: GoogleIntegration,\n storeId: string,\n adId: string,\n): Promise<{ googleAdId: string }> {\n const { data: ad, error } = await sb\n .from(\"google_ads\")\n .select(\"*\")\n .eq(\"id\", adId)\n .eq(\"store_id\", storeId)\n .single();\n\n if (error || !ad) throw new Error(`Ad ${adId} not found`);\n\n if (ad.google_ad_id && !isLocalId(ad.google_ad_id)) {\n return { googleAdId: ad.google_ad_id };\n }\n\n // Auto-publish parent ad group\n const { resourceName: adGroupResource } = await publishAdGroupToGoogle(sb, int, storeId, ad.ad_group_id);\n\n // Build ad group ad operation based on ad type\n const adOp: Record<string, unknown> = {\n create: {\n adGroup: adGroupResource,\n status: \"PAUSED\",\n ad: buildAdPayload(ad),\n },\n };\n\n const result = await mutate(int, \"adGroupAds\", [adOp], sb, storeId);\n const results = (result as Record<string, unknown>).results as Array<Record<string, unknown>>;\n const resourceName = results?.[0]?.resourceName as string;\n\n if (!resourceName) throw new Error(\"Ad creation returned no resource name\");\n\n // Resource name format: customers/{cid}/adGroupAds/{agid}~{adId}\n const googleAdId = resourceName.split(\"~\").pop() || resourceName.split(\"/\").pop()!;\n\n await sb.from(\"google_ads\").update({\n google_ad_id: googleAdId,\n google_status: \"PAUSED\",\n status: \"PUBLISHED\",\n updated_at: new Date().toISOString(),\n }).eq(\"id\", adId);\n\n return { googleAdId };\n}\n\nfunction buildAdPayload(ad: Record<string, unknown>): Record<string, unknown> {\n const adType = ad.ad_type as string;\n\n if (adType === \"RESPONSIVE_SEARCH_AD\") {\n const headlines = (ad.headlines as string[] || []).map((text: string, i: number) => ({\n text,\n pinnedField: i < 3 ? undefined : undefined, // no pinning by default\n }));\n const descriptions = (ad.descriptions as string[] || []).map((text: string) => ({ text }));\n\n return {\n responsiveSearchAd: {\n headlines,\n descriptions,\n },\n finalUrls: ad.final_urls || [],\n ...(ad.path1 ? { path1: ad.path1 } : {}),\n ...(ad.path2 ? { path2: ad.path2 } : {}),\n };\n }\n\n if (adType === \"RESPONSIVE_DISPLAY_AD\") {\n return {\n responsiveDisplayAd: {\n headlines: (ad.headlines as string[] || []).map((text: string) => ({ text })),\n longHeadline: { text: (ad.headlines as string[])?.[0] || \"\" },\n descriptions: (ad.descriptions as string[] || []).map((text: string) => ({ text })),\n businessName: (ad.creative as Record<string, unknown>)?.business_name || \"\",\n },\n finalUrls: ad.final_urls || [],\n };\n }\n\n // Default: responsive search ad\n return {\n responsiveSearchAd: {\n headlines: (ad.headlines as string[] || []).map((text: string) => ({ text })),\n descriptions: (ad.descriptions as string[] || []).map((text: string) => ({ text })),\n },\n finalUrls: ad.final_urls || [],\n };\n}\n\n// ============================================================================\n// PERFORMANCE MAX PUBLISH\n// ============================================================================\n\nasync function publishPMaxCampaign(\n sb: SupabaseClient,\n int: GoogleIntegration,\n storeId: string,\n campaignId: string,\n): Promise<{ googleCampaignId: string; resourceName: string; assetGroupId: string; imageAssets: number }> {\n const { data: campaign } = await sb\n .from(\"google_campaigns\")\n .select(\"*\")\n .eq(\"id\", campaignId)\n .eq(\"store_id\", storeId)\n .single();\n\n if (!campaign) throw new Error(`Campaign ${campaignId} not found`);\n\n if (campaign.google_campaign_id && !isLocalId(campaign.google_campaign_id)) {\n return {\n googleCampaignId: campaign.google_campaign_id,\n resourceName: `customers/${int.customerId}/campaigns/${campaign.google_campaign_id}`,\n assetGroupId: \"\",\n imageAssets: 0,\n };\n }\n\n // Get the ad row (holds headlines, descriptions, creative with image URLs)\n const { data: adGroups } = await sb\n .from(\"google_ad_groups\")\n .select(\"id\")\n .eq(\"google_campaign_id\", campaignId)\n .eq(\"store_id\", storeId);\n\n let ad: Record<string, unknown> | null = null;\n if (adGroups?.length) {\n const { data } = await sb\n .from(\"google_ads\")\n .select(\"*\")\n .eq(\"ad_group_id\", adGroups[0].id)\n .eq(\"store_id\", storeId)\n .limit(1);\n ad = data?.[0] || null;\n }\n\n const creative = (ad?.creative || {}) as Record<string, unknown>;\n const headlines = (ad?.headlines || []) as string[];\n const descriptions = (ad?.descriptions || []) as string[];\n const finalUrls = (ad?.final_urls || []) as string[];\n const longHeadlines = (creative.long_headlines || []) as string[];\n const businessName = ((creative.business_name || campaign.name) as string).slice(0, 25);\n const logoUrls = (creative.logo_urls || []) as string[];\n const marketingImages = (creative.marketing_images || []) as string[];\n const squareImages = (creative.square_marketing_images || []) as string[];\n\n if (!finalUrls.length) throw new Error(\"PMax requires at least one final URL\");\n if (headlines.length < 3) throw new Error(\"PMax requires at least 3 headlines\");\n if (descriptions.length < 2) throw new Error(\"PMax requires at least 2 descriptions\");\n\n const cid = int.customerId;\n let nextTempId = -1;\n const getTempId = () => nextTempId--;\n\n // ---- Download images first (they must all be in the atomic batch) ----\n // Use Supabase image transforms for correct aspect ratios when URLs are from Supabase Storage\n const toTransformUrl = (url: string, w: number, h: number): string => {\n // Convert /storage/v1/object/public/ → /storage/v1/render/image/public/ with resize params\n if (url.includes(\"supabase.co/storage/v1/object/public/\")) {\n return url.replace(\"/storage/v1/object/public/\", `/storage/v1/render/image/public/`) + `?width=${w}&height=${h}&resize=cover`;\n }\n return url; // External URLs used as-is\n };\n\n log.info({ logos: logoUrls.length, landscape: marketingImages.length, square: squareImages.length }, \"Downloading PMax image assets\");\n\n // Download logo (1:1, 1200x1200)\n let logoB64: string | null = null;\n for (const url of logoUrls.slice(0, 2)) {\n logoB64 = await downloadAndEncodeImage(toTransformUrl(url, 1200, 1200));\n if (logoB64) break;\n }\n\n // Download landscape images (1.91:1, 1200x628)\n const landscapeB64: string[] = [];\n for (const url of marketingImages.slice(0, 5)) {\n const b64 = await downloadAndEncodeImage(toTransformUrl(url, 1200, 628));\n if (b64) landscapeB64.push(b64);\n }\n\n // Download square images (1:1, 1200x1200)\n const squareB64: string[] = [];\n for (const url of squareImages.slice(0, 5)) {\n const b64 = await downloadAndEncodeImage(toTransformUrl(url, 1200, 1200));\n if (b64) squareB64.push(b64);\n }\n\n // ---- Build ONE atomic batch (unified googleAds:mutate uses snake_case) ----\n const ops: Record<string, unknown>[] = [];\n const agAssetLinks: { tempId: number; fieldType: string }[] = [];\n const budgetTempId = getTempId();\n const campaignTempId = getTempId();\n const assetGroupTempId = getTempId();\n\n // Budget (PMax requires explicitly_shared: false)\n ops.push({\n campaignBudgetOperation: {\n create: {\n resource_name: `customers/${cid}/campaignBudgets/${budgetTempId}`,\n name: `${campaign.name} Budget`,\n amount_micros: toMicros(campaign.daily_budget || 10).toString(),\n delivery_method: \"STANDARD\",\n explicitly_shared: false,\n },\n },\n });\n\n // Campaign (note: start_date/end_date not supported on create via unified endpoint)\n const campaignCreate: Record<string, unknown> = {\n resource_name: `customers/${cid}/campaigns/${campaignTempId}`,\n name: campaign.name,\n advertising_channel_type: \"PERFORMANCE_MAX\",\n status: \"PAUSED\",\n campaign_budget: `customers/${cid}/campaignBudgets/${budgetTempId}`,\n contains_eu_political_advertising: \"DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING\",\n };\n\n const bidding = campaign.bidding_strategy || \"MAXIMIZE_CONVERSIONS\";\n switch (bidding) {\n case \"MAXIMIZE_CONVERSIONS\":\n campaignCreate.maximize_conversions = {};\n break;\n case \"MAXIMIZE_CONVERSION_VALUE\":\n campaignCreate.maximize_conversion_value = {};\n break;\n case \"TARGET_CPA\":\n campaignCreate.target_cpa = { target_cpa_micros: toMicros(campaign.bidding_target || 10).toString() };\n break;\n case \"TARGET_ROAS\":\n campaignCreate.target_roas = { target_roas: campaign.bidding_target || 1.0 };\n break;\n default:\n campaignCreate.maximize_conversions = {};\n }\n\n ops.push({ campaignOperation: { create: campaignCreate } });\n\n // Business Name → CampaignAsset ONLY (Brand Guidelines requirement)\n const bnTempId = getTempId();\n ops.push({ assetOperation: { create: { resource_name: `customers/${cid}/assets/${bnTempId}`, type: \"TEXT\", text_asset: { text: businessName }, name: `Business Name: ${businessName}` } } });\n ops.push({ campaignAssetOperation: { create: { campaign: `customers/${cid}/campaigns/${campaignTempId}`, asset: `customers/${cid}/assets/${bnTempId}`, field_type: \"BUSINESS_NAME\" } } });\n\n // Logo → CampaignAsset ONLY (Brand Guidelines: logo must be campaign-level, NOT asset group)\n if (logoB64) {\n const logoTempId = getTempId();\n ops.push({ assetOperation: { create: { resource_name: `customers/${cid}/assets/${logoTempId}`, type: \"IMAGE\", image_asset: { data: logoB64 }, name: \"Logo\" } } });\n ops.push({ campaignAssetOperation: { create: { campaign: `customers/${cid}/campaigns/${campaignTempId}`, asset: `customers/${cid}/assets/${logoTempId}`, field_type: \"LOGO\" } } });\n }\n\n // Headlines → AssetGroupAsset\n for (const h of headlines.slice(0, 15)) {\n const id = getTempId();\n ops.push({ assetOperation: { create: { resource_name: `customers/${cid}/assets/${id}`, type: \"TEXT\", text_asset: { text: h }, name: `Headline: ${h.slice(0, 50)}` } } });\n agAssetLinks.push({ tempId: id, fieldType: \"HEADLINE\" });\n }\n\n // Descriptions → AssetGroupAsset\n for (const d of descriptions.slice(0, 5)) {\n const id = getTempId();\n ops.push({ assetOperation: { create: { resource_name: `customers/${cid}/assets/${id}`, type: \"TEXT\", text_asset: { text: d }, name: `Desc: ${d.slice(0, 50)}` } } });\n agAssetLinks.push({ tempId: id, fieldType: \"DESCRIPTION\" });\n }\n\n // Long headlines → AssetGroupAsset\n for (const lh of longHeadlines.slice(0, 5)) {\n const id = getTempId();\n ops.push({ assetOperation: { create: { resource_name: `customers/${cid}/assets/${id}`, type: \"TEXT\", text_asset: { text: lh }, name: `Long: ${lh.slice(0, 50)}` } } });\n agAssetLinks.push({ tempId: id, fieldType: \"LONG_HEADLINE\" });\n }\n\n // Landscape images → AssetGroupAsset\n for (const b64 of landscapeB64) {\n const id = getTempId();\n ops.push({ assetOperation: { create: { resource_name: `customers/${cid}/assets/${id}`, type: \"IMAGE\", image_asset: { data: b64 }, name: \"Landscape\" } } });\n agAssetLinks.push({ tempId: id, fieldType: \"MARKETING_IMAGE\" });\n }\n\n // Square images → AssetGroupAsset\n for (const b64 of squareB64) {\n const id = getTempId();\n ops.push({ assetOperation: { create: { resource_name: `customers/${cid}/assets/${id}`, type: \"IMAGE\", image_asset: { data: b64 }, name: \"Square\" } } });\n agAssetLinks.push({ tempId: id, fieldType: \"SQUARE_MARKETING_IMAGE\" });\n }\n\n // Asset Group\n ops.push({\n assetGroupOperation: {\n create: {\n resource_name: `customers/${cid}/assetGroups/${assetGroupTempId}`,\n campaign: `customers/${cid}/campaigns/${campaignTempId}`,\n name: `${campaign.name} — Asset Group`,\n final_urls: finalUrls,\n status: \"ENABLED\",\n },\n },\n });\n\n // Link all assets to asset group (text + images, NOT business name/logo)\n for (const link of agAssetLinks) {\n ops.push({\n assetGroupAssetOperation: {\n create: {\n asset_group: `customers/${cid}/assetGroups/${assetGroupTempId}`,\n asset: `customers/${cid}/assets/${link.tempId}`,\n field_type: link.fieldType,\n },\n },\n });\n }\n\n const imageAssetsCreated = landscapeB64.length + squareB64.length + (logoB64 ? 1 : 0);\n log.info({ ops: ops.length, images: imageAssetsCreated, campaignName: campaign.name }, \"Publishing PMax (atomic batch)\");\n\n const result = await batchMutate(int, ops, sb, storeId);\n\n // Extract real resource names from response (supports both camelCase and snake_case)\n const responses = (\n (result as Record<string, unknown>).mutateOperationResponses ||\n (result as Record<string, unknown>).mutate_operation_responses ||\n []\n ) as Array<Record<string, unknown>>;\n\n let campaignResourceName = \"\";\n let googleCampaignId = \"\";\n let assetGroupResourceName = \"\";\n\n for (const r of responses) {\n for (const key of [\"campaignResult\", \"campaign_result\"]) {\n const cr = r[key] as Record<string, string> | undefined;\n const rn = cr?.resourceName || cr?.resource_name;\n if (rn?.includes(\"/campaigns/\")) {\n campaignResourceName = rn;\n googleCampaignId = rn.split(\"/\").pop()!;\n }\n }\n for (const key of [\"assetGroupResult\", \"asset_group_result\"]) {\n const agr = r[key] as Record<string, string> | undefined;\n const rn = agr?.resourceName || agr?.resource_name;\n if (rn?.includes(\"/assetGroups/\")) {\n assetGroupResourceName = rn;\n }\n }\n }\n\n if (!googleCampaignId) throw new Error(\"PMax batch mutate returned no campaign resource name\");\n\n log.info({ googleCampaignId, imageAssetsCreated, assetGroupResourceName }, \"PMax campaign published\");\n\n // Update local records\n await sb.from(\"google_campaigns\").update({\n google_campaign_id: googleCampaignId,\n google_customer_id: int.customerId,\n google_status: \"PAUSED\",\n status: \"PUBLISHED\",\n updated_at: new Date().toISOString(),\n }).eq(\"id\", campaignId);\n\n if (adGroups?.length) {\n for (const ag of adGroups) {\n await sb.from(\"google_ad_groups\").update({\n google_status: \"PUBLISHED\",\n status: \"PUBLISHED\",\n updated_at: new Date().toISOString(),\n }).eq(\"id\", ag.id);\n }\n }\n\n return { googleCampaignId, resourceName: campaignResourceName, assetGroupId: assetGroupResourceName, imageAssets: imageAssetsCreated };\n}\n\nasync function publishKeywordsToGoogle(\n sb: SupabaseClient,\n int: GoogleIntegration,\n storeId: string,\n adGroupId: string,\n): Promise<{ published: number }> {\n const { data: keywords } = await sb\n .from(\"google_keywords\")\n .select(\"*\")\n .eq(\"ad_group_id\", adGroupId)\n .eq(\"store_id\", storeId)\n .is(\"google_criterion_id\", null);\n\n if (!keywords?.length) return { published: 0 };\n\n // Get the google ad group resource\n const { data: adGroup } = await sb\n .from(\"google_ad_groups\")\n .select(\"google_ad_group_id\")\n .eq(\"id\", adGroupId)\n .single();\n\n if (!adGroup?.google_ad_group_id || isLocalId(adGroup.google_ad_group_id)) {\n throw new Error(\"Ad group must be published before keywords\");\n }\n\n const adGroupResource = `customers/${int.customerId}/adGroups/${adGroup.google_ad_group_id}`;\n\n const operations = keywords.map((kw: Record<string, unknown>) => ({\n create: {\n adGroup: adGroupResource,\n status: \"ENABLED\",\n keyword: {\n text: kw.text,\n matchType: kw.match_type || \"BROAD\",\n },\n ...(kw.cpc_bid ? { cpcBidMicros: toMicros(kw.cpc_bid as number).toString() } : {}),\n },\n }));\n\n const result = await mutate(int, \"adGroupCriteria\", operations, sb, storeId);\n const results = (result as Record<string, unknown>).results as Array<Record<string, unknown>>;\n\n // Update local records with Google criterion IDs\n for (let i = 0; i < (results?.length || 0); i++) {\n const resourceName = results[i]?.resourceName as string;\n if (resourceName) {\n const criterionId = resourceName.split(\"~\").pop();\n await sb.from(\"google_keywords\").update({\n google_criterion_id: criterionId,\n google_status: \"ENABLED\",\n updated_at: new Date().toISOString(),\n }).eq(\"id\", keywords[i].id);\n }\n }\n\n return { published: results?.length || 0 };\n}\n\n/** Publish a local conversion action to Google Ads API. */\nasync function publishConversionAction(\n sb: SupabaseClient,\n int: GoogleIntegration,\n storeId: string,\n conversionActionId: string,\n): Promise<Record<string, unknown>> {\n const { data: ca } = await sb.from(\"google_conversion_actions\")\n .select(\"*\")\n .eq(\"id\", conversionActionId)\n .eq(\"store_id\", storeId)\n .single();\n\n if (!ca) throw new Error(\"Conversion action not found\");\n if (ca.google_conversion_id) {\n return { message: \"Already published\", google_conversion_id: ca.google_conversion_id };\n }\n\n const CATEGORY_MAP: Record<string, string> = {\n PURCHASE: \"PURCHASE\", LEAD: \"SUBMIT_LEAD_FORM\", SIGNUP: \"SIGNUP\",\n ADD_TO_CART: \"ADD_TO_CART\", PAGE_VIEW: \"PAGE_VIEW\", OTHER: \"DEFAULT\",\n };\n\n const result = await mutate(int, \"conversionActions\", [{\n create: {\n name: ca.name,\n category: CATEGORY_MAP[ca.category] || \"DEFAULT\",\n type: \"WEBPAGE\",\n status: \"ENABLED\",\n countingType: ca.counting_type || \"ONE_PER_CLICK\",\n attributionModelSettings: {\n attributionModel: ca.attribution_model || \"GOOGLE_LAST_CLICK\",\n },\n ...(ca.default_value ? {\n defaultValue: ca.default_value,\n alwaysUseDefaultValue: ca.always_use_default_value ?? false,\n } : {}),\n },\n }], sb, storeId);\n\n const results = (result as Record<string, unknown>).results as Array<Record<string, unknown>>;\n const resourceName = results?.[0]?.resourceName as string;\n const googleId = resourceName?.split(\"/\").pop();\n\n if (googleId) {\n // Fetch the tag snippet for the newly created conversion action\n let tagSnippet: string | null = null;\n try {\n const rows = await gaqlSearch(int,\n `SELECT conversion_action.tag_snippets FROM conversion_action WHERE conversion_action.resource_name = '${resourceName}'`,\n );\n const snippets = (rows[0]?.conversionAction as Record<string, unknown>)?.tagSnippets as Array<Record<string, unknown>> | undefined;\n if (snippets?.length) tagSnippet = (snippets[0].eventSnippet as string) || null;\n } catch { /* non-fatal — snippet fetch can fail */ }\n\n await sb.from(\"google_conversion_actions\").update({\n google_conversion_id: googleId,\n google_tag_snippet: tagSnippet,\n status: \"ENABLED\",\n updated_at: new Date().toISOString(),\n }).eq(\"id\", conversionActionId);\n }\n\n return { google_conversion_id: googleId, resourceName };\n}\n\n// ============================================================================\n// SYNC — pull metrics from Google Ads into local DB\n// ============================================================================\n\nasync function syncCampaignMetrics(\n sb: SupabaseClient,\n int: GoogleIntegration,\n storeId: string,\n dateRange?: string,\n): Promise<{ synced: number }> {\n const VALID_DATE_RANGES = [\"LAST_7_DAYS\", \"LAST_14_DAYS\", \"LAST_30_DAYS\", \"LAST_90_DAYS\", \"THIS_MONTH\", \"LAST_MONTH\", \"TODAY\", \"YESTERDAY\"];\n const range = VALID_DATE_RANGES.includes(dateRange || \"\") ? dateRange! : \"LAST_30_DAYS\";\n const query = `\n SELECT\n campaign.id,\n campaign.name,\n campaign.status,\n campaign.advertising_channel_type,\n campaign_budget.amount_micros,\n metrics.impressions,\n metrics.clicks,\n metrics.cost_micros,\n metrics.conversions,\n metrics.conversions_value,\n metrics.ctr,\n metrics.average_cpc\n FROM campaign\n WHERE segments.date DURING ${range}\n `;\n\n const rows = await gaqlSearch(int, query);\n\n let synced = 0;\n for (const row of rows) {\n const c = row.campaign as Record<string, unknown>;\n const m = row.metrics as Record<string, unknown>;\n const b = row.campaignBudget as Record<string, unknown>;\n\n const googleCampaignId = String(c.id);\n\n await sb.from(\"google_campaigns\").upsert({\n store_id: storeId,\n google_campaign_id: googleCampaignId,\n google_customer_id: int.customerId,\n name: c.name,\n campaign_type: c.advertisingChannelType,\n google_status: c.status,\n daily_budget: b?.amountMicros ? fromMicros(Number(b.amountMicros)) : null,\n status: \"SYNCED\",\n updated_at: new Date().toISOString(),\n }, { onConflict: \"store_id,google_campaign_id\", ignoreDuplicates: false });\n\n synced++;\n }\n\n return { synced };\n}\n\n// ============================================================================\n// MAIN HANDLER\n// ============================================================================\n\nexport async function handleGoogleAds(\n sb: SupabaseClient,\n args: Record<string, unknown>,\n storeId?: string,\n): Promise<{ success: boolean; data?: unknown; error?: string }> {\n if (!storeId) return { success: false, error: \"store_id required\" };\n const action = args.action as string;\n\n try {\n switch (action) {\n\n // ====================================================================\n // CAMPAIGNS\n // ====================================================================\n\n case \"create_campaign\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name required\" };\n\n const row: Record<string, unknown> = {\n store_id: storeId,\n name,\n campaign_type: (args.campaign_type as string) || \"SEARCH\",\n status: \"DRAFT\",\n daily_budget: args.daily_budget ? Number(args.daily_budget) : null,\n bidding_strategy: (args.bidding_strategy as string) || \"MAXIMIZE_CLICKS\",\n bidding_target: args.bidding_target ? Number(args.bidding_target) : null,\n start_date: (args.start_date as string) || null,\n end_date: (args.end_date as string) || null,\n };\n\n if (args.campaign_id) row.campaign_id = args.campaign_id; // link to local campaigns table\n\n const { data, error } = await sb.from(\"google_campaigns\").insert(row).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"list_campaigns\": {\n const query = sb.from(\"google_campaigns\").select(\"*\").eq(\"store_id\", storeId).order(\"created_at\", { ascending: false });\n if (args.status) query.eq(\"status\", args.status);\n if (args.limit) query.limit(Number(args.limit));\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"get_campaign\": {\n const id = (args.campaign_id || args.id) as string;\n if (!id) return { success: false, error: \"campaign_id required\" };\n const { data, error } = await sb.from(\"google_campaigns\").select(\"*\").eq(\"id\", id).eq(\"store_id\", storeId).single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"update_campaign\": {\n const id = (args.campaign_id || args.id) as string;\n if (!id) return { success: false, error: \"campaign_id required\" };\n\n const updates: Record<string, unknown> = { updated_at: new Date().toISOString() };\n if (args.name) updates.name = args.name;\n if (args.daily_budget) updates.daily_budget = Number(args.daily_budget);\n if (args.bidding_strategy) updates.bidding_strategy = args.bidding_strategy;\n if (args.bidding_target) updates.bidding_target = Number(args.bidding_target);\n if (args.status) updates.status = args.status;\n if (args.start_date) updates.start_date = args.start_date;\n if (args.end_date) updates.end_date = args.end_date;\n\n const { data, error } = await sb.from(\"google_campaigns\").update(updates).eq(\"id\", id).eq(\"store_id\", storeId).select().single();\n if (error) return { success: false, error: error.message };\n\n // If published campaign, also update on Google\n if (data.google_campaign_id && !isLocalId(data.google_campaign_id)) {\n try {\n const int = await getIntegration(sb, storeId);\n const googleUpdates: Record<string, unknown> = {\n resourceName: `customers/${int.customerId}/campaigns/${data.google_campaign_id}`,\n };\n if (args.name) googleUpdates.name = args.name;\n if (args.daily_budget) {\n // Update budget separately\n const budgetQuery = `SELECT campaign_budget.resource_name FROM campaign WHERE campaign.id = ${data.google_campaign_id} LIMIT 1`;\n const budgetRows = await gaqlSearch(int, budgetQuery);\n if (budgetRows.length) {\n const budgetResource = (budgetRows[0].campaignBudget as Record<string, unknown>)?.resourceName as string;\n if (budgetResource) {\n await mutate(int, \"campaignBudgets\", [{\n update: { resourceName: budgetResource, amountMicros: toMicros(Number(args.daily_budget)).toString() },\n updateMask: \"amountMicros\",\n }], sb, storeId);\n }\n }\n }\n } catch (e) {\n // Non-fatal: local update succeeded, Google update failed\n return { success: true, data: { ...data, warning: `Local updated, but Google sync failed: ${e instanceof Error ? e.message : String(e)}` } };\n }\n }\n\n return { success: true, data };\n }\n\n case \"delete_campaign\": {\n const id = (args.campaign_id || args.id) as string;\n if (!id) return { success: false, error: \"campaign_id required\" };\n\n // If published, remove from Google\n const { data: campaign } = await sb.from(\"google_campaigns\").select(\"google_campaign_id\").eq(\"id\", id).eq(\"store_id\", storeId).single();\n if (campaign?.google_campaign_id && !isLocalId(campaign.google_campaign_id)) {\n try {\n const int = await getIntegration(sb, storeId);\n await mutate(int, \"campaigns\", [{\n remove: `customers/${int.customerId}/campaigns/${campaign.google_campaign_id}`,\n }], sb, storeId);\n } catch { /* best-effort deletion from Google */ }\n }\n\n const { error } = await sb.from(\"google_campaigns\").delete().eq(\"id\", id).eq(\"store_id\", storeId);\n if (error) return { success: false, error: error.message };\n return { success: true, data: { deleted: id } };\n }\n\n // ====================================================================\n // AD GROUPS\n // ====================================================================\n\n case \"create_ad_group\": {\n const name = args.name as string;\n const campaignId = args.campaign_id as string;\n if (!name) return { success: false, error: \"name required\" };\n if (!campaignId) return { success: false, error: \"campaign_id required\" };\n\n const row: Record<string, unknown> = {\n store_id: storeId,\n google_campaign_id: campaignId,\n name,\n ad_group_type: (args.ad_group_type as string) || \"SEARCH_STANDARD\",\n status: \"DRAFT\",\n cpc_bid: args.cpc_bid ? Number(args.cpc_bid) : null,\n targeting: args.targeting || null,\n };\n\n const { data, error } = await sb.from(\"google_ad_groups\").insert(row).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"list_ad_groups\": {\n const query = sb.from(\"google_ad_groups\").select(\"*\").eq(\"store_id\", storeId).order(\"created_at\", { ascending: false });\n if (args.campaign_id) query.eq(\"google_campaign_id\", args.campaign_id);\n if (args.limit) query.limit(Number(args.limit));\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"get_ad_group\": {\n const id = (args.ad_group_id || args.id) as string;\n if (!id) return { success: false, error: \"ad_group_id required\" };\n const { data, error } = await sb.from(\"google_ad_groups\").select(\"*\").eq(\"id\", id).eq(\"store_id\", storeId).single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"update_ad_group\": {\n const id = (args.ad_group_id || args.id) as string;\n if (!id) return { success: false, error: \"ad_group_id required\" };\n\n const updates: Record<string, unknown> = { updated_at: new Date().toISOString() };\n if (args.name) updates.name = args.name;\n if (args.cpc_bid) updates.cpc_bid = Number(args.cpc_bid);\n if (args.status) updates.status = args.status;\n if (args.targeting) updates.targeting = args.targeting;\n\n const { data, error } = await sb.from(\"google_ad_groups\").update(updates).eq(\"id\", id).eq(\"store_id\", storeId).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n // ====================================================================\n // ADS\n // ====================================================================\n\n case \"create_ad\": {\n const adGroupId = args.ad_group_id as string;\n if (!adGroupId) return { success: false, error: \"ad_group_id required\" };\n\n const row: Record<string, unknown> = {\n store_id: storeId,\n ad_group_id: adGroupId,\n ad_type: (args.ad_type as string) || \"RESPONSIVE_SEARCH_AD\",\n headlines: args.headlines || [],\n descriptions: args.descriptions || [],\n final_urls: args.final_urls || [],\n path1: (args.path1 as string) || null,\n path2: (args.path2 as string) || null,\n creative: args.creative || null,\n status: \"DRAFT\",\n };\n\n const { data, error } = await sb.from(\"google_ads\").insert(row).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"list_ads\": {\n const query = sb.from(\"google_ads\").select(\"*\").eq(\"store_id\", storeId).order(\"created_at\", { ascending: false });\n if (args.ad_group_id) query.eq(\"ad_group_id\", args.ad_group_id);\n if (args.limit) query.limit(Number(args.limit));\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"get_ad\": {\n const id = (args.ad_id || args.id) as string;\n if (!id) return { success: false, error: \"ad_id required\" };\n const { data, error } = await sb.from(\"google_ads\").select(\"*\").eq(\"id\", id).eq(\"store_id\", storeId).single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"update_ad\": {\n const id = (args.ad_id || args.id) as string;\n if (!id) return { success: false, error: \"ad_id required\" };\n\n const updates: Record<string, unknown> = { updated_at: new Date().toISOString() };\n if (args.headlines) updates.headlines = args.headlines;\n if (args.descriptions) updates.descriptions = args.descriptions;\n if (args.final_urls) updates.final_urls = args.final_urls;\n if (args.path1 !== undefined) updates.path1 = args.path1;\n if (args.path2 !== undefined) updates.path2 = args.path2;\n if (args.status) updates.status = args.status;\n\n const { data, error } = await sb.from(\"google_ads\").update(updates).eq(\"id\", id).eq(\"store_id\", storeId).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n // ====================================================================\n // KEYWORDS\n // ====================================================================\n\n case \"create_keyword\": {\n const adGroupId = args.ad_group_id as string;\n const text = args.text as string;\n if (!adGroupId) return { success: false, error: \"ad_group_id required\" };\n if (!text) return { success: false, error: \"text required\" };\n\n const row: Record<string, unknown> = {\n store_id: storeId,\n ad_group_id: adGroupId,\n text,\n match_type: (args.match_type as string) || \"BROAD\",\n cpc_bid: args.cpc_bid ? Number(args.cpc_bid) : null,\n status: \"DRAFT\",\n };\n\n const { data, error } = await sb.from(\"google_keywords\").insert(row).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"list_keywords\": {\n const query = sb.from(\"google_keywords\").select(\"*\").eq(\"store_id\", storeId).order(\"created_at\", { ascending: false });\n if (args.ad_group_id) query.eq(\"ad_group_id\", args.ad_group_id);\n if (args.limit) query.limit(Number(args.limit));\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"update_keyword\": {\n const id = (args.keyword_id || args.id) as string;\n if (!id) return { success: false, error: \"keyword_id required\" };\n\n const updates: Record<string, unknown> = { updated_at: new Date().toISOString() };\n if (args.text) updates.text = args.text;\n if (args.match_type) updates.match_type = args.match_type;\n if (args.cpc_bid) updates.cpc_bid = Number(args.cpc_bid);\n if (args.status) updates.status = args.status;\n\n const { data, error } = await sb.from(\"google_keywords\").update(updates).eq(\"id\", id).eq(\"store_id\", storeId).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"delete_keyword\": {\n const id = (args.keyword_id || args.id) as string;\n if (!id) return { success: false, error: \"keyword_id required\" };\n\n const { data: kw } = await sb.from(\"google_keywords\").select(\"google_criterion_id, ad_group_id\").eq(\"id\", id).eq(\"store_id\", storeId).single();\n if (kw?.google_criterion_id) {\n try {\n const int = await getIntegration(sb, storeId);\n const { data: ag } = await sb.from(\"google_ad_groups\").select(\"google_ad_group_id\").eq(\"id\", kw.ad_group_id).eq(\"store_id\", storeId).single();\n if (ag?.google_ad_group_id) {\n await mutate(int, \"adGroupCriteria\", [{\n remove: `customers/${int.customerId}/adGroupCriteria/${ag.google_ad_group_id}~${kw.google_criterion_id}`,\n }], sb, storeId);\n }\n } catch { /* best-effort */ }\n }\n\n const { error } = await sb.from(\"google_keywords\").delete().eq(\"id\", id).eq(\"store_id\", storeId);\n if (error) return { success: false, error: error.message };\n return { success: true, data: { deleted: id } };\n }\n\n // ====================================================================\n // PUBLISH — push drafts to Google Ads\n // ====================================================================\n\n case \"publish\": {\n const int = await getIntegration(sb, storeId);\n const type = (args.type as string) || \"campaign\";\n const id = (args.id || args.campaign_id || args.ad_group_id || args.ad_id) as string;\n if (!id) return { success: false, error: \"id required\" };\n\n switch (type) {\n case \"campaign\": {\n const result = await publishCampaignToGoogle(sb, int, storeId, id);\n // Also publish keywords for all ad groups in this campaign\n const { data: adGroups } = await sb.from(\"google_ad_groups\").select(\"id\").eq(\"google_campaign_id\", id).eq(\"store_id\", storeId);\n let keywordsPublished = 0;\n for (const ag of adGroups || []) {\n try {\n const kResult = await publishKeywordsToGoogle(sb, int, storeId, ag.id);\n keywordsPublished += kResult.published;\n } catch { /* non-fatal */ }\n }\n return { success: true, data: { ...result, keywordsPublished } };\n }\n case \"ad_group\": {\n const result = await publishAdGroupToGoogle(sb, int, storeId, id);\n const kResult = await publishKeywordsToGoogle(sb, int, storeId, id);\n return { success: true, data: { ...result, keywordsPublished: kResult.published } };\n }\n case \"ad\": {\n const result = await publishAdToGoogle(sb, int, storeId, id);\n return { success: true, data: result };\n }\n case \"conversion_action\": {\n const result = await publishConversionAction(sb, int, storeId, id);\n return { success: true, data: result };\n }\n default:\n return { success: false, error: `Unknown publish type: ${type}. Use campaign, ad_group, ad, or conversion_action.` };\n }\n }\n\n // ====================================================================\n // PAUSE / ENABLE — change status on Google\n // ====================================================================\n\n case \"pause\":\n case \"enable\": {\n const int = await getIntegration(sb, storeId);\n const type = (args.type as string) || \"campaign\";\n const id = (args.id || args.campaign_id || args.ad_group_id) as string;\n if (!id) return { success: false, error: \"id required\" };\n const newStatus = action === \"pause\" ? \"PAUSED\" : \"ENABLED\";\n\n if (type === \"campaign\") {\n const { data: c } = await sb.from(\"google_campaigns\").select(\"google_campaign_id\").eq(\"id\", id).eq(\"store_id\", storeId).single();\n if (!c?.google_campaign_id || isLocalId(c.google_campaign_id)) {\n return { success: false, error: \"Campaign not published to Google yet\" };\n }\n await mutate(int, \"campaigns\", [{\n update: { resourceName: `customers/${int.customerId}/campaigns/${c.google_campaign_id}`, status: newStatus },\n updateMask: \"status\",\n }], sb, storeId);\n await sb.from(\"google_campaigns\").update({ google_status: newStatus, updated_at: new Date().toISOString() }).eq(\"id\", id).eq(\"store_id\", storeId);\n return { success: true, data: { status: newStatus } };\n }\n\n if (type === \"ad_group\") {\n const { data: ag } = await sb.from(\"google_ad_groups\").select(\"google_ad_group_id\").eq(\"id\", id).eq(\"store_id\", storeId).single();\n if (!ag?.google_ad_group_id || isLocalId(ag.google_ad_group_id)) {\n return { success: false, error: \"Ad group not published to Google yet\" };\n }\n await mutate(int, \"adGroups\", [{\n update: { resourceName: `customers/${int.customerId}/adGroups/${ag.google_ad_group_id}`, status: newStatus },\n updateMask: \"status\",\n }], sb, storeId);\n await sb.from(\"google_ad_groups\").update({ google_status: newStatus, updated_at: new Date().toISOString() }).eq(\"id\", id).eq(\"store_id\", storeId);\n return { success: true, data: { status: newStatus } };\n }\n\n return { success: false, error: `Unknown type: ${type}` };\n }\n\n // ====================================================================\n // SYNC — pull metrics from Google into local DB\n // ====================================================================\n\n case \"sync\": {\n const int = await getIntegration(sb, storeId);\n const dateRange = (args.date_range as string) || \"LAST_30_DAYS\";\n const result = await syncCampaignMetrics(sb, int, storeId, dateRange);\n return { success: true, data: result };\n }\n\n // ====================================================================\n // SEARCH — raw GAQL queries\n // ====================================================================\n\n case \"search\": {\n const query = args.query as string;\n if (!query) return { success: false, error: \"query (GAQL) required\" };\n\n const int = await getIntegration(sb, storeId);\n const customerId = (args.customer_id as string) || int.customerId;\n const results = await gaqlSearch(int, query, customerId);\n return { success: true, data: { results, totalResults: results.length } };\n }\n\n // ====================================================================\n // LIST ACCESSIBLE CUSTOMERS\n // ====================================================================\n\n case \"list_accessible_customers\": {\n const int = await getIntegration(sb, storeId);\n const res = await fetch(`${GOOGLE_ADS_BASE}/customers:listAccessibleCustomers`, {\n method: \"GET\",\n headers: authHeaders(int),\n });\n\n if (!res.ok) {\n const errBody = await res.text();\n throw new Error(`listAccessibleCustomers failed (${res.status}): ${parseGoogleError(errBody, res.status)}`);\n }\n\n const data = await res.json();\n return { success: true, data };\n }\n\n // ====================================================================\n // CONVERSION ACTIONS\n // ====================================================================\n\n case \"create_conversion_action\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name required\" };\n\n const row: Record<string, unknown> = {\n store_id: storeId,\n name,\n category: (args.category as string) || \"PURCHASE\",\n counting_type: (args.counting_type as string) || \"ONE_PER_CLICK\",\n attribution_model: (args.attribution_model as string) || \"GOOGLE_LAST_CLICK\",\n default_value: args.default_value ? Number(args.default_value) : null,\n status: \"DRAFT\",\n };\n\n const { data, error } = await sb.from(\"google_conversion_actions\").insert(row).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"list_conversion_actions\": {\n const { data, error } = await sb.from(\"google_conversion_actions\").select(\"*\").eq(\"store_id\", storeId).order(\"created_at\", { ascending: false });\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n // ====================================================================\n // AUDIENCES\n // ====================================================================\n\n case \"create_audience\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name required\" };\n\n const row: Record<string, unknown> = {\n store_id: storeId,\n name,\n audience_type: (args.audience_type as string) || \"CUSTOM\",\n description: (args.description as string) || null,\n status: \"DRAFT\",\n };\n\n const { data, error } = await sb.from(\"google_audiences\").insert(row).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"list_audiences\": {\n const { data, error } = await sb.from(\"google_audiences\").select(\"*\").eq(\"store_id\", storeId).order(\"created_at\", { ascending: false });\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n // ====================================================================\n // KEYWORD IDEAS (Keyword Planner)\n // ====================================================================\n\n case \"keyword_ideas\": {\n const int = await getIntegration(sb, storeId);\n const keywords = args.keywords as string[];\n const url = args.url as string;\n\n if (!keywords?.length && !url) {\n return { success: false, error: \"Provide keywords (array) or url for keyword ideas\" };\n }\n\n const body: Record<string, unknown> = {\n language: (args.language as string) || \"languageConstants/1000\", // English\n geoTargetConstants: (args.geo_targets as string[]) || [\"geoTargetConstants/2840\"], // US\n keywordPlanNetwork: \"GOOGLE_SEARCH\",\n };\n\n if (keywords?.length) {\n body.keywordSeed = { keywords };\n }\n if (url) {\n body.urlSeed = { url };\n }\n\n const res = await fetch(\n `${GOOGLE_ADS_BASE}/customers/${int.customerId}:generateKeywordIdeas`,\n {\n method: \"POST\",\n headers: authHeaders(int),\n body: JSON.stringify(body),\n },\n );\n\n if (!res.ok) {\n const errBody = await res.text();\n throw new Error(`Keyword ideas failed (${res.status}): ${parseGoogleError(errBody, res.status)}`);\n }\n\n const data = await res.json();\n return { success: true, data };\n }\n\n // ====================================================================\n // CREATE FULL — campaign + ad group + ad + keywords in one call\n // ====================================================================\n\n case \"create_full\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name required\" };\n\n // 1. Create campaign\n const campaignRow: Record<string, unknown> = {\n store_id: storeId,\n name,\n campaign_type: (args.campaign_type as string) || \"SEARCH\",\n status: \"DRAFT\",\n daily_budget: args.daily_budget ? Number(args.daily_budget) : 10,\n bidding_strategy: (args.bidding_strategy as string) || \"MAXIMIZE_CLICKS\",\n bidding_target: args.bidding_target ? Number(args.bidding_target) : null,\n start_date: (args.start_date as string) || null,\n end_date: (args.end_date as string) || null,\n };\n const { data: campaign, error: campErr } = await sb.from(\"google_campaigns\").insert(campaignRow).select().single();\n if (campErr) return { success: false, error: campErr.message };\n\n // 2. Create ad group\n const adGroupRow: Record<string, unknown> = {\n store_id: storeId,\n google_campaign_id: campaign.id,\n name: (args.ad_group_name as string) || `${name} — Ad Group`,\n ad_group_type: (args.ad_group_type as string) || \"SEARCH_STANDARD\",\n status: \"DRAFT\",\n cpc_bid: args.cpc_bid ? Number(args.cpc_bid) : null,\n };\n const { data: adGroup, error: agErr } = await sb.from(\"google_ad_groups\").insert(adGroupRow).select().single();\n if (agErr) return { success: false, error: agErr.message };\n\n // 3. Create ad\n const adRow: Record<string, unknown> = {\n store_id: storeId,\n ad_group_id: adGroup.id,\n ad_type: (args.ad_type as string) || \"RESPONSIVE_SEARCH_AD\",\n headlines: args.headlines || [],\n descriptions: args.descriptions || [],\n final_urls: args.final_urls || [],\n path1: (args.path1 as string) || null,\n path2: (args.path2 as string) || null,\n creative: args.creative || null,\n status: \"DRAFT\",\n };\n const { data: ad, error: adErr } = await sb.from(\"google_ads\").insert(adRow).select().single();\n if (adErr) return { success: false, error: adErr.message };\n\n // 4. Create keywords (if provided)\n const keywords = args.keywords as Array<{ text: string; match_type?: string }>;\n let keywordCount = 0;\n if (keywords?.length) {\n const kwRows = keywords.map((kw) => ({\n store_id: storeId,\n ad_group_id: adGroup.id,\n text: kw.text,\n match_type: kw.match_type || \"BROAD\",\n status: \"DRAFT\",\n }));\n const { error: kwErr } = await sb.from(\"google_keywords\").insert(kwRows);\n if (kwErr) throw new Error(`Failed to insert keywords: ${kwErr.message}`);\n keywordCount = kwRows.length;\n }\n\n // 5. Auto-publish if requested\n let published = false;\n if (args.auto_publish) {\n try {\n const int = await getIntegration(sb, storeId);\n // PMax: publishCampaignToGoogle handles everything (asset group, assets, links)\n await publishCampaignToGoogle(sb, int, storeId, campaign.id);\n if (campaignRow.campaign_type !== \"PERFORMANCE_MAX\") {\n await publishAdGroupToGoogle(sb, int, storeId, adGroup.id);\n await publishAdToGoogle(sb, int, storeId, ad.id);\n await publishKeywordsToGoogle(sb, int, storeId, adGroup.id);\n }\n published = true;\n } catch (pubErr) {\n return {\n success: true,\n data: {\n campaign, adGroup, ad, keywordCount,\n published: false,\n publishError: pubErr instanceof Error ? pubErr.message : String(pubErr),\n },\n };\n }\n }\n\n return {\n success: true,\n data: { campaign, adGroup, ad, keywordCount, published },\n };\n }\n\n // ====================================================================\n // DEFAULT\n // ====================================================================\n\n default:\n return { success: false, error: `Unknown action: ${action}. Valid actions: create_campaign, list_campaigns, get_campaign, update_campaign, delete_campaign, create_ad_group, list_ad_groups, get_ad_group, update_ad_group, create_ad, list_ads, get_ad, update_ad, create_keyword, list_keywords, update_keyword, delete_keyword, publish, pause, enable, sync, search, list_accessible_customers, keyword_ideas, create_conversion_action, list_conversion_actions, create_audience, list_audiences, create_full` };\n }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) };\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"google-ads.js","names":["createHash","createLogger","log","GOOGLE_ADS_API","GOOGLE_ADS_BASE","GOOGLE_TOKEN_URL","DAILY_MUTATION_LIMIT","getIntegration","sb","storeId","data","config","error","rpcErr","rpc","p_store_id","getIntegrationDirect","Error","accessToken","access_token","refreshToken","refresh_token","clientId","client_id","clientSecret","client_secret","customerId","customer_id","developerToken","developer_token","status","refreshed","refreshAccessToken","loginCustomerId","login_customer_id","tokenExpiresAt","finalToken","token_expires_at","expiresAt","Date","bufferMs","getTime","now","from","select","eq","limit","single","client_secret_encrypted","developer_token_encrypted","access_token_encrypted","refresh_token_encrypted","info","res","fetch","method","headers","body","URLSearchParams","grant_type","ok","errText","text","err","update","slice","updated_at","toISOString","tokenData","json","newToken","expiresIn","expires_in","checkAndIncrementMutationQuota","operationCount","operation","today","usage","maybeSingle","currentCount","mutation_count","upsert","store_id","usage_date","last_operation","onConflict","authHeaders","int","h","parseGoogleError","parsed","JSON","parse","details","length","detail","errors","map","e","errorCode","stringify","message","join","gaqlSearch","query","cid","errBody","results","mutate","resourcePath","operations","startMs","durationMs","errMsg","ops","batchMutate","mutateOperations","downloadAndEncodeImage","url","maxBytes","buf","Buffer","arrayBuffer","warn","split","pop","size","toString","getResource","resourceName","hashForCustomerMatch","value","trim","toLowerCase","digest","normalizePhone","phone","digits","replace","startsWith","uploadSegmentToGoogleAudience","segmentId","userListResourceName","members","memErr","p_segment_id","customerRows","memberships","membersUploaded","jobResourceName","customerIds","m","i","chunk","customers","in","push","userDataOps","c","identifiers","email","hashedEmail","hashedPhoneNumber","first_name","last_name","addressInfo","hashedFirstName","hashedLastName","some","id","userIdentifiers","createJobRes","job","type","customerMatchUserListMetadata","userList","jobResult","batchSize","batch","addRes","enablePartialFailure","u","create","runRes","isLocalId","test","toMicros","dollars","Math","round","fromMicros","micros","publishCampaignToGoogle","campaignId","campaign","campaign_type","pmaxResult","publishPMaxCampaign","googleCampaignId","google_campaign_id","budgetOps","name","amountMicros","daily_budget","deliveryMethod","budgetResult","budgetResourceName","campaignOp","advertisingChannelType","campaignBudget","containsEuPoliticalAdvertising","bidding","bidding_strategy","targetSpend","maximizeConversions","maximizeConversionValue","targetCpa","targetCpaMicros","bidding_target","targetRoas","manualCpc","start_date","startDate","end_date","endDate","result","google_customer_id","google_status","publishAdGroupToGoogle","adGroupId","adGroup","google_ad_group_id","googleAdGroupId","campaignResource","adGroupOp","ad_group_type","cpc_bid","cpcBidMicros","publishAdToGoogle","adId","ad","google_ad_id","googleAdId","adGroupResource","ad_group_id","adOp","buildAdPayload","adType","ad_type","headlines","pinnedField","undefined","descriptions","responsiveSearchAd","finalUrls","final_urls","path1","path2","responsiveDisplayAd","longHeadline","businessName","creative","business_name","assetGroupId","imageAssets","adGroups","longHeadlines","long_headlines","logoUrls","logo_urls","marketingImages","marketing_images","squareImages","square_marketing_images","nextTempId","getTempId","toTransformUrl","w","includes","logos","landscape","square","logoB64","landscapeB64","b64","squareB64","agAssetLinks","budgetTempId","campaignTempId","assetGroupTempId","campaignBudgetOperation","resource_name","amount_micros","delivery_method","explicitly_shared","campaignCreate","advertising_channel_type","campaign_budget","contains_eu_political_advertising","maximize_conversions","maximize_conversion_value","target_cpa","target_cpa_micros","target_roas","campaignOperation","bnTempId","assetOperation","text_asset","campaignAssetOperation","asset","field_type","logoTempId","image_asset","tempId","fieldType","d","lh","assetGroupOperation","link","assetGroupAssetOperation","asset_group","imageAssetsCreated","images","campaignName","responses","mutateOperationResponses","mutate_operation_responses","campaignResourceName","assetGroupResourceName","r","key","cr","rn","agr","ag","publishKeywordsToGoogle","keywords","is","published","kw","keyword","matchType","match_type","criterionId","google_criterion_id","publishConversionAction","conversionActionId","ca","google_conversion_id","CATEGORY_MAP","PURCHASE","LEAD","SIGNUP","ADD_TO_CART","PAGE_VIEW","OTHER","category","countingType","counting_type","attributionModelSettings","attributionModel","attribution_model","default_value","defaultValue","alwaysUseDefaultValue","always_use_default_value","googleId","tagSnippet","rows","snippets","conversionAction","tagSnippets","eventSnippet","google_tag_snippet","syncCampaignMetrics","dateRange","VALID_DATE_RANGES","range","synced","row","metrics","b","String","Number","ignoreDuplicates","handleGoogleAds","args","success","action","campaign_id","insert","order","ascending","updates","googleUpdates","budgetQuery","budgetRows","budgetResource","updateMask","warning","remove","delete","deleted","targeting","ad_id","keyword_id","keywordsPublished","kResult","newStatus","date_range","totalResults","audienceType","audience_type","description","createResult","membershipLifeSpan","crmBasedUserList","uploadKeyType","dataSourceType","googleAudienceId","google_audience_id","segment_id","uploadResult","upload","audienceId","audience_id","aud","member_count","language","geoTargetConstants","geo_targets","keywordPlanNetwork","keywordSeed","urlSeed","campaignRow","campErr","adGroupRow","ad_group_name","agErr","adRow","adErr","keywordCount","kwRows","kwErr","auto_publish","pubErr","publishError"],"sources":["../../../src/server/handlers/google-ads.ts"],"sourcesContent":["/**\n * Google Ads Handler — campaign/ad group/ad/keyword CRUD + publish to Google Ads API v23.\n *\n * Mirrors the Meta Ads handler pattern:\n * - Draft objects stored in Supabase with local UUIDs\n * - Publish pushes drafts to Google Ads API\n * - Sync pulls metrics from Google Ads into local DB\n * - GAQL queries for custom reporting\n *\n * Actions:\n * create_campaign, list_campaigns, get_campaign, update_campaign, delete_campaign,\n * create_ad_group, list_ad_groups, get_ad_group, update_ad_group,\n * create_ad, list_ads, get_ad, update_ad,\n * create_keyword, list_keywords, update_keyword, delete_keyword,\n * publish, sync, search (GAQL), list_accessible_customers,\n * keyword_ideas, create_conversion_action, list_conversion_actions,\n * create_audience, list_audiences, pause, enable\n */\n\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport { createHash } from \"crypto\";\nimport { createLogger } from \"../lib/logger.js\";\n\nconst log = createLogger(\"google-ads\");\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst GOOGLE_ADS_API = \"v23\";\nconst GOOGLE_ADS_BASE = `https://googleads.googleapis.com/${GOOGLE_ADS_API}`;\nconst GOOGLE_TOKEN_URL = \"https://oauth2.googleapis.com/token\";\nconst DAILY_MUTATION_LIMIT = 10_000; // Google Basic Access limit\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface GoogleIntegration {\n accessToken: string;\n refreshToken: string;\n clientId: string;\n clientSecret: string;\n customerId: string;\n loginCustomerId: string | null;\n developerToken: string;\n tokenExpiresAt: string | null;\n}\n\n// ============================================================================\n// CREDENTIALS\n// ============================================================================\n\nasync function getIntegration(sb: SupabaseClient, storeId: string): Promise<GoogleIntegration> {\n // Use RPC to read platform secrets + per-store data in one call\n const { data: config, error: rpcErr } = await sb.rpc(\"get_google_config\", { p_store_id: storeId });\n\n // Fallback to direct table read if RPC not yet deployed\n const data = rpcErr ? await getIntegrationDirect(sb, storeId) : config;\n if (!data || data.error) {\n throw new Error(data?.error || \"Google Ads not connected. Go to Settings → Google Ads to link your account.\");\n }\n\n const accessToken = data.access_token;\n const refreshToken = data.refresh_token;\n const clientId = data.client_id;\n const clientSecret = data.client_secret;\n const customerId = data.customer_id;\n const developerToken = data.developer_token;\n const status = data.status;\n\n if (!accessToken || !customerId) {\n throw new Error(\"Google Ads not connected. Go to Settings → Google Ads to link your account.\");\n }\n\n if (status === \"token_expired\") {\n // Attempt one auto-refresh before giving up\n if (refreshToken && clientId && clientSecret) {\n const refreshed = await refreshAccessToken(sb, storeId, refreshToken, clientId, clientSecret);\n return { accessToken: refreshed, refreshToken, clientId, clientSecret, customerId, loginCustomerId: data.login_customer_id || null, developerToken, tokenExpiresAt: null };\n }\n throw new Error(\"Google Ads token expired. Reconnect in Settings → Google Ads.\");\n }\n\n if (status !== \"connected\") {\n throw new Error(`Google Ads integration status is '${status}'. Reconnect in Settings → Google Ads.`);\n }\n\n // Check token expiry and auto-refresh if needed\n let finalToken = accessToken;\n if (data.token_expires_at) {\n const expiresAt = new Date(data.token_expires_at);\n const bufferMs = 5 * 60 * 1000; // refresh 5 min before expiry\n if (expiresAt.getTime() - Date.now() < bufferMs && refreshToken && clientId && clientSecret) {\n finalToken = await refreshAccessToken(sb, storeId, refreshToken, clientId, clientSecret);\n }\n }\n\n return {\n accessToken: finalToken,\n refreshToken,\n clientId,\n clientSecret,\n customerId,\n loginCustomerId: data.login_customer_id || null,\n developerToken,\n tokenExpiresAt: data.token_expires_at || null,\n };\n}\n\n/** Fallback: direct table read (used if get_google_config RPC not deployed) */\nasync function getIntegrationDirect(sb: SupabaseClient, storeId: string): Promise<Record<string, unknown> | null> {\n const { data, error } = await sb\n .from(\"google_integrations\")\n .select(\"client_id, client_secret_encrypted, developer_token_encrypted, customer_id, login_customer_id, access_token_encrypted, refresh_token_encrypted, token_expires_at, status, measurement_id, ga4_api_secret_encrypted\")\n .eq(\"store_id\", storeId)\n .limit(1)\n .single();\n if (error || !data) return null;\n return {\n client_id: data.client_id,\n client_secret: data.client_secret_encrypted,\n developer_token: data.developer_token_encrypted,\n customer_id: data.customer_id,\n login_customer_id: data.login_customer_id,\n access_token: data.access_token_encrypted,\n refresh_token: data.refresh_token_encrypted,\n token_expires_at: data.token_expires_at,\n status: data.status,\n };\n}\n\nasync function refreshAccessToken(\n sb: SupabaseClient,\n storeId: string,\n refreshToken: string,\n clientId: string,\n clientSecret: string,\n): Promise<string> {\n log.info({ storeId }, \"refreshing Google Ads access token\");\n\n const res = await fetch(GOOGLE_TOKEN_URL, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n client_id: clientId,\n client_secret: clientSecret,\n refresh_token: refreshToken,\n grant_type: \"refresh_token\",\n }),\n });\n\n if (!res.ok) {\n const errText = await res.text();\n log.error({ storeId, status: res.status, err: errText }, \"token refresh failed\");\n\n // Mark integration as token_expired so UI can prompt reconnect\n await sb.from(\"google_integrations\").update({\n status: \"token_expired\",\n error: `Token refresh failed (${res.status}): ${errText.slice(0, 200)}`,\n updated_at: new Date().toISOString(),\n }).eq(\"store_id\", storeId);\n\n throw new Error(`Token refresh failed (${res.status}). Reconnect in Settings → Google Ads.`);\n }\n\n const tokenData = (await res.json()) as Record<string, unknown>;\n const newToken = tokenData.access_token as string;\n const expiresIn = (tokenData.expires_in as number) ?? 3600;\n const expiresAt = new Date(Date.now() + expiresIn * 1000).toISOString();\n\n // Persist the new token and ensure status is connected\n await sb.from(\"google_integrations\").update({\n access_token_encrypted: newToken,\n token_expires_at: expiresAt,\n status: \"connected\",\n error: null,\n updated_at: new Date().toISOString(),\n }).eq(\"store_id\", storeId);\n\n log.info({ storeId, expiresAt }, \"Google Ads token refreshed\");\n return newToken;\n}\n\n// ============================================================================\n// RATE LIMITING — 10,000 mutations/day (Google Basic Access)\n// ============================================================================\n\nasync function checkAndIncrementMutationQuota(\n sb: SupabaseClient,\n storeId: string,\n operationCount: number,\n operation: string,\n): Promise<void> {\n const today = new Date().toISOString().slice(0, 10);\n\n // Upsert today's counter\n const { data: usage } = await sb\n .from(\"google_ads_daily_usage\")\n .select(\"mutation_count\")\n .eq(\"store_id\", storeId)\n .eq(\"usage_date\", today)\n .maybeSingle();\n\n const currentCount = usage?.mutation_count ?? 0;\n if (currentCount + operationCount > DAILY_MUTATION_LIMIT) {\n throw new Error(`Google Ads daily mutation limit reached (${currentCount}/${DAILY_MUTATION_LIMIT}). Resets at midnight UTC.`);\n }\n\n await sb.from(\"google_ads_daily_usage\").upsert({\n store_id: storeId,\n usage_date: today,\n mutation_count: currentCount + operationCount,\n last_operation: operation,\n updated_at: new Date().toISOString(),\n }, { onConflict: \"store_id,usage_date\" });\n}\n\n// ============================================================================\n// GOOGLE ADS API HELPERS\n// ============================================================================\n\nfunction authHeaders(int: GoogleIntegration): Record<string, string> {\n const h: Record<string, string> = {\n \"Authorization\": `Bearer ${int.accessToken}`,\n \"developer-token\": int.developerToken,\n \"Content-Type\": \"application/json\",\n };\n if (int.loginCustomerId) {\n h[\"login-customer-id\"] = int.loginCustomerId;\n }\n return h;\n}\n\nfunction parseGoogleError(body: string, status: number): string {\n try {\n const parsed = JSON.parse(body);\n const err = parsed.error;\n if (err?.details?.length) {\n const detail = err.details[0];\n if (detail.errors?.length) {\n return detail.errors.map((e: Record<string, unknown>) =>\n `${e.errorCode ? JSON.stringify(e.errorCode) : \"\"}: ${e.message}`\n ).join(\"; \");\n }\n }\n return err?.message || body.slice(0, 500);\n } catch {\n return body.slice(0, 500);\n }\n}\n\n/** Execute a GAQL search query. */\nasync function gaqlSearch(\n int: GoogleIntegration,\n query: string,\n customerId?: string,\n): Promise<Record<string, unknown>[]> {\n const cid = customerId || int.customerId;\n const res = await fetch(`${GOOGLE_ADS_BASE}/customers/${cid}/googleAds:search`, {\n method: \"POST\",\n headers: authHeaders(int),\n body: JSON.stringify({ query }),\n });\n\n if (!res.ok) {\n const errBody = await res.text();\n throw new Error(`GAQL query failed (${res.status}): ${parseGoogleError(errBody, res.status)}`);\n }\n\n const json = (await res.json()) as Record<string, unknown>;\n return (json.results as Record<string, unknown>[]) || [];\n}\n\n/** Execute a Google Ads API mutate operation with rate limiting and telemetry. */\nasync function mutate(\n int: GoogleIntegration,\n resourcePath: string,\n operations: Record<string, unknown>[],\n sb?: SupabaseClient,\n storeId?: string,\n): Promise<Record<string, unknown>> {\n // Rate limit check (if sb/storeId available)\n if (sb && storeId) {\n await checkAndIncrementMutationQuota(sb, storeId, operations.length, `mutate:${resourcePath}`);\n }\n\n const cid = int.customerId;\n const startMs = Date.now();\n const res = await fetch(`${GOOGLE_ADS_BASE}/customers/${cid}/${resourcePath}:mutate`, {\n method: \"POST\",\n headers: authHeaders(int),\n body: JSON.stringify({ operations }),\n });\n\n const durationMs = Date.now() - startMs;\n\n if (!res.ok) {\n const errBody = await res.text();\n const errMsg = parseGoogleError(errBody, res.status);\n log.error({ resourcePath, status: res.status, durationMs, storeId, err: errMsg }, \"Google Ads mutate failed\");\n throw new Error(`Mutate ${resourcePath} failed (${res.status}): ${errMsg}`);\n }\n\n log.info({ resourcePath, ops: operations.length, durationMs, storeId }, \"Google Ads mutate succeeded\");\n return (await res.json()) as Record<string, unknown>;\n}\n\n/** Unified batch mutate — creates multiple resource types atomically with temporary IDs. */\nasync function batchMutate(\n int: GoogleIntegration,\n mutateOperations: Record<string, unknown>[],\n sb?: SupabaseClient,\n storeId?: string,\n): Promise<Record<string, unknown>> {\n if (sb && storeId) {\n await checkAndIncrementMutationQuota(sb, storeId, mutateOperations.length, \"batchMutate\");\n }\n\n const cid = int.customerId;\n const startMs = Date.now();\n const res = await fetch(`${GOOGLE_ADS_BASE}/customers/${cid}/googleAds:mutate`, {\n method: \"POST\",\n headers: authHeaders(int),\n body: JSON.stringify({ mutateOperations }),\n });\n\n const durationMs = Date.now() - startMs;\n\n if (!res.ok) {\n const errBody = await res.text();\n const errMsg = parseGoogleError(errBody, res.status);\n log.error({ status: res.status, durationMs, storeId, err: errMsg }, \"Google Ads batch mutate failed\");\n throw new Error(`Batch mutate failed (${res.status}): ${errMsg}`);\n }\n\n log.info({ ops: mutateOperations.length, durationMs, storeId }, \"Google Ads batch mutate succeeded\");\n return (await res.json()) as Record<string, unknown>;\n}\n\n/** Download image from URL and return base64 data. Returns null if download fails or exceeds maxBytes. */\nasync function downloadAndEncodeImage(url: string, maxBytes = 5_000_000): Promise<string | null> {\n try {\n const res = await fetch(url);\n if (!res.ok) return null;\n const buf = Buffer.from(await res.arrayBuffer());\n if (buf.length > maxBytes) {\n log.warn({ url: url.split(\"/\").pop(), size: buf.length }, \"Image exceeds size limit, skipping\");\n return null;\n }\n return buf.toString(\"base64\");\n } catch (err) {\n log.warn({ url: url.split(\"/\").pop(), err }, \"Failed to download image\");\n return null;\n }\n}\n\n/** Get a resource by resource name. */\nasync function getResource(int: GoogleIntegration, resourceName: string): Promise<Record<string, unknown>> {\n const res = await fetch(`${GOOGLE_ADS_BASE}/${resourceName}`, {\n method: \"GET\",\n headers: authHeaders(int),\n });\n\n if (!res.ok) {\n const errBody = await res.text();\n throw new Error(`GET ${resourceName} failed (${res.status}): ${parseGoogleError(errBody, res.status)}`);\n }\n\n return (await res.json()) as Record<string, unknown>;\n}\n\n// ============================================================================\n// CUSTOMER MATCH — HASHING + UPLOAD\n// ============================================================================\n\n/** SHA-256 hash a value for Google Customer Match (lowercase + trim first). */\nfunction hashForCustomerMatch(value: string): string {\n return createHash(\"sha256\").update(value.trim().toLowerCase()).digest(\"hex\");\n}\n\n/** Normalize phone to E.164 format for Google Customer Match. */\nfunction normalizePhone(phone: string): string {\n const digits = phone.replace(/\\D/g, \"\");\n if (digits.length === 10) return `+1${digits}`;\n if (digits.length === 11 && digits.startsWith(\"1\")) return `+${digits}`;\n return `+${digits}`;\n}\n\n/**\n * Upload segment members to a Google Ads Customer Match user list.\n * Fetches all segment members, hashes PII, and uploads via OfflineUserDataJob.\n */\nasync function uploadSegmentToGoogleAudience(\n sb: SupabaseClient,\n int: GoogleIntegration,\n storeId: string,\n segmentId: string,\n userListResourceName: string,\n): Promise<{ membersUploaded: number; jobResourceName: string; status: string }> {\n const cid = int.customerId;\n\n // 1. Fetch all segment members\n const { data: members, error: memErr } = await sb.rpc(\"get_segment_members_for_export\", {\n p_store_id: storeId,\n p_segment_id: segmentId,\n });\n\n // Fallback: direct query via customer_segment_memberships → v_store_customers\n let customerRows: Array<{ email?: string; phone?: string; first_name?: string; last_name?: string }>;\n if (memErr || !members) {\n const { data: memberships } = await sb\n .from(\"customer_segment_memberships\")\n .select(\"customer_id\")\n .eq(\"segment_id\", segmentId);\n if (!memberships || memberships.length === 0) {\n return { membersUploaded: 0, jobResourceName: \"\", status: \"NO_MEMBERS\" };\n }\n const customerIds = memberships.map((m: { customer_id: string }) => m.customer_id);\n // Batch fetch in chunks of 500 — use v_store_customers (joins ucr → platform_users)\n customerRows = [];\n for (let i = 0; i < customerIds.length; i += 500) {\n const chunk = customerIds.slice(i, i + 500);\n const { data: customers } = await sb\n .from(\"v_store_customers\")\n .select(\"email, phone, first_name, last_name\")\n .in(\"id\", chunk);\n if (customers) customerRows.push(...customers);\n }\n } else {\n customerRows = members as Array<{ email?: string; phone?: string; first_name?: string; last_name?: string }>;\n }\n\n if (customerRows.length === 0) {\n return { membersUploaded: 0, jobResourceName: \"\", status: \"NO_MEMBERS\" };\n }\n\n // 2. Build hashed user identifiers (one entry per identifier type)\n const userDataOps: Array<Record<string, unknown>> = [];\n for (const c of customerRows) {\n const identifiers: Array<Record<string, unknown>> = [];\n if (c.email) identifiers.push({ hashedEmail: hashForCustomerMatch(c.email) });\n if (c.phone) identifiers.push({ hashedPhoneNumber: hashForCustomerMatch(normalizePhone(c.phone)) });\n if (c.first_name && c.last_name) {\n identifiers.push({\n addressInfo: {\n hashedFirstName: hashForCustomerMatch(c.first_name),\n hashedLastName: hashForCustomerMatch(c.last_name),\n },\n });\n }\n\n // Need at least email or phone\n if (identifiers.length > 0 && identifiers.some((id) => id.hashedEmail || id.hashedPhoneNumber)) {\n userDataOps.push({ userIdentifiers: identifiers });\n }\n }\n\n if (userDataOps.length === 0) {\n return { membersUploaded: 0, jobResourceName: \"\", status: \"NO_IDENTIFIERS\" };\n }\n\n // 3. Create OfflineUserDataJob\n const createJobRes = await fetch(\n `${GOOGLE_ADS_BASE}/customers/${cid}/offlineUserDataJobs:create`,\n {\n method: \"POST\",\n headers: authHeaders(int),\n body: JSON.stringify({\n job: {\n type: \"CUSTOMER_MATCH_USER_LIST\",\n customerMatchUserListMetadata: {\n userList: userListResourceName,\n },\n },\n }),\n },\n );\n if (!createJobRes.ok) {\n const errBody = await createJobRes.text();\n throw new Error(`Failed to create OfflineUserDataJob: ${parseGoogleError(errBody, createJobRes.status)}`);\n }\n const jobResult = (await createJobRes.json()) as { resourceName: string };\n const jobResourceName = jobResult.resourceName;\n\n // 4. Add operations in batches of 1000\n const batchSize = 1000;\n for (let i = 0; i < userDataOps.length; i += batchSize) {\n const batch = userDataOps.slice(i, i + batchSize);\n const addRes = await fetch(\n `${GOOGLE_ADS_BASE}/${jobResourceName}:addOperations`,\n {\n method: \"POST\",\n headers: authHeaders(int),\n body: JSON.stringify({\n enablePartialFailure: true,\n operations: batch.map((u) => ({ create: u })),\n }),\n },\n );\n if (!addRes.ok) {\n const errBody = await addRes.text();\n log.warn({ batch: i / batchSize, err: parseGoogleError(errBody, addRes.status) }, \"Partial failure adding user data\");\n }\n }\n\n // 5. Run the job\n const runRes = await fetch(\n `${GOOGLE_ADS_BASE}/${jobResourceName}:run`,\n {\n method: \"POST\",\n headers: authHeaders(int),\n body: \"{}\",\n },\n );\n if (!runRes.ok) {\n const errBody = await runRes.text();\n throw new Error(`Failed to run OfflineUserDataJob: ${parseGoogleError(errBody, runRes.status)}`);\n }\n\n log.info({ segmentId, userListResourceName, members: userDataOps.length, jobResourceName }, \"Google Customer Match upload completed\");\n\n return {\n membersUploaded: userDataOps.length,\n jobResourceName,\n status: \"RUNNING\",\n };\n}\n\n// ============================================================================\n// ID HELPERS\n// ============================================================================\n\n/** Local draft IDs contain non-numeric chars. Google IDs are purely numeric. */\nfunction isLocalId(id: string | null | undefined): boolean {\n if (!id) return true;\n return /[^0-9]/.test(id);\n}\n\n/** Convert budget in dollars to micros (Google uses micros). */\nfunction toMicros(dollars: number): number {\n return Math.round(dollars * 1_000_000);\n}\n\n/** Convert micros to dollars. */\nfunction fromMicros(micros: number): number {\n return micros / 1_000_000;\n}\n\n// ============================================================================\n// PUBLISH HELPERS\n// ============================================================================\n\nasync function publishCampaignToGoogle(\n sb: SupabaseClient,\n int: GoogleIntegration,\n storeId: string,\n campaignId: string,\n): Promise<{ googleCampaignId: string; resourceName: string }> {\n // Fetch the draft campaign\n const { data: campaign, error } = await sb\n .from(\"google_campaigns\")\n .select(\"*\")\n .eq(\"id\", campaignId)\n .eq(\"store_id\", storeId)\n .single();\n\n if (error || !campaign) throw new Error(`Campaign ${campaignId} not found`);\n\n // Performance Max uses a dedicated publish path (asset groups, not ad groups)\n if (campaign.campaign_type === \"PERFORMANCE_MAX\") {\n const pmaxResult = await publishPMaxCampaign(sb, int, storeId, campaignId);\n return { googleCampaignId: pmaxResult.googleCampaignId, resourceName: pmaxResult.resourceName };\n }\n\n // Already published?\n if (campaign.google_campaign_id && !isLocalId(campaign.google_campaign_id)) {\n return { googleCampaignId: campaign.google_campaign_id, resourceName: `customers/${int.customerId}/campaigns/${campaign.google_campaign_id}` };\n }\n\n // Create budget first\n const budgetOps = [{\n create: {\n name: `${campaign.name} Budget`,\n amountMicros: toMicros(campaign.daily_budget || 10).toString(),\n deliveryMethod: \"STANDARD\",\n },\n }];\n const budgetResult = await mutate(int, \"campaignBudgets\", budgetOps, sb, storeId);\n const budgetResourceName = (budgetResult as Record<string, unknown>).results\n ? ((budgetResult as Record<string, unknown>).results as Array<Record<string, unknown>>)[0]?.resourceName as string\n : null;\n\n if (!budgetResourceName) throw new Error(\"Failed to create campaign budget\");\n\n // Build campaign operation\n const campaignOp: Record<string, unknown> = {\n create: {\n name: campaign.name,\n advertisingChannelType: campaign.campaign_type || \"SEARCH\",\n status: \"PAUSED\",\n campaignBudget: budgetResourceName,\n },\n };\n\n // EU political advertising compliance (required in v23+)\n (campaignOp.create as Record<string, unknown>).containsEuPoliticalAdvertising = \"DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING\";\n\n // Bidding strategy (v23: maximizeClicks → targetSpend)\n const bidding = campaign.bidding_strategy || \"MAXIMIZE_CLICKS\";\n switch (bidding) {\n case \"MAXIMIZE_CLICKS\":\n (campaignOp.create as Record<string, unknown>).targetSpend = {};\n break;\n case \"MAXIMIZE_CONVERSIONS\":\n (campaignOp.create as Record<string, unknown>).maximizeConversions = {};\n break;\n case \"MAXIMIZE_CONVERSION_VALUE\":\n (campaignOp.create as Record<string, unknown>).maximizeConversionValue = {};\n break;\n case \"TARGET_CPA\":\n (campaignOp.create as Record<string, unknown>).targetCpa = {\n targetCpaMicros: toMicros(campaign.bidding_target || 10).toString(),\n };\n break;\n case \"TARGET_ROAS\":\n (campaignOp.create as Record<string, unknown>).targetRoas = {\n targetRoas: campaign.bidding_target || 1.0,\n };\n break;\n case \"MANUAL_CPC\":\n (campaignOp.create as Record<string, unknown>).manualCpc = {};\n break;\n default:\n (campaignOp.create as Record<string, unknown>).targetSpend = {};\n }\n\n // Start/end dates\n if (campaign.start_date) {\n (campaignOp.create as Record<string, unknown>).startDate = campaign.start_date.slice(0, 10).replace(/-/g, \"-\");\n }\n if (campaign.end_date) {\n (campaignOp.create as Record<string, unknown>).endDate = campaign.end_date.slice(0, 10).replace(/-/g, \"-\");\n }\n\n const result = await mutate(int, \"campaigns\", [campaignOp], sb, storeId);\n const results = (result as Record<string, unknown>).results as Array<Record<string, unknown>>;\n const resourceName = results?.[0]?.resourceName as string;\n\n if (!resourceName) throw new Error(\"Campaign creation returned no resource name\");\n\n const googleCampaignId = resourceName.split(\"/\").pop()!;\n\n // Update local record\n await sb.from(\"google_campaigns\").update({\n google_campaign_id: googleCampaignId,\n google_customer_id: int.customerId,\n google_status: \"PAUSED\",\n status: \"PUBLISHED\",\n updated_at: new Date().toISOString(),\n }).eq(\"id\", campaignId);\n\n return { googleCampaignId, resourceName };\n}\n\nasync function publishAdGroupToGoogle(\n sb: SupabaseClient,\n int: GoogleIntegration,\n storeId: string,\n adGroupId: string,\n): Promise<{ googleAdGroupId: string; resourceName: string }> {\n const { data: adGroup, error } = await sb\n .from(\"google_ad_groups\")\n .select(\"*\")\n .eq(\"id\", adGroupId)\n .eq(\"store_id\", storeId)\n .single();\n\n if (error || !adGroup) throw new Error(`Ad group ${adGroupId} not found`);\n\n if (adGroup.google_ad_group_id && !isLocalId(adGroup.google_ad_group_id)) {\n return { googleAdGroupId: adGroup.google_ad_group_id, resourceName: `customers/${int.customerId}/adGroups/${adGroup.google_ad_group_id}` };\n }\n\n // Auto-publish parent campaign if needed\n const { googleCampaignId, resourceName: campaignResource } = await publishCampaignToGoogle(sb, int, storeId, adGroup.google_campaign_id);\n\n const adGroupOp = {\n create: {\n name: adGroup.name,\n campaign: campaignResource,\n type: adGroup.ad_group_type || \"SEARCH_STANDARD\",\n status: \"ENABLED\",\n ...(adGroup.cpc_bid ? { cpcBidMicros: toMicros(adGroup.cpc_bid).toString() } : {}),\n },\n };\n\n const result = await mutate(int, \"adGroups\", [adGroupOp], sb, storeId);\n const results = (result as Record<string, unknown>).results as Array<Record<string, unknown>>;\n const resourceName = results?.[0]?.resourceName as string;\n\n if (!resourceName) throw new Error(\"Ad group creation returned no resource name\");\n\n const googleAdGroupId = resourceName.split(\"/\").pop()!;\n\n await sb.from(\"google_ad_groups\").update({\n google_ad_group_id: googleAdGroupId,\n google_status: \"ENABLED\",\n status: \"PUBLISHED\",\n updated_at: new Date().toISOString(),\n }).eq(\"id\", adGroupId);\n\n return { googleAdGroupId, resourceName };\n}\n\nasync function publishAdToGoogle(\n sb: SupabaseClient,\n int: GoogleIntegration,\n storeId: string,\n adId: string,\n): Promise<{ googleAdId: string }> {\n const { data: ad, error } = await sb\n .from(\"google_ads\")\n .select(\"*\")\n .eq(\"id\", adId)\n .eq(\"store_id\", storeId)\n .single();\n\n if (error || !ad) throw new Error(`Ad ${adId} not found`);\n\n if (ad.google_ad_id && !isLocalId(ad.google_ad_id)) {\n return { googleAdId: ad.google_ad_id };\n }\n\n // Auto-publish parent ad group\n const { resourceName: adGroupResource } = await publishAdGroupToGoogle(sb, int, storeId, ad.ad_group_id);\n\n // Build ad group ad operation based on ad type\n const adOp: Record<string, unknown> = {\n create: {\n adGroup: adGroupResource,\n status: \"PAUSED\",\n ad: buildAdPayload(ad),\n },\n };\n\n const result = await mutate(int, \"adGroupAds\", [adOp], sb, storeId);\n const results = (result as Record<string, unknown>).results as Array<Record<string, unknown>>;\n const resourceName = results?.[0]?.resourceName as string;\n\n if (!resourceName) throw new Error(\"Ad creation returned no resource name\");\n\n // Resource name format: customers/{cid}/adGroupAds/{agid}~{adId}\n const googleAdId = resourceName.split(\"~\").pop() || resourceName.split(\"/\").pop()!;\n\n await sb.from(\"google_ads\").update({\n google_ad_id: googleAdId,\n google_status: \"PAUSED\",\n status: \"PUBLISHED\",\n updated_at: new Date().toISOString(),\n }).eq(\"id\", adId);\n\n return { googleAdId };\n}\n\nfunction buildAdPayload(ad: Record<string, unknown>): Record<string, unknown> {\n const adType = ad.ad_type as string;\n\n if (adType === \"RESPONSIVE_SEARCH_AD\") {\n const headlines = (ad.headlines as string[] || []).map((text: string, i: number) => ({\n text,\n pinnedField: i < 3 ? undefined : undefined, // no pinning by default\n }));\n const descriptions = (ad.descriptions as string[] || []).map((text: string) => ({ text }));\n\n return {\n responsiveSearchAd: {\n headlines,\n descriptions,\n },\n finalUrls: ad.final_urls || [],\n ...(ad.path1 ? { path1: ad.path1 } : {}),\n ...(ad.path2 ? { path2: ad.path2 } : {}),\n };\n }\n\n if (adType === \"RESPONSIVE_DISPLAY_AD\") {\n return {\n responsiveDisplayAd: {\n headlines: (ad.headlines as string[] || []).map((text: string) => ({ text })),\n longHeadline: { text: (ad.headlines as string[])?.[0] || \"\" },\n descriptions: (ad.descriptions as string[] || []).map((text: string) => ({ text })),\n businessName: (ad.creative as Record<string, unknown>)?.business_name || \"\",\n },\n finalUrls: ad.final_urls || [],\n };\n }\n\n // Default: responsive search ad\n return {\n responsiveSearchAd: {\n headlines: (ad.headlines as string[] || []).map((text: string) => ({ text })),\n descriptions: (ad.descriptions as string[] || []).map((text: string) => ({ text })),\n },\n finalUrls: ad.final_urls || [],\n };\n}\n\n// ============================================================================\n// PERFORMANCE MAX PUBLISH\n// ============================================================================\n\nasync function publishPMaxCampaign(\n sb: SupabaseClient,\n int: GoogleIntegration,\n storeId: string,\n campaignId: string,\n): Promise<{ googleCampaignId: string; resourceName: string; assetGroupId: string; imageAssets: number }> {\n const { data: campaign } = await sb\n .from(\"google_campaigns\")\n .select(\"*\")\n .eq(\"id\", campaignId)\n .eq(\"store_id\", storeId)\n .single();\n\n if (!campaign) throw new Error(`Campaign ${campaignId} not found`);\n\n if (campaign.google_campaign_id && !isLocalId(campaign.google_campaign_id)) {\n return {\n googleCampaignId: campaign.google_campaign_id,\n resourceName: `customers/${int.customerId}/campaigns/${campaign.google_campaign_id}`,\n assetGroupId: \"\",\n imageAssets: 0,\n };\n }\n\n // Get the ad row (holds headlines, descriptions, creative with image URLs)\n const { data: adGroups } = await sb\n .from(\"google_ad_groups\")\n .select(\"id\")\n .eq(\"google_campaign_id\", campaignId)\n .eq(\"store_id\", storeId);\n\n let ad: Record<string, unknown> | null = null;\n if (adGroups?.length) {\n const { data } = await sb\n .from(\"google_ads\")\n .select(\"*\")\n .eq(\"ad_group_id\", adGroups[0].id)\n .eq(\"store_id\", storeId)\n .limit(1);\n ad = data?.[0] || null;\n }\n\n const creative = (ad?.creative || {}) as Record<string, unknown>;\n const headlines = (ad?.headlines || []) as string[];\n const descriptions = (ad?.descriptions || []) as string[];\n const finalUrls = (ad?.final_urls || []) as string[];\n const longHeadlines = (creative.long_headlines || []) as string[];\n const businessName = ((creative.business_name || campaign.name) as string).slice(0, 25);\n const logoUrls = (creative.logo_urls || []) as string[];\n const marketingImages = (creative.marketing_images || []) as string[];\n const squareImages = (creative.square_marketing_images || []) as string[];\n\n if (!finalUrls.length) throw new Error(\"PMax requires at least one final URL\");\n if (headlines.length < 3) throw new Error(\"PMax requires at least 3 headlines\");\n if (descriptions.length < 2) throw new Error(\"PMax requires at least 2 descriptions\");\n\n const cid = int.customerId;\n let nextTempId = -1;\n const getTempId = () => nextTempId--;\n\n // ---- Download images first (they must all be in the atomic batch) ----\n // Use Supabase image transforms for correct aspect ratios when URLs are from Supabase Storage\n const toTransformUrl = (url: string, w: number, h: number): string => {\n // Convert /storage/v1/object/public/ → /storage/v1/render/image/public/ with resize params\n if (url.includes(\"supabase.co/storage/v1/object/public/\")) {\n return url.replace(\"/storage/v1/object/public/\", `/storage/v1/render/image/public/`) + `?width=${w}&height=${h}&resize=cover`;\n }\n return url; // External URLs used as-is\n };\n\n log.info({ logos: logoUrls.length, landscape: marketingImages.length, square: squareImages.length }, \"Downloading PMax image assets\");\n\n // Download logo (1:1, 1200x1200)\n let logoB64: string | null = null;\n for (const url of logoUrls.slice(0, 2)) {\n logoB64 = await downloadAndEncodeImage(toTransformUrl(url, 1200, 1200));\n if (logoB64) break;\n }\n\n // Download landscape images (1.91:1, 1200x628)\n const landscapeB64: string[] = [];\n for (const url of marketingImages.slice(0, 5)) {\n const b64 = await downloadAndEncodeImage(toTransformUrl(url, 1200, 628));\n if (b64) landscapeB64.push(b64);\n }\n\n // Download square images (1:1, 1200x1200)\n const squareB64: string[] = [];\n for (const url of squareImages.slice(0, 5)) {\n const b64 = await downloadAndEncodeImage(toTransformUrl(url, 1200, 1200));\n if (b64) squareB64.push(b64);\n }\n\n // ---- Build ONE atomic batch (unified googleAds:mutate uses snake_case) ----\n const ops: Record<string, unknown>[] = [];\n const agAssetLinks: { tempId: number; fieldType: string }[] = [];\n const budgetTempId = getTempId();\n const campaignTempId = getTempId();\n const assetGroupTempId = getTempId();\n\n // Budget (PMax requires explicitly_shared: false)\n ops.push({\n campaignBudgetOperation: {\n create: {\n resource_name: `customers/${cid}/campaignBudgets/${budgetTempId}`,\n name: `${campaign.name} Budget`,\n amount_micros: toMicros(campaign.daily_budget || 10).toString(),\n delivery_method: \"STANDARD\",\n explicitly_shared: false,\n },\n },\n });\n\n // Campaign (note: start_date/end_date not supported on create via unified endpoint)\n const campaignCreate: Record<string, unknown> = {\n resource_name: `customers/${cid}/campaigns/${campaignTempId}`,\n name: campaign.name,\n advertising_channel_type: \"PERFORMANCE_MAX\",\n status: \"PAUSED\",\n campaign_budget: `customers/${cid}/campaignBudgets/${budgetTempId}`,\n contains_eu_political_advertising: \"DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING\",\n };\n\n const bidding = campaign.bidding_strategy || \"MAXIMIZE_CONVERSIONS\";\n switch (bidding) {\n case \"MAXIMIZE_CONVERSIONS\":\n campaignCreate.maximize_conversions = {};\n break;\n case \"MAXIMIZE_CONVERSION_VALUE\":\n campaignCreate.maximize_conversion_value = {};\n break;\n case \"TARGET_CPA\":\n campaignCreate.target_cpa = { target_cpa_micros: toMicros(campaign.bidding_target || 10).toString() };\n break;\n case \"TARGET_ROAS\":\n campaignCreate.target_roas = { target_roas: campaign.bidding_target || 1.0 };\n break;\n default:\n campaignCreate.maximize_conversions = {};\n }\n\n ops.push({ campaignOperation: { create: campaignCreate } });\n\n // Business Name → CampaignAsset ONLY (Brand Guidelines requirement)\n const bnTempId = getTempId();\n ops.push({ assetOperation: { create: { resource_name: `customers/${cid}/assets/${bnTempId}`, type: \"TEXT\", text_asset: { text: businessName }, name: `Business Name: ${businessName}` } } });\n ops.push({ campaignAssetOperation: { create: { campaign: `customers/${cid}/campaigns/${campaignTempId}`, asset: `customers/${cid}/assets/${bnTempId}`, field_type: \"BUSINESS_NAME\" } } });\n\n // Logo → CampaignAsset ONLY (Brand Guidelines: logo must be campaign-level, NOT asset group)\n if (logoB64) {\n const logoTempId = getTempId();\n ops.push({ assetOperation: { create: { resource_name: `customers/${cid}/assets/${logoTempId}`, type: \"IMAGE\", image_asset: { data: logoB64 }, name: \"Logo\" } } });\n ops.push({ campaignAssetOperation: { create: { campaign: `customers/${cid}/campaigns/${campaignTempId}`, asset: `customers/${cid}/assets/${logoTempId}`, field_type: \"LOGO\" } } });\n }\n\n // Headlines → AssetGroupAsset\n for (const h of headlines.slice(0, 15)) {\n const id = getTempId();\n ops.push({ assetOperation: { create: { resource_name: `customers/${cid}/assets/${id}`, type: \"TEXT\", text_asset: { text: h }, name: `Headline: ${h.slice(0, 50)}` } } });\n agAssetLinks.push({ tempId: id, fieldType: \"HEADLINE\" });\n }\n\n // Descriptions → AssetGroupAsset\n for (const d of descriptions.slice(0, 5)) {\n const id = getTempId();\n ops.push({ assetOperation: { create: { resource_name: `customers/${cid}/assets/${id}`, type: \"TEXT\", text_asset: { text: d }, name: `Desc: ${d.slice(0, 50)}` } } });\n agAssetLinks.push({ tempId: id, fieldType: \"DESCRIPTION\" });\n }\n\n // Long headlines → AssetGroupAsset\n for (const lh of longHeadlines.slice(0, 5)) {\n const id = getTempId();\n ops.push({ assetOperation: { create: { resource_name: `customers/${cid}/assets/${id}`, type: \"TEXT\", text_asset: { text: lh }, name: `Long: ${lh.slice(0, 50)}` } } });\n agAssetLinks.push({ tempId: id, fieldType: \"LONG_HEADLINE\" });\n }\n\n // Landscape images → AssetGroupAsset\n for (const b64 of landscapeB64) {\n const id = getTempId();\n ops.push({ assetOperation: { create: { resource_name: `customers/${cid}/assets/${id}`, type: \"IMAGE\", image_asset: { data: b64 }, name: \"Landscape\" } } });\n agAssetLinks.push({ tempId: id, fieldType: \"MARKETING_IMAGE\" });\n }\n\n // Square images → AssetGroupAsset\n for (const b64 of squareB64) {\n const id = getTempId();\n ops.push({ assetOperation: { create: { resource_name: `customers/${cid}/assets/${id}`, type: \"IMAGE\", image_asset: { data: b64 }, name: \"Square\" } } });\n agAssetLinks.push({ tempId: id, fieldType: \"SQUARE_MARKETING_IMAGE\" });\n }\n\n // Asset Group\n ops.push({\n assetGroupOperation: {\n create: {\n resource_name: `customers/${cid}/assetGroups/${assetGroupTempId}`,\n campaign: `customers/${cid}/campaigns/${campaignTempId}`,\n name: `${campaign.name} — Asset Group`,\n final_urls: finalUrls,\n status: \"ENABLED\",\n },\n },\n });\n\n // Link all assets to asset group (text + images, NOT business name/logo)\n for (const link of agAssetLinks) {\n ops.push({\n assetGroupAssetOperation: {\n create: {\n asset_group: `customers/${cid}/assetGroups/${assetGroupTempId}`,\n asset: `customers/${cid}/assets/${link.tempId}`,\n field_type: link.fieldType,\n },\n },\n });\n }\n\n const imageAssetsCreated = landscapeB64.length + squareB64.length + (logoB64 ? 1 : 0);\n log.info({ ops: ops.length, images: imageAssetsCreated, campaignName: campaign.name }, \"Publishing PMax (atomic batch)\");\n\n const result = await batchMutate(int, ops, sb, storeId);\n\n // Extract real resource names from response (supports both camelCase and snake_case)\n const responses = (\n (result as Record<string, unknown>).mutateOperationResponses ||\n (result as Record<string, unknown>).mutate_operation_responses ||\n []\n ) as Array<Record<string, unknown>>;\n\n let campaignResourceName = \"\";\n let googleCampaignId = \"\";\n let assetGroupResourceName = \"\";\n\n for (const r of responses) {\n for (const key of [\"campaignResult\", \"campaign_result\"]) {\n const cr = r[key] as Record<string, string> | undefined;\n const rn = cr?.resourceName || cr?.resource_name;\n if (rn?.includes(\"/campaigns/\")) {\n campaignResourceName = rn;\n googleCampaignId = rn.split(\"/\").pop()!;\n }\n }\n for (const key of [\"assetGroupResult\", \"asset_group_result\"]) {\n const agr = r[key] as Record<string, string> | undefined;\n const rn = agr?.resourceName || agr?.resource_name;\n if (rn?.includes(\"/assetGroups/\")) {\n assetGroupResourceName = rn;\n }\n }\n }\n\n if (!googleCampaignId) throw new Error(\"PMax batch mutate returned no campaign resource name\");\n\n log.info({ googleCampaignId, imageAssetsCreated, assetGroupResourceName }, \"PMax campaign published\");\n\n // Update local records\n await sb.from(\"google_campaigns\").update({\n google_campaign_id: googleCampaignId,\n google_customer_id: int.customerId,\n google_status: \"PAUSED\",\n status: \"PUBLISHED\",\n updated_at: new Date().toISOString(),\n }).eq(\"id\", campaignId);\n\n if (adGroups?.length) {\n for (const ag of adGroups) {\n await sb.from(\"google_ad_groups\").update({\n google_status: \"PUBLISHED\",\n status: \"PUBLISHED\",\n updated_at: new Date().toISOString(),\n }).eq(\"id\", ag.id);\n }\n }\n\n return { googleCampaignId, resourceName: campaignResourceName, assetGroupId: assetGroupResourceName, imageAssets: imageAssetsCreated };\n}\n\nasync function publishKeywordsToGoogle(\n sb: SupabaseClient,\n int: GoogleIntegration,\n storeId: string,\n adGroupId: string,\n): Promise<{ published: number }> {\n const { data: keywords } = await sb\n .from(\"google_keywords\")\n .select(\"*\")\n .eq(\"ad_group_id\", adGroupId)\n .eq(\"store_id\", storeId)\n .is(\"google_criterion_id\", null);\n\n if (!keywords?.length) return { published: 0 };\n\n // Get the google ad group resource\n const { data: adGroup } = await sb\n .from(\"google_ad_groups\")\n .select(\"google_ad_group_id\")\n .eq(\"id\", adGroupId)\n .single();\n\n if (!adGroup?.google_ad_group_id || isLocalId(adGroup.google_ad_group_id)) {\n throw new Error(\"Ad group must be published before keywords\");\n }\n\n const adGroupResource = `customers/${int.customerId}/adGroups/${adGroup.google_ad_group_id}`;\n\n const operations = keywords.map((kw: Record<string, unknown>) => ({\n create: {\n adGroup: adGroupResource,\n status: \"ENABLED\",\n keyword: {\n text: kw.text,\n matchType: kw.match_type || \"BROAD\",\n },\n ...(kw.cpc_bid ? { cpcBidMicros: toMicros(kw.cpc_bid as number).toString() } : {}),\n },\n }));\n\n const result = await mutate(int, \"adGroupCriteria\", operations, sb, storeId);\n const results = (result as Record<string, unknown>).results as Array<Record<string, unknown>>;\n\n // Update local records with Google criterion IDs\n for (let i = 0; i < (results?.length || 0); i++) {\n const resourceName = results[i]?.resourceName as string;\n if (resourceName) {\n const criterionId = resourceName.split(\"~\").pop();\n await sb.from(\"google_keywords\").update({\n google_criterion_id: criterionId,\n google_status: \"ENABLED\",\n updated_at: new Date().toISOString(),\n }).eq(\"id\", keywords[i].id);\n }\n }\n\n return { published: results?.length || 0 };\n}\n\n/** Publish a local conversion action to Google Ads API. */\nasync function publishConversionAction(\n sb: SupabaseClient,\n int: GoogleIntegration,\n storeId: string,\n conversionActionId: string,\n): Promise<Record<string, unknown>> {\n const { data: ca } = await sb.from(\"google_conversion_actions\")\n .select(\"*\")\n .eq(\"id\", conversionActionId)\n .eq(\"store_id\", storeId)\n .single();\n\n if (!ca) throw new Error(\"Conversion action not found\");\n if (ca.google_conversion_id) {\n return { message: \"Already published\", google_conversion_id: ca.google_conversion_id };\n }\n\n const CATEGORY_MAP: Record<string, string> = {\n PURCHASE: \"PURCHASE\", LEAD: \"SUBMIT_LEAD_FORM\", SIGNUP: \"SIGNUP\",\n ADD_TO_CART: \"ADD_TO_CART\", PAGE_VIEW: \"PAGE_VIEW\", OTHER: \"DEFAULT\",\n };\n\n const result = await mutate(int, \"conversionActions\", [{\n create: {\n name: ca.name,\n category: CATEGORY_MAP[ca.category] || \"DEFAULT\",\n type: \"WEBPAGE\",\n status: \"ENABLED\",\n countingType: ca.counting_type || \"ONE_PER_CLICK\",\n attributionModelSettings: {\n attributionModel: ca.attribution_model || \"GOOGLE_LAST_CLICK\",\n },\n ...(ca.default_value ? {\n defaultValue: ca.default_value,\n alwaysUseDefaultValue: ca.always_use_default_value ?? false,\n } : {}),\n },\n }], sb, storeId);\n\n const results = (result as Record<string, unknown>).results as Array<Record<string, unknown>>;\n const resourceName = results?.[0]?.resourceName as string;\n const googleId = resourceName?.split(\"/\").pop();\n\n if (googleId) {\n // Fetch the tag snippet for the newly created conversion action\n let tagSnippet: string | null = null;\n try {\n const rows = await gaqlSearch(int,\n `SELECT conversion_action.tag_snippets FROM conversion_action WHERE conversion_action.resource_name = '${resourceName}'`,\n );\n const snippets = (rows[0]?.conversionAction as Record<string, unknown>)?.tagSnippets as Array<Record<string, unknown>> | undefined;\n if (snippets?.length) tagSnippet = (snippets[0].eventSnippet as string) || null;\n } catch { /* non-fatal — snippet fetch can fail */ }\n\n await sb.from(\"google_conversion_actions\").update({\n google_conversion_id: googleId,\n google_tag_snippet: tagSnippet,\n status: \"ENABLED\",\n updated_at: new Date().toISOString(),\n }).eq(\"id\", conversionActionId);\n }\n\n return { google_conversion_id: googleId, resourceName };\n}\n\n// ============================================================================\n// SYNC — pull metrics from Google Ads into local DB\n// ============================================================================\n\nasync function syncCampaignMetrics(\n sb: SupabaseClient,\n int: GoogleIntegration,\n storeId: string,\n dateRange?: string,\n): Promise<{ synced: number }> {\n const VALID_DATE_RANGES = [\"LAST_7_DAYS\", \"LAST_14_DAYS\", \"LAST_30_DAYS\", \"LAST_90_DAYS\", \"THIS_MONTH\", \"LAST_MONTH\", \"TODAY\", \"YESTERDAY\"];\n const range = VALID_DATE_RANGES.includes(dateRange || \"\") ? dateRange! : \"LAST_30_DAYS\";\n const query = `\n SELECT\n campaign.id,\n campaign.name,\n campaign.status,\n campaign.advertising_channel_type,\n campaign_budget.amount_micros,\n metrics.impressions,\n metrics.clicks,\n metrics.cost_micros,\n metrics.conversions,\n metrics.conversions_value,\n metrics.ctr,\n metrics.average_cpc\n FROM campaign\n WHERE segments.date DURING ${range}\n `;\n\n const rows = await gaqlSearch(int, query);\n\n let synced = 0;\n for (const row of rows) {\n const c = row.campaign as Record<string, unknown>;\n const m = row.metrics as Record<string, unknown>;\n const b = row.campaignBudget as Record<string, unknown>;\n\n const googleCampaignId = String(c.id);\n\n await sb.from(\"google_campaigns\").upsert({\n store_id: storeId,\n google_campaign_id: googleCampaignId,\n google_customer_id: int.customerId,\n name: c.name,\n campaign_type: c.advertisingChannelType,\n google_status: c.status,\n daily_budget: b?.amountMicros ? fromMicros(Number(b.amountMicros)) : null,\n status: \"SYNCED\",\n updated_at: new Date().toISOString(),\n }, { onConflict: \"store_id,google_campaign_id\", ignoreDuplicates: false });\n\n synced++;\n }\n\n return { synced };\n}\n\n// ============================================================================\n// MAIN HANDLER\n// ============================================================================\n\nexport async function handleGoogleAds(\n sb: SupabaseClient,\n args: Record<string, unknown>,\n storeId?: string,\n): Promise<{ success: boolean; data?: unknown; error?: string }> {\n if (!storeId) return { success: false, error: \"store_id required\" };\n const action = args.action as string;\n\n try {\n switch (action) {\n\n // ====================================================================\n // CAMPAIGNS\n // ====================================================================\n\n case \"create_campaign\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name required\" };\n\n const row: Record<string, unknown> = {\n store_id: storeId,\n name,\n campaign_type: (args.campaign_type as string) || \"SEARCH\",\n status: \"DRAFT\",\n daily_budget: args.daily_budget ? Number(args.daily_budget) : null,\n bidding_strategy: (args.bidding_strategy as string) || \"MAXIMIZE_CLICKS\",\n bidding_target: args.bidding_target ? Number(args.bidding_target) : null,\n start_date: (args.start_date as string) || null,\n end_date: (args.end_date as string) || null,\n };\n\n if (args.campaign_id) row.campaign_id = args.campaign_id; // link to local campaigns table\n\n const { data, error } = await sb.from(\"google_campaigns\").insert(row).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"list_campaigns\": {\n const query = sb.from(\"google_campaigns\").select(\"*\").eq(\"store_id\", storeId).order(\"created_at\", { ascending: false });\n if (args.status) query.eq(\"status\", args.status);\n if (args.limit) query.limit(Number(args.limit));\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"get_campaign\": {\n const id = (args.campaign_id || args.id) as string;\n if (!id) return { success: false, error: \"campaign_id required\" };\n const { data, error } = await sb.from(\"google_campaigns\").select(\"*\").eq(\"id\", id).eq(\"store_id\", storeId).single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"update_campaign\": {\n const id = (args.campaign_id || args.id) as string;\n if (!id) return { success: false, error: \"campaign_id required\" };\n\n const updates: Record<string, unknown> = { updated_at: new Date().toISOString() };\n if (args.name) updates.name = args.name;\n if (args.daily_budget) updates.daily_budget = Number(args.daily_budget);\n if (args.bidding_strategy) updates.bidding_strategy = args.bidding_strategy;\n if (args.bidding_target) updates.bidding_target = Number(args.bidding_target);\n if (args.status) updates.status = args.status;\n if (args.start_date) updates.start_date = args.start_date;\n if (args.end_date) updates.end_date = args.end_date;\n\n const { data, error } = await sb.from(\"google_campaigns\").update(updates).eq(\"id\", id).eq(\"store_id\", storeId).select().single();\n if (error) return { success: false, error: error.message };\n\n // If published campaign, also update on Google\n if (data.google_campaign_id && !isLocalId(data.google_campaign_id)) {\n try {\n const int = await getIntegration(sb, storeId);\n const googleUpdates: Record<string, unknown> = {\n resourceName: `customers/${int.customerId}/campaigns/${data.google_campaign_id}`,\n };\n if (args.name) googleUpdates.name = args.name;\n if (args.daily_budget) {\n // Update budget separately\n const budgetQuery = `SELECT campaign_budget.resource_name FROM campaign WHERE campaign.id = ${data.google_campaign_id} LIMIT 1`;\n const budgetRows = await gaqlSearch(int, budgetQuery);\n if (budgetRows.length) {\n const budgetResource = (budgetRows[0].campaignBudget as Record<string, unknown>)?.resourceName as string;\n if (budgetResource) {\n await mutate(int, \"campaignBudgets\", [{\n update: { resourceName: budgetResource, amountMicros: toMicros(Number(args.daily_budget)).toString() },\n updateMask: \"amountMicros\",\n }], sb, storeId);\n }\n }\n }\n } catch (e) {\n // Non-fatal: local update succeeded, Google update failed\n return { success: true, data: { ...data, warning: `Local updated, but Google sync failed: ${e instanceof Error ? e.message : String(e)}` } };\n }\n }\n\n return { success: true, data };\n }\n\n case \"delete_campaign\": {\n const id = (args.campaign_id || args.id) as string;\n if (!id) return { success: false, error: \"campaign_id required\" };\n\n // If published, remove from Google\n const { data: campaign } = await sb.from(\"google_campaigns\").select(\"google_campaign_id\").eq(\"id\", id).eq(\"store_id\", storeId).single();\n if (campaign?.google_campaign_id && !isLocalId(campaign.google_campaign_id)) {\n try {\n const int = await getIntegration(sb, storeId);\n await mutate(int, \"campaigns\", [{\n remove: `customers/${int.customerId}/campaigns/${campaign.google_campaign_id}`,\n }], sb, storeId);\n } catch { /* best-effort deletion from Google */ }\n }\n\n const { error } = await sb.from(\"google_campaigns\").delete().eq(\"id\", id).eq(\"store_id\", storeId);\n if (error) return { success: false, error: error.message };\n return { success: true, data: { deleted: id } };\n }\n\n // ====================================================================\n // AD GROUPS\n // ====================================================================\n\n case \"create_ad_group\": {\n const name = args.name as string;\n const campaignId = args.campaign_id as string;\n if (!name) return { success: false, error: \"name required\" };\n if (!campaignId) return { success: false, error: \"campaign_id required\" };\n\n const row: Record<string, unknown> = {\n store_id: storeId,\n google_campaign_id: campaignId,\n name,\n ad_group_type: (args.ad_group_type as string) || \"SEARCH_STANDARD\",\n status: \"DRAFT\",\n cpc_bid: args.cpc_bid ? Number(args.cpc_bid) : null,\n targeting: args.targeting || null,\n };\n\n const { data, error } = await sb.from(\"google_ad_groups\").insert(row).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"list_ad_groups\": {\n const query = sb.from(\"google_ad_groups\").select(\"*\").eq(\"store_id\", storeId).order(\"created_at\", { ascending: false });\n if (args.campaign_id) query.eq(\"google_campaign_id\", args.campaign_id);\n if (args.limit) query.limit(Number(args.limit));\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"get_ad_group\": {\n const id = (args.ad_group_id || args.id) as string;\n if (!id) return { success: false, error: \"ad_group_id required\" };\n const { data, error } = await sb.from(\"google_ad_groups\").select(\"*\").eq(\"id\", id).eq(\"store_id\", storeId).single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"update_ad_group\": {\n const id = (args.ad_group_id || args.id) as string;\n if (!id) return { success: false, error: \"ad_group_id required\" };\n\n const updates: Record<string, unknown> = { updated_at: new Date().toISOString() };\n if (args.name) updates.name = args.name;\n if (args.cpc_bid) updates.cpc_bid = Number(args.cpc_bid);\n if (args.status) updates.status = args.status;\n if (args.targeting) updates.targeting = args.targeting;\n\n const { data, error } = await sb.from(\"google_ad_groups\").update(updates).eq(\"id\", id).eq(\"store_id\", storeId).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n // ====================================================================\n // ADS\n // ====================================================================\n\n case \"create_ad\": {\n const adGroupId = args.ad_group_id as string;\n if (!adGroupId) return { success: false, error: \"ad_group_id required\" };\n\n const row: Record<string, unknown> = {\n store_id: storeId,\n ad_group_id: adGroupId,\n ad_type: (args.ad_type as string) || \"RESPONSIVE_SEARCH_AD\",\n headlines: args.headlines || [],\n descriptions: args.descriptions || [],\n final_urls: args.final_urls || [],\n path1: (args.path1 as string) || null,\n path2: (args.path2 as string) || null,\n creative: args.creative || null,\n status: \"DRAFT\",\n };\n\n const { data, error } = await sb.from(\"google_ads\").insert(row).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"list_ads\": {\n const query = sb.from(\"google_ads\").select(\"*\").eq(\"store_id\", storeId).order(\"created_at\", { ascending: false });\n if (args.ad_group_id) query.eq(\"ad_group_id\", args.ad_group_id);\n if (args.limit) query.limit(Number(args.limit));\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"get_ad\": {\n const id = (args.ad_id || args.id) as string;\n if (!id) return { success: false, error: \"ad_id required\" };\n const { data, error } = await sb.from(\"google_ads\").select(\"*\").eq(\"id\", id).eq(\"store_id\", storeId).single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"update_ad\": {\n const id = (args.ad_id || args.id) as string;\n if (!id) return { success: false, error: \"ad_id required\" };\n\n const updates: Record<string, unknown> = { updated_at: new Date().toISOString() };\n if (args.headlines) updates.headlines = args.headlines;\n if (args.descriptions) updates.descriptions = args.descriptions;\n if (args.final_urls) updates.final_urls = args.final_urls;\n if (args.path1 !== undefined) updates.path1 = args.path1;\n if (args.path2 !== undefined) updates.path2 = args.path2;\n if (args.status) updates.status = args.status;\n\n const { data, error } = await sb.from(\"google_ads\").update(updates).eq(\"id\", id).eq(\"store_id\", storeId).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n // ====================================================================\n // KEYWORDS\n // ====================================================================\n\n case \"create_keyword\": {\n const adGroupId = args.ad_group_id as string;\n const text = args.text as string;\n if (!adGroupId) return { success: false, error: \"ad_group_id required\" };\n if (!text) return { success: false, error: \"text required\" };\n\n const row: Record<string, unknown> = {\n store_id: storeId,\n ad_group_id: adGroupId,\n text,\n match_type: (args.match_type as string) || \"BROAD\",\n cpc_bid: args.cpc_bid ? Number(args.cpc_bid) : null,\n status: \"DRAFT\",\n };\n\n const { data, error } = await sb.from(\"google_keywords\").insert(row).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"list_keywords\": {\n const query = sb.from(\"google_keywords\").select(\"*\").eq(\"store_id\", storeId).order(\"created_at\", { ascending: false });\n if (args.ad_group_id) query.eq(\"ad_group_id\", args.ad_group_id);\n if (args.limit) query.limit(Number(args.limit));\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"update_keyword\": {\n const id = (args.keyword_id || args.id) as string;\n if (!id) return { success: false, error: \"keyword_id required\" };\n\n const updates: Record<string, unknown> = { updated_at: new Date().toISOString() };\n if (args.text) updates.text = args.text;\n if (args.match_type) updates.match_type = args.match_type;\n if (args.cpc_bid) updates.cpc_bid = Number(args.cpc_bid);\n if (args.status) updates.status = args.status;\n\n const { data, error } = await sb.from(\"google_keywords\").update(updates).eq(\"id\", id).eq(\"store_id\", storeId).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"delete_keyword\": {\n const id = (args.keyword_id || args.id) as string;\n if (!id) return { success: false, error: \"keyword_id required\" };\n\n const { data: kw } = await sb.from(\"google_keywords\").select(\"google_criterion_id, ad_group_id\").eq(\"id\", id).eq(\"store_id\", storeId).single();\n if (kw?.google_criterion_id) {\n try {\n const int = await getIntegration(sb, storeId);\n const { data: ag } = await sb.from(\"google_ad_groups\").select(\"google_ad_group_id\").eq(\"id\", kw.ad_group_id).eq(\"store_id\", storeId).single();\n if (ag?.google_ad_group_id) {\n await mutate(int, \"adGroupCriteria\", [{\n remove: `customers/${int.customerId}/adGroupCriteria/${ag.google_ad_group_id}~${kw.google_criterion_id}`,\n }], sb, storeId);\n }\n } catch { /* best-effort */ }\n }\n\n const { error } = await sb.from(\"google_keywords\").delete().eq(\"id\", id).eq(\"store_id\", storeId);\n if (error) return { success: false, error: error.message };\n return { success: true, data: { deleted: id } };\n }\n\n // ====================================================================\n // PUBLISH — push drafts to Google Ads\n // ====================================================================\n\n case \"publish\": {\n const int = await getIntegration(sb, storeId);\n const type = (args.type as string) || \"campaign\";\n const id = (args.id || args.campaign_id || args.ad_group_id || args.ad_id) as string;\n if (!id) return { success: false, error: \"id required\" };\n\n switch (type) {\n case \"campaign\": {\n const result = await publishCampaignToGoogle(sb, int, storeId, id);\n // Also publish keywords for all ad groups in this campaign\n const { data: adGroups } = await sb.from(\"google_ad_groups\").select(\"id\").eq(\"google_campaign_id\", id).eq(\"store_id\", storeId);\n let keywordsPublished = 0;\n for (const ag of adGroups || []) {\n try {\n const kResult = await publishKeywordsToGoogle(sb, int, storeId, ag.id);\n keywordsPublished += kResult.published;\n } catch { /* non-fatal */ }\n }\n return { success: true, data: { ...result, keywordsPublished } };\n }\n case \"ad_group\": {\n const result = await publishAdGroupToGoogle(sb, int, storeId, id);\n const kResult = await publishKeywordsToGoogle(sb, int, storeId, id);\n return { success: true, data: { ...result, keywordsPublished: kResult.published } };\n }\n case \"ad\": {\n const result = await publishAdToGoogle(sb, int, storeId, id);\n return { success: true, data: result };\n }\n case \"conversion_action\": {\n const result = await publishConversionAction(sb, int, storeId, id);\n return { success: true, data: result };\n }\n default:\n return { success: false, error: `Unknown publish type: ${type}. Use campaign, ad_group, ad, or conversion_action.` };\n }\n }\n\n // ====================================================================\n // PAUSE / ENABLE — change status on Google\n // ====================================================================\n\n case \"pause\":\n case \"enable\": {\n const int = await getIntegration(sb, storeId);\n const type = (args.type as string) || \"campaign\";\n const id = (args.id || args.campaign_id || args.ad_group_id) as string;\n if (!id) return { success: false, error: \"id required\" };\n const newStatus = action === \"pause\" ? \"PAUSED\" : \"ENABLED\";\n\n if (type === \"campaign\") {\n const { data: c } = await sb.from(\"google_campaigns\").select(\"google_campaign_id\").eq(\"id\", id).eq(\"store_id\", storeId).single();\n if (!c?.google_campaign_id || isLocalId(c.google_campaign_id)) {\n return { success: false, error: \"Campaign not published to Google yet\" };\n }\n await mutate(int, \"campaigns\", [{\n update: { resourceName: `customers/${int.customerId}/campaigns/${c.google_campaign_id}`, status: newStatus },\n updateMask: \"status\",\n }], sb, storeId);\n await sb.from(\"google_campaigns\").update({ google_status: newStatus, updated_at: new Date().toISOString() }).eq(\"id\", id).eq(\"store_id\", storeId);\n return { success: true, data: { status: newStatus } };\n }\n\n if (type === \"ad_group\") {\n const { data: ag } = await sb.from(\"google_ad_groups\").select(\"google_ad_group_id\").eq(\"id\", id).eq(\"store_id\", storeId).single();\n if (!ag?.google_ad_group_id || isLocalId(ag.google_ad_group_id)) {\n return { success: false, error: \"Ad group not published to Google yet\" };\n }\n await mutate(int, \"adGroups\", [{\n update: { resourceName: `customers/${int.customerId}/adGroups/${ag.google_ad_group_id}`, status: newStatus },\n updateMask: \"status\",\n }], sb, storeId);\n await sb.from(\"google_ad_groups\").update({ google_status: newStatus, updated_at: new Date().toISOString() }).eq(\"id\", id).eq(\"store_id\", storeId);\n return { success: true, data: { status: newStatus } };\n }\n\n return { success: false, error: `Unknown type: ${type}` };\n }\n\n // ====================================================================\n // SYNC — pull metrics from Google into local DB\n // ====================================================================\n\n case \"sync\": {\n const int = await getIntegration(sb, storeId);\n const dateRange = (args.date_range as string) || \"LAST_30_DAYS\";\n const result = await syncCampaignMetrics(sb, int, storeId, dateRange);\n return { success: true, data: result };\n }\n\n // ====================================================================\n // SEARCH — raw GAQL queries\n // ====================================================================\n\n case \"search\": {\n const query = args.query as string;\n if (!query) return { success: false, error: \"query (GAQL) required\" };\n\n const int = await getIntegration(sb, storeId);\n const customerId = (args.customer_id as string) || int.customerId;\n const results = await gaqlSearch(int, query, customerId);\n return { success: true, data: { results, totalResults: results.length } };\n }\n\n // ====================================================================\n // LIST ACCESSIBLE CUSTOMERS\n // ====================================================================\n\n case \"list_accessible_customers\": {\n const int = await getIntegration(sb, storeId);\n const res = await fetch(`${GOOGLE_ADS_BASE}/customers:listAccessibleCustomers`, {\n method: \"GET\",\n headers: authHeaders(int),\n });\n\n if (!res.ok) {\n const errBody = await res.text();\n throw new Error(`listAccessibleCustomers failed (${res.status}): ${parseGoogleError(errBody, res.status)}`);\n }\n\n const data = await res.json();\n return { success: true, data };\n }\n\n // ====================================================================\n // CONVERSION ACTIONS\n // ====================================================================\n\n case \"create_conversion_action\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name required\" };\n\n const row: Record<string, unknown> = {\n store_id: storeId,\n name,\n category: (args.category as string) || \"PURCHASE\",\n counting_type: (args.counting_type as string) || \"ONE_PER_CLICK\",\n attribution_model: (args.attribution_model as string) || \"GOOGLE_LAST_CLICK\",\n default_value: args.default_value ? Number(args.default_value) : null,\n status: \"DRAFT\",\n };\n\n const { data, error } = await sb.from(\"google_conversion_actions\").insert(row).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"list_conversion_actions\": {\n const { data, error } = await sb.from(\"google_conversion_actions\").select(\"*\").eq(\"store_id\", storeId).order(\"created_at\", { ascending: false });\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n // ====================================================================\n // AUDIENCES\n // ====================================================================\n\n case \"create_audience\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name required\" };\n const audienceType = (args.audience_type as string) || \"REMARKETING\";\n const description = (args.description as string) || null;\n\n if (audienceType === \"CUSTOMER_MATCH\") {\n // Create user list in Google Ads + upload segment members\n const int = await getIntegration(sb, storeId);\n int.accessToken = await refreshAccessToken(sb, storeId, int.refreshToken, int.clientId, int.clientSecret);\n\n // 1. Create the user list in Google Ads\n const createResult = await mutate(int, \"userLists\", [{\n create: {\n name,\n description: description || name,\n membershipLifeSpan: 540, // 18 months max\n crmBasedUserList: {\n uploadKeyType: \"CONTACT_INFO\",\n dataSourceType: \"FIRST_PARTY\",\n },\n },\n }], sb, storeId);\n\n const results = (createResult as { results?: Array<{ resourceName?: string }> }).results || [];\n const resourceName = results[0]?.resourceName || null;\n const googleAudienceId = resourceName ? resourceName.split(\"/\").pop() : null;\n\n // 2. Save locally\n const { data, error } = await sb.from(\"google_audiences\").insert({\n store_id: storeId, name, audience_type: audienceType,\n description, google_audience_id: googleAudienceId,\n status: googleAudienceId ? \"OPEN\" : \"DRAFT\",\n }).select().single();\n if (error) return { success: false, error: error.message };\n\n // 3. If a segment_id was provided, upload members immediately\n const segmentId = args.segment_id as string;\n if (segmentId && googleAudienceId) {\n const uploadResult = await uploadSegmentToGoogleAudience(sb, int, storeId, segmentId, resourceName!);\n return { success: true, data: { ...data, google_audience_id: googleAudienceId, resource_name: resourceName, upload: uploadResult } };\n }\n\n return { success: true, data: { ...data, google_audience_id: googleAudienceId, resource_name: resourceName } };\n }\n\n // Non-Customer Match: just save locally\n const { data, error } = await sb.from(\"google_audiences\").insert({\n store_id: storeId, name, audience_type: audienceType, description, status: \"DRAFT\",\n }).select().single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n case \"sync_audience\": {\n // Upload/refresh segment members to an existing Google Customer Match audience\n const audienceId = (args.audience_id || args.id) as string;\n const segmentId = args.segment_id as string;\n if (!audienceId) return { success: false, error: \"audience_id required\" };\n if (!segmentId) return { success: false, error: \"segment_id required\" };\n\n const { data: aud } = await sb.from(\"google_audiences\").select(\"*\").eq(\"id\", audienceId).single();\n if (!aud) return { success: false, error: \"Audience not found\" };\n if (!aud.google_audience_id) return { success: false, error: \"Audience not yet published to Google — use create_audience with CUSTOMER_MATCH type\" };\n\n const int = await getIntegration(sb, storeId);\n int.accessToken = await refreshAccessToken(sb, storeId, int.refreshToken, int.clientId, int.clientSecret);\n const resourceName = `customers/${int.customerId}/userLists/${aud.google_audience_id}`;\n const result = await uploadSegmentToGoogleAudience(sb, int, storeId, segmentId, resourceName);\n\n // Update member count\n await sb.from(\"google_audiences\").update({ member_count: result.membersUploaded, updated_at: new Date().toISOString() }).eq(\"id\", audienceId);\n\n return { success: true, data: result };\n }\n\n case \"list_audiences\": {\n const { data, error } = await sb.from(\"google_audiences\").select(\"*\").eq(\"store_id\", storeId).order(\"created_at\", { ascending: false });\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n // ====================================================================\n // KEYWORD IDEAS (Keyword Planner)\n // ====================================================================\n\n case \"keyword_ideas\": {\n const int = await getIntegration(sb, storeId);\n const keywords = args.keywords as string[];\n const url = args.url as string;\n\n if (!keywords?.length && !url) {\n return { success: false, error: \"Provide keywords (array) or url for keyword ideas\" };\n }\n\n const body: Record<string, unknown> = {\n language: (args.language as string) || \"languageConstants/1000\", // English\n geoTargetConstants: (args.geo_targets as string[]) || [\"geoTargetConstants/2840\"], // US\n keywordPlanNetwork: \"GOOGLE_SEARCH\",\n };\n\n if (keywords?.length) {\n body.keywordSeed = { keywords };\n }\n if (url) {\n body.urlSeed = { url };\n }\n\n const res = await fetch(\n `${GOOGLE_ADS_BASE}/customers/${int.customerId}:generateKeywordIdeas`,\n {\n method: \"POST\",\n headers: authHeaders(int),\n body: JSON.stringify(body),\n },\n );\n\n if (!res.ok) {\n const errBody = await res.text();\n throw new Error(`Keyword ideas failed (${res.status}): ${parseGoogleError(errBody, res.status)}`);\n }\n\n const data = await res.json();\n return { success: true, data };\n }\n\n // ====================================================================\n // CREATE FULL — campaign + ad group + ad + keywords in one call\n // ====================================================================\n\n case \"create_full\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name required\" };\n\n // 1. Create campaign\n const campaignRow: Record<string, unknown> = {\n store_id: storeId,\n name,\n campaign_type: (args.campaign_type as string) || \"SEARCH\",\n status: \"DRAFT\",\n daily_budget: args.daily_budget ? Number(args.daily_budget) : 10,\n bidding_strategy: (args.bidding_strategy as string) || \"MAXIMIZE_CLICKS\",\n bidding_target: args.bidding_target ? Number(args.bidding_target) : null,\n start_date: (args.start_date as string) || null,\n end_date: (args.end_date as string) || null,\n };\n const { data: campaign, error: campErr } = await sb.from(\"google_campaigns\").insert(campaignRow).select().single();\n if (campErr) return { success: false, error: campErr.message };\n\n // 2. Create ad group\n const adGroupRow: Record<string, unknown> = {\n store_id: storeId,\n google_campaign_id: campaign.id,\n name: (args.ad_group_name as string) || `${name} — Ad Group`,\n ad_group_type: (args.ad_group_type as string) || \"SEARCH_STANDARD\",\n status: \"DRAFT\",\n cpc_bid: args.cpc_bid ? Number(args.cpc_bid) : null,\n };\n const { data: adGroup, error: agErr } = await sb.from(\"google_ad_groups\").insert(adGroupRow).select().single();\n if (agErr) return { success: false, error: agErr.message };\n\n // 3. Create ad\n const adRow: Record<string, unknown> = {\n store_id: storeId,\n ad_group_id: adGroup.id,\n ad_type: (args.ad_type as string) || \"RESPONSIVE_SEARCH_AD\",\n headlines: args.headlines || [],\n descriptions: args.descriptions || [],\n final_urls: args.final_urls || [],\n path1: (args.path1 as string) || null,\n path2: (args.path2 as string) || null,\n creative: args.creative || null,\n status: \"DRAFT\",\n };\n const { data: ad, error: adErr } = await sb.from(\"google_ads\").insert(adRow).select().single();\n if (adErr) return { success: false, error: adErr.message };\n\n // 4. Create keywords (if provided)\n const keywords = args.keywords as Array<{ text: string; match_type?: string }>;\n let keywordCount = 0;\n if (keywords?.length) {\n const kwRows = keywords.map((kw) => ({\n store_id: storeId,\n ad_group_id: adGroup.id,\n text: kw.text,\n match_type: kw.match_type || \"BROAD\",\n status: \"DRAFT\",\n }));\n const { error: kwErr } = await sb.from(\"google_keywords\").insert(kwRows);\n if (kwErr) throw new Error(`Failed to insert keywords: ${kwErr.message}`);\n keywordCount = kwRows.length;\n }\n\n // 5. Auto-publish if requested\n let published = false;\n if (args.auto_publish) {\n try {\n const int = await getIntegration(sb, storeId);\n // PMax: publishCampaignToGoogle handles everything (asset group, assets, links)\n await publishCampaignToGoogle(sb, int, storeId, campaign.id);\n if (campaignRow.campaign_type !== \"PERFORMANCE_MAX\") {\n await publishAdGroupToGoogle(sb, int, storeId, adGroup.id);\n await publishAdToGoogle(sb, int, storeId, ad.id);\n await publishKeywordsToGoogle(sb, int, storeId, adGroup.id);\n }\n published = true;\n } catch (pubErr) {\n return {\n success: true,\n data: {\n campaign, adGroup, ad, keywordCount,\n published: false,\n publishError: pubErr instanceof Error ? pubErr.message : String(pubErr),\n },\n };\n }\n }\n\n return {\n success: true,\n data: { campaign, adGroup, ad, keywordCount, published },\n };\n }\n\n // ====================================================================\n // DEFAULT\n // ====================================================================\n\n default:\n return { success: false, error: `Unknown action: ${action}. Valid actions: create_campaign, list_campaigns, get_campaign, update_campaign, delete_campaign, create_ad_group, list_ad_groups, get_ad_group, update_ad_group, create_ad, list_ads, get_ad, update_ad, create_keyword, list_keywords, update_keyword, delete_keyword, publish, pause, enable, sync, search, list_accessible_customers, keyword_ideas, create_conversion_action, list_conversion_actions, create_audience, list_audiences, create_full` };\n }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) };\n }\n}\n"],"mappings":"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","ignoreList":[]}