Skip to content

Commit 68f07c0

Browse files
committed
Add tentativeAsBusy parameter to FreeBusy requests
- Add tentativeAsBusy optional boolean parameter to GetFreeBusyRequest interface - When true (default), Nylas treats tentative events as busy - When false, tentative events are treated as free - Add comprehensive test coverage for all tentativeAsBusy scenarios - Update changelog with new feature - Follows SDK camelCase naming convention
1 parent d91a3a9 commit 68f07c0

File tree

15 files changed

+170
-35
lines changed

15 files changed

+170
-35
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* Fix event status type to use 'maybe' instead of 'tentative' in Event interface to match API documentation
55
* Add support for 'zoom' as a provider type in Auth module
66
* Fix Add missing `/cancel` suffix in Notetaker API endpoint
7+
* Add support for `tentativeAsBusy` parameter in FreeBusy requests to control how tentative events are treated
78

89
### 7.9.0 / 2025-04-30
910
* Add support for Notetaker API endpoints

scripts/generateModelIndex.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const comment = '// This file is generated by scripts/generateModelIndex.js\n';
55
const modelsDir = path.join(__dirname, '..', 'src', 'models');
66
let indexContent = '';
77

8-
fs.readdirSync(modelsDir).forEach(file => {
8+
fs.readdirSync(modelsDir).forEach((file) => {
99
if (file.endsWith('.ts') && file !== 'index.ts') {
1010
const modelName = file.replace('.ts', '.js');
1111
indexContent += `export * from './${modelName}';\n`;

src/models/connectors.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ export type ImapCreateConnectorRequest = BaseCreateConnectionRequest;
104104
/**
105105
* Interface representing the base Nylas connector creation request.
106106
*/
107-
export type VirtualCalendarsCreateConnectorRequest = BaseCreateConnectionRequest;
107+
export type VirtualCalendarsCreateConnectorRequest =
108+
BaseCreateConnectionRequest;
108109

109110
/**
110111
* The type of the Nylas connector creation request.

src/models/error.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@ export abstract class AbstractNylasSdkError extends Error {}
2929
/**
3030
* Class representation of a general Nylas API error.
3131
*/
32-
export class NylasApiError extends AbstractNylasApiError
33-
implements NylasApiErrorResponseData {
32+
export class NylasApiError
33+
extends AbstractNylasApiError
34+
implements NylasApiErrorResponseData
35+
{
3436
/**
3537
* Error type.
3638
*/
@@ -60,8 +62,10 @@ export class NylasApiError extends AbstractNylasApiError
6062
/**
6163
* Class representing an OAuth error returned by the Nylas API.
6264
*/
63-
export class NylasOAuthError extends AbstractNylasApiError
64-
implements NylasOAuthErrorResponse {
65+
export class NylasOAuthError
66+
extends AbstractNylasApiError
67+
implements NylasOAuthErrorResponse
68+
{
6569
/**
6670
* Error type.
6771
*/

src/models/freeBusy.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ export interface GetFreeBusyRequest {
3232
* A list of email addresses to check the free/busy schedules for.
3333
*/
3434
emails: string[];
35+
/**
36+
* When true, Nylas treats tentative events as busy.
37+
* @default true
38+
*/
39+
tentativeAsBusy?: boolean;
3540
}
3641

3742
/**

src/models/response.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,5 @@ export interface NylasListResponse<T> {
4949
/**
5050
* Helper type for pagination
5151
*/
52-
export type ListResponseInnerType<T> = T extends NylasListResponse<infer R>
53-
? R
54-
: never;
52+
export type ListResponseInnerType<T> =
53+
T extends NylasListResponse<infer R> ? R : never;

src/resources/auth.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -219,13 +219,9 @@ export class Auth extends Resource {
219219
}
220220

221221
private hashPKCESecret(secret: string): string {
222-
const hash = createHash('sha256')
223-
.update(secret)
224-
.digest('hex');
222+
const hash = createHash('sha256').update(secret).digest('hex');
225223

226-
return Buffer.from(hash)
227-
.toString('base64')
228-
.replace(/=+$/, '');
224+
return Buffer.from(hash).toString('base64').replace(/=+$/, '');
229225
}
230226

231227
private getTokenInfo(

src/resources/notetakers.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,8 @@ export class Notetakers extends Resource {
9191
identifier,
9292
queryParams,
9393
overrides,
94-
}: ListNotetakersParams & Overrides): AsyncListResponse<
95-
ListNotetakersResponse
96-
> {
94+
}: ListNotetakersParams &
95+
Overrides): AsyncListResponse<ListNotetakersResponse> {
9796
return super._list({
9897
path: identifier
9998
? `/v3/grants/${identifier}/notetakers`

src/resources/resource.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,11 @@ export class Resource {
126126
): AsyncListResponse<T> {
127127
const iterator = this.listIterator(listParams);
128128
const first = iterator.next().then(
129-
res =>
129+
(res) =>
130130
({
131131
...res.value,
132132
next: iterator.next.bind(iterator),
133-
} as ListYieldReturn<T>)
133+
}) as ListYieldReturn<T>
134134
);
135135

136136
return Object.assign(first, {

src/utils.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ function streamToBase64(stream: NodeJS.ReadableStream): Promise<string> {
3636
const base64 = Buffer.concat(chunks).toString('base64');
3737
resolve(base64);
3838
});
39-
stream.on('error', err => {
39+
stream.on('error', (err) => {
4040
reject(err);
4141
});
4242
});
@@ -51,7 +51,7 @@ export async function encodeAttachmentStreams(
5151
attachments: CreateAttachmentRequest[]
5252
): Promise<CreateAttachmentRequest[]> {
5353
return await Promise.all(
54-
attachments.map(async attachment => {
54+
attachments.map(async (attachment) => {
5555
const base64EncodedContent =
5656
attachment.content instanceof Readable
5757
? await streamToBase64(attachment.content)
@@ -102,7 +102,7 @@ function convertCase(
102102
newObj[key] = obj[key];
103103
} else if (Array.isArray(obj[key])) {
104104
newObj[applyCasing(casingFunction, key)] = (obj[key] as any[]).map(
105-
item => {
105+
(item) => {
106106
if (typeof item === 'object') {
107107
return convertCase(item, casingFunction);
108108
} else {
@@ -157,8 +157,8 @@ export type Subset<K> = {
157157
[attr in keyof K]?: K[attr] extends object
158158
? Subset<K[attr]>
159159
: K[attr] extends object | null
160-
? Subset<K[attr]> | null
161-
: K[attr] extends object | null | undefined
162-
? Subset<K[attr]> | null | undefined
163-
: K[attr];
160+
? Subset<K[attr]> | null
161+
: K[attr] extends object | null | undefined
162+
? Subset<K[attr]> | null | undefined
163+
: K[attr];
164164
};

0 commit comments

Comments
 (0)