workos 4.0.0 → 4.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +37 -0
  3. data/.github/workflows/release.yml +43 -0
  4. data/.rubocop.yml +8 -1
  5. data/Gemfile.lock +22 -69
  6. data/lib/workos/audit_log_export.rb +8 -31
  7. data/lib/workos/audit_logs.rb +0 -26
  8. data/lib/workos/authentication_factor_and_challenge.rb +0 -3
  9. data/lib/workos/authentication_response.rb +12 -5
  10. data/lib/workos/challenge.rb +9 -28
  11. data/lib/workos/client.rb +0 -41
  12. data/lib/workos/configuration.rb +0 -1
  13. data/lib/workos/connection.rb +11 -35
  14. data/lib/workos/directory.rb +10 -37
  15. data/lib/workos/directory_group.rb +9 -36
  16. data/lib/workos/directory_sync.rb +0 -21
  17. data/lib/workos/directory_user.rb +17 -51
  18. data/lib/workos/errors.rb +0 -16
  19. data/lib/workos/event.rb +5 -26
  20. data/lib/workos/events.rb +0 -7
  21. data/lib/workos/factor.rb +9 -28
  22. data/lib/workos/hash_provider.rb +0 -1
  23. data/lib/workos/impersonator.rb +23 -0
  24. data/lib/workos/invitation.rb +12 -37
  25. data/lib/workos/mfa.rb +0 -42
  26. data/lib/workos/organization.rb +8 -31
  27. data/lib/workos/organization_membership.rb +8 -27
  28. data/lib/workos/organizations.rb +0 -26
  29. data/lib/workos/passwordless.rb +0 -14
  30. data/lib/workos/portal.rb +1 -13
  31. data/lib/workos/profile.rb +12 -39
  32. data/lib/workos/profile_and_token.rb +1 -4
  33. data/lib/workos/refresh_authentication_response.rb +24 -0
  34. data/lib/workos/sso.rb +1 -43
  35. data/lib/workos/types/intent.rb +16 -0
  36. data/lib/workos/types/list_struct.rb +8 -5
  37. data/lib/workos/types/passwordless_session_struct.rb +10 -9
  38. data/lib/workos/types/provider.rb +15 -0
  39. data/lib/workos/types.rb +5 -23
  40. data/lib/workos/user.rb +10 -31
  41. data/lib/workos/user_and_token.rb +1 -4
  42. data/lib/workos/user_management.rb +108 -219
  43. data/lib/workos/user_response.rb +0 -3
  44. data/lib/workos/verify_challenge.rb +4 -18
  45. data/lib/workos/version.rb +1 -2
  46. data/lib/workos/webhook.rb +5 -26
  47. data/lib/workos/webhooks.rb +1 -38
  48. data/lib/workos.rb +2 -2
  49. data/spec/lib/workos/audit_logs_spec.rb +2 -3
  50. data/spec/lib/workos/configuration_spec.rb +0 -1
  51. data/spec/lib/workos/directory_sync_spec.rb +0 -1
  52. data/spec/lib/workos/directory_user_spec.rb +0 -1
  53. data/spec/lib/workos/event_spec.rb +0 -1
  54. data/spec/lib/workos/mfa_spec.rb +0 -1
  55. data/spec/lib/workos/organizations_spec.rb +0 -1
  56. data/spec/lib/workos/passwordless_spec.rb +0 -1
  57. data/spec/lib/workos/portal_spec.rb +0 -1
  58. data/spec/lib/workos/sso_spec.rb +0 -1
  59. data/spec/lib/workos/user_management_spec.rb +59 -10
  60. data/spec/lib/workos/webhooks_spec.rb +0 -1
  61. data/spec/spec_helper.rb +6 -9
  62. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_code/valid.yml +1 -1
  63. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_code/valid_with_impersonator.yml +80 -0
  64. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_email_verification/valid.yml +1 -1
  65. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_magic_auth/valid.yml +1 -1
  66. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_organization_selection/valid.yml +1 -1
  67. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_password/valid.yml +1 -1
  68. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_refresh_code/invalid.yml +81 -0
  69. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_refresh_token/valid.yml +81 -0
  70. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_totp/valid.yml +1 -1
  71. data/spec/support/shared_examples/client_spec.rb +0 -1
  72. data/workos.gemspec +1 -6
  73. metadata +19 -129
  74. data/.semaphore/rubygems.yml +0 -24
  75. data/.semaphore/semaphore.yml +0 -51
  76. data/bin/tapioca +0 -29
  77. data/codecov.yml +0 -12
  78. data/devbox.json +0 -18
  79. data/devbox.lock +0 -11
  80. data/lib/workos/types/audit_log_export_struct.rb +0 -17
  81. data/lib/workos/types/challenge_struct.rb +0 -18
  82. data/lib/workos/types/connection_struct.rb +0 -20
  83. data/lib/workos/types/directory_group_struct.rb +0 -19
  84. data/lib/workos/types/directory_struct.rb +0 -19
  85. data/lib/workos/types/directory_user_struct.rb +0 -26
  86. data/lib/workos/types/event_struct.rb +0 -15
  87. data/lib/workos/types/factor_struct.rb +0 -18
  88. data/lib/workos/types/intent_enum.rb +0 -17
  89. data/lib/workos/types/invitation_struct.rb +0 -20
  90. data/lib/workos/types/magic_auth_challenge_struct.rb +0 -12
  91. data/lib/workos/types/organization_membership_struct.rb +0 -16
  92. data/lib/workos/types/organization_struct.rb +0 -17
  93. data/lib/workos/types/profile_struct.rb +0 -21
  94. data/lib/workos/types/provider_enum.rb +0 -16
  95. data/lib/workos/types/user_struct.rb +0 -18
  96. data/lib/workos/types/verify_challenge_struct.rb +0 -13
  97. data/lib/workos/types/webhook_struct.rb +0 -15
  98. data/sorbet/config +0 -2
  99. data/sorbet/rbi/gems/addressable@2.8.0.rbi +0 -290
  100. data/sorbet/rbi/gems/ast@2.4.2.rbi +0 -54
  101. data/sorbet/rbi/gems/codecov@0.2.12.rbi +0 -55
  102. data/sorbet/rbi/gems/coderay@1.1.3.rbi +0 -8
  103. data/sorbet/rbi/gems/crack@0.4.5.rbi +0 -57
  104. data/sorbet/rbi/gems/diff-lcs@1.4.4.rbi +0 -185
  105. data/sorbet/rbi/gems/docile@1.3.5.rbi +0 -54
  106. data/sorbet/rbi/gems/hashdiff@1.0.1.rbi +0 -82
  107. data/sorbet/rbi/gems/json@2.5.1.rbi +0 -109
  108. data/sorbet/rbi/gems/method_source@1.0.0.rbi +0 -8
  109. data/sorbet/rbi/gems/parallel@1.20.1.rbi +0 -113
  110. data/sorbet/rbi/gems/parser@3.0.1.0.rbi +0 -1187
  111. data/sorbet/rbi/gems/pry@0.14.2.rbi +0 -8
  112. data/sorbet/rbi/gems/public_suffix@4.0.6.rbi +0 -146
  113. data/sorbet/rbi/gems/rainbow@3.0.0.rbi +0 -153
  114. data/sorbet/rbi/gems/rake@13.0.3.rbi +0 -807
  115. data/sorbet/rbi/gems/rbi@0.0.16.rbi +0 -2118
  116. data/sorbet/rbi/gems/regexp_parser@2.1.1.rbi +0 -1117
  117. data/sorbet/rbi/gems/rexml@3.2.5.rbi +0 -709
  118. data/sorbet/rbi/gems/rspec-core@3.9.3.rbi +0 -2467
  119. data/sorbet/rbi/gems/rspec-expectations@3.9.4.rbi +0 -1569
  120. data/sorbet/rbi/gems/rspec-mocks@3.9.1.rbi +0 -1493
  121. data/sorbet/rbi/gems/rspec-support@3.9.4.rbi +0 -511
  122. data/sorbet/rbi/gems/rspec@3.9.0.rbi +0 -38
  123. data/sorbet/rbi/gems/rubocop-ast@1.4.1.rbi +0 -1881
  124. data/sorbet/rbi/gems/rubocop@0.93.1.rbi +0 -11497
  125. data/sorbet/rbi/gems/ruby-progressbar@1.11.0.rbi +0 -405
  126. data/sorbet/rbi/gems/simplecov-html@0.12.3.rbi +0 -89
  127. data/sorbet/rbi/gems/simplecov@0.21.2.rbi +0 -577
  128. data/sorbet/rbi/gems/simplecov_json_formatter@0.1.2.rbi +0 -8
  129. data/sorbet/rbi/gems/spoom@1.1.15.rbi +0 -1549
  130. data/sorbet/rbi/gems/tapioca@0.7.3.rbi +0 -1718
  131. data/sorbet/rbi/gems/thor@1.2.1.rbi +0 -844
  132. data/sorbet/rbi/gems/unicode-display_width@1.7.0.rbi +0 -22
  133. data/sorbet/rbi/gems/unparser@0.6.2.rbi +0 -8
  134. data/sorbet/rbi/gems/vcr@5.0.0.rbi +0 -699
  135. data/sorbet/rbi/gems/webmock@3.12.2.rbi +0 -662
  136. data/sorbet/rbi/gems/yard-sorbet@0.8.0.rbi +0 -268
  137. data/sorbet/rbi/gems/yard@0.9.26.rbi +0 -4048
  138. data/sorbet/tapioca/config.yml +0 -13
  139. data/sorbet/tapioca/require.rb +0 -4
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # typed: true
3
2
 
