workos 5.8.0 → 5.10.0

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: 0afe2a59cbc6559cee74fe894ad0ed632b6788955377949f87c641a3550fff92
4
- data.tar.gz: 1725783e695045041a65334679db26c2fb396f1e79a3c4d18d7491d91d479756
3
+ metadata.gz: 83c350d6c017c0cf423adb02925391b3a5e11d622479d76073c3c6372e526105
4
+ data.tar.gz: 83a8e5700dc7a3d47d37a84de01f866997a260eeaf96c55fd40318a30195a7d7
5
5
  SHA512:
6
- metadata.gz: 626069aef80ea5cf1b3254679fb7f7c9054fe7f908c464521e42c566186c21170f5a3187e98c59d6f1f209d107e53995facb58763965042ce257d2e4cd8f5d63
7
- data.tar.gz: 0f941008d87d91b19bbd5829cf79580df7cabb9e3d37891aa3016fca9e4af844ecd8a30f3b4e6e567d6a47ece9249b6e6da02eda157928bd2ee8c5d45c6404d2
6
+ metadata.gz: 48bcc853e186de15ce9e71e98415d801e412540a43fe1711ab97264b3419ce7dc7c1ec6095411cc7093bcb788b02ab51efe4689c0a79993f921e037ce0a7954c
7
+ data.tar.gz: f52aec8320aa98bb11ec114ffccb51a82218c7581cac202f74facfe943e96633b90262a67c37ed0677c73f4f73bb3bdd77760a67471c80a18ca878e0d7dffb55
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- workos (5.8.0)
4
+ workos (5.10.0)
5
5
  encryptor (~> 3.0)
6
6
  jwt (~> 2.8)
7
7
 
data/lib/workos/client.rb CHANGED
@@ -109,6 +109,14 @@ module WorkOS
109
109
  http_status: http_status,
110
110
  request_id: response['x-request-id'],
111
111
  )
112
+ when 403
113
+ raise ForbiddenRequestError.new(
114
+ message: json['message'],
115
+ http_status: http_status,
116
+ request_id: response['x-request-id'],
117
+ code: json['code'],
118
+ data: json,
119
+ )
112
120
  when 404
