noresponse 7.1.6 → 7.1.8
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/assessmentrequestidentifiers.rb +1 -1
- 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/breach.rb +1 -1
- data/lib/no_response/models/shared/breachselector.rb +1 -1
- 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/reasoncode.rb +6 -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
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f247c1cc049b166c235dbe04c7c313d63932152225e9538c73923f8c7e2c6b3d
|
|
4
|
+
data.tar.gz: 41009d50e17c42e88b10ca2cd47ed1f5b23bc1ecdbc607b89128c2899d8b8ca5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: beaf4c8f491c70e4754590bc505971db1819a69fe33f4c01fdaa95370fef59f95634fc64c2bafb94e439611ce92ecc8e64919bbdbe0b7ff3ff8221f3b3dbb950
|
|
7
|
+
data.tar.gz: 5bce1e99b605e0390da50ee34c18ac29d22ec4aedbd3e68d1264b41096ee6d96735a1014385f82e7763b5daf0ecfc2d9cfe5f98a63203d49a3132ebb9c568459
|
|
@@ -27,7 +27,7 @@ module NoResponse
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
)
|
|
30
|
-
# Every reason that fired,
|
|
30
|
+
# 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.
|
|
31
31
|
field(
|
|
32
32
|
:reasons,
|
|
33
33
|
Crystalline::Array.new(Models::Shared::AccountRiskReason),
|
|
@@ -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 AccountRiskReason
|
|
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::AccountRiskReason
|
|
|
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::AccountRiskReason
|
|
|
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
|
|
@@ -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 Agreement
|
|
9
|
+
include ::Crystalline::Enum
|
|
10
|
+
enums do
|
|
11
|
+
MATCH = new("match")
|
|
12
|
+
PARTIAL = new("partial")
|
|
13
|
+
MISMATCH = new("mismatch")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
open!
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -51,7 +51,7 @@ module NoResponse
|
|
|
51
51
|
Crystalline::Array.new(Models::Shared::IncompleteSource),
|
|
52
52
|
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("incomplete_sources"), required: true}}
|
|
53
53
|
)
|
|
54
|
-
# Version of the hand-authored heuristic
|
|
54
|
+
# 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'.
|
|
55
55
|
field(
|
|
56
56
|
:policy_version,
|
|
57
57
|
::String,
|
|
@@ -110,7 +110,7 @@ module NoResponse
|
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
)
|
|
113
|
-
# The one risk decision for this event. score is 0 (safe) to 100 (risky)
|
|
113
|
+
# 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.
|
|
114
114
|
field(
|
|
115
115
|
:risk,
|
|
116
116
|
Crystalline::Nilable.new(Models::Shared::Risk),
|
|
@@ -27,7 +27,7 @@ module NoResponse
|
|
|
27
27
|
Crystalline::Nilable.new(::String),
|
|
28
28
|
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("phone")}}
|
|
29
29
|
)
|
|
30
|
-
# The full name as the user typed it, 1 to 128 characters with no control or invisible characters. It is
|
|
30
|
+
# The full name as the user typed it, 1 to 128 characters with no control or invisible characters. It is searched in breach data and matched against names in the evidence. A row holding the signup's own email or username confirms the name; rows sharing another identifier add to the identity's history.
|
|
31
31
|
field(
|
|
32
32
|
:name,
|
|
33
33
|
Crystalline::Nilable.new(::String),
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
# How far independent sources agree on one attribute: values is the number of distinct values reported, support the tables and profiles reporting any, and agreement match (one value), partial (the most reported value holds more than half the support) or mismatch. The values themselves are not served.
|
|
8
|
+
class AttributeAgreement
|
|
9
|
+
extend T::Sig
|
|
10
|
+
include Crystalline::MetadataFields
|
|
11
|
+
|
|
12
|
+
field(
|
|
13
|
+
:agreement,
|
|
14
|
+
Models::Shared::Agreement,
|
|
15
|
+
{
|
|
16
|
+
'format_json': {
|
|
17
|
+
'letter_case': ::NoResponse::Utils.field_name("agreement"),
|
|
18
|
+
required: true,
|
|
19
|
+
'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::Agreement, false)
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
field(
|
|
25
|
+
:values,
|
|
26
|
+
::Integer,
|
|
27
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("values"), required: true}}
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
field(
|
|
31
|
+
:support,
|
|
32
|
+
::Integer,
|
|
33
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("support"), required: true}}
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
sig { params(agreement: Models::Shared::Agreement, values: ::Integer, support: ::Integer).void }
|
|
37
|
+
def initialize(agreement:, values:, support:)
|
|
38
|
+
@agreement = agreement
|
|
39
|
+
@values = values
|
|
40
|
+
@support = support
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
44
|
+
def ==(other)
|
|
45
|
+
return false unless other.is_a?(self.class)
|
|
46
|
+
return false unless @agreement == other.agreement
|
|
47
|
+
return false unless @values == other.values
|
|
48
|
+
return false unless @support == other.support
|
|
49
|
+
true
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
class NoResponse::Models::Shared::AttributeAgreement
|
|
5
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class NoResponse::Models::Shared::AttributeAgreement
|
|
9
|
+
def agreement
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def agreement=(str_)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def values
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def values=(str_)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def support
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def support=(str_)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -22,7 +22,7 @@ module NoResponse
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
)
|
|
25
|
-
# The submitted
|
|
25
|
+
# The submitted email or username whose own search matched the table. A submitted full name is searched as well, and what it finds feeds the identity's reasons rather than this list.
|
|
26
26
|
field(
|
|
27
27
|
:matched_on,
|
|
28
28
|
Models::Shared::BreachSelector,
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
module NoResponse
|
|
5
5
|
module Models
|
|
6
6
|
module Shared
|
|
7
|
-
# BreachSelector - The submitted
|
|
7
|
+
# BreachSelector - The submitted email or username whose own search matched the table. A submitted full name is searched as well, and what it finds feeds the identity's reasons rather than this list.
|
|
8
8
|
class BreachSelector
|
|
9
9
|
include ::Crystalline::Enum
|
|
10
10
|
enums do
|
|
@@ -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 Direction
|
|
9
|
+
include ::Crystalline::Enum
|
|
10
|
+
enums do
|
|
11
|
+
RAISES = new("raises")
|
|
12
|
+
LOWERS = new("lowers")
|
|
13
|
+
NEUTRAL = new("neutral")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
open!
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
# 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.
|
|
8
|
+
class Footprint
|
|
9
|
+
extend T::Sig
|
|
10
|
+
include Crystalline::MetadataFields
|
|
11
|
+
|
|
12
|
+
field(
|
|
13
|
+
:families,
|
|
14
|
+
Crystalline::Array.new(Models::Shared::FootprintFamily),
|
|
15
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("families"), required: true}}
|
|
16
|
+
)
|
|
17
|
+
# 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.
|
|
18
|
+
field(
|
|
19
|
+
:email,
|
|
20
|
+
Crystalline::Nilable.new(Models::Shared::FootprintTimeline),
|
|
21
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("email")}}
|
|
22
|
+
)
|
|
23
|
+
# 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.
|
|
24
|
+
field(
|
|
25
|
+
:username,
|
|
26
|
+
Crystalline::Nilable.new(Models::Shared::FootprintTimeline),
|
|
27
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("username")}}
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
field(
|
|
31
|
+
:coherence,
|
|
32
|
+
Crystalline::Nilable.new(Models::Shared::FootprintCoherence),
|
|
33
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("coherence")}}
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
sig {
|
|
37
|
+
params(
|
|
38
|
+
families: T::Array[Models::Shared::FootprintFamily],
|
|
39
|
+
email: T.nilable(Models::Shared::FootprintTimeline),
|
|
40
|
+
username: T.nilable(Models::Shared::FootprintTimeline),
|
|
41
|
+
coherence: T.nilable(Models::Shared::FootprintCoherence)
|
|
42
|
+
)
|
|
43
|
+
.void
|
|
44
|
+
}
|
|
45
|
+
def initialize(families:, email: nil, username: nil, coherence: nil)
|
|
46
|
+
@families = families
|
|
47
|
+
@email = email
|
|
48
|
+
@username = username
|
|
49
|
+
@coherence = coherence
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
53
|
+
def ==(other)
|
|
54
|
+
return false unless other.is_a?(self.class)
|
|
55
|
+
return false unless @families == other.families
|
|
56
|
+
return false unless @email == other.email
|
|
57
|
+
return false unless @username == other.username
|
|
58
|
+
return false unless @coherence == other.coherence
|
|
59
|
+
true
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
class NoResponse::Models::Shared::Footprint
|
|
5
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class NoResponse::Models::Shared::Footprint
|
|
9
|
+
def families
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def families=(str_)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def email
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def email=(str_)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def username
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def username=(str_)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def coherence
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def coherence=(str_)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
|
|
8
|
+
class FootprintCoherence
|
|
9
|
+
extend T::Sig
|
|
10
|
+
include Crystalline::MetadataFields
|
|
11
|
+
|
|
12
|
+
# How far independent sources agree on one attribute: values is the number of distinct values reported, support the tables and profiles reporting any, and agreement match (one value), partial (the most reported value holds more than half the support) or mismatch. The values themselves are not served.
|
|
13
|
+
field(
|
|
14
|
+
:birth_date,
|
|
15
|
+
Crystalline::Nilable.new(Models::Shared::AttributeAgreement),
|
|
16
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("birth_date")}}
|
|
17
|
+
)
|
|
18
|
+
# How far independent sources agree on one attribute: values is the number of distinct values reported, support the tables and profiles reporting any, and agreement match (one value), partial (the most reported value holds more than half the support) or mismatch. The values themselves are not served.
|
|
19
|
+
field(
|
|
20
|
+
:gender,
|
|
21
|
+
Crystalline::Nilable.new(Models::Shared::AttributeAgreement),
|
|
22
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("gender")}}
|
|
23
|
+
)
|
|
24
|
+
# How far independent sources agree on one attribute: values is the number of distinct values reported, support the tables and profiles reporting any, and agreement match (one value), partial (the most reported value holds more than half the support) or mismatch. The values themselves are not served.
|
|
25
|
+
field(
|
|
26
|
+
:nationality,
|
|
27
|
+
Crystalline::Nilable.new(Models::Shared::AttributeAgreement),
|
|
28
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("nationality")}}
|
|
29
|
+
)
|
|
30
|
+
# How far independent sources agree on one attribute: values is the number of distinct values reported, support the tables and profiles reporting any, and agreement match (one value), partial (the most reported value holds more than half the support) or mismatch. The values themselves are not served.
|
|
31
|
+
field(
|
|
32
|
+
:country,
|
|
33
|
+
Crystalline::Nilable.new(Models::Shared::AttributeAgreement),
|
|
34
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("country")}}
|
|
35
|
+
)
|
|
36
|
+
# How far independent sources agree on one attribute: values is the number of distinct values reported, support the tables and profiles reporting any, and agreement match (one value), partial (the most reported value holds more than half the support) or mismatch. The values themselves are not served.
|
|
37
|
+
field(
|
|
38
|
+
:city,
|
|
39
|
+
Crystalline::Nilable.new(Models::Shared::AttributeAgreement),
|
|
40
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("city")}}
|
|
41
|
+
)
|
|
42
|
+
# How far independent sources agree on one attribute: values is the number of distinct values reported, support the tables and profiles reporting any, and agreement match (one value), partial (the most reported value holds more than half the support) or mismatch. The values themselves are not served.
|
|
43
|
+
field(
|
|
44
|
+
:zip,
|
|
45
|
+
Crystalline::Nilable.new(Models::Shared::AttributeAgreement),
|
|
46
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("zip")}}
|
|
47
|
+
)
|
|
48
|
+
# How far independent sources agree on one attribute: values is the number of distinct values reported, support the tables and profiles reporting any, and agreement match (one value), partial (the most reported value holds more than half the support) or mismatch. The values themselves are not served.
|
|
49
|
+
field(
|
|
50
|
+
:name,
|
|
51
|
+
Crystalline::Nilable.new(Models::Shared::AttributeAgreement),
|
|
52
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("name")}}
|
|
53
|
+
)
|
|
54
|
+
# How far independent sources agree on one attribute: values is the number of distinct values reported, support the tables and profiles reporting any, and agreement match (one value), partial (the most reported value holds more than half the support) or mismatch. The values themselves are not served.
|
|
55
|
+
field(
|
|
56
|
+
:company,
|
|
57
|
+
Crystalline::Nilable.new(Models::Shared::AttributeAgreement),
|
|
58
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("company")}}
|
|
59
|
+
)
|
|
60
|
+
# How far independent sources agree on one attribute: values is the number of distinct values reported, support the tables and profiles reporting any, and agreement match (one value), partial (the most reported value holds more than half the support) or mismatch. The values themselves are not served.
|
|
61
|
+
field(
|
|
62
|
+
:website,
|
|
63
|
+
Crystalline::Nilable.new(Models::Shared::AttributeAgreement),
|
|
64
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("website")}}
|
|
65
|
+
)
|
|
66
|
+
# How far independent sources agree on one attribute: values is the number of distinct values reported, support the tables and profiles reporting any, and agreement match (one value), partial (the most reported value holds more than half the support) or mismatch. The values themselves are not served.
|
|
67
|
+
field(
|
|
68
|
+
:social,
|
|
69
|
+
Crystalline::Nilable.new(Models::Shared::AttributeAgreement),
|
|
70
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("social")}}
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
sig {
|
|
74
|
+
params(
|
|
75
|
+
birth_date: T.nilable(Models::Shared::AttributeAgreement),
|
|
76
|
+
gender: T.nilable(Models::Shared::AttributeAgreement),
|
|
77
|
+
nationality: T.nilable(Models::Shared::AttributeAgreement),
|
|
78
|
+
country: T.nilable(Models::Shared::AttributeAgreement),
|
|
79
|
+
city: T.nilable(Models::Shared::AttributeAgreement),
|
|
80
|
+
zip: T.nilable(Models::Shared::AttributeAgreement),
|
|
81
|
+
name: T.nilable(Models::Shared::AttributeAgreement),
|
|
82
|
+
company: T.nilable(Models::Shared::AttributeAgreement),
|
|
83
|
+
website: T.nilable(Models::Shared::AttributeAgreement),
|
|
84
|
+
social: T.nilable(Models::Shared::AttributeAgreement)
|
|
85
|
+
)
|
|
86
|
+
.void
|
|
87
|
+
}
|
|
88
|
+
def initialize(
|
|
89
|
+
birth_date: nil,
|
|
90
|
+
gender: nil,
|
|
91
|
+
nationality: nil,
|
|
92
|
+
country: nil,
|
|
93
|
+
city: nil,
|
|
94
|
+
zip: nil,
|
|
95
|
+
name: nil,
|
|
96
|
+
company: nil,
|
|
97
|
+
website: nil,
|
|
98
|
+
social: nil
|
|
99
|
+
)
|
|
100
|
+
@birth_date = birth_date
|
|
101
|
+
@gender = gender
|
|
102
|
+
@nationality = nationality
|
|
103
|
+
@country = country
|
|
104
|
+
@city = city
|
|
105
|
+
@zip = zip
|
|
106
|
+
@name = name
|
|
107
|
+
@company = company
|
|
108
|
+
@website = website
|
|
109
|
+
@social = social
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
113
|
+
def ==(other)
|
|
114
|
+
return false unless other.is_a?(self.class)
|
|
115
|
+
return false unless @birth_date == other.birth_date
|
|
116
|
+
return false unless @gender == other.gender
|
|
117
|
+
return false unless @nationality == other.nationality
|
|
118
|
+
return false unless @country == other.country
|
|
119
|
+
return false unless @city == other.city
|
|
120
|
+
return false unless @zip == other.zip
|
|
121
|
+
return false unless @name == other.name
|
|
122
|
+
return false unless @company == other.company
|
|
123
|
+
return false unless @website == other.website
|
|
124
|
+
return false unless @social == other.social
|
|
125
|
+
true
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
class NoResponse::Models::Shared::FootprintCoherence
|
|
5
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class NoResponse::Models::Shared::FootprintCoherence
|
|
9
|
+
def birth_date
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def birth_date=(str_)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def gender
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def gender=(str_)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def nationality
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def nationality=(str_)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def country
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def country=(str_)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def city
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def city=(str_)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def zip
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def zip=(str_)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def name
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def name=(str_)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def company
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def company=(str_)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def website
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def website=(str_)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def social
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def social=(str_)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
# FootprintFamily - 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).
|
|
8
|
+
class FootprintFamily
|
|
9
|
+
include ::Crystalline::Enum
|
|
10
|
+
enums do
|
|
11
|
+
ACCOUNT_PRESENCE = new("account_presence")
|
|
12
|
+
AUTH_PROVIDER = new("auth_provider")
|
|
13
|
+
BREACH = new("breach")
|
|
14
|
+
BREACH_ABUSE = new("breach_abuse")
|
|
15
|
+
CODE_HOSTING = new("code_hosting")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
open!
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|