4
3
  module WorkOS
5
4
  # The Organization class provides a lightweight wrapper around
@@ -7,20 +6,18 @@ module WorkOS
7
6
  # in user space, and is instantiated internally but exposed.
8
7
  class Organization
9
8
  include HashProvider
10
- extend T::Sig
11
9
 
12
10
  attr_accessor :id, :domains, :name, :allow_profiles_outside_organization, :created_at, :updated_at
13
11
 
14
- sig { params(json: String).void }
15
12
  def initialize(json)
16
- raw = parse_json(json)
17
-
18
- @id = T.let(raw.id, String)
19
- @name = T.let(raw.name, String)
20
- @allow_profiles_outside_organization = T.let(raw.allow_profiles_outside_organization, T::Boolean)
21
- @domains = T.let(raw.domains, Array)
22
- @created_at = T.let(raw.created_at, String)
23
- @updated_at = T.let(raw.updated_at, String)
13
+ hash = JSON.parse(json, symbolize_names: true)
14
+
15
+ @id = hash[:id]
16
+ @name = hash[:name]
17
+ @allow_profiles_outside_organization = hash[:allow_profiles_outside_organization]
18
+ @domains = hash[:domains]
19
+ @created_at = hash[:created_at]
20
+ @updated_at = hash[:updated_at]
24
21
  end
