diff --git a/.changeset/slimy-zebras-reply.md b/.changeset/slimy-zebras-reply.md new file mode 100644 index 0000000000..5b309f5129 --- /dev/null +++ b/.changeset/slimy-zebras-reply.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-ldap': patch +--- + +Now the `searchStream` method in LDAP client awaits the callbacks diff --git a/plugins/catalog-backend-module-ldap/api-report.md b/plugins/catalog-backend-module-ldap/api-report.md index 90e58b3fb2..9876c163e8 100644 --- a/plugins/catalog-backend-module-ldap/api-report.md +++ b/plugins/catalog-backend-module-ldap/api-report.md @@ -90,7 +90,7 @@ export class LdapClient { searchStreaming( dn: string, options: SearchOptions, - f: (entry: SearchEntry) => void, + f: (entry: SearchEntry) => Promise | void, ): Promise; } diff --git a/plugins/catalog-backend-module-ldap/src/ldap/client.ts b/plugins/catalog-backend-module-ldap/src/ldap/client.ts index d9d0faf9a2..d5f6a7d0f6 100644 --- a/plugins/catalog-backend-module-ldap/src/ldap/client.ts +++ b/plugins/catalog-backend-module-ldap/src/ldap/client.ts @@ -147,9 +147,10 @@ export class LdapClient { async searchStreaming( dn: string, options: SearchOptions, - f: (entry: SearchEntry) => void, + f: (entry: SearchEntry) => Promise | void, ): Promise { try { + const awaitList: Array | void> = []; return await new Promise((resolve, reject) => { // Note that we clone the (frozen) options, since ldapjs rudely tries to // overwrite parts of them @@ -163,7 +164,7 @@ export class LdapClient { }); res.on('searchEntry', entry => { - f(entry); + awaitList.push(f(entry)); }); res.on('error', e => { @@ -176,7 +177,9 @@ export class LdapClient { } else if (r.status !== 0) { throw new Error(`Got status ${r.status}: ${r.errorMessage}`); } else { - resolve(); + Promise.all(awaitList) + .then(() => resolve()) + .catch(reject); } }); });