@backstage/plugin-catalog-backend-module-ldap 0.0.0-nightly-20260120025109 → 0.0.0-nightly-20260128025246

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,17 +1,34 @@
1
1
  # @backstage/plugin-catalog-backend-module-ldap
2
2
 
3
- ## 0.0.0-nightly-20260120025109
3
+ ## 0.0.0-nightly-20260128025246
4
4
 
5
5
  ### Patch Changes
6
6
 
7
+ - cfd8103: Updated imports to use stable catalog extension points from `@backstage/plugin-catalog-node` instead of the deprecated alpha exports.
8
+ - 7455dae: Use node prefix on native imports
7
9
  - Updated dependencies
8
- - @backstage/backend-plugin-api@0.0.0-nightly-20260120025109
10
+ - @backstage/plugin-catalog-node@0.0.0-nightly-20260128025246
11
+ - @backstage/backend-plugin-api@0.0.0-nightly-20260128025246
9
12
  - @backstage/catalog-model@1.7.6
10
13
  - @backstage/config@1.3.6
11
14
  - @backstage/errors@1.2.7
12
15
  - @backstage/types@1.2.2
13
- - @backstage/plugin-catalog-common@0.0.0-nightly-20260120025109
14
- - @backstage/plugin-catalog-node@0.0.0-nightly-20260120025109
16
+ - @backstage/plugin-catalog-common@0.0.0-nightly-20260128025246
17
+
18
+ ## 0.12.2-next.0
19
+
20
+ ### Patch Changes
21
+
22
+ - cfd8103: Updated imports to use stable catalog extension points from `@backstage/plugin-catalog-node` instead of the deprecated alpha exports.
23
+ - 7455dae: Use node prefix on native imports
24
+ - Updated dependencies
25
+ - @backstage/plugin-catalog-node@1.21.0-next.0
26
+ - @backstage/backend-plugin-api@1.7.0-next.0
27
+ - @backstage/catalog-model@1.7.6
28
+ - @backstage/config@1.3.6
29
+ - @backstage/errors@1.2.7
30
+ - @backstage/types@1.2.2
31
+ - @backstage/plugin-catalog-common@1.1.8-next.0
15
32
 
16
33
  ## 0.12.1
17
34
 
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  var errors = require('@backstage/errors');
4
- var promises = require('fs/promises');
4
+ var promises = require('node:fs/promises');
5
5
  var ldapts = require('ldapts');
6
- var tlsLib = require('tls');
6
+ var tlsLib = require('node:tls');
7
7
  var vendors = require('./vendors.cjs.js');
8
8
 