113
121
  raise NotFoundError.new(
114
122
  message: json['message'],
data/lib/workos/errors.rb CHANGED
@@ -64,6 +64,10 @@ module WorkOS
64
64
  # parameters.
65
65
  class InvalidRequestError < WorkOSError; end
66
66
 
67
+ # ForbiddenError is raised when a request is forbidden, likely due to missing a step
68
+ # (i.e. verifying email ownership before authenticating).
69
+ class ForbiddenRequestError < WorkOSError; end
70
+
67
71
  # SignatureVerificationError is raised when the signature verification for a
68
72
  # webhook fails
69
73
  class SignatureVerificationError < WorkOSError; end
@@ -180,6 +180,32 @@ module WorkOS
180
180
  response.is_a? Net::HTTPSuccess
181
181
  end
182
182
 
183
+ # Retrieve a list of roles for the given organization.
184
+ #
185
+ # @param [String] organizationId The ID of the organization to fetch roles for.
186
+ def list_organization_roles(organization_id:)
187
+ response = execute_request(
188
+ request: get_request(
189
+ path: "/organizations/#{organization_id}/roles",
190
+ auth: true,
191
+ ),
192
+ )
193
+
194
+ parsed_response = JSON.parse(response.body)
195
+
196
+ roles = parsed_response['data'].map do |role|
197
+ WorkOS::Role.new(role.to_json)
198
+ end
199
+
200
+ WorkOS::Types::ListStruct.new(
201
+ data: roles,
202
+ list_metadata: {
203
+ after: nil,
204
+ before: nil,
205
+ },
206
+ )
207
+ end
208
+
183
209
  private
184
210
 
185
211
  def check_and_raise_organization_error(response:)
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WorkOS
4
+ # The Role class provides a lightweight wrapper around
5
+ # a WorkOS Role resource. This class is not meant to be instantiated
6
+ # in user space, and is instantiated internally but exposed.
7
+ class Role
8
+ include HashProvider
9
+
10
+ attr_accessor :id, :name, :slug, :description, :type, :created_at, :updated_at
11
+
12
+ def initialize(json)
13
+ hash = JSON.parse(json, symbolize_names: true)
14
+
15
+ @id = hash[:id]
16
+ @name = hash[:name]
17
+ @slug = hash[:slug]
18
+ @description = hash[:description]
19
+ @type = hash[:type]
20
+ @created_at = hash[:created_at]
21
+ @updated_at = hash[:updated_at]
22
+ end
23
+
24
+ def to_json(*)
25
+ {
26
+ id: id,
27
+ name: name,
28
+ slug: slug,
29
+ description: description,
30
+ type: type,
31
+ created_at: created_at,
32
+ updated_at: updated_at,
33
+ }
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WorkOS
4
+ module Types
5
+ # The WidgetScope constants are declarations of a fixed set of values for
6
+ # scopes while generating a widget token.
7
+ module WidgetScope
8
+ USERS_TABLE_MANAGE = 'widgets:users-table:manage'
9
+
10
+ ALL = [USERS_TABLE_MANAGE].freeze
11
+ end
12
+ end
13
+ end
data/lib/workos/types.rb CHANGED
@@ -7,5 +7,6 @@ module WorkOS
7
7
  autoload :Intent, 'workos/types/intent'
8
8
  autoload :ListStruct, 'workos/types/list_struct'
9
9
  autoload :PasswordlessSessionStruct, 'workos/types/passwordless_session_struct'
10
+ autoload :WidgetScope, 'workos/types/widget_scope'
10
11
  end
11
12
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module WorkOS
4
- VERSION = '5.8.0'
4
+ VERSION = '5.10.0'
5
5
  end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'net/http'
4
+
5
+ module WorkOS
6
+ # The Widgets module provides resource methods for working with the Widgets APIs
7
+ module Widgets
8
+ class << self
9
+ include Client
10
+
11
+ WIDGET_SCOPES = WorkOS::Types::WidgetScope::ALL
12
+
13
+ # Generate a widget token.
14
+ #
15
+ # @param [String] organization_id The ID of the organization to generate the token for.
16
+ # @param [String] user_id The ID of the user to generate the token for.
17
+ # @param [WidgetScope[]] The scopes to generate the token for.
18
+ def get_token(organization_id:, user_id:, scopes:)
19
+ validate_scopes(scopes)
20
+
21
+ request = post_request(
22
+ auth: true,
23
+ body: {
24
+ organization_id: organization_id,
25
+ user_id: user_id,
26
+ scopes: scopes,
27
+ },
28
+ path: '/widgets/token',
29
+ )
30
+
31
+ response = execute_request(request: request)
32
+
33
+ JSON.parse(response.body)['token']
34
+ end
35
+
36
+ private
37
+
38
+ def validate_scopes(scopes)
39
+ return if scopes.all? { |scope| WIDGET_SCOPES.include?(scope) }
40
+
41
+ raise ArgumentError, 'scopes contains an invalid value.' \
42
+ " Every item in `scopes` must be in #{WIDGET_SCOPES}"
43
+ end
44
+ end
45
+ end
46
+ end
data/lib/workos.rb CHANGED
@@ -71,6 +71,7 @@ module WorkOS
71
71
  autoload :Profile, 'workos/profile'
72
72
  autoload :ProfileAndToken, 'workos/profile_and_token'
73
73
  autoload :RefreshAuthenticationResponse, 'workos/refresh_authentication_response'
74
+ autoload :Role, 'workos/role'
74
75
  autoload :Session, 'workos/session'
75
76
  autoload :SSO, 'workos/sso'
76
77
  autoload :Types, 'workos/types'
@@ -81,11 +82,13 @@ module WorkOS
81
82
  autoload :VerifyChallenge, 'workos/verify_challenge'
82
83
  autoload :Webhook, 'workos/webhook'
83
84
  autoload :Webhooks, 'workos/webhooks'
85
+ autoload :Widgets, 'workos/widgets'
84
86
 
85
87
  # Errors
86
88
  autoload :APIError, 'workos/errors'
87
89
  autoload :AuthenticationError, 'workos/errors'
88
90
  autoload :InvalidRequestError, 'workos/errors'
91
+ autoload :ForbiddenRequestError, 'workos/errors'
89
92
  autoload :SignatureVerificationError, 'workos/errors'
90
93
  autoload :TimeoutError, 'workos/errors'
91
94
  autoload :NotFoundError, 'workos/errors'
@@ -323,4 +323,22 @@ describe WorkOS::Organizations do
323
323
  end
324
324
  end
325
325
  end
326
+
327
+ describe '.list_organization_roles' do
328
+ context 'with no options' do
329
+ it 'returns roles for organization' do
330
+ expected_metadata = {
331
+ after: nil,
332
+ before: nil,
333
+ }
334
+
335
+ VCR.use_cassette 'organization/list_organization_roles' do
336
+ roles = described_class.list_organization_roles(organization_id: 'org_01JEXP6Z3X7HE4CB6WQSH9ZAFE')
337
+
338
+ expect(roles.data.size).to eq(7)
339
+ expect(roles.list_metadata).to eq(expected_metadata)
340
+ end
341
+ end
342
+ end
343
+ end
326
344
  end
@@ -404,6 +404,20 @@ describe WorkOS::UserManagement do
404
404
  end
405
405
  end
406
406
  end
407
+
408
+ context 'with an unverified user' do
409
+ it 'raises a ForbiddenRequestError' do
410
+ VCR.use_cassette('user_management/authenticate_with_password/unverified') do
411
+ expect do
412
+ WorkOS::UserManagement.authenticate_with_password(
413
+ email: 'unverified@workos.app',
414
+ password: '7YtYic00VWcXatPb',
415
+ client_id: 'client_123',
416
+ )
417
+ end.to raise_error(WorkOS::ForbiddenRequestError, /Email ownership must be verified before authentication/)
418
+ end
419
+ end
420
+ end
407
421
  end
408
422
 
409
423
  describe '.authenticate_with_code' do
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe WorkOS::Widgets do
4
+ it_behaves_like 'client'
5
+
6
+ describe '.get_token' do
7
+ let(:organization_id) { 'org_01JCP9G67MNAH0KC4B72XZ67M7' }
8
+ let(:user_id) { 'user_01JCP9H4SHS4N3J6XTKDT7JNPE' }
9
+
10
+ describe 'with a valid organization_id and user_id and scopes' do
11
+ it 'returns a widget token' do
12
+ VCR.use_cassette 'widgets/get_token' do
13
+ token = described_class.get_token(
14
+ organization_id: organization_id,
15
+ user_id: user_id,
16
+ scopes: ['widgets:users-table:manage'],
17
+ )
18
+
19
+ expect(token).to start_with('eyJhbGciOiJSUzI1NiIsImtpZ')
20
+ end
21
+ end
22
+ end
23
+
24
+ describe 'with an invalid organization_id' do
25
+ it 'raises an error' do
26
+ VCR.use_cassette 'widgets/get_token_invalid_organization_id' do
27
+ expect do
28
+ described_class.get_token(
29
+ organization_id: 'bogus-id',
30
+ user_id: user_id,
31
+ scopes: ['widgets:users-table:manage'],
32
+ )
33
+ end.to raise_error(
34
+ WorkOS::NotFoundError,
35
+ /Organization not found: 'bogus-id'/,
36
+ )
37
+ end
38
+ end
39
+ end
40
+
41
+ describe 'with an invalid user_id' do
42
+ it 'raises an error' do
43
+ VCR.use_cassette 'widgets/get_token_invalid_user_id' do
44
+ expect do
45
+ described_class.get_token(
46
+ organization_id: organization_id,
47
+ user_id: 'bogus-id',
48
+ scopes: ['widgets:users-table:manage'],
49
+ )
50
+ end.to raise_error(
51
+ WorkOS::NotFoundError,
52
+ /User not found: 'bogus-id'/,
53
+ )
54
+ end
55
+ end
56
+ end
57
+
58
+ describe 'with invalid scopes' do
59
+ it 'raises an error' do
60
+ expect do
61
+ described_class.get_token(
62
+ organization_id: organization_id,
63
+ user_id: user_id,
64
+ scopes: ['bogus-scope'],
65
+ )
66
+ end.to raise_error(
67
+ ArgumentError,
68
+ /scopes contains an invalid value/,
69
+ )
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,82 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.workos.com/organizations/org_01JEXP6Z3X7HE4CB6WQSH9ZAFE/roles
6
+ body:
7
+ encoding: US-ASCII
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/3.3.6; arm64-darwin23; v5.9.0
18
+ Authorization:
19
+ - Bearer <API_KEY>
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Date:
26
+ - Mon, 23 Dec 2024 20:23:07 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Cf-Ray:
34
+ - 8f6b114e5e60c96a-IAD
35
+ Cf-Cache-Status:
36
+ - DYNAMIC
37
+ Etag:
38
+ - W/"6b6-bZ2pS5djCBrbcATBSFlbZ90PHB8"
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
+ - a8db37d7-9244-4e2a-b183-b5e2a67d8104
65
+ X-Xss-Protection:
66
+ - "0"
67
+ Server:
68
+ - cloudflare
69
+ body:
70
+ encoding: ASCII-8BIT
71
+ string:
72
+ '{"object":"list","data":[{"object":"role","id":"role_01HS1C7GRJE08PBR3M6Y0ZYGDZ","description":"Write
73
+ access to every resource available","name":"Admin","slug":"admin","type":"EnvironmentRole","created_at":"2024-03-15T15:38:29.521Z","updated_at":"2024-11-14T17:08:00.556Z"},{"object":"role","id":"role_01JA8GJZRDSZEB9289DQXJ3N9Z","description":"","name":"Billing
74
+ Manager","slug":"billing","type":"EnvironmentRole","created_at":"2024-10-15T16:36:11.653Z","updated_at":"2024-12-19T21:27:01.286Z"},{"object":"role","id":"role_01HSBH4R6RX0V86S3R590NNZW2","description":"Developer
75
+ role","name":"Developer","slug":"developer","type":"EnvironmentRole","created_at":"2024-03-19T14:16:46.038Z","updated_at":"2024-03-19T14:16:46.038Z"},{"object":"role","id":"role_01HS4GDWJ8T6NQPTX2D0R5KBHN","description":"Edit
76
+ and view access to non-critical resources","name":"Editor","slug":"editor","type":"EnvironmentRole","created_at":"2024-03-16T20:49:35.815Z","updated_at":"2024-03-16T20:52:19.410Z"},{"object":"role","id":"role_01HRFZE22WS2MGX6EWAG2JX6NW","description":"The
77
+ default user role","name":"Member","slug":"member","type":"EnvironmentRole","created_at":"2024-03-08T21:27:47.034Z","updated_at":"2024-08-14T00:27:46.265Z"},{"object":"role","id":"role_01JEYJ2Z5MYG0TZYTDF02MW11N","description":"Manage
78
+ billing for organization.","name":"Billing manager","slug":"org-billing-manager","type":"OrganizationRole","created_at":"2024-12-12T23:08:28.712Z","updated_at":"2024-12-12T23:08:28.712Z"},{"object":"role","id":"role_01JF0B7MQ9X414WQRAQMQYE1GS","description":"","name":"Platform
79
+ Manager","slug":"org-platform-manager","type":"OrganizationRole","created_at":"2024-12-13T15:47:10.692Z","updated_at":"2024-12-13T15:47:10.692Z"}]}'
80
+ http_version:
81
+ recorded_at: Mon, 23 Dec 2024 20:23:07 GMT
82
+ recorded_with: VCR 5.0.0
@@ -0,0 +1,82 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.workos.com/user_management/authenticate
6
+ body:
7
+ encoding: UTF-8
8
+ string:
9
+ '{"client_id":"client_123","client_secret":"<API_KEY>","email":"unverified@workos.app","password":"7YtYic00VWcXatPb","ip_address":"200.240.210.16","user_agent":"Mozilla/5.0
10
+ (Macintosh; Intel Mac OS X 10_15_7) Chrome/108.0.0.0 Safari/537.36","grant_type":"password"}'
11
+ headers:
12
+ Content-Type:
13
+ - application/json
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - '*/*'
18
+ User-Agent:
19
+ - WorkOS; ruby/3.0.2; arm64-darwin21; v2.16.0
20
+ response:
21
+ status:
22
+ code: 403
23
+ message: Email ownership must be verified before authentication.
24
+ headers:
25
+ Date:
26
+ - Tue, 29 Aug 2023 00:24:25 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Cf-Ray:
34
+ - 7fe0a6a27b0bc39c-SEA
35
+ Cf-Cache-Status:
36
+ - DYNAMIC
37
+ Etag:
38
+ - W/"16e-hoaHaR0EhmAH7TaNBOF8B2OHJq4"
39
+ Strict-Transport-Security:
40
+ - max-age=15552000; includeSubDomains
41
+ Vary:
42
+ - Origin, Accept-Encoding
43
+ Via:
44
+ - 1.1 spaces-router (devel)
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
+ - 62990367-ddaf-46b3-a32f-38fc4f29d581
67
+ X-Xss-Protection:
68
+ - '0'
69
+ Set-Cookie:
70
+ - __cf_bm=IiwoT1XAlPdVWj334oRTocU7zZyvKgYw61o0UoA7GtE-1693268665-0-AZTn/iGDfGV6R5j3aj7lcPod7FB9P3cbHc9pD1oN/U5ZmnUYvpCecp6AL+8p/+/bMuwwGqXGNMSa/eIpa0TVm+I=;
71
+ path=/; expires=Tue, 29-Aug-23 00:54:25 GMT; domain=.workos.com; HttpOnly;
72
+ Secure; SameSite=None
73
+ - __cfruid=beafd87202de7b7d34fd4a1af55696cb5d19364d-1693268665; path=/; domain=.workos.com;
74
+ HttpOnly; Secure; SameSite=None
75
+ Server:
76
+ - cloudflare
77
+ body:
78
+ encoding: ASCII-8BIT
79
+ string: '{"code":"email_verification_required", "message":"Email ownership must be verified before authentication.", "email":"unverified@workos.app", "pending_authentication_token":"RWx94aFHwanPOebv7tKbBkJm0", "email_verification_id":"email_verification_01JG43A0WYAFAPHMNBV5XF2R4M"}'
80
+ http_version:
81
+ recorded_at: Tue, 29 Aug 2023 00:24:25 GMT
82
+ recorded_with: VCR 5.0.0
@@ -0,0 +1,82 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.workos.com/widgets/token
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"organization_id":"org_01JCP9G67MNAH0KC4B72XZ67M7","user_id":"user_01JCP9H4SHS4N3J6XTKDT7JNPE","scopes":["widgets:users-table:manage"]}'
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.3.6; arm64-darwin23; v5.8.0
18
+ Authorization:
19
+ - Bearer <API_KEY>
20
+ response:
21
+ status:
22
+ code: 201
23
+ message: Created
24
+ headers:
25
+ Date:
26
+ - Thu, 14 Nov 2024 21:51:34 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Content-Length:
30
+ - '791'
31
+ Connection:
32
+ - keep-alive
33
+ Cf-Ray:
34
+ - 8e2a394198f8c9b8-IAD
35
+ Cf-Cache-Status:
36
+ - DYNAMIC
37
+ Etag:
38
+ - W/"317-Nylo8f8lWbsA0UUWqqV59mFy5jo"
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
+ - bf98d35e-d9ca-437f-b937-150e937af0f1
65
+ X-Xss-Protection:
66
+ - '0'
67
+ Set-Cookie:
68
+ - __cf_bm=GsR9Veicl9ZRIR1pUSamJ5m95HmklSbWNwtyp_fSpB4-1731621094-1.0.1.1-VW09qjPlT4T.AGwnsHxe7p_A.Onr9Oe7YnxumCz7B9XmzqYbLz9fx7cF6Qtw3KW0PIshpAVkluIsGWSCJQ5AjQ;
69
+ path=/; expires=Thu, 14-Nov-24 22:21:34 GMT; domain=.workos.com; HttpOnly;
70
+ Secure; SameSite=None
71
+ - __cfruid=022c638e9216cb6be687ace27cb356d48cbd4256-1731621094; path=/; domain=.workos.com;
72
+ HttpOnly; Secure; SameSite=None
73
+ - _cfuvid=kczJ.JXlRroyPs5B7UjNUynSmsUjYTWP_jcLNj2iiuM-1731621094755-0.0.1.1-604800000;
74
+ path=/; domain=.workos.com; HttpOnly; Secure; SameSite=None
75
+ Server:
76
+ - cloudflare
77
+ body:
78
+ encoding: UTF-8
79
+ string: '{"token":"eyJhbGciOiJSUzI1NiIsImtpZCI6InNzb19vaWRjX2tleV9wYWlyXzAxSFY3SlpGWEtQOVhCQjc2NjY0TkdUQlpYIn0.eyJhdWQiOiJodHRwczovL2FwaS53b3Jrb3MuY29tIiwiaXNzIjoiaHR0cHM6Ly9hcGkud29ya29zLmNvbSIsInN1YiI6InVzZXJfMDFKQ1A5SDRTSFM0TjNKNlhUS0RUN0pOUEUiLCJqdGkiOiIwMUpDUEFKMUFHWDVESzFNM0hDQTk5MFM1SiIsIm9yZ19pZCI6Im9yZ18wMUpDUDlHNjdNTkFIMEtDNEI3MlhaNjdNNyIsInBlcm1pc3Npb25zIjpbInVzZXJzOm1hbmFnZSIsInVzZXJzOnZpZXciXSwiZXhwIjoxNzMxNjI0Njk0LCJpYXQiOjE3MzE2MjEwOTR9.CTYliFAGFjw-_Lyla-yVBOUAn1ZqU-J7aOdWhAW8fiEsNMz73Fb5nRACa0PFWBE3HK1a8waV-S5lBCGHyxgYOaew5URNnlYXVwlgpKwujHDrW47FrYpxkyxVovY9z9SqDDNRHWBqJM3mH_4Fn9jaHwAVT0SPJrJ7Q4-jxfTc0_sZMR7RVJaBIXPEU8og6Zwc84Gx-9A-mBUA3PPUXfaa8JrCr5OGc482vbD1rF5sjk0jx_FovHrlI3qRo5nkQ3_5WEi7LzdxSPviITxY1-dtm0HbeULz8IL7Ic5O4Ok4lB2c8s8XoZT1JqUMmEHfugkWyQ4juN5aHpmf6ux8cJSJWg"}'
80
+ http_version:
81
+ recorded_at: Thu, 14 Nov 2024 21:51:34 GMT
82
+ recorded_with: VCR 5.0.0
@@ -0,0 +1,74 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.workos.com/widgets/token
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"organization_id":"bogus-id","user_id":"user_01JCP9H4SHS4N3J6XTKDT7JNPE","scopes":["widgets:users-table:manage"]}'
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.3.6; arm64-darwin23; v5.8.0
18
+ Authorization:
19
+ - Bearer <API_KEY>
20
+ response:
21
+ status:
22
+ code: 404
23
+ message: Not Found
24
+ headers:
25
+ Date:
26
+ - Thu, 14 Nov 2024 22:02:40 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Cf-Ray:
34
+ - 8e2a49858b5a7fa2-IAD
35
+ Cf-Cache-Status:
36
+ - DYNAMIC
37
+ Etag:
38
+ - W/"62-XNhANyOqo4doKt47ORHxpVuFTYg"
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
+ - 3d383216-51fe-42cd-87e2-7fee32719353
65
+ X-Xss-Protection:
66
+ - '0'
67
+ Server:
68
+ - cloudflare
69
+ body:
70
+ encoding: ASCII-8BIT
71
+ string: '{"message":"Organization not found: ''bogus-id''.","code":"entity_not_found","entity_id":"bogus-id"}'
72
+ http_version:
73
+ recorded_at: Thu, 14 Nov 2024 22:02:40 GMT
74
+ recorded_with: VCR 5.0.0
@@ -0,0 +1,74 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.workos.com/widgets/token
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"organization_id":"org_01JCP9G67MNAH0KC4B72XZ67M7","user_id":"bogus-id","scopes":["widgets:users-table:manage"]}'
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.3.6; arm64-darwin23; v5.8.0
18
+ Authorization:
19
+ - Bearer <API_KEY>
20
+ response:
21
+ status:
22
+ code: 404
23
+ message: Not Found
24
+ headers:
25
+ Date:
26
+ - Thu, 14 Nov 2024 22:02:46 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Cf-Ray:
34
+ - 8e2a49a82b31c54f-IAD
35
+ Cf-Cache-Status:
36
+ - DYNAMIC
37
+ Etag:
38
+ - W/"5a-TOigA+IvFyAtHvUdIXFXZWRdn8I"
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
+ - 0aeb3b90-0fd7-4de9-8d76-3d0e340ed583
65
+ X-Xss-Protection:
66
+ - '0'
67
+ Server:
68
+ - cloudflare
69
+ body:
70
+ encoding: ASCII-8BIT
71
+ string: '{"message":"User not found: ''bogus-id''.","code":"entity_not_found","entity_id":"bogus-id"}'
72
+ http_version:
73
+ recorded_at: Thu, 14 Nov 2024 22:02:46 GMT
74
+ 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: 5.8.0
4
+ version: 5.10.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-10-16 00:00:00.000000000 Z
11
+ date: 2025-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: encryptor
@@ -165,6 +165,7 @@ files:
165
165
  - lib/workos/profile.rb
