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,48 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+
8
+ class ProblemInvalidParam
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ field(
13
+ :field,
14
+ ::String,
15
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("field"), required: true}}
16
+ )
17
+
18
+ field(
19
+ :reason,
20
+ ::String,
21
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("reason"), required: true}}
22
+ )
23
+
24
+ field(
25
+ :example,
26
+ Crystalline::Nilable.new(::String),
27
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("example")}}
28
+ )
29
+
30
+ sig { params(field: ::String, reason: ::String, example: T.nilable(::String)).void }
31
+ def initialize(field:, reason:, example: nil)
32
+ @field = field
33
+ @reason = reason
34
+ @example = example
35
+ end
36
+
37
+ sig { params(other: T.untyped).returns(T::Boolean) }
38
+ def ==(other)
39
+ return false unless other.is_a?(self.class)
40
+ return false unless @field == other.field
41
+ return false unless @reason == other.reason
42
+ return false unless @example == other.example
43
+ true
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,26 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::ProblemInvalidParam
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::ProblemInvalidParam
9
+ def field
10
+ end
11
+
12
+ def field=(str_)
13
+ end
14
+
15
+ def reason
16
+ end
17
+
18
+ def reason=(str_)
19
+ end
20
+
21
+ def example
22
+ end
23
+
24
+ def example=(str_)
25
+ end
26
+ end
@@ -0,0 +1,18 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # RateLimitErrorCode - Machine codes an HTTP 429 answer can carry.
8
+ class RateLimitErrorCode
9
+ include ::Crystalline::Enum
10
+ enums do
11
+ RATE_LIMITED = new("rate_limited")
12
+ end
13
+
14
+ open!
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,9 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::RateLimitErrorCode
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::RateLimitErrorCode
9
+ end
@@ -0,0 +1,52 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # ReasonCode - A stable reason code. New codes may appear; ignore any you do not know.
8
+ class ReasonCode
9
+ include ::Crystalline::Enum
10
+ enums do
11
+ NO_DIGITAL_FOOTPRINT = new("no_digital_footprint")
12
+ VOIP_NUMBER = new("voip_number")
13
+ DISPOSABLE_EMAIL = new("disposable_email")
14
+ NEW_EMAIL = new("new_email")
15
+ SPAM_REPORTS = new("spam_reports")
16
+ FRAUD_FLAG = new("fraud_flag")
17
+ IDENTITY_MISMATCH = new("identity_mismatch")
18
+ COUNTRY_MISMATCH = new("country_mismatch")
19
+ PROXY_IP = new("proxy_ip")
20
+ SEEN_BEFORE = new("seen_before")
21
+ SHARED_IP = new("shared_ip")
22
+ MANY_RECENT_SIGNUPS = new("many_recent_signups")
23
+ ESTABLISHED_ACCOUNTS = new("established_accounts")
24
+ AGED_IDENTITY = new("aged_identity")
25
+ BREACH_NAME_MATCH = new("breach_name_match")
26
+ BREACH_COOCCURRENCE = new("breach_cooccurrence")
27
+ BREACH_NAME_MISMATCH = new("breach_name_mismatch")
28
+ BREACH_PHONE_MISMATCH = new("breach_phone_mismatch")
29
+ RECENT_PASSWORD_EXPOSURE = new("recent_password_exposure")
30
+ CREDENTIAL_LIST_EXPOSURE = new("credential_list_exposure")
31
+ ABUSE_ECOSYSTEM_MEMBER = new("abuse_ecosystem_member")
32
+ NO_BREACH_HISTORY = new("no_breach_history")
33
+ AUTOMATION_FAST_SUBMIT = new("automation_fast_submit")
34
+ CLIENT_CLOCK_SKEW = new("client_clock_skew")
35
+ BOT_OR_AUTOMATION = new("bot_or_automation")
36
+ AUTH_EMAIL_VERIFIED = new("auth_email_verified")
37
+ AUTH_PHONE_VERIFIED = new("auth_phone_verified")
38
+ AUTH_MFA_RECENT = new("auth_mfa_recent")
39
+ AUTH_NEW_SESSION = new("auth_new_session")
40
+ AUTH_NEW_ACCOUNT = new("auth_new_account")
41
+ AUTH_IMPERSONATED = new("auth_impersonated")
42
+ CONTEXT_TIMEZONE_MISMATCH = new("context_timezone_mismatch")
43
+ CONTEXT_LOCALE_MISMATCH = new("context_locale_mismatch")
44
+ CONTEXT_LINE_COUNTRY_MISMATCH = new("context_line_country_mismatch")
45
+ PRIOR_ABUSE_LINK = new("prior_abuse_link")
46
+ end
47
+
48
+ open!
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,9 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::ReasonCode
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::ReasonCode
9
+ end
@@ -0,0 +1,23 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # ReasonIdentifier - The submitted identifier or client context field a reason concerns; absent when it concerns the whole assessment. Client context is a claimed hint, not a device fingerprint.
8
+ class ReasonIdentifier
9
+ include ::Crystalline::Enum
10
+ enums do
11
+ EMAIL = new("email")
12
+ USERNAME = new("username")
13
+ PHONE = new("phone")
14
+ NAME = new("name")
15
+ IP = new("ip")
16
+ CONTEXT = new("context")
17
+ end
18
+
19
+ open!
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,9 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::ReasonIdentifier
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::ReasonIdentifier
9
+ end
@@ -0,0 +1,20 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # Recommendation - The recommended action: allow, step_up or review. Your application applies it.
8
+ class Recommendation
9
+ include ::Crystalline::Enum
10
+ enums do
11
+ ALLOW = new("allow")
12
+ STEP_UP = new("step_up")
13
+ REVIEW = new("review")
14
+ end
15
+
16
+ open!
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,9 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::Recommendation
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::Recommendation
9
+ end
@@ -0,0 +1,16 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # ResponseMode - standard returns the consolidated risk response; detailed adds merged provider-neutral facts when the key has detailed scope. There is no raw mode.
8
+ class ResponseMode < T::Enum
9
+ enums do
10
+ STANDARD = new("standard")
11
+ DETAILED = new("detailed")
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,9 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::ResponseMode
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::ResponseMode
9
+ end
@@ -0,0 +1,171 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # The one risk decision for this event. score is 0 (safe) to 100 (risky): the sum of the weights of the reasons that fired, clamped to 0 to 100, from hand-set versioned weights. Every answer with a recommendation carries it, and the top-level recommendation equals risk.recommendation. It names no source or provider.
8
+ class Risk
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ field(
13
+ :score,
14
+ ::Integer,
15
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("score"), required: true}}
16
+ )
17
+ # low 0-29, medium 30-59, high 60-84, critical 85-100.
18
+ field(
19
+ :band,
20
+ Models::Shared::Band,
21
+ {
22
+ 'format_json': {
23
+ 'letter_case': ::NoResponse::Utils.field_name("band"),
24
+ required: true,
25
+ 'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::Band, false)
26
+ }
27
+ }
28
+ )
29
+ # The recommended action: allow, step_up or review. Your application applies it.
30
+ field(
31
+ :recommendation,
32
+ Models::Shared::Recommendation,
33
+ {
34
+ 'format_json': {
35
+ 'letter_case': ::NoResponse::Utils.field_name("recommendation"),
36
+ required: true,
37
+ 'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::Recommendation, false)
38
+ }
39
+ }
40
+ )
41
+ # How much of the planned evidence answered; it says nothing about risk.
42
+ field(
43
+ :confidence,
44
+ Models::Shared::RiskConfidence,
45
+ {
46
+ 'format_json': {
47
+ 'letter_case': ::NoResponse::Utils.field_name("confidence"),
48
+ required: true,
49
+ 'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::RiskConfidence, false)
50
+ }
51
+ }
52
+ )
53
+ # Version of the hand-authored heuristic weights that produced the recommendation, for example 'risk-2026-10.7'. A tenant threshold override adds a +t<N> suffix, e.g. 'risk-2026-10.7+t3'.
54
+ field(
55
+ :policy_version,
56
+ ::String,
57
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("policy_version"), required: true}}
58
+ )
59
+ # Every reason that fired, highest weight first. The weights sum to score before clamping.
60
+ field(
61
+ :reasons,
62
+ Crystalline::Array.new(Models::Shared::RiskReason),
63
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("reasons"), required: true}}
64
+ )
65
+ # Sources counted by state, not named.
66
+ field(
67
+ :coverage,
68
+ Models::Shared::RiskCoverage,
69
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("coverage"), required: true}}
70
+ )
71
+ # true when the tenant's block threshold is set and score reached it. A provider hook can deny the signup on it; the provider decides and enforces. It does not change recommendation. It is false while blocking is off, the default, and a body from before the flag existed omits it: read absent as false.
72
+ field(
73
+ :block,
74
+ Crystalline::Nilable.new(Crystalline::Boolean.new),
75
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("block")}}
76
+ )
77
+ # The block threshold this answer used: block is true exactly when score is at least this value. Absent while blocking is off. NoResponse sets it per tenant on request, at or above the review threshold.
78
+ field(
79
+ :block_threshold,
80
+ Crystalline::Nilable.new(::Integer),
81
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("block_threshold")}}
82
+ )
83
+ # Labels the v0 policy as hand-authored and not statistically validated.
84
+ field(
85
+ :policy_basis,
86
+ ::String,
87
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("policy_basis"), required: true}}
88
+ )
89
+ # A few typed facts per identifier. Every fact is optional: absent means the evidence did not answer and makes no claim, while false or 0 is a definite answer. Lanes that do not exist yet leave their members absent.
90
+ field(
91
+ :summary,
92
+ Crystalline::Nilable.new(Models::Shared::RiskSummary),
93
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("summary")}}
94
+ )
95
+ # Detailed view only (response_mode=detailed, which needs the detailed scope); a standard answer leaves it out. Merged observations without provider, source, origin, raw breach record, value or score.
96
+ field(
97
+ :details,
98
+ Crystalline::Nilable.new(Models::Shared::RiskDetails),
99
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("details")}}
100
+ )
101
+
102
+ sig {
103
+ params(
104
+ score: ::Integer,
105
+ band: Models::Shared::Band,
106
+ recommendation: Models::Shared::Recommendation,
107
+ confidence: Models::Shared::RiskConfidence,
108
+ policy_version: ::String,
109
+ reasons: T::Array[Models::Shared::RiskReason],
110
+ coverage: Models::Shared::RiskCoverage,
111
+ block: T.nilable(T::Boolean),
112
+ block_threshold: T.nilable(::Integer),
113
+ policy_basis: ::String,
114
+ summary: T.nilable(Models::Shared::RiskSummary),
115
+ details: T.nilable(Models::Shared::RiskDetails)
116
+ )
117
+ .void
118
+ }
119
+ def initialize(
120
+ score:,
121
+ band:,
122
+ recommendation:,
123
+ confidence:,
124
+ policy_version:,
125
+ reasons:,
126
+ coverage:,
127
+ block: nil,
128
+ block_threshold: nil,
129
+ policy_basis: "heuristic_unvalidated",
130
+ summary: nil,
131
+ details: nil
132
+ )
133
+ @score = score
134
+ @band = band
135
+ @recommendation = recommendation
136
+ @confidence = confidence
137
+ @policy_version = policy_version
138
+ @reasons = reasons
139
+ @coverage = coverage
140
+ @block = block
141
+ @block_threshold = block_threshold
142
+ unless policy_basis == "heuristic_unvalidated"
143
+ raise ArgumentError, "Invalid value for policy_basis"
144
+ end
145
+
146
+ @policy_basis = "heuristic_unvalidated"
147
+ @summary = summary
148
+ @details = details
149
+ end
150
+
151
+ sig { params(other: T.untyped).returns(T::Boolean) }
152
+ def ==(other)
153
+ return false unless other.is_a?(self.class)
154
+ return false unless @score == other.score
155
+ return false unless @band == other.band
156
+ return false unless @recommendation == other.recommendation
157
+ return false unless @confidence == other.confidence
158
+ return false unless @policy_version == other.policy_version
159
+ return false unless @reasons == other.reasons
160
+ return false unless @coverage == other.coverage
161
+ return false unless @block == other.block
162
+ return false unless @block_threshold == other.block_threshold
163
+ return false unless @policy_basis == other.policy_basis
164
+ return false unless @summary == other.summary
165
+ return false unless @details == other.details
166
+ true
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end
@@ -0,0 +1,80 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::Risk
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::Risk
9
+ def score
10
+ end
11
+
12
+ def score=(str_)
13
+ end
14
+
15
+ def band
16
+ end
17
+
18
+ def band=(str_)
19
+ end
20
+
21
+ def recommendation
22
+ end
23
+
24
+ def recommendation=(str_)
25
+ end
26
+
27
+ def confidence
28
+ end
29
+
30
+ def confidence=(str_)
31
+ end
32
+
33
+ def policy_version
34
+ end
35
+
36
+ def policy_version=(str_)
37
+ end
38
+
39
+ def reasons
40
+ end
41
+
42
+ def reasons=(str_)
43
+ end
44
+
45
+ def coverage
46
+ end
47
+
48
+ def coverage=(str_)
49
+ end
50
+
51
+ def block
52
+ end
53
+
54
+ def block=(str_)
55
+ end
56
+
57
+ def block_threshold
58
+ end
59
+
60
+ def block_threshold=(str_)
61
+ end
62
+
63
+ def policy_basis
64
+ end
65
+
66
+ def policy_basis=(str_)
67
+ end
68
+
69
+ def summary
70
+ end
71
+
72
+ def summary=(str_)
73
+ end
74
+
75
+ def details
76
+ end
77
+
78
+ def details=(str_)
79
+ end
80
+ end
@@ -0,0 +1,20 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # RiskConfidence - How much of the planned evidence answered; it says nothing about risk.
8
+ class RiskConfidence
9
+ include ::Crystalline::Enum
10
+ enums do
11
+ LOW = new("low")
12
+ MEDIUM = new("medium")
13
+ HIGH = new("high")
14
+ end
15
+
16
+ open!
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,9 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::RiskConfidence
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::RiskConfidence
9
+ end
@@ -0,0 +1,49 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # Sources counted by state, not named.
8
+ class RiskCoverage
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ # Sources that gave a definite answer.
13
+ field(
14
+ :answered,
15
+ ::Integer,
16
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("answered"), required: true}}
17
+ )
18
+ # Sources that could not answer.
19
+ field(
20
+ :failed,
21
+ ::Integer,
22
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("failed"), required: true}}
23
+ )
24
+ # Sources still being asked.
25
+ field(
26
+ :pending,
27
+ ::Integer,
28
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("pending"), required: true}}
29
+ )
30
+
31
+ sig { params(answered: ::Integer, failed: ::Integer, pending: ::Integer).void }
32
+ def initialize(answered:, failed:, pending:)
33
+ @answered = answered
34
+ @failed = failed
35
+ @pending = pending
36
+ end
37
+
38
+ sig { params(other: T.untyped).returns(T::Boolean) }
39
+ def ==(other)
40
+ return false unless other.is_a?(self.class)
41
+ return false unless @answered == other.answered
42
+ return false unless @failed == other.failed
43
+ return false unless @pending == other.pending
44
+ true
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,26 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::RiskCoverage
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::RiskCoverage
9
+ def answered
10
+ end
11
+
12
+ def answered=(str_)
13
+ end
14
+
15
+ def failed
16
+ end
17
+
18
+ def failed=(str_)
19
+ end
20
+
21
+ def pending
22
+ end
23
+
24
+ def pending=(str_)
25
+ end
26
+ end
@@ -0,0 +1,55 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # Detailed view only (response_mode=detailed, which needs the detailed scope); a standard answer leaves it out. Merged observations without provider, source, origin, raw breach record, value or score.
8
+ class RiskDetails
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ field(
13
+ :phone_names,
14
+ Crystalline::Nilable.new(Crystalline::Array.new(Models::Shared::RiskDetailsPhoneName)),
15
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("phone_names")}}
16
+ )
17
+ # The matching breach tables, newest first, at most 50.
18
+ field(
19
+ :breaches,
20
+ Crystalline::Nilable.new(Crystalline::Array.new(Models::Shared::Breach)),
21
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("breaches")}}
22
+ )
23
+ # Names found next to the identifiers in breach records, merged, with the number of distinct tables each was seen in.
24
+ field(
25
+ :breach_names,
26
+ Crystalline::Nilable.new(Crystalline::Array.new(Models::Shared::RiskDetailsBreachName)),
27
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("breach_names")}}
28
+ )
29
+
30
+ sig {
31
+ params(
32
+ phone_names: T.nilable(T::Array[Models::Shared::RiskDetailsPhoneName]),
33
+ breaches: T.nilable(T::Array[Models::Shared::Breach]),
34
+ breach_names: T.nilable(T::Array[Models::Shared::RiskDetailsBreachName])
35
+ )
36
+ .void
37
+ }
38
+ def initialize(phone_names: nil, breaches: nil, breach_names: nil)
39
+ @phone_names = phone_names
40
+ @breaches = breaches
41
+ @breach_names = breach_names
42
+ end
43
+
44
+ sig { params(other: T.untyped).returns(T::Boolean) }
45
+ def ==(other)
46
+ return false unless other.is_a?(self.class)
47
+ return false unless @phone_names == other.phone_names
48
+ return false unless @breaches == other.breaches
49
+ return false unless @breach_names == other.breach_names
50
+ true
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end