9
9
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
@@ -1 +1 @@
1
- {"version":3,"file":"client.cjs.js","sources":["../../src/ldap/client.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ForwardedError } from '@backstage/errors';\nimport { readFile } from 'fs/promises';\nimport { Client, Entry, SearchOptions, SearchResult } from 'ldapts';\nimport tlsLib from 'tls';\nimport { BindConfig, TLSConfig } from './config';\nimport {\n AEDirVendor,\n ActiveDirectoryVendor,\n DefaultLdapVendor,\n LLDAPVendor,\n FreeIpaVendor,\n LdapVendor,\n GoogleLdapVendor,\n} from './vendors';\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\n/**\n * Basic wrapper for the `ldapjs` library.\n *\n * Helps out with promisifying calls, paging, binding etc.\n *\n * @public\n */\n\nexport class LdapClient {\n private vendor: Promise<LdapVendor> | undefined;\n\n static async create(\n logger: LoggerService,\n target: string,\n bind?: BindConfig,\n tls?: TLSConfig,\n ): Promise<LdapClient> {\n let secureContext;\n if (tls && tls.certs && tls.keys) {\n const cert = await readFile(tls.certs, 'utf-8');\n const key = await readFile(tls.keys, 'utf-8');\n secureContext = tlsLib.createSecureContext({\n cert: cert,\n key: key,\n });\n }\n const tlsOptions: tlsLib.ConnectionOptions = {\n secureContext,\n rejectUnauthorized: tls?.rejectUnauthorized,\n };\n const client = new Client({\n url: target,\n ...(Object.values(tlsOptions).some(v => v !== undefined)\n ? { tlsOptions }\n : undefined),\n });\n\n const ldapClient = new LdapClient(client, logger);\n\n if (bind) {\n try {\n await client.bind(bind.dn, bind.secret);\n } catch (error) {\n await client.unbind();\n throw new ForwardedError(\n `LDAP bind failed for ${bind.dn}, ${error}`,\n error,\n );\n }\n }\n return ldapClient;\n }\n\n private readonly client: Client;\n private readonly logger: LoggerService;\n\n constructor(client: Client, logger: LoggerService) {\n this.client = client;\n this.logger = logger;\n }\n\n /**\n * Performs an LDAP search operation.\n *\n * @param dn - The fully qualified base DN to search within\n * @param options - The search options\n */\n async search(dn: string, options: SearchOptions): Promise<SearchResult> {\n this.logger.debug(`Reading LDAP entries so far`);\n try {\n const ldaptsOptions: SearchOptions = {\n scope: options.scope,\n filter: options.filter,\n attributes: options.attributes,\n sizeLimit: options.sizeLimit,\n timeLimit: options.timeLimit,\n derefAliases: options.derefAliases,\n paged: options.paged,\n };\n\n const result = await this.client.search(dn, ldaptsOptions);\n\n return result;\n } catch (e) {\n throw new ForwardedError(`LDAP search at DN \"${dn}\" failed`, e);\n }\n }\n\n /**\n * Get the Server Vendor.\n * Currently only detects Microsoft Active Directory Servers.\n *\n * @see https://ldapwiki.com/wiki/Determine%20LDAP%20Server%20Vendor\n */\n async getVendor(): Promise<LdapVendor> {\n if (this.vendor) {\n return this.vendor;\n }\n // const clientHost = this.client?.host || '';\n this.vendor = this.getRootDSE()\n .then(root => {\n if (root && root.forestFunctionality) {\n return ActiveDirectoryVendor;\n } else if (root && root.ipaDomainLevel) {\n return FreeIpaVendor;\n } else if (root && 'aeRoot' in root) {\n return AEDirVendor;\n } else if (this.isGoogleLDAP(root)) {\n return GoogleLdapVendor;\n } else if (root && root.vendorName?.toString() === 'LLDAP') {\n return LLDAPVendor;\n }\n return DefaultLdapVendor;\n })\n .catch(err => {\n this.vendor = undefined;\n throw err;\n });\n return this.vendor;\n }\n\n /**\n * Check if the LDAP server is Google LDAP by examining RootDSE and schema\n */\n private isGoogleLDAP(rootDSE: Entry | undefined): boolean {\n if (!rootDSE) {\n return false;\n }\n\n // RootDSE characteristics\n const hasGoogleRootDSEPattern =\n !rootDSE.namingContexts && // No namingContexts\n !rootDSE.supportedControl && // No supportedControl\n !rootDSE.vendorName && // No vendor info\n !rootDSE.vendorVersion &&\n rootDSE.subschemaSubentry === 'cn=subschema';\n\n if (!hasGoogleRootDSEPattern) {\n return false;\n }\n\n try {\n const schemaHasGoogleAttributes = this.checkGoogleSchema(rootDSE);\n return schemaHasGoogleAttributes;\n } catch (error) {\n throw new ForwardedError('Schema check failed', error);\n }\n }\n\n // Check a shema for Google-specific patterns\n private checkGoogleSchema(rootDSE: Entry): boolean {\n try {\n const objectClasses = this.parseSchemaValues(rootDSE.objectClasses);\n const attributeTypes = this.parseSchemaValues(rootDSE.attributeTypes);\n\n // Check if any Google-specific attributes are present\n const hasGoogleAttributes =\n objectClasses.some(oc => oc.includes('googleUid')) ||\n attributeTypes.some(at => at.includes('googleAdminCreated'));\n\n return hasGoogleAttributes;\n } catch (error) {\n this.logger.warn('Error checking schema:', error);\n return false;\n }\n }\n\n private parseSchemaValues(\n schemaValue: Buffer | Buffer[] | string[] | string,\n ): string[] {\n if (!schemaValue) return [];\n\n const values = Array.isArray(schemaValue) ? schemaValue : [schemaValue];\n return values.map(v => v.toString());\n }\n\n /**\n * Get the Root DSE.\n *\n * @see https://ldapwiki.com/wiki/RootDSE\n */\n async getRootDSE(): Promise<Entry | undefined> {\n const result = await this.client.search('', {\n scope: 'base',\n filter: '(objectclass=*)',\n } as SearchOptions);\n if (result && result.searchEntries.length === 1) {\n return result.searchEntries[0];\n }\n return undefined;\n }\n}\n"],"names":["readFile","tlsLib","Client","ForwardedError","ActiveDirectoryVendor","FreeIpaVendor","AEDirVendor","GoogleLdapVendor","LLDAPVendor","DefaultLdapVendor"],"mappings":"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"}
1
+ {"version":3,"file":"client.cjs.js","sources":["../../src/ldap/client.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ForwardedError } from '@backstage/errors';\nimport { readFile } from 'node:fs/promises';\nimport { Client, Entry, SearchOptions, SearchResult } from 'ldapts';\nimport tlsLib from 'node:tls';\nimport { BindConfig, TLSConfig } from './config';\nimport {\n AEDirVendor,\n ActiveDirectoryVendor,\n DefaultLdapVendor,\n LLDAPVendor,\n FreeIpaVendor,\n LdapVendor,\n GoogleLdapVendor,\n} from './vendors';\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\n/**\n * Basic wrapper for the `ldapjs` library.\n *\n * Helps out with promisifying calls, paging, binding etc.\n *\n * @public\n */\n\nexport class LdapClient {\n private vendor: Promise<LdapVendor> | undefined;\n\n static async create(\n logger: LoggerService,\n target: string,\n bind?: BindConfig,\n tls?: TLSConfig,\n ): Promise<LdapClient> {\n let secureContext;\n if (tls && tls.certs && tls.keys) {\n const cert = await readFile(tls.certs, 'utf-8');\n const key = await readFile(tls.keys, 'utf-8');\n secureContext = tlsLib.createSecureContext({\n cert: cert,\n key: key,\n });\n }\n const tlsOptions: tlsLib.ConnectionOptions = {\n secureContext,\n rejectUnauthorized: tls?.rejectUnauthorized,\n };\n const client = new Client({\n url: target,\n ...(Object.values(tlsOptions).some(v => v !== undefined)\n ? { tlsOptions }\n : undefined),\n });\n\n const ldapClient = new LdapClient(client, logger);\n\n if (bind) {\n try {\n await client.bind(bind.dn, bind.secret);\n } catch (error) {\n await client.unbind();\n throw new ForwardedError(\n `LDAP bind failed for ${bind.dn}, ${error}`,\n error,\n );\n }\n }\n return ldapClient;\n }\n\n private readonly client: Client;\n private readonly logger: LoggerService;\n\n constructor(client: Client, logger: LoggerService) {\n this.client = client;\n this.logger = logger;\n }\n\n /**\n * Performs an LDAP search operation.\n *\n * @param dn - The fully qualified base DN to search within\n * @param options - The search options\n */\n async search(dn: string, options: SearchOptions): Promise<SearchResult> {\n this.logger.debug(`Reading LDAP entries so far`);\n try {\n const ldaptsOptions: SearchOptions = {\n scope: options.scope,\n filter: options.filter,\n attributes: options.attributes,\n sizeLimit: options.sizeLimit,\n timeLimit: options.timeLimit,\n derefAliases: options.derefAliases,\n paged: options.paged,\n };\n\n const result = await this.client.search(dn, ldaptsOptions);\n\n return result;\n } catch (e) {\n throw new ForwardedError(`LDAP search at DN \"${dn}\" failed`, e);\n }\n }\n\n /**\n * Get the Server Vendor.\n * Currently only detects Microsoft Active Directory Servers.\n *\n * @see https://ldapwiki.com/wiki/Determine%20LDAP%20Server%20Vendor\n */\n async getVendor(): Promise<LdapVendor> {\n if (this.vendor) {\n return this.vendor;\n }\n // const clientHost = this.client?.host || '';\n this.vendor = this.getRootDSE()\n .then(root => {\n if (root && root.forestFunctionality) {\n return ActiveDirectoryVendor;\n } else if (root && root.ipaDomainLevel) {\n return FreeIpaVendor;\n } else if (root && 'aeRoot' in root) {\n return AEDirVendor;\n } else if (this.isGoogleLDAP(root)) {\n return GoogleLdapVendor;\n } else if (root && root.vendorName?.toString() === 'LLDAP') {\n return LLDAPVendor;\n }\n return DefaultLdapVendor;\n })\n .catch(err => {\n this.vendor = undefined;\n throw err;\n });\n return this.vendor;\n }\n\n /**\n * Check if the LDAP server is Google LDAP by examining RootDSE and schema\n */\n private isGoogleLDAP(rootDSE: Entry | undefined): boolean {\n if (!rootDSE) {\n return false;\n }\n\n // RootDSE characteristics\n const hasGoogleRootDSEPattern =\n !rootDSE.namingContexts && // No namingContexts\n !rootDSE.supportedControl && // No supportedControl\n !rootDSE.vendorName && // No vendor info\n !rootDSE.vendorVersion &&\n rootDSE.subschemaSubentry === 'cn=subschema';\n\n if (!hasGoogleRootDSEPattern) {\n return false;\n }\n\n try {\n const schemaHasGoogleAttributes = this.checkGoogleSchema(rootDSE);\n return schemaHasGoogleAttributes;\n } catch (error) {\n throw new ForwardedError('Schema check failed', error);\n }\n }\n\n // Check a shema for Google-specific patterns\n private checkGoogleSchema(rootDSE: Entry): boolean {\n try {\n const objectClasses = this.parseSchemaValues(rootDSE.objectClasses);\n const attributeTypes = this.parseSchemaValues(rootDSE.attributeTypes);\n\n // Check if any Google-specific attributes are present\n const hasGoogleAttributes =\n objectClasses.some(oc => oc.includes('googleUid')) ||\n attributeTypes.some(at => at.includes('googleAdminCreated'));\n\n return hasGoogleAttributes;\n } catch (error) {\n this.logger.warn('Error checking schema:', error);\n return false;\n }\n }\n\n private parseSchemaValues(\n schemaValue: Buffer | Buffer[] | string[] | string,\n ): string[] {\n if (!schemaValue) return [];\n\n const values = Array.isArray(schemaValue) ? schemaValue : [schemaValue];\n return values.map(v => v.toString());\n }\n\n /**\n * Get the Root DSE.\n *\n * @see https://ldapwiki.com/wiki/RootDSE\n */\n async getRootDSE(): Promise<Entry | undefined> {\n const result = await this.client.search('', {\n scope: 'base',\n filter: '(objectclass=*)',\n } as SearchOptions);\n if (result && result.searchEntries.length === 1) {\n return result.searchEntries[0];\n }\n return undefined;\n }\n}\n"],"names":["readFile","tlsLib","Client","ForwardedError","ActiveDirectoryVendor","FreeIpaVendor","AEDirVendor","GoogleLdapVendor","LLDAPVendor","DefaultLdapVendor"],"mappings":"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"}
@@ -2,9 +2,9 @@
2
2
 
