workos 2.2.0 → 2.4.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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +2 -2
  3. data/lib/workos/audit_trail.rb +1 -0
  4. data/lib/workos/challenge.rb +2 -1
  5. data/lib/workos/connection.rb +1 -0
  6. data/lib/workos/deprecated_hash_wrapper.rb +76 -0
  7. data/lib/workos/directory.rb +1 -0
  8. data/lib/workos/directory_group.rb +26 -2
  9. data/lib/workos/directory_sync.rb +11 -8
  10. data/lib/workos/directory_user.rb +16 -2
  11. data/lib/workos/factor.rb +2 -6
  12. data/lib/workos/hash_provider.rb +19 -0
  13. data/lib/workos/organization.rb +1 -0
  14. data/lib/workos/organizations.rb +1 -0
  15. data/lib/workos/profile.rb +1 -0
  16. data/lib/workos/profile_and_token.rb +1 -0
  17. data/lib/workos/sso.rb +1 -0
  18. data/lib/workos/types/challenge_struct.rb +1 -1
  19. data/lib/workos/types/directory_group_struct.rb +6 -0
  20. data/lib/workos/types/directory_user_struct.rb +2 -0
  21. data/lib/workos/types/factor_struct.rb +0 -1
  22. data/lib/workos/types/passwordless_session_struct.rb +2 -0
  23. data/lib/workos/types/verify_factor_struct.rb +1 -3
  24. data/lib/workos/verify_factor.rb +1 -0
  25. data/lib/workos/version.rb +1 -1
  26. data/lib/workos/webhook.rb +1 -0
  27. data/lib/workos.rb +2 -0
  28. data/spec/lib/workos/directory_sync_spec.rb +29 -18
  29. data/spec/lib/workos/directory_user_spec.rb +36 -0
  30. data/spec/lib/workos/mfa_spec.rb +31 -1
  31. data/spec/support/fixtures/vcr_cassettes/directory_sync/get_group.yml +47 -29
  32. data/spec/support/fixtures/vcr_cassettes/directory_sync/get_user.yml +28 -31
  33. data/spec/support/fixtures/vcr_cassettes/directory_sync/list_groups/with_after.yml +46 -32
  34. data/spec/support/fixtures/vcr_cassettes/directory_sync/list_groups/with_before.yml +47 -31
  35. data/spec/support/fixtures/vcr_cassettes/directory_sync/list_groups/with_directory.yml +46 -34
  36. data/spec/support/fixtures/vcr_cassettes/directory_sync/list_groups/with_limit.yml +41 -31
  37. data/spec/support/fixtures/vcr_cassettes/directory_sync/list_groups/with_no_options.yml +36 -26
  38. data/spec/support/fixtures/vcr_cassettes/directory_sync/list_groups/with_user.yml +38 -28
  39. data/spec/support/fixtures/vcr_cassettes/mfa/challenge_factor_totp_valid.yml +1 -1
  40. data/spec/support/fixtures/vcr_cassettes/mfa/enroll_factor_generic_valid.yml +1 -1
  41. data/spec/support/fixtures/vcr_cassettes/mfa/enroll_factor_sms_valid.yml +1 -1
  42. data/spec/support/fixtures/vcr_cassettes/mfa/enroll_factor_totp_valid.yml +1 -1
  43. data/spec/support/fixtures/vcr_cassettes/mfa/get_factor_valid.yml +1 -1
  44. data/spec/support/fixtures/vcr_cassettes/mfa/verify_factor_generic_valid_is_false.yml +82 -0
  45. metadata +9 -3
@@ -189,7 +189,7 @@ describe WorkOS::DirectorySync do
189
189
  context 'with directory option' do
190
190
  it 'forms the proper request to the API' do
191
191
  request_args = [
192
- '/directory_groups?directory=directory_01EK2YEMVTWGX27STRDR0N3MP9',
192
+ '/directory_groups?directory=directory_01G2Z8ADK5NPMVTWF48MVVE4HT',
193
193
  'Content-Type' => 'application/json'
194
194
  ]
195
195
 
