Files
makelore/electron/services/meowa-game-assets-release-credential.ts
2026-07-29 17:22:35 +08:00

45 lines
1.6 KiB
TypeScript

import { readFile } from 'node:fs/promises';
import { join } from 'node:path';
export const MEOWA_RELEASE_CREDENTIAL_FILE_NAME = 'meowa-game-assets-credential.json';
const EMBEDDED_MEOWA_API_KEY = 'ma_live_mY19lufmkTJNULToKGUH2yKJX0YmKHhg';
export function readEmbeddedMeowaApiKey(): string | null {
const apiKey = EMBEDDED_MEOWA_API_KEY.trim();
return apiKey && apiKey.length <= 512 ? apiKey : null;
}
type JsonRecord = Record<string, unknown>;
function asRecord(value: unknown): JsonRecord | null {
return value && typeof value === 'object' && !Array.isArray(value)
? value as JsonRecord
: null;
}
export function getMeowaReleaseCredentialPath(resourcesPath: string): string {
return join(resourcesPath, 'resources', MEOWA_RELEASE_CREDENTIAL_FILE_NAME);
}
/**
* Read the release-only credential staged by electron-builder's afterPack hook.
* This file is intentionally not part of the source tree; it exists only in a
* packaged artifact built with MEOWART_API_KEY present in the release env.
*/
export async function readBundledMeowaApiKey(resourcesPath = process.resourcesPath): Promise<string | null> {
if (typeof resourcesPath !== 'string' || !resourcesPath.trim()) return null;
try {
const raw = await readFile(getMeowaReleaseCredentialPath(resourcesPath), 'utf8');
const record = asRecord(JSON.parse(raw) as unknown);
if (!record) return null;
if (record.schemaVersion !== 1) return null;
const apiKey = typeof record.apiKey === 'string' ? record.apiKey.trim() : '';
return apiKey && apiKey.length <= 512 ? apiKey : null;
} catch {
return null;
}
}