From e10d767174c28e0ae756041d7d2f1f78f2c72241 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 23 Jul 2026 19:48:33 +0000 Subject: [PATCH 1/2] feat: Remove /bulk endpoints from api-spec (C-19507) (#171) * Remove /bulk endpoints from api-spec (C-19507) Removes the `/bulk` resource and all of its endpoints: - POST /bulk (create job) - POST /bulk/{job_id} (add users) - GET /bulk/{job_id} (get job) - POST /bulk/{job_id}/run (run job) - GET /bulk/{job_id}/users (get users) Deletes the corresponding paths and now-orphaned Bulk component schemas from specs/openapi.yml and the `bulk` resource from specs/stainless.yml. The unrelated /users/{user_id}/preferences bulk update/replace endpoints are untouched. Co-Authored-By: Claude Opus 4.8 * Remove bulk e2e test The /bulk endpoints were removed, so the generated SDK no longer exposes courier.bulk. Delete the corresponding e2e test. Co-Authored-By: Claude Opus 4.8 * Remove bulk SDK examples The /bulk endpoints were removed, so the generated SDKs no longer expose the bulk resource. Delete the per-language bulk example files (csharp, go, java, kotlin, php, python, ruby) that reference client.bulk() and were breaking the example compile/test checks. Co-Authored-By: Claude Opus 4.8 --------- Co-authored-by: Claude Opus 4.8 --- .stats.yml | 8 +- lib/courier.rb | 11 -- lib/courier/client.rb | 4 - lib/courier/models.rb | 14 -- lib/courier/models/bulk_add_users_params.rb | 26 --- lib/courier/models/bulk_create_job_params.rb | 29 ---- .../models/bulk_create_job_response.rb | 16 -- lib/courier/models/bulk_list_users_params.rb | 33 ---- .../models/bulk_list_users_response.rb | 49 ------ .../models/bulk_retrieve_job_params.rb | 20 --- .../models/bulk_retrieve_job_response.rb | 76 --------- lib/courier/models/bulk_run_job_params.rb | 20 --- lib/courier/models/inbound_bulk_message.rb | 91 ---------- .../models/inbound_bulk_message_user.rb | 54 ------ lib/courier/resources/bulk.rb | 141 ---------------- rbi/courier/client.rbi | 3 - rbi/courier/models.rbi | 14 -- rbi/courier/models/bulk_add_users_params.rbi | 43 ----- rbi/courier/models/bulk_create_job_params.rbi | 54 ------ .../models/bulk_create_job_response.rbi | 26 --- rbi/courier/models/bulk_list_users_params.rbi | 51 ------ .../models/bulk_list_users_response.rbi | 125 -------------- .../models/bulk_retrieve_job_params.rbi | 35 ---- .../models/bulk_retrieve_job_response.rbi | 157 ------------------ rbi/courier/models/bulk_run_job_params.rbi | 35 ---- rbi/courier/models/inbound_bulk_message.rbi | 124 -------------- .../models/inbound_bulk_message_user.rbi | 88 ---------- rbi/courier/resources/bulk.rbi | 102 ------------ sig/courier/client.rbs | 2 - sig/courier/models.rbs | 14 -- sig/courier/models/bulk_add_users_params.rbs | 28 ---- sig/courier/models/bulk_create_job_params.rbs | 24 --- .../models/bulk_create_job_response.rbs | 13 -- sig/courier/models/bulk_list_users_params.rbs | 28 ---- .../models/bulk_list_users_response.rbs | 65 -------- .../models/bulk_retrieve_job_params.rbs | 23 --- .../models/bulk_retrieve_job_response.rbs | 66 -------- sig/courier/models/bulk_run_job_params.rbs | 23 --- sig/courier/models/inbound_bulk_message.rbs | 58 ------- .../models/inbound_bulk_message_user.rbs | 42 ----- sig/courier/resources/bulk.rbs | 34 ---- test/courier/resources/bulk_test.rb | 74 --------- 42 files changed, 4 insertions(+), 1939 deletions(-) delete mode 100644 lib/courier/models/bulk_add_users_params.rb delete mode 100644 lib/courier/models/bulk_create_job_params.rb delete mode 100644 lib/courier/models/bulk_create_job_response.rb delete mode 100644 lib/courier/models/bulk_list_users_params.rb delete mode 100644 lib/courier/models/bulk_list_users_response.rb delete mode 100644 lib/courier/models/bulk_retrieve_job_params.rb delete mode 100644 lib/courier/models/bulk_retrieve_job_response.rb delete mode 100644 lib/courier/models/bulk_run_job_params.rb delete mode 100644 lib/courier/models/inbound_bulk_message.rb delete mode 100644 lib/courier/models/inbound_bulk_message_user.rb delete mode 100644 lib/courier/resources/bulk.rb delete mode 100644 rbi/courier/models/bulk_add_users_params.rbi delete mode 100644 rbi/courier/models/bulk_create_job_params.rbi delete mode 100644 rbi/courier/models/bulk_create_job_response.rbi delete mode 100644 rbi/courier/models/bulk_list_users_params.rbi delete mode 100644 rbi/courier/models/bulk_list_users_response.rbi delete mode 100644 rbi/courier/models/bulk_retrieve_job_params.rbi delete mode 100644 rbi/courier/models/bulk_retrieve_job_response.rbi delete mode 100644 rbi/courier/models/bulk_run_job_params.rbi delete mode 100644 rbi/courier/models/inbound_bulk_message.rbi delete mode 100644 rbi/courier/models/inbound_bulk_message_user.rbi delete mode 100644 rbi/courier/resources/bulk.rbi delete mode 100644 sig/courier/models/bulk_add_users_params.rbs delete mode 100644 sig/courier/models/bulk_create_job_params.rbs delete mode 100644 sig/courier/models/bulk_create_job_response.rbs delete mode 100644 sig/courier/models/bulk_list_users_params.rbs delete mode 100644 sig/courier/models/bulk_list_users_response.rbs delete mode 100644 sig/courier/models/bulk_retrieve_job_params.rbs delete mode 100644 sig/courier/models/bulk_retrieve_job_response.rbs delete mode 100644 sig/courier/models/bulk_run_job_params.rbs delete mode 100644 sig/courier/models/inbound_bulk_message.rbs delete mode 100644 sig/courier/models/inbound_bulk_message_user.rbs delete mode 100644 sig/courier/resources/bulk.rbs delete mode 100644 test/courier/resources/bulk_test.rb diff --git a/.stats.yml b/.stats.yml index 44174988..e2794c72 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 139 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/courier/courier-b03f5346718dcd7b22f15893445ea593ab87535c90c540fc5a796c6ecd54d779.yml -openapi_spec_hash: 15677d3be4ecd33eab154080b4bc437f -config_hash: dcd58abf1e56b114bdce22336ca3d570 +configured_endpoints: 134 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/courier/courier-b053468fefe6d757f86f3233ebbc52d80329ed2a6e7a6740fee01e4028a4c3b9.yml +openapi_spec_hash: 416835e693de0fe19945be90a787d3f3 +config_hash: 8d28dbeabe9d4dcc7d5b8c021a4cbbd7 diff --git a/lib/courier.rb b/lib/courier.rb index 35cb3d70..36d016d5 100644 --- a/lib/courier.rb +++ b/lib/courier.rb @@ -54,7 +54,6 @@ require_relative "courier/client" require_relative "courier/models/elemental_base_node" require_relative "courier/models/brand_template" -require_relative "courier/models/inbound_bulk_message_user" require_relative "courier/models/base_check" require_relative "courier/models/subscription_topic_new" require_relative "courier/models/elemental_channel_node" @@ -125,14 +124,6 @@ require_relative "courier/models/brand_snippet" require_relative "courier/models/brand_snippets" require_relative "courier/models/brand_update_params" -require_relative "courier/models/bulk_add_users_params" -require_relative "courier/models/bulk_create_job_params" -require_relative "courier/models/bulk_create_job_response" -require_relative "courier/models/bulk_list_users_params" -require_relative "courier/models/bulk_list_users_response" -require_relative "courier/models/bulk_retrieve_job_params" -require_relative "courier/models/bulk_retrieve_job_response" -require_relative "courier/models/bulk_run_job_params" require_relative "courier/models/cancel_journey_response" require_relative "courier/models/channel" require_relative "courier/models/channel_classification" @@ -165,7 +156,6 @@ require_relative "courier/models/expo" require_relative "courier/models/filter_config" require_relative "courier/models/icons" -require_relative "courier/models/inbound_bulk_message" require_relative "courier/models/inbound_track_event_params" require_relative "courier/models/inbound_track_event_response" require_relative "courier/models/intercom" @@ -431,7 +421,6 @@ require_relative "courier/resources/automations" require_relative "courier/resources/automations/invoke" require_relative "courier/resources/brands" -require_relative "courier/resources/bulk" require_relative "courier/resources/digests" require_relative "courier/resources/digests/schedules" require_relative "courier/resources/inbound" diff --git a/lib/courier/client.rb b/lib/courier/client.rb index 09cb7e4f..e71efdf4 100644 --- a/lib/courier/client.rb +++ b/lib/courier/client.rb @@ -42,9 +42,6 @@ class Client < Courier::Internal::Transport::BaseClient # @return [Courier::Resources::Brands] attr_reader :brands - # @return [Courier::Resources::Bulk] - attr_reader :bulk - # @return [Courier::Resources::Digests] attr_reader :digests @@ -150,7 +147,6 @@ def initialize( @automations = Courier::Resources::Automations.new(client: self) @journeys = Courier::Resources::Journeys.new(client: self) @brands = Courier::Resources::Brands.new(client: self) - @bulk = Courier::Resources::Bulk.new(client: self) @digests = Courier::Resources::Digests.new(client: self) @inbound = Courier::Resources::Inbound.new(client: self) @lists = Courier::Resources::Lists.new(client: self) diff --git a/lib/courier/models.rb b/lib/courier/models.rb index 4e19e6ae..3c8ee022 100644 --- a/lib/courier/models.rb +++ b/lib/courier/models.rb @@ -113,16 +113,6 @@ module Courier BrandUpdateParams = Courier::Models::BrandUpdateParams - BulkAddUsersParams = Courier::Models::BulkAddUsersParams - - BulkCreateJobParams = Courier::Models::BulkCreateJobParams - - BulkListUsersParams = Courier::Models::BulkListUsersParams - - BulkRetrieveJobParams = Courier::Models::BulkRetrieveJobParams - - BulkRunJobParams = Courier::Models::BulkRunJobParams - CancelJourneyRequest = Courier::Models::CancelJourneyRequest CancelJourneyResponse = Courier::Models::CancelJourneyResponse @@ -193,10 +183,6 @@ module Courier Icons = Courier::Models::Icons - InboundBulkMessage = Courier::Models::InboundBulkMessage - - InboundBulkMessageUser = Courier::Models::InboundBulkMessageUser - InboundTrackEventParams = Courier::Models::InboundTrackEventParams Intercom = Courier::Models::Intercom diff --git a/lib/courier/models/bulk_add_users_params.rb b/lib/courier/models/bulk_add_users_params.rb deleted file mode 100644 index 82ca75cd..00000000 --- a/lib/courier/models/bulk_add_users_params.rb +++ /dev/null @@ -1,26 +0,0 @@ -# frozen_string_literal: true - -module Courier - module Models - # @see Courier::Resources::Bulk#add_users - class BulkAddUsersParams < Courier::Internal::Type::BaseModel - extend Courier::Internal::Type::RequestParameters::Converter - include Courier::Internal::Type::RequestParameters - - # @!attribute job_id - # - # @return [String] - required :job_id, String - - # @!attribute users - # - # @return [Array] - required :users, -> { Courier::Internal::Type::ArrayOf[Courier::InboundBulkMessageUser] } - - # @!method initialize(job_id:, users:, request_options: {}) - # @param job_id [String] - # @param users [Array] - # @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}] - end - end -end diff --git a/lib/courier/models/bulk_create_job_params.rb b/lib/courier/models/bulk_create_job_params.rb deleted file mode 100644 index 45589b9c..00000000 --- a/lib/courier/models/bulk_create_job_params.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -module Courier - module Models - # @see Courier::Resources::Bulk#create_job - class BulkCreateJobParams < Courier::Internal::Type::BaseModel - extend Courier::Internal::Type::RequestParameters::Converter - include Courier::Internal::Type::RequestParameters - - # @!attribute message - # Bulk message definition. Supports two formats: - # - # - V1 format: Requires `event` field (event ID or notification ID) - # - V2 format: Optionally use `template` (notification ID) or `content` (Elemental - # content) in addition to `event` - # - # @return [Courier::Models::InboundBulkMessage] - required :message, -> { Courier::InboundBulkMessage } - - # @!method initialize(message:, request_options: {}) - # Some parameter documentations has been truncated, see - # {Courier::Models::BulkCreateJobParams} for more details. - # - # @param message [Courier::Models::InboundBulkMessage] Bulk message definition. Supports two formats: - # - # @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}] - end - end -end diff --git a/lib/courier/models/bulk_create_job_response.rb b/lib/courier/models/bulk_create_job_response.rb deleted file mode 100644 index be66fdb4..00000000 --- a/lib/courier/models/bulk_create_job_response.rb +++ /dev/null @@ -1,16 +0,0 @@ -# frozen_string_literal: true - -module Courier - module Models - # @see Courier::Resources::Bulk#create_job - class BulkCreateJobResponse < Courier::Internal::Type::BaseModel - # @!attribute job_id - # - # @return [String] - required :job_id, String, api_name: :jobId - - # @!method initialize(job_id:) - # @param job_id [String] - end - end -end diff --git a/lib/courier/models/bulk_list_users_params.rb b/lib/courier/models/bulk_list_users_params.rb deleted file mode 100644 index c6fad1c5..00000000 --- a/lib/courier/models/bulk_list_users_params.rb +++ /dev/null @@ -1,33 +0,0 @@ -# frozen_string_literal: true - -module Courier - module Models - # @see Courier::Resources::Bulk#list_users - class BulkListUsersParams < Courier::Internal::Type::BaseModel - extend Courier::Internal::Type::RequestParameters::Converter - include Courier::Internal::Type::RequestParameters - - # @!attribute job_id - # - # @return [String] - required :job_id, String - - # @!attribute cursor - # A unique identifier that allows for fetching the next set of users added to the - # bulk job - # - # @return [String, nil] - optional :cursor, String, nil?: true - - # @!method initialize(job_id:, cursor: nil, request_options: {}) - # Some parameter documentations has been truncated, see - # {Courier::Models::BulkListUsersParams} for more details. - # - # @param job_id [String] - # - # @param cursor [String, nil] A unique identifier that allows for fetching the next set of users added to the - # - # @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}] - end - end -end diff --git a/lib/courier/models/bulk_list_users_response.rb b/lib/courier/models/bulk_list_users_response.rb deleted file mode 100644 index b9a2c0da..00000000 --- a/lib/courier/models/bulk_list_users_response.rb +++ /dev/null @@ -1,49 +0,0 @@ -# frozen_string_literal: true - -module Courier - module Models - # @see Courier::Resources::Bulk#list_users - class BulkListUsersResponse < Courier::Internal::Type::BaseModel - # @!attribute items - # - # @return [Array] - required :items, -> { Courier::Internal::Type::ArrayOf[Courier::Models::BulkListUsersResponse::Item] } - - # @!attribute paging - # - # @return [Courier::Models::Paging] - required :paging, -> { Courier::Paging } - - # @!method initialize(items:, paging:) - # @param items [Array] - # @param paging [Courier::Models::Paging] - - class Item < Courier::Models::InboundBulkMessageUser - # @!attribute status - # - # @return [Symbol, Courier::Models::BulkListUsersResponse::Item::Status] - required :status, enum: -> { Courier::Models::BulkListUsersResponse::Item::Status } - - # @!attribute message_id - # - # @return [String, nil] - optional :message_id, String, api_name: :messageId, nil?: true - - # @!method initialize(status:, message_id: nil) - # @param status [Symbol, Courier::Models::BulkListUsersResponse::Item::Status] - # @param message_id [String, nil] - - module Status - extend Courier::Internal::Type::Enum - - PENDING = :PENDING - ENQUEUED = :ENQUEUED - ERROR = :ERROR - - # @!method self.values - # @return [Array] - end - end - end - end -end diff --git a/lib/courier/models/bulk_retrieve_job_params.rb b/lib/courier/models/bulk_retrieve_job_params.rb deleted file mode 100644 index 72b80c60..00000000 --- a/lib/courier/models/bulk_retrieve_job_params.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -module Courier - module Models - # @see Courier::Resources::Bulk#retrieve_job - class BulkRetrieveJobParams < Courier::Internal::Type::BaseModel - extend Courier::Internal::Type::RequestParameters::Converter - include Courier::Internal::Type::RequestParameters - - # @!attribute job_id - # - # @return [String] - required :job_id, String - - # @!method initialize(job_id:, request_options: {}) - # @param job_id [String] - # @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}] - end - end -end diff --git a/lib/courier/models/bulk_retrieve_job_response.rb b/lib/courier/models/bulk_retrieve_job_response.rb deleted file mode 100644 index be093c58..00000000 --- a/lib/courier/models/bulk_retrieve_job_response.rb +++ /dev/null @@ -1,76 +0,0 @@ -# frozen_string_literal: true - -module Courier - module Models - # @see Courier::Resources::Bulk#retrieve_job - class BulkRetrieveJobResponse < Courier::Internal::Type::BaseModel - # @!attribute job - # - # @return [Courier::Models::BulkRetrieveJobResponse::Job] - required :job, -> { Courier::Models::BulkRetrieveJobResponse::Job } - - # @!method initialize(job:) - # @param job [Courier::Models::BulkRetrieveJobResponse::Job] - - # @see Courier::Models::BulkRetrieveJobResponse#job - class Job < Courier::Internal::Type::BaseModel - # @!attribute definition - # Bulk message definition. Supports two formats: - # - # - V1 format: Requires `event` field (event ID or notification ID) - # - V2 format: Optionally use `template` (notification ID) or `content` (Elemental - # content) in addition to `event` - # - # @return [Courier::Models::InboundBulkMessage] - required :definition, -> { Courier::InboundBulkMessage } - - # @!attribute enqueued - # - # @return [Integer] - required :enqueued, Integer - - # @!attribute failures - # - # @return [Integer] - required :failures, Integer - - # @!attribute received - # - # @return [Integer] - required :received, Integer - - # @!attribute status - # - # @return [Symbol, Courier::Models::BulkRetrieveJobResponse::Job::Status] - required :status, enum: -> { Courier::Models::BulkRetrieveJobResponse::Job::Status } - - # @!method initialize(definition:, enqueued:, failures:, received:, status:) - # Some parameter documentations has been truncated, see - # {Courier::Models::BulkRetrieveJobResponse::Job} for more details. - # - # @param definition [Courier::Models::InboundBulkMessage] Bulk message definition. Supports two formats: - # - # @param enqueued [Integer] - # - # @param failures [Integer] - # - # @param received [Integer] - # - # @param status [Symbol, Courier::Models::BulkRetrieveJobResponse::Job::Status] - - # @see Courier::Models::BulkRetrieveJobResponse::Job#status - module Status - extend Courier::Internal::Type::Enum - - CREATED = :CREATED - PROCESSING = :PROCESSING - COMPLETED = :COMPLETED - ERROR = :ERROR - - # @!method self.values - # @return [Array] - end - end - end - end -end diff --git a/lib/courier/models/bulk_run_job_params.rb b/lib/courier/models/bulk_run_job_params.rb deleted file mode 100644 index 12b7e75b..00000000 --- a/lib/courier/models/bulk_run_job_params.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -module Courier - module Models - # @see Courier::Resources::Bulk#run_job - class BulkRunJobParams < Courier::Internal::Type::BaseModel - extend Courier::Internal::Type::RequestParameters::Converter - include Courier::Internal::Type::RequestParameters - - # @!attribute job_id - # - # @return [String] - required :job_id, String - - # @!method initialize(job_id:, request_options: {}) - # @param job_id [String] - # @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}] - end - end -end diff --git a/lib/courier/models/inbound_bulk_message.rb b/lib/courier/models/inbound_bulk_message.rb deleted file mode 100644 index b930ee22..00000000 --- a/lib/courier/models/inbound_bulk_message.rb +++ /dev/null @@ -1,91 +0,0 @@ -# frozen_string_literal: true - -module Courier - module Models - class InboundBulkMessage < Courier::Internal::Type::BaseModel - # @!attribute event - # Event ID or Notification ID (required). Can be either a Notification ID (e.g., - # "FRH3QXM9E34W4RKP7MRC8NZ1T8V8") or a custom Event ID (e.g., "welcome-email") - # mapped to a notification. - # - # @return [String] - required :event, String - - # @!attribute brand - # - # @return [String, nil] - optional :brand, String, nil?: true - - # @!attribute content - # Elemental content (optional, for V2 format). When provided, this will be used - # instead of the notification associated with the `event` field. - # - # @return [Courier::Models::ElementalContentSugar, Courier::Models::ElementalContent, nil] - optional :content, union: -> { Courier::InboundBulkMessage::Content }, nil?: true - - # @!attribute data - # - # @return [Hash{Symbol=>Object}, nil] - optional :data, Courier::Internal::Type::HashOf[Courier::Internal::Type::Unknown], nil?: true - - # @!attribute locale - # - # @return [Hash{Symbol=>Hash{Symbol=>Object}}, nil] - optional :locale, - Courier::Internal::Type::HashOf[Courier::Internal::Type::HashOf[Courier::Internal::Type::Unknown]], - nil?: true - - # @!attribute override - # - # @return [Hash{Symbol=>Object}, nil] - optional :override, Courier::Internal::Type::HashOf[Courier::Internal::Type::Unknown], nil?: true - - # @!attribute template - # Notification ID or template ID (optional, for V2 format). When provided, this - # will be used instead of the notification associated with the `event` field. - # - # @return [String, nil] - optional :template, String, nil?: true - - # @!method initialize(event:, brand: nil, content: nil, data: nil, locale: nil, override: nil, template: nil) - # Some parameter documentations has been truncated, see - # {Courier::Models::InboundBulkMessage} for more details. - # - # Bulk message definition. Supports two formats: - # - # - V1 format: Requires `event` field (event ID or notification ID) - # - V2 format: Optionally use `template` (notification ID) or `content` (Elemental - # content) in addition to `event` - # - # @param event [String] Event ID or Notification ID (required). Can be either a - # - # @param brand [String, nil] - # - # @param content [Courier::Models::ElementalContentSugar, Courier::Models::ElementalContent, nil] Elemental content (optional, for V2 format). When provided, this will be used - # - # @param data [Hash{Symbol=>Object}, nil] - # - # @param locale [Hash{Symbol=>Hash{Symbol=>Object}}, nil] - # - # @param override [Hash{Symbol=>Object}, nil] - # - # @param template [String, nil] Notification ID or template ID (optional, for V2 format). When provided, - - # Elemental content (optional, for V2 format). When provided, this will be used - # instead of the notification associated with the `event` field. - # - # @see Courier::Models::InboundBulkMessage#content - module Content - extend Courier::Internal::Type::Union - - # Syntactic sugar to provide a fast shorthand for Courier Elemental Blocks. - variant -> { Courier::ElementalContentSugar } - - variant -> { Courier::ElementalContent } - - # @!method self.variants - # @return [Array(Courier::Models::ElementalContentSugar, Courier::Models::ElementalContent)] - end - end - end -end diff --git a/lib/courier/models/inbound_bulk_message_user.rb b/lib/courier/models/inbound_bulk_message_user.rb deleted file mode 100644 index 919ebb70..00000000 --- a/lib/courier/models/inbound_bulk_message_user.rb +++ /dev/null @@ -1,54 +0,0 @@ -# frozen_string_literal: true - -module Courier - module Models - class InboundBulkMessageUser < Courier::Internal::Type::BaseModel - # @!attribute data - # User-specific data that will be merged with message.data - # - # @return [Object, nil] - optional :data, Courier::Internal::Type::Unknown - - # @!attribute preferences - # - # @return [Courier::Models::RecipientPreferences, nil] - optional :preferences, -> { Courier::RecipientPreferences }, nil?: true - - # @!attribute profile - # User profile information. For email-based bulk jobs, `profile.email` is required - # for provider routing to determine if the message can be delivered. The email - # address should be provided here rather than in `to.email`. - # - # @return [Hash{Symbol=>Object}, nil] - optional :profile, Courier::Internal::Type::HashOf[Courier::Internal::Type::Unknown], nil?: true - - # @!attribute recipient - # User ID (legacy field, use profile or to.user_id instead) - # - # @return [String, nil] - optional :recipient, String, nil?: true - - # @!attribute to - # Optional recipient information. Note: For email provider routing, use - # `profile.email` instead of `to.email`. The `to` field is primarily used for - # recipient identification and data merging. - # - # @return [Courier::Models::UserRecipient, nil] - optional :to, -> { Courier::UserRecipient }, nil?: true - - # @!method initialize(data: nil, preferences: nil, profile: nil, recipient: nil, to: nil) - # Some parameter documentations has been truncated, see - # {Courier::Models::InboundBulkMessageUser} for more details. - # - # @param data [Object] User-specific data that will be merged with message.data - # - # @param preferences [Courier::Models::RecipientPreferences, nil] - # - # @param profile [Hash{Symbol=>Object}, nil] User profile information. For email-based bulk jobs, `profile.email` is required - # - # @param recipient [String, nil] User ID (legacy field, use profile or to.user_id instead) - # - # @param to [Courier::Models::UserRecipient, nil] Optional recipient information. Note: For email provider routing, use - end - end -end diff --git a/lib/courier/resources/bulk.rb b/lib/courier/resources/bulk.rb deleted file mode 100644 index b4031b1e..00000000 --- a/lib/courier/resources/bulk.rb +++ /dev/null @@ -1,141 +0,0 @@ -# frozen_string_literal: true - -module Courier - module Resources - class Bulk - # Ingest user data into a Bulk Job. - # - # **Important**: For email-based bulk jobs, each user must include `profile.email` - # for provider routing to work correctly. The `to.email` field is not sufficient - # for email provider routing. - # - # @overload add_users(job_id, users:, request_options: {}) - # - # @param job_id [String] A unique identifier representing the bulk job - # - # @param users [Array] - # - # @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}, nil] - # - # @return [nil] - # - # @see Courier::Models::BulkAddUsersParams - def add_users(job_id, params) - parsed, options = Courier::BulkAddUsersParams.dump_request(params) - @client.request( - method: :post, - path: ["bulk/%1$s", job_id], - body: parsed, - model: NilClass, - options: options - ) - end - - # Some parameter documentations has been truncated, see - # {Courier::Models::BulkCreateJobParams} for more details. - # - # Creates a new bulk job for sending messages to multiple recipients. - # - # **Required**: `message.event` (event ID or notification ID) - # - # **Optional (V2 format)**: `message.template` (notification ID) or - # `message.content` (Elemental content) can be provided to override the - # notification associated with the event. - # - # @overload create_job(message:, request_options: {}) - # - # @param message [Courier::Models::InboundBulkMessage] Bulk message definition. Supports two formats: - # - # @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}, nil] - # - # @return [Courier::Models::BulkCreateJobResponse] - # - # @see Courier::Models::BulkCreateJobParams - def create_job(params) - parsed, options = Courier::BulkCreateJobParams.dump_request(params) - @client.request( - method: :post, - path: "bulk", - body: parsed, - model: Courier::Models::BulkCreateJobResponse, - options: options - ) - end - - # Some parameter documentations has been truncated, see - # {Courier::Models::BulkListUsersParams} for more details. - # - # Get Bulk Job Users - # - # @overload list_users(job_id, cursor: nil, request_options: {}) - # - # @param job_id [String] A unique identifier representing the bulk job - # - # @param cursor [String, nil] A unique identifier that allows for fetching the next set of users added to the - # - # @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}, nil] - # - # @return [Courier::Models::BulkListUsersResponse] - # - # @see Courier::Models::BulkListUsersParams - def list_users(job_id, params = {}) - parsed, options = Courier::BulkListUsersParams.dump_request(params) - query = Courier::Internal::Util.encode_query_params(parsed) - @client.request( - method: :get, - path: ["bulk/%1$s/users", job_id], - query: query, - model: Courier::Models::BulkListUsersResponse, - options: options - ) - end - - # Get a bulk job - # - # @overload retrieve_job(job_id, request_options: {}) - # - # @param job_id [String] A unique identifier representing the bulk job - # - # @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}, nil] - # - # @return [Courier::Models::BulkRetrieveJobResponse] - # - # @see Courier::Models::BulkRetrieveJobParams - def retrieve_job(job_id, params = {}) - @client.request( - method: :get, - path: ["bulk/%1$s", job_id], - model: Courier::Models::BulkRetrieveJobResponse, - options: params[:request_options] - ) - end - - # Run a bulk job - # - # @overload run_job(job_id, request_options: {}) - # - # @param job_id [String] A unique identifier representing the bulk job - # - # @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}, nil] - # - # @return [nil] - # - # @see Courier::Models::BulkRunJobParams - def run_job(job_id, params = {}) - @client.request( - method: :post, - path: ["bulk/%1$s/run", job_id], - model: NilClass, - options: params[:request_options] - ) - end - - # @api private - # - # @param client [Courier::Client] - def initialize(client:) - @client = client - end - end - end -end diff --git a/rbi/courier/client.rbi b/rbi/courier/client.rbi index 715dfa75..62ccdaf6 100644 --- a/rbi/courier/client.rbi +++ b/rbi/courier/client.rbi @@ -37,9 +37,6 @@ module Courier sig { returns(Courier::Resources::Brands) } attr_reader :brands - sig { returns(Courier::Resources::Bulk) } - attr_reader :bulk - sig { returns(Courier::Resources::Digests) } attr_reader :digests diff --git a/rbi/courier/models.rbi b/rbi/courier/models.rbi index 4647a7ec..455deb57 100644 --- a/rbi/courier/models.rbi +++ b/rbi/courier/models.rbi @@ -77,16 +77,6 @@ module Courier BrandUpdateParams = Courier::Models::BrandUpdateParams - BulkAddUsersParams = Courier::Models::BulkAddUsersParams - - BulkCreateJobParams = Courier::Models::BulkCreateJobParams - - BulkListUsersParams = Courier::Models::BulkListUsersParams - - BulkRetrieveJobParams = Courier::Models::BulkRetrieveJobParams - - BulkRunJobParams = Courier::Models::BulkRunJobParams - CancelJourneyRequest = Courier::Models::CancelJourneyRequest CancelJourneyResponse = Courier::Models::CancelJourneyResponse @@ -157,10 +147,6 @@ module Courier Icons = Courier::Models::Icons - InboundBulkMessage = Courier::Models::InboundBulkMessage - - InboundBulkMessageUser = Courier::Models::InboundBulkMessageUser - InboundTrackEventParams = Courier::Models::InboundTrackEventParams Intercom = Courier::Models::Intercom diff --git a/rbi/courier/models/bulk_add_users_params.rbi b/rbi/courier/models/bulk_add_users_params.rbi deleted file mode 100644 index 491d120b..00000000 --- a/rbi/courier/models/bulk_add_users_params.rbi +++ /dev/null @@ -1,43 +0,0 @@ -# typed: strong - -module Courier - module Models - class BulkAddUsersParams < Courier::Internal::Type::BaseModel - extend Courier::Internal::Type::RequestParameters::Converter - include Courier::Internal::Type::RequestParameters - - OrHash = - T.type_alias do - T.any(Courier::BulkAddUsersParams, Courier::Internal::AnyHash) - end - - sig { returns(String) } - attr_accessor :job_id - - sig { returns(T::Array[Courier::InboundBulkMessageUser]) } - attr_accessor :users - - sig do - params( - job_id: String, - users: T::Array[Courier::InboundBulkMessageUser::OrHash], - request_options: Courier::RequestOptions::OrHash - ).returns(T.attached_class) - end - def self.new(job_id:, users:, request_options: {}) - end - - sig do - override.returns( - { - job_id: String, - users: T::Array[Courier::InboundBulkMessageUser], - request_options: Courier::RequestOptions - } - ) - end - def to_hash - end - end - end -end diff --git a/rbi/courier/models/bulk_create_job_params.rbi b/rbi/courier/models/bulk_create_job_params.rbi deleted file mode 100644 index 06b5b030..00000000 --- a/rbi/courier/models/bulk_create_job_params.rbi +++ /dev/null @@ -1,54 +0,0 @@ -# typed: strong - -module Courier - module Models - class BulkCreateJobParams < Courier::Internal::Type::BaseModel - extend Courier::Internal::Type::RequestParameters::Converter - include Courier::Internal::Type::RequestParameters - - OrHash = - T.type_alias do - T.any(Courier::BulkCreateJobParams, Courier::Internal::AnyHash) - end - - # Bulk message definition. Supports two formats: - # - # - V1 format: Requires `event` field (event ID or notification ID) - # - V2 format: Optionally use `template` (notification ID) or `content` (Elemental - # content) in addition to `event` - sig { returns(Courier::InboundBulkMessage) } - attr_reader :message - - sig { params(message: Courier::InboundBulkMessage::OrHash).void } - attr_writer :message - - sig do - params( - message: Courier::InboundBulkMessage::OrHash, - request_options: Courier::RequestOptions::OrHash - ).returns(T.attached_class) - end - def self.new( - # Bulk message definition. Supports two formats: - # - # - V1 format: Requires `event` field (event ID or notification ID) - # - V2 format: Optionally use `template` (notification ID) or `content` (Elemental - # content) in addition to `event` - message:, - request_options: {} - ) - end - - sig do - override.returns( - { - message: Courier::InboundBulkMessage, - request_options: Courier::RequestOptions - } - ) - end - def to_hash - end - end - end -end diff --git a/rbi/courier/models/bulk_create_job_response.rbi b/rbi/courier/models/bulk_create_job_response.rbi deleted file mode 100644 index e4ed47c8..00000000 --- a/rbi/courier/models/bulk_create_job_response.rbi +++ /dev/null @@ -1,26 +0,0 @@ -# typed: strong - -module Courier - module Models - class BulkCreateJobResponse < Courier::Internal::Type::BaseModel - OrHash = - T.type_alias do - T.any( - Courier::Models::BulkCreateJobResponse, - Courier::Internal::AnyHash - ) - end - - sig { returns(String) } - attr_accessor :job_id - - sig { params(job_id: String).returns(T.attached_class) } - def self.new(job_id:) - end - - sig { override.returns({ job_id: String }) } - def to_hash - end - end - end -end diff --git a/rbi/courier/models/bulk_list_users_params.rbi b/rbi/courier/models/bulk_list_users_params.rbi deleted file mode 100644 index 6b1cbec5..00000000 --- a/rbi/courier/models/bulk_list_users_params.rbi +++ /dev/null @@ -1,51 +0,0 @@ -# typed: strong - -module Courier - module Models - class BulkListUsersParams < Courier::Internal::Type::BaseModel - extend Courier::Internal::Type::RequestParameters::Converter - include Courier::Internal::Type::RequestParameters - - OrHash = - T.type_alias do - T.any(Courier::BulkListUsersParams, Courier::Internal::AnyHash) - end - - sig { returns(String) } - attr_accessor :job_id - - # A unique identifier that allows for fetching the next set of users added to the - # bulk job - sig { returns(T.nilable(String)) } - attr_accessor :cursor - - sig do - params( - job_id: String, - cursor: T.nilable(String), - request_options: Courier::RequestOptions::OrHash - ).returns(T.attached_class) - end - def self.new( - job_id:, - # A unique identifier that allows for fetching the next set of users added to the - # bulk job - cursor: nil, - request_options: {} - ) - end - - sig do - override.returns( - { - job_id: String, - cursor: T.nilable(String), - request_options: Courier::RequestOptions - } - ) - end - def to_hash - end - end - end -end diff --git a/rbi/courier/models/bulk_list_users_response.rbi b/rbi/courier/models/bulk_list_users_response.rbi deleted file mode 100644 index 08363f81..00000000 --- a/rbi/courier/models/bulk_list_users_response.rbi +++ /dev/null @@ -1,125 +0,0 @@ -# typed: strong - -module Courier - module Models - class BulkListUsersResponse < Courier::Internal::Type::BaseModel - OrHash = - T.type_alias do - T.any( - Courier::Models::BulkListUsersResponse, - Courier::Internal::AnyHash - ) - end - - sig { returns(T::Array[Courier::Models::BulkListUsersResponse::Item]) } - attr_accessor :items - - sig { returns(Courier::Paging) } - attr_reader :paging - - sig { params(paging: Courier::Paging::OrHash).void } - attr_writer :paging - - sig do - params( - items: T::Array[Courier::Models::BulkListUsersResponse::Item::OrHash], - paging: Courier::Paging::OrHash - ).returns(T.attached_class) - end - def self.new(items:, paging:) - end - - sig do - override.returns( - { - items: T::Array[Courier::Models::BulkListUsersResponse::Item], - paging: Courier::Paging - } - ) - end - def to_hash - end - - class Item < Courier::Models::InboundBulkMessageUser - OrHash = - T.type_alias do - T.any( - Courier::Models::BulkListUsersResponse::Item, - Courier::Internal::AnyHash - ) - end - - sig do - returns( - Courier::Models::BulkListUsersResponse::Item::Status::TaggedSymbol - ) - end - attr_accessor :status - - sig { returns(T.nilable(String)) } - attr_accessor :message_id - - sig do - params( - status: - Courier::Models::BulkListUsersResponse::Item::Status::OrSymbol, - message_id: T.nilable(String) - ).returns(T.attached_class) - end - def self.new(status:, message_id: nil) - end - - sig do - override.returns( - { - status: - Courier::Models::BulkListUsersResponse::Item::Status::TaggedSymbol, - message_id: T.nilable(String) - } - ) - end - def to_hash - end - - module Status - extend Courier::Internal::Type::Enum - - TaggedSymbol = - T.type_alias do - T.all( - Symbol, - Courier::Models::BulkListUsersResponse::Item::Status - ) - end - OrSymbol = T.type_alias { T.any(Symbol, String) } - - PENDING = - T.let( - :PENDING, - Courier::Models::BulkListUsersResponse::Item::Status::TaggedSymbol - ) - ENQUEUED = - T.let( - :ENQUEUED, - Courier::Models::BulkListUsersResponse::Item::Status::TaggedSymbol - ) - ERROR = - T.let( - :ERROR, - Courier::Models::BulkListUsersResponse::Item::Status::TaggedSymbol - ) - - sig do - override.returns( - T::Array[ - Courier::Models::BulkListUsersResponse::Item::Status::TaggedSymbol - ] - ) - end - def self.values - end - end - end - end - end -end diff --git a/rbi/courier/models/bulk_retrieve_job_params.rbi b/rbi/courier/models/bulk_retrieve_job_params.rbi deleted file mode 100644 index 292b2696..00000000 --- a/rbi/courier/models/bulk_retrieve_job_params.rbi +++ /dev/null @@ -1,35 +0,0 @@ -# typed: strong - -module Courier - module Models - class BulkRetrieveJobParams < Courier::Internal::Type::BaseModel - extend Courier::Internal::Type::RequestParameters::Converter - include Courier::Internal::Type::RequestParameters - - OrHash = - T.type_alias do - T.any(Courier::BulkRetrieveJobParams, Courier::Internal::AnyHash) - end - - sig { returns(String) } - attr_accessor :job_id - - sig do - params( - job_id: String, - request_options: Courier::RequestOptions::OrHash - ).returns(T.attached_class) - end - def self.new(job_id:, request_options: {}) - end - - sig do - override.returns( - { job_id: String, request_options: Courier::RequestOptions } - ) - end - def to_hash - end - end - end -end diff --git a/rbi/courier/models/bulk_retrieve_job_response.rbi b/rbi/courier/models/bulk_retrieve_job_response.rbi deleted file mode 100644 index 165a2c14..00000000 --- a/rbi/courier/models/bulk_retrieve_job_response.rbi +++ /dev/null @@ -1,157 +0,0 @@ -# typed: strong - -module Courier - module Models - class BulkRetrieveJobResponse < Courier::Internal::Type::BaseModel - OrHash = - T.type_alias do - T.any( - Courier::Models::BulkRetrieveJobResponse, - Courier::Internal::AnyHash - ) - end - - sig { returns(Courier::Models::BulkRetrieveJobResponse::Job) } - attr_reader :job - - sig do - params(job: Courier::Models::BulkRetrieveJobResponse::Job::OrHash).void - end - attr_writer :job - - sig do - params( - job: Courier::Models::BulkRetrieveJobResponse::Job::OrHash - ).returns(T.attached_class) - end - def self.new(job:) - end - - sig do - override.returns({ job: Courier::Models::BulkRetrieveJobResponse::Job }) - end - def to_hash - end - - class Job < Courier::Internal::Type::BaseModel - OrHash = - T.type_alias do - T.any( - Courier::Models::BulkRetrieveJobResponse::Job, - Courier::Internal::AnyHash - ) - end - - # Bulk message definition. Supports two formats: - # - # - V1 format: Requires `event` field (event ID or notification ID) - # - V2 format: Optionally use `template` (notification ID) or `content` (Elemental - # content) in addition to `event` - sig { returns(Courier::InboundBulkMessage) } - attr_reader :definition - - sig { params(definition: Courier::InboundBulkMessage::OrHash).void } - attr_writer :definition - - sig { returns(Integer) } - attr_accessor :enqueued - - sig { returns(Integer) } - attr_accessor :failures - - sig { returns(Integer) } - attr_accessor :received - - sig do - returns( - Courier::Models::BulkRetrieveJobResponse::Job::Status::TaggedSymbol - ) - end - attr_accessor :status - - sig do - params( - definition: Courier::InboundBulkMessage::OrHash, - enqueued: Integer, - failures: Integer, - received: Integer, - status: - Courier::Models::BulkRetrieveJobResponse::Job::Status::OrSymbol - ).returns(T.attached_class) - end - def self.new( - # Bulk message definition. Supports two formats: - # - # - V1 format: Requires `event` field (event ID or notification ID) - # - V2 format: Optionally use `template` (notification ID) or `content` (Elemental - # content) in addition to `event` - definition:, - enqueued:, - failures:, - received:, - status: - ) - end - - sig do - override.returns( - { - definition: Courier::InboundBulkMessage, - enqueued: Integer, - failures: Integer, - received: Integer, - status: - Courier::Models::BulkRetrieveJobResponse::Job::Status::TaggedSymbol - } - ) - end - def to_hash - end - - module Status - extend Courier::Internal::Type::Enum - - TaggedSymbol = - T.type_alias do - T.all( - Symbol, - Courier::Models::BulkRetrieveJobResponse::Job::Status - ) - end - OrSymbol = T.type_alias { T.any(Symbol, String) } - - CREATED = - T.let( - :CREATED, - Courier::Models::BulkRetrieveJobResponse::Job::Status::TaggedSymbol - ) - PROCESSING = - T.let( - :PROCESSING, - Courier::Models::BulkRetrieveJobResponse::Job::Status::TaggedSymbol - ) - COMPLETED = - T.let( - :COMPLETED, - Courier::Models::BulkRetrieveJobResponse::Job::Status::TaggedSymbol - ) - ERROR = - T.let( - :ERROR, - Courier::Models::BulkRetrieveJobResponse::Job::Status::TaggedSymbol - ) - - sig do - override.returns( - T::Array[ - Courier::Models::BulkRetrieveJobResponse::Job::Status::TaggedSymbol - ] - ) - end - def self.values - end - end - end - end - end -end diff --git a/rbi/courier/models/bulk_run_job_params.rbi b/rbi/courier/models/bulk_run_job_params.rbi deleted file mode 100644 index fc21b61d..00000000 --- a/rbi/courier/models/bulk_run_job_params.rbi +++ /dev/null @@ -1,35 +0,0 @@ -# typed: strong - -module Courier - module Models - class BulkRunJobParams < Courier::Internal::Type::BaseModel - extend Courier::Internal::Type::RequestParameters::Converter - include Courier::Internal::Type::RequestParameters - - OrHash = - T.type_alias do - T.any(Courier::BulkRunJobParams, Courier::Internal::AnyHash) - end - - sig { returns(String) } - attr_accessor :job_id - - sig do - params( - job_id: String, - request_options: Courier::RequestOptions::OrHash - ).returns(T.attached_class) - end - def self.new(job_id:, request_options: {}) - end - - sig do - override.returns( - { job_id: String, request_options: Courier::RequestOptions } - ) - end - def to_hash - end - end - end -end diff --git a/rbi/courier/models/inbound_bulk_message.rbi b/rbi/courier/models/inbound_bulk_message.rbi deleted file mode 100644 index 4f75e495..00000000 --- a/rbi/courier/models/inbound_bulk_message.rbi +++ /dev/null @@ -1,124 +0,0 @@ -# typed: strong - -module Courier - module Models - class InboundBulkMessage < Courier::Internal::Type::BaseModel - OrHash = - T.type_alias do - T.any(Courier::InboundBulkMessage, Courier::Internal::AnyHash) - end - - # Event ID or Notification ID (required). Can be either a Notification ID (e.g., - # "FRH3QXM9E34W4RKP7MRC8NZ1T8V8") or a custom Event ID (e.g., "welcome-email") - # mapped to a notification. - sig { returns(String) } - attr_accessor :event - - sig { returns(T.nilable(String)) } - attr_accessor :brand - - # Elemental content (optional, for V2 format). When provided, this will be used - # instead of the notification associated with the `event` field. - sig do - returns( - T.nilable( - T.any(Courier::ElementalContentSugar, Courier::ElementalContent) - ) - ) - end - attr_accessor :content - - sig { returns(T.nilable(T::Hash[Symbol, T.anything])) } - attr_accessor :data - - sig { returns(T.nilable(T::Hash[Symbol, T::Hash[Symbol, T.anything]])) } - attr_accessor :locale - - sig { returns(T.nilable(T::Hash[Symbol, T.anything])) } - attr_accessor :override - - # Notification ID or template ID (optional, for V2 format). When provided, this - # will be used instead of the notification associated with the `event` field. - sig { returns(T.nilable(String)) } - attr_accessor :template - - # Bulk message definition. Supports two formats: - # - # - V1 format: Requires `event` field (event ID or notification ID) - # - V2 format: Optionally use `template` (notification ID) or `content` (Elemental - # content) in addition to `event` - sig do - params( - event: String, - brand: T.nilable(String), - content: - T.nilable( - T.any( - Courier::ElementalContentSugar::OrHash, - Courier::ElementalContent::OrHash - ) - ), - data: T.nilable(T::Hash[Symbol, T.anything]), - locale: T.nilable(T::Hash[Symbol, T::Hash[Symbol, T.anything]]), - override: T.nilable(T::Hash[Symbol, T.anything]), - template: T.nilable(String) - ).returns(T.attached_class) - end - def self.new( - # Event ID or Notification ID (required). Can be either a Notification ID (e.g., - # "FRH3QXM9E34W4RKP7MRC8NZ1T8V8") or a custom Event ID (e.g., "welcome-email") - # mapped to a notification. - event:, - brand: nil, - # Elemental content (optional, for V2 format). When provided, this will be used - # instead of the notification associated with the `event` field. - content: nil, - data: nil, - locale: nil, - override: nil, - # Notification ID or template ID (optional, for V2 format). When provided, this - # will be used instead of the notification associated with the `event` field. - template: nil - ) - end - - sig do - override.returns( - { - event: String, - brand: T.nilable(String), - content: - T.nilable( - T.any(Courier::ElementalContentSugar, Courier::ElementalContent) - ), - data: T.nilable(T::Hash[Symbol, T.anything]), - locale: T.nilable(T::Hash[Symbol, T::Hash[Symbol, T.anything]]), - override: T.nilable(T::Hash[Symbol, T.anything]), - template: T.nilable(String) - } - ) - end - def to_hash - end - - # Elemental content (optional, for V2 format). When provided, this will be used - # instead of the notification associated with the `event` field. - module Content - extend Courier::Internal::Type::Union - - Variants = - T.type_alias do - T.any(Courier::ElementalContentSugar, Courier::ElementalContent) - end - - sig do - override.returns( - T::Array[Courier::InboundBulkMessage::Content::Variants] - ) - end - def self.variants - end - end - end - end -end diff --git a/rbi/courier/models/inbound_bulk_message_user.rbi b/rbi/courier/models/inbound_bulk_message_user.rbi deleted file mode 100644 index f08be0cf..00000000 --- a/rbi/courier/models/inbound_bulk_message_user.rbi +++ /dev/null @@ -1,88 +0,0 @@ -# typed: strong - -module Courier - module Models - class InboundBulkMessageUser < Courier::Internal::Type::BaseModel - OrHash = - T.type_alias do - T.any(Courier::InboundBulkMessageUser, Courier::Internal::AnyHash) - end - - # User-specific data that will be merged with message.data - sig { returns(T.nilable(T.anything)) } - attr_reader :data - - sig { params(data: T.anything).void } - attr_writer :data - - sig { returns(T.nilable(Courier::RecipientPreferences)) } - attr_reader :preferences - - sig do - params( - preferences: T.nilable(Courier::RecipientPreferences::OrHash) - ).void - end - attr_writer :preferences - - # User profile information. For email-based bulk jobs, `profile.email` is required - # for provider routing to determine if the message can be delivered. The email - # address should be provided here rather than in `to.email`. - sig { returns(T.nilable(T::Hash[Symbol, T.anything])) } - attr_accessor :profile - - # User ID (legacy field, use profile or to.user_id instead) - sig { returns(T.nilable(String)) } - attr_accessor :recipient - - # Optional recipient information. Note: For email provider routing, use - # `profile.email` instead of `to.email`. The `to` field is primarily used for - # recipient identification and data merging. - sig { returns(T.nilable(Courier::UserRecipient)) } - attr_reader :to - - sig { params(to: T.nilable(Courier::UserRecipient::OrHash)).void } - attr_writer :to - - sig do - params( - data: T.anything, - preferences: T.nilable(Courier::RecipientPreferences::OrHash), - profile: T.nilable(T::Hash[Symbol, T.anything]), - recipient: T.nilable(String), - to: T.nilable(Courier::UserRecipient::OrHash) - ).returns(T.attached_class) - end - def self.new( - # User-specific data that will be merged with message.data - data: nil, - preferences: nil, - # User profile information. For email-based bulk jobs, `profile.email` is required - # for provider routing to determine if the message can be delivered. The email - # address should be provided here rather than in `to.email`. - profile: nil, - # User ID (legacy field, use profile or to.user_id instead) - recipient: nil, - # Optional recipient information. Note: For email provider routing, use - # `profile.email` instead of `to.email`. The `to` field is primarily used for - # recipient identification and data merging. - to: nil - ) - end - - sig do - override.returns( - { - data: T.anything, - preferences: T.nilable(Courier::RecipientPreferences), - profile: T.nilable(T::Hash[Symbol, T.anything]), - recipient: T.nilable(String), - to: T.nilable(Courier::UserRecipient) - } - ) - end - def to_hash - end - end - end -end diff --git a/rbi/courier/resources/bulk.rbi b/rbi/courier/resources/bulk.rbi deleted file mode 100644 index 492996a2..00000000 --- a/rbi/courier/resources/bulk.rbi +++ /dev/null @@ -1,102 +0,0 @@ -# typed: strong - -module Courier - module Resources - class Bulk - # Ingest user data into a Bulk Job. - # - # **Important**: For email-based bulk jobs, each user must include `profile.email` - # for provider routing to work correctly. The `to.email` field is not sufficient - # for email provider routing. - sig do - params( - job_id: String, - users: T::Array[Courier::InboundBulkMessageUser::OrHash], - request_options: Courier::RequestOptions::OrHash - ).void - end - def add_users( - # A unique identifier representing the bulk job - job_id, - users:, - request_options: {} - ) - end - - # Creates a new bulk job for sending messages to multiple recipients. - # - # **Required**: `message.event` (event ID or notification ID) - # - # **Optional (V2 format)**: `message.template` (notification ID) or - # `message.content` (Elemental content) can be provided to override the - # notification associated with the event. - sig do - params( - message: Courier::InboundBulkMessage::OrHash, - request_options: Courier::RequestOptions::OrHash - ).returns(Courier::Models::BulkCreateJobResponse) - end - def create_job( - # Bulk message definition. Supports two formats: - # - # - V1 format: Requires `event` field (event ID or notification ID) - # - V2 format: Optionally use `template` (notification ID) or `content` (Elemental - # content) in addition to `event` - message:, - request_options: {} - ) - end - - # Get Bulk Job Users - sig do - params( - job_id: String, - cursor: T.nilable(String), - request_options: Courier::RequestOptions::OrHash - ).returns(Courier::Models::BulkListUsersResponse) - end - def list_users( - # A unique identifier representing the bulk job - job_id, - # A unique identifier that allows for fetching the next set of users added to the - # bulk job - cursor: nil, - request_options: {} - ) - end - - # Get a bulk job - sig do - params( - job_id: String, - request_options: Courier::RequestOptions::OrHash - ).returns(Courier::Models::BulkRetrieveJobResponse) - end - def retrieve_job( - # A unique identifier representing the bulk job - job_id, - request_options: {} - ) - end - - # Run a bulk job - sig do - params( - job_id: String, - request_options: Courier::RequestOptions::OrHash - ).void - end - def run_job( - # A unique identifier representing the bulk job - job_id, - request_options: {} - ) - end - - # @api private - sig { params(client: Courier::Client).returns(T.attached_class) } - def self.new(client:) - end - end - end -end diff --git a/sig/courier/client.rbs b/sig/courier/client.rbs index 792cec3c..071501a2 100644 --- a/sig/courier/client.rbs +++ b/sig/courier/client.rbs @@ -26,8 +26,6 @@ module Courier attr_reader brands: Courier::Resources::Brands - attr_reader bulk: Courier::Resources::Bulk - attr_reader digests: Courier::Resources::Digests attr_reader inbound: Courier::Resources::Inbound diff --git a/sig/courier/models.rbs b/sig/courier/models.rbs index 19cb7bd7..31b27a2c 100644 --- a/sig/courier/models.rbs +++ b/sig/courier/models.rbs @@ -73,16 +73,6 @@ module Courier class BrandUpdateParams = Courier::Models::BrandUpdateParams - class BulkAddUsersParams = Courier::Models::BulkAddUsersParams - - class BulkCreateJobParams = Courier::Models::BulkCreateJobParams - - class BulkListUsersParams = Courier::Models::BulkListUsersParams - - class BulkRetrieveJobParams = Courier::Models::BulkRetrieveJobParams - - class BulkRunJobParams = Courier::Models::BulkRunJobParams - module CancelJourneyRequest = Courier::Models::CancelJourneyRequest module CancelJourneyResponse = Courier::Models::CancelJourneyResponse @@ -153,10 +143,6 @@ module Courier class Icons = Courier::Models::Icons - class InboundBulkMessage = Courier::Models::InboundBulkMessage - - class InboundBulkMessageUser = Courier::Models::InboundBulkMessageUser - class InboundTrackEventParams = Courier::Models::InboundTrackEventParams class Intercom = Courier::Models::Intercom diff --git a/sig/courier/models/bulk_add_users_params.rbs b/sig/courier/models/bulk_add_users_params.rbs deleted file mode 100644 index 47d5a76b..00000000 --- a/sig/courier/models/bulk_add_users_params.rbs +++ /dev/null @@ -1,28 +0,0 @@ -module Courier - module Models - type bulk_add_users_params = - { job_id: String, users: ::Array[Courier::InboundBulkMessageUser] } - & Courier::Internal::Type::request_parameters - - class BulkAddUsersParams < Courier::Internal::Type::BaseModel - extend Courier::Internal::Type::RequestParameters::Converter - include Courier::Internal::Type::RequestParameters - - attr_accessor job_id: String - - attr_accessor users: ::Array[Courier::InboundBulkMessageUser] - - def initialize: ( - job_id: String, - users: ::Array[Courier::InboundBulkMessageUser], - ?request_options: Courier::request_opts - ) -> void - - def to_hash: -> { - job_id: String, - users: ::Array[Courier::InboundBulkMessageUser], - request_options: Courier::RequestOptions - } - end - end -end diff --git a/sig/courier/models/bulk_create_job_params.rbs b/sig/courier/models/bulk_create_job_params.rbs deleted file mode 100644 index dbdd8cdc..00000000 --- a/sig/courier/models/bulk_create_job_params.rbs +++ /dev/null @@ -1,24 +0,0 @@ -module Courier - module Models - type bulk_create_job_params = - { message: Courier::InboundBulkMessage } - & Courier::Internal::Type::request_parameters - - class BulkCreateJobParams < Courier::Internal::Type::BaseModel - extend Courier::Internal::Type::RequestParameters::Converter - include Courier::Internal::Type::RequestParameters - - attr_accessor message: Courier::InboundBulkMessage - - def initialize: ( - message: Courier::InboundBulkMessage, - ?request_options: Courier::request_opts - ) -> void - - def to_hash: -> { - message: Courier::InboundBulkMessage, - request_options: Courier::RequestOptions - } - end - end -end diff --git a/sig/courier/models/bulk_create_job_response.rbs b/sig/courier/models/bulk_create_job_response.rbs deleted file mode 100644 index ec06db2b..00000000 --- a/sig/courier/models/bulk_create_job_response.rbs +++ /dev/null @@ -1,13 +0,0 @@ -module Courier - module Models - type bulk_create_job_response = { job_id: String } - - class BulkCreateJobResponse < Courier::Internal::Type::BaseModel - attr_accessor job_id: String - - def initialize: (job_id: String) -> void - - def to_hash: -> { job_id: String } - end - end -end diff --git a/sig/courier/models/bulk_list_users_params.rbs b/sig/courier/models/bulk_list_users_params.rbs deleted file mode 100644 index 749c5893..00000000 --- a/sig/courier/models/bulk_list_users_params.rbs +++ /dev/null @@ -1,28 +0,0 @@ -module Courier - module Models - type bulk_list_users_params = - { job_id: String, cursor: String? } - & Courier::Internal::Type::request_parameters - - class BulkListUsersParams < Courier::Internal::Type::BaseModel - extend Courier::Internal::Type::RequestParameters::Converter - include Courier::Internal::Type::RequestParameters - - attr_accessor job_id: String - - attr_accessor cursor: String? - - def initialize: ( - job_id: String, - ?cursor: String?, - ?request_options: Courier::request_opts - ) -> void - - def to_hash: -> { - job_id: String, - cursor: String?, - request_options: Courier::RequestOptions - } - end - end -end diff --git a/sig/courier/models/bulk_list_users_response.rbs b/sig/courier/models/bulk_list_users_response.rbs deleted file mode 100644 index 382aa45e..00000000 --- a/sig/courier/models/bulk_list_users_response.rbs +++ /dev/null @@ -1,65 +0,0 @@ -module Courier - module Models - type bulk_list_users_response = - { - items: ::Array[Courier::Models::BulkListUsersResponse::Item], - paging: Courier::Paging - } - - class BulkListUsersResponse < Courier::Internal::Type::BaseModel - attr_accessor items: ::Array[Courier::Models::BulkListUsersResponse::Item] - - attr_accessor paging: Courier::Paging - - def initialize: ( - items: ::Array[Courier::Models::BulkListUsersResponse::Item], - paging: Courier::Paging - ) -> void - - def to_hash: -> { - items: ::Array[Courier::Models::BulkListUsersResponse::Item], - paging: Courier::Paging - } - - type item = - { - status: Courier::Models::BulkListUsersResponse::Item::status, - message_id: String? - } - - class Item < Courier::Models::InboundBulkMessageUser - def status: -> Courier::Models::BulkListUsersResponse::Item::status - - def status=: ( - Courier::Models::BulkListUsersResponse::Item::status _ - ) -> Courier::Models::BulkListUsersResponse::Item::status - - def message_id: -> String? - - def message_id=: (String? _) -> String? - - def initialize: ( - status: Courier::Models::BulkListUsersResponse::Item::status, - ?message_id: String? - ) -> void - - def to_hash: -> { - status: Courier::Models::BulkListUsersResponse::Item::status, - message_id: String? - } - - type status = :PENDING | :ENQUEUED | :ERROR - - module Status - extend Courier::Internal::Type::Enum - - PENDING: :PENDING - ENQUEUED: :ENQUEUED - ERROR: :ERROR - - def self?.values: -> ::Array[Courier::Models::BulkListUsersResponse::Item::status] - end - end - end - end -end diff --git a/sig/courier/models/bulk_retrieve_job_params.rbs b/sig/courier/models/bulk_retrieve_job_params.rbs deleted file mode 100644 index 4314b360..00000000 --- a/sig/courier/models/bulk_retrieve_job_params.rbs +++ /dev/null @@ -1,23 +0,0 @@ -module Courier - module Models - type bulk_retrieve_job_params = - { job_id: String } & Courier::Internal::Type::request_parameters - - class BulkRetrieveJobParams < Courier::Internal::Type::BaseModel - extend Courier::Internal::Type::RequestParameters::Converter - include Courier::Internal::Type::RequestParameters - - attr_accessor job_id: String - - def initialize: ( - job_id: String, - ?request_options: Courier::request_opts - ) -> void - - def to_hash: -> { - job_id: String, - request_options: Courier::RequestOptions - } - end - end -end diff --git a/sig/courier/models/bulk_retrieve_job_response.rbs b/sig/courier/models/bulk_retrieve_job_response.rbs deleted file mode 100644 index 2641d878..00000000 --- a/sig/courier/models/bulk_retrieve_job_response.rbs +++ /dev/null @@ -1,66 +0,0 @@ -module Courier - module Models - type bulk_retrieve_job_response = - { job: Courier::Models::BulkRetrieveJobResponse::Job } - - class BulkRetrieveJobResponse < Courier::Internal::Type::BaseModel - attr_accessor job: Courier::Models::BulkRetrieveJobResponse::Job - - def initialize: ( - job: Courier::Models::BulkRetrieveJobResponse::Job - ) -> void - - def to_hash: -> { job: Courier::Models::BulkRetrieveJobResponse::Job } - - type job = - { - definition: Courier::InboundBulkMessage, - enqueued: Integer, - failures: Integer, - received: Integer, - status: Courier::Models::BulkRetrieveJobResponse::Job::status - } - - class Job < Courier::Internal::Type::BaseModel - attr_accessor definition: Courier::InboundBulkMessage - - attr_accessor enqueued: Integer - - attr_accessor failures: Integer - - attr_accessor received: Integer - - attr_accessor status: Courier::Models::BulkRetrieveJobResponse::Job::status - - def initialize: ( - definition: Courier::InboundBulkMessage, - enqueued: Integer, - failures: Integer, - received: Integer, - status: Courier::Models::BulkRetrieveJobResponse::Job::status - ) -> void - - def to_hash: -> { - definition: Courier::InboundBulkMessage, - enqueued: Integer, - failures: Integer, - received: Integer, - status: Courier::Models::BulkRetrieveJobResponse::Job::status - } - - type status = :CREATED | :PROCESSING | :COMPLETED | :ERROR - - module Status - extend Courier::Internal::Type::Enum - - CREATED: :CREATED - PROCESSING: :PROCESSING - COMPLETED: :COMPLETED - ERROR: :ERROR - - def self?.values: -> ::Array[Courier::Models::BulkRetrieveJobResponse::Job::status] - end - end - end - end -end diff --git a/sig/courier/models/bulk_run_job_params.rbs b/sig/courier/models/bulk_run_job_params.rbs deleted file mode 100644 index 1d0398e5..00000000 --- a/sig/courier/models/bulk_run_job_params.rbs +++ /dev/null @@ -1,23 +0,0 @@ -module Courier - module Models - type bulk_run_job_params = - { job_id: String } & Courier::Internal::Type::request_parameters - - class BulkRunJobParams < Courier::Internal::Type::BaseModel - extend Courier::Internal::Type::RequestParameters::Converter - include Courier::Internal::Type::RequestParameters - - attr_accessor job_id: String - - def initialize: ( - job_id: String, - ?request_options: Courier::request_opts - ) -> void - - def to_hash: -> { - job_id: String, - request_options: Courier::RequestOptions - } - end - end -end diff --git a/sig/courier/models/inbound_bulk_message.rbs b/sig/courier/models/inbound_bulk_message.rbs deleted file mode 100644 index b268bcfb..00000000 --- a/sig/courier/models/inbound_bulk_message.rbs +++ /dev/null @@ -1,58 +0,0 @@ -module Courier - module Models - type inbound_bulk_message = - { - event: String, - brand: String?, - content: Courier::Models::InboundBulkMessage::content?, - data: ::Hash[Symbol, top]?, - locale: ::Hash[Symbol, ::Hash[Symbol, top]]?, - override: ::Hash[Symbol, top]?, - template: String? - } - - class InboundBulkMessage < Courier::Internal::Type::BaseModel - attr_accessor event: String - - attr_accessor brand: String? - - attr_accessor content: Courier::Models::InboundBulkMessage::content? - - attr_accessor data: ::Hash[Symbol, top]? - - attr_accessor locale: ::Hash[Symbol, ::Hash[Symbol, top]]? - - attr_accessor override: ::Hash[Symbol, top]? - - attr_accessor template: String? - - def initialize: ( - event: String, - ?brand: String?, - ?content: Courier::Models::InboundBulkMessage::content?, - ?data: ::Hash[Symbol, top]?, - ?locale: ::Hash[Symbol, ::Hash[Symbol, top]]?, - ?override: ::Hash[Symbol, top]?, - ?template: String? - ) -> void - - def to_hash: -> { - event: String, - brand: String?, - content: Courier::Models::InboundBulkMessage::content?, - data: ::Hash[Symbol, top]?, - locale: ::Hash[Symbol, ::Hash[Symbol, top]]?, - override: ::Hash[Symbol, top]?, - template: String? - } - - type content = Courier::ElementalContentSugar | Courier::ElementalContent - - module Content - extend Courier::Internal::Type::Union - - def self?.variants: -> ::Array[Courier::Models::InboundBulkMessage::content] - end - end - end -end diff --git a/sig/courier/models/inbound_bulk_message_user.rbs b/sig/courier/models/inbound_bulk_message_user.rbs deleted file mode 100644 index 62331583..00000000 --- a/sig/courier/models/inbound_bulk_message_user.rbs +++ /dev/null @@ -1,42 +0,0 @@ -module Courier - module Models - type inbound_bulk_message_user = - { - data: top, - preferences: Courier::RecipientPreferences?, - profile: ::Hash[Symbol, top]?, - recipient: String?, - to: Courier::UserRecipient? - } - - class InboundBulkMessageUser < Courier::Internal::Type::BaseModel - attr_reader data: top? - - def data=: (top) -> top - - attr_accessor preferences: Courier::RecipientPreferences? - - attr_accessor profile: ::Hash[Symbol, top]? - - attr_accessor recipient: String? - - attr_accessor to: Courier::UserRecipient? - - def initialize: ( - ?data: top, - ?preferences: Courier::RecipientPreferences?, - ?profile: ::Hash[Symbol, top]?, - ?recipient: String?, - ?to: Courier::UserRecipient? - ) -> void - - def to_hash: -> { - data: top, - preferences: Courier::RecipientPreferences?, - profile: ::Hash[Symbol, top]?, - recipient: String?, - to: Courier::UserRecipient? - } - end - end -end diff --git a/sig/courier/resources/bulk.rbs b/sig/courier/resources/bulk.rbs deleted file mode 100644 index cbf2c109..00000000 --- a/sig/courier/resources/bulk.rbs +++ /dev/null @@ -1,34 +0,0 @@ -module Courier - module Resources - class Bulk - def add_users: ( - String job_id, - users: ::Array[Courier::InboundBulkMessageUser], - ?request_options: Courier::request_opts - ) -> nil - - def create_job: ( - message: Courier::InboundBulkMessage, - ?request_options: Courier::request_opts - ) -> Courier::Models::BulkCreateJobResponse - - def list_users: ( - String job_id, - ?cursor: String?, - ?request_options: Courier::request_opts - ) -> Courier::Models::BulkListUsersResponse - - def retrieve_job: ( - String job_id, - ?request_options: Courier::request_opts - ) -> Courier::Models::BulkRetrieveJobResponse - - def run_job: ( - String job_id, - ?request_options: Courier::request_opts - ) -> nil - - def initialize: (client: Courier::Client) -> void - end - end -end diff --git a/test/courier/resources/bulk_test.rb b/test/courier/resources/bulk_test.rb deleted file mode 100644 index d44686e1..00000000 --- a/test/courier/resources/bulk_test.rb +++ /dev/null @@ -1,74 +0,0 @@ -# frozen_string_literal: true - -require_relative "../test_helper" - -class Courier::Test::Resources::BulkTest < Courier::Test::ResourceTest - def test_add_users_required_params - skip("Mock server tests are disabled") - - response = @courier.bulk.add_users("job_id", users: [{}]) - - assert_pattern do - response => nil - end - end - - def test_create_job_required_params - skip("Mock server tests are disabled") - - response = @courier.bulk.create_job(message: {event: "event"}) - - assert_pattern do - response => Courier::Models::BulkCreateJobResponse - end - - assert_pattern do - response => { - job_id: String - } - end - end - - def test_list_users - skip("Mock server tests are disabled") - - response = @courier.bulk.list_users("job_id") - - assert_pattern do - response => Courier::Models::BulkListUsersResponse - end - - assert_pattern do - response => { - items: ^(Courier::Internal::Type::ArrayOf[Courier::Models::BulkListUsersResponse::Item]), - paging: Courier::Paging - } - end - end - - def test_retrieve_job - skip("Mock server tests are disabled") - - response = @courier.bulk.retrieve_job("job_id") - - assert_pattern do - response => Courier::Models::BulkRetrieveJobResponse - end - - assert_pattern do - response => { - job: Courier::Models::BulkRetrieveJobResponse::Job - } - end - end - - def test_run_job - skip("Mock server tests are disabled") - - response = @courier.bulk.run_job("job_id") - - assert_pattern do - response => nil - end - end -end From 450bd5e58c4ae0da3fdb095dba2aebc54f6c9db5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 23 Jul 2026 19:48:55 +0000 Subject: [PATCH 2/2] release: 4.21.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ Gemfile.lock | 2 +- lib/courier/version.rb | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 88e4c443..b9e06599 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "4.20.0" + ".": "4.21.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index b068ae08..43e23949 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 4.21.0 (2026-07-23) + +Full Changelog: [v4.20.0...v4.21.0](https://github.com/trycourier/courier-ruby/compare/v4.20.0...v4.21.0) + +### Features + +* Remove /bulk endpoints from api-spec (C-19507) ([#171](https://github.com/trycourier/courier-ruby/issues/171)) ([e10d767](https://github.com/trycourier/courier-ruby/commit/e10d767174c28e0ae756041d7d2f1f78f2c72241)) + ## 4.20.0 (2026-07-20) Full Changelog: [v4.19.2...v4.20.0](https://github.com/trycourier/courier-ruby/compare/v4.19.2...v4.20.0) diff --git a/Gemfile.lock b/Gemfile.lock index e60f699c..ed874bea 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -11,7 +11,7 @@ GIT PATH remote: . specs: - trycourier (4.20.0) + trycourier (4.21.0) cgi connection_pool diff --git a/lib/courier/version.rb b/lib/courier/version.rb index 960b3732..f25582f1 100644 --- a/lib/courier/version.rb +++ b/lib/courier/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Courier - VERSION = "4.20.0" + VERSION = "4.21.0" end