3
3
  var vendors$1 = require('./vendors.cjs.js');
4
4
  require('@backstage/errors');
5
- require('fs/promises');
5
+ require('node:fs/promises');
6
6
  require('ldapts');
7
- require('tls');
7
+ require('node:tls');
8
8
  require('@backstage/backend-plugin-api');
9
9
  require('lodash/mergeWith');
10
10
  require('lodash');
@@ -1,18 +1,17 @@
1
1
  'use strict';
2
2
 
3
3
  var backendPluginApi = require('@backstage/backend-plugin-api');
4
- var alpha = require('@backstage/plugin-catalog-node/alpha');
4
+ var pluginCatalogNode = require('@backstage/plugin-catalog-node');
5
5
  var LdapOrgEntityProvider = require('./processors/LdapOrgEntityProvider.cjs.js');
6
6
  require('@backstage/errors');
7
- require('fs/promises');
7
+ require('node:fs/promises');
8
8
  require('ldapts');
9
- require('tls');
9
+ require('node:tls');
10
10
  require('lodash/mergeWith');
11
11
  require('lodash');
12
12
  require('@backstage/catalog-model');
13
13
  require('lodash/set');
14
14
  require('lodash/cloneDeep');
15
- require('@backstage/plugin-catalog-node');
16
15
 
