benchling_typescript_sdk
Version:
Typescript SDK for Benchling API
52 lines (44 loc) • 1.75 kB
text/typescript
import { BaseClient } from "../BaseClient";
import { User, UserBulkUpdate, UsersGetParametersQuery, UserUpdate } from "../types";
import { chunkQueries } from "../superModules/chunkQueries";
export type LimitedUserQueries = keyof NonNullable<UsersGetParametersQuery>;
const limitedUserSearches: LimitedUserQueries[] = [
"email.anyOf",
"handles",
"ids",
"names.anyOf",
"names.anyOf.caseSensitive",
];
export class Users {
private client: BaseClient;
constructor(client: BaseClient) {
this.client = client;
}
public getUserById(user_id: string): Promise<User> {
return this.client.fetchData<User>(`users/${user_id}`, {});
}
public getUsers(parameters: UsersGetParametersQuery): AsyncGenerator<User[]> {
return this.client.fetchPagesIterator<User>("users", parameters);
}
public async *getUsersNoLimits(paramQuery: UsersGetParametersQuery): AsyncGenerator<User[]> {
const chunkSize = 100;
if (!paramQuery || typeof paramQuery !== "object") {
throw new Error("Invalid query parameters provided.");
}
// Generate the list of chunked queries so that no list of queries is longer than 100
let paramQueries: UsersGetParametersQuery[] = chunkQueries<
NonNullable<UsersGetParametersQuery>
>(paramQuery, chunkSize, limitedUserSearches);
// Iterate over each chunked query
for (const query of paramQueries) {
// Call listContainers for the current query
for await (const users of this.getUsers(query)) {
// Yield each batch of containers
yield users;
}
}
}
public async patchUser(user_id: string, userUpdate: UserUpdate): Promise<User> {
return await this.client.patchData<User>(`users/${user_id}`, userUpdate, {});
}
}