Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Send RSVP support for Events API #514

Merged
merged 2 commits into from
Dec 22, 2023
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/models/events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,13 @@ export interface CreateEventRequest {
*/
export type UpdateEventRequest = Subset<CreateEventRequest>;

/**
* Interface representing a request to send RSVP to an event.
*/
export type SendRsvpRequest = {
status: RsvpStatus;
};

/**
* Interface representing the query parameters for listing events.
*/
Expand Down Expand Up @@ -299,11 +306,21 @@ export type UpdateEventQueryParams = CreateEventQueryParams;
*/
export type DestroyEventQueryParams = CreateEventQueryParams;

/**
* Interface representing of the query parameters for sending RSVP to an event.
*/
export type SendRsvpQueryParams = FindEventQueryParams;

/**
* Enum representing the status of an event.
*/
type Status = 'confirmed' | 'tentative' | 'cancelled';

/**
* Enum representing the status of an RSVP response.
*/
type RsvpStatus = 'yes' | 'no' | 'maybe';

/**
* Enum representing the visibility of an event.
*/
Expand Down
14 changes: 7 additions & 7 deletions src/models/response.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
/**
* Interface representing a base response to a request.
*/
export interface NylasBaseResponse {
requestId: string;
}

Comment on lines +1 to +7
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice change!

/**
* Interface representation of a Nylas response object
*/
Expand Down Expand Up @@ -30,13 +37,6 @@ export interface NylasListResponse<T> {
nextCursor?: string;
}

/**
* Interface representing a response to a delete request.
*/
export interface NylasDeleteResponse {
requestId: string;
}

/**
* Helper type for pagination
*/
Expand Down
4 changes: 2 additions & 2 deletions src/resources/calendars.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
UpdateCalenderRequest,
} from '../models/calendars.js';
import {
NylasDeleteResponse,
NylasBaseResponse,
NylasResponse,
NylasListResponse,
} from '../models/response.js';
Expand Down Expand Up @@ -167,7 +167,7 @@ export class Calendars extends Resource {
identifier,
calendarId,
overrides,
}: DestroyCalendarParams & Overrides): Promise<NylasDeleteResponse> {
}: DestroyCalendarParams & Overrides): Promise<NylasBaseResponse> {
return super._destroy({
path: `/v3/grants/${identifier}/calendars/${calendarId}`,
overrides,
Expand Down
4 changes: 2 additions & 2 deletions src/resources/connectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
} from '../models/connectors.js';
import { Overrides } from '../config.js';
import {
NylasDeleteResponse,
NylasBaseResponse,
NylasListResponse,
NylasResponse,
} from '../models/response.js';
Expand Down Expand Up @@ -140,7 +140,7 @@ export class Connectors extends Resource {
public destroy({
provider,
overrides,
}: DestroyConnectorParams & Overrides): Promise<NylasDeleteResponse> {
}: DestroyConnectorParams & Overrides): Promise<NylasBaseResponse> {
return super._destroy({
path: `/v3/connectors/${provider}`,
overrides,
Expand Down
4 changes: 2 additions & 2 deletions src/resources/credentials.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
} from '../models/credentials.js';
import { Overrides } from '../config.js';
import {
NylasDeleteResponse,
NylasBaseResponse,
NylasListResponse,
NylasResponse,
} from '../models/response.js';
Expand Down Expand Up @@ -140,7 +140,7 @@ export class Credentials extends Resource {
provider,
credentialsId,
overrides,
}: DestroyCredentialParams & Overrides): Promise<NylasDeleteResponse> {
}: DestroyCredentialParams & Overrides): Promise<NylasBaseResponse> {
return super._destroy({
path: `/v3/credentials/${provider}/creds/${credentialsId}}`,
overrides,
Expand Down
4 changes: 2 additions & 2 deletions src/resources/drafts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
} from '../models/drafts.js';
import { Overrides } from '../config.js';
import {
NylasDeleteResponse,
NylasBaseResponse,
NylasListResponse,
NylasResponse,
} from '../models/response.js';
Expand Down Expand Up @@ -151,7 +151,7 @@ export class Drafts extends Resource {
identifier,
draftId,
overrides,
}: DestroyDraftParams & Overrides): Promise<NylasDeleteResponse> {
}: DestroyDraftParams & Overrides): Promise<NylasBaseResponse> {
return super._destroy({
path: `/v3/grants/${identifier}/drafts/${draftId}`,
overrides,
Expand Down
40 changes: 38 additions & 2 deletions src/resources/events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@ import {
Event,
FindEventQueryParams,
ListEventQueryParams,
SendRsvpQueryParams,
SendRsvpRequest,
UpdateEventQueryParams,
UpdateEventRequest,
} from '../models/events.js';
import {
NylasDeleteResponse,
NylasBaseResponse,
NylasResponse,
NylasListResponse,
} from '../models/response.js';
Expand Down Expand Up @@ -71,6 +73,19 @@ interface DestroyEventParams {
queryParams: DestroyEventQueryParams;
}

/**
* @property identifier The identifier of the grant to act upon
* @property eventId The id of the Event to update.
* @property queryParams The query parameters to include in the request
* @property requestBody The values to send the RSVP with
*/
interface SendRsvpParams {
identifier: string;
eventId: string;
queryParams: SendRsvpQueryParams;
requestBody: SendRsvpRequest;
}

/**
* Nylas Events API
*
Expand Down Expand Up @@ -156,11 +171,32 @@ export class Events extends Resource {
eventId,
queryParams,
overrides,
}: DestroyEventParams & Overrides): Promise<NylasDeleteResponse> {
}: DestroyEventParams & Overrides): Promise<NylasBaseResponse> {
return super._destroy({
path: `/v3/grants/${identifier}/events/${eventId}`,
queryParams,
overrides,
});
}

/**
* Send RSVP. Allows users to respond to events they have been added to as an attendee.
* You cannot send RSVP as an event owner/organizer.
* You cannot directly update events as an invitee, since you are not the owner/organizer.
* @return The send-rsvp response
*/
public sendRsvp({
identifier,
eventId,
requestBody,
queryParams,
overrides,
}: SendRsvpParams & Overrides): Promise<NylasBaseResponse> {
return super._create({
path: `/v3/grants/${identifier}/events/${eventId}/send-rsvp`,
queryParams,
requestBody,
overrides,
});
}
}
4 changes: 2 additions & 2 deletions src/resources/folders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
UpdateFolderRequest,
} from '../models/folders.js';
import {
NylasDeleteResponse,
NylasBaseResponse,
NylasResponse,
NylasListResponse,
} from '../models/response.js';
Expand Down Expand Up @@ -147,7 +147,7 @@ export class Folders extends Resource {
identifier,
folderId,
overrides,
}: DestroyFolderParams & Overrides): Promise<NylasDeleteResponse> {
}: DestroyFolderParams & Overrides): Promise<NylasBaseResponse> {
return super._destroy({
path: `/v3/grants/${identifier}/folders/${folderId}`,
overrides,
Expand Down
4 changes: 2 additions & 2 deletions src/resources/grants.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Resource } from './resource.js';
import { Overrides } from '../config.js';
import {
NylasDeleteResponse,
NylasBaseResponse,
NylasResponse,
NylasListResponse,
} from '../models/response.js';
Expand Down Expand Up @@ -115,7 +115,7 @@ export class Grants extends Resource {
public destroy({
grantId,
overrides,
}: DestroyGrantParams & Overrides): Promise<NylasDeleteResponse> {
}: DestroyGrantParams & Overrides): Promise<NylasBaseResponse> {
return super._destroy({
path: `/v3/grants/${grantId}`,
overrides,
Expand Down
4 changes: 2 additions & 2 deletions src/resources/messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
} from '../models/messages.js';
import { Overrides } from '../config.js';
import {
NylasDeleteResponse,
NylasBaseResponse,
NylasListResponse,
NylasResponse,
} from '../models/response.js';
Expand Down Expand Up @@ -171,7 +171,7 @@ export class Messages extends Resource {
identifier,
messageId,
overrides,
}: DestroyMessageParams & Overrides): Promise<NylasDeleteResponse> {
}: DestroyMessageParams & Overrides): Promise<NylasBaseResponse> {
return super._destroy({
path: `/v3/grants/${identifier}/messages/${messageId}`,
overrides,
Expand Down
4 changes: 2 additions & 2 deletions src/resources/redirectUris.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { AsyncListResponse, Resource } from './resource.js';
import {
NylasDeleteResponse,
NylasBaseResponse,
NylasResponse,
NylasListResponse,
} from '../models/response.js';
Expand Down Expand Up @@ -117,7 +117,7 @@ export class RedirectUris extends Resource {
redirectUriId,
overrides,
}: DestroyRedirectUrisParams & Overrides): Promise<
NylasResponse<NylasDeleteResponse>
NylasResponse<NylasBaseResponse>
> {
return super._destroy({
overrides,
Expand Down
4 changes: 2 additions & 2 deletions src/resources/threads.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
import { AsyncListResponse, Resource } from './resource.js';
import { Overrides } from '../config.js';
import {
NylasDeleteResponse,
NylasBaseResponse,
NylasListResponse,
NylasResponse,
} from '../models/response.js';
Expand Down Expand Up @@ -118,7 +118,7 @@ export class Threads extends Resource {
identifier,
threadId,
overrides,
}: DestroyThreadParams & Overrides): Promise<NylasDeleteResponse> {
}: DestroyThreadParams & Overrides): Promise<NylasBaseResponse> {
return super._destroy({
path: `/v3/grants/${identifier}/threads/${threadId}`,
overrides,
Expand Down
32 changes: 32 additions & 0 deletions tests/resources/events.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -248,4 +248,36 @@ describe('Events', () => {
});
});
});

describe('send-rsvp', () => {
it('should call apiClient.request with the correct params', async () => {
await events.sendRsvp({
identifier: 'id123',
eventId: 'event123',
queryParams: {
calendarId: 'calendar123',
},
requestBody: {
status: 'yes',
},
overrides: {
apiUri: 'https://test.api.nylas.com',
},
});

expect(apiClient.request).toHaveBeenCalledWith({
method: 'POST',
path: '/v3/grants/id123/events/event123/send-rsvp',
queryParams: {
calendarId: 'calendar123',
},
body: {
status: 'yes',
},
overrides: {
apiUri: 'https://test.api.nylas.com',
},
});
});
});
});