workos 5.8.0 → 5.10.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 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