@@ -200,10 +200,11 @@ describe WorkOS::DirectorySync do
200
200
 
201
201
  VCR.use_cassette 'directory_sync/list_groups/with_directory' do
202
202
  groups = described_class.list_groups(
203
- directory: 'directory_01EK2YEMVTWGX27STRDR0N3MP9',
203
+ directory: 'directory_01G2Z8ADK5NPMVTWF48MVVE4HT',
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
@@ -211,7 +212,7 @@ describe WorkOS::DirectorySync do
211
212
  context 'with user option' do
212
213
  it 'forms the proper request to the API' do
213
214
  request_args = [
214
- '/directory_groups?user=directory_user_01EK2YFBC3R10MPB4W49G5QDXG',
215
+ '/directory_groups?user=directory_user_01G2Z8D4FDB28ZNSRRBVCF2E0P',
215
216
  'Content-Type' => 'application/json'
216
217
  ]
217
218
 
@@ -222,7 +223,7 @@ describe WorkOS::DirectorySync do
222
223
 
223
224
  VCR.use_cassette 'directory_sync/list_groups/with_user' do
224
225
  groups = described_class.list_groups(
225
- user: 'directory_user_01EK2YFBC3R10MPB4W49G5QDXG',
226
+ user: 'directory_user_01G2Z8D4FDB28ZNSRRBVCF2E0P',
226
227
  )
227
228
 
228
229
  expect(groups.data.size).to eq(3)
@@ -233,8 +234,8 @@ describe WorkOS::DirectorySync do
233
234
  context 'with the before option' do
234
235
  it 'forms the proper request to the API' do
235
236
  request_args = [
236
- '/directory_groups?before=before-id&' \
237
- 'directory=directory_01EK2YEMVTWGX27STRDR0N3MP9',
237
+ '/directory_groups?before=directory_group_01G2Z8D4ZR8RJ03Y1W7P9K8NMG&' \
238
+ 'directory=directory_01G2Z8ADK5NPMVTWF48MVVE4HT',
238
239
  'Content-Type' => 'application/json'
239
240
  ]
240
241
 
@@ -245,11 +246,11 @@ describe WorkOS::DirectorySync do
245
246
 
246
247
  VCR.use_cassette 'directory_sync/list_groups/with_before' do
247
248
  groups = described_class.list_groups(
248
- before: 'before-id',
249
- directory: 'directory_01EK2YEMVTWGX27STRDR0N3MP9',
249
+ before: 'directory_group_01G2Z8D4ZR8RJ03Y1W7P9K8NMG',
250
+ directory: 'directory_01G2Z8ADK5NPMVTWF48MVVE4HT',
250
251
  )
251
252
 
252
- expect(groups.data.size).to eq(2)
253
+ expect(groups.data.size).to eq(10)
253
254
  end
254
255
  end
255
256
  end
@@ -257,8 +258,8 @@ describe WorkOS::DirectorySync do
257
258
  context 'with the after option' do
258
259
  it 'forms the proper request to the API' do
259
260
  request_args = [
260
- '/directory_groups?after=after-id&' \
261
- 'directory=directory_01EK2YEMVTWGX27STRDR0N3MP9',
261
+ '/directory_groups?after=directory_group_01G2Z8D4ZR8RJ03Y1W7P9K8NMG&' \
262
+ 'directory=directory_01G2Z8ADK5NPMVTWF48MVVE4HT',
262
263
  'Content-Type' => 'application/json'
263
264
  ]
264
265
 
@@ -269,11 +270,11 @@ describe WorkOS::DirectorySync do
269
270
 
270
271
  VCR.use_cassette 'directory_sync/list_groups/with_after' do
271
272
  groups = described_class.list_groups(
272
- after: 'after-id',
273
- directory: 'directory_01EK2YEMVTWGX27STRDR0N3MP9',
273
+ after: 'directory_group_01G2Z8D4ZR8RJ03Y1W7P9K8NMG',
274
+ directory: 'directory_01G2Z8ADK5NPMVTWF48MVVE4HT',
274
275
  )
275
276
 
276
- expect(groups.data.size).to eq(10)
277
+ expect(groups.data.size).to eq(9)
277
278
  end
278
279
  end
279
280
  end
@@ -282,7 +283,7 @@ describe WorkOS::DirectorySync do
282
283
  it 'forms the proper request to the API' do
283
284
  request_args = [
284
285
  '/directory_groups?limit=2&' \
285
- 'directory=directory_01EK2YEMVTWGX27STRDR0N3MP9',
286
+ 'directory=directory_01G2Z8ADK5NPMVTWF48MVVE4HT',
286
287
  'Content-Type' => 'application/json'
287
288
  ]
288
289
 
@@ -294,7 +295,7 @@ describe WorkOS::DirectorySync do
294
295
  VCR.use_cassette 'directory_sync/list_groups/with_limit' do
295
296
  groups = described_class.list_groups(
296
297
  limit: 2,
297
- directory: 'directory_01EK2YEMVTWGX27STRDR0N3MP9',
298
+ directory: 'directory_01G2Z8ADK5NPMVTWF48MVVE4HT',
298
299
  )
299
300
 
300
301
  expect(groups.data.size).to eq(2)
@@ -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
@@ -436,10 +438,16 @@ describe WorkOS::DirectorySync do
436
438
  it 'returns a group' do
437
439
  VCR.use_cassette('directory_sync/get_group') do
438
440
  group = WorkOS::DirectorySync.get_group(
439
- 'directory_grp_01E64QTDNS0EGJ0FMCVY9BWGZT',
441
+ 'directory_group_01G2Z8D4ZR8RJ03Y1W7P9K8NMG',
440
442
  )
441
443
 
442
- expect(group['name']).to eq('Walrus')
444
+ expect(group['directory_id']).to eq('directory_01G2Z8ADK5NPMVTWF48MVVE4HT')
445
+ expect(group['organization_id']).to eq('org_01EGS4P7QR31EZ4YWD1Z1XA176')
446
+ expect(group['idp_id']).to eq('01jlao4614two3d')
447
+ expect(group['name']).to eq('Sales')
448
+ expect(group.name).to eq('Sales')
449
+ expect(group['created_at']).to eq('2022-05-13T17:45:31.732Z')
450
+ expect(group['updated_at']).to eq('2022-07-13T17:45:42.618Z')
443
451
  end
444
452
  end
445
453
  end
@@ -464,6 +472,9 @@ describe WorkOS::DirectorySync do
464
472
  )
