Skip to main content

Defining a Custom Source

If you have specialized needs, you can define your own custom source of configuration data. For example,

class SecretsManagerSource extends ConfigurationSource {
constructor() {
super({sequence: ConfigurationSource.DefaultSequence.SECRETS});
}

async load(schema, context, loadOptions) {

const fieldAssignments = new Map();

const appName = context?.appName;
const appPrefix = toConstantCase(appName? appName : '');
const allFields = schema.getAllFieldPaths();

for (const fieldData of allFields.values()) {
const suffix = toConstantCase(fieldData.path);
if (suffix.indexOf(appPrefix) === 0) {
secretVar = suffix;
}
else {
secretVar = (`${appPrefix}_${suffix}`);
}
// TODO - Implementation that loads secrets from a secure source
}
return fieldAssignments;
}
}

configurator.registerConfigurationSource(new SecretsManagerSource());

As the order of Configuration Source processing matters, each source must define a numerical sequence number. The default sequence is defined by ConfigurationSource.DefaultSequence.