workos 0.2.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -0
  3. data/.ruby-version +1 -1
  4. data/.semaphore/semaphore.yml +13 -6
  5. data/Gemfile.lock +6 -6
  6. data/README.md +1 -1
  7. data/lib/workos.rb +2 -0
  8. data/lib/workos/audit_trail.rb +0 -16
  9. data/lib/workos/client.rb +43 -4
  10. data/lib/workos/connection.rb +48 -0
  11. data/lib/workos/directory_sync.rb +128 -0
  12. data/lib/workos/profile.rb +6 -7
  13. data/lib/workos/sso.rb +48 -35
  14. data/lib/workos/types.rb +2 -2
  15. data/lib/workos/types/connection_struct.rb +15 -0
  16. data/lib/workos/types/profile_struct.rb +2 -3
  17. data/lib/workos/types/provider_enum.rb +0 -1
  18. data/lib/workos/version.rb +1 -1
  19. data/sorbet/rbi/hidden-definitions/errors.txt +1416 -321
  20. data/sorbet/rbi/hidden-definitions/hidden.rbi +2490 -597
  21. data/sorbet/rbi/sorbet-typed/lib/rainbow/all/rainbow.rbi +36 -14
  22. data/sorbet/rbi/todo.rbi +1 -6
  23. data/spec/lib/workos/directory_sync_spec.rb +139 -0
  24. data/spec/lib/workos/sso_spec.rb +50 -4
  25. data/spec/support/fixtures/vcr_cassettes/directory_sync/get_group.yml +62 -0
  26. data/spec/support/fixtures/vcr_cassettes/directory_sync/get_group_with_invalid_id.yml +62 -0
  27. data/spec/support/fixtures/vcr_cassettes/directory_sync/get_user.yml +62 -0
  28. data/spec/support/fixtures/vcr_cassettes/directory_sync/get_user_with_invalid_id.yml +62 -0
  29. data/spec/support/fixtures/vcr_cassettes/directory_sync/list_directories.yml +62 -0
  30. data/spec/support/fixtures/vcr_cassettes/directory_sync/list_directories_with_domain_param.yml +63 -0
  31. data/spec/support/fixtures/vcr_cassettes/directory_sync/list_groups.yml +64 -0
  32. data/spec/support/fixtures/vcr_cassettes/directory_sync/list_groups_with_directory_param.yml +62 -0
  33. data/spec/support/fixtures/vcr_cassettes/directory_sync/list_users.yml +64 -0
  34. data/spec/support/fixtures/vcr_cassettes/directory_sync/list_users_with_directory_param.yml +62 -0
  35. data/spec/support/fixtures/vcr_cassettes/sso/create_connection_with_invalid_source.yml +58 -0
  36. data/spec/support/fixtures/vcr_cassettes/sso/create_connection_with_valid_source.yml +63 -0
  37. data/workos.gemspec +14 -11
  38. metadata +35 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85c5142c818be2437ddf9782fa43d686f43a36cdae410a8c76c585b815614673
4
- data.tar.gz: 18a225e552fa8482536f3b7b390f57e1b1491e9927f0a09a7b80f44b4910120c
3
+ metadata.gz: 773cbb5edfa2433922650417a8b487513bc197fa72b758fd4423bea67bf87f49
4
+ data.tar.gz: 72f573248a97132d57117718e811242b6be36ad15025eeec9f311a3477186bf4
5
5
  SHA512:
6
- metadata.gz: 1d6624e4e04f3657be82f13feb304f25c2d4cd102ceb7bb25e1755c6abdd3271ef63cbb1ca66a0005182f08efcb68e896743fc8100d2a7ea9deebc466c8d52a9
7
- data.tar.gz: acf638e6e5479c76bbb0bc258277a07db00f975aa30ea196c17f0f5c2a30b8c95ea33451a976dfc51fff22f00d9820beb1b820bb81d88b93830529055fe51234
6
+ metadata.gz: 4fe620f43ec9b30ed8a885c08d157bfc5f0da091d820306fcba3e9dee9ba7b6d69d3f5b5cad8b74882a3080058ede66da47af228c2ccd761715ee4c8a7d82eac
7
+ data.tar.gz: 442b32e6bdc38579e21937c7da371d4b6f767027c021620f538d468d0e8ac9ca31cd226778c7b5f10f419f3d1c0d21cb402e846738abd871a67c95ac315130d4
@@ -10,6 +10,8 @@ Layout/LineLength:
10
10
  - '(\A|\s)/.*?/'
