noresponse 2.0.17

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 (231) hide show
  1. checksums.yaml +7 -0
  2. data/lib/crystalline/enum.rbi +17 -0
  3. data/lib/crystalline/metadata_fields.rb +263 -0
  4. data/lib/crystalline/module.rb +186 -0
  5. data/lib/crystalline/types.rb +168 -0
  6. data/lib/crystalline/utils.rb +67 -0
  7. data/lib/crystalline.rb +11 -0
  8. data/lib/no_response/assessments.rb +1252 -0
  9. data/lib/no_response/auth.rb +263 -0
  10. data/lib/no_response/issued_credential.rb +21 -0
  11. data/lib/no_response/keys.rb +318 -0
  12. data/lib/no_response/late_results.rb +301 -0
  13. data/lib/no_response/models/callbacks.rb +10 -0
  14. data/lib/no_response/models/errors/apistatuserror.rb +41 -0
  15. data/lib/no_response/models/errors/apistatuserror.rbi +30 -0
  16. data/lib/no_response/models/errors/authenticationerror.rb +108 -0
  17. data/lib/no_response/models/errors/authenticationerror.rbi +56 -0
  18. data/lib/no_response/models/errors/badrequesterror.rb +108 -0
  19. data/lib/no_response/models/errors/badrequesterror.rbi +56 -0
  20. data/lib/no_response/models/errors/conflicterror.rb +108 -0
  21. data/lib/no_response/models/errors/conflicterror.rbi +56 -0
  22. data/lib/no_response/models/errors/notfounderror.rb +108 -0
  23. data/lib/no_response/models/errors/notfounderror.rbi +56 -0
  24. data/lib/no_response/models/errors/permissiondeniederror.rb +108 -0
  25. data/lib/no_response/models/errors/permissiondeniederror.rbi +56 -0
  26. data/lib/no_response/models/errors/ratelimiterror.rb +108 -0
  27. data/lib/no_response/models/errors/ratelimiterror.rbi +56 -0
  28. data/lib/no_response/models/errors.rb +16 -0
  29. data/lib/no_response/models/operations/createassessment_request.rb +36 -0
  30. data/lib/no_response/models/operations/createassessment_request.rbi +20 -0
  31. data/lib/no_response/models/operations/createassessment_response.rb +32 -0
  32. data/lib/no_response/models/operations/createassessment_response.rbi +20 -0
  33. data/lib/no_response/models/operations/getassessment_request.rb +41 -0
  34. data/lib/no_response/models/operations/getassessment_request.rbi +20 -0
  35. data/lib/no_response/models/operations/getassessment_response.rb +32 -0
  36. data/lib/no_response/models/operations/getassessment_response.rbi +20 -0
  37. data/lib/no_response/models/operations/queryaccountassessments_response.rb +44 -0
  38. data/lib/no_response/models/operations/queryaccountassessments_response.rbi +20 -0
  39. data/lib/no_response/models/operations/recordassessmentoutcome_request.rb +52 -0
  40. data/lib/no_response/models/operations/recordassessmentoutcome_request.rbi +26 -0
  41. data/lib/no_response/models/operations/recordassessmentoutcome_response.rb +32 -0
  42. data/lib/no_response/models/operations/recordassessmentoutcome_response.rbi +20 -0
  43. data/lib/no_response/models/operations/rotateapikey_response.rb +32 -0
  44. data/lib/no_response/models/operations/rotateapikey_response.rbi +20 -0
  45. data/lib/no_response/models/operations.rb +17 -0
  46. data/lib/no_response/models/shared/alternate_name.rb +23 -0
  47. data/lib/no_response/models/shared/alternate_name.rbi +9 -0
  48. data/lib/no_response/models/shared/alternate_name_union.rb +23 -0
  49. data/lib/no_response/models/shared/alternate_name_union.rbi +9 -0
  50. data/lib/no_response/models/shared/assessment.rb +235 -0
  51. data/lib/no_response/models/shared/assessment.rbi +116 -0
  52. data/lib/no_response/models/shared/assessmentlist.rb +78 -0
  53. data/lib/no_response/models/shared/assessmentlist.rbi +38 -0
  54. data/lib/no_response/models/shared/assessmentoutcome.rb +61 -0
  55. data/lib/no_response/models/shared/assessmentoutcome.rbi +32 -0
  56. data/lib/no_response/models/shared/assessmentoutcomerequest.rb +71 -0
  57. data/lib/no_response/models/shared/assessmentoutcomerequest.rbi +32 -0
  58. data/lib/no_response/models/shared/assessmentquery.rb +70 -0
  59. data/lib/no_response/models/shared/assessmentquery.rbi +32 -0
  60. data/lib/no_response/models/shared/assessmentrequest.rb +125 -0
  61. data/lib/no_response/models/shared/assessmentrequest.rbi +62 -0
  62. data/lib/no_response/models/shared/assessmentrequestclientcontext.rb +125 -0
  63. data/lib/no_response/models/shared/assessmentrequestclientcontext.rbi +62 -0
  64. data/lib/no_response/models/shared/assessmentrequestidentifiers.rb +74 -0
  65. data/lib/no_response/models/shared/assessmentrequestidentifiers.rbi +38 -0
  66. data/lib/no_response/models/shared/assessmentrequestissuedcredential.rb +33 -0
  67. data/lib/no_response/models/shared/assessmentrequestissuedcredential.rbi +14 -0
  68. data/lib/no_response/models/shared/assessmentrequestpolicycontext.rb +46 -0
  69. data/lib/no_response/models/shared/assessmentrequestpolicycontext.rbi +20 -0
  70. data/lib/no_response/models/shared/assessmenttiming.rb +41 -0
  71. data/lib/no_response/models/shared/assessmenttiming.rbi +20 -0
  72. data/lib/no_response/models/shared/assurancelevel.rb +18 -0
  73. data/lib/no_response/models/shared/assurancelevel.rbi +9 -0
  74. data/lib/no_response/models/shared/authcontext.rb +285 -0
  75. data/lib/no_response/models/shared/authcontext.rbi +152 -0
  76. data/lib/no_response/models/shared/authcontextmfa.rb +55 -0
  77. data/lib/no_response/models/shared/authcontextmfa.rbi +26 -0
  78. data/lib/no_response/models/shared/authenticationerrorcode.rb +18 -0
  79. data/lib/no_response/models/shared/authenticationerrorcode.rbi +9 -0
  80. data/lib/no_response/models/shared/badrequesterrorcode.rb +20 -0
  81. data/lib/no_response/models/shared/badrequesterrorcode.rbi +9 -0
  82. data/lib/no_response/models/shared/band.rb +21 -0
  83. data/lib/no_response/models/shared/band.rbi +9 -0
  84. data/lib/no_response/models/shared/breach.rb +108 -0
  85. data/lib/no_response/models/shared/breach.rbi +56 -0
  86. data/lib/no_response/models/shared/breachexposed.rb +28 -0
  87. data/lib/no_response/models/shared/breachexposed.rbi +9 -0
  88. data/lib/no_response/models/shared/breachkind.rb +24 -0
  89. data/lib/no_response/models/shared/breachkind.rbi +9 -0
  90. data/lib/no_response/models/shared/breachselector.rb +20 -0
  91. data/lib/no_response/models/shared/breachselector.rbi +9 -0
  92. data/lib/no_response/models/shared/breachsummary.rb +109 -0
  93. data/lib/no_response/models/shared/breachsummary.rbi +56 -0
  94. data/lib/no_response/models/shared/confidence.rb +21 -0
  95. data/lib/no_response/models/shared/confidence.rbi +9 -0
  96. data/lib/no_response/models/shared/conflicterrorcode.rb +19 -0
  97. data/lib/no_response/models/shared/conflicterrorcode.rbi +9 -0
  98. data/lib/no_response/models/shared/consistency.rb +85 -0
  99. data/lib/no_response/models/shared/consistency.rbi +32 -0
  100. data/lib/no_response/models/shared/consistencyvalue.rb +21 -0
  101. data/lib/no_response/models/shared/consistencyvalue.rbi +9 -0
  102. data/lib/no_response/models/shared/country.rb +20 -0
  103. data/lib/no_response/models/shared/country.rbi +9 -0
  104. data/lib/no_response/models/shared/email.rb +23 -0
  105. data/lib/no_response/models/shared/email.rbi +9 -0
  106. data/lib/no_response/models/shared/email_union.rb +23 -0
  107. data/lib/no_response/models/shared/email_union.rbi +9 -0
  108. data/lib/no_response/models/shared/failurereason.rb +24 -0
  109. data/lib/no_response/models/shared/failurereason.rbi +9 -0
  110. data/lib/no_response/models/shared/flow.rb +18 -0
  111. data/lib/no_response/models/shared/flow.rbi +9 -0
  112. data/lib/no_response/models/shared/freshness.rb +20 -0
  113. data/lib/no_response/models/shared/freshness.rbi +9 -0
  114. data/lib/no_response/models/shared/hookpoint.rb +19 -0
  115. data/lib/no_response/models/shared/hookpoint.rbi +9 -0
  116. data/lib/no_response/models/shared/identifierkind.rb +21 -0
  117. data/lib/no_response/models/shared/identifierkind.rbi +9 -0
  118. data/lib/no_response/models/shared/incompletereason.rb +23 -0
  119. data/lib/no_response/models/shared/incompletereason.rbi +9 -0
  120. data/lib/no_response/models/shared/incompletesource.rb +53 -0
  121. data/lib/no_response/models/shared/incompletesource.rbi +20 -0
  122. data/lib/no_response/models/shared/ipsummary.rb +61 -0
  123. data/lib/no_response/models/shared/ipsummary.rbi +26 -0
  124. data/lib/no_response/models/shared/ipsummarytype.rb +24 -0
  125. data/lib/no_response/models/shared/ipsummarytype.rbi +9 -0
  126. data/lib/no_response/models/shared/keyrotation.rb +79 -0
  127. data/lib/no_response/models/shared/keyrotation.rbi +44 -0
  128. data/lib/no_response/models/shared/keyrotationrequest.rb +33 -0
  129. data/lib/no_response/models/shared/keyrotationrequest.rbi +14 -0
  130. data/lib/no_response/models/shared/lane.rb +21 -0
  131. data/lib/no_response/models/shared/lane.rbi +9 -0
  132. data/lib/no_response/models/shared/linetype.rb +22 -0
  133. data/lib/no_response/models/shared/linetype.rbi +9 -0
  134. data/lib/no_response/models/shared/location.rb +23 -0
  135. data/lib/no_response/models/shared/location.rbi +9 -0
  136. data/lib/no_response/models/shared/location_union.rb +23 -0
  137. data/lib/no_response/models/shared/location_union.rbi +9 -0
  138. data/lib/no_response/models/shared/name_candidate.rb +23 -0
  139. data/lib/no_response/models/shared/name_candidate.rbi +9 -0
  140. data/lib/no_response/models/shared/name_candidate_union.rb +23 -0
  141. data/lib/no_response/models/shared/name_candidate_union.rbi +9 -0
  142. data/lib/no_response/models/shared/notfounderrorcode.rb +18 -0
  143. data/lib/no_response/models/shared/notfounderrorcode.rbi +9 -0
  144. data/lib/no_response/models/shared/outcome.rb +23 -0
  145. data/lib/no_response/models/shared/outcome.rbi +9 -0
  146. data/lib/no_response/models/shared/permissiondeniederrorcode.rb +18 -0
  147. data/lib/no_response/models/shared/permissiondeniederrorcode.rbi +9 -0
  148. data/lib/no_response/models/shared/phoneenrichment.rb +32 -0
  149. data/lib/no_response/models/shared/phoneenrichment.rbi +14 -0
  150. data/lib/no_response/models/shared/phoneenrichmentfields.rb +451 -0
  151. data/lib/no_response/models/shared/phoneenrichmentfields.rbi +212 -0
  152. data/lib/no_response/models/shared/platform.rb +18 -0
  153. data/lib/no_response/models/shared/platform.rbi +9 -0
  154. data/lib/no_response/models/shared/probleminvalidparam.rb +48 -0
  155. data/lib/no_response/models/shared/probleminvalidparam.rbi +26 -0
  156. data/lib/no_response/models/shared/ratelimiterrorcode.rb +18 -0
  157. data/lib/no_response/models/shared/ratelimiterrorcode.rbi +9 -0
  158. data/lib/no_response/models/shared/reasoncode.rb +52 -0
  159. data/lib/no_response/models/shared/reasoncode.rbi +9 -0
  160. data/lib/no_response/models/shared/reasonidentifier.rb +23 -0
  161. data/lib/no_response/models/shared/reasonidentifier.rbi +9 -0
  162. data/lib/no_response/models/shared/recommendation.rb +20 -0
  163. data/lib/no_response/models/shared/recommendation.rbi +9 -0
  164. data/lib/no_response/models/shared/responsemode.rb +16 -0
  165. data/lib/no_response/models/shared/responsemode.rbi +9 -0
  166. data/lib/no_response/models/shared/risk.rb +171 -0
  167. data/lib/no_response/models/shared/risk.rbi +80 -0
  168. data/lib/no_response/models/shared/riskconfidence.rb +20 -0
  169. data/lib/no_response/models/shared/riskconfidence.rbi +9 -0
  170. data/lib/no_response/models/shared/riskcoverage.rb +49 -0
  171. data/lib/no_response/models/shared/riskcoverage.rbi +26 -0
  172. data/lib/no_response/models/shared/riskdetails.rb +55 -0
  173. data/lib/no_response/models/shared/riskdetails.rbi +26 -0
  174. data/lib/no_response/models/shared/riskdetailsbreachname.rb +40 -0
  175. data/lib/no_response/models/shared/riskdetailsbreachname.rbi +20 -0
  176. data/lib/no_response/models/shared/riskdetailsphonename.rb +40 -0
  177. data/lib/no_response/models/shared/riskdetailsphonename.rbi +20 -0
  178. data/lib/no_response/models/shared/riskreason.rb +67 -0
  179. data/lib/no_response/models/shared/riskreason.rbi +26 -0
  180. data/lib/no_response/models/shared/risksummary.rb +73 -0
  181. data/lib/no_response/models/shared/risksummary.rbi +38 -0
  182. data/lib/no_response/models/shared/risksummaryemail.rb +55 -0
  183. data/lib/no_response/models/shared/risksummaryemail.rbi +26 -0
  184. data/lib/no_response/models/shared/risksummaryphone.rb +69 -0
  185. data/lib/no_response/models/shared/risksummaryphone.rbi +32 -0
  186. data/lib/no_response/models/shared/risksummaryusername.rb +41 -0
  187. data/lib/no_response/models/shared/risksummaryusername.rbi +20 -0
  188. data/lib/no_response/models/shared/scope.rb +21 -0
  189. data/lib/no_response/models/shared/scope.rbi +9 -0
  190. data/lib/no_response/models/shared/security.rb +32 -0
  191. data/lib/no_response/models/shared/security.rbi +14 -0
  192. data/lib/no_response/models/shared/signal.rb +149 -0
  193. data/lib/no_response/models/shared/signal.rbi +68 -0
  194. data/lib/no_response/models/shared/signaloutcome.rb +22 -0
  195. data/lib/no_response/models/shared/signaloutcome.rbi +9 -0
  196. data/lib/no_response/models/shared/social_profile.rb +23 -0
  197. data/lib/no_response/models/shared/social_profile.rbi +9 -0
  198. data/lib/no_response/models/shared/social_profile_union.rb +23 -0
  199. data/lib/no_response/models/shared/social_profile_union.rbi +9 -0
  200. data/lib/no_response/models/shared/status.rb +20 -0
  201. data/lib/no_response/models/shared/status.rbi +9 -0
  202. data/lib/no_response/models/shared/timezone.rb +23 -0
  203. data/lib/no_response/models/shared/timezone.rbi +9 -0
  204. data/lib/no_response/models/shared/timezone_union.rb +23 -0
  205. data/lib/no_response/models/shared/timezone_union.rbi +9 -0
  206. data/lib/no_response/models/shared/transport.rb +17 -0
  207. data/lib/no_response/models/shared/transport.rbi +9 -0
  208. data/lib/no_response/models/shared/website.rb +23 -0
  209. data/lib/no_response/models/shared/website.rbi +9 -0
  210. data/lib/no_response/models/shared/website_union.rb +23 -0
  211. data/lib/no_response/models/shared/website_union.rbi +9 -0
  212. data/lib/no_response/models/shared.rb +92 -0
  213. data/lib/no_response/noresponseclient.rb +110 -0
  214. data/lib/no_response/sdk_hooks/hooks.rb +97 -0
  215. data/lib/no_response/sdk_hooks/idempotency_key_hook.rb +25 -0
  216. data/lib/no_response/sdk_hooks/registration.rb +43 -0
  217. data/lib/no_response/sdk_hooks/types.rb +178 -0
  218. data/lib/no_response/sdkconfiguration.rb +107 -0
  219. data/lib/no_response/sdkconfiguration.rbi +83 -0
  220. data/lib/no_response/utils/forms.rb +230 -0
  221. data/lib/no_response/utils/headers.rb +80 -0
  222. data/lib/no_response/utils/query_params.rb +165 -0
  223. data/lib/no_response/utils/request_bodies.rb +77 -0
  224. data/lib/no_response/utils/retries.rb +137 -0
  225. data/lib/no_response/utils/security.rb +156 -0
  226. data/lib/no_response/utils/url.rb +122 -0
  227. data/lib/no_response/utils/utils.rb +243 -0
  228. data/lib/no_response/wait.rb +66 -0
  229. data/lib/no_response/webhooks.rb +177 -0
  230. data/lib/noresponse.rb +25 -0
  231. metadata +501 -0
