nylas 6.0.0.beta.1 → 6.0.0.beta.3
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 +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
|