Bin
2025-12-16 9e0b2ba2c317b1a86212f24cbae3195ad1f3dbfa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import { z } from "zod";
import type { ProviderConfig, FieldDefinition } from "./types/common";
import { assembleSchema, extractDefaultValues } from "./types/provider";
 
// Registry of all available providers
export const providerRegistry: Record<string, ProviderConfig> = {};
 
// Helper function to get provider configuration
export function getProviderConfig(providerName?: string): ProviderConfig | undefined {
  if (!providerName) return undefined;
  return providerRegistry[providerName.toLowerCase()];
}
 
// Add new storage provider
export function addProvider(providerName: string, providerConfig: ProviderConfig) {
  providerRegistry[providerName.toLowerCase()] = providerConfig;
}
 
// Helper function to get provider schema
export function getProviderSchema(providerName: string) {
  const config = getProviderConfig(providerName);
  if (!config) {
    return z.object({}); // Empty schema for unknown providers
  }
  const fieldDefinitions = config.fields.filter(
    (field): field is FieldDefinition => "type" in field && field.type !== "message",
  );
  return assembleSchema(fieldDefinitions);
}
 
// Helper function to get default values for a provider
export function getProviderDefaultValues(providerName: string): Record<string, any> {
  const config = getProviderConfig(providerName);
  if (!config) {
    return {}; // Empty defaults for unknown providers
  }
  const fieldDefinitions = config.fields.filter(
    (field): field is FieldDefinition => "type" in field && field.type !== "message",
  );
  return extractDefaultValues(fieldDefinitions);
}
 
// Helper function to get all available providers
export function getAvailableProviders(): ProviderConfig[] {
  return Object.values(providerRegistry);
}
 
// Helper function to get provider by name
export function getProviderByName(name: string): ProviderConfig | undefined {
  return providerRegistry[name.toLowerCase()];
}