25
22
 
26
23
  def to_json(*)
@@ -33,25 +30,5 @@ module WorkOS
33
30
  updated_at: updated_at,
34
31
  }
35
32
  end
36
-
37
- private
38
-
39
- sig do
40
- params(
41
- json_string: String,
42
- ).returns(WorkOS::Types::OrganizationStruct)
43
- end
44
- def parse_json(json_string)
45
- hash = JSON.parse(json_string, symbolize_names: true)
46
-
47
- WorkOS::Types::OrganizationStruct.new(
48
- id: hash[:id],
49
- name: hash[:name],
50
- allow_profiles_outside_organization: hash[:allow_profiles_outside_organization],
51
- domains: hash[:domains],
52
- created_at: hash[:created_at],
53
- updated_at: hash[:updated_at],
54
- )
55
- end
56
33
  end
57
34
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # typed: true
3
2
 
4
3
  module WorkOS
5
4
  # The OrganizationMembership class provides a lightweight wrapper around a WorkOS OrganizationMembership
@@ -7,20 +6,18 @@ module WorkOS
7
6
  # and is instantiated internally but exposed.
8
7
  class OrganizationMembership
9
8
  include HashProvider
10
- extend T::Sig
11
9
 
12
10
  attr_accessor :id, :user_id, :organization_id, :status, :created_at, :updated_at
