import type { IntegrationScopeRequirement } from "../../automation/integrations" import { integrationScope as scope } from "../../automation/integrations" import * as z from "zod" import { META_ADS_PAGE_INFO_SCHEMA } from "@automate.ax/integration-contracts/meta-ads" export const META_ADS_READ_SCOPE = scope.any("ads_management", "ads_read") export const META_ADS_WRITE_SCOPE = "ads_management" export const META_ADS_BUSINESS_SCOPE = "business_management" export const META_ADS_BUSINESS_READ_SCOPE = scope.and( META_ADS_BUSINESS_SCOPE, META_ADS_READ_SCOPE, ) export const META_ADS_LEADS_READ_SCOPE = scope.and( "ads_management", "leads_retrieval", "pages_manage_ads", "pages_read_engagement", "pages_show_list", ) export const META_ADS_LEADS_WEBHOOK_SCOPE = scope.and( META_ADS_LEADS_READ_SCOPE, "pages_manage_metadata", ) /** * Builds the OAuth account requirement for one Meta permission expression. * * @param requiredScope - Least permission expression for the callable. */ export function metaAdsAccountRequirement( requiredScope: IntegrationScopeRequirement, ) { return { connections: [{ connectionMethodId: "oauth", requiredScope }], } as const } export const META_ADS_PAGE_INPUT_SCHEMA = { after: z.string().optional(), before: z.string().optional(), limit: z.number().int().min(1).max(100).prefault(25), } /** * Builds a cursor-page output schema for one Meta Graph item schema. * * @param item - Normalized result item schema. */ export function metaAdsPageSchema(item: T) { return z.object({ items: item.array(), pageInfo: META_ADS_PAGE_INFO_SCHEMA.optional(), }) }