39 lines
1.3 KiB
TypeScript
39 lines
1.3 KiB
TypeScript
export type ExtendProviderCredential = {
|
|
apiKey?: string | null;
|
|
updatedAt?: Date | string | null;
|
|
};
|
|
|
|
export type ExtendProvider = "vip98k" | "dashscope" | "fal";
|
|
|
|
export function resolveFalExtendApiKey(providers: Array<ExtendProviderCredential & { baseUrl?: string | null }>) {
|
|
for (const { apiKey, baseUrl } of providers) {
|
|
if (!apiKey || !baseUrl) continue;
|
|
const url = URL.canParse(baseUrl) ? new URL(baseUrl) : null;
|
|
if (url?.protocol === "https:" && ["queue.fal.run", "fal.run", "fal.ai", "api.fal.ai"].includes(url.hostname)) {
|
|
return apiKey.trim().replace(/^(?:Bearer|Key)\s+/i, "");
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function getUpdatedAtTimestamp(value: Date | string | null | undefined): number {
|
|
if (!value) return 0;
|
|
const timestamp = value instanceof Date ? value.getTime() : Date.parse(value);
|
|
return Number.isFinite(timestamp) ? timestamp : 0;
|
|
}
|
|
|
|
export function resolveAlibabaExtendApiKey(
|
|
providers: ExtendProviderCredential[],
|
|
legacyApiKey?: string | null,
|
|
): string | null {
|
|
const currentProvider = providers
|
|
.filter((provider) => Boolean(provider.apiKey?.trim()))
|
|
.sort(
|
|
(left, right) =>
|
|
getUpdatedAtTimestamp(right.updatedAt) -
|
|
getUpdatedAtTimestamp(left.updatedAt),
|
|
)[0];
|
|
|
|
return currentProvider?.apiKey?.trim() || legacyApiKey?.trim() || null;
|
|
}
|