@dmgt/google-ad-manager-api
Version:
Typed Google Ad Manager API
423 lines (412 loc) • 19.3 kB
text/typescript
import { Credentials } from 'google-auth-library'
import { BearerSecurity, Client, createClientAsync } from 'soap'
import { createClientAsync as createAdRuleServiceClient } from '../service/v202411/adruleservice'
import { createClientAsync as createAdjustmentServiceClient } from '../service/v202411/adjustmentservice'
import { createClientAsync as createAdsTxtServiceClient } from '../service/v202411/adstxtservice'
import { createClientAsync as createAudienceSegmentServiceClient } from '../service/v202411/audiencesegmentservice'
import { createClientAsync as createCdnConfigurationServiceClient } from '../service/v202411/cdnconfigurationservice'
import { createClientAsync as createCmsMetadataServiceClient } from '../service/v202411/cmsmetadataservice'
import { createClientAsync as createCompanyServiceClient } from '../service/v202411/companyservice'
import { createClientAsync as createContactServiceClient } from '../service/v202411/contactservice'
import { createClientAsync as createContentBundleServiceClient } from '../service/v202411/contentbundleservice'
import { createClientAsync as createContentServiceClient } from '../service/v202411/contentservice'
import { createClientAsync as createCreativeServiceClient } from '../service/v202411/creativeservice'
import { createClientAsync as createCreativeSetServiceClient } from '../service/v202411/creativesetservice'
import { createClientAsync as createCreativeTemplateServiceClient } from '../service/v202411/creativetemplateservice'
import { createClientAsync as createCreativeWrapperServiceClient } from '../service/v202411/creativewrapperservice'
import { createClientAsync as createCustomFieldServiceClient } from '../service/v202411/customfieldservice'
import { createClientAsync as createCustomTargetingServiceClient } from '../service/v202411/customtargetingservice'
import { createClientAsync as createDaiAuthenticationKeyServiceClient } from '../service/v202411/daiauthenticationkeyservice'
import { createClientAsync as createDaiEncodingProfileServiceClient } from '../service/v202411/daiencodingprofileservice'
import { createClientAsync as createForecastServiceClient } from '../service/v202411/forecastservice'
import { createClientAsync as createInventoryServiceClient } from '../service/v202411/inventoryservice'
import { createClientAsync as createLabelServiceClient } from '../service/v202411/labelservice'
import { createClientAsync as createLineItemCreativeAssociationServiceClient } from '../service/v202411/lineitemcreativeassociationservice'
import { createClientAsync as createLineItemServiceClient } from '../service/v202411/lineitemservice'
import { createClientAsync as createLineItemTemplateServiceClient } from '../service/v202411/lineitemtemplateservice'
import { createClientAsync as createLiveStreamEventServiceClient } from '../service/v202411/livestreameventservice'
import { createClientAsync as createMobileApplicationServiceClient } from '../service/v202411/mobileapplicationservice'
import { createClientAsync as createNativeStyleServiceClient } from '../service/v202411/nativestyleservice'
import { createClientAsync as createNetworkServiceClient } from '../service/v202411/networkservice'
import { createClientAsync as createOrderServiceClient } from '../service/v202411/orderservice'
import { createClientAsync as createPlacementServiceClient } from '../service/v202411/placementservice'
import { createClientAsync as createProposalLineItemServiceClient } from '../service/v202411/proposallineitemservice'
import { createClientAsync as createProposalServiceClient } from '../service/v202411/proposalservice'
import { createClientAsync as createPublisherQueryLanguageServiceClient } from '../service/v202411/publisherquerylanguageservice'
import { createClientAsync as createReportServiceClient } from '../service/v202411/reportservice'
import { createClientAsync as createSegmentPopulationServiceClient } from '../service/v202411/segmentpopulationservice'
import { createClientAsync as createSiteServiceClient } from '../service/v202411/siteservice'
import { createClientAsync as createStreamActivityMonitorServiceClient } from '../service/v202411/streamactivitymonitorservice'
import { createClientAsync as createSuggestedAdUnitServiceClient } from '../service/v202411/suggestedadunitservice'
import { createClientAsync as createTargetingPresetServiceClient } from '../service/v202411/targetingpresetservice'
import { createClientAsync as createTeamServiceClient } from '../service/v202411/teamservice'
import { createClientAsync as createUserServiceClient } from '../service/v202411/userservice'
import { createClientAsync as createUserTeamAssociationServiceClient } from '../service/v202411/userteamassociationservice'
import { createClientAsync as createYieldGroupServiceClient } from '../service/v202411/yieldgroupservice'
export * as AdRuleService from '../service/v202411/adruleservice'
export * as AdjustmentService from '../service/v202411/adjustmentservice'
export * as AdsTxtService from '../service/v202411/adstxtservice'
export * as AudienceSegmentService from '../service/v202411/audiencesegmentservice'
export * as CdnConfigurationService from '../service/v202411/cdnconfigurationservice'
export * as CmsMetadataService from '../service/v202411/cmsmetadataservice'
export * as CompanyService from '../service/v202411/companyservice'
export * as ContactService from '../service/v202411/contactservice'
export * as ContentBundleService from '../service/v202411/contentbundleservice'
export * as ContentService from '../service/v202411/contentservice'
export * as CreativeService from '../service/v202411/creativeservice'
export * as CreativeSetService from '../service/v202411/creativesetservice'
export * as CreativeTemplateService from '../service/v202411/creativetemplateservice'
export * as CreativeWrapperService from '../service/v202411/creativewrapperservice'
export * as CustomFieldService from '../service/v202411/customfieldservice'
export * as CustomTargetingService from '../service/v202411/customtargetingservice'
export * as DaiAuthenticationKeyService from '../service/v202411/daiauthenticationkeyservice'
export * as DaiEncodingProfileService from '../service/v202411/daiencodingprofileservice'
export * as ForecastService from '../service/v202411/forecastservice'
export * as InventoryService from '../service/v202411/inventoryservice'
export * as LabelService from '../service/v202411/labelservice'
export * as LineItemCreativeAssociationService from '../service/v202411/lineitemcreativeassociationservice'
export * as LineItemService from '../service/v202411/lineitemservice'
export * as LineItemTemplateService from '../service/v202411/lineitemtemplateservice'
export * as LiveStreamEventService from '../service/v202411/livestreameventservice'
export * as MobileApplicationService from '../service/v202411/mobileapplicationservice'
export * as NativeStyleService from '../service/v202411/nativestyleservice'
export * as NetworkService from '../service/v202411/networkservice'
export * as OrderService from '../service/v202411/orderservice'
export * as PlacementService from '../service/v202411/placementservice'
export * as ProposalLineItemService from '../service/v202411/proposallineitemservice'
export * as ProposalService from '../service/v202411/proposalservice'
export * as PublisherQueryLanguageService from '../service/v202411/publisherquerylanguageservice'
export * as ReportService from '../service/v202411/reportservice'
export * as SegmentPopulationService from '../service/v202411/segmentpopulationservice'
export * as SiteService from '../service/v202411/siteservice'
export * as StreamActivityMonitorService from '../service/v202411/streamactivitymonitorservice'
export * as SuggestedAdUnitService from '../service/v202411/suggestedadunitservice'
export * as TargetingPresetService from '../service/v202411/targetingpresetservice'
export * as TeamService from '../service/v202411/teamservice'
export * as UserService from '../service/v202411/userservice'
export * as UserTeamAssociationService from '../service/v202411/userteamassociationservice'
export * as YieldGroupService from '../service/v202411/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 = 'v202411'
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
}
}
}