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.