workos 2.17.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/Gemfile.lock +5 -14
  4. data/lib/workos/authentication_factor_and_challenge.rb +31 -0
  5. data/lib/workos/authentication_response.rb +27 -0
  6. data/lib/workos/invitation.rb +68 -0
  7. data/lib/workos/organization_membership.rb +50 -0
  8. data/lib/workos/types/invitation_struct.rb +20 -0
  9. data/lib/workos/types/magic_auth_challenge_struct.rb +12 -0
  10. data/lib/workos/types/organization_membership_struct.rb +15 -0
  11. data/lib/workos/types/user_struct.rb +17 -0
  12. data/lib/workos/types.rb +9 -5
  13. data/lib/workos/user.rb +57 -0
  14. data/lib/workos/user_and_token.rb +29 -0
  15. data/lib/workos/user_management.rb +1008 -0
  16. data/lib/workos/user_response.rb +25 -0
  17. data/lib/workos/version.rb +1 -1
  18. data/lib/workos.rb +17 -12
  19. data/spec/lib/workos/user_management_spec.rb +1092 -0
  20. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_code/invalid.yml +84 -0
  21. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_code/valid.yml +82 -0
  22. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_email_verification/invalid.yml +83 -0
  23. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_email_verification/valid.yml +81 -0
  24. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_magic_auth/invalid.yml +82 -0
  25. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_magic_auth/valid.yml +82 -0
  26. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_organization_selection/invalid.yml +81 -0
  27. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_organization_selection/valid.yml +82 -0
  28. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_password/invalid.yml +82 -0
  29. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_password/valid.yml +82 -0
  30. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_totp/invalid.yml +83 -0
  31. data/spec/support/fixtures/vcr_cassettes/user_management/authenticate_with_totp/valid.yml +81 -0
  32. data/spec/support/fixtures/vcr_cassettes/user_management/confirm_password_reset/invalid.yml +82 -0
  33. data/spec/support/fixtures/vcr_cassettes/user_management/confirm_password_reset/valid.yml +82 -0
  34. data/spec/support/fixtures/vcr_cassettes/user_management/create_organization_membership/invalid.yml +83 -0
  35. data/spec/support/fixtures/vcr_cassettes/user_management/create_organization_membership/valid.yml +82 -0
  36. data/spec/support/fixtures/vcr_cassettes/user_management/create_user_invalid.yml +83 -0
  37. data/spec/support/fixtures/vcr_cassettes/user_management/create_user_valid.yml +82 -0
  38. data/spec/support/fixtures/vcr_cassettes/user_management/delete_organization_membership/invalid.yml +82 -0
  39. data/spec/support/fixtures/vcr_cassettes/user_management/delete_organization_membership/valid.yml +78 -0
  40. data/spec/support/fixtures/vcr_cassettes/user_management/delete_user/invalid.yml +82 -0
  41. data/spec/support/fixtures/vcr_cassettes/user_management/delete_user/valid.yml +78 -0
  42. data/spec/support/fixtures/vcr_cassettes/user_management/enroll_auth_factor/invalid.yml +82 -0
  43. data/spec/support/fixtures/vcr_cassettes/user_management/enroll_auth_factor/valid.yml +82 -0
  44. data/spec/support/fixtures/vcr_cassettes/user_management/get_invitation/invalid.yml +82 -0
  45. data/spec/support/fixtures/vcr_cassettes/user_management/get_invitation/valid.yml +82 -0
  46. data/spec/support/fixtures/vcr_cassettes/user_management/get_organization_membership.yml +82 -0
  47. data/spec/support/fixtures/vcr_cassettes/user_management/get_user.yml +82 -0
  48. data/spec/support/fixtures/vcr_cassettes/user_management/list_auth_factors/invalid.yml +82 -0
  49. data/spec/support/fixtures/vcr_cassettes/user_management/list_auth_factors/valid.yml +82 -0
  50. data/spec/support/fixtures/vcr_cassettes/user_management/list_invitations/with_after.yml +83 -0
  51. data/spec/support/fixtures/vcr_cassettes/user_management/list_invitations/with_before.yml +83 -0
  52. data/spec/support/fixtures/vcr_cassettes/user_management/list_invitations/with_limit.yml +83 -0
  53. data/spec/support/fixtures/vcr_cassettes/user_management/list_invitations/with_no_options.yml +83 -0
  54. data/spec/support/fixtures/vcr_cassettes/user_management/list_invitations/with_organization_id.yml +83 -0
  55. data/spec/support/fixtures/vcr_cassettes/user_management/list_organization_memberships/no_options.yml +82 -0
  56. data/spec/support/fixtures/vcr_cassettes/user_management/list_organization_memberships/with_options.yml +82 -0
  57. data/spec/support/fixtures/vcr_cassettes/user_management/list_users/no_options.yml +82 -0
  58. data/spec/support/fixtures/vcr_cassettes/user_management/list_users/with_options.yml +82 -0
  59. data/spec/support/fixtures/vcr_cassettes/user_management/reset_password/invalid.yml +82 -0
  60. data/spec/support/fixtures/vcr_cassettes/user_management/reset_password/valid.yml +82 -0
  61. data/spec/support/fixtures/vcr_cassettes/user_management/revoke_invitation/invalid.yml +82 -0
  62. data/spec/support/fixtures/vcr_cassettes/user_management/revoke_invitation/valid.yml +82 -0
  63. data/spec/support/fixtures/vcr_cassettes/user_management/send_invitation/invalid.yml +82 -0
  64. data/spec/support/fixtures/vcr_cassettes/user_management/send_invitation/valid.yml +82 -0
  65. data/spec/support/fixtures/vcr_cassettes/user_management/send_magic_auth_code/valid.yml +82 -0
  66. data/spec/support/fixtures/vcr_cassettes/user_management/send_password_reset_email/invalid.yml +83 -0
  67. data/spec/support/fixtures/vcr_cassettes/user_management/send_password_reset_email/valid.yml +82 -0
  68. data/spec/support/fixtures/vcr_cassettes/user_management/send_verification_email/invalid.yml +82 -0
  69. data/spec/support/fixtures/vcr_cassettes/user_management/send_verification_email/valid.yml +82 -0
  70. data/spec/support/fixtures/vcr_cassettes/user_management/update_user/invalid.yml +82 -0
  71. data/spec/support/fixtures/vcr_cassettes/user_management/update_user/valid.yml +82 -0
  72. data/spec/support/fixtures/vcr_cassettes/user_management/update_user_password/invalid.yml +82 -0
  73. data/spec/support/fixtures/vcr_cassettes/user_management/update_user_password/valid.yml +82 -0
  74. data/spec/support/fixtures/vcr_cassettes/user_management/verify_email/invalid_code.yml +83 -0
  75. data/spec/support/fixtures/vcr_cassettes/user_management/verify_email/invalid_magic_auth_challenge.yml +82 -0
  76. data/spec/support/fixtures/vcr_cassettes/user_management/verify_email/valid.yml +82 -0
  77. data/workos.gemspec +0 -1
  78. metadata +131 -49
  79. data/bin/docs +0 -5
  80. data/docs/WorkOS/APIError.html +0 -160
  81. data/docs/WorkOS/AuditLog.html +0 -235
  82. data/docs/WorkOS/AuditTrail.html +0 -235
  83. data/docs/WorkOS/AuthenticationError.html +0 -160
  84. data/docs/WorkOS/Base.html +0 -287
  85. data/docs/WorkOS/Client.html +0 -504
  86. data/docs/WorkOS/InvalidRequestError.html +0 -160
  87. data/docs/WorkOS/Profile.html +0 -788
  88. data/docs/WorkOS/RequestError.html +0 -135
  89. data/docs/WorkOS/SSO.html +0 -691
  90. data/docs/WorkOS/Types/ProfileStruct.html +0 -135
  91. data/docs/WorkOS/Types/Provider.html +0 -135
  92. data/docs/WorkOS/Types.html +0 -128
  93. data/docs/WorkOS/WorkOSError.html +0 -447
  94. data/docs/WorkOS.html +0 -324
  95. data/docs/class_list.html +0 -51
  96. data/docs/css/common.css +0 -1
  97. data/docs/css/full_list.css +0 -58
  98. data/docs/css/style.css +0 -496
  99. data/docs/file.README.html +0 -252
  100. data/docs/file_list.html +0 -56
  101. data/docs/frames.html +0 -17
  102. data/docs/index.html +0 -250
  103. data/docs/js/app.js +0 -314
  104. data/docs/js/full_list.js +0 -216
  105. data/docs/js/jquery.js +0 -4
  106. data/docs/method_list.html +0 -267
  107. data/docs/top-level-namespace.html +0 -110
  108. data/lib/workos/audit_trail.rb +0 -111
  109. data/spec/lib/workos/audit_trail_spec.rb +0 -146
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ef5e91f45a32fca11bf7338b94c35c1c9cbc74d7193a065e2f7b4f995b40a108
4
- data.tar.gz: 168c7c0b96de3b066845ece0fdb7c92ae37f7ba3ac8729cdc0226f22bf12442b
3
+ metadata.gz: 8a7377543b69e5754e2754e56bd4c43683ffe6177d678449150b41178cddc2b0
4
+ data.tar.gz: 8e0c5d4ee45c39f8084d4b5c31b0e8058ba52ba7d3a7ca56e0146491af723d10
5
5
  SHA512:
