/ agent / config.ts
config.ts
 1  import convict from 'convict';
 2  import dotenv from 'dotenv';
 3  import yaml from 'js-yaml';
 4  
 5  
 6  dotenv.config();
 7  
 8  const config = convict({
 9    env: {
10      doc: 'The application environment.',
11      format: ['production', 'development', 'test'],
12      default: 'development',
13      env: 'NODE_ENV',
14    },
15    secrets: {
16      apiKey: {
17        doc: 'The API key for accessing external services.',
18        format: String,
19        default: 'default_api_key',
20        env: 'API_KEY',
21      },
22      // Add other secrets here
23    },
24    server: {
25      host: {
26        doc: 'The host name to listen on.',
27        format: String,
28        default: 'localhost',
29        env: 'HOST',
30      },
31      port: {
32        doc: 'The port to listen on.',
33        format: 'port',
34        default: 3000,
35        env: 'PORT',
36      },
37    },
38  });
39  
40  // Load environment-specific configuration
41  const env = config.get('env');
42  try {
43    const yamlFile = await Bun.file(`./config/${env}.yaml`).text();
44    config.load(yaml.load(yamlFile));
45  } catch (e) {
46    console.log(`Failed to load config file: ./config/${env}.yaml.  Using defaults.`);
47  }
48  
49  // Perform validation
50  config.validate({ allowed: 'strict' });
51  
52  export default config;
53