mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-03-02 18:22:42 -08:00
feat(core): add Electron runtime, services, and app composition
This commit is contained in:
71
src/core/services/jimaku.ts
Normal file
71
src/core/services/jimaku.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
import { JimakuApiResponse, JimakuConfig, JimakuLanguagePreference } from '../../types';
|
||||
import {
|
||||
jimakuFetchJson as jimakuFetchJsonRequest,
|
||||
resolveJimakuApiKey as resolveJimakuApiKeyFromConfig,
|
||||
} from '../../jimaku/utils';
|
||||
|
||||
export function getJimakuConfig(getResolvedConfig: () => { jimaku?: JimakuConfig }): JimakuConfig {
|
||||
const config = getResolvedConfig();
|
||||
return config.jimaku ?? {};
|
||||
}
|
||||
|
||||
export function getJimakuBaseUrl(
|
||||
getResolvedConfig: () => { jimaku?: JimakuConfig },
|
||||
defaultBaseUrl: string,
|
||||
): string {
|
||||
const config = getJimakuConfig(getResolvedConfig);
|
||||
return config.apiBaseUrl || defaultBaseUrl;
|
||||
}
|
||||
|
||||
export function getJimakuLanguagePreference(
|
||||
getResolvedConfig: () => { jimaku?: JimakuConfig },
|
||||
defaultPreference: JimakuLanguagePreference,
|
||||
): JimakuLanguagePreference {
|
||||
const config = getJimakuConfig(getResolvedConfig);
|
||||
return config.languagePreference || defaultPreference;
|
||||
}
|
||||
|
||||
export function getJimakuMaxEntryResults(
|
||||
getResolvedConfig: () => { jimaku?: JimakuConfig },
|
||||
defaultValue: number,
|
||||
): number {
|
||||
const config = getJimakuConfig(getResolvedConfig);
|
||||
const value = config.maxEntryResults;
|
||||
if (typeof value === 'number' && Number.isFinite(value) && value > 0) {
|
||||
return Math.floor(value);
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
export async function resolveJimakuApiKey(
|
||||
getResolvedConfig: () => { jimaku?: JimakuConfig },
|
||||
): Promise<string | null> {
|
||||
return resolveJimakuApiKeyFromConfig(getJimakuConfig(getResolvedConfig));
|
||||
}
|
||||
|
||||
export async function jimakuFetchJson<T>(
|
||||
endpoint: string,
|
||||
query: Record<string, string | number | boolean | null | undefined> = {},
|
||||
options: {
|
||||
getResolvedConfig: () => { jimaku?: JimakuConfig };
|
||||
defaultBaseUrl: string;
|
||||
defaultMaxEntryResults: number;
|
||||
defaultLanguagePreference: JimakuLanguagePreference;
|
||||
},
|
||||
): Promise<JimakuApiResponse<T>> {
|
||||
const apiKey = await resolveJimakuApiKey(options.getResolvedConfig);
|
||||
if (!apiKey) {
|
||||
return {
|
||||
ok: false,
|
||||
error: {
|
||||
error: 'Jimaku API key not set. Configure jimaku.apiKey or jimaku.apiKeyCommand.',
|
||||
code: 401,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
return jimakuFetchJsonRequest<T>(endpoint, query, {
|
||||
baseUrl: getJimakuBaseUrl(options.getResolvedConfig, options.defaultBaseUrl),
|
||||
apiKey,
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user