google-ads-node
Version:
Google Ads gRPC Client Library for Node
133 lines • 10.3 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const grpc_1 = __importDefault(require("grpc"));
const types_1 = require("./types");
const FAILURE_KEY = "google.ads.googleads.v0.errors.googleadsfailure-bin";
const REQUEST_ID_KEY = "request-id";
const RETRY_STATUS_CODES = [grpc_1.default.status.INTERNAL, grpc_1.default.status.RESOURCE_EXHAUSTED];
class MetadataInterceptor {
constructor(developer_token, login_customer_id, access_token, auth) {
this.developer_token = developer_token;
this.login_customer_id = login_customer_id;
this.access_token = access_token;
this.auth = auth;
this.requestInterceptor = this.buildRequester();
}
intercept(options, nextCall) {
return new grpc_1.default.InterceptingCall(nextCall(options), this.requestInterceptor);
}
buildRequester() {
return new grpc_1.default.RequesterBuilder()
.withStart(async (metadata, listener, next) => {
const access_token = this.auth ? await this.auth.getAccessToken() : this.access_token;
metadata.add(`Authorization`, `Bearer ${access_token}`);
metadata.add(`developer-token`, this.developer_token);
if (this.login_customer_id) {
metadata.add(`login-customer-id`, this.login_customer_id);
}
next(metadata, listener);
})
.build();
}
}
exports.MetadataInterceptor = MetadataInterceptor;
class ExceptionInterceptor {
constructor() {
this.requestInterceptor = this.buildRequester();
}
intercept(options, nextCall) {
return new grpc_1.default.InterceptingCall(nextCall(options), this.requestInterceptor);
}
buildRequester() {
return new grpc_1.default.RequesterBuilder()
.withStart((metadata, _listener, next) => {
const newListener = this.buildListener();
next(metadata, newListener);
})
.build();
}
buildListener() {
return new grpc_1.default.ListenerBuilder()
.withOnReceiveStatus((status, next) => {
if (status.code !== grpc_1.default.status.OK) {
// TODO: Throw this error instead of returning a new status?
const error = this.handleGrpcFailure(status);
const errorStatus = new grpc_1.default.StatusBuilder()
.withCode(status.code)
.withDetails(error.message)
.withMetadata(status.metadata)
.build();
next(errorStatus);
}
else {
next(status);
}
})
.build();
}
getGoogleAdsFailure(metadata) {
if (!metadata) {
return null;
}
for (const key in metadata.getMap()) {
if (key === FAILURE_KEY) {
const message = metadata.get(key);
try {
const failure = types_1.GoogleAdsFailure.deserializeBinary(message[0]);
return failure;
}
catch (err) {
return null;
}
}
}
return null;
}
getRequestId(metadata) {
if (metadata.get(REQUEST_ID_KEY)) {
return metadata.get(REQUEST_ID_KEY)[0];
}
return null;
}
handleGrpcFailure(status) {
const { code, metadata } = status;
if (RETRY_STATUS_CODES.includes(code)) {
/* Throw error if code one of INTERNAL or RESOURCE_EXHAUSTED */
throw new Error(status.details);
}
const ga_failure = this.getGoogleAdsFailure(metadata);
if (!ga_failure) {
/* Throw error with status details if not a Google Ads API error */
// throw new Error(status.details);
return new Error(status.details);
}
const request_id = this.getRequestId(metadata);
let error;
try {
/* Try to parse the error */
const error_pieces = ga_failure.toString().split(",");
const error_message = error_pieces[error_pieces.length - 1];
error = new ClientError(error_message, request_id, ga_failure);
}
catch (err) {
/* Use the original error message if parsing fails */
error = new ClientError(status.details, request_id, ga_failure);
}
return error;
// Promise.reject(error);
}
}
exports.ExceptionInterceptor = ExceptionInterceptor;
class ClientError extends Error {
constructor(message, request_id, failure) {
super(message);
this.message = message;
// this.stack = (new Error() as any).stack;
this.request_id = request_id;
this.failure = failure;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2ludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0RBQXdCO0FBR3hCLG1DQUEyQztBQUUzQyxNQUFNLFdBQVcsR0FBRyxxREFBcUQsQ0FBQztBQUMxRSxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUM7QUFDcEMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLGNBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGNBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUlsRixNQUFhLG1CQUFtQjtJQU85QixZQUNFLGVBQXVCLEVBQ3ZCLGlCQUFxQyxFQUNyQyxZQUFnQyxFQUNoQyxJQUFzQjtRQUV0QixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUN2QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRU0sU0FBUyxDQUFDLE9BQXlCLEVBQUUsUUFBa0I7UUFDNUQsT0FBTyxJQUFJLGNBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVPLGNBQWM7UUFDcEIsT0FBTyxJQUFJLGNBQUksQ0FBQyxnQkFBZ0IsRUFBRTthQUMvQixTQUFTLENBQUMsS0FBSyxFQUFFLFFBQXVCLEVBQUUsUUFBdUIsRUFBRSxJQUFjLEVBQUUsRUFBRTtZQUNwRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUks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