noresponse 5.1.0 → 6.0.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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/lib/no_response/late_results.rb +10 -8
  3. data/lib/no_response/models/shared/account.rb +10 -1
  4. data/lib/no_response/models/shared/account.rbi +6 -0
  5. data/lib/no_response/models/shared/accountdeleted.rb +49 -0
  6. data/lib/no_response/models/shared/accountdeleted.rbi +26 -0
  7. data/lib/no_response/models/shared/accountdeletedevent.rb +70 -0
  8. data/lib/no_response/models/shared/accountdeletedevent.rbi +38 -0
  9. data/lib/no_response/models/shared/accountriskchanged.rb +44 -0
  10. data/lib/no_response/models/shared/accountriskchanged.rbi +20 -0
  11. data/lib/no_response/models/shared/accountriskchangedevent.rb +70 -0
  12. data/lib/no_response/models/shared/accountriskchangedevent.rbi +38 -0
  13. data/lib/no_response/models/shared/assessmentexpired.rb +82 -0
  14. data/lib/no_response/models/shared/assessmentexpired.rbi +38 -0
  15. data/lib/no_response/models/shared/assessmentupdateddata.rb +23 -0
  16. data/lib/no_response/models/shared/assessmentupdateddata.rbi +9 -0
  17. data/lib/no_response/models/shared/assessmentupdatedevent.rb +79 -0
  18. data/lib/no_response/models/shared/assessmentupdatedevent.rbi +38 -0
  19. data/lib/no_response/models/shared/endpointverification.rb +41 -0
  20. data/lib/no_response/models/shared/endpointverification.rbi +20 -0
  21. data/lib/no_response/models/shared/endpointverificationevent.rb +70 -0
  22. data/lib/no_response/models/shared/endpointverificationevent.rbi +38 -0
  23. data/lib/no_response/models/shared/environment.rb +16 -0
  24. data/lib/no_response/models/shared/environment.rbi +9 -0
  25. data/lib/no_response/models/shared/webhookendpointdisabled.rb +49 -0
  26. data/lib/no_response/models/shared/webhookendpointdisabled.rbi +26 -0
  27. data/lib/no_response/models/shared/webhookendpointdisabledevent.rb +70 -0
  28. data/lib/no_response/models/shared/webhookendpointdisabledevent.rbi +38 -0
  29. data/lib/no_response/models/shared/webhookevent.rb +23 -0
  30. data/lib/no_response/models/shared/webhookevent.rbi +9 -0
  31. data/lib/no_response/models/shared/webhookverificationresponse.rb +33 -0
  32. data/lib/no_response/models/shared/webhookverificationresponse.rbi +14 -0
  33. data/lib/no_response/models/shared/workspacedeleted.rb +55 -0
  34. data/lib/no_response/models/shared/workspacedeleted.rbi +26 -0
  35. data/lib/no_response/models/shared/workspacedeletedevent.rb +70 -0
  36. data/lib/no_response/models/shared/workspacedeletedevent.rbi +38 -0
  37. data/lib/no_response/models/shared.rb +16 -0
  38. data/lib/no_response/sdk_hooks/registration.rb +0 -1
  39. data/lib/no_response/sdkconfiguration.rb +2 -2
  40. data/lib/no_response/webhook_verification.rb +170 -0
  41. data/lib/noresponse.rb +2 -0
  42. metadata +34 -2
  43. data/lib/no_response/webhooks.rb +0 -264
