workos 2.2.0 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 983d578de3e27144af8a7947eebfb770ad7ee640954511586617505c520ee657
4
- data.tar.gz: 92cb0b75234f56a1e18c47d9cb339b2f389e17463798141bc7a3a2977f5f9372
3
+ metadata.gz: 286a2f14af16bfc7b9c77e7938c2b8d7366f4a03f9fca4c7892f85f60562e433
4
+ data.tar.gz: 8970807084e7022beb9bb1523c270e645c340e42e452d7f0d7ea0d64958cf1ea
5
5
  SHA512:
6
- metadata.gz: 1143a28ee95755c80fe36aa5fba02e069143ebdb96e67f909d566bbf091928176ac29f23ccfa7764da163a248268f7a882616e0db7bd73612eda060c78cf8515
7
- data.tar.gz: a2e279f2f2427dd8089eddcc692e677d21978fdd16f3918ffe162822d116b7904f1dbc6826d151f583ba1c60cd5c0e8fbe8b825fb78212f772d7a1aa11faa6da
6
+ metadata.gz: e4d3af795ee51a5cb807fda2bdffc2217e0150ec2f4ffe51fb86daab6e376ecd240f03f1b204db2a72265ebc61d5a9c227a13924a262bb6cf7011ce9c87df177
7
+ data.tar.gz: a8977f9bff244978c9c1935e46a411e4e564a86ed51d7523780feab31212857771813190c523f64d5640f13b393ba5f5a3df3ced5729a7ad34df0cdfa3b6014e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- workos (2.2.0)
4
+ workos (2.2.1)
5
5
  sorbet-runtime (~> 0.5)
6
6
 
7
7
  GEM
@@ -60,7 +60,7 @@ GEM
60
60
  simplecov_json_formatter (0.1.2)
61
61
  sorbet (0.5.6388)
62
62
  sorbet-static (= 0.5.6388)
63
- sorbet-runtime (0.5.9300)
63
+ sorbet-runtime (0.5.9944)
64
64
  sorbet-static (0.5.6388-universal-darwin-14)
65
65
  sorbet-static (0.5.6388-universal-darwin-15)
66
66
  sorbet-static (0.5.6388-universal-darwin-16)
@@ -6,6 +6,7 @@ module WorkOS
6
6
  # a WorkOS DirectoryUser resource. This class is not meant to be instantiated
7
7
  # in DirectoryUser space, and is instantiated internally but exposed.
8
8
  class Challenge
9
+ include HashProvider
9
10
  extend T::Sig
10
11
 
11
12
  attr_accessor :id, :object, :expires_at, :code, :authentication_factor_id, :updated_at, :created_at
@@ -7,6 +7,7 @@ module WorkOS
7
7
  # in user space, and is instantiated internally but exposed.
8
8
  # Note: status is deprecated - use state instead
9
9
  class Connection
10
+ include HashProvider
10
11
  extend T::Sig
11
12
 
