mirror of
https://github.com/Xevion/bus-reminder.git
synced 2025-12-10 14:06:45 -06:00
Add & use true-myth to improve Life360 location error handling
This commit is contained in:
@@ -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",
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user