UNPKG

google-ads-node

Version:

Google Ads gRPC Client Library for Node

146 lines 12.3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const cosmiconfig_1 = __importDefault(require("cosmiconfig")); const grpc_1 = __importDefault(require("grpc")); const lodash_get_1 = __importDefault(require("lodash.get")); const auth_1 = __importDefault(require("./auth")); const interceptor_1 = require("./interceptor"); const services = __importStar(require("./services")); const GrpcTypes = __importStar(require("./types")); const utils_1 = require("./utils"); // @ts-ignore const compiled_resources_js_1 = __importDefault(require("../protos/compiled-resources.js")); const DEFAULT_VERSION = "v2"; const GOOGLE_ADS_ENDPOINT = "googleads.googleapis.com:443"; const PROTO_ROOT = `google.ads.googleads.${DEFAULT_VERSION}`; const allProtos = lodash_get_1.default(compiled_resources_js_1.default, PROTO_ROOT); class GoogleAdsClient { constructor(options) { if (typeof options === "string" || typeof options === "undefined") { const configPath = options; const { config = {} } = this.loadConfig(configPath) || {}; options = config; } this.validateOptions(options); if (this.usingToken(options)) { this.options = options; } else { /* Access token has not been provided */ this.options = options; this.auth = new auth_1.default({ clientId: this.options.client_id, clientSecret: this.options.client_secret, refreshToken: this.options.refresh_token, accessTokenGetter: this.options.accessTokenGetter, }); } } getService(serviceName) { const serviceClientName = `${serviceName}Client`; if (!services.hasOwnProperty(serviceClientName)) { throw new Error(`Specified service "${serviceName}" does not exist in Google Ads API ${DEFAULT_VERSION}.`); } const interceptors = this.buildInterceptors(); const serviceClientConstructor = services[serviceClientName]; const service = new serviceClientConstructor(GOOGLE_ADS_ENDPOINT, grpc_1.default.credentials.createSsl(), { interceptors, /* By default, the maximum size of a gRPC message is 4MB. Google Ads results can sometimes be quite big, so 4MB can be insufficient. Here, we set it to 1GB to essentially remove that limit. */ "grpc.max_send_message_length": 1024 * 1024 * 1024, "grpc.max_receive_message_length": 1024 * 1024 * 1024, }); /* Promisify gRPC service methods (callbacks are kept as well) */ utils_1.promisifyServiceClient(service); return service; } buildResource(resource, data) { if (!allProtos.resources.hasOwnProperty(resource) && !allProtos.services.hasOwnProperty(resource)) { throw new Error(`Specified type "${resource}" does not exist in Google Ads API ${DEFAULT_VERSION}`); } /* Load the relevant types */ const type = allProtos.resources[resource] || allProtos.services[resource]; const grpcType = GrpcTypes[resource]; /* This translates ts values, such as string, to the protobuf format e.g. {some_name: "campaign"} -> {someName: { value: "campaign" }} */ const protoFormatData = utils_1.convertToProtoFormat(data, type, resource); /* Create a new protobuf Message of the specified type */ const message = type.fromObject(protoFormatData); // TODO: Include debug option that also returns the readable version of the protobuf /* Create a readable js object from the protobuf (useful for debugging) */ // const readable = type.toObject(message, { // enums: String, // enums as string names // longs: String, // longs as strings (requires long.js) // bytes: String, // bytes as base64 encoded strings // defaults: true, // includes default values // arrays: true, // populates empty arrays (repeated fields) even if defaults=false // objects: true, // populates empty objects (map fields) even if defaults=false // oneofs: true, // includes virtual oneof fields set to the present field's name // }); /* Encode the protobuf so it can be translated to the specific gRPC type */ const encoded = type.encode(message).finish(); /* Translate the encoded protobuf type to the grpc type */ const protobuf = grpcType.deserializeBinary(encoded); // return { protobuf, readable }; return protobuf; } buildInterceptors() { const metadataInterceptor = new interceptor_1.MetadataInterceptor(this.options.developer_token, this.options.login_customer_id, this.options.access_token, this.auth); const exceptionInterceptor = new interceptor_1.ExceptionInterceptor(); const responseParsingInterceptor = new interceptor_1.ResponseParsingInterceptor(); const interceptors = [ (options, nextCall) => metadataInterceptor.intercept(options, nextCall), (options, nextCall) => exceptionInterceptor.intercept(options, nextCall), ]; if (this.options.parseResults) { interceptors.push((options, nextCall) => responseParsingInterceptor.intercept(options, nextCall)); } return interceptors; } loadConfig(configPath) { const explorer = cosmiconfig_1.default("googleads"); if (configPath) { return explorer.loadSync(configPath); } return explorer.searchSync(); } validateOptions(options) { if (!options) { throw new Error(`Client expects initialisation options`); } if (!options.developer_token) { throw new Error(`Missing required key "developer_token" in options`); } if (this.usingToken(options) && !options.access_token) { throw new Error(`Missing required keys in options, expected "access_token", "developer_token"`); } if (!this.usingToken(options)) { if (!options.client_id || !options.client_secret || !options.refresh_token) { throw new Error(`Missing required keys in options, expected "client_id", "client_secret", "refresh_token"`); } } } usingToken(options) { return "access_token" in options; } } exports.GoogleAdsClient = GoogleAdsClient; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsOERBQXNDO0FBQ3RDLGdEQUF3QjtBQUN4Qiw0REFBNkI7QUFFN0Isa0RBQTBCO0FBQzFCLCtDQUt1QjtBQUN2QixxREFBdUM7QUFDdkMsbURBQXFDO0FBQ3JDLG1DQUF1RTtBQUV2RSxhQUFhO0FBQ2IsNEZBQWdFO0FBRWhFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQztBQUM3QixNQUFNLG1CQUFtQixHQUFHLDhCQUE4QixDQUFDO0FBRTNELE1BQU0sVUFBVSxHQUFHLHdCQUF3QixlQUFlLEVBQUUsQ0FBQztBQUM3RCxNQUFNLFNBQVMsR0FBRyxvQkFBRyxDQUFDLCtCQUFpQixFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBdUJyRCxNQUFhLGVBQWU7SUFJMUIsWUFBWSxPQUFnRTtRQUMxRSxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFDakUsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDO1lBQzNCLE1BQU0sRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUQsT0FBTyxHQUFHLE1BQXVELENBQUM7U0FDbkU7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTlCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQWlDLENBQUM7U0FDbEQ7YUFBTTtZQUNMLHdDQUF3QztZQUN4QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQStCLENBQUM7WUFDL0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGNBQUksQ0FBQztnQkFDbkIsUUFBUSxFQUFF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