UNPKG

google-ads-node

Version:

Google Ads gRPC Client Library for Node

133 lines 10.3 kB
"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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