trycourier 4.8.0 → 4.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +41 -0
- data/README.md +1 -1
- data/lib/courier/client.rb +8 -0
- data/lib/courier/internal/util.rb +19 -6
- data/lib/courier/models/associated_notification_list_response.rb +24 -0
- data/lib/courier/models/channel.rb +75 -0
- data/lib/courier/models/channel_metadata.rb +15 -0
- data/lib/courier/models/element_with_checksums.rb +60 -0
- data/lib/courier/models/elemental_content.rb +2 -2
- data/lib/courier/models/elemental_html_node_with_type.rb +24 -0
- data/lib/courier/models/elemental_node.rb +3 -1
- data/lib/courier/models/message_channels.rb +8 -0
- data/lib/courier/models/message_providers.rb +8 -0
- data/lib/courier/models/message_providers_type.rb +38 -0
- data/lib/courier/models/metadata.rb +15 -0
- data/lib/courier/models/notification_archive_params.rb +20 -0
- data/lib/courier/models/notification_content_get_response.rb +26 -0
- data/lib/courier/models/notification_content_mutation_response.rb +61 -0
- data/lib/courier/models/notification_content_put_request.rb +51 -0
- data/lib/courier/models/notification_create_params.rb +14 -0
- data/lib/courier/models/notification_element_put_request.rb +62 -0
- data/lib/courier/models/notification_get_content.rb +0 -1
- data/lib/courier/models/notification_list_params.rb +13 -4
- data/lib/courier/models/notification_list_response.rb +108 -93
- data/lib/courier/models/notification_list_versions_params.rb +37 -0
- data/lib/courier/models/notification_locale_put_request.rb +39 -0
- data/lib/courier/models/notification_publish_params.rb +20 -0
- data/lib/courier/models/notification_put_content_params.rb +20 -0
- data/lib/courier/models/notification_put_element_params.rb +26 -0
- data/lib/courier/models/notification_put_locale_params.rb +26 -0
- data/lib/courier/models/notification_replace_params.rb +20 -0
- data/lib/courier/models/notification_retrieve_content_params.rb +14 -1
- data/lib/courier/models/notification_retrieve_content_response.rb +21 -0
- data/lib/courier/models/notification_retrieve_params.rb +33 -0
- data/lib/courier/models/notification_template_create_request.rb +45 -0
- data/lib/courier/models/notification_template_get_response.rb +92 -0
- data/lib/courier/models/notification_template_mutation_response.rb +51 -0
- data/lib/courier/models/notification_template_payload.rb +98 -0
- data/lib/courier/models/notification_template_publish_request.rb +19 -0
- data/lib/courier/models/notification_template_state.rb +16 -0
- data/lib/courier/models/notification_template_summary.rb +81 -0
- data/lib/courier/models/notification_template_update_request.rb +46 -0
- data/lib/courier/models/notification_template_version_list_response.rb +22 -0
- data/lib/courier/models/provider.rb +67 -0
- data/lib/courier/models/provider_create_params.rb +52 -0
- data/lib/courier/models/provider_delete_params.rb +20 -0
- data/lib/courier/models/provider_list_params.rb +22 -0
- data/lib/courier/models/provider_list_response.rb +24 -0
- data/lib/courier/models/provider_retrieve_params.rb +20 -0
- data/lib/courier/models/provider_update_params.rb +58 -0
- data/lib/courier/models/providers/catalog_list_params.rb +44 -0
- data/lib/courier/models/providers/catalog_list_response.rb +26 -0
- data/lib/courier/models/providers_catalog_entry.rb +86 -0
- data/lib/courier/models/routing_strategy_archive_params.rb +20 -0
- data/lib/courier/models/routing_strategy_create_params.rb +14 -0
- data/lib/courier/models/routing_strategy_create_request.rb +58 -0
- data/lib/courier/models/routing_strategy_get_response.rb +99 -0
- data/lib/courier/models/routing_strategy_list_notifications_params.rb +37 -0
- data/lib/courier/models/routing_strategy_list_params.rb +30 -0
- data/lib/courier/models/routing_strategy_list_response.rb +24 -0
- data/lib/courier/models/routing_strategy_mutation_response.rb +19 -0
- data/lib/courier/models/routing_strategy_replace_params.rb +20 -0
- data/lib/courier/models/routing_strategy_replace_request.rb +59 -0
- data/lib/courier/models/routing_strategy_retrieve_params.rb +20 -0
- data/lib/courier/models/routing_strategy_summary.rb +75 -0
- data/lib/courier/models/send_message_params.rb +6 -154
- data/lib/courier/models/tenant_template_input.rb +6 -152
- data/lib/courier/models/timeouts.rb +21 -0
- data/lib/courier/models/version_node.rb +46 -0
- data/lib/courier/models.rb +110 -0
- data/lib/courier/resources/notifications.rb +289 -12
- data/lib/courier/resources/providers/catalog.rb +49 -0
- data/lib/courier/resources/providers.rb +150 -0
- data/lib/courier/resources/routing_strategies.rb +179 -0
- data/lib/courier/version.rb +1 -1
- data/lib/courier.rb +60 -2
- data/rbi/courier/client.rbi +6 -0
- data/rbi/courier/internal/util.rbi +8 -0
- data/rbi/courier/models/associated_notification_list_response.rbi +45 -0
- data/rbi/courier/models/channel.rbi +106 -0
- data/rbi/courier/models/channel_metadata.rbi +28 -0
- data/rbi/courier/models/element_with_checksums.rbi +109 -0
- data/rbi/courier/models/elemental_content.rbi +6 -3
- data/rbi/courier/models/elemental_html_node_with_type.rbi +59 -0
- data/rbi/courier/models/elemental_node.rbi +2 -1
- data/rbi/courier/models/message_channels.rbi +11 -0
- data/rbi/courier/models/message_providers.rbi +11 -0
- data/rbi/courier/models/message_providers_type.rbi +60 -0
- data/rbi/courier/models/metadata.rbi +26 -0
- data/rbi/courier/models/notification_archive_params.rbi +35 -0
- data/rbi/courier/models/notification_content_get_response.rbi +45 -0
- data/rbi/courier/models/notification_content_mutation_response.rbi +95 -0
- data/rbi/courier/models/notification_content_put_request.rbi +145 -0
- data/rbi/courier/models/notification_create_params.rbi +27 -0
- data/rbi/courier/models/notification_element_put_request.rbi +98 -0
- data/rbi/courier/models/notification_list_params.rbi +15 -2
- data/rbi/courier/models/notification_list_response.rbi +159 -119
- data/rbi/courier/models/notification_list_versions_params.rbi +66 -0
- data/rbi/courier/models/notification_locale_put_request.rbi +79 -0
- data/rbi/courier/models/notification_publish_params.rbi +35 -0
- data/rbi/courier/models/notification_put_content_params.rbi +38 -0
- data/rbi/courier/models/notification_put_element_params.rbi +46 -0
- data/rbi/courier/models/notification_put_locale_params.rbi +46 -0
- data/rbi/courier/models/notification_replace_params.rbi +35 -0
- data/rbi/courier/models/notification_retrieve_content_params.rbi +21 -2
- data/rbi/courier/models/notification_retrieve_content_response.rbi +29 -0
- data/rbi/courier/models/notification_retrieve_params.rbi +54 -0
- data/rbi/courier/models/notification_template_create_request.rbi +102 -0
- data/rbi/courier/models/notification_template_get_response.rbi +162 -0
- data/rbi/courier/models/notification_template_mutation_response.rbi +121 -0
- data/rbi/courier/models/notification_template_payload.rbi +183 -0
- data/rbi/courier/models/notification_template_publish_request.rbi +35 -0
- data/rbi/courier/models/notification_template_state.rbi +26 -0
- data/rbi/courier/models/notification_template_summary.rbi +124 -0
- data/rbi/courier/models/notification_template_update_request.rbi +103 -0
- data/rbi/courier/models/notification_template_version_list_response.rbi +41 -0
- data/rbi/courier/models/provider.rbi +87 -0
- data/rbi/courier/models/provider_create_params.rbi +82 -0
- data/rbi/courier/models/provider_delete_params.rbi +35 -0
- data/rbi/courier/models/provider_list_params.rbi +43 -0
- data/rbi/courier/models/provider_list_response.rbi +42 -0
- data/rbi/courier/models/provider_retrieve_params.rbi +35 -0
- data/rbi/courier/models/provider_update_params.rbi +86 -0
- data/rbi/courier/models/providers/catalog_list_params.rbi +75 -0
- data/rbi/courier/models/providers/catalog_list_response.rbi +47 -0
- data/rbi/courier/models/providers_catalog_entry.rbi +129 -0
- data/rbi/courier/models/routing_strategy_archive_params.rbi +38 -0
- data/rbi/courier/models/routing_strategy_create_params.rbi +30 -0
- data/rbi/courier/models/routing_strategy_create_request.rbi +86 -0
- data/rbi/courier/models/routing_strategy_get_response.rbi +121 -0
- data/rbi/courier/models/routing_strategy_list_notifications_params.rbi +63 -0
- data/rbi/courier/models/routing_strategy_list_params.rbi +54 -0
- data/rbi/courier/models/routing_strategy_list_response.rbi +45 -0
- data/rbi/courier/models/routing_strategy_mutation_response.rbi +31 -0
- data/rbi/courier/models/routing_strategy_replace_params.rbi +38 -0
- data/rbi/courier/models/routing_strategy_replace_request.rbi +87 -0
- data/rbi/courier/models/routing_strategy_retrieve_params.rbi +38 -0
- data/rbi/courier/models/routing_strategy_summary.rbi +95 -0
- data/rbi/courier/models/send_message_params.rbi +6 -362
- data/rbi/courier/models/tenant_template_input.rbi +8 -336
- data/rbi/courier/models/timeouts.rbi +33 -0
- data/rbi/courier/models/version_node.rbi +65 -0
- data/rbi/courier/models.rbi +122 -0
- data/rbi/courier/resources/notifications.rbi +222 -6
- data/rbi/courier/resources/providers/catalog.rbi +38 -0
- data/rbi/courier/resources/providers.rbi +116 -0
- data/rbi/courier/resources/routing_strategies.rbi +147 -0
- data/sig/courier/client.rbs +4 -0
- data/sig/courier/internal/util.rbs +4 -0
- data/sig/courier/models/associated_notification_list_response.rbs +25 -0
- data/sig/courier/models/channel.rbs +61 -0
- data/sig/courier/models/channel_metadata.rbs +13 -0
- data/sig/courier/models/element_with_checksums.rbs +60 -0
- data/sig/courier/models/elemental_html_node_with_type.rbs +32 -0
- data/sig/courier/models/elemental_node.rbs +1 -0
- data/sig/courier/models/message_channels.rbs +7 -0
- data/sig/courier/models/message_providers.rbs +7 -0
- data/sig/courier/models/message_providers_type.rbs +35 -0
- data/sig/courier/models/metadata.rbs +13 -0
- data/sig/courier/models/notification_archive_params.rbs +20 -0
- data/sig/courier/models/notification_content_get_response.rbs +22 -0
- data/sig/courier/models/notification_content_mutation_response.rbs +47 -0
- data/sig/courier/models/notification_content_put_request.rbs +50 -0
- data/sig/courier/models/notification_create_params.rbs +15 -0
- data/sig/courier/models/notification_element_put_request.rbs +64 -0
- data/sig/courier/models/notification_list_params.rbs +7 -1
- data/sig/courier/models/notification_list_response.rbs +81 -71
- data/sig/courier/models/notification_list_versions_params.rbs +36 -0
- data/sig/courier/models/notification_locale_put_request.rbs +39 -0
- data/sig/courier/models/notification_publish_params.rbs +22 -0
- data/sig/courier/models/notification_put_content_params.rbs +22 -0
- data/sig/courier/models/notification_put_element_params.rbs +32 -0
- data/sig/courier/models/notification_put_locale_params.rbs +32 -0
- data/sig/courier/models/notification_replace_params.rbs +22 -0
- data/sig/courier/models/notification_retrieve_content_params.rbs +12 -2
- data/sig/courier/models/notification_retrieve_content_response.rbs +12 -0
- data/sig/courier/models/notification_retrieve_params.rbs +30 -0
- data/sig/courier/models/notification_template_create_request.rbs +40 -0
- data/sig/courier/models/notification_template_get_response.rbs +72 -0
- data/sig/courier/models/notification_template_mutation_response.rbs +46 -0
- data/sig/courier/models/notification_template_payload.rbs +75 -0
- data/sig/courier/models/notification_template_publish_request.rbs +15 -0
- data/sig/courier/models/notification_template_state.rbs +14 -0
- data/sig/courier/models/notification_template_summary.rbs +70 -0
- data/sig/courier/models/notification_template_update_request.rbs +40 -0
- data/sig/courier/models/notification_template_version_list_response.rbs +22 -0
- data/sig/courier/models/provider.rbs +52 -0
- data/sig/courier/models/provider_create_params.rbs +47 -0
- data/sig/courier/models/provider_delete_params.rbs +20 -0
- data/sig/courier/models/provider_list_params.rbs +25 -0
- data/sig/courier/models/provider_list_response.rbs +22 -0
- data/sig/courier/models/provider_retrieve_params.rbs +20 -0
- data/sig/courier/models/provider_update_params.rbs +52 -0
- data/sig/courier/models/providers/catalog_list_params.rbs +40 -0
- data/sig/courier/models/providers/catalog_list_response.rbs +27 -0
- data/sig/courier/models/providers_catalog_entry.rbs +64 -0
- data/sig/courier/models/routing_strategy_archive_params.rbs +20 -0
- data/sig/courier/models/routing_strategy_create_params.rbs +15 -0
- data/sig/courier/models/routing_strategy_create_request.rbs +45 -0
- data/sig/courier/models/routing_strategy_get_response.rbs +70 -0
- data/sig/courier/models/routing_strategy_list_notifications_params.rbs +34 -0
- data/sig/courier/models/routing_strategy_list_params.rbs +30 -0
- data/sig/courier/models/routing_strategy_list_response.rbs +25 -0
- data/sig/courier/models/routing_strategy_mutation_response.rbs +13 -0
- data/sig/courier/models/routing_strategy_replace_params.rbs +22 -0
- data/sig/courier/models/routing_strategy_replace_request.rbs +45 -0
- data/sig/courier/models/routing_strategy_retrieve_params.rbs +20 -0
- data/sig/courier/models/routing_strategy_summary.rbs +55 -0
- data/sig/courier/models/send_message_params.rbs +8 -130
- data/sig/courier/models/tenant_template_input.rbs +12 -134
- data/sig/courier/models/timeouts.rbs +15 -0
- data/sig/courier/models/version_node.rbs +32 -0
- data/sig/courier/models.rbs +108 -0
- data/sig/courier/resources/notifications.rbs +65 -3
- data/sig/courier/resources/providers/catalog.rbs +16 -0
- data/sig/courier/resources/providers.rbs +38 -0
- data/sig/courier/resources/routing_strategies.rbs +48 -0
- metadata +182 -8
- data/lib/courier/models/notifications/draft_retrieve_content_params.rb +0 -22
- data/lib/courier/resources/notifications/draft.rb +0 -33
- data/rbi/courier/models/notifications/draft_retrieve_content_params.rbi +0 -40
- data/rbi/courier/resources/notifications/draft.rbi +0 -23
- data/sig/courier/models/notifications/draft_retrieve_content_params.rbs +0 -22
- data/sig/courier/resources/notifications/draft.rbs +0 -14
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Courier
|
|
4
|
+
module Resources
|
|
5
|
+
class Providers
|
|
6
|
+
# @return [Courier::Resources::Providers::Catalog]
|
|
7
|
+
attr_reader :catalog
|
|
8
|
+
|
|
9
|
+
# Some parameter documentations has been truncated, see
|
|
10
|
+
# {Courier::Models::ProviderCreateParams} for more details.
|
|
11
|
+
#
|
|
12
|
+
# Create a new provider configuration. The `provider` field must be a known
|
|
13
|
+
# Courier provider key (see catalog).
|
|
14
|
+
#
|
|
15
|
+
# @overload create(provider:, alias_: nil, settings: nil, title: nil, request_options: {})
|
|
16
|
+
#
|
|
17
|
+
# @param provider [String] The provider key identifying the type (e.g. "sendgrid", "twilio"). Must be a kno
|
|
18
|
+
#
|
|
19
|
+
# @param alias_ [String] Optional alias for this configuration.
|
|
20
|
+
#
|
|
21
|
+
# @param settings [Hash{Symbol=>Object}] Provider-specific settings (snake_case keys). Defaults to an empty object when o
|
|
22
|
+
#
|
|
23
|
+
# @param title [String] Optional display title. Omit to use "Default Configuration".
|
|
24
|
+
#
|
|
25
|
+
# @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
26
|
+
#
|
|
27
|
+
# @return [Courier::Models::Provider]
|
|
28
|
+
#
|
|
29
|
+
# @see Courier::Models::ProviderCreateParams
|
|
30
|
+
def create(params)
|
|
31
|
+
parsed, options = Courier::ProviderCreateParams.dump_request(params)
|
|
32
|
+
@client.request(
|
|
33
|
+
method: :post,
|
|
34
|
+
path: "providers",
|
|
35
|
+
body: parsed,
|
|
36
|
+
model: Courier::Provider,
|
|
37
|
+
options: options
|
|
38
|
+
)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Fetch a single provider configuration by ID.
|
|
42
|
+
#
|
|
43
|
+
# @overload retrieve(id, request_options: {})
|
|
44
|
+
#
|
|
45
|
+
# @param id [String] A unique identifier of the provider configuration.
|
|
46
|
+
#
|
|
47
|
+
# @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
48
|
+
#
|
|
49
|
+
# @return [Courier::Models::Provider]
|
|
50
|
+
#
|
|
51
|
+
# @see Courier::Models::ProviderRetrieveParams
|
|
52
|
+
def retrieve(id, params = {})
|
|
53
|
+
@client.request(
|
|
54
|
+
method: :get,
|
|
55
|
+
path: ["providers/%1$s", id],
|
|
56
|
+
model: Courier::Provider,
|
|
57
|
+
options: params[:request_options]
|
|
58
|
+
)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Some parameter documentations has been truncated, see
|
|
62
|
+
# {Courier::Models::ProviderUpdateParams} for more details.
|
|
63
|
+
#
|
|
64
|
+
# Update an existing provider configuration. The `provider` key is required. All
|
|
65
|
+
# other fields are optional — omitted fields are cleared from the stored
|
|
66
|
+
# configuration (this is a full replacement, not a partial merge).
|
|
67
|
+
#
|
|
68
|
+
# @overload update(id, provider:, alias_: nil, settings: nil, title: nil, request_options: {})
|
|
69
|
+
#
|
|
70
|
+
# @param id [String] A unique identifier of the provider configuration to update.
|
|
71
|
+
#
|
|
72
|
+
# @param provider [String] The provider key identifying the type.
|
|
73
|
+
#
|
|
74
|
+
# @param alias_ [String] Updated alias. Omit to clear.
|
|
75
|
+
#
|
|
76
|
+
# @param settings [Hash{Symbol=>Object}] Provider-specific settings (snake_case keys). Replaces the full settings object
|
|
77
|
+
#
|
|
78
|
+
# @param title [String] Updated display title.
|
|
79
|
+
#
|
|
80
|
+
# @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
81
|
+
#
|
|
82
|
+
# @return [Courier::Models::Provider]
|
|
83
|
+
#
|
|
84
|
+
# @see Courier::Models::ProviderUpdateParams
|
|
85
|
+
def update(id, params)
|
|
86
|
+
parsed, options = Courier::ProviderUpdateParams.dump_request(params)
|
|
87
|
+
@client.request(
|
|
88
|
+
method: :post,
|
|
89
|
+
path: ["providers/%1$s", id],
|
|
90
|
+
body: parsed,
|
|
91
|
+
model: Courier::Provider,
|
|
92
|
+
options: options
|
|
93
|
+
)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# List configured provider integrations for the current workspace. Supports
|
|
97
|
+
# cursor-based pagination.
|
|
98
|
+
#
|
|
99
|
+
# @overload list(cursor: nil, request_options: {})
|
|
100
|
+
#
|
|
101
|
+
# @param cursor [String] Opaque cursor for fetching the next page.
|
|
102
|
+
#
|
|
103
|
+
# @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
104
|
+
#
|
|
105
|
+
# @return [Courier::Models::ProviderListResponse]
|
|
106
|
+
#
|
|
107
|
+
# @see Courier::Models::ProviderListParams
|
|
108
|
+
def list(params = {})
|
|
109
|
+
parsed, options = Courier::ProviderListParams.dump_request(params)
|
|
110
|
+
query = Courier::Internal::Util.encode_query_params(parsed)
|
|
111
|
+
@client.request(
|
|
112
|
+
method: :get,
|
|
113
|
+
path: "providers",
|
|
114
|
+
query: query,
|
|
115
|
+
model: Courier::Models::ProviderListResponse,
|
|
116
|
+
options: options
|
|
117
|
+
)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Delete a provider configuration. Returns 409 if the provider is still referenced
|
|
121
|
+
# by routing or notifications.
|
|
122
|
+
#
|
|
123
|
+
# @overload delete(id, request_options: {})
|
|
124
|
+
#
|
|
125
|
+
# @param id [String] A unique identifier of the provider configuration to delete.
|
|
126
|
+
#
|
|
127
|
+
# @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
128
|
+
#
|
|
129
|
+
# @return [nil]
|
|
130
|
+
#
|
|
131
|
+
# @see Courier::Models::ProviderDeleteParams
|
|
132
|
+
def delete(id, params = {})
|
|
133
|
+
@client.request(
|
|
134
|
+
method: :delete,
|
|
135
|
+
path: ["providers/%1$s", id],
|
|
136
|
+
model: NilClass,
|
|
137
|
+
options: params[:request_options]
|
|
138
|
+
)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# @api private
|
|
142
|
+
#
|
|
143
|
+
# @param client [Courier::Client]
|
|
144
|
+
def initialize(client:)
|
|
145
|
+
@client = client
|
|
146
|
+
@catalog = Courier::Resources::Providers::Catalog.new(client: client)
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Courier
|
|
4
|
+
module Resources
|
|
5
|
+
class RoutingStrategies
|
|
6
|
+
# Create a routing strategy. Requires a name and routing configuration at minimum.
|
|
7
|
+
# Channels and providers default to empty if omitted.
|
|
8
|
+
#
|
|
9
|
+
# @overload create(name:, routing:, channels: nil, description: nil, providers: nil, tags: nil, request_options: {})
|
|
10
|
+
#
|
|
11
|
+
# @param name [String] Human-readable name for the routing strategy.
|
|
12
|
+
#
|
|
13
|
+
# @param routing [Courier::Models::MessageRouting] Routing tree defining channel selection method and order.
|
|
14
|
+
#
|
|
15
|
+
# @param channels [Hash{Symbol=>Courier::Models::Channel}, nil] Per-channel delivery configuration. Defaults to empty if omitted.
|
|
16
|
+
#
|
|
17
|
+
# @param description [String, nil] Optional description of the routing strategy.
|
|
18
|
+
#
|
|
19
|
+
# @param providers [Hash{Symbol=>Courier::Models::MessageProvidersType}, nil] Per-provider delivery configuration. Defaults to empty if omitted.
|
|
20
|
+
#
|
|
21
|
+
# @param tags [Array<String>, nil] Optional tags for categorization.
|
|
22
|
+
#
|
|
23
|
+
# @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
24
|
+
#
|
|
25
|
+
# @return [Courier::Models::RoutingStrategyMutationResponse]
|
|
26
|
+
#
|
|
27
|
+
# @see Courier::Models::RoutingStrategyCreateParams
|
|
28
|
+
def create(params)
|
|
29
|
+
parsed, options = Courier::RoutingStrategyCreateParams.dump_request(params)
|
|
30
|
+
@client.request(
|
|
31
|
+
method: :post,
|
|
32
|
+
path: "routing-strategies",
|
|
33
|
+
body: parsed,
|
|
34
|
+
model: Courier::RoutingStrategyMutationResponse,
|
|
35
|
+
options: options
|
|
36
|
+
)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Retrieve a routing strategy by ID. Returns the full entity including routing
|
|
40
|
+
# content and metadata.
|
|
41
|
+
#
|
|
42
|
+
# @overload retrieve(id, request_options: {})
|
|
43
|
+
#
|
|
44
|
+
# @param id [String] Routing strategy ID (rs\_ prefix).
|
|
45
|
+
#
|
|
46
|
+
# @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
47
|
+
#
|
|
48
|
+
# @return [Courier::Models::RoutingStrategyGetResponse]
|
|
49
|
+
#
|
|
50
|
+
# @see Courier::Models::RoutingStrategyRetrieveParams
|
|
51
|
+
def retrieve(id, params = {})
|
|
52
|
+
@client.request(
|
|
53
|
+
method: :get,
|
|
54
|
+
path: ["routing-strategies/%1$s", id],
|
|
55
|
+
model: Courier::RoutingStrategyGetResponse,
|
|
56
|
+
options: params[:request_options]
|
|
57
|
+
)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# List routing strategies in your workspace. Returns metadata only (no
|
|
61
|
+
# routing/channels/providers content). Use GET /routing-strategies/{id} for full
|
|
62
|
+
# details.
|
|
63
|
+
#
|
|
64
|
+
# @overload list(cursor: nil, limit: nil, request_options: {})
|
|
65
|
+
#
|
|
66
|
+
# @param cursor [String, nil] Opaque pagination cursor from a previous response. Omit for the first page.
|
|
67
|
+
#
|
|
68
|
+
# @param limit [Integer] Maximum number of results per page. Default 20, max 100.
|
|
69
|
+
#
|
|
70
|
+
# @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
71
|
+
#
|
|
72
|
+
# @return [Courier::Models::RoutingStrategyListResponse]
|
|
73
|
+
#
|
|
74
|
+
# @see Courier::Models::RoutingStrategyListParams
|
|
75
|
+
def list(params = {})
|
|
76
|
+
parsed, options = Courier::RoutingStrategyListParams.dump_request(params)
|
|
77
|
+
query = Courier::Internal::Util.encode_query_params(parsed)
|
|
78
|
+
@client.request(
|
|
79
|
+
method: :get,
|
|
80
|
+
path: "routing-strategies",
|
|
81
|
+
query: query,
|
|
82
|
+
model: Courier::RoutingStrategyListResponse,
|
|
83
|
+
options: options
|
|
84
|
+
)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Archive a routing strategy. The strategy must not have associated notification
|
|
88
|
+
# templates. Unlink all templates before archiving.
|
|
89
|
+
#
|
|
90
|
+
# @overload archive(id, request_options: {})
|
|
91
|
+
#
|
|
92
|
+
# @param id [String] Routing strategy ID (rs\_ prefix).
|
|
93
|
+
#
|
|
94
|
+
# @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
95
|
+
#
|
|
96
|
+
# @return [nil]
|
|
97
|
+
#
|
|
98
|
+
# @see Courier::Models::RoutingStrategyArchiveParams
|
|
99
|
+
def archive(id, params = {})
|
|
100
|
+
@client.request(
|
|
101
|
+
method: :delete,
|
|
102
|
+
path: ["routing-strategies/%1$s", id],
|
|
103
|
+
model: NilClass,
|
|
104
|
+
options: params[:request_options]
|
|
105
|
+
)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# List notification templates associated with a routing strategy. Includes
|
|
109
|
+
# template metadata only, not full content.
|
|
110
|
+
#
|
|
111
|
+
# @overload list_notifications(id, cursor: nil, limit: nil, request_options: {})
|
|
112
|
+
#
|
|
113
|
+
# @param id [String] Routing strategy ID (`rs_` prefix).
|
|
114
|
+
#
|
|
115
|
+
# @param cursor [String, nil] Opaque pagination cursor from a previous response. Omit for the first page.
|
|
116
|
+
#
|
|
117
|
+
# @param limit [Integer] Maximum number of results per page. Default 20, max 100.
|
|
118
|
+
#
|
|
119
|
+
# @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
120
|
+
#
|
|
121
|
+
# @return [Courier::Models::AssociatedNotificationListResponse]
|
|
122
|
+
#
|
|
123
|
+
# @see Courier::Models::RoutingStrategyListNotificationsParams
|
|
124
|
+
def list_notifications(id, params = {})
|
|
125
|
+
parsed, options = Courier::RoutingStrategyListNotificationsParams.dump_request(params)
|
|
126
|
+
query = Courier::Internal::Util.encode_query_params(parsed)
|
|
127
|
+
@client.request(
|
|
128
|
+
method: :get,
|
|
129
|
+
path: ["routing-strategies/%1$s/notifications", id],
|
|
130
|
+
query: query,
|
|
131
|
+
model: Courier::AssociatedNotificationListResponse,
|
|
132
|
+
options: options
|
|
133
|
+
)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Replace a routing strategy. Full document replacement; the caller must send the
|
|
137
|
+
# complete desired state. Missing optional fields are cleared.
|
|
138
|
+
#
|
|
139
|
+
# @overload replace(id, name:, routing:, channels: nil, description: nil, providers: nil, tags: nil, request_options: {})
|
|
140
|
+
#
|
|
141
|
+
# @param id [String] Routing strategy ID (rs\_ prefix).
|
|
142
|
+
#
|
|
143
|
+
# @param name [String] Human-readable name for the routing strategy.
|
|
144
|
+
#
|
|
145
|
+
# @param routing [Courier::Models::MessageRouting] Routing tree defining channel selection method and order.
|
|
146
|
+
#
|
|
147
|
+
# @param channels [Hash{Symbol=>Courier::Models::Channel}, nil] Per-channel delivery configuration. Omit to clear.
|
|
148
|
+
#
|
|
149
|
+
# @param description [String, nil] Optional description. Omit or null to clear.
|
|
150
|
+
#
|
|
151
|
+
# @param providers [Hash{Symbol=>Courier::Models::MessageProvidersType}, nil] Per-provider delivery configuration. Omit to clear.
|
|
152
|
+
#
|
|
153
|
+
# @param tags [Array<String>, nil] Optional tags. Omit or null to clear.
|
|
154
|
+
#
|
|
155
|
+
# @param request_options [Courier::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
156
|
+
#
|
|
157
|
+
# @return [Courier::Models::RoutingStrategyMutationResponse]
|
|
158
|
+
#
|
|
159
|
+
# @see Courier::Models::RoutingStrategyReplaceParams
|
|
160
|
+
def replace(id, params)
|
|
161
|
+
parsed, options = Courier::RoutingStrategyReplaceParams.dump_request(params)
|
|
162
|
+
@client.request(
|
|
163
|
+
method: :put,
|
|
164
|
+
path: ["routing-strategies/%1$s", id],
|
|
165
|
+
body: parsed,
|
|
166
|
+
model: Courier::RoutingStrategyMutationResponse,
|
|
167
|
+
options: options
|
|
168
|
+
)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# @api private
|
|
172
|
+
#
|
|
173
|
+
# @param client [Courier::Client]
|
|
174
|
+
def initialize(client:)
|
|
175
|
+
@client = client
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
data/lib/courier/version.rb
CHANGED
data/lib/courier.rb
CHANGED
|
@@ -60,6 +60,15 @@ require_relative "courier/models/subscription_topic_new"
|
|
|
60
60
|
require_relative "courier/models/elemental_channel_node"
|
|
61
61
|
require_relative "courier/models/journeys_invoke_request"
|
|
62
62
|
require_relative "courier/models/message_details"
|
|
63
|
+
require_relative "courier/models/notification_template_create_request"
|
|
64
|
+
require_relative "courier/models/notification_template_publish_request"
|
|
65
|
+
require_relative "courier/models/notification_content_put_request"
|
|
66
|
+
require_relative "courier/models/notification_element_put_request"
|
|
67
|
+
require_relative "courier/models/notification_locale_put_request"
|
|
68
|
+
require_relative "courier/models/notification_template_update_request"
|
|
69
|
+
require_relative "courier/models/notification_template_payload"
|
|
70
|
+
require_relative "courier/models/routing_strategy_create_request"
|
|
71
|
+
require_relative "courier/models/routing_strategy_replace_request"
|
|
63
72
|
require_relative "courier/models/base_template_tenant_association"
|
|
64
73
|
require_relative "courier/models/post_tenant_template_publish_request"
|
|
65
74
|
require_relative "courier/models/put_tenant_template_request"
|
|
@@ -67,6 +76,7 @@ require_relative "courier/models/users/user_token"
|
|
|
67
76
|
require_relative "courier/models/airship_profile"
|
|
68
77
|
require_relative "courier/models/airship_profile_audience"
|
|
69
78
|
require_relative "courier/models/alignment"
|
|
79
|
+
require_relative "courier/models/associated_notification_list_response"
|
|
70
80
|
require_relative "courier/models/audience"
|
|
71
81
|
require_relative "courier/models/audience_delete_params"
|
|
72
82
|
require_relative "courier/models/audience_filter"
|
|
@@ -112,7 +122,9 @@ require_relative "courier/models/bulk_list_users_response"
|
|
|
112
122
|
require_relative "courier/models/bulk_retrieve_job_params"
|
|
113
123
|
require_relative "courier/models/bulk_retrieve_job_response"
|
|
114
124
|
require_relative "courier/models/bulk_run_job_params"
|
|
125
|
+
require_relative "courier/models/channel"
|
|
115
126
|
require_relative "courier/models/channel_classification"
|
|
127
|
+
require_relative "courier/models/channel_metadata"
|
|
116
128
|
require_relative "courier/models/channel_preference"
|
|
117
129
|
require_relative "courier/models/check"
|
|
118
130
|
require_relative "courier/models/default_preferences"
|
|
@@ -123,11 +135,13 @@ require_relative "courier/models/elemental_channel_node_with_type"
|
|
|
123
135
|
require_relative "courier/models/elemental_content"
|
|
124
136
|
require_relative "courier/models/elemental_content_sugar"
|
|
125
137
|
require_relative "courier/models/elemental_divider_node_with_type"
|
|
138
|
+
require_relative "courier/models/elemental_html_node_with_type"
|
|
126
139
|
require_relative "courier/models/elemental_image_node_with_type"
|
|
127
140
|
require_relative "courier/models/elemental_meta_node_with_type"
|
|
128
141
|
require_relative "courier/models/elemental_node"
|
|
129
142
|
require_relative "courier/models/elemental_quote_node_with_type"
|
|
130
143
|
require_relative "courier/models/elemental_text_node_with_type"
|
|
144
|
+
require_relative "courier/models/element_with_checksums"
|
|
131
145
|
require_relative "courier/models/email_footer"
|
|
132
146
|
require_relative "courier/models/email_head"
|
|
133
147
|
require_relative "courier/models/email_header"
|
|
@@ -161,6 +175,7 @@ require_relative "courier/models/lists/subscription_unsubscribe_user_params"
|
|
|
161
175
|
require_relative "courier/models/list_update_params"
|
|
162
176
|
require_relative "courier/models/logo"
|
|
163
177
|
require_relative "courier/models/message_cancel_params"
|
|
178
|
+
require_relative "courier/models/message_channels"
|
|
164
179
|
require_relative "courier/models/message_content_params"
|
|
165
180
|
require_relative "courier/models/message_content_response"
|
|
166
181
|
require_relative "courier/models/message_context"
|
|
@@ -168,25 +183,44 @@ require_relative "courier/models/message_history_params"
|
|
|
168
183
|
require_relative "courier/models/message_history_response"
|
|
169
184
|
require_relative "courier/models/message_list_params"
|
|
170
185
|
require_relative "courier/models/message_list_response"
|
|
186
|
+
require_relative "courier/models/message_providers"
|
|
187
|
+
require_relative "courier/models/message_providers_type"
|
|
171
188
|
require_relative "courier/models/message_retrieve_params"
|
|
172
189
|
require_relative "courier/models/message_retrieve_response"
|
|
173
190
|
require_relative "courier/models/message_routing"
|
|
174
191
|
require_relative "courier/models/message_routing_channel"
|
|
192
|
+
require_relative "courier/models/metadata"
|
|
175
193
|
require_relative "courier/models/ms_teams"
|
|
176
194
|
require_relative "courier/models/ms_teams_base_properties"
|
|
177
195
|
require_relative "courier/models/ms_teams_recipient"
|
|
178
196
|
require_relative "courier/models/multiple_tokens"
|
|
197
|
+
require_relative "courier/models/notification_archive_params"
|
|
198
|
+
require_relative "courier/models/notification_content_get_response"
|
|
199
|
+
require_relative "courier/models/notification_content_mutation_response"
|
|
200
|
+
require_relative "courier/models/notification_create_params"
|
|
179
201
|
require_relative "courier/models/notification_get_content"
|
|
180
202
|
require_relative "courier/models/notification_list_params"
|
|
181
203
|
require_relative "courier/models/notification_list_response"
|
|
204
|
+
require_relative "courier/models/notification_list_versions_params"
|
|
182
205
|
require_relative "courier/models/notification_preference_details"
|
|
206
|
+
require_relative "courier/models/notification_publish_params"
|
|
207
|
+
require_relative "courier/models/notification_put_content_params"
|
|
208
|
+
require_relative "courier/models/notification_put_element_params"
|
|
209
|
+
require_relative "courier/models/notification_put_locale_params"
|
|
210
|
+
require_relative "courier/models/notification_replace_params"
|
|
183
211
|
require_relative "courier/models/notification_retrieve_content_params"
|
|
212
|
+
require_relative "courier/models/notification_retrieve_content_response"
|
|
213
|
+
require_relative "courier/models/notification_retrieve_params"
|
|
184
214
|
require_relative "courier/models/notifications/check_delete_params"
|
|
185
215
|
require_relative "courier/models/notifications/check_list_params"
|
|
186
216
|
require_relative "courier/models/notifications/check_list_response"
|
|
187
217
|
require_relative "courier/models/notifications/check_update_params"
|
|
188
218
|
require_relative "courier/models/notifications/check_update_response"
|
|
189
|
-
require_relative "courier/models/
|
|
219
|
+
require_relative "courier/models/notification_template_get_response"
|
|
220
|
+
require_relative "courier/models/notification_template_mutation_response"
|
|
221
|
+
require_relative "courier/models/notification_template_state"
|
|
222
|
+
require_relative "courier/models/notification_template_summary"
|
|
223
|
+
require_relative "courier/models/notification_template_version_list_response"
|
|
190
224
|
require_relative "courier/models/pagerduty"
|
|
191
225
|
require_relative "courier/models/pagerduty_recipient"
|
|
192
226
|
require_relative "courier/models/paging"
|
|
@@ -207,10 +241,30 @@ require_relative "courier/models/profiles/list_retrieve_response"
|
|
|
207
241
|
require_relative "courier/models/profiles/list_subscribe_params"
|
|
208
242
|
require_relative "courier/models/profiles/list_subscribe_response"
|
|
209
243
|
require_relative "courier/models/profile_update_params"
|
|
244
|
+
require_relative "courier/models/provider"
|
|
245
|
+
require_relative "courier/models/provider_create_params"
|
|
246
|
+
require_relative "courier/models/provider_delete_params"
|
|
247
|
+
require_relative "courier/models/provider_list_params"
|
|
248
|
+
require_relative "courier/models/provider_list_response"
|
|
249
|
+
require_relative "courier/models/provider_retrieve_params"
|
|
250
|
+
require_relative "courier/models/providers/catalog_list_params"
|
|
251
|
+
require_relative "courier/models/providers/catalog_list_response"
|
|
252
|
+
require_relative "courier/models/providers_catalog_entry"
|
|
253
|
+
require_relative "courier/models/provider_update_params"
|
|
210
254
|
require_relative "courier/models/put_subscriptions_recipient"
|
|
211
255
|
require_relative "courier/models/put_tenant_template_response"
|
|
212
256
|
require_relative "courier/models/recipient_preferences"
|
|
213
257
|
require_relative "courier/models/request_archive_params"
|
|
258
|
+
require_relative "courier/models/routing_strategy_archive_params"
|
|
259
|
+
require_relative "courier/models/routing_strategy_create_params"
|
|
260
|
+
require_relative "courier/models/routing_strategy_get_response"
|
|
261
|
+
require_relative "courier/models/routing_strategy_list_notifications_params"
|
|
262
|
+
require_relative "courier/models/routing_strategy_list_params"
|
|
263
|
+
require_relative "courier/models/routing_strategy_list_response"
|
|
264
|
+
require_relative "courier/models/routing_strategy_mutation_response"
|
|
265
|
+
require_relative "courier/models/routing_strategy_replace_params"
|
|
266
|
+
require_relative "courier/models/routing_strategy_retrieve_params"
|
|
267
|
+
require_relative "courier/models/routing_strategy_summary"
|
|
214
268
|
require_relative "courier/models/rule"
|
|
215
269
|
require_relative "courier/models/send_direct_message"
|
|
216
270
|
require_relative "courier/models/send_message_params"
|
|
@@ -248,6 +302,7 @@ require_relative "courier/models/tenants/templates/version_retrieve_params"
|
|
|
248
302
|
require_relative "courier/models/tenant_template_input"
|
|
249
303
|
require_relative "courier/models/tenant_update_params"
|
|
250
304
|
require_relative "courier/models/text_style"
|
|
305
|
+
require_relative "courier/models/timeouts"
|
|
251
306
|
require_relative "courier/models/token"
|
|
252
307
|
require_relative "courier/models/translation_retrieve_params"
|
|
253
308
|
require_relative "courier/models/translation_retrieve_response"
|
|
@@ -277,6 +332,7 @@ require_relative "courier/models/users/token_retrieve_response"
|
|
|
277
332
|
require_relative "courier/models/users/token_update_params"
|
|
278
333
|
require_relative "courier/models/users/topic_preference"
|
|
279
334
|
require_relative "courier/models/utm"
|
|
335
|
+
require_relative "courier/models/version_node"
|
|
280
336
|
require_relative "courier/models/webhook_authentication"
|
|
281
337
|
require_relative "courier/models/webhook_auth_mode"
|
|
282
338
|
require_relative "courier/models/webhook_method"
|
|
@@ -299,10 +355,12 @@ require_relative "courier/resources/lists/subscriptions"
|
|
|
299
355
|
require_relative "courier/resources/messages"
|
|
300
356
|
require_relative "courier/resources/notifications"
|
|
301
357
|
require_relative "courier/resources/notifications/checks"
|
|
302
|
-
require_relative "courier/resources/notifications/draft"
|
|
303
358
|
require_relative "courier/resources/profiles"
|
|
304
359
|
require_relative "courier/resources/profiles/lists"
|
|
360
|
+
require_relative "courier/resources/providers"
|
|
361
|
+
require_relative "courier/resources/providers/catalog"
|
|
305
362
|
require_relative "courier/resources/requests"
|
|
363
|
+
require_relative "courier/resources/routing_strategies"
|
|
306
364
|
require_relative "courier/resources/send"
|
|
307
365
|
require_relative "courier/resources/tenants"
|
|
308
366
|
require_relative "courier/resources/tenants/preferences"
|
data/rbi/courier/client.rbi
CHANGED
|
@@ -19,6 +19,9 @@ module Courier
|
|
|
19
19
|
sig { returns(Courier::Resources::Audiences) }
|
|
20
20
|
attr_reader :audiences
|
|
21
21
|
|
|
22
|
+
sig { returns(Courier::Resources::Providers) }
|
|
23
|
+
attr_reader :providers
|
|
24
|
+
|
|
22
25
|
sig { returns(Courier::Resources::AuditEvents) }
|
|
23
26
|
attr_reader :audit_events
|
|
24
27
|
|
|
@@ -52,6 +55,9 @@ module Courier
|
|
|
52
55
|
sig { returns(Courier::Resources::Notifications) }
|
|
53
56
|
attr_reader :notifications
|
|
54
57
|
|
|
58
|
+
sig { returns(Courier::Resources::RoutingStrategies) }
|
|
59
|
+
attr_reader :routing_strategies
|
|
60
|
+
|
|
55
61
|
sig { returns(Courier::Resources::Profiles) }
|
|
56
62
|
attr_reader :profiles
|
|
57
63
|
|
|
@@ -148,12 +148,20 @@ module Courier
|
|
|
148
148
|
end
|
|
149
149
|
end
|
|
150
150
|
|
|
151
|
+
# https://www.rfc-editor.org/rfc/rfc3986.html#section-3.3
|
|
152
|
+
RFC_3986_NOT_PCHARS = T.let(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/, Regexp)
|
|
153
|
+
|
|
151
154
|
class << self
|
|
152
155
|
# @api private
|
|
153
156
|
sig { params(uri: URI::Generic).returns(String) }
|
|
154
157
|
def uri_origin(uri)
|
|
155
158
|
end
|
|
156
159
|
|
|
160
|
+
# @api private
|
|
161
|
+
sig { params(path: T.any(String, Integer)).returns(String) }
|
|
162
|
+
def encode_path(path)
|
|
163
|
+
end
|
|
164
|
+
|
|
157
165
|
# @api private
|
|
158
166
|
sig { params(path: T.any(String, T::Array[String])).returns(String) }
|
|
159
167
|
def interpolate_path(path)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module Courier
|
|
4
|
+
module Models
|
|
5
|
+
class AssociatedNotificationListResponse < Courier::Internal::Type::BaseModel
|
|
6
|
+
OrHash =
|
|
7
|
+
T.type_alias do
|
|
8
|
+
T.any(
|
|
9
|
+
Courier::AssociatedNotificationListResponse,
|
|
10
|
+
Courier::Internal::AnyHash
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
sig { returns(Courier::Paging) }
|
|
15
|
+
attr_reader :paging
|
|
16
|
+
|
|
17
|
+
sig { params(paging: Courier::Paging::OrHash).void }
|
|
18
|
+
attr_writer :paging
|
|
19
|
+
|
|
20
|
+
sig { returns(T::Array[Courier::NotificationTemplateSummary]) }
|
|
21
|
+
attr_accessor :results
|
|
22
|
+
|
|
23
|
+
# Paginated list of notification templates associated with a routing strategy.
|
|
24
|
+
sig do
|
|
25
|
+
params(
|
|
26
|
+
paging: Courier::Paging::OrHash,
|
|
27
|
+
results: T::Array[Courier::NotificationTemplateSummary::OrHash]
|
|
28
|
+
).returns(T.attached_class)
|
|
29
|
+
end
|
|
30
|
+
def self.new(paging:, results:)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
sig do
|
|
34
|
+
override.returns(
|
|
35
|
+
{
|
|
36
|
+
paging: Courier::Paging,
|
|
37
|
+
results: T::Array[Courier::NotificationTemplateSummary]
|
|
38
|
+
}
|
|
39
|
+
)
|
|
40
|
+
end
|
|
41
|
+
def to_hash
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|