Skip to content

Commit

Permalink
Send RSVP support for Events API
Browse files Browse the repository at this point in the history
  • Loading branch information
yifanplanet committed Nov 30, 2023
1 parent 38f075c commit dd1583a
Show file tree
Hide file tree
Showing 13 changed files with 112 additions and 27 deletions.
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;
}

/**
* 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 retrieve.
* @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 deletion 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',
},
});
});
});
});

0 comments on commit dd1583a

Please sign in to comment.