GoogleOauth2.0 First implementation

First try for GoogleOauth2.0
This commit is contained in:
Georg Reisinger
2018-10-26 14:02:15 +02:00
parent 216a04e233
commit b171f1646c
1880 changed files with 912953 additions and 7 deletions

View File

@ -0,0 +1,65 @@
import { AxiosError, AxiosInstance, AxiosRequestConfig } from 'axios';
/**
* Configuration for the Axios `request` method.
*/
export interface RetryConfig {
/**
* The number of times to retry the request. Defaults to 3.
*/
retry?: number;
/**
* The number of retries already attempted.
*/
currentRetryAttempt?: number;
/**
* The amount of time to initially delay the retry. Defaults to 100.
*/
retryDelay?: number;
/**
* The instance of the axios object to which the interceptor is attached.
*/
instance?: AxiosInstance;
/**
* The HTTP Methods that will be automatically retried.
* Defaults to ['GET','PUT','HEAD','OPTIONS','DELETE']
*/
httpMethodsToRetry?: string[];
/**
* The HTTP response status codes that will automatically be retried.
* Defaults to: [[100, 199], [429, 429], [500, 599]]
*/
statusCodesToRetry?: number[][];
/**
* Function to invoke when a retry attempt is made.
*/
onRetryAttempt?: (err: AxiosError) => void;
/**
* Function to invoke which determines if you should retry
*/
shouldRetry?: (err: AxiosError) => boolean;
/**
* When there is no response, the number of retries to attempt. Defaults to 2.
*/
noResponseRetries?: number;
}
export declare type RaxConfig = {
raxConfig: RetryConfig;
} & AxiosRequestConfig;
/**
* Attach the interceptor to the Axios instance.
* @param instance The optional Axios instance on which to attach the
* interceptor.
* @returns The id of the interceptor attached to the axios instance.
*/
export declare function attach(instance?: AxiosInstance): number;
/**
* Eject the Axios interceptor that is providing retry capabilities.
* @param interceptorId The interceptorId provided in the config.
* @param instance The axios instance using this interceptor.
*/
export declare function detach(interceptorId: number, instance?: AxiosInstance): void;
/**
* Acquire the raxConfig object from an AxiosError if available.
* @param err The Axios error with a config object.
*/
export declare function getConfig(err: AxiosError): RetryConfig | undefined;

View File

@ -0,0 +1,133 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var axios_1 = require("axios");
/**
* Attach the interceptor to the Axios instance.
* @param instance The optional Axios instance on which to attach the
* interceptor.
* @returns The id of the interceptor attached to the axios instance.
*/
function attach(instance) {
instance = instance || axios_1.default;
return instance.interceptors.response.use(onFulfilled, onError);
}
exports.attach = attach;
/**
* Eject the Axios interceptor that is providing retry capabilities.
* @param interceptorId The interceptorId provided in the config.
* @param instance The axios instance using this interceptor.
*/
function detach(interceptorId, instance) {
instance = instance || axios_1.default;
instance.interceptors.response.eject(interceptorId);
}
exports.detach = detach;
function onFulfilled(res) {
return res;
}
function onError(err) {
var config = err.config.raxConfig || {};
config.currentRetryAttempt = config.currentRetryAttempt || 0;
config.retry =
(config.retry === undefined || config.retry === null) ? 3 : config.retry;
config.retryDelay = config.retryDelay || 100;
config.instance = config.instance || axios_1.default;
config.httpMethodsToRetry =
config.httpMethodsToRetry || ['GET', 'HEAD', 'PUT', 'OPTIONS', 'DELETE'];
config.noResponseRetries = (config.noResponseRetries === undefined ||
config.noResponseRetries === null) ?
2 :
config.noResponseRetries;
// If this wasn't in the list of status codes where we want
// to automatically retry, return.
var retryRanges = [
// https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
// 1xx - Retry (Informational, request still processing)
// 2xx - Do not retry (Success)
// 3xx - Do not retry (Redirect)
// 4xx - Do not retry (Client errors)
// 429 - Retry ("Too Many Requests")
// 5xx - Retry (Server errors)
[100, 199], [429, 429], [500, 599]
];
config.statusCodesToRetry = config.statusCodesToRetry || retryRanges;
// Put the config back into the err
err.config.raxConfig = config;
// Determine if we should retry the request
var shouldRetryFn = config.shouldRetry || shouldRetryRequest;
if (!shouldRetryFn(err)) {
return Promise.reject(err);
}
// Calculate time to wait with exponential backoff.
// Formula: (2^c - 1 / 2) * 1000
var delay = (Math.pow(2, config.currentRetryAttempt) - 1) / 2 * 1000;
// We're going to retry! Incremenent the counter.
err.config.raxConfig.currentRetryAttempt += 1;
// Create a promise that invokes the retry after the backOffDelay
var backoff = new Promise(function (resolve) {
setTimeout(resolve, delay);
});
// Notify the user if they added an `onRetryAttempt` handler
if (config.onRetryAttempt) {
config.onRetryAttempt(err);
}
// Return the promise in which recalls axios to retry the request
return backoff.then(function () {
return config.instance.request(err.config);
});
}
/**
* Determine based on config if we should retry the request.
* @param err The AxiosError passed to the interceptor.
*/
function shouldRetryRequest(err) {
var config = err.config.raxConfig;
// If there's no config, or retries are disabled, return.
if (!config || config.retry === 0) {
return false;
}
// Check if this error has no response (ETIMEDOUT, ENOTFOUND, etc)
if (!err.response &&
((config.currentRetryAttempt || 0) >= config.noResponseRetries)) {
return false;
}
// Only retry with configured HttpMethods.
if (!err.config.method ||
config.httpMethodsToRetry.indexOf(err.config.method.toUpperCase()) < 0) {
return false;
}
// If this wasn't in the list of status codes where we want
// to automatically retry, return.
if (err.response && err.response.status) {
var isInRange = false;
for (var _i = 0, _a = config.statusCodesToRetry; _i < _a.length; _i++) {
var _b = _a[_i], min = _b[0], max = _b[1];
var status = err.response.status;
if (status >= min && status <= max) {
isInRange = true;
break;
}
}
if (!isInRange) {
return false;
}
}
// If we are out of retry attempts, return
config.currentRetryAttempt = config.currentRetryAttempt || 0;
if (config.currentRetryAttempt >= config.retry) {
return false;
}
return true;
}
/**
* Acquire the raxConfig object from an AxiosError if available.
* @param err The Axios error with a config object.
*/
function getConfig(err) {
if (err && err.config) {
return err.config.raxConfig;
}
return;
}
exports.getConfig = getConfig;
//# sourceMappingURL=index.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}