465
473
 
466
474
  expect(user['first_name']).to eq('Logan')
475
+ expect(user.directory_id).to eq('directory_01FAZYMST676QMTFN1DDJZZX87')
476
+ expect(user.organization_id).to eq('org_01FAZWCWR03DVWA83NCJYKKD54')
477
+ expect(user.first_name).to eq('Logan')
467
478
  end
468
479
  end
469
480
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+ # typed: false
3
+
4
+ describe WorkOS::DirectoryUser do
5
+ # rubocop:disable Layout/LineLength
6
+ describe '.get_primary_email' do
7
+ context 'with one primary email' do
8
+ it 'returns the primary email' do
9
+ user = WorkOS::DirectoryUser.new('{"object":"directory_user","id":"directory_user_01FAZYNPC8M0HRYTKFP2GNX852","directory_id":"directory_01FAZYMST676QMTFN1DDJZZX87","idp_id":"6092c280a3f1e19ef6d8cef8","username":"logan@workos.com","emails":[{"primary":true,"value":"logan@workos.com"}, {"primary":false,"value":"logan@gmail.com"}],"first_name":"Logan","last_name":"Gingerich","state":"active","raw_attributes":{},"custom_attributes":{},"groups":[]}')
10
+ expect(user.primary_email).to eq('logan@workos.com')
11
+ end
12
+ end
13
+
14
+ context 'with multiple primary emails' do
15
+ it 'returns the first email marked as primary' do
16
+ user = WorkOS::DirectoryUser.new('{"object":"directory_user","id":"directory_user_01FAZYNPC8M0HRYTKFP2GNX852","directory_id":"directory_01FAZYMST676QMTFN1DDJZZX87","idp_id":"6092c280a3f1e19ef6d8cef8","username":"logan@workos.com","emails":[{"primary":true,"value":"logan@workos.com"}, {"primary":true,"value":"logan@gmail.com"}],"first_name":"Logan","last_name":"Gingerich","state":"active","raw_attributes":{},"custom_attributes":{},"groups":[]}')
17
+ expect(user.primary_email).to eq('logan@workos.com')
18
+ end
19
+ end
20
+
21
+ context 'with no primary emails' do
22
+ it 'returns nil' do
23
+ user = WorkOS::DirectoryUser.new('{"object":"directory_user","id":"directory_user_01FAZYNPC8M0HRYTKFP2GNX852","directory_id":"directory_01FAZYMST676QMTFN1DDJZZX87","idp_id":"6092c280a3f1e19ef6d8cef8","username":"logan@workos.com","emails":[{"primary":false,"value":"logan@gmail.com"}],"first_name":"Logan","last_name":"Gingerich","state":"active","raw_attributes":{},"custom_attributes":{},"groups":[]}')
24
+ expect(user.primary_email).to eq(nil)
25
+ end
26
+ end
27
+
28
+ context 'with an empty email array' do
29
+ it 'returns nil' do
30
+ user = WorkOS::DirectoryUser.new('{"object":"directory_user","id":"directory_user_01FAZYNPC8M0HRYTKFP2GNX852","directory_id":"directory_01FAZYMST676QMTFN1DDJZZX87","idp_id":"6092c280a3f1e19ef6d8cef8","username":"logan@workos.com","emails":[],"first_name":"Logan","last_name":"Gingerich","state":"active","raw_attributes":{},"custom_attributes":{},"groups":[]}')
31
+ expect(user.primary_email).to eq(nil)
32
+ end
33
+ end
34
+ end
35
+ # rubocop:enable Layout/LineLength
36
+ 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
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: https://api.workos.com/directory_groups/directory_grp_01E64QTDNS0EGJ0FMCVY9BWGZT
5
+ uri: https://api.workos.com/directory_groups/directory_group_01G2Z8D4ZR8RJ03Y1W7P9K8NMG
6
6
  body:
7
7
  encoding: US-ASCII
8
8
  string: ''
@@ -14,7 +14,7 @@ http_interactions:
14
14
  Accept:
15
15
  - "*/*"
16
16
  User-Agent:
17
- - WorkOS; ruby/2.7.1; x86_64-darwin19; v0.2.3
17
+ - WorkOS; ruby/2.7.2; arm64-darwin21; v2.3.0
18
18
  Authorization:
19
19
  - Bearer <API_KEY>
20
20
  response:
@@ -22,41 +22,59 @@ http_interactions:
22
22
  code: 200
23
23
  message: OK
24
24
  headers:
25
- Server:
26
- - Cowboy
25
+ Date:
26
+ - Thu, 14 Jul 2022 16:49:09 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Transfer-Encoding:
30
+ - chunked
27
31
  Connection:
28
32
  - keep-alive
29
- Vary:
30
- - Origin, Accept-Encoding
31
33
  Access-Control-Allow-Credentials:
32
34
  - 'true'
33
- X-Dns-Prefetch-Control:
34
- - 'off'
35
- X-Frame-Options:
36
- - SAMEORIGIN
35
+ Content-Security-Policy:
36
+ - 'default-src ''self'';base-uri ''self'';block-all-mixed-content;font-src ''self''
37
+ https: data:;frame-ancestors ''self'';img-src ''self'' data:;object-src ''none'';script-src
38
+ ''self'';script-src-attr ''none'';style-src ''self'' https: ''unsafe-inline'';upgrade-insecure-requests'
39
+ Etag:
40
+ - W/"277-8j8DgAIILf/mCF7LCmvrqcqdwK4"
41
+ Expect-Ct:
42
+ - max-age=0
43
+ Referrer-Policy:
44
+ - no-referrer
37
45
  Strict-Transport-Security:
38
46
  - max-age=15552000; includeSubDomains
39
- X-Download-Options:
40
- - noopen
47
+ Vary:
48
+ - Origin, Accept-Encoding
49
+ Via:
50
+ - 1.1 spaces-router (b642bf20b975)
41
51
  X-Content-Type-Options:
42
52
  - nosniff
43
- X-Xss-Protection:
44
- - 1; mode=block
53
+ X-Dns-Prefetch-Control:
54
+ - 'off'
55
+ X-Download-Options:
56
+ - noopen
57
+ X-Frame-Options:
58
+ - SAMEORIGIN
59
+ X-Permitted-Cross-Domain-Policies:
60
+ - none
45
61
  X-Request-Id:
46
- - 4fb94ab3-ecff-4cea-b0b7-d4d1b3ffad3a
47
- Content-Type:
48
- - application/json; charset=utf-8
49
- Content-Length:
50
- - '65'
51
- Etag:
52
- - W/"41-QrnAKhorJuUwAsR1OyMpfB8q1Kc"
53
- Date:
54
- - Thu, 30 Apr 2020 04:47:49 GMT
55
- Via:
56
- - 1.1 vegur
62
+ - 0f21c2f3-e24a-e3a2-85d3-41ee9e45b3e2
63
+ X-Xss-Protection:
64
+ - '0'
65
+ Cf-Cache-Status:
66
+ - DYNAMIC
67
+ Report-To:
68
+ - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=Hnm%2BEiBTG2ROFxqX2mdwcp0HvQ173SgQlQDCmTmBQEbLv9w2dkcl2qMqYh44OSHRABBCkRfuJ2MtnHuqb6sQ5RjHRMKSCfRqklsOrgd%2FHo0PEE6mW0u%2BlZqBMIlN1BEp"}],"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
+ - 72abc002fbd9f039-EWR
57
75
  body:
58
- encoding: UTF-8
59
- string: '{"id":"directory_grp_01E64QTDNS0EGJ0FMCVY9BWGZT","name":"Walrus"}'
60
- http_version:
61
- recorded_at: Thu, 30 Apr 2020 04:47:49 GMT
76
+ encoding: ASCII-8BIT
77
+ string: '{"object":"directory_group","id":"directory_group_01G2Z8D4ZR8RJ03Y1W7P9K8NMG","idp_id":"01jlao4614two3d","directory_id":"directory_01G2Z8ADK5NPMVTWF48MVVE4HT","organization_id":"org_01EGS4P7QR31EZ4YWD1Z1XA176","name":"Sales","created_at":"2022-05-13T17:45:31.732Z","updated_at":"2022-07-13T17:45:42.618Z","raw_attributes":{"id":"01jlao4614two3d","etag":"\"SEQQBYC70u6XQ2UUjmjNYw6b0a5EzY0mTMShjiZga8A/uLYJ0Hrx1gXXVg9z-zGLBZET2Wo\"","kind":"admin#directory#group","name":"Sales","email":"sales@foo-corp.com","description":"","adminCreated":true,"directMembersCount":"1","nonEditableAliases":["sales@foo-corp.com.test-google-a.com"]}}'
78
+ http_version:
79
+ recorded_at: Thu, 14 Jul 2022 16:49:09 GMT
62
80
  recorded_with: VCR 5.0.0
@@ -14,7 +14,7 @@ http_interactions:
14
14
  Accept:
15
15
  - "*/*"
16
16
  User-Agent:
17
- - WorkOS; ruby/3.0.1; x86_64-darwin19; v1.4.0
17
+ - WorkOS; ruby/2.7.2; arm64-darwin21; v2.3.0
18
18
  Authorization:
19
19
  - Bearer <API_KEY>
20
20
  response:
@@ -23,64 +23,61 @@ http_interactions:
23
23
  message: OK
24
24
  headers:
25
25
  Date:
26
- - Mon, 09 Aug 2021 17:36:13 GMT
26
+ - Thu, 14 Jul 2022 16:46:23 GMT
27
27
  Content-Type:
28
28
  - application/json; charset=utf-8
