Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
// For testing multi-car when you only have one car
/*
vehicles[1] = {};
vehicles[1].id_s = vehicles[0].id_s;
vehicles[1].display_name = "Tessie";
*/
session.set("vehicles", vehicles);
session.set("options", options);
return vehicles;
});
} else if (req.sessionDetails.accessToken) {
log("OAuth token passed by Alexa");
options = {authToken: req.sessionDetails.accessToken};
return tjs.vehiclesAsync(options)
.then(function(vehicles) {
log("vehicles completed.");
// ensure we have a default vehicle
options.vehicleID = vehicles[0].id_s;
session.set("vehicles", vehicles);
session.set("options", options);
return vehicles;
});
} else {
// promise fails with error response!
return new Promise(function (fulfill, reject) {
reject("No login or token found!");
});
}
}
}
return tjs.vehiclesAsync(options);
})
.then(function(vehicles) {
// ensure we have a default vehicle
options.vehicleID = vehicles[0].id_s;
session.set("vehicles", vehicles);
session.set("options", options);
return vehicles;
});
} else if (token) {
// if token found in ENV then use it
log("OAuth token found in process ENV");
options = {authToken: token};
return tjs.vehiclesAsync(options)
.then(function(vehicles) {
// ensure we have a default vehicle
options.vehicleID = vehicles[0].id_s;
// For testing multi-car when you only have one car
/*
vehicles[1] = {};
vehicles[1].id_s = vehicles[0].id_s;
vehicles[1].display_name = "Tessie";
*/
session.set("vehicles", vehicles);
session.set("options", options);
return vehicles;
});
} else if (req.sessionDetails.accessToken) {
log("OAuth token passed by Alexa");
async function triggerHomeLink(callback) {
// This is a bit more involved than it really needs to be
try {
let options = {"authToken": g_BearerToken, "vehicleID": Config.tesla.vehicleId};
// Retrieve vehicle metadata first to determine if we need to wake it up, and for tokens
let vehicle = (await Tesla.vehiclesAsync(options)).find(v => v.id_s == Config.tesla.vehicleId);
if (!vehicle) {
return callback(new Error("Cannot find vehicle"));
}
if (!vehicle.tokens || !vehicle.tokens[0]) {
return callback(new Error("No tokens found"));
}
if (['offline', 'asleep'].includes(vehicle.state)) {
// Wake up the car first
await Tesla.wakeUpAsync(options);
await new Promise(resolve => setTimeout(resolve, 5000));
}
// Get the car's drive state because we need its coordinates
let driveState = await Tesla.driveStateAsync(options);
g_BearerTokenExpiresTime = Infinity;
auth();
return;
}
if (Date.now() - g_LastPoll < 10000) {
// last poll was under 10 seconds ago
enqueueRequest();
return;
}
log("Requesting data");
let options = {"authToken": g_BearerToken, "vehicleID": Config.tesla.vehicleId};
try {
let vehicleMetadata = (await Tesla.vehiclesAsync(options)).find(v => (v.id_s || v.id) == Config.tesla.vehicleId);
if (!vehicleMetadata) {
log("Unable to retrieve metadata for vehicle: vehicle not found");
return;
}
if (['asleep', 'offline'].includes(vehicleMetadata.state)) {
// Car is asleep
log('Vehicle is asleep');
setState(VehicleState.Asleep);
if (g_CurrentState != VehicleState.Awoken && Date.now() - g_CarLastSeenAwake < (1000 * 60 * 60 * 3)) {
// Only wake it up to poll data every 3 hours
g_LastPoll = Date.now();
enqueueRequest();
return;
}
.then(function(result) {
options = {authToken: result.authToken};
return tjs.vehiclesAsync(options);
})
.then(function(vehicles) {