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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/lib/no_response/models/shared/accountrisk.rb +1 -1
  3. data/lib/no_response/models/shared/accountriskreason.rb +45 -9
  4. data/lib/no_response/models/shared/accountriskreason.rbi +14 -2
  5. data/lib/no_response/models/shared/agreement.rb +20 -0
  6. data/lib/no_response/models/shared/agreement.rbi +9 -0
  7. data/lib/no_response/models/shared/assessmentdetail.rb +2 -2
  8. data/lib/no_response/models/shared/attributeagreement.rb +54 -0
  9. data/lib/no_response/models/shared/attributeagreement.rbi +26 -0
  10. data/lib/no_response/models/shared/direction.rb +20 -0
  11. data/lib/no_response/models/shared/direction.rbi +9 -0
  12. data/lib/no_response/models/shared/footprint.rb +64 -0
  13. data/lib/no_response/models/shared/footprint.rbi +32 -0
  14. data/lib/no_response/models/shared/footprintcoherence.rb +130 -0
  15. data/lib/no_response/models/shared/footprintcoherence.rbi +68 -0
  16. data/lib/no_response/models/shared/footprintfamily.rb +22 -0
  17. data/lib/no_response/models/shared/footprintfamily.rbi +9 -0
  18. data/lib/no_response/models/shared/footprinttimeline.rb +82 -0
  19. data/lib/no_response/models/shared/footprinttimeline.rbi +44 -0
  20. data/lib/no_response/models/shared/identifier.rb +19 -0
  21. data/lib/no_response/models/shared/identifier.rbi +9 -0
  22. data/lib/no_response/models/shared/impact.rb +21 -0
  23. data/lib/no_response/models/shared/impact.rbi +9 -0
  24. data/lib/no_response/models/shared/risk.rb +3 -3
  25. data/lib/no_response/models/shared/riskdetails.rb +11 -2
  26. data/lib/no_response/models/shared/riskdetails.rbi +6 -0
  27. data/lib/no_response/models/shared/riskdetailsevent.rb +101 -0
  28. data/lib/no_response/models/shared/riskdetailsevent.rbi +50 -0
  29. data/lib/no_response/models/shared/riskdetailseventkind.rb +20 -0
  30. data/lib/no_response/models/shared/riskdetailseventkind.rbi +9 -0
  31. data/lib/no_response/models/shared/riskreason.rb +45 -9
  32. data/lib/no_response/models/shared/riskreason.rbi +14 -2
  33. data/lib/no_response/models/shared/risksummary.rb +11 -2
  34. data/lib/no_response/models/shared/risksummary.rbi +6 -0
  35. data/lib/no_response/models/shared.rb +11 -0
  36. data/lib/no_response/sdkconfiguration.rb +2 -2
  37. metadata +24 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a97a4b3919011a607db3752a122ba7eb9a565b043606a6334a53f59b2f1da769
4
- data.tar.gz: 7bc76a1e03c80c265616b71450aaac189791a5cc306e6f12ad48844cd7f2e0de
3
+ metadata.gz: e2de9d59513cbe576c219c33c460202674d4747afe028d15854ddbf321314a26
4
+ data.tar.gz: 5186fdc2c70c4b31b47d2b8b1f07cb875f03a8a34d9cda04d57a08732ec29eca
5
5
  SHA512:
6
- metadata.gz: e45246fd1b8c282d8b0baaeaec0e59edb70d3313c32007f80fd94170673a5168f526c149b883640af22479af0ae3917a39184ad2b56d524928b97be8cb80217d
7
- data.tar.gz: b9bf9c806e2dd601ced259236ea4593458e8c2e4ccaba515e64225458c79d44c67e2daea3915a897e642f74f263c415f4a203f3619ca4033499b7f9e867356a7
6
+ metadata.gz: 5d3e8d53cdb965c3594da552c4935b9d311298a9d4ca0d406eac84a114b3c6d6c55584700088e5981ffcfbca514a59821e3aaddea137e9d63a007646ae25f2a6
7
+ data.tar.gz: 5828d43c40b7dd54d4cb35029ffec08728d9da811d8a00f9011a34d66b2a3715dd0bbe3ffcf767c457b25d11b0116a04ec371ef1296c1e43e659f6c7818f6c1f
@@ -27,7 +27,7 @@ module NoResponse
27
27
  }
28
28
  }
29
29
  )
30
- # Every reason that fired, highest weight first. The weights sum to score before clamping.
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
- :weight,
27
- ::Integer,
28
- {'format_json': {'letter_case': ::NoResponse::Utils.field_name("weight"), required: true}}
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
- weight: ::Integer,
46
- identifier: T.nilable(Models::Shared::ReasonIdentifier)
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:, weight:, identifier: nil)
78
+ def initialize(code:, direction:, impact:, identifier: nil, weight: 0)
51
79
  @code = code
52
- @weight = weight
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 @weight == other.weight
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 weight
15
+ def direction
16
16
  end
17
17
 
18
- def weight=(str_)
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
@@ -0,0 +1,9 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::Agreement
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::Agreement
9
+ 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 weights 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
+ # 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): 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.
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),
@@ -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
@@ -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,9 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::Direction
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::Direction
9
+ 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
@@ -0,0 +1,9 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::FootprintFamily
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::FootprintFamily
9
+ end