···183183 // microseconds
184184 return dayjs.duration({milliseconds: Number(pos / 1000)}).asSeconds();
185185 } catch(e) {
186186+ // eslint-disable-next-line preserve-caught-error
186187 throw new Error('Could not get player Position', {cause: convertDBusExceptionToError(e)});
187188 }
188189 }
···192193 const status = await props['PlaybackStatus'];
193194 return status as PlaybackStatus;
194195 } catch (e) {
196196+ // eslint-disable-next-line preserve-caught-error
195197 throw new Error('Could not get player PlaybackStatus', {cause: convertDBusExceptionToError(e)})
196198 }
197199 }
···201203 const metadata = await props['Metadata'];
202204 return this.metadataToPlain(metadata);
203205 } catch(e) {
206206+ // eslint-disable-next-line preserve-caught-error
204207 throw new Error('Could not get player Metadata', {cause: convertDBusExceptionToError(e)});
205208 }
206209 }
+2-1
src/backend/sources/SpotifySource.ts
···4040import { MemoryPositionalSource } from "./MemoryPositionalSource.ts";
4141import { baseFormatPlayObj } from "../utils/PlayTransformUtils.ts";
4242import { createGetScrobblesForTimeRangeFunc } from "../utils/ListenFetchUtils.ts";
4343+import { SimpleError } from "../common/errors/MSErrors.ts";
43444445const scopes = ['user-read-recently-played', 'user-read-currently-playing', 'user-read-playback-state', 'user-read-playback-position'];
4546const state = 'random';
···550551 const spotifyError = new UpstreamError('Spotify API call failed', {cause: e});
551552 if (e.statusCode === 401 && !hasApiPermissionError(e)) {
552553 if (this.spotifyApi.getRefreshToken() === undefined) {
553553- throw new Error('Access token was not valid and no refresh token was present')
554554+ throw new SimpleError('Access token was not valid and no refresh token was present', {cause: e});
554555 }
555556 this.logger.debug('Access token was not valid, attempting to refresh');
556557
+1-3
src/backend/tests/database/drizzle.test.ts
···1515import { formatNumber, generateArray } from '../../../core/DataUtils.ts';
1616import { objectsEqual } from '../../utils/DataUtils.ts';
1717import { eq, sql } from 'drizzle-orm';
1818-import { type PlaySelect } from '../../common/database/drizzle/drizzleTypes.ts';
1918import { loggerDebug } from '@foxxmd/logging';
2019import { transientDb } from '../utils/TransientTestUtils.ts';
2120import { getRoot } from '../../ioc.ts';
···531530 fixtureCreatePlay({ componentId: component[0].id, play: generatePlay({}, {source: 'test2'}) })
532531 ]).returning();
533532534534- let result: PlaySelect[];
535533 // https://github.com/drizzle-team/drizzle-orm/discussions/938#discussioncomment-6542336
536536- result = await db.query.plays.findMany({
534534+ const result = await db.query.plays.findMany({
537535 where: {
538536 AND: [
539537 {
+1-1
src/backend/utils/ValidationUtils.ts
···9696 const module = await import(resolve(projectDir, schemaFuncPath))
9797 schemaFetchFunc = module.getSchemaForType;
9898 } catch (e) {
9999- throw new Error(`Could not load module from path: ${schemaFuncPath}`);
9999+ throw new Error(`Could not load module from path: ${schemaFuncPath}`, {cause: e});
100100 }
101101 return schemaFetchFunc;
102102}