noresponse 8.2.0 → 8.2.1
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 +5 -5
- data/lib/no_response/models/shared/assessmentdetail.rb +10 -0
- data/lib/no_response/models/shared/assessmentdetail.rbi +6 -0
- data/lib/no_response/models/shared/sentidentifiers.rb +74 -0
- data/lib/no_response/models/shared/sentidentifiers.rbi +38 -0
- data/lib/no_response/models/shared.rb +1 -0
- data/lib/no_response/sdkconfiguration.rb +2 -2
- metadata +3 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a2de462c63f05c59d55e926053395a45fa2b45c6e10c45aa66f7ade4fc2e0447
|
|
4
|
+
data.tar.gz: 77ff7a7d0b1b602b1a22b9644746277940a5793f938f27f83571fb7b5660f6c7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3050ce89c6a1388e1f1419752a8cd954a608d02757b22f7d941561d996d3b49dec7a2a4409233e20fa96101ab43d59774b93d9ff9200f29ffaec725ccb29237e
|
|
7
|
+
data.tar.gz: e8fc417da076ca6bbef8679ca7671392555ed6c89b31dc5ac7164fb2b46af80a46050796101b3b77da5a43ae4e7d1c6cae2e4693bfcb706ea13ce241ad328d9f
|
data/lib/no_response/accounts.rb
CHANGED
|
@@ -925,7 +925,7 @@ module NoResponse
|
|
|
925
925
|
http_headers: nil
|
|
926
926
|
)
|
|
927
927
|
# list_assessments - Page through one account's unexpired assessments.
|
|
928
|
-
# The account's history: the same page as POST /v1/assessments/query for this account_id, newest first, each at its latest assessment_version. Requires the history scope. Read-only and safe to retry. An account with no assessments answers 200 with empty items. The cursor is opaque and bound to your workspace and the account; a tampered or expired cursor answers 400 invalid_cursor. response_mode=detailed needs the detailed scope. The account_id travels in the URL; use POST /v1/assessments/query to keep it out of access logs.
|
|
928
|
+
# The account's history: the same page as POST /v1/assessments/query for this account_id, newest first, each at its latest assessment_version. Requires the history scope. Read-only and safe to retry. An account with no assessments answers 200 with empty items. The cursor is opaque and bound to your workspace and the account; a tampered or expired cursor answers 400 invalid_cursor. response_mode=detailed needs the detailed scope. Each item's identifiers holds the identifiers its assessment was sent, exactly as received. The account_id travels in the URL; use POST /v1/assessments/query to keep it out of access logs.
|
|
929
929
|
request = Models::Operations::ListAccountAssessmentsRequest.new(
|
|
930
930
|
account_id: account_id,
|
|
931
931
|
limit: limit,
|
|
@@ -3319,7 +3319,7 @@ module NoResponse
|
|
|
3319
3319
|
}
|
|
3320
3320
|
def export(account_id:, response_mode: nil, retries: nil, timeout_ms: nil, http_headers: nil)
|
|
3321
3321
|
# export - Export an account
|
|
3322
|
-
# Retrieve one consistent snapshot of retained customer-accessible records, including assessment revisions, account decisions, feedback, key associations, enforcements and request diagnostics. Secrets, restricted source information, other customers' data and legacy free-text notes are excluded. The same standard/detailed permissions apply. An export exceeding 10000 records or 8 MiB returns export_too_large without a partial result. Historical decisions that were not captured are identified as an exclusion.
|
|
3322
|
+
# Retrieve one consistent snapshot of retained customer-accessible records, including assessment revisions, account decisions, feedback, key associations, enforcements and request diagnostics. Each assessment revision's detail.identifiers holds the identifiers that assessment was sent, exactly as received. Secrets, restricted source information, other customers' data and legacy free-text notes are excluded. The same standard/detailed permissions apply. An export exceeding 10000 records or 8 MiB returns export_too_large without a partial result. Historical decisions that were not captured are identified as an exclusion.
|
|
3323
3323
|
request = Models::Operations::ExportAccountRequest.new(
|
|
3324
3324
|
account_id: account_id,
|
|
3325
3325
|
response_mode: response_mode
|
|
@@ -50,7 +50,7 @@ module NoResponse
|
|
|
50
50
|
}
|
|
51
51
|
def create(body:, idempotency_key: nil, retries: nil, timeout_ms: nil, http_headers: nil)
|
|
52
52
|
# create - Assess identifiers for a signup or gateway decision.
|
|
53
|
-
# Assesses one account creation, login or purchase (flow) and answers with the account's one current risk: account.risk.decision is the decision for this flow (allow, step_up, review or block, where block means your block threshold was reached), and detail holds this assessment's own facts. depth sets how long the answer waits for sources: quick waits only for the fast ones (500 ms), full for the whole budget (3000 ms at most); it defaults to full for account_creation and purchase and quick for login. 200 carries complete or partial, 202 carries pending with Location and Retry-After. While the account's first assessment is pending, account is absent: apply your own fallback for that, 429, 503 or a timeout. NoResponse blocks nothing itself; you decide. Requires the assess scope. Idempotency-Key is optional in the SDK and is bound to the body for 24 hours: the same key with the same body replays the latest assessment with Idempotent-Replayed: true and starts no new work; the same key with a different body answers 409 idempotency_key_reused. response_mode defaults to standard; detailed needs the detailed scope.
|
|
53
|
+
# Assesses one account creation, login or purchase (flow) and answers with the account's one current risk: account.risk.decision is the decision for this flow (allow, step_up, review or block, where block means your block threshold was reached), and detail holds this assessment's own facts. depth sets how long the answer waits for sources: quick waits only for the fast ones (500 ms), full for the whole budget (3000 ms at most); it defaults to full for account_creation and purchase and quick for login. 200 carries complete or partial, 202 carries pending with Location and Retry-After. While the account's first assessment is pending, account is absent: apply your own fallback for that, 429, 503 or a timeout. NoResponse blocks nothing itself; you decide. Requires the assess scope. Idempotency-Key is optional in the SDK and is bound to the body for 24 hours: the same key with the same body replays the latest assessment with Idempotent-Replayed: true and starts no new work; the same key with a different body answers 409 idempotency_key_reused. response_mode defaults to standard; detailed needs the detailed scope. The answer leaves out detail.identifiers: you hold what you sent, and a key with the history scope gets them back with GET.
|
|
54
54
|
request = Models::Operations::CreateAssessmentRequest.new(
|
|
55
55
|
body: body,
|
|
56
56
|
idempotency_key: idempotency_key
|
|
@@ -348,7 +348,7 @@ module NoResponse
|
|
|
348
348
|
}
|
|
349
349
|
def get(assessment_id:, response_mode: nil, retries: nil, timeout_ms: nil, http_headers: nil)
|
|
350
350
|
# get - Poll the authoritative assessment of one assessment.
|
|
351
|
-
# Returns the highest assessment_version, with the account's current risk. Requires the assess or history scope. While status is pending, or partial with a source still running, the response carries Retry-After; poll no faster than it says. Another workspace's assessment, an unknown or expired assessment and a malformed assessment_id all answer 404 not_found. response_mode=detailed needs the detailed scope.
|
|
351
|
+
# Returns the highest assessment_version, with the account's current risk. Requires the assess or history scope. While status is pending, or partial with a source still running, the response carries Retry-After; poll no faster than it says. Another workspace's assessment, an unknown or expired assessment and a malformed assessment_id all answer 404 not_found. response_mode=detailed needs the detailed scope. A key with the history scope also gets detail.identifiers, the identifiers the assessment was sent, exactly as received.
|
|
352
352
|
request = Models::Operations::GetAssessmentRequest.new(
|
|
353
353
|
assessment_id: assessment_id,
|
|
354
354
|
response_mode: response_mode
|
|
@@ -1232,7 +1232,7 @@ module NoResponse
|
|
|
1232
1232
|
}
|
|
1233
1233
|
def query(request:, retries: nil, timeout_ms: nil, http_headers: nil)
|
|
1234
1234
|
# query - Page through one account's unexpired assessments.
|
|
1235
|
-
# History is a POST with account_id in the body so an account identifier stays out of URLs and access logs. Requires the history scope. Read-only and safe to retry. Newest first, each at its latest assessment_version. An account with no assessments answers 200 with empty items. The cursor is opaque and bound to your workspace and the account; a tampered or expired cursor answers 400 invalid_cursor. response_mode=detailed needs the detailed scope.
|
|
1235
|
+
# History is a POST with account_id in the body so an account identifier stays out of URLs and access logs. Requires the history scope. Read-only and safe to retry. Newest first, each at its latest assessment_version. An account with no assessments answers 200 with empty items. The cursor is opaque and bound to your workspace and the account; a tampered or expired cursor answers 400 invalid_cursor. response_mode=detailed needs the detailed scope. Each item's identifiers holds the identifiers its assessment was sent, exactly as received.
|
|
1236
1236
|
url, params = @sdk_configuration.get_server_details
|
|
1237
1237
|
base_url = Utils.template_url(url, params)
|
|
1238
1238
|
url = "#{base_url}/v1/assessments/query"
|
|
@@ -1548,7 +1548,7 @@ module NoResponse
|
|
|
1548
1548
|
}
|
|
1549
1549
|
def search(request:, retries: nil, timeout_ms: nil, http_headers: nil)
|
|
1550
1550
|
# search - Search assessments across this environment
|
|
1551
|
-
# Search retained assessments created in [from,to), over at most 366 days. Filters use each assessment decision, rather than the current account decision. Results can change between pages. Keep the assessment version to retrieve the exact decision later. This read does not require an idempotency key.
|
|
1551
|
+
# Search retained assessments created in [from,to), over at most 366 days. Filters use each assessment decision, rather than the current account decision. Results can change between pages. Keep the assessment version to retrieve the exact decision later. Each item's detail.identifiers holds the identifiers its assessment was sent, exactly as received. This read does not require an idempotency key.
|
|
1552
1552
|
url, params = @sdk_configuration.get_server_details
|
|
1553
1553
|
base_url = Utils.template_url(url, params)
|
|
1554
1554
|
url = "#{base_url}/v1/assessments/search"
|
|
@@ -1843,7 +1843,7 @@ module NoResponse
|
|
|
1843
1843
|
}
|
|
1844
1844
|
def retrieve_version(assessment_id:, version:, response_mode: nil, retries: nil, timeout_ms: nil, http_headers: nil)
|
|
1845
1845
|
# retrieve_version - Retrieve an exact assessment revision
|
|
1846
|
-
# Retrieve a retained assessment version with its original decision, policy, flow and depth. This response excludes the current account decision. Current retention and response-mode permissions still apply.
|
|
1846
|
+
# Retrieve a retained assessment version with its original decision, policy, flow and depth. This response excludes the current account decision. Current retention and response-mode permissions still apply. detail.identifiers holds the identifiers the assessment was sent, exactly as received.
|
|
1847
1847
|
request = Models::Operations::GetAssessmentVersionRequest.new(
|
|
1848
1848
|
assessment_id: assessment_id,
|
|
1849
1849
|
version: version,
|
|
@@ -93,6 +93,12 @@ module NoResponse
|
|
|
93
93
|
::String,
|
|
94
94
|
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("schema_version"), required: true}}
|
|
95
95
|
)
|
|
96
|
+
# The identifiers an assessment was sent: each member of the request's identifiers object exactly as received, before the server normalised it (the email domain keeps its case, the name its Unicode form). A member the request did not send is absent. NoResponse keeps them encrypted under the workspace's own key, does not index or log them, and deletes them with the assessment: on DELETE of the assessment or its account, at its expires_at, and with the workspace.
|
|
97
|
+
field(
|
|
98
|
+
:identifiers,
|
|
99
|
+
Crystalline::Nilable.new(Models::Shared::SentIdentifiers),
|
|
100
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("identifiers")}}
|
|
101
|
+
)
|
|
96
102
|
# An optional provider correlation id, echoed back. It is not an idempotency key. Refuses an exact-shape JWT or a bare 40, 64 or 128 character hex digest; a UUID is accepted.
|
|
97
103
|
field(
|
|
98
104
|
:request_id,
|
|
@@ -155,6 +161,7 @@ module NoResponse
|
|
|
155
161
|
expires_at: ::String,
|
|
156
162
|
timing: Models::Shared::AssessmentDetailTiming,
|
|
157
163
|
schema_version: ::String,
|
|
164
|
+
identifiers: T.nilable(Models::Shared::SentIdentifiers),
|
|
158
165
|
request_id: T.nilable(::String),
|
|
159
166
|
recommendation: T.nilable(Models::Shared::Recommendation),
|
|
160
167
|
risk: T.nilable(Models::Shared::Risk),
|
|
@@ -178,6 +185,7 @@ module NoResponse
|
|
|
178
185
|
expires_at:,
|
|
179
186
|
timing:,
|
|
180
187
|
schema_version: "1",
|
|
188
|
+
identifiers: nil,
|
|
181
189
|
request_id: nil,
|
|
182
190
|
recommendation: nil,
|
|
183
191
|
risk: nil,
|
|
@@ -202,6 +210,7 @@ module NoResponse
|
|
|
202
210
|
end
|
|
203
211
|
|
|
204
212
|
@schema_version = "1"
|
|
213
|
+
@identifiers = identifiers
|
|
205
214
|
@request_id = request_id
|
|
206
215
|
@recommendation = recommendation
|
|
207
216
|
@risk = risk
|
|
@@ -230,6 +239,7 @@ module NoResponse
|
|
|
230
239
|
return false unless @expires_at == other.expires_at
|
|
231
240
|
return false unless @timing == other.timing
|
|
232
241
|
return false unless @schema_version == other.schema_version
|
|
242
|
+
return false unless @identifiers == other.identifiers
|
|
233
243
|
return false unless @request_id == other.request_id
|
|
234
244
|
return false unless @recommendation == other.recommendation
|
|
235
245
|
return false unless @risk == other.risk
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
# The identifiers an assessment was sent: each member of the request's identifiers object exactly as received, before the server normalised it (the email domain keeps its case, the name its Unicode form). A member the request did not send is absent. NoResponse keeps them encrypted under the workspace's own key, does not index or log them, and deletes them with the assessment: on DELETE of the assessment or its account, at its expires_at, and with the workspace.
|
|
8
|
+
class SentIdentifiers
|
|
9
|
+
extend T::Sig
|
|
10
|
+
include Crystalline::MetadataFields
|
|
11
|
+
|
|
12
|
+
# identifiers.email as the request sent it.
|
|
13
|
+
field(
|
|
14
|
+
:email,
|
|
15
|
+
Crystalline::Nilable.new(::String),
|
|
16
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("email")}}
|
|
17
|
+
)
|
|
18
|
+
# identifiers.username as the request sent it.
|
|
19
|
+
field(
|
|
20
|
+
:username,
|
|
21
|
+
Crystalline::Nilable.new(::String),
|
|
22
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("username")}}
|
|
23
|
+
)
|
|
24
|
+
# identifiers.phone as the request sent it.
|
|
25
|
+
field(
|
|
26
|
+
:phone,
|
|
27
|
+
Crystalline::Nilable.new(::String),
|
|
28
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("phone")}}
|
|
29
|
+
)
|
|
30
|
+
# identifiers.name as the request sent it, before NFC normalisation.
|
|
31
|
+
field(
|
|
32
|
+
:name,
|
|
33
|
+
Crystalline::Nilable.new(::String),
|
|
34
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("name")}}
|
|
35
|
+
)
|
|
36
|
+
# identifiers.ip as the request sent it.
|
|
37
|
+
field(
|
|
38
|
+
:ip,
|
|
39
|
+
Crystalline::Nilable.new(::String),
|
|
40
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("ip")}}
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
sig {
|
|
44
|
+
params(
|
|
45
|
+
email: T.nilable(::String),
|
|
46
|
+
username: T.nilable(::String),
|
|
47
|
+
phone: T.nilable(::String),
|
|
48
|
+
name: T.nilable(::String),
|
|
49
|
+
ip: T.nilable(::String)
|
|
50
|
+
)
|
|
51
|
+
.void
|
|
52
|
+
}
|
|
53
|
+
def initialize(email: nil, username: nil, phone: nil, name: nil, ip: nil)
|
|
54
|
+
@email = email
|
|
55
|
+
@username = username
|
|
56
|
+
@phone = phone
|
|
57
|
+
@name = name
|
|
58
|
+
@ip = ip
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
62
|
+
def ==(other)
|
|
63
|
+
return false unless other.is_a?(self.class)
|
|
64
|
+
return false unless @email == other.email
|
|
65
|
+
return false unless @username == other.username
|
|
66
|
+
return false unless @phone == other.phone
|
|
67
|
+
return false unless @name == other.name
|
|
68
|
+
return false unless @ip == other.ip
|
|
69
|
+
true
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
class NoResponse::Models::Shared::SentIdentifiers
|
|
5
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class NoResponse::Models::Shared::SentIdentifiers
|
|
9
|
+
def email
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def email=(str_)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def username
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def username=(str_)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def phone
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def phone=(str_)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def name
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def name=(str_)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def ip
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def ip=(str_)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -157,6 +157,7 @@ module NoResponse
|
|
|
157
157
|
autoload :RiskSummaryPhone, "no_response/models/shared/risksummaryphone.rb"
|
|
158
158
|
autoload :RiskSummaryUsername, "no_response/models/shared/risksummaryusername.rb"
|
|
159
159
|
autoload :Security, "no_response/models/shared/security.rb"
|
|
160
|
+
autoload :SentIdentifiers, "no_response/models/shared/sentidentifiers.rb"
|
|
160
161
|
autoload :Settings, "no_response/models/shared/settings.rb"
|
|
161
162
|
autoload :SettingsFlows, "no_response/models/shared/settingsflows.rb"
|
|
162
163
|
autoload :SettingsRequest, "no_response/models/shared/settingsrequest.rb"
|
|
@@ -95,9 +95,9 @@ module NoResponse
|
|
|
95
95
|
|
|
96
96
|
@language = "ruby"
|
|
97
97
|
@openapi_doc_version = "1"
|
|
98
|
-
@sdk_version = "8.2.
|
|
98
|
+
@sdk_version = "8.2.1"
|
|
99
99
|
@gen_version = "internal"
|
|
100
|
-
@user_agent = "noresponse-sdk/ruby 8.2.
|
|
100
|
+
@user_agent = "noresponse-sdk/ruby 8.2.1 internal 1 noresponse"
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
sig { returns([String, T::Hash[Symbol, String]]) }
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: noresponse
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 8.2.
|
|
4
|
+
version: 8.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- NoResponse
|
|
@@ -757,6 +757,8 @@ files:
|
|
|
757
757
|
- lib/no_response/models/shared/risksummaryusername.rbi
|
|
758
758
|
- lib/no_response/models/shared/security.rb
|
|
759
759
|
- lib/no_response/models/shared/security.rbi
|
|
760
|
+
- lib/no_response/models/shared/sentidentifiers.rb
|
|
761
|
+
- lib/no_response/models/shared/sentidentifiers.rbi
|
|
760
762
|
- lib/no_response/models/shared/settings.rb
|
|
761
763
|
- lib/no_response/models/shared/settings.rbi
|
|
762
764
|
- lib/no_response/models/shared/settingsflows.rb
|