workos 5.25.0 → 5.27.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/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/lib/workos/organization_membership.rb +3 -1
- data/lib/workos/session.rb +2 -1
- data/lib/workos/types/widget_scope.rb +3 -1
- data/lib/workos/user.rb +3 -1
- data/lib/workos/user_management.rb +28 -13
- data/lib/workos/version.rb +1 -1
- data/spec/lib/workos/session_spec.rb +6 -0
- data/spec/lib/workos/user_management_spec.rb +44 -0
- data/spec/support/fixtures/vcr_cassettes/user_management/create_organization_membership/valid_multiple_roles.yml +76 -0
- data/spec/support/fixtures/vcr_cassettes/user_management/update_organization_membership/valid_multiple_roles.yml +76 -0
- data/spec/support/fixtures/vcr_cassettes/user_management/update_user/locale.yml +76 -0
- metadata +8 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d4c13739c752d0a39953650ceaa9ce3b11975333deaee4c3308e68aaf498a81b
|
|
4
|
+
data.tar.gz: 0d1e38dab645be1e74296de37deeb02115e1ef8528c7a2d96a751b0ec8586312
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f4b7db5351ad49b0c388213769e7d5fb32121eed25999ba75476691c41bc5bd1ce792910912843869440d7ae28734405233cca551d324fb5507d9dabd9c3c04d
|
|
7
|
+
data.tar.gz: d4fba87cbf558a37b3e563f189aeb00e93fad7bfe58fd93473fa615d190c5180756c5de19aa9a0510fc95bf3feb9719c7994d4cdb85b1e405679639d23e85e6b
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -7,7 +7,7 @@ module WorkOS
|
|
|
7
7
|
class OrganizationMembership
|
|
8
8
|
include HashProvider
|
|
9
9
|
|
|
10
|
-
attr_accessor :id, :user_id, :organization_id, :status, :role, :created_at, :updated_at
|
|
10
|
+
attr_accessor :id, :user_id, :organization_id, :status, :role, :roles, :created_at, :updated_at
|
|
11
11
|
|
|
12
12
|
def initialize(json)
|
|
13
13
|
hash = JSON.parse(json, symbolize_names: true)
|
|
@@ -17,6 +17,7 @@ module WorkOS
|
|
|
17
17
|
@organization_id = hash[:organization_id]
|
|
18
18
|
@status = hash[:status]
|
|
19
19
|
@role = hash[:role]
|
|
20
|
+
@roles = hash[:roles]
|
|
20
21
|
@created_at = hash[:created_at]
|
|
21
22
|
@updated_at = hash[:updated_at]
|
|
22
23
|
end
|
|
@@ -28,6 +29,7 @@ module WorkOS
|
|
|
28
29
|
organization_id: organization_id,
|
|
29
30
|
status: status,
|
|
30
31
|
role: role,
|
|
32
|
+
roles: roles,
|
|
31
33
|
created_at: created_at,
|
|
32
34
|
updated_at: updated_at,
|
|
33
35
|
}
|
data/lib/workos/session.rb
CHANGED
|
@@ -30,6 +30,7 @@ module WorkOS
|
|
|
30
30
|
|
|
31
31
|
# Authenticates the user based on the session data
|
|
32
32
|
# @return [Hash] A hash containing the authentication response and a reason if the authentication failed
|
|
33
|
+
# rubocop:disable Metrics/AbcSize
|
|
33
34
|
def authenticate
|
|
34
35
|
return { authenticated: false, reason: 'NO_SESSION_COOKIE_PROVIDED' } if @session_data.nil?
|
|
35
36
|
|
|
@@ -49,6 +50,7 @@ module WorkOS
|
|
|
49
50
|
session_id: decoded['sid'],
|
|
50
51
|
organization_id: decoded['org_id'],
|
|
51
52
|
role: decoded['role'],
|
|
53
|
+
roles: decoded['roles'],
|
|
52
54
|
permissions: decoded['permissions'],
|
|
53
55
|
entitlements: decoded['entitlements'],
|
|
54
56
|
feature_flags: decoded['feature_flags'],
|
|
@@ -64,7 +66,6 @@ module WorkOS
|
|
|
64
66
|
# @option options [String] :organization_id The organization ID to use for refreshing the session
|
|
65
67
|
# @return [Hash] A hash containing a new sealed session, the authentication response,
|
|
66
68
|
# and a reason if the refresh failed
|
|
67
|
-
# rubocop:disable Metrics/AbcSize
|
|
68
69
|
# rubocop:disable Metrics/PerceivedComplexity
|
|
69
70
|
def refresh(options = nil)
|
|
70
71
|
cookie_password = options.nil? || options[:cookie_password].nil? ? @cookie_password : options[:cookie_password]
|
|
@@ -6,8 +6,10 @@ module WorkOS
|
|
|
6
6
|
# scopes while generating a widget token.
|
|
7
7
|
module WidgetScope
|
|
8
8
|
USERS_TABLE_MANAGE = 'widgets:users-table:manage'
|
|
9
|
+
SSO_MANAGE = 'widgets:sso:manage'
|
|
10
|
+
DOMAIN_VERIFICATION_MANAGE = 'widgets:domain-verification:manage'
|
|
9
11
|
|
|
10
|
-
ALL = [USERS_TABLE_MANAGE].freeze
|
|
12
|
+
ALL = [USERS_TABLE_MANAGE, SSO_MANAGE, DOMAIN_VERIFICATION_MANAGE].freeze
|
|
11
13
|
end
|
|
12
14
|
end
|
|
13
15
|
end
|
data/lib/workos/user.rb
CHANGED
|
@@ -8,7 +8,7 @@ module WorkOS
|
|
|
8
8
|
include HashProvider
|
|
9
9
|
|
|
10
10
|
attr_accessor :id, :email, :first_name, :last_name, :email_verified,
|
|
11
|
-
:profile_picture_url, :external_id, :last_sign_in_at, :created_at, :updated_at
|
|
11
|
+
:profile_picture_url, :external_id, :locale, :last_sign_in_at, :created_at, :updated_at
|
|
12
12
|
|
|
13
13
|
def initialize(json)
|
|
14
14
|
hash = JSON.parse(json, symbolize_names: true)
|
|
@@ -20,6 +20,7 @@ module WorkOS
|
|
|
20
20
|
@email_verified = hash[:email_verified]
|
|
21
21
|
@profile_picture_url = hash[:profile_picture_url]
|
|
22
22
|
@external_id = hash[:external_id]
|
|
23
|
+
@locale = hash[:locale]
|
|
23
24
|
@last_sign_in_at = hash[:last_sign_in_at]
|
|
24
25
|
@created_at = hash[:created_at]
|
|
25
26
|
@updated_at = hash[:updated_at]
|
|
@@ -34,6 +35,7 @@ module WorkOS
|
|
|
34
35
|
email_verified: email_verified,
|
|
35
36
|
profile_picture_url: profile_picture_url,
|
|
36
37
|
external_id: external_id,
|
|
38
|
+
locale: locale,
|
|
37
39
|
last_sign_in_at: last_sign_in_at,
|
|
38
40
|
created_at: created_at,
|
|
39
41
|
updated_at: updated_at,
|
|
@@ -230,6 +230,7 @@ module WorkOS
|
|
|
230
230
|
# @param [String] last_name The user's last name.
|
|
231
231
|
# @param [Boolean] email_verified Whether the user's email address was previously verified.
|
|
232
232
|
# @param [String] external_id The users's external ID
|
|
233
|
+
# @param [String] locale The user's locale.
|
|
233
234
|
# @param [String] password The user's password.
|
|
234
235
|
# @param [String] password_hash The user's hashed password.
|
|
235
236
|
# @option [String] password_hash_type The algorithm originally used to hash the password.
|
|
@@ -243,6 +244,7 @@ module WorkOS
|
|
|
243
244
|
last_name: :not_set,
|
|
244
245
|
email_verified: :not_set,
|
|
245
246
|
external_id: :not_set,
|
|
247
|
+
locale: :not_set,
|
|
246
248
|
password: :not_set,
|
|
247
249
|
password_hash: :not_set,
|
|
248
250
|
password_hash_type: :not_set
|
|
@@ -255,6 +257,7 @@ module WorkOS
|
|
|
255
257
|
last_name: last_name,
|
|
256
258
|
email_verified: email_verified,
|
|
257
259
|
external_id: external_id,
|
|
260
|
+
locale: locale,
|
|
258
261
|
password: password,
|
|
259
262
|
password_hash: password_hash,
|
|
260
263
|
password_hash_type: password_hash_type,
|
|
@@ -926,16 +929,23 @@ module WorkOS
|
|
|
926
929
|
# @param [String] user_id The ID of the User.
|
|
927
930
|
# @param [String] organization_id The ID of the Organization to which the user belongs to.
|
|
928
931
|
# @param [String] role_slug The slug of the role to grant to this membership. (Optional)
|
|
932
|
+
# @param [Array<String>] role_slugs Array of role slugs to assign to this membership. (Optional)
|
|
929
933
|
#
|
|
930
934
|
# @return [WorkOS::OrganizationMembership]
|
|
931
|
-
def create_organization_membership(user_id:, organization_id:, role_slug: nil)
|
|
935
|
+
def create_organization_membership(user_id:, organization_id:, role_slug: nil, role_slugs: nil)
|
|
936
|
+
raise ArgumentError, 'Cannot specify both role_slug and role_slugs' if role_slug && role_slugs
|
|
937
|
+
|
|
938
|
+
body = {
|
|
939
|
+
user_id: user_id,
|
|
940
|
+
organization_id: organization_id,
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
body[:role_slugs] = role_slugs if role_slugs
|
|
944
|
+
body[:role_slug] = role_slug if role_slug
|
|
945
|
+
|
|
932
946
|
request = post_request(
|
|
933
947
|
path: '/user_management/organization_memberships',
|
|
934
|
-
body:
|
|
935
|
-
user_id: user_id,
|
|
936
|
-
organization_id: organization_id,
|
|
937
|
-
role_slug: role_slug,
|
|
938
|
-
}.compact,
|
|
948
|
+
body: body.compact,
|
|
939
949
|
auth: true,
|
|
940
950
|
)
|
|
941
951
|
|
|
@@ -946,17 +956,22 @@ module WorkOS
|
|
|
946
956
|
|
|
947
957
|
# Update an Organization Membership
|
|
948
958
|
#
|
|
949
|
-
# @param [String]
|
|
950
|
-
# @param [String] role_slug The slug of the role to grant to this membership.
|
|
959
|
+
# @param [String] id The ID of the Organization Membership.
|
|
960
|
+
# @param [String] role_slug The slug of the role to grant to this membership. (Optional)
|
|
961
|
+
# @param [Array<String>] role_slugs Array of role slugs to assign to this membership. (Optional)
|
|
951
962
|
#
|
|
952
963
|
# @return [WorkOS::OrganizationMembership]
|
|
953
|
-
def update_organization_membership(id:, role_slug:)
|
|
964
|
+
def update_organization_membership(id:, role_slug: nil, role_slugs: nil)
|
|
965
|
+
raise ArgumentError, 'Cannot specify both role_slug and role_slugs' if role_slug && role_slugs
|
|
966
|
+
|
|
967
|
+
body = { id: id }
|
|
968
|
+
|
|
969
|
+
body[:role_slugs] = role_slugs if role_slugs
|
|
970
|
+
body[:role_slug] = role_slug if role_slug
|
|
971
|
+
|
|
954
972
|
request = put_request(
|
|
955
973
|
path: "/user_management/organization_memberships/#{id}",
|
|
956
|
-
body:
|
|
957
|
-
id: id,
|
|
958
|
-
role_slug: role_slug,
|
|
959
|
-
},
|
|
974
|
+
body: body.compact,
|
|
960
975
|
auth: true,
|
|
961
976
|
)
|
|
962
977
|
|
data/lib/workos/version.rb
CHANGED
|
@@ -108,6 +108,7 @@ describe WorkOS::Session do
|
|
|
108
108
|
sid: 'session_id',
|
|
109
109
|
org_id: 'org_id',
|
|
110
110
|
role: 'role',
|
|
111
|
+
roles: ['role'],
|
|
111
112
|
permissions: ['read'],
|
|
112
113
|
exp: Time.now.to_i + 3600,
|
|
113
114
|
}
|
|
@@ -173,6 +174,7 @@ describe WorkOS::Session do
|
|
|
173
174
|
session_id: 'session_id',
|
|
174
175
|
organization_id: 'org_id',
|
|
175
176
|
role: 'role',
|
|
177
|
+
roles: ['role'],
|
|
176
178
|
permissions: ['read'],
|
|
177
179
|
feature_flags: nil,
|
|
178
180
|
entitlements: nil,
|
|
@@ -188,6 +190,7 @@ describe WorkOS::Session do
|
|
|
188
190
|
sid: 'session_id',
|
|
189
191
|
org_id: 'org_id',
|
|
190
192
|
role: 'role',
|
|
193
|
+
roles: ['role'],
|
|
191
194
|
permissions: ['read'],
|
|
192
195
|
entitlements: ['billing'],
|
|
193
196
|
exp: Time.now.to_i + 3600,
|
|
@@ -208,6 +211,7 @@ describe WorkOS::Session do
|
|
|
208
211
|
session_id: 'session_id',
|
|
209
212
|
organization_id: 'org_id',
|
|
210
213
|
role: 'role',
|
|
214
|
+
roles: ['role'],
|
|
211
215
|
permissions: ['read'],
|
|
212
216
|
entitlements: ['billing'],
|
|
213
217
|
feature_flags: nil,
|
|
@@ -224,6 +228,7 @@ describe WorkOS::Session do
|
|
|
224
228
|
sid: 'session_id',
|
|
225
229
|
org_id: 'org_id',
|
|
226
230
|
role: 'role',
|
|
231
|
+
roles: ['role'],
|
|
227
232
|
permissions: ['read'],
|
|
228
233
|
feature_flags: ['new_feature_enabled'],
|
|
229
234
|
exp: Time.now.to_i + 3600,
|
|
@@ -244,6 +249,7 @@ describe WorkOS::Session do
|
|
|
244
249
|
session_id: 'session_id',
|
|
245
250
|
organization_id: 'org_id',
|
|
246
251
|
role: 'role',
|
|
252
|
+
roles: ['role'],
|
|
247
253
|
permissions: ['read'],
|
|
248
254
|
entitlements: nil,
|
|
249
255
|
feature_flags: ['new_feature_enabled'],
|
|
@@ -442,6 +442,16 @@ describe WorkOS::UserManagement do
|
|
|
442
442
|
end
|
|
443
443
|
end
|
|
444
444
|
|
|
445
|
+
it 'can update user locale' do
|
|
446
|
+
VCR.use_cassette 'user_management/update_user/locale' do
|
|
447
|
+
user = described_class.update_user(
|
|
448
|
+
id: 'user_01K78B3ZB5B7119MYEXTQE5KNE',
|
|
449
|
+
locale: 'en-US',
|
|
450
|
+
)
|
|
451
|
+
expect(user.locale).to eq('en-US')
|
|
452
|
+
end
|
|
453
|
+
end
|
|
454
|
+
|
|
445
455
|
it 'can update email addresses' do
|
|
446
456
|
VCR.use_cassette 'user_management/update_user/email' do
|
|
447
457
|
user = described_class.update_user(
|
|
@@ -462,6 +472,7 @@ describe WorkOS::UserManagement do
|
|
|
462
472
|
expect(body).not_to have_key(:first_name)
|
|
463
473
|
expect(body).not_to have_key(:last_name)
|
|
464
474
|
expect(body).not_to have_key(:email)
|
|
475
|
+
expect(body).not_to have_key(:locale)
|
|
465
476
|
|
|
466
477
|
# Return a mock request object
|
|
467
478
|
double('request')
|
|
@@ -1302,6 +1313,23 @@ describe WorkOS::UserManagement do
|
|
|
1302
1313
|
end
|
|
1303
1314
|
end
|
|
1304
1315
|
end
|
|
1316
|
+
|
|
1317
|
+
context 'with role slugs' do
|
|
1318
|
+
it 'creates an organization membership with multiple roles' do
|
|
1319
|
+
VCR.use_cassette 'user_management/create_organization_membership/valid_multiple_roles' do
|
|
1320
|
+
organization_membership = described_class.create_organization_membership(
|
|
1321
|
+
user_id: 'user_01H5JQDV7R7ATEYZDEG0W5PRYS',
|
|
1322
|
+
organization_id: 'org_01H5JQDV7R7ATEYZDEG0W5PRYS',
|
|
1323
|
+
role_slugs: %w[admin member],
|
|
1324
|
+
)
|
|
1325
|
+
|
|
1326
|
+
expect(organization_membership.organization_id).to eq('organization_01H5JQDV7R7ATEYZDEG0W5PRYS')
|
|
1327
|
+
expect(organization_membership.user_id).to eq('user_01H5JQDV7R7ATEYZDEG0W5PRYS')
|
|
1328
|
+
expect(organization_membership.roles).to be_an(Array)
|
|
1329
|
+
expect(organization_membership.roles.length).to eq(2)
|
|
1330
|
+
end
|
|
1331
|
+
end
|
|
1332
|
+
end
|
|
1305
1333
|
end
|
|
1306
1334
|
|
|
1307
1335
|
describe '.update_organization_membership' do
|
|
@@ -1329,6 +1357,22 @@ describe WorkOS::UserManagement do
|
|
|
1329
1357
|
end
|
|
1330
1358
|
end
|
|
1331
1359
|
end
|
|
1360
|
+
|
|
1361
|
+
context 'with role slugs' do
|
|
1362
|
+
it 'updates an organization membership with multiple roles' do
|
|
1363
|
+
VCR.use_cassette('user_management/update_organization_membership/valid_multiple_roles') do
|
|
1364
|
+
organization_membership = WorkOS::UserManagement.update_organization_membership(
|
|
1365
|
+
id: 'om_01H5JQDV7R7ATEYZDEG0W5PRYS',
|
|
1366
|
+
role_slugs: %w[admin editor],
|
|
1367
|
+
)
|
|
1368
|
+
|
|
1369
|
+
expect(organization_membership.organization_id).to eq('organization_01H5JQDV7R7ATEYZDEG0W5PRYS')
|
|
1370
|
+
expect(organization_membership.user_id).to eq('user_01H5JQDV7R7ATEYZDEG0W5PRYS')
|
|
1371
|
+
expect(organization_membership.roles).to be_an(Array)
|
|
1372
|
+
expect(organization_membership.roles.length).to eq(2)
|
|
1373
|
+
end
|
|
1374
|
+
end
|
|
1375
|
+
end
|
|
1332
1376
|
end
|
|
1333
1377
|
|
|
1334
1378
|
describe '.delete_organization_membership' do
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
http_interactions:
|
|
3
|
+
- request:
|
|
4
|
+
method: post
|
|
5
|
+
uri: https://api.workos.com/user_management/organization_memberships
|
|
6
|
+
body:
|
|
7
|
+
encoding: UTF-8
|
|
8
|
+
string: '{"user_id":"user_01H5JQDV7R7ATEYZDEG0W5PRYS","organization_id":"org_01H5JQDV7R7ATEYZDEG0W5PRYS","role_slugs":["admin","member"]}'
|
|
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.1.4; arm64-darwin24; v5.25.0
|
|
18
|
+
Authorization:
|
|
19
|
+
- Bearer <API_KEY>
|
|
20
|
+
response:
|
|
21
|
+
status:
|
|
22
|
+
code: 201
|
|
23
|
+
message: Created
|
|
24
|
+
headers:
|
|
25
|
+
Date:
|
|
26
|
+
- Mon, 06 Oct 2025 19:57:34 GMT
|
|
27
|
+
Content-Type:
|
|
28
|
+
- application/json; charset=utf-8
|
|
29
|
+
Content-Length:
|
|
30
|
+
- '26'
|
|
31
|
+
Connection:
|
|
32
|
+
- keep-alive
|
|
33
|
+
Server:
|
|
34
|
+
- cloudflare
|
|
35
|
+
Cf-Ray:
|
|
36
|
+
- 98a7ba7fea91ead7-ORD
|
|
37
|
+
Cf-Cache-Status:
|
|
38
|
+
- DYNAMIC
|
|
39
|
+
Etag:
|
|
40
|
+
- W/"1a-pljHtlo127JYJR4E/RYOPb6ucbw"
|
|
41
|
+
Strict-Transport-Security:
|
|
42
|
+
- max-age=15552000; includeSubDomains
|
|
43
|
+
Vary:
|
|
44
|
+
- Origin, Accept-Encoding
|
|
45
|
+
Access-Control-Allow-Credentials:
|
|
46
|
+
- 'true'
|
|
47
|
+
Content-Security-Policy:
|
|
48
|
+
- 'default-src ''self'';base-uri ''self'';block-all-mixed-content;font-src ''self''
|
|
49
|
+
https: data:;frame-ancestors ''self'';img-src ''self'' data:;object-src ''none'';script-src
|
|
50
|
+
''self'';script-src-attr ''none'';style-src ''self'' https: ''unsafe-inline'';upgrade-insecure-requests'
|
|
51
|
+
Expect-Ct:
|
|
52
|
+
- max-age=0
|
|
53
|
+
Referrer-Policy:
|
|
54
|
+
- no-referrer
|
|
55
|
+
X-Content-Type-Options:
|
|
56
|
+
- nosniff
|
|
57
|
+
X-Dns-Prefetch-Control:
|
|
58
|
+
- 'off'
|
|
59
|
+
X-Download-Options:
|
|
60
|
+
- noopen
|
|
61
|
+
X-Frame-Options:
|
|
62
|
+
- SAMEORIGIN
|
|
63
|
+
X-Permitted-Cross-Domain-Policies:
|
|
64
|
+
- none
|
|
65
|
+
X-Request-Id:
|
|
66
|
+
- 6507807d-d3b9-4e8f-9ca8-f84c6f9c6eb4
|
|
67
|
+
X-Xss-Protection:
|
|
68
|
+
- '0'
|
|
69
|
+
Set-Cookie:
|
|
70
|
+
- _cfuvid=recfIuOTSO3jIxK5SUOdhHRRfTGoiOFOMgSbEpVIjpg-1759780654123-0.0.1.1-604800000;
|
|
71
|
+
path=/; domain=.workos.com; HttpOnly; Secure; SameSite=None
|
|
72
|
+
body:
|
|
73
|
+
encoding: UTF-8
|
|
74
|
+
string: '{"object":"organization_membership","id":"om_01H5JQDV7R7ATEYZDEG0W5PRYS","user_id":"user_01H5JQDV7R7ATEYZDEG0W5PRYS","organization_id":"organization_01H5JQDV7R7ATEYZDEG0W5PRYS","status":"active","role":{"slug":"member"}, "roles":[{"slug":"member"}, {"slug":"admin"}], "created_at":"2023-07-18T02:07:19.911Z","updated_at":"2023-07-18T02:07:19.911Z"}'
|
|
75
|
+
recorded_at: Mon, 06 Oct 2025 19:57:34 GMT
|
|
76
|
+
recorded_with: VCR 6.3.1
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
http_interactions:
|
|
3
|
+
- request:
|
|
4
|
+
method: put
|
|
5
|
+
uri: https://api.workos.com/user_management/organization_memberships/om_01H5JQDV7R7ATEYZDEG0W5PRYS
|
|
6
|
+
body:
|
|
7
|
+
encoding: UTF-8
|
|
8
|
+
string: '{"id":"om_01H5JQDV7R7ATEYZDEG0W5PRYS","role_slugs":["admin","editor"]}'
|
|
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.1.4; arm64-darwin24; v5.25.0
|
|
18
|
+
Authorization:
|
|
19
|
+
- Bearer <API_KEY>
|
|
20
|
+
response:
|
|
21
|
+
status:
|
|
22
|
+
code: 200
|
|
23
|
+
message: OK
|
|
24
|
+
headers:
|
|
25
|
+
Date:
|
|
26
|
+
- Tue, 07 Oct 2025 14:22:26 GMT
|
|
27
|
+
Content-Type:
|
|
28
|
+
- application/json; charset=utf-8
|
|
29
|
+
Content-Length:
|
|
30
|
+
- '26'
|
|
31
|
+
Connection:
|
|
32
|
+
- keep-alive
|
|
33
|
+
Server:
|
|
34
|
+
- cloudflare
|
|
35
|
+
Cf-Ray:
|
|
36
|
+
- 98ae0cf66dd9344d-ORD
|
|
37
|
+
Cf-Cache-Status:
|
|
38
|
+
- DYNAMIC
|
|
39
|
+
Etag:
|
|
40
|
+
- W/"1a-pljHtlo127JYJR4E/RYOPb6ucbw"
|
|
41
|
+
Strict-Transport-Security:
|
|
42
|
+
- max-age=15552000; includeSubDomains
|
|
43
|
+
Vary:
|
|
44
|
+
- Origin, Accept-Encoding
|
|
45
|
+
Access-Control-Allow-Credentials:
|
|
46
|
+
- 'true'
|
|
47
|
+
Content-Security-Policy:
|
|
48
|
+
- 'default-src ''self'';base-uri ''self'';block-all-mixed-content;font-src ''self''
|
|
49
|
+
https: data:;frame-ancestors ''self'';img-src ''self'' data:;object-src ''none'';script-src
|
|
50
|
+
''self'';script-src-attr ''none'';style-src ''self'' https: ''unsafe-inline'';upgrade-insecure-requests'
|
|
51
|
+
Expect-Ct:
|
|
52
|
+
- max-age=0
|
|
53
|
+
Referrer-Policy:
|
|
54
|
+
- no-referrer
|
|
55
|
+
X-Content-Type-Options:
|
|
56
|
+
- nosniff
|
|
57
|
+
X-Dns-Prefetch-Control:
|
|
58
|
+
- 'off'
|
|
59
|
+
X-Download-Options:
|
|
60
|
+
- noopen
|
|
61
|
+
X-Frame-Options:
|
|
62
|
+
- SAMEORIGIN
|
|
63
|
+
X-Permitted-Cross-Domain-Policies:
|
|
64
|
+
- none
|
|
65
|
+
X-Request-Id:
|
|
66
|
+
- 92b6245b-40a8-4bdd-95d1-e32f6e9d1d70
|
|
67
|
+
X-Xss-Protection:
|
|
68
|
+
- '0'
|
|
69
|
+
Set-Cookie:
|
|
70
|
+
- _cfuvid=hq7zKar8D7SHPwNzTjLw.29beujgLQlq6cOYaWvYhEM-1759846946364-0.0.1.1-604800000;
|
|
71
|
+
path=/; domain=.workos.com; HttpOnly; Secure; SameSite=None
|
|
72
|
+
body:
|
|
73
|
+
encoding: UTF-8
|
|
74
|
+
string: '{"object":"organization_membership","id":"om_01H5JQDV7R7ATEYZDEG0W5PRYS","user_id":"user_01H5JQDV7R7ATEYZDEG0W5PRYS","organization_id":"organization_01H5JQDV7R7ATEYZDEG0W5PRYS","status":"active","role":{"slug":"admin"},"roles":[{"slug":"admin"},{"slug":"editor"}],"created_at":"2023-07-18T02:07:19.911Z","updated_at":"2023-07-18T02:07:19.911Z"}'
|
|
75
|
+
recorded_at: Tue, 07 Oct 2025 14:22:26 GMT
|
|
76
|
+
recorded_with: VCR 6.3.1
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
http_interactions:
|
|
3
|
+
- request:
|
|
4
|
+
method: put
|
|
5
|
+
uri: https://api.workos.com/user_management/users/user_01K78B3ZB5B7119MYEXTQE5KNE
|
|
6
|
+
body:
|
|
7
|
+
encoding: UTF-8
|
|
8
|
+
string: '{"locale":"en-US"}'
|
|
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.1.4; arm64-darwin23; v5.25.0
|
|
18
|
+
Authorization:
|
|
19
|
+
- Bearer <API_KEY>
|
|
20
|
+
response:
|
|
21
|
+
status:
|
|
22
|
+
code: 200
|
|
23
|
+
message: OK
|
|
24
|
+
headers:
|
|
25
|
+
Date:
|
|
26
|
+
- Sat, 11 Oct 2025 00:40:19 GMT
|
|
27
|
+
Content-Type:
|
|
28
|
+
- application/json; charset=utf-8
|
|
29
|
+
Transfer-Encoding:
|
|
30
|
+
- chunked
|
|
31
|
+
Connection:
|
|
32
|
+
- keep-alive
|
|
33
|
+
Cf-Ray:
|
|
34
|
+
- 98ca4e2ece4df13a-ORD
|
|
35
|
+
Cf-Cache-Status:
|
|
36
|
+
- DYNAMIC
|
|
37
|
+
Etag:
|
|
38
|
+
- W/"14b-avtqVpGgr9LY49Al2c3gzw62Mbc"
|
|
39
|
+
Strict-Transport-Security:
|
|
40
|
+
- max-age=15552000; includeSubDomains
|
|
41
|
+
Vary:
|
|
42
|
+
- Origin, Accept-Encoding
|
|
43
|
+
Access-Control-Allow-Credentials:
|
|
44
|
+
- 'true'
|
|
45
|
+
Content-Security-Policy:
|
|
46
|
+
- 'default-src ''self'';base-uri ''self'';block-all-mixed-content;font-src ''self''
|
|
47
|
+
https: data:;frame-ancestors ''self'';img-src ''self'' data:;object-src ''none'';script-src
|
|
48
|
+
''self'';script-src-attr ''none'';style-src ''self'' https: ''unsafe-inline'';upgrade-insecure-requests'
|
|
49
|
+
Expect-Ct:
|
|
50
|
+
- max-age=0
|
|
51
|
+
Referrer-Policy:
|
|
52
|
+
- no-referrer
|
|
53
|
+
X-Content-Type-Options:
|
|
54
|
+
- nosniff
|
|
55
|
+
X-Dns-Prefetch-Control:
|
|
56
|
+
- 'off'
|
|
57
|
+
X-Download-Options:
|
|
58
|
+
- noopen
|
|
59
|
+
X-Frame-Options:
|
|
60
|
+
- SAMEORIGIN
|
|
61
|
+
X-Permitted-Cross-Domain-Policies:
|
|
62
|
+
- none
|
|
63
|
+
X-Request-Id:
|
|
64
|
+
- e9a5015e-44f0-4321-990a-66d2ba4a3e15
|
|
65
|
+
X-Xss-Protection:
|
|
66
|
+
- '0'
|
|
67
|
+
Set-Cookie:
|
|
68
|
+
- _cfuvid=IZBV12JrFjDy0rHr.O3LoIyI0iKnOHdGa_R3uam5bZI-1760143219077-0.0.1.1-604800000;
|
|
69
|
+
path=/; domain=.workos.com; HttpOnly; Secure; SameSite=None
|
|
70
|
+
Server:
|
|
71
|
+
- cloudflare
|
|
72
|
+
body:
|
|
73
|
+
encoding: ASCII-8BIT
|
|
74
|
+
string: '{"object":"user","id":"user_01K78B3ZB5B7119MYEXTQE5KNE","email":"test-locale@example.com","email_verified":false,"first_name":"Jane","last_name":"Doe","profile_picture_url":null,"metadata":{},"last_sign_in_at":null,"locale":"en-US","created_at":"2025-10-11T00:35:49.727Z","updated_at":"2025-10-11T00:40:19.051Z","external_id":null}'
|
|
75
|
+
recorded_at: Sat, 11 Oct 2025 00:40:19 GMT
|
|
76
|
+
recorded_with: VCR 6.3.1
|
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: 5.
|
|
4
|
+
version: 5.27.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- WorkOS
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-
|
|
11
|
+
date: 2025-10-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: encryptor
|
|
@@ -326,6 +326,7 @@ files:
|
|
|
326
326
|
- spec/support/fixtures/vcr_cassettes/user_management/create_magic_auth/valid.yml
|
|
327
327
|
- spec/support/fixtures/vcr_cassettes/user_management/create_organization_membership/invalid.yml
|
|
328
328
|
- spec/support/fixtures/vcr_cassettes/user_management/create_organization_membership/valid.yml
|
|
329
|
+
- spec/support/fixtures/vcr_cassettes/user_management/create_organization_membership/valid_multiple_roles.yml
|
|
329
330
|
- spec/support/fixtures/vcr_cassettes/user_management/create_password_reset/valid.yml
|
|
330
331
|
- spec/support/fixtures/vcr_cassettes/user_management/create_user_invalid.yml
|
|
331
332
|
- spec/support/fixtures/vcr_cassettes/user_management/create_user_valid.yml
|
|
@@ -377,8 +378,10 @@ files:
|
|
|
377
378
|
- spec/support/fixtures/vcr_cassettes/user_management/send_verification_email/valid.yml
|
|
378
379
|
- spec/support/fixtures/vcr_cassettes/user_management/update_organization_membership/invalid.yml
|
|
379
380
|
- spec/support/fixtures/vcr_cassettes/user_management/update_organization_membership/valid.yml
|
|
381
|
+
- spec/support/fixtures/vcr_cassettes/user_management/update_organization_membership/valid_multiple_roles.yml
|
|
380
382
|
- spec/support/fixtures/vcr_cassettes/user_management/update_user/email.yml
|
|
381
383
|
- spec/support/fixtures/vcr_cassettes/user_management/update_user/invalid.yml
|
|
384
|
+
- spec/support/fixtures/vcr_cassettes/user_management/update_user/locale.yml
|
|
382
385
|
- spec/support/fixtures/vcr_cassettes/user_management/update_user/valid.yml
|
|
383
386
|
- spec/support/fixtures/vcr_cassettes/user_management/update_user_external_id_null.yml
|
|
384
387
|
- spec/support/fixtures/vcr_cassettes/user_management/update_user_password/invalid.yml
|
|
@@ -557,6 +560,7 @@ test_files:
|
|
|
557
560
|
- spec/support/fixtures/vcr_cassettes/user_management/create_magic_auth/valid.yml
|
|
558
561
|
- spec/support/fixtures/vcr_cassettes/user_management/create_organization_membership/invalid.yml
|
|
559
562
|
- spec/support/fixtures/vcr_cassettes/user_management/create_organization_membership/valid.yml
|
|
563
|
+
- spec/support/fixtures/vcr_cassettes/user_management/create_organization_membership/valid_multiple_roles.yml
|
|
560
564
|
- spec/support/fixtures/vcr_cassettes/user_management/create_password_reset/valid.yml
|
|
561
565
|
- spec/support/fixtures/vcr_cassettes/user_management/create_user_invalid.yml
|
|
562
566
|
- spec/support/fixtures/vcr_cassettes/user_management/create_user_valid.yml
|
|
@@ -608,8 +612,10 @@ test_files:
|
|
|
608
612
|
- spec/support/fixtures/vcr_cassettes/user_management/send_verification_email/valid.yml
|
|
609
613
|
- spec/support/fixtures/vcr_cassettes/user_management/update_organization_membership/invalid.yml
|
|
610
614
|
- spec/support/fixtures/vcr_cassettes/user_management/update_organization_membership/valid.yml
|
|
615
|
+
- spec/support/fixtures/vcr_cassettes/user_management/update_organization_membership/valid_multiple_roles.yml
|
|
611
616
|
- spec/support/fixtures/vcr_cassettes/user_management/update_user/email.yml
|
|
612
617
|
- spec/support/fixtures/vcr_cassettes/user_management/update_user/invalid.yml
|
|
618
|
+
- spec/support/fixtures/vcr_cassettes/user_management/update_user/locale.yml
|
|
613
619
|
- spec/support/fixtures/vcr_cassettes/user_management/update_user/valid.yml
|
|
614
620
|
- spec/support/fixtures/vcr_cassettes/user_management/update_user_external_id_null.yml
|
|
615
621
|
- spec/support/fixtures/vcr_cassettes/user_management/update_user_password/invalid.yml
|