workos 0.0.2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|