vitable-connect 0.1.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.
Files changed (185) hide show
  1. checksums.yaml +7 -0
  2. data/.ignore +2 -0
  3. data/CHANGELOG.md +39 -0
  4. data/README.md +267 -0
  5. data/SECURITY.md +27 -0
  6. data/lib/vitable_connect/client.rb +118 -0
  7. data/lib/vitable_connect/errors.rb +228 -0
  8. data/lib/vitable_connect/file_part.rb +58 -0
  9. data/lib/vitable_connect/internal/page_number_page.rb +113 -0
  10. data/lib/vitable_connect/internal/transport/base_client.rb +577 -0
  11. data/lib/vitable_connect/internal/transport/pooled_net_requester.rb +210 -0
  12. data/lib/vitable_connect/internal/type/array_of.rb +168 -0
  13. data/lib/vitable_connect/internal/type/base_model.rb +534 -0
  14. data/lib/vitable_connect/internal/type/base_page.rb +55 -0
  15. data/lib/vitable_connect/internal/type/boolean.rb +77 -0
  16. data/lib/vitable_connect/internal/type/converter.rb +327 -0
  17. data/lib/vitable_connect/internal/type/enum.rb +152 -0
  18. data/lib/vitable_connect/internal/type/file_input.rb +111 -0
  19. data/lib/vitable_connect/internal/type/hash_of.rb +188 -0
  20. data/lib/vitable_connect/internal/type/request_parameters.rb +42 -0
  21. data/lib/vitable_connect/internal/type/union.rb +245 -0
  22. data/lib/vitable_connect/internal/type/unknown.rb +81 -0
  23. data/lib/vitable_connect/internal/util.rb +951 -0
  24. data/lib/vitable_connect/internal.rb +20 -0
  25. data/lib/vitable_connect/models/auth_issue_access_token_params.rb +68 -0
  26. data/lib/vitable_connect/models/auth_issue_access_token_response.rb +70 -0
  27. data/lib/vitable_connect/models/benefit_eligibility_policy.rb +53 -0
  28. data/lib/vitable_connect/models/benefit_eligibility_policy_response.rb +18 -0
  29. data/lib/vitable_connect/models/benefit_eligibility_policy_retrieve_params.rb +22 -0
  30. data/lib/vitable_connect/models/employee.rb +244 -0
  31. data/lib/vitable_connect/models/employee_class.rb +25 -0
  32. data/lib/vitable_connect/models/employee_list_enrollments_params.rb +38 -0
  33. data/lib/vitable_connect/models/employee_retrieve_params.rb +22 -0
  34. data/lib/vitable_connect/models/employee_retrieve_response.rb +18 -0
  35. data/lib/vitable_connect/models/employer.rb +163 -0
  36. data/lib/vitable_connect/models/employer_create_benefit_eligibility_policy_params.rb +43 -0
  37. data/lib/vitable_connect/models/employer_create_params.rb +115 -0
  38. data/lib/vitable_connect/models/employer_list_employees_params.rb +38 -0
  39. data/lib/vitable_connect/models/employer_list_params.rb +30 -0
  40. data/lib/vitable_connect/models/employer_response.rb +19 -0
  41. data/lib/vitable_connect/models/employer_retrieve_params.rb +22 -0
  42. data/lib/vitable_connect/models/employer_submit_census_sync_params.rb +374 -0
  43. data/lib/vitable_connect/models/employer_submit_census_sync_response.rb +35 -0
  44. data/lib/vitable_connect/models/enrollment.rb +234 -0
  45. data/lib/vitable_connect/models/enrollment_retrieve_params.rb +22 -0
  46. data/lib/vitable_connect/models/enrollment_retrieve_response.rb +18 -0
  47. data/lib/vitable_connect/models/enrollment_status.rb +21 -0
  48. data/lib/vitable_connect/models/pagination.rb +42 -0
  49. data/lib/vitable_connect/models/type.rb +17 -0
  50. data/lib/vitable_connect/models/webhook_event.rb +62 -0
  51. data/lib/vitable_connect/models/webhook_event_list_deliveries_params.rb +20 -0
  52. data/lib/vitable_connect/models/webhook_event_list_deliveries_response.rb +92 -0
  53. data/lib/vitable_connect/models/webhook_event_list_params.rb +135 -0
  54. data/lib/vitable_connect/models/webhook_event_retrieve_params.rb +20 -0
  55. data/lib/vitable_connect/models/webhook_event_retrieve_response.rb +18 -0
  56. data/lib/vitable_connect/models.rb +95 -0
  57. data/lib/vitable_connect/request_options.rb +78 -0
  58. data/lib/vitable_connect/resources/auth.rb +41 -0
  59. data/lib/vitable_connect/resources/benefit_eligibility_policies.rb +35 -0
  60. data/lib/vitable_connect/resources/employees.rb +63 -0
  61. data/lib/vitable_connect/resources/employers.rb +184 -0
  62. data/lib/vitable_connect/resources/enrollments.rb +35 -0
  63. data/lib/vitable_connect/resources/webhook_events.rb +95 -0
  64. data/lib/vitable_connect/version.rb +5 -0
  65. data/lib/vitable_connect.rb +93 -0
  66. data/manifest.yaml +17 -0
  67. data/rbi/vitable_connect/client.rbi +88 -0
  68. data/rbi/vitable_connect/errors.rbi +205 -0
  69. data/rbi/vitable_connect/file_part.rbi +37 -0
  70. data/rbi/vitable_connect/internal/page_number_page.rbi +49 -0
  71. data/rbi/vitable_connect/internal/transport/base_client.rbi +307 -0
  72. data/rbi/vitable_connect/internal/transport/pooled_net_requester.rbi +84 -0
  73. data/rbi/vitable_connect/internal/type/array_of.rbi +108 -0
  74. data/rbi/vitable_connect/internal/type/base_model.rbi +314 -0
  75. data/rbi/vitable_connect/internal/type/base_page.rbi +43 -0
  76. data/rbi/vitable_connect/internal/type/boolean.rbi +58 -0
  77. data/rbi/vitable_connect/internal/type/converter.rbi +225 -0
  78. data/rbi/vitable_connect/internal/type/enum.rbi +82 -0
  79. data/rbi/vitable_connect/internal/type/file_input.rbi +59 -0
  80. data/rbi/vitable_connect/internal/type/hash_of.rbi +108 -0
  81. data/rbi/vitable_connect/internal/type/request_parameters.rbi +31 -0
  82. data/rbi/vitable_connect/internal/type/union.rbi +130 -0
  83. data/rbi/vitable_connect/internal/type/unknown.rbi +58 -0
  84. data/rbi/vitable_connect/internal/util.rbi +507 -0
  85. data/rbi/vitable_connect/internal.rbi +18 -0
  86. data/rbi/vitable_connect/models/auth_issue_access_token_params.rbi +147 -0
  87. data/rbi/vitable_connect/models/auth_issue_access_token_response.rbi +128 -0
  88. data/rbi/vitable_connect/models/benefit_eligibility_policy.rbi +74 -0
  89. data/rbi/vitable_connect/models/benefit_eligibility_policy_response.rbi +38 -0
  90. data/rbi/vitable_connect/models/benefit_eligibility_policy_retrieve_params.rbi +43 -0
  91. data/rbi/vitable_connect/models/employee.rbi +316 -0
  92. data/rbi/vitable_connect/models/employee_class.rbi +38 -0
  93. data/rbi/vitable_connect/models/employee_list_enrollments_params.rbi +68 -0
  94. data/rbi/vitable_connect/models/employee_retrieve_params.rbi +46 -0
  95. data/rbi/vitable_connect/models/employee_retrieve_response.rbi +32 -0
  96. data/rbi/vitable_connect/models/employer.rbi +205 -0
  97. data/rbi/vitable_connect/models/employer_create_benefit_eligibility_policy_params.rbi +64 -0
  98. data/rbi/vitable_connect/models/employer_create_params.rbi +169 -0
  99. data/rbi/vitable_connect/models/employer_list_employees_params.rbi +68 -0
  100. data/rbi/vitable_connect/models/employer_list_params.rbi +60 -0
  101. data/rbi/vitable_connect/models/employer_response.rbi +36 -0
  102. data/rbi/vitable_connect/models/employer_retrieve_params.rbi +46 -0
  103. data/rbi/vitable_connect/models/employer_submit_census_sync_params.rbi +819 -0
  104. data/rbi/vitable_connect/models/employer_submit_census_sync_response.rbi +76 -0
  105. data/rbi/vitable_connect/models/enrollment.rbi +401 -0
  106. data/rbi/vitable_connect/models/enrollment_retrieve_params.rbi +46 -0
  107. data/rbi/vitable_connect/models/enrollment_retrieve_response.rbi +34 -0
  108. data/rbi/vitable_connect/models/enrollment_status.rbi +32 -0
  109. data/rbi/vitable_connect/models/pagination.rbi +62 -0
  110. data/rbi/vitable_connect/models/type.rbi +21 -0
  111. data/rbi/vitable_connect/models/webhook_event.rbi +81 -0
  112. data/rbi/vitable_connect/models/webhook_event_list_deliveries_params.rbi +38 -0
  113. data/rbi/vitable_connect/models/webhook_event_list_deliveries_response.rbi +147 -0
  114. data/rbi/vitable_connect/models/webhook_event_list_params.rbi +307 -0
  115. data/rbi/vitable_connect/models/webhook_event_retrieve_params.rbi +38 -0
  116. data/rbi/vitable_connect/models/webhook_event_retrieve_response.rbi +34 -0
  117. data/rbi/vitable_connect/models.rbi +62 -0
  118. data/rbi/vitable_connect/request_options.rbi +61 -0
  119. data/rbi/vitable_connect/resources/auth.rbi +36 -0
  120. data/rbi/vitable_connect/resources/benefit_eligibility_policies.rbi +27 -0
  121. data/rbi/vitable_connect/resources/employees.rbi +49 -0
  122. data/rbi/vitable_connect/resources/employers.rbi +147 -0
  123. data/rbi/vitable_connect/resources/enrollments.rbi +27 -0
  124. data/rbi/vitable_connect/resources/webhook_events.rbi +84 -0
  125. data/rbi/vitable_connect/version.rbi +5 -0
  126. data/sig/vitable_connect/client.rbs +42 -0
  127. data/sig/vitable_connect/errors.rbs +117 -0
  128. data/sig/vitable_connect/file_part.rbs +21 -0
  129. data/sig/vitable_connect/internal/page_number_page.rbs +28 -0
  130. data/sig/vitable_connect/internal/transport/base_client.rbs +133 -0
  131. data/sig/vitable_connect/internal/transport/pooled_net_requester.rbs +48 -0
  132. data/sig/vitable_connect/internal/type/array_of.rbs +48 -0
  133. data/sig/vitable_connect/internal/type/base_model.rbs +104 -0
  134. data/sig/vitable_connect/internal/type/base_page.rbs +24 -0
  135. data/sig/vitable_connect/internal/type/boolean.rbs +26 -0
  136. data/sig/vitable_connect/internal/type/converter.rbs +79 -0
  137. data/sig/vitable_connect/internal/type/enum.rbs +32 -0
  138. data/sig/vitable_connect/internal/type/file_input.rbs +25 -0
  139. data/sig/vitable_connect/internal/type/hash_of.rbs +48 -0
  140. data/sig/vitable_connect/internal/type/request_parameters.rbs +20 -0
  141. data/sig/vitable_connect/internal/type/union.rbs +52 -0
  142. data/sig/vitable_connect/internal/type/unknown.rbs +26 -0
  143. data/sig/vitable_connect/internal/util.rbs +195 -0
  144. data/sig/vitable_connect/internal.rbs +10 -0
  145. data/sig/vitable_connect/models/auth_issue_access_token_params.rbs +56 -0
  146. data/sig/vitable_connect/models/auth_issue_access_token_response.rbs +50 -0
  147. data/sig/vitable_connect/models/benefit_eligibility_policy.rbs +50 -0
  148. data/sig/vitable_connect/models/benefit_eligibility_policy_response.rbs +14 -0
  149. data/sig/vitable_connect/models/benefit_eligibility_policy_retrieve_params.rbs +23 -0
  150. data/sig/vitable_connect/models/employee.rbs +169 -0
  151. data/sig/vitable_connect/models/employee_class.rbs +24 -0
  152. data/sig/vitable_connect/models/employee_list_enrollments_params.rbs +36 -0
  153. data/sig/vitable_connect/models/employee_retrieve_params.rbs +24 -0
  154. data/sig/vitable_connect/models/employee_retrieve_response.rbs +13 -0
  155. data/sig/vitable_connect/models/employer.rbs +117 -0
  156. data/sig/vitable_connect/models/employer_create_benefit_eligibility_policy_params.rbs +32 -0
  157. data/sig/vitable_connect/models/employer_create_params.rbs +93 -0
  158. data/sig/vitable_connect/models/employer_list_employees_params.rbs +36 -0
  159. data/sig/vitable_connect/models/employer_list_params.rbs +32 -0
  160. data/sig/vitable_connect/models/employer_response.rbs +13 -0
  161. data/sig/vitable_connect/models/employer_retrieve_params.rbs +24 -0
  162. data/sig/vitable_connect/models/employer_submit_census_sync_params.rbs +274 -0
  163. data/sig/vitable_connect/models/employer_submit_census_sync_response.rbs +30 -0
  164. data/sig/vitable_connect/models/enrollment.rbs +164 -0
  165. data/sig/vitable_connect/models/enrollment_retrieve_params.rbs +24 -0
  166. data/sig/vitable_connect/models/enrollment_retrieve_response.rbs +13 -0
  167. data/sig/vitable_connect/models/enrollment_status.rbs +16 -0
  168. data/sig/vitable_connect/models/pagination.rbs +30 -0
  169. data/sig/vitable_connect/models/type.rbs +14 -0
  170. data/sig/vitable_connect/models/webhook_event.rbs +45 -0
  171. data/sig/vitable_connect/models/webhook_event_list_deliveries_params.rbs +23 -0
  172. data/sig/vitable_connect/models/webhook_event_list_deliveries_response.rbs +77 -0
  173. data/sig/vitable_connect/models/webhook_event_list_params.rbs +126 -0
  174. data/sig/vitable_connect/models/webhook_event_retrieve_params.rbs +23 -0
  175. data/sig/vitable_connect/models/webhook_event_retrieve_response.rbs +14 -0
  176. data/sig/vitable_connect/models.rbs +51 -0
  177. data/sig/vitable_connect/request_options.rbs +36 -0
  178. data/sig/vitable_connect/resources/auth.rbs +13 -0
  179. data/sig/vitable_connect/resources/benefit_eligibility_policies.rbs +12 -0
  180. data/sig/vitable_connect/resources/employees.rbs +19 -0
  181. data/sig/vitable_connect/resources/employers.rbs +49 -0
  182. data/sig/vitable_connect/resources/enrollments.rbs +12 -0
  183. data/sig/vitable_connect/resources/webhook_events.rbs +28 -0
  184. data/sig/vitable_connect/version.rbs +3 -0
  185. metadata +256 -0
