diff --git a/src/backend/common/infrastructure/config/client/discord.ts b/src/backend/common/infrastructure/config/client/discord.ts index d0e3461b..90c47118 100644 --- a/src/backend/common/infrastructure/config/client/discord.ts +++ b/src/backend/common/infrastructure/config/client/discord.ts @@ -1,5 +1,5 @@ import * as z from "zod"; -import {commonClientConfigSchema, commonClientDataSchema} from "./index.ts"; +import {commonClientConfigSchema, commonClientDataSchema, type EnvClientSchema} from "./index.ts"; import {componentTypeSchema} from "../../../../../core/Atomic.ts"; export const statusTypeSchema = z.union([z.literal("online"), z.literal("idle"), z.literal("dnd"), z.literal("invisible")]); @@ -20,6 +20,31 @@ export const discordDataSchema = z.object({ export type DiscordData = z.infer; +const envDataSchema = z.object({ + DISCORD_TOKEN: z.string().optional(), + DISCORD_ARTWORK: z.string().optional(), + DISCORD_APPLICATION_ID: z.string().optional(), + DISCORD_IPC_LOCATIONS: z.string().optional(), + DISCORD_ARTWORK_DEFAULT_URL: z.string().optional(), + DISCORD_STATUS_OVERRIDE_ALLOW: z.string().optional(), + DISCORD_LISTENING_ACTIVITY_ALLOW: z.string().optional(), +}); + +export const envSchemas: EnvClientSchema = { + env: envDataSchema, + toConfig: (partial) => ({ + data: { + token: partial.DISCORD_TOKEN, + artwork: partial.DISCORD_ARTWORK, + applicationId: partial.DISCORD_APPLICATION_ID, + ipcLocations: partial.DISCORD_IPC_LOCATIONS, + artworkDefaultUrl: partial.DISCORD_ARTWORK_DEFAULT_URL, + statusOverrideAllow: partial.DISCORD_STATUS_OVERRIDE_ALLOW, + listeningActivityAllow: partial.DISCORD_LISTENING_ACTIVITY_ALLOW + } + }) +}; + export const discordClientDataSchema = discordDataSchema.extend(commonClientDataSchema.shape); export type DiscordClientData = z.infer; diff --git a/src/backend/common/infrastructure/config/client/koito.ts b/src/backend/common/infrastructure/config/client/koito.ts index 41d22aad..d7decf44 100644 --- a/src/backend/common/infrastructure/config/client/koito.ts +++ b/src/backend/common/infrastructure/config/client/koito.ts @@ -2,7 +2,7 @@ import * as z from "zod"; import type {UnixTimestamp} from "../../../../../core/Atomic.ts"; import {componentTypeSchema} from "../../../../../core/Atomic.ts"; import {requestRetryOptionsSchema} from "../common.ts"; -import {commonClientConfigSchema, commonClientDataSchema} from "./index.ts"; +import {commonClientConfigSchema, commonClientDataSchema, type EnvClientSchema} from "./index.ts"; export interface ListensResponse { items: ListenObjectResponse[] @@ -78,6 +78,23 @@ export const koitoDataSchema = z.object({ export type KoitoData = z.infer; +const envDataSchema = z.object({ + KOITO_URL: z.string().meta({description: 'URL for the Koito server'}), + KOITO_TOKEN: z.string().meta({description: 'User token for the user to scrobble for'}), + KOITO_USER: z.string().meta({description: 'Username of the user to scrobble for'}), +}); + +export const envSchemas: EnvClientSchema = { + env: envDataSchema, + toConfig: (partial) => ({ + data: { + url: partial.KOITO_URL, + token: partial.KOITO_TOKEN, + username: partial.KOITO_USER + } + }) +}; + export const koitoClientDataSchema = koitoDataSchema.extend(commonClientDataSchema.shape).meta({title: 'KoitoData'}); export type KoitoClientData = z.infer; diff --git a/src/backend/common/infrastructure/config/client/lastfm.ts b/src/backend/common/infrastructure/config/client/lastfm.ts index a69b910e..81ac43d8 100644 --- a/src/backend/common/infrastructure/config/client/lastfm.ts +++ b/src/backend/common/infrastructure/config/client/lastfm.ts @@ -1,6 +1,6 @@ import * as z from "zod"; import {requestRetryOptionsSchema} from "../common.ts"; -import {commonClientConfigSchema, commonClientDataSchema, commonClientOptionsSchema, nowPlayingOptionsSchema} from "./index.ts"; +import {commonClientConfigSchema, commonClientDataSchema, commonClientOptionsSchema, nowPlayingOptionsSchema, type EnvClientSchema} from "./index.ts"; export const lastfmDataSchema = z.object({ ...commonClientDataSchema.shape, @@ -44,6 +44,25 @@ export const lastfmDataSchema = z.object({ export type LastfmData = z.infer; +const envDataSchema = z.object({ + LASTFM_API_KEY: z.string().meta({description: 'API Key generated from Last.fm/Libre.fm account'}), + LASTFM_SECRET: z.string().meta({description: 'Secret generated from Last.fm/Libre.fm account'}), + LASTFM_REDIRECT_URI: z.string().optional().meta({description: 'Optional URI to use for callback.'}), + LASTFM_SESSION: z.string().optional().meta({description: 'Optional session id returned from a completed auth flow'}), +}); + +export const envSchemas: EnvClientSchema = { + env: envDataSchema, + toConfig: (partial) => ({ + data: { + apiKey: partial.LASTFM_API_KEY, + secret: partial.LASTFM_SECRET, + redirectUri: partial.LASTFM_REDIRECT_URI, + session: partial.LASTFM_SESSION + } + }) +}; + export const lastfmClientOptionsSchema = z.object({ ...commonClientOptionsSchema.shape, ...nowPlayingOptionsSchema.shape, diff --git a/src/backend/common/infrastructure/config/client/librefm.ts b/src/backend/common/infrastructure/config/client/librefm.ts index 7ee3a628..73ba46ab 100644 --- a/src/backend/common/infrastructure/config/client/librefm.ts +++ b/src/backend/common/infrastructure/config/client/librefm.ts @@ -1,6 +1,6 @@ import * as z from "zod"; import {requestRetryOptionsSchema} from "../common.ts"; -import {commonClientConfigSchema, commonClientDataSchema} from "./index.ts"; +import {commonClientConfigSchema, commonClientDataSchema, type EnvClientSchema} from "./index.ts"; import {lastfmClientOptionsSchema} from "./lastfm.ts"; export const librefmDataSchema = z.object({ @@ -62,6 +62,27 @@ export const librefmDataSchema = z.object({ export type LibrefmData = z.infer; +const envDataSchema = z.object({ + LIBREFM_API_KEY: z.string().optional().meta({description: 'Optional Secret for Libre.fm account'}), + LIBREFM_SECRET: z.string().optional().meta({description: 'Optional Secret for Libre.fm account'}), + LIBREFM_REDIRECT_URI: z.string().optional().meta({description: 'Optional URI to use for callback.'}), + LIBREFM_SESSION: z.string().optional().meta({description: 'Optional session id returned from a completed auth flow'}), + LIBREFM_URLBASE: z.string().optional().meta({description: '(Optional) The host and path prefix for your Libre.fm instance'}), +}); + +export const envSchemas: EnvClientSchema = { + env: envDataSchema, + toConfig: (partial) => ({ + data: { + apiKey: partial.LIBREFM_API_KEY, + secret: partial.LIBREFM_SECRET, + redirectUri: partial.LIBREFM_REDIRECT_URI, + session: partial.LIBREFM_SESSION, + urlBase: partial.LIBREFM_URLBASE + } + }) +}; + export const librefmClientOptionsSchema = z.object({ ...lastfmClientOptionsSchema.shape, }); diff --git a/src/backend/common/infrastructure/config/client/listenbrainz.ts b/src/backend/common/infrastructure/config/client/listenbrainz.ts index ede8c76f..bed0a33f 100644 --- a/src/backend/common/infrastructure/config/client/listenbrainz.ts +++ b/src/backend/common/infrastructure/config/client/listenbrainz.ts @@ -1,7 +1,7 @@ import * as z from "zod"; import {componentTypeSchema} from "../../../../../core/Atomic.ts"; import {requestRetryOptionsSchema} from "../common.ts"; -import {commonClientConfigSchema, commonClientDataSchema} from "./index.ts"; +import {commonClientConfigSchema, commonClientDataSchema, type EnvClientSchema} from "./index.ts"; export const listenBrainzDataSchema = z.object({ ...requestRetryOptionsSchema.shape, @@ -36,6 +36,23 @@ export const listenBrainzDataSchema = z.object({ export type ListenBrainzData = z.infer; +const envDataSchema = z.object({ + LZ_URL: z.string().optional().meta({description: 'URL for the ListenBrainz server, if not using the default'}), + LZ_TOKEN: z.string().meta({description: 'User token for the user to scrobble for'}), + LZ_USER: z.string().meta({description: 'Username of the user to scrobble for'}), +}); + +export const envSchemas: EnvClientSchema = { + env: envDataSchema, + toConfig: (partial) => ({ + data: { + url: partial.LZ_URL, + token: partial.LZ_TOKEN, + username: partial.LZ_USER + } + }) +}; + export const listenBrainzClientDataSchema = listenBrainzDataSchema.extend(commonClientDataSchema.shape); export type ListenBrainzClientData = z.infer; diff --git a/src/backend/common/infrastructure/config/client/maloja.ts b/src/backend/common/infrastructure/config/client/maloja.ts index eb58a0d1..6d18d689 100644 --- a/src/backend/common/infrastructure/config/client/maloja.ts +++ b/src/backend/common/infrastructure/config/client/maloja.ts @@ -1,6 +1,6 @@ import * as z from "zod"; import {componentTypeSchema} from "../../../../../core/Atomic.ts"; -import {requestRetryOptionsSchema, type EnvSchemas} from "../common.ts"; +import {requestRetryOptionsSchema} from "../common.ts"; import {commonClientConfigSchema, commonClientDataSchema, type EnvClientSchema} from "./index.ts"; export const malojaDataSchema = z.object({ diff --git a/src/backend/common/infrastructure/config/client/rocksky.ts b/src/backend/common/infrastructure/config/client/rocksky.ts index b716a0b7..b010c900 100644 --- a/src/backend/common/infrastructure/config/client/rocksky.ts +++ b/src/backend/common/infrastructure/config/client/rocksky.ts @@ -1,6 +1,6 @@ import * as z from "zod"; import {requestRetryOptionsSchema} from "../common.ts"; -import {commonClientConfigSchema, commonClientDataSchema, commonClientOptionsSchema, nowPlayingOptionsSchema} from "./index.ts"; +import {commonClientConfigSchema, commonClientDataSchema, commonClientOptionsSchema, nowPlayingOptionsSchema, type EnvClientSchema} from "./index.ts"; export const rockSkyDataSchema = z.object({ ...requestRetryOptionsSchema.shape, @@ -40,6 +40,23 @@ export const rockSkyDataSchema = z.object({ export type RockSkyData = z.infer; +const envDataSchema = z.object({ + ROCKSKY_KEY: z.string().optional().meta({description: 'API Key generated from API Applications in Rocksky for your account'}), + ROCKSKY_TOKEN: z.string().optional().meta({description: 'Access Token generated from https://rocksky.app/access-tokens in Rocksky for your account'}), + ROCKSKY_HANDLE: z.string().meta({description: 'The fully-qualified handle for your ATPRoto/Bluesky account'}), +}); + +export const envSchemas: EnvClientSchema = { + env: envDataSchema, + toConfig: (partial) => ({ + data: { + key: partial.ROCKSKY_KEY, + token: partial.ROCKSKY_TOKEN, + handle: partial.ROCKSKY_HANDLE + } + }) +}; + export const rockSkyClientDataSchema = rockSkyDataSchema.extend(commonClientDataSchema.shape); export type RockSkyClientData = z.infer; diff --git a/src/backend/common/infrastructure/config/client/tealfm.ts b/src/backend/common/infrastructure/config/client/tealfm.ts index da27dcb7..8f2684a5 100644 --- a/src/backend/common/infrastructure/config/client/tealfm.ts +++ b/src/backend/common/infrastructure/config/client/tealfm.ts @@ -2,7 +2,7 @@ import * as z from "zod"; import {componentTypeSchema} from "../../../../../core/Atomic.ts"; import {requestRetryOptionsSchema} from "../common.ts"; import {atProtoAppDataSchema, atProtoUserIdentifierDataSchema} from "./atproto.ts"; -import {commonClientConfigSchema, commonClientDataSchema, commonClientOptionsSchema} from "./index.ts"; +import {commonClientConfigSchema, commonClientDataSchema, commonClientOptionsSchema, type EnvClientSchema} from "./index.ts"; export const tealDataSchema = z.object({ ...requestRetryOptionsSchema.shape, @@ -20,6 +20,21 @@ export const tealDataSchema = z.object({ export type TealData = z.infer; +const envDataSchema = z.object({ + TEALFM_IDENTIFIER: z.string().meta({description: 'Identify the account to login as'}), + TEALFM_APP_PW: z.string().optional().meta({description: 'The App Password you created for your account'}), +}); + +export const envSchemas: EnvClientSchema = { + env: envDataSchema, + toConfig: (partial) => ({ + data: { + identifier: partial.TEALFM_IDENTIFIER, + appPassword: partial.TEALFM_APP_PW + } + }) +}; + export const tealClientDataSchema = tealDataSchema.extend(commonClientDataSchema.shape); export type TealClientData = z.infer;