noresponse 9.4.3 → 9.5.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/accounts.rb +2 -2
- data/lib/no_response/assessments.rb +1 -1
- data/lib/no_response/models/shared/accountdirectorypage.rb +1 -1
- data/lib/no_response/models/shared/accountdirectorypageitem.rb +28 -2
- data/lib/no_response/models/shared/accountdirectorypageitem.rbi +12 -0
- data/lib/no_response/models/shared/accountdirectorysearchrequest.rb +29 -3
- data/lib/no_response/models/shared/accountdirectorysearchrequest.rbi +12 -0
- data/lib/no_response/models/shared/assessmentsearchitem.rb +30 -2
- data/lib/no_response/models/shared/assessmentsearchitem.rbi +12 -0
- data/lib/no_response/models/shared/assessmentsearchrequest.rb +22 -2
- data/lib/no_response/models/shared/assessmentsearchrequest.rbi +12 -0
- data/lib/no_response/models/shared/identifierexpression.rb +47 -0
- data/lib/no_response/models/shared/identifierexpression.rbi +20 -0
- data/lib/no_response/models/shared/identifierexpressionleaf.rb +33 -0
- data/lib/no_response/models/shared/identifierexpressionleaf.rbi +14 -0
- data/lib/no_response/models/shared/identifierexpressionnode.rb +56 -0
- data/lib/no_response/models/shared/identifierexpressionnode.rbi +26 -0
- data/lib/no_response/models/shared/identifierexpressionnodelevelone.rb +56 -0
- data/lib/no_response/models/shared/identifierexpressionnodelevelone.rbi +26 -0
- data/lib/no_response/models/shared/identifierexpressionnodeleveltwo.rb +56 -0
- data/lib/no_response/models/shared/identifierexpressionnodeleveltwo.rbi +26 -0
- data/lib/no_response/models/shared/identifiermatch.rb +105 -0
- data/lib/no_response/models/shared/identifiermatch.rbi +44 -0
- data/lib/no_response/models/shared/identifiersearch.rb +80 -0
- data/lib/no_response/models/shared/identifiersearch.rbi +32 -0
- data/lib/no_response/models/shared/identifiersearchkind.rb +20 -0
- data/lib/no_response/models/shared/identifiersearchkind.rbi +9 -0
- data/lib/no_response/models/shared/identifiertermmatch.rb +114 -0
- data/lib/no_response/models/shared/identifiertermmatch.rbi +50 -0
- data/lib/no_response/models/shared/match.rb +20 -0
- data/lib/no_response/models/shared/match.rbi +9 -0
- data/lib/no_response/models/shared/namespace.rb +18 -0
- data/lib/no_response/models/shared/namespace.rbi +9 -0
- data/lib/no_response/models/shared/provenance.rb +18 -0
- data/lib/no_response/models/shared/provenance.rbi +9 -0
- data/lib/no_response/models/shared/scope_enum.rb +16 -0
- data/lib/no_response/models/shared/scope_enum.rbi +9 -0
- data/lib/no_response/models/shared.rb +13 -0
- data/lib/no_response/sdkconfiguration.rb +2 -2
- metadata +28 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dee6db86ec0159a05801626c6a8a7817f091faaf8ac218d266fca90cabf120cb
|
|
4
|
+
data.tar.gz: '08b0d9a30de21089e9a8db966468cea17ff338d94bcad984e812030a37c57596'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 65cf361ea2a5de4661255601bb382ab2d2f5e140cd3fbd8db249573ac5afd68c46f4cfe43342720c92466102a6661c02e34a0922e0b9284c410330506297aaf5
|
|
7
|
+
data.tar.gz: 37595ccb0e4e33c794a04589f82baaaab47984cd74ab0e7ce50e3bbd696ece2c0d1ccc890a954fd8b5aa331ebe97bb819ac8bfa294ae1cf6c8238811b85e584b
|
data/lib/no_response/accounts.rb
CHANGED
|
@@ -4277,8 +4277,8 @@ module NoResponse
|
|
|
4277
4277
|
.returns(Models::Operations::SearchAccountsResponse)
|
|
4278
4278
|
}
|
|
4279
4279
|
def search(request:, retries: nil, timeout_ms: nil, http_headers: nil)
|
|
4280
|
-
# search - Search distinct accounts by
|
|
4281
|
-
# Search distinct accounts observed in retained assessments in this environment.
|
|
4280
|
+
# search - Search distinct accounts by submitted identifier or account ID
|
|
4281
|
+
# Search distinct accounts observed in retained assessments in this environment. identifier matches an exact, canonical or explicitly selected mailbox form of a submitted email, phone or customer-namespace username. It matches historical retained inputs and returns matched_identifier with the original value and matching assessment. Each row has its newest retained assessment, current account decision when available, retained assessment count, and total distinct-account count. identifier and legacy email are mutually exclusive; account_id and needs_action combine with either using AND. Set needs_action to select accounts with a retained open or in-progress review, or a current review/block account decision without an effective retained account outcome. This filter applies before counting and pagination and adds waiting_for reasons. Current decisions include account list overrides and shared-key scoring and preserve admission holds. Typed identifier search uses stable opaque account order; ordinary and legacy email searches retain newest-seen order. Results are live across pages; each page's items and total share a database snapshot, while current account risk is read separately. Cursors are expiring and bound to scope, operation and filters. Totals are exact below 10000 and capped at 10000. Requires history or investigate authority and identifier-read permission for identifier, identifier_expression or email filtering. needs_action additionally requires management scope. Source-discovered associations are not searched and equality is not verified ownership. identifier_expression combines submitted terms with bounded AND/OR, at most 8 raw terms and 3 group levels. Each node selects exactly one of term, and, or. Groups have 2 to 8 operands. Duplicate normalized terms are idempotent and still count toward the limit. identifier_expression, identifier and email are mutually exclusive. Expression results use matched_identifiers with original submitted witnesses and zero-based depth-first term_index. All satisfied unique terms are returned in first-occurrence order. Cursors bind scope, ordered structure, original values, matching modes and all other filters; changing only page limit is allowed. Required expression scope assessment evaluates the whole expression in one retained submission; scope account allows different retained submissions of the same account to satisfy different terms. Both use stable opaque account ordering and distinct-account counting before pagination.
|
|
4282
4282
|
url, params = @sdk_configuration.get_server_details
|
|
4283
4283
|
base_url = Utils.template_url(url, params)
|
|
4284
4284
|
url = "#{base_url}/v1/accounts/search"
|
|
@@ -1841,7 +1841,7 @@ module NoResponse
|
|
|
1841
1841
|
}
|
|
1842
1842
|
def search(request:, retries: nil, timeout_ms: nil, http_headers: nil)
|
|
1843
1843
|
# search - Search assessments across this environment
|
|
1844
|
-
# Search retained assessments created in [from,to),
|
|
1844
|
+
# Search retained assessments created in [from,to), at most 366 days. identifier directly matches that assessment's submitted email, phone or customer-namespace username using exact, canonical or explicitly selected email mailbox matching. matched_identifier explains the original value and match basis. Legacy email keeps its account-wide mailbox semantics and cannot be combined with identifier. Other filters combine using AND and describe assessment decisions, separate from current account decisions. Each item carries the original submitted identifiers and its first_decision when available. Newest-created order has an assessment-ID tie break. Results are live across pages; each page's total and items use one database snapshot. Totals are exact below 10000 and capped at 10000. Requires history or investigate authority and identifier-read permission for identifier, identifier_expression or email filters; detailed mode also requires detailed permission. No Idempotency-Key. identifier_expression combines submitted terms with bounded AND/OR, at most 8 raw terms and 3 group levels. Each node selects exactly one of term, and, or. Groups have 2 to 8 operands. Duplicate normalized terms are idempotent and still count toward the limit. identifier_expression, identifier and email are mutually exclusive. Expression results use matched_identifiers with original submitted witnesses and zero-based depth-first term_index. All satisfied unique terms are returned in first-occurrence order. Cursors bind scope, ordered structure, original values, matching modes and all other filters; changing only page limit is allowed. Expression scope must be assessment: each returned assessment itself satisfies the complete expression. Scope account is rejected with 400 invalid_request; use account search for historical combinations.
|
|
1845
1845
|
url, params = @sdk_configuration.get_server_details
|
|
1846
1846
|
base_url = Utils.template_url(url, params)
|
|
1847
1847
|
url = "#{base_url}/v1/assessments/search"
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
module NoResponse
|
|
5
5
|
module Models
|
|
6
6
|
module Shared
|
|
7
|
-
#
|
|
7
|
+
# Distinct observed accounts with retained assessments. Typed identifier searches use stable opaque account order, independent of newly submitted assessments; ordinary and legacy email searches use newest-seen order. One repeatable-read database snapshot supplies each page's rows and totals. Pages do not share a snapshot: new matching accounts may appear on a later page or before the cursor and be missed until a fresh search; retention, erasure and changed membership can remove results. Current account decisions are read separately and may advance during a page. Cursors bind the workspace/environment, operation and filters, expire, and cannot cross scopes. Erasure and retention always take precedence over pagination.
|
|
8
8
|
class AccountDirectoryPage
|
|
9
9
|
extend T::Sig
|
|
10
10
|
include Crystalline::MetadataFields
|
|
@@ -39,6 +39,18 @@ module NoResponse
|
|
|
39
39
|
Crystalline::Nilable.new(Models::Shared::Account),
|
|
40
40
|
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("current")}}
|
|
41
41
|
)
|
|
42
|
+
# Why this result matched a typed identifier search. value is the original value submitted in assessment_id. Provenance records a customer submission, not a source discovery or verified ownership. Equality is deterministic and has no inferred confidence score. An account result names its newest retained matching assessment, which can differ from latest.
|
|
43
|
+
field(
|
|
44
|
+
:matched_identifier,
|
|
45
|
+
Crystalline::Nilable.new(Models::Shared::IdentifierMatch),
|
|
46
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("matched_identifier")}}
|
|
47
|
+
)
|
|
48
|
+
# Present only for identifier_expression. All satisfied unique terms, ordered by term_index, with original submitted values and retained assessment witnesses. A duplicate normalized term appears once at its first raw leaf index. The legacy single identifier filter instead returns matched_identifier.
|
|
49
|
+
field(
|
|
50
|
+
:matched_identifiers,
|
|
51
|
+
Crystalline::Nilable.new(Crystalline::Array.new(Models::Shared::IdentifierTermMatch)),
|
|
52
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("matched_identifiers")}}
|
|
53
|
+
)
|
|
42
54
|
|
|
43
55
|
sig {
|
|
44
56
|
params(
|
|
@@ -46,16 +58,28 @@ module NoResponse
|
|
|
46
58
|
latest: Models::Shared::AssessmentRevision,
|
|
47
59
|
assessments: ::Integer,
|
|
48
60
|
waiting_for: T.nilable(T::Array[Models::Shared::WaitingFor]),
|
|
49
|
-
current: T.nilable(Models::Shared::Account)
|
|
61
|
+
current: T.nilable(Models::Shared::Account),
|
|
62
|
+
matched_identifier: T.nilable(Models::Shared::IdentifierMatch),
|
|
63
|
+
matched_identifiers: T.nilable(T::Array[Models::Shared::IdentifierTermMatch])
|
|
50
64
|
)
|
|
51
65
|
.void
|
|
52
66
|
}
|
|
53
|
-
def initialize(
|
|
67
|
+
def initialize(
|
|
68
|
+
account_id:,
|
|
69
|
+
latest:,
|
|
70
|
+
assessments:,
|
|
71
|
+
waiting_for: nil,
|
|
72
|
+
current: nil,
|
|
73
|
+
matched_identifier: nil,
|
|
74
|
+
matched_identifiers: nil
|
|
75
|
+
)
|
|
54
76
|
@account_id = account_id
|
|
55
77
|
@latest = latest
|
|
56
78
|
@assessments = assessments
|
|
57
79
|
@waiting_for = waiting_for
|
|
58
80
|
@current = current
|
|
81
|
+
@matched_identifier = matched_identifier
|
|
82
|
+
@matched_identifiers = matched_identifiers
|
|
59
83
|
end
|
|
60
84
|
|
|
61
85
|
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
@@ -66,6 +90,8 @@ module NoResponse
|
|
|
66
90
|
return false unless @assessments == other.assessments
|
|
67
91
|
return false unless @waiting_for == other.waiting_for
|
|
68
92
|
return false unless @current == other.current
|
|
93
|
+
return false unless @matched_identifier == other.matched_identifier
|
|
94
|
+
return false unless @matched_identifiers == other.matched_identifiers
|
|
69
95
|
true
|
|
70
96
|
end
|
|
71
97
|
end
|
|
@@ -35,4 +35,16 @@ class NoResponse::Models::Shared::AccountDirectoryPageItem
|
|
|
35
35
|
|
|
36
36
|
def current=(str_)
|
|
37
37
|
end
|
|
38
|
+
|
|
39
|
+
def matched_identifier
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def matched_identifier=(str_)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def matched_identifiers
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def matched_identifiers=(str_)
|
|
49
|
+
end
|
|
38
50
|
end
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
module NoResponse
|
|
5
5
|
module Models
|
|
6
6
|
module Shared
|
|
7
|
-
# Bounded distinct-account search for
|
|
7
|
+
# Bounded distinct-account search for one authenticated workspace/environment. identifier matches any retained admitted assessment of an account, including historical submitted values. email preserves the legacy canonical-mailbox filter. identifier and email cannot be combined. All other filters combine using AND. Typed identifier search uses stable opaque account order; ordinary and legacy email searches retain newest-seen ordering. Pages are live, not a cross-page snapshot. Requires history or investigate authority and identifier-read permission for identifier, identifier_expression or email filtering. identifier_expression explicitly chooses scope assessment (one whole matching submission) or account (terms may match different retained submissions of one account). At most 8 raw terms and 3 group levels. Mutually exclusive with identifier and email. Expression search uses the same stable opaque account order as typed identifier search.
|
|
8
8
|
class AccountDirectorySearchRequest
|
|
9
9
|
extend T::Sig
|
|
10
10
|
include Crystalline::MetadataFields
|
|
@@ -21,12 +21,24 @@ module NoResponse
|
|
|
21
21
|
Crystalline::Nilable.new(::String),
|
|
22
22
|
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("email")}}
|
|
23
23
|
)
|
|
24
|
-
# Opaque, expiring cursor bound to
|
|
24
|
+
# Opaque, expiring cursor bound to workspace, environment, operation and all filters, including expression scope, ordered structure and original term values. Keep grouping, operand order, matching modes and values unchanged; an omitted match is equivalent to exact. The page limit may change.
|
|
25
25
|
field(
|
|
26
26
|
:cursor,
|
|
27
27
|
Crystalline::Nilable.new(::String),
|
|
28
28
|
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("cursor")}}
|
|
29
29
|
)
|
|
30
|
+
# One customer-submitted identifier. Defaults to exact comparison of the original submitted value. canonical uses the supported identifier normalisation without an ownership claim: email preserves local-part case, NFC-normalises it and lowercases the domain without removing dots or tags; phone uses international E.164 without extensions or an inferred region; username uses NFC and Unicode case folding within the customer namespace. mailbox is email-only and explicitly selects existing list rules: case-insensitive, remove +tag, and ignore local-part dots at gmail.com and googlemail.com; googlemail.com maps to gmail.com. Username requires namespace customer. Email and phone forbid namespace. Source-discovered identifiers and platform handles are not searched. Unsupported kinds, namespaces, modes and invalid values return 400. Search equality does not establish verified ownership or merge accounts.
|
|
31
|
+
field(
|
|
32
|
+
:identifier,
|
|
33
|
+
Crystalline::Nilable.new(Models::Shared::IdentifierSearch),
|
|
34
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("identifier")}}
|
|
35
|
+
)
|
|
36
|
+
# A bounded AND/OR expression over submitted identifiers. Required scope assessment means the entire expression must match one retained assessment. Scope account permits each term to match a different retained assessment of the same account and is accepted only by account search. Exactly one of term, and or or is allowed at every node. Groups contain 2 to 8 operands, with at most 3 nested group levels and 8 raw term occurrences over the entire expression. A root term is allowed. Duplicate terms with the same kind, match rule, namespace and normalized comparison are idempotent, but count toward the raw limit. Match rules default to exact and preserve the existing identifier contract. Only retained submitted identifiers can satisfy a term. Unknown fields, unsupported scopes and malformed or oversized expressions return 400 invalid_request.
|
|
37
|
+
field(
|
|
38
|
+
:identifier_expression,
|
|
39
|
+
Crystalline::Nilable.new(Models::Shared::IdentifierExpression),
|
|
40
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("identifier_expression")}}
|
|
41
|
+
)
|
|
30
42
|
# Select accounts with a retained open or in-progress review, or a current review/block account decision with no retained effective account outcome. The server applies this filter before counting and pagination. Requires reviews.read as well as history.read for console members; API keys additionally require management.
|
|
31
43
|
field(
|
|
32
44
|
:needs_action,
|
|
@@ -45,15 +57,27 @@ module NoResponse
|
|
|
45
57
|
account_id: T.nilable(::String),
|
|
46
58
|
email: T.nilable(::String),
|
|
47
59
|
cursor: T.nilable(::String),
|
|
60
|
+
identifier: T.nilable(Models::Shared::IdentifierSearch),
|
|
61
|
+
identifier_expression: T.nilable(Models::Shared::IdentifierExpression),
|
|
48
62
|
needs_action: T.nilable(T::Boolean),
|
|
49
63
|
limit: T.nilable(::Integer)
|
|
50
64
|
)
|
|
51
65
|
.void
|
|
52
66
|
}
|
|
53
|
-
def initialize(
|
|
67
|
+
def initialize(
|
|
68
|
+
account_id: nil,
|
|
69
|
+
email: nil,
|
|
70
|
+
cursor: nil,
|
|
71
|
+
identifier: nil,
|
|
72
|
+
identifier_expression: nil,
|
|
73
|
+
needs_action: false,
|
|
74
|
+
limit: 25
|
|
75
|
+
)
|
|
54
76
|
@account_id = account_id
|
|
55
77
|
@email = email
|
|
56
78
|
@cursor = cursor
|
|
79
|
+
@identifier = identifier
|
|
80
|
+
@identifier_expression = identifier_expression
|
|
57
81
|
@needs_action = needs_action
|
|
58
82
|
@limit = limit
|
|
59
83
|
end
|
|
@@ -64,6 +88,8 @@ module NoResponse
|
|
|
64
88
|
return false unless @account_id == other.account_id
|
|
65
89
|
return false unless @email == other.email
|
|
66
90
|
return false unless @cursor == other.cursor
|
|
91
|
+
return false unless @identifier == other.identifier
|
|
92
|
+
return false unless @identifier_expression == other.identifier_expression
|
|
67
93
|
return false unless @needs_action == other.needs_action
|
|
68
94
|
return false unless @limit == other.limit
|
|
69
95
|
true
|
|
@@ -24,6 +24,18 @@ class NoResponse::Models::Shared::AccountDirectorySearchRequest
|
|
|
24
24
|
def cursor=(str_)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
+
def identifier
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def identifier=(str_)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def identifier_expression
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def identifier_expression=(str_)
|
|
37
|
+
end
|
|
38
|
+
|
|
27
39
|
def needs_action
|
|
28
40
|
end
|
|
29
41
|
|
|
@@ -70,6 +70,18 @@ module NoResponse
|
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
)
|
|
73
|
+
# Why this result matched a typed identifier search. value is the original value submitted in assessment_id. Provenance records a customer submission, not a source discovery or verified ownership. Equality is deterministic and has no inferred confidence score. An account result names its newest retained matching assessment, which can differ from latest.
|
|
74
|
+
field(
|
|
75
|
+
:matched_identifier,
|
|
76
|
+
Crystalline::Nilable.new(Models::Shared::IdentifierMatch),
|
|
77
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("matched_identifier")}}
|
|
78
|
+
)
|
|
79
|
+
# Present only for identifier_expression. All satisfied unique terms, ordered by term_index, with original submitted values and retained assessment witnesses. A duplicate normalized term appears once at its first raw leaf index. The legacy single identifier filter instead returns matched_identifier.
|
|
80
|
+
field(
|
|
81
|
+
:matched_identifiers,
|
|
82
|
+
Crystalline::Nilable.new(Crystalline::Array.new(Models::Shared::IdentifierTermMatch)),
|
|
83
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("matched_identifiers")}}
|
|
84
|
+
)
|
|
73
85
|
|
|
74
86
|
sig {
|
|
75
87
|
params(
|
|
@@ -79,11 +91,23 @@ module NoResponse
|
|
|
79
91
|
depth: Models::Shared::Depth,
|
|
80
92
|
detail: Models::Shared::AssessmentDetail,
|
|
81
93
|
schema_version: ::String,
|
|
82
|
-
first_decision: T.nilable(Models::Shared::Decision)
|
|
94
|
+
first_decision: T.nilable(Models::Shared::Decision),
|
|
95
|
+
matched_identifier: T.nilable(Models::Shared::IdentifierMatch),
|
|
96
|
+
matched_identifiers: T.nilable(T::Array[Models::Shared::IdentifierTermMatch])
|
|
83
97
|
)
|
|
84
98
|
.void
|
|
85
99
|
}
|
|
86
|
-
def initialize(
|
|
100
|
+
def initialize(
|
|
101
|
+
id:,
|
|
102
|
+
status:,
|
|
103
|
+
flow:,
|
|
104
|
+
depth:,
|
|
105
|
+
detail:,
|
|
106
|
+
schema_version: "1",
|
|
107
|
+
first_decision: nil,
|
|
108
|
+
matched_identifier: nil,
|
|
109
|
+
matched_identifiers: nil
|
|
110
|
+
)
|
|
87
111
|
@id = id
|
|
88
112
|
@status = status
|
|
89
113
|
@flow = flow
|
|
@@ -95,6 +119,8 @@ module NoResponse
|
|
|
95
119
|
|
|
96
120
|
@schema_version = "1"
|
|
97
121
|
@first_decision = first_decision
|
|
122
|
+
@matched_identifier = matched_identifier
|
|
123
|
+
@matched_identifiers = matched_identifiers
|
|
98
124
|
end
|
|
99
125
|
|
|
100
126
|
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
@@ -107,6 +133,8 @@ module NoResponse
|
|
|
107
133
|
return false unless @detail == other.detail
|
|
108
134
|
return false unless @schema_version == other.schema_version
|
|
109
135
|
return false unless @first_decision == other.first_decision
|
|
136
|
+
return false unless @matched_identifier == other.matched_identifier
|
|
137
|
+
return false unless @matched_identifiers == other.matched_identifiers
|
|
110
138
|
true
|
|
111
139
|
end
|
|
112
140
|
end
|
|
@@ -47,4 +47,16 @@ class NoResponse::Models::Shared::AssessmentSearchItem
|
|
|
47
47
|
|
|
48
48
|
def first_decision=(str_)
|
|
49
49
|
end
|
|
50
|
+
|
|
51
|
+
def matched_identifier
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def matched_identifier=(str_)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def matched_identifiers
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def matched_identifiers=(str_)
|
|
61
|
+
end
|
|
50
62
|
end
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
module NoResponse
|
|
5
5
|
module Models
|
|
6
6
|
module Shared
|
|
7
|
-
# Search retained assessments created in [from,to),
|
|
7
|
+
# Search retained assessments created in [from,to), at most 366 days. identifier matches the submitted value of each returned assessment directly. The legacy email filter keeps its account-wide mailbox semantics and cannot be combined with identifier. Other filters combine using AND and describe assessment decisions, separate from current account decisions. Results use newest-created order with an assessment-ID tie break and are live, not a snapshot across pages. Requires history or investigate authority; identifier, identifier_expression and email filtering also require identifier-read permission. Detailed response mode additionally requires detailed permission. No Idempotency-Key. identifier_expression requires scope assessment and matches the complete expression within each returned submission; account scope returns 400 invalid_request. At most 8 raw terms and 3 group levels. Mutually exclusive with identifier and email.
|
|
8
8
|
class AssessmentSearchRequest
|
|
9
9
|
extend T::Sig
|
|
10
10
|
include Crystalline::MetadataFields
|
|
@@ -57,7 +57,7 @@ module NoResponse
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
)
|
|
60
|
-
# Opaque, expiring cursor bound to
|
|
60
|
+
# Opaque, expiring cursor bound to workspace, environment, operation and all filters, including expression scope, ordered structure and original term values. Keep grouping, operand order, matching modes and values unchanged; an omitted match is equivalent to exact. The page limit may change.
|
|
61
61
|
field(
|
|
62
62
|
:cursor,
|
|
63
63
|
Crystalline::Nilable.new(::String),
|
|
@@ -181,6 +181,18 @@ module NoResponse
|
|
|
181
181
|
Crystalline::Nilable.new(Crystalline::Boolean.new),
|
|
182
182
|
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("changed")}}
|
|
183
183
|
)
|
|
184
|
+
# One customer-submitted identifier. Defaults to exact comparison of the original submitted value. canonical uses the supported identifier normalisation without an ownership claim: email preserves local-part case, NFC-normalises it and lowercases the domain without removing dots or tags; phone uses international E.164 without extensions or an inferred region; username uses NFC and Unicode case folding within the customer namespace. mailbox is email-only and explicitly selects existing list rules: case-insensitive, remove +tag, and ignore local-part dots at gmail.com and googlemail.com; googlemail.com maps to gmail.com. Username requires namespace customer. Email and phone forbid namespace. Source-discovered identifiers and platform handles are not searched. Unsupported kinds, namespaces, modes and invalid values return 400. Search equality does not establish verified ownership or merge accounts.
|
|
185
|
+
field(
|
|
186
|
+
:identifier,
|
|
187
|
+
Crystalline::Nilable.new(Models::Shared::IdentifierSearch),
|
|
188
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("identifier")}}
|
|
189
|
+
)
|
|
190
|
+
# A bounded AND/OR expression over submitted identifiers. Required scope assessment means the entire expression must match one retained assessment. Scope account permits each term to match a different retained assessment of the same account and is accepted only by account search. Exactly one of term, and or or is allowed at every node. Groups contain 2 to 8 operands, with at most 3 nested group levels and 8 raw term occurrences over the entire expression. A root term is allowed. Duplicate terms with the same kind, match rule, namespace and normalized comparison are idempotent, but count toward the raw limit. Match rules default to exact and preserve the existing identifier contract. Only retained submitted identifiers can satisfy a term. Unknown fields, unsupported scopes and malformed or oversized expressions return 400 invalid_request.
|
|
191
|
+
field(
|
|
192
|
+
:identifier_expression,
|
|
193
|
+
Crystalline::Nilable.new(Models::Shared::IdentifierExpression),
|
|
194
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("identifier_expression")}}
|
|
195
|
+
)
|
|
184
196
|
|
|
185
197
|
field(
|
|
186
198
|
:limit,
|
|
@@ -211,6 +223,8 @@ module NoResponse
|
|
|
211
223
|
score_max: T.nilable(::Integer),
|
|
212
224
|
list_match: T.nilable(Models::Shared::ListMatch),
|
|
213
225
|
changed: T.nilable(T::Boolean),
|
|
226
|
+
identifier: T.nilable(Models::Shared::IdentifierSearch),
|
|
227
|
+
identifier_expression: T.nilable(Models::Shared::IdentifierExpression),
|
|
214
228
|
limit: T.nilable(::Integer)
|
|
215
229
|
)
|
|
216
230
|
.void
|
|
@@ -237,6 +251,8 @@ module NoResponse
|
|
|
237
251
|
score_max: nil,
|
|
238
252
|
list_match: nil,
|
|
239
253
|
changed: nil,
|
|
254
|
+
identifier: nil,
|
|
255
|
+
identifier_expression: nil,
|
|
240
256
|
limit: 20
|
|
241
257
|
)
|
|
242
258
|
@from = from
|
|
@@ -260,6 +276,8 @@ module NoResponse
|
|
|
260
276
|
@score_max = score_max
|
|
261
277
|
@list_match = list_match
|
|
262
278
|
@changed = changed
|
|
279
|
+
@identifier = identifier
|
|
280
|
+
@identifier_expression = identifier_expression
|
|
263
281
|
@limit = limit
|
|
264
282
|
end
|
|
265
283
|
|
|
@@ -287,6 +305,8 @@ module NoResponse
|
|
|
287
305
|
return false unless @score_max == other.score_max
|
|
288
306
|
return false unless @list_match == other.list_match
|
|
289
307
|
return false unless @changed == other.changed
|
|
308
|
+
return false unless @identifier == other.identifier
|
|
309
|
+
return false unless @identifier_expression == other.identifier_expression
|
|
290
310
|
return false unless @limit == other.limit
|
|
291
311
|
true
|
|
292
312
|
end
|
|
@@ -132,6 +132,18 @@ class NoResponse::Models::Shared::AssessmentSearchRequest
|
|
|
132
132
|
def changed=(str_)
|
|
133
133
|
end
|
|
134
134
|
|
|
135
|
+
def identifier
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def identifier=(str_)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def identifier_expression
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def identifier_expression=(str_)
|
|
145
|
+
end
|
|
146
|
+
|
|
135
147
|
def limit
|
|
136
148
|
end
|
|
137
149
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
# A bounded AND/OR expression over submitted identifiers. Required scope assessment means the entire expression must match one retained assessment. Scope account permits each term to match a different retained assessment of the same account and is accepted only by account search. Exactly one of term, and or or is allowed at every node. Groups contain 2 to 8 operands, with at most 3 nested group levels and 8 raw term occurrences over the entire expression. A root term is allowed. Duplicate terms with the same kind, match rule, namespace and normalized comparison are idempotent, but count toward the raw limit. Match rules default to exact and preserve the existing identifier contract. Only retained submitted identifiers can satisfy a term. Unknown fields, unsupported scopes and malformed or oversized expressions return 400 invalid_request.
|
|
8
|
+
class IdentifierExpression
|
|
9
|
+
extend T::Sig
|
|
10
|
+
include Crystalline::MetadataFields
|
|
11
|
+
|
|
12
|
+
# assessment requires one submission to satisfy the complete expression. account permits witnesses across retained submissions of one account and is supported only by POST /v1/accounts/search. No default: select scope explicitly.
|
|
13
|
+
field(
|
|
14
|
+
:scope,
|
|
15
|
+
Models::Shared::ScopeEnum,
|
|
16
|
+
{
|
|
17
|
+
'format_json': {
|
|
18
|
+
'letter_case': ::NoResponse::Utils.field_name("scope"),
|
|
19
|
+
required: true,
|
|
20
|
+
'decoder': ::NoResponse::Utils.enum_from_string(Models::Shared::ScopeEnum, false)
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
field(
|
|
26
|
+
:expression,
|
|
27
|
+
Models::Shared::IdentifierExpressionNode,
|
|
28
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("expression"), required: true}}
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
sig { params(scope: Models::Shared::ScopeEnum, expression: Models::Shared::IdentifierExpressionNode).void }
|
|
32
|
+
def initialize(scope:, expression:)
|
|
33
|
+
@scope = scope
|
|
34
|
+
@expression = expression
|
|
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 @scope == other.scope
|
|
41
|
+
return false unless @expression == other.expression
|
|
42
|
+
true
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
class NoResponse::Models::Shared::IdentifierExpression
|
|
5
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class NoResponse::Models::Shared::IdentifierExpression
|
|
9
|
+
def scope
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def scope=(str_)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def expression
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def expression=(str_)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
|
|
8
|
+
class IdentifierExpressionLeaf
|
|
9
|
+
extend T::Sig
|
|
10
|
+
include Crystalline::MetadataFields
|
|
11
|
+
|
|
12
|
+
# One customer-submitted identifier. Defaults to exact comparison of the original submitted value. canonical uses the supported identifier normalisation without an ownership claim: email preserves local-part case, NFC-normalises it and lowercases the domain without removing dots or tags; phone uses international E.164 without extensions or an inferred region; username uses NFC and Unicode case folding within the customer namespace. mailbox is email-only and explicitly selects existing list rules: case-insensitive, remove +tag, and ignore local-part dots at gmail.com and googlemail.com; googlemail.com maps to gmail.com. Username requires namespace customer. Email and phone forbid namespace. Source-discovered identifiers and platform handles are not searched. Unsupported kinds, namespaces, modes and invalid values return 400. Search equality does not establish verified ownership or merge accounts.
|
|
13
|
+
field(
|
|
14
|
+
:term,
|
|
15
|
+
Models::Shared::IdentifierSearch,
|
|
16
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("term"), required: true}}
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
sig { params(term: Models::Shared::IdentifierSearch).void }
|
|
20
|
+
def initialize(term:)
|
|
21
|
+
@term = term
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
25
|
+
def ==(other)
|
|
26
|
+
return false unless other.is_a?(self.class)
|
|
27
|
+
return false unless @term == other.term
|
|
28
|
+
true
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
class NoResponse::Models::Shared::IdentifierExpressionLeaf
|
|
5
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class NoResponse::Models::Shared::IdentifierExpressionLeaf
|
|
9
|
+
def term
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def term=(str_)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
|
|
8
|
+
class IdentifierExpressionNode
|
|
9
|
+
extend T::Sig
|
|
10
|
+
include Crystalline::MetadataFields
|
|
11
|
+
|
|
12
|
+
# One customer-submitted identifier. Defaults to exact comparison of the original submitted value. canonical uses the supported identifier normalisation without an ownership claim: email preserves local-part case, NFC-normalises it and lowercases the domain without removing dots or tags; phone uses international E.164 without extensions or an inferred region; username uses NFC and Unicode case folding within the customer namespace. mailbox is email-only and explicitly selects existing list rules: case-insensitive, remove +tag, and ignore local-part dots at gmail.com and googlemail.com; googlemail.com maps to gmail.com. Username requires namespace customer. Email and phone forbid namespace. Source-discovered identifiers and platform handles are not searched. Unsupported kinds, namespaces, modes and invalid values return 400. Search equality does not establish verified ownership or merge accounts.
|
|
13
|
+
field(
|
|
14
|
+
:term,
|
|
15
|
+
Crystalline::Nilable.new(Models::Shared::IdentifierSearch),
|
|
16
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("term")}}
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
field(
|
|
20
|
+
:and_,
|
|
21
|
+
Crystalline::Nilable.new(Crystalline::Array.new(Models::Shared::IdentifierExpressionNodeLevelTwo)),
|
|
22
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("and")}}
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
field(
|
|
26
|
+
:or_,
|
|
27
|
+
Crystalline::Nilable.new(Crystalline::Array.new(Models::Shared::IdentifierExpressionNodeLevelTwo)),
|
|
28
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("or")}}
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
sig {
|
|
32
|
+
params(
|
|
33
|
+
term: T.nilable(Models::Shared::IdentifierSearch),
|
|
34
|
+
and_: T.nilable(T::Array[Models::Shared::IdentifierExpressionNodeLevelTwo]),
|
|
35
|
+
or_: T.nilable(T::Array[Models::Shared::IdentifierExpressionNodeLevelTwo])
|
|
36
|
+
)
|
|
37
|
+
.void
|
|
38
|
+
}
|
|
39
|
+
def initialize(term: nil, and_: nil, or_: nil)
|
|
40
|
+
@term = term
|
|
41
|
+
@and_ = and_
|
|
42
|
+
@or_ = or_
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
46
|
+
def ==(other)
|
|
47
|
+
return false unless other.is_a?(self.class)
|
|
48
|
+
return false unless @term == other.term
|
|
49
|
+
return false unless @and_ == other.and_
|
|
50
|
+
return false unless @or_ == other.or_
|
|
51
|
+
true
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
class NoResponse::Models::Shared::IdentifierExpressionNode
|
|
5
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class NoResponse::Models::Shared::IdentifierExpressionNode
|
|
9
|
+
def term
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def term=(str_)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def and_
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def and_=(str_)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def or_
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def or_=(str_)
|
|
25
|
+
end
|
|
26
|
+
end
|