Сделал перерыв, прежде чем я вернулся к этому - лучшее решение для меня, кажется, становится менее разочарованным, прежде чем я продолжаю расстраивать проблему.
Во-первых, я переместил свойство api
в initApi
функция, и вернул это там - это, казалось, решило мой вопрос:
async function initApi() {
const googleKey = await readJSON(appRoot + '/secrets/google-auth.json');
const jwt = new google.auth.JWT(
googleKey.client_email, null, googleKey.private_key, scopes);
jwt.authorize();
return google.calendar({
version: 'v3',
auth: jwt
});
}
const calendar = {
events: events,
list: async function() {
await this.api.calendarList.list();
},
};
module.exports = async () => Object.assign(calendar, { api: await initApi() });
Однако второй оговоркой было то, что теперь он продолжал жаловаться на то, что client.request
не был найден - оказывается, у Google есть два набораиз аутентичных инструментов.
После изменения на google-auth-library
(вместо использования встроенного auth.JWT
*1013*) я получил ответ от сервера без жалоб client.request
:
const { google } = require('googleapis');
const { JWT } = require('google-auth-library');
...
async function initApi() {
const googleKey = await readJSON(appRoot + '/secrets/google-auth.json');
const jwt = new JWT(
googleKey.client_email, null, googleKey.private_key, scopes);
return await google.calendar({
version: 'v3',
auth: jwt
});
}
Теперь это работает!Надеюсь, что это поможет всем, у кого есть эта проблема.
EDIT : Более того, см. Пример Google здесь для загрузки аутентификации из загружаемого файла JSON с панели инструментов API Google.