ringcentral-personal-chatbot
Version:
RingCentral personal chatbot framework
117 lines (97 loc) • 2.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = renew;
exports.refreshUser = refreshUser;
exports.triggerMaintain = triggerMaintain;
var _ringcentral = require("../models/ringcentral");
var _maintain = require("../common/maintain");
/**
* renew all rc tokens task
* should have a limit or may take too long
*/
// const deadline = 1000 * 60 * 60 * 24 * 90
const limit = parseInt(process.env.RENEW_LIMIT, 10);
const expire = 3600 * 1000 - 60 * 1000;
async function refreshUser(user) {
if (!user.enabled && user.turnOffDesc === 'self') {
console.log('user id', user.id, 'turn it off by self, no refresh token');
return false;
}
const now = Date.now();
const update = +new Date(user.lastRefreshTime); // console.log('update time', update)
// console.log('expire', expire)
// console.log('now', now)
if (now - update >= expire) {
console.log('refresh token for', user.id);
await user.refresh();
}
if (!user.enabled && user.turnOffDesc !== 'self') {
await user.ensureWebHook();
}
return user;
} // function notUsedForSomeTime (inst) {
// const now = Date.now()
// return now - (inst.lastUseTime || now) > deadline
// }
function nextTask(lastKey) {
console.log('send next renew request', lastKey); // const url = `${process.env.RINGCENTRAL_APP_SERVER}/admin/renew-token?db=${db}&lastKey=${lastKey}`
// axios.put(
// url,
// undefined,
// {
// auth: {
// username: process.env.RINGCENTRAL_ADMIN_USERNAME,
// password: process.env.RINGCENTRAL_ADMIN_PASSWORD
// }
// }
// )
return (0, _maintain.maintain)({
lastKey,
app: 'maintain'
});
}
async function renew(req, res) {
const {
lastKey
} = req.query;
const q = {
limit
};
if (lastKey) {
q.lastKey = {
id: lastKey
};
}
console.log('running renew task');
const users = await _ringcentral.User.findAll(q);
console.log('authed rc users:', users.length);
let i = 1;
for (const user of users) {
console.log(i, 'user', user.id);
await refreshUser(user).catch(console.error);
i++;
}
if (users.lastKey) {
await nextTask(users.lastKey.id);
}
res.send('ok');
} // trigger by native lambda event
function triggerMaintain(event) {
console.log('event- for maintain---', event);
return new Promise((resolve, reject) => {
const {
lastKey
} = event;
const req = {
query: {
lastKey
}
};
const res = {
send: resolve
};
renew(req, res);
});
}