🐛 Fix pull request issues

This commit is contained in:
Meier Lukas
2023-06-10 19:04:54 +02:00
parent d704dfa8b6
commit c1658d68e1
16 changed files with 115 additions and 77 deletions

View File

@@ -5,8 +5,9 @@ import Consola from 'consola';
import { NextApiRequest, NextApiResponse } from 'next';
import { z } from 'zod';
import { AppIntegrationType } from '../../../types/app';
import { AppIntegrationType, IntegrationType } from '../../../types/app';
import { getConfig } from '../../../tools/config/getConfig';
import { checkIntegrationsType } from '~/tools/client/app-properties';
export default async (req: NextApiRequest, res: NextApiResponse) => {
// Filter out if the reuqest is a POST or a GET
@@ -51,14 +52,14 @@ async function Get(req: NextApiRequest, res: NextApiResponse) {
const calendar = config.widgets.find((w) => w.type === 'calendar' && w.id === widgetId);
const useSonarrv4 = calendar?.properties.useSonarrv4 ?? false;
const mediaAppIntegrationTypes: AppIntegrationType['type'][] = [
const mediaAppIntegrationTypes = [
'sonarr',
'radarr',
'readarr',
'lidarr',
];
const mediaApps = config.apps.filter(
(app) => app.integration && mediaAppIntegrationTypes.includes(app.integration.type)
] as const satisfies readonly IntegrationType[];
const mediaApps = config.apps.filter((app) =>
checkIntegrationsType(app.integration, mediaAppIntegrationTypes)
);
const IntegrationTypeEndpointMap = new Map<AppIntegrationType['type'], string>([

View File

@@ -22,6 +22,7 @@ import {
NormalizedDownloadAppStat,
NormalizedDownloadQueueResponse,
} from '../../../../types/api/downloads/queue/NormalizedDownloadQueueResponse';
import { findAppProperty } from '~/tools/client/app-properties';
const Get = async (request: NextApiRequest, response: NextApiResponse) => {
const configName = getCookie('config-name', { req: request });
@@ -151,8 +152,8 @@ const GetDataFromClient = async (
const options = {
host: url.hostname,
port: url.port,
login: app.integration.properties.find((x) => x.field === 'username')?.value ?? undefined,
hash: app.integration.properties.find((x) => x.field === 'password')?.value ?? undefined,
login: findAppProperty(app, 'username'),
hash: findAppProperty(app, 'password'),
};
const nzbGet = NzbgetClient(options);

View File

@@ -5,13 +5,14 @@ import { getConfig } from '../../../../tools/config/getConfig';
import { MediaRequest } from '../../../../widgets/media-requests/media-request-types';
import { MediaRequestListWidget } from '../../../../widgets/media-requests/MediaRequestListTile';
import { checkIntegrationsType } from '~/tools/client/app-properties';
const Get = async (request: NextApiRequest, response: NextApiResponse) => {
const configName = getCookie('config-name', { req: request });
const config = getConfig(configName?.toString() ?? 'default');
const apps = config.apps.filter((app) =>
['overseerr', 'jellyseerr'].includes(app.integration?.type ?? '')
checkIntegrationsType(app.integration, ['overseerr', 'jellyseerr'])
);
Consola.log(`Retrieving media requests from ${apps.length} apps`);
@@ -24,11 +25,12 @@ const Get = async (request: NextApiRequest, response: NextApiResponse) => {
})
.then(async (response) => {
const body = (await response.json()) as OverseerrResponse;
const mediaWidget = config.widgets.find(
(x) => x.type === 'media-requests-list') as MediaRequestListWidget | undefined;
const mediaWidget = config.widgets.find((x) => x.type === 'media-requests-list') as
| MediaRequestListWidget
| undefined;
if (!mediaWidget) {
Consola.log('No media-requests-list found');
return Promise.resolve([]);
Consola.log('No media-requests-list found');
return Promise.resolve([]);
}
const appUrl = mediaWidget.properties.replaceLinksWithExternalHost
? app.behaviour.externalUrl

View File

@@ -18,6 +18,7 @@ import {
GenericSessionInfo,
} from '../../../../types/api/media-server/session-info';
import { PlexClient } from '../../../../tools/server/sdk/plex/plexClient';
import { checkIntegrationsType, findAppProperty } from '~/tools/client/app-properties';
const jellyfin = new Jellyfin({
clientInfo: {
@@ -35,7 +36,7 @@ const Get = async (request: NextApiRequest, response: NextApiResponse) => {
const config = getConfig(configName?.toString() ?? 'default');
const apps = config.apps.filter((app) =>
['jellyfin', 'plex'].includes(app.integration?.type ?? '')
checkIntegrationsType(app.integration, ['jellyfin', 'plex'])
);
const servers = await Promise.all(
@@ -66,9 +67,9 @@ const Get = async (request: NextApiRequest, response: NextApiResponse) => {
const handleServer = async (app: ConfigAppType): Promise<GenericMediaServer | undefined> => {
switch (app.integration?.type) {
case 'jellyfin': {
const username = app.integration.properties.find((x) => x.field === 'username');
const username = findAppProperty(app, 'username');
if (!username || !username.value) {
if (!username) {
return {
appId: app.id,
serverAddress: app.url,
@@ -79,9 +80,9 @@ const handleServer = async (app: ConfigAppType): Promise<GenericMediaServer | un
};
}
const password = app.integration.properties.find((x) => x.field === 'password');
const password = findAppProperty(app, 'password');
if (!password || !password.value) {
if (!password) {
return {
appId: app.id,
serverAddress: app.url,
@@ -94,7 +95,7 @@ const handleServer = async (app: ConfigAppType): Promise<GenericMediaServer | un
const api = jellyfin.createApi(app.url);
const infoApi = await getSystemApi(api).getPublicSystemInfo();
await api.authenticateUserByName(username.value, password.value);
await api.authenticateUserByName(username, password);
const sessionApi = await getSessionApi(api);
const sessions = await sessionApi.getSessions();
return {
@@ -166,9 +167,9 @@ const handleServer = async (app: ConfigAppType): Promise<GenericMediaServer | un
};
}
case 'plex': {
const apiKey = app.integration.properties.find((x) => x.field === 'apiKey');
const apiKey = findAppProperty(app, 'apiKey');
if (!apiKey || !apiKey.value) {
if (!apiKey) {
return {
serverAddress: app.url,
sessions: [],
@@ -179,7 +180,7 @@ const handleServer = async (app: ConfigAppType): Promise<GenericMediaServer | un
};
}
const plexClient = new PlexClient(app.url, apiKey.value);
const plexClient = new PlexClient(app.url, apiKey);
const sessions = await plexClient.getSessions();
return {
serverAddress: app.url,

View File

@@ -7,6 +7,7 @@ import { NzbgetHistoryItem } from '../../../../server/api/routers/usenet/nzbget/
import { NzbgetClient } from '../../../../server/api/routers/usenet/nzbget/nzbget-client';
import { getConfig } from '../../../../tools/config/getConfig';
import { UsenetHistoryItem } from '../../../../widgets/useNet/types';
import { findAppProperty } from '~/tools/client/app-properties';
dayjs.extend(duration);
@@ -40,8 +41,8 @@ async function Get(req: NextApiRequest, res: NextApiResponse) {
const options = {
host: url.hostname,
port: url.port || (url.protocol === 'https:' ? '443' : '80'),
login: app.integration.properties.find((x) => x.field === 'username')?.value ?? undefined,
hash: app.integration.properties.find((x) => x.field === 'password')?.value ?? undefined,
login: findAppProperty(app, 'username'),
hash: findAppProperty(app, 'password'),
};
const nzbGet = NzbgetClient(options);
@@ -77,7 +78,7 @@ async function Get(req: NextApiRequest, res: NextApiResponse) {
case 'sabnzbd': {
const { origin } = new URL(app.url);
const apiKey = app.integration.properties.find((x) => x.field === 'apiKey')?.value;
const apiKey = findAppProperty(app, 'apiKey');
if (!apiKey) {
throw new Error(`API Key for app "${app.name}" is missing`);
}

View File

@@ -6,6 +6,7 @@ import { Client } from 'sabnzbd-api';
import { getConfig } from '../../../../tools/config/getConfig';
import { NzbgetClient } from '../../../../server/api/routers/usenet/nzbget/nzbget-client';
import { NzbgetStatus } from '../../../../server/api/routers/usenet/nzbget/types';
import { findAppProperty } from '~/tools/client/app-properties';
dayjs.extend(duration);
@@ -39,8 +40,8 @@ async function Get(req: NextApiRequest, res: NextApiResponse) {
const options = {
host: url.hostname,
port: url.port || (url.protocol === 'https:' ? '443' : '80'),
login: app.integration.properties.find((x) => x.field === 'username')?.value ?? undefined,
hash: app.integration.properties.find((x) => x.field === 'password')?.value ?? undefined,
login: findAppProperty(app, 'username'),
hash: findAppProperty(app, 'password'),
};
const nzbGet = NzbgetClient(options);
@@ -70,7 +71,7 @@ async function Get(req: NextApiRequest, res: NextApiResponse) {
break;
}
case 'sabnzbd': {
const apiKey = app.integration.properties.find((x) => x.field === 'apiKey')?.value;
const apiKey = findAppProperty(app, 'apiKey');
if (!apiKey) {
throw new Error(`API Key for app "${app.name}" is missing`);
}

View File

@@ -5,6 +5,7 @@ import { NextApiRequest, NextApiResponse } from 'next';
import { Client } from 'sabnzbd-api';
import { getConfig } from '../../../../tools/config/getConfig';
import { NzbgetClient } from '../../../../server/api/routers/usenet/nzbget/nzbget-client';
import { findAppProperty } from '~/tools/client/app-properties';
dayjs.extend(duration);
@@ -31,8 +32,8 @@ async function Post(req: NextApiRequest, res: NextApiResponse) {
const options = {
host: url.hostname,
port: url.port || (url.protocol === 'https:' ? '443' : '80'),
login: app.integration.properties.find((x) => x.field === 'username')?.value ?? undefined,
hash: app.integration.properties.find((x) => x.field === 'password')?.value ?? undefined,
login: findAppProperty(app, 'username'),
hash: findAppProperty(app, 'password'),
};
const nzbGet = NzbgetClient(options);
@@ -49,7 +50,7 @@ async function Post(req: NextApiRequest, res: NextApiResponse) {
break;
}
case 'sabnzbd': {
const apiKey = app.integration.properties.find((x) => x.field === 'apiKey')?.value;
const apiKey = findAppProperty(app, 'apiKey');
if (!apiKey) {
throw new Error(`API Key for app "${app.name}" is missing`);
}

View File

@@ -7,6 +7,7 @@ import { getConfig } from '../../../../tools/config/getConfig';
import { UsenetQueueItem } from '../../../../widgets/useNet/types';
import { NzbgetClient } from '../../../../server/api/routers/usenet/nzbget/nzbget-client';
import { NzbgetQueueItem, NzbgetStatus } from '../../../../server/api/routers/usenet/nzbget/types';
import { findAppProperty } from '~/tools/client/app-properties';
dayjs.extend(duration);
@@ -40,8 +41,8 @@ async function Get(req: NextApiRequest, res: NextApiResponse) {
const options = {
host: url.hostname,
port: url.port || (url.protocol === 'https:' ? '443' : '80'),
login: app.integration.properties.find((x) => x.field === 'username')?.value ?? undefined,
hash: app.integration.properties.find((x) => x.field === 'password')?.value ?? undefined,
login: findAppProperty(app, 'username'),
hash: findAppProperty(app, 'password'),
};
const nzbGet = NzbgetClient(options);
@@ -91,7 +92,7 @@ async function Get(req: NextApiRequest, res: NextApiResponse) {
break;
}
case 'sabnzbd': {
const apiKey = app.integration.properties.find((x) => x.field === 'apiKey')?.value;
const apiKey = findAppProperty(app, 'apiKey');
if (!apiKey) {
throw new Error(`API Key for app "${app.name}" is missing`);
}

View File

@@ -5,6 +5,7 @@ import { NextApiRequest, NextApiResponse } from 'next';
import { Client } from 'sabnzbd-api';
import { getConfig } from '../../../../tools/config/getConfig';
import { NzbgetClient } from '../../../../server/api/routers/usenet/nzbget/nzbget-client';
import { findAppProperty } from '~/tools/client/app-properties';
dayjs.extend(duration);
@@ -32,8 +33,8 @@ async function Post(req: NextApiRequest, res: NextApiResponse) {
const options = {
host: url.hostname,
port: url.port || (url.protocol === 'https:' ? '443' : '80'),
login: app.integration.properties.find((x) => x.field === 'username')?.value ?? undefined,
hash: app.integration.properties.find((x) => x.field === 'password')?.value ?? undefined,
login: findAppProperty(app, 'username'),
hash: findAppProperty(app, 'password'),
};
const nzbGet = NzbgetClient(options);
@@ -50,7 +51,7 @@ async function Post(req: NextApiRequest, res: NextApiResponse) {
break;
}
case 'sabnzbd': {
const apiKey = app.integration.properties.find((x) => x.field === 'apiKey')?.value;
const apiKey = findAppProperty(app, 'apiKey');
if (!apiKey) {
throw new Error(`API Key for app "${app.name}" is missing`);
}