6
- metadata.gz: 57574ab78fd8bdd0cd5e77612290c58c252b80ac7e086b7c7d60046e9688d4bf19e4ede830f4ac91f53f4400e3b25c3001322d8e83656866fece316a41c6a9ac
7
- data.tar.gz: 7595a48e1a25602247bb684bb4d95727f8a0fdc39c27a02662f9f677335b310f980596522519e294bedabae88e460e81589c34fdf04a85bdaea544c64400f38b
6
+ metadata.gz: d987073ab5dfe9eac87cf279ac8b5e75aff23fd56faf2c4b16f0c6acb43054112042915f1662685af16ec80d172c11b8b6c0bf5a02f44440ac9bf2d973f036ea
7
+ data.tar.gz: 1627133ce7178bd72df4a6b0d710a842c9a66926d83ff05283836d3ff9afd958d10b8512c3f119621b4cc8ada2445e1854ae1d237f30e7430468b6dd2a90c6b1
data/.gitignore CHANGED
@@ -47,3 +47,5 @@
47
47
 
48
48
  # Used by RuboCop. Remote config files pulled in from inherit_from directive.
49
49
  # .rubocop-https?--*
50
+
51
+ .vscode
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- workos (2.17.0)
4
+ workos (3.0.0)
5
5
  sorbet-runtime (~> 0.5)
