diff --git a/README.md b/README.md index 1a9df2886..caf4b4418 100644 --- a/README.md +++ b/README.md @@ -868,7 +868,8 @@ usersRes.data.forEach((user) => { // Search all users, optionally according to tenant and/or role filter // Results can be paginated using the limit and page parameters const usersRes = await descopeClient.management.user.search({ tenantIds: ['tenant-ID'] }); -usersRes.data.forEach((user) => { +console.log('Total users:', usersRes.data.total); +usersRes.data.users.forEach((user) => { // do something }); @@ -1698,8 +1699,9 @@ await descopeClient.management.user.createTestUser('desmond@descope.com', { }); // Search all test users according to various parameters -const searchRes = await descopeClient.management.user.searchTestUsers(['id']); -searchRes.data.forEach((user) => { +const searchRes = await descopeClient.management.user.searchTestUsers({ userIds: ['id'] }); +console.log('Total test users:', searchRes.data.total); +searchRes.data.users.forEach((user) => { // do something }); diff --git a/lib/management/types.ts b/lib/management/types.ts index 5fbbf0b25..bad0be5e3 100644 --- a/lib/management/types.ts +++ b/lib/management/types.ts @@ -582,6 +582,11 @@ export type PatchUserBatchResponse = { additionalErrors: Record; }; +export type UserSearchResponse = { + users: UserResponse[]; + total: number; +}; + /** * Search options to filter which audit records we should retrieve. * All parameters are optional. `From` is currently limited to 30 days. diff --git a/lib/management/user.test.ts b/lib/management/user.test.ts index c34ce7651..8c81fec93 100644 --- a/lib/management/user.test.ts +++ b/lib/management/user.test.ts @@ -11,6 +11,7 @@ import { CreateOrInviteBatchResponse, PatchUserBatchResponse, UserPasswordHashed, + UserSearchResponse, } from './types'; const management = withManagement(mockHttpClient); @@ -25,6 +26,7 @@ const mockMgmtUserResponse = { const mockMgmtUsersResponse = { users: [mockUserResponse], + total: 1, }; const mockMgmtInviteBatchResponse = { @@ -1012,7 +1014,7 @@ describe('Management User', () => { }; mockHttpClient.post.mockResolvedValue(httpResponse); const now = new Date().getTime(); - const resp: SdkResponse = await management.user.searchTestUsers({ + const resp: SdkResponse = await management.user.searchTestUsers({ tenantIds: ['t1'], roles: ['r1'], limit: 100, @@ -1050,7 +1052,7 @@ describe('Management User', () => { expect(resp).toEqual({ code: 200, - data: [mockUserResponse], + data: { users: [mockUserResponse], total: 1 }, ok: true, response: httpResponse, }); @@ -1069,7 +1071,7 @@ describe('Management User', () => { }; mockHttpClient.post.mockResolvedValue(httpResponse); const now = new Date().getTime(); - const resp: SdkResponse = await management.user.search({ + const resp: SdkResponse = await management.user.search({ tenantIds: ['t1'], roles: ['r1'], limit: 100, @@ -1105,7 +1107,7 @@ describe('Management User', () => { expect(resp).toEqual({ code: 200, - data: [mockUserResponse], + data: { users: [mockUserResponse], total: 1 }, ok: true, response: httpResponse, }); diff --git a/lib/management/user.ts b/lib/management/user.ts index 57ec5782c..99ec78a79 100644 --- a/lib/management/user.ts +++ b/lib/management/user.ts @@ -21,6 +21,7 @@ import { TemplateOptions, ProviderTokenOptions, UserOptions, + UserSearchResponse, } from './types'; import { DeliveryMethodForTestUser } from '../types'; import apiPaths from './paths'; @@ -618,8 +619,8 @@ const withUser = (httpClient: HttpClient) => { }), (data) => data.users, ), - searchTestUsers: (searchReq: SearchRequest): Promise> => - transformResponse( + searchTestUsers: (searchReq: SearchRequest): Promise> => + transformResponse( httpClient.post(apiPaths.user.searchTestUsers, { ...searchReq, withTestUser: true, @@ -627,16 +628,16 @@ const withUser = (httpClient: HttpClient) => { roleNames: searchReq.roles, roles: undefined, }), - (data) => data.users, + (data) => ({ users: data.users, total: data.total }), ), - search: (searchReq: SearchRequest): Promise> => - transformResponse( + search: (searchReq: SearchRequest): Promise> => + transformResponse( httpClient.post(apiPaths.user.search, { ...searchReq, roleNames: searchReq.roles, roles: undefined, }), - (data) => data.users, + (data) => ({ users: data.users, total: data.total }), ), /** * Get the provider token for the given login ID.