166
166
  - lib/workos/profile_and_token.rb
167
167
  - lib/workos/refresh_authentication_response.rb
168
+ - lib/workos/role.rb
168
169
  - lib/workos/session.rb
169
170
  - lib/workos/sso.rb
170
171
  - lib/workos/types.rb
@@ -172,6 +173,7 @@ files:
172
173
  - lib/workos/types/list_struct.rb
173
174
  - lib/workos/types/passwordless_session_struct.rb
174
175
  - lib/workos/types/provider.rb
176
+ - lib/workos/types/widget_scope.rb
175
177
  - lib/workos/user.rb
176
178
  - lib/workos/user_and_token.rb
177
179
  - lib/workos/user_management.rb
@@ -180,6 +182,7 @@ files:
180
182
  - lib/workos/version.rb
181
183
  - lib/workos/webhook.rb
182
184
  - lib/workos/webhooks.rb
185
+ - lib/workos/widgets.rb
183
186
  - spec/lib/workos/audit_logs_spec.rb
184
187
  - spec/lib/workos/client.rb
185
188
  - spec/lib/workos/configuration_spec.rb
@@ -194,6 +197,7 @@ files:
194
197
  - spec/lib/workos/sso_spec.rb
195
198
  - spec/lib/workos/user_management_spec.rb