6
6
 
7
7
  GEM
@@ -67,19 +67,11 @@ GEM
67
67
  simplecov_json_formatter (~> 0.1)
68
68
  simplecov-html (0.12.3)
69
69
  simplecov_json_formatter (0.1.2)
70
- sorbet (0.5.10346)
71
- sorbet-static (= 0.5.10346)
70
+ sorbet (0.5.11132)
71
+ sorbet-static (= 0.5.11132)
72
72
  sorbet-runtime (0.5.10484)
73
- sorbet-static (0.5.10346-universal-darwin-14)
74
- sorbet-static (0.5.10346-universal-darwin-15)
75
- sorbet-static (0.5.10346-universal-darwin-16)
76
- sorbet-static (0.5.10346-universal-darwin-17)
77
- sorbet-static (0.5.10346-universal-darwin-18)
78
- sorbet-static (0.5.10346-universal-darwin-19)
79
- sorbet-static (0.5.10346-universal-darwin-20)
80
- sorbet-static (0.5.10346-universal-darwin-21)
81
- sorbet-static (0.5.10346-universal-darwin-22)
82
- sorbet-static (0.5.10346-x86_64-linux)
73
+ sorbet-static (0.5.11132-universal-darwin)
74
+ sorbet-static (0.5.11132-x86_64-linux)
83
75
  spoom (1.1.15)
