diff --git a/.release-please-manifest.json b/.release-please-manifest.json index cff01f2..b258565 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.15.0" + ".": "2.16.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index a8430a3..5b8da89 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 27 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/moderation-api/moderation-api-6fe842e0549fd5b4fdb1cca0bf44fa9f71a107ca98eb30a9bb3e4d3c2adeaca9.yml -openapi_spec_hash: ee56658b235950cbf3808b56ddde4919 -config_hash: 13d10207114afb65f7ac4e21f4c0e358 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/moderation-api/moderation-api-5d59d9b7fffd1ac6f329a62fdc42c97bfa7821168eeea0d686a2d48d90963c34.yml +openapi_spec_hash: 61cd471624938b233f02dc17416946f2 +config_hash: 9d144cc6c49d3fd53e5b4472c1e22165 diff --git a/CHANGELOG.md b/CHANGELOG.md index a86bedb..b6c70d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## 2.16.0 (2026-05-08) + +Full Changelog: [v2.15.0...v2.16.0](https://github.com/moderation-api/sdk-ruby/compare/v2.15.0...v2.16.0) + +### Features + +* **api:** api update ([b84cbe4](https://github.com/moderation-api/sdk-ruby/commit/b84cbe4d456abf5ede25c5754295f498daa8b3ac)) +* **api:** manual updates ([0293cc9](https://github.com/moderation-api/sdk-ruby/commit/0293cc979a8cae07a2b6a8fc12c34d882ce0337a)) + ## 2.15.0 (2026-05-06) Full Changelog: [v2.14.0...v2.15.0](https://github.com/moderation-api/sdk-ruby/compare/v2.14.0...v2.15.0) diff --git a/Gemfile.lock b/Gemfile.lock index 7b50043..b2ecd78 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -11,7 +11,7 @@ GIT PATH remote: . specs: - moderation_api (2.15.0) + moderation_api (2.16.0) cgi connection_pool diff --git a/README.md b/README.md index 967fd67..d78966d 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ To use this gem, install via Bundler by adding the following to your application ```ruby -gem "moderation_api", "~> 2.15.0" +gem "moderation_api", "~> 2.16.0" ``` diff --git a/lib/moderation_api.rb b/lib/moderation_api.rb index 9d16daa..7310ade 100644 --- a/lib/moderation_api.rb +++ b/lib/moderation_api.rb @@ -94,6 +94,7 @@ require_relative "moderation_api/models/queue_get_stats_response" require_relative "moderation_api/models/queue_retrieve_params" require_relative "moderation_api/models/queue_retrieve_response" +require_relative "moderation_api/models/webhook_event" require_relative "moderation_api/models/wordlist/word_add_params" require_relative "moderation_api/models/wordlist/word_add_response" require_relative "moderation_api/models/wordlist/word_remove_params" diff --git a/lib/moderation_api/internal/type/union.rb b/lib/moderation_api/internal/type/union.rb index 0b863fe..39c4da9 100644 --- a/lib/moderation_api/internal/type/union.rb +++ b/lib/moderation_api/internal/type/union.rb @@ -4,6 +4,31 @@ module ModerationAPI module Internal module Type # @api private + # + # @example + # # `webhook_event` is a `ModerationAPI::WebhookEvent` + # case webhook_event + # when ModerationAPI::WebhookEvent::AuthorBlocked + # puts(webhook_event.id) + # when ModerationAPI::WebhookEvent::AuthorUnblocked + # puts(webhook_event.api_version) + # when ModerationAPI::WebhookEvent::AuthorSuspended + # puts(webhook_event.created) + # else + # puts(webhook_event) + # end + # + # @example + # case webhook_event + # in {type: :"author.blocked", id: id, api_version: api_version, created: created} + # puts(id) + # in {type: :"author.unblocked", id: id, api_version: api_version, created: created} + # puts(api_version) + # in {type: :"author.suspended", id: id, api_version: api_version, created: created} + # puts(created) + # else + # puts(webhook_event) + # end module Union include ModerationAPI::Internal::Type::Converter include ModerationAPI::Internal::Util::SorbetRuntimeSupport diff --git a/lib/moderation_api/models.rb b/lib/moderation_api/models.rb index f768859..38b9fb1 100644 --- a/lib/moderation_api/models.rb +++ b/lib/moderation_api/models.rb @@ -78,6 +78,8 @@ module ModerationAPI QueueRetrieveParams = ModerationAPI::Models::QueueRetrieveParams + WebhookEvent = ModerationAPI::Models::WebhookEvent + Wordlist = ModerationAPI::Models::Wordlist WordlistGetEmbeddingStatusParams = ModerationAPI::Models::WordlistGetEmbeddingStatusParams diff --git a/lib/moderation_api/models/action_create_params.rb b/lib/moderation_api/models/action_create_params.rb index 320b81c..465536e 100644 --- a/lib/moderation_api/models/action_create_params.rb +++ b/lib/moderation_api/models/action_create_params.rb @@ -85,14 +85,7 @@ class ActionCreateParams < ModerationAPI::Internal::Type::BaseModel # @return [Boolean, nil] optional :value_required, ModerationAPI::Internal::Type::Boolean, api_name: :valueRequired - # @!attribute webhooks - # The action's webhooks. - # - # @return [Array, nil] - optional :webhooks, - -> { ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::ActionCreateParams::Webhook] } - - # @!method initialize(name:, built_in: nil, description: nil, filter_in_queue_ids: nil, free_text: nil, key: nil, position: nil, possible_values: nil, queue_behaviour: nil, type: nil, value_required: nil, webhooks: nil, request_options: {}) + # @!method initialize(name:, built_in: nil, description: nil, filter_in_queue_ids: nil, free_text: nil, key: nil, position: nil, possible_values: nil, queue_behaviour: nil, type: nil, value_required: nil, request_options: {}) # Some parameter documentations has been truncated, see # {ModerationAPI::Models::ActionCreateParams} for more details. # @@ -118,8 +111,6 @@ class ActionCreateParams < ModerationAPI::Internal::Type::BaseModel # # @param value_required [Boolean] Whether the action requires a value to be executed. # - # @param webhooks [Array] The action's webhooks. - # # @param request_options [ModerationAPI::RequestOptions, Hash{Symbol=>Object}] # Show the action in all queues, selected queues or no queues (to use via API @@ -177,41 +168,6 @@ module Type # @!method self.values # @return [Array] end - - class Webhook < ModerationAPI::Internal::Type::BaseModel - # @!attribute name - # The webhook's name, used to identify it in the dashboard - # - # @return [String] - required :name, String - - # @!attribute url - # The webhook's URL. We'll call this URL when the event occurs. - # - # @return [String] - required :url, String - - # @!attribute id - # ID of an existing webhook or undefined if this is a new webhook. - # - # @return [String, nil] - optional :id, String - - # @!attribute description - # The webhook's description - # - # @return [String, nil] - optional :description, String, nil?: true - - # @!method initialize(name:, url:, id: nil, description: nil) - # @param name [String] The webhook's name, used to identify it in the dashboard - # - # @param url [String] The webhook's URL. We'll call this URL when the event occurs. - # - # @param id [String] ID of an existing webhook or undefined if this is a new webhook. - # - # @param description [String, nil] The webhook's description - end end end end diff --git a/lib/moderation_api/models/action_list_response.rb b/lib/moderation_api/models/action_list_response.rb index dc45936..ad7d7f2 100644 --- a/lib/moderation_api/models/action_list_response.rb +++ b/lib/moderation_api/models/action_list_response.rb @@ -73,13 +73,6 @@ class ActionListResponseItem < ModerationAPI::Internal::Type::BaseModel # @return [Boolean] required :value_required, ModerationAPI::Internal::Type::Boolean, api_name: :valueRequired - # @!attribute webhooks - # The action's webhooks. - # - # @return [Array] - required :webhooks, - -> { ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::Models::ActionListResponseItem::Webhook] } - # @!attribute description # The description of the action. # @@ -98,7 +91,7 @@ class ActionListResponseItem < ModerationAPI::Internal::Type::BaseModel # @return [Symbol, ModerationAPI::Models::ActionListResponseItem::Type, nil] optional :type, enum: -> { ModerationAPI::Models::ActionListResponseItem::Type }, nil?: true - # @!method initialize(id:, built_in:, created_at:, filter_in_queue_ids:, free_text:, name:, position:, possible_values:, queue_behaviour:, value_required:, webhooks:, description: nil, key: nil, type: nil) + # @!method initialize(id:, built_in:, created_at:, filter_in_queue_ids:, free_text:, name:, position:, possible_values:, queue_behaviour:, value_required:, description: nil, key: nil, type: nil) # Some parameter documentations has been truncated, see # {ModerationAPI::Models::ActionListResponseItem} for more details. # @@ -122,8 +115,6 @@ class ActionListResponseItem < ModerationAPI::Internal::Type::BaseModel # # @param value_required [Boolean] Whether the action requires a value to be executed. # - # @param webhooks [Array] The action's webhooks. - # # @param description [String, nil] The description of the action. # # @param key [String, nil] User defined key of the action. @@ -171,53 +162,6 @@ module QueueBehaviour # @return [Array] end - class Webhook < ModerationAPI::Internal::Type::BaseModel - # @!attribute id - # The ID of the webhook. - # - # @return [String] - required :id, String - - # @!attribute name - # The webhook's name, used to identify it in the dashboard - # - # @return [String] - required :name, String - - # @!attribute url - # The webhook's URL. We'll call this URL when the event occurs. - # - # @return [String] - required :url, String - - # @!attribute description - # The webhook's description - # - # @return [String, nil] - optional :description, String, nil?: true - - # @!attribute moderation_action_id - # The ID of the moderation action to trigger the webhook on. Only used for - # moderation action webhooks. - # - # @return [String, nil] - optional :moderation_action_id, String, api_name: :moderationActionId, nil?: true - - # @!method initialize(id:, name:, url:, description: nil, moderation_action_id: nil) - # Some parameter documentations has been truncated, see - # {ModerationAPI::Models::ActionListResponseItem::Webhook} for more details. - # - # @param id [String] The ID of the webhook. - # - # @param name [String] The webhook's name, used to identify it in the dashboard - # - # @param url [String] The webhook's URL. We'll call this URL when the event occurs. - # - # @param description [String, nil] The webhook's description - # - # @param moderation_action_id [String, nil] The ID of the moderation action to trigger the webhook on. Only used for moderat - end - # The type of the action. # # @see ModerationAPI::Models::ActionListResponseItem#type diff --git a/lib/moderation_api/models/action_retrieve_response.rb b/lib/moderation_api/models/action_retrieve_response.rb index 03de10f..847b0c1 100644 --- a/lib/moderation_api/models/action_retrieve_response.rb +++ b/lib/moderation_api/models/action_retrieve_response.rb @@ -74,13 +74,6 @@ class ActionRetrieveResponse < ModerationAPI::Internal::Type::BaseModel # @return [Boolean] required :value_required, ModerationAPI::Internal::Type::Boolean, api_name: :valueRequired - # @!attribute webhooks - # The action's webhooks. - # - # @return [Array] - required :webhooks, - -> { ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::Models::ActionRetrieveResponse::Webhook] } - # @!attribute description # The description of the action. # @@ -99,7 +92,7 @@ class ActionRetrieveResponse < ModerationAPI::Internal::Type::BaseModel # @return [Symbol, ModerationAPI::Models::ActionRetrieveResponse::Type, nil] optional :type, enum: -> { ModerationAPI::Models::ActionRetrieveResponse::Type }, nil?: true - # @!method initialize(id:, built_in:, created_at:, filter_in_queue_ids:, free_text:, name:, position:, possible_values:, queue_behaviour:, value_required:, webhooks:, description: nil, key: nil, type: nil) + # @!method initialize(id:, built_in:, created_at:, filter_in_queue_ids:, free_text:, name:, position:, possible_values:, queue_behaviour:, value_required:, description: nil, key: nil, type: nil) # Some parameter documentations has been truncated, see # {ModerationAPI::Models::ActionRetrieveResponse} for more details. # @@ -123,8 +116,6 @@ class ActionRetrieveResponse < ModerationAPI::Internal::Type::BaseModel # # @param value_required [Boolean] Whether the action requires a value to be executed. # - # @param webhooks [Array] The action's webhooks. - # # @param description [String, nil] The description of the action. # # @param key [String, nil] User defined key of the action. @@ -172,53 +163,6 @@ module QueueBehaviour # @return [Array] end - class Webhook < ModerationAPI::Internal::Type::BaseModel - # @!attribute id - # The ID of the webhook. - # - # @return [String] - required :id, String - - # @!attribute name - # The webhook's name, used to identify it in the dashboard - # - # @return [String] - required :name, String - - # @!attribute url - # The webhook's URL. We'll call this URL when the event occurs. - # - # @return [String] - required :url, String - - # @!attribute description - # The webhook's description - # - # @return [String, nil] - optional :description, String, nil?: true - - # @!attribute moderation_action_id - # The ID of the moderation action to trigger the webhook on. Only used for - # moderation action webhooks. - # - # @return [String, nil] - optional :moderation_action_id, String, api_name: :moderationActionId, nil?: true - - # @!method initialize(id:, name:, url:, description: nil, moderation_action_id: nil) - # Some parameter documentations has been truncated, see - # {ModerationAPI::Models::ActionRetrieveResponse::Webhook} for more details. - # - # @param id [String] The ID of the webhook. - # - # @param name [String] The webhook's name, used to identify it in the dashboard - # - # @param url [String] The webhook's URL. We'll call this URL when the event occurs. - # - # @param description [String, nil] The webhook's description - # - # @param moderation_action_id [String, nil] The ID of the moderation action to trigger the webhook on. Only used for moderat - end - # The type of the action. # # @see ModerationAPI::Models::ActionRetrieveResponse#type diff --git a/lib/moderation_api/models/action_update_params.rb b/lib/moderation_api/models/action_update_params.rb index 7116330..75f88d8 100644 --- a/lib/moderation_api/models/action_update_params.rb +++ b/lib/moderation_api/models/action_update_params.rb @@ -91,14 +91,7 @@ class ActionUpdateParams < ModerationAPI::Internal::Type::BaseModel # @return [Boolean, nil] optional :value_required, ModerationAPI::Internal::Type::Boolean, api_name: :valueRequired - # @!attribute webhooks - # The action's webhooks. - # - # @return [Array, nil] - optional :webhooks, - -> { ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::ActionUpdateParams::Webhook] } - - # @!method initialize(id:, built_in: nil, description: nil, filter_in_queue_ids: nil, free_text: nil, key: nil, name: nil, position: nil, possible_values: nil, queue_behaviour: nil, type: nil, value_required: nil, webhooks: nil, request_options: {}) + # @!method initialize(id:, built_in: nil, description: nil, filter_in_queue_ids: nil, free_text: nil, key: nil, name: nil, position: nil, possible_values: nil, queue_behaviour: nil, type: nil, value_required: nil, request_options: {}) # Some parameter documentations has been truncated, see # {ModerationAPI::Models::ActionUpdateParams} for more details. # @@ -126,8 +119,6 @@ class ActionUpdateParams < ModerationAPI::Internal::Type::BaseModel # # @param value_required [Boolean] Whether the action requires a value to be executed. # - # @param webhooks [Array] The action's webhooks. - # # @param request_options [ModerationAPI::RequestOptions, Hash{Symbol=>Object}] # Show the action in all queues, selected queues or no queues (to use via API @@ -185,41 +176,6 @@ module Type # @!method self.values # @return [Array] end - - class Webhook < ModerationAPI::Internal::Type::BaseModel - # @!attribute name - # The webhook's name, used to identify it in the dashboard - # - # @return [String] - required :name, String - - # @!attribute url - # The webhook's URL. We'll call this URL when the event occurs. - # - # @return [String] - required :url, String - - # @!attribute id - # ID of an existing webhook or undefined if this is a new webhook. - # - # @return [String, nil] - optional :id, String - - # @!attribute description - # The webhook's description - # - # @return [String, nil] - optional :description, String, nil?: true - - # @!method initialize(name:, url:, id: nil, description: nil) - # @param name [String] The webhook's name, used to identify it in the dashboard - # - # @param url [String] The webhook's URL. We'll call this URL when the event occurs. - # - # @param id [String] ID of an existing webhook or undefined if this is a new webhook. - # - # @param description [String, nil] The webhook's description - end end end end diff --git a/lib/moderation_api/models/webhook_event.rb b/lib/moderation_api/models/webhook_event.rb new file mode 100644 index 0000000..2daa9c8 --- /dev/null +++ b/lib/moderation_api/models/webhook_event.rb @@ -0,0 +1,6231 @@ +# frozen_string_literal: true + +module ModerationAPI + module Models + # Discriminated union of every v2 webhook event. Switch on `type` to narrow to a + # specific event shape. + module WebhookEvent + extend ModerationAPI::Internal::Type::Union + + discriminator :type + + variant :"author.blocked", -> { ModerationAPI::WebhookEvent::AuthorBlocked } + + variant :"author.unblocked", -> { ModerationAPI::WebhookEvent::AuthorUnblocked } + + variant :"author.suspended", -> { ModerationAPI::WebhookEvent::AuthorSuspended } + + variant :"author.updated", -> { ModerationAPI::WebhookEvent::AuthorUpdated } + + variant :"author.trust_level_changed", -> { ModerationAPI::WebhookEvent::AuthorTrustLevelChanged } + + variant :"author.action", -> { ModerationAPI::WebhookEvent::AuthorAction } + + variant :"queue_item.completed", -> { ModerationAPI::WebhookEvent::QueueItemCompleted } + + variant :"queue_item.action", -> { ModerationAPI::WebhookEvent::QueueItemAction } + + variant :"queue_item.rejected", -> { ModerationAPI::WebhookEvent::QueueItemRejected } + + variant :"queue_item.allowed", -> { ModerationAPI::WebhookEvent::QueueItemAllowed } + + class AuthorBlocked < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Stable event ID. Use this to dedupe retries. + # + # @return [String] + required :id, String + + # @!attribute api_version + # + # @return [Symbol, :v2] + required :api_version, const: :v2 + + # @!attribute created + # ISO 8601 timestamp of when the event was emitted. + # + # @return [Time] + required :created, Time + + # @!attribute data + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data] + required :data, -> { ModerationAPI::WebhookEvent::AuthorBlocked::Data } + + # @!attribute type + # The event type. + # + # @return [Symbol, :"author.blocked"] + required :type, const: :"author.blocked" + + # @!method initialize(id:, created:, data:, api_version: :v2, type: :"author.blocked") + # @param id [String] Stable event ID. Use this to dedupe retries. + # + # @param created [Time] ISO 8601 timestamp of when the event was emitted. + # + # @param data [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data] + # + # @param api_version [Symbol, :v2] + # + # @param type [Symbol, :"author.blocked"] The event type. + + # @see ModerationAPI::Models::WebhookEvent::AuthorBlocked#data + class Data < ModerationAPI::Internal::Type::BaseModel + # @!attribute object + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object] + required :object, -> { ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object } + + # @!method initialize(object:) + # @param object [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object] + + # @see ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data#object + class Object < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Moderation action ID + # + # @return [String] + required :id, String + + # @!attribute author + # The author the action was performed on + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author] + required :author, -> { ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author } + + # @!attribute created_at + # ISO 8601 timestamp of when the action was performed + # + # @return [Time] + required :created_at, Time + + # @!attribute key + # Customer-defined key identifying this action + # + # @return [String, nil] + required :key, String, nil?: true + + # @!attribute name + # Display name of the action + # + # @return [String, nil] + required :name, String, nil?: true + + # @!attribute value + # The value passed to the action when it ran + # + # @return [String, nil] + required :value, String, nil?: true + + # @!attribute queue + # The queue the item belongs to, if any + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Queue, nil] + optional :queue, -> { ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Queue } + + # @!method initialize(id:, author:, created_at:, key:, name:, value:, queue: nil) + # @param id [String] Moderation action ID + # + # @param author [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author] The author the action was performed on + # + # @param created_at [Time] ISO 8601 timestamp of when the action was performed + # + # @param key [String, nil] Customer-defined key identifying this action + # + # @param name [String, nil] Display name of the action + # + # @param value [String, nil] The value passed to the action when it ran + # + # @param queue [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Queue] The queue the item belongs to, if any + + # @see ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object#author + class Author < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Author ID in Moderation API + # + # @return [String] + required :id, String + + # @!attribute block + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::Block, nil] + required :block, + -> { ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Block }, + nil?: true + + # @!attribute first_seen + # Timestamp when author first appeared + # + # @return [Float] + required :first_seen, Float + + # @!attribute last_seen + # Timestamp of last activity + # + # @return [Float] + required :last_seen, Float + + # @!attribute metadata + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::Metadata] + required :metadata, -> { ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metadata } + + # @!attribute metrics + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::Metrics] + required :metrics, -> { ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metrics } + + # @!attribute risk_evaluation + # Risk assessment details, if available. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::RiskEvaluation, nil] + required :risk_evaluation, + -> { + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::RiskEvaluation + }, + nil?: true + + # @!attribute status + # Current author status + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::Status] + required :status, enum: -> { ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Status } + + # @!attribute trust_level + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::TrustLevel] + required :trust_level, -> { ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::TrustLevel } + + # @!attribute company + # The author's company or organization + # + # @return [String, nil] + optional :company, String, nil?: true + + # @!attribute email + # Author email address + # + # @return [String, nil] + optional :email, String, nil?: true + + # @!attribute external_id + # The author's ID from your system + # + # @return [String, nil] + optional :external_id, String, nil?: true + + # @!attribute external_link + # URL of the author's external profile + # + # @return [String, nil] + optional :external_link, String, nil?: true + + # @!attribute last_incident + # Timestamp of last incident + # + # @return [Float, nil] + optional :last_incident, Float, nil?: true + + # @!attribute name + # Author name or identifier + # + # @return [String, nil] + optional :name, String, nil?: true + + # @!attribute profile_picture + # URL of the author's profile picture + # + # @return [String, nil] + optional :profile_picture, String, nil?: true + + # @!method initialize(id:, block:, first_seen:, last_seen:, metadata:, metrics:, risk_evaluation:, status:, trust_level:, company: nil, email: nil, external_id: nil, external_link: nil, last_incident: nil, name: nil, profile_picture: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author} for + # more details. + # + # The author the action was performed on + # + # @param id [String] Author ID in Moderation API + # + # @param block [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::Block, nil] Block or suspension details, if applicable. Null if the author is enabled. + # + # @param first_seen [Float] Timestamp when author first appeared + # + # @param last_seen [Float] Timestamp of last activity + # + # @param metadata [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::Metadata] Additional metadata provided by your system. We recommend including any relevant + # + # @param metrics [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::Metrics] + # + # @param risk_evaluation [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::RiskEvaluation, nil] Risk assessment details, if available. + # + # @param status [Symbol, ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::Status] Current author status + # + # @param trust_level [ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::TrustLevel] + # + # @param company [String, nil] The author's company or organization + # + # @param email [String, nil] Author email address + # + # @param external_id [String, nil] The author's ID from your system + # + # @param external_link [String, nil] URL of the author's external profile + # + # @param last_incident [Float, nil] Timestamp of last incident + # + # @param name [String, nil] Author name or identifier + # + # @param profile_picture [String, nil] URL of the author's profile picture + + # @see ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author#block + class Block < ModerationAPI::Internal::Type::BaseModel + # @!attribute reason + # The moderators reason why the author was blocked or suspended. + # + # @return [String, nil] + optional :reason, String, nil?: true + + # @!attribute until_ + # The timestamp until which they are blocked if the author is suspended. + # + # @return [Float, nil] + optional :until_, Float, api_name: :until, nil?: true + + # @!method initialize(reason: nil, until_: nil) + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @param reason [String, nil] The moderators reason why the author was blocked or suspended. + # + # @param until_ [Float, nil] The timestamp until which they are blocked if the author is suspended. + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author#metadata + class Metadata < ModerationAPI::Internal::Type::BaseModel + # @!attribute email_verified + # Whether the author's email is verified + # + # @return [Boolean, nil] + optional :email_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute identity_verified + # Whether the author's identity is verified + # + # @return [Boolean, nil] + optional :identity_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute is_paying_customer + # Whether the author is a paying customer + # + # @return [Boolean, nil] + optional :is_paying_customer, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute phone_verified + # Whether the author's phone number is verified + # + # @return [Boolean, nil] + optional :phone_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!method initialize(email_verified: nil, identity_verified: nil, is_paying_customer: nil, phone_verified: nil) + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @param email_verified [Boolean, nil] Whether the author's email is verified + # + # @param identity_verified [Boolean, nil] Whether the author's identity is verified + # + # @param is_paying_customer [Boolean, nil] Whether the author is a paying customer + # + # @param phone_verified [Boolean, nil] Whether the author's phone number is verified + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author#metrics + class Metrics < ModerationAPI::Internal::Type::BaseModel + # @!attribute flagged_content + # Number of flagged content pieces + # + # @return [Float] + required :flagged_content, Float + + # @!attribute total_content + # Total pieces of content + # + # @return [Float] + required :total_content, Float + + # @!attribute average_sentiment + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + # + # @return [Float, nil] + optional :average_sentiment, Float, nil?: true + + # @!method initialize(flagged_content:, total_content:, average_sentiment: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::Metrics} + # for more details. + # + # @param flagged_content [Float] Number of flagged content pieces + # + # @param total_content [Float] Total pieces of content + # + # @param average_sentiment [Float, nil] Average sentiment score of content (-1 to 1). Requires a sentiment model in your + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author#risk_evaluation + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + # @!attribute risk_level + # Calculated risk level based on more than 10 behavioral signals. + # + # @return [Float, nil] + optional :risk_level, Float, nil?: true + + # @!method initialize(risk_level: nil) + # Risk assessment details, if available. + # + # @param risk_level [Float, nil] Calculated risk level based on more than 10 behavioral signals. + end + + # Current author status + # + # @see ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author#status + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED = :enabled + SUSPENDED = :suspended + BLOCKED = :blocked + + # @!method self.values + # @return [Array] + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author#trust_level + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + # @!attribute level + # Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @return [Float] + required :level, Float + + # @!attribute manual + # True if the trust level was set manually by a moderator + # + # @return [Boolean] + required :manual, ModerationAPI::Internal::Type::Boolean + + # @!method initialize(level:, manual:) + # @param level [Float] Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @param manual [Boolean] True if the trust level was set manually by a moderator + end + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object#queue + class Queue < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # + # @return [String] + required :id, String + + # @!method initialize(id:) + # The queue the item belongs to, if any + # + # @param id [String] + end + end + end + end + + class AuthorUnblocked < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Stable event ID. Use this to dedupe retries. + # + # @return [String] + required :id, String + + # @!attribute api_version + # + # @return [Symbol, :v2] + required :api_version, const: :v2 + + # @!attribute created + # ISO 8601 timestamp of when the event was emitted. + # + # @return [Time] + required :created, Time + + # @!attribute data + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data] + required :data, -> { ModerationAPI::WebhookEvent::AuthorUnblocked::Data } + + # @!attribute type + # The event type. + # + # @return [Symbol, :"author.unblocked"] + required :type, const: :"author.unblocked" + + # @!method initialize(id:, created:, data:, api_version: :v2, type: :"author.unblocked") + # @param id [String] Stable event ID. Use this to dedupe retries. + # + # @param created [Time] ISO 8601 timestamp of when the event was emitted. + # + # @param data [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data] + # + # @param api_version [Symbol, :v2] + # + # @param type [Symbol, :"author.unblocked"] The event type. + + # @see ModerationAPI::Models::WebhookEvent::AuthorUnblocked#data + class Data < ModerationAPI::Internal::Type::BaseModel + # @!attribute object + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object] + required :object, -> { ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object } + + # @!method initialize(object:) + # @param object [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object] + + # @see ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data#object + class Object < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Moderation action ID + # + # @return [String] + required :id, String + + # @!attribute author + # The author the action was performed on + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author] + required :author, -> { ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author } + + # @!attribute created_at + # ISO 8601 timestamp of when the action was performed + # + # @return [Time] + required :created_at, Time + + # @!attribute key + # Customer-defined key identifying this action + # + # @return [String, nil] + required :key, String, nil?: true + + # @!attribute name + # Display name of the action + # + # @return [String, nil] + required :name, String, nil?: true + + # @!attribute value + # The value passed to the action when it ran + # + # @return [String, nil] + required :value, String, nil?: true + + # @!attribute queue + # The queue the item belongs to, if any + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Queue, nil] + optional :queue, -> { ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Queue } + + # @!method initialize(id:, author:, created_at:, key:, name:, value:, queue: nil) + # @param id [String] Moderation action ID + # + # @param author [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author] The author the action was performed on + # + # @param created_at [Time] ISO 8601 timestamp of when the action was performed + # + # @param key [String, nil] Customer-defined key identifying this action + # + # @param name [String, nil] Display name of the action + # + # @param value [String, nil] The value passed to the action when it ran + # + # @param queue [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Queue] The queue the item belongs to, if any + + # @see ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object#author + class Author < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Author ID in Moderation API + # + # @return [String] + required :id, String + + # @!attribute block + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::Block, nil] + required :block, + -> { ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Block }, + nil?: true + + # @!attribute first_seen + # Timestamp when author first appeared + # + # @return [Float] + required :first_seen, Float + + # @!attribute last_seen + # Timestamp of last activity + # + # @return [Float] + required :last_seen, Float + + # @!attribute metadata + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metadata] + required :metadata, -> { ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metadata } + + # @!attribute metrics + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metrics] + required :metrics, -> { ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metrics } + + # @!attribute risk_evaluation + # Risk assessment details, if available. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::RiskEvaluation, nil] + required :risk_evaluation, + -> { + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::RiskEvaluation + }, + nil?: true + + # @!attribute status + # Current author status + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::Status] + required :status, enum: -> { ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Status } + + # @!attribute trust_level + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::TrustLevel] + required :trust_level, + -> { ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::TrustLevel } + + # @!attribute company + # The author's company or organization + # + # @return [String, nil] + optional :company, String, nil?: true + + # @!attribute email + # Author email address + # + # @return [String, nil] + optional :email, String, nil?: true + + # @!attribute external_id + # The author's ID from your system + # + # @return [String, nil] + optional :external_id, String, nil?: true + + # @!attribute external_link + # URL of the author's external profile + # + # @return [String, nil] + optional :external_link, String, nil?: true + + # @!attribute last_incident + # Timestamp of last incident + # + # @return [Float, nil] + optional :last_incident, Float, nil?: true + + # @!attribute name + # Author name or identifier + # + # @return [String, nil] + optional :name, String, nil?: true + + # @!attribute profile_picture + # URL of the author's profile picture + # + # @return [String, nil] + optional :profile_picture, String, nil?: true + + # @!method initialize(id:, block:, first_seen:, last_seen:, metadata:, metrics:, risk_evaluation:, status:, trust_level:, company: nil, email: nil, external_id: nil, external_link: nil, last_incident: nil, name: nil, profile_picture: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author} for + # more details. + # + # The author the action was performed on + # + # @param id [String] Author ID in Moderation API + # + # @param block [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::Block, nil] Block or suspension details, if applicable. Null if the author is enabled. + # + # @param first_seen [Float] Timestamp when author first appeared + # + # @param last_seen [Float] Timestamp of last activity + # + # @param metadata [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metadata] Additional metadata provided by your system. We recommend including any relevant + # + # @param metrics [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metrics] + # + # @param risk_evaluation [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::RiskEvaluation, nil] Risk assessment details, if available. + # + # @param status [Symbol, ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::Status] Current author status + # + # @param trust_level [ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::TrustLevel] + # + # @param company [String, nil] The author's company or organization + # + # @param email [String, nil] Author email address + # + # @param external_id [String, nil] The author's ID from your system + # + # @param external_link [String, nil] URL of the author's external profile + # + # @param last_incident [Float, nil] Timestamp of last incident + # + # @param name [String, nil] Author name or identifier + # + # @param profile_picture [String, nil] URL of the author's profile picture + + # @see ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author#block + class Block < ModerationAPI::Internal::Type::BaseModel + # @!attribute reason + # The moderators reason why the author was blocked or suspended. + # + # @return [String, nil] + optional :reason, String, nil?: true + + # @!attribute until_ + # The timestamp until which they are blocked if the author is suspended. + # + # @return [Float, nil] + optional :until_, Float, api_name: :until, nil?: true + + # @!method initialize(reason: nil, until_: nil) + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @param reason [String, nil] The moderators reason why the author was blocked or suspended. + # + # @param until_ [Float, nil] The timestamp until which they are blocked if the author is suspended. + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author#metadata + class Metadata < ModerationAPI::Internal::Type::BaseModel + # @!attribute email_verified + # Whether the author's email is verified + # + # @return [Boolean, nil] + optional :email_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute identity_verified + # Whether the author's identity is verified + # + # @return [Boolean, nil] + optional :identity_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute is_paying_customer + # Whether the author is a paying customer + # + # @return [Boolean, nil] + optional :is_paying_customer, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute phone_verified + # Whether the author's phone number is verified + # + # @return [Boolean, nil] + optional :phone_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!method initialize(email_verified: nil, identity_verified: nil, is_paying_customer: nil, phone_verified: nil) + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @param email_verified [Boolean, nil] Whether the author's email is verified + # + # @param identity_verified [Boolean, nil] Whether the author's identity is verified + # + # @param is_paying_customer [Boolean, nil] Whether the author is a paying customer + # + # @param phone_verified [Boolean, nil] Whether the author's phone number is verified + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author#metrics + class Metrics < ModerationAPI::Internal::Type::BaseModel + # @!attribute flagged_content + # Number of flagged content pieces + # + # @return [Float] + required :flagged_content, Float + + # @!attribute total_content + # Total pieces of content + # + # @return [Float] + required :total_content, Float + + # @!attribute average_sentiment + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + # + # @return [Float, nil] + optional :average_sentiment, Float, nil?: true + + # @!method initialize(flagged_content:, total_content:, average_sentiment: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metrics} + # for more details. + # + # @param flagged_content [Float] Number of flagged content pieces + # + # @param total_content [Float] Total pieces of content + # + # @param average_sentiment [Float, nil] Average sentiment score of content (-1 to 1). Requires a sentiment model in your + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author#risk_evaluation + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + # @!attribute risk_level + # Calculated risk level based on more than 10 behavioral signals. + # + # @return [Float, nil] + optional :risk_level, Float, nil?: true + + # @!method initialize(risk_level: nil) + # Risk assessment details, if available. + # + # @param risk_level [Float, nil] Calculated risk level based on more than 10 behavioral signals. + end + + # Current author status + # + # @see ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author#status + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED = :enabled + SUSPENDED = :suspended + BLOCKED = :blocked + + # @!method self.values + # @return [Array] + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author#trust_level + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + # @!attribute level + # Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @return [Float] + required :level, Float + + # @!attribute manual + # True if the trust level was set manually by a moderator + # + # @return [Boolean] + required :manual, ModerationAPI::Internal::Type::Boolean + + # @!method initialize(level:, manual:) + # @param level [Float] Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @param manual [Boolean] True if the trust level was set manually by a moderator + end + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object#queue + class Queue < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # + # @return [String] + required :id, String + + # @!method initialize(id:) + # The queue the item belongs to, if any + # + # @param id [String] + end + end + end + end + + class AuthorSuspended < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Stable event ID. Use this to dedupe retries. + # + # @return [String] + required :id, String + + # @!attribute api_version + # + # @return [Symbol, :v2] + required :api_version, const: :v2 + + # @!attribute created + # ISO 8601 timestamp of when the event was emitted. + # + # @return [Time] + required :created, Time + + # @!attribute data + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data] + required :data, -> { ModerationAPI::WebhookEvent::AuthorSuspended::Data } + + # @!attribute type + # The event type. + # + # @return [Symbol, :"author.suspended"] + required :type, const: :"author.suspended" + + # @!method initialize(id:, created:, data:, api_version: :v2, type: :"author.suspended") + # @param id [String] Stable event ID. Use this to dedupe retries. + # + # @param created [Time] ISO 8601 timestamp of when the event was emitted. + # + # @param data [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data] + # + # @param api_version [Symbol, :v2] + # + # @param type [Symbol, :"author.suspended"] The event type. + + # @see ModerationAPI::Models::WebhookEvent::AuthorSuspended#data + class Data < ModerationAPI::Internal::Type::BaseModel + # @!attribute object + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object] + required :object, -> { ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object } + + # @!method initialize(object:) + # @param object [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object] + + # @see ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data#object + class Object < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Moderation action ID + # + # @return [String] + required :id, String + + # @!attribute author + # The author the action was performed on + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author] + required :author, -> { ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author } + + # @!attribute created_at + # ISO 8601 timestamp of when the action was performed + # + # @return [Time] + required :created_at, Time + + # @!attribute key + # Customer-defined key identifying this action + # + # @return [String, nil] + required :key, String, nil?: true + + # @!attribute name + # Display name of the action + # + # @return [String, nil] + required :name, String, nil?: true + + # @!attribute value + # The value passed to the action when it ran + # + # @return [String, nil] + required :value, String, nil?: true + + # @!attribute queue + # The queue the item belongs to, if any + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Queue, nil] + optional :queue, -> { ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Queue } + + # @!method initialize(id:, author:, created_at:, key:, name:, value:, queue: nil) + # @param id [String] Moderation action ID + # + # @param author [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author] The author the action was performed on + # + # @param created_at [Time] ISO 8601 timestamp of when the action was performed + # + # @param key [String, nil] Customer-defined key identifying this action + # + # @param name [String, nil] Display name of the action + # + # @param value [String, nil] The value passed to the action when it ran + # + # @param queue [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Queue] The queue the item belongs to, if any + + # @see ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object#author + class Author < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Author ID in Moderation API + # + # @return [String] + required :id, String + + # @!attribute block + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::Block, nil] + required :block, + -> { ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Block }, + nil?: true + + # @!attribute first_seen + # Timestamp when author first appeared + # + # @return [Float] + required :first_seen, Float + + # @!attribute last_seen + # Timestamp of last activity + # + # @return [Float] + required :last_seen, Float + + # @!attribute metadata + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::Metadata] + required :metadata, -> { ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metadata } + + # @!attribute metrics + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::Metrics] + required :metrics, -> { ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metrics } + + # @!attribute risk_evaluation + # Risk assessment details, if available. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::RiskEvaluation, nil] + required :risk_evaluation, + -> { + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::RiskEvaluation + }, + nil?: true + + # @!attribute status + # Current author status + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::Status] + required :status, enum: -> { ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Status } + + # @!attribute trust_level + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::TrustLevel] + required :trust_level, + -> { ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::TrustLevel } + + # @!attribute company + # The author's company or organization + # + # @return [String, nil] + optional :company, String, nil?: true + + # @!attribute email + # Author email address + # + # @return [String, nil] + optional :email, String, nil?: true + + # @!attribute external_id + # The author's ID from your system + # + # @return [String, nil] + optional :external_id, String, nil?: true + + # @!attribute external_link + # URL of the author's external profile + # + # @return [String, nil] + optional :external_link, String, nil?: true + + # @!attribute last_incident + # Timestamp of last incident + # + # @return [Float, nil] + optional :last_incident, Float, nil?: true + + # @!attribute name + # Author name or identifier + # + # @return [String, nil] + optional :name, String, nil?: true + + # @!attribute profile_picture + # URL of the author's profile picture + # + # @return [String, nil] + optional :profile_picture, String, nil?: true + + # @!method initialize(id:, block:, first_seen:, last_seen:, metadata:, metrics:, risk_evaluation:, status:, trust_level:, company: nil, email: nil, external_id: nil, external_link: nil, last_incident: nil, name: nil, profile_picture: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author} for + # more details. + # + # The author the action was performed on + # + # @param id [String] Author ID in Moderation API + # + # @param block [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::Block, nil] Block or suspension details, if applicable. Null if the author is enabled. + # + # @param first_seen [Float] Timestamp when author first appeared + # + # @param last_seen [Float] Timestamp of last activity + # + # @param metadata [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::Metadata] Additional metadata provided by your system. We recommend including any relevant + # + # @param metrics [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::Metrics] + # + # @param risk_evaluation [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::RiskEvaluation, nil] Risk assessment details, if available. + # + # @param status [Symbol, ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::Status] Current author status + # + # @param trust_level [ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::TrustLevel] + # + # @param company [String, nil] The author's company or organization + # + # @param email [String, nil] Author email address + # + # @param external_id [String, nil] The author's ID from your system + # + # @param external_link [String, nil] URL of the author's external profile + # + # @param last_incident [Float, nil] Timestamp of last incident + # + # @param name [String, nil] Author name or identifier + # + # @param profile_picture [String, nil] URL of the author's profile picture + + # @see ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author#block + class Block < ModerationAPI::Internal::Type::BaseModel + # @!attribute reason + # The moderators reason why the author was blocked or suspended. + # + # @return [String, nil] + optional :reason, String, nil?: true + + # @!attribute until_ + # The timestamp until which they are blocked if the author is suspended. + # + # @return [Float, nil] + optional :until_, Float, api_name: :until, nil?: true + + # @!method initialize(reason: nil, until_: nil) + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @param reason [String, nil] The moderators reason why the author was blocked or suspended. + # + # @param until_ [Float, nil] The timestamp until which they are blocked if the author is suspended. + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author#metadata + class Metadata < ModerationAPI::Internal::Type::BaseModel + # @!attribute email_verified + # Whether the author's email is verified + # + # @return [Boolean, nil] + optional :email_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute identity_verified + # Whether the author's identity is verified + # + # @return [Boolean, nil] + optional :identity_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute is_paying_customer + # Whether the author is a paying customer + # + # @return [Boolean, nil] + optional :is_paying_customer, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute phone_verified + # Whether the author's phone number is verified + # + # @return [Boolean, nil] + optional :phone_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!method initialize(email_verified: nil, identity_verified: nil, is_paying_customer: nil, phone_verified: nil) + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @param email_verified [Boolean, nil] Whether the author's email is verified + # + # @param identity_verified [Boolean, nil] Whether the author's identity is verified + # + # @param is_paying_customer [Boolean, nil] Whether the author is a paying customer + # + # @param phone_verified [Boolean, nil] Whether the author's phone number is verified + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author#metrics + class Metrics < ModerationAPI::Internal::Type::BaseModel + # @!attribute flagged_content + # Number of flagged content pieces + # + # @return [Float] + required :flagged_content, Float + + # @!attribute total_content + # Total pieces of content + # + # @return [Float] + required :total_content, Float + + # @!attribute average_sentiment + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + # + # @return [Float, nil] + optional :average_sentiment, Float, nil?: true + + # @!method initialize(flagged_content:, total_content:, average_sentiment: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::Metrics} + # for more details. + # + # @param flagged_content [Float] Number of flagged content pieces + # + # @param total_content [Float] Total pieces of content + # + # @param average_sentiment [Float, nil] Average sentiment score of content (-1 to 1). Requires a sentiment model in your + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author#risk_evaluation + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + # @!attribute risk_level + # Calculated risk level based on more than 10 behavioral signals. + # + # @return [Float, nil] + optional :risk_level, Float, nil?: true + + # @!method initialize(risk_level: nil) + # Risk assessment details, if available. + # + # @param risk_level [Float, nil] Calculated risk level based on more than 10 behavioral signals. + end + + # Current author status + # + # @see ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author#status + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED = :enabled + SUSPENDED = :suspended + BLOCKED = :blocked + + # @!method self.values + # @return [Array] + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author#trust_level + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + # @!attribute level + # Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @return [Float] + required :level, Float + + # @!attribute manual + # True if the trust level was set manually by a moderator + # + # @return [Boolean] + required :manual, ModerationAPI::Internal::Type::Boolean + + # @!method initialize(level:, manual:) + # @param level [Float] Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @param manual [Boolean] True if the trust level was set manually by a moderator + end + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object#queue + class Queue < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # + # @return [String] + required :id, String + + # @!method initialize(id:) + # The queue the item belongs to, if any + # + # @param id [String] + end + end + end + end + + class AuthorUpdated < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Stable event ID. Use this to dedupe retries. + # + # @return [String] + required :id, String + + # @!attribute api_version + # + # @return [Symbol, :v2] + required :api_version, const: :v2 + + # @!attribute created + # ISO 8601 timestamp of when the event was emitted. + # + # @return [Time] + required :created, Time + + # @!attribute data + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data] + required :data, -> { ModerationAPI::WebhookEvent::AuthorUpdated::Data } + + # @!attribute type + # The event type. + # + # @return [Symbol, :"author.updated"] + required :type, const: :"author.updated" + + # @!method initialize(id:, created:, data:, api_version: :v2, type: :"author.updated") + # @param id [String] Stable event ID. Use this to dedupe retries. + # + # @param created [Time] ISO 8601 timestamp of when the event was emitted. + # + # @param data [ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data] + # + # @param api_version [Symbol, :v2] + # + # @param type [Symbol, :"author.updated"] The event type. + + # @see ModerationAPI::Models::WebhookEvent::AuthorUpdated#data + class Data < ModerationAPI::Internal::Type::BaseModel + # @!attribute object + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object] + required :object, -> { ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object } + + # @!method initialize(object:) + # @param object [ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object] + + # @see ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data#object + class Object < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Author ID in Moderation API + # + # @return [String] + required :id, String + + # @!attribute block + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::Block, nil] + required :block, + -> { + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Block + }, + nil?: true + + # @!attribute first_seen + # Timestamp when author first appeared + # + # @return [Float] + required :first_seen, Float + + # @!attribute last_seen + # Timestamp of last activity + # + # @return [Float] + required :last_seen, Float + + # @!attribute metadata + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::Metadata] + required :metadata, -> { ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metadata } + + # @!attribute metrics + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::Metrics] + required :metrics, -> { ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metrics } + + # @!attribute risk_evaluation + # Risk assessment details, if available. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::RiskEvaluation, nil] + required :risk_evaluation, + -> { ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::RiskEvaluation }, + nil?: true + + # @!attribute status + # Current author status + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::Status] + required :status, enum: -> { ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Status } + + # @!attribute trust_level + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::TrustLevel] + required :trust_level, -> { ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::TrustLevel } + + # @!attribute company + # The author's company or organization + # + # @return [String, nil] + optional :company, String, nil?: true + + # @!attribute email + # Author email address + # + # @return [String, nil] + optional :email, String, nil?: true + + # @!attribute external_id + # The author's ID from your system + # + # @return [String, nil] + optional :external_id, String, nil?: true + + # @!attribute external_link + # URL of the author's external profile + # + # @return [String, nil] + optional :external_link, String, nil?: true + + # @!attribute last_incident + # Timestamp of last incident + # + # @return [Float, nil] + optional :last_incident, Float, nil?: true + + # @!attribute name + # Author name or identifier + # + # @return [String, nil] + optional :name, String, nil?: true + + # @!attribute profile_picture + # URL of the author's profile picture + # + # @return [String, nil] + optional :profile_picture, String, nil?: true + + # @!method initialize(id:, block:, first_seen:, last_seen:, metadata:, metrics:, risk_evaluation:, status:, trust_level:, company: nil, email: nil, external_id: nil, external_link: nil, last_incident: nil, name: nil, profile_picture: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object} for more + # details. + # + # @param id [String] Author ID in Moderation API + # + # @param block [ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::Block, nil] Block or suspension details, if applicable. Null if the author is enabled. + # + # @param first_seen [Float] Timestamp when author first appeared + # + # @param last_seen [Float] Timestamp of last activity + # + # @param metadata [ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::Metadata] Additional metadata provided by your system. We recommend including any relevant + # + # @param metrics [ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::Metrics] + # + # @param risk_evaluation [ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::RiskEvaluation, nil] Risk assessment details, if available. + # + # @param status [Symbol, ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::Status] Current author status + # + # @param trust_level [ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::TrustLevel] + # + # @param company [String, nil] The author's company or organization + # + # @param email [String, nil] Author email address + # + # @param external_id [String, nil] The author's ID from your system + # + # @param external_link [String, nil] URL of the author's external profile + # + # @param last_incident [Float, nil] Timestamp of last incident + # + # @param name [String, nil] Author name or identifier + # + # @param profile_picture [String, nil] URL of the author's profile picture + + # @see ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object#block + class Block < ModerationAPI::Internal::Type::BaseModel + # @!attribute reason + # The moderators reason why the author was blocked or suspended. + # + # @return [String, nil] + optional :reason, String, nil?: true + + # @!attribute until_ + # The timestamp until which they are blocked if the author is suspended. + # + # @return [Float, nil] + optional :until_, Float, api_name: :until, nil?: true + + # @!method initialize(reason: nil, until_: nil) + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @param reason [String, nil] The moderators reason why the author was blocked or suspended. + # + # @param until_ [Float, nil] The timestamp until which they are blocked if the author is suspended. + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object#metadata + class Metadata < ModerationAPI::Internal::Type::BaseModel + # @!attribute email_verified + # Whether the author's email is verified + # + # @return [Boolean, nil] + optional :email_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute identity_verified + # Whether the author's identity is verified + # + # @return [Boolean, nil] + optional :identity_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute is_paying_customer + # Whether the author is a paying customer + # + # @return [Boolean, nil] + optional :is_paying_customer, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute phone_verified + # Whether the author's phone number is verified + # + # @return [Boolean, nil] + optional :phone_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!method initialize(email_verified: nil, identity_verified: nil, is_paying_customer: nil, phone_verified: nil) + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @param email_verified [Boolean, nil] Whether the author's email is verified + # + # @param identity_verified [Boolean, nil] Whether the author's identity is verified + # + # @param is_paying_customer [Boolean, nil] Whether the author is a paying customer + # + # @param phone_verified [Boolean, nil] Whether the author's phone number is verified + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object#metrics + class Metrics < ModerationAPI::Internal::Type::BaseModel + # @!attribute flagged_content + # Number of flagged content pieces + # + # @return [Float] + required :flagged_content, Float + + # @!attribute total_content + # Total pieces of content + # + # @return [Float] + required :total_content, Float + + # @!attribute average_sentiment + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + # + # @return [Float, nil] + optional :average_sentiment, Float, nil?: true + + # @!method initialize(flagged_content:, total_content:, average_sentiment: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::Metrics} for + # more details. + # + # @param flagged_content [Float] Number of flagged content pieces + # + # @param total_content [Float] Total pieces of content + # + # @param average_sentiment [Float, nil] Average sentiment score of content (-1 to 1). Requires a sentiment model in your + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object#risk_evaluation + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + # @!attribute risk_level + # Calculated risk level based on more than 10 behavioral signals. + # + # @return [Float, nil] + optional :risk_level, Float, nil?: true + + # @!method initialize(risk_level: nil) + # Risk assessment details, if available. + # + # @param risk_level [Float, nil] Calculated risk level based on more than 10 behavioral signals. + end + + # Current author status + # + # @see ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object#status + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED = :enabled + SUSPENDED = :suspended + BLOCKED = :blocked + + # @!method self.values + # @return [Array] + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object#trust_level + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + # @!attribute level + # Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @return [Float] + required :level, Float + + # @!attribute manual + # True if the trust level was set manually by a moderator + # + # @return [Boolean] + required :manual, ModerationAPI::Internal::Type::Boolean + + # @!method initialize(level:, manual:) + # @param level [Float] Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @param manual [Boolean] True if the trust level was set manually by a moderator + end + end + end + end + + class AuthorTrustLevelChanged < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Stable event ID. Use this to dedupe retries. + # + # @return [String] + required :id, String + + # @!attribute api_version + # + # @return [Symbol, :v2] + required :api_version, const: :v2 + + # @!attribute created + # ISO 8601 timestamp of when the event was emitted. + # + # @return [Time] + required :created, Time + + # @!attribute data + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data] + required :data, -> { ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data } + + # @!attribute type + # The event type. + # + # @return [Symbol, :"author.trust_level_changed"] + required :type, const: :"author.trust_level_changed" + + # @!method initialize(id:, created:, data:, api_version: :v2, type: :"author.trust_level_changed") + # @param id [String] Stable event ID. Use this to dedupe retries. + # + # @param created [Time] ISO 8601 timestamp of when the event was emitted. + # + # @param data [ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data] + # + # @param api_version [Symbol, :v2] + # + # @param type [Symbol, :"author.trust_level_changed"] The event type. + + # @see ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged#data + class Data < ModerationAPI::Internal::Type::BaseModel + # @!attribute object + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object] + required :object, -> { ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object } + + # @!method initialize(object:) + # @param object [ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object] + + # @see ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data#object + class Object < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Author ID in Moderation API + # + # @return [String] + required :id, String + + # @!attribute block + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Block, nil] + required :block, + -> { ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Block }, + nil?: true + + # @!attribute first_seen + # Timestamp when author first appeared + # + # @return [Float] + required :first_seen, Float + + # @!attribute last_seen + # Timestamp of last activity + # + # @return [Float] + required :last_seen, Float + + # @!attribute metadata + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metadata] + required :metadata, -> { ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metadata } + + # @!attribute metrics + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metrics] + required :metrics, -> { ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metrics } + + # @!attribute risk_evaluation + # Risk assessment details, if available. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::RiskEvaluation, nil] + required :risk_evaluation, + -> { + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::RiskEvaluation + }, + nil?: true + + # @!attribute status + # Current author status + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Status] + required :status, enum: -> { ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Status } + + # @!attribute trust_level + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::TrustLevel] + required :trust_level, + -> { ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::TrustLevel } + + # @!attribute company + # The author's company or organization + # + # @return [String, nil] + optional :company, String, nil?: true + + # @!attribute email + # Author email address + # + # @return [String, nil] + optional :email, String, nil?: true + + # @!attribute external_id + # The author's ID from your system + # + # @return [String, nil] + optional :external_id, String, nil?: true + + # @!attribute external_link + # URL of the author's external profile + # + # @return [String, nil] + optional :external_link, String, nil?: true + + # @!attribute last_incident + # Timestamp of last incident + # + # @return [Float, nil] + optional :last_incident, Float, nil?: true + + # @!attribute name + # Author name or identifier + # + # @return [String, nil] + optional :name, String, nil?: true + + # @!attribute profile_picture + # URL of the author's profile picture + # + # @return [String, nil] + optional :profile_picture, String, nil?: true + + # @!method initialize(id:, block:, first_seen:, last_seen:, metadata:, metrics:, risk_evaluation:, status:, trust_level:, company: nil, email: nil, external_id: nil, external_link: nil, last_incident: nil, name: nil, profile_picture: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object} for + # more details. + # + # @param id [String] Author ID in Moderation API + # + # @param block [ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Block, nil] Block or suspension details, if applicable. Null if the author is enabled. + # + # @param first_seen [Float] Timestamp when author first appeared + # + # @param last_seen [Float] Timestamp of last activity + # + # @param metadata [ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metadata] Additional metadata provided by your system. We recommend including any relevant + # + # @param metrics [ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metrics] + # + # @param risk_evaluation [ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::RiskEvaluation, nil] Risk assessment details, if available. + # + # @param status [Symbol, ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Status] Current author status + # + # @param trust_level [ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::TrustLevel] + # + # @param company [String, nil] The author's company or organization + # + # @param email [String, nil] Author email address + # + # @param external_id [String, nil] The author's ID from your system + # + # @param external_link [String, nil] URL of the author's external profile + # + # @param last_incident [Float, nil] Timestamp of last incident + # + # @param name [String, nil] Author name or identifier + # + # @param profile_picture [String, nil] URL of the author's profile picture + + # @see ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object#block + class Block < ModerationAPI::Internal::Type::BaseModel + # @!attribute reason + # The moderators reason why the author was blocked or suspended. + # + # @return [String, nil] + optional :reason, String, nil?: true + + # @!attribute until_ + # The timestamp until which they are blocked if the author is suspended. + # + # @return [Float, nil] + optional :until_, Float, api_name: :until, nil?: true + + # @!method initialize(reason: nil, until_: nil) + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @param reason [String, nil] The moderators reason why the author was blocked or suspended. + # + # @param until_ [Float, nil] The timestamp until which they are blocked if the author is suspended. + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object#metadata + class Metadata < ModerationAPI::Internal::Type::BaseModel + # @!attribute email_verified + # Whether the author's email is verified + # + # @return [Boolean, nil] + optional :email_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute identity_verified + # Whether the author's identity is verified + # + # @return [Boolean, nil] + optional :identity_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute is_paying_customer + # Whether the author is a paying customer + # + # @return [Boolean, nil] + optional :is_paying_customer, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute phone_verified + # Whether the author's phone number is verified + # + # @return [Boolean, nil] + optional :phone_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!method initialize(email_verified: nil, identity_verified: nil, is_paying_customer: nil, phone_verified: nil) + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @param email_verified [Boolean, nil] Whether the author's email is verified + # + # @param identity_verified [Boolean, nil] Whether the author's identity is verified + # + # @param is_paying_customer [Boolean, nil] Whether the author is a paying customer + # + # @param phone_verified [Boolean, nil] Whether the author's phone number is verified + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object#metrics + class Metrics < ModerationAPI::Internal::Type::BaseModel + # @!attribute flagged_content + # Number of flagged content pieces + # + # @return [Float] + required :flagged_content, Float + + # @!attribute total_content + # Total pieces of content + # + # @return [Float] + required :total_content, Float + + # @!attribute average_sentiment + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + # + # @return [Float, nil] + optional :average_sentiment, Float, nil?: true + + # @!method initialize(flagged_content:, total_content:, average_sentiment: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metrics} + # for more details. + # + # @param flagged_content [Float] Number of flagged content pieces + # + # @param total_content [Float] Total pieces of content + # + # @param average_sentiment [Float, nil] Average sentiment score of content (-1 to 1). Requires a sentiment model in your + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object#risk_evaluation + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + # @!attribute risk_level + # Calculated risk level based on more than 10 behavioral signals. + # + # @return [Float, nil] + optional :risk_level, Float, nil?: true + + # @!method initialize(risk_level: nil) + # Risk assessment details, if available. + # + # @param risk_level [Float, nil] Calculated risk level based on more than 10 behavioral signals. + end + + # Current author status + # + # @see ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object#status + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED = :enabled + SUSPENDED = :suspended + BLOCKED = :blocked + + # @!method self.values + # @return [Array] + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object#trust_level + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + # @!attribute level + # Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @return [Float] + required :level, Float + + # @!attribute manual + # True if the trust level was set manually by a moderator + # + # @return [Boolean] + required :manual, ModerationAPI::Internal::Type::Boolean + + # @!method initialize(level:, manual:) + # @param level [Float] Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @param manual [Boolean] True if the trust level was set manually by a moderator + end + end + end + end + + class AuthorAction < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Stable event ID. Use this to dedupe retries. + # + # @return [String] + required :id, String + + # @!attribute api_version + # + # @return [Symbol, :v2] + required :api_version, const: :v2 + + # @!attribute created + # ISO 8601 timestamp of when the event was emitted. + # + # @return [Time] + required :created, Time + + # @!attribute data + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorAction::Data] + required :data, -> { ModerationAPI::WebhookEvent::AuthorAction::Data } + + # @!attribute type + # The event type. + # + # @return [Symbol, :"author.action"] + required :type, const: :"author.action" + + # @!method initialize(id:, created:, data:, api_version: :v2, type: :"author.action") + # @param id [String] Stable event ID. Use this to dedupe retries. + # + # @param created [Time] ISO 8601 timestamp of when the event was emitted. + # + # @param data [ModerationAPI::Models::WebhookEvent::AuthorAction::Data] + # + # @param api_version [Symbol, :v2] + # + # @param type [Symbol, :"author.action"] The event type. + + # @see ModerationAPI::Models::WebhookEvent::AuthorAction#data + class Data < ModerationAPI::Internal::Type::BaseModel + # @!attribute object + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object] + required :object, -> { ModerationAPI::WebhookEvent::AuthorAction::Data::Object } + + # @!method initialize(object:) + # @param object [ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object] + + # @see ModerationAPI::Models::WebhookEvent::AuthorAction::Data#object + class Object < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Moderation action ID + # + # @return [String] + required :id, String + + # @!attribute author + # The author the action was performed on + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author] + required :author, -> { ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author } + + # @!attribute created_at + # ISO 8601 timestamp of when the action was performed + # + # @return [Time] + required :created_at, Time + + # @!attribute key + # Customer-defined key identifying this action + # + # @return [String, nil] + required :key, String, nil?: true + + # @!attribute name + # Display name of the action + # + # @return [String, nil] + required :name, String, nil?: true + + # @!attribute value + # The value passed to the action when it ran + # + # @return [String, nil] + required :value, String, nil?: true + + # @!attribute queue + # The queue the item belongs to, if any + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Queue, nil] + optional :queue, -> { ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Queue } + + # @!method initialize(id:, author:, created_at:, key:, name:, value:, queue: nil) + # @param id [String] Moderation action ID + # + # @param author [ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author] The author the action was performed on + # + # @param created_at [Time] ISO 8601 timestamp of when the action was performed + # + # @param key [String, nil] Customer-defined key identifying this action + # + # @param name [String, nil] Display name of the action + # + # @param value [String, nil] The value passed to the action when it ran + # + # @param queue [ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Queue] The queue the item belongs to, if any + + # @see ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object#author + class Author < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Author ID in Moderation API + # + # @return [String] + required :id, String + + # @!attribute block + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::Block, nil] + required :block, + -> { + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Block + }, + nil?: true + + # @!attribute first_seen + # Timestamp when author first appeared + # + # @return [Float] + required :first_seen, Float + + # @!attribute last_seen + # Timestamp of last activity + # + # @return [Float] + required :last_seen, Float + + # @!attribute metadata + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::Metadata] + required :metadata, -> { ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metadata } + + # @!attribute metrics + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::Metrics] + required :metrics, -> { ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metrics } + + # @!attribute risk_evaluation + # Risk assessment details, if available. + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::RiskEvaluation, nil] + required :risk_evaluation, + -> { ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::RiskEvaluation }, + nil?: true + + # @!attribute status + # Current author status + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::Status] + required :status, enum: -> { ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Status } + + # @!attribute trust_level + # + # @return [ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::TrustLevel] + required :trust_level, -> { ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::TrustLevel } + + # @!attribute company + # The author's company or organization + # + # @return [String, nil] + optional :company, String, nil?: true + + # @!attribute email + # Author email address + # + # @return [String, nil] + optional :email, String, nil?: true + + # @!attribute external_id + # The author's ID from your system + # + # @return [String, nil] + optional :external_id, String, nil?: true + + # @!attribute external_link + # URL of the author's external profile + # + # @return [String, nil] + optional :external_link, String, nil?: true + + # @!attribute last_incident + # Timestamp of last incident + # + # @return [Float, nil] + optional :last_incident, Float, nil?: true + + # @!attribute name + # Author name or identifier + # + # @return [String, nil] + optional :name, String, nil?: true + + # @!attribute profile_picture + # URL of the author's profile picture + # + # @return [String, nil] + optional :profile_picture, String, nil?: true + + # @!method initialize(id:, block:, first_seen:, last_seen:, metadata:, metrics:, risk_evaluation:, status:, trust_level:, company: nil, email: nil, external_id: nil, external_link: nil, last_incident: nil, name: nil, profile_picture: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author} for + # more details. + # + # The author the action was performed on + # + # @param id [String] Author ID in Moderation API + # + # @param block [ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::Block, nil] Block or suspension details, if applicable. Null if the author is enabled. + # + # @param first_seen [Float] Timestamp when author first appeared + # + # @param last_seen [Float] Timestamp of last activity + # + # @param metadata [ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::Metadata] Additional metadata provided by your system. We recommend including any relevant + # + # @param metrics [ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::Metrics] + # + # @param risk_evaluation [ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::RiskEvaluation, nil] Risk assessment details, if available. + # + # @param status [Symbol, ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::Status] Current author status + # + # @param trust_level [ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::TrustLevel] + # + # @param company [String, nil] The author's company or organization + # + # @param email [String, nil] Author email address + # + # @param external_id [String, nil] The author's ID from your system + # + # @param external_link [String, nil] URL of the author's external profile + # + # @param last_incident [Float, nil] Timestamp of last incident + # + # @param name [String, nil] Author name or identifier + # + # @param profile_picture [String, nil] URL of the author's profile picture + + # @see ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author#block + class Block < ModerationAPI::Internal::Type::BaseModel + # @!attribute reason + # The moderators reason why the author was blocked or suspended. + # + # @return [String, nil] + optional :reason, String, nil?: true + + # @!attribute until_ + # The timestamp until which they are blocked if the author is suspended. + # + # @return [Float, nil] + optional :until_, Float, api_name: :until, nil?: true + + # @!method initialize(reason: nil, until_: nil) + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @param reason [String, nil] The moderators reason why the author was blocked or suspended. + # + # @param until_ [Float, nil] The timestamp until which they are blocked if the author is suspended. + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author#metadata + class Metadata < ModerationAPI::Internal::Type::BaseModel + # @!attribute email_verified + # Whether the author's email is verified + # + # @return [Boolean, nil] + optional :email_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute identity_verified + # Whether the author's identity is verified + # + # @return [Boolean, nil] + optional :identity_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute is_paying_customer + # Whether the author is a paying customer + # + # @return [Boolean, nil] + optional :is_paying_customer, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute phone_verified + # Whether the author's phone number is verified + # + # @return [Boolean, nil] + optional :phone_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!method initialize(email_verified: nil, identity_verified: nil, is_paying_customer: nil, phone_verified: nil) + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @param email_verified [Boolean, nil] Whether the author's email is verified + # + # @param identity_verified [Boolean, nil] Whether the author's identity is verified + # + # @param is_paying_customer [Boolean, nil] Whether the author is a paying customer + # + # @param phone_verified [Boolean, nil] Whether the author's phone number is verified + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author#metrics + class Metrics < ModerationAPI::Internal::Type::BaseModel + # @!attribute flagged_content + # Number of flagged content pieces + # + # @return [Float] + required :flagged_content, Float + + # @!attribute total_content + # Total pieces of content + # + # @return [Float] + required :total_content, Float + + # @!attribute average_sentiment + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + # + # @return [Float, nil] + optional :average_sentiment, Float, nil?: true + + # @!method initialize(flagged_content:, total_content:, average_sentiment: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::Metrics} + # for more details. + # + # @param flagged_content [Float] Number of flagged content pieces + # + # @param total_content [Float] Total pieces of content + # + # @param average_sentiment [Float, nil] Average sentiment score of content (-1 to 1). Requires a sentiment model in your + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author#risk_evaluation + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + # @!attribute risk_level + # Calculated risk level based on more than 10 behavioral signals. + # + # @return [Float, nil] + optional :risk_level, Float, nil?: true + + # @!method initialize(risk_level: nil) + # Risk assessment details, if available. + # + # @param risk_level [Float, nil] Calculated risk level based on more than 10 behavioral signals. + end + + # Current author status + # + # @see ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author#status + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED = :enabled + SUSPENDED = :suspended + BLOCKED = :blocked + + # @!method self.values + # @return [Array] + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author#trust_level + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + # @!attribute level + # Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @return [Float] + required :level, Float + + # @!attribute manual + # True if the trust level was set manually by a moderator + # + # @return [Boolean] + required :manual, ModerationAPI::Internal::Type::Boolean + + # @!method initialize(level:, manual:) + # @param level [Float] Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @param manual [Boolean] True if the trust level was set manually by a moderator + end + end + + # @see ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object#queue + class Queue < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # + # @return [String] + required :id, String + + # @!method initialize(id:) + # The queue the item belongs to, if any + # + # @param id [String] + end + end + end + end + + class QueueItemCompleted < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Stable event ID. Use this to dedupe retries. + # + # @return [String] + required :id, String + + # @!attribute api_version + # + # @return [Symbol, :v2] + required :api_version, const: :v2 + + # @!attribute created + # ISO 8601 timestamp of when the event was emitted. + # + # @return [Time] + required :created, Time + + # @!attribute data + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data] + required :data, -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data } + + # @!attribute type + # The event type. + # + # @return [Symbol, :"queue_item.completed"] + required :type, const: :"queue_item.completed" + + # @!method initialize(id:, created:, data:, api_version: :v2, type: :"queue_item.completed") + # @param id [String] Stable event ID. Use this to dedupe retries. + # + # @param created [Time] ISO 8601 timestamp of when the event was emitted. + # + # @param data [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data] + # + # @param api_version [Symbol, :v2] + # + # @param type [Symbol, :"queue_item.completed"] The event type. + + # @see ModerationAPI::Models::WebhookEvent::QueueItemCompleted#data + class Data < ModerationAPI::Internal::Type::BaseModel + # @!attribute object + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object] + required :object, -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object } + + # @!method initialize(object:) + # @param object [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object] + + # @see ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data#object + class Object < ModerationAPI::Internal::Type::BaseModel + # @!attribute item + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item] + required :item, -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item } + + # @!attribute author + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author, nil] + optional :author, -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author } + + # @!attribute queue + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Queue, nil] + optional :queue, -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Queue } + + # @!method initialize(item:, author: nil, queue: nil) + # @param item [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item] + # @param author [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author] + # @param queue [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Queue] + + # @see ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object#item + class Item < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Content ID from your system + # + # @return [String] + required :id, String + + # @!attribute author_id + # External author ID (the customer's identifier, not Moderation API's internal id) + # + # @return [String, nil] + required :author_id, String, nil?: true + + # @!attribute channel_key + # The channel the content was submitted to, identified by your customer-defined + # channel key. + # + # @return [String, nil] + required :channel_key, String, nil?: true + + # @!attribute content + # The original content payload + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Text, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Image, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Video, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Audio, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object] + required :content, + union: -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content } + + # @!attribute conversation_id + # Conversation grouping ID, if any + # + # @return [String, nil] + required :conversation_id, String, nil?: true + + # @!attribute flagged + # Whether the content was flagged by moderation + # + # @return [Boolean, nil] + required :flagged, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute labels + # Moderation labels applied to the content + # + # @return [Array, nil] + required :labels, + -> { + ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label] + }, + nil?: true + + # @!attribute language + # Detected ISO language code, if available + # + # @return [String, nil] + required :language, String, nil?: true + + # @!attribute meta_type + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::MetaType, nil] + required :meta_type, + enum: -> { + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::MetaType + }, + nil?: true + + # @!attribute metadata + # Arbitrary key/value metadata. Top-level keys are strings. + # + # @return [Hash{Symbol=>Object}, nil] + required :metadata, + ModerationAPI::Internal::Type::HashOf[ModerationAPI::Internal::Type::Unknown], + nil?: true + + # @!attribute timestamp + # ISO 8601 timestamp of when the content was submitted + # + # @return [Time] + required :timestamp, Time + + # @!method initialize(id:, author_id:, channel_key:, content:, conversation_id:, flagged:, labels:, language:, meta_type:, metadata:, timestamp:) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item} + # for more details. + # + # @param id [String] Content ID from your system + # + # @param author_id [String, nil] External author ID (the customer's identifier, not Moderation API's internal id) + # + # @param channel_key [String, nil] The channel the content was submitted to, identified by your customer-defined ch + # + # @param content [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Text, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Image, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Video, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Audio, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object] The original content payload + # + # @param conversation_id [String, nil] Conversation grouping ID, if any + # + # @param flagged [Boolean, nil] Whether the content was flagged by moderation + # + # @param labels [Array, nil] Moderation labels applied to the content + # + # @param language [String, nil] Detected ISO language code, if available + # + # @param meta_type [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::MetaType, nil] High-level content type (e.g. message, post, comment). Defaults to the channel's + # + # @param metadata [Hash{Symbol=>Object}, nil] Arbitrary key/value metadata. Top-level keys are strings. + # + # @param timestamp [Time] ISO 8601 timestamp of when the content was submitted + + # The original content payload + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item#content + module Content + extend ModerationAPI::Internal::Type::Union + + # Text + variant -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Text } + + # Image + variant -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Image } + + # Video + variant -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Video } + + # Audio + variant -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Audio } + + # Object + variant -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object } + + class Text < ModerationAPI::Internal::Type::BaseModel + # @!attribute text + # The content text + # + # @return [String] + required :text, String + + # @!attribute type + # + # @return [Symbol, :text] + required :type, const: :text + + # @!method initialize(text:, type: :text) + # Text + # + # @param text [String] The content text + # + # @param type [Symbol, :text] + end + + class Image < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :image] + required :type, const: :image + + # @!attribute data + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + # + # @return [String, nil] + optional :data, String + + # @!attribute url + # A public URL of the image content. Either url or data must be provided. + # + # @return [String, nil] + optional :url, String + + # @!method initialize(data: nil, url: nil, type: :image) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Image} + # for more details. + # + # Image + # + # @param data [String] Base64-encoded image data. Either url or data must be provided. Note: base64 ima + # + # @param url [String] A public URL of the image content. Either url or data must be provided. + # + # @param type [Symbol, :image] + end + + class Video < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :video] + required :type, const: :video + + # @!attribute url + # A public URL of the video content + # + # @return [String] + required :url, String + + # @!method initialize(url:, type: :video) + # Video + # + # @param url [String] A public URL of the video content + # + # @param type [Symbol, :video] + end + + class Audio < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :audio] + required :type, const: :audio + + # @!attribute url + # The URL of the audio content + # + # @return [String] + required :url, String + + # @!method initialize(url:, type: :audio) + # Audio + # + # @param url [String] The URL of the audio content + # + # @param type [Symbol, :audio] + end + + class Object < ModerationAPI::Internal::Type::BaseModel + # @!attribute data + # Values in the object. Can be mixed content types. + # + # @return [Hash{Symbol=>ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Text, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Image, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Video, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Audio}] + required :data, + -> { ModerationAPI::Internal::Type::HashOf[union: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data] } + + # @!attribute type + # + # @return [Symbol, :object] + required :type, const: :object + + # @!method initialize(data:, type: :object) + # Object + # + # @param data [Hash{Symbol=>ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Text, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Image, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Video, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Audio}] Values in the object. Can be mixed content types. + # + # @param type [Symbol, :object] + + # Text + module Data + extend ModerationAPI::Internal::Type::Union + + # Text + variant -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Text } + + # Image + variant -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Image } + + # Video + variant -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Video } + + # Audio + variant -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Audio } + + class Text < ModerationAPI::Internal::Type::BaseModel + # @!attribute text + # The content text + # + # @return [String] + required :text, String + + # @!attribute type + # + # @return [Symbol, :text] + required :type, const: :text + + # @!method initialize(text:, type: :text) + # Text + # + # @param text [String] The content text + # + # @param type [Symbol, :text] + end + + class Image < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :image] + required :type, const: :image + + # @!attribute data + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + # + # @return [String, nil] + optional :data, String + + # @!attribute url + # A public URL of the image content. Either url or data must be provided. + # + # @return [String, nil] + optional :url, String + + # @!method initialize(data: nil, url: nil, type: :image) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Image} + # for more details. + # + # Image + # + # @param data [String] Base64-encoded image data. Either url or data must be provided. Note: base64 ima + # + # @param url [String] A public URL of the image content. Either url or data must be provided. + # + # @param type [Symbol, :image] + end + + class Video < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :video] + required :type, const: :video + + # @!attribute url + # A public URL of the video content + # + # @return [String] + required :url, String + + # @!method initialize(url:, type: :video) + # Video + # + # @param url [String] A public URL of the video content + # + # @param type [Symbol, :video] + end + + class Audio < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :audio] + required :type, const: :audio + + # @!attribute url + # The URL of the audio content + # + # @return [String] + required :url, String + + # @!method initialize(url:, type: :audio) + # Audio + # + # @param url [String] The URL of the audio content + # + # @param type [Symbol, :audio] + end + + # @!method self.variants + # @return [Array(ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Text, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Image, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Video, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Audio)] + end + end + + # @!method self.variants + # @return [Array(ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Text, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Image, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Video, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Audio, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object)] + end + + class Label < ModerationAPI::Internal::Type::BaseModel + # @!attribute label + # The label name + # + # @return [String] + required :label, String + + # @!attribute score + # Confidence score between 0 and 1 + # + # @return [Float] + required :score, Float + + # @!attribute flagged + # Whether this label crossed its flagging threshold + # + # @return [Boolean, nil] + optional :flagged, ModerationAPI::Internal::Type::Boolean + + # @!attribute manual + # True if the label was applied manually by a moderator + # + # @return [Boolean, nil] + optional :manual, ModerationAPI::Internal::Type::Boolean + + # @!attribute matches + # + # @return [Array, nil] + optional :matches, + -> { ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match] } + + # @!method initialize(label:, score:, flagged: nil, manual: nil, matches: nil) + # @param label [String] The label name + # + # @param score [Float] Confidence score between 0 and 1 + # + # @param flagged [Boolean] Whether this label crossed its flagging threshold + # + # @param manual [Boolean] True if the label was applied manually by a moderator + # + # @param matches [Array] + + class Match < ModerationAPI::Internal::Type::BaseModel + # @!attribute match + # The matched substring + # + # @return [String] + required :match, String + + # @!attribute probability + # Match confidence between 0 and 1 + # + # @return [Float] + required :probability, Float + + # @!attribute span + # [start, end] character offsets in the source text + # + # @return [Array] + required :span, ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::Internal::Type::Unknown] + + # @!attribute entity_type + # + # @return [String, nil] + optional :entity_type, String + + # @!attribute mask + # + # @return [String, nil] + optional :mask, String, nil?: true + + # @!attribute reasons + # + # @return [Array, nil] + optional :reasons, ModerationAPI::Internal::Type::ArrayOf[String] + + # @!attribute signals + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals, nil] + optional :signals, + -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals } + + # @!method initialize(match:, probability:, span:, entity_type: nil, mask: nil, reasons: nil, signals: nil) + # @param match [String] The matched substring + # + # @param probability [Float] Match confidence between 0 and 1 + # + # @param span [Array] [start, end] character offsets in the source text + # + # @param entity_type [String] + # + # @param mask [String, nil] + # + # @param reasons [Array] + # + # @param signals [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals] + + # @see ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match#signals + class Signals < ModerationAPI::Internal::Type::BaseModel + # @!attribute bot_protection + # + # @return [Boolean, nil] + required :bot_protection, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute brand_impersonation + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals::BrandImpersonation, nil] + required :brand_impersonation, + -> { + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals::BrandImpersonation + }, + nil?: true + + # @!attribute domain_age_days + # + # @return [Float, nil] + required :domain_age_days, Float, nil?: true + + # @!attribute final_url + # + # @return [String, nil] + required :final_url, String, nil?: true + + # @!attribute has_email_setup + # + # @return [Boolean, nil] + required :has_email_setup, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute has_suspicious_characters + # + # @return [Boolean] + required :has_suspicious_characters, ModerationAPI::Internal::Type::Boolean + + # @!attribute is_link_shortener + # + # @return [Boolean] + required :is_link_shortener, ModerationAPI::Internal::Type::Boolean + + # @!attribute is_reported + # + # @return [Boolean] + required :is_reported, ModerationAPI::Internal::Type::Boolean + + # @!attribute redirect_count + # + # @return [Float, nil] + required :redirect_count, Float, nil?: true + + # @!method initialize(bot_protection:, brand_impersonation:, domain_age_days:, final_url:, has_email_setup:, has_suspicious_characters:, is_link_shortener:, is_reported:, redirect_count:) + # @param bot_protection [Boolean, nil] + # @param brand_impersonation [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals::BrandImpersonation, nil] + # @param domain_age_days [Float, nil] + # @param final_url [String, nil] + # @param has_email_setup [Boolean, nil] + # @param has_suspicious_characters [Boolean] + # @param is_link_shortener [Boolean] + # @param is_reported [Boolean] + # @param redirect_count [Float, nil] + + # @see ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals#brand_impersonation + class BrandImpersonation < ModerationAPI::Internal::Type::BaseModel + # @!attribute brand + # + # @return [String] + required :brand, String + + # @!attribute method_ + # + # @return [String] + required :method_, String, api_name: :method + + # @!method initialize(brand:, method_:) + # @param brand [String] + # @param method_ [String] + end + end + end + end + + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item#meta_type + module MetaType + extend ModerationAPI::Internal::Type::Enum + + PROFILE = :profile + MESSAGE = :message + POST = :post + COMMENT = :comment + EVENT = :event + PRODUCT = :product + REVIEW = :review + OTHER = :other + + # @!method self.values + # @return [Array] + end + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object#author + class Author < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Author ID in Moderation API + # + # @return [String] + required :id, String + + # @!attribute block + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::Block, nil] + required :block, + -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Block }, + nil?: true + + # @!attribute first_seen + # Timestamp when author first appeared + # + # @return [Float] + required :first_seen, Float + + # @!attribute last_seen + # Timestamp of last activity + # + # @return [Float] + required :last_seen, Float + + # @!attribute metadata + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metadata] + required :metadata, -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metadata } + + # @!attribute metrics + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metrics] + required :metrics, -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metrics } + + # @!attribute risk_evaluation + # Risk assessment details, if available. + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::RiskEvaluation, nil] + required :risk_evaluation, + -> { + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::RiskEvaluation + }, + nil?: true + + # @!attribute status + # Current author status + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::Status] + required :status, + enum: -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Status } + + # @!attribute trust_level + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::TrustLevel] + required :trust_level, + -> { ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::TrustLevel } + + # @!attribute company + # The author's company or organization + # + # @return [String, nil] + optional :company, String, nil?: true + + # @!attribute email + # Author email address + # + # @return [String, nil] + optional :email, String, nil?: true + + # @!attribute external_id + # The author's ID from your system + # + # @return [String, nil] + optional :external_id, String, nil?: true + + # @!attribute external_link + # URL of the author's external profile + # + # @return [String, nil] + optional :external_link, String, nil?: true + + # @!attribute last_incident + # Timestamp of last incident + # + # @return [Float, nil] + optional :last_incident, Float, nil?: true + + # @!attribute name + # Author name or identifier + # + # @return [String, nil] + optional :name, String, nil?: true + + # @!attribute profile_picture + # URL of the author's profile picture + # + # @return [String, nil] + optional :profile_picture, String, nil?: true + + # @!method initialize(id:, block:, first_seen:, last_seen:, metadata:, metrics:, risk_evaluation:, status:, trust_level:, company: nil, email: nil, external_id: nil, external_link: nil, last_incident: nil, name: nil, profile_picture: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author} + # for more details. + # + # @param id [String] Author ID in Moderation API + # + # @param block [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::Block, nil] Block or suspension details, if applicable. Null if the author is enabled. + # + # @param first_seen [Float] Timestamp when author first appeared + # + # @param last_seen [Float] Timestamp of last activity + # + # @param metadata [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metadata] Additional metadata provided by your system. We recommend including any relevant + # + # @param metrics [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metrics] + # + # @param risk_evaluation [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::RiskEvaluation, nil] Risk assessment details, if available. + # + # @param status [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::Status] Current author status + # + # @param trust_level [ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::TrustLevel] + # + # @param company [String, nil] The author's company or organization + # + # @param email [String, nil] Author email address + # + # @param external_id [String, nil] The author's ID from your system + # + # @param external_link [String, nil] URL of the author's external profile + # + # @param last_incident [Float, nil] Timestamp of last incident + # + # @param name [String, nil] Author name or identifier + # + # @param profile_picture [String, nil] URL of the author's profile picture + + # @see ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author#block + class Block < ModerationAPI::Internal::Type::BaseModel + # @!attribute reason + # The moderators reason why the author was blocked or suspended. + # + # @return [String, nil] + optional :reason, String, nil?: true + + # @!attribute until_ + # The timestamp until which they are blocked if the author is suspended. + # + # @return [Float, nil] + optional :until_, Float, api_name: :until, nil?: true + + # @!method initialize(reason: nil, until_: nil) + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @param reason [String, nil] The moderators reason why the author was blocked or suspended. + # + # @param until_ [Float, nil] The timestamp until which they are blocked if the author is suspended. + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author#metadata + class Metadata < ModerationAPI::Internal::Type::BaseModel + # @!attribute email_verified + # Whether the author's email is verified + # + # @return [Boolean, nil] + optional :email_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute identity_verified + # Whether the author's identity is verified + # + # @return [Boolean, nil] + optional :identity_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute is_paying_customer + # Whether the author is a paying customer + # + # @return [Boolean, nil] + optional :is_paying_customer, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute phone_verified + # Whether the author's phone number is verified + # + # @return [Boolean, nil] + optional :phone_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!method initialize(email_verified: nil, identity_verified: nil, is_paying_customer: nil, phone_verified: nil) + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @param email_verified [Boolean, nil] Whether the author's email is verified + # + # @param identity_verified [Boolean, nil] Whether the author's identity is verified + # + # @param is_paying_customer [Boolean, nil] Whether the author is a paying customer + # + # @param phone_verified [Boolean, nil] Whether the author's phone number is verified + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author#metrics + class Metrics < ModerationAPI::Internal::Type::BaseModel + # @!attribute flagged_content + # Number of flagged content pieces + # + # @return [Float] + required :flagged_content, Float + + # @!attribute total_content + # Total pieces of content + # + # @return [Float] + required :total_content, Float + + # @!attribute average_sentiment + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + # + # @return [Float, nil] + optional :average_sentiment, Float, nil?: true + + # @!method initialize(flagged_content:, total_content:, average_sentiment: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metrics} + # for more details. + # + # @param flagged_content [Float] Number of flagged content pieces + # + # @param total_content [Float] Total pieces of content + # + # @param average_sentiment [Float, nil] Average sentiment score of content (-1 to 1). Requires a sentiment model in your + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author#risk_evaluation + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + # @!attribute risk_level + # Calculated risk level based on more than 10 behavioral signals. + # + # @return [Float, nil] + optional :risk_level, Float, nil?: true + + # @!method initialize(risk_level: nil) + # Risk assessment details, if available. + # + # @param risk_level [Float, nil] Calculated risk level based on more than 10 behavioral signals. + end + + # Current author status + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author#status + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED = :enabled + SUSPENDED = :suspended + BLOCKED = :blocked + + # @!method self.values + # @return [Array] + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author#trust_level + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + # @!attribute level + # Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @return [Float] + required :level, Float + + # @!attribute manual + # True if the trust level was set manually by a moderator + # + # @return [Boolean] + required :manual, ModerationAPI::Internal::Type::Boolean + + # @!method initialize(level:, manual:) + # @param level [Float] Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @param manual [Boolean] True if the trust level was set manually by a moderator + end + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object#queue + class Queue < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # + # @return [String] + required :id, String + + # @!method initialize(id:) + # @param id [String] + end + end + end + end + + class QueueItemAction < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Stable event ID. Use this to dedupe retries. + # + # @return [String] + required :id, String + + # @!attribute api_version + # + # @return [Symbol, :v2] + required :api_version, const: :v2 + + # @!attribute created + # ISO 8601 timestamp of when the event was emitted. + # + # @return [Time] + required :created, Time + + # @!attribute data + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data] + required :data, -> { ModerationAPI::WebhookEvent::QueueItemAction::Data } + + # @!attribute type + # The event type. + # + # @return [Symbol, :"queue_item.action"] + required :type, const: :"queue_item.action" + + # @!method initialize(id:, created:, data:, api_version: :v2, type: :"queue_item.action") + # @param id [String] Stable event ID. Use this to dedupe retries. + # + # @param created [Time] ISO 8601 timestamp of when the event was emitted. + # + # @param data [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data] + # + # @param api_version [Symbol, :v2] + # + # @param type [Symbol, :"queue_item.action"] The event type. + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction#data + class Data < ModerationAPI::Internal::Type::BaseModel + # @!attribute object + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object] + required :object, -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object } + + # @!method initialize(object:) + # @param object [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object] + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data#object + class Object < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Moderation action ID + # + # @return [String] + required :id, String + + # @!attribute created_at + # ISO 8601 timestamp of when the action was performed + # + # @return [Time] + required :created_at, Time + + # @!attribute key + # Customer-defined key identifying this action + # + # @return [String, nil] + required :key, String, nil?: true + + # @!attribute name + # Display name of the action + # + # @return [String, nil] + required :name, String, nil?: true + + # @!attribute value + # The value passed to the action when it ran + # + # @return [String, nil] + required :value, String, nil?: true + + # @!attribute author + # The author the action was performed on, if any + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author, nil] + optional :author, -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author } + + # @!attribute item + # The content item the action was performed on, if any + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item, nil] + optional :item, -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item } + + # @!attribute queue + # The queue the item belongs to, if any + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Queue, nil] + optional :queue, -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Queue } + + # @!method initialize(id:, created_at:, key:, name:, value:, author: nil, item: nil, queue: nil) + # @param id [String] Moderation action ID + # + # @param created_at [Time] ISO 8601 timestamp of when the action was performed + # + # @param key [String, nil] Customer-defined key identifying this action + # + # @param name [String, nil] Display name of the action + # + # @param value [String, nil] The value passed to the action when it ran + # + # @param author [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author] The author the action was performed on, if any + # + # @param item [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item] The content item the action was performed on, if any + # + # @param queue [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Queue] The queue the item belongs to, if any + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object#author + class Author < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Author ID in Moderation API + # + # @return [String] + required :id, String + + # @!attribute block + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::Block, nil] + required :block, + -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Block }, + nil?: true + + # @!attribute first_seen + # Timestamp when author first appeared + # + # @return [Float] + required :first_seen, Float + + # @!attribute last_seen + # Timestamp of last activity + # + # @return [Float] + required :last_seen, Float + + # @!attribute metadata + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::Metadata] + required :metadata, -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metadata } + + # @!attribute metrics + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::Metrics] + required :metrics, -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metrics } + + # @!attribute risk_evaluation + # Risk assessment details, if available. + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::RiskEvaluation, nil] + required :risk_evaluation, + -> { + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::RiskEvaluation + }, + nil?: true + + # @!attribute status + # Current author status + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::Status] + required :status, enum: -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Status } + + # @!attribute trust_level + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::TrustLevel] + required :trust_level, + -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::TrustLevel } + + # @!attribute company + # The author's company or organization + # + # @return [String, nil] + optional :company, String, nil?: true + + # @!attribute email + # Author email address + # + # @return [String, nil] + optional :email, String, nil?: true + + # @!attribute external_id + # The author's ID from your system + # + # @return [String, nil] + optional :external_id, String, nil?: true + + # @!attribute external_link + # URL of the author's external profile + # + # @return [String, nil] + optional :external_link, String, nil?: true + + # @!attribute last_incident + # Timestamp of last incident + # + # @return [Float, nil] + optional :last_incident, Float, nil?: true + + # @!attribute name + # Author name or identifier + # + # @return [String, nil] + optional :name, String, nil?: true + + # @!attribute profile_picture + # URL of the author's profile picture + # + # @return [String, nil] + optional :profile_picture, String, nil?: true + + # @!method initialize(id:, block:, first_seen:, last_seen:, metadata:, metrics:, risk_evaluation:, status:, trust_level:, company: nil, email: nil, external_id: nil, external_link: nil, last_incident: nil, name: nil, profile_picture: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author} for + # more details. + # + # The author the action was performed on, if any + # + # @param id [String] Author ID in Moderation API + # + # @param block [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::Block, nil] Block or suspension details, if applicable. Null if the author is enabled. + # + # @param first_seen [Float] Timestamp when author first appeared + # + # @param last_seen [Float] Timestamp of last activity + # + # @param metadata [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::Metadata] Additional metadata provided by your system. We recommend including any relevant + # + # @param metrics [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::Metrics] + # + # @param risk_evaluation [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::RiskEvaluation, nil] Risk assessment details, if available. + # + # @param status [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::Status] Current author status + # + # @param trust_level [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::TrustLevel] + # + # @param company [String, nil] The author's company or organization + # + # @param email [String, nil] Author email address + # + # @param external_id [String, nil] The author's ID from your system + # + # @param external_link [String, nil] URL of the author's external profile + # + # @param last_incident [Float, nil] Timestamp of last incident + # + # @param name [String, nil] Author name or identifier + # + # @param profile_picture [String, nil] URL of the author's profile picture + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author#block + class Block < ModerationAPI::Internal::Type::BaseModel + # @!attribute reason + # The moderators reason why the author was blocked or suspended. + # + # @return [String, nil] + optional :reason, String, nil?: true + + # @!attribute until_ + # The timestamp until which they are blocked if the author is suspended. + # + # @return [Float, nil] + optional :until_, Float, api_name: :until, nil?: true + + # @!method initialize(reason: nil, until_: nil) + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @param reason [String, nil] The moderators reason why the author was blocked or suspended. + # + # @param until_ [Float, nil] The timestamp until which they are blocked if the author is suspended. + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author#metadata + class Metadata < ModerationAPI::Internal::Type::BaseModel + # @!attribute email_verified + # Whether the author's email is verified + # + # @return [Boolean, nil] + optional :email_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute identity_verified + # Whether the author's identity is verified + # + # @return [Boolean, nil] + optional :identity_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute is_paying_customer + # Whether the author is a paying customer + # + # @return [Boolean, nil] + optional :is_paying_customer, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute phone_verified + # Whether the author's phone number is verified + # + # @return [Boolean, nil] + optional :phone_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!method initialize(email_verified: nil, identity_verified: nil, is_paying_customer: nil, phone_verified: nil) + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @param email_verified [Boolean, nil] Whether the author's email is verified + # + # @param identity_verified [Boolean, nil] Whether the author's identity is verified + # + # @param is_paying_customer [Boolean, nil] Whether the author is a paying customer + # + # @param phone_verified [Boolean, nil] Whether the author's phone number is verified + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author#metrics + class Metrics < ModerationAPI::Internal::Type::BaseModel + # @!attribute flagged_content + # Number of flagged content pieces + # + # @return [Float] + required :flagged_content, Float + + # @!attribute total_content + # Total pieces of content + # + # @return [Float] + required :total_content, Float + + # @!attribute average_sentiment + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + # + # @return [Float, nil] + optional :average_sentiment, Float, nil?: true + + # @!method initialize(flagged_content:, total_content:, average_sentiment: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::Metrics} + # for more details. + # + # @param flagged_content [Float] Number of flagged content pieces + # + # @param total_content [Float] Total pieces of content + # + # @param average_sentiment [Float, nil] Average sentiment score of content (-1 to 1). Requires a sentiment model in your + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author#risk_evaluation + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + # @!attribute risk_level + # Calculated risk level based on more than 10 behavioral signals. + # + # @return [Float, nil] + optional :risk_level, Float, nil?: true + + # @!method initialize(risk_level: nil) + # Risk assessment details, if available. + # + # @param risk_level [Float, nil] Calculated risk level based on more than 10 behavioral signals. + end + + # Current author status + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author#status + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED = :enabled + SUSPENDED = :suspended + BLOCKED = :blocked + + # @!method self.values + # @return [Array] + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author#trust_level + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + # @!attribute level + # Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @return [Float] + required :level, Float + + # @!attribute manual + # True if the trust level was set manually by a moderator + # + # @return [Boolean] + required :manual, ModerationAPI::Internal::Type::Boolean + + # @!method initialize(level:, manual:) + # @param level [Float] Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @param manual [Boolean] True if the trust level was set manually by a moderator + end + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object#item + class Item < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Content ID from your system + # + # @return [String] + required :id, String + + # @!attribute author_id + # External author ID (the customer's identifier, not Moderation API's internal id) + # + # @return [String, nil] + required :author_id, String, nil?: true + + # @!attribute channel_key + # The channel the content was submitted to, identified by your customer-defined + # channel key. + # + # @return [String, nil] + required :channel_key, String, nil?: true + + # @!attribute content + # The original content payload + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Text, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Image, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Video, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Audio, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object] + required :content, union: -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content } + + # @!attribute conversation_id + # Conversation grouping ID, if any + # + # @return [String, nil] + required :conversation_id, String, nil?: true + + # @!attribute flagged + # Whether the content was flagged by moderation + # + # @return [Boolean, nil] + required :flagged, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute labels + # Moderation labels applied to the content + # + # @return [Array, nil] + required :labels, + -> { + ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label] + }, + nil?: true + + # @!attribute language + # Detected ISO language code, if available + # + # @return [String, nil] + required :language, String, nil?: true + + # @!attribute meta_type + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::MetaType, nil] + required :meta_type, + enum: -> { + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::MetaType + }, + nil?: true + + # @!attribute metadata + # Arbitrary key/value metadata. Top-level keys are strings. + # + # @return [Hash{Symbol=>Object}, nil] + required :metadata, + ModerationAPI::Internal::Type::HashOf[ModerationAPI::Internal::Type::Unknown], + nil?: true + + # @!attribute timestamp + # ISO 8601 timestamp of when the content was submitted + # + # @return [Time] + required :timestamp, Time + + # @!method initialize(id:, author_id:, channel_key:, content:, conversation_id:, flagged:, labels:, language:, meta_type:, metadata:, timestamp:) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item} for + # more details. + # + # The content item the action was performed on, if any + # + # @param id [String] Content ID from your system + # + # @param author_id [String, nil] External author ID (the customer's identifier, not Moderation API's internal id) + # + # @param channel_key [String, nil] The channel the content was submitted to, identified by your customer-defined ch + # + # @param content [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Text, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Image, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Video, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Audio, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object] The original content payload + # + # @param conversation_id [String, nil] Conversation grouping ID, if any + # + # @param flagged [Boolean, nil] Whether the content was flagged by moderation + # + # @param labels [Array, nil] Moderation labels applied to the content + # + # @param language [String, nil] Detected ISO language code, if available + # + # @param meta_type [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::MetaType, nil] High-level content type (e.g. message, post, comment). Defaults to the channel's + # + # @param metadata [Hash{Symbol=>Object}, nil] Arbitrary key/value metadata. Top-level keys are strings. + # + # @param timestamp [Time] ISO 8601 timestamp of when the content was submitted + + # The original content payload + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item#content + module Content + extend ModerationAPI::Internal::Type::Union + + # Text + variant -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Text } + + # Image + variant -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Image } + + # Video + variant -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Video } + + # Audio + variant -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Audio } + + # Object + variant -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object } + + class Text < ModerationAPI::Internal::Type::BaseModel + # @!attribute text + # The content text + # + # @return [String] + required :text, String + + # @!attribute type + # + # @return [Symbol, :text] + required :type, const: :text + + # @!method initialize(text:, type: :text) + # Text + # + # @param text [String] The content text + # + # @param type [Symbol, :text] + end + + class Image < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :image] + required :type, const: :image + + # @!attribute data + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + # + # @return [String, nil] + optional :data, String + + # @!attribute url + # A public URL of the image content. Either url or data must be provided. + # + # @return [String, nil] + optional :url, String + + # @!method initialize(data: nil, url: nil, type: :image) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Image} + # for more details. + # + # Image + # + # @param data [String] Base64-encoded image data. Either url or data must be provided. Note: base64 ima + # + # @param url [String] A public URL of the image content. Either url or data must be provided. + # + # @param type [Symbol, :image] + end + + class Video < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :video] + required :type, const: :video + + # @!attribute url + # A public URL of the video content + # + # @return [String] + required :url, String + + # @!method initialize(url:, type: :video) + # Video + # + # @param url [String] A public URL of the video content + # + # @param type [Symbol, :video] + end + + class Audio < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :audio] + required :type, const: :audio + + # @!attribute url + # The URL of the audio content + # + # @return [String] + required :url, String + + # @!method initialize(url:, type: :audio) + # Audio + # + # @param url [String] The URL of the audio content + # + # @param type [Symbol, :audio] + end + + class Object < ModerationAPI::Internal::Type::BaseModel + # @!attribute data + # Values in the object. Can be mixed content types. + # + # @return [Hash{Symbol=>ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Text, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Image, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Video, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Audio}] + required :data, + -> { ModerationAPI::Internal::Type::HashOf[union: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data] } + + # @!attribute type + # + # @return [Symbol, :object] + required :type, const: :object + + # @!method initialize(data:, type: :object) + # Object + # + # @param data [Hash{Symbol=>ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Text, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Image, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Video, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Audio}] Values in the object. Can be mixed content types. + # + # @param type [Symbol, :object] + + # Text + module Data + extend ModerationAPI::Internal::Type::Union + + # Text + variant -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Text } + + # Image + variant -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Image } + + # Video + variant -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Video } + + # Audio + variant -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Audio } + + class Text < ModerationAPI::Internal::Type::BaseModel + # @!attribute text + # The content text + # + # @return [String] + required :text, String + + # @!attribute type + # + # @return [Symbol, :text] + required :type, const: :text + + # @!method initialize(text:, type: :text) + # Text + # + # @param text [String] The content text + # + # @param type [Symbol, :text] + end + + class Image < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :image] + required :type, const: :image + + # @!attribute data + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + # + # @return [String, nil] + optional :data, String + + # @!attribute url + # A public URL of the image content. Either url or data must be provided. + # + # @return [String, nil] + optional :url, String + + # @!method initialize(data: nil, url: nil, type: :image) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Image} + # for more details. + # + # Image + # + # @param data [String] Base64-encoded image data. Either url or data must be provided. Note: base64 ima + # + # @param url [String] A public URL of the image content. Either url or data must be provided. + # + # @param type [Symbol, :image] + end + + class Video < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :video] + required :type, const: :video + + # @!attribute url + # A public URL of the video content + # + # @return [String] + required :url, String + + # @!method initialize(url:, type: :video) + # Video + # + # @param url [String] A public URL of the video content + # + # @param type [Symbol, :video] + end + + class Audio < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :audio] + required :type, const: :audio + + # @!attribute url + # The URL of the audio content + # + # @return [String] + required :url, String + + # @!method initialize(url:, type: :audio) + # Audio + # + # @param url [String] The URL of the audio content + # + # @param type [Symbol, :audio] + end + + # @!method self.variants + # @return [Array(ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Text, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Image, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Video, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Audio)] + end + end + + # @!method self.variants + # @return [Array(ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Text, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Image, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Video, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Audio, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object)] + end + + class Label < ModerationAPI::Internal::Type::BaseModel + # @!attribute label + # The label name + # + # @return [String] + required :label, String + + # @!attribute score + # Confidence score between 0 and 1 + # + # @return [Float] + required :score, Float + + # @!attribute flagged + # Whether this label crossed its flagging threshold + # + # @return [Boolean, nil] + optional :flagged, ModerationAPI::Internal::Type::Boolean + + # @!attribute manual + # True if the label was applied manually by a moderator + # + # @return [Boolean, nil] + optional :manual, ModerationAPI::Internal::Type::Boolean + + # @!attribute matches + # + # @return [Array, nil] + optional :matches, + -> { ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match] } + + # @!method initialize(label:, score:, flagged: nil, manual: nil, matches: nil) + # @param label [String] The label name + # + # @param score [Float] Confidence score between 0 and 1 + # + # @param flagged [Boolean] Whether this label crossed its flagging threshold + # + # @param manual [Boolean] True if the label was applied manually by a moderator + # + # @param matches [Array] + + class Match < ModerationAPI::Internal::Type::BaseModel + # @!attribute match + # The matched substring + # + # @return [String] + required :match, String + + # @!attribute probability + # Match confidence between 0 and 1 + # + # @return [Float] + required :probability, Float + + # @!attribute span + # [start, end] character offsets in the source text + # + # @return [Array] + required :span, ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::Internal::Type::Unknown] + + # @!attribute entity_type + # + # @return [String, nil] + optional :entity_type, String + + # @!attribute mask + # + # @return [String, nil] + optional :mask, String, nil?: true + + # @!attribute reasons + # + # @return [Array, nil] + optional :reasons, ModerationAPI::Internal::Type::ArrayOf[String] + + # @!attribute signals + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals, nil] + optional :signals, + -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals } + + # @!method initialize(match:, probability:, span:, entity_type: nil, mask: nil, reasons: nil, signals: nil) + # @param match [String] The matched substring + # + # @param probability [Float] Match confidence between 0 and 1 + # + # @param span [Array] [start, end] character offsets in the source text + # + # @param entity_type [String] + # + # @param mask [String, nil] + # + # @param reasons [Array] + # + # @param signals [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals] + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match#signals + class Signals < ModerationAPI::Internal::Type::BaseModel + # @!attribute bot_protection + # + # @return [Boolean, nil] + required :bot_protection, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute brand_impersonation + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals::BrandImpersonation, nil] + required :brand_impersonation, + -> { + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals::BrandImpersonation + }, + nil?: true + + # @!attribute domain_age_days + # + # @return [Float, nil] + required :domain_age_days, Float, nil?: true + + # @!attribute final_url + # + # @return [String, nil] + required :final_url, String, nil?: true + + # @!attribute has_email_setup + # + # @return [Boolean, nil] + required :has_email_setup, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute has_suspicious_characters + # + # @return [Boolean] + required :has_suspicious_characters, ModerationAPI::Internal::Type::Boolean + + # @!attribute is_link_shortener + # + # @return [Boolean] + required :is_link_shortener, ModerationAPI::Internal::Type::Boolean + + # @!attribute is_reported + # + # @return [Boolean] + required :is_reported, ModerationAPI::Internal::Type::Boolean + + # @!attribute redirect_count + # + # @return [Float, nil] + required :redirect_count, Float, nil?: true + + # @!method initialize(bot_protection:, brand_impersonation:, domain_age_days:, final_url:, has_email_setup:, has_suspicious_characters:, is_link_shortener:, is_reported:, redirect_count:) + # @param bot_protection [Boolean, nil] + # @param brand_impersonation [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals::BrandImpersonation, nil] + # @param domain_age_days [Float, nil] + # @param final_url [String, nil] + # @param has_email_setup [Boolean, nil] + # @param has_suspicious_characters [Boolean] + # @param is_link_shortener [Boolean] + # @param is_reported [Boolean] + # @param redirect_count [Float, nil] + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals#brand_impersonation + class BrandImpersonation < ModerationAPI::Internal::Type::BaseModel + # @!attribute brand + # + # @return [String] + required :brand, String + + # @!attribute method_ + # + # @return [String] + required :method_, String, api_name: :method + + # @!method initialize(brand:, method_:) + # @param brand [String] + # @param method_ [String] + end + end + end + end + + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item#meta_type + module MetaType + extend ModerationAPI::Internal::Type::Enum + + PROFILE = :profile + MESSAGE = :message + POST = :post + COMMENT = :comment + EVENT = :event + PRODUCT = :product + REVIEW = :review + OTHER = :other + + # @!method self.values + # @return [Array] + end + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object#queue + class Queue < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # + # @return [String] + required :id, String + + # @!method initialize(id:) + # The queue the item belongs to, if any + # + # @param id [String] + end + end + end + end + + class QueueItemRejected < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Stable event ID. Use this to dedupe retries. + # + # @return [String] + required :id, String + + # @!attribute api_version + # + # @return [Symbol, :v2] + required :api_version, const: :v2 + + # @!attribute created + # ISO 8601 timestamp of when the event was emitted. + # + # @return [Time] + required :created, Time + + # @!attribute data + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data] + required :data, -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data } + + # @!attribute type + # The event type. + # + # @return [Symbol, :"queue_item.rejected"] + required :type, const: :"queue_item.rejected" + + # @!method initialize(id:, created:, data:, api_version: :v2, type: :"queue_item.rejected") + # @param id [String] Stable event ID. Use this to dedupe retries. + # + # @param created [Time] ISO 8601 timestamp of when the event was emitted. + # + # @param data [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data] + # + # @param api_version [Symbol, :v2] + # + # @param type [Symbol, :"queue_item.rejected"] The event type. + + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected#data + class Data < ModerationAPI::Internal::Type::BaseModel + # @!attribute object + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object] + required :object, -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object } + + # @!method initialize(object:) + # @param object [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object] + + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data#object + class Object < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Moderation action ID + # + # @return [String] + required :id, String + + # @!attribute created_at + # ISO 8601 timestamp of when the action was performed + # + # @return [Time] + required :created_at, Time + + # @!attribute key + # Customer-defined key identifying this action + # + # @return [String, nil] + required :key, String, nil?: true + + # @!attribute name + # Display name of the action + # + # @return [String, nil] + required :name, String, nil?: true + + # @!attribute value + # The value passed to the action when it ran + # + # @return [String, nil] + required :value, String, nil?: true + + # @!attribute author + # The author the action was performed on, if any + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author, nil] + optional :author, -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author } + + # @!attribute item + # The content item the action was performed on, if any + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item, nil] + optional :item, -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item } + + # @!attribute queue + # The queue the item belongs to, if any + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Queue, nil] + optional :queue, -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Queue } + + # @!method initialize(id:, created_at:, key:, name:, value:, author: nil, item: nil, queue: nil) + # @param id [String] Moderation action ID + # + # @param created_at [Time] ISO 8601 timestamp of when the action was performed + # + # @param key [String, nil] Customer-defined key identifying this action + # + # @param name [String, nil] Display name of the action + # + # @param value [String, nil] The value passed to the action when it ran + # + # @param author [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author] The author the action was performed on, if any + # + # @param item [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item] The content item the action was performed on, if any + # + # @param queue [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Queue] The queue the item belongs to, if any + + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object#author + class Author < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Author ID in Moderation API + # + # @return [String] + required :id, String + + # @!attribute block + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::Block, nil] + required :block, + -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Block }, + nil?: true + + # @!attribute first_seen + # Timestamp when author first appeared + # + # @return [Float] + required :first_seen, Float + + # @!attribute last_seen + # Timestamp of last activity + # + # @return [Float] + required :last_seen, Float + + # @!attribute metadata + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::Metadata] + required :metadata, -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metadata } + + # @!attribute metrics + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::Metrics] + required :metrics, -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metrics } + + # @!attribute risk_evaluation + # Risk assessment details, if available. + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::RiskEvaluation, nil] + required :risk_evaluation, + -> { + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::RiskEvaluation + }, + nil?: true + + # @!attribute status + # Current author status + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::Status] + required :status, + enum: -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Status } + + # @!attribute trust_level + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::TrustLevel] + required :trust_level, + -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::TrustLevel } + + # @!attribute company + # The author's company or organization + # + # @return [String, nil] + optional :company, String, nil?: true + + # @!attribute email + # Author email address + # + # @return [String, nil] + optional :email, String, nil?: true + + # @!attribute external_id + # The author's ID from your system + # + # @return [String, nil] + optional :external_id, String, nil?: true + + # @!attribute external_link + # URL of the author's external profile + # + # @return [String, nil] + optional :external_link, String, nil?: true + + # @!attribute last_incident + # Timestamp of last incident + # + # @return [Float, nil] + optional :last_incident, Float, nil?: true + + # @!attribute name + # Author name or identifier + # + # @return [String, nil] + optional :name, String, nil?: true + + # @!attribute profile_picture + # URL of the author's profile picture + # + # @return [String, nil] + optional :profile_picture, String, nil?: true + + # @!method initialize(id:, block:, first_seen:, last_seen:, metadata:, metrics:, risk_evaluation:, status:, trust_level:, company: nil, email: nil, external_id: nil, external_link: nil, last_incident: nil, name: nil, profile_picture: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author} + # for more details. + # + # The author the action was performed on, if any + # + # @param id [String] Author ID in Moderation API + # + # @param block [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::Block, nil] Block or suspension details, if applicable. Null if the author is enabled. + # + # @param first_seen [Float] Timestamp when author first appeared + # + # @param last_seen [Float] Timestamp of last activity + # + # @param metadata [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::Metadata] Additional metadata provided by your system. We recommend including any relevant + # + # @param metrics [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::Metrics] + # + # @param risk_evaluation [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::RiskEvaluation, nil] Risk assessment details, if available. + # + # @param status [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::Status] Current author status + # + # @param trust_level [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::TrustLevel] + # + # @param company [String, nil] The author's company or organization + # + # @param email [String, nil] Author email address + # + # @param external_id [String, nil] The author's ID from your system + # + # @param external_link [String, nil] URL of the author's external profile + # + # @param last_incident [Float, nil] Timestamp of last incident + # + # @param name [String, nil] Author name or identifier + # + # @param profile_picture [String, nil] URL of the author's profile picture + + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author#block + class Block < ModerationAPI::Internal::Type::BaseModel + # @!attribute reason + # The moderators reason why the author was blocked or suspended. + # + # @return [String, nil] + optional :reason, String, nil?: true + + # @!attribute until_ + # The timestamp until which they are blocked if the author is suspended. + # + # @return [Float, nil] + optional :until_, Float, api_name: :until, nil?: true + + # @!method initialize(reason: nil, until_: nil) + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @param reason [String, nil] The moderators reason why the author was blocked or suspended. + # + # @param until_ [Float, nil] The timestamp until which they are blocked if the author is suspended. + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author#metadata + class Metadata < ModerationAPI::Internal::Type::BaseModel + # @!attribute email_verified + # Whether the author's email is verified + # + # @return [Boolean, nil] + optional :email_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute identity_verified + # Whether the author's identity is verified + # + # @return [Boolean, nil] + optional :identity_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute is_paying_customer + # Whether the author is a paying customer + # + # @return [Boolean, nil] + optional :is_paying_customer, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute phone_verified + # Whether the author's phone number is verified + # + # @return [Boolean, nil] + optional :phone_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!method initialize(email_verified: nil, identity_verified: nil, is_paying_customer: nil, phone_verified: nil) + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @param email_verified [Boolean, nil] Whether the author's email is verified + # + # @param identity_verified [Boolean, nil] Whether the author's identity is verified + # + # @param is_paying_customer [Boolean, nil] Whether the author is a paying customer + # + # @param phone_verified [Boolean, nil] Whether the author's phone number is verified + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author#metrics + class Metrics < ModerationAPI::Internal::Type::BaseModel + # @!attribute flagged_content + # Number of flagged content pieces + # + # @return [Float] + required :flagged_content, Float + + # @!attribute total_content + # Total pieces of content + # + # @return [Float] + required :total_content, Float + + # @!attribute average_sentiment + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + # + # @return [Float, nil] + optional :average_sentiment, Float, nil?: true + + # @!method initialize(flagged_content:, total_content:, average_sentiment: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::Metrics} + # for more details. + # + # @param flagged_content [Float] Number of flagged content pieces + # + # @param total_content [Float] Total pieces of content + # + # @param average_sentiment [Float, nil] Average sentiment score of content (-1 to 1). Requires a sentiment model in your + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author#risk_evaluation + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + # @!attribute risk_level + # Calculated risk level based on more than 10 behavioral signals. + # + # @return [Float, nil] + optional :risk_level, Float, nil?: true + + # @!method initialize(risk_level: nil) + # Risk assessment details, if available. + # + # @param risk_level [Float, nil] Calculated risk level based on more than 10 behavioral signals. + end + + # Current author status + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author#status + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED = :enabled + SUSPENDED = :suspended + BLOCKED = :blocked + + # @!method self.values + # @return [Array] + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author#trust_level + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + # @!attribute level + # Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @return [Float] + required :level, Float + + # @!attribute manual + # True if the trust level was set manually by a moderator + # + # @return [Boolean] + required :manual, ModerationAPI::Internal::Type::Boolean + + # @!method initialize(level:, manual:) + # @param level [Float] Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @param manual [Boolean] True if the trust level was set manually by a moderator + end + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object#item + class Item < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Content ID from your system + # + # @return [String] + required :id, String + + # @!attribute author_id + # External author ID (the customer's identifier, not Moderation API's internal id) + # + # @return [String, nil] + required :author_id, String, nil?: true + + # @!attribute channel_key + # The channel the content was submitted to, identified by your customer-defined + # channel key. + # + # @return [String, nil] + required :channel_key, String, nil?: true + + # @!attribute content + # The original content payload + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Text, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Image, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Video, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Audio, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object] + required :content, + union: -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content } + + # @!attribute conversation_id + # Conversation grouping ID, if any + # + # @return [String, nil] + required :conversation_id, String, nil?: true + + # @!attribute flagged + # Whether the content was flagged by moderation + # + # @return [Boolean, nil] + required :flagged, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute labels + # Moderation labels applied to the content + # + # @return [Array, nil] + required :labels, + -> { + ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label] + }, + nil?: true + + # @!attribute language + # Detected ISO language code, if available + # + # @return [String, nil] + required :language, String, nil?: true + + # @!attribute meta_type + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::MetaType, nil] + required :meta_type, + enum: -> { + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::MetaType + }, + nil?: true + + # @!attribute metadata + # Arbitrary key/value metadata. Top-level keys are strings. + # + # @return [Hash{Symbol=>Object}, nil] + required :metadata, + ModerationAPI::Internal::Type::HashOf[ModerationAPI::Internal::Type::Unknown], + nil?: true + + # @!attribute timestamp + # ISO 8601 timestamp of when the content was submitted + # + # @return [Time] + required :timestamp, Time + + # @!method initialize(id:, author_id:, channel_key:, content:, conversation_id:, flagged:, labels:, language:, meta_type:, metadata:, timestamp:) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item} for + # more details. + # + # The content item the action was performed on, if any + # + # @param id [String] Content ID from your system + # + # @param author_id [String, nil] External author ID (the customer's identifier, not Moderation API's internal id) + # + # @param channel_key [String, nil] The channel the content was submitted to, identified by your customer-defined ch + # + # @param content [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Text, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Image, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Video, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Audio, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object] The original content payload + # + # @param conversation_id [String, nil] Conversation grouping ID, if any + # + # @param flagged [Boolean, nil] Whether the content was flagged by moderation + # + # @param labels [Array, nil] Moderation labels applied to the content + # + # @param language [String, nil] Detected ISO language code, if available + # + # @param meta_type [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::MetaType, nil] High-level content type (e.g. message, post, comment). Defaults to the channel's + # + # @param metadata [Hash{Symbol=>Object}, nil] Arbitrary key/value metadata. Top-level keys are strings. + # + # @param timestamp [Time] ISO 8601 timestamp of when the content was submitted + + # The original content payload + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item#content + module Content + extend ModerationAPI::Internal::Type::Union + + # Text + variant -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Text } + + # Image + variant -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Image } + + # Video + variant -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Video } + + # Audio + variant -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Audio } + + # Object + variant -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object } + + class Text < ModerationAPI::Internal::Type::BaseModel + # @!attribute text + # The content text + # + # @return [String] + required :text, String + + # @!attribute type + # + # @return [Symbol, :text] + required :type, const: :text + + # @!method initialize(text:, type: :text) + # Text + # + # @param text [String] The content text + # + # @param type [Symbol, :text] + end + + class Image < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :image] + required :type, const: :image + + # @!attribute data + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + # + # @return [String, nil] + optional :data, String + + # @!attribute url + # A public URL of the image content. Either url or data must be provided. + # + # @return [String, nil] + optional :url, String + + # @!method initialize(data: nil, url: nil, type: :image) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Image} + # for more details. + # + # Image + # + # @param data [String] Base64-encoded image data. Either url or data must be provided. Note: base64 ima + # + # @param url [String] A public URL of the image content. Either url or data must be provided. + # + # @param type [Symbol, :image] + end + + class Video < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :video] + required :type, const: :video + + # @!attribute url + # A public URL of the video content + # + # @return [String] + required :url, String + + # @!method initialize(url:, type: :video) + # Video + # + # @param url [String] A public URL of the video content + # + # @param type [Symbol, :video] + end + + class Audio < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :audio] + required :type, const: :audio + + # @!attribute url + # The URL of the audio content + # + # @return [String] + required :url, String + + # @!method initialize(url:, type: :audio) + # Audio + # + # @param url [String] The URL of the audio content + # + # @param type [Symbol, :audio] + end + + class Object < ModerationAPI::Internal::Type::BaseModel + # @!attribute data + # Values in the object. Can be mixed content types. + # + # @return [Hash{Symbol=>ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Text, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Image, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Video, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Audio}] + required :data, + -> { ModerationAPI::Internal::Type::HashOf[union: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data] } + + # @!attribute type + # + # @return [Symbol, :object] + required :type, const: :object + + # @!method initialize(data:, type: :object) + # Object + # + # @param data [Hash{Symbol=>ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Text, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Image, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Video, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Audio}] Values in the object. Can be mixed content types. + # + # @param type [Symbol, :object] + + # Text + module Data + extend ModerationAPI::Internal::Type::Union + + # Text + variant -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Text } + + # Image + variant -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Image } + + # Video + variant -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Video } + + # Audio + variant -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Audio } + + class Text < ModerationAPI::Internal::Type::BaseModel + # @!attribute text + # The content text + # + # @return [String] + required :text, String + + # @!attribute type + # + # @return [Symbol, :text] + required :type, const: :text + + # @!method initialize(text:, type: :text) + # Text + # + # @param text [String] The content text + # + # @param type [Symbol, :text] + end + + class Image < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :image] + required :type, const: :image + + # @!attribute data + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + # + # @return [String, nil] + optional :data, String + + # @!attribute url + # A public URL of the image content. Either url or data must be provided. + # + # @return [String, nil] + optional :url, String + + # @!method initialize(data: nil, url: nil, type: :image) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Image} + # for more details. + # + # Image + # + # @param data [String] Base64-encoded image data. Either url or data must be provided. Note: base64 ima + # + # @param url [String] A public URL of the image content. Either url or data must be provided. + # + # @param type [Symbol, :image] + end + + class Video < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :video] + required :type, const: :video + + # @!attribute url + # A public URL of the video content + # + # @return [String] + required :url, String + + # @!method initialize(url:, type: :video) + # Video + # + # @param url [String] A public URL of the video content + # + # @param type [Symbol, :video] + end + + class Audio < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :audio] + required :type, const: :audio + + # @!attribute url + # The URL of the audio content + # + # @return [String] + required :url, String + + # @!method initialize(url:, type: :audio) + # Audio + # + # @param url [String] The URL of the audio content + # + # @param type [Symbol, :audio] + end + + # @!method self.variants + # @return [Array(ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Text, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Image, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Video, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Audio)] + end + end + + # @!method self.variants + # @return [Array(ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Text, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Image, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Video, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Audio, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object)] + end + + class Label < ModerationAPI::Internal::Type::BaseModel + # @!attribute label + # The label name + # + # @return [String] + required :label, String + + # @!attribute score + # Confidence score between 0 and 1 + # + # @return [Float] + required :score, Float + + # @!attribute flagged + # Whether this label crossed its flagging threshold + # + # @return [Boolean, nil] + optional :flagged, ModerationAPI::Internal::Type::Boolean + + # @!attribute manual + # True if the label was applied manually by a moderator + # + # @return [Boolean, nil] + optional :manual, ModerationAPI::Internal::Type::Boolean + + # @!attribute matches + # + # @return [Array, nil] + optional :matches, + -> { ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match] } + + # @!method initialize(label:, score:, flagged: nil, manual: nil, matches: nil) + # @param label [String] The label name + # + # @param score [Float] Confidence score between 0 and 1 + # + # @param flagged [Boolean] Whether this label crossed its flagging threshold + # + # @param manual [Boolean] True if the label was applied manually by a moderator + # + # @param matches [Array] + + class Match < ModerationAPI::Internal::Type::BaseModel + # @!attribute match + # The matched substring + # + # @return [String] + required :match, String + + # @!attribute probability + # Match confidence between 0 and 1 + # + # @return [Float] + required :probability, Float + + # @!attribute span + # [start, end] character offsets in the source text + # + # @return [Array] + required :span, ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::Internal::Type::Unknown] + + # @!attribute entity_type + # + # @return [String, nil] + optional :entity_type, String + + # @!attribute mask + # + # @return [String, nil] + optional :mask, String, nil?: true + + # @!attribute reasons + # + # @return [Array, nil] + optional :reasons, ModerationAPI::Internal::Type::ArrayOf[String] + + # @!attribute signals + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals, nil] + optional :signals, + -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals } + + # @!method initialize(match:, probability:, span:, entity_type: nil, mask: nil, reasons: nil, signals: nil) + # @param match [String] The matched substring + # + # @param probability [Float] Match confidence between 0 and 1 + # + # @param span [Array] [start, end] character offsets in the source text + # + # @param entity_type [String] + # + # @param mask [String, nil] + # + # @param reasons [Array] + # + # @param signals [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals] + + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match#signals + class Signals < ModerationAPI::Internal::Type::BaseModel + # @!attribute bot_protection + # + # @return [Boolean, nil] + required :bot_protection, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute brand_impersonation + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals::BrandImpersonation, nil] + required :brand_impersonation, + -> { + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals::BrandImpersonation + }, + nil?: true + + # @!attribute domain_age_days + # + # @return [Float, nil] + required :domain_age_days, Float, nil?: true + + # @!attribute final_url + # + # @return [String, nil] + required :final_url, String, nil?: true + + # @!attribute has_email_setup + # + # @return [Boolean, nil] + required :has_email_setup, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute has_suspicious_characters + # + # @return [Boolean] + required :has_suspicious_characters, ModerationAPI::Internal::Type::Boolean + + # @!attribute is_link_shortener + # + # @return [Boolean] + required :is_link_shortener, ModerationAPI::Internal::Type::Boolean + + # @!attribute is_reported + # + # @return [Boolean] + required :is_reported, ModerationAPI::Internal::Type::Boolean + + # @!attribute redirect_count + # + # @return [Float, nil] + required :redirect_count, Float, nil?: true + + # @!method initialize(bot_protection:, brand_impersonation:, domain_age_days:, final_url:, has_email_setup:, has_suspicious_characters:, is_link_shortener:, is_reported:, redirect_count:) + # @param bot_protection [Boolean, nil] + # @param brand_impersonation [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals::BrandImpersonation, nil] + # @param domain_age_days [Float, nil] + # @param final_url [String, nil] + # @param has_email_setup [Boolean, nil] + # @param has_suspicious_characters [Boolean] + # @param is_link_shortener [Boolean] + # @param is_reported [Boolean] + # @param redirect_count [Float, nil] + + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals#brand_impersonation + class BrandImpersonation < ModerationAPI::Internal::Type::BaseModel + # @!attribute brand + # + # @return [String] + required :brand, String + + # @!attribute method_ + # + # @return [String] + required :method_, String, api_name: :method + + # @!method initialize(brand:, method_:) + # @param brand [String] + # @param method_ [String] + end + end + end + end + + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item#meta_type + module MetaType + extend ModerationAPI::Internal::Type::Enum + + PROFILE = :profile + MESSAGE = :message + POST = :post + COMMENT = :comment + EVENT = :event + PRODUCT = :product + REVIEW = :review + OTHER = :other + + # @!method self.values + # @return [Array] + end + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object#queue + class Queue < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # + # @return [String] + required :id, String + + # @!method initialize(id:) + # The queue the item belongs to, if any + # + # @param id [String] + end + end + end + end + + class QueueItemAllowed < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Stable event ID. Use this to dedupe retries. + # + # @return [String] + required :id, String + + # @!attribute api_version + # + # @return [Symbol, :v2] + required :api_version, const: :v2 + + # @!attribute created + # ISO 8601 timestamp of when the event was emitted. + # + # @return [Time] + required :created, Time + + # @!attribute data + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data] + required :data, -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data } + + # @!attribute type + # The event type. + # + # @return [Symbol, :"queue_item.allowed"] + required :type, const: :"queue_item.allowed" + + # @!method initialize(id:, created:, data:, api_version: :v2, type: :"queue_item.allowed") + # @param id [String] Stable event ID. Use this to dedupe retries. + # + # @param created [Time] ISO 8601 timestamp of when the event was emitted. + # + # @param data [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data] + # + # @param api_version [Symbol, :v2] + # + # @param type [Symbol, :"queue_item.allowed"] The event type. + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed#data + class Data < ModerationAPI::Internal::Type::BaseModel + # @!attribute object + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object] + required :object, -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object } + + # @!method initialize(object:) + # @param object [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object] + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data#object + class Object < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Moderation action ID + # + # @return [String] + required :id, String + + # @!attribute created_at + # ISO 8601 timestamp of when the action was performed + # + # @return [Time] + required :created_at, Time + + # @!attribute key + # Customer-defined key identifying this action + # + # @return [String, nil] + required :key, String, nil?: true + + # @!attribute name + # Display name of the action + # + # @return [String, nil] + required :name, String, nil?: true + + # @!attribute value + # The value passed to the action when it ran + # + # @return [String, nil] + required :value, String, nil?: true + + # @!attribute author + # The author the action was performed on, if any + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author, nil] + optional :author, -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author } + + # @!attribute item + # The content item the action was performed on, if any + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item, nil] + optional :item, -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item } + + # @!attribute queue + # The queue the item belongs to, if any + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Queue, nil] + optional :queue, -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Queue } + + # @!method initialize(id:, created_at:, key:, name:, value:, author: nil, item: nil, queue: nil) + # @param id [String] Moderation action ID + # + # @param created_at [Time] ISO 8601 timestamp of when the action was performed + # + # @param key [String, nil] Customer-defined key identifying this action + # + # @param name [String, nil] Display name of the action + # + # @param value [String, nil] The value passed to the action when it ran + # + # @param author [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author] The author the action was performed on, if any + # + # @param item [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item] The content item the action was performed on, if any + # + # @param queue [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Queue] The queue the item belongs to, if any + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object#author + class Author < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Author ID in Moderation API + # + # @return [String] + required :id, String + + # @!attribute block + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::Block, nil] + required :block, + -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Block }, + nil?: true + + # @!attribute first_seen + # Timestamp when author first appeared + # + # @return [Float] + required :first_seen, Float + + # @!attribute last_seen + # Timestamp of last activity + # + # @return [Float] + required :last_seen, Float + + # @!attribute metadata + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metadata] + required :metadata, -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metadata } + + # @!attribute metrics + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metrics] + required :metrics, -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metrics } + + # @!attribute risk_evaluation + # Risk assessment details, if available. + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::RiskEvaluation, nil] + required :risk_evaluation, + -> { + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::RiskEvaluation + }, + nil?: true + + # @!attribute status + # Current author status + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::Status] + required :status, enum: -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Status } + + # @!attribute trust_level + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::TrustLevel] + required :trust_level, + -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::TrustLevel } + + # @!attribute company + # The author's company or organization + # + # @return [String, nil] + optional :company, String, nil?: true + + # @!attribute email + # Author email address + # + # @return [String, nil] + optional :email, String, nil?: true + + # @!attribute external_id + # The author's ID from your system + # + # @return [String, nil] + optional :external_id, String, nil?: true + + # @!attribute external_link + # URL of the author's external profile + # + # @return [String, nil] + optional :external_link, String, nil?: true + + # @!attribute last_incident + # Timestamp of last incident + # + # @return [Float, nil] + optional :last_incident, Float, nil?: true + + # @!attribute name + # Author name or identifier + # + # @return [String, nil] + optional :name, String, nil?: true + + # @!attribute profile_picture + # URL of the author's profile picture + # + # @return [String, nil] + optional :profile_picture, String, nil?: true + + # @!method initialize(id:, block:, first_seen:, last_seen:, metadata:, metrics:, risk_evaluation:, status:, trust_level:, company: nil, email: nil, external_id: nil, external_link: nil, last_incident: nil, name: nil, profile_picture: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author} + # for more details. + # + # The author the action was performed on, if any + # + # @param id [String] Author ID in Moderation API + # + # @param block [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::Block, nil] Block or suspension details, if applicable. Null if the author is enabled. + # + # @param first_seen [Float] Timestamp when author first appeared + # + # @param last_seen [Float] Timestamp of last activity + # + # @param metadata [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metadata] Additional metadata provided by your system. We recommend including any relevant + # + # @param metrics [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metrics] + # + # @param risk_evaluation [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::RiskEvaluation, nil] Risk assessment details, if available. + # + # @param status [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::Status] Current author status + # + # @param trust_level [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::TrustLevel] + # + # @param company [String, nil] The author's company or organization + # + # @param email [String, nil] Author email address + # + # @param external_id [String, nil] The author's ID from your system + # + # @param external_link [String, nil] URL of the author's external profile + # + # @param last_incident [Float, nil] Timestamp of last incident + # + # @param name [String, nil] Author name or identifier + # + # @param profile_picture [String, nil] URL of the author's profile picture + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author#block + class Block < ModerationAPI::Internal::Type::BaseModel + # @!attribute reason + # The moderators reason why the author was blocked or suspended. + # + # @return [String, nil] + optional :reason, String, nil?: true + + # @!attribute until_ + # The timestamp until which they are blocked if the author is suspended. + # + # @return [Float, nil] + optional :until_, Float, api_name: :until, nil?: true + + # @!method initialize(reason: nil, until_: nil) + # Block or suspension details, if applicable. Null if the author is enabled. + # + # @param reason [String, nil] The moderators reason why the author was blocked or suspended. + # + # @param until_ [Float, nil] The timestamp until which they are blocked if the author is suspended. + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author#metadata + class Metadata < ModerationAPI::Internal::Type::BaseModel + # @!attribute email_verified + # Whether the author's email is verified + # + # @return [Boolean, nil] + optional :email_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute identity_verified + # Whether the author's identity is verified + # + # @return [Boolean, nil] + optional :identity_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute is_paying_customer + # Whether the author is a paying customer + # + # @return [Boolean, nil] + optional :is_paying_customer, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute phone_verified + # Whether the author's phone number is verified + # + # @return [Boolean, nil] + optional :phone_verified, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!method initialize(email_verified: nil, identity_verified: nil, is_paying_customer: nil, phone_verified: nil) + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + # + # @param email_verified [Boolean, nil] Whether the author's email is verified + # + # @param identity_verified [Boolean, nil] Whether the author's identity is verified + # + # @param is_paying_customer [Boolean, nil] Whether the author is a paying customer + # + # @param phone_verified [Boolean, nil] Whether the author's phone number is verified + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author#metrics + class Metrics < ModerationAPI::Internal::Type::BaseModel + # @!attribute flagged_content + # Number of flagged content pieces + # + # @return [Float] + required :flagged_content, Float + + # @!attribute total_content + # Total pieces of content + # + # @return [Float] + required :total_content, Float + + # @!attribute average_sentiment + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + # + # @return [Float, nil] + optional :average_sentiment, Float, nil?: true + + # @!method initialize(flagged_content:, total_content:, average_sentiment: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metrics} + # for more details. + # + # @param flagged_content [Float] Number of flagged content pieces + # + # @param total_content [Float] Total pieces of content + # + # @param average_sentiment [Float, nil] Average sentiment score of content (-1 to 1). Requires a sentiment model in your + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author#risk_evaluation + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + # @!attribute risk_level + # Calculated risk level based on more than 10 behavioral signals. + # + # @return [Float, nil] + optional :risk_level, Float, nil?: true + + # @!method initialize(risk_level: nil) + # Risk assessment details, if available. + # + # @param risk_level [Float, nil] Calculated risk level based on more than 10 behavioral signals. + end + + # Current author status + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author#status + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED = :enabled + SUSPENDED = :suspended + BLOCKED = :blocked + + # @!method self.values + # @return [Array] + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author#trust_level + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + # @!attribute level + # Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @return [Float] + required :level, Float + + # @!attribute manual + # True if the trust level was set manually by a moderator + # + # @return [Boolean] + required :manual, ModerationAPI::Internal::Type::Boolean + + # @!method initialize(level:, manual:) + # @param level [Float] Author trust level (-1, 0, 1, 2, 3, or 4) + # + # @param manual [Boolean] True if the trust level was set manually by a moderator + end + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object#item + class Item < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # Content ID from your system + # + # @return [String] + required :id, String + + # @!attribute author_id + # External author ID (the customer's identifier, not Moderation API's internal id) + # + # @return [String, nil] + required :author_id, String, nil?: true + + # @!attribute channel_key + # The channel the content was submitted to, identified by your customer-defined + # channel key. + # + # @return [String, nil] + required :channel_key, String, nil?: true + + # @!attribute content + # The original content payload + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Text, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Image, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Video, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Audio, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object] + required :content, + union: -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content } + + # @!attribute conversation_id + # Conversation grouping ID, if any + # + # @return [String, nil] + required :conversation_id, String, nil?: true + + # @!attribute flagged + # Whether the content was flagged by moderation + # + # @return [Boolean, nil] + required :flagged, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute labels + # Moderation labels applied to the content + # + # @return [Array, nil] + required :labels, + -> { + ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label] + }, + nil?: true + + # @!attribute language + # Detected ISO language code, if available + # + # @return [String, nil] + required :language, String, nil?: true + + # @!attribute meta_type + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::MetaType, nil] + required :meta_type, + enum: -> { + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::MetaType + }, + nil?: true + + # @!attribute metadata + # Arbitrary key/value metadata. Top-level keys are strings. + # + # @return [Hash{Symbol=>Object}, nil] + required :metadata, + ModerationAPI::Internal::Type::HashOf[ModerationAPI::Internal::Type::Unknown], + nil?: true + + # @!attribute timestamp + # ISO 8601 timestamp of when the content was submitted + # + # @return [Time] + required :timestamp, Time + + # @!method initialize(id:, author_id:, channel_key:, content:, conversation_id:, flagged:, labels:, language:, meta_type:, metadata:, timestamp:) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item} for + # more details. + # + # The content item the action was performed on, if any + # + # @param id [String] Content ID from your system + # + # @param author_id [String, nil] External author ID (the customer's identifier, not Moderation API's internal id) + # + # @param channel_key [String, nil] The channel the content was submitted to, identified by your customer-defined ch + # + # @param content [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Text, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Image, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Video, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Audio, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object] The original content payload + # + # @param conversation_id [String, nil] Conversation grouping ID, if any + # + # @param flagged [Boolean, nil] Whether the content was flagged by moderation + # + # @param labels [Array, nil] Moderation labels applied to the content + # + # @param language [String, nil] Detected ISO language code, if available + # + # @param meta_type [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::MetaType, nil] High-level content type (e.g. message, post, comment). Defaults to the channel's + # + # @param metadata [Hash{Symbol=>Object}, nil] Arbitrary key/value metadata. Top-level keys are strings. + # + # @param timestamp [Time] ISO 8601 timestamp of when the content was submitted + + # The original content payload + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item#content + module Content + extend ModerationAPI::Internal::Type::Union + + # Text + variant -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Text } + + # Image + variant -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Image } + + # Video + variant -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Video } + + # Audio + variant -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Audio } + + # Object + variant -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object } + + class Text < ModerationAPI::Internal::Type::BaseModel + # @!attribute text + # The content text + # + # @return [String] + required :text, String + + # @!attribute type + # + # @return [Symbol, :text] + required :type, const: :text + + # @!method initialize(text:, type: :text) + # Text + # + # @param text [String] The content text + # + # @param type [Symbol, :text] + end + + class Image < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :image] + required :type, const: :image + + # @!attribute data + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + # + # @return [String, nil] + optional :data, String + + # @!attribute url + # A public URL of the image content. Either url or data must be provided. + # + # @return [String, nil] + optional :url, String + + # @!method initialize(data: nil, url: nil, type: :image) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Image} + # for more details. + # + # Image + # + # @param data [String] Base64-encoded image data. Either url or data must be provided. Note: base64 ima + # + # @param url [String] A public URL of the image content. Either url or data must be provided. + # + # @param type [Symbol, :image] + end + + class Video < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :video] + required :type, const: :video + + # @!attribute url + # A public URL of the video content + # + # @return [String] + required :url, String + + # @!method initialize(url:, type: :video) + # Video + # + # @param url [String] A public URL of the video content + # + # @param type [Symbol, :video] + end + + class Audio < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :audio] + required :type, const: :audio + + # @!attribute url + # The URL of the audio content + # + # @return [String] + required :url, String + + # @!method initialize(url:, type: :audio) + # Audio + # + # @param url [String] The URL of the audio content + # + # @param type [Symbol, :audio] + end + + class Object < ModerationAPI::Internal::Type::BaseModel + # @!attribute data + # Values in the object. Can be mixed content types. + # + # @return [Hash{Symbol=>ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Text, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Image, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Video, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Audio}] + required :data, + -> { ModerationAPI::Internal::Type::HashOf[union: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data] } + + # @!attribute type + # + # @return [Symbol, :object] + required :type, const: :object + + # @!method initialize(data:, type: :object) + # Object + # + # @param data [Hash{Symbol=>ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Text, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Image, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Video, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Audio}] Values in the object. Can be mixed content types. + # + # @param type [Symbol, :object] + + # Text + module Data + extend ModerationAPI::Internal::Type::Union + + # Text + variant -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Text } + + # Image + variant -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Image } + + # Video + variant -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Video } + + # Audio + variant -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Audio } + + class Text < ModerationAPI::Internal::Type::BaseModel + # @!attribute text + # The content text + # + # @return [String] + required :text, String + + # @!attribute type + # + # @return [Symbol, :text] + required :type, const: :text + + # @!method initialize(text:, type: :text) + # Text + # + # @param text [String] The content text + # + # @param type [Symbol, :text] + end + + class Image < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :image] + required :type, const: :image + + # @!attribute data + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + # + # @return [String, nil] + optional :data, String + + # @!attribute url + # A public URL of the image content. Either url or data must be provided. + # + # @return [String, nil] + optional :url, String + + # @!method initialize(data: nil, url: nil, type: :image) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Image} + # for more details. + # + # Image + # + # @param data [String] Base64-encoded image data. Either url or data must be provided. Note: base64 ima + # + # @param url [String] A public URL of the image content. Either url or data must be provided. + # + # @param type [Symbol, :image] + end + + class Video < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :video] + required :type, const: :video + + # @!attribute url + # A public URL of the video content + # + # @return [String] + required :url, String + + # @!method initialize(url:, type: :video) + # Video + # + # @param url [String] A public URL of the video content + # + # @param type [Symbol, :video] + end + + class Audio < ModerationAPI::Internal::Type::BaseModel + # @!attribute type + # + # @return [Symbol, :audio] + required :type, const: :audio + + # @!attribute url + # The URL of the audio content + # + # @return [String] + required :url, String + + # @!method initialize(url:, type: :audio) + # Audio + # + # @param url [String] The URL of the audio content + # + # @param type [Symbol, :audio] + end + + # @!method self.variants + # @return [Array(ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Text, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Image, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Video, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Audio)] + end + end + + # @!method self.variants + # @return [Array(ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Text, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Image, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Video, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Audio, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object)] + end + + class Label < ModerationAPI::Internal::Type::BaseModel + # @!attribute label + # The label name + # + # @return [String] + required :label, String + + # @!attribute score + # Confidence score between 0 and 1 + # + # @return [Float] + required :score, Float + + # @!attribute flagged + # Whether this label crossed its flagging threshold + # + # @return [Boolean, nil] + optional :flagged, ModerationAPI::Internal::Type::Boolean + + # @!attribute manual + # True if the label was applied manually by a moderator + # + # @return [Boolean, nil] + optional :manual, ModerationAPI::Internal::Type::Boolean + + # @!attribute matches + # + # @return [Array, nil] + optional :matches, + -> { ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match] } + + # @!method initialize(label:, score:, flagged: nil, manual: nil, matches: nil) + # @param label [String] The label name + # + # @param score [Float] Confidence score between 0 and 1 + # + # @param flagged [Boolean] Whether this label crossed its flagging threshold + # + # @param manual [Boolean] True if the label was applied manually by a moderator + # + # @param matches [Array] + + class Match < ModerationAPI::Internal::Type::BaseModel + # @!attribute match + # The matched substring + # + # @return [String] + required :match, String + + # @!attribute probability + # Match confidence between 0 and 1 + # + # @return [Float] + required :probability, Float + + # @!attribute span + # [start, end] character offsets in the source text + # + # @return [Array] + required :span, ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::Internal::Type::Unknown] + + # @!attribute entity_type + # + # @return [String, nil] + optional :entity_type, String + + # @!attribute mask + # + # @return [String, nil] + optional :mask, String, nil?: true + + # @!attribute reasons + # + # @return [Array, nil] + optional :reasons, ModerationAPI::Internal::Type::ArrayOf[String] + + # @!attribute signals + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals, nil] + optional :signals, + -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals } + + # @!method initialize(match:, probability:, span:, entity_type: nil, mask: nil, reasons: nil, signals: nil) + # @param match [String] The matched substring + # + # @param probability [Float] Match confidence between 0 and 1 + # + # @param span [Array] [start, end] character offsets in the source text + # + # @param entity_type [String] + # + # @param mask [String, nil] + # + # @param reasons [Array] + # + # @param signals [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals] + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match#signals + class Signals < ModerationAPI::Internal::Type::BaseModel + # @!attribute bot_protection + # + # @return [Boolean, nil] + required :bot_protection, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute brand_impersonation + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals::BrandImpersonation, nil] + required :brand_impersonation, + -> { + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals::BrandImpersonation + }, + nil?: true + + # @!attribute domain_age_days + # + # @return [Float, nil] + required :domain_age_days, Float, nil?: true + + # @!attribute final_url + # + # @return [String, nil] + required :final_url, String, nil?: true + + # @!attribute has_email_setup + # + # @return [Boolean, nil] + required :has_email_setup, ModerationAPI::Internal::Type::Boolean, nil?: true + + # @!attribute has_suspicious_characters + # + # @return [Boolean] + required :has_suspicious_characters, ModerationAPI::Internal::Type::Boolean + + # @!attribute is_link_shortener + # + # @return [Boolean] + required :is_link_shortener, ModerationAPI::Internal::Type::Boolean + + # @!attribute is_reported + # + # @return [Boolean] + required :is_reported, ModerationAPI::Internal::Type::Boolean + + # @!attribute redirect_count + # + # @return [Float, nil] + required :redirect_count, Float, nil?: true + + # @!method initialize(bot_protection:, brand_impersonation:, domain_age_days:, final_url:, has_email_setup:, has_suspicious_characters:, is_link_shortener:, is_reported:, redirect_count:) + # @param bot_protection [Boolean, nil] + # @param brand_impersonation [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals::BrandImpersonation, nil] + # @param domain_age_days [Float, nil] + # @param final_url [String, nil] + # @param has_email_setup [Boolean, nil] + # @param has_suspicious_characters [Boolean] + # @param is_link_shortener [Boolean] + # @param is_reported [Boolean] + # @param redirect_count [Float, nil] + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals#brand_impersonation + class BrandImpersonation < ModerationAPI::Internal::Type::BaseModel + # @!attribute brand + # + # @return [String] + required :brand, String + + # @!attribute method_ + # + # @return [String] + required :method_, String, api_name: :method + + # @!method initialize(brand:, method_:) + # @param brand [String] + # @param method_ [String] + end + end + end + end + + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item#meta_type + module MetaType + extend ModerationAPI::Internal::Type::Enum + + PROFILE = :profile + MESSAGE = :message + POST = :post + COMMENT = :comment + EVENT = :event + PRODUCT = :product + REVIEW = :review + OTHER = :other + + # @!method self.values + # @return [Array] + end + end + + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object#queue + class Queue < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # + # @return [String] + required :id, String + + # @!method initialize(id:) + # The queue the item belongs to, if any + # + # @param id [String] + end + end + end + end + + # @!method self.variants + # @return [Array(ModerationAPI::Models::WebhookEvent::AuthorBlocked, ModerationAPI::Models::WebhookEvent::AuthorUnblocked, ModerationAPI::Models::WebhookEvent::AuthorSuspended, ModerationAPI::Models::WebhookEvent::AuthorUpdated, ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged, ModerationAPI::Models::WebhookEvent::AuthorAction, ModerationAPI::Models::WebhookEvent::QueueItemCompleted, ModerationAPI::Models::WebhookEvent::QueueItemAction, ModerationAPI::Models::WebhookEvent::QueueItemRejected, ModerationAPI::Models::WebhookEvent::QueueItemAllowed)] + end + end +end diff --git a/lib/moderation_api/resources/actions.rb b/lib/moderation_api/resources/actions.rb index b29f206..ac80517 100644 --- a/lib/moderation_api/resources/actions.rb +++ b/lib/moderation_api/resources/actions.rb @@ -11,7 +11,7 @@ class Actions # # Create an action. # - # @overload create(name:, built_in: nil, description: nil, filter_in_queue_ids: nil, free_text: nil, key: nil, position: nil, possible_values: nil, queue_behaviour: nil, type: nil, value_required: nil, webhooks: nil, request_options: {}) + # @overload create(name:, built_in: nil, description: nil, filter_in_queue_ids: nil, free_text: nil, key: nil, position: nil, possible_values: nil, queue_behaviour: nil, type: nil, value_required: nil, request_options: {}) # # @param name [String] The name of the action. # @@ -35,8 +35,6 @@ class Actions # # @param value_required [Boolean] Whether the action requires a value to be executed. # - # @param webhooks [Array] The action's webhooks. - # # @param request_options [ModerationAPI::RequestOptions, Hash{Symbol=>Object}, nil] # # @return [ModerationAPI::Models::ActionCreateResponse] @@ -78,7 +76,7 @@ def retrieve(id, params = {}) # # Update an action. # - # @overload update(id, built_in: nil, description: nil, filter_in_queue_ids: nil, free_text: nil, key: nil, name: nil, position: nil, possible_values: nil, queue_behaviour: nil, type: nil, value_required: nil, webhooks: nil, request_options: {}) + # @overload update(id, built_in: nil, description: nil, filter_in_queue_ids: nil, free_text: nil, key: nil, name: nil, position: nil, possible_values: nil, queue_behaviour: nil, type: nil, value_required: nil, request_options: {}) # # @param id [String] The ID of the action to update. # @@ -104,8 +102,6 @@ def retrieve(id, params = {}) # # @param value_required [Boolean] Whether the action requires a value to be executed. # - # @param webhooks [Array] The action's webhooks. - # # @param request_options [ModerationAPI::RequestOptions, Hash{Symbol=>Object}, nil] # # @return [ModerationAPI::Models::ActionUpdateResponse] diff --git a/lib/moderation_api/version.rb b/lib/moderation_api/version.rb index 8714383..17da394 100644 --- a/lib/moderation_api/version.rb +++ b/lib/moderation_api/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module ModerationAPI - VERSION = "2.15.0" + VERSION = "2.16.0" end diff --git a/rbi/moderation_api/models.rbi b/rbi/moderation_api/models.rbi index 6a57bac..e2dcbf8 100644 --- a/rbi/moderation_api/models.rbi +++ b/rbi/moderation_api/models.rbi @@ -37,6 +37,8 @@ module ModerationAPI QueueRetrieveParams = ModerationAPI::Models::QueueRetrieveParams + WebhookEvent = ModerationAPI::Models::WebhookEvent + Wordlist = ModerationAPI::Models::Wordlist WordlistGetEmbeddingStatusParams = diff --git a/rbi/moderation_api/models/action_create_params.rbi b/rbi/moderation_api/models/action_create_params.rbi index c77330f..21339a9 100644 --- a/rbi/moderation_api/models/action_create_params.rbi +++ b/rbi/moderation_api/models/action_create_params.rbi @@ -108,19 +108,6 @@ module ModerationAPI sig { params(value_required: T::Boolean).void } attr_writer :value_required - # The action's webhooks. - sig do - returns(T.nilable(T::Array[ModerationAPI::ActionCreateParams::Webhook])) - end - attr_reader :webhooks - - sig do - params( - webhooks: T::Array[ModerationAPI::ActionCreateParams::Webhook::OrHash] - ).void - end - attr_writer :webhooks - sig do params( name: String, @@ -136,8 +123,6 @@ module ModerationAPI ModerationAPI::ActionCreateParams::QueueBehaviour::OrSymbol, type: T.nilable(ModerationAPI::ActionCreateParams::Type::OrSymbol), value_required: T::Boolean, - webhooks: - T::Array[ModerationAPI::ActionCreateParams::Webhook::OrHash], request_options: ModerationAPI::RequestOptions::OrHash ).returns(T.attached_class) end @@ -168,8 +153,6 @@ module ModerationAPI type: nil, # Whether the action requires a value to be executed. value_required: nil, - # The action's webhooks. - webhooks: nil, request_options: {} ) end @@ -190,7 +173,6 @@ module ModerationAPI ModerationAPI::ActionCreateParams::QueueBehaviour::OrSymbol, type: T.nilable(ModerationAPI::ActionCreateParams::Type::OrSymbol), value_required: T::Boolean, - webhooks: T::Array[ModerationAPI::ActionCreateParams::Webhook], request_options: ModerationAPI::RequestOptions } ) @@ -366,68 +348,6 @@ module ModerationAPI def self.values end end - - class Webhook < ModerationAPI::Internal::Type::BaseModel - OrHash = - T.type_alias do - T.any( - ModerationAPI::ActionCreateParams::Webhook, - ModerationAPI::Internal::AnyHash - ) - end - - # The webhook's name, used to identify it in the dashboard - sig { returns(String) } - attr_accessor :name - - # The webhook's URL. We'll call this URL when the event occurs. - sig { returns(String) } - attr_accessor :url - - # ID of an existing webhook or undefined if this is a new webhook. - sig { returns(T.nilable(String)) } - attr_reader :id - - sig { params(id: String).void } - attr_writer :id - - # The webhook's description - sig { returns(T.nilable(String)) } - attr_accessor :description - - sig do - params( - name: String, - url: String, - id: String, - description: T.nilable(String) - ).returns(T.attached_class) - end - def self.new( - # The webhook's name, used to identify it in the dashboard - name:, - # The webhook's URL. We'll call this URL when the event occurs. - url:, - # ID of an existing webhook or undefined if this is a new webhook. - id: nil, - # The webhook's description - description: nil - ) - end - - sig do - override.returns( - { - name: String, - url: String, - id: String, - description: T.nilable(String) - } - ) - end - def to_hash - end - end end end end diff --git a/rbi/moderation_api/models/action_list_response.rbi b/rbi/moderation_api/models/action_list_response.rbi index 5877964..a4af076 100644 --- a/rbi/moderation_api/models/action_list_response.rbi +++ b/rbi/moderation_api/models/action_list_response.rbi @@ -67,14 +67,6 @@ module ModerationAPI sig { returns(T::Boolean) } attr_accessor :value_required - # The action's webhooks. - sig do - returns( - T::Array[ModerationAPI::Models::ActionListResponseItem::Webhook] - ) - end - attr_accessor :webhooks - # The description of the action. sig { returns(T.nilable(String)) } attr_accessor :description @@ -110,10 +102,6 @@ module ModerationAPI queue_behaviour: ModerationAPI::Models::ActionListResponseItem::QueueBehaviour::OrSymbol, value_required: T::Boolean, - webhooks: - T::Array[ - ModerationAPI::Models::ActionListResponseItem::Webhook::OrHash - ], description: T.nilable(String), key: T.nilable(String), type: @@ -147,8 +135,6 @@ module ModerationAPI queue_behaviour:, # Whether the action requires a value to be executed. value_required:, - # The action's webhooks. - webhooks:, # The description of the action. description: nil, # User defined key of the action. @@ -176,8 +162,6 @@ module ModerationAPI queue_behaviour: ModerationAPI::Models::ActionListResponseItem::QueueBehaviour::TaggedSymbol, value_required: T::Boolean, - webhooks: - T::Array[ModerationAPI::Models::ActionListResponseItem::Webhook], description: T.nilable(String), key: T.nilable(String), type: @@ -297,75 +281,6 @@ module ModerationAPI end end - class Webhook < ModerationAPI::Internal::Type::BaseModel - OrHash = - T.type_alias do - T.any( - ModerationAPI::Models::ActionListResponseItem::Webhook, - ModerationAPI::Internal::AnyHash - ) - end - - # The ID of the webhook. - sig { returns(String) } - attr_accessor :id - - # The webhook's name, used to identify it in the dashboard - sig { returns(String) } - attr_accessor :name - - # The webhook's URL. We'll call this URL when the event occurs. - sig { returns(String) } - attr_accessor :url - - # The webhook's description - sig { returns(T.nilable(String)) } - attr_accessor :description - - # The ID of the moderation action to trigger the webhook on. Only used for - # moderation action webhooks. - sig { returns(T.nilable(String)) } - attr_accessor :moderation_action_id - - sig do - params( - id: String, - name: String, - url: String, - description: T.nilable(String), - moderation_action_id: T.nilable(String) - ).returns(T.attached_class) - end - def self.new( - # The ID of the webhook. - id:, - # The webhook's name, used to identify it in the dashboard - name:, - # The webhook's URL. We'll call this URL when the event occurs. - url:, - # The webhook's description - description: nil, - # The ID of the moderation action to trigger the webhook on. Only used for - # moderation action webhooks. - moderation_action_id: nil - ) - end - - sig do - override.returns( - { - id: String, - name: String, - url: String, - description: T.nilable(String), - moderation_action_id: T.nilable(String) - } - ) - end - def to_hash - end - end - # The type of the action. module Type extend ModerationAPI::Internal::Type::Enum diff --git a/rbi/moderation_api/models/action_retrieve_response.rbi b/rbi/moderation_api/models/action_retrieve_response.rbi index c8080cd..409b686 100644 --- a/rbi/moderation_api/models/action_retrieve_response.rbi +++ b/rbi/moderation_api/models/action_retrieve_response.rbi @@ -67,14 +67,6 @@ module ModerationAPI sig { returns(T::Boolean) } attr_accessor :value_required - # The action's webhooks. - sig do - returns( - T::Array[ModerationAPI::Models::ActionRetrieveResponse::Webhook] - ) - end - attr_accessor :webhooks - # The description of the action. sig { returns(T.nilable(String)) } attr_accessor :description @@ -110,10 +102,6 @@ module ModerationAPI queue_behaviour: ModerationAPI::Models::ActionRetrieveResponse::QueueBehaviour::OrSymbol, value_required: T::Boolean, - webhooks: - T::Array[ - ModerationAPI::Models::ActionRetrieveResponse::Webhook::OrHash - ], description: T.nilable(String), key: T.nilable(String), type: @@ -147,8 +135,6 @@ module ModerationAPI queue_behaviour:, # Whether the action requires a value to be executed. value_required:, - # The action's webhooks. - webhooks:, # The description of the action. description: nil, # User defined key of the action. @@ -176,8 +162,6 @@ module ModerationAPI queue_behaviour: ModerationAPI::Models::ActionRetrieveResponse::QueueBehaviour::TaggedSymbol, value_required: T::Boolean, - webhooks: - T::Array[ModerationAPI::Models::ActionRetrieveResponse::Webhook], description: T.nilable(String), key: T.nilable(String), type: @@ -297,75 +281,6 @@ module ModerationAPI end end - class Webhook < ModerationAPI::Internal::Type::BaseModel - OrHash = - T.type_alias do - T.any( - ModerationAPI::Models::ActionRetrieveResponse::Webhook, - ModerationAPI::Internal::AnyHash - ) - end - - # The ID of the webhook. - sig { returns(String) } - attr_accessor :id - - # The webhook's name, used to identify it in the dashboard - sig { returns(String) } - attr_accessor :name - - # The webhook's URL. We'll call this URL when the event occurs. - sig { returns(String) } - attr_accessor :url - - # The webhook's description - sig { returns(T.nilable(String)) } - attr_accessor :description - - # The ID of the moderation action to trigger the webhook on. Only used for - # moderation action webhooks. - sig { returns(T.nilable(String)) } - attr_accessor :moderation_action_id - - sig do - params( - id: String, - name: String, - url: String, - description: T.nilable(String), - moderation_action_id: T.nilable(String) - ).returns(T.attached_class) - end - def self.new( - # The ID of the webhook. - id:, - # The webhook's name, used to identify it in the dashboard - name:, - # The webhook's URL. We'll call this URL when the event occurs. - url:, - # The webhook's description - description: nil, - # The ID of the moderation action to trigger the webhook on. Only used for - # moderation action webhooks. - moderation_action_id: nil - ) - end - - sig do - override.returns( - { - id: String, - name: String, - url: String, - description: T.nilable(String), - moderation_action_id: T.nilable(String) - } - ) - end - def to_hash - end - end - # The type of the action. module Type extend ModerationAPI::Internal::Type::Enum diff --git a/rbi/moderation_api/models/action_update_params.rbi b/rbi/moderation_api/models/action_update_params.rbi index b16e4c0..cc3b018 100644 --- a/rbi/moderation_api/models/action_update_params.rbi +++ b/rbi/moderation_api/models/action_update_params.rbi @@ -115,19 +115,6 @@ module ModerationAPI sig { params(value_required: T::Boolean).void } attr_writer :value_required - # The action's webhooks. - sig do - returns(T.nilable(T::Array[ModerationAPI::ActionUpdateParams::Webhook])) - end - attr_reader :webhooks - - sig do - params( - webhooks: T::Array[ModerationAPI::ActionUpdateParams::Webhook::OrHash] - ).void - end - attr_writer :webhooks - sig do params( id: String, @@ -144,8 +131,6 @@ module ModerationAPI ModerationAPI::ActionUpdateParams::QueueBehaviour::OrSymbol, type: T.nilable(ModerationAPI::ActionUpdateParams::Type::OrSymbol), value_required: T::Boolean, - webhooks: - T::Array[ModerationAPI::ActionUpdateParams::Webhook::OrHash], request_options: ModerationAPI::RequestOptions::OrHash ).returns(T.attached_class) end @@ -178,8 +163,6 @@ module ModerationAPI type: nil, # Whether the action requires a value to be executed. value_required: nil, - # The action's webhooks. - webhooks: nil, request_options: {} ) end @@ -201,7 +184,6 @@ module ModerationAPI ModerationAPI::ActionUpdateParams::QueueBehaviour::OrSymbol, type: T.nilable(ModerationAPI::ActionUpdateParams::Type::OrSymbol), value_required: T::Boolean, - webhooks: T::Array[ModerationAPI::ActionUpdateParams::Webhook], request_options: ModerationAPI::RequestOptions } ) @@ -377,68 +359,6 @@ module ModerationAPI def self.values end end - - class Webhook < ModerationAPI::Internal::Type::BaseModel - OrHash = - T.type_alias do - T.any( - ModerationAPI::ActionUpdateParams::Webhook, - ModerationAPI::Internal::AnyHash - ) - end - - # The webhook's name, used to identify it in the dashboard - sig { returns(String) } - attr_accessor :name - - # The webhook's URL. We'll call this URL when the event occurs. - sig { returns(String) } - attr_accessor :url - - # ID of an existing webhook or undefined if this is a new webhook. - sig { returns(T.nilable(String)) } - attr_reader :id - - sig { params(id: String).void } - attr_writer :id - - # The webhook's description - sig { returns(T.nilable(String)) } - attr_accessor :description - - sig do - params( - name: String, - url: String, - id: String, - description: T.nilable(String) - ).returns(T.attached_class) - end - def self.new( - # The webhook's name, used to identify it in the dashboard - name:, - # The webhook's URL. We'll call this URL when the event occurs. - url:, - # ID of an existing webhook or undefined if this is a new webhook. - id: nil, - # The webhook's description - description: nil - ) - end - - sig do - override.returns( - { - name: String, - url: String, - id: String, - description: T.nilable(String) - } - ) - end - def to_hash - end - end end end end diff --git a/rbi/moderation_api/models/webhook_event.rbi b/rbi/moderation_api/models/webhook_event.rbi new file mode 100644 index 0000000..066f2ee --- /dev/null +++ b/rbi/moderation_api/models/webhook_event.rbi @@ -0,0 +1,11307 @@ +# typed: strong + +module ModerationAPI + module Models + # Discriminated union of every v2 webhook event. Switch on `type` to narrow to a + # specific event shape. + module WebhookEvent + extend ModerationAPI::Internal::Type::Union + + Variants = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorBlocked, + ModerationAPI::WebhookEvent::AuthorUnblocked, + ModerationAPI::WebhookEvent::AuthorSuspended, + ModerationAPI::WebhookEvent::AuthorUpdated, + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged, + ModerationAPI::WebhookEvent::AuthorAction, + ModerationAPI::WebhookEvent::QueueItemCompleted, + ModerationAPI::WebhookEvent::QueueItemAction, + ModerationAPI::WebhookEvent::QueueItemRejected, + ModerationAPI::WebhookEvent::QueueItemAllowed + ) + end + + class AuthorBlocked < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorBlocked, + ModerationAPI::Internal::AnyHash + ) + end + + # Stable event ID. Use this to dedupe retries. + sig { returns(String) } + attr_accessor :id + + sig { returns(Symbol) } + attr_accessor :api_version + + # ISO 8601 timestamp of when the event was emitted. + sig { returns(Time) } + attr_accessor :created + + sig { returns(ModerationAPI::WebhookEvent::AuthorBlocked::Data) } + attr_reader :data + + sig do + params( + data: ModerationAPI::WebhookEvent::AuthorBlocked::Data::OrHash + ).void + end + attr_writer :data + + # The event type. + sig { returns(Symbol) } + attr_accessor :type + + sig do + params( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorBlocked::Data::OrHash, + api_version: Symbol, + type: Symbol + ).returns(T.attached_class) + end + def self.new( + # Stable event ID. Use this to dedupe retries. + id:, + # ISO 8601 timestamp of when the event was emitted. + created:, + data:, + api_version: :v2, + # The event type. + type: :"author.blocked" + ) + end + + sig do + override.returns( + { + id: String, + api_version: Symbol, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorBlocked::Data, + type: Symbol + } + ) + end + def to_hash + end + + class Data < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorBlocked::Data, + ModerationAPI::Internal::AnyHash + ) + end + + sig do + returns(ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object) + end + attr_reader :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::OrHash + ).void + end + attr_writer :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::OrHash + ).returns(T.attached_class) + end + def self.new(object:) + end + + sig do + override.returns( + { + object: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object + } + ) + end + def to_hash + end + + class Object < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object, + ModerationAPI::Internal::AnyHash + ) + end + + # Moderation action ID + sig { returns(String) } + attr_accessor :id + + # The author the action was performed on + sig do + returns( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author + ) + end + attr_reader :author + + sig do + params( + author: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::OrHash + ).void + end + attr_writer :author + + # ISO 8601 timestamp of when the action was performed + sig { returns(Time) } + attr_accessor :created_at + + # Customer-defined key identifying this action + sig { returns(T.nilable(String)) } + attr_accessor :key + + # Display name of the action + sig { returns(T.nilable(String)) } + attr_accessor :name + + # The value passed to the action when it ran + sig { returns(T.nilable(String)) } + attr_accessor :value + + # The queue the item belongs to, if any + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Queue + ) + ) + end + attr_reader :queue + + sig do + params( + queue: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Queue::OrHash + ).void + end + attr_writer :queue + + sig do + params( + id: String, + author: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::OrHash, + created_at: Time, + key: T.nilable(String), + name: T.nilable(String), + value: T.nilable(String), + queue: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Queue::OrHash + ).returns(T.attached_class) + end + def self.new( + # Moderation action ID + id:, + # The author the action was performed on + author:, + # ISO 8601 timestamp of when the action was performed + created_at:, + # Customer-defined key identifying this action + key:, + # Display name of the action + name:, + # The value passed to the action when it ran + value:, + # The queue the item belongs to, if any + queue: nil + ) + end + + sig do + override.returns( + { + id: String, + author: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author, + created_at: Time, + key: T.nilable(String), + name: T.nilable(String), + value: T.nilable(String), + queue: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Queue + } + ) + end + def to_hash + end + + class Author < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author, + ModerationAPI::Internal::AnyHash + ) + end + + # Author ID in Moderation API + sig { returns(String) } + attr_accessor :id + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Block + ) + ) + end + attr_reader :block + + sig do + params( + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Block::OrHash + ) + ).void + end + attr_writer :block + + # Timestamp when author first appeared + sig { returns(Float) } + attr_accessor :first_seen + + # Timestamp of last activity + sig { returns(Float) } + attr_accessor :last_seen + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + returns( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metadata + ) + end + attr_reader :metadata + + sig do + params( + metadata: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metadata::OrHash + ).void + end + attr_writer :metadata + + sig do + returns( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metrics + ) + end + attr_reader :metrics + + sig do + params( + metrics: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metrics::OrHash + ).void + end + attr_writer :metrics + + # Risk assessment details, if available. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::RiskEvaluation + ) + ) + end + attr_reader :risk_evaluation + + sig do + params( + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::RiskEvaluation::OrHash + ) + ).void + end + attr_writer :risk_evaluation + + # Current author status + sig do + returns( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Status::OrSymbol + ) + end + attr_accessor :status + + sig do + returns( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::TrustLevel + ) + end + attr_reader :trust_level + + sig do + params( + trust_level: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::TrustLevel::OrHash + ).void + end + attr_writer :trust_level + + # The author's company or organization + sig { returns(T.nilable(String)) } + attr_accessor :company + + # Author email address + sig { returns(T.nilable(String)) } + attr_accessor :email + + # The author's ID from your system + sig { returns(T.nilable(String)) } + attr_accessor :external_id + + # URL of the author's external profile + sig { returns(T.nilable(String)) } + attr_accessor :external_link + + # Timestamp of last incident + sig { returns(T.nilable(Float)) } + attr_accessor :last_incident + + # Author name or identifier + sig { returns(T.nilable(String)) } + attr_accessor :name + + # URL of the author's profile picture + sig { returns(T.nilable(String)) } + attr_accessor :profile_picture + + # The author the action was performed on + sig do + params( + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Block::OrHash + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metadata::OrHash, + metrics: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metrics::OrHash, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::RiskEvaluation::OrHash + ), + status: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::TrustLevel::OrHash, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + ).returns(T.attached_class) + end + def self.new( + # Author ID in Moderation API + id:, + # Block or suspension details, if applicable. Null if the author is enabled. + block:, + # Timestamp when author first appeared + first_seen:, + # Timestamp of last activity + last_seen:, + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + metadata:, + metrics:, + # Risk assessment details, if available. + risk_evaluation:, + # Current author status + status:, + trust_level:, + # The author's company or organization + company: nil, + # Author email address + email: nil, + # The author's ID from your system + external_id: nil, + # URL of the author's external profile + external_link: nil, + # Timestamp of last incident + last_incident: nil, + # Author name or identifier + name: nil, + # URL of the author's profile picture + profile_picture: nil + ) + end + + sig do + override.returns( + { + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Block + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metadata, + metrics: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metrics, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::RiskEvaluation + ), + status: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::TrustLevel, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + } + ) + end + def to_hash + end + + class Block < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Block, + ModerationAPI::Internal::AnyHash + ) + end + + # The moderators reason why the author was blocked or suspended. + sig { returns(T.nilable(String)) } + attr_accessor :reason + + # The timestamp until which they are blocked if the author is suspended. + sig { returns(T.nilable(Float)) } + attr_accessor :until_ + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + params( + reason: T.nilable(String), + until_: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # The moderators reason why the author was blocked or suspended. + reason: nil, + # The timestamp until which they are blocked if the author is suspended. + until_: nil + ) + end + + sig do + override.returns( + { reason: T.nilable(String), until_: T.nilable(Float) } + ) + end + def to_hash + end + end + + class Metadata < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metadata, + ModerationAPI::Internal::AnyHash + ) + end + + # Whether the author's email is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :email_verified + + # Whether the author's identity is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :identity_verified + + # Whether the author is a paying customer + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :is_paying_customer + + # Whether the author's phone number is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :phone_verified + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + params( + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + ).returns(T.attached_class) + end + def self.new( + # Whether the author's email is verified + email_verified: nil, + # Whether the author's identity is verified + identity_verified: nil, + # Whether the author is a paying customer + is_paying_customer: nil, + # Whether the author's phone number is verified + phone_verified: nil + ) + end + + sig do + override.returns( + { + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + } + ) + end + def to_hash + end + end + + class Metrics < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metrics, + ModerationAPI::Internal::AnyHash + ) + end + + # Number of flagged content pieces + sig { returns(Float) } + attr_accessor :flagged_content + + # Total pieces of content + sig { returns(Float) } + attr_accessor :total_content + + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + sig { returns(T.nilable(Float)) } + attr_accessor :average_sentiment + + sig do + params( + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # Number of flagged content pieces + flagged_content:, + # Total pieces of content + total_content:, + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + average_sentiment: nil + ) + end + + sig do + override.returns( + { + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + } + ) + end + def to_hash + end + end + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::RiskEvaluation, + ModerationAPI::Internal::AnyHash + ) + end + + # Calculated risk level based on more than 10 behavioral signals. + sig { returns(T.nilable(Float)) } + attr_accessor :risk_level + + # Risk assessment details, if available. + sig do + params(risk_level: T.nilable(Float)).returns(T.attached_class) + end + def self.new( + # Calculated risk level based on more than 10 behavioral signals. + risk_level: nil + ) + end + + sig { override.returns({ risk_level: T.nilable(Float) }) } + def to_hash + end + end + + # Current author status + module Status + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Status + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + ENABLED = + T.let( + :enabled, + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Status::TaggedSymbol + ) + SUSPENDED = + T.let( + :suspended, + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Status::TaggedSymbol + ) + BLOCKED = + T.let( + :blocked, + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Status::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Status::TaggedSymbol + ] + ) + end + def self.values + end + end + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::TrustLevel, + ModerationAPI::Internal::AnyHash + ) + end + + # Author trust level (-1, 0, 1, 2, 3, or 4) + sig { returns(Float) } + attr_accessor :level + + # True if the trust level was set manually by a moderator + sig { returns(T::Boolean) } + attr_accessor :manual + + sig do + params(level: Float, manual: T::Boolean).returns( + T.attached_class + ) + end + def self.new( + # Author trust level (-1, 0, 1, 2, 3, or 4) + level:, + # True if the trust level was set manually by a moderator + manual: + ) + end + + sig { override.returns({ level: Float, manual: T::Boolean }) } + def to_hash + end + end + end + + class Queue < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Queue, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(String) } + attr_accessor :id + + # The queue the item belongs to, if any + sig { params(id: String).returns(T.attached_class) } + def self.new(id:) + end + + sig { override.returns({ id: String }) } + def to_hash + end + end + end + end + end + + class AuthorUnblocked < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUnblocked, + ModerationAPI::Internal::AnyHash + ) + end + + # Stable event ID. Use this to dedupe retries. + sig { returns(String) } + attr_accessor :id + + sig { returns(Symbol) } + attr_accessor :api_version + + # ISO 8601 timestamp of when the event was emitted. + sig { returns(Time) } + attr_accessor :created + + sig { returns(ModerationAPI::WebhookEvent::AuthorUnblocked::Data) } + attr_reader :data + + sig do + params( + data: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::OrHash + ).void + end + attr_writer :data + + # The event type. + sig { returns(Symbol) } + attr_accessor :type + + sig do + params( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::OrHash, + api_version: Symbol, + type: Symbol + ).returns(T.attached_class) + end + def self.new( + # Stable event ID. Use this to dedupe retries. + id:, + # ISO 8601 timestamp of when the event was emitted. + created:, + data:, + api_version: :v2, + # The event type. + type: :"author.unblocked" + ) + end + + sig do + override.returns( + { + id: String, + api_version: Symbol, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorUnblocked::Data, + type: Symbol + } + ) + end + def to_hash + end + + class Data < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data, + ModerationAPI::Internal::AnyHash + ) + end + + sig do + returns(ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object) + end + attr_reader :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::OrHash + ).void + end + attr_writer :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::OrHash + ).returns(T.attached_class) + end + def self.new(object:) + end + + sig do + override.returns( + { + object: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object + } + ) + end + def to_hash + end + + class Object < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object, + ModerationAPI::Internal::AnyHash + ) + end + + # Moderation action ID + sig { returns(String) } + attr_accessor :id + + # The author the action was performed on + sig do + returns( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author + ) + end + attr_reader :author + + sig do + params( + author: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::OrHash + ).void + end + attr_writer :author + + # ISO 8601 timestamp of when the action was performed + sig { returns(Time) } + attr_accessor :created_at + + # Customer-defined key identifying this action + sig { returns(T.nilable(String)) } + attr_accessor :key + + # Display name of the action + sig { returns(T.nilable(String)) } + attr_accessor :name + + # The value passed to the action when it ran + sig { returns(T.nilable(String)) } + attr_accessor :value + + # The queue the item belongs to, if any + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Queue + ) + ) + end + attr_reader :queue + + sig do + params( + queue: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Queue::OrHash + ).void + end + attr_writer :queue + + sig do + params( + id: String, + author: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::OrHash, + created_at: Time, + key: T.nilable(String), + name: T.nilable(String), + value: T.nilable(String), + queue: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Queue::OrHash + ).returns(T.attached_class) + end + def self.new( + # Moderation action ID + id:, + # The author the action was performed on + author:, + # ISO 8601 timestamp of when the action was performed + created_at:, + # Customer-defined key identifying this action + key:, + # Display name of the action + name:, + # The value passed to the action when it ran + value:, + # The queue the item belongs to, if any + queue: nil + ) + end + + sig do + override.returns( + { + id: String, + author: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author, + created_at: Time, + key: T.nilable(String), + name: T.nilable(String), + value: T.nilable(String), + queue: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Queue + } + ) + end + def to_hash + end + + class Author < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author, + ModerationAPI::Internal::AnyHash + ) + end + + # Author ID in Moderation API + sig { returns(String) } + attr_accessor :id + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Block + ) + ) + end + attr_reader :block + + sig do + params( + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Block::OrHash + ) + ).void + end + attr_writer :block + + # Timestamp when author first appeared + sig { returns(Float) } + attr_accessor :first_seen + + # Timestamp of last activity + sig { returns(Float) } + attr_accessor :last_seen + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + returns( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metadata + ) + end + attr_reader :metadata + + sig do + params( + metadata: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metadata::OrHash + ).void + end + attr_writer :metadata + + sig do + returns( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metrics + ) + end + attr_reader :metrics + + sig do + params( + metrics: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metrics::OrHash + ).void + end + attr_writer :metrics + + # Risk assessment details, if available. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::RiskEvaluation + ) + ) + end + attr_reader :risk_evaluation + + sig do + params( + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::RiskEvaluation::OrHash + ) + ).void + end + attr_writer :risk_evaluation + + # Current author status + sig do + returns( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Status::OrSymbol + ) + end + attr_accessor :status + + sig do + returns( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::TrustLevel + ) + end + attr_reader :trust_level + + sig do + params( + trust_level: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::TrustLevel::OrHash + ).void + end + attr_writer :trust_level + + # The author's company or organization + sig { returns(T.nilable(String)) } + attr_accessor :company + + # Author email address + sig { returns(T.nilable(String)) } + attr_accessor :email + + # The author's ID from your system + sig { returns(T.nilable(String)) } + attr_accessor :external_id + + # URL of the author's external profile + sig { returns(T.nilable(String)) } + attr_accessor :external_link + + # Timestamp of last incident + sig { returns(T.nilable(Float)) } + attr_accessor :last_incident + + # Author name or identifier + sig { returns(T.nilable(String)) } + attr_accessor :name + + # URL of the author's profile picture + sig { returns(T.nilable(String)) } + attr_accessor :profile_picture + + # The author the action was performed on + sig do + params( + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Block::OrHash + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metadata::OrHash, + metrics: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metrics::OrHash, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::RiskEvaluation::OrHash + ), + status: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::TrustLevel::OrHash, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + ).returns(T.attached_class) + end + def self.new( + # Author ID in Moderation API + id:, + # Block or suspension details, if applicable. Null if the author is enabled. + block:, + # Timestamp when author first appeared + first_seen:, + # Timestamp of last activity + last_seen:, + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + metadata:, + metrics:, + # Risk assessment details, if available. + risk_evaluation:, + # Current author status + status:, + trust_level:, + # The author's company or organization + company: nil, + # Author email address + email: nil, + # The author's ID from your system + external_id: nil, + # URL of the author's external profile + external_link: nil, + # Timestamp of last incident + last_incident: nil, + # Author name or identifier + name: nil, + # URL of the author's profile picture + profile_picture: nil + ) + end + + sig do + override.returns( + { + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Block + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metadata, + metrics: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metrics, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::RiskEvaluation + ), + status: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::TrustLevel, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + } + ) + end + def to_hash + end + + class Block < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Block, + ModerationAPI::Internal::AnyHash + ) + end + + # The moderators reason why the author was blocked or suspended. + sig { returns(T.nilable(String)) } + attr_accessor :reason + + # The timestamp until which they are blocked if the author is suspended. + sig { returns(T.nilable(Float)) } + attr_accessor :until_ + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + params( + reason: T.nilable(String), + until_: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # The moderators reason why the author was blocked or suspended. + reason: nil, + # The timestamp until which they are blocked if the author is suspended. + until_: nil + ) + end + + sig do + override.returns( + { reason: T.nilable(String), until_: T.nilable(Float) } + ) + end + def to_hash + end + end + + class Metadata < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metadata, + ModerationAPI::Internal::AnyHash + ) + end + + # Whether the author's email is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :email_verified + + # Whether the author's identity is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :identity_verified + + # Whether the author is a paying customer + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :is_paying_customer + + # Whether the author's phone number is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :phone_verified + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + params( + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + ).returns(T.attached_class) + end + def self.new( + # Whether the author's email is verified + email_verified: nil, + # Whether the author's identity is verified + identity_verified: nil, + # Whether the author is a paying customer + is_paying_customer: nil, + # Whether the author's phone number is verified + phone_verified: nil + ) + end + + sig do + override.returns( + { + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + } + ) + end + def to_hash + end + end + + class Metrics < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metrics, + ModerationAPI::Internal::AnyHash + ) + end + + # Number of flagged content pieces + sig { returns(Float) } + attr_accessor :flagged_content + + # Total pieces of content + sig { returns(Float) } + attr_accessor :total_content + + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + sig { returns(T.nilable(Float)) } + attr_accessor :average_sentiment + + sig do + params( + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # Number of flagged content pieces + flagged_content:, + # Total pieces of content + total_content:, + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + average_sentiment: nil + ) + end + + sig do + override.returns( + { + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + } + ) + end + def to_hash + end + end + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::RiskEvaluation, + ModerationAPI::Internal::AnyHash + ) + end + + # Calculated risk level based on more than 10 behavioral signals. + sig { returns(T.nilable(Float)) } + attr_accessor :risk_level + + # Risk assessment details, if available. + sig do + params(risk_level: T.nilable(Float)).returns(T.attached_class) + end + def self.new( + # Calculated risk level based on more than 10 behavioral signals. + risk_level: nil + ) + end + + sig { override.returns({ risk_level: T.nilable(Float) }) } + def to_hash + end + end + + # Current author status + module Status + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Status + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + ENABLED = + T.let( + :enabled, + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Status::TaggedSymbol + ) + SUSPENDED = + T.let( + :suspended, + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Status::TaggedSymbol + ) + BLOCKED = + T.let( + :blocked, + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Status::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Status::TaggedSymbol + ] + ) + end + def self.values + end + end + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::TrustLevel, + ModerationAPI::Internal::AnyHash + ) + end + + # Author trust level (-1, 0, 1, 2, 3, or 4) + sig { returns(Float) } + attr_accessor :level + + # True if the trust level was set manually by a moderator + sig { returns(T::Boolean) } + attr_accessor :manual + + sig do + params(level: Float, manual: T::Boolean).returns( + T.attached_class + ) + end + def self.new( + # Author trust level (-1, 0, 1, 2, 3, or 4) + level:, + # True if the trust level was set manually by a moderator + manual: + ) + end + + sig { override.returns({ level: Float, manual: T::Boolean }) } + def to_hash + end + end + end + + class Queue < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Queue, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(String) } + attr_accessor :id + + # The queue the item belongs to, if any + sig { params(id: String).returns(T.attached_class) } + def self.new(id:) + end + + sig { override.returns({ id: String }) } + def to_hash + end + end + end + end + end + + class AuthorSuspended < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorSuspended, + ModerationAPI::Internal::AnyHash + ) + end + + # Stable event ID. Use this to dedupe retries. + sig { returns(String) } + attr_accessor :id + + sig { returns(Symbol) } + attr_accessor :api_version + + # ISO 8601 timestamp of when the event was emitted. + sig { returns(Time) } + attr_accessor :created + + sig { returns(ModerationAPI::WebhookEvent::AuthorSuspended::Data) } + attr_reader :data + + sig do + params( + data: ModerationAPI::WebhookEvent::AuthorSuspended::Data::OrHash + ).void + end + attr_writer :data + + # The event type. + sig { returns(Symbol) } + attr_accessor :type + + sig do + params( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorSuspended::Data::OrHash, + api_version: Symbol, + type: Symbol + ).returns(T.attached_class) + end + def self.new( + # Stable event ID. Use this to dedupe retries. + id:, + # ISO 8601 timestamp of when the event was emitted. + created:, + data:, + api_version: :v2, + # The event type. + type: :"author.suspended" + ) + end + + sig do + override.returns( + { + id: String, + api_version: Symbol, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorSuspended::Data, + type: Symbol + } + ) + end + def to_hash + end + + class Data < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorSuspended::Data, + ModerationAPI::Internal::AnyHash + ) + end + + sig do + returns(ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object) + end + attr_reader :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::OrHash + ).void + end + attr_writer :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::OrHash + ).returns(T.attached_class) + end + def self.new(object:) + end + + sig do + override.returns( + { + object: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object + } + ) + end + def to_hash + end + + class Object < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object, + ModerationAPI::Internal::AnyHash + ) + end + + # Moderation action ID + sig { returns(String) } + attr_accessor :id + + # The author the action was performed on + sig do + returns( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author + ) + end + attr_reader :author + + sig do + params( + author: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::OrHash + ).void + end + attr_writer :author + + # ISO 8601 timestamp of when the action was performed + sig { returns(Time) } + attr_accessor :created_at + + # Customer-defined key identifying this action + sig { returns(T.nilable(String)) } + attr_accessor :key + + # Display name of the action + sig { returns(T.nilable(String)) } + attr_accessor :name + + # The value passed to the action when it ran + sig { returns(T.nilable(String)) } + attr_accessor :value + + # The queue the item belongs to, if any + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Queue + ) + ) + end + attr_reader :queue + + sig do + params( + queue: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Queue::OrHash + ).void + end + attr_writer :queue + + sig do + params( + id: String, + author: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::OrHash, + created_at: Time, + key: T.nilable(String), + name: T.nilable(String), + value: T.nilable(String), + queue: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Queue::OrHash + ).returns(T.attached_class) + end + def self.new( + # Moderation action ID + id:, + # The author the action was performed on + author:, + # ISO 8601 timestamp of when the action was performed + created_at:, + # Customer-defined key identifying this action + key:, + # Display name of the action + name:, + # The value passed to the action when it ran + value:, + # The queue the item belongs to, if any + queue: nil + ) + end + + sig do + override.returns( + { + id: String, + author: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author, + created_at: Time, + key: T.nilable(String), + name: T.nilable(String), + value: T.nilable(String), + queue: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Queue + } + ) + end + def to_hash + end + + class Author < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author, + ModerationAPI::Internal::AnyHash + ) + end + + # Author ID in Moderation API + sig { returns(String) } + attr_accessor :id + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Block + ) + ) + end + attr_reader :block + + sig do + params( + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Block::OrHash + ) + ).void + end + attr_writer :block + + # Timestamp when author first appeared + sig { returns(Float) } + attr_accessor :first_seen + + # Timestamp of last activity + sig { returns(Float) } + attr_accessor :last_seen + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + returns( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metadata + ) + end + attr_reader :metadata + + sig do + params( + metadata: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metadata::OrHash + ).void + end + attr_writer :metadata + + sig do + returns( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metrics + ) + end + attr_reader :metrics + + sig do + params( + metrics: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metrics::OrHash + ).void + end + attr_writer :metrics + + # Risk assessment details, if available. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::RiskEvaluation + ) + ) + end + attr_reader :risk_evaluation + + sig do + params( + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::RiskEvaluation::OrHash + ) + ).void + end + attr_writer :risk_evaluation + + # Current author status + sig do + returns( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Status::OrSymbol + ) + end + attr_accessor :status + + sig do + returns( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::TrustLevel + ) + end + attr_reader :trust_level + + sig do + params( + trust_level: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::TrustLevel::OrHash + ).void + end + attr_writer :trust_level + + # The author's company or organization + sig { returns(T.nilable(String)) } + attr_accessor :company + + # Author email address + sig { returns(T.nilable(String)) } + attr_accessor :email + + # The author's ID from your system + sig { returns(T.nilable(String)) } + attr_accessor :external_id + + # URL of the author's external profile + sig { returns(T.nilable(String)) } + attr_accessor :external_link + + # Timestamp of last incident + sig { returns(T.nilable(Float)) } + attr_accessor :last_incident + + # Author name or identifier + sig { returns(T.nilable(String)) } + attr_accessor :name + + # URL of the author's profile picture + sig { returns(T.nilable(String)) } + attr_accessor :profile_picture + + # The author the action was performed on + sig do + params( + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Block::OrHash + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metadata::OrHash, + metrics: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metrics::OrHash, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::RiskEvaluation::OrHash + ), + status: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::TrustLevel::OrHash, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + ).returns(T.attached_class) + end + def self.new( + # Author ID in Moderation API + id:, + # Block or suspension details, if applicable. Null if the author is enabled. + block:, + # Timestamp when author first appeared + first_seen:, + # Timestamp of last activity + last_seen:, + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + metadata:, + metrics:, + # Risk assessment details, if available. + risk_evaluation:, + # Current author status + status:, + trust_level:, + # The author's company or organization + company: nil, + # Author email address + email: nil, + # The author's ID from your system + external_id: nil, + # URL of the author's external profile + external_link: nil, + # Timestamp of last incident + last_incident: nil, + # Author name or identifier + name: nil, + # URL of the author's profile picture + profile_picture: nil + ) + end + + sig do + override.returns( + { + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Block + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metadata, + metrics: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metrics, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::RiskEvaluation + ), + status: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::TrustLevel, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + } + ) + end + def to_hash + end + + class Block < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Block, + ModerationAPI::Internal::AnyHash + ) + end + + # The moderators reason why the author was blocked or suspended. + sig { returns(T.nilable(String)) } + attr_accessor :reason + + # The timestamp until which they are blocked if the author is suspended. + sig { returns(T.nilable(Float)) } + attr_accessor :until_ + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + params( + reason: T.nilable(String), + until_: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # The moderators reason why the author was blocked or suspended. + reason: nil, + # The timestamp until which they are blocked if the author is suspended. + until_: nil + ) + end + + sig do + override.returns( + { reason: T.nilable(String), until_: T.nilable(Float) } + ) + end + def to_hash + end + end + + class Metadata < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metadata, + ModerationAPI::Internal::AnyHash + ) + end + + # Whether the author's email is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :email_verified + + # Whether the author's identity is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :identity_verified + + # Whether the author is a paying customer + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :is_paying_customer + + # Whether the author's phone number is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :phone_verified + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + params( + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + ).returns(T.attached_class) + end + def self.new( + # Whether the author's email is verified + email_verified: nil, + # Whether the author's identity is verified + identity_verified: nil, + # Whether the author is a paying customer + is_paying_customer: nil, + # Whether the author's phone number is verified + phone_verified: nil + ) + end + + sig do + override.returns( + { + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + } + ) + end + def to_hash + end + end + + class Metrics < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metrics, + ModerationAPI::Internal::AnyHash + ) + end + + # Number of flagged content pieces + sig { returns(Float) } + attr_accessor :flagged_content + + # Total pieces of content + sig { returns(Float) } + attr_accessor :total_content + + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + sig { returns(T.nilable(Float)) } + attr_accessor :average_sentiment + + sig do + params( + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # Number of flagged content pieces + flagged_content:, + # Total pieces of content + total_content:, + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + average_sentiment: nil + ) + end + + sig do + override.returns( + { + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + } + ) + end + def to_hash + end + end + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::RiskEvaluation, + ModerationAPI::Internal::AnyHash + ) + end + + # Calculated risk level based on more than 10 behavioral signals. + sig { returns(T.nilable(Float)) } + attr_accessor :risk_level + + # Risk assessment details, if available. + sig do + params(risk_level: T.nilable(Float)).returns(T.attached_class) + end + def self.new( + # Calculated risk level based on more than 10 behavioral signals. + risk_level: nil + ) + end + + sig { override.returns({ risk_level: T.nilable(Float) }) } + def to_hash + end + end + + # Current author status + module Status + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Status + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + ENABLED = + T.let( + :enabled, + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Status::TaggedSymbol + ) + SUSPENDED = + T.let( + :suspended, + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Status::TaggedSymbol + ) + BLOCKED = + T.let( + :blocked, + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Status::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Status::TaggedSymbol + ] + ) + end + def self.values + end + end + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::TrustLevel, + ModerationAPI::Internal::AnyHash + ) + end + + # Author trust level (-1, 0, 1, 2, 3, or 4) + sig { returns(Float) } + attr_accessor :level + + # True if the trust level was set manually by a moderator + sig { returns(T::Boolean) } + attr_accessor :manual + + sig do + params(level: Float, manual: T::Boolean).returns( + T.attached_class + ) + end + def self.new( + # Author trust level (-1, 0, 1, 2, 3, or 4) + level:, + # True if the trust level was set manually by a moderator + manual: + ) + end + + sig { override.returns({ level: Float, manual: T::Boolean }) } + def to_hash + end + end + end + + class Queue < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Queue, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(String) } + attr_accessor :id + + # The queue the item belongs to, if any + sig { params(id: String).returns(T.attached_class) } + def self.new(id:) + end + + sig { override.returns({ id: String }) } + def to_hash + end + end + end + end + end + + class AuthorUpdated < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUpdated, + ModerationAPI::Internal::AnyHash + ) + end + + # Stable event ID. Use this to dedupe retries. + sig { returns(String) } + attr_accessor :id + + sig { returns(Symbol) } + attr_accessor :api_version + + # ISO 8601 timestamp of when the event was emitted. + sig { returns(Time) } + attr_accessor :created + + sig { returns(ModerationAPI::WebhookEvent::AuthorUpdated::Data) } + attr_reader :data + + sig do + params( + data: ModerationAPI::WebhookEvent::AuthorUpdated::Data::OrHash + ).void + end + attr_writer :data + + # The event type. + sig { returns(Symbol) } + attr_accessor :type + + sig do + params( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorUpdated::Data::OrHash, + api_version: Symbol, + type: Symbol + ).returns(T.attached_class) + end + def self.new( + # Stable event ID. Use this to dedupe retries. + id:, + # ISO 8601 timestamp of when the event was emitted. + created:, + data:, + api_version: :v2, + # The event type. + type: :"author.updated" + ) + end + + sig do + override.returns( + { + id: String, + api_version: Symbol, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorUpdated::Data, + type: Symbol + } + ) + end + def to_hash + end + + class Data < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUpdated::Data, + ModerationAPI::Internal::AnyHash + ) + end + + sig do + returns(ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object) + end + attr_reader :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::OrHash + ).void + end + attr_writer :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::OrHash + ).returns(T.attached_class) + end + def self.new(object:) + end + + sig do + override.returns( + { + object: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object + } + ) + end + def to_hash + end + + class Object < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object, + ModerationAPI::Internal::AnyHash + ) + end + + # Author ID in Moderation API + sig { returns(String) } + attr_accessor :id + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Block + ) + ) + end + attr_reader :block + + sig do + params( + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Block::OrHash + ) + ).void + end + attr_writer :block + + # Timestamp when author first appeared + sig { returns(Float) } + attr_accessor :first_seen + + # Timestamp of last activity + sig { returns(Float) } + attr_accessor :last_seen + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + returns( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metadata + ) + end + attr_reader :metadata + + sig do + params( + metadata: + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metadata::OrHash + ).void + end + attr_writer :metadata + + sig do + returns( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metrics + ) + end + attr_reader :metrics + + sig do + params( + metrics: + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metrics::OrHash + ).void + end + attr_writer :metrics + + # Risk assessment details, if available. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::RiskEvaluation + ) + ) + end + attr_reader :risk_evaluation + + sig do + params( + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::RiskEvaluation::OrHash + ) + ).void + end + attr_writer :risk_evaluation + + # Current author status + sig do + returns( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Status::OrSymbol + ) + end + attr_accessor :status + + sig do + returns( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::TrustLevel + ) + end + attr_reader :trust_level + + sig do + params( + trust_level: + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::TrustLevel::OrHash + ).void + end + attr_writer :trust_level + + # The author's company or organization + sig { returns(T.nilable(String)) } + attr_accessor :company + + # Author email address + sig { returns(T.nilable(String)) } + attr_accessor :email + + # The author's ID from your system + sig { returns(T.nilable(String)) } + attr_accessor :external_id + + # URL of the author's external profile + sig { returns(T.nilable(String)) } + attr_accessor :external_link + + # Timestamp of last incident + sig { returns(T.nilable(Float)) } + attr_accessor :last_incident + + # Author name or identifier + sig { returns(T.nilable(String)) } + attr_accessor :name + + # URL of the author's profile picture + sig { returns(T.nilable(String)) } + attr_accessor :profile_picture + + sig do + params( + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Block::OrHash + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metadata::OrHash, + metrics: + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metrics::OrHash, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::RiskEvaluation::OrHash + ), + status: + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::TrustLevel::OrHash, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + ).returns(T.attached_class) + end + def self.new( + # Author ID in Moderation API + id:, + # Block or suspension details, if applicable. Null if the author is enabled. + block:, + # Timestamp when author first appeared + first_seen:, + # Timestamp of last activity + last_seen:, + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + metadata:, + metrics:, + # Risk assessment details, if available. + risk_evaluation:, + # Current author status + status:, + trust_level:, + # The author's company or organization + company: nil, + # Author email address + email: nil, + # The author's ID from your system + external_id: nil, + # URL of the author's external profile + external_link: nil, + # Timestamp of last incident + last_incident: nil, + # Author name or identifier + name: nil, + # URL of the author's profile picture + profile_picture: nil + ) + end + + sig do + override.returns( + { + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Block + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metadata, + metrics: + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metrics, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::RiskEvaluation + ), + status: + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::TrustLevel, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + } + ) + end + def to_hash + end + + class Block < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Block, + ModerationAPI::Internal::AnyHash + ) + end + + # The moderators reason why the author was blocked or suspended. + sig { returns(T.nilable(String)) } + attr_accessor :reason + + # The timestamp until which they are blocked if the author is suspended. + sig { returns(T.nilable(Float)) } + attr_accessor :until_ + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + params( + reason: T.nilable(String), + until_: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # The moderators reason why the author was blocked or suspended. + reason: nil, + # The timestamp until which they are blocked if the author is suspended. + until_: nil + ) + end + + sig do + override.returns( + { reason: T.nilable(String), until_: T.nilable(Float) } + ) + end + def to_hash + end + end + + class Metadata < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metadata, + ModerationAPI::Internal::AnyHash + ) + end + + # Whether the author's email is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :email_verified + + # Whether the author's identity is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :identity_verified + + # Whether the author is a paying customer + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :is_paying_customer + + # Whether the author's phone number is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :phone_verified + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + params( + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + ).returns(T.attached_class) + end + def self.new( + # Whether the author's email is verified + email_verified: nil, + # Whether the author's identity is verified + identity_verified: nil, + # Whether the author is a paying customer + is_paying_customer: nil, + # Whether the author's phone number is verified + phone_verified: nil + ) + end + + sig do + override.returns( + { + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + } + ) + end + def to_hash + end + end + + class Metrics < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metrics, + ModerationAPI::Internal::AnyHash + ) + end + + # Number of flagged content pieces + sig { returns(Float) } + attr_accessor :flagged_content + + # Total pieces of content + sig { returns(Float) } + attr_accessor :total_content + + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + sig { returns(T.nilable(Float)) } + attr_accessor :average_sentiment + + sig do + params( + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # Number of flagged content pieces + flagged_content:, + # Total pieces of content + total_content:, + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + average_sentiment: nil + ) + end + + sig do + override.returns( + { + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + } + ) + end + def to_hash + end + end + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::RiskEvaluation, + ModerationAPI::Internal::AnyHash + ) + end + + # Calculated risk level based on more than 10 behavioral signals. + sig { returns(T.nilable(Float)) } + attr_accessor :risk_level + + # Risk assessment details, if available. + sig do + params(risk_level: T.nilable(Float)).returns(T.attached_class) + end + def self.new( + # Calculated risk level based on more than 10 behavioral signals. + risk_level: nil + ) + end + + sig { override.returns({ risk_level: T.nilable(Float) }) } + def to_hash + end + end + + # Current author status + module Status + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Status + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + ENABLED = + T.let( + :enabled, + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Status::TaggedSymbol + ) + SUSPENDED = + T.let( + :suspended, + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Status::TaggedSymbol + ) + BLOCKED = + T.let( + :blocked, + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Status::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Status::TaggedSymbol + ] + ) + end + def self.values + end + end + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::TrustLevel, + ModerationAPI::Internal::AnyHash + ) + end + + # Author trust level (-1, 0, 1, 2, 3, or 4) + sig { returns(Float) } + attr_accessor :level + + # True if the trust level was set manually by a moderator + sig { returns(T::Boolean) } + attr_accessor :manual + + sig do + params(level: Float, manual: T::Boolean).returns( + T.attached_class + ) + end + def self.new( + # Author trust level (-1, 0, 1, 2, 3, or 4) + level:, + # True if the trust level was set manually by a moderator + manual: + ) + end + + sig { override.returns({ level: Float, manual: T::Boolean }) } + def to_hash + end + end + end + end + end + + class AuthorTrustLevelChanged < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged, + ModerationAPI::Internal::AnyHash + ) + end + + # Stable event ID. Use this to dedupe retries. + sig { returns(String) } + attr_accessor :id + + sig { returns(Symbol) } + attr_accessor :api_version + + # ISO 8601 timestamp of when the event was emitted. + sig { returns(Time) } + attr_accessor :created + + sig do + returns(ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data) + end + attr_reader :data + + sig do + params( + data: + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::OrHash + ).void + end + attr_writer :data + + # The event type. + sig { returns(Symbol) } + attr_accessor :type + + sig do + params( + id: String, + created: Time, + data: + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::OrHash, + api_version: Symbol, + type: Symbol + ).returns(T.attached_class) + end + def self.new( + # Stable event ID. Use this to dedupe retries. + id:, + # ISO 8601 timestamp of when the event was emitted. + created:, + data:, + api_version: :v2, + # The event type. + type: :"author.trust_level_changed" + ) + end + + sig do + override.returns( + { + id: String, + api_version: Symbol, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data, + type: Symbol + } + ) + end + def to_hash + end + + class Data < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data, + ModerationAPI::Internal::AnyHash + ) + end + + sig do + returns( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object + ) + end + attr_reader :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::OrHash + ).void + end + attr_writer :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::OrHash + ).returns(T.attached_class) + end + def self.new(object:) + end + + sig do + override.returns( + { + object: + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object + } + ) + end + def to_hash + end + + class Object < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object, + ModerationAPI::Internal::AnyHash + ) + end + + # Author ID in Moderation API + sig { returns(String) } + attr_accessor :id + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Block + ) + ) + end + attr_reader :block + + sig do + params( + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Block::OrHash + ) + ).void + end + attr_writer :block + + # Timestamp when author first appeared + sig { returns(Float) } + attr_accessor :first_seen + + # Timestamp of last activity + sig { returns(Float) } + attr_accessor :last_seen + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + returns( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metadata + ) + end + attr_reader :metadata + + sig do + params( + metadata: + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metadata::OrHash + ).void + end + attr_writer :metadata + + sig do + returns( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metrics + ) + end + attr_reader :metrics + + sig do + params( + metrics: + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metrics::OrHash + ).void + end + attr_writer :metrics + + # Risk assessment details, if available. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::RiskEvaluation + ) + ) + end + attr_reader :risk_evaluation + + sig do + params( + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::RiskEvaluation::OrHash + ) + ).void + end + attr_writer :risk_evaluation + + # Current author status + sig do + returns( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Status::OrSymbol + ) + end + attr_accessor :status + + sig do + returns( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::TrustLevel + ) + end + attr_reader :trust_level + + sig do + params( + trust_level: + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::TrustLevel::OrHash + ).void + end + attr_writer :trust_level + + # The author's company or organization + sig { returns(T.nilable(String)) } + attr_accessor :company + + # Author email address + sig { returns(T.nilable(String)) } + attr_accessor :email + + # The author's ID from your system + sig { returns(T.nilable(String)) } + attr_accessor :external_id + + # URL of the author's external profile + sig { returns(T.nilable(String)) } + attr_accessor :external_link + + # Timestamp of last incident + sig { returns(T.nilable(Float)) } + attr_accessor :last_incident + + # Author name or identifier + sig { returns(T.nilable(String)) } + attr_accessor :name + + # URL of the author's profile picture + sig { returns(T.nilable(String)) } + attr_accessor :profile_picture + + sig do + params( + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Block::OrHash + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metadata::OrHash, + metrics: + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metrics::OrHash, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::RiskEvaluation::OrHash + ), + status: + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::TrustLevel::OrHash, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + ).returns(T.attached_class) + end + def self.new( + # Author ID in Moderation API + id:, + # Block or suspension details, if applicable. Null if the author is enabled. + block:, + # Timestamp when author first appeared + first_seen:, + # Timestamp of last activity + last_seen:, + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + metadata:, + metrics:, + # Risk assessment details, if available. + risk_evaluation:, + # Current author status + status:, + trust_level:, + # The author's company or organization + company: nil, + # Author email address + email: nil, + # The author's ID from your system + external_id: nil, + # URL of the author's external profile + external_link: nil, + # Timestamp of last incident + last_incident: nil, + # Author name or identifier + name: nil, + # URL of the author's profile picture + profile_picture: nil + ) + end + + sig do + override.returns( + { + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Block + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metadata, + metrics: + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metrics, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::RiskEvaluation + ), + status: + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::TrustLevel, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + } + ) + end + def to_hash + end + + class Block < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Block, + ModerationAPI::Internal::AnyHash + ) + end + + # The moderators reason why the author was blocked or suspended. + sig { returns(T.nilable(String)) } + attr_accessor :reason + + # The timestamp until which they are blocked if the author is suspended. + sig { returns(T.nilable(Float)) } + attr_accessor :until_ + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + params( + reason: T.nilable(String), + until_: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # The moderators reason why the author was blocked or suspended. + reason: nil, + # The timestamp until which they are blocked if the author is suspended. + until_: nil + ) + end + + sig do + override.returns( + { reason: T.nilable(String), until_: T.nilable(Float) } + ) + end + def to_hash + end + end + + class Metadata < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metadata, + ModerationAPI::Internal::AnyHash + ) + end + + # Whether the author's email is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :email_verified + + # Whether the author's identity is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :identity_verified + + # Whether the author is a paying customer + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :is_paying_customer + + # Whether the author's phone number is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :phone_verified + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + params( + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + ).returns(T.attached_class) + end + def self.new( + # Whether the author's email is verified + email_verified: nil, + # Whether the author's identity is verified + identity_verified: nil, + # Whether the author is a paying customer + is_paying_customer: nil, + # Whether the author's phone number is verified + phone_verified: nil + ) + end + + sig do + override.returns( + { + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + } + ) + end + def to_hash + end + end + + class Metrics < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metrics, + ModerationAPI::Internal::AnyHash + ) + end + + # Number of flagged content pieces + sig { returns(Float) } + attr_accessor :flagged_content + + # Total pieces of content + sig { returns(Float) } + attr_accessor :total_content + + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + sig { returns(T.nilable(Float)) } + attr_accessor :average_sentiment + + sig do + params( + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # Number of flagged content pieces + flagged_content:, + # Total pieces of content + total_content:, + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + average_sentiment: nil + ) + end + + sig do + override.returns( + { + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + } + ) + end + def to_hash + end + end + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::RiskEvaluation, + ModerationAPI::Internal::AnyHash + ) + end + + # Calculated risk level based on more than 10 behavioral signals. + sig { returns(T.nilable(Float)) } + attr_accessor :risk_level + + # Risk assessment details, if available. + sig do + params(risk_level: T.nilable(Float)).returns(T.attached_class) + end + def self.new( + # Calculated risk level based on more than 10 behavioral signals. + risk_level: nil + ) + end + + sig { override.returns({ risk_level: T.nilable(Float) }) } + def to_hash + end + end + + # Current author status + module Status + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Status + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + ENABLED = + T.let( + :enabled, + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Status::TaggedSymbol + ) + SUSPENDED = + T.let( + :suspended, + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Status::TaggedSymbol + ) + BLOCKED = + T.let( + :blocked, + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Status::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Status::TaggedSymbol + ] + ) + end + def self.values + end + end + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::TrustLevel, + ModerationAPI::Internal::AnyHash + ) + end + + # Author trust level (-1, 0, 1, 2, 3, or 4) + sig { returns(Float) } + attr_accessor :level + + # True if the trust level was set manually by a moderator + sig { returns(T::Boolean) } + attr_accessor :manual + + sig do + params(level: Float, manual: T::Boolean).returns( + T.attached_class + ) + end + def self.new( + # Author trust level (-1, 0, 1, 2, 3, or 4) + level:, + # True if the trust level was set manually by a moderator + manual: + ) + end + + sig { override.returns({ level: Float, manual: T::Boolean }) } + def to_hash + end + end + end + end + end + + class AuthorAction < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorAction, + ModerationAPI::Internal::AnyHash + ) + end + + # Stable event ID. Use this to dedupe retries. + sig { returns(String) } + attr_accessor :id + + sig { returns(Symbol) } + attr_accessor :api_version + + # ISO 8601 timestamp of when the event was emitted. + sig { returns(Time) } + attr_accessor :created + + sig { returns(ModerationAPI::WebhookEvent::AuthorAction::Data) } + attr_reader :data + + sig do + params( + data: ModerationAPI::WebhookEvent::AuthorAction::Data::OrHash + ).void + end + attr_writer :data + + # The event type. + sig { returns(Symbol) } + attr_accessor :type + + sig do + params( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorAction::Data::OrHash, + api_version: Symbol, + type: Symbol + ).returns(T.attached_class) + end + def self.new( + # Stable event ID. Use this to dedupe retries. + id:, + # ISO 8601 timestamp of when the event was emitted. + created:, + data:, + api_version: :v2, + # The event type. + type: :"author.action" + ) + end + + sig do + override.returns( + { + id: String, + api_version: Symbol, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorAction::Data, + type: Symbol + } + ) + end + def to_hash + end + + class Data < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorAction::Data, + ModerationAPI::Internal::AnyHash + ) + end + + sig do + returns(ModerationAPI::WebhookEvent::AuthorAction::Data::Object) + end + attr_reader :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::OrHash + ).void + end + attr_writer :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::OrHash + ).returns(T.attached_class) + end + def self.new(object:) + end + + sig do + override.returns( + { + object: ModerationAPI::WebhookEvent::AuthorAction::Data::Object + } + ) + end + def to_hash + end + + class Object < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object, + ModerationAPI::Internal::AnyHash + ) + end + + # Moderation action ID + sig { returns(String) } + attr_accessor :id + + # The author the action was performed on + sig do + returns( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author + ) + end + attr_reader :author + + sig do + params( + author: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::OrHash + ).void + end + attr_writer :author + + # ISO 8601 timestamp of when the action was performed + sig { returns(Time) } + attr_accessor :created_at + + # Customer-defined key identifying this action + sig { returns(T.nilable(String)) } + attr_accessor :key + + # Display name of the action + sig { returns(T.nilable(String)) } + attr_accessor :name + + # The value passed to the action when it ran + sig { returns(T.nilable(String)) } + attr_accessor :value + + # The queue the item belongs to, if any + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Queue + ) + ) + end + attr_reader :queue + + sig do + params( + queue: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Queue::OrHash + ).void + end + attr_writer :queue + + sig do + params( + id: String, + author: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::OrHash, + created_at: Time, + key: T.nilable(String), + name: T.nilable(String), + value: T.nilable(String), + queue: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Queue::OrHash + ).returns(T.attached_class) + end + def self.new( + # Moderation action ID + id:, + # The author the action was performed on + author:, + # ISO 8601 timestamp of when the action was performed + created_at:, + # Customer-defined key identifying this action + key:, + # Display name of the action + name:, + # The value passed to the action when it ran + value:, + # The queue the item belongs to, if any + queue: nil + ) + end + + sig do + override.returns( + { + id: String, + author: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author, + created_at: Time, + key: T.nilable(String), + name: T.nilable(String), + value: T.nilable(String), + queue: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Queue + } + ) + end + def to_hash + end + + class Author < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author, + ModerationAPI::Internal::AnyHash + ) + end + + # Author ID in Moderation API + sig { returns(String) } + attr_accessor :id + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Block + ) + ) + end + attr_reader :block + + sig do + params( + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Block::OrHash + ) + ).void + end + attr_writer :block + + # Timestamp when author first appeared + sig { returns(Float) } + attr_accessor :first_seen + + # Timestamp of last activity + sig { returns(Float) } + attr_accessor :last_seen + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + returns( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metadata + ) + end + attr_reader :metadata + + sig do + params( + metadata: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metadata::OrHash + ).void + end + attr_writer :metadata + + sig do + returns( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metrics + ) + end + attr_reader :metrics + + sig do + params( + metrics: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metrics::OrHash + ).void + end + attr_writer :metrics + + # Risk assessment details, if available. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::RiskEvaluation + ) + ) + end + attr_reader :risk_evaluation + + sig do + params( + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::RiskEvaluation::OrHash + ) + ).void + end + attr_writer :risk_evaluation + + # Current author status + sig do + returns( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Status::OrSymbol + ) + end + attr_accessor :status + + sig do + returns( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::TrustLevel + ) + end + attr_reader :trust_level + + sig do + params( + trust_level: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::TrustLevel::OrHash + ).void + end + attr_writer :trust_level + + # The author's company or organization + sig { returns(T.nilable(String)) } + attr_accessor :company + + # Author email address + sig { returns(T.nilable(String)) } + attr_accessor :email + + # The author's ID from your system + sig { returns(T.nilable(String)) } + attr_accessor :external_id + + # URL of the author's external profile + sig { returns(T.nilable(String)) } + attr_accessor :external_link + + # Timestamp of last incident + sig { returns(T.nilable(Float)) } + attr_accessor :last_incident + + # Author name or identifier + sig { returns(T.nilable(String)) } + attr_accessor :name + + # URL of the author's profile picture + sig { returns(T.nilable(String)) } + attr_accessor :profile_picture + + # The author the action was performed on + sig do + params( + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Block::OrHash + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metadata::OrHash, + metrics: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metrics::OrHash, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::RiskEvaluation::OrHash + ), + status: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::TrustLevel::OrHash, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + ).returns(T.attached_class) + end + def self.new( + # Author ID in Moderation API + id:, + # Block or suspension details, if applicable. Null if the author is enabled. + block:, + # Timestamp when author first appeared + first_seen:, + # Timestamp of last activity + last_seen:, + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + metadata:, + metrics:, + # Risk assessment details, if available. + risk_evaluation:, + # Current author status + status:, + trust_level:, + # The author's company or organization + company: nil, + # Author email address + email: nil, + # The author's ID from your system + external_id: nil, + # URL of the author's external profile + external_link: nil, + # Timestamp of last incident + last_incident: nil, + # Author name or identifier + name: nil, + # URL of the author's profile picture + profile_picture: nil + ) + end + + sig do + override.returns( + { + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Block + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metadata, + metrics: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metrics, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::RiskEvaluation + ), + status: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::TrustLevel, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + } + ) + end + def to_hash + end + + class Block < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Block, + ModerationAPI::Internal::AnyHash + ) + end + + # The moderators reason why the author was blocked or suspended. + sig { returns(T.nilable(String)) } + attr_accessor :reason + + # The timestamp until which they are blocked if the author is suspended. + sig { returns(T.nilable(Float)) } + attr_accessor :until_ + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + params( + reason: T.nilable(String), + until_: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # The moderators reason why the author was blocked or suspended. + reason: nil, + # The timestamp until which they are blocked if the author is suspended. + until_: nil + ) + end + + sig do + override.returns( + { reason: T.nilable(String), until_: T.nilable(Float) } + ) + end + def to_hash + end + end + + class Metadata < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metadata, + ModerationAPI::Internal::AnyHash + ) + end + + # Whether the author's email is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :email_verified + + # Whether the author's identity is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :identity_verified + + # Whether the author is a paying customer + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :is_paying_customer + + # Whether the author's phone number is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :phone_verified + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + params( + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + ).returns(T.attached_class) + end + def self.new( + # Whether the author's email is verified + email_verified: nil, + # Whether the author's identity is verified + identity_verified: nil, + # Whether the author is a paying customer + is_paying_customer: nil, + # Whether the author's phone number is verified + phone_verified: nil + ) + end + + sig do + override.returns( + { + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + } + ) + end + def to_hash + end + end + + class Metrics < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metrics, + ModerationAPI::Internal::AnyHash + ) + end + + # Number of flagged content pieces + sig { returns(Float) } + attr_accessor :flagged_content + + # Total pieces of content + sig { returns(Float) } + attr_accessor :total_content + + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + sig { returns(T.nilable(Float)) } + attr_accessor :average_sentiment + + sig do + params( + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # Number of flagged content pieces + flagged_content:, + # Total pieces of content + total_content:, + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + average_sentiment: nil + ) + end + + sig do + override.returns( + { + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + } + ) + end + def to_hash + end + end + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::RiskEvaluation, + ModerationAPI::Internal::AnyHash + ) + end + + # Calculated risk level based on more than 10 behavioral signals. + sig { returns(T.nilable(Float)) } + attr_accessor :risk_level + + # Risk assessment details, if available. + sig do + params(risk_level: T.nilable(Float)).returns(T.attached_class) + end + def self.new( + # Calculated risk level based on more than 10 behavioral signals. + risk_level: nil + ) + end + + sig { override.returns({ risk_level: T.nilable(Float) }) } + def to_hash + end + end + + # Current author status + module Status + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Status + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + ENABLED = + T.let( + :enabled, + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Status::TaggedSymbol + ) + SUSPENDED = + T.let( + :suspended, + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Status::TaggedSymbol + ) + BLOCKED = + T.let( + :blocked, + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Status::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Status::TaggedSymbol + ] + ) + end + def self.values + end + end + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::TrustLevel, + ModerationAPI::Internal::AnyHash + ) + end + + # Author trust level (-1, 0, 1, 2, 3, or 4) + sig { returns(Float) } + attr_accessor :level + + # True if the trust level was set manually by a moderator + sig { returns(T::Boolean) } + attr_accessor :manual + + sig do + params(level: Float, manual: T::Boolean).returns( + T.attached_class + ) + end + def self.new( + # Author trust level (-1, 0, 1, 2, 3, or 4) + level:, + # True if the trust level was set manually by a moderator + manual: + ) + end + + sig { override.returns({ level: Float, manual: T::Boolean }) } + def to_hash + end + end + end + + class Queue < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Queue, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(String) } + attr_accessor :id + + # The queue the item belongs to, if any + sig { params(id: String).returns(T.attached_class) } + def self.new(id:) + end + + sig { override.returns({ id: String }) } + def to_hash + end + end + end + end + end + + class QueueItemCompleted < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted, + ModerationAPI::Internal::AnyHash + ) + end + + # Stable event ID. Use this to dedupe retries. + sig { returns(String) } + attr_accessor :id + + sig { returns(Symbol) } + attr_accessor :api_version + + # ISO 8601 timestamp of when the event was emitted. + sig { returns(Time) } + attr_accessor :created + + sig { returns(ModerationAPI::WebhookEvent::QueueItemCompleted::Data) } + attr_reader :data + + sig do + params( + data: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::OrHash + ).void + end + attr_writer :data + + # The event type. + sig { returns(Symbol) } + attr_accessor :type + + sig do + params( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::OrHash, + api_version: Symbol, + type: Symbol + ).returns(T.attached_class) + end + def self.new( + # Stable event ID. Use this to dedupe retries. + id:, + # ISO 8601 timestamp of when the event was emitted. + created:, + data:, + api_version: :v2, + # The event type. + type: :"queue_item.completed" + ) + end + + sig do + override.returns( + { + id: String, + api_version: Symbol, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemCompleted::Data, + type: Symbol + } + ) + end + def to_hash + end + + class Data < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data, + ModerationAPI::Internal::AnyHash + ) + end + + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object + ) + end + attr_reader :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::OrHash + ).void + end + attr_writer :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::OrHash + ).returns(T.attached_class) + end + def self.new(object:) + end + + sig do + override.returns( + { + object: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object + } + ) + end + def to_hash + end + + class Object < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object, + ModerationAPI::Internal::AnyHash + ) + end + + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item + ) + end + attr_reader :item + + sig do + params( + item: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::OrHash + ).void + end + attr_writer :item + + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author + ) + ) + end + attr_reader :author + + sig do + params( + author: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::OrHash + ).void + end + attr_writer :author + + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Queue + ) + ) + end + attr_reader :queue + + sig do + params( + queue: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Queue::OrHash + ).void + end + attr_writer :queue + + sig do + params( + item: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::OrHash, + author: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::OrHash, + queue: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Queue::OrHash + ).returns(T.attached_class) + end + def self.new(item:, author: nil, queue: nil) + end + + sig do + override.returns( + { + item: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item, + author: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author, + queue: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Queue + } + ) + end + def to_hash + end + + class Item < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item, + ModerationAPI::Internal::AnyHash + ) + end + + # Content ID from your system + sig { returns(String) } + attr_accessor :id + + # External author ID (the customer's identifier, not Moderation API's internal id) + sig { returns(T.nilable(String)) } + attr_accessor :author_id + + # The channel the content was submitted to, identified by your customer-defined + # channel key. + sig { returns(T.nilable(String)) } + attr_accessor :channel_key + + # The original content payload + sig do + returns( + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Text, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Image, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Video, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Audio, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object + ) + ) + end + attr_accessor :content + + # Conversation grouping ID, if any + sig { returns(T.nilable(String)) } + attr_accessor :conversation_id + + # Whether the content was flagged by moderation + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :flagged + + # Moderation labels applied to the content + sig do + returns( + T.nilable( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label + ] + ) + ) + end + attr_accessor :labels + + # Detected ISO language code, if available + sig { returns(T.nilable(String)) } + attr_accessor :language + + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::MetaType::OrSymbol + ) + ) + end + attr_accessor :meta_type + + # Arbitrary key/value metadata. Top-level keys are strings. + sig { returns(T.nilable(T::Hash[Symbol, T.anything])) } + attr_accessor :metadata + + # ISO 8601 timestamp of when the content was submitted + sig { returns(Time) } + attr_accessor :timestamp + + sig do + params( + id: String, + author_id: T.nilable(String), + channel_key: T.nilable(String), + content: + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Text::OrHash, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Image::OrHash, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Video::OrHash, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Audio::OrHash, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::OrHash + ), + conversation_id: T.nilable(String), + flagged: T.nilable(T::Boolean), + labels: + T.nilable( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::OrHash + ] + ), + language: T.nilable(String), + meta_type: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::MetaType::OrSymbol + ), + metadata: T.nilable(T::Hash[Symbol, T.anything]), + timestamp: Time + ).returns(T.attached_class) + end + def self.new( + # Content ID from your system + id:, + # External author ID (the customer's identifier, not Moderation API's internal id) + author_id:, + # The channel the content was submitted to, identified by your customer-defined + # channel key. + channel_key:, + # The original content payload + content:, + # Conversation grouping ID, if any + conversation_id:, + # Whether the content was flagged by moderation + flagged:, + # Moderation labels applied to the content + labels:, + # Detected ISO language code, if available + language:, + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + meta_type:, + # Arbitrary key/value metadata. Top-level keys are strings. + metadata:, + # ISO 8601 timestamp of when the content was submitted + timestamp: + ) + end + + sig do + override.returns( + { + id: String, + author_id: T.nilable(String), + channel_key: T.nilable(String), + content: + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Text, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Image, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Video, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Audio, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object + ), + conversation_id: T.nilable(String), + flagged: T.nilable(T::Boolean), + labels: + T.nilable( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label + ] + ), + language: T.nilable(String), + meta_type: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::MetaType::OrSymbol + ), + metadata: T.nilable(T::Hash[Symbol, T.anything]), + timestamp: Time + } + ) + end + def to_hash + end + + # The original content payload + module Content + extend ModerationAPI::Internal::Type::Union + + Variants = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Text, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Image, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Video, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Audio, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object + ) + end + + class Text < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Text, + ModerationAPI::Internal::AnyHash + ) + end + + # The content text + sig { returns(String) } + attr_accessor :text + + sig { returns(Symbol) } + attr_accessor :type + + # Text + sig do + params(text: String, type: Symbol).returns(T.attached_class) + end + def self.new( + # The content text + text:, + type: :text + ) + end + + sig { override.returns({ text: String, type: Symbol }) } + def to_hash + end + end + + class Image < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Image, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + sig { returns(T.nilable(String)) } + attr_reader :data + + sig { params(data: String).void } + attr_writer :data + + # A public URL of the image content. Either url or data must be provided. + sig { returns(T.nilable(String)) } + attr_reader :url + + sig { params(url: String).void } + attr_writer :url + + # Image + sig do + params(data: String, url: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + data: nil, + # A public URL of the image content. Either url or data must be provided. + url: nil, + type: :image + ) + end + + sig do + override.returns( + { type: Symbol, data: String, url: String } + ) + end + def to_hash + end + end + + class Video < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Video, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # A public URL of the video content + sig { returns(String) } + attr_accessor :url + + # Video + sig do + params(url: String, type: Symbol).returns(T.attached_class) + end + def self.new( + # A public URL of the video content + url:, + type: :video + ) + end + + sig { override.returns({ type: Symbol, url: String }) } + def to_hash + end + end + + class Audio < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Audio, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # The URL of the audio content + sig { returns(String) } + attr_accessor :url + + # Audio + sig do + params(url: String, type: Symbol).returns(T.attached_class) + end + def self.new( + # The URL of the audio content + url:, + type: :audio + ) + end + + sig { override.returns({ type: Symbol, url: String }) } + def to_hash + end + end + + class Object < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object, + ModerationAPI::Internal::AnyHash + ) + end + + # Values in the object. Can be mixed content types. + sig do + returns( + T::Hash[ + Symbol, + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Text, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Image, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Video, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Audio + ) + ] + ) + end + attr_accessor :data + + sig { returns(Symbol) } + attr_accessor :type + + # Object + sig do + params( + data: + T::Hash[ + Symbol, + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Text::OrHash, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Image::OrHash, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Video::OrHash, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Audio::OrHash + ) + ], + type: Symbol + ).returns(T.attached_class) + end + def self.new( + # Values in the object. Can be mixed content types. + data:, + type: :object + ) + end + + sig do + override.returns( + { + data: + T::Hash[ + Symbol, + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Text, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Image, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Video, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Audio + ) + ], + type: Symbol + } + ) + end + def to_hash + end + + # Text + module Data + extend ModerationAPI::Internal::Type::Union + + Variants = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Text, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Image, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Video, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Audio + ) + end + + class Text < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Text, + ModerationAPI::Internal::AnyHash + ) + end + + # The content text + sig { returns(String) } + attr_accessor :text + + sig { returns(Symbol) } + attr_accessor :type + + # Text + sig do + params(text: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # The content text + text:, + type: :text + ) + end + + sig { override.returns({ text: String, type: Symbol }) } + def to_hash + end + end + + class Image < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Image, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + sig { returns(T.nilable(String)) } + attr_reader :data + + sig { params(data: String).void } + attr_writer :data + + # A public URL of the image content. Either url or data must be provided. + sig { returns(T.nilable(String)) } + attr_reader :url + + sig { params(url: String).void } + attr_writer :url + + # Image + sig do + params(data: String, url: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + data: nil, + # A public URL of the image content. Either url or data must be provided. + url: nil, + type: :image + ) + end + + sig do + override.returns( + { type: Symbol, data: String, url: String } + ) + end + def to_hash + end + end + + class Video < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Video, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # A public URL of the video content + sig { returns(String) } + attr_accessor :url + + # Video + sig do + params(url: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # A public URL of the video content + url:, + type: :video + ) + end + + sig { override.returns({ type: Symbol, url: String }) } + def to_hash + end + end + + class Audio < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Audio, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # The URL of the audio content + sig { returns(String) } + attr_accessor :url + + # Audio + sig do + params(url: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # The URL of the audio content + url:, + type: :audio + ) + end + + sig { override.returns({ type: Symbol, url: String }) } + def to_hash + end + end + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Variants + ] + ) + end + def self.variants + end + end + end + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Variants + ] + ) + end + def self.variants + end + end + + class Label < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label, + ModerationAPI::Internal::AnyHash + ) + end + + # The label name + sig { returns(String) } + attr_accessor :label + + # Confidence score between 0 and 1 + sig { returns(Float) } + attr_accessor :score + + # Whether this label crossed its flagging threshold + sig { returns(T.nilable(T::Boolean)) } + attr_reader :flagged + + sig { params(flagged: T::Boolean).void } + attr_writer :flagged + + # True if the label was applied manually by a moderator + sig { returns(T.nilable(T::Boolean)) } + attr_reader :manual + + sig { params(manual: T::Boolean).void } + attr_writer :manual + + sig do + returns( + T.nilable( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match + ] + ) + ) + end + attr_reader :matches + + sig do + params( + matches: + T::Array[ + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::OrHash + ] + ).void + end + attr_writer :matches + + sig do + params( + label: String, + score: Float, + flagged: T::Boolean, + manual: T::Boolean, + matches: + T::Array[ + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # The label name + label:, + # Confidence score between 0 and 1 + score:, + # Whether this label crossed its flagging threshold + flagged: nil, + # True if the label was applied manually by a moderator + manual: nil, + matches: nil + ) + end + + sig do + override.returns( + { + label: String, + score: Float, + flagged: T::Boolean, + manual: T::Boolean, + matches: + T::Array[ + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match + ] + } + ) + end + def to_hash + end + + class Match < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match, + ModerationAPI::Internal::AnyHash + ) + end + + # The matched substring + sig { returns(String) } + attr_accessor :match + + # Match confidence between 0 and 1 + sig { returns(Float) } + attr_accessor :probability + + # [start, end] character offsets in the source text + sig { returns(T::Array[T.anything]) } + attr_accessor :span + + sig { returns(T.nilable(String)) } + attr_reader :entity_type + + sig { params(entity_type: String).void } + attr_writer :entity_type + + sig { returns(T.nilable(String)) } + attr_accessor :mask + + sig { returns(T.nilable(T::Array[String])) } + attr_reader :reasons + + sig { params(reasons: T::Array[String]).void } + attr_writer :reasons + + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals + ) + ) + end + attr_reader :signals + + sig do + params( + signals: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals::OrHash + ).void + end + attr_writer :signals + + sig do + params( + match: String, + probability: Float, + span: T::Array[T.anything], + entity_type: String, + mask: T.nilable(String), + reasons: T::Array[String], + signals: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals::OrHash + ).returns(T.attached_class) + end + def self.new( + # The matched substring + match:, + # Match confidence between 0 and 1 + probability:, + # [start, end] character offsets in the source text + span:, + entity_type: nil, + mask: nil, + reasons: nil, + signals: nil + ) + end + + sig do + override.returns( + { + match: String, + probability: Float, + span: T::Array[T.anything], + entity_type: String, + mask: T.nilable(String), + reasons: T::Array[String], + signals: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals + } + ) + end + def to_hash + end + + class Signals < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :bot_protection + + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals::BrandImpersonation + ) + ) + end + attr_reader :brand_impersonation + + sig do + params( + brand_impersonation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals::BrandImpersonation::OrHash + ) + ).void + end + attr_writer :brand_impersonation + + sig { returns(T.nilable(Float)) } + attr_accessor :domain_age_days + + sig { returns(T.nilable(String)) } + attr_accessor :final_url + + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :has_email_setup + + sig { returns(T::Boolean) } + attr_accessor :has_suspicious_characters + + sig { returns(T::Boolean) } + attr_accessor :is_link_shortener + + sig { returns(T::Boolean) } + attr_accessor :is_reported + + sig { returns(T.nilable(Float)) } + attr_accessor :redirect_count + + sig do + params( + bot_protection: T.nilable(T::Boolean), + brand_impersonation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals::BrandImpersonation::OrHash + ), + domain_age_days: T.nilable(Float), + final_url: T.nilable(String), + has_email_setup: T.nilable(T::Boolean), + has_suspicious_characters: T::Boolean, + is_link_shortener: T::Boolean, + is_reported: T::Boolean, + redirect_count: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + bot_protection:, + brand_impersonation:, + domain_age_days:, + final_url:, + has_email_setup:, + has_suspicious_characters:, + is_link_shortener:, + is_reported:, + redirect_count: + ) + end + + sig do + override.returns( + { + bot_protection: T.nilable(T::Boolean), + brand_impersonation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals::BrandImpersonation + ), + domain_age_days: T.nilable(Float), + final_url: T.nilable(String), + has_email_setup: T.nilable(T::Boolean), + has_suspicious_characters: T::Boolean, + is_link_shortener: T::Boolean, + is_reported: T::Boolean, + redirect_count: T.nilable(Float) + } + ) + end + def to_hash + end + + class BrandImpersonation < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals::BrandImpersonation, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(String) } + attr_accessor :brand + + sig { returns(String) } + attr_accessor :method_ + + sig do + params(brand: String, method_: String).returns( + T.attached_class + ) + end + def self.new(brand:, method_:) + end + + sig do + override.returns({ brand: String, method_: String }) + end + def to_hash + end + end + end + end + end + + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + module MetaType + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::MetaType + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + PROFILE = + T.let( + :profile, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::MetaType::TaggedSymbol + ) + MESSAGE = + T.let( + :message, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::MetaType::TaggedSymbol + ) + POST = + T.let( + :post, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::MetaType::TaggedSymbol + ) + COMMENT = + T.let( + :comment, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::MetaType::TaggedSymbol + ) + EVENT = + T.let( + :event, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::MetaType::TaggedSymbol + ) + PRODUCT = + T.let( + :product, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::MetaType::TaggedSymbol + ) + REVIEW = + T.let( + :review, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::MetaType::TaggedSymbol + ) + OTHER = + T.let( + :other, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::MetaType::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::MetaType::TaggedSymbol + ] + ) + end + def self.values + end + end + end + + class Author < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author, + ModerationAPI::Internal::AnyHash + ) + end + + # Author ID in Moderation API + sig { returns(String) } + attr_accessor :id + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Block + ) + ) + end + attr_reader :block + + sig do + params( + block: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Block::OrHash + ) + ).void + end + attr_writer :block + + # Timestamp when author first appeared + sig { returns(Float) } + attr_accessor :first_seen + + # Timestamp of last activity + sig { returns(Float) } + attr_accessor :last_seen + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metadata + ) + end + attr_reader :metadata + + sig do + params( + metadata: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metadata::OrHash + ).void + end + attr_writer :metadata + + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metrics + ) + end + attr_reader :metrics + + sig do + params( + metrics: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metrics::OrHash + ).void + end + attr_writer :metrics + + # Risk assessment details, if available. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::RiskEvaluation + ) + ) + end + attr_reader :risk_evaluation + + sig do + params( + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::RiskEvaluation::OrHash + ) + ).void + end + attr_writer :risk_evaluation + + # Current author status + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Status::OrSymbol + ) + end + attr_accessor :status + + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::TrustLevel + ) + end + attr_reader :trust_level + + sig do + params( + trust_level: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::TrustLevel::OrHash + ).void + end + attr_writer :trust_level + + # The author's company or organization + sig { returns(T.nilable(String)) } + attr_accessor :company + + # Author email address + sig { returns(T.nilable(String)) } + attr_accessor :email + + # The author's ID from your system + sig { returns(T.nilable(String)) } + attr_accessor :external_id + + # URL of the author's external profile + sig { returns(T.nilable(String)) } + attr_accessor :external_link + + # Timestamp of last incident + sig { returns(T.nilable(Float)) } + attr_accessor :last_incident + + # Author name or identifier + sig { returns(T.nilable(String)) } + attr_accessor :name + + # URL of the author's profile picture + sig { returns(T.nilable(String)) } + attr_accessor :profile_picture + + sig do + params( + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Block::OrHash + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metadata::OrHash, + metrics: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metrics::OrHash, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::RiskEvaluation::OrHash + ), + status: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::TrustLevel::OrHash, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + ).returns(T.attached_class) + end + def self.new( + # Author ID in Moderation API + id:, + # Block or suspension details, if applicable. Null if the author is enabled. + block:, + # Timestamp when author first appeared + first_seen:, + # Timestamp of last activity + last_seen:, + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + metadata:, + metrics:, + # Risk assessment details, if available. + risk_evaluation:, + # Current author status + status:, + trust_level:, + # The author's company or organization + company: nil, + # Author email address + email: nil, + # The author's ID from your system + external_id: nil, + # URL of the author's external profile + external_link: nil, + # Timestamp of last incident + last_incident: nil, + # Author name or identifier + name: nil, + # URL of the author's profile picture + profile_picture: nil + ) + end + + sig do + override.returns( + { + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Block + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metadata, + metrics: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metrics, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::RiskEvaluation + ), + status: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::TrustLevel, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + } + ) + end + def to_hash + end + + class Block < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Block, + ModerationAPI::Internal::AnyHash + ) + end + + # The moderators reason why the author was blocked or suspended. + sig { returns(T.nilable(String)) } + attr_accessor :reason + + # The timestamp until which they are blocked if the author is suspended. + sig { returns(T.nilable(Float)) } + attr_accessor :until_ + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + params( + reason: T.nilable(String), + until_: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # The moderators reason why the author was blocked or suspended. + reason: nil, + # The timestamp until which they are blocked if the author is suspended. + until_: nil + ) + end + + sig do + override.returns( + { reason: T.nilable(String), until_: T.nilable(Float) } + ) + end + def to_hash + end + end + + class Metadata < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metadata, + ModerationAPI::Internal::AnyHash + ) + end + + # Whether the author's email is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :email_verified + + # Whether the author's identity is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :identity_verified + + # Whether the author is a paying customer + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :is_paying_customer + + # Whether the author's phone number is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :phone_verified + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + params( + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + ).returns(T.attached_class) + end + def self.new( + # Whether the author's email is verified + email_verified: nil, + # Whether the author's identity is verified + identity_verified: nil, + # Whether the author is a paying customer + is_paying_customer: nil, + # Whether the author's phone number is verified + phone_verified: nil + ) + end + + sig do + override.returns( + { + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + } + ) + end + def to_hash + end + end + + class Metrics < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metrics, + ModerationAPI::Internal::AnyHash + ) + end + + # Number of flagged content pieces + sig { returns(Float) } + attr_accessor :flagged_content + + # Total pieces of content + sig { returns(Float) } + attr_accessor :total_content + + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + sig { returns(T.nilable(Float)) } + attr_accessor :average_sentiment + + sig do + params( + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # Number of flagged content pieces + flagged_content:, + # Total pieces of content + total_content:, + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + average_sentiment: nil + ) + end + + sig do + override.returns( + { + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + } + ) + end + def to_hash + end + end + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::RiskEvaluation, + ModerationAPI::Internal::AnyHash + ) + end + + # Calculated risk level based on more than 10 behavioral signals. + sig { returns(T.nilable(Float)) } + attr_accessor :risk_level + + # Risk assessment details, if available. + sig do + params(risk_level: T.nilable(Float)).returns(T.attached_class) + end + def self.new( + # Calculated risk level based on more than 10 behavioral signals. + risk_level: nil + ) + end + + sig { override.returns({ risk_level: T.nilable(Float) }) } + def to_hash + end + end + + # Current author status + module Status + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Status + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + ENABLED = + T.let( + :enabled, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Status::TaggedSymbol + ) + SUSPENDED = + T.let( + :suspended, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Status::TaggedSymbol + ) + BLOCKED = + T.let( + :blocked, + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Status::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Status::TaggedSymbol + ] + ) + end + def self.values + end + end + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::TrustLevel, + ModerationAPI::Internal::AnyHash + ) + end + + # Author trust level (-1, 0, 1, 2, 3, or 4) + sig { returns(Float) } + attr_accessor :level + + # True if the trust level was set manually by a moderator + sig { returns(T::Boolean) } + attr_accessor :manual + + sig do + params(level: Float, manual: T::Boolean).returns( + T.attached_class + ) + end + def self.new( + # Author trust level (-1, 0, 1, 2, 3, or 4) + level:, + # True if the trust level was set manually by a moderator + manual: + ) + end + + sig { override.returns({ level: Float, manual: T::Boolean }) } + def to_hash + end + end + end + + class Queue < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Queue, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(String) } + attr_accessor :id + + sig { params(id: String).returns(T.attached_class) } + def self.new(id:) + end + + sig { override.returns({ id: String }) } + def to_hash + end + end + end + end + end + + class QueueItemAction < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction, + ModerationAPI::Internal::AnyHash + ) + end + + # Stable event ID. Use this to dedupe retries. + sig { returns(String) } + attr_accessor :id + + sig { returns(Symbol) } + attr_accessor :api_version + + # ISO 8601 timestamp of when the event was emitted. + sig { returns(Time) } + attr_accessor :created + + sig { returns(ModerationAPI::WebhookEvent::QueueItemAction::Data) } + attr_reader :data + + sig do + params( + data: ModerationAPI::WebhookEvent::QueueItemAction::Data::OrHash + ).void + end + attr_writer :data + + # The event type. + sig { returns(Symbol) } + attr_accessor :type + + sig do + params( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemAction::Data::OrHash, + api_version: Symbol, + type: Symbol + ).returns(T.attached_class) + end + def self.new( + # Stable event ID. Use this to dedupe retries. + id:, + # ISO 8601 timestamp of when the event was emitted. + created:, + data:, + api_version: :v2, + # The event type. + type: :"queue_item.action" + ) + end + + sig do + override.returns( + { + id: String, + api_version: Symbol, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemAction::Data, + type: Symbol + } + ) + end + def to_hash + end + + class Data < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data, + ModerationAPI::Internal::AnyHash + ) + end + + sig do + returns(ModerationAPI::WebhookEvent::QueueItemAction::Data::Object) + end + attr_reader :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::OrHash + ).void + end + attr_writer :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::OrHash + ).returns(T.attached_class) + end + def self.new(object:) + end + + sig do + override.returns( + { + object: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object + } + ) + end + def to_hash + end + + class Object < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object, + ModerationAPI::Internal::AnyHash + ) + end + + # Moderation action ID + sig { returns(String) } + attr_accessor :id + + # ISO 8601 timestamp of when the action was performed + sig { returns(Time) } + attr_accessor :created_at + + # Customer-defined key identifying this action + sig { returns(T.nilable(String)) } + attr_accessor :key + + # Display name of the action + sig { returns(T.nilable(String)) } + attr_accessor :name + + # The value passed to the action when it ran + sig { returns(T.nilable(String)) } + attr_accessor :value + + # The author the action was performed on, if any + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author + ) + ) + end + attr_reader :author + + sig do + params( + author: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::OrHash + ).void + end + attr_writer :author + + # The content item the action was performed on, if any + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item + ) + ) + end + attr_reader :item + + sig do + params( + item: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::OrHash + ).void + end + attr_writer :item + + # The queue the item belongs to, if any + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Queue + ) + ) + end + attr_reader :queue + + sig do + params( + queue: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Queue::OrHash + ).void + end + attr_writer :queue + + sig do + params( + id: String, + created_at: Time, + key: T.nilable(String), + name: T.nilable(String), + value: T.nilable(String), + author: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::OrHash, + item: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::OrHash, + queue: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Queue::OrHash + ).returns(T.attached_class) + end + def self.new( + # Moderation action ID + id:, + # ISO 8601 timestamp of when the action was performed + created_at:, + # Customer-defined key identifying this action + key:, + # Display name of the action + name:, + # The value passed to the action when it ran + value:, + # The author the action was performed on, if any + author: nil, + # The content item the action was performed on, if any + item: nil, + # The queue the item belongs to, if any + queue: nil + ) + end + + sig do + override.returns( + { + id: String, + created_at: Time, + key: T.nilable(String), + name: T.nilable(String), + value: T.nilable(String), + author: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author, + item: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item, + queue: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Queue + } + ) + end + def to_hash + end + + class Author < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author, + ModerationAPI::Internal::AnyHash + ) + end + + # Author ID in Moderation API + sig { returns(String) } + attr_accessor :id + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Block + ) + ) + end + attr_reader :block + + sig do + params( + block: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Block::OrHash + ) + ).void + end + attr_writer :block + + # Timestamp when author first appeared + sig { returns(Float) } + attr_accessor :first_seen + + # Timestamp of last activity + sig { returns(Float) } + attr_accessor :last_seen + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metadata + ) + end + attr_reader :metadata + + sig do + params( + metadata: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metadata::OrHash + ).void + end + attr_writer :metadata + + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metrics + ) + end + attr_reader :metrics + + sig do + params( + metrics: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metrics::OrHash + ).void + end + attr_writer :metrics + + # Risk assessment details, if available. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::RiskEvaluation + ) + ) + end + attr_reader :risk_evaluation + + sig do + params( + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::RiskEvaluation::OrHash + ) + ).void + end + attr_writer :risk_evaluation + + # Current author status + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Status::OrSymbol + ) + end + attr_accessor :status + + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::TrustLevel + ) + end + attr_reader :trust_level + + sig do + params( + trust_level: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::TrustLevel::OrHash + ).void + end + attr_writer :trust_level + + # The author's company or organization + sig { returns(T.nilable(String)) } + attr_accessor :company + + # Author email address + sig { returns(T.nilable(String)) } + attr_accessor :email + + # The author's ID from your system + sig { returns(T.nilable(String)) } + attr_accessor :external_id + + # URL of the author's external profile + sig { returns(T.nilable(String)) } + attr_accessor :external_link + + # Timestamp of last incident + sig { returns(T.nilable(Float)) } + attr_accessor :last_incident + + # Author name or identifier + sig { returns(T.nilable(String)) } + attr_accessor :name + + # URL of the author's profile picture + sig { returns(T.nilable(String)) } + attr_accessor :profile_picture + + # The author the action was performed on, if any + sig do + params( + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Block::OrHash + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metadata::OrHash, + metrics: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metrics::OrHash, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::RiskEvaluation::OrHash + ), + status: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::TrustLevel::OrHash, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + ).returns(T.attached_class) + end + def self.new( + # Author ID in Moderation API + id:, + # Block or suspension details, if applicable. Null if the author is enabled. + block:, + # Timestamp when author first appeared + first_seen:, + # Timestamp of last activity + last_seen:, + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + metadata:, + metrics:, + # Risk assessment details, if available. + risk_evaluation:, + # Current author status + status:, + trust_level:, + # The author's company or organization + company: nil, + # Author email address + email: nil, + # The author's ID from your system + external_id: nil, + # URL of the author's external profile + external_link: nil, + # Timestamp of last incident + last_incident: nil, + # Author name or identifier + name: nil, + # URL of the author's profile picture + profile_picture: nil + ) + end + + sig do + override.returns( + { + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Block + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metadata, + metrics: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metrics, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::RiskEvaluation + ), + status: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::TrustLevel, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + } + ) + end + def to_hash + end + + class Block < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Block, + ModerationAPI::Internal::AnyHash + ) + end + + # The moderators reason why the author was blocked or suspended. + sig { returns(T.nilable(String)) } + attr_accessor :reason + + # The timestamp until which they are blocked if the author is suspended. + sig { returns(T.nilable(Float)) } + attr_accessor :until_ + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + params( + reason: T.nilable(String), + until_: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # The moderators reason why the author was blocked or suspended. + reason: nil, + # The timestamp until which they are blocked if the author is suspended. + until_: nil + ) + end + + sig do + override.returns( + { reason: T.nilable(String), until_: T.nilable(Float) } + ) + end + def to_hash + end + end + + class Metadata < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metadata, + ModerationAPI::Internal::AnyHash + ) + end + + # Whether the author's email is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :email_verified + + # Whether the author's identity is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :identity_verified + + # Whether the author is a paying customer + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :is_paying_customer + + # Whether the author's phone number is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :phone_verified + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + params( + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + ).returns(T.attached_class) + end + def self.new( + # Whether the author's email is verified + email_verified: nil, + # Whether the author's identity is verified + identity_verified: nil, + # Whether the author is a paying customer + is_paying_customer: nil, + # Whether the author's phone number is verified + phone_verified: nil + ) + end + + sig do + override.returns( + { + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + } + ) + end + def to_hash + end + end + + class Metrics < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metrics, + ModerationAPI::Internal::AnyHash + ) + end + + # Number of flagged content pieces + sig { returns(Float) } + attr_accessor :flagged_content + + # Total pieces of content + sig { returns(Float) } + attr_accessor :total_content + + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + sig { returns(T.nilable(Float)) } + attr_accessor :average_sentiment + + sig do + params( + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # Number of flagged content pieces + flagged_content:, + # Total pieces of content + total_content:, + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + average_sentiment: nil + ) + end + + sig do + override.returns( + { + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + } + ) + end + def to_hash + end + end + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::RiskEvaluation, + ModerationAPI::Internal::AnyHash + ) + end + + # Calculated risk level based on more than 10 behavioral signals. + sig { returns(T.nilable(Float)) } + attr_accessor :risk_level + + # Risk assessment details, if available. + sig do + params(risk_level: T.nilable(Float)).returns(T.attached_class) + end + def self.new( + # Calculated risk level based on more than 10 behavioral signals. + risk_level: nil + ) + end + + sig { override.returns({ risk_level: T.nilable(Float) }) } + def to_hash + end + end + + # Current author status + module Status + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Status + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + ENABLED = + T.let( + :enabled, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Status::TaggedSymbol + ) + SUSPENDED = + T.let( + :suspended, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Status::TaggedSymbol + ) + BLOCKED = + T.let( + :blocked, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Status::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Status::TaggedSymbol + ] + ) + end + def self.values + end + end + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::TrustLevel, + ModerationAPI::Internal::AnyHash + ) + end + + # Author trust level (-1, 0, 1, 2, 3, or 4) + sig { returns(Float) } + attr_accessor :level + + # True if the trust level was set manually by a moderator + sig { returns(T::Boolean) } + attr_accessor :manual + + sig do + params(level: Float, manual: T::Boolean).returns( + T.attached_class + ) + end + def self.new( + # Author trust level (-1, 0, 1, 2, 3, or 4) + level:, + # True if the trust level was set manually by a moderator + manual: + ) + end + + sig { override.returns({ level: Float, manual: T::Boolean }) } + def to_hash + end + end + end + + class Item < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item, + ModerationAPI::Internal::AnyHash + ) + end + + # Content ID from your system + sig { returns(String) } + attr_accessor :id + + # External author ID (the customer's identifier, not Moderation API's internal id) + sig { returns(T.nilable(String)) } + attr_accessor :author_id + + # The channel the content was submitted to, identified by your customer-defined + # channel key. + sig { returns(T.nilable(String)) } + attr_accessor :channel_key + + # The original content payload + sig do + returns( + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Text, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Image, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Video, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Audio, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object + ) + ) + end + attr_accessor :content + + # Conversation grouping ID, if any + sig { returns(T.nilable(String)) } + attr_accessor :conversation_id + + # Whether the content was flagged by moderation + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :flagged + + # Moderation labels applied to the content + sig do + returns( + T.nilable( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label + ] + ) + ) + end + attr_accessor :labels + + # Detected ISO language code, if available + sig { returns(T.nilable(String)) } + attr_accessor :language + + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::MetaType::OrSymbol + ) + ) + end + attr_accessor :meta_type + + # Arbitrary key/value metadata. Top-level keys are strings. + sig { returns(T.nilable(T::Hash[Symbol, T.anything])) } + attr_accessor :metadata + + # ISO 8601 timestamp of when the content was submitted + sig { returns(Time) } + attr_accessor :timestamp + + # The content item the action was performed on, if any + sig do + params( + id: String, + author_id: T.nilable(String), + channel_key: T.nilable(String), + content: + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Text::OrHash, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Image::OrHash, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Video::OrHash, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Audio::OrHash, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::OrHash + ), + conversation_id: T.nilable(String), + flagged: T.nilable(T::Boolean), + labels: + T.nilable( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::OrHash + ] + ), + language: T.nilable(String), + meta_type: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::MetaType::OrSymbol + ), + metadata: T.nilable(T::Hash[Symbol, T.anything]), + timestamp: Time + ).returns(T.attached_class) + end + def self.new( + # Content ID from your system + id:, + # External author ID (the customer's identifier, not Moderation API's internal id) + author_id:, + # The channel the content was submitted to, identified by your customer-defined + # channel key. + channel_key:, + # The original content payload + content:, + # Conversation grouping ID, if any + conversation_id:, + # Whether the content was flagged by moderation + flagged:, + # Moderation labels applied to the content + labels:, + # Detected ISO language code, if available + language:, + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + meta_type:, + # Arbitrary key/value metadata. Top-level keys are strings. + metadata:, + # ISO 8601 timestamp of when the content was submitted + timestamp: + ) + end + + sig do + override.returns( + { + id: String, + author_id: T.nilable(String), + channel_key: T.nilable(String), + content: + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Text, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Image, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Video, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Audio, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object + ), + conversation_id: T.nilable(String), + flagged: T.nilable(T::Boolean), + labels: + T.nilable( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label + ] + ), + language: T.nilable(String), + meta_type: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::MetaType::OrSymbol + ), + metadata: T.nilable(T::Hash[Symbol, T.anything]), + timestamp: Time + } + ) + end + def to_hash + end + + # The original content payload + module Content + extend ModerationAPI::Internal::Type::Union + + Variants = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Text, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Image, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Video, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Audio, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object + ) + end + + class Text < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Text, + ModerationAPI::Internal::AnyHash + ) + end + + # The content text + sig { returns(String) } + attr_accessor :text + + sig { returns(Symbol) } + attr_accessor :type + + # Text + sig do + params(text: String, type: Symbol).returns(T.attached_class) + end + def self.new( + # The content text + text:, + type: :text + ) + end + + sig { override.returns({ text: String, type: Symbol }) } + def to_hash + end + end + + class Image < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Image, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + sig { returns(T.nilable(String)) } + attr_reader :data + + sig { params(data: String).void } + attr_writer :data + + # A public URL of the image content. Either url or data must be provided. + sig { returns(T.nilable(String)) } + attr_reader :url + + sig { params(url: String).void } + attr_writer :url + + # Image + sig do + params(data: String, url: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + data: nil, + # A public URL of the image content. Either url or data must be provided. + url: nil, + type: :image + ) + end + + sig do + override.returns( + { type: Symbol, data: String, url: String } + ) + end + def to_hash + end + end + + class Video < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Video, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # A public URL of the video content + sig { returns(String) } + attr_accessor :url + + # Video + sig do + params(url: String, type: Symbol).returns(T.attached_class) + end + def self.new( + # A public URL of the video content + url:, + type: :video + ) + end + + sig { override.returns({ type: Symbol, url: String }) } + def to_hash + end + end + + class Audio < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Audio, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # The URL of the audio content + sig { returns(String) } + attr_accessor :url + + # Audio + sig do + params(url: String, type: Symbol).returns(T.attached_class) + end + def self.new( + # The URL of the audio content + url:, + type: :audio + ) + end + + sig { override.returns({ type: Symbol, url: String }) } + def to_hash + end + end + + class Object < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object, + ModerationAPI::Internal::AnyHash + ) + end + + # Values in the object. Can be mixed content types. + sig do + returns( + T::Hash[ + Symbol, + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Text, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Image, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Video, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Audio + ) + ] + ) + end + attr_accessor :data + + sig { returns(Symbol) } + attr_accessor :type + + # Object + sig do + params( + data: + T::Hash[ + Symbol, + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Text::OrHash, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Image::OrHash, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Video::OrHash, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Audio::OrHash + ) + ], + type: Symbol + ).returns(T.attached_class) + end + def self.new( + # Values in the object. Can be mixed content types. + data:, + type: :object + ) + end + + sig do + override.returns( + { + data: + T::Hash[ + Symbol, + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Text, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Image, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Video, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Audio + ) + ], + type: Symbol + } + ) + end + def to_hash + end + + # Text + module Data + extend ModerationAPI::Internal::Type::Union + + Variants = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Text, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Image, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Video, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Audio + ) + end + + class Text < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Text, + ModerationAPI::Internal::AnyHash + ) + end + + # The content text + sig { returns(String) } + attr_accessor :text + + sig { returns(Symbol) } + attr_accessor :type + + # Text + sig do + params(text: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # The content text + text:, + type: :text + ) + end + + sig { override.returns({ text: String, type: Symbol }) } + def to_hash + end + end + + class Image < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Image, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + sig { returns(T.nilable(String)) } + attr_reader :data + + sig { params(data: String).void } + attr_writer :data + + # A public URL of the image content. Either url or data must be provided. + sig { returns(T.nilable(String)) } + attr_reader :url + + sig { params(url: String).void } + attr_writer :url + + # Image + sig do + params(data: String, url: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + data: nil, + # A public URL of the image content. Either url or data must be provided. + url: nil, + type: :image + ) + end + + sig do + override.returns( + { type: Symbol, data: String, url: String } + ) + end + def to_hash + end + end + + class Video < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Video, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # A public URL of the video content + sig { returns(String) } + attr_accessor :url + + # Video + sig do + params(url: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # A public URL of the video content + url:, + type: :video + ) + end + + sig { override.returns({ type: Symbol, url: String }) } + def to_hash + end + end + + class Audio < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Audio, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # The URL of the audio content + sig { returns(String) } + attr_accessor :url + + # Audio + sig do + params(url: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # The URL of the audio content + url:, + type: :audio + ) + end + + sig { override.returns({ type: Symbol, url: String }) } + def to_hash + end + end + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Variants + ] + ) + end + def self.variants + end + end + end + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Variants + ] + ) + end + def self.variants + end + end + + class Label < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label, + ModerationAPI::Internal::AnyHash + ) + end + + # The label name + sig { returns(String) } + attr_accessor :label + + # Confidence score between 0 and 1 + sig { returns(Float) } + attr_accessor :score + + # Whether this label crossed its flagging threshold + sig { returns(T.nilable(T::Boolean)) } + attr_reader :flagged + + sig { params(flagged: T::Boolean).void } + attr_writer :flagged + + # True if the label was applied manually by a moderator + sig { returns(T.nilable(T::Boolean)) } + attr_reader :manual + + sig { params(manual: T::Boolean).void } + attr_writer :manual + + sig do + returns( + T.nilable( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match + ] + ) + ) + end + attr_reader :matches + + sig do + params( + matches: + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::OrHash + ] + ).void + end + attr_writer :matches + + sig do + params( + label: String, + score: Float, + flagged: T::Boolean, + manual: T::Boolean, + matches: + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # The label name + label:, + # Confidence score between 0 and 1 + score:, + # Whether this label crossed its flagging threshold + flagged: nil, + # True if the label was applied manually by a moderator + manual: nil, + matches: nil + ) + end + + sig do + override.returns( + { + label: String, + score: Float, + flagged: T::Boolean, + manual: T::Boolean, + matches: + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match + ] + } + ) + end + def to_hash + end + + class Match < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match, + ModerationAPI::Internal::AnyHash + ) + end + + # The matched substring + sig { returns(String) } + attr_accessor :match + + # Match confidence between 0 and 1 + sig { returns(Float) } + attr_accessor :probability + + # [start, end] character offsets in the source text + sig { returns(T::Array[T.anything]) } + attr_accessor :span + + sig { returns(T.nilable(String)) } + attr_reader :entity_type + + sig { params(entity_type: String).void } + attr_writer :entity_type + + sig { returns(T.nilable(String)) } + attr_accessor :mask + + sig { returns(T.nilable(T::Array[String])) } + attr_reader :reasons + + sig { params(reasons: T::Array[String]).void } + attr_writer :reasons + + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals + ) + ) + end + attr_reader :signals + + sig do + params( + signals: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals::OrHash + ).void + end + attr_writer :signals + + sig do + params( + match: String, + probability: Float, + span: T::Array[T.anything], + entity_type: String, + mask: T.nilable(String), + reasons: T::Array[String], + signals: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals::OrHash + ).returns(T.attached_class) + end + def self.new( + # The matched substring + match:, + # Match confidence between 0 and 1 + probability:, + # [start, end] character offsets in the source text + span:, + entity_type: nil, + mask: nil, + reasons: nil, + signals: nil + ) + end + + sig do + override.returns( + { + match: String, + probability: Float, + span: T::Array[T.anything], + entity_type: String, + mask: T.nilable(String), + reasons: T::Array[String], + signals: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals + } + ) + end + def to_hash + end + + class Signals < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :bot_protection + + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals::BrandImpersonation + ) + ) + end + attr_reader :brand_impersonation + + sig do + params( + brand_impersonation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals::BrandImpersonation::OrHash + ) + ).void + end + attr_writer :brand_impersonation + + sig { returns(T.nilable(Float)) } + attr_accessor :domain_age_days + + sig { returns(T.nilable(String)) } + attr_accessor :final_url + + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :has_email_setup + + sig { returns(T::Boolean) } + attr_accessor :has_suspicious_characters + + sig { returns(T::Boolean) } + attr_accessor :is_link_shortener + + sig { returns(T::Boolean) } + attr_accessor :is_reported + + sig { returns(T.nilable(Float)) } + attr_accessor :redirect_count + + sig do + params( + bot_protection: T.nilable(T::Boolean), + brand_impersonation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals::BrandImpersonation::OrHash + ), + domain_age_days: T.nilable(Float), + final_url: T.nilable(String), + has_email_setup: T.nilable(T::Boolean), + has_suspicious_characters: T::Boolean, + is_link_shortener: T::Boolean, + is_reported: T::Boolean, + redirect_count: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + bot_protection:, + brand_impersonation:, + domain_age_days:, + final_url:, + has_email_setup:, + has_suspicious_characters:, + is_link_shortener:, + is_reported:, + redirect_count: + ) + end + + sig do + override.returns( + { + bot_protection: T.nilable(T::Boolean), + brand_impersonation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals::BrandImpersonation + ), + domain_age_days: T.nilable(Float), + final_url: T.nilable(String), + has_email_setup: T.nilable(T::Boolean), + has_suspicious_characters: T::Boolean, + is_link_shortener: T::Boolean, + is_reported: T::Boolean, + redirect_count: T.nilable(Float) + } + ) + end + def to_hash + end + + class BrandImpersonation < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals::BrandImpersonation, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(String) } + attr_accessor :brand + + sig { returns(String) } + attr_accessor :method_ + + sig do + params(brand: String, method_: String).returns( + T.attached_class + ) + end + def self.new(brand:, method_:) + end + + sig do + override.returns({ brand: String, method_: String }) + end + def to_hash + end + end + end + end + end + + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + module MetaType + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::MetaType + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + PROFILE = + T.let( + :profile, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::MetaType::TaggedSymbol + ) + MESSAGE = + T.let( + :message, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::MetaType::TaggedSymbol + ) + POST = + T.let( + :post, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::MetaType::TaggedSymbol + ) + COMMENT = + T.let( + :comment, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::MetaType::TaggedSymbol + ) + EVENT = + T.let( + :event, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::MetaType::TaggedSymbol + ) + PRODUCT = + T.let( + :product, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::MetaType::TaggedSymbol + ) + REVIEW = + T.let( + :review, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::MetaType::TaggedSymbol + ) + OTHER = + T.let( + :other, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::MetaType::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::MetaType::TaggedSymbol + ] + ) + end + def self.values + end + end + end + + class Queue < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Queue, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(String) } + attr_accessor :id + + # The queue the item belongs to, if any + sig { params(id: String).returns(T.attached_class) } + def self.new(id:) + end + + sig { override.returns({ id: String }) } + def to_hash + end + end + end + end + end + + class QueueItemRejected < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected, + ModerationAPI::Internal::AnyHash + ) + end + + # Stable event ID. Use this to dedupe retries. + sig { returns(String) } + attr_accessor :id + + sig { returns(Symbol) } + attr_accessor :api_version + + # ISO 8601 timestamp of when the event was emitted. + sig { returns(Time) } + attr_accessor :created + + sig { returns(ModerationAPI::WebhookEvent::QueueItemRejected::Data) } + attr_reader :data + + sig do + params( + data: ModerationAPI::WebhookEvent::QueueItemRejected::Data::OrHash + ).void + end + attr_writer :data + + # The event type. + sig { returns(Symbol) } + attr_accessor :type + + sig do + params( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemRejected::Data::OrHash, + api_version: Symbol, + type: Symbol + ).returns(T.attached_class) + end + def self.new( + # Stable event ID. Use this to dedupe retries. + id:, + # ISO 8601 timestamp of when the event was emitted. + created:, + data:, + api_version: :v2, + # The event type. + type: :"queue_item.rejected" + ) + end + + sig do + override.returns( + { + id: String, + api_version: Symbol, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemRejected::Data, + type: Symbol + } + ) + end + def to_hash + end + + class Data < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data, + ModerationAPI::Internal::AnyHash + ) + end + + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object + ) + end + attr_reader :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::OrHash + ).void + end + attr_writer :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::OrHash + ).returns(T.attached_class) + end + def self.new(object:) + end + + sig do + override.returns( + { + object: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object + } + ) + end + def to_hash + end + + class Object < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object, + ModerationAPI::Internal::AnyHash + ) + end + + # Moderation action ID + sig { returns(String) } + attr_accessor :id + + # ISO 8601 timestamp of when the action was performed + sig { returns(Time) } + attr_accessor :created_at + + # Customer-defined key identifying this action + sig { returns(T.nilable(String)) } + attr_accessor :key + + # Display name of the action + sig { returns(T.nilable(String)) } + attr_accessor :name + + # The value passed to the action when it ran + sig { returns(T.nilable(String)) } + attr_accessor :value + + # The author the action was performed on, if any + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author + ) + ) + end + attr_reader :author + + sig do + params( + author: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::OrHash + ).void + end + attr_writer :author + + # The content item the action was performed on, if any + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item + ) + ) + end + attr_reader :item + + sig do + params( + item: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::OrHash + ).void + end + attr_writer :item + + # The queue the item belongs to, if any + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Queue + ) + ) + end + attr_reader :queue + + sig do + params( + queue: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Queue::OrHash + ).void + end + attr_writer :queue + + sig do + params( + id: String, + created_at: Time, + key: T.nilable(String), + name: T.nilable(String), + value: T.nilable(String), + author: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::OrHash, + item: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::OrHash, + queue: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Queue::OrHash + ).returns(T.attached_class) + end + def self.new( + # Moderation action ID + id:, + # ISO 8601 timestamp of when the action was performed + created_at:, + # Customer-defined key identifying this action + key:, + # Display name of the action + name:, + # The value passed to the action when it ran + value:, + # The author the action was performed on, if any + author: nil, + # The content item the action was performed on, if any + item: nil, + # The queue the item belongs to, if any + queue: nil + ) + end + + sig do + override.returns( + { + id: String, + created_at: Time, + key: T.nilable(String), + name: T.nilable(String), + value: T.nilable(String), + author: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author, + item: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item, + queue: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Queue + } + ) + end + def to_hash + end + + class Author < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author, + ModerationAPI::Internal::AnyHash + ) + end + + # Author ID in Moderation API + sig { returns(String) } + attr_accessor :id + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Block + ) + ) + end + attr_reader :block + + sig do + params( + block: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Block::OrHash + ) + ).void + end + attr_writer :block + + # Timestamp when author first appeared + sig { returns(Float) } + attr_accessor :first_seen + + # Timestamp of last activity + sig { returns(Float) } + attr_accessor :last_seen + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metadata + ) + end + attr_reader :metadata + + sig do + params( + metadata: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metadata::OrHash + ).void + end + attr_writer :metadata + + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metrics + ) + end + attr_reader :metrics + + sig do + params( + metrics: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metrics::OrHash + ).void + end + attr_writer :metrics + + # Risk assessment details, if available. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::RiskEvaluation + ) + ) + end + attr_reader :risk_evaluation + + sig do + params( + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::RiskEvaluation::OrHash + ) + ).void + end + attr_writer :risk_evaluation + + # Current author status + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Status::OrSymbol + ) + end + attr_accessor :status + + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::TrustLevel + ) + end + attr_reader :trust_level + + sig do + params( + trust_level: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::TrustLevel::OrHash + ).void + end + attr_writer :trust_level + + # The author's company or organization + sig { returns(T.nilable(String)) } + attr_accessor :company + + # Author email address + sig { returns(T.nilable(String)) } + attr_accessor :email + + # The author's ID from your system + sig { returns(T.nilable(String)) } + attr_accessor :external_id + + # URL of the author's external profile + sig { returns(T.nilable(String)) } + attr_accessor :external_link + + # Timestamp of last incident + sig { returns(T.nilable(Float)) } + attr_accessor :last_incident + + # Author name or identifier + sig { returns(T.nilable(String)) } + attr_accessor :name + + # URL of the author's profile picture + sig { returns(T.nilable(String)) } + attr_accessor :profile_picture + + # The author the action was performed on, if any + sig do + params( + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Block::OrHash + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metadata::OrHash, + metrics: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metrics::OrHash, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::RiskEvaluation::OrHash + ), + status: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::TrustLevel::OrHash, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + ).returns(T.attached_class) + end + def self.new( + # Author ID in Moderation API + id:, + # Block or suspension details, if applicable. Null if the author is enabled. + block:, + # Timestamp when author first appeared + first_seen:, + # Timestamp of last activity + last_seen:, + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + metadata:, + metrics:, + # Risk assessment details, if available. + risk_evaluation:, + # Current author status + status:, + trust_level:, + # The author's company or organization + company: nil, + # Author email address + email: nil, + # The author's ID from your system + external_id: nil, + # URL of the author's external profile + external_link: nil, + # Timestamp of last incident + last_incident: nil, + # Author name or identifier + name: nil, + # URL of the author's profile picture + profile_picture: nil + ) + end + + sig do + override.returns( + { + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Block + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metadata, + metrics: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metrics, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::RiskEvaluation + ), + status: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::TrustLevel, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + } + ) + end + def to_hash + end + + class Block < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Block, + ModerationAPI::Internal::AnyHash + ) + end + + # The moderators reason why the author was blocked or suspended. + sig { returns(T.nilable(String)) } + attr_accessor :reason + + # The timestamp until which they are blocked if the author is suspended. + sig { returns(T.nilable(Float)) } + attr_accessor :until_ + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + params( + reason: T.nilable(String), + until_: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # The moderators reason why the author was blocked or suspended. + reason: nil, + # The timestamp until which they are blocked if the author is suspended. + until_: nil + ) + end + + sig do + override.returns( + { reason: T.nilable(String), until_: T.nilable(Float) } + ) + end + def to_hash + end + end + + class Metadata < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metadata, + ModerationAPI::Internal::AnyHash + ) + end + + # Whether the author's email is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :email_verified + + # Whether the author's identity is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :identity_verified + + # Whether the author is a paying customer + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :is_paying_customer + + # Whether the author's phone number is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :phone_verified + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + params( + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + ).returns(T.attached_class) + end + def self.new( + # Whether the author's email is verified + email_verified: nil, + # Whether the author's identity is verified + identity_verified: nil, + # Whether the author is a paying customer + is_paying_customer: nil, + # Whether the author's phone number is verified + phone_verified: nil + ) + end + + sig do + override.returns( + { + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + } + ) + end + def to_hash + end + end + + class Metrics < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metrics, + ModerationAPI::Internal::AnyHash + ) + end + + # Number of flagged content pieces + sig { returns(Float) } + attr_accessor :flagged_content + + # Total pieces of content + sig { returns(Float) } + attr_accessor :total_content + + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + sig { returns(T.nilable(Float)) } + attr_accessor :average_sentiment + + sig do + params( + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # Number of flagged content pieces + flagged_content:, + # Total pieces of content + total_content:, + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + average_sentiment: nil + ) + end + + sig do + override.returns( + { + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + } + ) + end + def to_hash + end + end + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::RiskEvaluation, + ModerationAPI::Internal::AnyHash + ) + end + + # Calculated risk level based on more than 10 behavioral signals. + sig { returns(T.nilable(Float)) } + attr_accessor :risk_level + + # Risk assessment details, if available. + sig do + params(risk_level: T.nilable(Float)).returns(T.attached_class) + end + def self.new( + # Calculated risk level based on more than 10 behavioral signals. + risk_level: nil + ) + end + + sig { override.returns({ risk_level: T.nilable(Float) }) } + def to_hash + end + end + + # Current author status + module Status + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Status + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + ENABLED = + T.let( + :enabled, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Status::TaggedSymbol + ) + SUSPENDED = + T.let( + :suspended, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Status::TaggedSymbol + ) + BLOCKED = + T.let( + :blocked, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Status::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Status::TaggedSymbol + ] + ) + end + def self.values + end + end + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::TrustLevel, + ModerationAPI::Internal::AnyHash + ) + end + + # Author trust level (-1, 0, 1, 2, 3, or 4) + sig { returns(Float) } + attr_accessor :level + + # True if the trust level was set manually by a moderator + sig { returns(T::Boolean) } + attr_accessor :manual + + sig do + params(level: Float, manual: T::Boolean).returns( + T.attached_class + ) + end + def self.new( + # Author trust level (-1, 0, 1, 2, 3, or 4) + level:, + # True if the trust level was set manually by a moderator + manual: + ) + end + + sig { override.returns({ level: Float, manual: T::Boolean }) } + def to_hash + end + end + end + + class Item < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item, + ModerationAPI::Internal::AnyHash + ) + end + + # Content ID from your system + sig { returns(String) } + attr_accessor :id + + # External author ID (the customer's identifier, not Moderation API's internal id) + sig { returns(T.nilable(String)) } + attr_accessor :author_id + + # The channel the content was submitted to, identified by your customer-defined + # channel key. + sig { returns(T.nilable(String)) } + attr_accessor :channel_key + + # The original content payload + sig do + returns( + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Text, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Image, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Video, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Audio, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object + ) + ) + end + attr_accessor :content + + # Conversation grouping ID, if any + sig { returns(T.nilable(String)) } + attr_accessor :conversation_id + + # Whether the content was flagged by moderation + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :flagged + + # Moderation labels applied to the content + sig do + returns( + T.nilable( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label + ] + ) + ) + end + attr_accessor :labels + + # Detected ISO language code, if available + sig { returns(T.nilable(String)) } + attr_accessor :language + + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::MetaType::OrSymbol + ) + ) + end + attr_accessor :meta_type + + # Arbitrary key/value metadata. Top-level keys are strings. + sig { returns(T.nilable(T::Hash[Symbol, T.anything])) } + attr_accessor :metadata + + # ISO 8601 timestamp of when the content was submitted + sig { returns(Time) } + attr_accessor :timestamp + + # The content item the action was performed on, if any + sig do + params( + id: String, + author_id: T.nilable(String), + channel_key: T.nilable(String), + content: + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Text::OrHash, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Image::OrHash, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Video::OrHash, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Audio::OrHash, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::OrHash + ), + conversation_id: T.nilable(String), + flagged: T.nilable(T::Boolean), + labels: + T.nilable( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::OrHash + ] + ), + language: T.nilable(String), + meta_type: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::MetaType::OrSymbol + ), + metadata: T.nilable(T::Hash[Symbol, T.anything]), + timestamp: Time + ).returns(T.attached_class) + end + def self.new( + # Content ID from your system + id:, + # External author ID (the customer's identifier, not Moderation API's internal id) + author_id:, + # The channel the content was submitted to, identified by your customer-defined + # channel key. + channel_key:, + # The original content payload + content:, + # Conversation grouping ID, if any + conversation_id:, + # Whether the content was flagged by moderation + flagged:, + # Moderation labels applied to the content + labels:, + # Detected ISO language code, if available + language:, + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + meta_type:, + # Arbitrary key/value metadata. Top-level keys are strings. + metadata:, + # ISO 8601 timestamp of when the content was submitted + timestamp: + ) + end + + sig do + override.returns( + { + id: String, + author_id: T.nilable(String), + channel_key: T.nilable(String), + content: + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Text, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Image, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Video, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Audio, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object + ), + conversation_id: T.nilable(String), + flagged: T.nilable(T::Boolean), + labels: + T.nilable( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label + ] + ), + language: T.nilable(String), + meta_type: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::MetaType::OrSymbol + ), + metadata: T.nilable(T::Hash[Symbol, T.anything]), + timestamp: Time + } + ) + end + def to_hash + end + + # The original content payload + module Content + extend ModerationAPI::Internal::Type::Union + + Variants = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Text, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Image, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Video, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Audio, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object + ) + end + + class Text < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Text, + ModerationAPI::Internal::AnyHash + ) + end + + # The content text + sig { returns(String) } + attr_accessor :text + + sig { returns(Symbol) } + attr_accessor :type + + # Text + sig do + params(text: String, type: Symbol).returns(T.attached_class) + end + def self.new( + # The content text + text:, + type: :text + ) + end + + sig { override.returns({ text: String, type: Symbol }) } + def to_hash + end + end + + class Image < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Image, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + sig { returns(T.nilable(String)) } + attr_reader :data + + sig { params(data: String).void } + attr_writer :data + + # A public URL of the image content. Either url or data must be provided. + sig { returns(T.nilable(String)) } + attr_reader :url + + sig { params(url: String).void } + attr_writer :url + + # Image + sig do + params(data: String, url: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + data: nil, + # A public URL of the image content. Either url or data must be provided. + url: nil, + type: :image + ) + end + + sig do + override.returns( + { type: Symbol, data: String, url: String } + ) + end + def to_hash + end + end + + class Video < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Video, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # A public URL of the video content + sig { returns(String) } + attr_accessor :url + + # Video + sig do + params(url: String, type: Symbol).returns(T.attached_class) + end + def self.new( + # A public URL of the video content + url:, + type: :video + ) + end + + sig { override.returns({ type: Symbol, url: String }) } + def to_hash + end + end + + class Audio < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Audio, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # The URL of the audio content + sig { returns(String) } + attr_accessor :url + + # Audio + sig do + params(url: String, type: Symbol).returns(T.attached_class) + end + def self.new( + # The URL of the audio content + url:, + type: :audio + ) + end + + sig { override.returns({ type: Symbol, url: String }) } + def to_hash + end + end + + class Object < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object, + ModerationAPI::Internal::AnyHash + ) + end + + # Values in the object. Can be mixed content types. + sig do + returns( + T::Hash[ + Symbol, + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Text, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Image, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Video, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Audio + ) + ] + ) + end + attr_accessor :data + + sig { returns(Symbol) } + attr_accessor :type + + # Object + sig do + params( + data: + T::Hash[ + Symbol, + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Text::OrHash, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Image::OrHash, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Video::OrHash, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Audio::OrHash + ) + ], + type: Symbol + ).returns(T.attached_class) + end + def self.new( + # Values in the object. Can be mixed content types. + data:, + type: :object + ) + end + + sig do + override.returns( + { + data: + T::Hash[ + Symbol, + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Text, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Image, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Video, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Audio + ) + ], + type: Symbol + } + ) + end + def to_hash + end + + # Text + module Data + extend ModerationAPI::Internal::Type::Union + + Variants = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Text, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Image, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Video, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Audio + ) + end + + class Text < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Text, + ModerationAPI::Internal::AnyHash + ) + end + + # The content text + sig { returns(String) } + attr_accessor :text + + sig { returns(Symbol) } + attr_accessor :type + + # Text + sig do + params(text: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # The content text + text:, + type: :text + ) + end + + sig { override.returns({ text: String, type: Symbol }) } + def to_hash + end + end + + class Image < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Image, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + sig { returns(T.nilable(String)) } + attr_reader :data + + sig { params(data: String).void } + attr_writer :data + + # A public URL of the image content. Either url or data must be provided. + sig { returns(T.nilable(String)) } + attr_reader :url + + sig { params(url: String).void } + attr_writer :url + + # Image + sig do + params(data: String, url: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + data: nil, + # A public URL of the image content. Either url or data must be provided. + url: nil, + type: :image + ) + end + + sig do + override.returns( + { type: Symbol, data: String, url: String } + ) + end + def to_hash + end + end + + class Video < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Video, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # A public URL of the video content + sig { returns(String) } + attr_accessor :url + + # Video + sig do + params(url: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # A public URL of the video content + url:, + type: :video + ) + end + + sig { override.returns({ type: Symbol, url: String }) } + def to_hash + end + end + + class Audio < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Audio, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # The URL of the audio content + sig { returns(String) } + attr_accessor :url + + # Audio + sig do + params(url: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # The URL of the audio content + url:, + type: :audio + ) + end + + sig { override.returns({ type: Symbol, url: String }) } + def to_hash + end + end + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Variants + ] + ) + end + def self.variants + end + end + end + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Variants + ] + ) + end + def self.variants + end + end + + class Label < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label, + ModerationAPI::Internal::AnyHash + ) + end + + # The label name + sig { returns(String) } + attr_accessor :label + + # Confidence score between 0 and 1 + sig { returns(Float) } + attr_accessor :score + + # Whether this label crossed its flagging threshold + sig { returns(T.nilable(T::Boolean)) } + attr_reader :flagged + + sig { params(flagged: T::Boolean).void } + attr_writer :flagged + + # True if the label was applied manually by a moderator + sig { returns(T.nilable(T::Boolean)) } + attr_reader :manual + + sig { params(manual: T::Boolean).void } + attr_writer :manual + + sig do + returns( + T.nilable( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match + ] + ) + ) + end + attr_reader :matches + + sig do + params( + matches: + T::Array[ + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::OrHash + ] + ).void + end + attr_writer :matches + + sig do + params( + label: String, + score: Float, + flagged: T::Boolean, + manual: T::Boolean, + matches: + T::Array[ + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # The label name + label:, + # Confidence score between 0 and 1 + score:, + # Whether this label crossed its flagging threshold + flagged: nil, + # True if the label was applied manually by a moderator + manual: nil, + matches: nil + ) + end + + sig do + override.returns( + { + label: String, + score: Float, + flagged: T::Boolean, + manual: T::Boolean, + matches: + T::Array[ + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match + ] + } + ) + end + def to_hash + end + + class Match < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match, + ModerationAPI::Internal::AnyHash + ) + end + + # The matched substring + sig { returns(String) } + attr_accessor :match + + # Match confidence between 0 and 1 + sig { returns(Float) } + attr_accessor :probability + + # [start, end] character offsets in the source text + sig { returns(T::Array[T.anything]) } + attr_accessor :span + + sig { returns(T.nilable(String)) } + attr_reader :entity_type + + sig { params(entity_type: String).void } + attr_writer :entity_type + + sig { returns(T.nilable(String)) } + attr_accessor :mask + + sig { returns(T.nilable(T::Array[String])) } + attr_reader :reasons + + sig { params(reasons: T::Array[String]).void } + attr_writer :reasons + + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals + ) + ) + end + attr_reader :signals + + sig do + params( + signals: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals::OrHash + ).void + end + attr_writer :signals + + sig do + params( + match: String, + probability: Float, + span: T::Array[T.anything], + entity_type: String, + mask: T.nilable(String), + reasons: T::Array[String], + signals: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals::OrHash + ).returns(T.attached_class) + end + def self.new( + # The matched substring + match:, + # Match confidence between 0 and 1 + probability:, + # [start, end] character offsets in the source text + span:, + entity_type: nil, + mask: nil, + reasons: nil, + signals: nil + ) + end + + sig do + override.returns( + { + match: String, + probability: Float, + span: T::Array[T.anything], + entity_type: String, + mask: T.nilable(String), + reasons: T::Array[String], + signals: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals + } + ) + end + def to_hash + end + + class Signals < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :bot_protection + + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals::BrandImpersonation + ) + ) + end + attr_reader :brand_impersonation + + sig do + params( + brand_impersonation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals::BrandImpersonation::OrHash + ) + ).void + end + attr_writer :brand_impersonation + + sig { returns(T.nilable(Float)) } + attr_accessor :domain_age_days + + sig { returns(T.nilable(String)) } + attr_accessor :final_url + + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :has_email_setup + + sig { returns(T::Boolean) } + attr_accessor :has_suspicious_characters + + sig { returns(T::Boolean) } + attr_accessor :is_link_shortener + + sig { returns(T::Boolean) } + attr_accessor :is_reported + + sig { returns(T.nilable(Float)) } + attr_accessor :redirect_count + + sig do + params( + bot_protection: T.nilable(T::Boolean), + brand_impersonation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals::BrandImpersonation::OrHash + ), + domain_age_days: T.nilable(Float), + final_url: T.nilable(String), + has_email_setup: T.nilable(T::Boolean), + has_suspicious_characters: T::Boolean, + is_link_shortener: T::Boolean, + is_reported: T::Boolean, + redirect_count: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + bot_protection:, + brand_impersonation:, + domain_age_days:, + final_url:, + has_email_setup:, + has_suspicious_characters:, + is_link_shortener:, + is_reported:, + redirect_count: + ) + end + + sig do + override.returns( + { + bot_protection: T.nilable(T::Boolean), + brand_impersonation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals::BrandImpersonation + ), + domain_age_days: T.nilable(Float), + final_url: T.nilable(String), + has_email_setup: T.nilable(T::Boolean), + has_suspicious_characters: T::Boolean, + is_link_shortener: T::Boolean, + is_reported: T::Boolean, + redirect_count: T.nilable(Float) + } + ) + end + def to_hash + end + + class BrandImpersonation < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals::BrandImpersonation, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(String) } + attr_accessor :brand + + sig { returns(String) } + attr_accessor :method_ + + sig do + params(brand: String, method_: String).returns( + T.attached_class + ) + end + def self.new(brand:, method_:) + end + + sig do + override.returns({ brand: String, method_: String }) + end + def to_hash + end + end + end + end + end + + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + module MetaType + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::MetaType + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + PROFILE = + T.let( + :profile, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::MetaType::TaggedSymbol + ) + MESSAGE = + T.let( + :message, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::MetaType::TaggedSymbol + ) + POST = + T.let( + :post, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::MetaType::TaggedSymbol + ) + COMMENT = + T.let( + :comment, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::MetaType::TaggedSymbol + ) + EVENT = + T.let( + :event, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::MetaType::TaggedSymbol + ) + PRODUCT = + T.let( + :product, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::MetaType::TaggedSymbol + ) + REVIEW = + T.let( + :review, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::MetaType::TaggedSymbol + ) + OTHER = + T.let( + :other, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::MetaType::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::MetaType::TaggedSymbol + ] + ) + end + def self.values + end + end + end + + class Queue < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Queue, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(String) } + attr_accessor :id + + # The queue the item belongs to, if any + sig { params(id: String).returns(T.attached_class) } + def self.new(id:) + end + + sig { override.returns({ id: String }) } + def to_hash + end + end + end + end + end + + class QueueItemAllowed < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed, + ModerationAPI::Internal::AnyHash + ) + end + + # Stable event ID. Use this to dedupe retries. + sig { returns(String) } + attr_accessor :id + + sig { returns(Symbol) } + attr_accessor :api_version + + # ISO 8601 timestamp of when the event was emitted. + sig { returns(Time) } + attr_accessor :created + + sig { returns(ModerationAPI::WebhookEvent::QueueItemAllowed::Data) } + attr_reader :data + + sig do + params( + data: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::OrHash + ).void + end + attr_writer :data + + # The event type. + sig { returns(Symbol) } + attr_accessor :type + + sig do + params( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::OrHash, + api_version: Symbol, + type: Symbol + ).returns(T.attached_class) + end + def self.new( + # Stable event ID. Use this to dedupe retries. + id:, + # ISO 8601 timestamp of when the event was emitted. + created:, + data:, + api_version: :v2, + # The event type. + type: :"queue_item.allowed" + ) + end + + sig do + override.returns( + { + id: String, + api_version: Symbol, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemAllowed::Data, + type: Symbol + } + ) + end + def to_hash + end + + class Data < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data, + ModerationAPI::Internal::AnyHash + ) + end + + sig do + returns(ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object) + end + attr_reader :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::OrHash + ).void + end + attr_writer :object + + sig do + params( + object: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::OrHash + ).returns(T.attached_class) + end + def self.new(object:) + end + + sig do + override.returns( + { + object: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object + } + ) + end + def to_hash + end + + class Object < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object, + ModerationAPI::Internal::AnyHash + ) + end + + # Moderation action ID + sig { returns(String) } + attr_accessor :id + + # ISO 8601 timestamp of when the action was performed + sig { returns(Time) } + attr_accessor :created_at + + # Customer-defined key identifying this action + sig { returns(T.nilable(String)) } + attr_accessor :key + + # Display name of the action + sig { returns(T.nilable(String)) } + attr_accessor :name + + # The value passed to the action when it ran + sig { returns(T.nilable(String)) } + attr_accessor :value + + # The author the action was performed on, if any + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author + ) + ) + end + attr_reader :author + + sig do + params( + author: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::OrHash + ).void + end + attr_writer :author + + # The content item the action was performed on, if any + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item + ) + ) + end + attr_reader :item + + sig do + params( + item: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::OrHash + ).void + end + attr_writer :item + + # The queue the item belongs to, if any + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Queue + ) + ) + end + attr_reader :queue + + sig do + params( + queue: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Queue::OrHash + ).void + end + attr_writer :queue + + sig do + params( + id: String, + created_at: Time, + key: T.nilable(String), + name: T.nilable(String), + value: T.nilable(String), + author: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::OrHash, + item: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::OrHash, + queue: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Queue::OrHash + ).returns(T.attached_class) + end + def self.new( + # Moderation action ID + id:, + # ISO 8601 timestamp of when the action was performed + created_at:, + # Customer-defined key identifying this action + key:, + # Display name of the action + name:, + # The value passed to the action when it ran + value:, + # The author the action was performed on, if any + author: nil, + # The content item the action was performed on, if any + item: nil, + # The queue the item belongs to, if any + queue: nil + ) + end + + sig do + override.returns( + { + id: String, + created_at: Time, + key: T.nilable(String), + name: T.nilable(String), + value: T.nilable(String), + author: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author, + item: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item, + queue: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Queue + } + ) + end + def to_hash + end + + class Author < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author, + ModerationAPI::Internal::AnyHash + ) + end + + # Author ID in Moderation API + sig { returns(String) } + attr_accessor :id + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Block + ) + ) + end + attr_reader :block + + sig do + params( + block: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Block::OrHash + ) + ).void + end + attr_writer :block + + # Timestamp when author first appeared + sig { returns(Float) } + attr_accessor :first_seen + + # Timestamp of last activity + sig { returns(Float) } + attr_accessor :last_seen + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metadata + ) + end + attr_reader :metadata + + sig do + params( + metadata: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metadata::OrHash + ).void + end + attr_writer :metadata + + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metrics + ) + end + attr_reader :metrics + + sig do + params( + metrics: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metrics::OrHash + ).void + end + attr_writer :metrics + + # Risk assessment details, if available. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::RiskEvaluation + ) + ) + end + attr_reader :risk_evaluation + + sig do + params( + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::RiskEvaluation::OrHash + ) + ).void + end + attr_writer :risk_evaluation + + # Current author status + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Status::OrSymbol + ) + end + attr_accessor :status + + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::TrustLevel + ) + end + attr_reader :trust_level + + sig do + params( + trust_level: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::TrustLevel::OrHash + ).void + end + attr_writer :trust_level + + # The author's company or organization + sig { returns(T.nilable(String)) } + attr_accessor :company + + # Author email address + sig { returns(T.nilable(String)) } + attr_accessor :email + + # The author's ID from your system + sig { returns(T.nilable(String)) } + attr_accessor :external_id + + # URL of the author's external profile + sig { returns(T.nilable(String)) } + attr_accessor :external_link + + # Timestamp of last incident + sig { returns(T.nilable(Float)) } + attr_accessor :last_incident + + # Author name or identifier + sig { returns(T.nilable(String)) } + attr_accessor :name + + # URL of the author's profile picture + sig { returns(T.nilable(String)) } + attr_accessor :profile_picture + + # The author the action was performed on, if any + sig do + params( + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Block::OrHash + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metadata::OrHash, + metrics: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metrics::OrHash, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::RiskEvaluation::OrHash + ), + status: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::TrustLevel::OrHash, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + ).returns(T.attached_class) + end + def self.new( + # Author ID in Moderation API + id:, + # Block or suspension details, if applicable. Null if the author is enabled. + block:, + # Timestamp when author first appeared + first_seen:, + # Timestamp of last activity + last_seen:, + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + metadata:, + metrics:, + # Risk assessment details, if available. + risk_evaluation:, + # Current author status + status:, + trust_level:, + # The author's company or organization + company: nil, + # Author email address + email: nil, + # The author's ID from your system + external_id: nil, + # URL of the author's external profile + external_link: nil, + # Timestamp of last incident + last_incident: nil, + # Author name or identifier + name: nil, + # URL of the author's profile picture + profile_picture: nil + ) + end + + sig do + override.returns( + { + id: String, + block: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Block + ), + first_seen: Float, + last_seen: Float, + metadata: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metadata, + metrics: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metrics, + risk_evaluation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::RiskEvaluation + ), + status: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Status::OrSymbol, + trust_level: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::TrustLevel, + company: T.nilable(String), + email: T.nilable(String), + external_id: T.nilable(String), + external_link: T.nilable(String), + last_incident: T.nilable(Float), + name: T.nilable(String), + profile_picture: T.nilable(String) + } + ) + end + def to_hash + end + + class Block < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Block, + ModerationAPI::Internal::AnyHash + ) + end + + # The moderators reason why the author was blocked or suspended. + sig { returns(T.nilable(String)) } + attr_accessor :reason + + # The timestamp until which they are blocked if the author is suspended. + sig { returns(T.nilable(Float)) } + attr_accessor :until_ + + # Block or suspension details, if applicable. Null if the author is enabled. + sig do + params( + reason: T.nilable(String), + until_: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # The moderators reason why the author was blocked or suspended. + reason: nil, + # The timestamp until which they are blocked if the author is suspended. + until_: nil + ) + end + + sig do + override.returns( + { reason: T.nilable(String), until_: T.nilable(Float) } + ) + end + def to_hash + end + end + + class Metadata < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metadata, + ModerationAPI::Internal::AnyHash + ) + end + + # Whether the author's email is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :email_verified + + # Whether the author's identity is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :identity_verified + + # Whether the author is a paying customer + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :is_paying_customer + + # Whether the author's phone number is verified + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :phone_verified + + # Additional metadata provided by your system. We recommend including any relevant + # information that may assist in the moderation process. + sig do + params( + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + ).returns(T.attached_class) + end + def self.new( + # Whether the author's email is verified + email_verified: nil, + # Whether the author's identity is verified + identity_verified: nil, + # Whether the author is a paying customer + is_paying_customer: nil, + # Whether the author's phone number is verified + phone_verified: nil + ) + end + + sig do + override.returns( + { + email_verified: T.nilable(T::Boolean), + identity_verified: T.nilable(T::Boolean), + is_paying_customer: T.nilable(T::Boolean), + phone_verified: T.nilable(T::Boolean) + } + ) + end + def to_hash + end + end + + class Metrics < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metrics, + ModerationAPI::Internal::AnyHash + ) + end + + # Number of flagged content pieces + sig { returns(Float) } + attr_accessor :flagged_content + + # Total pieces of content + sig { returns(Float) } + attr_accessor :total_content + + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + sig { returns(T.nilable(Float)) } + attr_accessor :average_sentiment + + sig do + params( + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + # Number of flagged content pieces + flagged_content:, + # Total pieces of content + total_content:, + # Average sentiment score of content (-1 to 1). Requires a sentiment model in your + # project. + average_sentiment: nil + ) + end + + sig do + override.returns( + { + flagged_content: Float, + total_content: Float, + average_sentiment: T.nilable(Float) + } + ) + end + def to_hash + end + end + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::RiskEvaluation, + ModerationAPI::Internal::AnyHash + ) + end + + # Calculated risk level based on more than 10 behavioral signals. + sig { returns(T.nilable(Float)) } + attr_accessor :risk_level + + # Risk assessment details, if available. + sig do + params(risk_level: T.nilable(Float)).returns(T.attached_class) + end + def self.new( + # Calculated risk level based on more than 10 behavioral signals. + risk_level: nil + ) + end + + sig { override.returns({ risk_level: T.nilable(Float) }) } + def to_hash + end + end + + # Current author status + module Status + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Status + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + ENABLED = + T.let( + :enabled, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Status::TaggedSymbol + ) + SUSPENDED = + T.let( + :suspended, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Status::TaggedSymbol + ) + BLOCKED = + T.let( + :blocked, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Status::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Status::TaggedSymbol + ] + ) + end + def self.values + end + end + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::TrustLevel, + ModerationAPI::Internal::AnyHash + ) + end + + # Author trust level (-1, 0, 1, 2, 3, or 4) + sig { returns(Float) } + attr_accessor :level + + # True if the trust level was set manually by a moderator + sig { returns(T::Boolean) } + attr_accessor :manual + + sig do + params(level: Float, manual: T::Boolean).returns( + T.attached_class + ) + end + def self.new( + # Author trust level (-1, 0, 1, 2, 3, or 4) + level:, + # True if the trust level was set manually by a moderator + manual: + ) + end + + sig { override.returns({ level: Float, manual: T::Boolean }) } + def to_hash + end + end + end + + class Item < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item, + ModerationAPI::Internal::AnyHash + ) + end + + # Content ID from your system + sig { returns(String) } + attr_accessor :id + + # External author ID (the customer's identifier, not Moderation API's internal id) + sig { returns(T.nilable(String)) } + attr_accessor :author_id + + # The channel the content was submitted to, identified by your customer-defined + # channel key. + sig { returns(T.nilable(String)) } + attr_accessor :channel_key + + # The original content payload + sig do + returns( + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Text, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Image, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Video, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Audio, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object + ) + ) + end + attr_accessor :content + + # Conversation grouping ID, if any + sig { returns(T.nilable(String)) } + attr_accessor :conversation_id + + # Whether the content was flagged by moderation + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :flagged + + # Moderation labels applied to the content + sig do + returns( + T.nilable( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label + ] + ) + ) + end + attr_accessor :labels + + # Detected ISO language code, if available + sig { returns(T.nilable(String)) } + attr_accessor :language + + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::MetaType::OrSymbol + ) + ) + end + attr_accessor :meta_type + + # Arbitrary key/value metadata. Top-level keys are strings. + sig { returns(T.nilable(T::Hash[Symbol, T.anything])) } + attr_accessor :metadata + + # ISO 8601 timestamp of when the content was submitted + sig { returns(Time) } + attr_accessor :timestamp + + # The content item the action was performed on, if any + sig do + params( + id: String, + author_id: T.nilable(String), + channel_key: T.nilable(String), + content: + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Text::OrHash, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Image::OrHash, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Video::OrHash, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Audio::OrHash, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::OrHash + ), + conversation_id: T.nilable(String), + flagged: T.nilable(T::Boolean), + labels: + T.nilable( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::OrHash + ] + ), + language: T.nilable(String), + meta_type: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::MetaType::OrSymbol + ), + metadata: T.nilable(T::Hash[Symbol, T.anything]), + timestamp: Time + ).returns(T.attached_class) + end + def self.new( + # Content ID from your system + id:, + # External author ID (the customer's identifier, not Moderation API's internal id) + author_id:, + # The channel the content was submitted to, identified by your customer-defined + # channel key. + channel_key:, + # The original content payload + content:, + # Conversation grouping ID, if any + conversation_id:, + # Whether the content was flagged by moderation + flagged:, + # Moderation labels applied to the content + labels:, + # Detected ISO language code, if available + language:, + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + meta_type:, + # Arbitrary key/value metadata. Top-level keys are strings. + metadata:, + # ISO 8601 timestamp of when the content was submitted + timestamp: + ) + end + + sig do + override.returns( + { + id: String, + author_id: T.nilable(String), + channel_key: T.nilable(String), + content: + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Text, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Image, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Video, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Audio, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object + ), + conversation_id: T.nilable(String), + flagged: T.nilable(T::Boolean), + labels: + T.nilable( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label + ] + ), + language: T.nilable(String), + meta_type: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::MetaType::OrSymbol + ), + metadata: T.nilable(T::Hash[Symbol, T.anything]), + timestamp: Time + } + ) + end + def to_hash + end + + # The original content payload + module Content + extend ModerationAPI::Internal::Type::Union + + Variants = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Text, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Image, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Video, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Audio, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object + ) + end + + class Text < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Text, + ModerationAPI::Internal::AnyHash + ) + end + + # The content text + sig { returns(String) } + attr_accessor :text + + sig { returns(Symbol) } + attr_accessor :type + + # Text + sig do + params(text: String, type: Symbol).returns(T.attached_class) + end + def self.new( + # The content text + text:, + type: :text + ) + end + + sig { override.returns({ text: String, type: Symbol }) } + def to_hash + end + end + + class Image < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Image, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + sig { returns(T.nilable(String)) } + attr_reader :data + + sig { params(data: String).void } + attr_writer :data + + # A public URL of the image content. Either url or data must be provided. + sig { returns(T.nilable(String)) } + attr_reader :url + + sig { params(url: String).void } + attr_writer :url + + # Image + sig do + params(data: String, url: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + data: nil, + # A public URL of the image content. Either url or data must be provided. + url: nil, + type: :image + ) + end + + sig do + override.returns( + { type: Symbol, data: String, url: String } + ) + end + def to_hash + end + end + + class Video < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Video, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # A public URL of the video content + sig { returns(String) } + attr_accessor :url + + # Video + sig do + params(url: String, type: Symbol).returns(T.attached_class) + end + def self.new( + # A public URL of the video content + url:, + type: :video + ) + end + + sig { override.returns({ type: Symbol, url: String }) } + def to_hash + end + end + + class Audio < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Audio, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # The URL of the audio content + sig { returns(String) } + attr_accessor :url + + # Audio + sig do + params(url: String, type: Symbol).returns(T.attached_class) + end + def self.new( + # The URL of the audio content + url:, + type: :audio + ) + end + + sig { override.returns({ type: Symbol, url: String }) } + def to_hash + end + end + + class Object < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object, + ModerationAPI::Internal::AnyHash + ) + end + + # Values in the object. Can be mixed content types. + sig do + returns( + T::Hash[ + Symbol, + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Text, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Image, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Video, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Audio + ) + ] + ) + end + attr_accessor :data + + sig { returns(Symbol) } + attr_accessor :type + + # Object + sig do + params( + data: + T::Hash[ + Symbol, + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Text::OrHash, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Image::OrHash, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Video::OrHash, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Audio::OrHash + ) + ], + type: Symbol + ).returns(T.attached_class) + end + def self.new( + # Values in the object. Can be mixed content types. + data:, + type: :object + ) + end + + sig do + override.returns( + { + data: + T::Hash[ + Symbol, + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Text, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Image, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Video, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Audio + ) + ], + type: Symbol + } + ) + end + def to_hash + end + + # Text + module Data + extend ModerationAPI::Internal::Type::Union + + Variants = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Text, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Image, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Video, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Audio + ) + end + + class Text < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Text, + ModerationAPI::Internal::AnyHash + ) + end + + # The content text + sig { returns(String) } + attr_accessor :text + + sig { returns(Symbol) } + attr_accessor :type + + # Text + sig do + params(text: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # The content text + text:, + type: :text + ) + end + + sig { override.returns({ text: String, type: Symbol }) } + def to_hash + end + end + + class Image < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Image, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + sig { returns(T.nilable(String)) } + attr_reader :data + + sig { params(data: String).void } + attr_writer :data + + # A public URL of the image content. Either url or data must be provided. + sig { returns(T.nilable(String)) } + attr_reader :url + + sig { params(url: String).void } + attr_writer :url + + # Image + sig do + params(data: String, url: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # Base64-encoded image data. Either url or data must be provided. Note: base64 + # images are not stored and will not appear in the review queue. + data: nil, + # A public URL of the image content. Either url or data must be provided. + url: nil, + type: :image + ) + end + + sig do + override.returns( + { type: Symbol, data: String, url: String } + ) + end + def to_hash + end + end + + class Video < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Video, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # A public URL of the video content + sig { returns(String) } + attr_accessor :url + + # Video + sig do + params(url: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # A public URL of the video content + url:, + type: :video + ) + end + + sig { override.returns({ type: Symbol, url: String }) } + def to_hash + end + end + + class Audio < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Audio, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :type + + # The URL of the audio content + sig { returns(String) } + attr_accessor :url + + # Audio + sig do + params(url: String, type: Symbol).returns( + T.attached_class + ) + end + def self.new( + # The URL of the audio content + url:, + type: :audio + ) + end + + sig { override.returns({ type: Symbol, url: String }) } + def to_hash + end + end + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Variants + ] + ) + end + def self.variants + end + end + end + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Variants + ] + ) + end + def self.variants + end + end + + class Label < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label, + ModerationAPI::Internal::AnyHash + ) + end + + # The label name + sig { returns(String) } + attr_accessor :label + + # Confidence score between 0 and 1 + sig { returns(Float) } + attr_accessor :score + + # Whether this label crossed its flagging threshold + sig { returns(T.nilable(T::Boolean)) } + attr_reader :flagged + + sig { params(flagged: T::Boolean).void } + attr_writer :flagged + + # True if the label was applied manually by a moderator + sig { returns(T.nilable(T::Boolean)) } + attr_reader :manual + + sig { params(manual: T::Boolean).void } + attr_writer :manual + + sig do + returns( + T.nilable( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match + ] + ) + ) + end + attr_reader :matches + + sig do + params( + matches: + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::OrHash + ] + ).void + end + attr_writer :matches + + sig do + params( + label: String, + score: Float, + flagged: T::Boolean, + manual: T::Boolean, + matches: + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # The label name + label:, + # Confidence score between 0 and 1 + score:, + # Whether this label crossed its flagging threshold + flagged: nil, + # True if the label was applied manually by a moderator + manual: nil, + matches: nil + ) + end + + sig do + override.returns( + { + label: String, + score: Float, + flagged: T::Boolean, + manual: T::Boolean, + matches: + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match + ] + } + ) + end + def to_hash + end + + class Match < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match, + ModerationAPI::Internal::AnyHash + ) + end + + # The matched substring + sig { returns(String) } + attr_accessor :match + + # Match confidence between 0 and 1 + sig { returns(Float) } + attr_accessor :probability + + # [start, end] character offsets in the source text + sig { returns(T::Array[T.anything]) } + attr_accessor :span + + sig { returns(T.nilable(String)) } + attr_reader :entity_type + + sig { params(entity_type: String).void } + attr_writer :entity_type + + sig { returns(T.nilable(String)) } + attr_accessor :mask + + sig { returns(T.nilable(T::Array[String])) } + attr_reader :reasons + + sig { params(reasons: T::Array[String]).void } + attr_writer :reasons + + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals + ) + ) + end + attr_reader :signals + + sig do + params( + signals: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals::OrHash + ).void + end + attr_writer :signals + + sig do + params( + match: String, + probability: Float, + span: T::Array[T.anything], + entity_type: String, + mask: T.nilable(String), + reasons: T::Array[String], + signals: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals::OrHash + ).returns(T.attached_class) + end + def self.new( + # The matched substring + match:, + # Match confidence between 0 and 1 + probability:, + # [start, end] character offsets in the source text + span:, + entity_type: nil, + mask: nil, + reasons: nil, + signals: nil + ) + end + + sig do + override.returns( + { + match: String, + probability: Float, + span: T::Array[T.anything], + entity_type: String, + mask: T.nilable(String), + reasons: T::Array[String], + signals: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals + } + ) + end + def to_hash + end + + class Signals < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :bot_protection + + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals::BrandImpersonation + ) + ) + end + attr_reader :brand_impersonation + + sig do + params( + brand_impersonation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals::BrandImpersonation::OrHash + ) + ).void + end + attr_writer :brand_impersonation + + sig { returns(T.nilable(Float)) } + attr_accessor :domain_age_days + + sig { returns(T.nilable(String)) } + attr_accessor :final_url + + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :has_email_setup + + sig { returns(T::Boolean) } + attr_accessor :has_suspicious_characters + + sig { returns(T::Boolean) } + attr_accessor :is_link_shortener + + sig { returns(T::Boolean) } + attr_accessor :is_reported + + sig { returns(T.nilable(Float)) } + attr_accessor :redirect_count + + sig do + params( + bot_protection: T.nilable(T::Boolean), + brand_impersonation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals::BrandImpersonation::OrHash + ), + domain_age_days: T.nilable(Float), + final_url: T.nilable(String), + has_email_setup: T.nilable(T::Boolean), + has_suspicious_characters: T::Boolean, + is_link_shortener: T::Boolean, + is_reported: T::Boolean, + redirect_count: T.nilable(Float) + ).returns(T.attached_class) + end + def self.new( + bot_protection:, + brand_impersonation:, + domain_age_days:, + final_url:, + has_email_setup:, + has_suspicious_characters:, + is_link_shortener:, + is_reported:, + redirect_count: + ) + end + + sig do + override.returns( + { + bot_protection: T.nilable(T::Boolean), + brand_impersonation: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals::BrandImpersonation + ), + domain_age_days: T.nilable(Float), + final_url: T.nilable(String), + has_email_setup: T.nilable(T::Boolean), + has_suspicious_characters: T::Boolean, + is_link_shortener: T::Boolean, + is_reported: T::Boolean, + redirect_count: T.nilable(Float) + } + ) + end + def to_hash + end + + class BrandImpersonation < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals::BrandImpersonation, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(String) } + attr_accessor :brand + + sig { returns(String) } + attr_accessor :method_ + + sig do + params(brand: String, method_: String).returns( + T.attached_class + ) + end + def self.new(brand:, method_:) + end + + sig do + override.returns({ brand: String, method_: String }) + end + def to_hash + end + end + end + end + end + + # High-level content type (e.g. message, post, comment). Defaults to the channel's + # configured content type but can be overridden per request via the moderation API + # `type` field. + module MetaType + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::MetaType + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + PROFILE = + T.let( + :profile, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::MetaType::TaggedSymbol + ) + MESSAGE = + T.let( + :message, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::MetaType::TaggedSymbol + ) + POST = + T.let( + :post, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::MetaType::TaggedSymbol + ) + COMMENT = + T.let( + :comment, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::MetaType::TaggedSymbol + ) + EVENT = + T.let( + :event, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::MetaType::TaggedSymbol + ) + PRODUCT = + T.let( + :product, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::MetaType::TaggedSymbol + ) + REVIEW = + T.let( + :review, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::MetaType::TaggedSymbol + ) + OTHER = + T.let( + :other, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::MetaType::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::MetaType::TaggedSymbol + ] + ) + end + def self.values + end + end + end + + class Queue < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Queue, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(String) } + attr_accessor :id + + # The queue the item belongs to, if any + sig { params(id: String).returns(T.attached_class) } + def self.new(id:) + end + + sig { override.returns({ id: String }) } + def to_hash + end + end + end + end + end + + sig { override.returns(T::Array[ModerationAPI::WebhookEvent::Variants]) } + def self.variants + end + end + end +end diff --git a/rbi/moderation_api/resources/actions.rbi b/rbi/moderation_api/resources/actions.rbi index 1904ad0..4cd110e 100644 --- a/rbi/moderation_api/resources/actions.rbi +++ b/rbi/moderation_api/resources/actions.rbi @@ -22,8 +22,6 @@ module ModerationAPI ModerationAPI::ActionCreateParams::QueueBehaviour::OrSymbol, type: T.nilable(ModerationAPI::ActionCreateParams::Type::OrSymbol), value_required: T::Boolean, - webhooks: - T::Array[ModerationAPI::ActionCreateParams::Webhook::OrHash], request_options: ModerationAPI::RequestOptions::OrHash ).returns(ModerationAPI::Models::ActionCreateResponse) end @@ -54,8 +52,6 @@ module ModerationAPI type: nil, # Whether the action requires a value to be executed. value_required: nil, - # The action's webhooks. - webhooks: nil, request_options: {} ) end @@ -91,8 +87,6 @@ module ModerationAPI ModerationAPI::ActionUpdateParams::QueueBehaviour::OrSymbol, type: T.nilable(ModerationAPI::ActionUpdateParams::Type::OrSymbol), value_required: T::Boolean, - webhooks: - T::Array[ModerationAPI::ActionUpdateParams::Webhook::OrHash], request_options: ModerationAPI::RequestOptions::OrHash ).returns(ModerationAPI::Models::ActionUpdateResponse) end @@ -125,8 +119,6 @@ module ModerationAPI type: nil, # Whether the action requires a value to be executed. value_required: nil, - # The action's webhooks. - webhooks: nil, request_options: {} ) end diff --git a/sig/moderation_api/models.rbs b/sig/moderation_api/models.rbs index 2570afd..484dad5 100644 --- a/sig/moderation_api/models.rbs +++ b/sig/moderation_api/models.rbs @@ -35,6 +35,8 @@ module ModerationAPI class QueueRetrieveParams = ModerationAPI::Models::QueueRetrieveParams + module WebhookEvent = ModerationAPI::Models::WebhookEvent + module Wordlist = ModerationAPI::Models::Wordlist class WordlistGetEmbeddingStatusParams = ModerationAPI::Models::WordlistGetEmbeddingStatusParams diff --git a/sig/moderation_api/models/action_create_params.rbs b/sig/moderation_api/models/action_create_params.rbs index 8483ec1..780c1b4 100644 --- a/sig/moderation_api/models/action_create_params.rbs +++ b/sig/moderation_api/models/action_create_params.rbs @@ -12,8 +12,7 @@ module ModerationAPI possible_values: ::Array[ModerationAPI::ActionCreateParams::PossibleValue], queue_behaviour: ModerationAPI::Models::ActionCreateParams::queue_behaviour, type: ModerationAPI::Models::ActionCreateParams::type_?, - value_required: bool, - webhooks: ::Array[ModerationAPI::ActionCreateParams::Webhook] + value_required: bool } & ModerationAPI::Internal::Type::request_parameters @@ -61,12 +60,6 @@ module ModerationAPI def value_required=: (bool) -> bool - attr_reader webhooks: ::Array[ModerationAPI::ActionCreateParams::Webhook]? - - def webhooks=: ( - ::Array[ModerationAPI::ActionCreateParams::Webhook] - ) -> ::Array[ModerationAPI::ActionCreateParams::Webhook] - def initialize: ( name: String, ?built_in: bool?, @@ -79,7 +72,6 @@ module ModerationAPI ?queue_behaviour: ModerationAPI::Models::ActionCreateParams::queue_behaviour, ?type: ModerationAPI::Models::ActionCreateParams::type_?, ?value_required: bool, - ?webhooks: ::Array[ModerationAPI::ActionCreateParams::Webhook], ?request_options: ModerationAPI::request_opts ) -> void @@ -95,7 +87,6 @@ module ModerationAPI queue_behaviour: ModerationAPI::Models::ActionCreateParams::queue_behaviour, type: ModerationAPI::Models::ActionCreateParams::type_?, value_required: bool, - webhooks: ::Array[ModerationAPI::ActionCreateParams::Webhook], request_options: ModerationAPI::RequestOptions } @@ -161,35 +152,6 @@ module ModerationAPI def self?.values: -> ::Array[ModerationAPI::Models::ActionCreateParams::type_] end - - type webhook = - { name: String, url: String, id: String, description: String? } - - class Webhook < ModerationAPI::Internal::Type::BaseModel - attr_accessor name: String - - attr_accessor url: String - - attr_reader id: String? - - def id=: (String) -> String - - attr_accessor description: String? - - def initialize: ( - name: String, - url: String, - ?id: String, - ?description: String? - ) -> void - - def to_hash: -> { - name: String, - url: String, - id: String, - description: String? - } - end end end end diff --git a/sig/moderation_api/models/action_list_response.rbs b/sig/moderation_api/models/action_list_response.rbs index 7d082da..12aef8d 100644 --- a/sig/moderation_api/models/action_list_response.rbs +++ b/sig/moderation_api/models/action_list_response.rbs @@ -12,7 +12,6 @@ module ModerationAPI possible_values: ::Array[ModerationAPI::Models::ActionListResponseItem::PossibleValue], queue_behaviour: ModerationAPI::Models::ActionListResponseItem::queue_behaviour, value_required: bool, - webhooks: ::Array[ModerationAPI::Models::ActionListResponseItem::Webhook], description: String?, key: String?, type: ModerationAPI::Models::ActionListResponseItem::type_? @@ -39,8 +38,6 @@ module ModerationAPI attr_accessor value_required: bool - attr_accessor webhooks: ::Array[ModerationAPI::Models::ActionListResponseItem::Webhook] - attr_accessor description: String? attr_accessor key: String? @@ -58,7 +55,6 @@ module ModerationAPI possible_values: ::Array[ModerationAPI::Models::ActionListResponseItem::PossibleValue], queue_behaviour: ModerationAPI::Models::ActionListResponseItem::queue_behaviour, value_required: bool, - webhooks: ::Array[ModerationAPI::Models::ActionListResponseItem::Webhook], ?description: String?, ?key: String?, ?type: ModerationAPI::Models::ActionListResponseItem::type_? @@ -75,7 +71,6 @@ module ModerationAPI possible_values: ::Array[ModerationAPI::Models::ActionListResponseItem::PossibleValue], queue_behaviour: ModerationAPI::Models::ActionListResponseItem::queue_behaviour, value_required: bool, - webhooks: ::Array[ModerationAPI::Models::ActionListResponseItem::Webhook], description: String?, key: String?, type: ModerationAPI::Models::ActionListResponseItem::type_? @@ -115,43 +110,6 @@ module ModerationAPI def self?.values: -> ::Array[ModerationAPI::Models::ActionListResponseItem::queue_behaviour] end - type webhook = - { - id: String, - name: String, - url: String, - description: String?, - moderation_action_id: String? - } - - class Webhook < ModerationAPI::Internal::Type::BaseModel - attr_accessor id: String - - attr_accessor name: String - - attr_accessor url: String - - attr_accessor description: String? - - attr_accessor moderation_action_id: String? - - def initialize: ( - id: String, - name: String, - url: String, - ?description: String?, - ?moderation_action_id: String? - ) -> void - - def to_hash: -> { - id: String, - name: String, - url: String, - description: String?, - moderation_action_id: String? - } - end - type type_ = :AUTHOR_BLOCK | :AUTHOR_BLOCK_TEMP diff --git a/sig/moderation_api/models/action_retrieve_response.rbs b/sig/moderation_api/models/action_retrieve_response.rbs index efb81b4..fd68097 100644 --- a/sig/moderation_api/models/action_retrieve_response.rbs +++ b/sig/moderation_api/models/action_retrieve_response.rbs @@ -12,7 +12,6 @@ module ModerationAPI possible_values: ::Array[ModerationAPI::Models::ActionRetrieveResponse::PossibleValue], queue_behaviour: ModerationAPI::Models::ActionRetrieveResponse::queue_behaviour, value_required: bool, - webhooks: ::Array[ModerationAPI::Models::ActionRetrieveResponse::Webhook], description: String?, key: String?, type: ModerationAPI::Models::ActionRetrieveResponse::type_? @@ -39,8 +38,6 @@ module ModerationAPI attr_accessor value_required: bool - attr_accessor webhooks: ::Array[ModerationAPI::Models::ActionRetrieveResponse::Webhook] - attr_accessor description: String? attr_accessor key: String? @@ -58,7 +55,6 @@ module ModerationAPI possible_values: ::Array[ModerationAPI::Models::ActionRetrieveResponse::PossibleValue], queue_behaviour: ModerationAPI::Models::ActionRetrieveResponse::queue_behaviour, value_required: bool, - webhooks: ::Array[ModerationAPI::Models::ActionRetrieveResponse::Webhook], ?description: String?, ?key: String?, ?type: ModerationAPI::Models::ActionRetrieveResponse::type_? @@ -75,7 +71,6 @@ module ModerationAPI possible_values: ::Array[ModerationAPI::Models::ActionRetrieveResponse::PossibleValue], queue_behaviour: ModerationAPI::Models::ActionRetrieveResponse::queue_behaviour, value_required: bool, - webhooks: ::Array[ModerationAPI::Models::ActionRetrieveResponse::Webhook], description: String?, key: String?, type: ModerationAPI::Models::ActionRetrieveResponse::type_? @@ -115,43 +110,6 @@ module ModerationAPI def self?.values: -> ::Array[ModerationAPI::Models::ActionRetrieveResponse::queue_behaviour] end - type webhook = - { - id: String, - name: String, - url: String, - description: String?, - moderation_action_id: String? - } - - class Webhook < ModerationAPI::Internal::Type::BaseModel - attr_accessor id: String - - attr_accessor name: String - - attr_accessor url: String - - attr_accessor description: String? - - attr_accessor moderation_action_id: String? - - def initialize: ( - id: String, - name: String, - url: String, - ?description: String?, - ?moderation_action_id: String? - ) -> void - - def to_hash: -> { - id: String, - name: String, - url: String, - description: String?, - moderation_action_id: String? - } - end - type type_ = :AUTHOR_BLOCK | :AUTHOR_BLOCK_TEMP diff --git a/sig/moderation_api/models/action_update_params.rbs b/sig/moderation_api/models/action_update_params.rbs index cad1ccf..2503b03 100644 --- a/sig/moderation_api/models/action_update_params.rbs +++ b/sig/moderation_api/models/action_update_params.rbs @@ -13,8 +13,7 @@ module ModerationAPI possible_values: ::Array[ModerationAPI::ActionUpdateParams::PossibleValue], queue_behaviour: ModerationAPI::Models::ActionUpdateParams::queue_behaviour, type: ModerationAPI::Models::ActionUpdateParams::type_?, - value_required: bool, - webhooks: ::Array[ModerationAPI::ActionUpdateParams::Webhook] + value_required: bool } & ModerationAPI::Internal::Type::request_parameters @@ -66,12 +65,6 @@ module ModerationAPI def value_required=: (bool) -> bool - attr_reader webhooks: ::Array[ModerationAPI::ActionUpdateParams::Webhook]? - - def webhooks=: ( - ::Array[ModerationAPI::ActionUpdateParams::Webhook] - ) -> ::Array[ModerationAPI::ActionUpdateParams::Webhook] - def initialize: ( id: String, ?built_in: bool?, @@ -85,7 +78,6 @@ module ModerationAPI ?queue_behaviour: ModerationAPI::Models::ActionUpdateParams::queue_behaviour, ?type: ModerationAPI::Models::ActionUpdateParams::type_?, ?value_required: bool, - ?webhooks: ::Array[ModerationAPI::ActionUpdateParams::Webhook], ?request_options: ModerationAPI::request_opts ) -> void @@ -102,7 +94,6 @@ module ModerationAPI queue_behaviour: ModerationAPI::Models::ActionUpdateParams::queue_behaviour, type: ModerationAPI::Models::ActionUpdateParams::type_?, value_required: bool, - webhooks: ::Array[ModerationAPI::ActionUpdateParams::Webhook], request_options: ModerationAPI::RequestOptions } @@ -168,35 +159,6 @@ module ModerationAPI def self?.values: -> ::Array[ModerationAPI::Models::ActionUpdateParams::type_] end - - type webhook = - { name: String, url: String, id: String, description: String? } - - class Webhook < ModerationAPI::Internal::Type::BaseModel - attr_accessor name: String - - attr_accessor url: String - - attr_reader id: String? - - def id=: (String) -> String - - attr_accessor description: String? - - def initialize: ( - name: String, - url: String, - ?id: String, - ?description: String? - ) -> void - - def to_hash: -> { - name: String, - url: String, - id: String, - description: String? - } - end end end end diff --git a/sig/moderation_api/models/webhook_event.rbs b/sig/moderation_api/models/webhook_event.rbs new file mode 100644 index 0000000..7abdace --- /dev/null +++ b/sig/moderation_api/models/webhook_event.rbs @@ -0,0 +1,4746 @@ +module ModerationAPI + module Models + type webhook_event = + ModerationAPI::WebhookEvent::AuthorBlocked + | ModerationAPI::WebhookEvent::AuthorUnblocked + | ModerationAPI::WebhookEvent::AuthorSuspended + | ModerationAPI::WebhookEvent::AuthorUpdated + | ModerationAPI::WebhookEvent::AuthorTrustLevelChanged + | ModerationAPI::WebhookEvent::AuthorAction + | ModerationAPI::WebhookEvent::QueueItemCompleted + | ModerationAPI::WebhookEvent::QueueItemAction + | ModerationAPI::WebhookEvent::QueueItemRejected + | ModerationAPI::WebhookEvent::QueueItemAllowed + + module WebhookEvent + extend ModerationAPI::Internal::Type::Union + + type author_blocked = + { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorBlocked::Data, + type: :"author.blocked" + } + + class AuthorBlocked < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor api_version: :v2 + + attr_accessor created: Time + + attr_accessor data: ModerationAPI::WebhookEvent::AuthorBlocked::Data + + attr_accessor type: :"author.blocked" + + def initialize: ( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorBlocked::Data, + ?api_version: :v2, + ?type: :"author.blocked" + ) -> void + + def to_hash: -> { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorBlocked::Data, + type: :"author.blocked" + } + + type data = + { object: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object } + + class Data < ModerationAPI::Internal::Type::BaseModel + attr_accessor object: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object + + def initialize: ( + object: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object + ) -> void + + def to_hash: -> { + object: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object + } + + type object = + { + id: String, + author: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author, + created_at: Time, + key: String?, + name: String?, + value: String?, + queue: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Queue + } + + class Object < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor author: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author + + attr_accessor created_at: Time + + attr_accessor key: String? + + attr_accessor name: String? + + attr_accessor value: String? + + attr_reader queue: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Queue? + + def queue=: ( + ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Queue + ) -> ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Queue + + def initialize: ( + id: String, + author: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author, + created_at: Time, + key: String?, + name: String?, + value: String?, + ?queue: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Queue + ) -> void + + def to_hash: -> { + id: String, + author: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author, + created_at: Time, + key: String?, + name: String?, + value: String?, + queue: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Queue + } + + type author = + { + id: String, + block: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + class Author < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor block: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Block? + + attr_accessor first_seen: Float + + attr_accessor last_seen: Float + + attr_accessor metadata: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metadata + + attr_accessor metrics: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metrics + + attr_accessor risk_evaluation: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::RiskEvaluation? + + attr_accessor status: ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::status + + attr_accessor trust_level: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::TrustLevel + + attr_accessor company: String? + + attr_accessor email: String? + + attr_accessor external_id: String? + + attr_accessor external_link: String? + + attr_accessor last_incident: Float? + + attr_accessor name: String? + + attr_accessor profile_picture: String? + + def initialize: ( + id: String, + block: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::TrustLevel, + ?company: String?, + ?email: String?, + ?external_id: String?, + ?external_link: String?, + ?last_incident: Float?, + ?name: String?, + ?profile_picture: String? + ) -> void + + def to_hash: -> { + id: String, + block: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::AuthorBlocked::Data::Object::Author::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + type block = { reason: String?, until_: Float? } + + class Block < ModerationAPI::Internal::Type::BaseModel + attr_accessor reason: String? + + attr_accessor until_: Float? + + def initialize: (?reason: String?, ?until_: Float?) -> void + + def to_hash: -> { reason: String?, until_: Float? } + end + + type metadata = + { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + + class Metadata < ModerationAPI::Internal::Type::BaseModel + attr_accessor email_verified: bool? + + attr_accessor identity_verified: bool? + + attr_accessor is_paying_customer: bool? + + attr_accessor phone_verified: bool? + + def initialize: ( + ?email_verified: bool?, + ?identity_verified: bool?, + ?is_paying_customer: bool?, + ?phone_verified: bool? + ) -> void + + def to_hash: -> { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + end + + type metrics = + { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + + class Metrics < ModerationAPI::Internal::Type::BaseModel + attr_accessor flagged_content: Float + + attr_accessor total_content: Float + + attr_accessor average_sentiment: Float? + + def initialize: ( + flagged_content: Float, + total_content: Float, + ?average_sentiment: Float? + ) -> void + + def to_hash: -> { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + end + + type risk_evaluation = { risk_level: Float? } + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + attr_accessor risk_level: Float? + + def initialize: (?risk_level: Float?) -> void + + def to_hash: -> { risk_level: Float? } + end + + type status = :enabled | :suspended | :blocked + + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED: :enabled + SUSPENDED: :suspended + BLOCKED: :blocked + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::AuthorBlocked::Data::Object::Author::status] + end + + type trust_level = { level: Float, manual: bool } + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + attr_accessor level: Float + + attr_accessor manual: bool + + def initialize: (level: Float, manual: bool) -> void + + def to_hash: -> { level: Float, manual: bool } + end + end + + type queue = { id: String } + + class Queue < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + def initialize: (id: String) -> void + + def to_hash: -> { id: String } + end + end + end + end + + type author_unblocked = + { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorUnblocked::Data, + type: :"author.unblocked" + } + + class AuthorUnblocked < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor api_version: :v2 + + attr_accessor created: Time + + attr_accessor data: ModerationAPI::WebhookEvent::AuthorUnblocked::Data + + attr_accessor type: :"author.unblocked" + + def initialize: ( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorUnblocked::Data, + ?api_version: :v2, + ?type: :"author.unblocked" + ) -> void + + def to_hash: -> { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorUnblocked::Data, + type: :"author.unblocked" + } + + type data = + { object: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object } + + class Data < ModerationAPI::Internal::Type::BaseModel + attr_accessor object: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object + + def initialize: ( + object: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object + ) -> void + + def to_hash: -> { + object: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object + } + + type object = + { + id: String, + author: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author, + created_at: Time, + key: String?, + name: String?, + value: String?, + queue: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Queue + } + + class Object < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor author: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author + + attr_accessor created_at: Time + + attr_accessor key: String? + + attr_accessor name: String? + + attr_accessor value: String? + + attr_reader queue: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Queue? + + def queue=: ( + ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Queue + ) -> ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Queue + + def initialize: ( + id: String, + author: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author, + created_at: Time, + key: String?, + name: String?, + value: String?, + ?queue: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Queue + ) -> void + + def to_hash: -> { + id: String, + author: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author, + created_at: Time, + key: String?, + name: String?, + value: String?, + queue: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Queue + } + + type author = + { + id: String, + block: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + class Author < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor block: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Block? + + attr_accessor first_seen: Float + + attr_accessor last_seen: Float + + attr_accessor metadata: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metadata + + attr_accessor metrics: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metrics + + attr_accessor risk_evaluation: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::RiskEvaluation? + + attr_accessor status: ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::status + + attr_accessor trust_level: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::TrustLevel + + attr_accessor company: String? + + attr_accessor email: String? + + attr_accessor external_id: String? + + attr_accessor external_link: String? + + attr_accessor last_incident: Float? + + attr_accessor name: String? + + attr_accessor profile_picture: String? + + def initialize: ( + id: String, + block: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::TrustLevel, + ?company: String?, + ?email: String?, + ?external_id: String?, + ?external_link: String?, + ?last_incident: Float?, + ?name: String?, + ?profile_picture: String? + ) -> void + + def to_hash: -> { + id: String, + block: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::AuthorUnblocked::Data::Object::Author::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + type block = { reason: String?, until_: Float? } + + class Block < ModerationAPI::Internal::Type::BaseModel + attr_accessor reason: String? + + attr_accessor until_: Float? + + def initialize: (?reason: String?, ?until_: Float?) -> void + + def to_hash: -> { reason: String?, until_: Float? } + end + + type metadata = + { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + + class Metadata < ModerationAPI::Internal::Type::BaseModel + attr_accessor email_verified: bool? + + attr_accessor identity_verified: bool? + + attr_accessor is_paying_customer: bool? + + attr_accessor phone_verified: bool? + + def initialize: ( + ?email_verified: bool?, + ?identity_verified: bool?, + ?is_paying_customer: bool?, + ?phone_verified: bool? + ) -> void + + def to_hash: -> { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + end + + type metrics = + { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + + class Metrics < ModerationAPI::Internal::Type::BaseModel + attr_accessor flagged_content: Float + + attr_accessor total_content: Float + + attr_accessor average_sentiment: Float? + + def initialize: ( + flagged_content: Float, + total_content: Float, + ?average_sentiment: Float? + ) -> void + + def to_hash: -> { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + end + + type risk_evaluation = { risk_level: Float? } + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + attr_accessor risk_level: Float? + + def initialize: (?risk_level: Float?) -> void + + def to_hash: -> { risk_level: Float? } + end + + type status = :enabled | :suspended | :blocked + + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED: :enabled + SUSPENDED: :suspended + BLOCKED: :blocked + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::AuthorUnblocked::Data::Object::Author::status] + end + + type trust_level = { level: Float, manual: bool } + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + attr_accessor level: Float + + attr_accessor manual: bool + + def initialize: (level: Float, manual: bool) -> void + + def to_hash: -> { level: Float, manual: bool } + end + end + + type queue = { id: String } + + class Queue < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + def initialize: (id: String) -> void + + def to_hash: -> { id: String } + end + end + end + end + + type author_suspended = + { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorSuspended::Data, + type: :"author.suspended" + } + + class AuthorSuspended < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor api_version: :v2 + + attr_accessor created: Time + + attr_accessor data: ModerationAPI::WebhookEvent::AuthorSuspended::Data + + attr_accessor type: :"author.suspended" + + def initialize: ( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorSuspended::Data, + ?api_version: :v2, + ?type: :"author.suspended" + ) -> void + + def to_hash: -> { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorSuspended::Data, + type: :"author.suspended" + } + + type data = + { object: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object } + + class Data < ModerationAPI::Internal::Type::BaseModel + attr_accessor object: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object + + def initialize: ( + object: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object + ) -> void + + def to_hash: -> { + object: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object + } + + type object = + { + id: String, + author: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author, + created_at: Time, + key: String?, + name: String?, + value: String?, + queue: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Queue + } + + class Object < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor author: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author + + attr_accessor created_at: Time + + attr_accessor key: String? + + attr_accessor name: String? + + attr_accessor value: String? + + attr_reader queue: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Queue? + + def queue=: ( + ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Queue + ) -> ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Queue + + def initialize: ( + id: String, + author: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author, + created_at: Time, + key: String?, + name: String?, + value: String?, + ?queue: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Queue + ) -> void + + def to_hash: -> { + id: String, + author: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author, + created_at: Time, + key: String?, + name: String?, + value: String?, + queue: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Queue + } + + type author = + { + id: String, + block: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + class Author < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor block: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Block? + + attr_accessor first_seen: Float + + attr_accessor last_seen: Float + + attr_accessor metadata: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metadata + + attr_accessor metrics: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metrics + + attr_accessor risk_evaluation: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::RiskEvaluation? + + attr_accessor status: ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::status + + attr_accessor trust_level: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::TrustLevel + + attr_accessor company: String? + + attr_accessor email: String? + + attr_accessor external_id: String? + + attr_accessor external_link: String? + + attr_accessor last_incident: Float? + + attr_accessor name: String? + + attr_accessor profile_picture: String? + + def initialize: ( + id: String, + block: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::TrustLevel, + ?company: String?, + ?email: String?, + ?external_id: String?, + ?external_link: String?, + ?last_incident: Float?, + ?name: String?, + ?profile_picture: String? + ) -> void + + def to_hash: -> { + id: String, + block: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::AuthorSuspended::Data::Object::Author::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + type block = { reason: String?, until_: Float? } + + class Block < ModerationAPI::Internal::Type::BaseModel + attr_accessor reason: String? + + attr_accessor until_: Float? + + def initialize: (?reason: String?, ?until_: Float?) -> void + + def to_hash: -> { reason: String?, until_: Float? } + end + + type metadata = + { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + + class Metadata < ModerationAPI::Internal::Type::BaseModel + attr_accessor email_verified: bool? + + attr_accessor identity_verified: bool? + + attr_accessor is_paying_customer: bool? + + attr_accessor phone_verified: bool? + + def initialize: ( + ?email_verified: bool?, + ?identity_verified: bool?, + ?is_paying_customer: bool?, + ?phone_verified: bool? + ) -> void + + def to_hash: -> { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + end + + type metrics = + { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + + class Metrics < ModerationAPI::Internal::Type::BaseModel + attr_accessor flagged_content: Float + + attr_accessor total_content: Float + + attr_accessor average_sentiment: Float? + + def initialize: ( + flagged_content: Float, + total_content: Float, + ?average_sentiment: Float? + ) -> void + + def to_hash: -> { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + end + + type risk_evaluation = { risk_level: Float? } + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + attr_accessor risk_level: Float? + + def initialize: (?risk_level: Float?) -> void + + def to_hash: -> { risk_level: Float? } + end + + type status = :enabled | :suspended | :blocked + + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED: :enabled + SUSPENDED: :suspended + BLOCKED: :blocked + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::AuthorSuspended::Data::Object::Author::status] + end + + type trust_level = { level: Float, manual: bool } + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + attr_accessor level: Float + + attr_accessor manual: bool + + def initialize: (level: Float, manual: bool) -> void + + def to_hash: -> { level: Float, manual: bool } + end + end + + type queue = { id: String } + + class Queue < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + def initialize: (id: String) -> void + + def to_hash: -> { id: String } + end + end + end + end + + type author_updated = + { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorUpdated::Data, + type: :"author.updated" + } + + class AuthorUpdated < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor api_version: :v2 + + attr_accessor created: Time + + attr_accessor data: ModerationAPI::WebhookEvent::AuthorUpdated::Data + + attr_accessor type: :"author.updated" + + def initialize: ( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorUpdated::Data, + ?api_version: :v2, + ?type: :"author.updated" + ) -> void + + def to_hash: -> { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorUpdated::Data, + type: :"author.updated" + } + + type data = + { object: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object } + + class Data < ModerationAPI::Internal::Type::BaseModel + attr_accessor object: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object + + def initialize: ( + object: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object + ) -> void + + def to_hash: -> { + object: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object + } + + type object = + { + id: String, + block: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::status, + trust_level: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + class Object < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor block: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Block? + + attr_accessor first_seen: Float + + attr_accessor last_seen: Float + + attr_accessor metadata: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metadata + + attr_accessor metrics: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metrics + + attr_accessor risk_evaluation: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::RiskEvaluation? + + attr_accessor status: ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::status + + attr_accessor trust_level: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::TrustLevel + + attr_accessor company: String? + + attr_accessor email: String? + + attr_accessor external_id: String? + + attr_accessor external_link: String? + + attr_accessor last_incident: Float? + + attr_accessor name: String? + + attr_accessor profile_picture: String? + + def initialize: ( + id: String, + block: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::status, + trust_level: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::TrustLevel, + ?company: String?, + ?email: String?, + ?external_id: String?, + ?external_link: String?, + ?last_incident: Float?, + ?name: String?, + ?profile_picture: String? + ) -> void + + def to_hash: -> { + id: String, + block: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::status, + trust_level: ModerationAPI::WebhookEvent::AuthorUpdated::Data::Object::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + type block = { reason: String?, until_: Float? } + + class Block < ModerationAPI::Internal::Type::BaseModel + attr_accessor reason: String? + + attr_accessor until_: Float? + + def initialize: (?reason: String?, ?until_: Float?) -> void + + def to_hash: -> { reason: String?, until_: Float? } + end + + type metadata = + { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + + class Metadata < ModerationAPI::Internal::Type::BaseModel + attr_accessor email_verified: bool? + + attr_accessor identity_verified: bool? + + attr_accessor is_paying_customer: bool? + + attr_accessor phone_verified: bool? + + def initialize: ( + ?email_verified: bool?, + ?identity_verified: bool?, + ?is_paying_customer: bool?, + ?phone_verified: bool? + ) -> void + + def to_hash: -> { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + end + + type metrics = + { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + + class Metrics < ModerationAPI::Internal::Type::BaseModel + attr_accessor flagged_content: Float + + attr_accessor total_content: Float + + attr_accessor average_sentiment: Float? + + def initialize: ( + flagged_content: Float, + total_content: Float, + ?average_sentiment: Float? + ) -> void + + def to_hash: -> { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + end + + type risk_evaluation = { risk_level: Float? } + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + attr_accessor risk_level: Float? + + def initialize: (?risk_level: Float?) -> void + + def to_hash: -> { risk_level: Float? } + end + + type status = :enabled | :suspended | :blocked + + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED: :enabled + SUSPENDED: :suspended + BLOCKED: :blocked + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::AuthorUpdated::Data::Object::status] + end + + type trust_level = { level: Float, manual: bool } + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + attr_accessor level: Float + + attr_accessor manual: bool + + def initialize: (level: Float, manual: bool) -> void + + def to_hash: -> { level: Float, manual: bool } + end + end + end + end + + type author_trust_level_changed = + { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data, + type: :"author.trust_level_changed" + } + + class AuthorTrustLevelChanged < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor api_version: :v2 + + attr_accessor created: Time + + attr_accessor data: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data + + attr_accessor type: :"author.trust_level_changed" + + def initialize: ( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data, + ?api_version: :v2, + ?type: :"author.trust_level_changed" + ) -> void + + def to_hash: -> { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data, + type: :"author.trust_level_changed" + } + + type data = + { + object: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object + } + + class Data < ModerationAPI::Internal::Type::BaseModel + attr_accessor object: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object + + def initialize: ( + object: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object + ) -> void + + def to_hash: -> { + object: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object + } + + type object = + { + id: String, + block: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::status, + trust_level: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + class Object < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor block: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Block? + + attr_accessor first_seen: Float + + attr_accessor last_seen: Float + + attr_accessor metadata: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metadata + + attr_accessor metrics: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metrics + + attr_accessor risk_evaluation: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::RiskEvaluation? + + attr_accessor status: ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::status + + attr_accessor trust_level: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::TrustLevel + + attr_accessor company: String? + + attr_accessor email: String? + + attr_accessor external_id: String? + + attr_accessor external_link: String? + + attr_accessor last_incident: Float? + + attr_accessor name: String? + + attr_accessor profile_picture: String? + + def initialize: ( + id: String, + block: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::status, + trust_level: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::TrustLevel, + ?company: String?, + ?email: String?, + ?external_id: String?, + ?external_link: String?, + ?last_incident: Float?, + ?name: String?, + ?profile_picture: String? + ) -> void + + def to_hash: -> { + id: String, + block: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::status, + trust_level: ModerationAPI::WebhookEvent::AuthorTrustLevelChanged::Data::Object::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + type block = { reason: String?, until_: Float? } + + class Block < ModerationAPI::Internal::Type::BaseModel + attr_accessor reason: String? + + attr_accessor until_: Float? + + def initialize: (?reason: String?, ?until_: Float?) -> void + + def to_hash: -> { reason: String?, until_: Float? } + end + + type metadata = + { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + + class Metadata < ModerationAPI::Internal::Type::BaseModel + attr_accessor email_verified: bool? + + attr_accessor identity_verified: bool? + + attr_accessor is_paying_customer: bool? + + attr_accessor phone_verified: bool? + + def initialize: ( + ?email_verified: bool?, + ?identity_verified: bool?, + ?is_paying_customer: bool?, + ?phone_verified: bool? + ) -> void + + def to_hash: -> { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + end + + type metrics = + { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + + class Metrics < ModerationAPI::Internal::Type::BaseModel + attr_accessor flagged_content: Float + + attr_accessor total_content: Float + + attr_accessor average_sentiment: Float? + + def initialize: ( + flagged_content: Float, + total_content: Float, + ?average_sentiment: Float? + ) -> void + + def to_hash: -> { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + end + + type risk_evaluation = { risk_level: Float? } + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + attr_accessor risk_level: Float? + + def initialize: (?risk_level: Float?) -> void + + def to_hash: -> { risk_level: Float? } + end + + type status = :enabled | :suspended | :blocked + + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED: :enabled + SUSPENDED: :suspended + BLOCKED: :blocked + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::AuthorTrustLevelChanged::Data::Object::status] + end + + type trust_level = { level: Float, manual: bool } + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + attr_accessor level: Float + + attr_accessor manual: bool + + def initialize: (level: Float, manual: bool) -> void + + def to_hash: -> { level: Float, manual: bool } + end + end + end + end + + type author_action = + { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorAction::Data, + type: :"author.action" + } + + class AuthorAction < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor api_version: :v2 + + attr_accessor created: Time + + attr_accessor data: ModerationAPI::WebhookEvent::AuthorAction::Data + + attr_accessor type: :"author.action" + + def initialize: ( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorAction::Data, + ?api_version: :v2, + ?type: :"author.action" + ) -> void + + def to_hash: -> { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::AuthorAction::Data, + type: :"author.action" + } + + type data = + { object: ModerationAPI::WebhookEvent::AuthorAction::Data::Object } + + class Data < ModerationAPI::Internal::Type::BaseModel + attr_accessor object: ModerationAPI::WebhookEvent::AuthorAction::Data::Object + + def initialize: ( + object: ModerationAPI::WebhookEvent::AuthorAction::Data::Object + ) -> void + + def to_hash: -> { + object: ModerationAPI::WebhookEvent::AuthorAction::Data::Object + } + + type object = + { + id: String, + author: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author, + created_at: Time, + key: String?, + name: String?, + value: String?, + queue: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Queue + } + + class Object < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor author: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author + + attr_accessor created_at: Time + + attr_accessor key: String? + + attr_accessor name: String? + + attr_accessor value: String? + + attr_reader queue: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Queue? + + def queue=: ( + ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Queue + ) -> ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Queue + + def initialize: ( + id: String, + author: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author, + created_at: Time, + key: String?, + name: String?, + value: String?, + ?queue: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Queue + ) -> void + + def to_hash: -> { + id: String, + author: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author, + created_at: Time, + key: String?, + name: String?, + value: String?, + queue: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Queue + } + + type author = + { + id: String, + block: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + class Author < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor block: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Block? + + attr_accessor first_seen: Float + + attr_accessor last_seen: Float + + attr_accessor metadata: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metadata + + attr_accessor metrics: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metrics + + attr_accessor risk_evaluation: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::RiskEvaluation? + + attr_accessor status: ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::status + + attr_accessor trust_level: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::TrustLevel + + attr_accessor company: String? + + attr_accessor email: String? + + attr_accessor external_id: String? + + attr_accessor external_link: String? + + attr_accessor last_incident: Float? + + attr_accessor name: String? + + attr_accessor profile_picture: String? + + def initialize: ( + id: String, + block: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::TrustLevel, + ?company: String?, + ?email: String?, + ?external_id: String?, + ?external_link: String?, + ?last_incident: Float?, + ?name: String?, + ?profile_picture: String? + ) -> void + + def to_hash: -> { + id: String, + block: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::AuthorAction::Data::Object::Author::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + type block = { reason: String?, until_: Float? } + + class Block < ModerationAPI::Internal::Type::BaseModel + attr_accessor reason: String? + + attr_accessor until_: Float? + + def initialize: (?reason: String?, ?until_: Float?) -> void + + def to_hash: -> { reason: String?, until_: Float? } + end + + type metadata = + { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + + class Metadata < ModerationAPI::Internal::Type::BaseModel + attr_accessor email_verified: bool? + + attr_accessor identity_verified: bool? + + attr_accessor is_paying_customer: bool? + + attr_accessor phone_verified: bool? + + def initialize: ( + ?email_verified: bool?, + ?identity_verified: bool?, + ?is_paying_customer: bool?, + ?phone_verified: bool? + ) -> void + + def to_hash: -> { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + end + + type metrics = + { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + + class Metrics < ModerationAPI::Internal::Type::BaseModel + attr_accessor flagged_content: Float + + attr_accessor total_content: Float + + attr_accessor average_sentiment: Float? + + def initialize: ( + flagged_content: Float, + total_content: Float, + ?average_sentiment: Float? + ) -> void + + def to_hash: -> { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + end + + type risk_evaluation = { risk_level: Float? } + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + attr_accessor risk_level: Float? + + def initialize: (?risk_level: Float?) -> void + + def to_hash: -> { risk_level: Float? } + end + + type status = :enabled | :suspended | :blocked + + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED: :enabled + SUSPENDED: :suspended + BLOCKED: :blocked + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::AuthorAction::Data::Object::Author::status] + end + + type trust_level = { level: Float, manual: bool } + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + attr_accessor level: Float + + attr_accessor manual: bool + + def initialize: (level: Float, manual: bool) -> void + + def to_hash: -> { level: Float, manual: bool } + end + end + + type queue = { id: String } + + class Queue < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + def initialize: (id: String) -> void + + def to_hash: -> { id: String } + end + end + end + end + + type queue_item_completed = + { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemCompleted::Data, + type: :"queue_item.completed" + } + + class QueueItemCompleted < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor api_version: :v2 + + attr_accessor created: Time + + attr_accessor data: ModerationAPI::WebhookEvent::QueueItemCompleted::Data + + attr_accessor type: :"queue_item.completed" + + def initialize: ( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemCompleted::Data, + ?api_version: :v2, + ?type: :"queue_item.completed" + ) -> void + + def to_hash: -> { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemCompleted::Data, + type: :"queue_item.completed" + } + + type data = + { + object: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object + } + + class Data < ModerationAPI::Internal::Type::BaseModel + attr_accessor object: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object + + def initialize: ( + object: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object + ) -> void + + def to_hash: -> { + object: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object + } + + type object = + { + item: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item, + author: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author, + queue: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Queue + } + + class Object < ModerationAPI::Internal::Type::BaseModel + attr_accessor item: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item + + attr_reader author: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author? + + def author=: ( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author + ) -> ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author + + attr_reader queue: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Queue? + + def queue=: ( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Queue + ) -> ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Queue + + def initialize: ( + item: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item, + ?author: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author, + ?queue: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Queue + ) -> void + + def to_hash: -> { + item: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item, + author: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author, + queue: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Queue + } + + type item = + { + id: String, + author_id: String?, + channel_key: String?, + content: ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::content, + conversation_id: String?, + flagged: bool?, + labels: ::Array[ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label]?, + language: String?, + meta_type: ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::meta_type?, + metadata: ::Hash[Symbol, top]?, + timestamp: Time + } + + class Item < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor author_id: String? + + attr_accessor channel_key: String? + + attr_accessor content: ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::content + + attr_accessor conversation_id: String? + + attr_accessor flagged: bool? + + attr_accessor labels: ::Array[ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label]? + + attr_accessor language: String? + + attr_accessor meta_type: ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::meta_type? + + attr_accessor metadata: ::Hash[Symbol, top]? + + attr_accessor timestamp: Time + + def initialize: ( + id: String, + author_id: String?, + channel_key: String?, + content: ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::content, + conversation_id: String?, + flagged: bool?, + labels: ::Array[ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label]?, + language: String?, + meta_type: ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::meta_type?, + metadata: ::Hash[Symbol, top]?, + timestamp: Time + ) -> void + + def to_hash: -> { + id: String, + author_id: String?, + channel_key: String?, + content: ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::content, + conversation_id: String?, + flagged: bool?, + labels: ::Array[ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label]?, + language: String?, + meta_type: ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::meta_type?, + metadata: ::Hash[Symbol, top]?, + timestamp: Time + } + + type content = + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Text + | ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Image + | ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Video + | ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Audio + | ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object + + module Content + extend ModerationAPI::Internal::Type::Union + + type text = { text: String, type: :text } + + class Text < ModerationAPI::Internal::Type::BaseModel + attr_accessor text: String + + attr_accessor type: :text + + def initialize: (text: String, ?type: :text) -> void + + def to_hash: -> { text: String, type: :text } + end + + type image = { type: :image, data: String, url: String } + + class Image < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :image + + attr_reader data: String? + + def data=: (String) -> String + + attr_reader url: String? + + def url=: (String) -> String + + def initialize: ( + ?data: String, + ?url: String, + ?type: :image + ) -> void + + def to_hash: -> { type: :image, data: String, url: String } + end + + type video = { type: :video, url: String } + + class Video < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :video + + attr_accessor url: String + + def initialize: (url: String, ?type: :video) -> void + + def to_hash: -> { type: :video, url: String } + end + + type audio = { type: :audio, url: String } + + class Audio < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :audio + + attr_accessor url: String + + def initialize: (url: String, ?type: :audio) -> void + + def to_hash: -> { type: :audio, url: String } + end + + type object = + { + data: ::Hash[Symbol, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::data], + type: :object + } + + class Object < ModerationAPI::Internal::Type::BaseModel + attr_accessor data: ::Hash[Symbol, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::data] + + attr_accessor type: :object + + def initialize: ( + data: ::Hash[Symbol, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::data], + ?type: :object + ) -> void + + def to_hash: -> { + data: ::Hash[Symbol, ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::data], + type: :object + } + + type data = + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Text + | ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Image + | ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Video + | ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::Data::Audio + + module Data + extend ModerationAPI::Internal::Type::Union + + type text = { text: String, type: :text } + + class Text < ModerationAPI::Internal::Type::BaseModel + attr_accessor text: String + + attr_accessor type: :text + + def initialize: (text: String, ?type: :text) -> void + + def to_hash: -> { text: String, type: :text } + end + + type image = { type: :image, data: String, url: String } + + class Image < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :image + + attr_reader data: String? + + def data=: (String) -> String + + attr_reader url: String? + + def url=: (String) -> String + + def initialize: ( + ?data: String, + ?url: String, + ?type: :image + ) -> void + + def to_hash: -> { + type: :image, + data: String, + url: String + } + end + + type video = { type: :video, url: String } + + class Video < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :video + + attr_accessor url: String + + def initialize: (url: String, ?type: :video) -> void + + def to_hash: -> { type: :video, url: String } + end + + type audio = { type: :audio, url: String } + + class Audio < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :audio + + attr_accessor url: String + + def initialize: (url: String, ?type: :audio) -> void + + def to_hash: -> { type: :audio, url: String } + end + + def self?.variants: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::Content::Object::data] + end + end + + def self?.variants: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::content] + end + + type label = + { + label: String, + score: Float, + flagged: bool, + manual: bool, + matches: ::Array[ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match] + } + + class Label < ModerationAPI::Internal::Type::BaseModel + attr_accessor label: String + + attr_accessor score: Float + + attr_reader flagged: bool? + + def flagged=: (bool) -> bool + + attr_reader manual: bool? + + def manual=: (bool) -> bool + + attr_reader matches: ::Array[ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match]? + + def matches=: ( + ::Array[ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match] + ) -> ::Array[ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match] + + def initialize: ( + label: String, + score: Float, + ?flagged: bool, + ?manual: bool, + ?matches: ::Array[ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match] + ) -> void + + def to_hash: -> { + label: String, + score: Float, + flagged: bool, + manual: bool, + matches: ::Array[ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match] + } + + type match = + { + match: String, + probability: Float, + span: ::Array[top], + entity_type: String, + mask: String?, + reasons: ::Array[String], + signals: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals + } + + class Match < ModerationAPI::Internal::Type::BaseModel + attr_accessor match: String + + attr_accessor probability: Float + + attr_accessor span: ::Array[top] + + attr_reader entity_type: String? + + def entity_type=: (String) -> String + + attr_accessor mask: String? + + attr_reader reasons: ::Array[String]? + + def reasons=: (::Array[String]) -> ::Array[String] + + attr_reader signals: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals? + + def signals=: ( + ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals + ) -> ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals + + def initialize: ( + match: String, + probability: Float, + span: ::Array[top], + ?entity_type: String, + ?mask: String?, + ?reasons: ::Array[String], + ?signals: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals + ) -> void + + def to_hash: -> { + match: String, + probability: Float, + span: ::Array[top], + entity_type: String, + mask: String?, + reasons: ::Array[String], + signals: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals + } + + type signals = + { + bot_protection: bool?, + brand_impersonation: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals::BrandImpersonation?, + domain_age_days: Float?, + final_url: String?, + has_email_setup: bool?, + has_suspicious_characters: bool, + is_link_shortener: bool, + is_reported: bool, + redirect_count: Float? + } + + class Signals < ModerationAPI::Internal::Type::BaseModel + attr_accessor bot_protection: bool? + + attr_accessor brand_impersonation: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals::BrandImpersonation? + + attr_accessor domain_age_days: Float? + + attr_accessor final_url: String? + + attr_accessor has_email_setup: bool? + + attr_accessor has_suspicious_characters: bool + + attr_accessor is_link_shortener: bool + + attr_accessor is_reported: bool + + attr_accessor redirect_count: Float? + + def initialize: ( + bot_protection: bool?, + brand_impersonation: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals::BrandImpersonation?, + domain_age_days: Float?, + final_url: String?, + has_email_setup: bool?, + has_suspicious_characters: bool, + is_link_shortener: bool, + is_reported: bool, + redirect_count: Float? + ) -> void + + def to_hash: -> { + bot_protection: bool?, + brand_impersonation: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Item::Label::Match::Signals::BrandImpersonation?, + domain_age_days: Float?, + final_url: String?, + has_email_setup: bool?, + has_suspicious_characters: bool, + is_link_shortener: bool, + is_reported: bool, + redirect_count: Float? + } + + type brand_impersonation = + { brand: String, method_: String } + + class BrandImpersonation < ModerationAPI::Internal::Type::BaseModel + attr_accessor brand: String + + attr_accessor method_: String + + def initialize: (brand: String, method_: String) -> void + + def to_hash: -> { brand: String, method_: String } + end + end + end + end + + type meta_type = + :profile + | :message + | :post + | :comment + | :event + | :product + | :review + | :other + + module MetaType + extend ModerationAPI::Internal::Type::Enum + + PROFILE: :profile + MESSAGE: :message + POST: :post + COMMENT: :comment + EVENT: :event + PRODUCT: :product + REVIEW: :review + OTHER: :other + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Item::meta_type] + end + end + + type author = + { + id: String, + block: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + class Author < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor block: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Block? + + attr_accessor first_seen: Float + + attr_accessor last_seen: Float + + attr_accessor metadata: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metadata + + attr_accessor metrics: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metrics + + attr_accessor risk_evaluation: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::RiskEvaluation? + + attr_accessor status: ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::status + + attr_accessor trust_level: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::TrustLevel + + attr_accessor company: String? + + attr_accessor email: String? + + attr_accessor external_id: String? + + attr_accessor external_link: String? + + attr_accessor last_incident: Float? + + attr_accessor name: String? + + attr_accessor profile_picture: String? + + def initialize: ( + id: String, + block: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::TrustLevel, + ?company: String?, + ?email: String?, + ?external_id: String?, + ?external_link: String?, + ?last_incident: Float?, + ?name: String?, + ?profile_picture: String? + ) -> void + + def to_hash: -> { + id: String, + block: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::QueueItemCompleted::Data::Object::Author::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + type block = { reason: String?, until_: Float? } + + class Block < ModerationAPI::Internal::Type::BaseModel + attr_accessor reason: String? + + attr_accessor until_: Float? + + def initialize: (?reason: String?, ?until_: Float?) -> void + + def to_hash: -> { reason: String?, until_: Float? } + end + + type metadata = + { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + + class Metadata < ModerationAPI::Internal::Type::BaseModel + attr_accessor email_verified: bool? + + attr_accessor identity_verified: bool? + + attr_accessor is_paying_customer: bool? + + attr_accessor phone_verified: bool? + + def initialize: ( + ?email_verified: bool?, + ?identity_verified: bool?, + ?is_paying_customer: bool?, + ?phone_verified: bool? + ) -> void + + def to_hash: -> { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + end + + type metrics = + { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + + class Metrics < ModerationAPI::Internal::Type::BaseModel + attr_accessor flagged_content: Float + + attr_accessor total_content: Float + + attr_accessor average_sentiment: Float? + + def initialize: ( + flagged_content: Float, + total_content: Float, + ?average_sentiment: Float? + ) -> void + + def to_hash: -> { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + end + + type risk_evaluation = { risk_level: Float? } + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + attr_accessor risk_level: Float? + + def initialize: (?risk_level: Float?) -> void + + def to_hash: -> { risk_level: Float? } + end + + type status = :enabled | :suspended | :blocked + + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED: :enabled + SUSPENDED: :suspended + BLOCKED: :blocked + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemCompleted::Data::Object::Author::status] + end + + type trust_level = { level: Float, manual: bool } + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + attr_accessor level: Float + + attr_accessor manual: bool + + def initialize: (level: Float, manual: bool) -> void + + def to_hash: -> { level: Float, manual: bool } + end + end + + type queue = { id: String } + + class Queue < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + def initialize: (id: String) -> void + + def to_hash: -> { id: String } + end + end + end + end + + type queue_item_action = + { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemAction::Data, + type: :"queue_item.action" + } + + class QueueItemAction < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor api_version: :v2 + + attr_accessor created: Time + + attr_accessor data: ModerationAPI::WebhookEvent::QueueItemAction::Data + + attr_accessor type: :"queue_item.action" + + def initialize: ( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemAction::Data, + ?api_version: :v2, + ?type: :"queue_item.action" + ) -> void + + def to_hash: -> { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemAction::Data, + type: :"queue_item.action" + } + + type data = + { object: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object } + + class Data < ModerationAPI::Internal::Type::BaseModel + attr_accessor object: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object + + def initialize: ( + object: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object + ) -> void + + def to_hash: -> { + object: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object + } + + type object = + { + id: String, + created_at: Time, + key: String?, + name: String?, + value: String?, + author: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author, + item: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item, + queue: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Queue + } + + class Object < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor created_at: Time + + attr_accessor key: String? + + attr_accessor name: String? + + attr_accessor value: String? + + attr_reader author: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author? + + def author=: ( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author + ) -> ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author + + attr_reader item: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item? + + def item=: ( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item + ) -> ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item + + attr_reader queue: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Queue? + + def queue=: ( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Queue + ) -> ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Queue + + def initialize: ( + id: String, + created_at: Time, + key: String?, + name: String?, + value: String?, + ?author: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author, + ?item: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item, + ?queue: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Queue + ) -> void + + def to_hash: -> { + id: String, + created_at: Time, + key: String?, + name: String?, + value: String?, + author: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author, + item: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item, + queue: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Queue + } + + type author = + { + id: String, + block: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + class Author < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor block: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Block? + + attr_accessor first_seen: Float + + attr_accessor last_seen: Float + + attr_accessor metadata: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metadata + + attr_accessor metrics: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metrics + + attr_accessor risk_evaluation: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::RiskEvaluation? + + attr_accessor status: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::status + + attr_accessor trust_level: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::TrustLevel + + attr_accessor company: String? + + attr_accessor email: String? + + attr_accessor external_id: String? + + attr_accessor external_link: String? + + attr_accessor last_incident: Float? + + attr_accessor name: String? + + attr_accessor profile_picture: String? + + def initialize: ( + id: String, + block: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::TrustLevel, + ?company: String?, + ?email: String?, + ?external_id: String?, + ?external_link: String?, + ?last_incident: Float?, + ?name: String?, + ?profile_picture: String? + ) -> void + + def to_hash: -> { + id: String, + block: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Author::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + type block = { reason: String?, until_: Float? } + + class Block < ModerationAPI::Internal::Type::BaseModel + attr_accessor reason: String? + + attr_accessor until_: Float? + + def initialize: (?reason: String?, ?until_: Float?) -> void + + def to_hash: -> { reason: String?, until_: Float? } + end + + type metadata = + { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + + class Metadata < ModerationAPI::Internal::Type::BaseModel + attr_accessor email_verified: bool? + + attr_accessor identity_verified: bool? + + attr_accessor is_paying_customer: bool? + + attr_accessor phone_verified: bool? + + def initialize: ( + ?email_verified: bool?, + ?identity_verified: bool?, + ?is_paying_customer: bool?, + ?phone_verified: bool? + ) -> void + + def to_hash: -> { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + end + + type metrics = + { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + + class Metrics < ModerationAPI::Internal::Type::BaseModel + attr_accessor flagged_content: Float + + attr_accessor total_content: Float + + attr_accessor average_sentiment: Float? + + def initialize: ( + flagged_content: Float, + total_content: Float, + ?average_sentiment: Float? + ) -> void + + def to_hash: -> { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + end + + type risk_evaluation = { risk_level: Float? } + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + attr_accessor risk_level: Float? + + def initialize: (?risk_level: Float?) -> void + + def to_hash: -> { risk_level: Float? } + end + + type status = :enabled | :suspended | :blocked + + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED: :enabled + SUSPENDED: :suspended + BLOCKED: :blocked + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Author::status] + end + + type trust_level = { level: Float, manual: bool } + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + attr_accessor level: Float + + attr_accessor manual: bool + + def initialize: (level: Float, manual: bool) -> void + + def to_hash: -> { level: Float, manual: bool } + end + end + + type item = + { + id: String, + author_id: String?, + channel_key: String?, + content: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::content, + conversation_id: String?, + flagged: bool?, + labels: ::Array[ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label]?, + language: String?, + meta_type: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::meta_type?, + metadata: ::Hash[Symbol, top]?, + timestamp: Time + } + + class Item < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor author_id: String? + + attr_accessor channel_key: String? + + attr_accessor content: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::content + + attr_accessor conversation_id: String? + + attr_accessor flagged: bool? + + attr_accessor labels: ::Array[ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label]? + + attr_accessor language: String? + + attr_accessor meta_type: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::meta_type? + + attr_accessor metadata: ::Hash[Symbol, top]? + + attr_accessor timestamp: Time + + def initialize: ( + id: String, + author_id: String?, + channel_key: String?, + content: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::content, + conversation_id: String?, + flagged: bool?, + labels: ::Array[ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label]?, + language: String?, + meta_type: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::meta_type?, + metadata: ::Hash[Symbol, top]?, + timestamp: Time + ) -> void + + def to_hash: -> { + id: String, + author_id: String?, + channel_key: String?, + content: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::content, + conversation_id: String?, + flagged: bool?, + labels: ::Array[ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label]?, + language: String?, + meta_type: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::meta_type?, + metadata: ::Hash[Symbol, top]?, + timestamp: Time + } + + type content = + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Text + | ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Image + | ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Video + | ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Audio + | ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object + + module Content + extend ModerationAPI::Internal::Type::Union + + type text = { text: String, type: :text } + + class Text < ModerationAPI::Internal::Type::BaseModel + attr_accessor text: String + + attr_accessor type: :text + + def initialize: (text: String, ?type: :text) -> void + + def to_hash: -> { text: String, type: :text } + end + + type image = { type: :image, data: String, url: String } + + class Image < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :image + + attr_reader data: String? + + def data=: (String) -> String + + attr_reader url: String? + + def url=: (String) -> String + + def initialize: ( + ?data: String, + ?url: String, + ?type: :image + ) -> void + + def to_hash: -> { type: :image, data: String, url: String } + end + + type video = { type: :video, url: String } + + class Video < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :video + + attr_accessor url: String + + def initialize: (url: String, ?type: :video) -> void + + def to_hash: -> { type: :video, url: String } + end + + type audio = { type: :audio, url: String } + + class Audio < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :audio + + attr_accessor url: String + + def initialize: (url: String, ?type: :audio) -> void + + def to_hash: -> { type: :audio, url: String } + end + + type object = + { + data: ::Hash[Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::data], + type: :object + } + + class Object < ModerationAPI::Internal::Type::BaseModel + attr_accessor data: ::Hash[Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::data] + + attr_accessor type: :object + + def initialize: ( + data: ::Hash[Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::data], + ?type: :object + ) -> void + + def to_hash: -> { + data: ::Hash[Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::data], + type: :object + } + + type data = + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Text + | ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Image + | ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Video + | ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::Data::Audio + + module Data + extend ModerationAPI::Internal::Type::Union + + type text = { text: String, type: :text } + + class Text < ModerationAPI::Internal::Type::BaseModel + attr_accessor text: String + + attr_accessor type: :text + + def initialize: (text: String, ?type: :text) -> void + + def to_hash: -> { text: String, type: :text } + end + + type image = { type: :image, data: String, url: String } + + class Image < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :image + + attr_reader data: String? + + def data=: (String) -> String + + attr_reader url: String? + + def url=: (String) -> String + + def initialize: ( + ?data: String, + ?url: String, + ?type: :image + ) -> void + + def to_hash: -> { + type: :image, + data: String, + url: String + } + end + + type video = { type: :video, url: String } + + class Video < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :video + + attr_accessor url: String + + def initialize: (url: String, ?type: :video) -> void + + def to_hash: -> { type: :video, url: String } + end + + type audio = { type: :audio, url: String } + + class Audio < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :audio + + attr_accessor url: String + + def initialize: (url: String, ?type: :audio) -> void + + def to_hash: -> { type: :audio, url: String } + end + + def self?.variants: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Object::data] + end + end + + def self?.variants: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::content] + end + + type label = + { + label: String, + score: Float, + flagged: bool, + manual: bool, + matches: ::Array[ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match] + } + + class Label < ModerationAPI::Internal::Type::BaseModel + attr_accessor label: String + + attr_accessor score: Float + + attr_reader flagged: bool? + + def flagged=: (bool) -> bool + + attr_reader manual: bool? + + def manual=: (bool) -> bool + + attr_reader matches: ::Array[ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match]? + + def matches=: ( + ::Array[ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match] + ) -> ::Array[ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match] + + def initialize: ( + label: String, + score: Float, + ?flagged: bool, + ?manual: bool, + ?matches: ::Array[ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match] + ) -> void + + def to_hash: -> { + label: String, + score: Float, + flagged: bool, + manual: bool, + matches: ::Array[ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match] + } + + type match = + { + match: String, + probability: Float, + span: ::Array[top], + entity_type: String, + mask: String?, + reasons: ::Array[String], + signals: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals + } + + class Match < ModerationAPI::Internal::Type::BaseModel + attr_accessor match: String + + attr_accessor probability: Float + + attr_accessor span: ::Array[top] + + attr_reader entity_type: String? + + def entity_type=: (String) -> String + + attr_accessor mask: String? + + attr_reader reasons: ::Array[String]? + + def reasons=: (::Array[String]) -> ::Array[String] + + attr_reader signals: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals? + + def signals=: ( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals + ) -> ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals + + def initialize: ( + match: String, + probability: Float, + span: ::Array[top], + ?entity_type: String, + ?mask: String?, + ?reasons: ::Array[String], + ?signals: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals + ) -> void + + def to_hash: -> { + match: String, + probability: Float, + span: ::Array[top], + entity_type: String, + mask: String?, + reasons: ::Array[String], + signals: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals + } + + type signals = + { + bot_protection: bool?, + brand_impersonation: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals::BrandImpersonation?, + domain_age_days: Float?, + final_url: String?, + has_email_setup: bool?, + has_suspicious_characters: bool, + is_link_shortener: bool, + is_reported: bool, + redirect_count: Float? + } + + class Signals < ModerationAPI::Internal::Type::BaseModel + attr_accessor bot_protection: bool? + + attr_accessor brand_impersonation: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals::BrandImpersonation? + + attr_accessor domain_age_days: Float? + + attr_accessor final_url: String? + + attr_accessor has_email_setup: bool? + + attr_accessor has_suspicious_characters: bool + + attr_accessor is_link_shortener: bool + + attr_accessor is_reported: bool + + attr_accessor redirect_count: Float? + + def initialize: ( + bot_protection: bool?, + brand_impersonation: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals::BrandImpersonation?, + domain_age_days: Float?, + final_url: String?, + has_email_setup: bool?, + has_suspicious_characters: bool, + is_link_shortener: bool, + is_reported: bool, + redirect_count: Float? + ) -> void + + def to_hash: -> { + bot_protection: bool?, + brand_impersonation: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Label::Match::Signals::BrandImpersonation?, + domain_age_days: Float?, + final_url: String?, + has_email_setup: bool?, + has_suspicious_characters: bool, + is_link_shortener: bool, + is_reported: bool, + redirect_count: Float? + } + + type brand_impersonation = + { brand: String, method_: String } + + class BrandImpersonation < ModerationAPI::Internal::Type::BaseModel + attr_accessor brand: String + + attr_accessor method_: String + + def initialize: (brand: String, method_: String) -> void + + def to_hash: -> { brand: String, method_: String } + end + end + end + end + + type meta_type = + :profile + | :message + | :post + | :comment + | :event + | :product + | :review + | :other + + module MetaType + extend ModerationAPI::Internal::Type::Enum + + PROFILE: :profile + MESSAGE: :message + POST: :post + COMMENT: :comment + EVENT: :event + PRODUCT: :product + REVIEW: :review + OTHER: :other + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::meta_type] + end + end + + type queue = { id: String } + + class Queue < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + def initialize: (id: String) -> void + + def to_hash: -> { id: String } + end + end + end + end + + type queue_item_rejected = + { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemRejected::Data, + type: :"queue_item.rejected" + } + + class QueueItemRejected < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor api_version: :v2 + + attr_accessor created: Time + + attr_accessor data: ModerationAPI::WebhookEvent::QueueItemRejected::Data + + attr_accessor type: :"queue_item.rejected" + + def initialize: ( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemRejected::Data, + ?api_version: :v2, + ?type: :"queue_item.rejected" + ) -> void + + def to_hash: -> { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemRejected::Data, + type: :"queue_item.rejected" + } + + type data = + { + object: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object + } + + class Data < ModerationAPI::Internal::Type::BaseModel + attr_accessor object: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object + + def initialize: ( + object: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object + ) -> void + + def to_hash: -> { + object: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object + } + + type object = + { + id: String, + created_at: Time, + key: String?, + name: String?, + value: String?, + author: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author, + item: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item, + queue: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Queue + } + + class Object < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor created_at: Time + + attr_accessor key: String? + + attr_accessor name: String? + + attr_accessor value: String? + + attr_reader author: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author? + + def author=: ( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author + ) -> ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author + + attr_reader item: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item? + + def item=: ( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item + ) -> ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item + + attr_reader queue: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Queue? + + def queue=: ( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Queue + ) -> ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Queue + + def initialize: ( + id: String, + created_at: Time, + key: String?, + name: String?, + value: String?, + ?author: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author, + ?item: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item, + ?queue: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Queue + ) -> void + + def to_hash: -> { + id: String, + created_at: Time, + key: String?, + name: String?, + value: String?, + author: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author, + item: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item, + queue: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Queue + } + + type author = + { + id: String, + block: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + class Author < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor block: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Block? + + attr_accessor first_seen: Float + + attr_accessor last_seen: Float + + attr_accessor metadata: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metadata + + attr_accessor metrics: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metrics + + attr_accessor risk_evaluation: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::RiskEvaluation? + + attr_accessor status: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::status + + attr_accessor trust_level: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::TrustLevel + + attr_accessor company: String? + + attr_accessor email: String? + + attr_accessor external_id: String? + + attr_accessor external_link: String? + + attr_accessor last_incident: Float? + + attr_accessor name: String? + + attr_accessor profile_picture: String? + + def initialize: ( + id: String, + block: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::TrustLevel, + ?company: String?, + ?email: String?, + ?external_id: String?, + ?external_link: String?, + ?last_incident: Float?, + ?name: String?, + ?profile_picture: String? + ) -> void + + def to_hash: -> { + id: String, + block: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Author::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + type block = { reason: String?, until_: Float? } + + class Block < ModerationAPI::Internal::Type::BaseModel + attr_accessor reason: String? + + attr_accessor until_: Float? + + def initialize: (?reason: String?, ?until_: Float?) -> void + + def to_hash: -> { reason: String?, until_: Float? } + end + + type metadata = + { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + + class Metadata < ModerationAPI::Internal::Type::BaseModel + attr_accessor email_verified: bool? + + attr_accessor identity_verified: bool? + + attr_accessor is_paying_customer: bool? + + attr_accessor phone_verified: bool? + + def initialize: ( + ?email_verified: bool?, + ?identity_verified: bool?, + ?is_paying_customer: bool?, + ?phone_verified: bool? + ) -> void + + def to_hash: -> { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + end + + type metrics = + { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + + class Metrics < ModerationAPI::Internal::Type::BaseModel + attr_accessor flagged_content: Float + + attr_accessor total_content: Float + + attr_accessor average_sentiment: Float? + + def initialize: ( + flagged_content: Float, + total_content: Float, + ?average_sentiment: Float? + ) -> void + + def to_hash: -> { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + end + + type risk_evaluation = { risk_level: Float? } + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + attr_accessor risk_level: Float? + + def initialize: (?risk_level: Float?) -> void + + def to_hash: -> { risk_level: Float? } + end + + type status = :enabled | :suspended | :blocked + + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED: :enabled + SUSPENDED: :suspended + BLOCKED: :blocked + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Author::status] + end + + type trust_level = { level: Float, manual: bool } + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + attr_accessor level: Float + + attr_accessor manual: bool + + def initialize: (level: Float, manual: bool) -> void + + def to_hash: -> { level: Float, manual: bool } + end + end + + type item = + { + id: String, + author_id: String?, + channel_key: String?, + content: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::content, + conversation_id: String?, + flagged: bool?, + labels: ::Array[ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label]?, + language: String?, + meta_type: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::meta_type?, + metadata: ::Hash[Symbol, top]?, + timestamp: Time + } + + class Item < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor author_id: String? + + attr_accessor channel_key: String? + + attr_accessor content: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::content + + attr_accessor conversation_id: String? + + attr_accessor flagged: bool? + + attr_accessor labels: ::Array[ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label]? + + attr_accessor language: String? + + attr_accessor meta_type: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::meta_type? + + attr_accessor metadata: ::Hash[Symbol, top]? + + attr_accessor timestamp: Time + + def initialize: ( + id: String, + author_id: String?, + channel_key: String?, + content: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::content, + conversation_id: String?, + flagged: bool?, + labels: ::Array[ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label]?, + language: String?, + meta_type: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::meta_type?, + metadata: ::Hash[Symbol, top]?, + timestamp: Time + ) -> void + + def to_hash: -> { + id: String, + author_id: String?, + channel_key: String?, + content: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::content, + conversation_id: String?, + flagged: bool?, + labels: ::Array[ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label]?, + language: String?, + meta_type: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::meta_type?, + metadata: ::Hash[Symbol, top]?, + timestamp: Time + } + + type content = + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Text + | ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Image + | ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Video + | ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Audio + | ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object + + module Content + extend ModerationAPI::Internal::Type::Union + + type text = { text: String, type: :text } + + class Text < ModerationAPI::Internal::Type::BaseModel + attr_accessor text: String + + attr_accessor type: :text + + def initialize: (text: String, ?type: :text) -> void + + def to_hash: -> { text: String, type: :text } + end + + type image = { type: :image, data: String, url: String } + + class Image < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :image + + attr_reader data: String? + + def data=: (String) -> String + + attr_reader url: String? + + def url=: (String) -> String + + def initialize: ( + ?data: String, + ?url: String, + ?type: :image + ) -> void + + def to_hash: -> { type: :image, data: String, url: String } + end + + type video = { type: :video, url: String } + + class Video < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :video + + attr_accessor url: String + + def initialize: (url: String, ?type: :video) -> void + + def to_hash: -> { type: :video, url: String } + end + + type audio = { type: :audio, url: String } + + class Audio < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :audio + + attr_accessor url: String + + def initialize: (url: String, ?type: :audio) -> void + + def to_hash: -> { type: :audio, url: String } + end + + type object = + { + data: ::Hash[Symbol, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::data], + type: :object + } + + class Object < ModerationAPI::Internal::Type::BaseModel + attr_accessor data: ::Hash[Symbol, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::data] + + attr_accessor type: :object + + def initialize: ( + data: ::Hash[Symbol, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::data], + ?type: :object + ) -> void + + def to_hash: -> { + data: ::Hash[Symbol, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::data], + type: :object + } + + type data = + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Text + | ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Image + | ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Video + | ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::Data::Audio + + module Data + extend ModerationAPI::Internal::Type::Union + + type text = { text: String, type: :text } + + class Text < ModerationAPI::Internal::Type::BaseModel + attr_accessor text: String + + attr_accessor type: :text + + def initialize: (text: String, ?type: :text) -> void + + def to_hash: -> { text: String, type: :text } + end + + type image = { type: :image, data: String, url: String } + + class Image < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :image + + attr_reader data: String? + + def data=: (String) -> String + + attr_reader url: String? + + def url=: (String) -> String + + def initialize: ( + ?data: String, + ?url: String, + ?type: :image + ) -> void + + def to_hash: -> { + type: :image, + data: String, + url: String + } + end + + type video = { type: :video, url: String } + + class Video < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :video + + attr_accessor url: String + + def initialize: (url: String, ?type: :video) -> void + + def to_hash: -> { type: :video, url: String } + end + + type audio = { type: :audio, url: String } + + class Audio < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :audio + + attr_accessor url: String + + def initialize: (url: String, ?type: :audio) -> void + + def to_hash: -> { type: :audio, url: String } + end + + def self?.variants: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Object::data] + end + end + + def self?.variants: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::content] + end + + type label = + { + label: String, + score: Float, + flagged: bool, + manual: bool, + matches: ::Array[ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match] + } + + class Label < ModerationAPI::Internal::Type::BaseModel + attr_accessor label: String + + attr_accessor score: Float + + attr_reader flagged: bool? + + def flagged=: (bool) -> bool + + attr_reader manual: bool? + + def manual=: (bool) -> bool + + attr_reader matches: ::Array[ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match]? + + def matches=: ( + ::Array[ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match] + ) -> ::Array[ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match] + + def initialize: ( + label: String, + score: Float, + ?flagged: bool, + ?manual: bool, + ?matches: ::Array[ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match] + ) -> void + + def to_hash: -> { + label: String, + score: Float, + flagged: bool, + manual: bool, + matches: ::Array[ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match] + } + + type match = + { + match: String, + probability: Float, + span: ::Array[top], + entity_type: String, + mask: String?, + reasons: ::Array[String], + signals: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals + } + + class Match < ModerationAPI::Internal::Type::BaseModel + attr_accessor match: String + + attr_accessor probability: Float + + attr_accessor span: ::Array[top] + + attr_reader entity_type: String? + + def entity_type=: (String) -> String + + attr_accessor mask: String? + + attr_reader reasons: ::Array[String]? + + def reasons=: (::Array[String]) -> ::Array[String] + + attr_reader signals: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals? + + def signals=: ( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals + ) -> ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals + + def initialize: ( + match: String, + probability: Float, + span: ::Array[top], + ?entity_type: String, + ?mask: String?, + ?reasons: ::Array[String], + ?signals: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals + ) -> void + + def to_hash: -> { + match: String, + probability: Float, + span: ::Array[top], + entity_type: String, + mask: String?, + reasons: ::Array[String], + signals: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals + } + + type signals = + { + bot_protection: bool?, + brand_impersonation: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals::BrandImpersonation?, + domain_age_days: Float?, + final_url: String?, + has_email_setup: bool?, + has_suspicious_characters: bool, + is_link_shortener: bool, + is_reported: bool, + redirect_count: Float? + } + + class Signals < ModerationAPI::Internal::Type::BaseModel + attr_accessor bot_protection: bool? + + attr_accessor brand_impersonation: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals::BrandImpersonation? + + attr_accessor domain_age_days: Float? + + attr_accessor final_url: String? + + attr_accessor has_email_setup: bool? + + attr_accessor has_suspicious_characters: bool + + attr_accessor is_link_shortener: bool + + attr_accessor is_reported: bool + + attr_accessor redirect_count: Float? + + def initialize: ( + bot_protection: bool?, + brand_impersonation: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals::BrandImpersonation?, + domain_age_days: Float?, + final_url: String?, + has_email_setup: bool?, + has_suspicious_characters: bool, + is_link_shortener: bool, + is_reported: bool, + redirect_count: Float? + ) -> void + + def to_hash: -> { + bot_protection: bool?, + brand_impersonation: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Label::Match::Signals::BrandImpersonation?, + domain_age_days: Float?, + final_url: String?, + has_email_setup: bool?, + has_suspicious_characters: bool, + is_link_shortener: bool, + is_reported: bool, + redirect_count: Float? + } + + type brand_impersonation = + { brand: String, method_: String } + + class BrandImpersonation < ModerationAPI::Internal::Type::BaseModel + attr_accessor brand: String + + attr_accessor method_: String + + def initialize: (brand: String, method_: String) -> void + + def to_hash: -> { brand: String, method_: String } + end + end + end + end + + type meta_type = + :profile + | :message + | :post + | :comment + | :event + | :product + | :review + | :other + + module MetaType + extend ModerationAPI::Internal::Type::Enum + + PROFILE: :profile + MESSAGE: :message + POST: :post + COMMENT: :comment + EVENT: :event + PRODUCT: :product + REVIEW: :review + OTHER: :other + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::meta_type] + end + end + + type queue = { id: String } + + class Queue < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + def initialize: (id: String) -> void + + def to_hash: -> { id: String } + end + end + end + end + + type queue_item_allowed = + { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemAllowed::Data, + type: :"queue_item.allowed" + } + + class QueueItemAllowed < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor api_version: :v2 + + attr_accessor created: Time + + attr_accessor data: ModerationAPI::WebhookEvent::QueueItemAllowed::Data + + attr_accessor type: :"queue_item.allowed" + + def initialize: ( + id: String, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemAllowed::Data, + ?api_version: :v2, + ?type: :"queue_item.allowed" + ) -> void + + def to_hash: -> { + id: String, + api_version: :v2, + created: Time, + data: ModerationAPI::WebhookEvent::QueueItemAllowed::Data, + type: :"queue_item.allowed" + } + + type data = + { + object: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object + } + + class Data < ModerationAPI::Internal::Type::BaseModel + attr_accessor object: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object + + def initialize: ( + object: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object + ) -> void + + def to_hash: -> { + object: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object + } + + type object = + { + id: String, + created_at: Time, + key: String?, + name: String?, + value: String?, + author: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author, + item: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item, + queue: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Queue + } + + class Object < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor created_at: Time + + attr_accessor key: String? + + attr_accessor name: String? + + attr_accessor value: String? + + attr_reader author: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author? + + def author=: ( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author + ) -> ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author + + attr_reader item: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item? + + def item=: ( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item + ) -> ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item + + attr_reader queue: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Queue? + + def queue=: ( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Queue + ) -> ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Queue + + def initialize: ( + id: String, + created_at: Time, + key: String?, + name: String?, + value: String?, + ?author: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author, + ?item: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item, + ?queue: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Queue + ) -> void + + def to_hash: -> { + id: String, + created_at: Time, + key: String?, + name: String?, + value: String?, + author: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author, + item: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item, + queue: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Queue + } + + type author = + { + id: String, + block: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + class Author < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor block: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Block? + + attr_accessor first_seen: Float + + attr_accessor last_seen: Float + + attr_accessor metadata: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metadata + + attr_accessor metrics: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metrics + + attr_accessor risk_evaluation: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::RiskEvaluation? + + attr_accessor status: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::status + + attr_accessor trust_level: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::TrustLevel + + attr_accessor company: String? + + attr_accessor email: String? + + attr_accessor external_id: String? + + attr_accessor external_link: String? + + attr_accessor last_incident: Float? + + attr_accessor name: String? + + attr_accessor profile_picture: String? + + def initialize: ( + id: String, + block: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::TrustLevel, + ?company: String?, + ?email: String?, + ?external_id: String?, + ?external_link: String?, + ?last_incident: Float?, + ?name: String?, + ?profile_picture: String? + ) -> void + + def to_hash: -> { + id: String, + block: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Block?, + first_seen: Float, + last_seen: Float, + metadata: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metadata, + metrics: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::Metrics, + risk_evaluation: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::RiskEvaluation?, + status: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::status, + trust_level: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Author::TrustLevel, + company: String?, + email: String?, + external_id: String?, + external_link: String?, + last_incident: Float?, + name: String?, + profile_picture: String? + } + + type block = { reason: String?, until_: Float? } + + class Block < ModerationAPI::Internal::Type::BaseModel + attr_accessor reason: String? + + attr_accessor until_: Float? + + def initialize: (?reason: String?, ?until_: Float?) -> void + + def to_hash: -> { reason: String?, until_: Float? } + end + + type metadata = + { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + + class Metadata < ModerationAPI::Internal::Type::BaseModel + attr_accessor email_verified: bool? + + attr_accessor identity_verified: bool? + + attr_accessor is_paying_customer: bool? + + attr_accessor phone_verified: bool? + + def initialize: ( + ?email_verified: bool?, + ?identity_verified: bool?, + ?is_paying_customer: bool?, + ?phone_verified: bool? + ) -> void + + def to_hash: -> { + email_verified: bool?, + identity_verified: bool?, + is_paying_customer: bool?, + phone_verified: bool? + } + end + + type metrics = + { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + + class Metrics < ModerationAPI::Internal::Type::BaseModel + attr_accessor flagged_content: Float + + attr_accessor total_content: Float + + attr_accessor average_sentiment: Float? + + def initialize: ( + flagged_content: Float, + total_content: Float, + ?average_sentiment: Float? + ) -> void + + def to_hash: -> { + flagged_content: Float, + total_content: Float, + average_sentiment: Float? + } + end + + type risk_evaluation = { risk_level: Float? } + + class RiskEvaluation < ModerationAPI::Internal::Type::BaseModel + attr_accessor risk_level: Float? + + def initialize: (?risk_level: Float?) -> void + + def to_hash: -> { risk_level: Float? } + end + + type status = :enabled | :suspended | :blocked + + module Status + extend ModerationAPI::Internal::Type::Enum + + ENABLED: :enabled + SUSPENDED: :suspended + BLOCKED: :blocked + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Author::status] + end + + type trust_level = { level: Float, manual: bool } + + class TrustLevel < ModerationAPI::Internal::Type::BaseModel + attr_accessor level: Float + + attr_accessor manual: bool + + def initialize: (level: Float, manual: bool) -> void + + def to_hash: -> { level: Float, manual: bool } + end + end + + type item = + { + id: String, + author_id: String?, + channel_key: String?, + content: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::content, + conversation_id: String?, + flagged: bool?, + labels: ::Array[ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label]?, + language: String?, + meta_type: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::meta_type?, + metadata: ::Hash[Symbol, top]?, + timestamp: Time + } + + class Item < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + attr_accessor author_id: String? + + attr_accessor channel_key: String? + + attr_accessor content: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::content + + attr_accessor conversation_id: String? + + attr_accessor flagged: bool? + + attr_accessor labels: ::Array[ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label]? + + attr_accessor language: String? + + attr_accessor meta_type: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::meta_type? + + attr_accessor metadata: ::Hash[Symbol, top]? + + attr_accessor timestamp: Time + + def initialize: ( + id: String, + author_id: String?, + channel_key: String?, + content: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::content, + conversation_id: String?, + flagged: bool?, + labels: ::Array[ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label]?, + language: String?, + meta_type: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::meta_type?, + metadata: ::Hash[Symbol, top]?, + timestamp: Time + ) -> void + + def to_hash: -> { + id: String, + author_id: String?, + channel_key: String?, + content: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::content, + conversation_id: String?, + flagged: bool?, + labels: ::Array[ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label]?, + language: String?, + meta_type: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::meta_type?, + metadata: ::Hash[Symbol, top]?, + timestamp: Time + } + + type content = + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Text + | ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Image + | ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Video + | ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Audio + | ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object + + module Content + extend ModerationAPI::Internal::Type::Union + + type text = { text: String, type: :text } + + class Text < ModerationAPI::Internal::Type::BaseModel + attr_accessor text: String + + attr_accessor type: :text + + def initialize: (text: String, ?type: :text) -> void + + def to_hash: -> { text: String, type: :text } + end + + type image = { type: :image, data: String, url: String } + + class Image < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :image + + attr_reader data: String? + + def data=: (String) -> String + + attr_reader url: String? + + def url=: (String) -> String + + def initialize: ( + ?data: String, + ?url: String, + ?type: :image + ) -> void + + def to_hash: -> { type: :image, data: String, url: String } + end + + type video = { type: :video, url: String } + + class Video < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :video + + attr_accessor url: String + + def initialize: (url: String, ?type: :video) -> void + + def to_hash: -> { type: :video, url: String } + end + + type audio = { type: :audio, url: String } + + class Audio < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :audio + + attr_accessor url: String + + def initialize: (url: String, ?type: :audio) -> void + + def to_hash: -> { type: :audio, url: String } + end + + type object = + { + data: ::Hash[Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::data], + type: :object + } + + class Object < ModerationAPI::Internal::Type::BaseModel + attr_accessor data: ::Hash[Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::data] + + attr_accessor type: :object + + def initialize: ( + data: ::Hash[Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::data], + ?type: :object + ) -> void + + def to_hash: -> { + data: ::Hash[Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::data], + type: :object + } + + type data = + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Text + | ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Image + | ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Video + | ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::Data::Audio + + module Data + extend ModerationAPI::Internal::Type::Union + + type text = { text: String, type: :text } + + class Text < ModerationAPI::Internal::Type::BaseModel + attr_accessor text: String + + attr_accessor type: :text + + def initialize: (text: String, ?type: :text) -> void + + def to_hash: -> { text: String, type: :text } + end + + type image = { type: :image, data: String, url: String } + + class Image < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :image + + attr_reader data: String? + + def data=: (String) -> String + + attr_reader url: String? + + def url=: (String) -> String + + def initialize: ( + ?data: String, + ?url: String, + ?type: :image + ) -> void + + def to_hash: -> { + type: :image, + data: String, + url: String + } + end + + type video = { type: :video, url: String } + + class Video < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :video + + attr_accessor url: String + + def initialize: (url: String, ?type: :video) -> void + + def to_hash: -> { type: :video, url: String } + end + + type audio = { type: :audio, url: String } + + class Audio < ModerationAPI::Internal::Type::BaseModel + attr_accessor type: :audio + + attr_accessor url: String + + def initialize: (url: String, ?type: :audio) -> void + + def to_hash: -> { type: :audio, url: String } + end + + def self?.variants: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Object::data] + end + end + + def self?.variants: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::content] + end + + type label = + { + label: String, + score: Float, + flagged: bool, + manual: bool, + matches: ::Array[ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match] + } + + class Label < ModerationAPI::Internal::Type::BaseModel + attr_accessor label: String + + attr_accessor score: Float + + attr_reader flagged: bool? + + def flagged=: (bool) -> bool + + attr_reader manual: bool? + + def manual=: (bool) -> bool + + attr_reader matches: ::Array[ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match]? + + def matches=: ( + ::Array[ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match] + ) -> ::Array[ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match] + + def initialize: ( + label: String, + score: Float, + ?flagged: bool, + ?manual: bool, + ?matches: ::Array[ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match] + ) -> void + + def to_hash: -> { + label: String, + score: Float, + flagged: bool, + manual: bool, + matches: ::Array[ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match] + } + + type match = + { + match: String, + probability: Float, + span: ::Array[top], + entity_type: String, + mask: String?, + reasons: ::Array[String], + signals: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals + } + + class Match < ModerationAPI::Internal::Type::BaseModel + attr_accessor match: String + + attr_accessor probability: Float + + attr_accessor span: ::Array[top] + + attr_reader entity_type: String? + + def entity_type=: (String) -> String + + attr_accessor mask: String? + + attr_reader reasons: ::Array[String]? + + def reasons=: (::Array[String]) -> ::Array[String] + + attr_reader signals: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals? + + def signals=: ( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals + ) -> ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals + + def initialize: ( + match: String, + probability: Float, + span: ::Array[top], + ?entity_type: String, + ?mask: String?, + ?reasons: ::Array[String], + ?signals: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals + ) -> void + + def to_hash: -> { + match: String, + probability: Float, + span: ::Array[top], + entity_type: String, + mask: String?, + reasons: ::Array[String], + signals: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals + } + + type signals = + { + bot_protection: bool?, + brand_impersonation: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals::BrandImpersonation?, + domain_age_days: Float?, + final_url: String?, + has_email_setup: bool?, + has_suspicious_characters: bool, + is_link_shortener: bool, + is_reported: bool, + redirect_count: Float? + } + + class Signals < ModerationAPI::Internal::Type::BaseModel + attr_accessor bot_protection: bool? + + attr_accessor brand_impersonation: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals::BrandImpersonation? + + attr_accessor domain_age_days: Float? + + attr_accessor final_url: String? + + attr_accessor has_email_setup: bool? + + attr_accessor has_suspicious_characters: bool + + attr_accessor is_link_shortener: bool + + attr_accessor is_reported: bool + + attr_accessor redirect_count: Float? + + def initialize: ( + bot_protection: bool?, + brand_impersonation: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals::BrandImpersonation?, + domain_age_days: Float?, + final_url: String?, + has_email_setup: bool?, + has_suspicious_characters: bool, + is_link_shortener: bool, + is_reported: bool, + redirect_count: Float? + ) -> void + + def to_hash: -> { + bot_protection: bool?, + brand_impersonation: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Label::Match::Signals::BrandImpersonation?, + domain_age_days: Float?, + final_url: String?, + has_email_setup: bool?, + has_suspicious_characters: bool, + is_link_shortener: bool, + is_reported: bool, + redirect_count: Float? + } + + type brand_impersonation = + { brand: String, method_: String } + + class BrandImpersonation < ModerationAPI::Internal::Type::BaseModel + attr_accessor brand: String + + attr_accessor method_: String + + def initialize: (brand: String, method_: String) -> void + + def to_hash: -> { brand: String, method_: String } + end + end + end + end + + type meta_type = + :profile + | :message + | :post + | :comment + | :event + | :product + | :review + | :other + + module MetaType + extend ModerationAPI::Internal::Type::Enum + + PROFILE: :profile + MESSAGE: :message + POST: :post + COMMENT: :comment + EVENT: :event + PRODUCT: :product + REVIEW: :review + OTHER: :other + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::meta_type] + end + end + + type queue = { id: String } + + class Queue < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: String + + def initialize: (id: String) -> void + + def to_hash: -> { id: String } + end + end + end + end + + def self?.variants: -> ::Array[ModerationAPI::Models::webhook_event] + end + end +end diff --git a/sig/moderation_api/resources/actions.rbs b/sig/moderation_api/resources/actions.rbs index 2486953..e4cf8f2 100644 --- a/sig/moderation_api/resources/actions.rbs +++ b/sig/moderation_api/resources/actions.rbs @@ -15,7 +15,6 @@ module ModerationAPI ?queue_behaviour: ModerationAPI::Models::ActionCreateParams::queue_behaviour, ?type: ModerationAPI::Models::ActionCreateParams::type_?, ?value_required: bool, - ?webhooks: ::Array[ModerationAPI::ActionCreateParams::Webhook], ?request_options: ModerationAPI::request_opts ) -> ModerationAPI::Models::ActionCreateResponse @@ -37,7 +36,6 @@ module ModerationAPI ?queue_behaviour: ModerationAPI::Models::ActionUpdateParams::queue_behaviour, ?type: ModerationAPI::Models::ActionUpdateParams::type_?, ?value_required: bool, - ?webhooks: ::Array[ModerationAPI::ActionUpdateParams::Webhook], ?request_options: ModerationAPI::request_opts ) -> ModerationAPI::Models::ActionUpdateResponse diff --git a/test/moderation_api/resources/actions_test.rb b/test/moderation_api/resources/actions_test.rb index 3817b59..8f09a3a 100644 --- a/test/moderation_api/resources/actions_test.rb +++ b/test/moderation_api/resources/actions_test.rb @@ -52,7 +52,6 @@ def test_retrieve possible_values: ^(ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::Models::ActionRetrieveResponse::PossibleValue]), queue_behaviour: ModerationAPI::Models::ActionRetrieveResponse::QueueBehaviour, value_required: ModerationAPI::Internal::Type::Boolean, - webhooks: ^(ModerationAPI::Internal::Type::ArrayOf[ModerationAPI::Models::ActionRetrieveResponse::Webhook]), description: String | nil, key: String | nil, type: ModerationAPI::Models::ActionRetrieveResponse::Type | nil