workos 4.8.0 → 5.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/Gemfile.lock +1 -1
- data/lib/workos/client.rb +16 -4
- data/lib/workos/directory_sync.rb +0 -2
- data/lib/workos/errors.rb +18 -1
- data/lib/workos/events.rb +2 -0
- data/lib/workos/organizations.rb +44 -21
- data/lib/workos/version.rb +1 -1
- data/lib/workos.rb +3 -0
- data/spec/lib/workos/client.rb +67 -0
- data/spec/lib/workos/directory_sync_spec.rb +5 -28
- data/spec/lib/workos/event_spec.rb +13 -13
- data/spec/lib/workos/mfa_spec.rb +3 -3
- data/spec/lib/workos/organizations_spec.rb +2 -2
- data/spec/lib/workos/passwordless_spec.rb +2 -2
- data/spec/lib/workos/sso_spec.rb +2 -2
- data/spec/lib/workos/user_management_spec.rb +18 -18
- data/spec/support/fixtures/vcr_cassettes/base/execute_request_unauthenticated.yml +63 -63
- data/spec/support/fixtures/vcr_cassettes/events/list_events_with_after.yml +1 -1
- data/spec/support/fixtures/vcr_cassettes/events/list_events_with_no_options.yml +26 -25
- data/spec/support/fixtures/vcr_cassettes/events/list_events_with_organization_id.yml +1 -1
- data/spec/support/fixtures/vcr_cassettes/events/list_events_with_range.yml +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 928be28f91db58c18a6348d67d6a2db1ffd1de55a1bf84e65dad4b250cbd3c85
|
4
|
+
data.tar.gz: adc3b8e361b4e4da51155a8f68bb79209ad48946b650dcc930c6130dbb3261ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82560b233bd0361d6be1ae87f71c92ebf6af803cfabd1ff0864470769a5a1b1892f052f62c1cd6c4c3f51472a4b1d4e59b720c22100f0e9f7664637ef80e77ed
|
7
|
+
data.tar.gz: 161ab6186cc0ed7230714da2d3a216d3a5727a73e478bddd674110cce88457a31dc70df2f20f4085535bd223f7f7bd14a3b432440ca04d6f863a4e05639827eb
|
data/Gemfile.lock
CHANGED
data/lib/workos/client.rb
CHANGED
@@ -86,7 +86,7 @@ module WorkOS
|
|
86
86
|
].join('; ')
|
87
87
|
end
|
88
88
|
|
89
|
-
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
89
|
+
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity:
|
90
90
|
def handle_error_response(response:)
|
91
91
|
http_status = response.code.to_i
|
92
92
|
json = JSON.parse(response.body)
|
@@ -99,6 +99,9 @@ module WorkOS
|
|
99
99
|
request_id: response['x-request-id'],
|
100
100
|
code: json['code'],
|
101
101
|
errors: json['errors'],
|
102
|
+
error: json['error'],
|
103
|
+
error_description: json['error_description'],
|
104
|
+
data: json,
|
102
105
|
)
|
103
106
|
when 401
|
104
107
|
raise AuthenticationError.new(
|
@@ -107,7 +110,7 @@ module WorkOS
|
|
107
110
|
request_id: response['x-request-id'],
|
108
111
|
)
|
109
112
|
when 404
|
110
|
-
raise
|
113
|
+
raise NotFoundError.new(
|
111
114
|
message: json['message'],
|
112
115
|
http_status: http_status,
|
113
116
|
request_id: response['x-request-id'],
|
@@ -118,12 +121,21 @@ module WorkOS
|
|
118
121
|
errors = extract_error(json['errors']) if json['errors']
|
119
122
|
message += " (#{errors})" if errors
|
120
123
|
|
121
|
-
raise
|
124
|
+
raise UnprocessableEntityError.new(
|
122
125
|
message: message,
|
123
126
|
http_status: http_status,
|
124
127
|
request_id: response['x-request-id'],
|
128
|
+
error: json['error'],
|
129
|
+
errors: errors,
|
125
130
|
code: code,
|
126
131
|
)
|
132
|
+
when 429
|
133
|
+
raise RateLimitExceededError.new(
|
134
|
+
message: json['message'],
|
135
|
+
http_status: http_status,
|
136
|
+
request_id: response['x-request-id'],
|
137
|
+
retry_after: response['Retry-After'],
|
138
|
+
)
|
127
139
|
else
|
128
140
|
raise APIError.new(
|
129
141
|
message: json['message'],
|
@@ -132,7 +144,7 @@ module WorkOS
|
|
132
144
|
)
|
133
145
|
end
|
134
146
|
end
|
135
|
-
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
147
|
+
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity:
|
136
148
|
|
137
149
|
private
|
138
150
|
|
@@ -15,8 +15,6 @@ module WorkOS
|
|
15
15
|
# Retrieve directories.
|
16
16
|
#
|
17
17
|
# @param [Hash] options An options hash
|
18
|
-
# @option options [String] domain The domain of the directory to be
|
19
|
-
# retrieved.
|
20
18
|
# @option options [String] search A search term for direcory names.
|
21
19
|
# @option options [String] limit Maximum number of records to return.
|
22
20
|
# @option options [String] order The order in which to paginate records
|
data/lib/workos/errors.rb
CHANGED
@@ -7,6 +7,10 @@ module WorkOS
|
|
7
7
|
attr_reader :request_id
|
8
8
|
attr_reader :code
|
9
9
|
attr_reader :errors
|
10
|
+
attr_reader :error
|
11
|
+
attr_reader :error_description
|
12
|
+
attr_reader :data
|
13
|
+
attr_reader :retry_after
|
10
14
|
|
11
15
|
# rubocop:disable Metrics/ParameterLists
|
12
16
|
def initialize(
|
@@ -16,7 +20,9 @@ module WorkOS
|
|
16
20
|
http_status: nil,
|
17
21
|
request_id: nil,
|
18
22
|
code: nil,
|
19
|
-
errors: nil
|
23
|
+
errors: nil,
|
24
|
+
data: nil,
|
25
|
+
retry_after: nil
|
20
26
|
)
|
21
27
|
@message = message
|
22
28
|
@error = error
|
@@ -25,6 +31,8 @@ module WorkOS
|
|
25
31
|
@request_id = request_id
|
26
32
|
@code = code
|
27
33
|
@errors = errors
|
34
|
+
@data = data
|
35
|
+
@retry_after = retry_after
|
28
36
|
end
|
29
37
|
# rubocop:enable Metrics/ParameterLists
|
30
38
|
|
@@ -62,4 +70,13 @@ module WorkOS
|
|
62
70
|
|
63
71
|
# TimeoutError is raised when the HTTP request to the API times out
|
64
72
|
class TimeoutError < WorkOSError; end
|
73
|
+
|
74
|
+
# RateLimitExceededError is raised when the rate limit for the API has been hit
|
75
|
+
class RateLimitExceededError < WorkOSError; end
|
76
|
+
|
77
|
+
# NotFoundError is raised when a resource is not found
|
78
|
+
class NotFoundError < WorkOSError; end
|
79
|
+
|
80
|
+
# UnprocessableEntityError is raised when a request is made that cannot be processed
|
81
|
+
class UnprocessableEntityError < WorkOSError; end
|
65
82
|
end
|
data/lib/workos/events.rb
CHANGED
data/lib/workos/organizations.rb
CHANGED
@@ -74,12 +74,13 @@ module WorkOS
|
|
74
74
|
# @param [Array<Hash>] domain_data List of domain hashes describing an orgnaization domain.
|
75
75
|
# @option domain_data [String] domain The domain that belongs to the organization.
|
76
76
|
# @option domain_data [String] state The state of the domain. "verified" or "pending"
|
77
|
-
# @param [Array<String>] domains List of domains that belong to the organization.
|
78
|
-
# Deprecated: Use domain_data instead.
|
79
77
|
# @param [String] name A unique, descriptive name for the organization
|
80
|
-
# @param [Boolean, nil] allow_profiles_outside_organization Whether Connections
|
81
|
-
# within the Organization allow profiles that are outside of the Organization's configured User Email Domains.
|
82
78
|
# @param [String] idempotency_key An idempotency key
|
79
|
+
# @param [Boolean, nil] allow_profiles_outside_organization Whether Connections
|
80
|
+
# within the Organization allow profiles that are outside of the Organization's configured User Email Domains.
|
81
|
+
# Deprecated: If you need to allow sign-ins from any email domain, contact suppport@workos.com.
|
82
|
+
# @param [Array<String>] domains List of domains that belong to the organization.
|
83
|
+
# Deprecated: Use domain_data instead.
|
83
84
|
def create_organization(
|
84
85
|
domain_data: nil,
|
85
86
|
domains: nil,
|
@@ -87,16 +88,23 @@ module WorkOS
|
|
87
88
|
allow_profiles_outside_organization: nil,
|
88
89
|
idempotency_key: nil
|
89
90
|
)
|
90
|
-
|
91
|
+
body = { name: name }
|
92
|
+
body[:domain_data] = domain_data if domain_data
|
93
|
+
|
94
|
+
if domains
|
95
|
+
warn_deprecation '`domains` is deprecated. Use `domain_data` instead.'
|
96
|
+
body[:domains] = domains
|
97
|
+
end
|
98
|
+
|
99
|
+
unless allow_profiles_outside_organization.nil?
|
100
|
+
warn_deprecation '`allow_profiles_outside_organization` is deprecated. ' \
|
101
|
+
'If you need to allow sign-ins from any email domain, contact support@workos.com.'
|
102
|
+
body[:allow_profiles_outside_organization] = allow_profiles_outside_organization
|
103
|
+
end
|
91
104
|
|
92
105
|
request = post_request(
|
93
106
|
auth: true,
|
94
|
-
body:
|
95
|
-
domain_data: domain_data,
|
96
|
-
domains: domains,
|
97
|
-
name: name,
|
98
|
-
allow_profiles_outside_organization: allow_profiles_outside_organization,
|
99
|
-
},
|
107
|
+
body: body,
|
100
108
|
path: '/organizations',
|
101
109
|
idempotency_key: idempotency_key,
|
102
110
|
)
|
@@ -113,21 +121,36 @@ module WorkOS
|
|
113
121
|
# @param [Array<Hash>] domain_data List of domain hashes describing an orgnaization domain.
|
114
122
|
# @option domain_data [String] domain The domain that belongs to the organization.
|
115
123
|
# @option domain_data [String] state The state of the domain. "verified" or "pending"
|
116
|
-
# @param [Array<String>] domains List of domains that belong to the organization.
|
117
|
-
# Deprecated: Use domain_data instead.
|
118
124
|
# @param [String] name A unique, descriptive name for the organization
|
119
125
|
# @param [Boolean, nil] allow_profiles_outside_organization Whether Connections
|
120
|
-
#
|
121
|
-
|
122
|
-
|
126
|
+
# within the Organization allow profiles that are outside of the Organization's configured User Email Domains.
|
127
|
+
# Deprecated: If you need to allow sign-ins from any email domain, contact suppport@workos.com.
|
128
|
+
# @param [Array<String>] domains List of domains that belong to the organization.
|
129
|
+
# Deprecated: Use domain_data instead.
|
130
|
+
def update_organization(
|
131
|
+
organization:,
|
132
|
+
domain_data: nil,
|
133
|
+
domains: nil,
|
134
|
+
name:,
|
135
|
+
allow_profiles_outside_organization: nil
|
136
|
+
)
|
137
|
+
body = { name: name }
|
138
|
+
body[:domain_data] = domain_data if domain_data
|
139
|
+
|
140
|
+
if domains
|
141
|
+
warn_deprecation '`domains` is deprecated. Use `domain_data` instead.'
|
142
|
+
body[:domains] = domains
|
143
|
+
end
|
144
|
+
|
145
|
+
unless allow_profiles_outside_organization.nil?
|
146
|
+
warn_deprecation '`allow_profiles_outside_organization` is deprecated. ' \
|
147
|
+
'If you need to allow sign-ins from any email domain, contact support@workos.com.'
|
148
|
+
body[:allow_profiles_outside_organization] = allow_profiles_outside_organization
|
149
|
+
end
|
123
150
|
|
124
151
|
request = put_request(
|
125
152
|
auth: true,
|
126
|
-
body:
|
127
|
-
domains: domains,
|
128
|
-
name: name,
|
129
|
-
allow_profiles_outside_organization: allow_profiles_outside_organization,
|
130
|
-
},
|
153
|
+
body: body,
|
131
154
|
path: "/organizations/#{organization}",
|
132
155
|
)
|
133
156
|
|
data/lib/workos/version.rb
CHANGED
data/lib/workos.rb
CHANGED
@@ -87,4 +87,7 @@ module WorkOS
|
|
87
87
|
autoload :InvalidRequestError, 'workos/errors'
|
88
88
|
autoload :SignatureVerificationError, 'workos/errors'
|
89
89
|
autoload :TimeoutError, 'workos/errors'
|
90
|
+
autoload :NotFoundError, 'workos/errors'
|
91
|
+
autoload :UnprocessableEntityError, 'workos/errors'
|
92
|
+
autoload :RateLimitExceededError, 'workos/errors'
|
90
93
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# rubocop:disable Style/MultilineBlockChain
|
4
|
+
describe WorkOS::Client do
|
5
|
+
describe '.client' do
|
6
|
+
it 'returns a 400 error with appropriate fields' do
|
7
|
+
VCR.use_cassette('user_management/authenticate_with_code/invalid') do
|
8
|
+
expect do
|
9
|
+
WorkOS::UserManagement.authenticate_with_code(
|
10
|
+
code: 'invalid',
|
11
|
+
client_id: 'client_123',
|
12
|
+
ip_address: '200.240.210.16',
|
13
|
+
user_agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/108.0.0.0 Safari/537.36',
|
14
|
+
)
|
15
|
+
end.to raise_error do |error|
|
16
|
+
expect(error).to be_a(WorkOS::InvalidRequestError)
|
17
|
+
expect(error.error).not_to be_nil
|
18
|
+
expect(error.error_description).not_to be_nil
|
19
|
+
expect(error.data).not_to be_nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'returns a 401 error with appropriate fields' do
|
25
|
+
VCR.use_cassette('base/execute_request_unauthenticated') do
|
26
|
+
expect do
|
27
|
+
WorkOS::AuditLogs.create_event(
|
28
|
+
organization: 'org_123',
|
29
|
+
event: {},
|
30
|
+
)
|
31
|
+
end.to raise_error do |error|
|
32
|
+
expect(error).to be_a(WorkOS::AuthenticationError)
|
33
|
+
expect(error.message).not_to be_nil
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'returns a 404 error with appropriate fields' do
|
39
|
+
VCR.use_cassette('user_management/get_email_verification/invalid') do
|
40
|
+
expect do
|
41
|
+
WorkOS::UserManagement.get_email_verification(
|
42
|
+
id: 'invalid',
|
43
|
+
)
|
44
|
+
end.to raise_error do |error|
|
45
|
+
expect(error).to be_a(WorkOS::NotFoundError)
|
46
|
+
expect(error.message).not_to be_nil
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'returns a 422 error with appropriate fields' do
|
52
|
+
VCR.use_cassette('user_management/create_user_invalid') do
|
53
|
+
expect do
|
54
|
+
WorkOS::UserManagement.create_user(
|
55
|
+
email: 'invalid',
|
56
|
+
)
|
57
|
+
end.to raise_error do |error|
|
58
|
+
expect(error).to be_a(WorkOS::UnprocessableEntityError)
|
59
|
+
expect(error.message).not_to be_nil
|
60
|
+
expect(error.errors).not_to be_nil
|
61
|
+
expect(error.code).not_to be_nil
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
# rubocop:enable Style/MultilineBlockChain
|
@@ -20,29 +20,6 @@ describe WorkOS::DirectorySync do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
context 'with domain option' do
|
24
|
-
it 'forms the proper request to the API' do
|
25
|
-
request_args = [
|
26
|
-
'/directories?domain=foo-corp.com&'\
|
27
|
-
'order=desc',
|
28
|
-
'Content-Type' => 'application/json'
|
29
|
-
]
|
30
|
-
|
31
|
-
expected_request = Net::HTTP::Get.new(*request_args)
|
32
|
-
|
33
|
-
expect(Net::HTTP::Get).to receive(:new).with(*request_args).
|
34
|
-
and_return(expected_request)
|
35
|
-
|
36
|
-
VCR.use_cassette 'directory_sync/list_directories/with_domain' do
|
37
|
-
directories = described_class.list_directories(
|
38
|
-
domain: 'foo-corp.com',
|
39
|
-
)
|
40
|
-
|
41
|
-
expect(directories.data.size).to eq(1)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
23
|
context 'with search option' do
|
47
24
|
it 'forms the proper request to the API' do
|
48
25
|
request_args = [
|
@@ -171,7 +148,7 @@ describe WorkOS::DirectorySync do
|
|
171
148
|
expect do
|
172
149
|
WorkOS::DirectorySync.get_directory(id: 'invalid')
|
173
150
|
end.to raise_error(
|
174
|
-
WorkOS::
|
151
|
+
WorkOS::NotFoundError,
|
175
152
|
"Status 404, Directory not found: 'invalid'. - request ID: ",
|
176
153
|
)
|
177
154
|
end
|
@@ -185,7 +162,7 @@ describe WorkOS::DirectorySync do
|
|
185
162
|
VCR.use_cassette('directory_sync/list_groups/with_no_options') do
|
186
163
|
expect do
|
187
164
|
WorkOS::DirectorySync.list_groups
|
188
|
-
end.to raise_error(WorkOS::
|
165
|
+
end.to raise_error(WorkOS::UnprocessableEntityError)
|
189
166
|
end
|
190
167
|
end
|
191
168
|
end
|
@@ -319,7 +296,7 @@ describe WorkOS::DirectorySync do
|
|
319
296
|
VCR.use_cassette('directory_sync/list_users/with_no_options') do
|
320
297
|
expect do
|
321
298
|
WorkOS::DirectorySync.list_users
|
322
|
-
end.to raise_error(WorkOS::
|
299
|
+
end.to raise_error(WorkOS::UnprocessableEntityError)
|
323
300
|
end
|
324
301
|
end
|
325
302
|
end
|
@@ -471,7 +448,7 @@ describe WorkOS::DirectorySync do
|
|
471
448
|
VCR.use_cassette('directory_sync/get_group_with_invalid_id') do
|
472
449
|
expect do
|
473
450
|
WorkOS::DirectorySync.get_group('invalid')
|
474
|
-
end.to raise_error(WorkOS::
|
451
|
+
end.to raise_error(WorkOS:: NotFoundError)
|
475
452
|
end
|
476
453
|
end
|
477
454
|
end
|
@@ -498,7 +475,7 @@ describe WorkOS::DirectorySync do
|
|
498
475
|
VCR.use_cassette('directory_sync/get_user_with_invalid_id') do
|
499
476
|
expect do
|
500
477
|
WorkOS::DirectorySync.get_user('invalid')
|
501
|
-
end.to raise_error(WorkOS::
|
478
|
+
end.to raise_error(WorkOS::NotFoundError)
|
502
479
|
end
|
503
480
|
end
|
504
481
|
end
|
@@ -5,16 +5,11 @@ describe WorkOS::Events do
|
|
5
5
|
|
6
6
|
describe '.list_events' do
|
7
7
|
context 'with no options' do
|
8
|
-
it '
|
9
|
-
expected_metadata = {
|
10
|
-
'after' => nil,
|
11
|
-
}
|
12
|
-
|
8
|
+
it 'raises ArgumentError' do
|
13
9
|
VCR.use_cassette 'events/list_events_with_no_options' do
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
expect(events.list_metadata).to eq(expected_metadata)
|
10
|
+
expect do
|
11
|
+
described_class.list_events
|
12
|
+
end.to raise_error(ArgumentError)
|
18
13
|
end
|
19
14
|
end
|
20
15
|
end
|
@@ -44,7 +39,7 @@ describe WorkOS::Events do
|
|
44
39
|
context 'with the after option' do
|
45
40
|
it 'forms the proper request to the API' do
|
46
41
|
request_args = [
|
47
|
-
'/events?after=event_01FGCPNV312FHFRCX0BYWHVSE1',
|
42
|
+
'/events?after=event_01FGCPNV312FHFRCX0BYWHVSE1&events=dsync.user.created',
|
48
43
|
'Content-Type' => 'application/json'
|
49
44
|
]
|
50
45
|
|
@@ -54,7 +49,10 @@ describe WorkOS::Events do
|
|
54
49
|
and_return(expected_request)
|
55
50
|
|
56
51
|
VCR.use_cassette 'events/list_events_with_after' do
|
57
|
-
events = described_class.list_events(
|
52
|
+
events = described_class.list_events(
|
53
|
+
after: 'event_01FGCPNV312FHFRCX0BYWHVSE1',
|
54
|
+
events: ['dsync.user.created'],
|
55
|
+
)
|
58
56
|
|
59
57
|
expect(events.data.size).to eq(1)
|
60
58
|
end
|
@@ -64,7 +62,7 @@ describe WorkOS::Events do
|
|
64
62
|
context 'with the range_start and range_end options' do
|
65
63
|
it 'forms the proper request to the API' do
|
66
64
|
request_args = [
|
67
|
-
'/events?range_start=2023-01-01T00%3A00%3A00Z&range_end=2023-01-03T00%3A00%3A00Z',
|
65
|
+
'/events?events=dsync.user.created&range_start=2023-01-01T00%3A00%3A00Z&range_end=2023-01-03T00%3A00%3A00Z',
|
68
66
|
'Content-Type' => 'application/json'
|
69
67
|
]
|
70
68
|
|
@@ -75,6 +73,7 @@ describe WorkOS::Events do
|
|
75
73
|
|
76
74
|
VCR.use_cassette 'events/list_events_with_range' do
|
77
75
|
events = described_class.list_events(
|
76
|
+
events: ['dsync.user.created'],
|
78
77
|
range_start: '2023-01-01T00:00:00Z',
|
79
78
|
range_end: '2023-01-03T00:00:00Z',
|
80
79
|
)
|
@@ -87,7 +86,7 @@ describe WorkOS::Events do
|
|
87
86
|
context 'with the organization_id option' do
|
88
87
|
it 'forms the proper request to the API' do
|
89
88
|
request_args = [
|
90
|
-
'/events?organization_id=org_1234',
|
89
|
+
'/events?events=dsync.user.created&organization_id=org_1234',
|
91
90
|
'Content-Type' => 'application/json'
|
92
91
|
]
|
93
92
|
|
@@ -98,6 +97,7 @@ describe WorkOS::Events do
|
|
98
97
|
|
99
98
|
VCR.use_cassette 'events/list_events_with_organization_id' do
|
100
99
|
events = described_class.list_events(
|
100
|
+
events: ['dsync.user.created'],
|
101
101
|
organization_id: 'org_1234',
|
102
102
|
)
|
103
103
|
|
data/spec/lib/workos/mfa_spec.rb
CHANGED
@@ -188,7 +188,7 @@ describe WorkOS::MFA do
|
|
188
188
|
authentication_challenge_id: 'auth_challenge_01FZ4YVRBMXP5ZM0A7BP4AJ12J',
|
189
189
|
code: '897792',
|
190
190
|
)
|
191
|
-
end.to raise_error(WorkOS::
|
191
|
+
end.to raise_error(WorkOS::UnprocessableEntityError)
|
192
192
|
end
|
193
193
|
end
|
194
194
|
end
|
@@ -201,7 +201,7 @@ describe WorkOS::MFA do
|
|
201
201
|
authentication_challenge_id: 'auth_challenge_01FZ4YVRBMXP5ZM0A7BP4AJ12J',
|
202
202
|
code: '897792',
|
203
203
|
)
|
204
|
-
end.to raise_error(WorkOS::
|
204
|
+
end.to raise_error(WorkOS::UnprocessableEntityError)
|
205
205
|
end
|
206
206
|
end
|
207
207
|
end
|
@@ -264,7 +264,7 @@ describe WorkOS::MFA do
|
|
264
264
|
described_class.get_factor(
|
265
265
|
id: 'auth_factor_invalid',
|
266
266
|
)
|
267
|
-
end.to raise_error(WorkOS::
|
267
|
+
end.to raise_error(WorkOS::NotFoundError)
|
268
268
|
end
|
269
269
|
end
|
270
270
|
end
|
@@ -257,7 +257,7 @@ describe WorkOS::Organizations do
|
|
257
257
|
expect do
|
258
258
|
described_class.get_organization(id: 'invalid')
|
259
259
|
end.to raise_error(
|
260
|
-
WorkOS::
|
260
|
+
WorkOS::NotFoundError,
|
261
261
|
'Status 404, Not Found - request ID: ',
|
262
262
|
)
|
263
263
|
end
|
@@ -302,7 +302,7 @@ describe WorkOS::Organizations do
|
|
302
302
|
expect do
|
303
303
|
described_class.delete_organization(id: 'invalid')
|
304
304
|
end.to raise_error(
|
305
|
-
WorkOS::
|
305
|
+
WorkOS::NotFoundError,
|
306
306
|
'Status 404, Not Found - request ID: ',
|
307
307
|
)
|
308
308
|
end
|
@@ -32,7 +32,7 @@ describe WorkOS::Passwordless do
|
|
32
32
|
expect do
|
33
33
|
described_class.create_session(invalid_options)
|
34
34
|
end.to raise_error(
|
35
|
-
WorkOS::
|
35
|
+
WorkOS::UnprocessableEntityError,
|
36
36
|
/Status 422, Validation failed \(email: email must be a string; type: type must be a valid enum value\)/,
|
37
37
|
)
|
38
38
|
end
|
@@ -66,7 +66,7 @@ describe WorkOS::Passwordless do
|
|
66
66
|
expect do
|
67
67
|
described_class.send_session('session_123')
|
68
68
|
end.to raise_error(
|
69
|
-
WorkOS::
|
69
|
+
WorkOS::UnprocessableEntityError,
|
70
70
|
/Status 422, The passwordless session 'session_123' has expired or is invalid./,
|
71
71
|
)
|
72
72
|
end
|
data/spec/lib/workos/sso_spec.rb
CHANGED
@@ -618,7 +618,7 @@ describe WorkOS::SSO do
|
|
618
618
|
expect do
|
619
619
|
WorkOS::SSO.get_connection(id: 'invalid')
|
620
620
|
end.to raise_error(
|
621
|
-
WorkOS::
|
621
|
+
WorkOS::NotFoundError,
|
622
622
|
'Status 404, Not Found - request ID: ',
|
623
623
|
)
|
624
624
|
end
|
@@ -645,7 +645,7 @@ describe WorkOS::SSO do
|
|
645
645
|
expect do
|
646
646
|
WorkOS::SSO.delete_connection(id: 'invalid')
|
647
647
|
end.to raise_error(
|
648
|
-
WorkOS::
|
648
|
+
WorkOS::NotFoundError,
|
649
649
|
'Status 404, Not Found - request ID: ',
|
650
650
|
)
|
651
651
|
end
|
@@ -312,7 +312,7 @@ describe WorkOS::UserManagement do
|
|
312
312
|
expect do
|
313
313
|
described_class.create_user(email: '')
|
314
314
|
end.to raise_error(
|
315
|
-
WorkOS::
|
315
|
+
WorkOS::UnprocessableEntityError,
|
316
316
|
/email_string_required/,
|
317
317
|
)
|
318
318
|
end
|
@@ -342,7 +342,7 @@ describe WorkOS::UserManagement do
|
|
342
342
|
VCR.use_cassette 'user_management/update_user/invalid' do
|
343
343
|
expect do
|
344
344
|
described_class.update_user(id: 'invalid')
|
345
|
-
end.to raise_error(WorkOS::
|
345
|
+
end.to raise_error(WorkOS::NotFoundError, /User not found/)
|
346
346
|
end
|
347
347
|
end
|
348
348
|
end
|
@@ -367,7 +367,7 @@ describe WorkOS::UserManagement do
|
|
367
367
|
VCR.use_cassette('user_management/delete_user/invalid') do
|
368
368
|
expect do
|
369
369
|
WorkOS::UserManagement.delete_user(id: 'invalid')
|
370
|
-
end.to raise_error(WorkOS::
|
370
|
+
end.to raise_error(WorkOS::NotFoundError, /User not found/)
|
371
371
|
end
|
372
372
|
end
|
373
373
|
end
|
@@ -400,7 +400,7 @@ describe WorkOS::UserManagement do
|
|
400
400
|
ip_address: '200.240.210.16',
|
401
401
|
user_agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/108.0.0.0 Safari/537.36',
|
402
402
|
)
|
403
|
-
end.to raise_error(WorkOS::
|
403
|
+
end.to raise_error(WorkOS::NotFoundError, /User not found/)
|
404
404
|
end
|
405
405
|
end
|
406
406
|
end
|
@@ -512,7 +512,7 @@ describe WorkOS::UserManagement do
|
|
512
512
|
client_id: 'client_123',
|
513
513
|
email: 'test@workos.com',
|
514
514
|
)
|
515
|
-
end.to raise_error(WorkOS::
|
515
|
+
end.to raise_error(WorkOS::NotFoundError, /User not found/)
|
516
516
|
end
|
517
517
|
end
|
518
518
|
end
|
@@ -637,7 +637,7 @@ describe WorkOS::UserManagement do
|
|
637
637
|
VCR.use_cassette('user_management/get_magic_auth/invalid') do
|
638
638
|
expect do
|
639
639
|
WorkOS::UserManagement.get_magic_auth(id: 'invalid')
|
640
|
-
end.to raise_error(WorkOS::
|
640
|
+
end.to raise_error(WorkOS::NotFoundError, /MagicAuth not found/)
|
641
641
|
end
|
642
642
|
end
|
643
643
|
end
|
@@ -756,7 +756,7 @@ describe WorkOS::UserManagement do
|
|
756
756
|
VCR.use_cassette('user_management/get_email_verification/invalid') do
|
757
757
|
expect do
|
758
758
|
WorkOS::UserManagement.get_email_verification(id: 'invalid')
|
759
|
-
end.to raise_error(WorkOS::
|
759
|
+
end.to raise_error(WorkOS::NotFoundError, /Email Verification not found/)
|
760
760
|
end
|
761
761
|
end
|
762
762
|
end
|
@@ -781,7 +781,7 @@ describe WorkOS::UserManagement do
|
|
781
781
|
described_class.send_verification_email(
|
782
782
|
user_id: 'bad_id',
|
783
783
|
)
|
784
|
-
end.to raise_error(WorkOS::
|
784
|
+
end.to raise_error(WorkOS::NotFoundError, /User not found/)
|
785
785
|
end
|
786
786
|
end
|
787
787
|
end
|
@@ -810,7 +810,7 @@ describe WorkOS::UserManagement do
|
|
810
810
|
code: '659770',
|
811
811
|
user_id: 'bad_id',
|
812
812
|
)
|
813
|
-
end.to raise_error(WorkOS::
|
813
|
+
end.to raise_error(WorkOS::NotFoundError, /User not found/)
|
814
814
|
end
|
815
815
|
end
|
816
816
|
end
|
@@ -849,7 +849,7 @@ describe WorkOS::UserManagement do
|
|
849
849
|
VCR.use_cassette('user_management/get_password_reset/invalid') do
|
850
850
|
expect do
|
851
851
|
WorkOS::UserManagement.get_password_reset(id: 'invalid')
|
852
|
-
end.to raise_error(WorkOS::
|
852
|
+
end.to raise_error(WorkOS::NotFoundError, /Password Reset not found/)
|
853
853
|
end
|
854
854
|
end
|
855
855
|
end
|
@@ -893,7 +893,7 @@ describe WorkOS::UserManagement do
|
|
893
893
|
password_reset_url: '',
|
894
894
|
)
|
895
895
|
end.to raise_error(
|
896
|
-
WorkOS::
|
896
|
+
WorkOS::UnprocessableEntityError,
|
897
897
|
/password_reset_url_string_required/,
|
898
898
|
)
|
899
899
|
end
|
@@ -924,7 +924,7 @@ describe WorkOS::UserManagement do
|
|
924
924
|
new_password: 'new_password',
|
925
925
|
)
|
926
926
|
end.to raise_error(
|
927
|
-
WorkOS::
|
927
|
+
WorkOS::NotFoundError,
|
928
928
|
/Could not locate user with provided token/,
|
929
929
|
)
|
930
930
|
end
|
@@ -1048,7 +1048,7 @@ describe WorkOS::UserManagement do
|
|
1048
1048
|
expect do
|
1049
1049
|
described_class.create_organization_membership(user_id: '', organization_id: '')
|
1050
1050
|
end.to raise_error(
|
1051
|
-
WorkOS::
|
1051
|
+
WorkOS::UnprocessableEntityError,
|
1052
1052
|
/user_id_string_required/,
|
1053
1053
|
)
|
1054
1054
|
end
|
@@ -1075,7 +1075,7 @@ describe WorkOS::UserManagement do
|
|
1075
1075
|
VCR.use_cassette('user_management/delete_organization_membership/invalid') do
|
1076
1076
|
expect do
|
1077
1077
|
WorkOS::UserManagement.delete_organization_membership(id: 'invalid')
|
1078
|
-
end.to raise_error(WorkOS::
|
1078
|
+
end.to raise_error(WorkOS::NotFoundError, /Organization Membership not found/)
|
1079
1079
|
end
|
1080
1080
|
end
|
1081
1081
|
end
|
@@ -1150,7 +1150,7 @@ describe WorkOS::UserManagement do
|
|
1150
1150
|
VCR.use_cassette('user_management/get_invitation/invalid') do
|
1151
1151
|
expect do
|
1152
1152
|
WorkOS::UserManagement.get_invitation(id: 'invalid')
|
1153
|
-
end.to raise_error(WorkOS::
|
1153
|
+
end.to raise_error(WorkOS::NotFoundError, /Invitation not found/)
|
1154
1154
|
end
|
1155
1155
|
end
|
1156
1156
|
end
|
@@ -1175,7 +1175,7 @@ describe WorkOS::UserManagement do
|
|
1175
1175
|
VCR.use_cassette('user_management/find_invitation_by_token/invalid') do
|
1176
1176
|
expect do
|
1177
1177
|
WorkOS::UserManagement.find_invitation_by_token(token: 'invalid')
|
1178
|
-
end.to raise_error(WorkOS::
|
1178
|
+
end.to raise_error(WorkOS::NotFoundError, /Invitation not found/)
|
1179
1179
|
end
|
1180
1180
|
end
|
1181
1181
|
end
|
@@ -1346,7 +1346,7 @@ describe WorkOS::UserManagement do
|
|
1346
1346
|
id: 'invalid_id',
|
1347
1347
|
)
|
1348
1348
|
end.to raise_error(
|
1349
|
-
WorkOS::
|
1349
|
+
WorkOS::NotFoundError,
|
1350
1350
|
/Invitation not found/,
|
1351
1351
|
)
|
1352
1352
|
end
|
@@ -1375,7 +1375,7 @@ describe WorkOS::UserManagement do
|
|
1375
1375
|
session_id: 'session_01H5JQDV7R7ATEYZDEG0W5PRYS',
|
1376
1376
|
)
|
1377
1377
|
end.to raise_error(
|
1378
|
-
WorkOS::
|
1378
|
+
WorkOS::NotFoundError,
|
1379
1379
|
/Session not found/,
|
1380
1380
|
)
|
1381
1381
|
end
|
@@ -1,66 +1,66 @@
|
|
1
1
|
---
|
2
2
|
http_interactions:
|
3
|
-
- request:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.workos.com/audit_logs/events
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{}'
|
9
|
+
headers:
|
10
|
+
Content-Type:
|
11
|
+
- application/json
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- '*/*'
|
16
|
+
User-Agent:
|
17
|
+
- WorkOS; ruby/2.6.5; x86_64-darwin19; v0.1.0
|
18
|
+
Authorization:
|
19
|
+
- 'Bearer '
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 401
|
23
|
+
message: Unauthorized
|
24
|
+
headers:
|
25
|
+
Server:
|
26
|
+
- Cowboy
|
27
|
+
Connection:
|
28
|
+
- keep-alive
|
29
|
+
Access-Control-Allow-Origin:
|
30
|
+
- https://dashboard.workos-test.com
|
31
|
+
Vary:
|
32
|
+
- Origin, Accept-Encoding
|
33
|
+
Access-Control-Allow-Credentials:
|
34
|
+
- 'true'
|
35
|
+
X-Dns-Prefetch-Control:
|
36
|
+
- 'off'
|
37
|
+
X-Frame-Options:
|
38
|
+
- SAMEORIGIN
|
39
|
+
Strict-Transport-Security:
|
40
|
+
- max-age=15552000; includeSubDomains
|
41
|
+
X-Download-Options:
|
42
|
+
- noopen
|
43
|
+
X-Content-Type-Options:
|
44
|
+
- nosniff
|
45
|
+
X-Xss-Protection:
|
46
|
+
- 1; mode=block
|
47
|
+
X-Request-Id:
|
48
|
+
- 32a67a24-bfaf-4463-bf47-c407d54955d3
|
49
|
+
Request-Id:
|
50
|
+
- 32a67a24-bfaf-4463-bf47-c407d54955d3
|
51
|
+
Content-Type:
|
52
|
+
- application/json; charset=utf-8
|
53
|
+
Content-Length:
|
54
|
+
- '26'
|
55
|
+
Etag:
|
56
|
+
- W/"1a-pljHtlo127JYJR4E/RYOPb6ucbw"
|
57
|
+
Date:
|
58
|
+
- Sat, 11 Jan 2020 03:50:27 GMT
|
59
|
+
Via:
|
60
|
+
- 1.1 vegur
|
61
|
+
body:
|
62
|
+
encoding: UTF-8
|
63
|
+
string: '{"message":"Unauthorized"}'
|
64
|
+
http_version:
|
65
|
+
recorded_at: Sat, 11 Jan 2020 03:50:27 GMT
|
66
66
|
recorded_with: VCR 5.0.0
|
@@ -14,40 +14,42 @@ http_interactions:
|
|
14
14
|
Accept:
|
15
15
|
- "*/*"
|
16
16
|
User-Agent:
|
17
|
-
- WorkOS; ruby/
|
17
|
+
- WorkOS; ruby/3.3.0; arm64-darwin23; v4.1.0
|
18
18
|
Authorization:
|
19
19
|
- Bearer <API_KEY>
|
20
20
|
response:
|
21
21
|
status:
|
22
|
-
code:
|
23
|
-
message:
|
22
|
+
code: 400
|
23
|
+
message: Bad Request
|
24
24
|
headers:
|
25
25
|
Date:
|
26
|
-
- Thu,
|
26
|
+
- Thu, 11 Apr 2024 15:44:49 GMT
|
27
27
|
Content-Type:
|
28
28
|
- application/json; charset=utf-8
|
29
29
|
Content-Length:
|
30
|
-
- '
|
30
|
+
- '140'
|
31
31
|
Connection:
|
32
32
|
- keep-alive
|
33
|
+
Cf-Ray:
|
34
|
+
- 872c19a65dcb3af9-IAD
|
35
|
+
Cf-Cache-Status:
|
36
|
+
- DYNAMIC
|
37
|
+
Etag:
|
38
|
+
- W/"8c-3NPoweNh0oXUDzElVKxg5PG7PWk"
|
39
|
+
Strict-Transport-Security:
|
40
|
+
- max-age=15552000; includeSubDomains
|
41
|
+
Vary:
|
42
|
+
- Origin, Accept-Encoding
|
33
43
|
Access-Control-Allow-Credentials:
|
34
44
|
- 'true'
|
35
45
|
Content-Security-Policy:
|
36
46
|
- 'default-src ''self'';base-uri ''self'';block-all-mixed-content;font-src ''self''
|
37
47
|
https: data:;frame-ancestors ''self'';img-src ''self'' data:;object-src ''none'';script-src
|
38
48
|
''self'';script-src-attr ''none'';style-src ''self'' https: ''unsafe-inline'';upgrade-insecure-requests'
|
39
|
-
Etag:
|
40
|
-
- W/"680-NPvBik348v8xg6EE7iZMYwD5UXw"
|
41
49
|
Expect-Ct:
|
42
50
|
- max-age=0
|
43
51
|
Referrer-Policy:
|
44
52
|
- no-referrer
|
45
|
-
Strict-Transport-Security:
|
46
|
-
- max-age=15552000; includeSubDomains
|
47
|
-
Vary:
|
48
|
-
- Origin, Accept-Encoding
|
49
|
-
Via:
|
50
|
-
- 1.1 spaces-router (b642bf20b975)
|
51
53
|
X-Content-Type-Options:
|
52
54
|
- nosniff
|
53
55
|
X-Dns-Prefetch-Control:
|
@@ -59,22 +61,21 @@ http_interactions:
|
|
59
61
|
X-Permitted-Cross-Domain-Policies:
|
60
62
|
- none
|
61
63
|
X-Request-Id:
|
62
|
-
-
|
64
|
+
- 660c0035-b70d-4939-a0d3-2b0917535e7f
|
63
65
|
X-Xss-Protection:
|
64
66
|
- '0'
|
65
|
-
|
66
|
-
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
67
|
+
Set-Cookie:
|
68
|
+
- __cf_bm=UpBr7jsatrWLaunHA8NhaflwkUco6FBxeXhgwz2bAoM-1712850289-1.0.1.1-KJCKaoohiG088DieTdV2V91AtW1fbs7ec.x7gsal9xsVzA2OPf67b0R__57KFvEsEZ97obgydtH.VEwyYhpGTw;
|
69
|
+
path=/; expires=Thu, 11-Apr-24 16:14:49 GMT; domain=.workos.com; HttpOnly;
|
70
|
+
Secure; SameSite=None
|
71
|
+
- __cfruid=bbad8ba60df9a023f0ba77749b5c0b92162e6ed3-1712850289; path=/; domain=.workos.com;
|
72
|
+
HttpOnly; Secure; SameSite=None
|
71
73
|
Server:
|
72
74
|
- cloudflare
|
73
|
-
Cf-Ray:
|
74
|
-
- 72abbbf2b93e8ca5-EWR
|
75
75
|
body:
|
76
|
-
encoding:
|
77
|
-
string: '{"
|
76
|
+
encoding: UTF-8
|
77
|
+
string: '{"message":"One or more event names (e.g. dsync.user.created) must
|
78
|
+
be provided using the events parameter.","code":"invalid_events_request"}'
|
78
79
|
http_version:
|
79
|
-
recorded_at: Thu,
|
80
|
+
recorded_at: Thu, 11 Apr 2024 15:44:49 GMT
|
80
81
|
recorded_with: VCR 5.0.0
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://api.workos.com/events?range_end=2023-01-03T00:00:00Z&range_start=2023-01-01T00:00:00Z
|
5
|
+
uri: https://api.workos.com/events?events=dsync.user.created&range_end=2023-01-03T00:00:00Z&range_start=2023-01-01T00:00:00Z
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: workos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- WorkOS
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-06-
|
11
|
+
date: 2024-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -152,6 +152,7 @@ files:
|
|
152
152
|
- lib/workos/webhook.rb
|
153
153
|
- lib/workos/webhooks.rb
|
154
154
|
- spec/lib/workos/audit_logs_spec.rb
|
155
|
+
- spec/lib/workos/client.rb
|
155
156
|
- spec/lib/workos/configuration_spec.rb
|
156
157
|
- spec/lib/workos/directory_sync_spec.rb
|
157
158
|
- spec/lib/workos/directory_user_spec.rb
|
@@ -359,6 +360,7 @@ specification_version: 4
|
|
359
360
|
summary: API client for WorkOS
|
360
361
|
test_files:
|
361
362
|
- spec/lib/workos/audit_logs_spec.rb
|
363
|
+
- spec/lib/workos/client.rb
|
362
364
|
- spec/lib/workos/configuration_spec.rb
|
363
365
|
- spec/lib/workos/directory_sync_spec.rb
|
364
366
|
- spec/lib/workos/directory_user_spec.rb
|