nylas 6.0.0.beta.2 → 6.0.0.beta.4
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.
- checksums.yaml +4 -4
- data/lib/nylas/client.rb +15 -1
- data/lib/nylas/handler/http_client.rb +28 -19
- data/lib/nylas/resources/applications.rb +3 -3
- data/lib/nylas/resources/auth.rb +55 -57
- data/lib/nylas/resources/calendars.rb +1 -1
- data/lib/nylas/resources/connectors.rb +2 -2
- data/lib/nylas/resources/contacts.rb +89 -0
- data/lib/nylas/resources/credentials.rb +2 -2
- data/lib/nylas/resources/drafts.rb +11 -0
- data/lib/nylas/resources/events.rb +15 -0
- data/lib/nylas/resources/grants.rb +4 -16
- data/lib/nylas/resources/messages.rb +5 -5
- data/lib/nylas/resources/webhooks.rb +36 -0
- data/lib/nylas/test.rb +14 -0
- data/lib/nylas/utils/file_utils.rb +12 -3
- data/lib/nylas/version.rb +1 -1
- data/lib/nylas.rb +1 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 15031848530cb5f183abdfb133349ec89309ae8bfc723e1a3d3c52941035e5e0
|
4
|
+
data.tar.gz: 6d2924c481e0d971cbfcafd95168e75d5a45f9880535451083dbedd9ef9c18cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55891a3badca093a691e83d5422a4a913de488ea87ac62b60f3d5316879e18532249fe7d7ff3a286a02af82bc42bcad551b2fad96d8c69cf2a69347dcbada7b7
|
7
|
+
data.tar.gz: 91bbb29bed0d52991c53a6619064057dba815e52a16fb616127545aefa78caaa8745e03285fc6f5521f16faed61d0b8ee2dd6bc68f828a6dc65f73ba139d60b6
|
data/lib/nylas/client.rb
CHANGED
@@ -18,7 +18,7 @@ module Nylas
|
|
18
18
|
#
|
19
19
|
# @param api_key [String, nil] API key to use for the client session.
|
20
20
|
# @param api_uri [String] Client session's host.
|
21
|
-
# @param timeout [
|
21
|
+
# @param timeout [Integer, nil] Timeout value to use for the client session.
|
22
22
|
def initialize(api_key:,
|
23
23
|
api_uri: Config::DEFAULT_REGION_URL,
|
24
24
|
timeout: nil)
|
@@ -62,6 +62,13 @@ module Nylas
|
|
62
62
|
Connectors.new(self)
|
63
63
|
end
|
64
64
|
|
65
|
+
# The contact resources for your Nylas application.
|
66
|
+
#
|
67
|
+
# @return [Nylas::Contacts] Contact resources for your Nylas application.
|
68
|
+
def contacts
|
69
|
+
Contacts.new(self)
|
70
|
+
end
|
71
|
+
|
65
72
|
# The draft resources for your Nylas application.
|
66
73
|
#
|
67
74
|
# @return [Nylas::Drafts] Draft resources for your Nylas application.
|
@@ -83,6 +90,13 @@ module Nylas
|
|
83
90
|
Folders.new(self)
|
84
91
|
end
|
85
92
|
|
93
|
+
# The grants resources for your Nylas application.
|
94
|
+
#
|
95
|
+
# @return [Nylas::Grants] Grant resources for your Nylas application
|
96
|
+
def grants
|
97
|
+
Grants.new(self)
|
98
|
+
end
|
99
|
+
|
86
100
|
# The message resources for your Nylas application.
|
87
101
|
#
|
88
102
|
# @return [Nylas::Messages] Message resources for your Nylas application
|
@@ -42,8 +42,8 @@ module Nylas
|
|
42
42
|
|
43
43
|
parse_json_evaluate_error(result.code.to_i, response, path, content_type)
|
44
44
|
end
|
45
|
-
rescue
|
46
|
-
raise Nylas::NylasSdkTimeoutError.new(request
|
45
|
+
rescue RestClient::Exceptions::OpenTimeout, RestClient::Exceptions::ReadTimeout
|
46
|
+
raise Nylas::NylasSdkTimeoutError.new(request[:path], timeout)
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
@@ -92,8 +92,7 @@ module Nylas
|
|
92
92
|
def build_request(
|
93
93
|
method:, path: nil, headers: {}, query: {}, payload: nil, timeout: nil, api_key: nil
|
94
94
|
)
|
95
|
-
url = path
|
96
|
-
url = add_query_params_to_url(url, query)
|
95
|
+
url = build_url(path, query)
|
97
96
|
resulting_headers = default_headers.merge(headers).merge(auth_header(api_key))
|
98
97
|
if !payload.nil? && !payload["multipart"]
|
99
98
|
payload = payload&.to_json
|
@@ -206,33 +205,43 @@ module Nylas
|
|
206
205
|
end
|
207
206
|
|
208
207
|
# Adds query parameters to a URL.
|
209
|
-
#
|
208
|
+
# @param url [String] The base URL.
|
209
|
+
# @param query [Hash] The query parameters to add to the URL.
|
210
210
|
# @return [String] Processed URL, including query params.
|
211
|
-
def
|
211
|
+
def build_url(url, query = nil)
|
212
212
|
unless query.nil? || query.empty?
|
213
213
|
uri = URI.parse(url)
|
214
|
-
|
215
|
-
params = URI.decode_www_form(uri.query || "") + query.to_a
|
216
|
-
uri.query = URI.encode_www_form(params)
|
214
|
+
uri = build_query(uri, query)
|
217
215
|
url = uri.to_s
|
218
216
|
end
|
219
217
|
|
220
218
|
url
|
221
219
|
end
|
222
220
|
|
223
|
-
#
|
224
|
-
#
|
225
|
-
# @
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
221
|
+
# Build the query string for a URI.
|
222
|
+
# @param uri [URI] URL to add the query to.
|
223
|
+
# @param query [Hash] The query params to include in the query.
|
224
|
+
# @return [URI] The URI object with the query parameters included.
|
225
|
+
def build_query(uri, query)
|
226
|
+
query.each do |key, value|
|
227
|
+
case value
|
228
|
+
when Array
|
229
|
+
value.each do |item|
|
230
|
+
qs = "#{URI.encode_www_form_component(key)}=#{URI.encode_www_form_component(item)}"
|
231
|
+
uri.query = [uri.query, qs].compact.join("&")
|
232
|
+
end
|
233
|
+
when Hash
|
234
|
+
value.each do |k, v|
|
235
|
+
qs = "#{URI.encode_www_form_component(key)}=#{URI.encode_www_form_component("#{k}:#{v}")}"
|
236
|
+
uri.query = [uri.query, qs].compact.join("&")
|
237
|
+
end
|
238
|
+
else
|
239
|
+
qs = "#{URI.encode_www_form_component(key)}=#{URI.encode_www_form_component(value)}"
|
240
|
+
uri.query = [uri.query, qs].compact.join("&")
|
231
241
|
end
|
232
|
-
query[:metadata_pair] = pairs
|
233
242
|
end
|
234
243
|
|
235
|
-
|
244
|
+
uri
|
236
245
|
end
|
237
246
|
|
238
247
|
# Set the authorization header for an API query.
|
@@ -17,10 +17,10 @@ module Nylas
|
|
17
17
|
@redirect_uris = RedirectUris.new(sdk_instance)
|
18
18
|
end
|
19
19
|
|
20
|
-
#
|
20
|
+
# Get application details.
|
21
21
|
#
|
22
|
-
# @return [Array(Hash, String)] Application
|
23
|
-
def
|
22
|
+
# @return [Array(Hash, String)] Application details and API Request ID.
|
23
|
+
def get_details
|
24
24
|
get(path: "#{api_uri}/v3/applications")
|
25
25
|
end
|
26
26
|
end
|
data/lib/nylas/resources/auth.rb
CHANGED
@@ -16,15 +16,6 @@ module Nylas
|
|
16
16
|
include ApiOperations::Post
|
17
17
|
include ApiOperations::Get
|
18
18
|
|
19
|
-
# Initializes Auth.
|
20
|
-
def initialize(sdk_instance)
|
21
|
-
super(sdk_instance)
|
22
|
-
|
23
|
-
@grants = Grants.new(sdk_instance)
|
24
|
-
end
|
25
|
-
|
26
|
-
attr_reader :grants
|
27
|
-
|
28
19
|
# Builds the URL for authenticating users to your application with OAuth 2.0.
|
29
20
|
#
|
30
21
|
# @param config [Hash] Configuration for building the URL.
|
@@ -43,6 +34,17 @@ module Nylas
|
|
43
34
|
execute_token_request(request)
|
44
35
|
end
|
45
36
|
|
37
|
+
# Create a Grant via Custom Authentication.
|
38
|
+
#
|
39
|
+
# @param request_body [Hash] The values to create the Grant with.
|
40
|
+
# @return [Array(Hash, String)] Created grant and API Request ID.
|
41
|
+
def custom_authentication(request_body)
|
42
|
+
post(
|
43
|
+
path: "#{api_uri}/v3/connect/custom",
|
44
|
+
request_body: request_body
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
46
48
|
# Refreshes an access token.
|
47
49
|
#
|
48
50
|
# @param request [Hash] Code exchange request.
|
@@ -57,7 +59,7 @@ module Nylas
|
|
57
59
|
# IMPORTANT: You must store the 'secret' returned to use it inside the CodeExchange flow.
|
58
60
|
#
|
59
61
|
# @param config [Hash] Configuration for building the URL.
|
60
|
-
# @return [
|
62
|
+
# @return [Hash] URL for hosted authentication with the secret and the hashed secret.
|
61
63
|
def url_for_oauth2_pkce(config)
|
62
64
|
url = url_auth_builder(config)
|
63
65
|
|
@@ -69,7 +71,7 @@ module Nylas
|
|
69
71
|
url.query = build_query_with_pkce(config, secret_hash)
|
70
72
|
|
71
73
|
# Returns the URL with secret and hashed secret.
|
72
|
-
|
74
|
+
{ secret: secret, secret_hash: secret_hash, url: url.to_s }
|
73
75
|
end
|
74
76
|
|
75
77
|
# Builds the URL for admin consent authentication for Microsoft.
|
@@ -79,9 +81,7 @@ module Nylas
|
|
79
81
|
def url_for_admin_consent(config)
|
80
82
|
config_with_provider = config.merge("provider" => "microsoft")
|
81
83
|
url = url_auth_builder(config_with_provider)
|
82
|
-
|
83
|
-
query_params = build_query_with_admin_consent(config)
|
84
|
-
url.query = URI.encode_www_form(query_params)
|
84
|
+
url.query = build_query_with_admin_consent(config)
|
85
85
|
|
86
86
|
url.to_s
|
87
87
|
end
|
@@ -100,47 +100,58 @@ module Nylas
|
|
100
100
|
true
|
101
101
|
end
|
102
102
|
|
103
|
+
# Detects the provider of an email address.
|
104
|
+
# @param params [Hash] Parameters to detect the provider.
|
105
|
+
# @return [Array(Hash, String)] Detected provider, if found and API Request ID.
|
106
|
+
def detect_provider(params)
|
107
|
+
post(
|
108
|
+
path: "#{api_uri}/v3/providers/detect",
|
109
|
+
query_params: params
|
110
|
+
)
|
111
|
+
end
|
112
|
+
|
103
113
|
private
|
104
114
|
|
105
115
|
# Builds the query with admin consent authentication for Microsoft.
|
106
116
|
#
|
107
117
|
# @param config [Hash] Configuration for the query.
|
108
|
-
# @return [
|
118
|
+
# @return [String] Updated list of parameters, including those specific to admin
|
109
119
|
# consent.
|
110
120
|
def build_query_with_admin_consent(config)
|
111
121
|
params = build_query(config)
|
112
122
|
|
113
123
|
# Appends new params specific for admin consent.
|
114
|
-
params[
|
115
|
-
params[
|
124
|
+
params[:provider] = "microsoft"
|
125
|
+
params[:response_type] = "adminconsent"
|
126
|
+
params[:credential_id] = config[:credential_id] if config[:credential_id]
|
116
127
|
|
117
|
-
params
|
128
|
+
URI.encode_www_form(params).gsub("+", "%20")
|
118
129
|
end
|
119
130
|
|
120
131
|
# Builds the query with PKCE.
|
121
132
|
#
|
122
133
|
# @param config [Hash] Configuration for the query.
|
123
134
|
# @param secret_hash [Hash] Hashed secret.
|
124
|
-
# @return [
|
135
|
+
# @return [String] Updated list of encoded parameters, including those specific
|
125
136
|
# to PKCE.
|
126
137
|
def build_query_with_pkce(config, secret_hash)
|
127
138
|
params = build_query(config)
|
128
139
|
|
129
140
|
# Appends new PKCE specific params.
|
130
|
-
params[
|
131
|
-
params[
|
141
|
+
params[:code_challenge_method] = "s256"
|
142
|
+
params[:code_challenge] = secret_hash
|
132
143
|
|
133
|
-
URI.encode_www_form(params)
|
144
|
+
URI.encode_www_form(params).gsub("+", "%20")
|
134
145
|
end
|
135
146
|
|
136
147
|
# Builds the authentication URL.
|
137
148
|
#
|
138
149
|
# @param config [Hash] Configuration for the query.
|
139
|
-
# @return [
|
150
|
+
# @return [URI] List of components for the authentication URL.
|
140
151
|
def url_auth_builder(config)
|
141
152
|
builder = URI.parse(api_uri)
|
142
153
|
builder.path = "/v3/connect/auth"
|
143
|
-
builder.query = build_query(config)
|
154
|
+
builder.query = URI.encode_www_form(build_query(config)).gsub!("+", "%20")
|
144
155
|
|
145
156
|
builder
|
146
157
|
end
|
@@ -148,55 +159,42 @@ module Nylas
|
|
148
159
|
# Builds the query.
|
149
160
|
#
|
150
161
|
# @param config [Hash] Configuration for the query.
|
151
|
-
# @return [
|
162
|
+
# @return [Hash] List of parameters to encode in the query.
|
152
163
|
def build_query(config)
|
153
164
|
params = {
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
165
|
+
client_id: config[:client_id],
|
166
|
+
redirect_uri: config[:redirect_uri],
|
167
|
+
access_type: config[:access_type] || "online",
|
168
|
+
response_type: "code"
|
158
169
|
}
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
# Set the parameters for the query
|
165
|
-
def set_params(config)
|
166
|
-
params["provider"] = config[:provider] if config[:provider]
|
167
|
-
set_config_params(config)
|
168
|
-
set_more_config(config)
|
169
|
-
end
|
170
|
-
|
171
|
-
# Set login related configurations
|
172
|
-
def set_config_params(config)
|
170
|
+
params[:provider] = config[:provider] if config[:provider]
|
171
|
+
params[:prompt] = config[:prompt] if config[:prompt]
|
172
|
+
params[:metadata] = config[:metadata] if config[:metadata]
|
173
|
+
params[:state] = config[:state] if config[:state]
|
174
|
+
params[:scope] = config[:scope].join(" ") if config[:scope]
|
173
175
|
if config[:login_hint]
|
174
|
-
params[
|
175
|
-
params[
|
176
|
+
params[:login_hint] = config[:login_hint]
|
177
|
+
params[:include_grant_scopes] = config[:include_grant_scopes].to_s if config[:include_grant_scopes]
|
176
178
|
end
|
177
|
-
params["scope"] = config[:scope].join(" ") if config[:scope]
|
178
|
-
end
|
179
179
|
|
180
|
-
|
181
|
-
def set_more_config(config)
|
182
|
-
params["prompt"] = config[:prompt] if config[:prompt]
|
183
|
-
params["metadata"] = config[:metadata] if config[:metadata]
|
184
|
-
params["state"] = config[:state] if config[:state]
|
180
|
+
params
|
185
181
|
end
|
186
182
|
|
187
|
-
#
|
183
|
+
# Hash a plain text secret for use in PKCE.
|
188
184
|
#
|
189
|
-
# @param secret [String]
|
190
|
-
# @return [
|
185
|
+
# @param secret [String] The plain text secret to hash.
|
186
|
+
# @return [String] The hashed secret with base64 encoding (without padding).
|
191
187
|
def hash_pkce_secret(secret)
|
192
|
-
Digest::SHA256.
|
193
|
-
Base64.
|
188
|
+
sha256_hash = Digest::SHA256.hexdigest(secret)
|
189
|
+
Base64.urlsafe_encode64(sha256_hash, padding: false)
|
194
190
|
end
|
195
191
|
|
196
192
|
# Sends the token request to the Nylas API.
|
197
193
|
#
|
198
194
|
# @param request [Hash] Code exchange request.
|
199
195
|
def execute_token_request(request)
|
196
|
+
request[:client_secret] = api_key if request[:client_secret].nil?
|
197
|
+
|
200
198
|
execute(
|
201
199
|
method: :post,
|
202
200
|
path: "#{api_uri}/v3/connect/token",
|
@@ -93,7 +93,7 @@ module Nylas
|
|
93
93
|
# @return [Array(Array(Hash), String)] The free/busy response.
|
94
94
|
def get_free_busy(identifier:, request_body:)
|
95
95
|
post(
|
96
|
-
path: "#{api_uri}/v3/grants/#{identifier}/calendars/
|
96
|
+
path: "#{api_uri}/v3/grants/#{identifier}/calendars/free-busy",
|
97
97
|
request_body: request_body
|
98
98
|
)
|
99
99
|
end
|
@@ -8,7 +8,7 @@ module Nylas
|
|
8
8
|
class Connectors < Resource
|
9
9
|
include ApiOperations::Get
|
10
10
|
include ApiOperations::Post
|
11
|
-
include ApiOperations::
|
11
|
+
include ApiOperations::Patch
|
12
12
|
include ApiOperations::Delete
|
13
13
|
|
14
14
|
# Access the Credentials API
|
@@ -59,7 +59,7 @@ module Nylas
|
|
59
59
|
# @param request_body [Hash] The values to update the connector with
|
60
60
|
# @return [Array(Hash, String)] The updated connector and API Request ID.
|
61
61
|
def update(provider:, request_body:)
|
62
|
-
|
62
|
+
patch(
|
63
63
|
path: "#{api_uri}/v3/connectors/#{provider}",
|
64
64
|
request_body: request_body
|
65
65
|
)
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "resource"
|
4
|
+
require_relative "../handler/api_operations"
|
5
|
+
|
6
|
+
module Nylas
|
7
|
+
# Nylas Contact API
|
8
|
+
class Contacts < Resource
|
9
|
+
include ApiOperations::Get
|
10
|
+
include ApiOperations::Post
|
11
|
+
include ApiOperations::Put
|
12
|
+
include ApiOperations::Delete
|
13
|
+
|
14
|
+
# Return all contacts.
|
15
|
+
#
|
16
|
+
# @param identifier [String] Grant ID or email account to query.
|
17
|
+
# @param query_params [Hash, nil] Query params to pass to the request.
|
18
|
+
# @return [Array(Array(Hash), String)] The list of contacts and API Request ID.
|
19
|
+
def list(identifier:, query_params: nil)
|
20
|
+
get(
|
21
|
+
path: "#{api_uri}/v3/grants/#{identifier}/contacts",
|
22
|
+
query_params: query_params
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Return a contact.
|
27
|
+
#
|
28
|
+
# @param identifier [String] Grant ID or email account to query.
|
29
|
+
# @param contact_id [String] The id of the contact to return.
|
30
|
+
# @param query_params [Hash, nil] Query params to pass to the request.
|
31
|
+
# @return [Array(Hash, String)] The contact and API request ID.
|
32
|
+
def find(identifier:, contact_id:, query_params: nil)
|
33
|
+
get(
|
34
|
+
path: "#{api_uri}/v3/grants/#{identifier}/contacts/#{contact_id}",
|
35
|
+
query_params: query_params
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Create a contact.
|
40
|
+
#
|
41
|
+
# @param identifier [String] Grant ID or email account in which to create the object.
|
42
|
+
# @param request_body [Hash] The values to create the contact with.
|
43
|
+
# @return [Array(Hash, String)] The created contact and API Request ID.
|
44
|
+
def create(identifier:, request_body:)
|
45
|
+
post(
|
46
|
+
path: "#{api_uri}/v3/grants/#{identifier}/contacts",
|
47
|
+
request_body: request_body
|
48
|
+
)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Update a contact.
|
52
|
+
#
|
53
|
+
# @param identifier [String] Grant ID or email account in which to update an object.
|
54
|
+
# @param contact_id [String] The id of the contact to update.
|
55
|
+
# @param request_body [Hash] The values to update the contact with
|
56
|
+
# @return [Array(Hash, String)] The updated contact and API Request ID.
|
57
|
+
def update(identifier:, contact_id:, request_body:)
|
58
|
+
put(
|
59
|
+
path: "#{api_uri}/v3/grants/#{identifier}/contacts/#{contact_id}",
|
60
|
+
request_body: request_body
|
61
|
+
)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Delete a contact.
|
65
|
+
#
|
66
|
+
# @param identifier [String] Grant ID or email account from which to delete an object.
|
67
|
+
# @param contact_id [String] The id of the contact to delete.
|
68
|
+
# @return [Array(TrueClass, String)] True and the API Request ID for the delete operation.
|
69
|
+
def destroy(identifier:, contact_id:)
|
70
|
+
_, request_id = delete(
|
71
|
+
path: "#{api_uri}/v3/grants/#{identifier}/contacts/#{contact_id}"
|
72
|
+
)
|
73
|
+
|
74
|
+
[true, request_id]
|
75
|
+
end
|
76
|
+
|
77
|
+
# Return all contact groups.
|
78
|
+
#
|
79
|
+
# @param identifier [String] Grant ID or email account to query.
|
80
|
+
# @param query_params [Hash, nil] Query params to pass to the request.
|
81
|
+
# @return [Array(Array(Hash), String)] The list of contact groups and API Request ID.
|
82
|
+
def list_groups(identifier:, query_params: nil)
|
83
|
+
get(
|
84
|
+
path: "#{api_uri}/v3/grants/#{identifier}/contacts/groups",
|
85
|
+
query_params: query_params
|
86
|
+
)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -8,7 +8,7 @@ module Nylas
|
|
8
8
|
class Credentials < Resource
|
9
9
|
include ApiOperations::Get
|
10
10
|
include ApiOperations::Post
|
11
|
-
include ApiOperations::
|
11
|
+
include ApiOperations::Patch
|
12
12
|
include ApiOperations::Delete
|
13
13
|
|
14
14
|
# Return all credentials.
|
@@ -53,7 +53,7 @@ module Nylas
|
|
53
53
|
# @param request_body [Hash] The values to update the connector with
|
54
54
|
# @return [Array(Hash, String)] The updated connector and API Request ID.
|
55
55
|
def update(provider:, credential_id:, request_body:)
|
56
|
-
|
56
|
+
patch(
|
57
57
|
path: "#{api_uri}/v3/connectors/#{provider}/creds/#{credential_id}",
|
58
58
|
request_body: request_body
|
59
59
|
)
|
@@ -87,5 +87,16 @@ module Nylas
|
|
87
87
|
|
88
88
|
[true, request_id]
|
89
89
|
end
|
90
|
+
|
91
|
+
# Send an draft.
|
92
|
+
#
|
93
|
+
# @param identifier [String] Grant ID or email account from which to send the draft.
|
94
|
+
# @param draft_id [String] The id of the draft to send.
|
95
|
+
# @return [Array(Hash, String)] The sent message draft and the API Request ID.
|
96
|
+
def send(identifier:, draft_id:)
|
97
|
+
post(
|
98
|
+
path: "#{api_uri}/v3/grants/#{identifier}/drafts/#{draft_id}"
|
99
|
+
)
|
100
|
+
end
|
90
101
|
end
|
91
102
|
end
|
@@ -79,5 +79,20 @@ module Nylas
|
|
79
79
|
|
80
80
|
[true, request_id]
|
81
81
|
end
|
82
|
+
|
83
|
+
# Send RSVP. Allows users to respond to events they have been added to as an attendee.
|
84
|
+
#
|
85
|
+
# @param identifier [String] Grant ID or email account from which to send RSVP with.
|
86
|
+
# @param event_id [String] The id of the event to respond to.
|
87
|
+
# @param request_body [Hash] The status values to send the RSVP with.
|
88
|
+
# @param query_params [Hash] The query parameters to include in the request
|
89
|
+
# @return [(Hash, String)] Response object with the API Request ID.
|
90
|
+
def send_rsvp(identifier:, event_id:, request_body:, query_params:)
|
91
|
+
post(
|
92
|
+
path: "#{api_uri}/v3/grants/#{identifier}/events/#{event_id}/send-rsvp",
|
93
|
+
query_params: query_params,
|
94
|
+
request_body: request_body
|
95
|
+
)
|
96
|
+
end
|
82
97
|
end
|
83
98
|
end
|
@@ -7,7 +7,6 @@ module Nylas
|
|
7
7
|
# Grants
|
8
8
|
class Grants < Resource
|
9
9
|
include ApiOperations::Get
|
10
|
-
include ApiOperations::Post
|
11
10
|
include ApiOperations::Put
|
12
11
|
include ApiOperations::Delete
|
13
12
|
|
@@ -17,7 +16,7 @@ module Nylas
|
|
17
16
|
# @return [Array(Array(Hash), String)] The list of grants and API Request ID.
|
18
17
|
def list(query_params: nil)
|
19
18
|
get(
|
20
|
-
path: "#{api_uri}/v3/
|
19
|
+
path: "#{api_uri}/v3/grants",
|
21
20
|
query_params: query_params
|
22
21
|
)
|
23
22
|
end
|
@@ -28,18 +27,7 @@ module Nylas
|
|
28
27
|
# @return [Array(Hash, String)] The grant and API request ID.
|
29
28
|
def find(grant_id:)
|
30
29
|
get(
|
31
|
-
path: "#{api_uri}/v3/
|
32
|
-
)
|
33
|
-
end
|
34
|
-
|
35
|
-
# Create a Grant via Custom Authentication.
|
36
|
-
#
|
37
|
-
# @param request_body [Hash] The values to create the Grant with.
|
38
|
-
# @return [Array(Hash, String)] Created grant and API Request ID.
|
39
|
-
def create(request_body)
|
40
|
-
post(
|
41
|
-
path: "#{api_uri}/v3/#{resource_name}/custom",
|
42
|
-
request_body: request_body
|
30
|
+
path: "#{api_uri}/v3/grants/#{grant_id}"
|
43
31
|
)
|
44
32
|
end
|
45
33
|
|
@@ -50,7 +38,7 @@ module Nylas
|
|
50
38
|
# @return [Array(Hash, String)] The updated grant and API Request ID.
|
51
39
|
def update(grant_id:, request_body:)
|
52
40
|
put(
|
53
|
-
path: "#{api_uri}/v3/
|
41
|
+
path: "#{api_uri}/v3/grants/#{grant_id}",
|
54
42
|
request_body: request_body
|
55
43
|
)
|
56
44
|
end
|
@@ -61,7 +49,7 @@ module Nylas
|
|
61
49
|
# @return [Array(TrueClass, String)] True and the API Request ID for the delete operation.
|
62
50
|
def destroy(grant_id:)
|
63
51
|
_, request_id = delete(
|
64
|
-
path: "#{api_uri}/v3/
|
52
|
+
path: "#{api_uri}/v3/grants/#{grant_id}"
|
65
53
|
)
|
66
54
|
|
67
55
|
[true, request_id]
|
@@ -94,21 +94,21 @@ module Nylas
|
|
94
94
|
# Retrieve your scheduled messages.
|
95
95
|
#
|
96
96
|
# @param identifier [String] Grant ID or email account from which to find the scheduled message from.
|
97
|
-
# @param schedule_id [String] The id of the scheduled message to stop.
|
98
97
|
# @return [Array(Hash, String)] The list of scheduled messages and the API Request ID.
|
99
|
-
def list_scheduled_messages(identifier
|
98
|
+
def list_scheduled_messages(identifier:)
|
100
99
|
get(
|
101
|
-
path: "#{api_uri}/v3/grants/#{identifier}/messages/schedules
|
100
|
+
path: "#{api_uri}/v3/grants/#{identifier}/messages/schedules"
|
102
101
|
)
|
103
102
|
end
|
104
103
|
|
105
104
|
# Retrieve your scheduled messages.
|
106
105
|
#
|
107
106
|
# @param identifier [String] Grant ID or email account from which to list the scheduled messages from.
|
107
|
+
# @param schedule_id [String] The id of the scheduled message to stop.
|
108
108
|
# @return [Array(Hash, String)] The scheduled message and the API Request ID.
|
109
|
-
def find_scheduled_messages(identifier:)
|
109
|
+
def find_scheduled_messages(identifier:, schedule_id:)
|
110
110
|
get(
|
111
|
-
path: "#{api_uri}/v3/grants/#{identifier}/messages/schedules"
|
111
|
+
path: "#{api_uri}/v3/grants/#{identifier}/messages/schedules/#{schedule_id}"
|
112
112
|
)
|
113
113
|
end
|
114
114
|
|
@@ -19,6 +19,9 @@ module Nylas
|
|
19
19
|
GRANT_EXPIRED = "grant.expired"
|
20
20
|
MESSAGE_SEND_SUCCESS = "message.send_success"
|
21
21
|
MESSAGE_SEND_FAILED = "message.send_failed"
|
22
|
+
MESSAGE_OPENED = "message.opened"
|
23
|
+
MESSAGE_LINK_CLICKED = "message.link_clicked"
|
24
|
+
THREAD_REPLIED = "thread.replied"
|
22
25
|
end
|
23
26
|
|
24
27
|
# Nylas Webhooks API
|
@@ -81,5 +84,38 @@ module Nylas
|
|
81
84
|
|
82
85
|
[true, request_id]
|
83
86
|
end
|
87
|
+
|
88
|
+
# Update the webhook secret value for a destination.
|
89
|
+
# @param webhook_id [String] The ID of the webhook destination to update.
|
90
|
+
# @return [Array(Hash, String)] The updated webhook destination and API Request ID.
|
91
|
+
def rotate_secret(webhook_id:)
|
92
|
+
put(
|
93
|
+
path: "#{api_uri}/v3/webhooks/#{webhook_id}/rotate-secret",
|
94
|
+
request_body: {}
|
95
|
+
)
|
96
|
+
end
|
97
|
+
|
98
|
+
# Get the current list of IP addresses that Nylas sends webhooks from
|
99
|
+
# @return [Array(Hash, String)] List of IP addresses that Nylas sends webhooks from and API Request ID.
|
100
|
+
def ip_addresses
|
101
|
+
get(
|
102
|
+
path: "#{api_uri}/v3/webhooks/ip-addresses"
|
103
|
+
)
|
104
|
+
end
|
105
|
+
|
106
|
+
# Extract the challenge parameter from a URL
|
107
|
+
# @param url [String] The URL sent by Nylas containing the challenge parameter
|
108
|
+
# @return [String] The challenge parameter
|
109
|
+
def self.extract_challenge_parameter(url)
|
110
|
+
url_object = URI.parse(url)
|
111
|
+
query = CGI.parse(url_object.query || "")
|
112
|
+
|
113
|
+
challenge_parameter = query["challenge"]
|
114
|
+
if challenge_parameter.nil? || challenge_parameter.empty? || challenge_parameter.first.nil?
|
115
|
+
raise "Invalid URL or no challenge parameter found."
|
116
|
+
end
|
117
|
+
|
118
|
+
challenge_parameter.first
|
119
|
+
end
|
84
120
|
end
|
85
121
|
end
|
data/lib/nylas/test.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "nylas"
|
4
|
+
|
5
|
+
nylas = Nylas::Client.new(api_key: "abc123")
|
6
|
+
config = {
|
7
|
+
client_id: ENV["V3_CLIENT"],
|
8
|
+
provider: "google",
|
9
|
+
redirect_uri: "http://localhost:4567/oauth/exchange",
|
10
|
+
login_hint: "atejada@gmail.com"
|
11
|
+
}
|
12
|
+
|
13
|
+
auth_data = nylas.auth.url_for_oauth2_pkce(config)
|
14
|
+
puts auth_data
|
@@ -11,9 +11,14 @@ module Nylas
|
|
11
11
|
# @!visibility private
|
12
12
|
def self.build_form_request(request_body)
|
13
13
|
attachments = request_body.delete(:attachments) || request_body.delete("attachments") || []
|
14
|
-
|
14
|
+
|
15
|
+
# RestClient will not send a multipart request if there are no attachments
|
16
|
+
# so we need to return the message payload to be used as a json payload
|
17
|
+
return [request_body, []] if attachments.empty?
|
15
18
|
|
16
19
|
# Prepare the data to return
|
20
|
+
message_payload = request_body.to_json
|
21
|
+
|
17
22
|
form_data = {}
|
18
23
|
opened_files = []
|
19
24
|
|
@@ -33,8 +38,12 @@ module Nylas
|
|
33
38
|
# @return [Hash] The request that will attach the file to the message/draft
|
34
39
|
def self.attach_file_request_builder(file_path)
|
35
40
|
filename = File.basename(file_path)
|
36
|
-
content_type = MIME::Types.type_for(file_path)
|
37
|
-
content_type =
|
41
|
+
content_type = MIME::Types.type_for(file_path)
|
42
|
+
content_type = if !content_type.nil? && !content_type.empty?
|
43
|
+
content_type.first.to_s
|
44
|
+
else
|
45
|
+
"application/octet-stream"
|
46
|
+
end
|
38
47
|
size = File.size(file_path)
|
39
48
|
content = File.new(file_path, "rb")
|
40
49
|
|
data/lib/nylas/version.rb
CHANGED
data/lib/nylas.rb
CHANGED
@@ -32,6 +32,7 @@ require_relative "nylas/resources/attachments"
|
|
32
32
|
require_relative "nylas/resources/auth"
|
33
33
|
require_relative "nylas/resources/calendars"
|
34
34
|
require_relative "nylas/resources/connectors"
|
35
|
+
require_relative "nylas/resources/contacts"
|
35
36
|
require_relative "nylas/resources/credentials"
|
36
37
|
require_relative "nylas/resources/drafts"
|
37
38
|
require_relative "nylas/resources/events"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nylas
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.0.beta.
|
4
|
+
version: 6.0.0.beta.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nylas, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mime-types
|
@@ -180,14 +180,14 @@ dependencies:
|
|
180
180
|
requirements:
|
181
181
|
- - "~>"
|
182
182
|
- !ruby/object:Gem::Version
|
183
|
-
version: 0.
|
183
|
+
version: 0.22.0
|
184
184
|
type: :development
|
185
185
|
prerelease: false
|
186
186
|
version_requirements: !ruby/object:Gem::Requirement
|
187
187
|
requirements:
|
188
188
|
- - "~>"
|
189
189
|
- !ruby/object:Gem::Version
|
190
|
-
version: 0.
|
190
|
+
version: 0.22.0
|
191
191
|
- !ruby/object:Gem::Dependency
|
192
192
|
name: simplecov-cobertura
|
193
193
|
requirement: !ruby/object:Gem::Requirement
|
@@ -239,6 +239,7 @@ files:
|
|
239
239
|
- lib/nylas/resources/auth.rb
|
240
240
|
- lib/nylas/resources/calendars.rb
|
241
241
|
- lib/nylas/resources/connectors.rb
|
242
|
+
- lib/nylas/resources/contacts.rb
|
242
243
|
- lib/nylas/resources/credentials.rb
|
243
244
|
- lib/nylas/resources/drafts.rb
|
244
245
|
- lib/nylas/resources/events.rb
|
@@ -250,6 +251,7 @@ files:
|
|
250
251
|
- lib/nylas/resources/smart_compose.rb
|
251
252
|
- lib/nylas/resources/threads.rb
|
252
253
|
- lib/nylas/resources/webhooks.rb
|
254
|
+
- lib/nylas/test.rb
|
253
255
|
- lib/nylas/utils/file_utils.rb
|
254
256
|
- lib/nylas/version.rb
|
255
257
|
homepage:
|