Add & use true-myth to improve Life360 location error handling

This commit is contained in:
2023-09-05 12:27:54 -05:00
parent c6c37f120d
commit 9a9c676a74
3 changed files with 22 additions and 11 deletions

View File

@@ -31,6 +31,7 @@
"react-simple-code-editor": "^0.13.1", "react-simple-code-editor": "^0.13.1",
"sass": "^1.58.3", "sass": "^1.58.3",
"tailwindcss": "^3.2.7", "tailwindcss": "^3.2.7",
"true-myth": "^5",
"typescript": "^5.1.3", "typescript": "^5.1.3",
"winston": "^3.10.0", "winston": "^3.10.0",
"winston-loki": "^6.0.7", "winston-loki": "^6.0.7",

View File

@@ -1,6 +1,8 @@
import { env } from '@/env/server.mjs'; import { env } from '@/env/server.mjs';
// @ts-ignore // @ts-ignore
import * as life360 from 'life360-node-api'; import * as life360 from 'life360-node-api';
import logger from '@/logger';
import Result, { err, ok } from 'true-myth/result';
const center = { const center = {
longitude: env.CENTER_LONGITUDE, longitude: env.CENTER_LONGITUDE,
@@ -53,42 +55,45 @@ export function distance(
/** /**
* @returns The distance in meters between me and the center * @returns The distance in meters between me and the center
*/ */
export async function getDistance(): Promise<number> { export async function getDistance(): Promise<Result<number, string>> {
let client; let client;
try { try {
// Set up the Life360 API client // Set up the Life360 API client
client = await life360.login(env.LIFE360_USERNAME, env.LIFE360_PASSWORD); client = await life360.login(env.LIFE360_USERNAME, env.LIFE360_PASSWORD);
} catch (e) { } catch (e) {
throw new Error( return err(
`Failed while logging in to Life360: ${ `Failed while logging in to Life360 (${
e instanceof Error ? e.message : e e instanceof Error ? e.message : e
}` })`
); );
} }
// Get my current location
let me; let me;
try { try {
// Get my current location
const circles = await client.listCircles(); const circles = await client.listCircles();
// Assumed only in one circle (the first)
const myCircle = circles[0]; const myCircle = circles[0];
logger.debug(`${circles.length} circles found, using first.`, {
circle: myCircle
});
const members = await myCircle.listMembers(); const members = await myCircle.listMembers();
me = members.findById(env.LIFE360_MEMBER_ID); me = members.findById(env.LIFE360_MEMBER_ID);
} catch (e) { } catch (e) {
throw new Error( return err(
`Failed while getting my location from Life360: ${ `Failed while getting my location from Life360: ${
e instanceof Error ? e.message : e e instanceof Error ? e.message : e
}` }`
); );
} }
// Parse my location into latitude and longitude // Parse my latitude and longitude into floats
const current = { const current = {
latitude: parseFloat(me.location.latitude), latitude: parseFloat(me.location.latitude),
longitude: parseFloat(me.location.longitude) longitude: parseFloat(me.location.longitude)
}; };
// Calculate the distance between my location and the center // Calculate the distance between my location and the center, multiply x1000 for meters
const difference = distance(current, center, 'K') * 1000; return ok(distance(current, center, 'K') * 1000);
return difference;
} }

View File

@@ -1338,6 +1338,11 @@ triple-beam@^1.3.0:
resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984"
integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==
"true-myth@^5":
version "5.4.0"
resolved "https://registry.yarnpkg.com/true-myth/-/true-myth-5.4.0.tgz#eff4a4d09e47d616c8089d42c1e78ac9640c68a2"
integrity sha512-MonJqkJf+VOXZ2msbpvAI1uJWoyfCN7nirR8/fNK+IlFDWYNLb9iqeAc2uhIbAQBynHtM02azZgepQDQclOwAw==
ts-mixer@^6.0.2: ts-mixer@^6.0.2:
version "6.0.3" version "6.0.3"
resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.3.tgz#69bd50f406ff39daa369885b16c77a6194c7cae6" resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.3.tgz#69bd50f406ff39daa369885b16c77a6194c7cae6"