12
13
  attr_accessor :id, :name, :connection_type, :domains, :organization_id,
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WorkOS
4
+ # A Temporary wrapper class for a Hash, currently the base class for
5
+ # WorOS::DirectoryGroup and WorkOS::DirectoryUser. Makes all the Hash
6
+ # methods available to those classes, but will also emit a deprecation
7
+ # warning whenever any of them are used.
8
+ #
9
+ # Once we deprecate Hash compatibility, this model can be deleted.
10
+ class DeprecatedHashWrapper < Hash
11
+ (public_instance_methods - Object.methods).each do |method_name|
12
+ define_method method_name do |*args, &block|
13
+ print_deprecation_warning(method_name)
14
+ super(*args, &block)
15
+ end
16
+ end
17
+
18
+ # call the original implementation of :replace in Hash,
19
+ # so we don't show the deprecation warning
20
+ def replace_without_warning(new_hash)
21
+ method(:replace).super_method&.call(new_hash)
22
+ end
23
+
24
+ def [](attribute_name)
25
+ usage = "#{object_name}.#{attribute_name}"
26
+ warning_message = "WARNING: The Hash style access for #{class_name} attributes is deprecated
27
+ and will be removed in a future version. Please use `#{usage}` or equivalent accessor.\n"
28
+
29
+ print_deprecation_warning('[]', warning_message)
30
+
31
+ super(attribute_name.to_sym)
32
+ end
33
+
34
+ private
35
+
36
+ def deprecation_warning(method_name)
37
+ usage = "#{object_name}.to_h.#{method_name}"
38
+
39
+ "WARNING: Hash compatibility for #{class_name} is deprecated and will be removed
40
+ in a future version. Please use `#{usage}` to access methods on the attribute Hash object.\n"
41
+ end
42
+
43
+ def print_deprecation_warning(method_name, warning_message = deprecation_warning(method_name))
44
+ if RUBY_VERSION > '3'
45
+ warn warning_message, category: :deprecated
46
+ else
47
+ warn warning_message
48
+ end
49
+ end
50
+
51
+ def class_name
52
+ self.class.name
53
+ end
54
+
55
+ # We want to do class_name.demodulize.underscore here, but that's not available in Ruby 1.9, so
56
+ # implementing the demodulize and underscore methods here.
57
+ def object_name
58
+ i = class_name.rindex('::')
59
+ object_name = i ? class_name[(i + 2)..-1] : class_name
60
+ underscore(object_name)
61
+ end
62
+
63
+ def underscore(camel_cased_word)
64
+ return camel_cased_word.to_s unless /[A-Z-]|::/.match?(camel_cased_word)
65
+
66
+ word = camel_cased_word.to_s.gsub('::', '/')
67
+ word.gsub!(/(?:(?<=([A-Za-z\d]))|\b)((?=a)b)(?=\b|[^a-z])/) do
68
+ "#{Regexp.last_match(1) && '_'}#{Regexp.last_match(2).downcase}"
69
+ end
70
+ word.gsub!(/([A-Z]+)(?=[A-Z][a-z])|([a-z\d])(?=[A-Z])/) { (Regexp.last_match(1) || Regexp.last_match(2)) << '_' }
71
+ word.tr!('-', '_')
72
+ word.downcase!
73
+ word
74
+ end
75
+ end
76
+ end
@@ -6,6 +6,7 @@ module WorkOS
6
6
  # a WorkOS Directory resource. This class is not meant to be instantiated
7
7
  # in user space, and is instantiated internally but exposed.
8
8
  class Directory
9
+ include HashProvider
9
10
  extend T::Sig
10
11
 
11
12
  attr_accessor :id, :domain, :name, :type, :state, :organization_id, :created_at, :updated_at
@@ -5,10 +5,11 @@ module WorkOS
5
5
  # The DirectoryGroup class provides a lightweight wrapper around
6
6
  # a WorkOS DirectoryGroup resource. This class is not meant to be instantiated
7
7
  # in user space, and is instantiated internally but exposed.
8
- class DirectoryGroup
8
+ class DirectoryGroup < DeprecatedHashWrapper
9
+ include HashProvider
9
10
  extend T::Sig
10
11
 
11
- attr_accessor :id, :name
12
+ attr_accessor :id, :name, :custom_attributes, :raw_attributes
12
13
 
13
14
  sig { params(json: String).void }
14
15
  def initialize(json)
@@ -16,6 +17,8 @@ module WorkOS
16
17
 
17
18
  @id = T.let(raw.id, String)
18
19
  @name = T.let(raw.name, String)
20
+
21
+ replace_without_warning(to_json)
19
22
  end
20
23
 
21
24
  def to_json(*)
@@ -96,7 +96,7 @@ module WorkOS
96
96
  # @option options [String] after Pagination cursor to receive records
97
97
  # before a provided Directory Group ID.
98
98
  #
99
- # @return [Hash]
99
+ # @return [WorkOS::DirectoryGroup]
100
100
  sig do
