asset-tracker-gcp-mongoose-os
asset-tracker-gcp-mongoose-os copied to clipboard
Function getCloudIoTClient() crashes at 'getApplicationDefault'
I am getting the following error from the Firebase logs once the getCloudIoTClient() part my function runs:
typeerror: Cannot read property 'getApplicationDefault' of undefined at Promise (/srv/index.js:98:21) at new Promise (
) at getCloudIoTClient (/srv/index.js:97:10) at exports.updateConfig.functions.database.ref.onUpdate (/srv/index.js:58:5) at cloudFunctionNewSignature (/srv/node_modules/firebase-functions/lib/cloud-functions.js:109:23) at /worker/worker.js:726:24 at at process._tickDomainCallback (internal/process/next_tick.js:228:7)
Any insight as to why this may be happening? I have customized the updateDeviceConfig function to work with the RealTime Database and my own data set, but I don't see why that would the source of the problem.
/** Update device configuration when data is written to firebase */
exports.updateDeviceConfig = functions.database
.ref('/devices/{deviceId}/')
.onUpdate((change, context) => {
const deviceId = context.params.deviceId;
const device_name = `projects/${PROJECT_ID}/locations/${REGION}/registries/${REGISTRY}/devices/${deviceId}`;
const newConfig = change.after.val();
const data = new Buffer(JSON.stringify(newConfig));
const binaryData = data.toString('base64');
const request = {
name: device_name,
resource: {
version_to_update: 0,
data: {
binary_data: binaryData
}
}
};
console.log(newConfig);
console.log(request);
getCloudIoTClient().then(client => {
client.projects.locations.registries.devices.modifyCloudToDeviceConfig(request,
(err, data) => {
if (err) {
console.log('Could not update config:', deviceId);
console.log('Message: ', err);
} else {
console.log('Success :', data);
}
});
return;
})
.catch(err => {
console.log(err);
});
return true;
});
// Constants needed for getIoTClient method
const API_SCOPES = ['https://www.googleapis.com/auth/cloud-platform'];
const API_VERSION = 'v1';
const DISCOVERY_API = 'https://cloudiot.googleapis.com/$discovery/rest';
const SERVICE_NAME = 'cloudiot';
const DISCOVERY_URL = `${DISCOVERY_API}?version=${API_VERSION}`;
function getCloudIoTClient() {
return new Promise((resolve, reject) => {
googleapis.auth.getApplicationDefault((err, auth, projectId) => {
if (err) {
reject(err);
return;
}
googleapis.discoverAPI(DISCOVERY_URL, { auth }, (err, service) => {
if (!err) {
resolve(service);
} else {
reject(err);
}
});
});
});
}