196
199
  - spec/lib/workos/webhooks_spec.rb
200
+ - spec/lib/workos/widgets_spec.rb
197
201
  - spec/spec_helper.rb
198
202
  - spec/support/fixtures/vcr_cassettes/audit_logs/create_event.yml
199
203
  - spec/support/fixtures/vcr_cassettes/audit_logs/create_event_custom_idempotency_key.yml
@@ -264,6 +268,7 @@ files:
264
268
  - spec/support/fixtures/vcr_cassettes/organization/get.yml
265
269
  - spec/support/fixtures/vcr_cassettes/organization/get_invalid.yml
266
270
  - spec/support/fixtures/vcr_cassettes/organization/list.yml
271
+ - spec/support/fixtures/vcr_cassettes/organization/list_organization_roles.yml
267
272
  - spec/support/fixtures/vcr_cassettes/organization/update.yml
268
273
  - spec/support/fixtures/vcr_cassettes/organization/update_without_name.yml
269
274
  - spec/support/fixtures/vcr_cassettes/passwordless/create_session.yml
@@ -297,6 +302,7 @@ files:
297
302
  - spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_organization_selection/invalid.yml
298
303
  - spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_organization_selection/valid.yml
299
304
  - spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_password/invalid.yml
305
+ - spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_password/unverified.yml
300
306
  - spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_password/valid.yml