84
76
  sorbet (>= 0.5.10187)
85
77
  sorbet-runtime (>= 0.5.9204)
@@ -121,7 +113,6 @@ DEPENDENCIES
121
113
  vcr (~> 5.0.0)
122
114
  webmock
123
115
  workos!
124
- yard
125
116
 
126
117
  BUNDLED WITH
127
118
  2.2.33
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+ # typed: true
3
+
4
+ module WorkOS
5
+ # The AuthenticationFactorAndChallenge class represents
6
+ # an authentication factor and challenge for a given user.
7
+ class AuthenticationFactorAndChallenge
8
+ include HashProvider
9
+ extend T::Sig
10
+
11
+ attr_accessor :authentication_factor, :authentication_challenge
12
+
13
+ sig { params(authentication_response_json: String).void }
14
+ def initialize(authentication_response_json)
15
+ json = JSON.parse(authentication_response_json, symbolize_names: true)
16
+ @authentication_factor = WorkOS::Factor.new(
17
+ json[:authentication_factor].to_json,
18
+ )
19
+ @authentication_challenge = WorkOS::Challenge.new(
20
+ json[:authentication_challenge].to_json,
21
+ )
22
+ end
23
+
24
+ def to_json(*)
25
+ {
26
+ authentication_factor: authentication_factor.to_json,
27
+ authentication_challenge: authentication_challenge.to_json,
28
+ }
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ # typed: true
3
+
4
+ module WorkOS
5
+ # The AuthenticationResponse class represents an Authentication Response as well as an corresponding
6
+ # response data that can later be appended on.
7
+ class AuthenticationResponse
8
+ include HashProvider
9
+ extend T::Sig
10
+
11
+ attr_accessor :user, :organization_id
12
+
13
+ sig { params(authentication_response_json: String).void }
14
+ def initialize(authentication_response_json)
15
+ json = JSON.parse(authentication_response_json, symbolize_names: true)
16
+ @user = WorkOS::User.new(json[:user].to_json)
17
+ @organization_id = T.let(json[:organization_id], T.nilable(String))
18
+ end
19
+
20
+ def to_json(*)
21
+ {
22
+ user: user.to_json,
23
+ organization_id: organization_id,
24
+ }
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+ # typed: true
3
+
4
+ module WorkOS
5
+ # The Invitation class provides a lightweight wrapper around a WorkOS Invitation
6
+ # resource. This class is not meant to be instantiated in a user space,
7
+ # and is instantiated internally but exposed.
8
+ class Invitation
9
+ include HashProvider
10
+ extend T::Sig
11
+
12
+ attr_accessor :id, :email, :state, :accepted_at, :revoked_at,
13
+ :expires_at, :token, :organization_id, :created_at, :updated_at
14
+
15
+ # rubocop:disable Metrics/AbcSize
16
+ sig { params(json: String).void }
17
+ def initialize(json)
18
+ raw = parse_json(json)
19
+
20
+ @id = T.let(raw.id, String)
21
+ @email = T.let(raw.email, String)
22
+ @state = T.let(raw.state, String)
23
+ @token = T.let(raw.token, String)
24
+ @organization_id = T.let(raw.organization_id, T.nilable(String))
25
+ @accepted_at = T.let(raw.accepted_at, T.nilable(String))
26
+ @revoked_at = T.let(raw.revoked_at, T.nilable(String))
27
+ @expires_at = T.let(raw.expires_at, String)
28
+ @created_at = T.let(raw.created_at, String)
29
+ @updated_at = T.let(raw.updated_at, String)
30
+ end
31
+ # rubocop:enable Metrics/AbcSize
32
+
33
+ def to_json(*)
34
+ {
35
+ id: id,
36
+ email: email,
37
+ state: state,
38
+ token: token,
39
+ organization_id: organization_id,
40
+ accepted_at: accepted_at,
41
+ revoked_at: revoked_at,
42
+ expires_at: expires_at,
43
+ created_at: created_at,
44
+ updated_at: updated_at,
45
+ }
46
+ end
47
+
48
+ private
49
+
50
+ sig { params(json_string: String).returns(WorkOS::Types::InvitationStruct) }
51
+ def parse_json(json_string)
52
+ hash = JSON.parse(json_string, symbolize_names: true)
53
+
54
+ WorkOS::Types::InvitationStruct.new(
55
+ id: hash[:id],
56
+ email: hash[:email],
57
+ state: hash[:state],
58
+ token: hash[:token],
59
+ organization_id: hash[:organization_id],
60
+ accepted_at: hash[:accepted_at],
61
+ revoked_at: hash[:revoked_at],
62
+ expires_at: hash[:expires_at],
63
+ created_at: hash[:created_at],
64
+ updated_at: hash[:updated_at],
65
+ )
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+ # typed: true
3
+
4
+ module WorkOS
5
+ # The OrganizationMembership class provides a lightweight wrapper around a WorkOS OrganizationMembership
6
+ # resource. This class is not meant to be instantiated in a user space,
7
+ # and is instantiated internally but exposed.
8
+ class OrganizationMembership
9
+ include HashProvider
10
+ extend T::Sig
11
+
12
+ attr_accessor :id, :user_id, :organization_id, :created_at, :updated_at
13
+
14
+ sig { params(json: String).void }
15
+ 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
+ @created_at = T.let(raw.created_at, String)
22
+ @updated_at = T.let(raw.updated_at, String)
23
+ end
24
+
25
+ def to_json(*)
26
+ {
27
+ id: id,
28
+ user_id: user_id,
29
+ organization_id: organization_id,
30
+ created_at: created_at,
31
+ updated_at: updated_at,
32
+ }
33
+ end
34
+
35
+ private
36
+
37
+ sig { params(json_string: String).returns(WorkOS::Types::OrganizationMembershipStruct) }
38
+ def parse_json(json_string)
39
+ hash = JSON.parse(json_string, symbolize_names: true)
40
+
41
+ WorkOS::Types::OrganizationMembershipStruct.new(
42
+ id: hash[:id],
43
+ user_id: hash[:user_id],
44
+ organization_id: hash[:organization_id],
45
+ created_at: hash[:created_at],
46
+ updated_at: hash[:updated_at],
47
+ )
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+ # typed: strict
3
+
4
+ module WorkOS
5
+ module Types
6
+ # This InvitationStruct acts as a typed interface for the Invitation class
7
+ class InvitationStruct < T::Struct
8
+ const :id, String
9
+ const :email, String
10
+ const :state, String
11
+ const :token, String
12
+ const :organization_id, T.nilable(String)
13
+ const :accepted_at, T.nilable(String)
14
+ const :revoked_at, T.nilable(String)
15
+ const :expires_at, String
16
+ const :created_at, String
17
+ const :updated_at, String
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ # typed: true
3
+
4
+ module WorkOS
5
+ module Types
6
+ # This MagicAuthChallengeStruct acts as a typed interface for the
7
+ # MagicAuthChallenge class
8
+ class MagicAuthChallengeStruct < T::Struct
9
+ const :id, String
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+ # typed: strict
3
+
4
+ module WorkOS
5
+ module Types
6
+ # This OrganizationMembershipStruct acts as a typed interface for the OrganizationMembership class
7
+ class OrganizationMembershipStruct < T::Struct
8
+ const :id, String
9
+ const :user_id, String
10
+ const :organization_id, String
11
+ const :created_at, String
12
+ const :updated_at, String
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+ # typed: strict
3
+
4
+ module WorkOS
5
+ module Types
6
+ # This UserStruct acts as a typed interface for the User class
7
+ class UserStruct < T::Struct
8
+ const :id, String
9
+ const :email, String
10
+ const :first_name, T.nilable(String)
11
+ const :last_name, T.nilable(String)
12
+ const :email_verified, T::Boolean
13
+ const :created_at, String
14
+ const :updated_at, String
15
+ end
16
+ end
17
+ end
data/lib/workos/types.rb CHANGED
@@ -6,20 +6,24 @@ module WorkOS
6
6
  # so we're using Sorbet throughout this Ruby gem.
