3.0.5 • Published 11 months ago

@prairielearn/config v3.0.5

Weekly downloads
-
License
-
Repository
-
Last release
11 months ago

@prairielearn/config

Utilities to help load configuration from various sources including a JSON file and AWS Secrets Manager. Config is made type-safe through a Zod schema.

This package should not be depended upon by other packages directly. Instead, import it into your application, load the config, and then provide any necessary values to other packages.

Usage

import { ConfigLoader, makeFileConfig } from '@prairielearn/config';
import { z } from 'zod';

const ConfigSchema = z.object({
  hello: z.string().default('world'),
});

const configLoader = new ConfigLoader(ConfigSchema);

await configLoader.loadAndValidate([makeFileConfig('config.json')]);

console.log(configLoader.config);
// { hello: "world" }

Typically, you'll want to have a config.ts file in your own project that encapsulates this. Then, you can import the config elsewhere in the project.

import { ConfigLoader, makeFileConfig } from '@prairielearn/config';
import { z } from 'zod';

const configLoader = new ConfigLoader(z.any());

export async function loadAndValidate(path: string) {
  await configLoader.loadAndValidate([makeFileConfig(path)]);
}

export default configLoader.config;

Loading config from AWS

If you're running in AWS, you can use makeImdsConfig() and makeSecretsManagerConfig() to load config from IMDS and Secrets Manager, respectively:

  • makeImdsConfig() will load hostname, instanceId, and awsRegion, which will be available if you config schema contains these values.
  • makeSecretsManagerConfig() will look for a ConfSecret tag on the instance. If found, the value of that tag will be used treated as a Secrets Manager secret ID, and that secret's value will be parsed as JSON and merged into the config.

Note that both of these config sources are no-ops by default. To active them, you must do one of the following:

  • Set CONFIG_LOAD_FROM_AWS=1 in the process environment.
  • Chain them after makeFileConfig(), and ensure that the config file contains {"runningInEc2": true}.
3.0.4

12 months ago

3.0.3

1 year ago

3.0.2

1 year ago

3.0.5

11 months ago

3.0.1

1 year ago

3.0.0

1 year ago

2.0.17

1 year ago

2.0.16

1 year ago

2.0.15

1 year ago

2.0.14

1 year ago

2.0.13

2 years ago

2.0.12

2 years ago

2.0.3

2 years ago

2.0.5

2 years ago

2.0.4

2 years ago

2.0.11

2 years ago

2.0.7

2 years ago

2.0.6

2 years ago

2.0.9

2 years ago

2.0.10

2 years ago

2.0.8

2 years ago

2.0.2

2 years ago

2.0.1

2 years ago

2.0.0

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago