noresponse 7.1.7 → 7.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/no_response/models/shared/accountrisk.rb +1 -1
- data/lib/no_response/models/shared/accountriskreason.rb +45 -9
- data/lib/no_response/models/shared/accountriskreason.rbi +14 -2
- data/lib/no_response/models/shared/agreement.rb +20 -0
- data/lib/no_response/models/shared/agreement.rbi +9 -0
- data/lib/no_response/models/shared/assessmentdetail.rb +2 -2
- data/lib/no_response/models/shared/attributeagreement.rb +54 -0
- data/lib/no_response/models/shared/attributeagreement.rbi +26 -0
- data/lib/no_response/models/shared/direction.rb +20 -0
- data/lib/no_response/models/shared/direction.rbi +9 -0
- data/lib/no_response/models/shared/footprint.rb +64 -0
- data/lib/no_response/models/shared/footprint.rbi +32 -0
- data/lib/no_response/models/shared/footprintcoherence.rb +130 -0
- data/lib/no_response/models/shared/footprintcoherence.rbi +68 -0
- data/lib/no_response/models/shared/footprintfamily.rb +22 -0
- data/lib/no_response/models/shared/footprintfamily.rbi +9 -0
- data/lib/no_response/models/shared/footprinttimeline.rb +82 -0
- data/lib/no_response/models/shared/footprinttimeline.rbi +44 -0
- data/lib/no_response/models/shared/identifier.rb +19 -0
- data/lib/no_response/models/shared/identifier.rbi +9 -0
- data/lib/no_response/models/shared/impact.rb +21 -0
- data/lib/no_response/models/shared/impact.rbi +9 -0
- data/lib/no_response/models/shared/risk.rb +3 -3
- data/lib/no_response/models/shared/riskdetails.rb +11 -2
- data/lib/no_response/models/shared/riskdetails.rbi +6 -0
- data/lib/no_response/models/shared/riskdetailsevent.rb +101 -0
- data/lib/no_response/models/shared/riskdetailsevent.rbi +50 -0
- data/lib/no_response/models/shared/riskdetailseventkind.rb +20 -0
- data/lib/no_response/models/shared/riskdetailseventkind.rbi +9 -0
- data/lib/no_response/models/shared/riskreason.rb +45 -9
- data/lib/no_response/models/shared/riskreason.rbi +14 -2
- data/lib/no_response/models/shared/risksummary.rb +11 -2
- data/lib/no_response/models/shared/risksummary.rbi +6 -0
- data/lib/no_response/models/shared.rb +11 -0
- data/lib/no_response/sdkconfiguration.rb +2 -2
- metadata +24 -2
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
# One identifier's dated footprint across every source: the first and last year any event was seen, the years between them, the latest year a source dated activity (omitted when none did), how many distinct sites and which kinds of evidence saw it.
|
|
8
|
+
class FootprintTimeline
|
|
9
|
+
extend T::Sig
|
|
10
|
+
include Crystalline::MetadataFields
|
|
11
|
+
|
|
12
|
+
field(
|
|
13
|
+
:first_seen_year,
|
|
14
|
+
::Integer,
|
|
15
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("first_seen_year"), required: true}}
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
field(
|
|
19
|
+
:last_seen_year,
|
|
20
|
+
::Integer,
|
|
21
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("last_seen_year"), required: true}}
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
field(
|
|
25
|
+
:span_years,
|
|
26
|
+
::Integer,
|
|
27
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("span_years"), required: true}}
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
field(
|
|
31
|
+
:sites,
|
|
32
|
+
::Integer,
|
|
33
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("sites"), required: true}}
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
field(
|
|
37
|
+
:families,
|
|
38
|
+
Crystalline::Array.new(Models::Shared::FootprintFamily),
|
|
39
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("families"), required: true}}
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
field(
|
|
43
|
+
:last_active_year,
|
|
44
|
+
Crystalline::Nilable.new(::Integer),
|
|
45
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("last_active_year")}}
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
sig {
|
|
49
|
+
params(
|
|
50
|
+
first_seen_year: ::Integer,
|
|
51
|
+
last_seen_year: ::Integer,
|
|
52
|
+
span_years: ::Integer,
|
|
53
|
+
sites: ::Integer,
|
|
54
|
+
families: T::Array[Models::Shared::FootprintFamily],
|
|
55
|
+
last_active_year: T.nilable(::Integer)
|
|
56
|
+
)
|
|
57
|
+
.void
|
|
58
|
+
}
|
|
59
|
+
def initialize(first_seen_year:, last_seen_year:, span_years:, sites:, families:, last_active_year: nil)
|
|
60
|
+
@first_seen_year = first_seen_year
|
|
61
|
+
@last_seen_year = last_seen_year
|
|
62
|
+
@span_years = span_years
|
|
63
|
+
@sites = sites
|
|
64
|
+
@families = families
|
|
65
|
+
@last_active_year = last_active_year
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
69
|
+
def ==(other)
|
|
70
|
+
return false unless other.is_a?(self.class)
|
|
71
|
+
return false unless @first_seen_year == other.first_seen_year
|
|
72
|
+
return false unless @last_seen_year == other.last_seen_year
|
|
73
|
+
return false unless @span_years == other.span_years
|
|
74
|
+
return false unless @sites == other.sites
|
|
75
|
+
return false unless @families == other.families
|
|
76
|
+
return false unless @last_active_year == other.last_active_year
|
|
77
|
+
true
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
class NoResponse::Models::Shared::FootprintTimeline
|
|
5
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class NoResponse::Models::Shared::FootprintTimeline
|
|
9
|
+
def first_seen_year
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def first_seen_year=(str_)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def last_seen_year
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def last_seen_year=(str_)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def span_years
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def span_years=(str_)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def sites
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def sites=(str_)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def families
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def families=(str_)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def last_active_year
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def last_active_year=(str_)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
|
|
8
|
+
class Identifier
|
|
9
|
+
include ::Crystalline::Enum
|
|
10
|
+
enums do
|
|
11
|
+
EMAIL = new("email")
|
|
12
|
+
USERNAME = new("username")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
open!
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
|
|
8
|
+
class Impact
|
|
9
|
+
include ::Crystalline::Enum
|
|
10
|
+
enums do
|
|
11
|
+
NONE = new("none")
|
|
12
|
+
LOW = new("low")
|
|
13
|
+
MEDIUM = new("medium")
|
|
14
|
+
HIGH = new("high")
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
open!
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
module NoResponse
|
|
5
5
|
module Models
|
|
6
6
|
module Shared
|
|
7
|
-
# The one risk decision for this event. score is 0 (safe) to 100 (risky)
|
|
7
|
+
# The one risk decision for this event. score is 0 (safe) to 100 (risky), set by the reasons that fired under a hand-set, versioned heuristic policy. Each reason carries its direction and impact band; the policy's weights are not published. Every answer with a recommendation carries it, and the top-level recommendation equals risk.recommendation. It names no source or provider.
|
|
8
8
|
class Risk
|
|
9
9
|
extend T::Sig
|
|
10
10
|
include Crystalline::MetadataFields
|
|
@@ -50,13 +50,13 @@ module NoResponse
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
)
|
|
53
|
-
# Version of the hand-authored heuristic
|
|
53
|
+
# Version of the hand-authored heuristic policy that produced the recommendation, for example 'risk-2026-10.7'. A workspace threshold override adds a +t<N> suffix, e.g. 'risk-2026-10.7+t3'.
|
|
54
54
|
field(
|
|
55
55
|
:policy_version,
|
|
56
56
|
::String,
|
|
57
57
|
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("policy_version"), required: true}}
|
|
58
58
|
)
|
|
59
|
-
# Every reason that fired,
|
|
59
|
+
# Every reason that fired: risk-raising reasons first, then neutral, then risk-lowering, each strongest impact band first and then by code. The policy's numeric weights are kept private, so a reason carries only its direction and impact band.
|
|
60
60
|
field(
|
|
61
61
|
:reasons,
|
|
62
62
|
Crystalline::Array.new(Models::Shared::RiskReason),
|
|
@@ -26,19 +26,27 @@ module NoResponse
|
|
|
26
26
|
Crystalline::Nilable.new(Crystalline::Array.new(Models::Shared::RiskDetailsBreachName)),
|
|
27
27
|
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("breach_names")}}
|
|
28
28
|
)
|
|
29
|
+
# The identity's dated footprint events, newest first, at most 100: the year and month, what happened (created, last_active, breached), the site, its category, the kind of evidence and the identifier it belongs to. No breach value: dates are coarsened to the month.
|
|
30
|
+
field(
|
|
31
|
+
:events,
|
|
32
|
+
Crystalline::Nilable.new(Crystalline::Array.new(Models::Shared::RiskDetailsEvent)),
|
|
33
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("events")}}
|
|
34
|
+
)
|
|
29
35
|
|
|
30
36
|
sig {
|
|
31
37
|
params(
|
|
32
38
|
phone_names: T.nilable(T::Array[Models::Shared::RiskDetailsPhoneName]),
|
|
33
39
|
breaches: T.nilable(T::Array[Models::Shared::Breach]),
|
|
34
|
-
breach_names: T.nilable(T::Array[Models::Shared::RiskDetailsBreachName])
|
|
40
|
+
breach_names: T.nilable(T::Array[Models::Shared::RiskDetailsBreachName]),
|
|
41
|
+
events: T.nilable(T::Array[Models::Shared::RiskDetailsEvent])
|
|
35
42
|
)
|
|
36
43
|
.void
|
|
37
44
|
}
|
|
38
|
-
def initialize(phone_names: nil, breaches: nil, breach_names: nil)
|
|
45
|
+
def initialize(phone_names: nil, breaches: nil, breach_names: nil, events: nil)
|
|
39
46
|
@phone_names = phone_names
|
|
40
47
|
@breaches = breaches
|
|
41
48
|
@breach_names = breach_names
|
|
49
|
+
@events = events
|
|
42
50
|
end
|
|
43
51
|
|
|
44
52
|
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
@@ -47,6 +55,7 @@ module NoResponse
|
|
|
47
55
|
return false unless @phone_names == other.phone_names
|
|
48
56
|
return false unless @breaches == other.breaches
|
|
49
57
|
return false unless @breach_names == other.breach_names
|
|
58
|
+
return false unless @events == other.events
|
|
50
59
|
true
|
|
51
60
|
end
|
|
52
61
|
end
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
|
|
8
|
+
class RiskDetailsEvent
|
|
9
|
+
extend T::Sig
|
|
10
|
+
include Crystalline::MetadataFields
|
|
11
|
+
|
|
12
|
+
field :year, ::Integer, {'format_json': {'letter_case': ::NoResponse::Utils.field_name("year"), required: true}}
|
|
13
|
+
|
|
14
|
+
field(
|
|
15
|
+
:kind,
|
|
16
|
+
Models::Shared::RiskDetailsEventKind,
|
|
17
|
+
{
|
|
18
|
+
'format_json': {
|
|
19
|
+
'letter_case': ::NoResponse::Utils.field_name("kind"),
|
|
20
|
+
required: true,
|
|
21
|
+
'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::RiskDetailsEventKind, false)
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
field :site, ::String, {'format_json': {'letter_case': ::NoResponse::Utils.field_name("site"), required: true}}
|
|
27
|
+
|
|
28
|
+
field(
|
|
29
|
+
:category,
|
|
30
|
+
::String,
|
|
31
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("category"), required: true}}
|
|
32
|
+
)
|
|
33
|
+
# The source-neutral kind of evidence: account_presence (an account found on a site), auth_provider (the account at your auth provider), breach (breach and credential tables), breach_abuse (abuse and fraud communities' tables) and code_hosting (a code hosting profile).
|
|
34
|
+
field(
|
|
35
|
+
:family,
|
|
36
|
+
Models::Shared::FootprintFamily,
|
|
37
|
+
{
|
|
38
|
+
'format_json': {
|
|
39
|
+
'letter_case': ::NoResponse::Utils.field_name("family"),
|
|
40
|
+
required: true,
|
|
41
|
+
'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::FootprintFamily, false)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
field(
|
|
47
|
+
:identifier,
|
|
48
|
+
Models::Shared::Identifier,
|
|
49
|
+
{
|
|
50
|
+
'format_json': {
|
|
51
|
+
'letter_case': ::NoResponse::Utils.field_name("identifier"),
|
|
52
|
+
required: true,
|
|
53
|
+
'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::Identifier, false)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
field(
|
|
59
|
+
:month,
|
|
60
|
+
Crystalline::Nilable.new(::Integer),
|
|
61
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("month")}}
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
sig {
|
|
65
|
+
params(
|
|
66
|
+
year: ::Integer,
|
|
67
|
+
kind: Models::Shared::RiskDetailsEventKind,
|
|
68
|
+
site: ::String,
|
|
69
|
+
category: ::String,
|
|
70
|
+
family: Models::Shared::FootprintFamily,
|
|
71
|
+
identifier: Models::Shared::Identifier,
|
|
72
|
+
month: T.nilable(::Integer)
|
|
73
|
+
)
|
|
74
|
+
.void
|
|
75
|
+
}
|
|
76
|
+
def initialize(year:, kind:, site:, category:, family:, identifier:, month: nil)
|
|
77
|
+
@year = year
|
|
78
|
+
@kind = kind
|
|
79
|
+
@site = site
|
|
80
|
+
@category = category
|
|
81
|
+
@family = family
|
|
82
|
+
@identifier = identifier
|
|
83
|
+
@month = month
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
87
|
+
def ==(other)
|
|
88
|
+
return false unless other.is_a?(self.class)
|
|
89
|
+
return false unless @year == other.year
|
|
90
|
+
return false unless @kind == other.kind
|
|
91
|
+
return false unless @site == other.site
|
|
92
|
+
return false unless @category == other.category
|
|
93
|
+
return false unless @family == other.family
|
|
94
|
+
return false unless @identifier == other.identifier
|
|
95
|
+
return false unless @month == other.month
|
|
96
|
+
true
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
class NoResponse::Models::Shared::RiskDetailsEvent
|
|
5
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class NoResponse::Models::Shared::RiskDetailsEvent
|
|
9
|
+
def year
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def year=(str_)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def kind
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def kind=(str_)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def site
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def site=(str_)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def category
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def category=(str_)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def family
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def family=(str_)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def identifier
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def identifier=(str_)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def month
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def month=(str_)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
|
|
8
|
+
class RiskDetailsEventKind
|
|
9
|
+
include ::Crystalline::Enum
|
|
10
|
+
enums do
|
|
11
|
+
CREATED = new("created")
|
|
12
|
+
LAST_ACTIVE = new("last_active")
|
|
13
|
+
BREACHED = new("breached")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
open!
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
module NoResponse
|
|
5
5
|
module Models
|
|
6
6
|
module Shared
|
|
7
|
-
|
|
7
|
+
# One reason that fired. direction is whether it raises or lowers the score, or is neutral (informational, it moves nothing). impact is a coarse band of how much it moves the score: none for a neutral reason, otherwise low, medium or high.
|
|
8
8
|
class RiskReason
|
|
9
9
|
extend T::Sig
|
|
10
10
|
include Crystalline::MetadataFields
|
|
@@ -23,9 +23,27 @@ module NoResponse
|
|
|
23
23
|
)
|
|
24
24
|
|
|
25
25
|
field(
|
|
26
|
-
:
|
|
27
|
-
::
|
|
28
|
-
{
|
|
26
|
+
:direction,
|
|
27
|
+
Models::Shared::Direction,
|
|
28
|
+
{
|
|
29
|
+
'format_json': {
|
|
30
|
+
'letter_case': ::NoResponse::Utils.field_name("direction"),
|
|
31
|
+
required: true,
|
|
32
|
+
'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::Direction, false)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
field(
|
|
38
|
+
:impact,
|
|
39
|
+
Models::Shared::Impact,
|
|
40
|
+
{
|
|
41
|
+
'format_json': {
|
|
42
|
+
'letter_case': ::NoResponse::Utils.field_name("impact"),
|
|
43
|
+
required: true,
|
|
44
|
+
'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::Impact, false)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
29
47
|
)
|
|
30
48
|
# 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.
|
|
31
49
|
field(
|
|
@@ -38,27 +56,45 @@ module NoResponse
|
|
|
38
56
|
}
|
|
39
57
|
}
|
|
40
58
|
)
|
|
59
|
+
# Deprecated and always 0: the policy's weights are not published. It is sent so that SDK versions that require it keep reading reasons. Read direction and impact.
|
|
60
|
+
#
|
|
61
|
+
# @deprecated true: This will be removed in a future release, please migrate away from it as soon as possible.
|
|
62
|
+
field(
|
|
63
|
+
:weight,
|
|
64
|
+
Crystalline::Nilable.new(::Integer),
|
|
65
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("weight")}}
|
|
66
|
+
)
|
|
41
67
|
|
|
42
68
|
sig {
|
|
43
69
|
params(
|
|
44
70
|
code: Models::Shared::ReasonCode,
|
|
45
|
-
|
|
46
|
-
|
|
71
|
+
direction: Models::Shared::Direction,
|
|
72
|
+
impact: Models::Shared::Impact,
|
|
73
|
+
identifier: T.nilable(Models::Shared::ReasonIdentifier),
|
|
74
|
+
weight: T.nilable(::Integer)
|
|
47
75
|
)
|
|
48
76
|
.void
|
|
49
77
|
}
|
|
50
|
-
def initialize(code:,
|
|
78
|
+
def initialize(code:, direction:, impact:, identifier: nil, weight: 0)
|
|
51
79
|
@code = code
|
|
52
|
-
@
|
|
80
|
+
@direction = direction
|
|
81
|
+
@impact = impact
|
|
53
82
|
@identifier = identifier
|
|
83
|
+
unless weight&.zero?
|
|
84
|
+
raise ArgumentError, "Invalid value for weight"
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
@weight = 0
|
|
54
88
|
end
|
|
55
89
|
|
|
56
90
|
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
57
91
|
def ==(other)
|
|
58
92
|
return false unless other.is_a?(self.class)
|
|
59
93
|
return false unless @code == other.code
|
|
60
|
-
return false unless @
|
|
94
|
+
return false unless @direction == other.direction
|
|
95
|
+
return false unless @impact == other.impact
|
|
61
96
|
return false unless @identifier == other.identifier
|
|
97
|
+
return false unless @weight == other.weight
|
|
62
98
|
true
|
|
63
99
|
end
|
|
64
100
|
end
|
|
@@ -12,10 +12,16 @@ class NoResponse::Models::Shared::RiskReason
|
|
|
12
12
|
def code=(str_)
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
def
|
|
15
|
+
def direction
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
def
|
|
18
|
+
def direction=(str_)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def impact
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def impact=(str_)
|
|
19
25
|
end
|
|
20
26
|
|
|
21
27
|
def identifier
|
|
@@ -23,4 +29,10 @@ class NoResponse::Models::Shared::RiskReason
|
|
|
23
29
|
|
|
24
30
|
def identifier=(str_)
|
|
25
31
|
end
|
|
32
|
+
|
|
33
|
+
def weight
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def weight=(str_)
|
|
37
|
+
end
|
|
26
38
|
end
|
|
@@ -38,6 +38,12 @@ module NoResponse
|
|
|
38
38
|
Crystalline::Nilable.new(Models::Shared::Consistency),
|
|
39
39
|
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("consistency")}}
|
|
40
40
|
)
|
|
41
|
+
# How long and how widely the signup's email and username have existed, and how far independent sources agree on the person behind them, in years and counts only. families are the kinds of evidence that found either identifier. Omitted when nothing found them: a footprint lookup that failed makes no claim, and absence is no_digital_footprint's to state.
|
|
42
|
+
field(
|
|
43
|
+
:footprint,
|
|
44
|
+
Crystalline::Nilable.new(Models::Shared::Footprint),
|
|
45
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("footprint")}}
|
|
46
|
+
)
|
|
41
47
|
|
|
42
48
|
sig {
|
|
43
49
|
params(
|
|
@@ -45,16 +51,18 @@ module NoResponse
|
|
|
45
51
|
email: T.nilable(Models::Shared::RiskSummaryEmail),
|
|
46
52
|
username: T.nilable(Models::Shared::RiskSummaryUsername),
|
|
47
53
|
ip: T.nilable(Models::Shared::IpSummary),
|
|
48
|
-
consistency: T.nilable(Models::Shared::Consistency)
|
|
54
|
+
consistency: T.nilable(Models::Shared::Consistency),
|
|
55
|
+
footprint: T.nilable(Models::Shared::Footprint)
|
|
49
56
|
)
|
|
50
57
|
.void
|
|
51
58
|
}
|
|
52
|
-
def initialize(phone: nil, email: nil, username: nil, ip: nil, consistency: nil)
|
|
59
|
+
def initialize(phone: nil, email: nil, username: nil, ip: nil, consistency: nil, footprint: nil)
|
|
53
60
|
@phone = phone
|
|
54
61
|
@email = email
|
|
55
62
|
@username = username
|
|
56
63
|
@ip = ip
|
|
57
64
|
@consistency = consistency
|
|
65
|
+
@footprint = footprint
|
|
58
66
|
end
|
|
59
67
|
|
|
60
68
|
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
@@ -65,6 +73,7 @@ module NoResponse
|
|
|
65
73
|
return false unless @username == other.username
|
|
66
74
|
return false unless @ip == other.ip
|
|
67
75
|
return false unless @consistency == other.consistency
|
|
76
|
+
return false unless @footprint == other.footprint
|
|
68
77
|
true
|
|
69
78
|
end
|
|
70
79
|
end
|
|
@@ -16,6 +16,7 @@ module NoResponse
|
|
|
16
16
|
autoload :AccountRiskChangedEvent, "no_response/models/shared/accountriskchangedevent.rb"
|
|
17
17
|
autoload :AccountRiskReason, "no_response/models/shared/accountriskreason.rb"
|
|
18
18
|
autoload :Admission, "no_response/models/shared/admission.rb"
|
|
19
|
+
autoload :Agreement, "no_response/models/shared/agreement.rb"
|
|
19
20
|
autoload :Assessment, "no_response/models/shared/assessment.rb"
|
|
20
21
|
autoload :AssessmentDeletion, "no_response/models/shared/assessmentdeletion.rb"
|
|
21
22
|
autoload :AssessmentDeletionAccount, "no_response/models/shared/assessmentdeletionaccount.rb"
|
|
@@ -35,6 +36,7 @@ module NoResponse
|
|
|
35
36
|
autoload :AssessmentUpdatedData, "no_response/models/shared/assessmentupdateddata.rb"
|
|
36
37
|
autoload :AssessmentUpdatedEvent, "no_response/models/shared/assessmentupdatedevent.rb"
|
|
37
38
|
autoload :AssuranceLevel, "no_response/models/shared/assurancelevel.rb"
|
|
39
|
+
autoload :AttributeAgreement, "no_response/models/shared/attributeagreement.rb"
|
|
38
40
|
autoload :AuthContext, "no_response/models/shared/authcontext.rb"
|
|
39
41
|
autoload :AuthContextMfa, "no_response/models/shared/authcontextmfa.rb"
|
|
40
42
|
autoload :AuthenticationErrorCode, "no_response/models/shared/authenticationerrorcode.rb"
|
|
@@ -52,6 +54,7 @@ module NoResponse
|
|
|
52
54
|
autoload :Country, "no_response/models/shared/country.rb"
|
|
53
55
|
autoload :DefaultDepth, "no_response/models/shared/defaultdepth.rb"
|
|
54
56
|
autoload :Depth, "no_response/models/shared/depth.rb"
|
|
57
|
+
autoload :Direction, "no_response/models/shared/direction.rb"
|
|
55
58
|
autoload :EndpointVerification, "no_response/models/shared/endpointverification.rb"
|
|
56
59
|
autoload :EndpointVerificationEvent, "no_response/models/shared/endpointverificationevent.rb"
|
|
57
60
|
autoload :Enforcement, "no_response/models/shared/enforcement.rb"
|
|
@@ -66,9 +69,15 @@ module NoResponse
|
|
|
66
69
|
autoload :Flow, "no_response/models/shared/flow.rb"
|
|
67
70
|
autoload :FlowChange, "no_response/models/shared/flowchange.rb"
|
|
68
71
|
autoload :FlowSettings, "no_response/models/shared/flowsettings.rb"
|
|
72
|
+
autoload :Footprint, "no_response/models/shared/footprint.rb"
|
|
73
|
+
autoload :FootprintCoherence, "no_response/models/shared/footprintcoherence.rb"
|
|
74
|
+
autoload :FootprintFamily, "no_response/models/shared/footprintfamily.rb"
|
|
75
|
+
autoload :FootprintTimeline, "no_response/models/shared/footprinttimeline.rb"
|
|
69
76
|
autoload :Freshness, "no_response/models/shared/freshness.rb"
|
|
70
77
|
autoload :HookPoint, "no_response/models/shared/hookpoint.rb"
|
|
78
|
+
autoload :Identifier, "no_response/models/shared/identifier.rb"
|
|
71
79
|
autoload :IdentifierKind, "no_response/models/shared/identifierkind.rb"
|
|
80
|
+
autoload :Impact, "no_response/models/shared/impact.rb"
|
|
72
81
|
autoload :IncompleteReason, "no_response/models/shared/incompletereason.rb"
|
|
73
82
|
autoload :IncompleteSource, "no_response/models/shared/incompletesource.rb"
|
|
74
83
|
autoload :Integration, "no_response/models/shared/integration.rb"
|
|
@@ -112,6 +121,8 @@ module NoResponse
|
|
|
112
121
|
autoload :RiskCoverage, "no_response/models/shared/riskcoverage.rb"
|
|
113
122
|
autoload :RiskDetails, "no_response/models/shared/riskdetails.rb"
|
|
114
123
|
autoload :RiskDetailsBreachName, "no_response/models/shared/riskdetailsbreachname.rb"
|
|
124
|
+
autoload :RiskDetailsEvent, "no_response/models/shared/riskdetailsevent.rb"
|
|
125
|
+
autoload :RiskDetailsEventKind, "no_response/models/shared/riskdetailseventkind.rb"
|
|
115
126
|
autoload :RiskDetailsPhoneName, "no_response/models/shared/riskdetailsphonename.rb"
|
|
116
127
|
autoload :RiskReason, "no_response/models/shared/riskreason.rb"
|
|
117
128
|
autoload :RiskSummary, "no_response/models/shared/risksummary.rb"
|