Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -867,7 +867,12 @@ 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'] });
// Additional filters: verifiedEmail, verifiedPhone, statuses, roles, tenantIds, etc.
const usersRes = await descopeClient.management.user.search({
tenantIds: ['tenant-ID'],
verifiedEmail: true, // optional: filter by verified email status
verifiedPhone: false, // optional: filter by verified phone status
});
console.log('Total users:', usersRes.data.total);
usersRes.data.users.forEach((user) => {
// do something
Expand Down
23 changes: 23 additions & 0 deletions lib/management/user.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1134,6 +1134,29 @@ describe('Management User', () => {
response: httpResponse,
});
});

it('should pass verifiedEmail and verifiedPhone filters', async () => {
const httpResponse = {
ok: true,
json: () => mockMgmtUsersResponse,
clone: () => ({
json: () => Promise.resolve(mockMgmtUsersResponse),
}),
status: 200,
};
mockHttpClient.post.mockResolvedValue(httpResponse);
await management.user.search({
verifiedEmail: true,
verifiedPhone: false,
});

expect(mockHttpClient.post).toHaveBeenCalledWith(apiPaths.user.search, {
verifiedEmail: true,
verifiedPhone: false,
roleNames: undefined,
roles: undefined,
});
});
});

describe('getProviderToken', () => {
Expand Down
2 changes: 2 additions & 0 deletions lib/management/user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ type SearchRequest = {
toModifiedTime?: number; // Search users modified before this time (epoch in milliseconds)
tenantRoleIds?: Record<string, RolesList>; // Search users based on tenants and role IDs
tenantRoleNames?: Record<string, RolesList>; // Search users based on tenants and role names
verifiedEmail?: boolean; // Filter by verified email status
verifiedPhone?: boolean; // Filter by verified phone status
};

type SingleUserResponse = {
Expand Down
Loading