nylas 7.5.1 → 7.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -112,7 +112,8 @@ class APIClient {
112
112
  requestOptions.headers = this.setRequestHeaders(optionParams);
113
113
  requestOptions.method = optionParams.method;
114
114
  if (optionParams.body) {
115
- requestOptions.body = JSON.stringify((0, utils_js_1.objKeysToSnakeCase)(optionParams.body));
115
+ requestOptions.body = JSON.stringify((0, utils_js_1.objKeysToSnakeCase)(optionParams.body, ['metadata']) // metadata should remain as is
116
+ );
116
117
  requestOptions.headers['Content-Type'] = 'application/json';
117
118
  }
118
119
  if (optionParams.form) {
@@ -136,7 +137,7 @@ class APIClient {
136
137
  const text = await response.text();
137
138
  try {
138
139
  const responseJSON = JSON.parse(text);
139
- return (0, utils_js_1.objKeysToCamelCase)(responseJSON);
140
+ return (0, utils_js_1.objKeysToCamelCase)(responseJSON, ['metadata']);
140
141
  }
141
142
  catch (e) {
142
143
  throw new Error(`Could not parse response from the server: ${text}`);
@@ -6,16 +6,43 @@ exports.WebhookTriggers = void 0;
6
6
  */
7
7
  var WebhookTriggers;
8
8
  (function (WebhookTriggers) {
9
+ // Calendar triggers
9
10
  WebhookTriggers["CalendarCreated"] = "calendar.created";
10
11
  WebhookTriggers["CalendarUpdated"] = "calendar.updated";
11
12
  WebhookTriggers["CalendarDeleted"] = "calendar.deleted";
13
+ // Event triggers
12
14
  WebhookTriggers["EventCreated"] = "event.created";
13
15
  WebhookTriggers["EventUpdated"] = "event.updated";
14
16
  WebhookTriggers["EventDeleted"] = "event.deleted";
17
+ // Grant triggers
15
18
  WebhookTriggers["GrantCreated"] = "grant.created";
16
19
  WebhookTriggers["GrantUpdated"] = "grant.updated";
17
20
  WebhookTriggers["GrantDeleted"] = "grant.deleted";
18
21
  WebhookTriggers["GrantExpired"] = "grant.expired";
22
+ // Message triggers
23
+ WebhookTriggers["MessageCreated"] = "message.created";
24
+ WebhookTriggers["MessageUpdated"] = "message.updated";
19
25
  WebhookTriggers["MessageSendSuccess"] = "message.send_success";
20
26
  WebhookTriggers["MessageSendFailed"] = "message.send_failed";
27
+ WebhookTriggers["MessageBounceDetected"] = "message.bounce_detected";
28
+ // Message tracking triggers
29
+ WebhookTriggers["MessageOpened"] = "message.opened";
30
+ WebhookTriggers["MessageLinkClicked"] = "message.link_clicked";
31
+ WebhookTriggers["ThreadReplied"] = "thread.replied";
32
+ // ExtractAI triggers
33
+ WebhookTriggers["MessageIntelligenceOrder"] = "message.intelligence.order";
34
+ WebhookTriggers["MessageIntelligenceTracking"] = "message.intelligence.tracking";
35
+ // Folder triggers
36
+ WebhookTriggers["FolderCreated"] = "folder.created";
37
+ WebhookTriggers["FolderUpdated"] = "folder.updated";
38
+ WebhookTriggers["FolderDeleted"] = "folder.deleted";
39
+ // Contact triggers
40
+ WebhookTriggers["ContactUpdated"] = "contact.updated";
41
+ WebhookTriggers["ContactDeleted"] = "contact.deleted";
42
+ // Scheduler triggers
43
+ WebhookTriggers["BookingCreated"] = "booking.created";
44
+ WebhookTriggers["BookingPending"] = "booking.pending";
45
+ WebhookTriggers["BookingRescheduled"] = "booking.rescheduled";
46
+ WebhookTriggers["BookingCancelled"] = "booking.cancelled";
47
+ WebhookTriggers["BookingReminder"] = "booking.reminder";
21
48
  })(WebhookTriggers = exports.WebhookTriggers || (exports.WebhookTriggers = {}));
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Auth = void 0;
4
4
  const uuid_1 = require("uuid");
5
- const node_crypto_1 = require("node:crypto");
5
+ const crypto_1 = require("crypto");
6
6
  const resource_js_1 = require("./resource.js");
7
7
  /**
8
8
  * A collection of authentication related API endpoints
@@ -165,7 +165,7 @@ class Auth extends resource_js_1.Resource {
165
165
  return url;
166
166
  }
167
167
  hashPKCESecret(secret) {
168
- const hash = (0, node_crypto_1.createHash)('sha256')
168
+ const hash = (0, crypto_1.createHash)('sha256')
169
169
  .update(secret)
170
170
  .digest('hex');
171
171
  return Buffer.from(hash)
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Messages = void 0;
4
4
  const resource_js_1 = require("./resource.js");
5
- const FormData = require("form-data");
6
5
  const utils_js_1 = require("../utils.js");
7
6
  const smartCompose_js_1 = require("./smartCompose.js");
8
7
  /**
@@ -133,14 +132,10 @@ class Messages extends resource_js_1.Resource {
133
132
  });
134
133
  }
135
134
  static _buildFormRequest(requestBody) {
136
- let form;
137
135
  // FormData imports are funky, cjs needs to use .default, es6 doesn't
138
- if (typeof FormData.default !== 'undefined') {
139
- form = new FormData.default();
140
- }
141
- else {
142
- form = new FormData();
143
- }
136
+ const FD = require('form-data');
137
+ const FormDataConstructor = FD.default || FD;
138
+ const form = new FormDataConstructor();
144
139
  // Split out the message payload from the attachments
145
140
  const messagePayload = {
146
141
  ...requestBody,
@@ -65,7 +65,7 @@ class Webhooks extends resource_js_1.Resource {
65
65
  * @returns The updated webhook destination with the webhook secret
66
66
  */
67
67
  rotateSecret({ webhookId, overrides, }) {
68
- return super._update({
68
+ return super._create({
69
69
  path: `/v3/webhooks/${webhookId}/rotate-secret`,
70
70
  requestBody: {},
71
71
  overrides,
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SDK_VERSION = void 0;
4
4
  // This file is generated by scripts/exportVersion.js
5
- exports.SDK_VERSION = '7.5.1';
5
+ exports.SDK_VERSION = '7.6.0';
@@ -110,7 +110,8 @@ export default class APIClient {
110
110
  requestOptions.headers = this.setRequestHeaders(optionParams);
111
111
  requestOptions.method = optionParams.method;
112
112
  if (optionParams.body) {
113
- requestOptions.body = JSON.stringify(objKeysToSnakeCase(optionParams.body));
113
+ requestOptions.body = JSON.stringify(objKeysToSnakeCase(optionParams.body, ['metadata']) // metadata should remain as is
114
+ );
114
115
  requestOptions.headers['Content-Type'] = 'application/json';
115
116
  }
116
117
  if (optionParams.form) {
@@ -134,7 +135,7 @@ export default class APIClient {
134
135
  const text = await response.text();
135
136
  try {
136
137
  const responseJSON = JSON.parse(text);
137
- return objKeysToCamelCase(responseJSON);
138
+ return objKeysToCamelCase(responseJSON, ['metadata']);
138
139
  }
139
140
  catch (e) {
140
141
  throw new Error(`Could not parse response from the server: ${text}`);
@@ -3,16 +3,43 @@
3
3
  */
4
4
  export var WebhookTriggers;
5
5
  (function (WebhookTriggers) {
6
+ // Calendar triggers
6
7
  WebhookTriggers["CalendarCreated"] = "calendar.created";
7
8
  WebhookTriggers["CalendarUpdated"] = "calendar.updated";
8
9
  WebhookTriggers["CalendarDeleted"] = "calendar.deleted";
10
+ // Event triggers
9
11
  WebhookTriggers["EventCreated"] = "event.created";
10
12
  WebhookTriggers["EventUpdated"] = "event.updated";
11
13
  WebhookTriggers["EventDeleted"] = "event.deleted";
14
+ // Grant triggers
12
15
  WebhookTriggers["GrantCreated"] = "grant.created";
13
16
  WebhookTriggers["GrantUpdated"] = "grant.updated";
14
17
  WebhookTriggers["GrantDeleted"] = "grant.deleted";
15
18
  WebhookTriggers["GrantExpired"] = "grant.expired";
19
+ // Message triggers
20
+ WebhookTriggers["MessageCreated"] = "message.created";
21
+ WebhookTriggers["MessageUpdated"] = "message.updated";
16
22
  WebhookTriggers["MessageSendSuccess"] = "message.send_success";
17
23
  WebhookTriggers["MessageSendFailed"] = "message.send_failed";
24
+ WebhookTriggers["MessageBounceDetected"] = "message.bounce_detected";
25
+ // Message tracking triggers
26
+ WebhookTriggers["MessageOpened"] = "message.opened";
27
+ WebhookTriggers["MessageLinkClicked"] = "message.link_clicked";
28
+ WebhookTriggers["ThreadReplied"] = "thread.replied";
29
+ // ExtractAI triggers
30
+ WebhookTriggers["MessageIntelligenceOrder"] = "message.intelligence.order";
31
+ WebhookTriggers["MessageIntelligenceTracking"] = "message.intelligence.tracking";
32
+ // Folder triggers
33
+ WebhookTriggers["FolderCreated"] = "folder.created";
34
+ WebhookTriggers["FolderUpdated"] = "folder.updated";
35
+ WebhookTriggers["FolderDeleted"] = "folder.deleted";
36
+ // Contact triggers
37
+ WebhookTriggers["ContactUpdated"] = "contact.updated";
38
+ WebhookTriggers["ContactDeleted"] = "contact.deleted";
39
+ // Scheduler triggers
40
+ WebhookTriggers["BookingCreated"] = "booking.created";
41
+ WebhookTriggers["BookingPending"] = "booking.pending";
42
+ WebhookTriggers["BookingRescheduled"] = "booking.rescheduled";
43
+ WebhookTriggers["BookingCancelled"] = "booking.cancelled";
44
+ WebhookTriggers["BookingReminder"] = "booking.reminder";
18
45
  })(WebhookTriggers || (WebhookTriggers = {}));
@@ -1,5 +1,5 @@
1
1
  import { v4 as uuid } from 'uuid';
2
- import { createHash } from 'node:crypto';
2
+ import { createHash } from 'crypto';
3
3
  import { Resource } from './resource.js';
4
4
  /**
5
5
  * A collection of authentication related API endpoints
@@ -1,5 +1,4 @@
1
1
  import { Resource } from './resource.js';
2
- import * as FormData from 'form-data';
3
2
  import { encodeAttachmentStreams, objKeysToSnakeCase } from '../utils.js';
4
3
  import { SmartCompose } from './smartCompose.js';
5
4
  /**
@@ -130,14 +129,10 @@ export class Messages extends Resource {
130
129
  });
131
130
  }
132
131
  static _buildFormRequest(requestBody) {
133
- let form;
134
132
  // FormData imports are funky, cjs needs to use .default, es6 doesn't
135
- if (typeof FormData.default !== 'undefined') {
136
- form = new FormData.default();
137
- }
138
- else {
139
- form = new FormData();
140
- }
133
+ const FD = require('form-data');
134
+ const FormDataConstructor = FD.default || FD;
135
+ const form = new FormDataConstructor();
141
136
  // Split out the message payload from the attachments
142
137
  const messagePayload = {
143
138
  ...requestBody,
@@ -62,7 +62,7 @@ export class Webhooks extends Resource {
62
62
  * @returns The updated webhook destination with the webhook secret
63
63
  */
64
64
  rotateSecret({ webhookId, overrides, }) {
65
- return super._update({
65
+ return super._create({
66
66
  path: `/v3/webhooks/${webhookId}/rotate-secret`,
67
67
  requestBody: {},
68
68
  overrides,
@@ -1,2 +1,2 @@
1
1
  // This file is generated by scripts/exportVersion.js
2
- export const SDK_VERSION = '7.5.1';
2
+ export const SDK_VERSION = '7.6.0';
@@ -2,7 +2,7 @@
2
2
  /// <reference types="node" />
3
3
  import { Request, Response } from 'node-fetch';
4
4
  import { NylasConfig, OverridableNylasConfig } from './config.js';
5
- import * as FormData from 'form-data';
5
+ import FormData from 'form-data';
6
6
  /**
7
7
  * Options for a request to the Nylas API
8
8
  * @property path The path to the API endpoint
@@ -1,4 +1,5 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="node" />
2
3
  /**
3
4
  * Interface of an attachment object from Nylas.
4
5
  */
@@ -34,9 +35,11 @@ interface BaseAttachment {
34
35
  export interface CreateAttachmentRequest extends BaseAttachment {
35
36
  /**
36
37
  * Content of the attachment.
37
- * It can either be a readable stream or a base64 encoded string.
38
+ * It can either be a readable stream, a base64 encoded string, or a buffer.
39
+ * For attachments less than 3MB, the content can be a readable stream, or a base64 encoded string.
40
+ * For attachments greater than 3MB, the content must be either a readable stream or a buffer.
38
41
  */
39
- content: NodeJS.ReadableStream | string;
42
+ content: NodeJS.ReadableStream | string | Buffer;
40
43
  }
41
44
  /**
42
45
  * Interface of an attachment object from Nylas.
@@ -5,7 +5,7 @@ type AccessType = 'online' | 'offline';
5
5
  /**
6
6
  * Type for the different OAuth providers Nylas supports.
7
7
  */
8
- export type Provider = 'google' | 'imap' | 'microsoft' | 'icloud' | 'virtual-calendar';
8
+ export type Provider = 'google' | 'imap' | 'microsoft' | 'icloud' | 'virtual-calendar' | 'ews';
9
9
  /**
10
10
  * Configuration for generating a URL for OAuth 2.0 authentication.
11
11
  */
@@ -273,6 +273,11 @@ export interface ListEventQueryParams extends ListQueryParams {
273
273
  * You can pass the query parameter multiple times to select or exclude multiple event types.
274
274
  */
275
275
  eventType?: EventType[];
276
+ /**
277
+ * Filter for events that include the specified attendees.
278
+ * Not supported for virtual calendars.
279
+ */
280
+ attendees?: string[];
276
281
  }
277
282
  /**
278
283
  * Interface representing of the query parameters for creating an event.
@@ -118,8 +118,26 @@ export declare enum WebhookTriggers {
118
118
  GrantUpdated = "grant.updated",
119
119
  GrantDeleted = "grant.deleted",
120
120
  GrantExpired = "grant.expired",
121
+ MessageCreated = "message.created",
122
+ MessageUpdated = "message.updated",
121
123
  MessageSendSuccess = "message.send_success",
122
- MessageSendFailed = "message.send_failed"
124
+ MessageSendFailed = "message.send_failed",
125
+ MessageBounceDetected = "message.bounce_detected",
126
+ MessageOpened = "message.opened",
127
+ MessageLinkClicked = "message.link_clicked",
128
+ ThreadReplied = "thread.replied",
129
+ MessageIntelligenceOrder = "message.intelligence.order",
130
+ MessageIntelligenceTracking = "message.intelligence.tracking",
131
+ FolderCreated = "folder.created",
132
+ FolderUpdated = "folder.updated",
133
+ FolderDeleted = "folder.deleted",
134
+ ContactUpdated = "contact.updated",
135
+ ContactDeleted = "contact.deleted",
136
+ BookingCreated = "booking.created",
137
+ BookingPending = "booking.pending",
138
+ BookingRescheduled = "booking.rescheduled",
139
+ BookingCancelled = "booking.cancelled",
140
+ BookingReminder = "booking.reminder"
123
141
  }
124
142
  /**
125
143
  * Enum representing the available webhook statuses.
@@ -3,7 +3,7 @@ import { CleanMessagesRequest, CleanMessagesResponse, FindMessageQueryParams, Li
3
3
  import { Overrides } from '../config.js';
4
4
  import { NylasBaseResponse, NylasListResponse, NylasResponse } from '../models/response.js';
5
5
  import { CreateDraftRequest, SendMessageRequest, UpdateDraftRequest } from '../models/drafts.js';
6
- import * as FormData from 'form-data';
6
+ import FormData from 'form-data';
7
7
  import { SmartCompose } from './smartCompose.js';
8
8
  import APIClient from '../apiClient.js';
9
9
  /**
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "7.5.1";
1
+ export declare const SDK_VERSION = "7.6.0";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nylas",
3
- "version": "7.5.1",
3
+ "version": "7.6.0",
4
4
  "description": "A NodeJS wrapper for the Nylas REST API for email, contacts, and calendar.",
5
5
  "main": "lib/cjs/nylas.js",
6
6
  "types": "lib/types/nylas.d.ts",
@@ -40,7 +40,6 @@
40
40
  "license": "MIT",
41
41
  "dependencies": {
42
42
  "change-case": "^4.1.2",
43
- "eslint-plugin-import": "^2.28.1",
44
43
  "form-data": "^4.0.0",
45
44
  "mime-types": "^2.1.35",
46
45
  "node-fetch": "^2.6.12",