101
101
  params(
102
102
  options: T::Hash[Symbol, String],
@@ -135,7 +135,7 @@ module WorkOS
135
135
  # @option options [String] after Pagination cursor to receive records
136
136
  # before a provided Directory User ID.
137
137
  #
138
- # @return [Hash]
138
+ # @return [WorkOS::DirectoryUser]
139
139
  sig do
140
140
  params(
141
141
  options: T::Hash[Symbol, String],
@@ -165,8 +165,8 @@ module WorkOS
165
165
  #
166
166
  # @param [String] id The ID of the directory group.
167
167
  #
168
- # @return Hash
169
- sig { params(id: String).returns(T::Hash[String, T.untyped]) }
168
+ # @return WorkOS::DirectoryGroup
169
+ sig { params(id: String).returns(WorkOS::DirectoryGroup) }
170
170
  def get_group(id)
171
171
  response = execute_request(
172
172
  request: get_request(
@@ -175,15 +175,15 @@ module WorkOS
175
175
  ),
176
176
  )
177
177
 
178
- JSON.parse(response.body)
178
+ ::WorkOS::DirectoryGroup.new(response.body)
179
179
  end
180
180
 
181
181
  # Retrieve the directory user with the given ID.
182
182
  #
183
183
  # @param [String] id The ID of the directory user.
184
184
  #
185
- # @return Hash
186
- sig { params(id: String).returns(T::Hash[String, T.untyped]) }
185
+ # @return WorkOS::DirectoryUser
186
+ sig { params(id: String).returns(WorkOS::DirectoryUser) }
187
187
  def get_user(id)
188
188
  response = execute_request(
189
189
  request: get_request(
@@ -192,7 +192,7 @@ module WorkOS
192
192
  ),
193
193
  )
194
194
 
195
- JSON.parse(response.body)
195
+ ::WorkOS::DirectoryUser.new(response.body)
196
196
  end
197
197
 
198
198
  # Delete the directory with the given ID.
@@ -5,7 +5,8 @@ module WorkOS
5
5
  # The DirectoryUser class provides a lightweight wrapper around
6
6
  # a WorkOS DirectoryUser resource. This class is not meant to be instantiated
7
7
  # in DirectoryUser space, and is instantiated internally but exposed.
8
- class DirectoryUser
8
+ class DirectoryUser < DeprecatedHashWrapper
9
+ include HashProvider
9
10
  extend T::Sig
10
11
 
11
12
  attr_accessor :id, :idp_id, :emails, :first_name, :last_name, :username, :state,
@@ -26,6 +27,8 @@ module WorkOS
26
27
  @groups = T.let(raw.groups, Array)
27
28
  @custom_attributes = raw.custom_attributes
28
29
  @raw_attributes = raw.raw_attributes
30
+
31
+ replace_without_warning(to_json)
29
32
  end
30
33
  # rubocop:enable Metrics/AbcSize
31
34
 
data/lib/workos/factor.rb CHANGED
@@ -6,6 +6,7 @@ module WorkOS
6
6
  # a WorkOS DirectoryUser resource. This class is not meant to be instantiated
7
7
  # in DirectoryUser space, and is instantiated internally but exposed.
8
8
  class Factor
9
+ include HashProvider
9
10
  # rubocop:disable Metrics/AbcSize
10
11
  extend T::Sig
11
12
  attr_accessor :id, :environment_id, :object, :type, :sms, :totp, :updated_at, :created_at
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+ # typed: true
3
+
4
+ module WorkOS
5
+ # Module to include an explicit method for converting a model into a Hash containing
6
+ # its attributes. Default implementation will simply call to_json. Individual classes
7
+ # may override.
8
+ module HashProvider
9
+ include Kernel
10
+
11
+ def to_json(*)
12
+ raise 'Must be implemented by including class.'
13
+ end
14
+
15
+ def to_h
16
+ to_json
17
+ end
18
+ end
19
+ end
@@ -6,6 +6,7 @@ module WorkOS
6
6
  # a WorkOS Organization resource. This class is not meant to be instantiated
7
7
  # in user space, and is instantiated internally but exposed.
8
8
  class Organization
9
+ include HashProvider
9
10
  extend T::Sig
10
11
 
11
12
  attr_accessor :id, :domains, :name, :allow_profiles_outside_organization, :created_at, :updated_at
@@ -8,6 +8,7 @@ module WorkOS
8
8
  # is not meant to be instantiated in user space, and
9
9
  # is instantiated internally but exposed.
10
10
  class Profile
11
+ include HashProvider
11
12
  extend T::Sig
12
13
 
13
14
  sig { returns(String) }
@@ -6,6 +6,7 @@ module WorkOS
6
6
  # Access Token. This class is not meant to be instantiated in user space, and
7
7
  # is instantiated internally but exposed.
8
8
  class ProfileAndToken
9
+ include HashProvider
9
10
  extend T::Sig
10
11
 
11
12
  attr_accessor :access_token, :profile
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
  # typed: strict
3
3
 
4
+ require 'date'
5
+
4
6
  module WorkOS
5
7
  module Types
6
8
  # This PasswordlessSessionStruct acts as a typed interface
@@ -7,9 +7,7 @@ module WorkOS
7
7
  # for the Factor class
8
8
  class VerifyFactorStruct < T::Struct
9
9
  const :challenge, T.nilable(T::Hash[Symbol, Object])
10
- const :valid, T.nilable(TrueClass)
11
- const :code, T.nilable(String)
12
- const :message, T.nilable(String)
10
+ const :valid, T::Boolean
13
11
  end
14
12
  end
15
13
  end
@@ -6,6 +6,7 @@ module WorkOS
6
6
  # a WorkOS DirectoryUser resource. This class is not meant to be instantiated
7
7
  # in DirectoryUser space, and is instantiated internally but exposed.
8
8
  class VerifyFactor
9
+ include HashProvider
9
10
  extend T::Sig
10
11
 
11
12
  attr_accessor :challenge, :valid
@@ -2,5 +2,5 @@
2
2
  # typed: strong
3
3
 
4
4
  module WorkOS
5
- VERSION = '2.2.0'
5
+ VERSION = '2.2.1'
6
6
  end
@@ -6,6 +6,7 @@ module WorkOS
6
6
  # a WorkOS Webhook resource. This class is not meant to be instantiated
7
7
  # in user space, and is instantiated internally but exposed.
8
8
  class Webhook
9
+ include HashProvider
9
10
  extend T::Sig
10
11
 
11
12
  attr_accessor :id, :event, :data
data/lib/workos.rb CHANGED
@@ -4,6 +4,7 @@
4
4
  require 'workos/version'
5
5
  require 'sorbet-runtime'
6
6
  require 'json'
7
+ require 'workos/hash_provider'
7
8
 
8
9
  # Use the WorkOS module to authenticate your
9
10
  # requests to the WorkOS API. The gem will read
@@ -48,6 +49,7 @@ module WorkOS
48
49
  autoload :Factor, 'workos/factor'
49
50
  autoload :Challenge, 'workos/challenge'
50
51
  autoload :VerifyFactor, 'workos/verify_factor'
52
+ autoload :DeprecatedHashWrapper, 'workos/deprecated_hash_wrapper'
51
53
 
52
54
 
53
55
  # Errors
@@ -204,6 +204,7 @@ describe WorkOS::DirectorySync do
204
204
  )
205
205
 
206
206
  expect(groups.data.size).to eq(10)
207
+ expect(groups.data[0].name).to eq(groups.data[0]['name'])
207
208
  end
208
209
  end
209
210
  end
@@ -332,6 +333,7 @@ describe WorkOS::DirectorySync do
332
333
  )