7
7
  module Types
8
8
  require_relative 'types/audit_log_export_struct'
9
+ require_relative 'types/challenge_struct'
9
10
  require_relative 'types/connection_struct'
10
- require_relative 'types/directory_struct'
11
11
  require_relative 'types/directory_group_struct'
12
+ require_relative 'types/directory_struct'
13
+ require_relative 'types/directory_user_struct'
12
14
  require_relative 'types/event_struct'
15
+ require_relative 'types/factor_struct'
13
16
  require_relative 'types/intent_enum'
17
+ require_relative 'types/invitation_struct'
14
18
  require_relative 'types/list_struct'
19
+ require_relative 'types/magic_auth_challenge_struct'
15
20
  require_relative 'types/organization_struct'
21
+ require_relative 'types/organization_membership_struct'
16
22
  require_relative 'types/passwordless_session_struct'
17
23
  require_relative 'types/profile_struct'
18
24
  require_relative 'types/provider_enum'
19
- require_relative 'types/directory_user_struct'
20
- require_relative 'types/webhook_struct'
21
- require_relative 'types/factor_struct'
22
- require_relative 'types/challenge_struct'
25
+ require_relative 'types/user_struct'
23
26
  require_relative 'types/verify_challenge_struct'
27
+ require_relative 'types/webhook_struct'
24
28
  end