@@ -0,0 +1,61 @@
1
+ # typed: strong
2
+
3
+ module VitableConnect
4
+ # Specify HTTP behaviour to use for a specific request. These options supplement
5
+ # or override those provided at the client level.
6
+ #
7
+ # When making a request, you can pass an actual {RequestOptions} instance, or
8
+ # simply pass a Hash with symbol keys matching the attributes on this class.
9
+ class RequestOptions < VitableConnect::Internal::Type::BaseModel
10
+ OrHash =
11
+ T.type_alias do
12
+ T.any(VitableConnect::RequestOptions, VitableConnect::Internal::AnyHash)
13
+ end
14
+
15
+ # @api private
16
+ sig { params(opts: VitableConnect::RequestOptions::OrHash).void }
17
+ def self.validate!(opts)
18
+ end
19
+
20
+ # Idempotency key to send with request and all associated retries. Will only be
21
+ # sent for write requests.
22
+ sig { returns(T.nilable(String)) }
23
+ attr_accessor :idempotency_key
24
+
25
+ # Extra query params to send with the request. These are `.merge`’d into any
26
+ # `query` given at the client level.
27
+ sig do
28
+ returns(
29
+ T.nilable(T::Hash[String, T.nilable(T.any(T::Array[String], String))])
30
+ )
31
+ end
32
+ attr_accessor :extra_query
33
+
34
+ # Extra headers to send with the request. These are `.merged`’d into any
35
+ # `extra_headers` given at the client level.
36
+ sig { returns(T.nilable(T::Hash[String, T.nilable(String)])) }
37
+ attr_accessor :extra_headers
38
+
39
+ # Extra data to send with the request. These are deep merged into any data
40
+ # generated as part of the normal request.
41
+ sig { returns(T.nilable(T.anything)) }
42
+ attr_accessor :extra_body
43
+
44
+ # Maximum number of retries to attempt after a failed initial request.
45
+ sig { returns(T.nilable(Integer)) }
46
+ attr_accessor :max_retries
47
+
48
+ # Request timeout in seconds.
49
+ sig { returns(T.nilable(Float)) }
50
+ attr_accessor :timeout
51
+
52
+ # Returns a new instance of RequestOptions.
53
+ sig do
54
+ params(values: VitableConnect::Internal::AnyHash).returns(
55
+ T.attached_class
56
+ )
57
+ end
58
+ def self.new(values = {})
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,36 @@
1
+ # typed: strong
2
+
3
+ module VitableConnect
4
+ module Resources
5
+ # Issue short-lived access tokens for scoped API access
6
+ class Auth
7
+ # Issues a short-lived access token from the authenticated API key. Access tokens
8
+ # can optionally be bound to a specific employer or employee for scoped access.
9
+ # Tokens expire after 15 minutes.
10
+ sig do
11
+ params(
12
+ grant_type:
13
+ VitableConnect::AuthIssueAccessTokenParams::GrantType::OrSymbol,
14
+ bound_entity:
15
+ T.nilable(
16
+ VitableConnect::AuthIssueAccessTokenParams::BoundEntity::OrHash
17
+ ),
18
+ request_options: VitableConnect::RequestOptions::OrHash
19
+ ).returns(VitableConnect::Models::AuthIssueAccessTokenResponse)
20
+ end
21
+ def issue_access_token(
22
+ # - `client_credentials` - client_credentials
23
+ grant_type:,
24
+ # Optional entity to bind the token to for scoped access
25
+ bound_entity: nil,
26
+ request_options: {}
27
+ )
28
+ end
29
+
30
+ # @api private
31
+ sig { params(client: VitableConnect::Client).returns(T.attached_class) }
32
+ def self.new(client:)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,27 @@
1
+ # typed: strong
2
+
3
+ module VitableConnect
4
+ module Resources
5
+ # Define rules that determine which employees qualify for benefits
6
+ class BenefitEligibilityPolicies
7
+ # Retrieves a benefit eligibility policy by ID.
8
+ sig do
9
+ params(
10
+ policy_id: String,
11
+ request_options: VitableConnect::RequestOptions::OrHash
12
+ ).returns(VitableConnect::BenefitEligibilityPolicyResponse)
13
+ end
14
+ def retrieve(
15
+ # Unique benefit eligibility policy identifier (epol\_\*)
16
+ policy_id,
17
+ request_options: {}
18
+ )
19
+ end
20
+
21
+ # @api private
22
+ sig { params(client: VitableConnect::Client).returns(T.attached_class) }
23
+ def self.new(client:)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,49 @@
1
+ # typed: strong
2
+
3
+ module VitableConnect
4
+ module Resources
5
+ class Employees
6
+ # Retrieves detailed information for a specific employee by ID. Returns employee
7
+ # details including personal information and employment status.
8
+ sig do
9
+ params(
10
+ employee_id: String,
11
+ request_options: VitableConnect::RequestOptions::OrHash
12
+ ).returns(VitableConnect::Models::EmployeeRetrieveResponse)
13
+ end
14
+ def retrieve(
15
+ # Unique employee identifier (empl\_\*)
16
+ employee_id,
17
+ request_options: {}
18
+ )
19
+ end
20
+
21
+ # Retrieves a paginated list of benefit enrollments for an employee.
22
+ sig do
23
+ params(
24
+ employee_id: String,
25
+ limit: Integer,
26
+ page: Integer,
27
+ request_options: VitableConnect::RequestOptions::OrHash
28
+ ).returns(
29
+ VitableConnect::Internal::PageNumberPage[VitableConnect::Enrollment]
30
+ )
31
+ end
32
+ def list_enrollments(
33
+ # Unique employee identifier (empl\_\*)
34
+ employee_id,
35
+ # Items per page (default: 20, max: 100)
36
+ limit: nil,
37
+ # Page number (default: 1)
38
+ page: nil,
39
+ request_options: {}
40
+ )
41
+ end
42
+
43
+ # @api private
44
+ sig { params(client: VitableConnect::Client).returns(T.attached_class) }
45
+ def self.new(client:)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,147 @@
1
+ # typed: strong
2
+
3
+ module VitableConnect
4
+ module Resources
5
+ class Employers
6
+ # Creates a new employer for the authenticated organization. Requires employer
7
+ # name, legal name, EIN, email, and address information. Returns the created
8
+ # employer with its assigned ID.
9
+ sig do
10
+ params(
11
+ address: VitableConnect::EmployerCreateParams::Address::OrHash,
12
+ ein: String,
13
+ email: String,
14
+ legal_name: String,
15
+ name: String,
16
+ phone_number: T.nilable(String),
17
+ reference_id: T.nilable(String),
18
+ request_options: VitableConnect::RequestOptions::OrHash
19
+ ).returns(VitableConnect::EmployerResponse)
20
+ end
21
+ def create(
22
+ # Employer address
23
+ address:,
24
+ # Employer Identification Number (format: XX-XXXXXXX)
25
+ ein:,
26
+ # Email address for billing and communications
27
+ email:,
28
+ # Legal business name
29
+ legal_name:,
30
+ # Employer display name
31
+ name:,
32
+ # Employer phone number (10-digit US format, e.g. 5551234567)
33
+ phone_number: nil,
34
+ # External reference ID for this employer
35
+ reference_id: nil,
36
+ request_options: {}
37
+ )
38
+ end
39
+
40
+ # Retrieves detailed information for a specific employer by ID. The employer must
41
+ # belong to the authenticated organization.
42
+ sig do
43
+ params(
44
+ employer_id: String,
45
+ request_options: VitableConnect::RequestOptions::OrHash
46
+ ).returns(VitableConnect::EmployerResponse)
47
+ end
48
+ def retrieve(
49
+ # Unique employer identifier (empr\_\*)
50
+ employer_id,
51
+ request_options: {}
52
+ )
53
+ end
54
+
55
+ # Retrieves a paginated list of all employers belonging to the authenticated
56
+ # organization. Results are sorted by creation date (newest first) and paginated
57
+ # using page and limit parameters.
58
+ sig do
59
+ params(
60
+ limit: Integer,
61
+ page: Integer,
62
+ request_options: VitableConnect::RequestOptions::OrHash
63
+ ).returns(
64
+ VitableConnect::Internal::PageNumberPage[VitableConnect::Employer]
65
+ )
66
+ end
67
+ def list(
68
+ # Items per page (default: 20, max: 100)
69
+ limit: nil,
70
+ # Page number (default: 1)
71
+ page: nil,
72
+ request_options: {}
73
+ )
74
+ end
75
+
76
+ # Creates a benefit eligibility policy for the specified employer.
77
+ sig do
78
+ params(
79
+ employer_id: String,
80
+ classification: String,
81
+ waiting_period: String,
82
+ request_options: VitableConnect::RequestOptions::OrHash
83
+ ).returns(VitableConnect::BenefitEligibilityPolicyResponse)
84
+ end
85
+ def create_benefit_eligibility_policy(
86
+ # Unique employer identifier (empr\_\*)
87
+ employer_id,
88
+ # Which employee classifications are eligible. One of: full_time, part_time, all
89
+ classification:,
90
+ # Waiting period before eligibility. One of: first_of_following_month, 30_days,
91
+ # 60_days, none
92
+ waiting_period:,
93
+ request_options: {}
94
+ )
95
+ end
96
+
97
+ # Retrieves a paginated list of all employees for a specific employer. Results are
98
+ # paginated using page and limit parameters.
99
+ sig do
100
+ params(
101
+ employer_id: String,
102
+ limit: Integer,
103
+ page: Integer,
104
+ request_options: VitableConnect::RequestOptions::OrHash
105
+ ).returns(
106
+ VitableConnect::Internal::PageNumberPage[VitableConnect::Employee]
107
+ )
108
+ end
109
+ def list_employees(
110
+ # Unique employer identifier (empr\_\*)
111
+ employer_id,
112
+ # Items per page (default: 20, max: 100)
113
+ limit: nil,
114
+ # Page number (default: 1)
115
+ page: nil,
116
+ request_options: {}
117
+ )
118
+ end
119
+
120
+ # Submits a census sync payload for the specified employer. The employees in the
121
+ # payload will be queued for processing. Returns an accepted response with the
122
+ # timestamp of acceptance.
123
+ sig do
124
+ params(
125
+ employer_id: String,
126
+ employees:
127
+ T::Array[
128
+ VitableConnect::EmployerSubmitCensusSyncParams::Employee::OrHash
129
+ ],
130
+ request_options: VitableConnect::RequestOptions::OrHash
131
+ ).returns(VitableConnect::Models::EmployerSubmitCensusSyncResponse)
132
+ end
133
+ def submit_census_sync(
134
+ # Unique employer identifier (empr\_\*)
135
+ employer_id,
136
+ employees:,
137
+ request_options: {}
138
+ )
139
+ end
140
+
141
+ # @api private
142
+ sig { params(client: VitableConnect::Client).returns(T.attached_class) }
143
+ def self.new(client:)
144
+ end
145
+ end
146
+ end
147
+ end
@@ -0,0 +1,27 @@
1
+ # typed: strong
2
+
3
+ module VitableConnect
4
+ module Resources
5
+ # Manage benefit enrollments and elections for employees
6
+ class Enrollments
7
+ # Retrieves detailed information for a specific enrollment by ID.
8
+ sig do
9
+ params(
10
+ enrollment_id: String,
11
+ request_options: VitableConnect::RequestOptions::OrHash
12
+ ).returns(VitableConnect::Models::EnrollmentRetrieveResponse)
13
+ end
14
+ def retrieve(
15
+ # Unique enrollment identifier (enrl\_\*)
16
+ enrollment_id,
17
+ request_options: {}
18
+ )
19
+ end
20
+
21
+ # @api private
22
+ sig { params(client: VitableConnect::Client).returns(T.attached_class) }
23
+ def self.new(client:)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,84 @@
1
+ # typed: strong
2
+
3
+ module VitableConnect
4
+ module Resources
5
+ class WebhookEvents
6
+ # Retrieves a single webhook event by its prefixed ID. Returns 404 if the event
7
+ # does not exist or belongs to a different organization.
8
+ sig do
9
+ params(
10
+ event_id: String,
11
+ request_options: VitableConnect::RequestOptions::OrHash
12
+ ).returns(VitableConnect::Models::WebhookEventRetrieveResponse)
13
+ end
14
+ def retrieve(event_id, request_options: {})
15
+ end
16
+
17
+ # Retrieves a paginated list of webhook events for the authenticated organization.
18
+ # Supports filtering by event name, resource type, resource ID, and date range.
19
+ sig do
20
+ params(
21
+ created_after: Time,
22
+ created_before: Time,
23
+ event_name:
24
+ VitableConnect::WebhookEventListParams::EventName::OrSymbol,
25
+ limit: Integer,
26
+ page: Integer,
27
+ resource_id: String,
28
+ resource_type:
29
+ VitableConnect::WebhookEventListParams::ResourceType::OrSymbol,
30
+ request_options: VitableConnect::RequestOptions::OrHash
31
+ ).returns(
32
+ VitableConnect::Internal::PageNumberPage[VitableConnect::WebhookEvent]
33
+ )
34
+ end
35
+ def list(
36
+ created_after: nil,
37
+ created_before: nil,
38
+ # - `enrollment.accepted` - Enrollment Accepted
39
+ # - `enrollment.terminated` - Enrollment Terminated
40
+ # - `enrollment.elected` - Enrollment Elected
41
+ # - `enrollment.granted` - Enrollment Granted
42
+ # - `enrollment.waived` - Enrollment Waived
43
+ # - `enrollment.started` - Enrollment Started
44
+ # - `employee.eligibility_granted` - Employee Eligibility Granted
45
+ # - `employee.eligibility_terminated` - Employee Eligibility Terminated
46
+ # - `employee.deactivated` - Employee Deactivated
47
+ # - `payroll_deduction.created` - Payroll Deduction Created
48
+ # - `employer.eligibility_policy_created` - Employer Eligibility Policy Created
49
+ event_name: nil,
50
+ # Items per page (default: 20, max: 100)
51
+ limit: nil,
52
+ # Page number (default: 1)
53
+ page: nil,
54
+ resource_id: nil,
55
+ # - `enrollment` - Enrollment
56
+ # - `employee` - Employee
57
+ # - `employer` - Employer
58
+ # - `dependent` - Dependent
59
+ # - `plan_year` - Plan Year
60
+ # - `payroll_deduction` - Payroll Deduction
61
+ resource_type: nil,
62
+ request_options: {}
63
+ )
64
+ end
65
+
66
+ # Retrieves all delivery attempts for a webhook event. Returns up to 100
67
+ # deliveries. Each delivery includes a computed status field (Pending, In
68
+ # Progress, Delivered, or Failed).
69
+ sig do
70
+ params(
71
+ event_id: String,
72
+ request_options: VitableConnect::RequestOptions::OrHash
73
+ ).returns(VitableConnect::Models::WebhookEventListDeliveriesResponse)
74
+ end
75
+ def list_deliveries(event_id, request_options: {})
76
+ end
77
+
78
+ # @api private
79
+ sig { params(client: VitableConnect::Client).returns(T.attached_class) }
80
+ def self.new(client:)
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,5 @@
1
+ # typed: strong
2
+
3
+ module VitableConnect
4
+ VERSION = T.let(T.unsafe(nil), String)
5
+ end
@@ -0,0 +1,42 @@
1
+ module VitableConnect
2
+ class Client < VitableConnect::Internal::Transport::BaseClient
3
+ DEFAULT_MAX_RETRIES: 2
4
+
5
+ DEFAULT_TIMEOUT_IN_SECONDS: Float
6
+
7
+ DEFAULT_INITIAL_RETRY_DELAY: Float
8
+
9
+ DEFAULT_MAX_RETRY_DELAY: Float
10
+
11
+ ENVIRONMENTS: {
12
+ production: "https://api.vitablehealth.com",
13
+ :environment_1 => "https://api.uat.vitablehealth.com"
14
+ }
15
+
16
+ attr_reader api_key: String
17
+
18
+ attr_reader auth: VitableConnect::Resources::Auth
19
+
20
+ attr_reader benefit_eligibility_policies: VitableConnect::Resources::BenefitEligibilityPolicies
21
+
22
+ attr_reader employees: VitableConnect::Resources::Employees
23
+
24
+ attr_reader employers: VitableConnect::Resources::Employers
25
+
26
+ attr_reader enrollments: VitableConnect::Resources::Enrollments
27
+
28
+ attr_reader webhook_events: VitableConnect::Resources::WebhookEvents
29
+
30
+ private def auth_headers: -> ::Hash[String, String]
31
+
32
+ def initialize: (
33
+ ?api_key: String?,
34
+ ?environment: :production | :environment_1 | nil,
35
+ ?base_url: String?,
36
+ ?max_retries: Integer,
37
+ ?timeout: Float,
38
+ ?initial_retry_delay: Float,
39
+ ?max_retry_delay: Float
40
+ ) -> void
41
+ end
42
+ end
@@ -0,0 +1,117 @@
1
+ module VitableConnect
2
+ module Errors
3
+ class Error < StandardError
4
+ attr_accessor cause: StandardError?
5
+ end
6
+
7
+ class ConversionError < VitableConnect::Errors::Error
8
+ def cause: -> StandardError?
9
+
10
+ def initialize: (
11
+ on: Class,
12
+ method: Symbol,
13
+ target: top,
14
+ value: top,
15
+ ?cause: StandardError?
16
+ ) -> void
17
+ end
18
+
19
+ class APIError < VitableConnect::Errors::Error
20
+ attr_accessor url: URI::Generic
21
+
22
+ attr_accessor status: Integer?
23
+
24
+ attr_accessor headers: ::Hash[String, String]?
25
+
26
+ attr_accessor body: top?
27
+
28
+ def initialize: (
29
+ url: URI::Generic,
30
+ ?status: Integer?,
31
+ ?headers: ::Hash[String, String]?,
32
+ ?body: Object?,
33
+ ?request: nil,
34
+ ?response: nil,
35
+ ?message: String?
36
+ ) -> void
37
+ end
38
+
39
+ class APIConnectionError < VitableConnect::Errors::APIError
40
+ def initialize: (
41
+ url: URI::Generic,
42
+ ?status: nil,
43
+ ?headers: ::Hash[String, String]?,
44
+ ?body: nil,
45
+ ?request: nil,
46
+ ?response: nil,
47
+ ?message: String?
48
+ ) -> void
49
+ end
50
+
51
+ class APITimeoutError < VitableConnect::Errors::APIConnectionError
52
+ def initialize: (
53
+ url: URI::Generic,
54
+ ?status: nil,
55
+ ?headers: ::Hash[String, String]?,
56
+ ?body: nil,
57
+ ?request: nil,
58
+ ?response: nil,
59
+ ?message: String?
60
+ ) -> void
61
+ end
62
+
63
+ class APIStatusError < VitableConnect::Errors::APIError
64
+ def self.for: (
65
+ url: URI::Generic,
66
+ status: Integer,
67
+ headers: ::Hash[String, String]?,
68
+ body: Object?,
69
+ request: nil,
70
+ response: nil,
71
+ ?message: String?
72
+ ) -> instance
73
+
74
+ def initialize: (
75
+ url: URI::Generic,
76
+ status: Integer,
77
+ headers: ::Hash[String, String]?,
78
+ body: Object?,
79
+ request: nil,
80
+ response: nil,
81
+ ?message: String?
82
+ ) -> void
83
+ end
84
+
85
+ class BadRequestError < VitableConnect::Errors::APIStatusError
86
+ HTTP_STATUS: 400
87
+ end
88
+
89
+ class AuthenticationError < VitableConnect::Errors::APIStatusError
90
+ HTTP_STATUS: 401
91
+ end
92
+
93
+ class PermissionDeniedError < VitableConnect::Errors::APIStatusError
94
+ HTTP_STATUS: 403
95
+ end
96
+
97
+ class NotFoundError < VitableConnect::Errors::APIStatusError
98
+ HTTP_STATUS: 404
99
+ end
100
+
101
+ class ConflictError < VitableConnect::Errors::APIStatusError
102
+ HTTP_STATUS: 409
103
+ end
104
+
105
+ class UnprocessableEntityError < VitableConnect::Errors::APIStatusError
106
+ HTTP_STATUS: 422
107
+ end
108
+
109
+ class RateLimitError < VitableConnect::Errors::APIStatusError
110
+ HTTP_STATUS: 429
111
+ end
112
+
113
+ class InternalServerError < VitableConnect::Errors::APIStatusError
114
+ HTTP_STATUS: Range[Integer]
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,21 @@
1
+ module VitableConnect
2
+ class FilePart
3
+ attr_reader content: Pathname | StringIO | IO | String
4
+
5
+ attr_reader content_type: String?
6
+
7
+ attr_reader filename: String?
8
+
9
+ private def read: -> String
10
+
11
+ def to_json: (*top a) -> String
12
+
13
+ def to_yaml: (*top a) -> String
14
+
15
+ def initialize: (
16
+ Pathname | StringIO | IO | String content,
17
+ ?filename: (Pathname | String)?,
18
+ ?content_type: String?
19
+ ) -> void
20
+ end
21
+ end
@@ -0,0 +1,28 @@
1
+ module VitableConnect
2
+ module Internal
3
+ class PageNumberPage[Elem]
4
+ include VitableConnect::Internal::Type::BasePage[Elem]
5
+
6
+ attr_accessor data: ::Array[Elem]?
7
+
8
+ attr_accessor pagination: Pagination
9
+
10
+ def inspect: -> String
11
+
12
+ type pagination = { page: Integer, total_pages: Integer }
13
+ class Pagination < VitableConnect::Internal::Type::BaseModel
14
+ attr_reader page: Integer?
15
+
16
+ def page=: (Integer) -> Integer
17
+
18
+ attr_reader total_pages: Integer?
19
+
20
+ def total_pages=: (Integer) -> Integer
21
+
22
+ def initialize: (?page: Integer, ?total_pages: Integer) -> void
23
+
24
+ def to_hash: -> { page: Integer, total_pages: Integer }
25
+ end
26
+ end
27
+ end
28
+ end