333
334
 
334
335
  expect(users.data.size).to eq(4)
336
+ expect(users.data[0].first_name).to eq(users.data[0]['first_name'])
335
337
  end
336
338
  end
337
339
  end
@@ -440,6 +442,7 @@ describe WorkOS::DirectorySync do
440
442
  )
441
443
 
442
444
  expect(group['name']).to eq('Walrus')
445
+ expect(group.name).to eq('Walrus')
443
446
  end
444
447
  end
445
448
  end
@@ -464,6 +467,7 @@ describe WorkOS::DirectorySync do
464
467
  )
465
468
 
466
469
  expect(user['first_name']).to eq('Logan')
470
+ expect(user.first_name).to eq('Logan')
467
471
  end
468
472
  end
469
473
  end
@@ -3,6 +3,7 @@
3
3
 
4
4
  describe WorkOS::MFA do
5
5
  it_behaves_like 'client'
6
+
6
7
  describe 'enroll_factor valid requests' do
7
8
  context 'enroll factor using valid generic argument' do
8
9
  it 'returns a valid factor object' do
@@ -14,6 +15,7 @@ describe WorkOS::MFA do
14
15
  end
15
16
  end
16
17
  end
18
+
17
19
  context 'enroll factor using valid totp arguments' do
18
20
  it 'returns a valid factor object' do
