noresponse 2.1.7 → 2.1.9

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 (29) hide show
  1. checksums.yaml +4 -4
  2. data/lib/no_response/models/operations/listwebhookdeliveries_request.rb +45 -0
  3. data/lib/no_response/models/operations/listwebhookdeliveries_request.rbi +26 -0
  4. data/lib/no_response/models/operations/listwebhookdeliveries_response.rb +44 -0
  5. data/lib/no_response/models/operations/listwebhookdeliveries_response.rbi +20 -0
  6. data/lib/no_response/models/operations/replaywebhookdelivery_request.rb +37 -0
  7. data/lib/no_response/models/operations/replaywebhookdelivery_request.rbi +26 -0
  8. data/lib/no_response/models/operations/replaywebhookdelivery_response.rb +32 -0
  9. data/lib/no_response/models/operations/replaywebhookdelivery_response.rbi +20 -0
  10. data/lib/no_response/models/operations.rb +4 -0
  11. data/lib/no_response/models/shared/eventtype.rb +18 -0
  12. data/lib/no_response/models/shared/eventtype.rbi +9 -0
  13. data/lib/no_response/models/shared/failure.rb +24 -0
  14. data/lib/no_response/models/shared/failure.rbi +9 -0
  15. data/lib/no_response/models/shared/webhookdeliveryattempt.rb +137 -0
  16. data/lib/no_response/models/shared/webhookdeliveryattempt.rbi +62 -0
  17. data/lib/no_response/models/shared/webhookdeliveryattemptstatus.rb +19 -0
  18. data/lib/no_response/models/shared/webhookdeliveryattemptstatus.rbi +9 -0
  19. data/lib/no_response/models/shared/webhookdeliverylist.rb +56 -0
  20. data/lib/no_response/models/shared/webhookdeliverylist.rbi +26 -0
  21. data/lib/no_response/models/shared/webhookreplay.rb +55 -0
  22. data/lib/no_response/models/shared/webhookreplay.rbi +26 -0
  23. data/lib/no_response/models/shared/webhookreplayrequest.rb +23 -0
  24. data/lib/no_response/models/shared/webhookreplayrequest.rbi +9 -0
  25. data/lib/no_response/models/shared.rb +7 -0
  26. data/lib/no_response/sdkconfiguration.rb +2 -2
  27. data/lib/no_response/wait.rb +25 -6
  28. data/lib/no_response/webhookendpoints.rb +605 -0
  29. metadata +23 -1
@@ -0,0 +1,55 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # The 202 answer of POST /v1/webhooks/{endpoint_id}/deliveries/{event_id}/replay: the event queued to be sent again.
8
+ class WebhookReplay
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ # Opaque id of the endpoint registration.
13
+ field(
14
+ :endpoint_id,
15
+ ::String,
16
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("endpoint_id"), required: true}}
17
+ )
18
+ # The replayed event's id. The receiver sees the same id and body as the first time, with a new NR-Webhook-Timestamp and signature.
19
+ field(
20
+ :event_id,
21
+ ::String,
22
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("event_id"), required: true}}
23
+ )
24
+
25
+ field(
26
+ :event_type,
27
+ Models::Shared::EventType,
28
+ {
29
+ 'format_json': {
30
+ 'letter_case': ::NoResponse::Utils.field_name("event_type"),
31
+ required: true,
32
+ 'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::EventType, false)
33
+ }
34
+ }
35
+ )
36
+
37
+ sig { params(endpoint_id: ::String, event_id: ::String, event_type: Models::Shared::EventType).void }
38
+ def initialize(endpoint_id:, event_id:, event_type:)
39
+ @endpoint_id = endpoint_id
40
+ @event_id = event_id
41
+ @event_type = event_type
42
+ end
43
+
44
+ sig { params(other: T.untyped).returns(T::Boolean) }
45
+ def ==(other)
46
+ return false unless other.is_a?(self.class)
47
+ return false unless @endpoint_id == other.endpoint_id
48
+ return false unless @event_id == other.event_id
49
+ return false unless @event_type == other.event_type
50
+ true
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,26 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::WebhookReplay
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::WebhookReplay
9
+ def endpoint_id
10
+ end
11
+
12
+ def endpoint_id=(str_)
13
+ end
14
+
15
+ def event_id
16
+ end
17
+
18
+ def event_id=(str_)
19
+ end
20
+
21
+ def event_type
22
+ end
23
+
24
+ def event_type=(str_)
25
+ end
26
+ end
@@ -0,0 +1,23 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # POST /v1/webhooks/{endpoint_id}/deliveries/{event_id}/replay body: an empty object.
8
+ class WebhookReplayRequest
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ def initialize
13
+ end
14
+
15
+ sig { params(other: T.untyped).returns(T::Boolean) }
16
+ def ==(other)
17
+ return false unless other.is_a?(self.class)
18
+ true
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,9 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::WebhookReplayRequest
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::WebhookReplayRequest
9
+ end
@@ -37,6 +37,8 @@ module NoResponse
37
37
  autoload :Consistency, "no_response/models/shared/consistency.rb"
38
38
  autoload :ConsistencyValue, "no_response/models/shared/consistencyvalue.rb"
39
39
  autoload :Country, "no_response/models/shared/country.rb"
40
+ autoload :EventType, "no_response/models/shared/eventtype.rb"
41
+ autoload :Failure, "no_response/models/shared/failure.rb"
40
42
  autoload :FailureReason, "no_response/models/shared/failurereason.rb"
