UNPKG

benchling_typescript_sdk

Version:

Typescript SDK for Benchling API

52 lines (44 loc) 1.75 kB
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, {}); } }