UNPKG

dfp-lib

Version:

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

90 lines (89 loc) 4.15 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 jsUtils_1 = require("./jsUtils"); const baseOAuth2Handler_1 = require("./baseOAuth2Handler"); const oauth2Exception_1 = require("./oauth2Exception"); const requestHandler_1 = require("./requestHandler"); class OAuth2Handler extends baseOAuth2Handler_1.BaseOAuth2Handler { constructor(server = null, scopes = null) { super(server, scopes); this.requestHandler = new requestHandler_1.RequestHandler(); } getAccessToken(credentials, code, redirectUri = null) { return __awaiter(this, void 0, void 0, function* () { if (!credentials['client_id']) { throw new oauth2Exception_1.OAuth2Exception('client_id required.'); } if (!credentials['client_secret']) { throw new oauth2Exception_1.OAuth2Exception('client_secret required.'); } redirectUri = redirectUri || OAuth2Handler.DEFAULT_REDIRECT_URI; const params = { 'code': code, 'client_id': credentials['client_id'], 'client_secret': credentials['client_secret'], 'redirect_uri': redirectUri, 'grant_type': 'authorization_code' }; const endpoint = this.getAccessEndpoint(); const response = yield this.makeRequest(endpoint, params); return Object.assign(credentials, response, { 'timestamp': jsUtils_1.time() }); }); } refreshAccessToken(credentials) { return __awaiter(this, void 0, void 0, function* () { if (!credentials['refresh_token']) { throw new oauth2Exception_1.OAuth2Exception('Offline access (refresh_token) required.'); } if (!credentials['client_id']) { throw new oauth2Exception_1.OAuth2Exception('client_id required.'); } if (!credentials['client_secret']) { throw new oauth2Exception_1.OAuth2Exception('client_secret required.'); } const params = { 'refresh_token': credentials['refresh_token'], 'client_id': credentials['client_id'], 'client_secret': credentials['client_secret'], 'grant_type': 'refresh_token' }; const endpoint = this.getAccessEndpoint(); const response = yield this.makeRequest(endpoint, params); return Object.assign(credentials, response, { 'timestamp': jsUtils_1.time() }); }); } makeRequest(url, params) { return __awaiter(this, void 0, void 0, function* () { const self = this; const options = { url: url, method: 'POST', form: params }; const body = yield new Promise(function (resolve, reject) { self.requestHandler.post(options, function (err, response) { if (err) { reject(new oauth2Exception_1.OAuth2Exception(err.message, response.statusCode)); } else if (response.statusCode != 200) { reject(new oauth2Exception_1.OAuth2Exception(JSON.stringify(response), response.statusCode)); } else { resolve(JSON.parse(response.body)); } }); }); return body; }); } } exports.OAuth2Handler = OAuth2Handler;