41
43
  autoload :Flow, "no_response/models/shared/flow.rb"
42
44
  autoload :Freshness, "no_response/models/shared/freshness.rb"
@@ -86,6 +88,9 @@ module NoResponse
86
88
  autoload :SigningSecret, "no_response/models/shared/signingsecret.rb"
87
89
  autoload :Status, "no_response/models/shared/status.rb"
88
90
  autoload :Transport, "no_response/models/shared/transport.rb"
91
+ autoload :WebhookDeliveryAttempt, "no_response/models/shared/webhookdeliveryattempt.rb"
92
+ autoload :WebhookDeliveryAttemptStatus, "no_response/models/shared/webhookdeliveryattemptstatus.rb"
93
+ autoload :WebhookDeliveryList, "no_response/models/shared/webhookdeliverylist.rb"
89
94
  autoload :WebhookEndpoint, "no_response/models/shared/webhookendpoint.rb"
90
95
  autoload :WebhookEndpointCreated, "no_response/models/shared/webhookendpointcreated.rb"
91
96
  autoload :WebhookEndpointList, "no_response/models/shared/webhookendpointlist.rb"
@@ -93,6 +98,8 @@ module NoResponse
93
98
  autoload :WebhookEndpointState, "no_response/models/shared/webhookendpointstate.rb"
94
99
  autoload :WebhookKeyRotation, "no_response/models/shared/webhookkeyrotation.rb"
95
100
  autoload :WebhookKeyRotationRequest, "no_response/models/shared/webhookkeyrotationrequest.rb"
101
+ autoload :WebhookReplay, "no_response/models/shared/webhookreplay.rb"
102
+ autoload :WebhookReplayRequest, "no_response/models/shared/webhookreplayrequest.rb"
96
103
  autoload :WebhookTest, "no_response/models/shared/webhooktest.rb"
97
104
  autoload :WebhookTestRequest, "no_response/models/shared/webhooktestrequest.rb"
98
105
  autoload :WebhookTestRequestEvent, "no_response/models/shared/webhooktestrequestevent.rb"
@@ -95,9 +95,9 @@ module NoResponse
95
95
 
96
96
  @language = "ruby"
97
97
  @openapi_doc_version = "1"
98
- @sdk_version = "2.1.7"
98
+ @sdk_version = "2.1.9"
99
99
  @gen_version = "internal"
100
- @user_agent = "noresponse-sdk/ruby 2.1.7 internal 1 noresponse"
100
+ @user_agent = "noresponse-sdk/ruby 2.1.9 internal 1 noresponse"
101
101
  end
102
102
 
103
103
  sig { returns([String, T::Hash[Symbol, String]]) }
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- # Wait for a pending assessment. Hand-written beside the generated client.
4
+ # Wait for an assessment to complete. Hand-written beside the generated client.
5
5
 
6
6
  module NoResponse
7
7
  # The assessment was still pending when the wait ran out. last is the
@@ -22,9 +22,12 @@ module NoResponse
22
22
 
23
23
  class << self
24
24
 
25
- # Poll client.assessments.get until the assessment is no longer pending,
25
+ # Poll client.assessments.get until the assessment's status is complete,
26
26
  # sleeping for the Retry-After the API sends (at least 1 s) between
27
- # polls. Raises WaitTimeoutError once timeout seconds have passed.
27
+ # polls. Once timeout seconds have passed it returns a partial answer as
28
+ # it stands, its status still PARTIAL, and raises WaitTimeoutError if the
29
+ # assessment is still pending. A poll cut off by the deadline also
30
+ # returns the last partial answer instead of losing it.
28
31
  def wait(client, assessment_id, **options)
29
32
  poll(client.assessments, assessment_id, **options)
30
33
  end
@@ -34,13 +37,29 @@ module NoResponse
34
37
  raise ArgumentError, 'timeout must be positive' unless timeout.positive?
35
38
 
36
39
  deadline = clock.call + timeout
40
+ last = T.let(nil, T.untyped)
37
41
  loop do
38
42
  remaining_ms = [((deadline - clock.call) * 1000).ceil, 1].max
39
- response = assessments.get(assessment_id: assessment_id, timeout_ms: remaining_ms)
40
- return response.result unless response.result.status == Models::Shared::Status::PENDING
43
+ begin
44
+ response = assessments.get(assessment_id: assessment_id, timeout_ms: remaining_ms)
45
+ rescue Faraday::TimeoutError
46
+ # Each poll is bounded by the time left, so a request timeout here
47
+ # is the wait running out: a partial answer from an earlier poll
48
+ # stands. Anything else, or a timeout before the deadline, raises.
49
+ raise unless clock.call >= deadline && last&.status == Models::Shared::Status::PARTIAL
50
+
51
+ return last
52
+ end
53
+ last = response.result
54
+ status = response.result.status
55
+ return response.result if status == Models::Shared::Status::COMPLETE
41
56
 
42
57
  delay = retry_after(response.headers)
43
- raise WaitTimeoutError.new(assessment_id, response.result) if clock.call + delay > deadline
58
+ if clock.call + delay > deadline
59
+ return response.result if status == Models::Shared::Status::PARTIAL
60
+
61
+ raise WaitTimeoutError.new(assessment_id, response.result)
62
+ end
44
63
 
45
64
  sleeper.call(delay)
46
65
  end