13
11
 
14
- sig { params(json: String).void }
15
12
  def initialize(json)
16
- raw = parse_json(json)
17
-
18
- @id = T.let(raw.id, String)
19
- @user_id = T.let(raw.user_id, String)
20
- @organization_id = raw.organization_id
21
- @status = T.let(raw.status, String)
22
- @created_at = T.let(raw.created_at, String)
23
- @updated_at = T.let(raw.updated_at, String)
13
+ hash = JSON.parse(json, symbolize_names: true)
14
+
15
+ @id = hash[:id]
16
+ @user_id = hash[:user_id]
17
+ @organization_id = hash[:organization_id]
18
+ @status = hash[:status]
19
+ @created_at = hash[:created_at]
20
+ @updated_at = hash[:updated_at]
24
21
  end
25
22
 
26
23
  def to_json(*)
@@ -33,21 +30,5 @@ module WorkOS
33
30
  updated_at: updated_at,
34
31
  }
35
32
  end
36
-
37
- private
38
-
39
- sig { params(json_string: String).returns(WorkOS::Types::OrganizationMembershipStruct) }
40
- def parse_json(json_string)
41
- hash = JSON.parse(json_string, symbolize_names: true)
42
-
43
- WorkOS::Types::OrganizationMembershipStruct.new(
44
- id: hash[:id],
45
- user_id: hash[:user_id],
46
- organization_id: hash[:organization_id],
47
- status: hash[:status],
48
- created_at: hash[:created_at],
49
- updated_at: hash[:updated_at],
50
- )
51
- end
52
33
  end
53
34
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # typed: true
3
2
 
4
3
  require 'net/http'
5
4
 
@@ -7,7 +6,6 @@ module WorkOS
7
6
  # The Organizations module provides resource methods for working with Organizations
8
7
  module Organizations
9
8
  class << self
10
- extend T::Sig
11
9
  include Client
12
10
 
13
11
  # Retrieve a list of organizations that have connections configured
@@ -22,11 +20,6 @@ module WorkOS
22
20
  # @param [Integer] limit A pagination argument used to limit the number
23
21
  # @param [String] order The order in which to paginate records
24
22
  # of listed Organizations that are returned.
25
- sig do
26
- params(
27
- options: T::Hash[Symbol, String],
28
- ).returns(WorkOS::Types::ListStruct)
29
- end
30
23
  def list_organizations(options = {})
31
24
  options[:order] ||= 'desc'