11
11
  Metrics/BlockLength:
12
12
  ExcludedMethods: ['describe', 'context']
13
+ Metrics/ModuleLength:
14
+ Max: 150
13
15
  Style/TrailingCommaInArguments:
14
16
  EnforcedStyleForMultiline: 'consistent_comma'
15
17
  Style/TrailingCommaInHashLiteral:
@@ -1 +1 @@
1
- 2.6.5
1
+ 2.7.1
@@ -1,9 +1,11 @@
1
1
  version: v1.0
2
2
  name: Ruby
3
+
3
4
  agent:
4
5
  machine:
5
6
  type: e1-standard-2
6
7
  os_image: ubuntu1804
8
+
7
9
  blocks:
8
10
  - name: Run Sorbet 🍦
9
11
  task:
@@ -11,19 +13,18 @@ blocks:
11
13
  - name: srb tc
12
14
  commands:
13
15
  - checkout
14
- - sem-version ruby 2.6.5
15
- - gem install bundler
16
16
  - bundle install
17
17
  - bundle exec srb tc
18
+
18
19
  - name: Run Rubocop 🚔
19
20
  task:
20
21
  jobs:
21
22
  - name: rubocop
22
23
  commands:
23
24
  - checkout
24
- - sem-version ruby 2.6.5
25
25
  - bundle install
26
26
  - bundle exec rubocop
27
+
27
28
  - name: Run Tests 👩🏽‍🔬
28
29
  task:
29
30
  secrets:
@@ -40,7 +41,7 @@ blocks:
40
41
  - checkout
41
42
  - sem-version ruby 2.0.0
42
43
  - bundle install
43
- - bundle exec rspec
44
+ - bundle exec rspec
44
45
  - name: Ruby 2.3.4
45
46
  commands:
46
47
  - checkout
@@ -58,7 +59,13 @@ blocks:
58
59
  - checkout
59
60
  - sem-version ruby 2.6.5
60
61
  - bundle install
61
- - bundle exec rspec
62
+ - bundle exec rspec
63
+ - name: Ruby 2.7.1
64
+ commands:
65
+ - checkout
66
+ - sem-version ruby 2.7.1
67
+ - bundle install
68
+ - bundle exec rspec
62
69
  promotions:
63
70
  - name: Deploy workos-rb to rubygems
64
- pipeline_file: rubygems.yml
71
+ pipeline_file: rubygems.yml
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- workos (0.2.2)
4
+ workos (0.3.3)
5
5
  sorbet-runtime (~> 0.5)
6
6
 
7
7
  GEM
@@ -54,10 +54,10 @@ GEM
54
54
  json (>= 1.8, < 3)
55
55
  simplecov-html (~> 0.10.0)
56
56
  simplecov-html (0.10.2)
57
- sorbet (0.5.5181)
58
- sorbet-static (= 0.5.5181)
59
- sorbet-runtime (0.5.5501)
60
- sorbet-static (0.5.5181-universal-darwin-14)
57
+ sorbet (0.5.5560)
58
+ sorbet-static (= 0.5.5560)
59
+ sorbet-runtime (0.5.5815)
60
+ sorbet-static (0.5.5560-universal-darwin-14)
61
61
  unicode-display_width (1.6.0)
62
62
  url (0.3.2)
63
63
  vcr (5.0.0)
@@ -83,4 +83,4 @@ DEPENDENCIES
83
83
  yard
84
84
 
85
85
  BUNDLED WITH
