import type { IntegrationAccountRequirement, TriggerDefinition, TriggerPresentationContext, } from "../types" const GOOGLE_ADS_ACCOUNT = { connectionOptions: [ { connectionMethodId: "oauth", requiredScopes: ["https://www.googleapis.com/auth/adwords"], }, ], serviceId: "google", } as const satisfies IntegrationAccountRequirement<"google"> const changeTrigger = (type: TType, name: string) => ({ account: GOOGLE_ADS_ACCOUNT, getPrimary: customerPrimary, name, type, }) as const satisfies TriggerDefinition export const googleAdsTriggerDefinitions = { googleAdsAdGroupCreated: changeTrigger( "googleAds.adGroup.created", "Google Ads ad group created", ), googleAdsAdGroupRemoved: changeTrigger( "googleAds.adGroup.removed", "Google Ads ad group removed", ), googleAdsAdGroupUpdated: changeTrigger( "googleAds.adGroup.updated", "Google Ads ad group updated", ), googleAdsAdGroupAdCreated: changeTrigger( "googleAds.adGroupAd.created", "Google Ads ad created", ), googleAdsAdGroupAdRemoved: changeTrigger( "googleAds.adGroupAd.removed", "Google Ads ad removed", ), googleAdsAdGroupAdUpdated: changeTrigger( "googleAds.adGroupAd.updated", "Google Ads ad updated", ), googleAdsAdGroupAssetCreated: changeTrigger( "googleAds.adGroupAsset.created", "Google Ads ad-group asset linked", ), googleAdsAdGroupAssetRemoved: changeTrigger( "googleAds.adGroupAsset.removed", "Google Ads ad-group asset unlinked", ), googleAdsAdGroupAssetUpdated: changeTrigger( "googleAds.adGroupAsset.updated", "Google Ads ad-group asset updated", ), googleAdsAssetCreated: changeTrigger( "googleAds.asset.created", "Google Ads asset created", ), googleAdsAssetRemoved: changeTrigger( "googleAds.asset.removed", "Google Ads asset removed", ), googleAdsAssetUpdated: changeTrigger( "googleAds.asset.updated", "Google Ads asset updated", ), googleAdsCampaignCreated: changeTrigger( "googleAds.campaign.created", "Google Ads campaign created", ), googleAdsCampaignRemoved: changeTrigger( "googleAds.campaign.removed", "Google Ads campaign removed", ), googleAdsCampaignUpdated: changeTrigger( "googleAds.campaign.updated", "Google Ads campaign updated", ), googleAdsCampaignAssetCreated: changeTrigger( "googleAds.campaignAsset.created", "Google Ads campaign asset linked", ), googleAdsCampaignAssetRemoved: changeTrigger( "googleAds.campaignAsset.removed", "Google Ads campaign asset unlinked", ), googleAdsCampaignAssetUpdated: changeTrigger( "googleAds.campaignAsset.updated", "Google Ads campaign asset updated", ), googleAdsCampaignBudgetCreated: changeTrigger( "googleAds.campaignBudget.created", "Google Ads campaign budget created", ), googleAdsCampaignBudgetRemoved: changeTrigger( "googleAds.campaignBudget.removed", "Google Ads campaign budget removed", ), googleAdsCampaignBudgetUpdated: changeTrigger( "googleAds.campaignBudget.updated", "Google Ads campaign budget updated", ), googleAdsChange: changeTrigger("googleAds.change", "Google Ads change"), } as const satisfies Record /** * Presents the configured customer ID for one Google Ads trigger. * * @param context - Resolved trigger presentation context. * @throws {TypeError} When the trigger configuration has no customer ID. */ function customerPrimary(context: TriggerPresentationContext) { if ( typeof context.config !== "object" || context.config === null || !("customerId" in context.config) || typeof context.config.customerId !== "string" ) { throw new TypeError( "Google Ads trigger configuration requires a customer ID.", ) } return { value: context.config.customerId } }