32
25
  response = execute_request(
@@ -64,7 +57,6 @@ module WorkOS
64
57
  # :domain=>"foo-corp.com"}]>
65
58
  #
66
59
  # @return [WorkOS::Organization]
67
- sig { params(id: String).returns(WorkOS::Organization) }
68
60
  def get_organization(id:)
69
61
  request = get_request(
70
62
  auth: true,
@@ -84,14 +76,6 @@ module WorkOS
84
76
  # @param [Boolean, nil] allow_profiles_outside_organization Whether Connections
85
77
  # within the Organization allow profiles that are outside of the Organization's configured User Email Domains.
86
78
  # @param [String] idempotency_key An idempotency key
87
- sig do
88
- params(
89
- domains: T::Array[String],
90
- name: String,
91
- allow_profiles_outside_organization: T.nilable(T::Boolean),
92
- idempotency_key: T.nilable(String),
93
- ).returns(WorkOS::Organization)
94
- end
95
79
  def create_organization(domains:, name:, allow_profiles_outside_organization: nil, idempotency_key: nil)
96
80
  request = post_request(
97
81
  auth: true,
@@ -118,14 +102,6 @@ module WorkOS
118
102
  # @param [String] name A unique, descriptive name for the organization
119
103
  # @param [Boolean, nil] allow_profiles_outside_organization Whether Connections
120
104
  # within the Organization allow profiles that are outside of the Organization's configured User Email Domains.
121
- sig do
122
- params(
123
- organization: String,
124
- domains: T::Array[String],
125
- name: String,
126
- allow_profiles_outside_organization: T.nilable(T::Boolean),
127
- ).returns(WorkOS::Organization)
128
- end
129
105
  def update_organization(organization:, domains:, name:, allow_profiles_outside_organization: nil)
130
106
  request = put_request(
131
107
  auth: true,
@@ -152,7 +128,6 @@ module WorkOS
152
128
  # => true
153
129
  #
154
130
  # @return [Bool] - returns `true` if successful
155
- sig { params(id: String).returns(T::Boolean) }
156
131
  def delete_organization(id:)
157
132
  request = delete_request(
158
133
  auth: true,
@@ -166,7 +141,6 @@ module WorkOS
166
141
 
167
142
  private
168
143
 
169
- sig { params(response: Net::HTTPResponse).void }
170
144
  def check_and_raise_organization_error(response:)
171
145
  begin
172
146
  body = JSON.parse(response.body)
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # typed: true
3
2
 
4
3
  require 'net/http'
5
4
 
@@ -11,7 +10,6 @@ module WorkOS
11
10
  # @see https://workos.com/docs/sso/configuring-magic-link
12
11
  module Passwordless
13
12
  class << self
14
- extend T::Sig
15
13
  include Client
16
14
 
17
15
  # Create a Passwordless Session.
@@ -33,12 +31,6 @@ module WorkOS
33
31
  # configured redirect URI on your WorkOS dashboard.
34
32
  #
35
33
  # @return Hash
36
- sig do
37
- params(
38
- options: Hash,
39
- ).returns(WorkOS::Types::PasswordlessSessionStruct)
40
- end
41
-
42
34
  def create_session(options)
43
35
  response = execute_request(
44
36
  request: post_request(
@@ -64,12 +56,6 @@ module WorkOS
64
56
  # Session to send an email for.
65
57
  #
66
58
  # @return Hash
67
- sig do
68
- params(
69
- session_id: String,
70
- ).returns(T::Hash[String, T::Boolean])
71
- end
72
-
73
59
  def send_session(session_id)
74
60
  response = execute_request(
75
61
  request: post_request(
data/lib/workos/portal.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # typed: true
3
2
 
4
3
  require 'net/http'
5
4
 
@@ -8,11 +7,9 @@ module WorkOS
8
7
  # Portal product
9
8
  module Portal
10
9
  class << self
11
- extend T::Sig
12
10
  include Client
13
11
 
14
- GENERATE_LINK_INTENTS = WorkOS::Types::Intent.values.map(&:serialize).
15
- freeze
12
+ GENERATE_LINK_INTENTS = WorkOS::Types::Intent::ALL
16
13
 
17
14
  # Generate a link to grant access to an organization's Admin Portal
18
15
  #
@@ -25,14 +22,6 @@ module WorkOS
25
22
  # redirect link set in your WorkOS Dashboard will be used.
26
23
  # @param [String] The URL to which WorkOS will redirect users to upon
27
24
  # successfully setting up Single Sign On or Directory Sync.
28
- sig do
29
- params(
30
- intent: String,
31
- organization: String,
32
- return_url: T.nilable(String),
33
- success_url: T.nilable(String),
34
- ).returns(String)
35
- end
36
25
  def generate_link(intent:, organization:, return_url: nil, success_url: nil)
37
26
  validate_intent(intent)
38
27
 
@@ -54,7 +43,6 @@ module WorkOS
54
43
 
55
44
  private
56
45
 
57
- sig { params(intent: String).void }
58
46
  def validate_intent(intent)
59
47
  return if GENERATE_LINK_INTENTS.include?(intent)
60
48
 
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # typed: true
3
2
 
4
3
  module WorkOS
5
4
  # The Profile class provides a lighweight wrapper around
@@ -9,31 +8,25 @@ module WorkOS
9
8
  # is instantiated internally but exposed.
10
9
  class Profile
11
10
  include HashProvider
12
- extend T::Sig
13
11
 
14
- sig { returns(String) }
15
12
  attr_accessor :id, :email, :first_name, :last_name, :groups, :organization_id,
16
13
  :connection_id, :connection_type, :idp_id, :raw_attributes
17
14
 
18
- # rubocop:disable Metrics/AbcSize
19
- sig { params(profile_json: String).void }
20
15
  def initialize(profile_json)
21
- raw = parse_json(profile_json)
22
-
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
27
- @groups = raw.groups
28
- @organization_id = raw.organization_id
29
- @connection_id = T.let(raw.connection_id, String)
30
- @connection_type = T.let(raw.connection_type, String)
31
- @idp_id = raw.idp_id
32
- @raw_attributes = raw.raw_attributes
16
+ hash = JSON.parse(profile_json, symbolize_names: true)
17
+
18
+ @id = hash[:id]
19
+ @email = hash[:email]
20
+ @first_name = hash[:first_name]
21
+ @last_name = hash[:last_name]
22
+ @groups = hash[:groups]
23
+ @organization_id = hash[:organization_id]
24
+ @connection_id = hash[:connection_id]
25
+ @connection_type = hash[:connection_type]
26
+ @idp_id = hash[:idp_id]
27
+ @raw_attributes = hash[:raw_attributes]
33
28
  end
34
- # rubocop:enable Metrics/AbcSize
35
29
 
36
- sig { returns(String) }
37
30
  def full_name
38
31
  [first_name, last_name].compact.join(' ')
39
32
  end
@@ -52,25 +45,5 @@ module WorkOS
52
45
  raw_attributes: raw_attributes,
53
46
  }
54
47
  end
55
-
56
- private
57
-
58
- sig { params(json_string: String).returns(WorkOS::Types::ProfileStruct) }
59
- def parse_json(json_string)
60
- hash = JSON.parse(json_string, symbolize_names: true)
61
-
62
- WorkOS::Types::ProfileStruct.new(
63
- id: hash[:id],
64
- email: hash[:email],
65
- first_name: hash[:first_name],
66
- last_name: hash[:last_name],
67
- groups: hash[:groups],
68
- organization_id: hash[:organization_id],
69
- connection_id: hash[:connection_id],
70
- connection_type: hash[:connection_type],
71
- idp_id: hash[:idp_id],
72
- raw_attributes: hash[:raw_attributes],
73
- )
74
- end
75
48
  end
76
49
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # typed: true
3
2
 
4
3
  module WorkOS
5
4
  # The ProfileAndToken class represents a Profile and a corresponding
@@ -7,15 +6,13 @@ module WorkOS
7
6
  # is instantiated internally but exposed.
8
7
  class ProfileAndToken
9
8
  include HashProvider
10
- extend T::Sig
11
9
 
12
10
  attr_accessor :access_token, :profile
13
11
 
14
- sig { params(profile_and_token_json: String).void }
15
12
  def initialize(profile_and_token_json)
16
13
  json = JSON.parse(profile_and_token_json, symbolize_names: true)
17
14
 
18
- @access_token = T.let(json[:access_token], String)
15
+ @access_token = json[:access_token]
19
16
  @profile = WorkOS::Profile.new(json[:profile].to_json)
20
17
  end
21
18
 
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WorkOS
4
+ # The RefreshAuthenticationResponse contains response data from a successful
5
+ # `UserManagement.authenticate_with_refresh_token` call
6
+ class RefreshAuthenticationResponse
7
+ include HashProvider
8
+
9
+ attr_accessor :access_token, :refresh_token
10
+
11
+ def initialize(authentication_response_json)
12
+ json = JSON.parse(authentication_response_json, symbolize_names: true)
13
+ @access_token = json[:access_token]
14
+ @refresh_token = json[:refresh_token]
15
+ end
16
+
17
+ def to_json(*)
18
+ {
19
+ access_token: access_token,
20
+ refresh_token: refresh_token,
21
+ }
22
+ end
23
+ end
24
+ end
data/lib/workos/sso.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # typed: true
3
2
 
4
3
  require 'net/http'
5
4
  require 'uri'
@@ -12,10 +11,9 @@ module WorkOS
12
11
  # @see https://docs.workos.com/sso/overview
13
12
  module SSO
14
13
  class << self
15
- extend T::Sig
16
14
  include Client
17
15
 
18
- PROVIDERS = WorkOS::Types::Provider.values.map(&:serialize).freeze
16
+ PROVIDERS = WorkOS::Types::Provider::ALL
19
17
 
20
18
  # Generate an Oauth2 authorization URL where your users will
21
19
  # authenticate using the configured SSO Identity Provider.
@@ -55,19 +53,6 @@ module WorkOS
55
53
  #
56
54
  # @return [String]
57
55
  # rubocop:disable Metrics/ParameterLists
58
- sig do
59
- params(
60
- redirect_uri: String,
61
- client_id: T.nilable(String),
62
- domain: T.nilable(String),
63
- domain_hint: T.nilable(String),
64
- login_hint: T.nilable(String),
65
- provider: T.nilable(String),
66
- connection: T.nilable(String),
67
- organization: T.nilable(String),
68
- state: T.nilable(String),
69
- ).returns(String)
70
- end
71
56
  def authorization_url(
72
57
  redirect_uri:,
73
58
  client_id: nil,
@@ -108,11 +93,6 @@ module WorkOS
108
93
  end
109
94
  # rubocop:enable Metrics/ParameterLists
110
95
 
111
- sig do
112
- params(
113
- access_token: String,
114
- ).returns(WorkOS::Profile)
115
- end
116
96
  def get_profile(access_token:)
117
97
  response = execute_request(
118
98
  request: get_request(
@@ -132,12 +112,6 @@ module WorkOS
132
112
  # where you've configured your SSO connection
133
113
  #
134
114
  # @return [WorkOS::ProfileAndToken]
135
- sig do
136
- params(
137
- code: String,
138
- client_id: T.nilable(String),
139
- ).returns(WorkOS::ProfileAndToken)
140
- end
141
115
  def profile_and_token(code:, client_id: nil)
142
116
  body = {
143
117
  client_id: client_id,
@@ -169,11 +143,6 @@ module WorkOS
169
143
  # before a provided Connection ID.
170
144
  #
171
145
  # @return [Hash]
172
- sig do
173
- params(
174
- options: T::Hash[Symbol, String],
175
- ).returns(WorkOS::Types::ListStruct)
176
- end
177
146
  def list_connections(options = {})
178
147
  options[:order] ||= 'desc'
179
148
  response = execute_request(
@@ -211,7 +180,6 @@ module WorkOS
211
180
  # :domain=>"example.com"}]>
212
181
  #
213
182
  # @return [WorkOS::Connection]
214
- sig { params(id: String).returns(WorkOS::Connection) }
215
183
  def get_connection(id:)
216
184
  request = get_request(
217
185
  auth: true,
@@ -232,7 +200,6 @@ module WorkOS
232
200
  # => true
233
201
  #
234
202
  # @return [Bool] - returns `true` if successful
235
- sig { params(id: String).returns(T::Boolean) }
236
203
  def delete_connection(id:)
237
204
  request = delete_request(
238
205
  auth: true,
@@ -246,14 +213,6 @@ module WorkOS
246
213
 
247
214
  private
248
215
 
249
- sig do
250
- params(
251
- domain: T.nilable(String),
252
- provider: T.nilable(String),
253
- connection: T.nilable(String),
254
- organization: T.nilable(String),
255
- ).void
256
- end
257
216
  def validate_authorization_url_arguments(
258
217
  domain:,
259
218
  provider:,
@@ -271,7 +230,6 @@ module WorkOS
271
230
  " `provider` must be in #{PROVIDERS}"
272
231
  end
273
232
 
274
- sig { params(response: Net::HTTPResponse).void }
275
233
  def check_and_raise_profile_and_token_error(response:)
276
234
  begin
277
235
  body = JSON.parse(response.body)
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WorkOS
4
+ module Types
5
+ # The Intent constants are declarations of a fixed set of values for
6
+ # intents while generating an Admin Portal link.
7
+ module Intent
8
+ AUDIT_LOGS = 'audit_logs'
9
+ DSYNC = 'dsync'
10
+ LOG_STREAMS = 'log_streams'
11
+ SSO = 'sso'
12
+
13
+ ALL = [AUDIT_LOGS, DSYNC, LOG_STREAMS, SSO].freeze
14
+ end
15
+ end
16
+ end
@@ -1,13 +1,16 @@
1
1
  # frozen_string_literal: true
2
- # typed: strict
3
2
 
4
3
  module WorkOS
5
4
  module Types
6
- # ListStruct acts as a typed interface to expose lists of data and related
5
+ # ListStruct acts as an interface to expose lists of data and related
7
6
  # metadata
8
- class ListStruct < T::Struct
9
- const :data, T::Array[T.untyped]
10
- const :list_metadata, T::Hash[String, T.nilable(String)]
7
+ class ListStruct
8
+ attr_accessor :data, :list_metadata
9
+
10
+ def initialize(data:, list_metadata:)
11
+ @data = data
12
+ @list_metadata = list_metadata
13
+ end
11
14
  end
12
15
  end
13
16
  end
@@ -1,17 +1,18 @@
1
1
  # frozen_string_literal: true
2
- # typed: strict
3
-
4
- require 'date'
5
2
 
6
3
  module WorkOS
7
4
  module Types
8
- # This PasswordlessSessionStruct acts as a typed interface
5
+ # This PasswordlessSessionStruct acts as an interface
9
6
  # for the Passwordless class
10
- class PasswordlessSessionStruct < T::Struct
11
- const :id, String
12
- const :email, String
13
- const :expires_at, Date
14
- const :link, String
7
+ class PasswordlessSessionStruct
8
+ attr_accessor :id, :email, :expires_at, :link
9
+
10
+ def initialize(id:, email:, expires_at:, link:)
11
+ @id = id
12
+ @email = email
13
+ @expires_at = expires_at
14
+ @link = link
15
+ end
15
16
  end
16
17
  end
17
18
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WorkOS
4
+ module Types
5
+ # The Provider constants are declarations of a
6
+ # fixed set of values for SSO Providers.
7
+ module Provider
8
+ GitHub = 'GitHubOAuth'
9
+ Google = 'GoogleOAuth'
10
+ Microsoft = 'MicrosoftOAuth'
11
+
12
+ ALL = [GitHub, Google, Microsoft].freeze
13
+ end
14
+ end
15
+ end
data/lib/workos/types.rb CHANGED
@@ -1,29 +1,11 @@
1
1
  # frozen_string_literal: true
2
- # typed: strong
3
2
 
4
3
  module WorkOS
5
- # WorkOS believes strongly in typed languages,
6
- # so we're using Sorbet throughout this Ruby gem.
4
+ # Types contains a few structs wrapping up common data structures.
7
5
  module Types
8
- require_relative 'types/audit_log_export_struct'
9
- require_relative 'types/challenge_struct'
10
- require_relative 'types/connection_struct'
11
- require_relative 'types/directory_group_struct'
12
- require_relative 'types/directory_struct'
13
- require_relative 'types/directory_user_struct'
14
- require_relative 'types/event_struct'
15
- require_relative 'types/factor_struct'
16
- require_relative 'types/intent_enum'
17
- require_relative 'types/invitation_struct'
18
- require_relative 'types/list_struct'
19
- require_relative 'types/magic_auth_challenge_struct'
20
- require_relative 'types/organization_struct'
21
- require_relative 'types/organization_membership_struct'
22
- require_relative 'types/passwordless_session_struct'
23
- require_relative 'types/profile_struct'
24
- require_relative 'types/provider_enum'
25
- require_relative 'types/user_struct'
26
- require_relative 'types/verify_challenge_struct'
27
- require_relative 'types/webhook_struct'
6
+ autoload :Provider, 'workos/types/provider'
7
+ autoload :Intent, 'workos/types/intent'
8
+ autoload :ListStruct, 'workos/types/list_struct'
9
+ autoload :PasswordlessSessionStruct, 'workos/types/passwordless_session_struct'
28
10
  end
29
11
  end