25
29
  end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+ # typed: true
3
+
4
+ module WorkOS
5
+ # The User class provides a lightweight wrapper around a WorkOS User
6
+ # resource. This class is not meant to be instantiated in a user space,
7
+ # and is instantiated internally but exposed.
8
+ class User
9
+ include HashProvider
10
+ extend T::Sig
11
+
12
+ attr_accessor :id, :email, :first_name, :last_name, :email_verified,
13
+ :created_at, :updated_at
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
+ @email = T.let(raw.email, String)
21
+ @first_name = raw.first_name
22
+ @last_name = raw.last_name
23
+ @email_verified = raw.email_verified
24
+ @created_at = T.let(raw.created_at, String)
25
+ @updated_at = T.let(raw.updated_at, String)
26
+ end
27
+
28
+ def to_json(*)
29
+ {
30
+ id: id,
31
+ email: email,
32
+ first_name: first_name,
33
+ last_name: last_name,
34
+ email_verified: email_verified,
35
+ created_at: created_at,
36
+ updated_at: updated_at,
37
+ }
38
+ end
39
+
40
+ private
41
+
42
+ sig { params(json_string: String).returns(WorkOS::Types::UserStruct) }
43
+ def parse_json(json_string)
44
+ hash = JSON.parse(json_string, symbolize_names: true)
45
+
46
+ WorkOS::Types::UserStruct.new(
47
+ id: hash[:id],
48
+ email: hash[:email],
49
+ first_name: hash[:first_name],
50
+ last_name: hash[:last_name],
51
+ email_verified: hash[:email_verified],
52
+ created_at: hash[:created_at],
53
+ updated_at: hash[:updated_at],
54
+ )
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+ # typed: true
3
+
4
+ module WorkOS
5
+ # The UserAndToken class represents a User and a corresponding Token. This
6
+ # class is not meant to be instantiated in user space, and is instantiated
7
+ # internally but exposed.
8
+ class UserAndToken
9
+ include HashProvider
10
+ extend T::Sig
11
+
12
+ attr_accessor :token, :user
13
+
14
+ sig { params(user_and_token_json: String).void }
15
+ def initialize(user_and_token_json)
16
+ json = JSON.parse(user_and_token_json, symbolize_names: true)
17
+
18
+ @token = T.let(json[:token], String)
19
+ @user = WorkOS::User.new(json[:user].to_json)
20
+ end
21
+
22
+ def to_json(*)
23
+ {
24
+ token: token,
25
+ user: user.to_json,
26
+ }
27
+ end
28
+ end
29
+ end