19
21
  VCR.use_cassette 'mfa/enroll_factor_totp_valid' do
@@ -26,6 +28,7 @@ describe WorkOS::MFA do
26
28
  end
27
29
  end
28
30
  end
31
+
29
32
  context 'enroll factor using valid sms arguments' do
30
33
  it 'returns a valid factor object' do
31
34
  VCR.use_cassette 'mfa/enroll_factor_sms_valid' do
@@ -38,6 +41,7 @@ describe WorkOS::MFA do
38
41
  end
39
42
  end
40
43
  end
44
+
41
45
  describe 'enroll_factor invalid responses' do
42
46
  context 'enroll factor throws error if type is not sms or totp' do
43
47
  it 'returns an error' do
@@ -52,6 +56,7 @@ describe WorkOS::MFA do
52
56
  )
53
57
  end
54
58
  end
59
+
55
60
  context 'enroll factor throws error if type is not sms or totp' do
56
61
  it 'returns an error' do
57
62
  expect do
@@ -78,6 +83,7 @@ describe WorkOS::MFA do
78
83
  end
79
84
  end
80
85
  end
86
+
81
87
  describe 'challenge factor with valid request arguments' do
82
88
  context 'challenge with totp' do
83
89
  it 'returns challenge factor object for totp' do
@@ -89,6 +95,7 @@ describe WorkOS::MFA do
89
95
  end
90
96
  end
91
97
  end
98
+
92
99
  context 'challenge with sms' do
93
100
  it 'returns a challenge factor object for sms' do
94
101
  VCR.use_cassette 'mfa/challenge_factor_sms_valid' do
@@ -100,6 +107,7 @@ describe WorkOS::MFA do
100
107
  end
101
108
  end
102
109
  end
110
+
103
111
  context 'challenge with generic' do
104
112
  it 'returns a valid challenge factor object for generic otp' do
105
113
  VCR.use_cassette 'mfa/challenge_factor_generic_valid' do
@@ -111,6 +119,7 @@ describe WorkOS::MFA do
111
119
  end
112
120
  end
113
121
  end
122
+
114
123
  describe 'challenge factor with invalid arguments' do
115
124
  context 'challenge with totp mssing authentication_factor_id' do
116
125
  it 'returns argument error' do
@@ -123,6 +132,7 @@ describe WorkOS::MFA do
123
132
  end
124
133
  end
125
134
  end
135
+
126
136
  describe 'challenge factor with valid requests' do
127
137
  context 'verify generic otp' do
128
138
  it 'returns a true boolean if the challenge has not been verifed yet' do
@@ -135,6 +145,19 @@ describe WorkOS::MFA do
135
145
  end
136
146
  end
137
147
  end
148
+
149
+ context 'verify generic otp invalid response' do
150
+ it 'returns a true boolean if the challenge has not been verifed yet' do
151
+ VCR.use_cassette 'mfa/verify_factor_generic_valid_is_false' do
152
+ verify_factor = described_class.verify_factor(
153
+ authentication_challenge_id: 'auth_challenge_01FZ4YVRBMXP5ZM0A7BP4AJ12J',
154
+ code: '897792',
155
+ )
156
+ expect(verify_factor.valid == 'false')
157
+ end
158
+ end
159
+ end
160
+
138
161
  context 'verify generic otp' do
139
162
  it 'returns error that the challenge has already been verfied' do
140
163
  VCR.use_cassette 'mfa/verify_factor_generic_invalid' do
@@ -146,6 +169,7 @@ describe WorkOS::MFA do
146
169
  end.to raise_error(WorkOS::InvalidRequestError)
147
170
  end
148
171
  end
172
+
149
173
  context 'verify generic otp' do
