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.
- package/dist/cli/chat/ChatApp.js +7 -11
- package/dist/cli/chat/ChatApp.js.map +1 -1
- package/dist/cli/chat/ChatInput.js +7 -3
- package/dist/cli/chat/ChatInput.js.map +1 -1
- package/dist/cli/chat/MessageList.js +5 -6
- package/dist/cli/chat/MessageList.js.map +1 -1
- package/dist/cli/chat/StatusBar.d.ts +2 -2
- package/dist/cli/chat/StatusBar.js +90 -160
- package/dist/cli/chat/StatusBar.js.map +1 -1
- package/dist/cli/chat/components/LiveArea.js +78 -115
- package/dist/cli/chat/components/LiveArea.js.map +1 -1
- package/dist/cli/chat/components/StaticMessages.js +60 -79
- package/dist/cli/chat/components/StaticMessages.js.map +1 -1
- package/dist/cli/chat/hooks/useAgentLoop.js +45 -37
- package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -1
- package/dist/cli/chat/store.d.ts +12 -0
- package/dist/cli/chat/store.js +19 -0
- package/dist/cli/chat/store.js.map +1 -1
- package/dist/cli/commands/doctor.js +1 -6
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/services/agent-loop-tools.js +11 -2
- package/dist/cli/services/agent-loop-tools.js.map +1 -1
- package/dist/cli/services/agent-loop.js +1 -1
- package/dist/cli/services/agent-loop.js.map +1 -1
- package/dist/cli/services/cli-agent-loop.js +3 -2
- package/dist/cli/services/cli-agent-loop.js.map +1 -1
- package/dist/cli/services/config-store.d.ts +8 -10
- package/dist/cli/services/config-store.js +14 -13
- package/dist/cli/services/config-store.js.map +1 -1
- package/dist/cli/services/memory-manager.js +2 -2
- package/dist/cli/services/memory-manager.js.map +1 -1
- package/dist/cli/services/permission-modes.js +14 -10
- package/dist/cli/services/permission-modes.js.map +1 -1
- package/dist/cli/services/session-client.js +2 -1
- package/dist/cli/services/session-client.js.map +1 -1
- package/dist/cli/services/session-persistence.js +14 -6
- package/dist/cli/services/session-persistence.js.map +1 -1
- package/dist/cli/setup/SetupApp.d.ts +2 -2
- package/dist/cli/setup/SetupApp.js +91 -254
- package/dist/cli/setup/SetupApp.js.map +1 -1
- package/dist/cli/shared/SpinnerSlot.js +4 -1
- package/dist/cli/shared/SpinnerSlot.js.map +1 -1
- package/dist/cli/status/StatusApp.js +3 -3
- package/dist/cli/status/StatusApp.js.map +1 -1
- package/dist/index.js +13 -3
- package/dist/index.js.map +1 -1
- package/dist/server/handlers/browser-lifecycle.js +10 -0
- package/dist/server/handlers/browser-lifecycle.js.map +1 -1
- package/dist/server/handlers/browser.js +16 -1
- package/dist/server/handlers/browser.js.map +1 -1
- package/dist/server/handlers/campaigns.js +11 -0
- package/dist/server/handlers/campaigns.js.map +1 -1
- package/dist/server/handlers/catalog-products.js +19 -5
- package/dist/server/handlers/catalog-products.js.map +1 -1
- package/dist/server/handlers/catalog.js +42 -8
- package/dist/server/handlers/catalog.js.map +1 -1
- package/dist/server/handlers/clickhouse.js +4 -4
- package/dist/server/handlers/clickhouse.js.map +1 -1
- package/dist/server/handlers/comms-email.js +70 -8
- package/dist/server/handlers/comms-email.js.map +1 -1
- package/dist/server/handlers/comms.js +63 -21
- package/dist/server/handlers/comms.js.map +1 -1
- package/dist/server/handlers/coupons.js +141 -77
- package/dist/server/handlers/coupons.js.map +1 -1
- package/dist/server/handlers/google-ads.js +280 -8
- package/dist/server/handlers/google-ads.js.map +1 -1
- package/dist/server/handlers/remove-bg.d.ts +33 -0
- package/dist/server/handlers/remove-bg.js +698 -44
- package/dist/server/handlers/remove-bg.js.map +1 -1
- package/dist/server/handlers/supply-chain.js +93 -1
- package/dist/server/handlers/supply-chain.js.map +1 -1
- package/dist/server/handlers/workflow-steps-types.d.ts +1 -1
- package/dist/server/handlers/workflow-steps-types.js +7 -1
- package/dist/server/handlers/workflow-steps-types.js.map +1 -1
- package/dist/server/handlers/workflow-steps.js +1 -1
- package/dist/server/handlers/workflow-steps.js.map +1 -1
- package/dist/server/index.js +122 -29
- package/dist/server/index.js.map +1 -1
- package/dist/server/lib/agent-loop-turn.js +33 -3
- package/dist/server/lib/agent-loop-turn.js.map +1 -1
- package/dist/server/lib/agent-loop-types.d.ts +6 -2
- package/dist/server/lib/agent-loop-types.js +14 -2
- package/dist/server/lib/agent-loop-types.js.map +1 -1
- package/dist/server/lib/clickhouse-client.js +4 -2
- package/dist/server/lib/clickhouse-client.js.map +1 -1
- package/dist/server/lib/code-worker.js +4 -1
- package/dist/server/lib/code-worker.js.map +1 -1
- package/dist/server/providers/anthropic.js +103 -33
- package/dist/server/providers/anthropic.js.map +1 -1
- package/dist/server/server-chat.js +2 -2
- package/dist/server/server-chat.js.map +1 -1
- package/dist/server/server-helpers.d.ts +8 -1
- package/dist/server/server-helpers.js +17 -3
- package/dist/server/server-helpers.js.map +1 -1
- package/dist/server/server-persist.js +34 -21
- package/dist/server/server-persist.js.map +1 -1
- package/dist/server/server-rate-limit.d.ts +0 -1
- package/dist/server/server-rate-limit.js +5 -5
- package/dist/server/server-rate-limit.js.map +1 -1
- package/dist/server/server-routes-approvals.js +2 -2
- package/dist/server/server-routes-approvals.js.map +1 -1
- package/dist/server/server-routes-auth.js +2 -2
- package/dist/server/server-routes-auth.js.map +1 -1
- package/dist/server/server-routes-events.js +2 -2
- package/dist/server/server-routes-events.js.map +1 -1
- package/dist/server/server-routes-public.js +4 -4
- package/dist/server/server-routes-public.js.map +1 -1
- package/dist/server/server-routes-webchat.js +3 -3
- package/dist/server/server-routes-webchat.js.map +1 -1
- package/dist/server/server-store-circuit-breaker.js +1 -1
- package/dist/server/server-store-circuit-breaker.js.map +1 -1
- package/dist/server/tool-router.js +7 -4
- package/dist/server/tool-router.js.map +1 -1
- package/dist/server/validation.js +11 -0
- package/dist/server/validation.js.map +1 -1
- package/dist/setup.js +5 -25
- package/dist/setup.js.map +1 -1
- package/dist/shared/api-client.js +38 -11
- package/dist/shared/api-client.js.map +1 -1
- package/package.json +12 -10
- package/vendor/ink/build/ink.js +68 -24
- package/vendor/ink/node_modules/react-devtools-core/README.md +152 -0
- package/vendor/ink/node_modules/react-devtools-core/backend.js +1 -0
- package/vendor/ink/node_modules/react-devtools-core/dist/648.chunk.js +2 -0
- package/vendor/ink/node_modules/react-devtools-core/dist/648.chunk.js.map +1 -0
- package/vendor/ink/node_modules/react-devtools-core/dist/backend.js +15691 -0
- package/vendor/ink/node_modules/react-devtools-core/dist/backend.js.map +1 -0
- package/vendor/ink/node_modules/react-devtools-core/dist/importFile.worker.worker.js +2 -0
- package/vendor/ink/node_modules/react-devtools-core/dist/importFile.worker.worker.js.map +1 -0
- package/vendor/ink/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js +14 -0
- package/vendor/ink/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js.map +1 -0
- package/vendor/ink/node_modules/react-devtools-core/dist/standalone.js +2 -0
- package/vendor/ink/node_modules/react-devtools-core/dist/standalone.js.map +1 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/LICENSE +21 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/README.md +495 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/browser.js +8 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/index.js +10 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/buffer-util.js +129 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/constants.js +10 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/event-target.js +184 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/extension.js +223 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/limiter.js +55 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/permessage-deflate.js +518 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/receiver.js +607 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/sender.js +409 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/stream.js +180 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/validation.js +104 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/websocket-server.js +449 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/websocket.js +1197 -0
- package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/package.json +56 -0
- package/vendor/ink/node_modules/react-devtools-core/package.json +38 -0
- package/vendor/ink/node_modules/react-devtools-core/standalone.js +1 -0
- package/dist/cli/__tests__/print-mode-streaming.test.js +0 -270
- package/dist/cli/__tests__/print-mode.basic-output.test.js +0 -230
- package/dist/cli/__tests__/print-mode.session-errors.test.js +0 -252
- package/dist/cli/__tests__/print-mode.test.js +0 -273
- package/dist/cli/__tests__/serve-mode-messages.test.js +0 -338
- package/dist/cli/__tests__/serve-mode.messages.part2.test.js +0 -266
- package/dist/cli/__tests__/serve-mode.messages.test.js +0 -277
- package/dist/cli/__tests__/serve-mode.startup-http.test.js +0 -279
- package/dist/cli/__tests__/serve-mode.test.js +0 -345
- package/dist/cli/chat/NodeManager.d.ts +0 -30
- package/dist/cli/chat/NodeManager.js +0 -66
- package/dist/cli/chat/NodeManager.js.map +0 -1
- package/dist/cli/chat/chat-input-menu-handler.d.ts +0 -32
- package/dist/cli/chat/hooks/slash-imsg-handlers.js +0 -148
- package/dist/cli/chat/hooks/slash-imsg-handlers.js.map +0 -1
- package/dist/cli/chat/hooks/useStreamingReducer.d.ts +0 -66
- package/dist/cli/commands/__tests__/config-cmd.test.js +0 -270
- package/dist/cli/commands/__tests__/doctor.test.js +0 -257
- package/dist/cli/commands/__tests__/imsg-node-bridge.test.js +0 -99
- package/dist/cli/commands/__tests__/imsg-utils.test.js +0 -73
- package/dist/cli/commands/__tests__/init.test.js +0 -214
- package/dist/cli/commands/__tests__/mcp.test.js +0 -287
- package/dist/cli/commands/imsg-watcher-helpers.d.ts +0 -40
- package/dist/cli/commands/imsg-watcher-helpers.js +0 -184
- package/dist/cli/commands/imsg-watcher-helpers.js.map +0 -1
- package/dist/cli/commands/imsg-watcher.d.ts +0 -11
- package/dist/cli/commands/imsg-watcher.js +0 -230
- package/dist/cli/commands/imsg-watcher.js.map +0 -1
- package/dist/cli/services/__tests__/agent-definitions.test.js +0 -153
- package/dist/cli/services/__tests__/agent-events-global.test.js +0 -39
- package/dist/cli/services/__tests__/agent-events.part2.test.js +0 -113
- package/dist/cli/services/__tests__/agent-events.test.js +0 -157
- package/dist/cli/services/__tests__/agent-loop-auth.test.js +0 -392
- package/dist/cli/services/__tests__/agent-loop-budget.test.js +0 -389
- package/dist/cli/services/__tests__/agent-loop-tools-lifecycle.test.js +0 -430
- package/dist/cli/services/__tests__/agent-loop-tools-maxturns.test.js +0 -486
- package/dist/cli/services/__tests__/agent-loop-utils-execution.test.js +0 -528
- package/dist/cli/services/__tests__/agent-loop-utils-helpers.test.js +0 -466
- package/dist/cli/services/__tests__/agent-worker-base-execute.test.js +0 -257
- package/dist/cli/services/__tests__/agent-worker-base-helpers.test.js +0 -198
- package/dist/cli/services/__tests__/agent-worker-base.test.js +0 -278
- package/dist/cli/services/__tests__/auth-service-exports.test.js +0 -41
- package/dist/cli/services/__tests__/auth-service.part2.test.js +0 -169
- package/dist/cli/services/__tests__/auth-service.test.js +0 -242
- package/dist/cli/services/__tests__/background-processes.test.js +0 -282
- package/dist/cli/services/__tests__/claude-md-loader.test.js +0 -134
- package/dist/cli/services/__tests__/config-store.test.js +0 -247
- package/dist/cli/services/__tests__/debug-log.test.js +0 -199
- package/dist/cli/services/__tests__/edge-cases-caching.test.js +0 -174
- package/dist/cli/services/__tests__/edge-cases-compaction-core.test.js +0 -226
- package/dist/cli/services/__tests__/edge-cases-compaction-openai.test.js +0 -152
- package/dist/cli/services/__tests__/edge-cases-compaction-shapes.test.js +0 -53
- package/dist/cli/services/__tests__/edge-cases-compaction-thinking.test.js +0 -226
- package/dist/cli/services/__tests__/edge-cases-compaction.test.js +0 -131
- package/dist/cli/services/__tests__/edge-cases-paths.test.js +0 -86
- package/dist/cli/services/__tests__/error-logger-messages.test.js +0 -81
- package/dist/cli/services/__tests__/error-logger-transport.test.js +0 -119
- package/dist/cli/services/__tests__/error-logger.test.js +0 -264
- package/dist/cli/services/__tests__/file-history.test.js +0 -136
- package/dist/cli/services/__tests__/git-context-cache-reset.test.js +0 -223
- package/dist/cli/services/__tests__/git-context.test.js +0 -241
- package/dist/cli/services/__tests__/interactive-tools-execute.test.js +0 -166
- package/dist/cli/services/__tests__/interactive-tools-plan.test.js +0 -197
- package/dist/cli/services/__tests__/interactive-tools.part2.test.js +0 -168
- package/dist/cli/services/__tests__/interactive-tools.test.js +0 -179
- package/dist/cli/services/__tests__/keybinding-manager.test.js +0 -205
- package/dist/cli/services/__tests__/local-tools-dispatch.test.js +0 -404
- package/dist/cli/services/__tests__/local-tools.test.js +0 -238
- package/dist/cli/services/__tests__/lsp-manager.test.js +0 -364
- package/dist/cli/services/__tests__/mcp-client-connect-disconnect.test.js +0 -310
- package/dist/cli/services/__tests__/mcp-client.test.js +0 -93
- package/dist/cli/services/__tests__/memory-manager.test.js +0 -154
- package/dist/cli/services/__tests__/model-manager-utils.test.js +0 -154
- package/dist/cli/services/__tests__/model-manager.test.js +0 -175
- package/dist/cli/services/__tests__/permission-modes.test.js +0 -222
- package/dist/cli/services/__tests__/ripgrep.test.js +0 -328
- package/dist/cli/services/__tests__/server-tools-execute.test.js +0 -317
- package/dist/cli/services/__tests__/server-tools.test.js +0 -272
- package/dist/cli/services/__tests__/session-persistence.test.js +0 -245
- package/dist/cli/services/__tests__/subagent-basic.test.js +0 -489
- package/dist/cli/services/__tests__/subagent-edge.test.js +0 -545
- package/dist/cli/services/__tests__/subagent-prompts.test.js +0 -558
- package/dist/cli/services/__tests__/subagent-worker-errors.test.js +0 -255
- package/dist/cli/services/__tests__/subagent-worker.test.js +0 -242
- package/dist/cli/services/__tests__/system-prompt.test.js +0 -210
- package/dist/cli/services/__tests__/team-lead-comms-messaging.test.js +0 -250
- package/dist/cli/services/__tests__/team-lead-comms-result.test.js +0 -232
- package/dist/cli/services/__tests__/team-lead-comms-stop.test.js +0 -344
- package/dist/cli/services/__tests__/team-lead-comms.test.js +0 -285
- package/dist/cli/services/__tests__/team-lead-create.test.js +0 -327
- package/dist/cli/services/__tests__/team-lead-run.test.js +0 -318
- package/dist/cli/services/__tests__/team-lead-stop.test.js +0 -199
- package/dist/cli/services/__tests__/team-state-comms.test.js +0 -240
- package/dist/cli/services/__tests__/team-state-core.test.js +0 -230
- package/dist/cli/services/__tests__/team-state-tasks-complete-fail-available.test.js +0 -224
- package/dist/cli/services/__tests__/team-state-tasks.test.js +0 -184
- package/dist/cli/services/__tests__/telemetry-ai-metadata.test.js +0 -116
- package/dist/cli/services/__tests__/telemetry.part2.test.js +0 -195
- package/dist/cli/services/__tests__/telemetry.test.js +0 -176
- package/dist/cli/services/agent-loop-iteration.d.ts +0 -13
- package/dist/cli/services/agent-loop-setup.d.ts +0 -32
- package/dist/cli/services/agent-worker-base-api.d.ts +0 -19
- package/dist/cli/services/agent-worker-base-helpers.d.ts +0 -27
- package/dist/cli/services/agent-worker-base-tools.d.ts +0 -16
- package/dist/cli/services/agent-worker-base-types.d.ts +0 -81
- package/dist/cli/services/background-agents.d.ts +0 -26
- package/dist/cli/services/background-processes-ops.d.ts +0 -24
- package/dist/cli/services/background-tool-defs.d.ts +0 -50
- package/dist/cli/services/config-modules-model.test.js +0 -133
- package/dist/cli/services/config-modules-permission.test.js +0 -85
- package/dist/cli/services/config-modules-permissions.test.js +0 -85
- package/dist/cli/services/config-modules-session.test.js +0 -297
- package/dist/cli/services/format-server-response-columns.test.js +0 -265
- package/dist/cli/services/format-server-response-fallback.test.js +0 -65
- package/dist/cli/services/format-server-response-primitives-basic.test.js +0 -261
- package/dist/cli/services/format-server-response-primitives-nested.test.js +0 -188
- package/dist/cli/services/format-server-response-primitives.test.js +0 -300
- package/dist/cli/services/format-server-response-realworld.test.js +0 -248
- package/dist/cli/services/format-server-response-values.test.js +0 -247
- package/dist/cli/services/hooks-runners.test.js +0 -184
- package/dist/cli/services/hooks.glob-load.test.js +0 -233
- package/dist/cli/services/hooks.run-hooks.test.js +0 -184
- package/dist/cli/services/hooks.test.js +0 -233
- package/dist/cli/services/ink-incremental.d.ts +0 -19
- package/dist/cli/services/ink-incremental.js +0 -59
- package/dist/cli/services/ink-incremental.js.map +0 -1
- package/dist/cli/services/ink-resize-fix.d.ts +0 -18
- package/dist/cli/services/ink-resize-fix.js +0 -76
- package/dist/cli/services/ink-resize-fix.js.map +0 -1
- package/dist/cli/services/ink-sync-output.d.ts +0 -12
- package/dist/cli/services/ink-sync-output.js +0 -16
- package/dist/cli/services/ink-sync-output.js.map +0 -1
- package/dist/cli/services/interactive-tool-defs.d.ts +0 -80
- package/dist/cli/services/local-tools-definitions.d.ts +0 -6
- package/dist/cli/services/local-tools-files.test.js +0 -256
- package/dist/cli/services/local-tools-read-many.d.ts +0 -6
- package/dist/cli/services/model-router.test.js +0 -245
- package/dist/cli/services/rewind-rewindTo.test.js +0 -202
- package/dist/cli/services/rewind.test.js +0 -175
- package/dist/cli/services/sandbox.test.js +0 -198
- package/dist/cli/services/subagent-execution.d.ts +0 -12
- package/dist/cli/services/team-lead-auto.d.ts +0 -11
- package/dist/cli/services/team-lead-execution.d.ts +0 -28
- package/dist/cli/services/teammate-loop.js +0 -557
- package/dist/cli/services/teammate-loop.js.map +0 -1
- package/dist/cli/services/tools/__tests__/agent-tools-tasks-teams.test.js +0 -250
- package/dist/cli/services/tools/__tests__/agent-tools-teams.test.js +0 -200
- package/dist/cli/services/tools/__tests__/agent-tools.test.js +0 -340
- package/dist/cli/services/tools/__tests__/file-ops-cache.test.js +0 -152
- package/dist/cli/services/tools/__tests__/file-ops-notebook.test.js +0 -249
- package/dist/cli/services/tools/__tests__/file-ops-read.test.js +0 -261
- package/dist/cli/services/tools/__tests__/file-ops-write.test.js +0 -292
- package/dist/cli/services/tools/__tests__/search-tools-rg.test.js +0 -92
- package/dist/cli/services/tools/__tests__/search-tools.part2.test.js +0 -174
- package/dist/cli/services/tools/__tests__/search-tools.test.js +0 -227
- package/dist/cli/services/tools/__tests__/shell-exec-allowed-core.test.js +0 -163
- package/dist/cli/services/tools/__tests__/shell-exec-allowed-extended.test.js +0 -220
- package/dist/cli/services/tools/__tests__/shell-exec-allowed.part2.test.js +0 -215
- package/dist/cli/services/tools/__tests__/shell-exec-allowed.test.js +0 -154
- package/dist/cli/services/tools/__tests__/shell-exec-blocked.test.js +0 -132
- package/dist/cli/services/tools/__tests__/shell-exec-execution.test.js +0 -245
- package/dist/cli/services/tools/__tests__/task-manager-create.test.js +0 -110
- package/dist/cli/services/tools/__tests__/task-manager-crud.test.js +0 -339
- package/dist/cli/services/tools/__tests__/task-manager-list-get.test.js +0 -343
- package/dist/cli/services/tools/__tests__/task-manager-query.test.js +0 -346
- package/dist/cli/services/tools/__tests__/task-manager-routing.test.js +0 -58
- package/dist/cli/services/tools/__tests__/task-manager-update.test.js +0 -224
- package/dist/cli/services/tools/__tests__/task-manager.test.js +0 -159
- package/dist/cli/services/tools/__tests__/web-tools-html-search.test.js +0 -227
- package/dist/cli/services/tools/__tests__/web-tools.test.js +0 -285
- package/dist/cli/services/tools/shell-exec.test.js +0 -148
- package/dist/cli/shared/SharedTick.d.ts +0 -10
- package/dist/cli/shared/__tests__/markdown.test.js +0 -188
- package/dist/local-agent/__tests__/connection-disconnect.test.js +0 -201
- package/dist/local-agent/__tests__/connection-lifecycle.test.js +0 -289
- package/dist/local-agent/__tests__/connection-msghandling.test.js +0 -311
- package/dist/local-agent/__tests__/connection-reconnect.test.js +0 -230
- package/dist/local-agent/__tests__/connection-toolexec.test.js +0 -253
- package/dist/local-agent/__tests__/discovery.test.js +0 -328
- package/dist/local-agent/__tests__/executor-background.test.js +0 -219
- package/dist/local-agent/__tests__/executor-exec.test.js +0 -221
- package/dist/local-agent/__tests__/executor-jobs-sessions.test.js +0 -220
- package/dist/local-agent/__tests__/executor-system-info.test.js +0 -133
- package/dist/local-agent/__tests__/executor-systeminfo.test.js +0 -109
- package/dist/local-agent/__tests__/executor.test.js +0 -235
- package/dist/local-agent/__tests__/index.test.js +0 -139
- package/dist/node/__tests__/cli-channels.test.js +0 -293
- package/dist/node/__tests__/cli-config-edge.test.js +0 -154
- package/dist/node/__tests__/cli-config.test.js +0 -215
- package/dist/node/__tests__/config.test.js +0 -292
- package/dist/node/__tests__/runtime-heartbeat.test.js +0 -153
- package/dist/node/__tests__/runtime-lifecycle-init.test.js +0 -263
- package/dist/node/__tests__/runtime-lifecycle-stats.test.js +0 -180
- package/dist/node/__tests__/runtime-lifecycle.test.js +0 -305
- package/dist/node/__tests__/runtime-relay.test.js +0 -341
- package/dist/node/adapters/__tests__/base.test.js +0 -286
- package/dist/node/adapters/__tests__/discord.test.js +0 -284
- package/dist/node/adapters/__tests__/email-send.test.js +0 -295
- package/dist/node/adapters/__tests__/email.inbound-send.test.js +0 -217
- package/dist/node/adapters/__tests__/email.lifecycle.test.js +0 -211
- package/dist/node/adapters/__tests__/email.test.js +0 -290
- package/dist/node/adapters/__tests__/email.webhook-send.test.js +0 -251
- package/dist/node/adapters/__tests__/imessage-filter.test.js +0 -183
- package/dist/node/adapters/__tests__/imessage-lifecycle.test.js +0 -215
- package/dist/node/adapters/__tests__/imessage-send-restart.test.js +0 -227
- package/dist/node/adapters/__tests__/slack.part2.test.js +0 -135
- package/dist/node/adapters/__tests__/slack.test.js +0 -241
- package/dist/node/adapters/__tests__/sms-extras.test.js +0 -108
- package/dist/node/adapters/__tests__/sms-lifecycle.test.js +0 -203
- package/dist/node/adapters/__tests__/sms-messaging.test.js +0 -266
- package/dist/node/adapters/__tests__/sms.part2.test.js +0 -174
- package/dist/node/adapters/__tests__/sms.test.js +0 -253
- package/dist/node/adapters/__tests__/telegram-polling.test.js +0 -256
- package/dist/node/adapters/__tests__/telegram-send.test.js +0 -166
- package/dist/node/adapters/__tests__/webchat-inbound.test.js +0 -188
- package/dist/node/adapters/__tests__/webchat-outbound.test.js +0 -178
- package/dist/node/adapters/__tests__/whatsapp-inbound.test.js +0 -200
- package/dist/node/adapters/__tests__/whatsapp-send.test.js +0 -212
- package/dist/node/adapters/__tests__/whatsapp.test.js +0 -280
- package/dist/server/__tests__/gateway-fast-fail.test.js +0 -160
- package/dist/server/__tests__/local-agent-gateway.test.js +0 -186
- package/dist/server/__tests__/proxy-handlers-delegation.test.js +0 -240
- package/dist/server/__tests__/proxy-handlers-validation.test.js +0 -211
- package/dist/server/__tests__/proxy-handlers.part2.test.js +0 -240
- package/dist/server/__tests__/proxy-handlers.test.js +0 -213
- package/dist/server/__tests__/strip-base64-e2e.test.js +0 -303
- package/dist/server/__tests__/strip-base64.test.js +0 -256
- package/dist/server/__tests__/tool-router-agent-tools.test.js +0 -324
- package/dist/server/__tests__/tool-router-execute-core.test.js +0 -357
- package/dist/server/__tests__/tool-router-execute-permissions.test.js +0 -332
- package/dist/server/__tests__/tool-router-execute.test.js +0 -348
- package/dist/server/__tests__/tool-router-load.test.js +0 -432
- package/dist/server/__tests__/tool-router-permissions.test.js +0 -359
- package/dist/server/__tests__/tool-router-registry-cache.test.js +0 -383
- package/dist/server/__tests__/tool-router-registry-handlers.test.js +0 -272
- package/dist/server/__tests__/tool-router-registry.test.js +0 -331
- package/dist/server/__tests__/validation-inventory.test.js +0 -250
- package/dist/server/__tests__/validation-misc.test.js +0 -243
- package/dist/server/__tests__/validation-supply-chain.test.js +0 -188
- package/dist/server/__tests__/worker.test.js +0 -265
- package/dist/server/handlers/__tests__/conversation-lock.test.js +0 -117
- package/dist/server/handlers/__tests__/e2e/auth-cross-platform-login.e2e.test.js +0 -268
- package/dist/server/handlers/__tests__/e2e/auth-cross-platform-tokens.e2e.test.js +0 -264
- package/dist/server/handlers/__tests__/e2e/email-pipeline-send.e2e.test.js +0 -214
- package/dist/server/handlers/__tests__/e2e/email-pipeline-threads.e2e.test.js +0 -168
- package/dist/server/handlers/__tests__/e2e/error-logging-pipeline-dedup.e2e.test.js +0 -229
- package/dist/server/handlers/__tests__/e2e/error-logging-pipeline.e2e.test.js +0 -239
- package/dist/server/handlers/__tests__/e2e/error-logging-rate-limit.e2e.test.js +0 -150
- package/dist/server/handlers/__tests__/e2e/inventory-sync-guards.e2e.test.js +0 -177
- package/dist/server/handlers/__tests__/e2e/inventory-sync.e2e.test.js +0 -228
- package/dist/server/handlers/__tests__/e2e/inventory-sync.part2.e2e.test.js +0 -188
- package/dist/server/handlers/__tests__/e2e/order-lifecycle-fulfillment.e2e.test.js +0 -295
- package/dist/server/handlers/__tests__/e2e/order-lifecycle.e2e.test.js +0 -277
- package/dist/server/handlers/__tests__/e2e/order-lifecycle.fulfillment.e2e.test.js +0 -307
- package/dist/server/handlers/__tests__/e2e/order-lifecycle.setup.e2e.test.js +0 -177
- package/dist/server/handlers/__tests__/e2e/storefront-checkout-cart.e2e.test.js +0 -255
- package/dist/server/handlers/__tests__/e2e/storefront-checkout-webhook.e2e.test.js +0 -231
- package/dist/server/handlers/__tests__/e2e/workflow-execution-failures.e2e.test.js +0 -235
- package/dist/server/handlers/__tests__/e2e/workflow-execution.e2e.test.js +0 -294
- package/dist/server/handlers/__tests__/e2e/workflow-security.e2e.test.js +0 -311
- package/dist/server/handlers/__tests__/e2e/workflow-security.part2.e2e.test.js +0 -267
- package/dist/server/handlers/__tests__/workflow-cache.test.js +0 -237
- package/dist/server/handlers/analytics-errors-edge.test.js +0 -173
- package/dist/server/handlers/analytics.test.js +0 -280
- package/dist/server/handlers/api-docs-examples-ext.d.ts +0 -9
- package/dist/server/handlers/api-docs-examples-ext.js +0 -278
- package/dist/server/handlers/api-docs-examples-ext.js.map +0 -1
- package/dist/server/handlers/api-docs-examples.d.ts +0 -8
- package/dist/server/handlers/api-docs-examples.js +0 -221
- package/dist/server/handlers/api-docs-examples.js.map +0 -1
- package/dist/server/handlers/api-docs-sections-ext.d.ts +0 -2
- package/dist/server/handlers/api-docs-sections-ext.js +0 -497
- package/dist/server/handlers/api-docs-sections-ext.js.map +0 -1
- package/dist/server/handlers/api-docs-sections.d.ts +0 -21
- package/dist/server/handlers/api-docs-sections.js +0 -293
- package/dist/server/handlers/api-docs-sections.js.map +0 -1
- package/dist/server/handlers/api-keys.part2.test.js +0 -157
- package/dist/server/handlers/api-keys.test.js +0 -161
- package/dist/server/handlers/billing-routes.test.js +0 -123
- package/dist/server/handlers/billing.test.js +0 -215
- package/dist/server/handlers/browser-actions-errors.test.js +0 -94
- package/dist/server/handlers/browser-actions.part2.test.js +0 -190
- package/dist/server/handlers/browser-actions.test.js +0 -190
- package/dist/server/handlers/browser-validation.test.js +0 -257
- package/dist/server/handlers/catalog.test.js +0 -297
- package/dist/server/handlers/comms.test.js +0 -289
- package/dist/server/handlers/creations-advanced-collections.test.js +0 -214
- package/dist/server/handlers/creations-advanced-generate.test.js +0 -142
- package/dist/server/handlers/creations-advanced.test.js +0 -171
- package/dist/server/handlers/creations-collections-preview.test.js +0 -214
- package/dist/server/handlers/creations-crud.test.js +0 -260
- package/dist/server/handlers/creations-mutations.test.js +0 -197
- package/dist/server/handlers/crm.test.js +0 -179
- package/dist/server/handlers/discovery-advertise.test.js +0 -185
- package/dist/server/handlers/discovery-scan.test.js +0 -233
- package/dist/server/handlers/embeddings-embed-search.test.js +0 -196
- package/dist/server/handlers/embeddings-index-delete-stats.test.js +0 -140
- package/dist/server/handlers/embeddings-search.test.js +0 -221
- package/dist/server/handlers/embeddings.test.js +0 -137
- package/dist/server/handlers/enrichment-breach.d.ts +0 -8
- package/dist/server/handlers/enrichment-breach.js +0 -266
- package/dist/server/handlers/enrichment-breach.js.map +0 -1
- package/dist/server/handlers/enrichment-data.d.ts +0 -13
- package/dist/server/handlers/enrichment-data.js +0 -145
- package/dist/server/handlers/enrichment-data.js.map +0 -1
- package/dist/server/handlers/enrichment-mutations.test.js +0 -240
- package/dist/server/handlers/enrichment-queries.test.js +0 -181
- package/dist/server/handlers/enrichment-validation.test.js +0 -177
- package/dist/server/handlers/enrichment-writes.d.ts +0 -16
- package/dist/server/handlers/enrichment-writes.js +0 -226
- package/dist/server/handlers/enrichment-writes.js.map +0 -1
- package/dist/server/handlers/image-gen.test.js +0 -205
- package/dist/server/handlers/inventory.test.js +0 -380
- package/dist/server/handlers/kali-background.test.js +0 -222
- package/dist/server/handlers/kali-errors.test.js +0 -92
- package/dist/server/handlers/kali-validation.test.js +0 -234
- package/dist/server/handlers/llm-providers-actions.test.js +0 -220
- package/dist/server/handlers/llm-providers-anthropic.test.js +0 -239
- package/dist/server/handlers/llm-providers-failover.test.js +0 -232
- package/dist/server/handlers/llm-providers-providers.test.js +0 -300
- package/dist/server/handlers/llm-providers-validation.test.js +0 -239
- package/dist/server/handlers/local-agent-tools.test.js +0 -224
- package/dist/server/handlers/local-agent.test.js +0 -198
- package/dist/server/handlers/local-agent.tools-status.test.js +0 -204
- package/dist/server/handlers/local-agent.validation-exec.test.js +0 -182
- package/dist/server/handlers/meta-ads-audience-rules.test.js +0 -243
- package/dist/server/handlers/meta-ads-audience-targeting.test.js +0 -205
- package/dist/server/handlers/meta-ads-audiences-targeting.test.js +0 -383
- package/dist/server/handlers/meta-ads-crud-ads.test.js +0 -136
- package/dist/server/handlers/meta-ads-crud-campaigns.test.js +0 -189
- package/dist/server/handlers/meta-ads-crud-create.test.js +0 -303
- package/dist/server/handlers/meta-ads-crud-list-update.test.js +0 -259
- package/dist/server/handlers/meta-ads-delete-publish-sync.test.js +0 -282
- package/dist/server/handlers/meta-ads-insights.test.js +0 -80
- package/dist/server/handlers/meta-ads-list-get.test.js +0 -237
- package/dist/server/handlers/meta-ads-publish-delete.test.js +0 -254
- package/dist/server/handlers/meta-ads-publish-helpers.js +0 -117
- package/dist/server/handlers/meta-ads-publish-helpers.js.map +0 -1
- package/dist/server/handlers/meta-ads-publish-sync.test.js +0 -205
- package/dist/server/handlers/meta-ads-publish.test.js +0 -254
- package/dist/server/handlers/meta-ads-sync-insights.test.js +0 -184
- package/dist/server/handlers/meta-ads-update.test.js +0 -117
- package/dist/server/handlers/nodes-channels.test.js +0 -413
- package/dist/server/handlers/nodes-events.test.js +0 -131
- package/dist/server/handlers/nodes-list-delete.test.js +0 -171
- package/dist/server/handlers/nodes-messages-delivery.test.js +0 -208
- package/dist/server/handlers/nodes-messages.test.js +0 -211
- package/dist/server/handlers/nodes-register.test.js +0 -277
- package/dist/server/handlers/nodes.test.js +0 -353
- package/dist/server/handlers/operations.test.js +0 -136
- package/dist/server/handlers/platform-telemetry.test.js +0 -200
- package/dist/server/handlers/platform-websearch.test.js +0 -160
- package/dist/server/handlers/storefront.test.js +0 -329
- package/dist/server/handlers/supply-chain.test.js +0 -347
- package/dist/server/handlers/transcription.test.js +0 -118
- package/dist/server/handlers/video-gen-veo.js +0 -114
- package/dist/server/handlers/video-gen-veo.js.map +0 -1
- package/dist/server/handlers/video-gen.test.js +0 -146
- package/dist/server/handlers/voice.test.js +0 -153
- package/dist/server/handlers/workflow-steps.test.js +0 -330
- package/dist/server/handlers/workflows-extras.test.js +0 -65
- package/dist/server/handlers/workflows.part2.test.js +0 -170
- package/dist/server/handlers/workflows.test.js +0 -281
- package/dist/server/lib/__tests__/batch-client-conversion-jsonl.test.js +0 -171
- package/dist/server/lib/__tests__/batch-client-polling.test.js +0 -292
- package/dist/server/lib/__tests__/batch-client-queue.test.js +0 -270
- package/dist/server/lib/__tests__/clickhouse-buffer.test.js +0 -236
- package/dist/server/lib/__tests__/code-worker-edge-cases.test.js +0 -118
- package/dist/server/lib/__tests__/code-worker-pool-execute.test.js +0 -193
- package/dist/server/lib/__tests__/code-worker-pool-execution.test.js +0 -165
- package/dist/server/lib/__tests__/code-worker-pool-init.test.js +0 -131
- package/dist/server/lib/__tests__/code-worker-pool.test.js +0 -194
- package/dist/server/lib/__tests__/code-worker-sandbox-ops.test.js +0 -123
- package/dist/server/lib/__tests__/code-worker-sandbox.test.js +0 -217
- package/dist/server/lib/__tests__/code-worker.test.js +0 -179
- package/dist/server/lib/__tests__/compaction-service-generate.test.js +0 -229
- package/dist/server/lib/__tests__/compaction-service.test.js +0 -319
- package/dist/server/lib/__tests__/otel.test.js +0 -146
- package/dist/server/lib/__tests__/prompt-sanitizer-validation.test.js +0 -165
- package/dist/server/lib/__tests__/prompt-sanitizer.sanitize.test.js +0 -343
- package/dist/server/lib/__tests__/prompt-sanitizer.test.js +0 -328
- package/dist/server/lib/__tests__/prompt-sanitizer.validate-tool.test.js +0 -145
- package/dist/server/lib/__tests__/provider-capabilities.test.js +0 -263
- package/dist/server/lib/__tests__/provider-failover-routing.test.js +0 -145
- package/dist/server/lib/__tests__/provider-failover-state.test.js +0 -131
- package/dist/server/lib/__tests__/rate-limiter-budgets.test.js +0 -216
- package/dist/server/lib/__tests__/rate-limiter.budgets-tools.test.js +0 -113
- package/dist/server/lib/__tests__/rate-limiter.check-request.test.js +0 -141
- package/dist/server/lib/__tests__/rate-limiter.stats-lifecycle.test.js +0 -135
- package/dist/server/lib/__tests__/rate-limiter.test.js +0 -207
- package/dist/server/lib/__tests__/server-agent-loop-abort-conditions.test.js +0 -544
- package/dist/server/lib/__tests__/server-agent-loop-abort.part2.test.js +0 -504
- package/dist/server/lib/__tests__/server-agent-loop-abort.test.js +0 -396
- package/dist/server/lib/__tests__/server-agent-loop-compaction.test.js +0 -397
- package/dist/server/lib/__tests__/server-agent-loop-failover.test.js +0 -356
- package/dist/server/lib/__tests__/server-agent-loop-features-caching.test.js +0 -519
- package/dist/server/lib/__tests__/server-agent-loop-features-edges.test.js +0 -512
- package/dist/server/lib/__tests__/server-subagent-bailout.test.js +0 -194
- package/dist/server/lib/__tests__/server-subagent-basics.test.js +0 -348
- package/dist/server/lib/__tests__/server-subagent-errors-abort.test.js +0 -319
- package/dist/server/lib/__tests__/server-subagent-errors-progress.test.js +0 -253
- package/dist/server/lib/__tests__/server-subagent-errors.part2.test.js +0 -253
- package/dist/server/lib/__tests__/server-subagent-errors.test.js +0 -319
- package/dist/server/lib/__tests__/session-checkpoint-load.test.js +0 -275
- package/dist/server/lib/__tests__/session-checkpoint-save.test.js +0 -159
- package/dist/server/lib/__tests__/ssrf-guard.test.js +0 -93
- package/dist/server/lib/__tests__/supabase-client.test.js +0 -111
- package/dist/server/lib/__tests__/template-resolver.test.js +0 -317
- package/dist/server/lib/__tests__/utils-timeout.test.js +0 -49
- package/dist/server/lib/__tests__/utils.test.js +0 -322
- package/dist/server/providers/__tests__/anthropic-adapter.test.js +0 -228
- package/dist/server/providers/__tests__/anthropic-betas-toolchoice.test.js +0 -257
- package/dist/server/providers/__tests__/anthropic-errors.test.js +0 -262
- package/dist/server/providers/__tests__/anthropic-stream-core.test.js +0 -275
- package/dist/server/providers/__tests__/anthropic-streaming-betas.test.js +0 -247
- package/dist/server/providers/__tests__/anthropic-streaming-core.test.js +0 -275
- package/dist/server/providers/__tests__/bedrock-config.test.js +0 -177
- package/dist/server/providers/__tests__/bedrock-stream-behavior-streaming.test.js +0 -272
- package/dist/server/providers/__tests__/bedrock-stream-behavior-toolchoice.test.js +0 -214
- package/dist/server/providers/__tests__/bedrock-stream-behavior.part2.test.js +0 -165
- package/dist/server/providers/__tests__/bedrock-stream-behavior.test.js +0 -309
- package/dist/server/providers/__tests__/bedrock-stream-body-credentials.test.js +0 -170
- package/dist/server/providers/__tests__/bedrock-stream-body-extras.test.js +0 -183
- package/dist/server/providers/__tests__/bedrock-stream-body-request.test.js +0 -305
- package/dist/server/providers/__tests__/bedrock-stream-body.part2.test.js +0 -305
- package/dist/server/providers/__tests__/bedrock-stream-body.test.js +0 -175
- package/dist/server/providers/__tests__/bedrock-stream-errors.test.js +0 -165
- package/dist/server/providers/__tests__/gemini-config-methods.test.js +0 -182
- package/dist/server/providers/__tests__/gemini-config-streaming.test.js +0 -257
- package/dist/server/providers/__tests__/gemini-conversion-messages.test.js +0 -247
- package/dist/server/providers/__tests__/gemini-conversion-schema.test.js +0 -365
- package/dist/server/providers/__tests__/gemini-tools-choice.test.js +0 -221
- package/dist/server/providers/__tests__/gemini-tools-fn.test.js +0 -252
- package/dist/server/providers/__tests__/openai-config.test.js +0 -194
- package/dist/server/providers/__tests__/openai-conversion.test.js +0 -276
- package/dist/server/providers/__tests__/openai-messages.test.js +0 -261
- package/dist/server/providers/__tests__/openai-streaming.test.js +0 -394
- package/dist/server/providers/__tests__/openai-tools-cache.test.js +0 -227
- package/dist/server/providers/__tests__/registry.test.js +0 -183
- package/dist/server/providers/__tests__/shared.test.js +0 -297
- package/dist/shared/agent-core-config.test.js +0 -132
- package/dist/shared/agent-core-context-thinking.test.js +0 -293
- package/dist/shared/agent-core-loop-calls.test.js +0 -174
- package/dist/shared/agent-core-loop-detector-bail.test.js +0 -201
- package/dist/shared/agent-core-loop-detector.test.js +0 -195
- package/dist/shared/agent-core-loop-errors.test.js +0 -258
- package/dist/shared/agent-core-pricing.test.js +0 -191
- package/dist/shared/agent-core-sanitize-retry.test.js +0 -129
- package/dist/shared/api-client-build-request.test.js +0 -228
- package/dist/shared/api-client-build-system-caching.test.js +0 -107
- package/dist/shared/api-client-build.test.js +0 -223
- package/dist/shared/api-client-config.d.ts +0 -21
- package/dist/shared/api-client-helpers.d.ts +0 -57
- package/dist/shared/api-client-helpers.test.js +0 -261
- package/dist/shared/api-client-proxy-happy.test.js +0 -255
- package/dist/shared/api-client-proxy-retry.test.js +0 -307
- package/dist/shared/api-client-proxy.d.ts +0 -26
- package/dist/shared/api-client-proxy.test.js +0 -255
- package/dist/shared/api-client-retry.test.js +0 -307
- package/dist/shared/api-client-system-trimming.test.js +0 -261
- package/dist/shared/api-client-trimming.d.ts +0 -36
- package/dist/shared/api-client.test.js +0 -228
- package/dist/shared/compaction-thinking.test.js +0 -315
- package/dist/shared/compaction-trimming.test.js +0 -223
- package/dist/shared/sse-parser-callbacks.test.js +0 -422
- package/dist/shared/sse-parser-collect.test.js +0 -252
- package/dist/shared/sse-parser-e2e.test.js +0 -558
- package/dist/shared/sse-parser-parse.test.js +0 -253
- package/dist/shared/tool-dispatch-advanced-batch-build.test.js +0 -405
- package/dist/shared/tool-dispatch-advanced.test.js +0 -320
- package/dist/shared/tool-dispatch-basic.test.js +0 -278
- package/dist/shared/tool-dispatch-content.d.ts +0 -14
- package/dist/shared/tool-dispatch-parallel.test.js +0 -378
- package/dist/webchat/__tests__/widget-messaging.test.js +0 -323
- 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":[]}
|