ringcentral-personal-chatbot
Version:
RingCentral personal chatbot framework
97 lines (77 loc) • 2.88 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.tokenExpireTime = exports.pack = exports.loginUrl = exports.jwtPrefix = exports.extraPath = exports.defaultState = exports.createRc = exports.buildLoginUrlRedirect = void 0;
var _path = require("path");
var _crypto = _interopRequireDefault(require("crypto"));
var _core = _interopRequireDefault(require("@rc-ex/core"));
var _retry = _interopRequireDefault(require("@rc-ex/retry"));
var _authorizeUri = _interopRequireDefault(require("@rc-ex/authorize-uri"));
// import RateLimitExtension from '@rc-ex/rate-limit'
const {
RINGCENTRAL_SERVER,
RINGCENTRAL_CHATBOT_SERVER,
RINGCENTRAL_CLIENT_ID,
RINGCENTRAL_CLIENT_SECRET,
SERVER_HOME
} = process.env;
const arr = RINGCENTRAL_CHATBOT_SERVER.split('/');
const root = arr[0] + arr[1] + arr[2];
const createRc = async () => {
const rc = new _core.default({
server: RINGCENTRAL_SERVER,
clientId: RINGCENTRAL_CLIENT_ID,
clientSecret: RINGCENTRAL_CLIENT_SECRET
});
const retryOptions = {
shouldRetry: (restException, retriesAttempted) => {
const {
status
} = restException.response;
return retriesAttempted < 5 && ([429, 503].includes(status) || status > 503);
},
retryInterval: (restException, retriesAttempted) => {
const f = restException.response.status === 429 ? 60 : 1;
return f * 1000 * Math.pow(2, retriesAttempted);
}
};
const retryExtension = new _retry.default(retryOptions);
const authorizeUriExtension = new _authorizeUri.default();
await rc.installExtension(authorizeUriExtension);
await rc.installExtension(retryExtension);
rc.redirectUrl = RINGCENTRAL_CHATBOT_SERVER + '/rc/oauth';
rc.loginUrl = ({
state
}) => {
return authorizeUriExtension.buildUri({
state,
redirect_uri: rc.redirectUrl
});
};
return rc;
};
exports.createRc = createRc;
const defaultState = '__default_state_';
exports.defaultState = defaultState;
const extraPath = RINGCENTRAL_CHATBOT_SERVER.replace(root, '');
exports.extraPath = extraPath;
const pack = require((0, _path.resolve)(__dirname, '../../../package.json'));
exports.pack = pack;
const jwtPrefix = _crypto.default.createHash('md5').update(RINGCENTRAL_CHATBOT_SERVER).digest('hex');
exports.jwtPrefix = jwtPrefix;
const loginUrl = async () => {
const rc = await createRc();
return rc.loginUrl({
state: defaultState
});
};
exports.loginUrl = loginUrl;
const buildLoginUrlRedirect = async () => {
const url = await loginUrl();
return url.replace(defaultState, encodeURIComponent(RINGCENTRAL_CHATBOT_SERVER + SERVER_HOME));
};
exports.buildLoginUrlRedirect = buildLoginUrlRedirect;
const tokenExpireTime = 25 * 60 * 1000;
exports.tokenExpireTime = tokenExpireTime;