workos 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -2
- data/Gemfile.lock +6 -2
- data/README.md +179 -8
- data/bin/docs +2 -2
- data/codecov.yml +1 -0
- data/docs/WorkOS.html +22 -26
- data/docs/WorkOS/APIError.html +160 -0
- data/docs/WorkOS/AuditLog.html +235 -0
- data/docs/WorkOS/AuthenticationError.html +160 -0
- data/docs/WorkOS/Base.html +27 -32
- data/docs/WorkOS/Client.html +493 -0
- data/docs/WorkOS/InvalidRequestError.html +160 -0
- data/docs/WorkOS/Profile.html +80 -17
- data/docs/WorkOS/RequestError.html +6 -6
- data/docs/WorkOS/SSO.html +118 -74
- data/docs/WorkOS/Types.html +9 -10
- data/docs/WorkOS/Types/ProfileStruct.html +6 -6
- data/docs/WorkOS/Types/Provider.html +135 -0
- data/docs/WorkOS/WorkOSError.html +447 -0
- data/docs/class_list.html +3 -3
- data/docs/css/style.css +2 -2
- data/docs/file.README.html +173 -13
- data/docs/file_list.html +2 -2
- data/docs/frames.html +2 -2
- data/docs/index.html +77 -16
- data/docs/js/app.js +14 -3
- data/docs/method_list.html +96 -8
- data/docs/top-level-namespace.html +6 -6
- data/lib/workos.rb +7 -2
- data/lib/workos/audit_log.rb +78 -0
- data/lib/workos/base.rb +5 -6
- data/lib/workos/client.rb +86 -0
- data/lib/workos/errors.rb +48 -0
- data/lib/workos/sso.rb +49 -27
- data/lib/workos/types.rb +2 -1
- data/lib/workos/types/provider_enum.rb +14 -0
- data/lib/workos/version.rb +2 -2
- data/sorbet/rbi/hidden-definitions/errors.txt +22108 -4368
- data/sorbet/rbi/hidden-definitions/hidden.rbi +32490 -6059
- data/sorbet/rbi/sorbet-typed/lib/rainbow/all/rainbow.rbi +1 -1
- data/sorbet/rbi/todo.rbi +5 -0
- data/spec/lib/workos/audit_log_spec.rb +140 -0
- data/spec/lib/workos/base_spec.rb +30 -0
- data/spec/lib/workos/sso_spec.rb +131 -36
- data/spec/spec_helper.rb +21 -1
- data/spec/support/fixtures/vcr_cassettes/audit_log/create_event.yml +65 -0
- data/spec/support/fixtures/vcr_cassettes/audit_log/create_event_custom_idempotency_key.yml +67 -0
- data/spec/support/fixtures/vcr_cassettes/audit_log/create_event_invalid.yml +68 -0
- data/spec/support/fixtures/vcr_cassettes/audit_log/create_events_duplicate_idempotency_key_and_payload.yml +131 -0
- data/spec/support/fixtures/vcr_cassettes/audit_log/create_events_duplicate_idempotency_key_different_payload.yml +134 -0
- data/spec/support/fixtures/vcr_cassettes/base/execute_request_unauthenticated.yml +66 -0
- data/workos.gemspec +2 -0
- metadata +57 -27
- data/lib/workos/request_error.rb +0 -5
- data/sorbet/rbi/gems/addressable.rbi +0 -198
- data/sorbet/rbi/gems/ast.rbi +0 -47
- data/sorbet/rbi/gems/codecov.rbi +0 -19
- data/sorbet/rbi/gems/crack.rbi +0 -47
- data/sorbet/rbi/gems/docile.rbi +0 -31
- data/sorbet/rbi/gems/hashdiff.rbi +0 -65
- data/sorbet/rbi/gems/jaro_winkler.rbi +0 -14
- data/sorbet/rbi/gems/parallel.rbi +0 -81
- data/sorbet/rbi/gems/parser.rbi +0 -856
- data/sorbet/rbi/gems/public_suffix.rbi +0 -102
- data/sorbet/rbi/gems/rack.rbi +0 -103
- data/sorbet/rbi/gems/rainbow.rbi +0 -117
- data/sorbet/rbi/gems/rake.rbi +0 -632
- data/sorbet/rbi/gems/rspec-core.rbi +0 -1661
- data/sorbet/rbi/gems/rspec-expectations.rbi +0 -388
- data/sorbet/rbi/gems/rspec-mocks.rbi +0 -823
- data/sorbet/rbi/gems/rspec-support.rbi +0 -266
- data/sorbet/rbi/gems/rspec.rbi +0 -14
- data/sorbet/rbi/gems/rubocop.rbi +0 -7083
- data/sorbet/rbi/gems/ruby-progressbar.rbi +0 -304
- data/sorbet/rbi/gems/simplecov-html.rbi +0 -30
- data/sorbet/rbi/gems/simplecov.rbi +0 -225
- data/sorbet/rbi/gems/unicode-display_width.rbi +0 -16
- data/sorbet/rbi/gems/webmock.rbi +0 -526
data/docs/js/app.js
CHANGED
@@ -171,6 +171,7 @@ function generateTOC() {
|
|
171
171
|
var counter = 0;
|
172
172
|
var tags = ['h2', 'h3', 'h4', 'h5', 'h6'];
|
173
173
|
var i;
|
174
|
+
var curli;
|
174
175
|
if ($('#filecontents h1').length > 1) tags.unshift('h1');
|
175
176
|
for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; }
|
176
177
|
var lastTag = parseInt(tags[0][1], 10);
|
@@ -190,15 +191,25 @@ function generateTOC() {
|
|
190
191
|
}
|
191
192
|
if (thisTag > lastTag) {
|
192
193
|
for (i = 0; i < thisTag - lastTag; i++) {
|
193
|
-
|
194
|
+
if ( typeof(curli) == "undefined" ) {
|
195
|
+
curli = $('<li/>');
|
196
|
+
toc.append(curli);
|
197
|
+
}
|
198
|
+
toc = $('<ol/>');
|
199
|
+
curli.append(toc);
|
200
|
+
curli = undefined;
|
194
201
|
}
|
195
202
|
}
|
196
203
|
if (thisTag < lastTag) {
|
197
|
-
for (i = 0; i < lastTag - thisTag; i++)
|
204
|
+
for (i = 0; i < lastTag - thisTag; i++) {
|
205
|
+
toc = toc.parent();
|
206
|
+
toc = toc.parent();
|
207
|
+
}
|
198
208
|
}
|
199
209
|
var title = $(this).attr('toc-title');
|
200
210
|
if (typeof(title) == "undefined") title = $(this).text();
|
201
|
-
|
211
|
+
curli =$('<li><a href="#' + this.id + '">' + title + '</a></li>');
|
212
|
+
toc.append(curli);
|
202
213
|
lastTag = thisTag;
|
203
214
|
});
|
204
215
|
if (!show) return;
|
data/docs/method_list.html
CHANGED
@@ -4,9 +4,9 @@
|
|
4
4
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
5
5
|
<meta charset="utf-8" />
|
6
6
|
|
7
|
-
<link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen"
|
7
|
+
<link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" />
|
8
8
|
|
9
|
-
<link rel="stylesheet" href="css/common.css" type="text/css" media="screen"
|
9
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" media="screen" />
|
10
10
|
|
11
11
|
|
12
12
|
|
@@ -53,6 +53,14 @@
|
|
53
53
|
|
54
54
|
|
55
55
|
<li class="even ">
|
56
|
+
<div class="item">
|
57
|
+
<span class='object_link'><a href="WorkOS/Client.html#client-instance_method" title="WorkOS::Client#client (method)">#client</a></span>
|
58
|
+
<small>WorkOS::Client</small>
|
59
|
+
</div>
|
60
|
+
</li>
|
61
|
+
|
62
|
+
|
63
|
+
<li class="odd ">
|
56
64
|
<div class="item">
|
57
65
|
<span class='object_link'><a href="WorkOS/Profile.html#connection_type-instance_method" title="WorkOS::Profile#connection_type (method)">#connection_type</a></span>
|
58
66
|
<small>WorkOS::Profile</small>
|
@@ -60,6 +68,14 @@
|
|
60
68
|
</li>
|
61
69
|
|
62
70
|
|
71
|
+
<li class="even ">
|
72
|
+
<div class="item">
|
73
|
+
<span class='object_link'><a href="WorkOS/AuditLog.html#create_event-class_method" title="WorkOS::AuditLog.create_event (method)">create_event</a></span>
|
74
|
+
<small>WorkOS::AuditLog</small>
|
75
|
+
</div>
|
76
|
+
</li>
|
77
|
+
|
78
|
+
|
63
79
|
<li class="odd ">
|
64
80
|
<div class="item">
|
65
81
|
<span class='object_link'><a href="WorkOS/Profile.html#email-instance_method" title="WorkOS::Profile#email (method)">#email</a></span>
|
@@ -69,6 +85,14 @@
|
|
69
85
|
|
70
86
|
|
71
87
|
<li class="even ">
|
88
|
+
<div class="item">
|
89
|
+
<span class='object_link'><a href="WorkOS/Client.html#execute_request-instance_method" title="WorkOS::Client#execute_request (method)">#execute_request</a></span>
|
90
|
+
<small>WorkOS::Client</small>
|
91
|
+
</div>
|
92
|
+
</li>
|
93
|
+
|
94
|
+
|
95
|
+
<li class="odd ">
|
72
96
|
<div class="item">
|
73
97
|
<span class='object_link'><a href="WorkOS/Profile.html#first_name-instance_method" title="WorkOS::Profile#first_name (method)">#first_name</a></span>
|
74
98
|
<small>WorkOS::Profile</small>
|
@@ -76,7 +100,7 @@
|
|
76
100
|
</li>
|
77
101
|
|
78
102
|
|
79
|
-
<li class="
|
103
|
+
<li class="even ">
|
80
104
|
<div class="item">
|
81
105
|
<span class='object_link'><a href="WorkOS/Profile.html#full_name-instance_method" title="WorkOS::Profile#full_name (method)">#full_name</a></span>
|
82
106
|
<small>WorkOS::Profile</small>
|
@@ -84,7 +108,23 @@
|
|
84
108
|
</li>
|
85
109
|
|
86
110
|
|
111
|
+
<li class="odd ">
|
112
|
+
<div class="item">
|
113
|
+
<span class='object_link'><a href="WorkOS/Client.html#handle_error_response-instance_method" title="WorkOS::Client#handle_error_response (method)">#handle_error_response</a></span>
|
114
|
+
<small>WorkOS::Client</small>
|
115
|
+
</div>
|
116
|
+
</li>
|
117
|
+
|
118
|
+
|
87
119
|
<li class="even ">
|
120
|
+
<div class="item">
|
121
|
+
<span class='object_link'><a href="WorkOS/WorkOSError.html#http_status-instance_method" title="WorkOS::WorkOSError#http_status (method)">#http_status</a></span>
|
122
|
+
<small>WorkOS::WorkOSError</small>
|
123
|
+
</div>
|
124
|
+
</li>
|
125
|
+
|
126
|
+
|
127
|
+
<li class="odd ">
|
88
128
|
<div class="item">
|
89
129
|
<span class='object_link'><a href="WorkOS/Profile.html#id-instance_method" title="WorkOS::Profile#id (method)">#id</a></span>
|
90
130
|
<small>WorkOS::Profile</small>
|
@@ -92,7 +132,7 @@
|
|
92
132
|
</li>
|
93
133
|
|
94
134
|
|
95
|
-
<li class="
|
135
|
+
<li class="even ">
|
96
136
|
<div class="item">
|
97
137
|
<span class='object_link'><a href="WorkOS/Profile.html#idp_id-instance_method" title="WorkOS::Profile#idp_id (method)">#idp_id</a></span>
|
98
138
|
<small>WorkOS::Profile</small>
|
@@ -100,6 +140,14 @@
|
|
100
140
|
</li>
|
101
141
|
|
102
142
|
|
143
|
+
<li class="odd ">
|
144
|
+
<div class="item">
|
145
|
+
<span class='object_link'><a href="WorkOS/WorkOSError.html#initialize-instance_method" title="WorkOS::WorkOSError#initialize (method)">#initialize</a></span>
|
146
|
+
<small>WorkOS::WorkOSError</small>
|
147
|
+
</div>
|
148
|
+
</li>
|
149
|
+
|
150
|
+
|
103
151
|
<li class="even ">
|
104
152
|
<div class="item">
|
105
153
|
<span class='object_link'><a href="WorkOS/Profile.html#initialize-instance_method" title="WorkOS::Profile#initialize (method)">#initialize</a></span>
|
@@ -110,8 +158,8 @@
|
|
110
158
|
|
111
159
|
<li class="odd ">
|
112
160
|
<div class="item">
|
113
|
-
<span class='object_link'><a href="WorkOS
|
114
|
-
<small>WorkOS
|
161
|
+
<span class='object_link'><a href="WorkOS.html#key-class_method" title="WorkOS.key (method)">key</a></span>
|
162
|
+
<small>WorkOS</small>
|
115
163
|
</div>
|
116
164
|
</li>
|
117
165
|
|
@@ -126,8 +174,8 @@
|
|
126
174
|
|
127
175
|
<li class="odd ">
|
128
176
|
<div class="item">
|
129
|
-
<span class='object_link'><a href="WorkOS.html#key-class_method" title="WorkOS.key (method)">key</a></span>
|
130
|
-
<small>WorkOS</small>
|
177
|
+
<span class='object_link'><a href="WorkOS/Base.html#key-class_method" title="WorkOS::Base.key (method)">key</a></span>
|
178
|
+
<small>WorkOS::Base</small>
|
131
179
|
</div>
|
132
180
|
</li>
|
133
181
|
|
@@ -157,6 +205,14 @@
|
|
157
205
|
|
158
206
|
|
159
207
|
<li class="odd ">
|
208
|
+
<div class="item">
|
209
|
+
<span class='object_link'><a href="WorkOS/Client.html#post_request-instance_method" title="WorkOS::Client#post_request (method)">#post_request</a></span>
|
210
|
+
<small>WorkOS::Client</small>
|
211
|
+
</div>
|
212
|
+
</li>
|
213
|
+
|
214
|
+
|
215
|
+
<li class="even ">
|
160
216
|
<div class="item">
|
161
217
|
<span class='object_link'><a href="WorkOS/SSO.html#profile-class_method" title="WorkOS::SSO.profile (method)">profile</a></span>
|
162
218
|
<small>WorkOS::SSO</small>
|
@@ -164,6 +220,38 @@
|
|
164
220
|
</li>
|
165
221
|
|
166
222
|
|
223
|
+
<li class="odd ">
|
224
|
+
<div class="item">
|
225
|
+
<span class='object_link'><a href="WorkOS/WorkOSError.html#request_id-instance_method" title="WorkOS::WorkOSError#request_id (method)">#request_id</a></span>
|
226
|
+
<small>WorkOS::WorkOSError</small>
|
227
|
+
</div>
|
228
|
+
</li>
|
229
|
+
|
230
|
+
|
231
|
+
<li class="even ">
|
232
|
+
<div class="item">
|
233
|
+
<span class='object_link'><a href="WorkOS/Profile.html#to_json-instance_method" title="WorkOS::Profile#to_json (method)">#to_json</a></span>
|
234
|
+
<small>WorkOS::Profile</small>
|
235
|
+
</div>
|
236
|
+
</li>
|
237
|
+
|
238
|
+
|
239
|
+
<li class="odd ">
|
240
|
+
<div class="item">
|
241
|
+
<span class='object_link'><a href="WorkOS/WorkOSError.html#to_s-instance_method" title="WorkOS::WorkOSError#to_s (method)">#to_s</a></span>
|
242
|
+
<small>WorkOS::WorkOSError</small>
|
243
|
+
</div>
|
244
|
+
</li>
|
245
|
+
|
246
|
+
|
247
|
+
<li class="even ">
|
248
|
+
<div class="item">
|
249
|
+
<span class='object_link'><a href="WorkOS/Client.html#user_agent-instance_method" title="WorkOS::Client#user_agent (method)">#user_agent</a></span>
|
250
|
+
<small>WorkOS::Client</small>
|
251
|
+
</div>
|
252
|
+
</li>
|
253
|
+
|
254
|
+
|
167
255
|
|
168
256
|
</ul>
|
169
257
|
</div>
|
@@ -6,15 +6,15 @@
|
|
6
6
|
<title>
|
7
7
|
Top Level Namespace
|
8
8
|
|
9
|
-
— Documentation by YARD 0.9.
|
9
|
+
— Documentation by YARD 0.9.22
|
10
10
|
|
11
11
|
</title>
|
12
12
|
|
13
|
-
<link rel="stylesheet" href="css/style.css" type="text/css"
|
13
|
+
<link rel="stylesheet" href="css/style.css" type="text/css" />
|
14
14
|
|
15
|
-
<link rel="stylesheet" href="css/common.css" type="text/css"
|
15
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" />
|
16
16
|
|
17
|
-
<script type="text/javascript"
|
17
|
+
<script type="text/javascript">
|
18
18
|
pathId = "";
|
19
19
|
relpath = '';
|
20
20
|
</script>
|
@@ -100,9 +100,9 @@
|
|
100
100
|
</div>
|
101
101
|
|
102
102
|
<div id="footer">
|
103
|
-
Generated on
|
103
|
+
Generated on Thu Jan 30 09:12:47 2020 by
|
104
104
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
105
|
-
0.9.
|
105
|
+
0.9.22 (ruby-2.6.5).
|
106
106
|
</div>
|
107
107
|
|
108
108
|
</div>
|
data/lib/workos.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
# typed: true
|
3
3
|
|
4
|
-
|
5
4
|
require 'workos/version'
|
6
5
|
require 'sorbet-runtime'
|
7
6
|
|
@@ -28,9 +27,15 @@ module WorkOS
|
|
28
27
|
|
29
28
|
autoload :Types, 'workos/types'
|
30
29
|
autoload :Base, 'workos/base'
|
30
|
+
autoload :Client, 'workos/client'
|
31
|
+
autoload :AuditLog, 'workos/audit_log'
|
31
32
|
autoload :Profile, 'workos/profile'
|
32
|
-
autoload :RequestError, 'workos/request_error'
|
33
33
|
autoload :SSO, 'workos/sso'
|
34
34
|
|
35
|
+
# Errors
|
36
|
+
autoload :APIError, 'workos/errors'
|
37
|
+
autoload :AuthenticationError, 'workos/errors'
|
38
|
+
autoload :InvalidRequestError, 'workos/errors'
|
39
|
+
|
35
40
|
WorkOS.key = ENV['WORKOS_KEY'] unless ENV['WORKOS_KEY'].nil?
|
36
41
|
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# typed: true
|
3
|
+
|
4
|
+
require 'net/http'
|
5
|
+
require 'uri'
|
6
|
+
|
7
|
+
module WorkOS
|
8
|
+
# The Audit Log module provides convenience methods for working with the
|
9
|
+
# WorkOS Audit Log platform. You'll need a valid API key.
|
10
|
+
#
|
11
|
+
# @see https://dashboard.workos.com/docs/audit-log/quickstart
|
12
|
+
module AuditLog
|
13
|
+
class << self
|
14
|
+
extend T::Sig
|
15
|
+
include Base
|
16
|
+
include Client
|
17
|
+
|
18
|
+
# Create an Audit Log event.
|
19
|
+
#
|
20
|
+
# @param [Hash] event An event hash
|
21
|
+
# @option event [String] group A single organization containing related
|
22
|
+
# members. This will normally be the customer of a vendor's application.
|
23
|
+
# @option event [String] location Identifier for where the event
|
24
|
+
# originated. This will be an IP address (IPv4 or IPv6), hostname, or
|
25
|
+
# device ID.
|
26
|
+
# @option event [String] action Specific activity performed by the actor.
|
27
|
+
# @option event [String] action_type Corresponding CRUD category of the
|
28
|
+
# event. Can be one of C, R, U, or D.
|
29
|
+
# @option event [String] actor_name Display name of the entity performing
|
30
|
+
# the action.
|
31
|
+
# @option event [String] actor_id Unique identifier of the entity
|
32
|
+
# performing the action.
|
33
|
+
# @option event [String] target_name Display name of the object or
|
34
|
+
# resource that is being acted upon.
|
35
|
+
# @option event [String] target_id Unique identifier of the object or
|
36
|
+
# resource being acted upon.
|
37
|
+
# @option event [String] occurred_at ISO-8601 datetime at which the event
|
38
|
+
# happened, with millisecond precision.
|
39
|
+
# @option event [Hash] metadata Arbitrary key-value data containing
|
40
|
+
# information associated with the event. Note: There is a limit of 50
|
41
|
+
# keys. Key names can be up to 40 characters long, and values can be up
|
42
|
+
# to 500 characters long.
|
43
|
+
# @param [String] idempotency_key An idempotency key
|
44
|
+
sig do
|
45
|
+
params(
|
46
|
+
event: Hash,
|
47
|
+
idempotency_key: T.nilable(String),
|
48
|
+
).returns(::T.untyped)
|
49
|
+
end
|
50
|
+
|
51
|
+
def create_event(event:, idempotency_key: nil)
|
52
|
+
request = post_request(
|
53
|
+
path: '/events',
|
54
|
+
idempotency_key: idempotency_key,
|
55
|
+
body: event,
|
56
|
+
)
|
57
|
+
|
58
|
+
execute_request(request: request)
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
sig do
|
64
|
+
params(
|
65
|
+
path: String,
|
66
|
+
idempotency_key: T.nilable(String),
|
67
|
+
body: T.nilable(Hash),
|
68
|
+
).returns(Net::HTTP::Post)
|
69
|
+
end
|
70
|
+
def post_request(path:, idempotency_key: nil, body: nil)
|
71
|
+
request = super(path: path, body: body)
|
72
|
+
request['Authorization'] = "Bearer #{WorkOS.key}"
|
73
|
+
request['Idempotency-Key'] = idempotency_key if idempotency_key
|
74
|
+
request
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/lib/workos/base.rb
CHANGED
@@ -1,16 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
# typed: true
|
3
|
-
# rubocop:disable Style/Documentation
|
4
|
-
|
5
3
|
|
4
|
+
# rubocop:disable Style/Documentation
|
6
5
|
module WorkOS
|
7
|
-
|
6
|
+
module Base
|
8
7
|
attr_accessor :key
|
9
|
-
class << self
|
10
|
-
attr_writer :key
|
11
|
-
end
|
12
8
|
|
13
9
|
class << self
|
10
|
+
extend T::Sig
|
11
|
+
|
12
|
+
attr_writer :key
|
14
13
|
attr_reader :key
|
15
14
|
end
|
16
15
|
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# typed: true
|
3
|
+
|
4
|
+
# rubocop:disable Style/Documentation
|
5
|
+
module WorkOS
|
6
|
+
module Client
|
7
|
+
extend T::Sig
|
8
|
+
include Kernel
|
9
|
+
|
10
|
+
sig { returns(Net::HTTP) }
|
11
|
+
def client
|
12
|
+
return @client if defined?(@client)
|
13
|
+
|
14
|
+
@client = Net::HTTP.new(WorkOS::API_HOSTNAME, 443)
|
15
|
+
@client.use_ssl = true
|
16
|
+
|
17
|
+
@client
|
18
|
+
end
|
19
|
+
|
20
|
+
sig { params(request: Net::HTTP::Post).returns(::T.untyped) }
|
21
|
+
def execute_request(request:)
|
22
|
+
response = client.request(request)
|
23
|
+
|
24
|
+
http_status = response.code.to_i
|
25
|
+
handle_error_response(response: response) if http_status >= 400
|
26
|
+
|
27
|
+
response
|
28
|
+
end
|
29
|
+
|
30
|
+
sig { params(path: String, body: T.nilable(Hash)).returns(Net::HTTP::Post) }
|
31
|
+
def post_request(path:, body: nil)
|
32
|
+
request = Net::HTTP::Post.new(path, 'Content-Type' => 'application/json')
|
33
|
+
request.body = body.to_json if body
|
34
|
+
request['User-Agent'] = user_agent
|
35
|
+
request
|
36
|
+
end
|
37
|
+
|
38
|
+
sig { returns(String) }
|
39
|
+
def user_agent
|
40
|
+
engine = defined?(::RUBY_ENGINE) ? ::RUBY_ENGINE : 'Ruby'
|
41
|
+
|
42
|
+
[
|
43
|
+
'WorkOS',
|
44
|
+
"#{engine}/#{RUBY_VERSION}",
|
45
|
+
RUBY_PLATFORM,
|
46
|
+
"v#{WorkOS::VERSION}"
|
47
|
+
].join('; ')
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
52
|
+
sig { params(response: ::T.untyped).void }
|
53
|
+
def handle_error_response(response:)
|
54
|
+
http_status = response.code.to_i
|
55
|
+
json = JSON.parse(response.body)
|
56
|
+
|
57
|
+
case http_status
|
58
|
+
when 400
|
59
|
+
raise InvalidRequestError.new(
|
60
|
+
message: json['message'],
|
61
|
+
http_status: http_status,
|
62
|
+
request_id: response['x-request-id'],
|
63
|
+
)
|
64
|
+
when 401
|
65
|
+
raise AuthenticationError.new(
|
66
|
+
message: json['message'],
|
67
|
+
http_status: http_status,
|
68
|
+
request_id: response['x-request-id'],
|
69
|
+
)
|
70
|
+
when 422
|
71
|
+
errors = json['errors'].map do |error|
|
72
|
+
"#{error['field']}: #{error['code']}"
|
73
|
+
end.join('; ')
|
74
|
+
|
75
|
+
message = "#{json['message']} (#{errors})"
|
76
|
+
raise InvalidRequestError.new(
|
77
|
+
message: message,
|
78
|
+
http_status: http_status,
|
79
|
+
request_id: response['x-request-id'],
|
80
|
+
)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
84
|
+
end
|
85
|
+
end
|
86
|
+
# rubocop:enable Style/Documentation
|