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,1252 @@
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
+ require "janeway"
9
+
10
+ require_relative "sdk_hooks/hooks"
11
+ require_relative "utils/retries"
12
+
13
+ module NoResponse
14
+ extend T::Sig
15
+
16
+ class Assessments
17
+ extend T::Sig
18
+
19
+ # Signup and gateway assessments.
20
+
21
+ sig { params(sdk_config: SDKConfiguration).void }
22
+ def initialize(sdk_config)
23
+ @sdk_configuration = sdk_config
24
+ end
25
+
26
+ sig { params(base_url: String, url_variables: T.nilable(T::Hash[Symbol, T.any(String, T::Enum)])).returns(String) }
27
+ def get_url(base_url:, url_variables: nil)
28
+ sd_base_url, sd_options = @sdk_configuration.get_server_details
29
+
30
+ if base_url.nil?
31
+ base_url = sd_base_url
32
+ end
33
+
34
+ if url_variables.nil?
35
+ url_variables = sd_options
36
+ end
37
+
38
+ return Utils.template_url(base_url, url_variables)
39
+ end
40
+
41
+ sig {
42
+ params(
43
+ body: Models::Shared::AssessmentRequest,
44
+ idempotency_key: T.nilable(::String),
45
+ retries: T.nilable(Utils::RetryConfig),
46
+ timeout_ms: T.nilable(Integer),
47
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
48
+ )
49
+ .returns(Models::Operations::CreateAssessmentResponse)
50
+ }
51
+ def create(body:, idempotency_key: nil, retries: nil, timeout_ms: nil, http_headers: nil)
52
+ # create - Assess identifiers for a signup or gateway decision.
53
+ # Returns within the deadline (500 ms at most) with a complete, partial or pending assessment: 200 carries complete or partial, 202 carries pending with Location and Retry-After. A pending answer has no recommendation; apply your own fallback for pending, 429, 503 or a timeout. risk.block says when your block threshold was reached. Requires the assess scope. Idempotency-Key is optional in the SDK and is bound to the body for 24 hours: the same key with the same body replays the latest assessment with Idempotent-Replayed: true and starts no new work; the same key with a different body answers 409 idempotency_key_reused. response_mode defaults to standard; detailed needs the detailed scope.
54
+ request = Models::Operations::CreateAssessmentRequest.new(
55
+ body: body,
56
+ idempotency_key: idempotency_key
57
+ )
58
+ url, params = @sdk_configuration.get_server_details
59
+ base_url = Utils.template_url(url, params)
60
+ url = "#{base_url}/v1/assessments"
61
+ headers = Utils.get_headers(request)
62
+ headers = T.cast(headers, T::Hash[String, String])
63
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :body, :json)
64
+ headers["content-type"] = req_content_type
65
+ raise StandardError, "request body is required" if data.nil? && form.nil?
66
+
67
+ if form && !form.empty?
68
+ body = Utils.encode_form(form)
69
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
70
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
71
+ else
72
+ body = data
73
+ end
74
+
75
+ headers["Accept"] = "application/json"
76
+ headers["user-agent"] = @sdk_configuration.user_agent
77
+ retries ||= @sdk_configuration.retry_config
78
+ retries ||= Utils::RetryConfig.new(
79
+ backoff: Utils::BackoffStrategy.new(
80
+ exponent: 2.0,
81
+ initial_interval: 500,
82
+ max_elapsed_time: 30_000,
83
+ max_interval: 8000
84
+ ),
85
+ retry_connection_errors: true,
86
+ strategy: "backoff"
87
+ )
88
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
89
+ retry_options[:retry_statuses] = [408, 429, 500, 501, 502, 503, 504, 505]
90
+
91
+ security = @sdk_configuration.security_source&.call
92
+
93
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
94
+ timeout ||= @sdk_configuration.timeout
95
+
96
+ connection = @sdk_configuration.client.dup
97
+ connection.use(Utils::RetryMiddleware, retry_options)
98
+
99
+ hook_ctx = SDKHooks::HookContext.new(
100
+ config: @sdk_configuration,
101
+ base_url: base_url,
102
+ oauth2_scopes: nil,
103
+ operation_id: "createAssessment",
104
+ security_source: @sdk_configuration.security_source
105
+ )
106
+
107
+ error = T.let(nil, T.nilable(StandardError))
108
+ http_response = T.let(nil, T.nilable(Faraday::Response))
109
+
110
+ begin
111
+ http_response = T.must(connection).post(url) do |req|
112
+ req.body = body
113
+ req.headers.merge!(headers)
114
+ req.options.timeout = timeout unless timeout.nil?
115
+ Utils.configure_request_security(req, security)
116
+ http_headers&.each do |key, value|
117
+ req.headers[key.to_s] = value
118
+ end
119
+
120
+ @sdk_configuration.hooks.before_request(
121
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
122
+ hook_ctx: hook_ctx
123
+ ),
124
+ request: req
125
+ )
126
+ end
127
+
128
+ rescue StandardError => e
129
+ error = e
130
+ ensure
131
+ if http_response.nil? || Utils.error_status?(http_response.status)
132
+ http_response = @sdk_configuration.hooks.after_error(
133
+ error: error,
134
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
135
+ hook_ctx: hook_ctx
136
+ ),
137
+ response: http_response
138
+ )
139
+ else
140
+ http_response = @sdk_configuration.hooks.after_success(
141
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
142
+ hook_ctx: hook_ctx
143
+ ),
144
+ response: http_response
145
+ )
146
+ end
147
+
148
+ if http_response.nil?
149
+ raise error if !error.nil?
150
+ raise "no response"
151
+ end
152
+ end
153
+
154
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
155
+ if Utils.match_status_code(http_response.status, ["200", "202"])
156
+ if Utils.match_content_type(content_type, "application/json")
157
+ @sdk_configuration.hooks.after_success(
158
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
159
+ hook_ctx: hook_ctx
160
+ ),
161
+ response: http_response
162
+ )
163
+ response_data = http_response.env.response_body
164
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Shared::Assessment)
165
+ result = obj
166
+ response = Models::Operations::CreateAssessmentResponse.new(
167
+ result: result,
168
+ headers: http_response.headers
169
+ )
170
+
171
+ return response
172
+ else
173
+ raise(
174
+ ::NoResponse::Models::Errors::APIStatusError.new(
175
+ status_code: http_response.status,
176
+ body: http_response.env.response_body,
177
+ raw_response: http_response
178
+ ),
179
+ "Unknown content type received"
180
+ )
181
+ end
182
+ elsif Utils.match_status_code(http_response.status, ["400"])
183
+ if Utils.match_content_type(content_type, "application/problem+json")
184
+ @sdk_configuration.hooks.after_success(
185
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
186
+ hook_ctx: hook_ctx
187
+ ),
188
+ response: http_response
189
+ )
190
+ response_data = http_response.env.response_body
191
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::BadRequestError)
192
+ raise obj
193
+ else
194
+ raise(
195
+ ::NoResponse::Models::Errors::APIStatusError.new(
196
+ status_code: http_response.status,
197
+ body: http_response.env.response_body,
198
+ raw_response: http_response
199
+ ),
200
+ "Unknown content type received"
201
+ )
202
+ end
203
+ elsif Utils.match_status_code(http_response.status, ["401"])
204
+ if Utils.match_content_type(content_type, "application/problem+json")
205
+ @sdk_configuration.hooks.after_success(
206
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
207
+ hook_ctx: hook_ctx
208
+ ),
209
+ response: http_response
210
+ )
211
+ response_data = http_response.env.response_body
212
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::AuthenticationError)
213
+ raise obj
214
+ else
215
+ raise(
216
+ ::NoResponse::Models::Errors::APIStatusError.new(
217
+ status_code: http_response.status,
218
+ body: http_response.env.response_body,
219
+ raw_response: http_response
220
+ ),
221
+ "Unknown content type received"
222
+ )
223
+ end
224
+ elsif Utils.match_status_code(http_response.status, ["403"])
225
+ if Utils.match_content_type(content_type, "application/problem+json")
226
+ @sdk_configuration.hooks.after_success(
227
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
228
+ hook_ctx: hook_ctx
229
+ ),
230
+ response: http_response
231
+ )
232
+ response_data = http_response.env.response_body
233
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::PermissionDeniedError)
234
+ raise obj
235
+ else
236
+ raise(
237
+ ::NoResponse::Models::Errors::APIStatusError.new(
238
+ status_code: http_response.status,
239
+ body: http_response.env.response_body,
240
+ raw_response: http_response
241
+ ),
242
+ "Unknown content type received"
243
+ )
244
+ end
245
+ elsif Utils.match_status_code(http_response.status, ["404"])
246
+ if Utils.match_content_type(content_type, "application/problem+json")
247
+ @sdk_configuration.hooks.after_success(
248
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
249
+ hook_ctx: hook_ctx
250
+ ),
251
+ response: http_response
252
+ )
253
+ response_data = http_response.env.response_body
254
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::NotFoundError)
255
+ raise obj
256
+ else
257
+ raise(
258
+ ::NoResponse::Models::Errors::APIStatusError.new(
259
+ status_code: http_response.status,
260
+ body: http_response.env.response_body,
261
+ raw_response: http_response
262
+ ),
263
+ "Unknown content type received"
264
+ )
265
+ end
266
+ elsif Utils.match_status_code(http_response.status, ["409"])
267
+ if Utils.match_content_type(content_type, "application/problem+json")
268
+ @sdk_configuration.hooks.after_success(
269
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
270
+ hook_ctx: hook_ctx
271
+ ),
272
+ response: http_response
273
+ )
274
+ response_data = http_response.env.response_body
275
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::ConflictError)
276
+ raise obj
277
+ else
278
+ raise(
279
+ ::NoResponse::Models::Errors::APIStatusError.new(
280
+ status_code: http_response.status,
281
+ body: http_response.env.response_body,
282
+ raw_response: http_response
283
+ ),
284
+ "Unknown content type received"
285
+ )
286
+ end
287
+ elsif Utils.match_status_code(http_response.status, ["429"])
288
+ if Utils.match_content_type(content_type, "application/problem+json")
289
+ @sdk_configuration.hooks.after_success(
290
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
291
+ hook_ctx: hook_ctx
292
+ ),
293
+ response: http_response
294
+ )
295
+ response_data = http_response.env.response_body
296
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::RateLimitError)
297
+ raise obj
298
+ else
299
+ raise(
300
+ ::NoResponse::Models::Errors::APIStatusError.new(
301
+ status_code: http_response.status,
302
+ body: http_response.env.response_body,
303
+ raw_response: http_response
304
+ ),
305
+ "Unknown content type received"
306
+ )
307
+ end
308
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
309
+ raise(
310
+ ::NoResponse::Models::Errors::APIStatusError.new(
311
+ status_code: http_response.status,
312
+ body: http_response.env.response_body,
313
+ raw_response: http_response
314
+ ),
315
+ "API error occurred"
316
+ )
317
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
318
+ raise(
319
+ ::NoResponse::Models::Errors::APIStatusError.new(
320
+ status_code: http_response.status,
321
+ body: http_response.env.response_body,
322
+ raw_response: http_response
323
+ ),
324
+ "API error occurred"
325
+ )
326
+ else
327
+ raise(
328
+ ::NoResponse::Models::Errors::APIStatusError.new(
329
+ status_code: http_response.status,
330
+ body: http_response.env.response_body,
331
+ raw_response: http_response
332
+ ),
333
+ "Unknown status code received"
334
+ )
335
+
336
+ end
337
+ end
338
+
339
+ sig {
340
+ params(
341
+ assessment_id: ::String,
342
+ response_mode: T.nilable(Models::Shared::ResponseMode),
343
+ retries: T.nilable(Utils::RetryConfig),
344
+ timeout_ms: T.nilable(Integer),
345
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
346
+ )
347
+ .returns(Models::Operations::GetAssessmentResponse)
348
+ }
349
+ def get(assessment_id:, response_mode: nil, retries: nil, timeout_ms: nil, http_headers: nil)
350
+ # get - Poll the authoritative assessment of one assessment.
351
+ # Returns the highest assessment_version. Requires the assess or history scope. While status is pending, or partial with a source still running, the response carries Retry-After; poll no faster than it says. Another tenant's assessment, an unknown or expired assessment and a malformed assessment_id all answer 404 not_found. response_mode=detailed needs the detailed scope.
352
+ request = Models::Operations::GetAssessmentRequest.new(
353
+ assessment_id: assessment_id,
354
+ response_mode: response_mode
355
+ )
356
+ url, params = @sdk_configuration.get_server_details
357
+ base_url = Utils.template_url(url, params)
358
+ url = Utils.generate_url(
359
+ Models::Operations::GetAssessmentRequest,
360
+ base_url,
361
+ "/v1/assessments/{assessment_id}",
362
+ request
363
+ )
364
+ headers = {}
365
+ headers = T.cast(headers, T::Hash[String, String])
366
+ query_params = Utils.get_query_params(Models::Operations::GetAssessmentRequest, request, nil)
367
+ headers["Accept"] = "application/json"
368
+ headers["user-agent"] = @sdk_configuration.user_agent
369
+ retries ||= @sdk_configuration.retry_config
370
+ retries ||= Utils::RetryConfig.new(
371
+ backoff: Utils::BackoffStrategy.new(
372
+ exponent: 2.0,
373
+ initial_interval: 500,
374
+ max_elapsed_time: 30_000,
375
+ max_interval: 8000
376
+ ),
377
+ retry_connection_errors: true,
378
+ strategy: "backoff"
379
+ )
380
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
381
+ retry_options[:retry_statuses] = [408, 429, 500, 501, 502, 503, 504, 505]
382
+
383
+ security = @sdk_configuration.security_source&.call
384
+
385
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
386
+ timeout ||= @sdk_configuration.timeout
387
+
388
+ connection = @sdk_configuration.client.dup
389
+ connection.use(Utils::RetryMiddleware, retry_options)
390
+
391
+ hook_ctx = SDKHooks::HookContext.new(
392
+ config: @sdk_configuration,
393
+ base_url: base_url,
394
+ oauth2_scopes: nil,
395
+ operation_id: "getAssessment",
396
+ security_source: @sdk_configuration.security_source
397
+ )
398
+
399
+ error = T.let(nil, T.nilable(StandardError))
400
+ http_response = T.let(nil, T.nilable(Faraday::Response))
401
+
402
+ begin
403
+ http_response = T.must(connection).get(url) do |req|
404
+ req.headers.merge!(headers)
405
+ req.options.timeout = timeout unless timeout.nil?
406
+ req.params = query_params
407
+ Utils.configure_request_security(req, security)
408
+ http_headers&.each do |key, value|
409
+ req.headers[key.to_s] = value
410
+ end
411
+
412
+ @sdk_configuration.hooks.before_request(
413
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
414
+ hook_ctx: hook_ctx
415
+ ),
416
+ request: req
417
+ )
418
+ end
419
+
420
+ rescue StandardError => e
421
+ error = e
422
+ ensure
423
+ if http_response.nil? || Utils.error_status?(http_response.status)
424
+ http_response = @sdk_configuration.hooks.after_error(
425
+ error: error,
426
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
427
+ hook_ctx: hook_ctx
428
+ ),
429
+ response: http_response
430
+ )
431
+ else
432
+ http_response = @sdk_configuration.hooks.after_success(
433
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
434
+ hook_ctx: hook_ctx
435
+ ),
436
+ response: http_response
437
+ )
438
+ end
439
+
440
+ if http_response.nil?
441
+ raise error if !error.nil?
442
+ raise "no response"
443
+ end
444
+ end
445
+
446
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
447
+ if Utils.match_status_code(http_response.status, ["200"])
448
+ if Utils.match_content_type(content_type, "application/json")
449
+ @sdk_configuration.hooks.after_success(
450
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
451
+ hook_ctx: hook_ctx
452
+ ),
453
+ response: http_response
454
+ )
455
+ response_data = http_response.env.response_body
456
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Shared::Assessment)
457
+ result = obj
458
+ response = Models::Operations::GetAssessmentResponse.new(
459
+ result: result,
460
+ headers: http_response.headers
461
+ )
462
+
463
+ return response
464
+ else
465
+ raise(
466
+ ::NoResponse::Models::Errors::APIStatusError.new(
467
+ status_code: http_response.status,
468
+ body: http_response.env.response_body,
469
+ raw_response: http_response
470
+ ),
471
+ "Unknown content type received"
472
+ )
473
+ end
474
+ elsif Utils.match_status_code(http_response.status, ["400"])
475
+ if Utils.match_content_type(content_type, "application/problem+json")
476
+ @sdk_configuration.hooks.after_success(
477
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
478
+ hook_ctx: hook_ctx
479
+ ),
480
+ response: http_response
481
+ )
482
+ response_data = http_response.env.response_body
483
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::BadRequestError)
484
+ raise obj
485
+ else
486
+ raise(
487
+ ::NoResponse::Models::Errors::APIStatusError.new(
488
+ status_code: http_response.status,
489
+ body: http_response.env.response_body,
490
+ raw_response: http_response
491
+ ),
492
+ "Unknown content type received"
493
+ )
494
+ end
495
+ elsif Utils.match_status_code(http_response.status, ["401"])
496
+ if Utils.match_content_type(content_type, "application/problem+json")
497
+ @sdk_configuration.hooks.after_success(
498
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
499
+ hook_ctx: hook_ctx
500
+ ),
501
+ response: http_response
502
+ )
503
+ response_data = http_response.env.response_body
504
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::AuthenticationError)
505
+ raise obj
506
+ else
507
+ raise(
508
+ ::NoResponse::Models::Errors::APIStatusError.new(
509
+ status_code: http_response.status,
510
+ body: http_response.env.response_body,
511
+ raw_response: http_response
512
+ ),
513
+ "Unknown content type received"
514
+ )
515
+ end
516
+ elsif Utils.match_status_code(http_response.status, ["403"])
517
+ if Utils.match_content_type(content_type, "application/problem+json")
518
+ @sdk_configuration.hooks.after_success(
519
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
520
+ hook_ctx: hook_ctx
521
+ ),
522
+ response: http_response
523
+ )
524
+ response_data = http_response.env.response_body
525
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::PermissionDeniedError)
526
+ raise obj
527
+ else
528
+ raise(
529
+ ::NoResponse::Models::Errors::APIStatusError.new(
530
+ status_code: http_response.status,
531
+ body: http_response.env.response_body,
532
+ raw_response: http_response
533
+ ),
534
+ "Unknown content type received"
535
+ )
536
+ end
537
+ elsif Utils.match_status_code(http_response.status, ["404"])
538
+ if Utils.match_content_type(content_type, "application/problem+json")
539
+ @sdk_configuration.hooks.after_success(
540
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
541
+ hook_ctx: hook_ctx
542
+ ),
543
+ response: http_response
544
+ )
545
+ response_data = http_response.env.response_body
546
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::NotFoundError)
547
+ raise obj
548
+ else
549
+ raise(
550
+ ::NoResponse::Models::Errors::APIStatusError.new(
551
+ status_code: http_response.status,
552
+ body: http_response.env.response_body,
553
+ raw_response: http_response
554
+ ),
555
+ "Unknown content type received"
556
+ )
557
+ end
558
+ elsif Utils.match_status_code(http_response.status, ["409"])
559
+ if Utils.match_content_type(content_type, "application/problem+json")
560
+ @sdk_configuration.hooks.after_success(
561
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
562
+ hook_ctx: hook_ctx
563
+ ),
564
+ response: http_response
565
+ )
566
+ response_data = http_response.env.response_body
567
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::ConflictError)
568
+ raise obj
569
+ else
570
+ raise(
571
+ ::NoResponse::Models::Errors::APIStatusError.new(
572
+ status_code: http_response.status,
573
+ body: http_response.env.response_body,
574
+ raw_response: http_response
575
+ ),
576
+ "Unknown content type received"
577
+ )
578
+ end
579
+ elsif Utils.match_status_code(http_response.status, ["429"])
580
+ if Utils.match_content_type(content_type, "application/problem+json")
581
+ @sdk_configuration.hooks.after_success(
582
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
583
+ hook_ctx: hook_ctx
584
+ ),
585
+ response: http_response
586
+ )
587
+ response_data = http_response.env.response_body
588
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::RateLimitError)
589
+ raise obj
590
+ else
591
+ raise(
592
+ ::NoResponse::Models::Errors::APIStatusError.new(
593
+ status_code: http_response.status,
594
+ body: http_response.env.response_body,
595
+ raw_response: http_response
596
+ ),
597
+ "Unknown content type received"
598
+ )
599
+ end
600
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
601
+ raise(
602
+ ::NoResponse::Models::Errors::APIStatusError.new(
603
+ status_code: http_response.status,
604
+ body: http_response.env.response_body,
605
+ raw_response: http_response
606
+ ),
607
+ "API error occurred"
608
+ )
609
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
610
+ raise(
611
+ ::NoResponse::Models::Errors::APIStatusError.new(
612
+ status_code: http_response.status,
613
+ body: http_response.env.response_body,
614
+ raw_response: http_response
615
+ ),
616
+ "API error occurred"
617
+ )
618
+ else
619
+ raise(
620
+ ::NoResponse::Models::Errors::APIStatusError.new(
621
+ status_code: http_response.status,
622
+ body: http_response.env.response_body,
623
+ raw_response: http_response
624
+ ),
625
+ "Unknown status code received"
626
+ )
627
+
628
+ end
629
+ end
630
+
631
+ sig {
632
+ params(
633
+ body: Models::Shared::AssessmentOutcomeRequest,
634
+ assessment_id: ::String,
635
+ idempotency_key: T.nilable(::String),
636
+ retries: T.nilable(Utils::RetryConfig),
637
+ timeout_ms: T.nilable(Integer),
638
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
639
+ )
640
+ .returns(Models::Operations::RecordAssessmentOutcomeResponse)
641
+ }
642
+ def record_outcome(body:, assessment_id:, idempotency_key: nil, retries: nil, timeout_ms: nil, http_headers: nil)
643
+ # record_outcome - Report what was later learned about an assessed account.
644
+ # Records what you later learned about an assessed account: confirmed_abuse, account_takeover and chargeback report abuse; false_positive and legitimate withdraw your earlier report; unknown is recorded only. Outcomes are append-only and the latest one wins. Requires the assess scope. Idempotency-Key is optional in the SDK and handled as on POST /v1/assessments: a retry with the same key and body answers the same record with Idempotent-Replayed: true; a different body answers 409. An unknown, expired or foreign assessment answers 404 not_found.
645
+ request = Models::Operations::RecordAssessmentOutcomeRequest.new(
646
+ assessment_id: assessment_id,
647
+ body: body,
648
+ idempotency_key: idempotency_key
649
+ )
650
+ url, params = @sdk_configuration.get_server_details
651
+ base_url = Utils.template_url(url, params)
652
+ url = Utils.generate_url(
653
+ Models::Operations::RecordAssessmentOutcomeRequest,
654
+ base_url,
655
+ "/v1/assessments/{assessment_id}/outcomes",
656
+ request
657
+ )
658
+ headers = Utils.get_headers(request)
659
+ headers = T.cast(headers, T::Hash[String, String])
660
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :body, :json)
661
+ headers["content-type"] = req_content_type
662
+ raise StandardError, "request body is required" if data.nil? && form.nil?
663
+
664
+ if form && !form.empty?
665
+ body = Utils.encode_form(form)
666
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
667
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
668
+ else
669
+ body = data
670
+ end
671
+
672
+ headers["Accept"] = "application/json"
673
+ headers["user-agent"] = @sdk_configuration.user_agent
674
+ retries ||= @sdk_configuration.retry_config
675
+ retries ||= Utils::RetryConfig.new(
676
+ backoff: Utils::BackoffStrategy.new(
677
+ exponent: 2.0,
678
+ initial_interval: 500,
679
+ max_elapsed_time: 30_000,
680
+ max_interval: 8000
681
+ ),
682
+ retry_connection_errors: true,
683
+ strategy: "backoff"
684
+ )
685
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
686
+ retry_options[:retry_statuses] = [408, 429, 500, 501, 502, 503, 504, 505]
687
+
688
+ security = @sdk_configuration.security_source&.call
689
+
690
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
691
+ timeout ||= @sdk_configuration.timeout
692
+
693
+ connection = @sdk_configuration.client.dup
694
+ connection.use(Utils::RetryMiddleware, retry_options)
695
+
696
+ hook_ctx = SDKHooks::HookContext.new(
697
+ config: @sdk_configuration,
698
+ base_url: base_url,
699
+ oauth2_scopes: nil,
700
+ operation_id: "recordAssessmentOutcome",
701
+ security_source: @sdk_configuration.security_source
702
+ )
703
+
704
+ error = T.let(nil, T.nilable(StandardError))
705
+ http_response = T.let(nil, T.nilable(Faraday::Response))
706
+
707
+ begin
708
+ http_response = T.must(connection).post(url) do |req|
709
+ req.body = body
710
+ req.headers.merge!(headers)
711
+ req.options.timeout = timeout unless timeout.nil?
712
+ Utils.configure_request_security(req, security)
713
+ http_headers&.each do |key, value|
714
+ req.headers[key.to_s] = value
715
+ end
716
+
717
+ @sdk_configuration.hooks.before_request(
718
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
719
+ hook_ctx: hook_ctx
720
+ ),
721
+ request: req
722
+ )
723
+ end
724
+
725
+ rescue StandardError => e
726
+ error = e
727
+ ensure
728
+ if http_response.nil? || Utils.error_status?(http_response.status)
729
+ http_response = @sdk_configuration.hooks.after_error(
730
+ error: error,
731
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
732
+ hook_ctx: hook_ctx
733
+ ),
734
+ response: http_response
735
+ )
736
+ else
737
+ http_response = @sdk_configuration.hooks.after_success(
738
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
739
+ hook_ctx: hook_ctx
740
+ ),
741
+ response: http_response
742
+ )
743
+ end
744
+
745
+ if http_response.nil?
746
+ raise error if !error.nil?
747
+ raise "no response"
748
+ end
749
+ end
750
+
751
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
752
+ if Utils.match_status_code(http_response.status, ["202"])
753
+ if Utils.match_content_type(content_type, "application/json")
754
+ @sdk_configuration.hooks.after_success(
755
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
756
+ hook_ctx: hook_ctx
757
+ ),
758
+ response: http_response
759
+ )
760
+ response_data = http_response.env.response_body
761
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Shared::AssessmentOutcome)
762
+ result = obj
763
+ response = Models::Operations::RecordAssessmentOutcomeResponse.new(
764
+ result: result,
765
+ headers: http_response.headers
766
+ )
767
+
768
+ return response
769
+ else
770
+ raise(
771
+ ::NoResponse::Models::Errors::APIStatusError.new(
772
+ status_code: http_response.status,
773
+ body: http_response.env.response_body,
774
+ raw_response: http_response
775
+ ),
776
+ "Unknown content type received"
777
+ )
778
+ end
779
+ elsif Utils.match_status_code(http_response.status, ["400"])
780
+ if Utils.match_content_type(content_type, "application/problem+json")
781
+ @sdk_configuration.hooks.after_success(
782
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
783
+ hook_ctx: hook_ctx
784
+ ),
785
+ response: http_response
786
+ )
787
+ response_data = http_response.env.response_body
788
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::BadRequestError)
789
+ raise obj
790
+ else
791
+ raise(
792
+ ::NoResponse::Models::Errors::APIStatusError.new(
793
+ status_code: http_response.status,
794
+ body: http_response.env.response_body,
795
+ raw_response: http_response
796
+ ),
797
+ "Unknown content type received"
798
+ )
799
+ end
800
+ elsif Utils.match_status_code(http_response.status, ["401"])
801
+ if Utils.match_content_type(content_type, "application/problem+json")
802
+ @sdk_configuration.hooks.after_success(
803
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
804
+ hook_ctx: hook_ctx
805
+ ),
806
+ response: http_response
807
+ )
808
+ response_data = http_response.env.response_body
809
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::AuthenticationError)
810
+ raise obj
811
+ else
812
+ raise(
813
+ ::NoResponse::Models::Errors::APIStatusError.new(
814
+ status_code: http_response.status,
815
+ body: http_response.env.response_body,
816
+ raw_response: http_response
817
+ ),
818
+ "Unknown content type received"
819
+ )
820
+ end
821
+ elsif Utils.match_status_code(http_response.status, ["403"])
822
+ if Utils.match_content_type(content_type, "application/problem+json")
823
+ @sdk_configuration.hooks.after_success(
824
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
825
+ hook_ctx: hook_ctx
826
+ ),
827
+ response: http_response
828
+ )
829
+ response_data = http_response.env.response_body
830
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::PermissionDeniedError)
831
+ raise obj
832
+ else
833
+ raise(
834
+ ::NoResponse::Models::Errors::APIStatusError.new(
835
+ status_code: http_response.status,
836
+ body: http_response.env.response_body,
837
+ raw_response: http_response
838
+ ),
839
+ "Unknown content type received"
840
+ )
841
+ end
842
+ elsif Utils.match_status_code(http_response.status, ["404"])
843
+ if Utils.match_content_type(content_type, "application/problem+json")
844
+ @sdk_configuration.hooks.after_success(
845
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
846
+ hook_ctx: hook_ctx
847
+ ),
848
+ response: http_response
849
+ )
850
+ response_data = http_response.env.response_body
851
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::NotFoundError)
852
+ raise obj
853
+ else
854
+ raise(
855
+ ::NoResponse::Models::Errors::APIStatusError.new(
856
+ status_code: http_response.status,
857
+ body: http_response.env.response_body,
858
+ raw_response: http_response
859
+ ),
860
+ "Unknown content type received"
861
+ )
862
+ end
863
+ elsif Utils.match_status_code(http_response.status, ["409"])
864
+ if Utils.match_content_type(content_type, "application/problem+json")
865
+ @sdk_configuration.hooks.after_success(
866
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
867
+ hook_ctx: hook_ctx
868
+ ),
869
+ response: http_response
870
+ )
871
+ response_data = http_response.env.response_body
872
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::ConflictError)
873
+ raise obj
874
+ else
875
+ raise(
876
+ ::NoResponse::Models::Errors::APIStatusError.new(
877
+ status_code: http_response.status,
878
+ body: http_response.env.response_body,
879
+ raw_response: http_response
880
+ ),
881
+ "Unknown content type received"
882
+ )
883
+ end
884
+ elsif Utils.match_status_code(http_response.status, ["429"])
885
+ if Utils.match_content_type(content_type, "application/problem+json")
886
+ @sdk_configuration.hooks.after_success(
887
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
888
+ hook_ctx: hook_ctx
889
+ ),
890
+ response: http_response
891
+ )
892
+ response_data = http_response.env.response_body
893
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::RateLimitError)
894
+ raise obj
895
+ else
896
+ raise(
897
+ ::NoResponse::Models::Errors::APIStatusError.new(
898
+ status_code: http_response.status,
899
+ body: http_response.env.response_body,
900
+ raw_response: http_response
901
+ ),
902
+ "Unknown content type received"
903
+ )
904
+ end
905
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
906
+ raise(
907
+ ::NoResponse::Models::Errors::APIStatusError.new(
908
+ status_code: http_response.status,
909
+ body: http_response.env.response_body,
910
+ raw_response: http_response
911
+ ),
912
+ "API error occurred"
913
+ )
914
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
915
+ raise(
916
+ ::NoResponse::Models::Errors::APIStatusError.new(
917
+ status_code: http_response.status,
918
+ body: http_response.env.response_body,
919
+ raw_response: http_response
920
+ ),
921
+ "API error occurred"
922
+ )
923
+ else
924
+ raise(
925
+ ::NoResponse::Models::Errors::APIStatusError.new(
926
+ status_code: http_response.status,
927
+ body: http_response.env.response_body,
928
+ raw_response: http_response
929
+ ),
930
+ "Unknown status code received"
931
+ )
932
+
933
+ end
934
+ end
935
+
936
+ sig {
937
+ params(
938
+ request: Models::Shared::AssessmentQuery,
939
+ retries: T.nilable(Utils::RetryConfig),
940
+ timeout_ms: T.nilable(Integer),
941
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
942
+ )
943
+ .returns(Models::Operations::QueryAccountAssessmentsResponse)
944
+ }
945
+ def query(request:, retries: nil, timeout_ms: nil, http_headers: nil)
946
+ # query - Page through one account's unexpired assessments.
947
+ # History is a POST with account_id in the body so an account identifier stays out of URLs and access logs. Requires the history scope. Read-only and safe to retry. Newest first, each at its latest assessment_version. An account with no assessments answers 200 with empty items. The cursor is opaque and bound to your tenant and the account; a tampered or expired cursor answers 400 invalid_cursor. response_mode=detailed needs the detailed scope.
948
+ url, params = @sdk_configuration.get_server_details
949
+ base_url = Utils.template_url(url, params)
950
+ url = "#{base_url}/v1/assessments/query"
951
+ headers = {}
952
+ headers = T.cast(headers, T::Hash[String, String])
953
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :request, :json)
954
+ headers["content-type"] = req_content_type
955
+ raise StandardError, "request body is required" if data.nil? && form.nil?
956
+
957
+ if form && !form.empty?
958
+ body = Utils.encode_form(form)
959
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
960
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
961
+ else
962
+ body = data
963
+ end
964
+
965
+ headers["Accept"] = "application/json"
966
+ headers["user-agent"] = @sdk_configuration.user_agent
967
+ retries ||= @sdk_configuration.retry_config
968
+ retries ||= Utils::RetryConfig.new(
969
+ backoff: Utils::BackoffStrategy.new(
970
+ exponent: 2.0,
971
+ initial_interval: 500,
972
+ max_elapsed_time: 30_000,
973
+ max_interval: 8000
974
+ ),
975
+ retry_connection_errors: true,
976
+ strategy: "backoff"
977
+ )
978
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
979
+ retry_options[:retry_statuses] = [408, 429, 500, 501, 502, 503, 504, 505]
980
+
981
+ security = @sdk_configuration.security_source&.call
982
+
983
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
984
+ timeout ||= @sdk_configuration.timeout
985
+
986
+ connection = @sdk_configuration.client.dup
987
+ connection.use(Utils::RetryMiddleware, retry_options)
988
+
989
+ hook_ctx = SDKHooks::HookContext.new(
990
+ config: @sdk_configuration,
991
+ base_url: base_url,
992
+ oauth2_scopes: nil,
993
+ operation_id: "queryAccountAssessments",
994
+ security_source: @sdk_configuration.security_source
995
+ )
996
+
997
+ error = T.let(nil, T.nilable(StandardError))
998
+ http_response = T.let(nil, T.nilable(Faraday::Response))
999
+
1000
+ begin
1001
+ http_response = T.must(connection).post(url) do |req|
1002
+ req.body = body
1003
+ req.headers.merge!(headers)
1004
+ req.options.timeout = timeout unless timeout.nil?
1005
+ Utils.configure_request_security(req, security)
1006
+ http_headers&.each do |key, value|
1007
+ req.headers[key.to_s] = value
1008
+ end
1009
+
1010
+ @sdk_configuration.hooks.before_request(
1011
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
1012
+ hook_ctx: hook_ctx
1013
+ ),
1014
+ request: req
1015
+ )
1016
+ end
1017
+
1018
+ rescue StandardError => e
1019
+ error = e
1020
+ ensure
1021
+ if http_response.nil? || Utils.error_status?(http_response.status)
1022
+ http_response = @sdk_configuration.hooks.after_error(
1023
+ error: error,
1024
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
1025
+ hook_ctx: hook_ctx
1026
+ ),
1027
+ response: http_response
1028
+ )
1029
+ else
1030
+ http_response = @sdk_configuration.hooks.after_success(
1031
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1032
+ hook_ctx: hook_ctx
1033
+ ),
1034
+ response: http_response
1035
+ )
1036
+ end
1037
+
1038
+ if http_response.nil?
1039
+ raise error if !error.nil?
1040
+ raise "no response"
1041
+ end
1042
+ end
1043
+
1044
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
1045
+ if Utils.match_status_code(http_response.status, ["200"])
1046
+ if Utils.match_content_type(content_type, "application/json")
1047
+ @sdk_configuration.hooks.after_success(
1048
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1049
+ hook_ctx: hook_ctx
1050
+ ),
1051
+ response: http_response
1052
+ )
1053
+ response_data = http_response.env.response_body
1054
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Shared::AssessmentList)
1055
+ result = obj
1056
+ response = Models::Operations::QueryAccountAssessmentsResponse.new(
1057
+ result: result,
1058
+ headers: http_response.headers
1059
+ )
1060
+ sdk = self
1061
+
1062
+ response.next_page = proc do
1063
+ next_cursor = Janeway.enum_for("$.next_cursor", JSON.parse(response_data)).search
1064
+ if next_cursor.nil?
1065
+ next nil
1066
+ else
1067
+ next_cursor = next_cursor[0]
1068
+ if next_cursor.nil?
1069
+ next nil
1070
+ end
1071
+ end
1072
+
1073
+ sdk.query(
1074
+ request: Models::Shared::AssessmentQuery.new(
1075
+ account_id: request.account_id,
1076
+ limit: request.limit,
1077
+ cursor: next_cursor,
1078
+ response_mode: request.response_mode
1079
+ ),
1080
+ http_headers: http_headers
1081
+ )
1082
+ end
1083
+
1084
+ return response
1085
+ else
1086
+ raise(
1087
+ ::NoResponse::Models::Errors::APIStatusError.new(
1088
+ status_code: http_response.status,
1089
+ body: http_response.env.response_body,
1090
+ raw_response: http_response
1091
+ ),
1092
+ "Unknown content type received"
1093
+ )
1094
+ end
1095
+ elsif Utils.match_status_code(http_response.status, ["400"])
1096
+ if Utils.match_content_type(content_type, "application/problem+json")
1097
+ @sdk_configuration.hooks.after_success(
1098
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1099
+ hook_ctx: hook_ctx
1100
+ ),
1101
+ response: http_response
1102
+ )
1103
+ response_data = http_response.env.response_body
1104
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::BadRequestError)
1105
+ raise obj
1106
+ else
1107
+ raise(
1108
+ ::NoResponse::Models::Errors::APIStatusError.new(
1109
+ status_code: http_response.status,
1110
+ body: http_response.env.response_body,
1111
+ raw_response: http_response
1112
+ ),
1113
+ "Unknown content type received"
1114
+ )
1115
+ end
1116
+ elsif Utils.match_status_code(http_response.status, ["401"])
1117
+ if Utils.match_content_type(content_type, "application/problem+json")
1118
+ @sdk_configuration.hooks.after_success(
1119
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1120
+ hook_ctx: hook_ctx
1121
+ ),
1122
+ response: http_response
1123
+ )
1124
+ response_data = http_response.env.response_body
1125
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::AuthenticationError)
1126
+ raise obj
1127
+ else
1128
+ raise(
1129
+ ::NoResponse::Models::Errors::APIStatusError.new(
1130
+ status_code: http_response.status,
1131
+ body: http_response.env.response_body,
1132
+ raw_response: http_response
1133
+ ),
1134
+ "Unknown content type received"
1135
+ )
1136
+ end
1137
+ elsif Utils.match_status_code(http_response.status, ["403"])
1138
+ if Utils.match_content_type(content_type, "application/problem+json")
1139
+ @sdk_configuration.hooks.after_success(
1140
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1141
+ hook_ctx: hook_ctx
1142
+ ),
1143
+ response: http_response
1144
+ )
1145
+ response_data = http_response.env.response_body
1146
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::PermissionDeniedError)
1147
+ raise obj
1148
+ else
1149
+ raise(
1150
+ ::NoResponse::Models::Errors::APIStatusError.new(
1151
+ status_code: http_response.status,
1152
+ body: http_response.env.response_body,
1153
+ raw_response: http_response
1154
+ ),
1155
+ "Unknown content type received"
1156
+ )
1157
+ end
1158
+ elsif Utils.match_status_code(http_response.status, ["404"])
1159
+ if Utils.match_content_type(content_type, "application/problem+json")
1160
+ @sdk_configuration.hooks.after_success(
1161
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1162
+ hook_ctx: hook_ctx
1163
+ ),
1164
+ response: http_response
1165
+ )
1166
+ response_data = http_response.env.response_body
1167
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::NotFoundError)
1168
+ raise obj
1169
+ else
1170
+ raise(
1171
+ ::NoResponse::Models::Errors::APIStatusError.new(
1172
+ status_code: http_response.status,
1173
+ body: http_response.env.response_body,
1174
+ raw_response: http_response
1175
+ ),
1176
+ "Unknown content type received"
1177
+ )
1178
+ end
1179
+ elsif Utils.match_status_code(http_response.status, ["409"])
1180
+ if Utils.match_content_type(content_type, "application/problem+json")
1181
+ @sdk_configuration.hooks.after_success(
1182
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1183
+ hook_ctx: hook_ctx
1184
+ ),
1185
+ response: http_response
1186
+ )
1187
+ response_data = http_response.env.response_body
1188
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::ConflictError)
1189
+ raise obj
1190
+ else
1191
+ raise(
1192
+ ::NoResponse::Models::Errors::APIStatusError.new(
1193
+ status_code: http_response.status,
1194
+ body: http_response.env.response_body,
1195
+ raw_response: http_response
1196
+ ),
1197
+ "Unknown content type received"
1198
+ )
1199
+ end
1200
+ elsif Utils.match_status_code(http_response.status, ["429"])
1201
+ if Utils.match_content_type(content_type, "application/problem+json")
1202
+ @sdk_configuration.hooks.after_success(
1203
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1204
+ hook_ctx: hook_ctx
1205
+ ),
1206
+ response: http_response
1207
+ )
1208
+ response_data = http_response.env.response_body
1209
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::RateLimitError)
1210
+ raise obj
1211
+ else
1212
+ raise(
1213
+ ::NoResponse::Models::Errors::APIStatusError.new(
1214
+ status_code: http_response.status,
1215
+ body: http_response.env.response_body,
1216
+ raw_response: http_response
1217
+ ),
1218
+ "Unknown content type received"
1219
+ )
1220
+ end
1221
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
1222
+ raise(
1223
+ ::NoResponse::Models::Errors::APIStatusError.new(
1224
+ status_code: http_response.status,
1225
+ body: http_response.env.response_body,
1226
+ raw_response: http_response
1227
+ ),
1228
+ "API error occurred"
1229
+ )
1230
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
1231
+ raise(
1232
+ ::NoResponse::Models::Errors::APIStatusError.new(
1233
+ status_code: http_response.status,
1234
+ body: http_response.env.response_body,
1235
+ raw_response: http_response
1236
+ ),
1237
+ "API error occurred"
1238
+ )
1239
+ else
1240
+ raise(
1241
+ ::NoResponse::Models::Errors::APIStatusError.new(
1242
+ status_code: http_response.status,
1243
+ body: http_response.env.response_body,
1244
+ raw_response: http_response
1245
+ ),
1246
+ "Unknown status code received"
1247
+ )
1248
+
1249
+ end
1250
+ end
1251
+ end
1252
+ end