nylas 6.0.0.beta.1 → 6.0.0.beta.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/nylas/client.rb +68 -9
- data/lib/nylas/errors.rb +33 -11
- data/lib/nylas/handler/api_operations.rb +7 -5
- data/lib/nylas/handler/http_client.rb +98 -34
- data/lib/nylas/resources/applications.rb +1 -1
- data/lib/nylas/resources/attachments.rb +65 -0
- data/lib/nylas/resources/auth.rb +15 -14
- data/lib/nylas/resources/calendars.rb +83 -13
- data/lib/nylas/resources/connectors.rb +80 -0
- data/lib/nylas/resources/contacts.rb +89 -0
- data/lib/nylas/resources/credentials.rb +75 -0
- data/lib/nylas/resources/drafts.rb +102 -0
- data/lib/nylas/resources/events.rb +89 -11
- data/lib/nylas/resources/folders.rb +73 -0
- data/lib/nylas/resources/grants.rb +47 -9
- data/lib/nylas/resources/messages.rb +126 -0
- data/lib/nylas/resources/redirect_uris.rb +59 -11
- data/lib/nylas/resources/resource.rb +2 -2
- data/lib/nylas/resources/smart_compose.rb +36 -0
- data/lib/nylas/resources/threads.rb +62 -0
- data/lib/nylas/resources/webhooks.rb +62 -11
- data/lib/nylas/utils/file_utils.rb +54 -0
- data/lib/nylas/version.rb +1 -1
- data/lib/nylas.rb +12 -1
- metadata +32 -4
- data/lib/nylas/handler/admin_api_operations.rb +0 -95
- data/lib/nylas/handler/grants_api_operations.rb +0 -99
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5153fbe30a05d237c4e17da6ff51005ded6667ae710a50e349535079bfd5db91
|
4
|
+
data.tar.gz: 21e167b02e08cbf456ca45ffd94372fe6db8bf3fc7a1b5637ecf8bd5cde361bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 232c65750e5e6027cf4414519be4e91a497c48b394d779ac2500af8bf82f3bf5317ecb1ec94261f80eb0cd46b373e88727c2aed65b036950f9d239a4276d313c
|
7
|
+
data.tar.gz: ccb50fddee574741f2baf36d4f44b46e246b219e0cb9d764d1ee2f1307cf8bf1a45aaec3a3bbe363f471b98ecc646fd60b79643ab730262308e9914a199b4719
|
data/lib/nylas/client.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "resources/calendars"
|
4
|
+
require_relative "resources/connectors"
|
5
|
+
require_relative "resources/messages"
|
4
6
|
require_relative "resources/events"
|
5
7
|
require_relative "resources/auth"
|
6
8
|
require_relative "resources/webhooks"
|
7
9
|
require_relative "resources/applications"
|
10
|
+
require_relative "resources/folders"
|
8
11
|
|
9
12
|
module Nylas
|
10
13
|
# Methods to retrieve data from the Nylas API as Ruby objects.
|
@@ -13,15 +16,15 @@ module Nylas
|
|
13
16
|
|
14
17
|
# Initializes a client session.
|
15
18
|
#
|
16
|
-
# @param api_key [
|
17
|
-
# @param api_uri [
|
18
|
-
# @param timeout [
|
19
|
-
def initialize(api_key
|
19
|
+
# @param api_key [String, nil] API key to use for the client session.
|
20
|
+
# @param api_uri [String] Client session's host.
|
21
|
+
# @param timeout [String, nil] Timeout value to use for the client session.
|
22
|
+
def initialize(api_key:,
|
20
23
|
api_uri: Config::DEFAULT_REGION_URL,
|
21
24
|
timeout: nil)
|
22
25
|
@api_key = api_key
|
23
26
|
@api_uri = api_uri
|
24
|
-
@timeout = timeout
|
27
|
+
@timeout = timeout || 30
|
25
28
|
end
|
26
29
|
|
27
30
|
# The application resources for your Nylas application.
|
@@ -31,6 +34,20 @@ module Nylas
|
|
31
34
|
Applications.new(self)
|
32
35
|
end
|
33
36
|
|
37
|
+
# The attachments resources for your Nylas application.
|
38
|
+
#
|
39
|
+
# @return [Nylas::Attachments] Attachment resources for your Nylas application.
|
40
|
+
def attachments
|
41
|
+
Attachments.new(self)
|
42
|
+
end
|
43
|
+
|
44
|
+
# The auth resources for your Nylas application.
|
45
|
+
#
|
46
|
+
# @return [Nylas::Auth] Auth resources for your Nylas application.
|
47
|
+
def auth
|
48
|
+
Auth.new(self)
|
49
|
+
end
|
50
|
+
|
34
51
|
# The calendar resources for your Nylas application.
|
35
52
|
#
|
36
53
|
# @return [Nylas::Calendars] Calendar resources for your Nylas application.
|
@@ -38,6 +55,27 @@ module Nylas
|
|
38
55
|
Calendars.new(self)
|
39
56
|
end
|
40
57
|
|
58
|
+
# The connector resources for your Nylas application.
|
59
|
+
#
|
60
|
+
# @return [Nylas::Connectors] Connector resources for your Nylas application.
|
61
|
+
def connectors
|
62
|
+
Connectors.new(self)
|
63
|
+
end
|
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
|
+
|
72
|
+
# The draft resources for your Nylas application.
|
73
|
+
#
|
74
|
+
# @return [Nylas::Drafts] Draft resources for your Nylas application.
|
75
|
+
def drafts
|
76
|
+
Drafts.new(self)
|
77
|
+
end
|
78
|
+
|
41
79
|
# The event resources for your Nylas application.
|
42
80
|
#
|
43
81
|
# @return [Nylas::Events] Event resources for your Nylas application
|
@@ -45,11 +83,32 @@ module Nylas
|
|
45
83
|
Events.new(self)
|
46
84
|
end
|
47
85
|
|
48
|
-
# The
|
86
|
+
# The folder resources for your Nylas application.
|
49
87
|
#
|
50
|
-
# @return [Nylas::
|
51
|
-
def
|
52
|
-
|
88
|
+
# @return [Nylas::Folder] Folder resources for your Nylas application
|
89
|
+
def folders
|
90
|
+
Folders.new(self)
|
91
|
+
end
|
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
|
+
|
100
|
+
# The message resources for your Nylas application.
|
101
|
+
#
|
102
|
+
# @return [Nylas::Messages] Message resources for your Nylas application
|
103
|
+
def messages
|
104
|
+
Messages.new(self)
|
105
|
+
end
|
106
|
+
|
107
|
+
# The thread resources for your Nylas application.
|
108
|
+
#
|
109
|
+
# @return [Nylas::Threads] Thread resources for your Nylas application.
|
110
|
+
def threads
|
111
|
+
Threads.new(self)
|
53
112
|
end
|
54
113
|
|
55
114
|
# The webhook resources for your Nylas application.
|
data/lib/nylas/errors.rb
CHANGED
@@ -3,17 +3,24 @@
|
|
3
3
|
module Nylas
|
4
4
|
Error = Class.new(::StandardError)
|
5
5
|
|
6
|
-
class
|
6
|
+
# Base error class for API-related errors.
|
7
|
+
class AbstractNylasApiError < Error; end
|
7
8
|
|
8
|
-
# Base class
|
9
|
-
class
|
9
|
+
# Base error class for SDK-related errors.
|
10
|
+
class AbstractNylasSdkError < Error; end
|
11
|
+
|
12
|
+
# Error class representing a failed parse of a JSON response from the Nylas API.
|
13
|
+
class JsonParseError < AbstractNylasSdkError; end
|
14
|
+
|
15
|
+
# Error class representing a failed response from the Nylas API.
|
16
|
+
class NylasApiError < AbstractNylasApiError
|
10
17
|
attr_accessor :type, :request_id, :provider_error, :status_code
|
11
18
|
|
12
19
|
# Initializes an error and assigns the given attributes to it.
|
13
20
|
#
|
14
21
|
# @param type [Hash] Error type.
|
15
22
|
# @param message [String] Error message.
|
16
|
-
# @param status_code [
|
23
|
+
# @param status_code [Integer] Error status code.
|
17
24
|
# @param provider_error [String, nil] Provider error.
|
18
25
|
# @param request_id [Hash, nil] The ID of the request.
|
19
26
|
def initialize(type, message, status_code, provider_error = nil, request_id = nil)
|
@@ -27,7 +34,7 @@ module Nylas
|
|
27
34
|
# Parses the error response.
|
28
35
|
#
|
29
36
|
# @param response [Hash] Response from the Nylas API.
|
30
|
-
# @param status_code [
|
37
|
+
# @param status_code [Integer] Error status code.
|
31
38
|
def self.parse_error_response(response, status_code)
|
32
39
|
new(
|
33
40
|
response["type"],
|
@@ -38,17 +45,17 @@ module Nylas
|
|
38
45
|
end
|
39
46
|
end
|
40
47
|
|
41
|
-
#
|
42
|
-
class NylasOAuthError <
|
48
|
+
# Error class representing a failed response from the Nylas OAuth integration.
|
49
|
+
class NylasOAuthError < AbstractNylasApiError
|
43
50
|
attr_accessor :error, :error_description, :error_uri, :error_code, :status_code
|
44
51
|
|
45
52
|
# Initializes an error and assigns the given attributes to it.
|
46
53
|
#
|
47
|
-
# @param error [
|
54
|
+
# @param error [String] Error type.
|
48
55
|
# @param error_description [String] Description of the error.
|
49
|
-
# @param error_uri [
|
50
|
-
# @param error_code [
|
51
|
-
# @param status_code [
|
56
|
+
# @param error_uri [String] Error URI.
|
57
|
+
# @param error_code [String] Error code.
|
58
|
+
# @param status_code [String] Error status code.
|
52
59
|
def initialize(error, error_description, error_uri, error_code, status_code)
|
53
60
|
super(error_description)
|
54
61
|
self.error = error
|
@@ -59,5 +66,20 @@ module Nylas
|
|
59
66
|
end
|
60
67
|
end
|
61
68
|
|
69
|
+
# Error class representing a timeout from the Nylas SDK.
|
70
|
+
class NylasSdkTimeoutError < AbstractNylasSdkError
|
71
|
+
attr_accessor :url, :timeout
|
72
|
+
|
73
|
+
# Initializes an error and assigns the given attributes to it.
|
74
|
+
# @param url [String] URL that timed out.
|
75
|
+
# @param timeout [Integer] Timeout in seconds.
|
76
|
+
# @return [NylasSdkTimeoutError] The error object.
|
77
|
+
def initialize(url, timeout)
|
78
|
+
super("Nylas SDK timed out before receiving a response from the server.")
|
79
|
+
self.url = url
|
80
|
+
self.timeout = timeout
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
62
84
|
HTTP_SUCCESS_CODES = [200, 201, 202, 302].freeze
|
63
85
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "http_client"
|
4
|
+
|
3
5
|
module Nylas
|
4
6
|
# Allows resources to perform API operations on the Nylas API endpoints without exposing the HTTP
|
5
7
|
# client to the end user.
|
@@ -13,7 +15,7 @@ module Nylas
|
|
13
15
|
#
|
14
16
|
# @param path [String] Destination path for the call.
|
15
17
|
# @param query_params [Hash, {}] Query params to pass to the call.
|
16
|
-
# @return
|
18
|
+
# @return Nylas data object and API Request ID.
|
17
19
|
def get(path:, query_params: {})
|
18
20
|
response = execute(
|
19
21
|
method: :get,
|
@@ -39,7 +41,7 @@ module Nylas
|
|
39
41
|
# @param query_params [Hash, {}] Query params to pass to the call.
|
40
42
|
# @param request_body [String, Hash, nil] Request body to pass to the call.
|
41
43
|
# @param headers [Hash, {}] Additional HTTP headers to include in the payload.
|
42
|
-
# @return
|
44
|
+
# @return Nylas data object and API Request ID.
|
43
45
|
def post(path:, query_params: {}, request_body: nil, headers: {})
|
44
46
|
response = execute(
|
45
47
|
method: :post,
|
@@ -66,7 +68,7 @@ module Nylas
|
|
66
68
|
# @param query_params [Hash, {}] Query params to pass to the call.
|
67
69
|
# @param request_body [String, Hash, nil] Request body to pass to the call.
|
68
70
|
# @param headers [Hash, {}] Additional HTTP headers to include in the payload.
|
69
|
-
# @return
|
71
|
+
# @return Nylas data object and API Request ID.
|
70
72
|
def put(path:, query_params: {}, request_body: nil, headers: {})
|
71
73
|
response = execute(
|
72
74
|
method: :put,
|
@@ -93,7 +95,7 @@ module Nylas
|
|
93
95
|
# @param query_params [Hash, {}] Query params to pass to the call.
|
94
96
|
# @param request_body [String, Hash, nil] Request body to pass to the call.
|
95
97
|
# @param headers [Hash, {}] Additional HTTP headers to include in the payload.
|
96
|
-
# @return
|
98
|
+
# @return Nylas data object and API Request ID.
|
97
99
|
def patch(path:, query_params: {}, request_body: nil, headers: {})
|
98
100
|
response = execute(
|
99
101
|
method: :patch,
|
@@ -119,7 +121,7 @@ module Nylas
|
|
119
121
|
# @param path [String] Destination path for the call.
|
120
122
|
# @param query_params [Hash, {}] Query params to pass to the call.
|
121
123
|
# @param headers [Hash, {}] Additional HTTP headers to include in the payload.
|
122
|
-
# @return
|
124
|
+
# @return Nylas data object and API Request ID.
|
123
125
|
def delete(path:, query_params: {}, headers: {})
|
124
126
|
response = execute(
|
125
127
|
method: :delete,
|
@@ -5,6 +5,7 @@ require "rest-client"
|
|
5
5
|
require_relative "../errors"
|
6
6
|
require_relative "../version"
|
7
7
|
|
8
|
+
# Module for working with HTTP Client
|
8
9
|
module Nylas
|
9
10
|
require "yajl"
|
10
11
|
require "base64"
|
@@ -22,32 +23,57 @@ module Nylas
|
|
22
23
|
# @param method [Symbol] HTTP method for the API call. Either :get, :post, :delete, or :patch.
|
23
24
|
# @param path [String, nil] Relative path from the API Base. This is the preferred way to execute
|
24
25
|
# arbitrary or-not-yet-SDK-ified API commands.
|
26
|
+
# @param timeout [Integer, nil] Timeout value to send with the request.
|
25
27
|
# @param headers [Hash, {}] Additional HTTP headers to include in the payload.
|
26
28
|
# @param query [Hash, {}] Hash of names and values to include in the query section of the URI
|
27
29
|
# fragment.
|
28
|
-
# @param payload [
|
30
|
+
# @param payload [Hash, nil] Body to send with the request.
|
29
31
|
# @param api_key [Hash, nil] API key to send with the request.
|
30
|
-
# @param timeout [Hash, nil] Timeout value to send with the request.
|
31
32
|
# @return [Object] Parsed JSON response from the API.
|
32
|
-
def execute(method:, path
|
33
|
+
def execute(method:, path:, timeout:, headers: {}, query: {}, payload: nil, api_key: nil)
|
33
34
|
request = build_request(method: method, path: path, headers: headers,
|
34
35
|
query: query, payload: payload, api_key: api_key, timeout: timeout)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
begin
|
37
|
+
rest_client_execute(**request) do |response, _request, result|
|
38
|
+
content_type = nil
|
39
|
+
if response.headers && response.headers[:content_type]
|
40
|
+
content_type = response.headers[:content_type].downcase
|
41
|
+
end
|
42
|
+
|
43
|
+
parse_json_evaluate_error(result.code.to_i, response, path, content_type)
|
40
44
|
end
|
45
|
+
rescue Timeout::Error => _e
|
46
|
+
raise Nylas::NylasSdkTimeoutError.new(request.path, timeout)
|
47
|
+
end
|
48
|
+
end
|
41
49
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
50
|
+
# Sends a request to the Nylas API, specifically for downloading data.
|
51
|
+
# This method supports streaming the response by passing a block, which will be executed
|
52
|
+
# with each chunk of the response body as it is read. If no block is provided, the entire
|
53
|
+
# response body is returned.
|
54
|
+
#
|
55
|
+
# @param path [String] Relative path from the API Base. This is the preferred way to execute
|
56
|
+
# arbitrary or-not-yet-SDK-ified API commands.
|
57
|
+
# @param timeout [Integer] Timeout value to send with the request.
|
58
|
+
# @param headers [Hash, {}] Additional HTTP headers to include in the payload.
|
59
|
+
# @param query [Hash, {}] Hash of names and values to include in the query section of the URI
|
60
|
+
# fragment.
|
61
|
+
# @param api_key [Hash, nil] API key to send with the request.
|
62
|
+
# @yieldparam chunk [String] A chunk of the response body.
|
63
|
+
# @return [nil, String] Returns nil when a block is given (streaming mode).
|
64
|
+
# When no block is provided, the return is the entire raw response body.
|
65
|
+
def download_request(path:, timeout:, headers: {}, query: {}, api_key: nil, &block)
|
66
|
+
request, uri, http = setup_http(path, timeout, headers, query, api_key)
|
67
|
+
|
68
|
+
begin
|
69
|
+
http.start do |setup_http|
|
70
|
+
get_request = Net::HTTP::Get.new(uri)
|
71
|
+
request[:headers].each { |key, value| get_request[key] = value }
|
72
|
+
|
73
|
+
handle_response(setup_http, get_request, path, &block)
|
47
74
|
end
|
48
|
-
|
49
|
-
|
50
|
-
return response
|
75
|
+
rescue Net::OpenTimeout, Net::ReadTimeout
|
76
|
+
raise Nylas::NylasSdkTimeoutError.new(request[:url], timeout)
|
51
77
|
end
|
52
78
|
end
|
53
79
|
|
@@ -58,8 +84,8 @@ module Nylas
|
|
58
84
|
# @param headers [Hash, {}] Additional HTTP headers to include in the payload.
|
59
85
|
# @param query [Hash, {}] Hash of names and values to include in the query section of the URI
|
60
86
|
# fragment.
|
61
|
-
# @param payload [
|
62
|
-
# @param timeout [
|
87
|
+
# @param payload [Hash, nil] Body to send with the request.
|
88
|
+
# @param timeout [Integer, nil] Timeout value to send with the request.
|
63
89
|
# @param api_key [Hash, nil] API key to send with the request.
|
64
90
|
# @return [Object] The request information after processing. This includes an updated payload
|
65
91
|
# and headers.
|
@@ -69,17 +95,21 @@ module Nylas
|
|
69
95
|
url = path
|
70
96
|
url = add_query_params_to_url(url, query)
|
71
97
|
resulting_headers = default_headers.merge(headers).merge(auth_header(api_key))
|
72
|
-
|
98
|
+
if !payload.nil? && !payload["multipart"]
|
99
|
+
payload = payload&.to_json
|
100
|
+
resulting_headers["Content-type"] = "application/json"
|
101
|
+
elsif !payload.nil? && payload["multipart"]
|
102
|
+
payload.delete("multipart")
|
103
|
+
end
|
73
104
|
|
74
|
-
{ method: method, url: url, payload:
|
105
|
+
{ method: method, url: url, payload: payload, headers: resulting_headers, timeout: timeout }
|
75
106
|
end
|
76
107
|
|
77
108
|
# Sets the default headers for API requests.
|
78
109
|
def default_headers
|
79
110
|
@default_headers ||= {
|
80
111
|
"X-Nylas-API-Wrapper" => "ruby",
|
81
|
-
"User-Agent" => "Nylas Ruby SDK #{Nylas::VERSION} - #{RUBY_VERSION}"
|
82
|
-
"Content-type" => "application/json"
|
112
|
+
"User-Agent" => "Nylas Ruby SDK #{Nylas::VERSION} - #{RUBY_VERSION}"
|
83
113
|
}
|
84
114
|
end
|
85
115
|
|
@@ -106,15 +136,45 @@ module Nylas
|
|
106
136
|
headers: headers, timeout: timeout, &block)
|
107
137
|
end
|
108
138
|
|
109
|
-
|
110
|
-
|
111
|
-
|
139
|
+
def setup_http(path, timeout, headers, query, api_key)
|
140
|
+
request = build_request(method: :get, path: path, headers: headers,
|
141
|
+
query: query, api_key: api_key, timeout: timeout)
|
142
|
+
uri = URI(request[:url])
|
143
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
144
|
+
http.use_ssl = true
|
145
|
+
http.read_timeout = timeout
|
146
|
+
http.open_timeout = timeout
|
147
|
+
[request, uri, http]
|
148
|
+
end
|
112
149
|
|
113
|
-
|
150
|
+
def handle_response(http, get_request, path, &block)
|
151
|
+
http.request(get_request) do |response|
|
152
|
+
if response.is_a?(Net::HTTPSuccess)
|
153
|
+
return response.body unless block_given?
|
154
|
+
|
155
|
+
response.read_body(&block)
|
156
|
+
else
|
157
|
+
parse_json_evaluate_error(response.code.to_i, response.body, path, response["Content-Type"])
|
158
|
+
break
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
# Parses the response from the Nylas API and evaluates for errors.
|
164
|
+
def parse_json_evaluate_error(http_code, response, path, content_type = nil)
|
165
|
+
begin
|
166
|
+
response = parse_response(response) if content_type == "application/json"
|
167
|
+
rescue Nylas::JsonParseError
|
168
|
+
handle_failed_response(http_code, response, path)
|
169
|
+
raise
|
170
|
+
end
|
171
|
+
|
172
|
+
handle_failed_response(http_code, response, path)
|
173
|
+
response
|
114
174
|
end
|
115
175
|
|
116
|
-
# Handles
|
117
|
-
def
|
176
|
+
# Handles failed responses from the Nylas API.
|
177
|
+
def handle_failed_response(http_code, response, path)
|
118
178
|
return if HTTP_SUCCESS_CODES.include?(http_code)
|
119
179
|
|
120
180
|
case response
|
@@ -133,19 +193,23 @@ module Nylas
|
|
133
193
|
NylasOAuthError.new(response[:error], response[:error_description], response[:error_uri],
|
134
194
|
response[:error_code], status_code)
|
135
195
|
else
|
136
|
-
|
137
|
-
provider_error = error_obj.fetch(:provider_error, nil)
|
138
|
-
|
139
|
-
NylasApiError.new(error_obj[:type], error_obj[:message], status_code, provider_error,
|
140
|
-
response[:request_id])
|
196
|
+
throw_error(response, status_code)
|
141
197
|
end
|
142
198
|
end
|
143
199
|
|
200
|
+
def throw_error(response, status_code)
|
201
|
+
error_obj = response[:error]
|
202
|
+
provider_error = error_obj.fetch(:provider_error, nil)
|
203
|
+
|
204
|
+
NylasApiError.new(error_obj[:type], error_obj[:message], status_code, provider_error,
|
205
|
+
response[:request_id])
|
206
|
+
end
|
207
|
+
|
144
208
|
# Adds query parameters to a URL.
|
145
209
|
#
|
146
210
|
# @return [String] Processed URL, including query params.
|
147
211
|
def add_query_params_to_url(url, query)
|
148
|
-
unless query.empty?
|
212
|
+
unless query.nil? || query.empty?
|
149
213
|
uri = URI.parse(url)
|
150
214
|
query = custom_params(query)
|
151
215
|
params = URI.decode_www_form(uri.query || "") + query.to_a
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "resource"
|
4
|
+
require_relative "../handler/api_operations"
|
5
|
+
|
6
|
+
module Nylas
|
7
|
+
# Nylas Attachment API
|
8
|
+
class Attachments < Resource
|
9
|
+
include ApiOperations::Get
|
10
|
+
|
11
|
+
# Return metadata of an attachment.
|
12
|
+
#
|
13
|
+
# @param identifier [String] Grant ID or email account to query.
|
14
|
+
# @param attachment_id [String] The id of the attachment to retrieve.
|
15
|
+
# @param query_params [Hash] The query parameters to include in the request.
|
16
|
+
# @return [Array(Hash, String)] The attachment and API request ID.
|
17
|
+
def find(identifier:, attachment_id:, query_params:)
|
18
|
+
get(
|
19
|
+
path: "#{api_uri}/v3/grants/#{identifier}/attachments/#{attachment_id}",
|
20
|
+
query_params: query_params
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Download the attachment data.
|
25
|
+
#
|
26
|
+
# This method supports streaming the download by passing a block, which will
|
27
|
+
# be called with each chunk of the response body as it is read. If no block
|
28
|
+
# is given, the entire response will be read into memory and returned (not recommended
|
29
|
+
# for large files).
|
30
|
+
#
|
31
|
+
# @param identifier [String] Grant ID or email account to query.
|
32
|
+
# @param attachment_id [String] The ID of the attachment to be downloaded.
|
33
|
+
# @param query_params [Hash] The query parameters to include in the request.
|
34
|
+
# @yieldparam chunk [String] A chunk of the response body.
|
35
|
+
# @return [nil, String] Returns nil when a block is given (streaming mode).
|
36
|
+
# When no block is provided, the return is the entire raw response body.
|
37
|
+
def download(identifier:, attachment_id:, query_params:, &block)
|
38
|
+
download_request(
|
39
|
+
path: "#{api_uri}/v3/grants/#{identifier}/attachments/#{attachment_id}/download",
|
40
|
+
query: query_params,
|
41
|
+
api_key: api_key,
|
42
|
+
timeout: timeout,
|
43
|
+
&block
|
44
|
+
)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Download the attachment as a byte array.
|
48
|
+
#
|
49
|
+
# @param identifier [String] Grant ID or email account to query.
|
50
|
+
# @param attachment_id [String] The ID of the attachment to be downloaded.
|
51
|
+
# @param query_params [Hash] The query parameters to include in the request.
|
52
|
+
# @return [nil, Array(Integer)] Returns nil when a block is given (streaming mode).
|
53
|
+
# When no block is provided, the return is the entire raw response body.
|
54
|
+
def download_bytes(identifier:, attachment_id:, query_params:)
|
55
|
+
data = download_request(
|
56
|
+
path: "#{api_uri}/v3/grants/#{identifier}/attachments/#{attachment_id}/download",
|
57
|
+
query: query_params,
|
58
|
+
api_key: api_key,
|
59
|
+
timeout: timeout
|
60
|
+
)
|
61
|
+
|
62
|
+
data&.bytes
|
63
|
+
end
|
64
|
+
end
|
65
|
+
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("auth", 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.
|
@@ -156,16 +158,15 @@ module Nylas
|
|
156
158
|
"access_type" => config[:access_type] || "online",
|
157
159
|
"response_type" => "code"
|
158
160
|
}
|
159
|
-
|
160
161
|
params["provider"] = config[:provider] if config[:provider]
|
162
|
+
params["prompt"] = config[:prompt] if config[:prompt]
|
163
|
+
params["metadata"] = config[:metadata] if config[:metadata]
|
164
|
+
params["state"] = config[:state] if config[:state]
|
165
|
+
params["scope"] = config[:scope].join(" ") if config[:scope]
|
161
166
|
if config[:login_hint]
|
162
167
|
params["login_hint"] = config[:login_hint]
|
163
168
|
params["include_grant_scopes"] = config[:include_grant_scopes].to_s if config[:include_grant_scopes]
|
164
169
|
end
|
165
|
-
params["scope"] = config[:scope].join(" ") if config[:scope]
|
166
|
-
params["prompt"] = config[:prompt] if config[:prompt]
|
167
|
-
params["metadata"] = config[:metadata] if config[:metadata]
|
168
|
-
params["state"] = config[:state] if config[:state]
|
169
170
|
|
170
171
|
URI.encode_www_form(params)
|
171
172
|
end
|