17
16
  const ldapOrgEntityProviderTransformsExtensionPoint = backendPluginApi.createExtensionPoint({
18
17
  id: "catalog.ldapOrgEntityProvider.transforms"
@@ -39,7 +38,7 @@ const catalogModuleLdapOrgEntityProvider = backendPluginApi.createBackendModule(
39
38
  });
40
39
  env.registerInit({
41
40
  deps: {
42
- catalog: alpha.catalogProcessingExtensionPoint,
41
+ catalog: pluginCatalogNode.catalogProcessingExtensionPoint,
43
42
  config: backendPluginApi.coreServices.rootConfig,
44
43
  logger: backendPluginApi.coreServices.logger,
45
44
  scheduler: backendPluginApi.coreServices.scheduler
@@ -1 +1 @@
1
- {"version":3,"file":"module.cjs.js","sources":["../src/module.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n coreServices,\n createBackendModule,\n createExtensionPoint,\n} from '@backstage/backend-plugin-api';\nimport { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';\nimport { LdapOrgEntityProvider } from './processors';\nimport { GroupTransformer, UserTransformer } from './ldap/types';\n\n/**\n * Interface for {@link LdapOrgEntityProviderTransformsExtensionPoint}.\n *\n * @public\n */\nexport interface LdapOrgEntityProviderTransformsExtensionPoint {\n /**\n * Set the function that transforms a user entry in LDAP to an entity.\n * Optionally, you can pass separate transformers per provider ID.\n */\n setUserTransformer(\n transformer: UserTransformer | Record<string, UserTransformer>,\n ): void;\n\n /**\n * Set the function that transforms a group entry in LDAP to an entity.\n * Optionally, you can pass separate transformers per provider ID.\n */\n setGroupTransformer(\n transformer: GroupTransformer | Record<string, GroupTransformer>,\n ): void;\n}\n\n/**\n * Extension point used to customize the transforms used by the module.\n *\n * @public\n */\nexport const ldapOrgEntityProviderTransformsExtensionPoint =\n createExtensionPoint<LdapOrgEntityProviderTransformsExtensionPoint>({\n id: 'catalog.ldapOrgEntityProvider.transforms',\n });\n\n/**\n * Registers the LdapOrgEntityProvider with the catalog processing extension point.\n *\n * @public\n */\nexport const catalogModuleLdapOrgEntityProvider = createBackendModule({\n pluginId: 'catalog',\n moduleId: 'ldapOrgEntityProvider',\n register(env) {\n let userTransformer:\n | UserTransformer\n | Record<string, UserTransformer>\n | undefined;\n let groupTransformer:\n | GroupTransformer\n | Record<string, GroupTransformer>\n | undefined;\n\n env.registerExtensionPoint(ldapOrgEntityProviderTransformsExtensionPoint, {\n setUserTransformer(transformer) {\n if (userTransformer) {\n throw new Error('User transformer may only be set once');\n }\n userTransformer = transformer;\n },\n setGroupTransformer(transformer) {\n if (groupTransformer) {\n throw new Error('Group transformer may only be set once');\n }\n groupTransformer = transformer;\n },\n });\n\n env.registerInit({\n deps: {\n catalog: catalogProcessingExtensionPoint,\n config: coreServices.rootConfig,\n logger: coreServices.logger,\n scheduler: coreServices.scheduler,\n },\n async init({ catalog, config, logger, scheduler }) {\n catalog.addEntityProvider(\n LdapOrgEntityProvider.fromConfig(config, {\n logger,\n scheduler,\n userTransformer: userTransformer,\n groupTransformer: groupTransformer,\n }),\n );\n },\n });\n },\n});\n"],"names":["createExtensionPoint","createBackendModule","catalogProcessingExtensionPoint","coreServices","LdapOrgEntityProvider"],"mappings":";;;;;;;;;;;;;;;;AAqDO,MAAM,gDACXA,qCAAA,CAAoE;AAAA,EAClE,EAAA,EAAI;AACN,CAAC;AAOI,MAAM,qCAAqCC,oCAAA,CAAoB;AAAA,EACpE,QAAA,EAAU,SAAA;AAAA,EACV,QAAA,EAAU,uBAAA;AAAA,EACV,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAA;AAIJ,IAAA,IAAI,gBAAA;AAKJ,IAAA,GAAA,CAAI,uBAAuB,6CAAA,EAA+C;AAAA,MACxE,mBAAmB,WAAA,EAAa;AAC9B,QAAA,IAAI,eAAA,EAAiB;AACnB,UAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,QACzD;AACA,QAAA,eAAA,GAAkB,WAAA;AAAA,MACpB,CAAA;AAAA,MACA,oBAAoB,WAAA,EAAa;AAC/B,QAAA,IAAI,gBAAA,EAAkB;AACpB,UAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,QAC1D;AACA,QAAA,gBAAA,GAAmB,WAAA;AAAA,MACrB;AAAA,KACD,CAAA;AAED,IAAA,GAAA,CAAI,YAAA,CAAa;AAAA,MACf,IAAA,EAAM;AAAA,QACJ,OAAA,EAASC,qCAAA;AAAA,QACT,QAAQC,6BAAA,CAAa,UAAA;AAAA,QACrB,QAAQA,6BAAA,CAAa,MAAA;AAAA,QACrB,WAAWA,6BAAA,CAAa;AAAA,OAC1B;AAAA,MACA,MAAM,IAAA,CAAK,EAAE,SAAS,MAAA,EAAQ,MAAA,EAAQ,WAAU,EAAG;AACjD,QAAA,OAAA,CAAQ,iBAAA;AAAA,UACNC,2CAAA,CAAsB,WAAW,MAAA,EAAQ;AAAA,YACvC,MAAA;AAAA,YACA,SAAA;AAAA,YACA,eAAA;AAAA,YACA;AAAA,WACD;AAAA,SACH;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAC;;;;;"}
1
+ {"version":3,"file":"module.cjs.js","sources":["../src/module.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n coreServices,\n createBackendModule,\n createExtensionPoint,\n} from '@backstage/backend-plugin-api';\nimport { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node';\nimport { LdapOrgEntityProvider } from './processors';\nimport { GroupTransformer, UserTransformer } from './ldap/types';\n\n/**\n * Interface for {@link LdapOrgEntityProviderTransformsExtensionPoint}.\n *\n * @public\n */\nexport interface LdapOrgEntityProviderTransformsExtensionPoint {\n /**\n * Set the function that transforms a user entry in LDAP to an entity.\n * Optionally, you can pass separate transformers per provider ID.\n */\n setUserTransformer(\n transformer: UserTransformer | Record<string, UserTransformer>,\n ): void;\n\n /**\n * Set the function that transforms a group entry in LDAP to an entity.\n * Optionally, you can pass separate transformers per provider ID.\n */\n setGroupTransformer(\n transformer: GroupTransformer | Record<string, GroupTransformer>,\n ): void;\n}\n\n/**\n * Extension point used to customize the transforms used by the module.\n *\n * @public\n */\nexport const ldapOrgEntityProviderTransformsExtensionPoint =\n createExtensionPoint<LdapOrgEntityProviderTransformsExtensionPoint>({\n id: 'catalog.ldapOrgEntityProvider.transforms',\n });\n\n/**\n * Registers the LdapOrgEntityProvider with the catalog processing extension point.\n *\n * @public\n */\nexport const catalogModuleLdapOrgEntityProvider = createBackendModule({\n pluginId: 'catalog',\n moduleId: 'ldapOrgEntityProvider',\n register(env) {\n let userTransformer:\n | UserTransformer\n | Record<string, UserTransformer>\n | undefined;\n let groupTransformer:\n | GroupTransformer\n | Record<string, GroupTransformer>\n | undefined;\n\n env.registerExtensionPoint(ldapOrgEntityProviderTransformsExtensionPoint, {\n setUserTransformer(transformer) {\n if (userTransformer) {\n throw new Error('User transformer may only be set once');\n }\n userTransformer = transformer;\n },\n setGroupTransformer(transformer) {\n if (groupTransformer) {\n throw new Error('Group transformer may only be set once');\n }\n groupTransformer = transformer;\n },\n });\n\n env.registerInit({\n deps: {\n catalog: catalogProcessingExtensionPoint,\n config: coreServices.rootConfig,\n logger: coreServices.logger,\n scheduler: coreServices.scheduler,\n },\n async init({ catalog, config, logger, scheduler }) {\n catalog.addEntityProvider(\n LdapOrgEntityProvider.fromConfig(config, {\n logger,\n scheduler,\n userTransformer: userTransformer,\n groupTransformer: groupTransformer,\n }),\n );\n },\n });\n },\n});\n"],"names":["createExtensionPoint","createBackendModule","catalogProcessingExtensionPoint","coreServices","LdapOrgEntityProvider"],"mappings":";;;;;;;;;;;;;;;AAqDO,MAAM,gDACXA,qCAAA,CAAoE;AAAA,EAClE,EAAA,EAAI;AACN,CAAC;AAOI,MAAM,qCAAqCC,oCAAA,CAAoB;AAAA,EACpE,QAAA,EAAU,SAAA;AAAA,EACV,QAAA,EAAU,uBAAA;AAAA,EACV,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAA;AAIJ,IAAA,IAAI,gBAAA;AAKJ,IAAA,GAAA,CAAI,uBAAuB,6CAAA,EAA+C;AAAA,MACxE,mBAAmB,WAAA,EAAa;AAC9B,QAAA,IAAI,eAAA,EAAiB;AACnB,UAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,QACzD;AACA,QAAA,eAAA,GAAkB,WAAA;AAAA,MACpB,CAAA;AAAA,MACA,oBAAoB,WAAA,EAAa;AAC/B,QAAA,IAAI,gBAAA,EAAkB;AACpB,UAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,QAC1D;AACA,QAAA,gBAAA,GAAmB,WAAA;AAAA,MACrB;AAAA,KACD,CAAA;AAED,IAAA,GAAA,CAAI,YAAA,CAAa;AAAA,MACf,IAAA,EAAM;AAAA,QACJ,OAAA,EAASC,iDAAA;AAAA,QACT,QAAQC,6BAAA,CAAa,UAAA;AAAA,QACrB,QAAQA,6BAAA,CAAa,MAAA;AAAA,QACrB,WAAWA,6BAAA,CAAa;AAAA,OAC1B;AAAA,MACA,MAAM,IAAA,CAAK,EAAE,SAAS,MAAA,EAAQ,MAAA,EAAQ,WAAU,EAAG;AACjD,QAAA,OAAA,CAAQ,iBAAA;AAAA,UACNC,2CAAA,CAAsB,WAAW,MAAA,EAAQ;AAAA,YACvC,MAAA;AAAA,YACA,SAAA;AAAA,YACA,eAAA;AAAA,YACA;AAAA,WACD;AAAA,SACH;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAC;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-catalog-backend-module-ldap",
3
- "version": "0.0.0-nightly-20260120025109",
3
+ "version": "0.0.0-nightly-20260128025246",
4
4
  "description": "A Backstage catalog backend module that helps integrate towards LDAP",
5
5
  "backstage": {
6
6
  "role": "backend-plugin-module",
@@ -41,19 +41,19 @@
41
41
  "test": "backstage-cli package test"
42
42
  },
43
43
  "dependencies": {
44
- "@backstage/backend-plugin-api": "0.0.0-nightly-20260120025109",
44
+ "@backstage/backend-plugin-api": "0.0.0-nightly-20260128025246",
45
45
  "@backstage/catalog-model": "1.7.6",
46
46
  "@backstage/config": "1.3.6",
47
47
  "@backstage/errors": "1.2.7",
48
- "@backstage/plugin-catalog-common": "0.0.0-nightly-20260120025109",
49
- "@backstage/plugin-catalog-node": "0.0.0-nightly-20260120025109",
48
+ "@backstage/plugin-catalog-common": "0.0.0-nightly-20260128025246",
49
+ "@backstage/plugin-catalog-node": "0.0.0-nightly-20260128025246",
50
50
  "@backstage/types": "1.2.2",
51
51
  "ldapts": "^8.0.6",
52
52
  "lodash": "^4.17.21",
53
53
  "uuid": "^11.0.0"
54
54
  },
55
55
  "devDependencies": {
56
- "@backstage/cli": "0.0.0-nightly-20260120025109",
56
+ "@backstage/cli": "0.0.0-nightly-20260128025246",
57
57
  "@types/lodash": "^4.14.151"
58
58
  },
59
59
  "configSchema": "config.d.ts",