29
- Transfer-Encoding:
30
- - chunked
29
+ Content-Length:
30
+ - '616'
31
31
  Connection:
32
32
  - keep-alive
33
- Vary:
34
- - Origin, Accept-Encoding
35
33
  Access-Control-Allow-Credentials:
36
34
  - 'true'
37
35
  Content-Security-Policy:
38
36
  - 'default-src ''self'';base-uri ''self'';block-all-mixed-content;font-src ''self''
39
37
  https: data:;frame-ancestors ''self'';img-src ''self'' data:;object-src ''none'';script-src
40
38
  ''self'';script-src-attr ''none'';style-src ''self'' https: ''unsafe-inline'';upgrade-insecure-requests'
41
- X-Dns-Prefetch-Control:
42
- - 'off'
39
+ Etag:
40
+ - W/"680-NPvBik348v8xg6EE7iZMYwD5UXw"
43
41
  Expect-Ct:
44
42
  - max-age=0
45
- X-Frame-Options:
46
- - SAMEORIGIN
43
+ Referrer-Policy:
44
+ - no-referrer
47
45
  Strict-Transport-Security:
48
46
  - max-age=15552000; includeSubDomains
49
- X-Download-Options:
50
- - noopen
47
+ Vary:
48
+ - Origin, Accept-Encoding
49
+ Via:
50
+ - 1.1 spaces-router (b642bf20b975)
51
51
  X-Content-Type-Options:
52
52
  - nosniff
53
+ X-Dns-Prefetch-Control:
54
+ - 'off'
55
+ X-Download-Options:
56
+ - noopen
57
+ X-Frame-Options:
58
+ - SAMEORIGIN
53
59
  X-Permitted-Cross-Domain-Policies:
54
60
  - none
55
- Referrer-Policy:
56
- - no-referrer
61
+ X-Request-Id:
62
+ - 51a82273-b413-cead-b968-c07ba4d6fd08
57
63
  X-Xss-Protection:
58
64
  - '0'
59
- X-Request-Id:
60
- - 59862449-73e5-4dfd-93ab-3764b1917801
61
- Etag:
62
- - W/"4c3-Ikxt2N0fUuSxCjv+RdYvW8W9Xwo"
63
- Via:
64
- - 1.1 vegur
65
65
  Cf-Cache-Status:
66
66
  - DYNAMIC
67
67
  Report-To:
68
- - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=m6%2FJ3BJ75VMwSOtfDQXjt%2FoL29FI%2Bv5VswhZzg6LVkOQi7nyI19Sks%2FkDGCDrSQ%2FMtyU6DI4OFWR9RB1I04IGdhehsY2oPGugIj%2BhHMiJdQEcE6vPAsuaF1HyVnXGvMgRYdurEW1Jr7rSYBWeA%3D%3D"}],"group":"cf-nel","max_age":604800}'
68
+ - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=OS7ELJ3A8tkzMafvaIThD%2B5JlYmul1puZlAXTxEKYBLlq%2B6DCtqDqAi4dtr4yRP3khNmg6MwPiuLqtdOXRmPOtag9Ti%2FGK8ra%2BJOlpwkFjD965CNBfzao4EJtExDkbS3"}],"group":"cf-nel","max_age":604800}'
69
69
  Nel:
70
70
  - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}'
71
71
  Server:
72
72
  - cloudflare
73
73
  Cf-Ray:
74
- - 67c2bed0ebe6c7e6-DFW
75
- Alt-Svc:
76
- - h3-27=":443"; ma=86400, h3-28=":443"; ma=86400, h3-29=":443"; ma=86400, h3=":443";
77
- ma=86400
74
+ - 72abbbf2b93e8ca5-EWR
78
75
  body:
79
76
  encoding: ASCII-8BIT