150
174
  it 'returns error that the challenge has expired' do
151
175
  VCR.use_cassette 'mfa/verify_factor_generic_expired' do
@@ -160,6 +184,7 @@ describe WorkOS::MFA do
160
184
  end
161
185
  end
162
186
  end
187
+
163
188
  describe 'verify_factor with invalid argument' do
164
189
  context 'missing code argument' do
165
190
  it 'returns argument error' do
@@ -173,8 +198,9 @@ describe WorkOS::MFA do
173
198
  )
174
199
  end
175
200
  end
201
+
176
202
  context 'missing authentication_challenge_id argument' do
177
- it '' do
203
+ it 'returns and error' do
178
204
  expect do
179
205
  described_class.verify_factor(
180
206
  code: '897792',
@@ -185,6 +211,7 @@ describe WorkOS::MFA do
185
211
  )
186
212
  end
187
213
  end
214
+
188
215
  context 'missing code and authentication_challenge_id arguments' do
189
216
  it 'returns argument error' do
190
217
  expect do
@@ -196,6 +223,7 @@ describe WorkOS::MFA do
196
223
  end
197
224
  end
198
225
  end
226
+
199
227
  describe 'tests returning and deleting a factor' do
200
228
  context 'returns a factor' do
201
229
  it 'uses get_factor to return factor' do
@@ -207,6 +235,7 @@ describe WorkOS::MFA do
207
235
  end
208
236
  end
209
237
  end
238
+
210
239
  context 'invalid factor request' do
211
240
  it 'uses get_factor and throws error if id is wrong' do
212
241
  VCR.use_cassette 'mfa/get_factor_invalid' do
@@ -218,6 +247,7 @@ describe WorkOS::MFA do
218
247
  end
219
248
  end
220
249
  end
250
+
221
251
  context 'deletes facotr' do
222
252
  it 'uses delete_factor to delete factor' do
223
253
  VCR.use_cassette 'mfa/delete_factor' do
@@ -0,0 +1,82 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.workos.com/auth/factors/verify
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"authentication_challenge_id":"auth_challenge_01FZ4YVRBMXP5ZM0A7BP4AJ12J","code":"897792"}'
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/3.0.2; arm64-darwin21; v2.1.1
18
+ Authorization:
19
+ - Bearer <API_KEY>
20
+ response:
21
+ status:
22
+ code: 201
23
+ message: Created
24
+ headers:
25
+ Date:
26
+ - Sun, 27 Mar 2022 05:53:03 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Content-Length:
30
+ - '317'
31
+ Connection:
32
+ - keep-alive
33
+ Content-Security-Policy:
34
+ - 'default-src ''self'';base-uri ''self'';block-all-mixed-content;font-src ''self''
35
+ https: data:;frame-ancestors ''self'';img-src ''self'' data:;object-src ''none'';script-src
36
+ ''self'';script-src-attr ''none'';style-src ''self'' https: ''unsafe-inline'';upgrade-insecure-requests'
37
+ X-Dns-Prefetch-Control:
38
+ - 'off'
39
+ Expect-Ct:
40
+ - max-age=0
41
+ X-Frame-Options:
42
+ - SAMEORIGIN
43
+ Strict-Transport-Security:
44
+ - max-age=15552000; includeSubDomains
45
+ X-Download-Options:
46
+ - noopen
47
+ X-Content-Type-Options:
48
+ - nosniff
49
+ X-Permitted-Cross-Domain-Policies:
50
+ - none
51
+ Referrer-Policy:
52
+ - no-referrer
53
+ X-Xss-Protection:
54
+ - '0'
55
+ Vary:
56
+ - Origin, Accept-Encoding
57
+ Access-Control-Allow-Credentials:
58
+ - 'true'
59
+ X-Request-Id:
60
+ - 78db6375-0b0a-4492-a913-5e0802a721b7
61
+ Etag:
62
+ - W/"13d-MlhrtKBkD4LjqRYZFv0nos58XA8"
63
+ Via:
64
+ - 1.1 vegur
65
+ Cf-Cache-Status:
66
+ - DYNAMIC
67
+ Report-To:
68
+ - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=bN92hPz7GN42QtyRg4YR%2BKMTuzd3R241D6A2ktALsB%2F%2FaFwI%2BeJHUMZ9G0oXrDbp%2Binu76aBI%2FC0ICO2Tr0zc8fi9tF1q4XnqyLfgosTjaDE%2BNDcPlRmaduFoDmkc28D4w%3D%3D"}],"group":"cf-nel","max_age":604800}'
69
+ Nel:
70
+ - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}'
71
+ Server:
72
+ - cloudflare
73
+ Cf-Ray:
74
+ - 6f25dd0d0882dee9-SEA
75
+ Alt-Svc:
76
+ - h3=":443"; ma=86400, h3-29=":443"; ma=86400
77
+ body:
78
+ encoding: UTF-8
79
+ string: '{"challenge":{"object":"authentication_challenge","id":"auth_challenge_01FZ4YVRBMXP5ZM0A7BP4AJ12J","created_at":"2022-03-27T05:51:24.531Z","updated_at":"2022-03-27T05:51:24.531Z","expires_at":"2022-03-27T06:01:24.532Z","code":"897792","authentication_factor_id":"auth_factor_01FZ4YVH2XFQBJXJ4NQVJSSY8Q"},"valid":false}'
80
+ http_version:
81
+ recorded_at: Sun, 27 Mar 2022 05:53:03 GMT
82
+ recorded_with: VCR 5.0.0
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: 2.2.0
4
+ version: 2.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - WorkOS
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-30 00:00:00.000000000 Z
11
+ date: 2022-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sorbet-runtime
@@ -212,12 +212,14 @@ files:
212
212
  - lib/workos/challenge.rb
