UNPKG

@dmgt/google-ad-manager-api

Version:
423 lines (412 loc) 19.3 kB
import { Credentials } from 'google-auth-library' import { BearerSecurity, Client, createClientAsync } from 'soap' import { createClientAsync as createAdRuleServiceClient } from '../service/v202505/adruleservice' import { createClientAsync as createAdjustmentServiceClient } from '../service/v202505/adjustmentservice' import { createClientAsync as createAdsTxtServiceClient } from '../service/v202505/adstxtservice' import { createClientAsync as createAudienceSegmentServiceClient } from '../service/v202505/audiencesegmentservice' import { createClientAsync as createCdnConfigurationServiceClient } from '../service/v202505/cdnconfigurationservice' import { createClientAsync as createCmsMetadataServiceClient } from '../service/v202505/cmsmetadataservice' import { createClientAsync as createCompanyServiceClient } from '../service/v202505/companyservice' import { createClientAsync as createContactServiceClient } from '../service/v202505/contactservice' import { createClientAsync as createContentBundleServiceClient } from '../service/v202505/contentbundleservice' import { createClientAsync as createContentServiceClient } from '../service/v202505/contentservice' import { createClientAsync as createCreativeServiceClient } from '../service/v202505/creativeservice' import { createClientAsync as createCreativeSetServiceClient } from '../service/v202505/creativesetservice' import { createClientAsync as createCreativeTemplateServiceClient } from '../service/v202505/creativetemplateservice' import { createClientAsync as createCreativeWrapperServiceClient } from '../service/v202505/creativewrapperservice' import { createClientAsync as createCustomFieldServiceClient } from '../service/v202505/customfieldservice' import { createClientAsync as createCustomTargetingServiceClient } from '../service/v202505/customtargetingservice' import { createClientAsync as createDaiAuthenticationKeyServiceClient } from '../service/v202505/daiauthenticationkeyservice' import { createClientAsync as createDaiEncodingProfileServiceClient } from '../service/v202505/daiencodingprofileservice' import { createClientAsync as createForecastServiceClient } from '../service/v202505/forecastservice' import { createClientAsync as createInventoryServiceClient } from '../service/v202505/inventoryservice' import { createClientAsync as createLabelServiceClient } from '../service/v202505/labelservice' import { createClientAsync as createLineItemCreativeAssociationServiceClient } from '../service/v202505/lineitemcreativeassociationservice' import { createClientAsync as createLineItemServiceClient } from '../service/v202505/lineitemservice' import { createClientAsync as createLineItemTemplateServiceClient } from '../service/v202505/lineitemtemplateservice' import { createClientAsync as createLiveStreamEventServiceClient } from '../service/v202505/livestreameventservice' import { createClientAsync as createMobileApplicationServiceClient } from '../service/v202505/mobileapplicationservice' import { createClientAsync as createNativeStyleServiceClient } from '../service/v202505/nativestyleservice' import { createClientAsync as createNetworkServiceClient } from '../service/v202505/networkservice' import { createClientAsync as createOrderServiceClient } from '../service/v202505/orderservice' import { createClientAsync as createPlacementServiceClient } from '../service/v202505/placementservice' import { createClientAsync as createProposalLineItemServiceClient } from '../service/v202505/proposallineitemservice' import { createClientAsync as createProposalServiceClient } from '../service/v202505/proposalservice' import { createClientAsync as createPublisherQueryLanguageServiceClient } from '../service/v202505/publisherquerylanguageservice' import { createClientAsync as createReportServiceClient } from '../service/v202505/reportservice' import { createClientAsync as createSegmentPopulationServiceClient } from '../service/v202505/segmentpopulationservice' import { createClientAsync as createSiteServiceClient } from '../service/v202505/siteservice' import { createClientAsync as createStreamActivityMonitorServiceClient } from '../service/v202505/streamactivitymonitorservice' import { createClientAsync as createSuggestedAdUnitServiceClient } from '../service/v202505/suggestedadunitservice' import { createClientAsync as createTargetingPresetServiceClient } from '../service/v202505/targetingpresetservice' import { createClientAsync as createTeamServiceClient } from '../service/v202505/teamservice' import { createClientAsync as createUserServiceClient } from '../service/v202505/userservice' import { createClientAsync as createUserTeamAssociationServiceClient } from '../service/v202505/userteamassociationservice' import { createClientAsync as createYieldGroupServiceClient } from '../service/v202505/yieldgroupservice' export * as AdRuleService from '../service/v202505/adruleservice' export * as AdjustmentService from '../service/v202505/adjustmentservice' export * as AdsTxtService from '../service/v202505/adstxtservice' export * as AudienceSegmentService from '../service/v202505/audiencesegmentservice' export * as CdnConfigurationService from '../service/v202505/cdnconfigurationservice' export * as CmsMetadataService from '../service/v202505/cmsmetadataservice' export * as CompanyService from '../service/v202505/companyservice' export * as ContactService from '../service/v202505/contactservice' export * as ContentBundleService from '../service/v202505/contentbundleservice' export * as ContentService from '../service/v202505/contentservice' export * as CreativeService from '../service/v202505/creativeservice' export * as CreativeSetService from '../service/v202505/creativesetservice' export * as CreativeTemplateService from '../service/v202505/creativetemplateservice' export * as CreativeWrapperService from '../service/v202505/creativewrapperservice' export * as CustomFieldService from '../service/v202505/customfieldservice' export * as CustomTargetingService from '../service/v202505/customtargetingservice' export * as DaiAuthenticationKeyService from '../service/v202505/daiauthenticationkeyservice' export * as DaiEncodingProfileService from '../service/v202505/daiencodingprofileservice' export * as ForecastService from '../service/v202505/forecastservice' export * as InventoryService from '../service/v202505/inventoryservice' export * as LabelService from '../service/v202505/labelservice' export * as LineItemCreativeAssociationService from '../service/v202505/lineitemcreativeassociationservice' export * as LineItemService from '../service/v202505/lineitemservice' export * as LineItemTemplateService from '../service/v202505/lineitemtemplateservice' export * as LiveStreamEventService from '../service/v202505/livestreameventservice' export * as MobileApplicationService from '../service/v202505/mobileapplicationservice' export * as NativeStyleService from '../service/v202505/nativestyleservice' export * as NetworkService from '../service/v202505/networkservice' export * as OrderService from '../service/v202505/orderservice' export * as PlacementService from '../service/v202505/placementservice' export * as ProposalLineItemService from '../service/v202505/proposallineitemservice' export * as ProposalService from '../service/v202505/proposalservice' export * as PublisherQueryLanguageService from '../service/v202505/publisherquerylanguageservice' export * as ReportService from '../service/v202505/reportservice' export * as SegmentPopulationService from '../service/v202505/segmentpopulationservice' export * as SiteService from '../service/v202505/siteservice' export * as StreamActivityMonitorService from '../service/v202505/streamactivitymonitorservice' export * as SuggestedAdUnitService from '../service/v202505/suggestedadunitservice' export * as TargetingPresetService from '../service/v202505/targetingpresetservice' export * as TeamService from '../service/v202505/teamservice' export * as UserService from '../service/v202505/userservice' export * as UserTeamAssociationService from '../service/v202505/userteamassociationservice' export * as YieldGroupService from '../service/v202505/yieldgroupservice' export interface GoogleAdManagerOptions { applicationName: string authorize(): Promise<Credentials> networkCode: number | string } export class GoogleAdManager { #applicationName: string #authorize: () => Promise<Credentials> #credentialsPromise!: Promise<Credentials> #networkCode: string #version = 'v202505' get version() { return this.#version } constructor(options: GoogleAdManagerOptions) { this.#applicationName = options.applicationName this.#authorize = options.authorize this.#networkCode = options.networkCode.toString() } get credentials() { if (!this.#credentialsPromise) this.authorize() return this.#credentialsPromise } authorize() { this.#credentialsPromise = this.#authorize() return this.#credentialsPromise } createAdRuleServiceClient = this.#wrapClientCreator( createAdRuleServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/AdRuleService?wsdl', ) createAdjustmentServiceClient = this.#wrapClientCreator( createAdjustmentServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/AdjustmentService?wsdl', ) createAdsTxtServiceClient = this.#wrapClientCreator( createAdsTxtServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/AdsTxtService?wsdl', ) createAudienceSegmentServiceClient = this.#wrapClientCreator( createAudienceSegmentServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/AudienceSegmentService?wsdl', ) createCdnConfigurationServiceClient = this.#wrapClientCreator( createCdnConfigurationServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/CdnConfigurationService?wsdl', ) createCmsMetadataServiceClient = this.#wrapClientCreator( createCmsMetadataServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/CmsMetadataService?wsdl', ) createCompanyServiceClient = this.#wrapClientCreator( createCompanyServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/CompanyService?wsdl', ) createContactServiceClient = this.#wrapClientCreator( createContactServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/ContactService?wsdl', ) createContentBundleServiceClient = this.#wrapClientCreator( createContentBundleServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/ContentBundleService?wsdl', ) createContentServiceClient = this.#wrapClientCreator( createContentServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/ContentService?wsdl', ) createCreativeServiceClient = this.#wrapClientCreator( createCreativeServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/CreativeService?wsdl', ) createCreativeSetServiceClient = this.#wrapClientCreator( createCreativeSetServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/CreativeSetService?wsdl', ) createCreativeTemplateServiceClient = this.#wrapClientCreator( createCreativeTemplateServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/CreativeTemplateService?wsdl', ) createCreativeWrapperServiceClient = this.#wrapClientCreator( createCreativeWrapperServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/CreativeWrapperService?wsdl', ) createCustomFieldServiceClient = this.#wrapClientCreator( createCustomFieldServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/CustomFieldService?wsdl', ) createCustomTargetingServiceClient = this.#wrapClientCreator( createCustomTargetingServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/CustomTargetingService?wsdl', ) createDaiAuthenticationKeyServiceClient = this.#wrapClientCreator( createDaiAuthenticationKeyServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/DaiAuthenticationKeyService?wsdl', ) createDaiEncodingProfileServiceClient = this.#wrapClientCreator( createDaiEncodingProfileServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/DaiEncodingProfileService?wsdl', ) createForecastServiceClient = this.#wrapClientCreator( createForecastServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/ForecastService?wsdl', ) createInventoryServiceClient = this.#wrapClientCreator( createInventoryServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/InventoryService?wsdl', ) createLabelServiceClient = this.#wrapClientCreator( createLabelServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/LabelService?wsdl', ) createLineItemCreativeAssociationServiceClient = this.#wrapClientCreator( createLineItemCreativeAssociationServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/LineItemCreativeAssociationService?wsdl', ) createLineItemServiceClient = this.#wrapClientCreator( createLineItemServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/LineItemService?wsdl', ) createLineItemTemplateServiceClient = this.#wrapClientCreator( createLineItemTemplateServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/LineItemTemplateService?wsdl', ) createLiveStreamEventServiceClient = this.#wrapClientCreator( createLiveStreamEventServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/LiveStreamEventService?wsdl', ) createMobileApplicationServiceClient = this.#wrapClientCreator( createMobileApplicationServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/MobileApplicationService?wsdl', ) createNativeStyleServiceClient = this.#wrapClientCreator( createNativeStyleServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/NativeStyleService?wsdl', ) createNetworkServiceClient = this.#wrapClientCreator( createNetworkServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/NetworkService?wsdl', ) createOrderServiceClient = this.#wrapClientCreator( createOrderServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/OrderService?wsdl', ) createPlacementServiceClient = this.#wrapClientCreator( createPlacementServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/PlacementService?wsdl', ) createProposalLineItemServiceClient = this.#wrapClientCreator( createProposalLineItemServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/ProposalLineItemService?wsdl', ) createProposalServiceClient = this.#wrapClientCreator( createProposalServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/ProposalService?wsdl', ) createPublisherQueryLanguageServiceClient = this.#wrapClientCreator( createPublisherQueryLanguageServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/PublisherQueryLanguageService?wsdl', ) createReportServiceClient = this.#wrapClientCreator( createReportServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/ReportService?wsdl', ) createSegmentPopulationServiceClient = this.#wrapClientCreator( createSegmentPopulationServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/SegmentPopulationService?wsdl', ) createSiteServiceClient = this.#wrapClientCreator( createSiteServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/SiteService?wsdl', ) createStreamActivityMonitorServiceClient = this.#wrapClientCreator( createStreamActivityMonitorServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/StreamActivityMonitorService?wsdl', ) createSuggestedAdUnitServiceClient = this.#wrapClientCreator( createSuggestedAdUnitServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/SuggestedAdUnitService?wsdl', ) createTargetingPresetServiceClient = this.#wrapClientCreator( createTargetingPresetServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/TargetingPresetService?wsdl', ) createTeamServiceClient = this.#wrapClientCreator( createTeamServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/TeamService?wsdl', ) createUserServiceClient = this.#wrapClientCreator( createUserServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/UserService?wsdl', ) createUserTeamAssociationServiceClient = this.#wrapClientCreator( createUserTeamAssociationServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/UserTeamAssociationService?wsdl', ) createYieldGroupServiceClient = this.#wrapClientCreator( createYieldGroupServiceClient, 'https://ads.google.com/apis/ads/publisher/' + this.#version + '/YieldGroupService?wsdl', ) get #soapHeaders() { return { RequestHeader: { attributes: { 'soapenv:actor': 'http://schemas.xmlsoap.org/soap/actor/next', 'soapenv:mustUnderstand': 0, 'xsi:type': 'ns1:SoapRequestHeader', 'xmlns:ns1': `https://www.google.com/apis/ads/publisher/${this.#version}`, 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance', 'xmlns:soapenv': 'http://schemas.xmlsoap.org/soap/envelope/', }, 'ns1:networkCode': this.#networkCode, 'ns1:applicationName': this.#applicationName, }, } } #wrapClientCreator<C extends Client>( createClient: (...args: Parameters<typeof createClientAsync>) => Promise<C>, wsdlPath: string, ) { return async (): Promise<C> => { const [token, client] = await Promise.all([ this.credentials, createClient(wsdlPath, { ignoredNamespaces: { namespaces: ['tns'], }, }), ]) if (!token.access_token) { console.error(token) throw new Error('Failed to authenticate with Google') } client.addSoapHeader(this.#soapHeaders) client.setSecurity(new BearerSecurity(token.access_token)) return client } } }