301
307
  - spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_refresh_code/invalid.yml
302
308
  - spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_refresh_token/valid.yml
@@ -364,6 +370,9 @@ files:
364
370
  - spec/support/fixtures/vcr_cassettes/user_management/verify_email/invalid_code.yml
365
371
  - spec/support/fixtures/vcr_cassettes/user_management/verify_email/invalid_magic_auth_challenge.yml
366
372
  - spec/support/fixtures/vcr_cassettes/user_management/verify_email/valid.yml
373
+ - spec/support/fixtures/vcr_cassettes/widgets/get_token.yml
374
+ - spec/support/fixtures/vcr_cassettes/widgets/get_token_invalid_organization_id.yml
375
+ - spec/support/fixtures/vcr_cassettes/widgets/get_token_invalid_user_id.yml
367
376
  - spec/support/profile.txt
368
377
  - spec/support/shared_examples/client.rb
369
378
  - spec/support/webhook_payload.txt
@@ -407,6 +416,7 @@ test_files:
407
416
  - spec/lib/workos/sso_spec.rb
408
417
  - spec/lib/workos/user_management_spec.rb
409
418
  - spec/lib/workos/webhooks_spec.rb
419
+ - spec/lib/workos/widgets_spec.rb
410
420
  - spec/spec_helper.rb
