diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 26b25a2..49df20d 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.20.0" + ".": "2.21.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index b80b97b..6265db3 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-cbf656f40e43acf60d9596f78204f031dc8c7205626df8f05ce8e88bcf49b597.yml -openapi_spec_hash: 23be5a56248a1a575b34833eb7e7fe49 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/moderation-api/moderation-api-9c5291067ec36cba0c9ef772c5c8eb10238fb332f1f25d0e31f3f2ad87c24e5e.yml +openapi_spec_hash: 790cc0a36d6ed693c06a285c441ab977 config_hash: 9d144cc6c49d3fd53e5b4472c1e22165 diff --git a/CHANGELOG.md b/CHANGELOG.md index 64a3a27..94959be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 2.21.0 (2026-06-02) + +Full Changelog: [v2.20.0...v2.21.0](https://github.com/moderation-api/sdk-ruby/compare/v2.20.0...v2.21.0) + +### Features + +* **api:** api update ([250e1b4](https://github.com/moderation-api/sdk-ruby/commit/250e1b4849fff5f9dfe39c267b4641c23fc46358)) + ## 2.20.0 (2026-06-01) Full Changelog: [v2.19.0...v2.20.0](https://github.com/moderation-api/sdk-ruby/compare/v2.19.0...v2.20.0) diff --git a/Gemfile.lock b/Gemfile.lock index cde75ec..80ac095 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -11,7 +11,7 @@ GIT PATH remote: . specs: - moderation_api (2.20.0) + moderation_api (2.21.0) cgi connection_pool diff --git a/README.md b/README.md index 8412bbb..b02d521 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.20.0" +gem "moderation_api", "~> 2.21.0" ``` diff --git a/lib/moderation_api/models/content_submit_params.rb b/lib/moderation_api/models/content_submit_params.rb index 3051048..99503f3 100644 --- a/lib/moderation_api/models/content_submit_params.rb +++ b/lib/moderation_api/models/content_submit_params.rb @@ -26,6 +26,18 @@ class ContentSubmitParams < ModerationAPI::Internal::Type::BaseModel # @return [String, nil] optional :channel, String + # @!attribute client_action + # A recommendation from your own client-side flagging (e.g. a banned-IP list or a + # third-party tool). Feeds the rules engine and can escalate or override the + # recommended action. Does not change whether our analysis flagged the content. + # + # @return [ModerationAPI::Models::ContentSubmitParams::ClientAction, nil] + optional :client_action, + -> { + ModerationAPI::ContentSubmitParams::ClientAction + }, + api_name: :clientAction + # @!attribute content_id # The unique ID of the content in your database. # @@ -70,7 +82,7 @@ class ContentSubmitParams < ModerationAPI::Internal::Type::BaseModel # @return [Float, nil] optional :timestamp, Float - # @!method initialize(content:, author_id: nil, channel: nil, content_id: nil, conversation_id: nil, do_not_store: nil, metadata: nil, meta_type: nil, policies: nil, timestamp: nil, request_options: {}) + # @!method initialize(content:, author_id: nil, channel: nil, client_action: nil, content_id: nil, conversation_id: nil, do_not_store: nil, metadata: nil, meta_type: nil, policies: nil, timestamp: nil, request_options: {}) # Some parameter documentations has been truncated, see # {ModerationAPI::Models::ContentSubmitParams} for more details. # @@ -80,6 +92,8 @@ class ContentSubmitParams < ModerationAPI::Internal::Type::BaseModel # # @param channel [String] Provide a channel ID or key. Will use the project's default channel if not provi # + # @param client_action [ModerationAPI::Models::ContentSubmitParams::ClientAction] A recommendation from your own client-side flagging (e.g. a banned-IP list or a + # # @param content_id [String] The unique ID of the content in your database. # # @param conversation_id [String] For example the ID of a chat room or a post @@ -345,6 +359,77 @@ class Audio < ModerationAPI::Internal::Type::BaseModel # @return [Array(ModerationAPI::Models::ContentSubmitParams::Content::Text, ModerationAPI::Models::ContentSubmitParams::Content::Image, ModerationAPI::Models::ContentSubmitParams::Content::Video, ModerationAPI::Models::ContentSubmitParams::Content::Audio, ModerationAPI::Models::ContentSubmitParams::Content::Object)] end + class ClientAction < ModerationAPI::Internal::Type::BaseModel + # @!attribute action + # Your recommendation for the content: allow, review, or reject. + # + # @return [Symbol, ModerationAPI::Models::ContentSubmitParams::ClientAction::Action] + required :action, enum: -> { ModerationAPI::ContentSubmitParams::ClientAction::Action } + + # @!attribute behavior + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + # + # @return [Symbol, ModerationAPI::Models::ContentSubmitParams::ClientAction::Behavior, nil] + optional :behavior, enum: -> { ModerationAPI::ContentSubmitParams::ClientAction::Behavior } + + # @!attribute reason + # A human-readable explanation for your recommendation. + # + # @return [String, nil] + optional :reason, String + + # @!attribute source + # Where your recommendation came from, e.g. "banned-ip". + # + # @return [String, nil] + optional :source, String + + # @!method initialize(action:, behavior: nil, reason: nil, source: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::ContentSubmitParams::ClientAction} for more details. + # + # A recommendation from your own client-side flagging (e.g. a banned-IP list or a + # third-party tool). Feeds the rules engine and can escalate or override the + # recommended action. Does not change whether our analysis flagged the content. + # + # @param action [Symbol, ModerationAPI::Models::ContentSubmitParams::ClientAction::Action] Your recommendation for the content: allow, review, or reject. + # + # @param behavior [Symbol, ModerationAPI::Models::ContentSubmitParams::ClientAction::Behavior] How your recommendation combines with ours. Defaults to 'escalate', which only a + # + # @param reason [String] A human-readable explanation for your recommendation. + # + # @param source [String] Where your recommendation came from, e.g. "banned-ip". + + # Your recommendation for the content: allow, review, or reject. + # + # @see ModerationAPI::Models::ContentSubmitParams::ClientAction#action + module Action + extend ModerationAPI::Internal::Type::Enum + + REVIEW = :review + ALLOW = :allow + REJECT = :reject + + # @!method self.values + # @return [Array] + end + + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + # + # @see ModerationAPI::Models::ContentSubmitParams::ClientAction#behavior + module Behavior + extend ModerationAPI::Internal::Type::Enum + + OVERRIDE = :override + ESCALATE = :escalate + + # @!method self.values + # @return [Array] + end + end + # The meta type of content being moderated module MetaType extend ModerationAPI::Internal::Type::Enum diff --git a/lib/moderation_api/models/content_submit_response.rb b/lib/moderation_api/models/content_submit_response.rb index b0b2729..b78ba61 100644 --- a/lib/moderation_api/models/content_submit_response.rb +++ b/lib/moderation_api/models/content_submit_response.rb @@ -907,6 +907,7 @@ module ReasonCode RULE_MATCH = :rule_match RULE_DEFAULT = :rule_default RULE_FALLBACK = :rule_fallback + CLIENT_OVERRIDE = :client_override # @!method self.values # @return [Array] diff --git a/lib/moderation_api/models/webhook_event.rb b/lib/moderation_api/models/webhook_event.rb index d797894..05dc0e0 100644 --- a/lib/moderation_api/models/webhook_event.rb +++ b/lib/moderation_api/models/webhook_event.rb @@ -2435,6 +2435,16 @@ class Item < ModerationAPI::Internal::Type::BaseModel # @return [String, nil] required :channel_key, String, nil?: true + # @!attribute client_action + # A recommendation from your own client-side flagging. + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction, nil] + required :client_action, + -> { + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction + }, + nil?: true + # @!attribute content # The original content payload # @@ -2496,7 +2506,7 @@ class Item < ModerationAPI::Internal::Type::BaseModel # @return [Time] required :timestamp, Time - # @!method initialize(id:, author_id:, channel_key:, content:, conversation_id:, flagged:, labels:, language:, meta_type:, metadata:, timestamp:) + # @!method initialize(id:, author_id:, channel_key:, client_action:, content:, conversation_id:, flagged:, labels:, language:, meta_type:, metadata:, timestamp:) # Some parameter documentations has been truncated, see # {ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item} for # more details. @@ -2507,6 +2517,8 @@ class Item < ModerationAPI::Internal::Type::BaseModel # # @param channel_key [String, nil] The channel the content was submitted to, identified by your customer-defined ch # + # @param client_action [ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction, nil] A recommendation from your own client-side flagging. + # # @param content [ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::Content::Text, ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::Content::Image, ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::Content::Video, ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::Content::Audio, ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::Content::Object] The original content payload # # @param conversation_id [String, nil] Conversation grouping ID, if any @@ -2523,6 +2535,79 @@ class Item < ModerationAPI::Internal::Type::BaseModel # # @param timestamp [Time] ISO 8601 timestamp of when the content was submitted + # @see ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item#client_action + class ClientAction < ModerationAPI::Internal::Type::BaseModel + # @!attribute action + # Your recommendation for the content: allow, review, or reject. + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Action] + required :action, + enum: -> { ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Action } + + # @!attribute behavior + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Behavior, nil] + optional :behavior, + enum: -> { ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Behavior } + + # @!attribute reason + # A human-readable explanation for your recommendation. + # + # @return [String, nil] + optional :reason, String + + # @!attribute source + # Where your recommendation came from, e.g. "banned-ip". + # + # @return [String, nil] + optional :source, String + + # @!method initialize(action:, behavior: nil, reason: nil, source: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction} + # for more details. + # + # A recommendation from your own client-side flagging. + # + # @param action [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Action] Your recommendation for the content: allow, review, or reject. + # + # @param behavior [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Behavior] How your recommendation combines with ours. Defaults to 'escalate', which only a + # + # @param reason [String] A human-readable explanation for your recommendation. + # + # @param source [String] Where your recommendation came from, e.g. "banned-ip". + + # Your recommendation for the content: allow, review, or reject. + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction#action + module Action + extend ModerationAPI::Internal::Type::Enum + + REVIEW = :review + ALLOW = :allow + REJECT = :reject + + # @!method self.values + # @return [Array] + end + + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction#behavior + module Behavior + extend ModerationAPI::Internal::Type::Enum + + OVERRIDE = :override + ESCALATE = :escalate + + # @!method self.values + # @return [Array] + end + end + # The original content payload # # @see ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item#content @@ -3699,6 +3784,14 @@ class Item < ModerationAPI::Internal::Type::BaseModel # @return [String, nil] required :channel_key, String, nil?: true + # @!attribute client_action + # A recommendation from your own client-side flagging. + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction, nil] + required :client_action, + -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction }, + nil?: true + # @!attribute content # The original content payload # @@ -3759,7 +3852,7 @@ class Item < ModerationAPI::Internal::Type::BaseModel # @return [Time] required :timestamp, Time - # @!method initialize(id:, author_id:, channel_key:, content:, conversation_id:, flagged:, labels:, language:, meta_type:, metadata:, timestamp:) + # @!method initialize(id:, author_id:, channel_key:, client_action:, 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. @@ -3772,6 +3865,8 @@ class Item < ModerationAPI::Internal::Type::BaseModel # # @param channel_key [String, nil] The channel the content was submitted to, identified by your customer-defined ch # + # @param client_action [ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction, nil] A recommendation from your own client-side flagging. + # # @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 @@ -3788,6 +3883,79 @@ class Item < ModerationAPI::Internal::Type::BaseModel # # @param timestamp [Time] ISO 8601 timestamp of when the content was submitted + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item#client_action + class ClientAction < ModerationAPI::Internal::Type::BaseModel + # @!attribute action + # Your recommendation for the content: allow, review, or reject. + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Action] + required :action, + enum: -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Action } + + # @!attribute behavior + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Behavior, nil] + optional :behavior, + enum: -> { ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Behavior } + + # @!attribute reason + # A human-readable explanation for your recommendation. + # + # @return [String, nil] + optional :reason, String + + # @!attribute source + # Where your recommendation came from, e.g. "banned-ip". + # + # @return [String, nil] + optional :source, String + + # @!method initialize(action:, behavior: nil, reason: nil, source: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction} + # for more details. + # + # A recommendation from your own client-side flagging. + # + # @param action [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Action] Your recommendation for the content: allow, review, or reject. + # + # @param behavior [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Behavior] How your recommendation combines with ours. Defaults to 'escalate', which only a + # + # @param reason [String] A human-readable explanation for your recommendation. + # + # @param source [String] Where your recommendation came from, e.g. "banned-ip". + + # Your recommendation for the content: allow, review, or reject. + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction#action + module Action + extend ModerationAPI::Internal::Type::Enum + + REVIEW = :review + ALLOW = :allow + REJECT = :reject + + # @!method self.values + # @return [Array] + end + + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction#behavior + module Behavior + extend ModerationAPI::Internal::Type::Enum + + OVERRIDE = :override + ESCALATE = :escalate + + # @!method self.values + # @return [Array] + end + end + # The original content payload # # @see ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item#content @@ -4682,6 +4850,16 @@ class Item < ModerationAPI::Internal::Type::BaseModel # @return [String, nil] required :channel_key, String, nil?: true + # @!attribute client_action + # A recommendation from your own client-side flagging. + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction, nil] + required :client_action, + -> { + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction + }, + nil?: true + # @!attribute content # The original content payload # @@ -4743,7 +4921,7 @@ class Item < ModerationAPI::Internal::Type::BaseModel # @return [Time] required :timestamp, Time - # @!method initialize(id:, author_id:, channel_key:, content:, conversation_id:, flagged:, labels:, language:, meta_type:, metadata:, timestamp:) + # @!method initialize(id:, author_id:, channel_key:, client_action:, 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. @@ -4756,6 +4934,8 @@ class Item < ModerationAPI::Internal::Type::BaseModel # # @param channel_key [String, nil] The channel the content was submitted to, identified by your customer-defined ch # + # @param client_action [ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction, nil] A recommendation from your own client-side flagging. + # # @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 @@ -4772,6 +4952,79 @@ class Item < ModerationAPI::Internal::Type::BaseModel # # @param timestamp [Time] ISO 8601 timestamp of when the content was submitted + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item#client_action + class ClientAction < ModerationAPI::Internal::Type::BaseModel + # @!attribute action + # Your recommendation for the content: allow, review, or reject. + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Action] + required :action, + enum: -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Action } + + # @!attribute behavior + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Behavior, nil] + optional :behavior, + enum: -> { ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Behavior } + + # @!attribute reason + # A human-readable explanation for your recommendation. + # + # @return [String, nil] + optional :reason, String + + # @!attribute source + # Where your recommendation came from, e.g. "banned-ip". + # + # @return [String, nil] + optional :source, String + + # @!method initialize(action:, behavior: nil, reason: nil, source: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction} + # for more details. + # + # A recommendation from your own client-side flagging. + # + # @param action [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Action] Your recommendation for the content: allow, review, or reject. + # + # @param behavior [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Behavior] How your recommendation combines with ours. Defaults to 'escalate', which only a + # + # @param reason [String] A human-readable explanation for your recommendation. + # + # @param source [String] Where your recommendation came from, e.g. "banned-ip". + + # Your recommendation for the content: allow, review, or reject. + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction#action + module Action + extend ModerationAPI::Internal::Type::Enum + + REVIEW = :review + ALLOW = :allow + REJECT = :reject + + # @!method self.values + # @return [Array] + end + + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction#behavior + module Behavior + extend ModerationAPI::Internal::Type::Enum + + OVERRIDE = :override + ESCALATE = :escalate + + # @!method self.values + # @return [Array] + end + end + # The original content payload # # @see ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item#content @@ -5665,6 +5918,14 @@ class Item < ModerationAPI::Internal::Type::BaseModel # @return [String, nil] required :channel_key, String, nil?: true + # @!attribute client_action + # A recommendation from your own client-side flagging. + # + # @return [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction, nil] + required :client_action, + -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction }, + nil?: true + # @!attribute content # The original content payload # @@ -5726,7 +5987,7 @@ class Item < ModerationAPI::Internal::Type::BaseModel # @return [Time] required :timestamp, Time - # @!method initialize(id:, author_id:, channel_key:, content:, conversation_id:, flagged:, labels:, language:, meta_type:, metadata:, timestamp:) + # @!method initialize(id:, author_id:, channel_key:, client_action:, 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. @@ -5739,6 +6000,8 @@ class Item < ModerationAPI::Internal::Type::BaseModel # # @param channel_key [String, nil] The channel the content was submitted to, identified by your customer-defined ch # + # @param client_action [ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction, nil] A recommendation from your own client-side flagging. + # # @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 @@ -5755,6 +6018,79 @@ class Item < ModerationAPI::Internal::Type::BaseModel # # @param timestamp [Time] ISO 8601 timestamp of when the content was submitted + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item#client_action + class ClientAction < ModerationAPI::Internal::Type::BaseModel + # @!attribute action + # Your recommendation for the content: allow, review, or reject. + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Action] + required :action, + enum: -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Action } + + # @!attribute behavior + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + # + # @return [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Behavior, nil] + optional :behavior, + enum: -> { ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Behavior } + + # @!attribute reason + # A human-readable explanation for your recommendation. + # + # @return [String, nil] + optional :reason, String + + # @!attribute source + # Where your recommendation came from, e.g. "banned-ip". + # + # @return [String, nil] + optional :source, String + + # @!method initialize(action:, behavior: nil, reason: nil, source: nil) + # Some parameter documentations has been truncated, see + # {ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction} + # for more details. + # + # A recommendation from your own client-side flagging. + # + # @param action [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Action] Your recommendation for the content: allow, review, or reject. + # + # @param behavior [Symbol, ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Behavior] How your recommendation combines with ours. Defaults to 'escalate', which only a + # + # @param reason [String] A human-readable explanation for your recommendation. + # + # @param source [String] Where your recommendation came from, e.g. "banned-ip". + + # Your recommendation for the content: allow, review, or reject. + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction#action + module Action + extend ModerationAPI::Internal::Type::Enum + + REVIEW = :review + ALLOW = :allow + REJECT = :reject + + # @!method self.values + # @return [Array] + end + + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + # + # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction#behavior + module Behavior + extend ModerationAPI::Internal::Type::Enum + + OVERRIDE = :override + ESCALATE = :escalate + + # @!method self.values + # @return [Array] + end + end + # The original content payload # # @see ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item#content diff --git a/lib/moderation_api/resources/content.rb b/lib/moderation_api/resources/content.rb index 6b17c24..5fb4515 100644 --- a/lib/moderation_api/resources/content.rb +++ b/lib/moderation_api/resources/content.rb @@ -6,7 +6,7 @@ class Content # Some parameter documentations has been truncated, see # {ModerationAPI::Models::ContentSubmitParams} for more details. # - # @overload submit(content:, author_id: nil, channel: nil, content_id: nil, conversation_id: nil, do_not_store: nil, metadata: nil, meta_type: nil, policies: nil, timestamp: nil, request_options: {}) + # @overload submit(content:, author_id: nil, channel: nil, client_action: nil, content_id: nil, conversation_id: nil, do_not_store: nil, metadata: nil, meta_type: nil, policies: nil, timestamp: nil, request_options: {}) # # @param content [ModerationAPI::Models::ContentSubmitParams::Content::Text, ModerationAPI::Models::ContentSubmitParams::Content::Image, ModerationAPI::Models::ContentSubmitParams::Content::Video, ModerationAPI::Models::ContentSubmitParams::Content::Audio, ModerationAPI::Models::ContentSubmitParams::Content::Object] The content sent for moderation # @@ -14,6 +14,8 @@ class Content # # @param channel [String] Provide a channel ID or key. Will use the project's default channel if not provi # + # @param client_action [ModerationAPI::Models::ContentSubmitParams::ClientAction] A recommendation from your own client-side flagging (e.g. a banned-IP list or a + # # @param content_id [String] The unique ID of the content in your database. # # @param conversation_id [String] For example the ID of a chat room or a post diff --git a/lib/moderation_api/version.rb b/lib/moderation_api/version.rb index 98fdf4c..3814778 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.20.0" + VERSION = "2.21.0" end diff --git a/rbi/moderation_api/models/content_submit_params.rbi b/rbi/moderation_api/models/content_submit_params.rbi index 1d499af..58de98c 100644 --- a/rbi/moderation_api/models/content_submit_params.rbi +++ b/rbi/moderation_api/models/content_submit_params.rbi @@ -43,6 +43,22 @@ module ModerationAPI sig { params(channel: String).void } attr_writer :channel + # A recommendation from your own client-side flagging (e.g. a banned-IP list or a + # third-party tool). Feeds the rules engine and can escalate or override the + # recommended action. Does not change whether our analysis flagged the content. + sig do + returns(T.nilable(ModerationAPI::ContentSubmitParams::ClientAction)) + end + attr_reader :client_action + + sig do + params( + client_action: + ModerationAPI::ContentSubmitParams::ClientAction::OrHash + ).void + end + attr_writer :client_action + # The unique ID of the content in your database. sig { returns(T.nilable(String)) } attr_reader :content_id @@ -188,6 +204,8 @@ module ModerationAPI ), author_id: String, channel: String, + client_action: + ModerationAPI::ContentSubmitParams::ClientAction::OrHash, content_id: String, conversation_id: String, do_not_store: T::Boolean, @@ -239,6 +257,10 @@ module ModerationAPI # Provide a channel ID or key. Will use the project's default channel if not # provided. channel: nil, + # A recommendation from your own client-side flagging (e.g. a banned-IP list or a + # third-party tool). Feeds the rules engine and can escalate or override the + # recommended action. Does not change whether our analysis flagged the content. + client_action: nil, # The unique ID of the content in your database. content_id: nil, # For example the ID of a chat room or a post @@ -271,6 +293,7 @@ module ModerationAPI ), author_id: String, channel: String, + client_action: ModerationAPI::ContentSubmitParams::ClientAction, content_id: String, conversation_id: String, do_not_store: T::Boolean, @@ -723,6 +746,174 @@ module ModerationAPI end end + class ClientAction < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::ContentSubmitParams::ClientAction, + ModerationAPI::Internal::AnyHash + ) + end + + # Your recommendation for the content: allow, review, or reject. + sig do + returns( + ModerationAPI::ContentSubmitParams::ClientAction::Action::OrSymbol + ) + end + attr_accessor :action + + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + sig do + returns( + T.nilable( + ModerationAPI::ContentSubmitParams::ClientAction::Behavior::OrSymbol + ) + ) + end + attr_reader :behavior + + sig do + params( + behavior: + ModerationAPI::ContentSubmitParams::ClientAction::Behavior::OrSymbol + ).void + end + attr_writer :behavior + + # A human-readable explanation for your recommendation. + sig { returns(T.nilable(String)) } + attr_reader :reason + + sig { params(reason: String).void } + attr_writer :reason + + # Where your recommendation came from, e.g. "banned-ip". + sig { returns(T.nilable(String)) } + attr_reader :source + + sig { params(source: String).void } + attr_writer :source + + # A recommendation from your own client-side flagging (e.g. a banned-IP list or a + # third-party tool). Feeds the rules engine and can escalate or override the + # recommended action. Does not change whether our analysis flagged the content. + sig do + params( + action: + ModerationAPI::ContentSubmitParams::ClientAction::Action::OrSymbol, + behavior: + ModerationAPI::ContentSubmitParams::ClientAction::Behavior::OrSymbol, + reason: String, + source: String + ).returns(T.attached_class) + end + def self.new( + # Your recommendation for the content: allow, review, or reject. + action:, + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + behavior: nil, + # A human-readable explanation for your recommendation. + reason: nil, + # Where your recommendation came from, e.g. "banned-ip". + source: nil + ) + end + + sig do + override.returns( + { + action: + ModerationAPI::ContentSubmitParams::ClientAction::Action::OrSymbol, + behavior: + ModerationAPI::ContentSubmitParams::ClientAction::Behavior::OrSymbol, + reason: String, + source: String + } + ) + end + def to_hash + end + + # Your recommendation for the content: allow, review, or reject. + module Action + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::ContentSubmitParams::ClientAction::Action + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + REVIEW = + T.let( + :review, + ModerationAPI::ContentSubmitParams::ClientAction::Action::TaggedSymbol + ) + ALLOW = + T.let( + :allow, + ModerationAPI::ContentSubmitParams::ClientAction::Action::TaggedSymbol + ) + REJECT = + T.let( + :reject, + ModerationAPI::ContentSubmitParams::ClientAction::Action::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::ContentSubmitParams::ClientAction::Action::TaggedSymbol + ] + ) + end + def self.values + end + end + + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + module Behavior + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::ContentSubmitParams::ClientAction::Behavior + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + OVERRIDE = + T.let( + :override, + ModerationAPI::ContentSubmitParams::ClientAction::Behavior::TaggedSymbol + ) + ESCALATE = + T.let( + :escalate, + ModerationAPI::ContentSubmitParams::ClientAction::Behavior::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::ContentSubmitParams::ClientAction::Behavior::TaggedSymbol + ] + ) + end + def self.values + end + end + end + # The meta type of content being moderated module MetaType extend ModerationAPI::Internal::Type::Enum diff --git a/rbi/moderation_api/models/content_submit_response.rbi b/rbi/moderation_api/models/content_submit_response.rbi index 5c0ee8d..80c2b32 100644 --- a/rbi/moderation_api/models/content_submit_response.rbi +++ b/rbi/moderation_api/models/content_submit_response.rbi @@ -1776,6 +1776,11 @@ module ModerationAPI :rule_fallback, ModerationAPI::Models::ContentSubmitResponse::Recommendation::ReasonCode::TaggedSymbol ) + CLIENT_OVERRIDE = + T.let( + :client_override, + ModerationAPI::Models::ContentSubmitResponse::Recommendation::ReasonCode::TaggedSymbol + ) sig do override.returns( diff --git a/rbi/moderation_api/models/webhook_event.rbi b/rbi/moderation_api/models/webhook_event.rbi index c4bae90..825cb93 100644 --- a/rbi/moderation_api/models/webhook_event.rbi +++ b/rbi/moderation_api/models/webhook_event.rbi @@ -4487,6 +4487,26 @@ module ModerationAPI sig { returns(T.nilable(String)) } attr_accessor :channel_key + # A recommendation from your own client-side flagging. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction + ) + ) + end + attr_reader :client_action + + sig do + params( + client_action: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::OrHash + ) + ).void + end + attr_writer :client_action + # The original content payload sig do returns( @@ -4550,6 +4570,10 @@ module ModerationAPI id: String, author_id: T.nilable(String), channel_key: T.nilable(String), + client_action: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::OrHash + ), content: T.any( ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::Content::Text::OrHash, @@ -4583,6 +4607,8 @@ module ModerationAPI # The channel the content was submitted to, identified by your customer-defined # channel key. channel_key:, + # A recommendation from your own client-side flagging. + client_action:, # The original content payload content:, # Conversation grouping ID, if any @@ -4610,6 +4636,10 @@ module ModerationAPI id: String, author_id: T.nilable(String), channel_key: T.nilable(String), + client_action: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction + ), content: T.any( ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::Content::Text, @@ -4639,6 +4669,172 @@ module ModerationAPI def to_hash end + class ClientAction < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction, + ModerationAPI::Internal::AnyHash + ) + end + + # Your recommendation for the content: allow, review, or reject. + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Action::OrSymbol + ) + end + attr_accessor :action + + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Behavior::OrSymbol + ) + ) + end + attr_reader :behavior + + sig do + params( + behavior: + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Behavior::OrSymbol + ).void + end + attr_writer :behavior + + # A human-readable explanation for your recommendation. + sig { returns(T.nilable(String)) } + attr_reader :reason + + sig { params(reason: String).void } + attr_writer :reason + + # Where your recommendation came from, e.g. "banned-ip". + sig { returns(T.nilable(String)) } + attr_reader :source + + sig { params(source: String).void } + attr_writer :source + + # A recommendation from your own client-side flagging. + sig do + params( + action: + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Action::OrSymbol, + behavior: + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Behavior::OrSymbol, + reason: String, + source: String + ).returns(T.attached_class) + end + def self.new( + # Your recommendation for the content: allow, review, or reject. + action:, + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + behavior: nil, + # A human-readable explanation for your recommendation. + reason: nil, + # Where your recommendation came from, e.g. "banned-ip". + source: nil + ) + end + + sig do + override.returns( + { + action: + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Action::OrSymbol, + behavior: + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Behavior::OrSymbol, + reason: String, + source: String + } + ) + end + def to_hash + end + + # Your recommendation for the content: allow, review, or reject. + module Action + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Action + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + REVIEW = + T.let( + :review, + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Action::TaggedSymbol + ) + ALLOW = + T.let( + :allow, + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Action::TaggedSymbol + ) + REJECT = + T.let( + :reject, + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Action::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Action::TaggedSymbol + ] + ) + end + def self.values + end + end + + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + module Behavior + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Behavior + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + OVERRIDE = + T.let( + :override, + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Behavior::TaggedSymbol + ) + ESCALATE = + T.let( + :escalate, + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Behavior::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::Behavior::TaggedSymbol + ] + ) + end + def self.values + end + end + end + # The original content payload module Content extend ModerationAPI::Internal::Type::Union @@ -6759,6 +6955,26 @@ module ModerationAPI sig { returns(T.nilable(String)) } attr_accessor :channel_key + # A recommendation from your own client-side flagging. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction + ) + ) + end + attr_reader :client_action + + sig do + params( + client_action: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::OrHash + ) + ).void + end + attr_writer :client_action + # The original content payload sig do returns( @@ -6823,6 +7039,10 @@ module ModerationAPI id: String, author_id: T.nilable(String), channel_key: T.nilable(String), + client_action: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::OrHash + ), content: T.any( ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Text::OrHash, @@ -6856,6 +7076,8 @@ module ModerationAPI # The channel the content was submitted to, identified by your customer-defined # channel key. channel_key:, + # A recommendation from your own client-side flagging. + client_action:, # The original content payload content:, # Conversation grouping ID, if any @@ -6883,6 +7105,10 @@ module ModerationAPI id: String, author_id: T.nilable(String), channel_key: T.nilable(String), + client_action: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction + ), content: T.any( ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Text, @@ -6912,6 +7138,172 @@ module ModerationAPI def to_hash end + class ClientAction < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction, + ModerationAPI::Internal::AnyHash + ) + end + + # Your recommendation for the content: allow, review, or reject. + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Action::OrSymbol + ) + end + attr_accessor :action + + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Behavior::OrSymbol + ) + ) + end + attr_reader :behavior + + sig do + params( + behavior: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Behavior::OrSymbol + ).void + end + attr_writer :behavior + + # A human-readable explanation for your recommendation. + sig { returns(T.nilable(String)) } + attr_reader :reason + + sig { params(reason: String).void } + attr_writer :reason + + # Where your recommendation came from, e.g. "banned-ip". + sig { returns(T.nilable(String)) } + attr_reader :source + + sig { params(source: String).void } + attr_writer :source + + # A recommendation from your own client-side flagging. + sig do + params( + action: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Action::OrSymbol, + behavior: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Behavior::OrSymbol, + reason: String, + source: String + ).returns(T.attached_class) + end + def self.new( + # Your recommendation for the content: allow, review, or reject. + action:, + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + behavior: nil, + # A human-readable explanation for your recommendation. + reason: nil, + # Where your recommendation came from, e.g. "banned-ip". + source: nil + ) + end + + sig do + override.returns( + { + action: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Action::OrSymbol, + behavior: + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Behavior::OrSymbol, + reason: String, + source: String + } + ) + end + def to_hash + end + + # Your recommendation for the content: allow, review, or reject. + module Action + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Action + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + REVIEW = + T.let( + :review, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Action::TaggedSymbol + ) + ALLOW = + T.let( + :allow, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Action::TaggedSymbol + ) + REJECT = + T.let( + :reject, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Action::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Action::TaggedSymbol + ] + ) + end + def self.values + end + end + + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + module Behavior + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Behavior + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + OVERRIDE = + T.let( + :override, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Behavior::TaggedSymbol + ) + ESCALATE = + T.let( + :escalate, + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Behavior::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::Behavior::TaggedSymbol + ] + ) + end + def self.values + end + end + end + # The original content payload module Content extend ModerationAPI::Internal::Type::Union @@ -8532,6 +8924,26 @@ module ModerationAPI sig { returns(T.nilable(String)) } attr_accessor :channel_key + # A recommendation from your own client-side flagging. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction + ) + ) + end + attr_reader :client_action + + sig do + params( + client_action: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::OrHash + ) + ).void + end + attr_writer :client_action + # The original content payload sig do returns( @@ -8596,6 +9008,10 @@ module ModerationAPI id: String, author_id: T.nilable(String), channel_key: T.nilable(String), + client_action: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::OrHash + ), content: T.any( ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Text::OrHash, @@ -8629,6 +9045,8 @@ module ModerationAPI # The channel the content was submitted to, identified by your customer-defined # channel key. channel_key:, + # A recommendation from your own client-side flagging. + client_action:, # The original content payload content:, # Conversation grouping ID, if any @@ -8656,6 +9074,10 @@ module ModerationAPI id: String, author_id: T.nilable(String), channel_key: T.nilable(String), + client_action: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction + ), content: T.any( ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Text, @@ -8685,6 +9107,172 @@ module ModerationAPI def to_hash end + class ClientAction < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction, + ModerationAPI::Internal::AnyHash + ) + end + + # Your recommendation for the content: allow, review, or reject. + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Action::OrSymbol + ) + end + attr_accessor :action + + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Behavior::OrSymbol + ) + ) + end + attr_reader :behavior + + sig do + params( + behavior: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Behavior::OrSymbol + ).void + end + attr_writer :behavior + + # A human-readable explanation for your recommendation. + sig { returns(T.nilable(String)) } + attr_reader :reason + + sig { params(reason: String).void } + attr_writer :reason + + # Where your recommendation came from, e.g. "banned-ip". + sig { returns(T.nilable(String)) } + attr_reader :source + + sig { params(source: String).void } + attr_writer :source + + # A recommendation from your own client-side flagging. + sig do + params( + action: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Action::OrSymbol, + behavior: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Behavior::OrSymbol, + reason: String, + source: String + ).returns(T.attached_class) + end + def self.new( + # Your recommendation for the content: allow, review, or reject. + action:, + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + behavior: nil, + # A human-readable explanation for your recommendation. + reason: nil, + # Where your recommendation came from, e.g. "banned-ip". + source: nil + ) + end + + sig do + override.returns( + { + action: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Action::OrSymbol, + behavior: + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Behavior::OrSymbol, + reason: String, + source: String + } + ) + end + def to_hash + end + + # Your recommendation for the content: allow, review, or reject. + module Action + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Action + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + REVIEW = + T.let( + :review, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Action::TaggedSymbol + ) + ALLOW = + T.let( + :allow, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Action::TaggedSymbol + ) + REJECT = + T.let( + :reject, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Action::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Action::TaggedSymbol + ] + ) + end + def self.values + end + end + + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + module Behavior + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Behavior + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + OVERRIDE = + T.let( + :override, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Behavior::TaggedSymbol + ) + ESCALATE = + T.let( + :escalate, + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Behavior::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::Behavior::TaggedSymbol + ] + ) + end + def self.values + end + end + end + # The original content payload module Content extend ModerationAPI::Internal::Type::Union @@ -10303,6 +10891,26 @@ module ModerationAPI sig { returns(T.nilable(String)) } attr_accessor :channel_key + # A recommendation from your own client-side flagging. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction + ) + ) + end + attr_reader :client_action + + sig do + params( + client_action: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::OrHash + ) + ).void + end + attr_writer :client_action + # The original content payload sig do returns( @@ -10367,6 +10975,10 @@ module ModerationAPI id: String, author_id: T.nilable(String), channel_key: T.nilable(String), + client_action: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::OrHash + ), content: T.any( ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Text::OrHash, @@ -10400,6 +11012,8 @@ module ModerationAPI # The channel the content was submitted to, identified by your customer-defined # channel key. channel_key:, + # A recommendation from your own client-side flagging. + client_action:, # The original content payload content:, # Conversation grouping ID, if any @@ -10427,6 +11041,10 @@ module ModerationAPI id: String, author_id: T.nilable(String), channel_key: T.nilable(String), + client_action: + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction + ), content: T.any( ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Text, @@ -10456,6 +11074,172 @@ module ModerationAPI def to_hash end + class ClientAction < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction, + ModerationAPI::Internal::AnyHash + ) + end + + # Your recommendation for the content: allow, review, or reject. + sig do + returns( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Action::OrSymbol + ) + end + attr_accessor :action + + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + sig do + returns( + T.nilable( + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Behavior::OrSymbol + ) + ) + end + attr_reader :behavior + + sig do + params( + behavior: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Behavior::OrSymbol + ).void + end + attr_writer :behavior + + # A human-readable explanation for your recommendation. + sig { returns(T.nilable(String)) } + attr_reader :reason + + sig { params(reason: String).void } + attr_writer :reason + + # Where your recommendation came from, e.g. "banned-ip". + sig { returns(T.nilable(String)) } + attr_reader :source + + sig { params(source: String).void } + attr_writer :source + + # A recommendation from your own client-side flagging. + sig do + params( + action: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Action::OrSymbol, + behavior: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Behavior::OrSymbol, + reason: String, + source: String + ).returns(T.attached_class) + end + def self.new( + # Your recommendation for the content: allow, review, or reject. + action:, + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + behavior: nil, + # A human-readable explanation for your recommendation. + reason: nil, + # Where your recommendation came from, e.g. "banned-ip". + source: nil + ) + end + + sig do + override.returns( + { + action: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Action::OrSymbol, + behavior: + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Behavior::OrSymbol, + reason: String, + source: String + } + ) + end + def to_hash + end + + # Your recommendation for the content: allow, review, or reject. + module Action + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Action + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + REVIEW = + T.let( + :review, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Action::TaggedSymbol + ) + ALLOW = + T.let( + :allow, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Action::TaggedSymbol + ) + REJECT = + T.let( + :reject, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Action::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Action::TaggedSymbol + ] + ) + end + def self.values + end + end + + # How your recommendation combines with ours. Defaults to 'escalate', which only + # applies it when stricter than ours; 'override' replaces ours outright. + module Behavior + extend ModerationAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Behavior + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + OVERRIDE = + T.let( + :override, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Behavior::TaggedSymbol + ) + ESCALATE = + T.let( + :escalate, + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Behavior::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::Behavior::TaggedSymbol + ] + ) + end + def self.values + end + end + end + # The original content payload module Content extend ModerationAPI::Internal::Type::Union diff --git a/rbi/moderation_api/resources/content.rbi b/rbi/moderation_api/resources/content.rbi index 11180c4..ded6614 100644 --- a/rbi/moderation_api/resources/content.rbi +++ b/rbi/moderation_api/resources/content.rbi @@ -15,6 +15,8 @@ module ModerationAPI ), author_id: String, channel: String, + client_action: + ModerationAPI::ContentSubmitParams::ClientAction::OrHash, content_id: String, conversation_id: String, do_not_store: T::Boolean, @@ -66,6 +68,10 @@ module ModerationAPI # Provide a channel ID or key. Will use the project's default channel if not # provided. channel: nil, + # A recommendation from your own client-side flagging (e.g. a banned-IP list or a + # third-party tool). Feeds the rules engine and can escalate or override the + # recommended action. Does not change whether our analysis flagged the content. + client_action: nil, # The unique ID of the content in your database. content_id: nil, # For example the ID of a chat room or a post diff --git a/sig/moderation_api/models/content_submit_params.rbs b/sig/moderation_api/models/content_submit_params.rbs index d55846c..4c2d541 100644 --- a/sig/moderation_api/models/content_submit_params.rbs +++ b/sig/moderation_api/models/content_submit_params.rbs @@ -5,6 +5,7 @@ module ModerationAPI content: ModerationAPI::Models::ContentSubmitParams::content, author_id: String, channel: String, + client_action: ModerationAPI::ContentSubmitParams::ClientAction, content_id: String, conversation_id: String, do_not_store: bool, @@ -29,6 +30,12 @@ module ModerationAPI def channel=: (String) -> String + attr_reader client_action: ModerationAPI::ContentSubmitParams::ClientAction? + + def client_action=: ( + ModerationAPI::ContentSubmitParams::ClientAction + ) -> ModerationAPI::ContentSubmitParams::ClientAction + attr_reader content_id: String? def content_id=: (String) -> String @@ -65,6 +72,7 @@ module ModerationAPI content: ModerationAPI::Models::ContentSubmitParams::content, ?author_id: String, ?channel: String, + ?client_action: ModerationAPI::ContentSubmitParams::ClientAction, ?content_id: String, ?conversation_id: String, ?do_not_store: bool, @@ -79,6 +87,7 @@ module ModerationAPI content: ModerationAPI::Models::ContentSubmitParams::content, author_id: String, channel: String, + client_action: ModerationAPI::ContentSubmitParams::ClientAction, content_id: String, conversation_id: String, do_not_store: bool, @@ -248,6 +257,69 @@ module ModerationAPI def self?.variants: -> ::Array[ModerationAPI::Models::ContentSubmitParams::content] end + type client_action = + { + action: ModerationAPI::Models::ContentSubmitParams::ClientAction::action, + behavior: ModerationAPI::Models::ContentSubmitParams::ClientAction::behavior, + reason: String, + source: String + } + + class ClientAction < ModerationAPI::Internal::Type::BaseModel + attr_accessor action: ModerationAPI::Models::ContentSubmitParams::ClientAction::action + + attr_reader behavior: ModerationAPI::Models::ContentSubmitParams::ClientAction::behavior? + + def behavior=: ( + ModerationAPI::Models::ContentSubmitParams::ClientAction::behavior + ) -> ModerationAPI::Models::ContentSubmitParams::ClientAction::behavior + + attr_reader reason: String? + + def reason=: (String) -> String + + attr_reader source: String? + + def source=: (String) -> String + + def initialize: ( + action: ModerationAPI::Models::ContentSubmitParams::ClientAction::action, + ?behavior: ModerationAPI::Models::ContentSubmitParams::ClientAction::behavior, + ?reason: String, + ?source: String + ) -> void + + def to_hash: -> { + action: ModerationAPI::Models::ContentSubmitParams::ClientAction::action, + behavior: ModerationAPI::Models::ContentSubmitParams::ClientAction::behavior, + reason: String, + source: String + } + + type action = :review | :allow | :reject + + module Action + extend ModerationAPI::Internal::Type::Enum + + REVIEW: :review + ALLOW: :allow + REJECT: :reject + + def self?.values: -> ::Array[ModerationAPI::Models::ContentSubmitParams::ClientAction::action] + end + + type behavior = :override | :escalate + + module Behavior + extend ModerationAPI::Internal::Type::Enum + + OVERRIDE: :override + ESCALATE: :escalate + + def self?.values: -> ::Array[ModerationAPI::Models::ContentSubmitParams::ClientAction::behavior] + end + end + type meta_type = :profile | :message diff --git a/sig/moderation_api/models/content_submit_response.rbs b/sig/moderation_api/models/content_submit_response.rbs index 307fdfe..f2b6052 100644 --- a/sig/moderation_api/models/content_submit_response.rbs +++ b/sig/moderation_api/models/content_submit_response.rbs @@ -736,6 +736,7 @@ module ModerationAPI | :rule_match | :rule_default | :rule_fallback + | :client_override module ReasonCode extend ModerationAPI::Internal::Type::Enum @@ -749,6 +750,7 @@ module ModerationAPI RULE_MATCH: :rule_match RULE_DEFAULT: :rule_default RULE_FALLBACK: :rule_fallback + CLIENT_OVERRIDE: :client_override def self?.values: -> ::Array[ModerationAPI::Models::ContentSubmitResponse::Recommendation::reason_code] end diff --git a/sig/moderation_api/models/webhook_event.rbs b/sig/moderation_api/models/webhook_event.rbs index 596604c..c943015 100644 --- a/sig/moderation_api/models/webhook_event.rbs +++ b/sig/moderation_api/models/webhook_event.rbs @@ -1846,6 +1846,7 @@ module ModerationAPI id: String, author_id: String?, channel_key: String?, + client_action: ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction?, content: ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::content, conversation_id: String?, flagged: bool?, @@ -1863,6 +1864,8 @@ module ModerationAPI attr_accessor channel_key: String? + attr_accessor client_action: ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction? + attr_accessor content: ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::content attr_accessor conversation_id: String? @@ -1883,6 +1886,7 @@ module ModerationAPI id: String, author_id: String?, channel_key: String?, + client_action: ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction?, content: ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::content, conversation_id: String?, flagged: bool?, @@ -1897,6 +1901,7 @@ module ModerationAPI id: String, author_id: String?, channel_key: String?, + client_action: ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction?, content: ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::content, conversation_id: String?, flagged: bool?, @@ -1907,6 +1912,69 @@ module ModerationAPI timestamp: Time } + type client_action = + { + action: ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::action, + behavior: ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::behavior, + reason: String, + source: String + } + + class ClientAction < ModerationAPI::Internal::Type::BaseModel + attr_accessor action: ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::action + + attr_reader behavior: ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::behavior? + + def behavior=: ( + ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::behavior + ) -> ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::behavior + + attr_reader reason: String? + + def reason=: (String) -> String + + attr_reader source: String? + + def source=: (String) -> String + + def initialize: ( + action: ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::action, + ?behavior: ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::behavior, + ?reason: String, + ?source: String + ) -> void + + def to_hash: -> { + action: ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::action, + behavior: ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::behavior, + reason: String, + source: String + } + + type action = :review | :allow | :reject + + module Action + extend ModerationAPI::Internal::Type::Enum + + REVIEW: :review + ALLOW: :allow + REJECT: :reject + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::action] + end + + type behavior = :override | :escalate + + module Behavior + extend ModerationAPI::Internal::Type::Enum + + OVERRIDE: :override + ESCALATE: :escalate + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemResolved::Data::Object::Item::ClientAction::behavior] + end + end + type content = ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::Content::Text | ModerationAPI::WebhookEvent::QueueItemResolved::Data::Object::Item::Content::Image @@ -2795,6 +2863,7 @@ module ModerationAPI id: String, author_id: String?, channel_key: String?, + client_action: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction?, content: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::content, conversation_id: String?, flagged: bool?, @@ -2812,6 +2881,8 @@ module ModerationAPI attr_accessor channel_key: String? + attr_accessor client_action: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction? + attr_accessor content: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::content attr_accessor conversation_id: String? @@ -2832,6 +2903,7 @@ module ModerationAPI id: String, author_id: String?, channel_key: String?, + client_action: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction?, content: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::content, conversation_id: String?, flagged: bool?, @@ -2846,6 +2918,7 @@ module ModerationAPI id: String, author_id: String?, channel_key: String?, + client_action: ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction?, content: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::content, conversation_id: String?, flagged: bool?, @@ -2856,6 +2929,69 @@ module ModerationAPI timestamp: Time } + type client_action = + { + action: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::action, + behavior: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::behavior, + reason: String, + source: String + } + + class ClientAction < ModerationAPI::Internal::Type::BaseModel + attr_accessor action: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::action + + attr_reader behavior: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::behavior? + + def behavior=: ( + ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::behavior + ) -> ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::behavior + + attr_reader reason: String? + + def reason=: (String) -> String + + attr_reader source: String? + + def source=: (String) -> String + + def initialize: ( + action: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::action, + ?behavior: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::behavior, + ?reason: String, + ?source: String + ) -> void + + def to_hash: -> { + action: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::action, + behavior: ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::behavior, + reason: String, + source: String + } + + type action = :review | :allow | :reject + + module Action + extend ModerationAPI::Internal::Type::Enum + + REVIEW: :review + ALLOW: :allow + REJECT: :reject + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::action] + end + + type behavior = :override | :escalate + + module Behavior + extend ModerationAPI::Internal::Type::Enum + + OVERRIDE: :override + ESCALATE: :escalate + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemAction::Data::Object::Item::ClientAction::behavior] + end + end + type content = ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Text | ModerationAPI::WebhookEvent::QueueItemAction::Data::Object::Item::Content::Image @@ -3549,6 +3685,7 @@ module ModerationAPI id: String, author_id: String?, channel_key: String?, + client_action: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction?, content: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::content, conversation_id: String?, flagged: bool?, @@ -3566,6 +3703,8 @@ module ModerationAPI attr_accessor channel_key: String? + attr_accessor client_action: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction? + attr_accessor content: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::content attr_accessor conversation_id: String? @@ -3586,6 +3725,7 @@ module ModerationAPI id: String, author_id: String?, channel_key: String?, + client_action: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction?, content: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::content, conversation_id: String?, flagged: bool?, @@ -3600,6 +3740,7 @@ module ModerationAPI id: String, author_id: String?, channel_key: String?, + client_action: ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction?, content: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::content, conversation_id: String?, flagged: bool?, @@ -3610,6 +3751,69 @@ module ModerationAPI timestamp: Time } + type client_action = + { + action: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::action, + behavior: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::behavior, + reason: String, + source: String + } + + class ClientAction < ModerationAPI::Internal::Type::BaseModel + attr_accessor action: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::action + + attr_reader behavior: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::behavior? + + def behavior=: ( + ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::behavior + ) -> ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::behavior + + attr_reader reason: String? + + def reason=: (String) -> String + + attr_reader source: String? + + def source=: (String) -> String + + def initialize: ( + action: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::action, + ?behavior: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::behavior, + ?reason: String, + ?source: String + ) -> void + + def to_hash: -> { + action: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::action, + behavior: ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::behavior, + reason: String, + source: String + } + + type action = :review | :allow | :reject + + module Action + extend ModerationAPI::Internal::Type::Enum + + REVIEW: :review + ALLOW: :allow + REJECT: :reject + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::action] + end + + type behavior = :override | :escalate + + module Behavior + extend ModerationAPI::Internal::Type::Enum + + OVERRIDE: :override + ESCALATE: :escalate + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemRejected::Data::Object::Item::ClientAction::behavior] + end + end + type content = ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Text | ModerationAPI::WebhookEvent::QueueItemRejected::Data::Object::Item::Content::Image @@ -4303,6 +4507,7 @@ module ModerationAPI id: String, author_id: String?, channel_key: String?, + client_action: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction?, content: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::content, conversation_id: String?, flagged: bool?, @@ -4320,6 +4525,8 @@ module ModerationAPI attr_accessor channel_key: String? + attr_accessor client_action: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction? + attr_accessor content: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::content attr_accessor conversation_id: String? @@ -4340,6 +4547,7 @@ module ModerationAPI id: String, author_id: String?, channel_key: String?, + client_action: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction?, content: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::content, conversation_id: String?, flagged: bool?, @@ -4354,6 +4562,7 @@ module ModerationAPI id: String, author_id: String?, channel_key: String?, + client_action: ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction?, content: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::content, conversation_id: String?, flagged: bool?, @@ -4364,6 +4573,69 @@ module ModerationAPI timestamp: Time } + type client_action = + { + action: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::action, + behavior: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::behavior, + reason: String, + source: String + } + + class ClientAction < ModerationAPI::Internal::Type::BaseModel + attr_accessor action: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::action + + attr_reader behavior: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::behavior? + + def behavior=: ( + ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::behavior + ) -> ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::behavior + + attr_reader reason: String? + + def reason=: (String) -> String + + attr_reader source: String? + + def source=: (String) -> String + + def initialize: ( + action: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::action, + ?behavior: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::behavior, + ?reason: String, + ?source: String + ) -> void + + def to_hash: -> { + action: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::action, + behavior: ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::behavior, + reason: String, + source: String + } + + type action = :review | :allow | :reject + + module Action + extend ModerationAPI::Internal::Type::Enum + + REVIEW: :review + ALLOW: :allow + REJECT: :reject + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::action] + end + + type behavior = :override | :escalate + + module Behavior + extend ModerationAPI::Internal::Type::Enum + + OVERRIDE: :override + ESCALATE: :escalate + + def self?.values: -> ::Array[ModerationAPI::Models::WebhookEvent::QueueItemAllowed::Data::Object::Item::ClientAction::behavior] + end + end + type content = ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Text | ModerationAPI::WebhookEvent::QueueItemAllowed::Data::Object::Item::Content::Image diff --git a/sig/moderation_api/resources/content.rbs b/sig/moderation_api/resources/content.rbs index 0c18ca8..3ef8470 100644 --- a/sig/moderation_api/resources/content.rbs +++ b/sig/moderation_api/resources/content.rbs @@ -5,6 +5,7 @@ module ModerationAPI content: ModerationAPI::Models::ContentSubmitParams::content, ?author_id: String, ?channel: String, + ?client_action: ModerationAPI::ContentSubmitParams::ClientAction, ?content_id: String, ?conversation_id: String, ?do_not_store: bool,