86
- 2.1.2
86
+ 2.1.4
data/README.md CHANGED
@@ -80,7 +80,7 @@ WorkOS::AuditTrail.create_event(event: payload, idempotency_key: 'key123456')
80
80
  ```
81
81
 
82
82
  See our [API
83
- Reference](https://docs.workos.com/api-reference#idempotency)
83
+ Reference](https://docs.workos.com/audit-trail/api-reference#idempotency)
84
84
  for more information on idempotency keys.
85
85
 
86
86
  ## The SSO Module
@@ -29,6 +29,8 @@ module WorkOS
29
29
  autoload :Base, 'workos/base'
30
30
  autoload :Client, 'workos/client'
31
31
  autoload :AuditTrail, 'workos/audit_trail'
32
+ autoload :Connection, 'workos/connection'
33
+ autoload :DirectorySync, 'workos/directory_sync'
32
34
  autoload :Profile, 'workos/profile'
33
35
  autoload :SSO, 'workos/sso'
34
36
 
@@ -57,22 +57,6 @@ module WorkOS
57
57
 
58
58
  execute_request(request: request)
59
59
  end
60
-
61
- private
62
-
63
- sig do
64
- params(
65
- path: String,
66
- idempotency_key: T.nilable(String),
67
- body: T.nilable(Hash),
68
- ).returns(Net::HTTP::Post)
69
- end
70
- def post_request(path:, idempotency_key: nil, body: nil)
71
- request = super(path: path, body: body)
72
- request['Authorization'] = "Bearer #{WorkOS.key}"
73
- request['Idempotency-Key'] = idempotency_key if idempotency_key
74
- request
75
- end
76
60
  end
77
61
  end
78
62
  end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  # typed: true
3
3
 
4
-
5
4
  module WorkOS
6
5
  # A Net::HTTP based API client for interacting with the WorkOS API
7
6
  module Client
@@ -18,7 +17,11 @@ module WorkOS
18
17
  @client
19
18
  end
20
19
 
21
- sig { params(request: Net::HTTP::Post).returns(::T.untyped) }
20
+ sig do
21
+ params(
22
+ request: T.any(Net::HTTP::Get, Net::HTTP::Post),
23
+ ).returns(::T.untyped)
24
+ end
22
25
  def execute_request(request:)
23
26
  response = client.request(request)
24
27
 
@@ -28,10 +31,40 @@ module WorkOS
28
31
  response
29
32
  end
30
33
 
31
- sig { params(path: String, body: T.nilable(Hash)).returns(Net::HTTP::Post) }
32
- def post_request(path:, body: nil)
34
+ sig do
35
+ params(
36
+ path: String,
37
+ auth: T.nilable(T::Boolean),
38
+ params: T.nilable(Hash),
39
+ ).returns(Net::HTTP::Get)
40
+ end
41
+ def get_request(path:, auth: false, params: {})
42
+ uri = URI(path)
43
+ uri.query = URI.encode_www_form(params) if params
44
+
45
+ request = Net::HTTP::Get.new(
46
+ uri.to_s,
47
+ 'Content-Type' => 'application/json',
48
+ )
49
+
50
+ request['Authorization'] = "Bearer #{WorkOS.key!}" if auth
51
+ request['User-Agent'] = user_agent
52
+ request
53
+ end
54
+
55
+ sig do
56
+ params(
57
+ path: String,
58
+ auth: T.nilable(T::Boolean),
59
+ idempotency_key: T.nilable(String),
60
+ body: T.nilable(Hash),
61
+ ).returns(Net::HTTP::Post)
62
+ end
63
+ def post_request(path:, auth: false, idempotency_key: nil, body: nil)
33
64
  request = Net::HTTP::Post.new(path, 'Content-Type' => 'application/json')
34
65
  request.body = body.to_json if body
66
+ request['Authorization'] = "Bearer #{WorkOS.key!}" if auth
67
+ request['Idempotency-Key'] = idempotency_key if idempotency_key
35
68
  request['User-Agent'] = user_agent
36
69
  request
37
70
  end
@@ -68,6 +101,12 @@ module WorkOS
68
101
  http_status: http_status,
69
102
  request_id: response['x-request-id'],
70
103
  )
104
+ when 404
105
+ raise APIError.new(
106
+ message: json['message'],
107
+ http_status: http_status,
108
+ request_id: response['x-request-id'],
109
+ )
71
110
  when 422
72
111
  errors = json['errors'].map do |error|
73
112
  "#{error['field']}: #{error['code']}"
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+ # typed: true
3
+
4
+ require 'json'
5
+
6
+ module WorkOS
7
+ # The Connection class provides a lightweight wrapper around
8
+ # a WorkOS Connection resource. This class is not meant to be instantiated
9
+ # in user space, and is instantiated internally but exposed.
10
+ class Connection
11
+ extend T::Sig
12
+
13
+ attr_accessor :id, :name, :connection_type, :domains
14
+
15
+ sig { params(json: String).void }
16
+ def initialize(json)
17
+ raw = parse_json(json)
18
+
19
+ @id = T.let(raw.id, String)
20
+ @name = T.let(raw.name, String)
21
+ @connection_type = T.let(raw.connection_type, String)
22
+ @domains = T.let(raw.domains, Array)
23
+ end
24
+
25
+ def to_json(*)
26
+ {
27
+ id: id,
28
+ name: name,
29
+ connection_type: connection_type,
30
+ domains: domains,
31
+ }
32
+ end
33
+
34
+ private
35
+
36
+ sig { params(json_string: String).returns(WorkOS::Types::ConnectionStruct) }
37
+ def parse_json(json_string)
38
+ hash = JSON.parse(json_string, symbolize_names: true)
39
+
40
+ WorkOS::Types::ConnectionStruct.new(
41
+ id: hash[:id],
42
+ name: hash[:name],
43
+ connection_type: hash[:connection_type],
44
+ domains: hash[:domains],
45
+ )
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,128 @@
1
+ # frozen_string_literal: true
2
+ # typed: true
3
+
4
+ module WorkOS
5
+ # The Directory Sync module provides convenience methods for working with the
6
+ # WorkOS Directory Sync platform. You'll need a valid API key and to have
7
+ # created a Directory Sync connection on your WorkOS dashboard.
8
+ #
9
+ # @see https://docs.workos.com/directory-sync/overview
10
+ module DirectorySync
11
+ class << self
12
+ extend T::Sig
13
+ include Base
14
+ include Client
15
+
16
+ # Retrieve directories.
17
+ #
18
+ # @param [Hash] options An options hash
19
+ # @option options [String] domain The domain of the directory to be
20
+ # retrieved.
21
+ # @option options [String] search A search term for direcory names.
22
+ #
23
+ # @return [Hash]
24
+ sig do
25
+ params(
26
+ options: T::Hash[Symbol, String],
27
+ ).returns(T::Array[T::Hash[String, T.nilable(String)]])
28
+ end
29
+ def list_directories(options = {})
30
+ response = execute_request(
31
+ request: get_request(
32
+ path: '/directories',
33
+ auth: true,
34
+ params: options,
35
+ ),
36
+ )
37
+
38
+ JSON.parse(response.body)['data']
39
+ end
40
+
41
+ # Retrieve directory groups.
42
+ #
43
+ # @param [Hash] options An options hash
44
+ # @option options [String] directory The ID of the directory whose
45
+ # directory groups will be retrieved.
46
+ # @option options [String] user The ID of the directory user whose
47
+ # directory groups will be retrieved.
48
+ #
49
+ # @return [Hash]
50
+ sig do
51
+ params(
52
+ options: T::Hash[Symbol, String],
53
+ ).returns(T::Array[T::Hash[String, T.nilable(String)]])
54
+ end
55
+ def list_groups(options = {})
56
+ response = execute_request(
57
+ request: get_request(
58
+ path: '/directory_groups',
59
+ auth: true,
60
+ params: options,
61
+ ),
62
+ )
63
+
64
+ JSON.parse(response.body)['data']
65
+ end
66
+
67
+ # Retrieve directory users.
68
+ #
69
+ # @param [Hash] options An options hash
70
+ # @option options [String] directory The ID of the directory whose
71
+ # directory users will be retrieved.
72
+ # @option options [String] user The ID of the directory group whose
73
+ # directory users will be retrieved.
74
+ #
75
+ # @return [Hash]
76
+ sig do
77
+ params(
78
+ options: T::Hash[Symbol, String],
79
+ ).returns(T::Array[T::Hash[String, T.untyped]])
80
+ end
81
+ def list_users(options = {})
82
+ response = execute_request(
83
+ request: get_request(
84
+ path: '/directory_users',
85
+ auth: true,
86
+ params: options,
87
+ ),
88
+ )
89
+
90
+ JSON.parse(response.body)['data']
91
+ end
92
+
93
+ # Retrieve the directory group with the given ID.
94
+ #
95
+ # @param [String] id The ID of the directory group.
96
+ #
97
+ # @return Hash
98
+ sig { params(id: String).returns(T::Hash[String, T.untyped]) }
99
+ def get_group(id)
100
+ response = execute_request(
101
+ request: get_request(
102
+ path: "/directory_groups/#{id}",
103
+ auth: true,
104
+ ),
105
+ )
106
+
107
+ JSON.parse(response.body)
108
+ end
109
+
110
+ # Retrieve the directory user with the given ID.
111
+ #
112
+ # @param [String] id The ID of the directory user.
113
+ #
114
+ # @return Hash
115
+ sig { params(id: String).returns(T::Hash[String, T.untyped]) }
116
+ def get_user(id)
117
+ response = execute_request(
118
+ request: get_request(
119
+ path: "/directory_users/#{id}",
120
+ auth: true,
121
+ ),
122
+ )
123
+
124
+ JSON.parse(response.body)
125
+ end
126
+ end
127
+ end
128
+ end
@@ -1,14 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
  # typed: true
3
3
 
4
-
5
4
  require 'json'
6
5
 
7
6
  module WorkOS
8
7
  # The Profile class provides a lighweight wrapper around
9
8
  # a normalized response from the various IDPs WorkOS
10
9
  # supports as part of the SSO integration. This class
11
- # is not meant ot be instantiated in user space, and
10
+ # is not meant to be instantiated in user space, and
12
11
  # is instantiated internally but exposed.
13
12
  class Profile
14
13
  extend T::Sig
@@ -21,12 +20,12 @@ module WorkOS
21
20
  def initialize(profile_json)
22
21
  raw = parse_json(profile_json)
23
22
 
24
- @id = T.let(raw.id, String)
25
- @email = T.let(raw.email, String)
26
- @first_name = T.let(raw.first_name, String)
27
- @last_name = T.let(raw.last_name, String)
23
+ @id = T.let(raw.id, String)
24
+ @email = T.let(raw.email, String)
25
+ @first_name = raw.first_name
26
+ @last_name = raw.last_name
28
27
  @connection_type = T.let(raw.connection_type, String)
29
- @idp_id = T.let(raw.idp_id, String)
28
+ @idp_id = T.let(raw.idp_id, String)
30
29
  end
31
30
 
32
31
  sig { returns(String) }
@@ -18,16 +18,6 @@ module WorkOS
18
18
 
19
19
  PROVIDERS = WorkOS::Types::Provider.values.map(&:serialize).freeze
20
20
 
21
- sig do
22
- params(
23
- project_id: String,
24
- redirect_uri: String,
25
- domain: T.nilable(String),
26
- provider: T.nilable(String),
27
- state: Hash,
28
- ).returns(String)
29
- end
30
-
31
21
  # Generate an Oauth2 authorization URL where your users will
32
22
  # authenticate using the configured SSO Identity Provider.
33
23
  #
@@ -41,7 +31,7 @@ module WorkOS
41
31
  # @param [String] redirect_uri The URI where users are directed
42
32
  # after completing the authentication step. Must match a
43
33
  # configured redirect URI on your WorkOS dashboard.
44
- # @param [Hash] state An aribtrary state object
34
+ # @param [String] state An aribtrary state object
45
35
  # that is preserved and available to the client in the response.
46
36
  # @example
47
37
  # WorkOS::SSO.authorization_url(
@@ -50,7 +40,7 @@ module WorkOS
50
40
  # redirect_uri: 'https://workos.com/callback',
51
41
  # state: {
52
42
  # next_page: '/docs'
53
- # }
43
+ # }.to_s
54
44
  # )
55
45
  #
56
46
  # => "https://api.workos.com/sso/authorize?domain=acme.com" \
@@ -59,8 +49,17 @@ module WorkOS
59
49
  # "response_type=code&state=%7B%3Anext_page%3D%3E%22%2Fdocs%22%7D"
60
50
  #
61
51
  # @return [String]
52
+ sig do
53
+ params(
54
+ project_id: String,
55
+ redirect_uri: String,
56
+ domain: T.nilable(String),
57
+ provider: T.nilable(String),
58
+ state: T.nilable(String),
59
+ ).returns(String)
60
+ end
62
61
  def authorization_url(
63
- project_id:, redirect_uri:, domain: nil, provider: nil, state: {}
62
+ project_id:, redirect_uri:, domain: nil, provider: nil, state: ''
64
63
  )
65
64
  validate_domain_and_provider(provider: provider, domain: domain)
66
65
 
@@ -76,13 +75,6 @@ module WorkOS
76
75
  "https://#{WorkOS::API_HOSTNAME}/sso/authorize?#{query}"
77
76
  end
78
77
 
79
- sig do
80
- params(
81
- code: String,
82
- project_id: String,
83
- ).returns(WorkOS::Profile)
84
- end
85
-
86
78
  # Fetch the profile details for the authenticated SSO user.
87
79
  #
88
80
  # @param [String] code The authorization code provided in the callback URL
@@ -105,6 +97,7 @@ module WorkOS
105
97
  # >
106
98
  #
107
99
  # @return [WorkOS::Profile]
100
+ sig { params(code: String, project_id: String).returns(WorkOS::Profile) }
108
101
  def profile(code:, project_id:)
109
102
  body = {
110
103
  client_id: project_id,
@@ -119,17 +112,11 @@ module WorkOS
119
112
  WorkOS::Profile.new(response.body)
120
113
  end
121
114
 
122
- sig do
123
- params(
124
- token: String,
125
- ).returns(T::Boolean)
126
- end
127
-
128
115
  # Promote a DraftConnection created via the WorkOS.js embed such that the
129
116
  # Enterprise users can begin signing into your application.
130
117
  #
131
- # @param [String] token The draft connection token that's been provided to
132
- # you by the WorkOS.js embed
118
+ # @param [String] token The Draft Connection token that's been provided to
119
+ # you by the WorkOS.js
133
120
  #
134
121
  # @example
135
122
  # WorkOS::SSO.promote_draft_connection(
@@ -139,8 +126,10 @@ module WorkOS
139
126
  #
140
127
  # @return [Bool] - returns `true` if successful, `false` otherwise.
141
128
  # @see https://github.com/workos-inc/ruby-idp-link-example
129
+ sig { params(token: String).returns(T::Boolean) }
142
130
  def promote_draft_connection(token:)
143
- request = bearer_post_request(
131
+ request = post_request(
132
+ auth: true,
144
133
  path: "/draft_connections/#{token}/activate",
145
134
  )
146
135
 
@@ -149,6 +138,36 @@ module WorkOS
149
138
  response.is_a? Net::HTTPSuccess
150
139
  end
151
140
 
141
+ # Create a Connection
142
+ #
143
+ # @param [String] source The Draft Connection token that's been provided
144
+ # to you by WorkOS.js
145
+ #
146
+ # @example
147
+ # WorkOS::SSO.create_connection(source: 'draft_conn_429u59js')
148
+ # => #<WorkOS::Connection:0x00007fb6e4193d20
149
+ # @id="conn_02DRA1XNSJDZ19A31F183ECQW9",
150
+ # @name="Foo Corp",
151
+ # @connection_type="OktaSAML",
152
+ # @domains=
153
+ # [{:object=>"connection_domain",
154
+ # :id=>"domain_01E6PK9N3XMD8RHWF7S66380AR",
155
+ # :domain=>"example.com"}]>
156
+ #
157
+ # @return [WorkOS::Connection]
158
+ sig { params(source: String).returns(WorkOS::Connection) }
159
+ def create_connection(source:)
160
+ request = post_request(
161
+ auth: true,
162
+ path: '/connections',
163
+ body: { source: source },
164
+ )
165
+
166
+ response = execute_request(request: request)
167
+
168
+ WorkOS::Connection.new(response.body)
169
+ end
170
+
152
171
  private
153
172
 
154
173
  sig do
@@ -188,12 +207,6 @@ module WorkOS
188
207
  )
189
208
  end
190
209
  # rubocop:enable Metrics/MethodLength
191
-
192
- def bearer_post_request(path:, body: nil)
193
- request = post_request(path: path, body: body)
194
- request['Authorization'] = "Bearer #{WorkOS.key!}"
195
- request
196
- end
197
210
  end
198
211
  end
199
212
  end