@@ -0,0 +1,110 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require "faraday"
5
+ require "faraday/multipart"
6
+ require "faraday/retry"
7
+ require "sorbet-runtime"
8
+
9
+ require_relative "sdk_hooks/hooks"
10
+ require_relative "utils/retries"
11
+
12
+ module NoResponse
13
+ extend T::Sig
14
+
15
+ class NoResponseClient
16
+ extend T::Sig
17
+
18
+ attr_accessor :assessments, :keys
19
+
20
+ # Instantiates the SDK, configuring it with the provided parameters.
21
+ #
22
+ # @param client [Faraday::Connection, nil] The faraday HTTP client to use for all operations
23
+ # @param retry_config [::NoResponse::Utils::RetryConfig, nil] The retry configuration to use for all operations
24
+ # @param timeout_ms [Integer, nil] Request timeout in milliseconds for all operations
25
+ # @param security [Models::Shared::Security, nil] The security details required for authentication
26
+ # @param security_source [Proc{|| Models::Shared::Security, nil}] A function that returns security details required for authentication
27
+ # @param server_idx [Integer, nil] The index of the server to use for all operations
28
+ # @param server_url [String, nil] The server URL to use for all operations
29
+ # @param url_params [Hash{Symbol => String}, nil] Parameters to optionally template the server URL with
30
+ sig do
31
+ params(
32
+ client: T.nilable(Faraday::Connection),
33
+ retry_config: T.nilable(::NoResponse::Utils::RetryConfig),
34
+ timeout_ms: T.nilable(Integer),
35
+ api_key: T.nilable(::String),
36
+ security_source: T.nilable(T.proc.returns(Models::Shared::Security)),
37
+ server_idx: T.nilable(Integer),
38
+ server_url: T.nilable(String),
39
+ url_params: T.nilable(T::Hash[Symbol, String])
40
+ )
41
+ .void
42
+ end
43
+ def initialize(
44
+ client: nil,
45
+ retry_config: nil,
46
+ timeout_ms: nil,
47
+ api_key: nil,
48
+ security_source: nil,
49
+ server_idx: nil,
50
+ server_url: nil,
51
+ url_params: nil
52
+ )
53
+
54
+ connection_options = {
55
+ request: {
56
+ params_encoder: Faraday::FlatParamsEncoder
57
+ }
58
+ }
59
+ connection_options[:request][:timeout] = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
60
+
61
+ client ||= Faraday.new(**connection_options) do |f|
62
+ f.request(:multipart, {flat_encode: true})
63
+ # f.response :logger, nil, { headers: true, bodies: true, errors: true }
64
+ end
65
+
66
+ if !server_url.nil?
67
+ if !url_params.nil?
68
+ server_url = Utils.template_url(server_url, url_params)
69
+ end
70
+ end
71
+
72
+ server_idx = 0 if server_idx.nil?
73
+ hooks = SDKHooks::Hooks.new
74
+ @sdk_configuration = SDKConfiguration.new(
75
+ client,
76
+ hooks,
77
+ retry_config,
78
+ timeout_ms,
79
+ api_key,
80
+ security_source,
81
+ server_url,
82
+ server_idx
83
+ )
84
+ @sdk_configuration = hooks.sdk_init(config: @sdk_configuration)
85
+ init_sdks
86
+ end
87
+
88
+ sig { void }
89
+ def init_sdks
90
+ @assessments = Assessments.new(@sdk_configuration)
91
+ @keys = Keys.new(@sdk_configuration)
92
+ end
93
+
94
+ sig { params(base_url: String, url_variables: T.nilable(T::Hash[Symbol, T.any(String, T::Enum)])).returns(String) }
95
+ def get_url(base_url:, url_variables: nil)
96
+ sd_base_url, sd_options = @sdk_configuration.get_server_details
97
+
98
+ if base_url.nil?
99
+ base_url = sd_base_url
100
+ end
101
+
102
+ if url_variables.nil?
103
+ url_variables = sd_options
104
+ end
105
+
106
+ return Utils.template_url(base_url, url_variables)
107
+ end
108
+
109
+ end
110
+ end
@@ -0,0 +1,97 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require_relative "./types"
5
+ require_relative "./registration"
6
+
7
+ module NoResponse
8
+ module SDKHooks
9
+ class Hooks
10
+ extend T::Sig
11
+
12
+ sig { void }
13
+ def initialize
14
+ @sdk_init_hooks = T.let([], T::Array[AbstractSDKHook])
15
+ @before_request_hooks = T.let([], T::Array[AbstractSDKHook])
16
+ @after_success_hooks = T.let([], T::Array[AbstractSDKHook])
17
+ @after_error_hooks = T.let([], T::Array[AbstractSDKHook])
18
+ Registration.init_hooks(self)
19
+ end
20
+
21
+ sig { params(hook: AbstractSDKHook).void }
22
+ def register_sdk_init_hook(hook)
23
+ @sdk_init_hooks << hook
24
+ end
25
+
26
+ sig { params(hook: AbstractSDKHook).void }
27
+ def register_before_request_hook(hook)
28
+ @before_request_hooks << hook
29
+ end
30
+
31
+ sig { params(hook: AbstractSDKHook).void }
32
+ def register_after_success_hook(hook)
33
+ @after_success_hooks << hook
34
+ end
35
+
36
+ sig { params(hook: AbstractSDKHook).void }
37
+ def register_after_error_hook(hook)
38
+ @after_error_hooks << hook
39
+ end
40
+
41
+ sig { params(config: SDKConfiguration).returns(SDKConfiguration) }
42
+ def sdk_init(config:)
43
+ @sdk_init_hooks.each do |hook|
44
+ config = hook.sdk_init(config: config)
45
+ end
46
+
47
+ return config
48
+ end
49
+
50
+ sig do
51
+ params(
52
+ hook_ctx: BeforeRequestHookContext,
53
+ request: Faraday::Request
54
+ )
55
+ .returns(Faraday::Request)
56
+ end
57
+ def before_request(hook_ctx:, request:)
58
+ @before_request_hooks.each do |hook|
59
+ request = hook.before_request(hook_ctx: hook_ctx, request: request)
60
+ end
61
+
62
+ request
63
+ end
64
+
65
+ sig do
66
+ params(
67
+ hook_ctx: AfterSuccessHookContext,
68
+ response: Faraday::Response
69
+ )
70
+ .returns(Faraday::Response)
71
+ end
72
+ def after_success(hook_ctx:, response:)
73
+ @after_success_hooks.each do |hook|
74
+ response = hook.after_success(hook_ctx: hook_ctx, response: response)
75
+ end
76
+
77
+ response
78
+ end
79
+
80
+ sig do
81
+ params(
82
+ error: T.nilable(StandardError),
83
+ hook_ctx: AfterErrorHookContext,
84
+ response: T.nilable(Faraday::Response)
85
+ )
86
+ .returns(T.nilable(Faraday::Response))
87
+ end
88
+ def after_error(error:, hook_ctx:, response:)
89
+ @after_error_hooks.each do |hook|
90
+ response = hook.after_error(error: error, hook_ctx: hook_ctx, response: response)
91
+ end
92
+
93
+ response
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,25 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require 'securerandom'
5
+
6
+ module NoResponse
7
+ module SDKHooks
8
+ # Sends a fresh UUID as the Idempotency-Key when the caller gave none. The
9
+ # hook runs once per call, before any retry, so every attempt carries the
10
+ # same key.
11
+ class IdempotencyKeyHook < AbstractSDKHook
12
+ extend T::Sig
13
+
14
+ OPERATIONS = %w[createAssessment recordAssessmentOutcome].freeze
15
+
16
+ sig { override.params(hook_ctx: BeforeRequestHookContext, request: Faraday::Request).returns(Faraday::Request) }
17
+ def before_request(hook_ctx:, request:)
18
+ if OPERATIONS.include?(hook_ctx.operation_id) && !request.headers.key?('Idempotency-Key')
19
+ request.headers['Idempotency-Key'] = SecureRandom.uuid
20
+ end
21
+ request
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,43 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file is only ever generated once on the first generation and then is free to be modified.
6
+ # Any hooks you wish to add should be registered in the init_hooks method.
7
+ #
8
+ # Hooks are registered per SDK instance, and are valid for the lifetime of the SDK instance.
9
+ #
10
+
11
+ require_relative "./types"
12
+ # Hand-written helpers beside the generated client, loaded with the gem.
13
+ require_relative "../webhooks"
14
+ require_relative "../wait"
15
+ require_relative "../late_results"
16
+ require_relative "idempotency_key_hook"
17
+ require_relative "../models/errors/apistatuserror"
18
+ require_relative "../auth"
19
+ require_relative "../issued_credential"
20
+
21
+ module NoResponse
22
+ module SDKHooks
23
+ class Registration
24
+ extend T::Sig
25
+
26
+ sig do
27
+ params(
28
+ hooks: Hooks
29
+ )
30
+ .void
31
+ end
32
+ def self.init_hooks(hooks)
33
+ hooks.register_before_request_hook(IdempotencyKeyHook.new)
34
+ # example_hook = ExampleHook.new
35
+
36
+ # hooks.register_sdk_init_hook example_hook
37
+ # hooks.register_before_request_hook example_hook
38
+ # hooks.register_after_error_hook example_hook
39
+ # hooks.register_after_success_hook example_hook
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,178 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require_relative "../sdkconfiguration"
5
+
6
+ module NoResponse
7
+ module SDKHooks
8
+ class HookContext
9
+ extend T::Sig
10
+
11
+ sig { returns(SDKConfiguration) }
12
+ attr_accessor :config
13
+
14
+ sig { returns(String) }
15
+ attr_accessor :base_url
16
+
17
+ sig { returns(T.nilable(T::Array[String])) }
18
+ attr_accessor :oauth2_scopes
19
+
20
+ sig { returns(String) }
21
+ attr_accessor :operation_id
22
+
23
+ sig { returns(T.nilable(T.proc.returns(T.untyped))) }
24
+ attr_accessor :security_source
25
+
26
+ sig do
27
+ params(
28
+ config: SDKConfiguration,
29
+ base_url: String,
30
+ oauth2_scopes: T.nilable(T::Array[String]),
31
+ operation_id: String,
32
+ security_source: T.nilable(T.proc.returns(T.untyped))
33
+ )
34
+ .void
35
+ end
36
+ def initialize(config:, base_url:, oauth2_scopes:, operation_id:, security_source:)
37
+ @config = T.let(config, SDKConfiguration)
38
+ @base_url = T.let(base_url, String)
39
+ @oauth2_scopes = T.let(oauth2_scopes, T.nilable(T::Array[String]))
40
+ @operation_id = T.let(operation_id, String)
41
+ @security_source = T.let(security_source, T.nilable(T.proc.returns(T.untyped)))
42
+ end
43
+ end
44
+
45
+ class BeforeRequestHookContext < HookContext
46
+ extend T::Sig
47
+
48
+ sig do
49
+ params(
50
+ hook_ctx: HookContext
51
+ )
52
+ .void
53
+ end
54
+ def initialize(hook_ctx:)
55
+ super(
56
+ config: hook_ctx.config,
57
+ base_url: hook_ctx.base_url,
58
+ operation_id: hook_ctx.operation_id,
59
+ oauth2_scopes: hook_ctx.oauth2_scopes,
60
+ security_source: hook_ctx.security_source
61
+ )
62
+ end
63
+ end
64
+
65
+ class AfterSuccessHookContext < HookContext
66
+ extend T::Sig
67
+
68
+ sig do
69
+ params(
70
+ hook_ctx: HookContext
71
+ )
72
+ .void
73
+ end
74
+ def initialize(hook_ctx:)
75
+ super(
76
+ config: hook_ctx.config,
77
+ base_url: hook_ctx.base_url,
78
+ operation_id: hook_ctx.operation_id,
79
+ oauth2_scopes: hook_ctx.oauth2_scopes,
80
+ security_source: hook_ctx.security_source
81
+ )
82
+ end
83
+ end
84
+
85
+ class AfterErrorHookContext < HookContext
86
+ extend T::Sig
87
+
88
+ sig do
89
+ params(
90
+ hook_ctx: HookContext
91
+ )
92
+ .void
93
+ end
94
+ def initialize(hook_ctx:)
95
+ super(
96
+ config: hook_ctx.config,
97
+ base_url: hook_ctx.base_url,
98
+ operation_id: hook_ctx.operation_id,
99
+ oauth2_scopes: hook_ctx.oauth2_scopes,
100
+ security_source: hook_ctx.security_source
101
+ )
102
+ end
103
+ end
104
+
105
+ module AbstractSDKInitHook
106
+ extend T::Sig
107
+ extend T::Helpers
108
+ abstract!
109
+
110
+ sig { overridable.params(config: SDKConfiguration).returns(SDKConfiguration) }
111
+ def sdk_init(config:)
112
+ Kernel.raise NotImplementedError.new
113
+ end
114
+ end
115
+
116
+ module AbstractBeforeRequestHook
117
+ extend T::Sig
118
+ extend T::Helpers
119
+ abstract!
120
+
121
+ sig do
122
+ overridable
123
+ .params(
124
+ hook_ctx: BeforeRequestHookContext,
125
+ request: Faraday::Request
126
+ )
127
+ .returns(Faraday::Request)
128
+ end
129
+ def before_request(hook_ctx:, request:)
130
+ Kernel.raise NotImplementedError.new
131
+ end
132
+ end
133
+
134
+ module AbstractAfterSuccessHook
135
+ extend T::Sig
136
+ extend T::Helpers
137
+ abstract!
138
+
139
+ sig do
140
+ overridable
141
+ .params(
142
+ hook_ctx: AfterSuccessHookContext,
143
+ response: Faraday::Response
144
+ )
145
+ .returns(Faraday::Response)
146
+ end
147
+ def after_success(hook_ctx:, response:)
148
+ Kernel.raise NotImplementedError.new
149
+ end
150
+ end
151
+
152
+ module AbstractAfterErrorHook
153
+ extend T::Sig
154
+ extend T::Helpers
155
+ abstract!
156
+
157
+ sig do
158
+ overridable
159
+ .params(
160
+ error: T.nilable(StandardError),
161
+ hook_ctx: AfterErrorHookContext,
162
+ response: T.nilable(Faraday::Response)
163
+ )
164
+ .returns(T.nilable(Faraday::Response))
165
+ end
166
+ def after_error(error:, hook_ctx:, response:)
167
+ Kernel.raise NotImplementedError.new
168
+ end
169
+ end
170
+
171
+ class AbstractSDKHook
172
+ include AbstractSDKInitHook
173
+ include AbstractBeforeRequestHook
174
+ include AbstractAfterSuccessHook
175
+ include AbstractAfterErrorHook
176
+ end
177
+ end
178
+ end
@@ -0,0 +1,107 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require "faraday"
5
+ require "faraday/multipart"
6
+ require "faraday/retry"
7
+ require "sorbet-runtime"
8
+
9
+ require_relative "sdk_hooks/hooks"
10
+ require_relative "utils/retries"
11
+
12
+ module NoResponse
13
+ extend T::Sig
14
+
15
+ SERVERS = T.let(
16
+ [
17
+ # 1 - Production
18
+ "https://api.noresponse.org"
19
+ ].freeze,
20
+ T::Array[String]
21
+ )
22
+ # Contains the list of servers available to the SDK
23
+
24
+ class SDKConfiguration
25
+ extend T::Sig
26
+
27
+ sig { returns(T.nilable(Faraday::Connection)) }
28
+ attr_accessor :client
29
+
30
+ sig { returns(::NoResponse::SDKHooks::Hooks) }
31
+ attr_accessor :hooks
32
+
33
+ sig { returns(T.nilable(::NoResponse::Utils::RetryConfig)) }
34
+ attr_accessor :retry_config
35
+
36
+ sig { returns(T.nilable(Float)) }
37
+ attr_accessor :timeout
38
+
39
+ sig { returns(T.nilable(T.proc.returns(T.nilable(Models::Shared::Security)))) }
40
+ attr_accessor :security_source
41
+
42
+ sig { returns(T.nilable(String)) }
43
+ attr_accessor :server_url
44
+
45
+ sig { returns(T.nilable(Integer)) }
46
+ attr_accessor :server_idx
47
+
48
+ sig { returns(String) }
49
+ attr_accessor :language
50
+
51
+ sig { returns(String) }
52
+ attr_accessor :openapi_doc_version
53
+
54
+ sig { returns(String) }
55
+ attr_accessor :sdk_version
56
+
57
+ sig { returns(String) }
58
+ attr_accessor :gen_version
59
+
60
+ sig { returns(String) }
61
+ attr_accessor :user_agent
62
+
63
+ sig do
64
+ params(
65
+ client: T.nilable(Faraday::Connection),
66
+ hooks: ::NoResponse::SDKHooks::Hooks,
67
+ retry_config: T.nilable(::NoResponse::Utils::RetryConfig),
68
+ timeout_ms: T.nilable(Integer),
69
+ api_key: T.nilable(::String),
70
+ security_source: T.nilable(T.proc.returns(Models::Shared::Security)),
71
+ server_url: T.nilable(String),
72
+ server_idx: T.nilable(Integer)
73
+ )
74
+ .void
75
+ end
76
+ def initialize(client, hooks, retry_config, timeout_ms, api_key, security_source, server_url, server_idx)
77
+ @client = client
78
+ @hooks = hooks
79
+ @retry_config = retry_config
80
+ @server_url = server_url
81
+ @timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
82
+ @server_idx = server_idx.nil? ? 0 : server_idx
83
+ if @server_idx.negative? || @server_idx >= SERVERS.length
84
+ raise StandardError, "Invalid server index #{server_idx}"
85
+ end
86
+
87
+ if !security_source.nil?
88
+ @security_source = security_source
89
+ elsif !api_key.nil?
90
+ @security_source = -> { Models::Shared::Security.new(api_key: api_key) }
91
+ end
92
+
93
+ @language = "ruby"
94
+ @openapi_doc_version = "1"
95
+ @sdk_version = "2.0.17"
96
+ @gen_version = "internal"
97
+ @user_agent = "noresponse-sdk/ruby 2.0.17 internal 1 noresponse"
98
+ end
99
+
100
+ sig { returns([String, T::Hash[Symbol, String]]) }
101
+ def get_server_details
102
+ return [@server_url.delete_suffix("/"), {}] if !@server_url.nil?
103
+ @server_idx = T.must(@server_idx)
104
+ [T.must(SERVERS[@server_idx]), {}]
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,83 @@
1
+ # typed: true
2
+
3
+ class NoResponse::SDKConfiguration
4
+ extend ::Crystalline::MetadataFields::ClassMethods
5
+
6
+ def client
7
+ end
8
+
9
+ def client=(client)
10
+ end
11
+
12
+ def gen_version
13
+ end
14
+
15
+ def gen_version=(gen_version)
16
+ end
17
+
18
+ def hooks
19
+ end
20
+
21
+ def hooks=(hooks)
22
+ end
23
+
24
+ def language
25
+ end
26
+
27
+ def language=(language)
28
+ end
29
+
30
+ def openapi_doc_version
31
+ end
32
+
33
+ def openapi_doc_version=(openapi_doc_version)
34
+ end
35
+
36
+ def retry_config
37
+ end
38
+
39
+ def retry_config=(retry_config)
40
+ end
41
+
42
+ def sdk_version
43
+ end
44
+
45
+ def sdk_version=(sdk_version)
46
+ end
47
+
48
+ def security_source
49
+ end
50
+
51
+ def security_source=(security_source)
52
+ end
53
+
54
+ def server_idx
55
+ end
56
+
57
+ def server_idx=(server_idx)
58
+ end
59
+
60
+ def server_params
61
+ end
62
+
63
+ def server_params=(server_params)
64
+ end
65
+
66
+ def server_url
67
+ end
68
+
69
+ def server_url=(server_url)
70
+ end
71
+
72
+ def timeout
73
+ end
74
+
75
+ def timeout=(timeout)
76
+ end
77
+
78
+ def user_agent
79
+ end
80
+
81
+ def user_agent=(user_agent)
82
+ end
83
+ end