UNPKG

nylas

Version:

A NodeJS wrapper for the Nylas REST API for email, contacts, and calendar.

125 lines (124 loc) 3.68 kB
/** * Base class for Nylas API resources * * @ignore No public constructor or functions */ export class Resource { /** * @param apiClient client The configured Nylas API client */ constructor(apiClient) { this.apiClient = apiClient; } async fetchList({ queryParams, path, overrides, }) { const res = await this.apiClient.request({ method: 'GET', path, queryParams, overrides, }); if (queryParams?.limit) { let entriesRemaining = queryParams.limit; while (res.data.length != queryParams.limit) { entriesRemaining = queryParams.limit - res.data.length; if (!res.nextCursor) { break; } const nextRes = await this.apiClient.request({ method: 'GET', path, queryParams: { ...queryParams, limit: entriesRemaining, pageToken: res.nextCursor, }, overrides, }); res.data = res.data.concat(nextRes.data); res.requestId = nextRes.requestId; res.nextCursor = nextRes.nextCursor; } } return res; } async *listIterator(listParams) { const first = await this.fetchList(listParams); yield first; let pageToken = first.nextCursor; while (pageToken) { const res = await this.fetchList({ ...listParams, queryParams: pageToken ? { ...listParams.queryParams, pageToken, } : listParams.queryParams, }); yield res; pageToken = res.nextCursor; } return undefined; } _list(listParams) { const iterator = this.listIterator(listParams); const first = iterator.next().then((res) => ({ ...res.value, next: iterator.next.bind(iterator), })); return Object.assign(first, { [Symbol.asyncIterator]: this.listIterator.bind(this, listParams), }); } _find({ path, queryParams, overrides, }) { return this.apiClient.request({ method: 'GET', path, queryParams, overrides, }); } payloadRequest(method, { path, queryParams, requestBody, overrides }) { return this.apiClient.request({ method, path, queryParams, body: requestBody, overrides, }); } _create(params) { return this.payloadRequest('POST', params); } _update(params) { return this.payloadRequest('PUT', params); } _updatePatch(params) { return this.payloadRequest('PATCH', params); } _destroy({ path, queryParams, requestBody, overrides, }) { return this.apiClient.request({ method: 'DELETE', path, queryParams, body: requestBody, overrides, }); } _getRaw({ path, queryParams, overrides, }) { return this.apiClient.requestRaw({ method: 'GET', path, queryParams, overrides, }); } _getStream({ path, queryParams, overrides, }) { return this.apiClient.requestStream({ method: 'GET', path, queryParams, overrides, }); } }