whale-code 6.5.10 → 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 (627) 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/commands/doctor.js +1 -6
  20. package/dist/cli/commands/doctor.js.map +1 -1
  21. package/dist/cli/services/agent-loop-tools.js +11 -2
  22. package/dist/cli/services/agent-loop-tools.js.map +1 -1
  23. package/dist/cli/services/agent-loop.js +1 -1
  24. package/dist/cli/services/agent-loop.js.map +1 -1
  25. package/dist/cli/services/cli-agent-loop.js +3 -2
  26. package/dist/cli/services/cli-agent-loop.js.map +1 -1
  27. package/dist/cli/services/config-store.d.ts +8 -10
  28. package/dist/cli/services/config-store.js +14 -13
  29. package/dist/cli/services/config-store.js.map +1 -1
  30. package/dist/cli/services/memory-manager.js +2 -2
  31. package/dist/cli/services/memory-manager.js.map +1 -1
  32. package/dist/cli/services/permission-modes.js +14 -10
  33. package/dist/cli/services/permission-modes.js.map +1 -1
  34. package/dist/cli/services/session-client.js +2 -1
  35. package/dist/cli/services/session-client.js.map +1 -1
  36. package/dist/cli/services/session-persistence.js +14 -6
  37. package/dist/cli/services/session-persistence.js.map +1 -1
  38. package/dist/cli/setup/SetupApp.d.ts +2 -2
  39. package/dist/cli/setup/SetupApp.js +91 -254
  40. package/dist/cli/setup/SetupApp.js.map +1 -1
  41. package/dist/cli/shared/SpinnerSlot.js +4 -1
  42. package/dist/cli/shared/SpinnerSlot.js.map +1 -1
  43. package/dist/cli/status/StatusApp.js +3 -3
  44. package/dist/cli/status/StatusApp.js.map +1 -1
  45. package/dist/index.js +13 -3
  46. package/dist/index.js.map +1 -1
  47. package/dist/server/handlers/browser-lifecycle.js +10 -0
  48. package/dist/server/handlers/browser-lifecycle.js.map +1 -1
  49. package/dist/server/handlers/browser.js +16 -1
  50. package/dist/server/handlers/browser.js.map +1 -1
  51. package/dist/server/handlers/campaigns.js +11 -0
  52. package/dist/server/handlers/campaigns.js.map +1 -1
  53. package/dist/server/handlers/catalog-products.js +19 -5
  54. package/dist/server/handlers/catalog-products.js.map +1 -1
  55. package/dist/server/handlers/catalog.js +42 -8
  56. package/dist/server/handlers/catalog.js.map +1 -1
  57. package/dist/server/handlers/clickhouse.js +4 -4
  58. package/dist/server/handlers/clickhouse.js.map +1 -1
  59. package/dist/server/handlers/comms-email.js +70 -8
  60. package/dist/server/handlers/comms-email.js.map +1 -1
  61. package/dist/server/handlers/comms.js +63 -21
  62. package/dist/server/handlers/comms.js.map +1 -1
  63. package/dist/server/handlers/coupons.js +141 -77
  64. package/dist/server/handlers/coupons.js.map +1 -1
  65. package/dist/server/handlers/google-ads.js +280 -8
  66. package/dist/server/handlers/google-ads.js.map +1 -1
  67. package/dist/server/handlers/remove-bg.d.ts +33 -0
  68. package/dist/server/handlers/remove-bg.js +698 -44
  69. package/dist/server/handlers/remove-bg.js.map +1 -1
  70. package/dist/server/handlers/supply-chain.js +93 -1
  71. package/dist/server/handlers/supply-chain.js.map +1 -1
  72. package/dist/server/handlers/workflow-steps-types.d.ts +1 -1
  73. package/dist/server/handlers/workflow-steps-types.js +7 -1
  74. package/dist/server/handlers/workflow-steps-types.js.map +1 -1
  75. package/dist/server/handlers/workflow-steps.js +1 -1
  76. package/dist/server/handlers/workflow-steps.js.map +1 -1
  77. package/dist/server/index.js +122 -29
  78. package/dist/server/index.js.map +1 -1
  79. package/dist/server/lib/agent-loop-turn.js +33 -3
  80. package/dist/server/lib/agent-loop-turn.js.map +1 -1
  81. package/dist/server/lib/agent-loop-types.d.ts +6 -2
  82. package/dist/server/lib/agent-loop-types.js +14 -2
  83. package/dist/server/lib/agent-loop-types.js.map +1 -1
  84. package/dist/server/lib/clickhouse-client.js +4 -2
  85. package/dist/server/lib/clickhouse-client.js.map +1 -1
  86. package/dist/server/lib/code-worker.js +4 -1
  87. package/dist/server/lib/code-worker.js.map +1 -1
  88. package/dist/server/providers/anthropic.js +103 -33
  89. package/dist/server/providers/anthropic.js.map +1 -1
  90. package/dist/server/server-chat.js +2 -2
  91. package/dist/server/server-chat.js.map +1 -1
  92. package/dist/server/server-helpers.d.ts +8 -1
  93. package/dist/server/server-helpers.js +17 -3
  94. package/dist/server/server-helpers.js.map +1 -1
  95. package/dist/server/server-persist.js +34 -21
  96. package/dist/server/server-persist.js.map +1 -1
  97. package/dist/server/server-rate-limit.d.ts +0 -1
  98. package/dist/server/server-rate-limit.js +5 -5
  99. package/dist/server/server-rate-limit.js.map +1 -1
  100. package/dist/server/server-routes-approvals.js +2 -2
  101. package/dist/server/server-routes-approvals.js.map +1 -1
  102. package/dist/server/server-routes-auth.js +2 -2
  103. package/dist/server/server-routes-auth.js.map +1 -1
  104. package/dist/server/server-routes-events.js +2 -2
  105. package/dist/server/server-routes-events.js.map +1 -1
  106. package/dist/server/server-routes-public.js +4 -4
  107. package/dist/server/server-routes-public.js.map +1 -1
  108. package/dist/server/server-routes-webchat.js +3 -3
  109. package/dist/server/server-routes-webchat.js.map +1 -1
  110. package/dist/server/server-store-circuit-breaker.js +1 -1
  111. package/dist/server/server-store-circuit-breaker.js.map +1 -1
  112. package/dist/server/tool-router.js +7 -4
  113. package/dist/server/tool-router.js.map +1 -1
  114. package/dist/server/validation.js +11 -0
  115. package/dist/server/validation.js.map +1 -1
  116. package/dist/setup.js +5 -25
  117. package/dist/setup.js.map +1 -1
  118. package/dist/shared/api-client.js +38 -11
  119. package/dist/shared/api-client.js.map +1 -1
  120. package/package.json +12 -10
  121. package/vendor/ink/build/ink.js +68 -24
  122. package/vendor/ink/node_modules/react-devtools-core/README.md +152 -0
  123. package/vendor/ink/node_modules/react-devtools-core/backend.js +1 -0
  124. package/vendor/ink/node_modules/react-devtools-core/dist/648.chunk.js +2 -0
  125. package/vendor/ink/node_modules/react-devtools-core/dist/648.chunk.js.map +1 -0
  126. package/vendor/ink/node_modules/react-devtools-core/dist/backend.js +15691 -0
  127. package/vendor/ink/node_modules/react-devtools-core/dist/backend.js.map +1 -0
  128. package/vendor/ink/node_modules/react-devtools-core/dist/importFile.worker.worker.js +2 -0
  129. package/vendor/ink/node_modules/react-devtools-core/dist/importFile.worker.worker.js.map +1 -0
  130. package/vendor/ink/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js +14 -0
  131. package/vendor/ink/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js.map +1 -0
  132. package/vendor/ink/node_modules/react-devtools-core/dist/standalone.js +2 -0
  133. package/vendor/ink/node_modules/react-devtools-core/dist/standalone.js.map +1 -0
  134. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/LICENSE +21 -0
  135. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/README.md +495 -0
  136. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/browser.js +8 -0
  137. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/index.js +10 -0
  138. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/buffer-util.js +129 -0
  139. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/constants.js +10 -0
  140. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/event-target.js +184 -0
  141. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/extension.js +223 -0
  142. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/limiter.js +55 -0
  143. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/permessage-deflate.js +518 -0
  144. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/receiver.js +607 -0
  145. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/sender.js +409 -0
  146. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/stream.js +180 -0
  147. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/validation.js +104 -0
  148. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/websocket-server.js +449 -0
  149. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/websocket.js +1197 -0
  150. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/package.json +56 -0
  151. package/vendor/ink/node_modules/react-devtools-core/package.json +38 -0
  152. package/vendor/ink/node_modules/react-devtools-core/standalone.js +1 -0
  153. package/dist/cli/__tests__/print-mode-streaming.test.js +0 -270
  154. package/dist/cli/__tests__/print-mode.basic-output.test.js +0 -230
  155. package/dist/cli/__tests__/print-mode.session-errors.test.js +0 -252
  156. package/dist/cli/__tests__/print-mode.test.js +0 -273
  157. package/dist/cli/__tests__/serve-mode-messages.test.js +0 -338
  158. package/dist/cli/__tests__/serve-mode.messages.part2.test.js +0 -266
  159. package/dist/cli/__tests__/serve-mode.messages.test.js +0 -277
  160. package/dist/cli/__tests__/serve-mode.startup-http.test.js +0 -279
  161. package/dist/cli/__tests__/serve-mode.test.js +0 -345
  162. package/dist/cli/chat/NodeManager.d.ts +0 -30
  163. package/dist/cli/chat/NodeManager.js +0 -66
  164. package/dist/cli/chat/NodeManager.js.map +0 -1
  165. package/dist/cli/chat/chat-input-menu-handler.d.ts +0 -32
  166. package/dist/cli/chat/hooks/slash-imsg-handlers.js +0 -148
  167. package/dist/cli/chat/hooks/slash-imsg-handlers.js.map +0 -1
  168. package/dist/cli/chat/hooks/useStreamingReducer.d.ts +0 -66
  169. package/dist/cli/commands/__tests__/config-cmd.test.js +0 -270
  170. package/dist/cli/commands/__tests__/doctor.test.js +0 -257
  171. package/dist/cli/commands/__tests__/imsg-node-bridge.test.js +0 -99
  172. package/dist/cli/commands/__tests__/imsg-utils.test.js +0 -73
  173. package/dist/cli/commands/__tests__/init.test.js +0 -214
  174. package/dist/cli/commands/__tests__/mcp.test.js +0 -287
  175. package/dist/cli/commands/imsg-watcher-helpers.d.ts +0 -40
  176. package/dist/cli/commands/imsg-watcher-helpers.js +0 -184
  177. package/dist/cli/commands/imsg-watcher-helpers.js.map +0 -1
  178. package/dist/cli/commands/imsg-watcher.d.ts +0 -11
  179. package/dist/cli/commands/imsg-watcher.js +0 -230
  180. package/dist/cli/commands/imsg-watcher.js.map +0 -1
  181. package/dist/cli/services/__tests__/agent-definitions.test.js +0 -153
  182. package/dist/cli/services/__tests__/agent-events-global.test.js +0 -39
  183. package/dist/cli/services/__tests__/agent-events.part2.test.js +0 -113
  184. package/dist/cli/services/__tests__/agent-events.test.js +0 -157
  185. package/dist/cli/services/__tests__/agent-loop-auth.test.js +0 -392
  186. package/dist/cli/services/__tests__/agent-loop-budget.test.js +0 -389
  187. package/dist/cli/services/__tests__/agent-loop-tools-lifecycle.test.js +0 -430
  188. package/dist/cli/services/__tests__/agent-loop-tools-maxturns.test.js +0 -486
  189. package/dist/cli/services/__tests__/agent-loop-utils-execution.test.js +0 -528
  190. package/dist/cli/services/__tests__/agent-loop-utils-helpers.test.js +0 -466
  191. package/dist/cli/services/__tests__/agent-worker-base-execute.test.js +0 -257
  192. package/dist/cli/services/__tests__/agent-worker-base-helpers.test.js +0 -198
  193. package/dist/cli/services/__tests__/agent-worker-base.test.js +0 -278
  194. package/dist/cli/services/__tests__/auth-service-exports.test.js +0 -41
  195. package/dist/cli/services/__tests__/auth-service.part2.test.js +0 -169
  196. package/dist/cli/services/__tests__/auth-service.test.js +0 -242
  197. package/dist/cli/services/__tests__/background-processes.test.js +0 -282
  198. package/dist/cli/services/__tests__/claude-md-loader.test.js +0 -134
  199. package/dist/cli/services/__tests__/config-store.test.js +0 -247
  200. package/dist/cli/services/__tests__/debug-log.test.js +0 -199
  201. package/dist/cli/services/__tests__/edge-cases-caching.test.js +0 -174
  202. package/dist/cli/services/__tests__/edge-cases-compaction-core.test.js +0 -226
  203. package/dist/cli/services/__tests__/edge-cases-compaction-openai.test.js +0 -152
  204. package/dist/cli/services/__tests__/edge-cases-compaction-shapes.test.js +0 -53
  205. package/dist/cli/services/__tests__/edge-cases-compaction-thinking.test.js +0 -226
  206. package/dist/cli/services/__tests__/edge-cases-compaction.test.js +0 -131
  207. package/dist/cli/services/__tests__/edge-cases-paths.test.js +0 -86
  208. package/dist/cli/services/__tests__/error-logger-messages.test.js +0 -81
  209. package/dist/cli/services/__tests__/error-logger-transport.test.js +0 -119
  210. package/dist/cli/services/__tests__/error-logger.test.js +0 -264
  211. package/dist/cli/services/__tests__/file-history.test.js +0 -136
  212. package/dist/cli/services/__tests__/git-context-cache-reset.test.js +0 -223
  213. package/dist/cli/services/__tests__/git-context.test.js +0 -241
  214. package/dist/cli/services/__tests__/interactive-tools-execute.test.js +0 -166
  215. package/dist/cli/services/__tests__/interactive-tools-plan.test.js +0 -197
  216. package/dist/cli/services/__tests__/interactive-tools.part2.test.js +0 -168
  217. package/dist/cli/services/__tests__/interactive-tools.test.js +0 -179
  218. package/dist/cli/services/__tests__/keybinding-manager.test.js +0 -205
  219. package/dist/cli/services/__tests__/local-tools-dispatch.test.js +0 -404
  220. package/dist/cli/services/__tests__/local-tools.test.js +0 -238
  221. package/dist/cli/services/__tests__/lsp-manager.test.js +0 -364
  222. package/dist/cli/services/__tests__/mcp-client-connect-disconnect.test.js +0 -310
  223. package/dist/cli/services/__tests__/mcp-client.test.js +0 -93
  224. package/dist/cli/services/__tests__/memory-manager.test.js +0 -154
  225. package/dist/cli/services/__tests__/model-manager-utils.test.js +0 -154
  226. package/dist/cli/services/__tests__/model-manager.test.js +0 -175
  227. package/dist/cli/services/__tests__/permission-modes.test.js +0 -222
  228. package/dist/cli/services/__tests__/ripgrep.test.js +0 -328
  229. package/dist/cli/services/__tests__/server-tools-execute.test.js +0 -317
  230. package/dist/cli/services/__tests__/server-tools.test.js +0 -272
  231. package/dist/cli/services/__tests__/session-persistence.test.js +0 -245
  232. package/dist/cli/services/__tests__/subagent-basic.test.js +0 -489
  233. package/dist/cli/services/__tests__/subagent-edge.test.js +0 -545
  234. package/dist/cli/services/__tests__/subagent-prompts.test.js +0 -558
  235. package/dist/cli/services/__tests__/subagent-worker-errors.test.js +0 -255
  236. package/dist/cli/services/__tests__/subagent-worker.test.js +0 -242
  237. package/dist/cli/services/__tests__/system-prompt.test.js +0 -210
  238. package/dist/cli/services/__tests__/team-lead-comms-messaging.test.js +0 -250
  239. package/dist/cli/services/__tests__/team-lead-comms-result.test.js +0 -232
  240. package/dist/cli/services/__tests__/team-lead-comms-stop.test.js +0 -344
  241. package/dist/cli/services/__tests__/team-lead-comms.test.js +0 -285
  242. package/dist/cli/services/__tests__/team-lead-create.test.js +0 -327
  243. package/dist/cli/services/__tests__/team-lead-run.test.js +0 -318
  244. package/dist/cli/services/__tests__/team-lead-stop.test.js +0 -199
  245. package/dist/cli/services/__tests__/team-state-comms.test.js +0 -240
  246. package/dist/cli/services/__tests__/team-state-core.test.js +0 -230
  247. package/dist/cli/services/__tests__/team-state-tasks-complete-fail-available.test.js +0 -224
  248. package/dist/cli/services/__tests__/team-state-tasks.test.js +0 -184
  249. package/dist/cli/services/__tests__/telemetry-ai-metadata.test.js +0 -116
  250. package/dist/cli/services/__tests__/telemetry.part2.test.js +0 -195
  251. package/dist/cli/services/__tests__/telemetry.test.js +0 -176
  252. package/dist/cli/services/agent-loop-iteration.d.ts +0 -13
  253. package/dist/cli/services/agent-loop-setup.d.ts +0 -32
  254. package/dist/cli/services/agent-worker-base-api.d.ts +0 -19
  255. package/dist/cli/services/agent-worker-base-helpers.d.ts +0 -27
  256. package/dist/cli/services/agent-worker-base-tools.d.ts +0 -16
  257. package/dist/cli/services/agent-worker-base-types.d.ts +0 -81
  258. package/dist/cli/services/background-agents.d.ts +0 -26
  259. package/dist/cli/services/background-processes-ops.d.ts +0 -24
  260. package/dist/cli/services/background-tool-defs.d.ts +0 -50
  261. package/dist/cli/services/config-modules-model.test.js +0 -133
  262. package/dist/cli/services/config-modules-permission.test.js +0 -85
  263. package/dist/cli/services/config-modules-permissions.test.js +0 -85
  264. package/dist/cli/services/config-modules-session.test.js +0 -297
  265. package/dist/cli/services/format-server-response-columns.test.js +0 -265
  266. package/dist/cli/services/format-server-response-fallback.test.js +0 -65
  267. package/dist/cli/services/format-server-response-primitives-basic.test.js +0 -261
  268. package/dist/cli/services/format-server-response-primitives-nested.test.js +0 -188
  269. package/dist/cli/services/format-server-response-primitives.test.js +0 -300
  270. package/dist/cli/services/format-server-response-realworld.test.js +0 -248
  271. package/dist/cli/services/format-server-response-values.test.js +0 -247
  272. package/dist/cli/services/hooks-runners.test.js +0 -184
  273. package/dist/cli/services/hooks.glob-load.test.js +0 -233
  274. package/dist/cli/services/hooks.run-hooks.test.js +0 -184
  275. package/dist/cli/services/hooks.test.js +0 -233
  276. package/dist/cli/services/ink-incremental.d.ts +0 -19
  277. package/dist/cli/services/ink-incremental.js +0 -59
  278. package/dist/cli/services/ink-incremental.js.map +0 -1
  279. package/dist/cli/services/ink-resize-fix.d.ts +0 -18
  280. package/dist/cli/services/ink-resize-fix.js +0 -76
  281. package/dist/cli/services/ink-resize-fix.js.map +0 -1
  282. package/dist/cli/services/ink-sync-output.d.ts +0 -12
  283. package/dist/cli/services/ink-sync-output.js +0 -16
  284. package/dist/cli/services/ink-sync-output.js.map +0 -1
  285. package/dist/cli/services/interactive-tool-defs.d.ts +0 -80
  286. package/dist/cli/services/local-tools-definitions.d.ts +0 -6
  287. package/dist/cli/services/local-tools-files.test.js +0 -256
  288. package/dist/cli/services/local-tools-read-many.d.ts +0 -6
  289. package/dist/cli/services/model-router.test.js +0 -245
  290. package/dist/cli/services/rewind-rewindTo.test.js +0 -202
  291. package/dist/cli/services/rewind.test.js +0 -175
  292. package/dist/cli/services/sandbox.test.js +0 -198
  293. package/dist/cli/services/subagent-execution.d.ts +0 -12
  294. package/dist/cli/services/team-lead-auto.d.ts +0 -11
  295. package/dist/cli/services/team-lead-execution.d.ts +0 -28
  296. package/dist/cli/services/teammate-loop.js +0 -557
  297. package/dist/cli/services/teammate-loop.js.map +0 -1
  298. package/dist/cli/services/tools/__tests__/agent-tools-tasks-teams.test.js +0 -250
  299. package/dist/cli/services/tools/__tests__/agent-tools-teams.test.js +0 -200
  300. package/dist/cli/services/tools/__tests__/agent-tools.test.js +0 -340
  301. package/dist/cli/services/tools/__tests__/file-ops-cache.test.js +0 -152
  302. package/dist/cli/services/tools/__tests__/file-ops-notebook.test.js +0 -249
  303. package/dist/cli/services/tools/__tests__/file-ops-read.test.js +0 -261
  304. package/dist/cli/services/tools/__tests__/file-ops-write.test.js +0 -292
  305. package/dist/cli/services/tools/__tests__/search-tools-rg.test.js +0 -92
  306. package/dist/cli/services/tools/__tests__/search-tools.part2.test.js +0 -174
  307. package/dist/cli/services/tools/__tests__/search-tools.test.js +0 -227
  308. package/dist/cli/services/tools/__tests__/shell-exec-allowed-core.test.js +0 -163
  309. package/dist/cli/services/tools/__tests__/shell-exec-allowed-extended.test.js +0 -220
  310. package/dist/cli/services/tools/__tests__/shell-exec-allowed.part2.test.js +0 -215
  311. package/dist/cli/services/tools/__tests__/shell-exec-allowed.test.js +0 -154
  312. package/dist/cli/services/tools/__tests__/shell-exec-blocked.test.js +0 -132
  313. package/dist/cli/services/tools/__tests__/shell-exec-execution.test.js +0 -245
  314. package/dist/cli/services/tools/__tests__/task-manager-create.test.js +0 -110
  315. package/dist/cli/services/tools/__tests__/task-manager-crud.test.js +0 -339
  316. package/dist/cli/services/tools/__tests__/task-manager-list-get.test.js +0 -343
  317. package/dist/cli/services/tools/__tests__/task-manager-query.test.js +0 -346
  318. package/dist/cli/services/tools/__tests__/task-manager-routing.test.js +0 -58
  319. package/dist/cli/services/tools/__tests__/task-manager-update.test.js +0 -224
  320. package/dist/cli/services/tools/__tests__/task-manager.test.js +0 -159
  321. package/dist/cli/services/tools/__tests__/web-tools-html-search.test.js +0 -227
  322. package/dist/cli/services/tools/__tests__/web-tools.test.js +0 -285
  323. package/dist/cli/services/tools/shell-exec.test.js +0 -148
  324. package/dist/cli/shared/SharedTick.d.ts +0 -10
  325. package/dist/cli/shared/__tests__/markdown.test.js +0 -188
  326. package/dist/local-agent/__tests__/connection-disconnect.test.js +0 -201
  327. package/dist/local-agent/__tests__/connection-lifecycle.test.js +0 -289
  328. package/dist/local-agent/__tests__/connection-msghandling.test.js +0 -311
  329. package/dist/local-agent/__tests__/connection-reconnect.test.js +0 -230
  330. package/dist/local-agent/__tests__/connection-toolexec.test.js +0 -253
  331. package/dist/local-agent/__tests__/discovery.test.js +0 -328
  332. package/dist/local-agent/__tests__/executor-background.test.js +0 -219
  333. package/dist/local-agent/__tests__/executor-exec.test.js +0 -221
  334. package/dist/local-agent/__tests__/executor-jobs-sessions.test.js +0 -220
  335. package/dist/local-agent/__tests__/executor-system-info.test.js +0 -133
  336. package/dist/local-agent/__tests__/executor-systeminfo.test.js +0 -109
  337. package/dist/local-agent/__tests__/executor.test.js +0 -235
  338. package/dist/local-agent/__tests__/index.test.js +0 -139
  339. package/dist/node/__tests__/cli-channels.test.js +0 -293
  340. package/dist/node/__tests__/cli-config-edge.test.js +0 -154
  341. package/dist/node/__tests__/cli-config.test.js +0 -215
  342. package/dist/node/__tests__/config.test.js +0 -292
  343. package/dist/node/__tests__/runtime-heartbeat.test.js +0 -153
  344. package/dist/node/__tests__/runtime-lifecycle-init.test.js +0 -263
  345. package/dist/node/__tests__/runtime-lifecycle-stats.test.js +0 -180
  346. package/dist/node/__tests__/runtime-lifecycle.test.js +0 -305
  347. package/dist/node/__tests__/runtime-relay.test.js +0 -341
  348. package/dist/node/adapters/__tests__/base.test.js +0 -286
  349. package/dist/node/adapters/__tests__/discord.test.js +0 -284
  350. package/dist/node/adapters/__tests__/email-send.test.js +0 -295
  351. package/dist/node/adapters/__tests__/email.inbound-send.test.js +0 -217
  352. package/dist/node/adapters/__tests__/email.lifecycle.test.js +0 -211
  353. package/dist/node/adapters/__tests__/email.test.js +0 -290
  354. package/dist/node/adapters/__tests__/email.webhook-send.test.js +0 -251
  355. package/dist/node/adapters/__tests__/imessage-filter.test.js +0 -183
  356. package/dist/node/adapters/__tests__/imessage-lifecycle.test.js +0 -215
  357. package/dist/node/adapters/__tests__/imessage-send-restart.test.js +0 -227
  358. package/dist/node/adapters/__tests__/slack.part2.test.js +0 -135
  359. package/dist/node/adapters/__tests__/slack.test.js +0 -241
  360. package/dist/node/adapters/__tests__/sms-extras.test.js +0 -108
  361. package/dist/node/adapters/__tests__/sms-lifecycle.test.js +0 -203
  362. package/dist/node/adapters/__tests__/sms-messaging.test.js +0 -266
  363. package/dist/node/adapters/__tests__/sms.part2.test.js +0 -174
  364. package/dist/node/adapters/__tests__/sms.test.js +0 -253
  365. package/dist/node/adapters/__tests__/telegram-polling.test.js +0 -256
  366. package/dist/node/adapters/__tests__/telegram-send.test.js +0 -166
  367. package/dist/node/adapters/__tests__/webchat-inbound.test.js +0 -188
  368. package/dist/node/adapters/__tests__/webchat-outbound.test.js +0 -178
  369. package/dist/node/adapters/__tests__/whatsapp-inbound.test.js +0 -200
  370. package/dist/node/adapters/__tests__/whatsapp-send.test.js +0 -212
  371. package/dist/node/adapters/__tests__/whatsapp.test.js +0 -280
  372. package/dist/server/__tests__/gateway-fast-fail.test.js +0 -160
  373. package/dist/server/__tests__/local-agent-gateway.test.js +0 -186
  374. package/dist/server/__tests__/proxy-handlers-delegation.test.js +0 -240
  375. package/dist/server/__tests__/proxy-handlers-validation.test.js +0 -211
  376. package/dist/server/__tests__/proxy-handlers.part2.test.js +0 -240
  377. package/dist/server/__tests__/proxy-handlers.test.js +0 -213
  378. package/dist/server/__tests__/strip-base64-e2e.test.js +0 -303
  379. package/dist/server/__tests__/strip-base64.test.js +0 -256
  380. package/dist/server/__tests__/tool-router-agent-tools.test.js +0 -324
  381. package/dist/server/__tests__/tool-router-execute-core.test.js +0 -357
  382. package/dist/server/__tests__/tool-router-execute-permissions.test.js +0 -332
  383. package/dist/server/__tests__/tool-router-execute.test.js +0 -348
  384. package/dist/server/__tests__/tool-router-load.test.js +0 -432
  385. package/dist/server/__tests__/tool-router-permissions.test.js +0 -359
  386. package/dist/server/__tests__/tool-router-registry-cache.test.js +0 -383
  387. package/dist/server/__tests__/tool-router-registry-handlers.test.js +0 -272
  388. package/dist/server/__tests__/tool-router-registry.test.js +0 -331
  389. package/dist/server/__tests__/validation-inventory.test.js +0 -250
  390. package/dist/server/__tests__/validation-misc.test.js +0 -243
  391. package/dist/server/__tests__/validation-supply-chain.test.js +0 -188
  392. package/dist/server/__tests__/worker.test.js +0 -265
  393. package/dist/server/handlers/__tests__/conversation-lock.test.js +0 -117
  394. package/dist/server/handlers/__tests__/e2e/auth-cross-platform-login.e2e.test.js +0 -268
  395. package/dist/server/handlers/__tests__/e2e/auth-cross-platform-tokens.e2e.test.js +0 -264
  396. package/dist/server/handlers/__tests__/e2e/email-pipeline-send.e2e.test.js +0 -214
  397. package/dist/server/handlers/__tests__/e2e/email-pipeline-threads.e2e.test.js +0 -168
  398. package/dist/server/handlers/__tests__/e2e/error-logging-pipeline-dedup.e2e.test.js +0 -229
  399. package/dist/server/handlers/__tests__/e2e/error-logging-pipeline.e2e.test.js +0 -239
  400. package/dist/server/handlers/__tests__/e2e/error-logging-rate-limit.e2e.test.js +0 -150
  401. package/dist/server/handlers/__tests__/e2e/inventory-sync-guards.e2e.test.js +0 -177
  402. package/dist/server/handlers/__tests__/e2e/inventory-sync.e2e.test.js +0 -228
  403. package/dist/server/handlers/__tests__/e2e/inventory-sync.part2.e2e.test.js +0 -188
  404. package/dist/server/handlers/__tests__/e2e/order-lifecycle-fulfillment.e2e.test.js +0 -295
  405. package/dist/server/handlers/__tests__/e2e/order-lifecycle.e2e.test.js +0 -277
  406. package/dist/server/handlers/__tests__/e2e/order-lifecycle.fulfillment.e2e.test.js +0 -307
  407. package/dist/server/handlers/__tests__/e2e/order-lifecycle.setup.e2e.test.js +0 -177
  408. package/dist/server/handlers/__tests__/e2e/storefront-checkout-cart.e2e.test.js +0 -255
  409. package/dist/server/handlers/__tests__/e2e/storefront-checkout-webhook.e2e.test.js +0 -231
  410. package/dist/server/handlers/__tests__/e2e/workflow-execution-failures.e2e.test.js +0 -235
  411. package/dist/server/handlers/__tests__/e2e/workflow-execution.e2e.test.js +0 -294
  412. package/dist/server/handlers/__tests__/e2e/workflow-security.e2e.test.js +0 -311
  413. package/dist/server/handlers/__tests__/e2e/workflow-security.part2.e2e.test.js +0 -267
  414. package/dist/server/handlers/__tests__/workflow-cache.test.js +0 -237
  415. package/dist/server/handlers/analytics-errors-edge.test.js +0 -173
  416. package/dist/server/handlers/analytics.test.js +0 -280
  417. package/dist/server/handlers/api-docs-examples-ext.d.ts +0 -9
  418. package/dist/server/handlers/api-docs-examples-ext.js +0 -278
  419. package/dist/server/handlers/api-docs-examples-ext.js.map +0 -1
  420. package/dist/server/handlers/api-docs-examples.d.ts +0 -8
  421. package/dist/server/handlers/api-docs-examples.js +0 -221
  422. package/dist/server/handlers/api-docs-examples.js.map +0 -1
  423. package/dist/server/handlers/api-docs-sections-ext.d.ts +0 -2
  424. package/dist/server/handlers/api-docs-sections-ext.js +0 -497
  425. package/dist/server/handlers/api-docs-sections-ext.js.map +0 -1
  426. package/dist/server/handlers/api-docs-sections.d.ts +0 -21
  427. package/dist/server/handlers/api-docs-sections.js +0 -293
  428. package/dist/server/handlers/api-docs-sections.js.map +0 -1
  429. package/dist/server/handlers/api-keys.part2.test.js +0 -157
  430. package/dist/server/handlers/api-keys.test.js +0 -161
  431. package/dist/server/handlers/billing-routes.test.js +0 -123
  432. package/dist/server/handlers/billing.test.js +0 -215
  433. package/dist/server/handlers/browser-actions-errors.test.js +0 -94
  434. package/dist/server/handlers/browser-actions.part2.test.js +0 -190
  435. package/dist/server/handlers/browser-actions.test.js +0 -190
  436. package/dist/server/handlers/browser-validation.test.js +0 -257
  437. package/dist/server/handlers/catalog.test.js +0 -297
  438. package/dist/server/handlers/comms.test.js +0 -289
  439. package/dist/server/handlers/creations-advanced-collections.test.js +0 -214
  440. package/dist/server/handlers/creations-advanced-generate.test.js +0 -142
  441. package/dist/server/handlers/creations-advanced.test.js +0 -171
  442. package/dist/server/handlers/creations-collections-preview.test.js +0 -214
  443. package/dist/server/handlers/creations-crud.test.js +0 -260
  444. package/dist/server/handlers/creations-mutations.test.js +0 -197
  445. package/dist/server/handlers/crm.test.js +0 -179
  446. package/dist/server/handlers/discovery-advertise.test.js +0 -185
  447. package/dist/server/handlers/discovery-scan.test.js +0 -233
  448. package/dist/server/handlers/embeddings-embed-search.test.js +0 -196
  449. package/dist/server/handlers/embeddings-index-delete-stats.test.js +0 -140
  450. package/dist/server/handlers/embeddings-search.test.js +0 -221
  451. package/dist/server/handlers/embeddings.test.js +0 -137
  452. package/dist/server/handlers/enrichment-breach.d.ts +0 -8
  453. package/dist/server/handlers/enrichment-breach.js +0 -266
  454. package/dist/server/handlers/enrichment-breach.js.map +0 -1
  455. package/dist/server/handlers/enrichment-data.d.ts +0 -13
  456. package/dist/server/handlers/enrichment-data.js +0 -145
  457. package/dist/server/handlers/enrichment-data.js.map +0 -1
  458. package/dist/server/handlers/enrichment-mutations.test.js +0 -240
  459. package/dist/server/handlers/enrichment-queries.test.js +0 -181
  460. package/dist/server/handlers/enrichment-validation.test.js +0 -177
  461. package/dist/server/handlers/enrichment-writes.d.ts +0 -16
  462. package/dist/server/handlers/enrichment-writes.js +0 -226
  463. package/dist/server/handlers/enrichment-writes.js.map +0 -1
  464. package/dist/server/handlers/image-gen.test.js +0 -205
  465. package/dist/server/handlers/inventory.test.js +0 -380
  466. package/dist/server/handlers/kali-background.test.js +0 -222
  467. package/dist/server/handlers/kali-errors.test.js +0 -92
  468. package/dist/server/handlers/kali-validation.test.js +0 -234
  469. package/dist/server/handlers/llm-providers-actions.test.js +0 -220
  470. package/dist/server/handlers/llm-providers-anthropic.test.js +0 -239
  471. package/dist/server/handlers/llm-providers-failover.test.js +0 -232
  472. package/dist/server/handlers/llm-providers-providers.test.js +0 -300
  473. package/dist/server/handlers/llm-providers-validation.test.js +0 -239
  474. package/dist/server/handlers/local-agent-tools.test.js +0 -224
  475. package/dist/server/handlers/local-agent.test.js +0 -198
  476. package/dist/server/handlers/local-agent.tools-status.test.js +0 -204
  477. package/dist/server/handlers/local-agent.validation-exec.test.js +0 -182
  478. package/dist/server/handlers/meta-ads-audience-rules.test.js +0 -243
  479. package/dist/server/handlers/meta-ads-audience-targeting.test.js +0 -205
  480. package/dist/server/handlers/meta-ads-audiences-targeting.test.js +0 -383
  481. package/dist/server/handlers/meta-ads-crud-ads.test.js +0 -136
  482. package/dist/server/handlers/meta-ads-crud-campaigns.test.js +0 -189
  483. package/dist/server/handlers/meta-ads-crud-create.test.js +0 -303
  484. package/dist/server/handlers/meta-ads-crud-list-update.test.js +0 -259
  485. package/dist/server/handlers/meta-ads-delete-publish-sync.test.js +0 -282
  486. package/dist/server/handlers/meta-ads-insights.test.js +0 -80
  487. package/dist/server/handlers/meta-ads-list-get.test.js +0 -237
  488. package/dist/server/handlers/meta-ads-publish-delete.test.js +0 -254
  489. package/dist/server/handlers/meta-ads-publish-helpers.js +0 -117
  490. package/dist/server/handlers/meta-ads-publish-helpers.js.map +0 -1
  491. package/dist/server/handlers/meta-ads-publish-sync.test.js +0 -205
  492. package/dist/server/handlers/meta-ads-publish.test.js +0 -254
  493. package/dist/server/handlers/meta-ads-sync-insights.test.js +0 -184
  494. package/dist/server/handlers/meta-ads-update.test.js +0 -117
  495. package/dist/server/handlers/nodes-channels.test.js +0 -413
  496. package/dist/server/handlers/nodes-events.test.js +0 -131
  497. package/dist/server/handlers/nodes-list-delete.test.js +0 -171
  498. package/dist/server/handlers/nodes-messages-delivery.test.js +0 -208
  499. package/dist/server/handlers/nodes-messages.test.js +0 -211
  500. package/dist/server/handlers/nodes-register.test.js +0 -277
  501. package/dist/server/handlers/nodes.test.js +0 -353
  502. package/dist/server/handlers/operations.test.js +0 -136
  503. package/dist/server/handlers/platform-telemetry.test.js +0 -200
  504. package/dist/server/handlers/platform-websearch.test.js +0 -160
  505. package/dist/server/handlers/storefront.test.js +0 -329
  506. package/dist/server/handlers/supply-chain.test.js +0 -347
  507. package/dist/server/handlers/transcription.test.js +0 -118
  508. package/dist/server/handlers/video-gen-veo.js +0 -114
  509. package/dist/server/handlers/video-gen-veo.js.map +0 -1
  510. package/dist/server/handlers/video-gen.test.js +0 -146
  511. package/dist/server/handlers/voice.test.js +0 -153
  512. package/dist/server/handlers/workflow-steps.test.js +0 -330
  513. package/dist/server/handlers/workflows-extras.test.js +0 -65
  514. package/dist/server/handlers/workflows.part2.test.js +0 -170
  515. package/dist/server/handlers/workflows.test.js +0 -281
  516. package/dist/server/lib/__tests__/batch-client-conversion-jsonl.test.js +0 -171
  517. package/dist/server/lib/__tests__/batch-client-polling.test.js +0 -292
  518. package/dist/server/lib/__tests__/batch-client-queue.test.js +0 -270
  519. package/dist/server/lib/__tests__/clickhouse-buffer.test.js +0 -236
  520. package/dist/server/lib/__tests__/code-worker-edge-cases.test.js +0 -118
  521. package/dist/server/lib/__tests__/code-worker-pool-execute.test.js +0 -193
  522. package/dist/server/lib/__tests__/code-worker-pool-execution.test.js +0 -165
  523. package/dist/server/lib/__tests__/code-worker-pool-init.test.js +0 -131
  524. package/dist/server/lib/__tests__/code-worker-pool.test.js +0 -194
  525. package/dist/server/lib/__tests__/code-worker-sandbox-ops.test.js +0 -123
  526. package/dist/server/lib/__tests__/code-worker-sandbox.test.js +0 -217
  527. package/dist/server/lib/__tests__/code-worker.test.js +0 -179
  528. package/dist/server/lib/__tests__/compaction-service-generate.test.js +0 -229
  529. package/dist/server/lib/__tests__/compaction-service.test.js +0 -319
  530. package/dist/server/lib/__tests__/otel.test.js +0 -146
  531. package/dist/server/lib/__tests__/prompt-sanitizer-validation.test.js +0 -165
  532. package/dist/server/lib/__tests__/prompt-sanitizer.sanitize.test.js +0 -343
  533. package/dist/server/lib/__tests__/prompt-sanitizer.test.js +0 -328
  534. package/dist/server/lib/__tests__/prompt-sanitizer.validate-tool.test.js +0 -145
  535. package/dist/server/lib/__tests__/provider-capabilities.test.js +0 -263
  536. package/dist/server/lib/__tests__/provider-failover-routing.test.js +0 -145
  537. package/dist/server/lib/__tests__/provider-failover-state.test.js +0 -131
  538. package/dist/server/lib/__tests__/rate-limiter-budgets.test.js +0 -216
  539. package/dist/server/lib/__tests__/rate-limiter.budgets-tools.test.js +0 -113
  540. package/dist/server/lib/__tests__/rate-limiter.check-request.test.js +0 -141
  541. package/dist/server/lib/__tests__/rate-limiter.stats-lifecycle.test.js +0 -135
  542. package/dist/server/lib/__tests__/rate-limiter.test.js +0 -207
  543. package/dist/server/lib/__tests__/server-agent-loop-abort-conditions.test.js +0 -544
  544. package/dist/server/lib/__tests__/server-agent-loop-abort.part2.test.js +0 -504
  545. package/dist/server/lib/__tests__/server-agent-loop-abort.test.js +0 -396
  546. package/dist/server/lib/__tests__/server-agent-loop-compaction.test.js +0 -397
  547. package/dist/server/lib/__tests__/server-agent-loop-failover.test.js +0 -356
  548. package/dist/server/lib/__tests__/server-agent-loop-features-caching.test.js +0 -519
  549. package/dist/server/lib/__tests__/server-agent-loop-features-edges.test.js +0 -512
  550. package/dist/server/lib/__tests__/server-subagent-bailout.test.js +0 -194
  551. package/dist/server/lib/__tests__/server-subagent-basics.test.js +0 -348
  552. package/dist/server/lib/__tests__/server-subagent-errors-abort.test.js +0 -319
  553. package/dist/server/lib/__tests__/server-subagent-errors-progress.test.js +0 -253
  554. package/dist/server/lib/__tests__/server-subagent-errors.part2.test.js +0 -253
  555. package/dist/server/lib/__tests__/server-subagent-errors.test.js +0 -319
  556. package/dist/server/lib/__tests__/session-checkpoint-load.test.js +0 -275
  557. package/dist/server/lib/__tests__/session-checkpoint-save.test.js +0 -159
  558. package/dist/server/lib/__tests__/ssrf-guard.test.js +0 -93
  559. package/dist/server/lib/__tests__/supabase-client.test.js +0 -111
  560. package/dist/server/lib/__tests__/template-resolver.test.js +0 -317
  561. package/dist/server/lib/__tests__/utils-timeout.test.js +0 -49
  562. package/dist/server/lib/__tests__/utils.test.js +0 -322
  563. package/dist/server/providers/__tests__/anthropic-adapter.test.js +0 -228
  564. package/dist/server/providers/__tests__/anthropic-betas-toolchoice.test.js +0 -257
  565. package/dist/server/providers/__tests__/anthropic-errors.test.js +0 -262
  566. package/dist/server/providers/__tests__/anthropic-stream-core.test.js +0 -275
  567. package/dist/server/providers/__tests__/anthropic-streaming-betas.test.js +0 -247
  568. package/dist/server/providers/__tests__/anthropic-streaming-core.test.js +0 -275
  569. package/dist/server/providers/__tests__/bedrock-config.test.js +0 -177
  570. package/dist/server/providers/__tests__/bedrock-stream-behavior-streaming.test.js +0 -272
  571. package/dist/server/providers/__tests__/bedrock-stream-behavior-toolchoice.test.js +0 -214
  572. package/dist/server/providers/__tests__/bedrock-stream-behavior.part2.test.js +0 -165
  573. package/dist/server/providers/__tests__/bedrock-stream-behavior.test.js +0 -309
  574. package/dist/server/providers/__tests__/bedrock-stream-body-credentials.test.js +0 -170
  575. package/dist/server/providers/__tests__/bedrock-stream-body-extras.test.js +0 -183
  576. package/dist/server/providers/__tests__/bedrock-stream-body-request.test.js +0 -305
  577. package/dist/server/providers/__tests__/bedrock-stream-body.part2.test.js +0 -305
  578. package/dist/server/providers/__tests__/bedrock-stream-body.test.js +0 -175
  579. package/dist/server/providers/__tests__/bedrock-stream-errors.test.js +0 -165
  580. package/dist/server/providers/__tests__/gemini-config-methods.test.js +0 -182
  581. package/dist/server/providers/__tests__/gemini-config-streaming.test.js +0 -257
  582. package/dist/server/providers/__tests__/gemini-conversion-messages.test.js +0 -247
  583. package/dist/server/providers/__tests__/gemini-conversion-schema.test.js +0 -365
  584. package/dist/server/providers/__tests__/gemini-tools-choice.test.js +0 -221
  585. package/dist/server/providers/__tests__/gemini-tools-fn.test.js +0 -252
  586. package/dist/server/providers/__tests__/openai-config.test.js +0 -194
  587. package/dist/server/providers/__tests__/openai-conversion.test.js +0 -276
  588. package/dist/server/providers/__tests__/openai-messages.test.js +0 -261
  589. package/dist/server/providers/__tests__/openai-streaming.test.js +0 -394
  590. package/dist/server/providers/__tests__/openai-tools-cache.test.js +0 -227
  591. package/dist/server/providers/__tests__/registry.test.js +0 -183
  592. package/dist/server/providers/__tests__/shared.test.js +0 -297
  593. package/dist/shared/agent-core-config.test.js +0 -132
  594. package/dist/shared/agent-core-context-thinking.test.js +0 -293
  595. package/dist/shared/agent-core-loop-calls.test.js +0 -174
  596. package/dist/shared/agent-core-loop-detector-bail.test.js +0 -201
  597. package/dist/shared/agent-core-loop-detector.test.js +0 -195
  598. package/dist/shared/agent-core-loop-errors.test.js +0 -258
  599. package/dist/shared/agent-core-pricing.test.js +0 -191
  600. package/dist/shared/agent-core-sanitize-retry.test.js +0 -129
  601. package/dist/shared/api-client-build-request.test.js +0 -228
  602. package/dist/shared/api-client-build-system-caching.test.js +0 -107
  603. package/dist/shared/api-client-build.test.js +0 -223
  604. package/dist/shared/api-client-config.d.ts +0 -21
  605. package/dist/shared/api-client-helpers.d.ts +0 -57
  606. package/dist/shared/api-client-helpers.test.js +0 -261
  607. package/dist/shared/api-client-proxy-happy.test.js +0 -255
  608. package/dist/shared/api-client-proxy-retry.test.js +0 -307
  609. package/dist/shared/api-client-proxy.d.ts +0 -26
  610. package/dist/shared/api-client-proxy.test.js +0 -255
  611. package/dist/shared/api-client-retry.test.js +0 -307
  612. package/dist/shared/api-client-system-trimming.test.js +0 -261
  613. package/dist/shared/api-client-trimming.d.ts +0 -36
  614. package/dist/shared/api-client.test.js +0 -228
  615. package/dist/shared/compaction-thinking.test.js +0 -315
  616. package/dist/shared/compaction-trimming.test.js +0 -223
  617. package/dist/shared/sse-parser-callbacks.test.js +0 -422
  618. package/dist/shared/sse-parser-collect.test.js +0 -252
  619. package/dist/shared/sse-parser-e2e.test.js +0 -558
  620. package/dist/shared/sse-parser-parse.test.js +0 -253
  621. package/dist/shared/tool-dispatch-advanced-batch-build.test.js +0 -405
  622. package/dist/shared/tool-dispatch-advanced.test.js +0 -320
  623. package/dist/shared/tool-dispatch-basic.test.js +0 -278
  624. package/dist/shared/tool-dispatch-content.d.ts +0 -14
  625. package/dist/shared/tool-dispatch-parallel.test.js +0 -378
  626. package/dist/webchat/__tests__/widget-messaging.test.js +0 -323
  627. 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":[]}