411
421
  - spec/support/fixtures/vcr_cassettes/audit_logs/create_event.yml
412
422
  - spec/support/fixtures/vcr_cassettes/audit_logs/create_event_custom_idempotency_key.yml
@@ -477,6 +487,7 @@ test_files:
477
487
  - spec/support/fixtures/vcr_cassettes/organization/get.yml
478
488
  - spec/support/fixtures/vcr_cassettes/organization/get_invalid.yml
479
489
  - spec/support/fixtures/vcr_cassettes/organization/list.yml
490
+ - spec/support/fixtures/vcr_cassettes/organization/list_organization_roles.yml
480
491
  - spec/support/fixtures/vcr_cassettes/organization/update.yml
481
492
  - spec/support/fixtures/vcr_cassettes/organization/update_without_name.yml
482
493
  - spec/support/fixtures/vcr_cassettes/passwordless/create_session.yml
@@ -510,6 +521,7 @@ test_files:
510
521
  - spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_organization_selection/invalid.yml
511
522
  - spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_organization_selection/valid.yml
512
523
  - spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_password/invalid.yml
524
+ - spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_password/unverified.yml
513
525
  - spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_password/valid.yml
514
526
  - spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_refresh_code/invalid.yml
515
527
  - spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_refresh_token/valid.yml
@@ -577,6 +589,9 @@ test_files:
577
589
  - spec/support/fixtures/vcr_cassettes/user_management/verify_email/invalid_code.yml
578
590
  - spec/support/fixtures/vcr_cassettes/user_management/verify_email/invalid_magic_auth_challenge.yml
579
591
  - spec/support/fixtures/vcr_cassettes/user_management/verify_email/valid.yml
592
+ - spec/support/fixtures/vcr_cassettes/widgets/get_token.yml
593
+ - spec/support/fixtures/vcr_cassettes/widgets/get_token_invalid_organization_id.yml
594
+ - spec/support/fixtures/vcr_cassettes/widgets/get_token_invalid_user_id.yml
580
595
  - spec/support/profile.txt
581
596
  - spec/support/shared_examples/client.rb
582
597
  - spec/support/webhook_payload.txt