80
- string: '{"object":"directory_user","id":"directory_user_01FAZYNPC8M0HRYTKFP2GNX852","directory_id":"directory_01FAZYMST676QMTFN1DDJZZX87","idp_id":"6092c280a3f1e19ef6d8cef8","username":"logan@workos.com","emails":[{"primary":true,"value":"logan@workos.com"}],"first_name":"Logan","last_name":"Gingerich","state":"active","raw_attributes":{"id":"6092c280a3f1e19ef6d8cef8","name":"Logan
81
- Paul Gingerich","teams":["5f696c8e9a63a60e965aaca8"],"spokeId":null,"lastName":"Gingerich","createdAt":"2021-05-05T16:06:24+0000","firstName":"Logan","updatedAt":"2021-07-19T19:17:52+0000","workEmail":"logan@workos.com","department":"Infra","departmentId":"5f27ada9a5e9bc0001a0ae4a"},"custom_attributes":{"department":"Infra"},"groups":[{"object":"directory_group","id":"directory_group_01FAZYNN1NZWMBRAXXDSTB5NFH","directory_id":"directory_01FAZYMST676QMTFN1DDJZZX87","name":"Department
82
- - Infra","raw_attributes":{"id":"5f27ada9a5e9bc0001a0ae4a","name":"Infra","parent":"5f27ada9a5e9bc0001a0ae48"}},{"object":"directory_group","id":"directory_group_01FAZYNNQ4HQ6EBF29MPTH7VKB","directory_id":"directory_01FAZYMST676QMTFN1DDJZZX87","name":"Team
83
- - Platform","raw_attributes":{"id":"5f696c8e9a63a60e965aaca8","name":"Platform","parent":null}}]}'
84
- http_version:
85
- recorded_at: Mon, 09 Aug 2021 17:36:13 GMT
77
+ string: '{"object":"directory_user","id":"directory_user_01FAZYNPC8M0HRYTKFP2GNX852","directory_id":"directory_01FAZYMST676QMTFN1DDJZZX87","organization_id":"org_01FAZWCWR03DVWA83NCJYKKD54","idp_id":"6092c280a3f1e19ef6d8cef8","username":"logan@workos.com","emails":[{"primary":true,"value":"logan@workos.com"}],"first_name":"Logan","last_name":"Gingerich","state":"active","raw_attributes":{"id":"6092c280a3f1e19ef6d8cef8","name":"Logan
78
+ Paul Gingerich","teams":["5f696c8e9a63a60e965aaca8"],"spokeId":null,"lastName":"Gingerich","createdAt":"2021-05-05T16:06:24+0000","firstName":"Logan","updatedAt":"2021-11-11T05:08:14+0000","workEmail":"logan@workos.com","department":"Infra","departmentId":"5f27ada9a5e9bc0001a0ae4a"},"custom_attributes":{},"created_at":"2021-07-19T17:57:57.268Z","updated_at":"2022-01-24T11:23:01.614Z","groups":[{"object":"directory_group","id":"directory_group_01FAZYNNQ4HQ6EBF29MPTH7VKB","idp_id":"5f696c8e9a63a60e965aaca8","directory_id":"directory_01FAZYMST676QMTFN1DDJZZX87","organization_id":"org_01FAZWCWR03DVWA83NCJYKKD54","name":"Team
79
+ - Platform","created_at":"2021-07-19T17:57:56.580Z","updated_at":"2022-01-24T11:23:01.333Z","raw_attributes":{"id":"5f696c8e9a63a60e965aaca8","name":"Platform","parent":null}},{"object":"directory_group","id":"directory_group_01FAZYNN1NZWMBRAXXDSTB5NFH","idp_id":"5f27ada9a5e9bc0001a0ae4a","directory_id":"directory_01FAZYMST676QMTFN1DDJZZX87","organization_id":"org_01FAZWCWR03DVWA83NCJYKKD54","name":"Department
80
+ - Infra","created_at":"2021-07-19T17:57:55.893Z","updated_at":"2022-01-24T11:23:01.333Z","raw_attributes":{"id":"5f27ada9a5e9bc0001a0ae4a","name":"Infra","parent":"5f27ada9a5e9bc0001a0ae48"}}]}'
81
+ http_version:
82
+ recorded_at: Thu, 14 Jul 2022 16:46:23 GMT
86
83
  recorded_with: VCR 5.0.0