diff --git a/web/src/hooks.server.ts b/web/src/hooks.server.ts index 1eae4998..f1388cd4 100644 --- a/web/src/hooks.server.ts +++ b/web/src/hooks.server.ts @@ -95,7 +95,11 @@ const auth: Handle = async ({ event, resolve }) => { meiliApiKey = publicMeilisearchKey!; } - const ms = new MeiliSearch({ host: env.MEILI_URL, apiKey: meiliApiKey }); + const meiliHost = env.MEILI_URL; + if (!meiliHost) { + throw error(500, "Missing MEILI_URL"); + } + const ms = new MeiliSearch({ host: meiliHost, apiKey: meiliApiKey }); event.locals.ms = ms event.locals.pb = pb @@ -135,4 +139,4 @@ const removeLinkFromHeaders: Handle = } -export const handle = sequence(csrf(['/api/v1']), auth, removeLinkFromHeaders) \ No newline at end of file +export const handle = sequence(csrf(['/api/v1']), auth, removeLinkFromHeaders) diff --git a/web/src/lib/util/maplibre_util.ts b/web/src/lib/util/maplibre_util.ts index a260b7c4..df5b20ef 100644 --- a/web/src/lib/util/maplibre_util.ts +++ b/web/src/lib/util/maplibre_util.ts @@ -268,23 +268,23 @@ export function createOverpassPopup(feature: GeoJSON.Feature, coordinates: GeoJS popupContainer.className = "p-4" const popupHeading = document.createElement("h1"); - popupHeading.classList = "font-medium text-lg" + popupHeading.className = "font-medium text-lg" popupHeading.textContent = name; const coordinateSubtitle = document.createElement("p") - coordinateSubtitle.classList = "text-gray-500" + coordinateSubtitle.className = "text-gray-500" coordinateSubtitle.textContent = `${coordinates[0].toFixed(6)}, ${coordinates[1].toFixed(6)}` popupContainer.appendChild(popupHeading) popupContainer.appendChild(coordinateSubtitle) const tagsGrid = document.createElement("div") - tagsGrid.classList = "grid grid-cols-2 gap-x-4 mt-4" + tagsGrid.className = "grid grid-cols-2 gap-x-4 mt-4" Object.entries(tags).forEach((([k, v]) => { if (k == "name") return; const kSpan = document.createElement("span") - kSpan.classList = "font-mono" + kSpan.className = "font-mono" kSpan.textContent = k; const vSpan = document.createElement("span") vSpan.textContent = v; diff --git a/web/src/lib/vendor/easy-fit/binary.ts b/web/src/lib/vendor/easy-fit/binary.ts index c6fbd7d6..c808326f 100644 --- a/web/src/lib/vendor/easy-fit/binary.ts +++ b/web/src/lib/vendor/easy-fit/binary.ts @@ -41,11 +41,13 @@ function formatByType(data: number, type: string | number, scale: number, offset case 'uint32': case 'uint16': return scale ? data / scale + offset : data; - default: - if (FIT.types[type]) { - return FIT.types[type][data]; + default: { + const types = FIT.types as Record>; + if (types[type]) { + return types[type][String(data)]; } return data; + } } } @@ -91,7 +93,8 @@ function isInvalidValue(data: number, type: string) { } function convertTo(data: number, unitsList: string, speedUnit: string | number) { - var unitObj = FIT.options[unitsList][speedUnit]; + const options = FIT.options as Record>; + var unitObj = options[unitsList]?.[String(speedUnit)]; return unitObj ? data * unitObj.multiplier + unitObj.offset : data; } diff --git a/web/src/lib/vendor/easy-fit/easy-fit.ts b/web/src/lib/vendor/easy-fit/easy-fit.ts index ace8a8b3..45f441d2 100644 --- a/web/src/lib/vendor/easy-fit/easy-fit.ts +++ b/web/src/lib/vendor/easy-fit/easy-fit.ts @@ -77,7 +77,7 @@ class EasyFit { } } - var fitObj = {}; + var fitObj: Record = {}; var sessions = []; var laps = []; var records = []; @@ -98,7 +98,7 @@ class EasyFit { var _readRecord = readRecord(blob, messageTypes, loopIndex, this.options, startDate), nextIndex = _readRecord.nextIndex, messageType = _readRecord.messageType, - message = _readRecord.message; + message = "message" in _readRecord ? _readRecord.message : undefined; loopIndex = nextIndex; switch (messageType) { diff --git a/web/src/lib/vendor/easy-fit/fit.ts b/web/src/lib/vendor/easy-fit/fit.ts index 54c7d6ed..1558beeb 100644 --- a/web/src/lib/vendor/easy-fit/fit.ts +++ b/web/src/lib/vendor/easy-fit/fit.ts @@ -2427,11 +2427,14 @@ function getMessageName(messageNum: keyof typeof FIT.messages) { return message ? message.name : ''; } -function getFieldObject(fieldNum: keyof typeof FIT.messages[keyof typeof FIT.messages], messageNum: keyof typeof FIT.messages) { +function getFieldObject(fieldNum: keyof typeof FIT.messages[keyof typeof FIT.messages], messageNum: keyof typeof FIT.messages): Record { var message = FIT.messages[messageNum]; if (!message) { - return ''; + return {}; } var fieldObj = message[fieldNum]; - return fieldObj ? fieldObj : {}; + if (fieldObj && typeof fieldObj === "object") { + return fieldObj as Record; + } + return {}; } \ No newline at end of file diff --git a/web/src/routes/settings/integrations/+page.svelte b/web/src/routes/settings/integrations/+page.svelte index 9ca4720d..0f33ac1c 100644 --- a/web/src/routes/settings/integrations/+page.svelte +++ b/web/src/routes/settings/integrations/+page.svelte @@ -86,6 +86,7 @@ clientSecret: integration.strava.clientSecret, routes: integration.strava.routes, activities: integration.strava.activities, + privacy: integration.strava.privacy, accessToken: undefined, refreshToken: undefined, expiresAt: undefined,