@@ -0,0 +1,79 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # The assessment.updated event.
8
+ class AssessmentUpdatedEvent
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ # The event id, equal to the NR-Webhook-Id header and across redeliveries and every endpoint the event fans out to.
13
+ field :id, ::String, {'format_json': {'letter_case': ::NoResponse::Utils.field_name("id"), required: true}}
14
+ # When the event was created. Equal across redeliveries; the signing timestamp header is per delivery.
15
+ field(
16
+ :created_at,
17
+ ::String,
18
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("created_at"), required: true}}
19
+ )
20
+ # The assessment, or the minimal notice that it expired.
21
+ field(
22
+ :data,
23
+ Crystalline::Union.new(Models::Shared::Assessment, Models::Shared::AssessmentExpired),
24
+ {
25
+ 'format_json': {'letter_case': ::NoResponse::Utils.field_name("data"), required: true},
26
+ 'discriminator': "status",
27
+ 'discriminator_mapping': {
28
+ "complete" => Models::Shared::Assessment,
29
+ "partial" => Models::Shared::Assessment,
30
+ "pending" => Models::Shared::Assessment,
31
+ "expired" => Models::Shared::AssessmentExpired
32
+ }
33
+ }
34
+ )
35
+ # Always assessment.updated.
36
+ field :type, ::String, {'format_json': {'letter_case': ::NoResponse::Utils.field_name("type"), required: true}}
37
+ # Present, and true, only on an event sent by POST /v1/webhooks/{endpoint_id}/test: its data is a fixed example assessment, not one of the workspace's, so a receiver acknowledges it and applies nothing. Real events have no test member.
38
+ field(
39
+ :test,
40
+ Crystalline::Nilable.new(Crystalline::Boolean.new),
41
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("test")}}
42
+ )
43
+
44
+ sig {
45
+ params(
46
+ id: ::String,
47
+ created_at: ::String,
48
+ data: T.any(Models::Shared::Assessment, Models::Shared::AssessmentExpired),
49
+ type: ::String,
50
+ test: T.nilable(T::Boolean)
51
+ )
52
+ .void
53
+ }
54
+ def initialize(id:, created_at:, data:, type: "assessment.updated", test: nil)
55
+ @id = id
56
+ @created_at = created_at
57
+ @data = data
58
+ unless type == "assessment.updated"
59
+ raise ArgumentError, "Invalid value for type"
60
+ end
61
+
62
+ @type = "assessment.updated"
63
+ @test = test
64
+ end
65
+
66
+ sig { params(other: T.untyped).returns(T::Boolean) }
67
+ def ==(other)
68
+ return false unless other.is_a?(self.class)
69
+ return false unless @id == other.id
70
+ return false unless @created_at == other.created_at
71
+ return false unless @data == other.data
72
+ return false unless @type == other.type
73
+ return false unless @test == other.test
74
+ true
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,38 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::AssessmentUpdatedEvent
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::AssessmentUpdatedEvent
9
+ def id
10
+ end
11
+
12
+ def id=(str_)
13
+ end
14
+
15
+ def created_at
16
+ end
17
+
18
+ def created_at=(str_)
19
+ end
20
+
21
+ def data
22
+ end
23
+
24
+ def data=(str_)
25
+ end
26
+
27
+ def type
28
+ end
29
+
30
+ def type=(str_)
31
+ end
32
+
33
+ def test
34
+ end
35
+
36
+ def test=(str_)
37
+ end
38
+ end
@@ -0,0 +1,41 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+
8
+ class EndpointVerification
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ # Opaque id of the endpoint registration being verified.
13
+ field(
14
+ :endpoint_id,
15
+ ::String,
16
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("endpoint_id"), required: true}}
17
+ )
18
+ # Endpoint verification nonce: 32 random bytes, unpadded base64url (43 characters). Fresh per verification.
19
+ field(
20
+ :challenge,
21
+ ::String,
22
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("challenge"), required: true}}
23
+ )
24
+
25
+ sig { params(endpoint_id: ::String, challenge: ::String).void }
26
+ def initialize(endpoint_id:, challenge:)
27
+ @endpoint_id = endpoint_id
28
+ @challenge = challenge
29
+ end
30
+
31
+ sig { params(other: T.untyped).returns(T::Boolean) }
32
+ def ==(other)
33
+ return false unless other.is_a?(self.class)
34
+ return false unless @endpoint_id == other.endpoint_id
35
+ return false unless @challenge == other.challenge
36
+ true
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,20 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::EndpointVerification
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::EndpointVerification
9
+ def endpoint_id
10
+ end
11
+
12
+ def endpoint_id=(str_)
13
+ end
14
+
15
+ def challenge
16
+ end
17
+
18
+ def challenge=(str_)
19
+ end
20
+ end
@@ -0,0 +1,70 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # The endpoint.verification event.
8
+ class EndpointVerificationEvent
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ # The event id, equal to the NR-Webhook-Id header and across redeliveries and every endpoint the event fans out to.
13
+ field :id, ::String, {'format_json': {'letter_case': ::NoResponse::Utils.field_name("id"), required: true}}
14
+ # When the event was created. Equal across redeliveries; the signing timestamp header is per delivery.
15
+ field(
16
+ :created_at,
17
+ ::String,
18
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("created_at"), required: true}}
19
+ )
20
+
21
+ field(
22
+ :data,
23
+ Models::Shared::EndpointVerification,
24
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("data"), required: true}}
25
+ )
26
+ # Always endpoint.verification.
27
+ field :type, ::String, {'format_json': {'letter_case': ::NoResponse::Utils.field_name("type"), required: true}}
28
+ # Present, and true, only on an event sent by POST /v1/webhooks/{endpoint_id}/test: its data is a fixed example assessment, not one of the workspace's, so a receiver acknowledges it and applies nothing. Real events have no test member.
29
+ field(
30
+ :test,
31
+ Crystalline::Nilable.new(Crystalline::Boolean.new),
32
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("test")}}
33
+ )
34
+
35
+ sig {
36
+ params(
37
+ id: ::String,
38
+ created_at: ::String,
39
+ data: Models::Shared::EndpointVerification,
40
+ type: ::String,
41
+ test: T.nilable(T::Boolean)
42
+ )
43
+ .void
44
+ }
45
+ def initialize(id:, created_at:, data:, type: "endpoint.verification", test: nil)
46
+ @id = id
47
+ @created_at = created_at
48
+ @data = data
49
+ unless type == "endpoint.verification"
50
+ raise ArgumentError, "Invalid value for type"
51
+ end
52
+
53
+ @type = "endpoint.verification"
54
+ @test = test
55
+ end
56
+
57
+ sig { params(other: T.untyped).returns(T::Boolean) }
58
+ def ==(other)
59
+ return false unless other.is_a?(self.class)
60
+ return false unless @id == other.id
61
+ return false unless @created_at == other.created_at
62
+ return false unless @data == other.data
63
+ return false unless @type == other.type
64
+ return false unless @test == other.test
65
+ true
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,38 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::EndpointVerificationEvent
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::EndpointVerificationEvent
9
+ def id
10
+ end
11
+
12
+ def id=(str_)
13
+ end
14
+
15
+ def created_at
16
+ end
17
+
18
+ def created_at=(str_)
19
+ end
20
+
21
+ def data
22
+ end
23
+
24
+ def data=(str_)
25
+ end
26
+
27
+ def type
28
+ end
29
+
30
+ def type=(str_)
31
+ end
32
+
33
+ def test
34
+ end
35
+
36
+ def test=(str_)
37
+ end
38
+ end
@@ -0,0 +1,16 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # Environment - The environment whose endpoints receive this event: live, or test for the workspace's test environment.
8
+ class Environment < T::Enum
9
+ enums do
10
+ LIVE = new("live")
11
+ TEST = new("test")
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,9 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::Environment
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::Environment
9
+ end
@@ -0,0 +1,49 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # One of the environment's endpoints stopped receiving events: every delivery attempt to it failed from failing_since until disabled_at, 72 hours or more. Its queued deliveries are dropped. Fix the receiver and verify it again with POST /v1/webhooks/{endpoint_id}/test (type endpoint.verification) to resume delivery.
8
+ class WebhookEndpointDisabled
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ # The endpoint that was disabled.
13
+ field(
14
+ :endpoint_id,
15
+ ::String,
16
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("endpoint_id"), required: true}}
17
+ )
18
+ # The first failed attempt of the unbroken failure streak.
19
+ field(
20
+ :failing_since,
21
+ ::String,
22
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("failing_since"), required: true}}
23
+ )
24
+ # When the endpoint was disabled; equal to the event's created_at.
25
+ field(
26
+ :disabled_at,
27
+ ::String,
28
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("disabled_at"), required: true}}
29
+ )
30
+
31
+ sig { params(endpoint_id: ::String, failing_since: ::String, disabled_at: ::String).void }
32
+ def initialize(endpoint_id:, failing_since:, disabled_at:)
33
+ @endpoint_id = endpoint_id
34
+ @failing_since = failing_since
35
+ @disabled_at = disabled_at
36
+ end
37
+
38
+ sig { params(other: T.untyped).returns(T::Boolean) }
39
+ def ==(other)
40
+ return false unless other.is_a?(self.class)
41
+ return false unless @endpoint_id == other.endpoint_id
42
+ return false unless @failing_since == other.failing_since
43
+ return false unless @disabled_at == other.disabled_at
44
+ true
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,26 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::WebhookEndpointDisabled
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::WebhookEndpointDisabled
9
+ def endpoint_id
10
+ end
11
+
12
+ def endpoint_id=(str_)
13
+ end
14
+
15
+ def failing_since
16
+ end
17
+
18
+ def failing_since=(str_)
19
+ end
20
+
21
+ def disabled_at
22
+ end
23
+
24
+ def disabled_at=(str_)
25
+ end
26
+ end
@@ -0,0 +1,70 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # The webhook_endpoint.disabled event.
8
+ class WebhookEndpointDisabledEvent
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ # The event id, equal to the NR-Webhook-Id header and across redeliveries and every endpoint the event fans out to.
13
+ field :id, ::String, {'format_json': {'letter_case': ::NoResponse::Utils.field_name("id"), required: true}}
14
+ # When the event was created. Equal across redeliveries; the signing timestamp header is per delivery.
15
+ field(
16
+ :created_at,
17
+ ::String,
18
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("created_at"), required: true}}
19
+ )
20
+ # One of the environment's endpoints stopped receiving events: every delivery attempt to it failed from failing_since until disabled_at, 72 hours or more. Its queued deliveries are dropped. Fix the receiver and verify it again with POST /v1/webhooks/{endpoint_id}/test (type endpoint.verification) to resume delivery.
21
+ field(
22
+ :data,
23
+ Models::Shared::WebhookEndpointDisabled,
24
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("data"), required: true}}
25
+ )
26
+ # Always webhook_endpoint.disabled.
27
+ field :type, ::String, {'format_json': {'letter_case': ::NoResponse::Utils.field_name("type"), required: true}}
28
+ # Present, and true, only on an event sent by POST /v1/webhooks/{endpoint_id}/test: its data is a fixed example assessment, not one of the workspace's, so a receiver acknowledges it and applies nothing. Real events have no test member.
29
+ field(
30
+ :test,
31
+ Crystalline::Nilable.new(Crystalline::Boolean.new),
32
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("test")}}
33
+ )
34
+
35
+ sig {
36
+ params(
37
+ id: ::String,
38
+ created_at: ::String,
39
+ data: Models::Shared::WebhookEndpointDisabled,
40
+ type: ::String,
41
+ test: T.nilable(T::Boolean)
42
+ )
43
+ .void
44
+ }
45
+ def initialize(id:, created_at:, data:, type: "webhook_endpoint.disabled", test: nil)
46
+ @id = id
47
+ @created_at = created_at
48
+ @data = data
49
+ unless type == "webhook_endpoint.disabled"
50
+ raise ArgumentError, "Invalid value for type"
51
+ end
52
+
53
+ @type = "webhook_endpoint.disabled"
54
+ @test = test
55
+ end
56
+
57
+ sig { params(other: T.untyped).returns(T::Boolean) }
58
+ def ==(other)
59
+ return false unless other.is_a?(self.class)
60
+ return false unless @id == other.id
61
+ return false unless @created_at == other.created_at
62
+ return false unless @data == other.data
63
+ return false unless @type == other.type
64
+ return false unless @test == other.test
65
+ true
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,38 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::WebhookEndpointDisabledEvent
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::WebhookEndpointDisabledEvent
9
+ def id
10
+ end
11
+
12
+ def id=(str_)
13
+ end
14
+
15
+ def created_at
16
+ end
17
+
18
+ def created_at=(str_)
19
+ end
20
+
21
+ def data
22
+ end
23
+
24
+ def data=(str_)
25
+ end
26
+
27
+ def type
28
+ end
29
+
30
+ def type=(str_)
31
+ end
32
+
33
+ def test
34
+ end
35
+
36
+ def test=(str_)
37
+ end
38
+ end
@@ -0,0 +1,23 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # The body of every webhook delivery: {id, type, created_at, data}, where type chooses the shape of data. Deliveries are at least once and unordered: deduplicate on id, and keep an assessment only when its detail.assessment_version is newer than the one you hold. GET /v1/assessments/{assessment_id} stays authoritative.
8
+ class WebhookEvent
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::WebhookEvent
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::WebhookEvent
9
+ end
@@ -0,0 +1,33 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # The body an endpoint returns, with status 200 and Content-Type application/json within 5 seconds, to an endpoint.verification event. A 2xx without the echoed challenge does not verify the endpoint.
8
+ class WebhookVerificationResponse
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ # Endpoint verification nonce: 32 random bytes, unpadded base64url (43 characters). Fresh per verification.
13
+ field(
14
+ :challenge,
15
+ ::String,
16
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("challenge"), required: true}}
17
+ )
18
+
19
+ sig { params(challenge: ::String).void }
20
+ def initialize(challenge:)
21
+ @challenge = challenge
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 @challenge == other.challenge
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::WebhookVerificationResponse
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::WebhookVerificationResponse
9
+ def challenge
10
+ end
11
+
12
+ def challenge=(str_)
13
+ end
14
+ end
@@ -0,0 +1,55 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # Terminal for the receiving endpoint's environment: its workspace was deleted. Every key of the environment already answers 401, its assessments and accounts are gone, and no further event follows. The workspace id is not reused, so a later event naming it cannot arrive.
8
+ class WorkspaceDeleted
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ # The workspace id, which is also its live environment's workspace id; the test environment's is the same id with :test appended. A workspace created through the API is tnt_ and a 26-character ULID.
13
+ field(
14
+ :workspace_id,
15
+ ::String,
16
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("workspace_id"), required: true}}
17
+ )
18
+ # The environment whose endpoints receive this event: live, or test for the workspace's test environment.
19
+ field(
20
+ :environment,
21
+ Models::Shared::Environment,
22
+ {
23
+ 'format_json': {
24
+ 'letter_case': ::NoResponse::Utils.field_name("environment"),
25
+ required: true,
26
+ 'decoder': ::NoResponse::Utils.enum_from_string(Models::Shared::Environment, false)
27
+ }
28
+ }
29
+ )
30
+ # When the deletion took effect, equal to deleted_at in the DELETE answer.
31
+ field(
32
+ :deleted_at,
33
+ ::String,
34
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("deleted_at"), required: true}}
35
+ )
36
+
37
+ sig { params(workspace_id: ::String, environment: Models::Shared::Environment, deleted_at: ::String).void }
38
+ def initialize(workspace_id:, environment:, deleted_at:)
39
+ @workspace_id = workspace_id
40
+ @environment = environment
41
+ @deleted_at = deleted_at
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 @workspace_id == other.workspace_id
48
+ return false unless @environment == other.environment
49
+ return false unless @deleted_at == other.deleted_at
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::WorkspaceDeleted
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::WorkspaceDeleted
9
+ def workspace_id
10
+ end
11
+
12
+ def workspace_id=(str_)
13
+ end
14
+
15
+ def environment
16
+ end
17
+
18
+ def environment=(str_)
19
+ end
20
+
21
+ def deleted_at
22
+ end
23
+
24
+ def deleted_at=(str_)
25
+ end
26
+ end