UNPKG

dfp-lib

Version:

This project hosts the Node.JS client library for the SOAP-based DFP API at Google.

119 lines (118 loc) 4.69 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; const util = require("util"); const logger_1 = require("../util/logger"); const soapClient_1 = require("./soapClient"); function joinHeaders(o) { return o ? Object.keys(o).map(function (key) { return key + ': ' + o[key]; }).join("\n") : ''; } class AdsSoapClient extends soapClient_1.SoapClient { constructor(serviceName, wsdl, xmlns, user, options = {}, headers = {}) { super(wsdl, xmlns, user, options['classmap']); this.user = user; this.options = options; this.headers = headers; this.lastArguments = {}; this.lastRequestId = ''; this.serviceName = serviceName; } getSuperSoapCall() { return super.__soapCall.bind(this); } __soapCall(functionName, args, options = null) { return __awaiter(this, void 0, void 0, function* () { try { let soapRequestHeader = this.generateSoapRequestHeader(); let httpHeaders = yield this.generateHttpHeaders(); let response = yield this.getSuperSoapCall()(functionName, args, soapRequestHeader, Object.assign({}, this.headers, httpHeaders)); let responseHeader = response.Envelope.Header.ResponseHeader; this.lastRequestId = responseHeader.requestId; this.lastElapsedTime = 0 | responseHeader.responseTime; this.processResponse(functionName); return response.Envelope.Body; } catch (e) { this.processResponse(functionName, e); throw e; } }); } processResponse(method, e = null) { this.lastMethodName = method; let level = e ? logger_1.Logger.Level.ERROR : logger_1.Logger.Level.INFO; this.logSoapXml(level); this.logRequestInfo(level); } logSoapXml(level) { const requestHeaders = joinHeaders(this.__getLastRequestHeaders()).trim(); const request = util.inspect(this.lastRequest, { depth: null }); const responseHeaders = joinHeaders(this.__getLastResponseHeaders()).trim(); const response = util.inspect(this.lastResponse, { depth: null }); const message = `${requestHeaders}\n\n${request}\n\n${responseHeaders}\n\n${response}\n`; logger_1.Logger.log(logger_1.Logger.SOAP_XML_LOG, message, level); } logRequestInfo(level) { const message = this.generateRequestInfoMessage(); logger_1.Logger.log(logger_1.Logger.REQUEST_INFO_LOG, message, level); } getAdsUser() { return this.user; } getServer() { const obj = this.lastRequest; return (obj && obj.uri && obj.uri.host) ? obj.uri.host : ''; } getServiceName() { return this.serviceName; } getLastMethodName() { return this.lastMethodName; } getLastResponseTime() { return this.lastElapsedTime; } getLastRequestId() { return this.lastRequestId; } isFault() { return this.lastError != null; } getLastFaultMessage() { return this.isFault() ? this.lastError.message : 'null'; } getHeaderNames() { return Object.keys(this.headers); } getHeaderValue(key) { return this.__getHeader(key); } setHeaderValue(key, value) { this.__setHeader(key, value); } generateHttpHeaders() { return __awaiter(this, void 0, void 0, function* () { let httpHeaders = {}; let oauth2Info = this.user.getOAuth2Info(); if (oauth2Info) { let oauth2Handler = this.user.getOAuth2Handler(); oauth2Info = yield oauth2Handler.getOrRefreshAccessToken(oauth2Info); this.user.setOAuth2Info(oauth2Info); if (oauth2Handler.isAccessTokenValid(oauth2Info)) { httpHeaders['Authorization'] = oauth2Handler.formatCredentialsForHeader(oauth2Info); } } return httpHeaders; }); } } exports.AdsSoapClient = AdsSoapClient; ;