213
213
  - lib/workos/client.rb
214
214
  - lib/workos/connection.rb
215
+ - lib/workos/deprecated_hash_wrapper.rb
215
216
  - lib/workos/directory.rb
216
217
  - lib/workos/directory_group.rb
217
218
  - lib/workos/directory_sync.rb
218
219
  - lib/workos/directory_user.rb
219
220
  - lib/workos/errors.rb
220
221
  - lib/workos/factor.rb
222
+ - lib/workos/hash_provider.rb
221
223
  - lib/workos/mfa.rb
222
224
  - lib/workos/organization.rb
223
225
  - lib/workos/organizations.rb
@@ -333,6 +335,7 @@ files:
333
335
  - spec/support/fixtures/vcr_cassettes/mfa/verify_factor_generic_expired.yml
334
336
  - spec/support/fixtures/vcr_cassettes/mfa/verify_factor_generic_invalid.yml
335
337
  - spec/support/fixtures/vcr_cassettes/mfa/verify_factor_generic_valid.yml
338
+ - spec/support/fixtures/vcr_cassettes/mfa/verify_factor_generic_valid_is_false.yml
336
339
  - spec/support/fixtures/vcr_cassettes/organization/create.yml
337
340
  - spec/support/fixtures/vcr_cassettes/organization/create_invalid.yml
338
341
  - spec/support/fixtures/vcr_cassettes/organization/delete.yml
@@ -384,7 +387,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
384
387
  - !ruby/object:Gem::Version
385
388
  version: '0'
386
389
  requirements: []
387
- rubygems_version: 3.3.10
390
+ rubygems_version: 3.3.12
388
391
  signing_key:
389
392
  specification_version: 4
390
393
  summary: API client for WorkOS
@@ -443,6 +446,7 @@ test_files:
443
446
  - spec/support/fixtures/vcr_cassettes/mfa/verify_factor_generic_expired.yml
444
447
  - spec/support/fixtures/vcr_cassettes/mfa/verify_factor_generic_invalid.yml
445
448
  - spec/support/fixtures/vcr_cassettes/mfa/verify_factor_generic_valid.yml
449
+ - spec/support/fixtures/vcr_cassettes/mfa/verify_factor_generic_valid_is_false.yml
446
450
  - spec/support/fixtures/vcr_cassettes/organization/create.yml
447
451
  - spec/support/fixtures/vcr_cassettes/organization/create_invalid.yml
448
452
  - spec/support/fixtures/vcr_cassettes/organization/delete.yml