rcs 2.0.8 → 2.0.11
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/.fern/metadata.json +3 -3
- data/.fernignore +1 -6
- data/.rubocop.yml +0 -3
- data/Rakefile +0 -8
- data/custom.gemspec.rb +6 -3
- data/lib/pinnacle/audiences/client.rb +2 -8
- data/lib/pinnacle/audiences/contacts/client.rb +2 -8
- data/lib/pinnacle/brands/client.rb +6 -13
- data/lib/pinnacle/campaigns/dlc/client.rb +1 -4
- data/lib/pinnacle/campaigns/rcs/client.rb +1 -4
- data/lib/pinnacle/campaigns/toll_free/client.rb +1 -4
- data/lib/pinnacle/client.rb +2 -2
- data/lib/pinnacle/contacts/client.rb +2 -8
- data/lib/pinnacle/conversations/client.rb +2 -8
- data/lib/pinnacle/internal/http/base_request.rb +6 -0
- data/lib/pinnacle/internal/http/raw_client.rb +95 -15
- data/lib/pinnacle/internal/types/utils.rb +2 -2
- data/lib/pinnacle/messages/blast/client.rb +3 -12
- data/lib/pinnacle/messages/client.rb +1 -4
- data/lib/pinnacle/messages/mms/client.rb +1 -4
- data/lib/pinnacle/messages/rcs/client.rb +1 -4
- data/lib/pinnacle/messages/sms/client.rb +1 -4
- data/lib/pinnacle/phone_numbers/campaign/client.rb +2 -8
- data/lib/pinnacle/phone_numbers/client.rb +3 -12
- data/lib/pinnacle/pinnacle_client.rb +2 -2
- data/lib/pinnacle/rcs/client.rb +3 -12
- data/lib/pinnacle/tools/contact_card/client.rb +2 -8
- data/lib/pinnacle/tools/file/client.rb +2 -8
- data/lib/pinnacle/tools/url/client.rb +5 -9
- data/lib/pinnacle/version.rb +1 -1
- data/lib/pinnacle/webhooks/client.rb +1 -4
- metadata +4 -5
- /data/lib/{pinnacle.rb → rcs.rb} +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a5841ff03fdde7a2ead0de8ccdd774f8c507d378cc47777af4133e30579d0aea
|
|
4
|
+
data.tar.gz: 95b18d886ba057009f2123858129beed4bedbc2f09cb1e72752c9bd056cd3749
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8925e03ef43e31adb11bd6161dc75e0e7d7a124b3eded1d2db8db7ebe2f553372f4b29357d591804e17683bcfd0e6ec45e732cb4d6428ccef94f561d1b25bcfb
|
|
7
|
+
data.tar.gz: 3038a74a20d551c85121e2b1a0eb5d6b6169b2d76efaca1aac0553bdfa12eb0d51850cbbaecd7bcd92ca7930dd969ab88e208a93c2b36a73fef45d2bb37f11b3
|
data/.fern/metadata.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"cliVersion": "3.
|
|
2
|
+
"cliVersion": "3.51.3",
|
|
3
3
|
"generatorName": "fernapi/fern-ruby-sdk",
|
|
4
|
-
"generatorVersion": "1.0.0-
|
|
4
|
+
"generatorVersion": "1.0.0-rc84",
|
|
5
5
|
"generatorConfig": {
|
|
6
6
|
"clientModuleName": "PinnacleBaseClient",
|
|
7
7
|
"flattenModuleStructure": true,
|
|
8
8
|
"useProvidedDefaults": true
|
|
9
9
|
},
|
|
10
|
-
"sdkVersion": "2.0.
|
|
10
|
+
"sdkVersion": "2.0.11"
|
|
11
11
|
}
|
data/.fernignore
CHANGED
data/.rubocop.yml
CHANGED
data/Rakefile
CHANGED
|
@@ -3,14 +3,6 @@
|
|
|
3
3
|
require "bundler/gem_tasks"
|
|
4
4
|
require "minitest/test_task"
|
|
5
5
|
|
|
6
|
-
# Skip git push in CI - just build and push to RubyGems
|
|
7
|
-
if ENV["CI"]
|
|
8
|
-
Rake::Task["release:source_control_push"].clear
|
|
9
|
-
task "release:source_control_push" do
|
|
10
|
-
# No-op in CI
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
6
|
Minitest::TestTask.create
|
|
15
7
|
|
|
16
8
|
require "rubocop/rake_task"
|
data/custom.gemspec.rb
CHANGED
|
@@ -7,7 +7,10 @@
|
|
|
7
7
|
# need to add it to the .fernignore file to prevent your changes from being overwritten.
|
|
8
8
|
|
|
9
9
|
def add_custom_gemspec_data(spec)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
spec.
|
|
10
|
+
# Example custom configurations (uncomment and modify as needed)
|
|
11
|
+
|
|
12
|
+
# spec.authors = ["Your name"]
|
|
13
|
+
# spec.email = ["your.email@example.com"]
|
|
14
|
+
# spec.homepage = "https://github.com/your-org/pinnacle-ruby"
|
|
15
|
+
# spec.license = "Your license"
|
|
13
16
|
end
|
|
@@ -68,14 +68,11 @@ module Pinnacle
|
|
|
68
68
|
# @return [Pinnacle::Types::AudienceCountOnly]
|
|
69
69
|
def create(request_options: {}, **params)
|
|
70
70
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
71
|
-
body_prop_names = %i[name description contacts]
|
|
72
|
-
body_bag = params.slice(*body_prop_names)
|
|
73
|
-
|
|
74
71
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
75
72
|
base_url: request_options[:base_url],
|
|
76
73
|
method: "POST",
|
|
77
74
|
path: "audiences",
|
|
78
|
-
body: Pinnacle::Audiences::Types::CreateAudienceParams.new(
|
|
75
|
+
body: Pinnacle::Audiences::Types::CreateAudienceParams.new(params).to_h,
|
|
79
76
|
request_options: request_options
|
|
80
77
|
)
|
|
81
78
|
begin
|
|
@@ -150,14 +147,11 @@ module Pinnacle
|
|
|
150
147
|
# @return [Pinnacle::Types::AudienceCountOnly]
|
|
151
148
|
def update(request_options: {}, **params)
|
|
152
149
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
153
|
-
body_prop_names = %i[id name description]
|
|
154
|
-
body_bag = params.slice(*body_prop_names)
|
|
155
|
-
|
|
156
150
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
157
151
|
base_url: request_options[:base_url],
|
|
158
152
|
method: "PATCH",
|
|
159
153
|
path: "audiences",
|
|
160
|
-
body: Pinnacle::Audiences::Types::UpdateAudienceParams.new(
|
|
154
|
+
body: Pinnacle::Audiences::Types::UpdateAudienceParams.new(params).to_h,
|
|
161
155
|
request_options: request_options
|
|
162
156
|
)
|
|
163
157
|
begin
|
|
@@ -27,14 +27,11 @@ module Pinnacle
|
|
|
27
27
|
# @return [Pinnacle::Types::AudienceCountOnly]
|
|
28
28
|
def remove(request_options: {}, **params)
|
|
29
29
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
30
|
-
body_prop_names = %i[id contacts]
|
|
31
|
-
body_bag = params.slice(*body_prop_names)
|
|
32
|
-
|
|
33
30
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
34
31
|
base_url: request_options[:base_url],
|
|
35
32
|
method: "DELETE",
|
|
36
33
|
path: "audiences/contacts",
|
|
37
|
-
body: Pinnacle::Audiences::Contacts::Types::RemoveContactsParams.new(
|
|
34
|
+
body: Pinnacle::Audiences::Contacts::Types::RemoveContactsParams.new(params).to_h,
|
|
38
35
|
request_options: request_options
|
|
39
36
|
)
|
|
40
37
|
begin
|
|
@@ -68,14 +65,11 @@ module Pinnacle
|
|
|
68
65
|
# @return [Pinnacle::Types::AudienceCountOnly]
|
|
69
66
|
def add(request_options: {}, **params)
|
|
70
67
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
71
|
-
body_prop_names = %i[id contacts]
|
|
72
|
-
body_bag = params.slice(*body_prop_names)
|
|
73
|
-
|
|
74
68
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
75
69
|
base_url: request_options[:base_url],
|
|
76
70
|
method: "PATCH",
|
|
77
71
|
path: "audiences/contacts",
|
|
78
|
-
body: Pinnacle::Audiences::Contacts::Types::AddContactsParams.new(
|
|
72
|
+
body: Pinnacle::Audiences::Contacts::Types::AddContactsParams.new(params).to_h,
|
|
79
73
|
request_options: request_options
|
|
80
74
|
)
|
|
81
75
|
begin
|
|
@@ -23,14 +23,11 @@ module Pinnacle
|
|
|
23
23
|
# @return [Pinnacle::Types::OptionalBrandInfo]
|
|
24
24
|
def autofill(request_options: {}, **params)
|
|
25
25
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
26
|
-
body_prop_names = %i[additional_info name options website]
|
|
27
|
-
body_bag = params.slice(*body_prop_names)
|
|
28
|
-
|
|
29
26
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
30
27
|
base_url: request_options[:base_url],
|
|
31
28
|
method: "POST",
|
|
32
29
|
path: "brands/autofill",
|
|
33
|
-
body: Pinnacle::Brands::Types::AutofillBrandParams.new(
|
|
30
|
+
body: Pinnacle::Brands::Types::AutofillBrandParams.new(params).to_h,
|
|
34
31
|
request_options: request_options
|
|
35
32
|
)
|
|
36
33
|
begin
|
|
@@ -67,14 +64,11 @@ module Pinnacle
|
|
|
67
64
|
# @return [Pinnacle::Types::ExtendedBrand]
|
|
68
65
|
def upsert(request_options: {}, **params)
|
|
69
66
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
70
|
-
body_prop_names = %i[address contact dba description ein email id name sector type entity_type website]
|
|
71
|
-
body_bag = params.slice(*body_prop_names)
|
|
72
|
-
|
|
73
67
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
74
68
|
base_url: request_options[:base_url],
|
|
75
69
|
method: "POST",
|
|
76
70
|
path: "brands",
|
|
77
|
-
body: Pinnacle::Brands::Types::UpsertBrandParams.new(
|
|
71
|
+
body: Pinnacle::Brands::Types::UpsertBrandParams.new(params).to_h,
|
|
78
72
|
request_options: request_options
|
|
79
73
|
)
|
|
80
74
|
begin
|
|
@@ -215,16 +209,15 @@ module Pinnacle
|
|
|
215
209
|
# @return [Pinnacle::Types::VettingResults]
|
|
216
210
|
def vet(request_options: {}, **params)
|
|
217
211
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
body_bag = body_params.slice(*body_prop_names)
|
|
212
|
+
request_data = Pinnacle::Brands::Types::VetBrandParams.new(params).to_h
|
|
213
|
+
non_body_param_names = ["brandId"]
|
|
214
|
+
body = request_data.except(*non_body_param_names)
|
|
222
215
|
|
|
223
216
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
224
217
|
base_url: request_options[:base_url],
|
|
225
218
|
method: "POST",
|
|
226
219
|
path: "brands/#{params[:brand_id]}/vet",
|
|
227
|
-
body:
|
|
220
|
+
body: body,
|
|
228
221
|
request_options: request_options
|
|
229
222
|
)
|
|
230
223
|
begin
|
|
@@ -138,14 +138,11 @@ module Pinnacle
|
|
|
138
138
|
# @return [Pinnacle::Types::DlcCampaignWithExtendedBrandAndStatus]
|
|
139
139
|
def upsert(request_options: {}, **params)
|
|
140
140
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
141
|
-
body_prop_names = %i[auto_renew brand campaign_id description keywords links message_flow name options sample_messages use_case]
|
|
142
|
-
body_bag = params.slice(*body_prop_names)
|
|
143
|
-
|
|
144
141
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
145
142
|
base_url: request_options[:base_url],
|
|
146
143
|
method: "POST",
|
|
147
144
|
path: "campaigns/dlc",
|
|
148
|
-
body: Pinnacle::Campaigns::Dlc::Types::UpsertDlcCampaignParams.new(
|
|
145
|
+
body: Pinnacle::Campaigns::Dlc::Types::UpsertDlcCampaignParams.new(params).to_h,
|
|
149
146
|
request_options: request_options
|
|
150
147
|
)
|
|
151
148
|
begin
|
|
@@ -136,14 +136,11 @@ module Pinnacle
|
|
|
136
136
|
# @return [Pinnacle::Types::ExtendedRcsCampaign]
|
|
137
137
|
def upsert(request_options: {}, **params)
|
|
138
138
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
139
|
-
body_prop_names = %i[agent brand campaign_id expected_agent_responses links use_case opt_in_terms_and_conditions messaging_type carrier_description keywords traffic agent_triggers interaction_description is_conversational cta_language demo_trigger]
|
|
140
|
-
body_bag = params.slice(*body_prop_names)
|
|
141
|
-
|
|
142
139
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
143
140
|
base_url: request_options[:base_url],
|
|
144
141
|
method: "POST",
|
|
145
142
|
path: "campaigns/rcs",
|
|
146
|
-
body: Pinnacle::Campaigns::Rcs::Types::UpsertRcsCampaignParams.new(
|
|
143
|
+
body: Pinnacle::Campaigns::Rcs::Types::UpsertRcsCampaignParams.new(params).to_h,
|
|
147
144
|
request_options: request_options
|
|
148
145
|
)
|
|
149
146
|
begin
|
|
@@ -138,14 +138,11 @@ module Pinnacle
|
|
|
138
138
|
# @return [Pinnacle::Types::TollFreeCampaignWithExtendedBrandAndStatus]
|
|
139
139
|
def upsert(request_options: {}, **params)
|
|
140
140
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
141
|
-
body_prop_names = %i[brand campaign_id keywords links monthly_volume name opt_in options production_message_content use_case]
|
|
142
|
-
body_bag = params.slice(*body_prop_names)
|
|
143
|
-
|
|
144
141
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
145
142
|
base_url: request_options[:base_url],
|
|
146
143
|
method: "POST",
|
|
147
144
|
path: "campaigns/toll-free",
|
|
148
|
-
body: Pinnacle::Campaigns::TollFree::Types::UpsertTollFreeCampaignParams.new(
|
|
145
|
+
body: Pinnacle::Campaigns::TollFree::Types::UpsertTollFreeCampaignParams.new(params).to_h,
|
|
149
146
|
request_options: request_options
|
|
150
147
|
)
|
|
151
148
|
begin
|
data/lib/pinnacle/client.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Pinnacle
|
|
4
|
-
class
|
|
4
|
+
class PinnacleBaseClient
|
|
5
5
|
# @param base_url [String, nil]
|
|
6
6
|
# @param api_key [String]
|
|
7
7
|
#
|
|
@@ -10,7 +10,7 @@ module Pinnacle
|
|
|
10
10
|
@raw_client = Pinnacle::Internal::Http::RawClient.new(
|
|
11
11
|
base_url: base_url || Pinnacle::Environment::DEFAULT,
|
|
12
12
|
headers: {
|
|
13
|
-
"User-Agent" => "rcs/2.0.
|
|
13
|
+
"User-Agent" => "rcs/2.0.11",
|
|
14
14
|
"X-Fern-Language" => "Ruby",
|
|
15
15
|
"PINNACLE-API-KEY" => api_key.to_s
|
|
16
16
|
}
|
|
@@ -65,14 +65,11 @@ module Pinnacle
|
|
|
65
65
|
# @return [Pinnacle::Types::ContactId]
|
|
66
66
|
def create(request_options: {}, **params)
|
|
67
67
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
68
|
-
body_prop_names = %i[phone_number description email name tags]
|
|
69
|
-
body_bag = params.slice(*body_prop_names)
|
|
70
|
-
|
|
71
68
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
72
69
|
base_url: request_options[:base_url],
|
|
73
70
|
method: "POST",
|
|
74
71
|
path: "contacts",
|
|
75
|
-
body: Pinnacle::Contacts::Types::CreateContactParams.new(
|
|
72
|
+
body: Pinnacle::Contacts::Types::CreateContactParams.new(params).to_h,
|
|
76
73
|
request_options: request_options
|
|
77
74
|
)
|
|
78
75
|
begin
|
|
@@ -102,14 +99,11 @@ module Pinnacle
|
|
|
102
99
|
# @return [Pinnacle::Types::UpdatedContactId]
|
|
103
100
|
def update(request_options: {}, **params)
|
|
104
101
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
105
|
-
body_prop_names = %i[id description email name tags]
|
|
106
|
-
body_bag = params.slice(*body_prop_names)
|
|
107
|
-
|
|
108
102
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
109
103
|
base_url: request_options[:base_url],
|
|
110
104
|
method: "PUT",
|
|
111
105
|
path: "contacts",
|
|
112
|
-
body: Pinnacle::Contacts::Types::UpdateContactParams.new(
|
|
106
|
+
body: Pinnacle::Contacts::Types::UpdateContactParams.new(params).to_h,
|
|
113
107
|
request_options: request_options
|
|
114
108
|
)
|
|
115
109
|
begin
|
|
@@ -55,14 +55,11 @@ module Pinnacle
|
|
|
55
55
|
# @return [Pinnacle::Types::ConversationList]
|
|
56
56
|
def list(request_options: {}, **params)
|
|
57
57
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
58
|
-
body_prop_names = %i[brand_id campaign_id campaign_type page_index page_size receiver sender]
|
|
59
|
-
body_bag = params.slice(*body_prop_names)
|
|
60
|
-
|
|
61
58
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
62
59
|
base_url: request_options[:base_url],
|
|
63
60
|
method: "POST",
|
|
64
61
|
path: "conversations/list",
|
|
65
|
-
body: Pinnacle::Conversations::Types::ListConversationsParams.new(
|
|
62
|
+
body: Pinnacle::Conversations::Types::ListConversationsParams.new(params).to_h,
|
|
66
63
|
request_options: request_options
|
|
67
64
|
)
|
|
68
65
|
begin
|
|
@@ -92,14 +89,11 @@ module Pinnacle
|
|
|
92
89
|
# @return [Pinnacle::Types::SuccessfulConversationUpdate]
|
|
93
90
|
def update(request_options: {}, **params)
|
|
94
91
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
95
|
-
body_prop_names = %i[id notes]
|
|
96
|
-
body_bag = params.slice(*body_prop_names)
|
|
97
|
-
|
|
98
92
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
99
93
|
base_url: request_options[:base_url],
|
|
100
94
|
method: "POST",
|
|
101
95
|
path: "conversations/update",
|
|
102
|
-
body: Pinnacle::Conversations::Types::UpdateConversationParams.new(
|
|
96
|
+
body: Pinnacle::Conversations::Types::UpdateConversationParams.new(params).to_h,
|
|
103
97
|
request_options: request_options
|
|
104
98
|
)
|
|
105
99
|
begin
|
|
@@ -22,6 +22,12 @@ module Pinnacle
|
|
|
22
22
|
@request_options = request_options
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
+
# @return [Hash] The query parameters merged with additional query parameters from request options.
|
|
26
|
+
def encode_query
|
|
27
|
+
additional_query = @request_options&.dig(:additional_query_parameters) || @request_options&.dig("additional_query_parameters") || {}
|
|
28
|
+
@query.merge(additional_query)
|
|
29
|
+
end
|
|
30
|
+
|
|
25
31
|
# Child classes should implement:
|
|
26
32
|
# - encode_headers: Returns the encoded HTTP request headers.
|
|
27
33
|
# - encode_body: Returns the encoded HTTP request body.
|
|
@@ -5,6 +5,15 @@ module Pinnacle
|
|
|
5
5
|
module Http
|
|
6
6
|
# @api private
|
|
7
7
|
class RawClient
|
|
8
|
+
# Default HTTP status codes that trigger a retry
|
|
9
|
+
RETRYABLE_STATUSES = [408, 429, 500, 502, 503, 504, 521, 522, 524].freeze
|
|
10
|
+
# Initial delay between retries in seconds
|
|
11
|
+
INITIAL_RETRY_DELAY = 0.5
|
|
12
|
+
# Maximum delay between retries in seconds
|
|
13
|
+
MAX_RETRY_DELAY = 60.0
|
|
14
|
+
# Jitter factor for randomizing retry delays (20%)
|
|
15
|
+
JITTER_FACTOR = 0.2
|
|
16
|
+
|
|
8
17
|
# @return [String] The base URL for requests
|
|
9
18
|
attr_reader :base_url
|
|
10
19
|
|
|
@@ -27,37 +36,106 @@ module Pinnacle
|
|
|
27
36
|
# @return [HTTP::Response] The HTTP response.
|
|
28
37
|
def send(request)
|
|
29
38
|
url = build_url(request)
|
|
39
|
+
attempt = 0
|
|
40
|
+
response = nil
|
|
41
|
+
|
|
42
|
+
loop do
|
|
43
|
+
http_request = build_http_request(
|
|
44
|
+
url:,
|
|
45
|
+
method: request.method,
|
|
46
|
+
headers: request.encode_headers,
|
|
47
|
+
body: request.encode_body
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
conn = connect(url)
|
|
51
|
+
conn.open_timeout = @timeout
|
|
52
|
+
conn.read_timeout = @timeout
|
|
53
|
+
conn.write_timeout = @timeout
|
|
54
|
+
conn.continue_timeout = @timeout
|
|
55
|
+
|
|
56
|
+
response = conn.request(http_request)
|
|
57
|
+
|
|
58
|
+
break unless should_retry?(response, attempt)
|
|
59
|
+
|
|
60
|
+
delay = retry_delay(response, attempt)
|
|
61
|
+
sleep(delay)
|
|
62
|
+
attempt += 1
|
|
63
|
+
end
|
|
30
64
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
65
|
+
response
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Determines if a request should be retried based on the response status code.
|
|
69
|
+
# @param response [Net::HTTPResponse] The HTTP response.
|
|
70
|
+
# @param attempt [Integer] The current retry attempt (0-indexed).
|
|
71
|
+
# @return [Boolean] Whether the request should be retried.
|
|
72
|
+
def should_retry?(response, attempt)
|
|
73
|
+
return false if attempt >= @max_retries
|
|
74
|
+
|
|
75
|
+
status = response.code.to_i
|
|
76
|
+
RETRYABLE_STATUSES.include?(status)
|
|
77
|
+
end
|
|
37
78
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
79
|
+
# Calculates the delay before the next retry attempt using exponential backoff with jitter.
|
|
80
|
+
# Respects Retry-After header if present.
|
|
81
|
+
# @param response [Net::HTTPResponse] The HTTP response.
|
|
82
|
+
# @param attempt [Integer] The current retry attempt (0-indexed).
|
|
83
|
+
# @return [Float] The delay in seconds before the next retry.
|
|
84
|
+
def retry_delay(response, attempt)
|
|
85
|
+
# Check for Retry-After header (can be seconds or HTTP date)
|
|
86
|
+
retry_after = response["Retry-After"]
|
|
87
|
+
if retry_after
|
|
88
|
+
delay = parse_retry_after(retry_after)
|
|
89
|
+
return [delay, MAX_RETRY_DELAY].min if delay&.positive?
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Exponential backoff with jitter: base_delay * 2^attempt
|
|
93
|
+
base_delay = INITIAL_RETRY_DELAY * (2**attempt)
|
|
94
|
+
add_jitter([base_delay, MAX_RETRY_DELAY].min)
|
|
95
|
+
end
|
|
43
96
|
|
|
44
|
-
|
|
97
|
+
# Parses the Retry-After header value.
|
|
98
|
+
# @param value [String] The Retry-After header value (seconds or HTTP date).
|
|
99
|
+
# @return [Float, nil] The delay in seconds, or nil if parsing fails.
|
|
100
|
+
def parse_retry_after(value)
|
|
101
|
+
# Try parsing as integer (seconds)
|
|
102
|
+
seconds = Integer(value, exception: false)
|
|
103
|
+
return seconds.to_f if seconds
|
|
104
|
+
|
|
105
|
+
# Try parsing as HTTP date
|
|
106
|
+
begin
|
|
107
|
+
retry_time = Time.httpdate(value)
|
|
108
|
+
delay = retry_time - Time.now
|
|
109
|
+
delay.positive? ? delay : nil
|
|
110
|
+
rescue ArgumentError
|
|
111
|
+
nil
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Adds random jitter to a delay value.
|
|
116
|
+
# @param delay [Float] The base delay in seconds.
|
|
117
|
+
# @return [Float] The delay with jitter applied.
|
|
118
|
+
def add_jitter(delay)
|
|
119
|
+
jitter = delay * JITTER_FACTOR * (rand - 0.5) * 2
|
|
120
|
+
[delay + jitter, 0].max
|
|
45
121
|
end
|
|
46
122
|
|
|
47
123
|
# @param request [Pinnacle::Internal::Http::BaseRequest] The HTTP request.
|
|
48
124
|
# @return [URI::Generic] The URL.
|
|
49
125
|
def build_url(request)
|
|
126
|
+
encoded_query = request.encode_query
|
|
127
|
+
|
|
50
128
|
# If the path is already an absolute URL, use it directly
|
|
51
129
|
if request.path.start_with?("http://", "https://")
|
|
52
130
|
url = request.path
|
|
53
|
-
url = "#{url}?#{encode_query(
|
|
131
|
+
url = "#{url}?#{encode_query(encoded_query)}" if encoded_query&.any?
|
|
54
132
|
return URI.parse(url)
|
|
55
133
|
end
|
|
56
134
|
|
|
57
135
|
path = request.path.start_with?("/") ? request.path[1..] : request.path
|
|
58
136
|
base = request.base_url || @base_url
|
|
59
137
|
url = "#{base.chomp("/")}/#{path}"
|
|
60
|
-
url = "#{url}?#{encode_query(
|
|
138
|
+
url = "#{url}?#{encode_query(encoded_query)}" if encoded_query&.any?
|
|
61
139
|
URI.parse(url)
|
|
62
140
|
end
|
|
63
141
|
|
|
@@ -102,7 +180,9 @@ module Pinnacle
|
|
|
102
180
|
|
|
103
181
|
http = Net::HTTP.new(url.host, port)
|
|
104
182
|
http.use_ssl = is_https
|
|
105
|
-
|
|
183
|
+
# NOTE: We handle retries at the application level with HTTP status code awareness,
|
|
184
|
+
# so we set max_retries to 0 to disable Net::HTTP's built-in network-level retries.
|
|
185
|
+
http.max_retries = 0
|
|
106
186
|
http
|
|
107
187
|
end
|
|
108
188
|
|
|
@@ -76,8 +76,8 @@ module Pinnacle
|
|
|
76
76
|
in Module
|
|
77
77
|
case type
|
|
78
78
|
in ->(t) {
|
|
79
|
-
t.singleton_class.
|
|
80
|
-
t.singleton_class.
|
|
79
|
+
t.singleton_class.include?(Enum) ||
|
|
80
|
+
t.singleton_class.include?(Union)
|
|
81
81
|
}
|
|
82
82
|
return type.coerce(value, strict: strict)
|
|
83
83
|
else
|
|
@@ -29,14 +29,11 @@ module Pinnacle
|
|
|
29
29
|
# @return [Pinnacle::Messages::Blast::Types::BlastSmsResponse]
|
|
30
30
|
def sms(request_options: {}, **params)
|
|
31
31
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
32
|
-
body_prop_names = %i[audience_id senders message options]
|
|
33
|
-
body_bag = params.slice(*body_prop_names)
|
|
34
|
-
|
|
35
32
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
36
33
|
base_url: request_options[:base_url],
|
|
37
34
|
method: "POST",
|
|
38
35
|
path: "messages/blast/sms",
|
|
39
|
-
body: Pinnacle::Messages::Blast::Types::BlastSms.new(
|
|
36
|
+
body: Pinnacle::Messages::Blast::Types::BlastSms.new(params).to_h,
|
|
40
37
|
request_options: request_options
|
|
41
38
|
)
|
|
42
39
|
begin
|
|
@@ -71,14 +68,11 @@ module Pinnacle
|
|
|
71
68
|
# @return [Pinnacle::Messages::Blast::Types::BlastMmsResponse]
|
|
72
69
|
def mms(request_options: {}, **params)
|
|
73
70
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
74
|
-
body_prop_names = %i[audience_id senders message options]
|
|
75
|
-
body_bag = params.slice(*body_prop_names)
|
|
76
|
-
|
|
77
71
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
78
72
|
base_url: request_options[:base_url],
|
|
79
73
|
method: "POST",
|
|
80
74
|
path: "messages/blast/mms",
|
|
81
|
-
body: Pinnacle::Messages::Blast::Types::BlastMms.new(
|
|
75
|
+
body: Pinnacle::Messages::Blast::Types::BlastMms.new(params).to_h,
|
|
82
76
|
request_options: request_options
|
|
83
77
|
)
|
|
84
78
|
begin
|
|
@@ -114,14 +108,11 @@ module Pinnacle
|
|
|
114
108
|
# @return [Pinnacle::Messages::Blast::Types::BlastRcsResponse]
|
|
115
109
|
def rcs(request_options: {}, **params)
|
|
116
110
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
117
|
-
body_prop_names = %i[audience_id senders message options]
|
|
118
|
-
body_bag = params.slice(*body_prop_names)
|
|
119
|
-
|
|
120
111
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
121
112
|
base_url: request_options[:base_url],
|
|
122
113
|
method: "POST",
|
|
123
114
|
path: "messages/blast/rcs",
|
|
124
|
-
body: Pinnacle::Messages::Blast::Types::BlastRcs.new(
|
|
115
|
+
body: Pinnacle::Messages::Blast::Types::BlastRcs.new(params).to_h,
|
|
125
116
|
request_options: request_options
|
|
126
117
|
)
|
|
127
118
|
begin
|
|
@@ -57,14 +57,11 @@ module Pinnacle
|
|
|
57
57
|
# @return [Pinnacle::Types::ReactionResult]
|
|
58
58
|
def react(request_options: {}, **params)
|
|
59
59
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
60
|
-
body_prop_names = %i[message_id options reaction]
|
|
61
|
-
body_bag = params.slice(*body_prop_names)
|
|
62
|
-
|
|
63
60
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
64
61
|
base_url: request_options[:base_url],
|
|
65
62
|
method: "POST",
|
|
66
63
|
path: "messages/react",
|
|
67
|
-
body: Pinnacle::Messages::Types::ReactMessageParams.new(
|
|
64
|
+
body: Pinnacle::Messages::Types::ReactMessageParams.new(params).to_h,
|
|
68
65
|
request_options: request_options
|
|
69
66
|
)
|
|
70
67
|
begin
|
|
@@ -24,14 +24,11 @@ module Pinnacle
|
|
|
24
24
|
# @return [Pinnacle::Messages::Mms::Types::MmsSendResponse]
|
|
25
25
|
def send_(request_options: {}, **params)
|
|
26
26
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
27
|
-
body_prop_names = %i[from media_urls options text to]
|
|
28
|
-
body_bag = params.slice(*body_prop_names)
|
|
29
|
-
|
|
30
27
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
31
28
|
base_url: request_options[:base_url],
|
|
32
29
|
method: "POST",
|
|
33
30
|
path: "messages/send/mms",
|
|
34
|
-
body: Pinnacle::Messages::Mms::Types::Mms.new(
|
|
31
|
+
body: Pinnacle::Messages::Mms::Types::Mms.new(params).to_h,
|
|
35
32
|
request_options: request_options
|
|
36
33
|
)
|
|
37
34
|
begin
|
|
@@ -77,14 +77,11 @@ module Pinnacle
|
|
|
77
77
|
# @return [Pinnacle::Types::SendTypingIndicatorResponse]
|
|
78
78
|
def send_typing(request_options: {}, **params)
|
|
79
79
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
80
|
-
body_prop_names = %i[agent_id to options]
|
|
81
|
-
body_bag = params.slice(*body_prop_names)
|
|
82
|
-
|
|
83
80
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
84
81
|
base_url: request_options[:base_url],
|
|
85
82
|
method: "POST",
|
|
86
83
|
path: "messages/send/typing",
|
|
87
|
-
body: Pinnacle::Messages::Rcs::Types::SendTypingIndicatorSchema.new(
|
|
84
|
+
body: Pinnacle::Messages::Rcs::Types::SendTypingIndicatorSchema.new(params).to_h,
|
|
88
85
|
request_options: request_options
|
|
89
86
|
)
|
|
90
87
|
begin
|
|
@@ -24,14 +24,11 @@ module Pinnacle
|
|
|
24
24
|
# @return [Pinnacle::Messages::Sms::Types::SmsSendResponse]
|
|
25
25
|
def send_(request_options: {}, **params)
|
|
26
26
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
27
|
-
body_prop_names = %i[from options text to]
|
|
28
|
-
body_bag = params.slice(*body_prop_names)
|
|
29
|
-
|
|
30
27
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
31
28
|
base_url: request_options[:base_url],
|
|
32
29
|
method: "POST",
|
|
33
30
|
path: "messages/send/sms",
|
|
34
|
-
body: Pinnacle::Messages::Sms::Types::Sms.new(
|
|
31
|
+
body: Pinnacle::Messages::Sms::Types::Sms.new(params).to_h,
|
|
35
32
|
request_options: request_options
|
|
36
33
|
)
|
|
37
34
|
begin
|
|
@@ -24,14 +24,11 @@ module Pinnacle
|
|
|
24
24
|
# @return [Pinnacle::Types::AttachedPhoneNumberResult]
|
|
25
25
|
def attach(request_options: {}, **params)
|
|
26
26
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
27
|
-
body_prop_names = %i[phones campaign_type campaign_id]
|
|
28
|
-
body_bag = params.slice(*body_prop_names)
|
|
29
|
-
|
|
30
27
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
31
28
|
base_url: request_options[:base_url],
|
|
32
29
|
method: "POST",
|
|
33
30
|
path: "phone-numbers/attach-campaign",
|
|
34
|
-
body: Pinnacle::PhoneNumbers::Campaign::Types::AttachCampaignParams.new(
|
|
31
|
+
body: Pinnacle::PhoneNumbers::Campaign::Types::AttachCampaignParams.new(params).to_h,
|
|
35
32
|
request_options: request_options
|
|
36
33
|
)
|
|
37
34
|
begin
|
|
@@ -61,14 +58,11 @@ module Pinnacle
|
|
|
61
58
|
# @return [Pinnacle::Types::DetachedPhoneNumberResult]
|
|
62
59
|
def detach(request_options: {}, **params)
|
|
63
60
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
64
|
-
body_prop_names = %i[phones]
|
|
65
|
-
body_bag = params.slice(*body_prop_names)
|
|
66
|
-
|
|
67
61
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
68
62
|
base_url: request_options[:base_url],
|
|
69
63
|
method: "DELETE",
|
|
70
64
|
path: "phone-numbers/detach-campaign",
|
|
71
|
-
body: Pinnacle::PhoneNumbers::Campaign::Types::DetachCampaignParams.new(
|
|
65
|
+
body: Pinnacle::PhoneNumbers::Campaign::Types::DetachCampaignParams.new(params).to_h,
|
|
72
66
|
request_options: request_options
|
|
73
67
|
)
|
|
74
68
|
begin
|
|
@@ -23,14 +23,11 @@ module Pinnacle
|
|
|
23
23
|
# @return [Array[Pinnacle::Types::PhoneNumberDetails]]
|
|
24
24
|
def search(request_options: {}, **params)
|
|
25
25
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
26
|
-
body_prop_names = %i[features location number options type]
|
|
27
|
-
body_bag = params.slice(*body_prop_names)
|
|
28
|
-
|
|
29
26
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
30
27
|
base_url: request_options[:base_url],
|
|
31
28
|
method: "POST",
|
|
32
29
|
path: "phone-numbers/search",
|
|
33
|
-
body: Pinnacle::PhoneNumbers::Types::SearchPhoneNumberParams.new(
|
|
30
|
+
body: Pinnacle::PhoneNumbers::Types::SearchPhoneNumberParams.new(params).to_h,
|
|
34
31
|
request_options: request_options
|
|
35
32
|
)
|
|
36
33
|
begin
|
|
@@ -60,14 +57,11 @@ module Pinnacle
|
|
|
60
57
|
# @return [Array[Pinnacle::Types::PurchasedNumber]]
|
|
61
58
|
def buy(request_options: {}, **params)
|
|
62
59
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
63
|
-
body_prop_names = %i[numbers]
|
|
64
|
-
body_bag = params.slice(*body_prop_names)
|
|
65
|
-
|
|
66
60
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
67
61
|
base_url: request_options[:base_url],
|
|
68
62
|
method: "POST",
|
|
69
63
|
path: "phone-numbers/buy",
|
|
70
|
-
body: Pinnacle::PhoneNumbers::Types::BuyPhoneNumberParams.new(
|
|
64
|
+
body: Pinnacle::PhoneNumbers::Types::BuyPhoneNumberParams.new(params).to_h,
|
|
71
65
|
request_options: request_options
|
|
72
66
|
)
|
|
73
67
|
begin
|
|
@@ -95,14 +89,11 @@ module Pinnacle
|
|
|
95
89
|
# @return [Pinnacle::PhoneNumbers::Types::PhoneNumbersGetResponse]
|
|
96
90
|
def get(request_options: {}, **params)
|
|
97
91
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
98
|
-
body_prop_names = %i[phone level options]
|
|
99
|
-
body_bag = params.slice(*body_prop_names)
|
|
100
|
-
|
|
101
92
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
102
93
|
base_url: request_options[:base_url],
|
|
103
94
|
method: "POST",
|
|
104
95
|
path: "phone-numbers/details",
|
|
105
|
-
body: Pinnacle::PhoneNumbers::Types::RetrievePhoneNumberDetailsParams.new(
|
|
96
|
+
body: Pinnacle::PhoneNumbers::Types::RetrievePhoneNumberDetailsParams.new(params).to_h,
|
|
106
97
|
request_options: request_options
|
|
107
98
|
)
|
|
108
99
|
begin
|
|
@@ -5,8 +5,8 @@ require_relative "wrapper/tools/file_uploader"
|
|
|
5
5
|
require_relative "wrapper/tools/client"
|
|
6
6
|
|
|
7
7
|
module Pinnacle
|
|
8
|
-
#
|
|
9
|
-
class Client
|
|
8
|
+
# Client class that extends PinnacleBaseClient with custom methods for webhook processing and file uploads.
|
|
9
|
+
class Client < PinnacleBaseClient
|
|
10
10
|
# Returns an enhanced messages client with webhook processing support.
|
|
11
11
|
#
|
|
12
12
|
# @return [Pinnacle::Wrapper::Messages::Client]
|
data/lib/pinnacle/rcs/client.rb
CHANGED
|
@@ -26,14 +26,11 @@ module Pinnacle
|
|
|
26
26
|
# @return [Hash[String, Pinnacle::Types::RcsCapability, nil]]
|
|
27
27
|
def get_capabilities(request_options: {}, **params)
|
|
28
28
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
29
|
-
body_prop_names = %i[phone_numbers]
|
|
30
|
-
body_bag = params.slice(*body_prop_names)
|
|
31
|
-
|
|
32
29
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
33
30
|
base_url: request_options[:base_url],
|
|
34
31
|
method: "POST",
|
|
35
32
|
path: "rcs/capabilities",
|
|
36
|
-
body: Pinnacle::Rcs::Types::RcsCapabilitiesQuery.new(
|
|
33
|
+
body: Pinnacle::Rcs::Types::RcsCapabilitiesQuery.new(params).to_h,
|
|
37
34
|
request_options: request_options
|
|
38
35
|
)
|
|
39
36
|
begin
|
|
@@ -91,14 +88,11 @@ module Pinnacle
|
|
|
91
88
|
# @return [Pinnacle::Types::RcsWhitelistResponse]
|
|
92
89
|
def whitelist(request_options: {}, **params)
|
|
93
90
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
94
|
-
body_prop_names = %i[agent_id phone_number]
|
|
95
|
-
body_bag = params.slice(*body_prop_names)
|
|
96
|
-
|
|
97
91
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
98
92
|
base_url: request_options[:base_url],
|
|
99
93
|
method: "POST",
|
|
100
94
|
path: "rcs/whitelist",
|
|
101
|
-
body: Pinnacle::Rcs::Types::RcsWhitelistRequest.new(
|
|
95
|
+
body: Pinnacle::Rcs::Types::RcsWhitelistRequest.new(params).to_h,
|
|
102
96
|
request_options: request_options
|
|
103
97
|
)
|
|
104
98
|
begin
|
|
@@ -131,14 +125,11 @@ module Pinnacle
|
|
|
131
125
|
# @return [Pinnacle::Types::RcsLinkResult]
|
|
132
126
|
def get_link(request_options: {}, **params)
|
|
133
127
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
134
|
-
body_prop_names = %i[agent_id test_mode phone_number body]
|
|
135
|
-
body_bag = params.slice(*body_prop_names)
|
|
136
|
-
|
|
137
128
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
138
129
|
base_url: request_options[:base_url],
|
|
139
130
|
method: "POST",
|
|
140
131
|
path: "rcs/link",
|
|
141
|
-
body: Pinnacle::Rcs::Types::RcsLinkRequest.new(
|
|
132
|
+
body: Pinnacle::Rcs::Types::RcsLinkRequest.new(params).to_h,
|
|
142
133
|
request_options: request_options
|
|
143
134
|
)
|
|
144
135
|
begin
|
|
@@ -25,14 +25,11 @@ module Pinnacle
|
|
|
25
25
|
# @return [Pinnacle::Types::VCardData]
|
|
26
26
|
def get(request_options: {}, **params)
|
|
27
27
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
28
|
-
body_prop_names = %i[id options]
|
|
29
|
-
body_bag = params.slice(*body_prop_names)
|
|
30
|
-
|
|
31
28
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
32
29
|
base_url: request_options[:base_url],
|
|
33
30
|
method: "POST",
|
|
34
31
|
path: "tools/contact-card",
|
|
35
|
-
body: Pinnacle::Tools::ContactCard::Types::GetVcardParams.new(
|
|
32
|
+
body: Pinnacle::Tools::ContactCard::Types::GetVcardParams.new(params).to_h,
|
|
36
33
|
request_options: request_options
|
|
37
34
|
)
|
|
38
35
|
begin
|
|
@@ -63,14 +60,11 @@ module Pinnacle
|
|
|
63
60
|
# @return [Pinnacle::Types::VcardResource]
|
|
64
61
|
def upsert(request_options: {}, **params)
|
|
65
62
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
66
|
-
body_prop_names = %i[photo id formatted_name name nickname birthday addresses url phones emails timezone geo title role organization categories note]
|
|
67
|
-
body_bag = params.slice(*body_prop_names)
|
|
68
|
-
|
|
69
63
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
70
64
|
base_url: request_options[:base_url],
|
|
71
65
|
method: "POST",
|
|
72
66
|
path: "tools/contact-card/upsert",
|
|
73
|
-
body: Pinnacle::Tools::ContactCard::Types::UpsertVcardParams.new(
|
|
67
|
+
body: Pinnacle::Tools::ContactCard::Types::UpsertVcardParams.new(params).to_h,
|
|
74
68
|
request_options: request_options
|
|
75
69
|
)
|
|
76
70
|
begin
|
|
@@ -25,14 +25,11 @@ module Pinnacle
|
|
|
25
25
|
# @return [Pinnacle::Types::UploadResults]
|
|
26
26
|
def upload(request_options: {}, **params)
|
|
27
27
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
28
|
-
body_prop_names = %i[content_type size name options]
|
|
29
|
-
body_bag = params.slice(*body_prop_names)
|
|
30
|
-
|
|
31
28
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
32
29
|
base_url: request_options[:base_url],
|
|
33
30
|
method: "POST",
|
|
34
31
|
path: "tools/files/upload",
|
|
35
|
-
body: Pinnacle::Tools::File::Types::UploadFileParams.new(
|
|
32
|
+
body: Pinnacle::Tools::File::Types::UploadFileParams.new(params).to_h,
|
|
36
33
|
request_options: request_options
|
|
37
34
|
)
|
|
38
35
|
begin
|
|
@@ -67,14 +64,11 @@ module Pinnacle
|
|
|
67
64
|
# @return [Array[Pinnacle::Types::RefreshedFile]]
|
|
68
65
|
def refresh(request_options: {}, **params)
|
|
69
66
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
70
|
-
body_prop_names = %i[urls]
|
|
71
|
-
body_bag = params.slice(*body_prop_names)
|
|
72
|
-
|
|
73
67
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
74
68
|
base_url: request_options[:base_url],
|
|
75
69
|
method: "POST",
|
|
76
70
|
path: "tools/files/refresh",
|
|
77
|
-
body: Pinnacle::Tools::File::Types::RefreshFileParams.new(
|
|
71
|
+
body: Pinnacle::Tools::File::Types::RefreshFileParams.new(params).to_h,
|
|
78
72
|
request_options: request_options
|
|
79
73
|
)
|
|
80
74
|
begin
|
|
@@ -24,14 +24,11 @@ module Pinnacle
|
|
|
24
24
|
# @return [Pinnacle::Types::ShortenedUrl]
|
|
25
25
|
def create(request_options: {}, **params)
|
|
26
26
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
27
|
-
body_prop_names = %i[url options]
|
|
28
|
-
body_bag = params.slice(*body_prop_names)
|
|
29
|
-
|
|
30
27
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
31
28
|
base_url: request_options[:base_url],
|
|
32
29
|
method: "POST",
|
|
33
30
|
path: "tools/url",
|
|
34
|
-
body: Pinnacle::Tools::Url::Types::CreateUrlParams.new(
|
|
31
|
+
body: Pinnacle::Tools::Url::Types::CreateUrlParams.new(params).to_h,
|
|
35
32
|
request_options: request_options
|
|
36
33
|
)
|
|
37
34
|
begin
|
|
@@ -97,16 +94,15 @@ module Pinnacle
|
|
|
97
94
|
# @return [Pinnacle::Types::ShortenedUrl]
|
|
98
95
|
def update(request_options: {}, **params)
|
|
99
96
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
body_bag = body_params.slice(*body_prop_names)
|
|
97
|
+
request_data = Pinnacle::Tools::Url::Types::UpdateUrlParams.new(params).to_h
|
|
98
|
+
non_body_param_names = ["linkId"]
|
|
99
|
+
body = request_data.except(*non_body_param_names)
|
|
104
100
|
|
|
105
101
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
106
102
|
base_url: request_options[:base_url],
|
|
107
103
|
method: "PUT",
|
|
108
104
|
path: "tools/url/#{params[:link_id]}",
|
|
109
|
-
body:
|
|
105
|
+
body: body,
|
|
110
106
|
request_options: request_options
|
|
111
107
|
)
|
|
112
108
|
begin
|
data/lib/pinnacle/version.rb
CHANGED
|
@@ -23,14 +23,11 @@ module Pinnacle
|
|
|
23
23
|
# @return [Pinnacle::Types::WebhookResult]
|
|
24
24
|
def get(request_options: {}, **params)
|
|
25
25
|
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
26
|
-
body_prop_names = %i[identifiers]
|
|
27
|
-
body_bag = params.slice(*body_prop_names)
|
|
28
|
-
|
|
29
26
|
request = Pinnacle::Internal::JSON::Request.new(
|
|
30
27
|
base_url: request_options[:base_url],
|
|
31
28
|
method: "POST",
|
|
32
29
|
path: "webhooks",
|
|
33
|
-
body: Pinnacle::Webhooks::Types::GetWebhookParams.new(
|
|
30
|
+
body: Pinnacle::Webhooks::Types::GetWebhookParams.new(params).to_h,
|
|
34
31
|
request_options: request_options
|
|
35
32
|
)
|
|
36
33
|
begin
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rcs
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.11
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Pinnacle
|
|
@@ -23,7 +23,6 @@ files:
|
|
|
23
23
|
- README.md
|
|
24
24
|
- Rakefile
|
|
25
25
|
- custom.gemspec.rb
|
|
26
|
-
- lib/pinnacle.rb
|
|
27
26
|
- lib/pinnacle/audiences/client.rb
|
|
28
27
|
- lib/pinnacle/audiences/contacts/client.rb
|
|
29
28
|
- lib/pinnacle/audiences/contacts/types/add_contacts_params.rb
|
|
@@ -469,10 +468,10 @@ files:
|
|
|
469
468
|
- lib/pinnacle/wrapper/messages/client.rb
|
|
470
469
|
- lib/pinnacle/wrapper/tools/client.rb
|
|
471
470
|
- lib/pinnacle/wrapper/tools/file_uploader.rb
|
|
471
|
+
- lib/rcs.rb
|
|
472
472
|
- reference.md
|
|
473
|
-
homepage:
|
|
474
|
-
licenses:
|
|
475
|
-
- MIT
|
|
473
|
+
homepage:
|
|
474
|
+
licenses: []
|
|
476
475
|
metadata:
|
|
477
476
|
rubygems_mfa_required: 'true'
|
|
478
477
|
post_install_message:
|
/data/lib/{pinnacle.rb → rcs.rb}
RENAMED
|
File without changes
|