@roadiehq/catalog-backend-module-okta
Version:
A set of Backstage catalog providers for Okta
70 lines (66 loc) • 2.39 kB
JavaScript
;
var backendPluginApi = require('@backstage/backend-plugin-api');
var alpha = require('@backstage/plugin-catalog-node/alpha');
var extensions = require('./extensions.cjs.js');
var userEntityFromOktaUser = require('./providers/userEntityFromOktaUser.cjs.js');
const oktaCatalogBackendModule = backendPluginApi.createBackendModule({
pluginId: "catalog",
moduleId: "okta-entity-provider",
register(env) {
let entityFactory = null;
env.registerExtensionPoint(
extensions.oktaCatalogBackendEntityProviderFactoryExtensionPoint,
{
setEntityProviderFactory(factory) {
if (entityFactory) {
throw new Error("Entity factory can only be set once");
}
entityFactory = factory;
}
}
);
let userTransformer = null;
env.registerExtensionPoint(
extensions.oktaCatalogBackendUserTransformerExtensionPoint,
{
setUserTransformer(transformer) {
if (userTransformer) {
throw new Error("UserTransformer can only be set once");
}
userTransformer = transformer;
}
}
);
env.registerInit({
deps: {
catalog: alpha.catalogProcessingExtensionPoint,
config: backendPluginApi.coreServices.rootConfig,
logger: backendPluginApi.coreServices.logger,
scheduler: backendPluginApi.coreServices.scheduler
},
async init({ catalog, config, scheduler }) {
if (!entityFactory) {
throw new Error("No entity factory has been provided");
}
userTransformer ??= userEntityFromOktaUser.userEntityFromOktaUser;
const oktaConfigs = config.getConfigArray("catalog.providers.okta");
for (const oktaConfig of oktaConfigs) {
const provider = entityFactory(oktaConfig);
catalog.addEntityProvider(provider);
const schedule = backendPluginApi.readSchedulerServiceTaskScheduleDefinitionFromConfig(
oktaConfig.getConfig("schedule")
);
await scheduler.scheduleTask({
id: `okta-entity-provider-${provider.getProviderName()}`,
fn: async () => {
await provider.run();
},
...schedule
});
}
}
});
}
});
exports.oktaCatalogBackendModule = oktaCatalogBackendModule;
//# sourceMappingURL=module.cjs.js.map