rcs 2.0.16.pre.rc.2 → 2.0.16

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.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/.fern/metadata.json +3 -3
  3. data/.rubocop.yml +16 -10
  4. data/lib/pinnacle/brands/client.rb +3 -3
  5. data/lib/pinnacle/campaigns/dlc/client.rb +2 -2
  6. data/lib/pinnacle/campaigns/rcs/client.rb +2 -2
  7. data/lib/pinnacle/campaigns/toll_free/client.rb +2 -2
  8. data/lib/pinnacle/client.rb +1 -6
  9. data/lib/pinnacle/conversations/client.rb +1 -1
  10. data/lib/pinnacle/internal/http/base_request.rb +0 -14
  11. data/lib/pinnacle/internal/http/raw_client.rb +3 -21
  12. data/lib/pinnacle/internal/json/request.rb +4 -6
  13. data/lib/pinnacle/internal/multipart/multipart_request.rb +4 -6
  14. data/lib/pinnacle/internal/types/boolean.rb +1 -1
  15. data/lib/pinnacle/internal/types/union.rb +1 -1
  16. data/lib/pinnacle/internal/types/utils.rb +2 -2
  17. data/lib/pinnacle/messages/client.rb +6 -1
  18. data/lib/pinnacle/messages/schedule/client.rb +1 -1
  19. data/lib/pinnacle/{forms/submissions → messages/simulate}/client.rb +9 -15
  20. data/lib/pinnacle/rcs/client.rb +1 -1
  21. data/lib/pinnacle/rcs/test/client.rb +3 -3
  22. data/lib/pinnacle/status/get/client.rb +5 -5
  23. data/lib/pinnacle/tools/url/client.rb +2 -2
  24. data/lib/pinnacle/types/simulate_message_input.rb +12 -0
  25. data/lib/pinnacle/types/{form_gradient.rb → simulate_user_button.rb} +3 -3
  26. data/lib/pinnacle/types/simulate_user_message.rb +12 -0
  27. data/lib/pinnacle/types/simulate_user_params.rb +13 -0
  28. data/lib/pinnacle/types/simulate_user_response.rb +10 -0
  29. data/lib/pinnacle/types/user_button_press.rb +19 -0
  30. data/lib/pinnacle/types/user_button_press_call.rb +12 -0
  31. data/lib/pinnacle/types/user_button_press_open_url.rb +12 -0
  32. data/lib/pinnacle/types/user_button_press_request_user_location.rb +12 -0
  33. data/lib/pinnacle/types/user_button_press_request_user_location_location.rb +13 -0
  34. data/lib/pinnacle/types/user_button_press_schedule_event.rb +15 -0
  35. data/lib/pinnacle/types/user_button_press_send_location.rb +13 -0
  36. data/lib/pinnacle/types/user_button_press_send_location_lat_long.rb +11 -0
  37. data/lib/pinnacle/types/user_button_press_trigger.rb +12 -0
  38. data/lib/pinnacle/types/webhook_event_enum.rb +0 -1
  39. data/lib/pinnacle/version.rb +1 -1
  40. data/lib/pinnacle/wrapper/messages/client.rb +2 -5
  41. data/lib/pinnacle.rb +16 -66
  42. data/reference.md +364 -802
  43. metadata +17 -67
  44. data/lib/pinnacle/forms/client.rb +0 -217
  45. data/lib/pinnacle/forms/submissions/types/list_form_submissions_params.rb +0 -15
  46. data/lib/pinnacle/forms/types/forms_send_response.rb +0 -14
  47. data/lib/pinnacle/forms/types/list_forms_params.rb +0 -12
  48. data/lib/pinnacle/forms/types/update_form_params.rb +0 -18
  49. data/lib/pinnacle/types/address_field.rb +0 -14
  50. data/lib/pinnacle/types/checkbox_field.rb +0 -13
  51. data/lib/pinnacle/types/color_field.rb +0 -8
  52. data/lib/pinnacle/types/create_form_request.rb +0 -23
  53. data/lib/pinnacle/types/date_field.rb +0 -12
  54. data/lib/pinnacle/types/datetime_field.rb +0 -12
  55. data/lib/pinnacle/types/email_field.rb +0 -10
  56. data/lib/pinnacle/types/field_base.rb +0 -14
  57. data/lib/pinnacle/types/form.rb +0 -22
  58. data/lib/pinnacle/types/form_background.rb +0 -17
  59. data/lib/pinnacle/types/form_background_gradient.rb +0 -12
  60. data/lib/pinnacle/types/form_background_image.rb +0 -13
  61. data/lib/pinnacle/types/form_background_pattern.rb +0 -10
  62. data/lib/pinnacle/types/form_background_pattern_preset.rb +0 -16
  63. data/lib/pinnacle/types/form_background_solid.rb +0 -34
  64. data/lib/pinnacle/types/form_color_palette.rb +0 -12
  65. data/lib/pinnacle/types/form_definition.rb +0 -15
  66. data/lib/pinnacle/types/form_field.rb +0 -29
  67. data/lib/pinnacle/types/form_field_option.rb +0 -11
  68. data/lib/pinnacle/types/form_gradient_angle.rb +0 -12
  69. data/lib/pinnacle/types/form_id_reference.rb +0 -23
  70. data/lib/pinnacle/types/form_submission.rb +0 -19
  71. data/lib/pinnacle/types/form_submission_answer.rb +0 -20
  72. data/lib/pinnacle/types/form_submission_event.rb +0 -15
  73. data/lib/pinnacle/types/form_submission_event_conversation.rb +0 -20
  74. data/lib/pinnacle/types/form_submission_event_form.rb +0 -12
  75. data/lib/pinnacle/types/form_submission_event_submission.rb +0 -17
  76. data/lib/pinnacle/types/form_submitted_field.rb +0 -13
  77. data/lib/pinnacle/types/form_theme_override.rb +0 -25
  78. data/lib/pinnacle/types/form_theme_override_colors.rb +0 -12
  79. data/lib/pinnacle/types/form_theme_override_content_alignment.rb +0 -13
  80. data/lib/pinnacle/types/form_theme_override_corner_radius.rb +0 -13
  81. data/lib/pinnacle/types/form_theme_override_font_family.rb +0 -15
  82. data/lib/pinnacle/types/form_theme_override_theme_mode.rb +0 -13
  83. data/lib/pinnacle/types/list_form_submissions_response.rb +0 -12
  84. data/lib/pinnacle/types/list_forms_response.rb +0 -12
  85. data/lib/pinnacle/types/number_field.rb +0 -13
  86. data/lib/pinnacle/types/phone_field.rb +0 -11
  87. data/lib/pinnacle/types/radio_field.rb +0 -10
  88. data/lib/pinnacle/types/range_field.rb +0 -12
  89. data/lib/pinnacle/types/rating_field.rb +0 -11
  90. data/lib/pinnacle/types/scheduled_form_send_response_form.rb +0 -10
  91. data/lib/pinnacle/types/scheduled_form_send_response_submission.rb +0 -10
  92. data/lib/pinnacle/types/scheduled_form_send_result.rb +0 -13
  93. data/lib/pinnacle/types/select_field.rb +0 -11
  94. data/lib/pinnacle/types/send_form_options.rb +0 -11
  95. data/lib/pinnacle/types/send_form_options_webview_mode.rb +0 -13
  96. data/lib/pinnacle/types/send_form_params.rb +0 -20
  97. data/lib/pinnacle/types/send_form_result.rb +0 -17
  98. data/lib/pinnacle/types/send_form_via_rcs_params.rb +0 -14
  99. data/lib/pinnacle/types/send_form_via_rcs_request_fallback.rb +0 -10
  100. data/lib/pinnacle/types/send_form_via_rcs_request_form.rb +0 -13
  101. data/lib/pinnacle/types/send_form_via_sms_params.rb +0 -13
  102. data/lib/pinnacle/types/send_form_via_sms_request_form.rb +0 -12
  103. data/lib/pinnacle/types/text_field.rb +0 -13
  104. data/lib/pinnacle/types/textarea_field.rb +0 -13
  105. data/lib/pinnacle/types/time_field.rb +0 -12
  106. data/lib/pinnacle/types/url_field.rb +0 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d74f5ae6db348936c99bc25262ae9d115d394b4ec051ca0f7b0a8c2aed30bf95
4
- data.tar.gz: c890e071aeafde1a7a6a6c0f840969880d60f1ec2cae5e46ff3abb2efb3fe77e
3
+ metadata.gz: af1df4309329865c8db83166a625b88da9d2247b9657cbce4964e260a8cef0d2
4
+ data.tar.gz: edaebb702d60e2e0d2cefaca64210f518641ed5d4c7455cda0f87abd3409c33a
5
5
  SHA512:
6
- metadata.gz: b8b4691902971eec1bd71c31a952cdac47842618899d4a74050caf441c9a4b58fbedaa0b4f738098e5edd639e6a6c09057f96865c4269bd90e01085e97ba2297
7
- data.tar.gz: ccab39d222d01ef469d6141c9054ecc5cf72b3e3abac80533dd3a3ab2ae02b549f5cc8053cb6ed72fcddc77baaa7233dbe1523cfcd08a2a60f293bf7ac7a1ac8
6
+ metadata.gz: 518bb3cb3e93e4f69310e5ed0a4556756544746c740d15aa4fe3b888db72d6979c5ccf03eaa71d5c46d0aaf2deb5ebf5aabf4ee1f95d9ae6fbf4a1c0ddc88bc8
7
+ data.tar.gz: b20e523cdc367b741b4b20c2d3bb7b6c2481891540670b06fe4ba8b5a2f2442608fc51e0f518333d77b5ceb9e1cf1d099c25f53f9a1de46ae5a51ea49a608a51
data/.fern/metadata.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "cliVersion": "4.58.0",
3
3
  "generatorName": "fernapi/fern-ruby-sdk",
4
- "generatorVersion": "1.1.13",
4
+ "generatorVersion": "1.0.0-rc85",
5
5
  "generatorConfig": {
6
6
  "clientModuleName": "PinnacleBaseClient",
7
7
  "flattenModuleStructure": true,
8
8
  "useProvidedDefaults": true
9
9
  },
10
- "originGitCommit": "fb028ee5e2c6395c9680eb66d1173e55015384c0",
11
- "sdkVersion": "2.0.16.pre.rc.1"
10
+ "originGitCommit": "fbc56cbecaab985e0a6ae7ecc7de124c3d4d57d8",
11
+ "sdkVersion": "2.0.16"
12
12
  }
data/.rubocop.yml CHANGED
@@ -45,11 +45,7 @@ Layout/LineLength:
45
45
  Enabled: false
46
46
 
47
47
  Naming/VariableNumber:
48
- # Fern's ruby-sdk generator emits symbols like :gsm_7 / :utf_16 / :code_3
49
- # (snake_case) in generated type classes while shipping a template that
50
- # enforces `normalcase`. The two are inconsistent, so disable the cop
51
- # until the generator resolves it upstream.
52
- Enabled: false
48
+ EnforcedStyle: snake_case
53
49
 
54
50
  Style/Documentation:
55
51
  Enabled: false
@@ -63,11 +59,21 @@ Minitest/MultipleAssertions:
63
59
  Minitest/UselessAssertion:
64
60
  Enabled: false
65
61
 
66
- # Dynamic snippets are code samples for documentation, not standalone Ruby files.
67
- Style/FrozenStringLiteralComment:
62
+ # The generator emits bare `value` expressions as the fall-through result
63
+ # of `case` blocks; rubocop flags these as void. Excluded here so the
64
+ # suppressions survive Fern regeneration.
65
+ Lint/Void:
66
+ Exclude:
67
+ - 'lib/pinnacle/internal/types/boolean.rb'
68
+ - 'lib/pinnacle/internal/types/utils.rb'
69
+
70
+ # `Union.member?` is not a collection `include?`; the Minitest cops
71
+ # don't distinguish them. Excluded for the union test file so Fern
72
+ # regeneration doesn't need to preserve inline disables.
73
+ Minitest/AssertIncludes:
68
74
  Exclude:
69
- - "dynamic-snippets/**/*"
75
+ - 'test/unit/internal/types/test_union.rb'
70
76
 
71
- Layout/FirstHashElementIndentation:
77
+ Minitest/RefuteIncludes:
72
78
  Exclude:
73
- - "dynamic-snippets/**/*"
79
+ - 'test/unit/internal/types/test_union.rb'
@@ -108,7 +108,7 @@ module Pinnacle
108
108
  request = Pinnacle::Internal::JSON::Request.new(
109
109
  base_url: request_options[:base_url],
110
110
  method: "GET",
111
- path: "brands/#{URI.encode_uri_component(params[:id].to_s)}",
111
+ path: "brands/#{params[:id]}",
112
112
  query: query_params,
113
113
  request_options: request_options
114
114
  )
@@ -143,7 +143,7 @@ module Pinnacle
143
143
  request = Pinnacle::Internal::JSON::Request.new(
144
144
  base_url: request_options[:base_url],
145
145
  method: "POST",
146
- path: "brands/#{URI.encode_uri_component(params[:brand_id].to_s)}/submit",
146
+ path: "brands/#{params[:brand_id]}/submit",
147
147
  request_options: request_options
148
148
  )
149
149
  begin
@@ -216,7 +216,7 @@ module Pinnacle
216
216
  request = Pinnacle::Internal::JSON::Request.new(
217
217
  base_url: request_options[:base_url],
218
218
  method: "POST",
219
- path: "brands/#{URI.encode_uri_component(params[:brand_id].to_s)}/vet",
219
+ path: "brands/#{params[:brand_id]}/vet",
220
220
  body: body,
221
221
  request_options: request_options
222
222
  )
@@ -62,7 +62,7 @@ module Pinnacle
62
62
  request = Pinnacle::Internal::JSON::Request.new(
63
63
  base_url: request_options[:base_url],
64
64
  method: "GET",
65
- path: "campaigns/dlc/#{URI.encode_uri_component(params[:campaign_id].to_s)}",
65
+ path: "campaigns/dlc/#{params[:campaign_id]}",
66
66
  request_options: request_options
67
67
  )
68
68
  begin
@@ -96,7 +96,7 @@ module Pinnacle
96
96
  request = Pinnacle::Internal::JSON::Request.new(
97
97
  base_url: request_options[:base_url],
98
98
  method: "POST",
99
- path: "campaigns/dlc/submit/#{URI.encode_uri_component(params[:campaign_id].to_s)}",
99
+ path: "campaigns/dlc/submit/#{params[:campaign_id]}",
100
100
  request_options: request_options
101
101
  )
102
102
  begin
@@ -62,7 +62,7 @@ module Pinnacle
62
62
  request = Pinnacle::Internal::JSON::Request.new(
63
63
  base_url: request_options[:base_url],
64
64
  method: "GET",
65
- path: "campaigns/rcs/#{URI.encode_uri_component(params[:campaign_id].to_s)}",
65
+ path: "campaigns/rcs/#{params[:campaign_id]}",
66
66
  request_options: request_options
67
67
  )
68
68
  begin
@@ -96,7 +96,7 @@ module Pinnacle
96
96
  request = Pinnacle::Internal::JSON::Request.new(
97
97
  base_url: request_options[:base_url],
98
98
  method: "POST",
99
- path: "campaigns/rcs/submit/#{URI.encode_uri_component(params[:campaign_id].to_s)}",
99
+ path: "campaigns/rcs/submit/#{params[:campaign_id]}",
100
100
  request_options: request_options
101
101
  )
102
102
  begin
@@ -62,7 +62,7 @@ module Pinnacle
62
62
  request = Pinnacle::Internal::JSON::Request.new(
63
63
  base_url: request_options[:base_url],
64
64
  method: "GET",
65
- path: "campaigns/toll-free/#{URI.encode_uri_component(params[:campaign_id].to_s)}",
65
+ path: "campaigns/toll-free/#{params[:campaign_id]}",
66
66
  request_options: request_options
67
67
  )
68
68
  begin
@@ -96,7 +96,7 @@ module Pinnacle
96
96
  request = Pinnacle::Internal::JSON::Request.new(
97
97
  base_url: request_options[:base_url],
98
98
  method: "POST",
99
- path: "campaigns/toll-free/submit/#{URI.encode_uri_component(params[:campaign_id].to_s)}",
99
+ path: "campaigns/toll-free/submit/#{params[:campaign_id]}",
100
100
  request_options: request_options
101
101
  )
102
102
  begin
@@ -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.16.pre.rc.2",
13
+ "User-Agent" => "rcs/2.0.16",
14
14
  "X-Fern-Language" => "Ruby",
15
15
  "PINNACLE-API-KEY" => api_key.to_s
16
16
  }
@@ -57,11 +57,6 @@ module Pinnacle
57
57
  @webhooks ||= Pinnacle::Webhooks::Client.new(client: @raw_client)
58
58
  end
59
59
 
60
- # @return [Pinnacle::Forms::Client]
61
- def forms
62
- @forms ||= Pinnacle::Forms::Client.new(client: @raw_client)
63
- end
64
-
65
60
  # @return [Pinnacle::Campaigns::Client]
66
61
  def campaigns
67
62
  @campaigns ||= Pinnacle::Campaigns::Client.new(client: @raw_client)
@@ -147,7 +147,7 @@ module Pinnacle
147
147
  request = Pinnacle::Internal::JSON::Request.new(
148
148
  base_url: request_options[:base_url],
149
149
  method: "POST",
150
- path: "conversations/#{URI.encode_uri_component(params[:id].to_s)}/messages",
150
+ path: "conversations/#{params[:id]}/messages",
151
151
  query: query_params,
152
152
  request_options: request_options
153
153
  )
@@ -31,20 +31,6 @@ module Pinnacle
31
31
  # Child classes should implement:
32
32
  # - encode_headers: Returns the encoded HTTP request headers.
33
33
  # - encode_body: Returns the encoded HTTP request body.
34
-
35
- private
36
-
37
- # Merges additional_headers from request_options into sdk_headers, filtering out
38
- # any keys that collide with SDK-set or client-protected headers (case-insensitive).
39
- # @param sdk_headers [Hash] Headers set by the SDK for this request type.
40
- # @param protected_keys [Array<String>] Additional header keys that must not be overridden.
41
- # @return [Hash] The merged headers.
42
- def merge_additional_headers(sdk_headers, protected_keys: [])
43
- additional_headers = @request_options&.dig(:additional_headers) || @request_options&.dig("additional_headers") || {}
44
- all_protected = (sdk_headers.keys + protected_keys).to_set { |k| k.to_s.downcase }
45
- filtered = additional_headers.reject { |key, _| all_protected.include?(key.to_s.downcase) }
46
- sdk_headers.merge(filtered)
47
- end
48
34
  end
49
35
  end
50
36
  end
@@ -43,7 +43,7 @@ module Pinnacle
43
43
  http_request = build_http_request(
44
44
  url:,
45
45
  method: request.method,
46
- headers: request.encode_headers(protected_keys: @default_headers.keys),
46
+ headers: request.encode_headers,
47
47
  body: request.encode_body
48
48
  )
49
49
 
@@ -120,8 +120,6 @@ module Pinnacle
120
120
  [delay + jitter, 0].max
121
121
  end
122
122
 
123
- LOCALHOST_HOSTS = %w[localhost 127.0.0.1 [::1]].freeze
124
-
125
123
  # @param request [Pinnacle::Internal::Http::BaseRequest] The HTTP request.
126
124
  # @return [URI::Generic] The URL.
127
125
  def build_url(request)
@@ -131,29 +129,14 @@ module Pinnacle
131
129
  if request.path.start_with?("http://", "https://")
132
130
  url = request.path
133
131
  url = "#{url}?#{encode_query(encoded_query)}" if encoded_query&.any?
134
- parsed = URI.parse(url)
135
- validate_https!(parsed)
136
- return parsed
132
+ return URI.parse(url)
137
133
  end
138
134
 
139
135
  path = request.path.start_with?("/") ? request.path[1..] : request.path
140
136
  base = request.base_url || @base_url
141
137
  url = "#{base.chomp("/")}/#{path}"
142
138
  url = "#{url}?#{encode_query(encoded_query)}" if encoded_query&.any?
143
- parsed = URI.parse(url)
144
- validate_https!(parsed)
145
- parsed
146
- end
147
-
148
- # Raises if the URL uses http:// for a non-localhost host, which would
149
- # send authentication credentials in plaintext.
150
- # @param url [URI::Generic] The parsed URL.
151
- def validate_https!(url)
152
- return if url.scheme != "http"
153
- return if LOCALHOST_HOSTS.include?(url.host)
154
-
155
- raise ArgumentError, "Refusing to send request to non-HTTPS URL: #{url}. " \
156
- "HTTP is only allowed for localhost. Use HTTPS or pass a localhost URL."
139
+ URI.parse(url)
157
140
  end
158
141
 
159
142
  # @param url [URI::Generic] The url to the resource.
@@ -197,7 +180,6 @@ module Pinnacle
197
180
 
198
181
  http = Net::HTTP.new(url.host, port)
199
182
  http.use_ssl = is_https
200
- http.verify_mode = OpenSSL::SSL::VERIFY_PEER if is_https
201
183
  # NOTE: We handle retries at the application level with HTTP status code awareness,
202
184
  # so we set max_retries to 0 to disable Net::HTTP's built-in network-level retries.
203
185
  http.max_retries = 0
@@ -21,14 +21,12 @@ module Pinnacle
21
21
  end
22
22
 
23
23
  # @return [Hash] The encoded HTTP request headers.
24
- # @param protected_keys [Array<String>] Header keys set by the SDK client (e.g. auth, metadata)
25
- # that must not be overridden by additional_headers from request_options.
26
- def encode_headers(protected_keys: [])
27
- sdk_headers = {
24
+ def encode_headers
25
+ additional_headers = @request_options&.dig(:additional_headers) || @request_options&.dig("additional_headers") || {}
26
+ {
28
27
  "Content-Type" => "application/json",
29
28
  "Accept" => "application/json"
30
- }.merge(@headers)
31
- merge_additional_headers(sdk_headers, protected_keys:)
29
+ }.merge(@headers).merge(additional_headers)
32
30
  end
33
31
 
34
32
  # @return [String, nil] The encoded HTTP request body.
@@ -21,13 +21,11 @@ module Pinnacle
21
21
  end
22
22
 
23
23
  # @return [Hash] The encoded HTTP request headers.
24
- # @param protected_keys [Array<String>] Header keys set by the SDK client (e.g. auth, metadata)
25
- # that must not be overridden by additional_headers from request_options.
26
- def encode_headers(protected_keys: [])
27
- sdk_headers = {
24
+ def encode_headers
25
+ additional_headers = @request_options&.dig(:additional_headers) || @request_options&.dig("additional_headers") || {}
26
+ {
28
27
  "Content-Type" => @body.content_type
29
- }.merge(@headers)
30
- merge_additional_headers(sdk_headers, protected_keys:)
28
+ }.merge(@headers).merge(additional_headers)
31
29
  end
32
30
 
33
31
  # @return [String, nil] The encoded HTTP request body.
@@ -17,7 +17,7 @@ module Pinnacle
17
17
  def self.coerce(value, strict: strict?)
18
18
  case value
19
19
  when TrueClass, FalseClass
20
- return value
20
+ value
21
21
  when Integer
22
22
  return value == 1
23
23
  when String
@@ -21,7 +21,7 @@ module Pinnacle
21
21
  self
22
22
  end
23
23
 
24
- def type_member?(type)
24
+ def member?(type)
25
25
  members.any? { |_key, type_fn| type == type_fn.call }
26
26
  end
27
27
 
@@ -81,10 +81,10 @@ module Pinnacle
81
81
  }
82
82
  return type.coerce(value, strict: strict)
83
83
  else
84
- value # rubocop:disable Lint/Void
84
+ value
85
85
  end
86
86
  else
87
- value # rubocop:disable Lint/Void
87
+ value
88
88
  end
89
89
 
90
90
  raise Errors::TypeError, "cannot coerce value of type `#{value.class}` to `#{target}`" if strict
@@ -27,7 +27,7 @@ module Pinnacle
27
27
  request = Pinnacle::Internal::JSON::Request.new(
28
28
  base_url: request_options[:base_url],
29
29
  method: "GET",
30
- path: "messages/#{URI.encode_uri_component(params[:id].to_s)}",
30
+ path: "messages/#{params[:id]}",
31
31
  request_options: request_options
32
32
  )
33
33
  begin
@@ -146,6 +146,11 @@ module Pinnacle
146
146
  def blasts
147
147
  @blasts ||= Pinnacle::Messages::Blasts::Client.new(client: @client)
148
148
  end
149
+
150
+ # @return [Pinnacle::Simulate::Client]
151
+ def simulate
152
+ @simulate ||= Pinnacle::Messages::Simulate::Client.new(client: @client)
153
+ end
149
154
  end
150
155
  end
151
156
  end
@@ -31,7 +31,7 @@ module Pinnacle
31
31
  request = Pinnacle::Internal::JSON::Request.new(
32
32
  base_url: request_options[:base_url],
33
33
  method: "DELETE",
34
- path: "messages/schedule/#{URI.encode_uri_component(params[:id].to_s)}",
34
+ path: "messages/schedule/#{params[:id]}",
35
35
  request_options: request_options
36
36
  )
37
37
  begin
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pinnacle
4
- module Forms
5
- module Submissions
4
+ module Messages
5
+ module Simulate
6
6
  class Client
7
7
  # @param client [Pinnacle::Internal::Http::RawClient]
8
8
  #
@@ -11,30 +11,24 @@ module Pinnacle
11
11
  @client = client
12
12
  end
13
13
 
14
- # Paginated list of completed submissions for a form, newest first. Each row includes the submitted `data` keyed
15
- # by field `key`, the sender/recipient, IP, user-agent, and timestamps.
14
+ # Simulate inbound messages and button presses from a user.
16
15
  #
17
16
  # @param request_options [Hash]
18
- # @param params [Pinnacle::Forms::Submissions::Types::ListFormSubmissionsParams]
17
+ # @param params [Pinnacle::Types::SimulateUserParams]
19
18
  # @option request_options [String] :base_url
20
19
  # @option request_options [Hash{String => Object}] :additional_headers
21
20
  # @option request_options [Hash{String => Object}] :additional_query_parameters
22
21
  # @option request_options [Hash{String => Object}] :additional_body_parameters
23
22
  # @option request_options [Integer] :timeout_in_seconds
24
- # @option params [String] :id
25
23
  #
26
- # @return [Pinnacle::Types::ListFormSubmissionsResponse]
27
- def list(request_options: {}, **params)
24
+ # @return [Pinnacle::Types::SimulateUserResponse]
25
+ def user(request_options: {}, **params)
28
26
  params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
29
- request_data = Pinnacle::Forms::Submissions::Types::ListFormSubmissionsParams.new(params).to_h
30
- non_body_param_names = ["id"]
31
- body = request_data.except(*non_body_param_names)
32
-
33
27
  request = Pinnacle::Internal::JSON::Request.new(
34
28
  base_url: request_options[:base_url],
35
29
  method: "POST",
36
- path: "forms/#{URI.encode_uri_component(params[:id].to_s)}/submissions/list",
37
- body: body,
30
+ path: "messages/simulate/user",
31
+ body: Pinnacle::Types::SimulateUserParams.new(params).to_h,
38
32
  request_options: request_options
39
33
  )
40
34
  begin
@@ -44,7 +38,7 @@ module Pinnacle
44
38
  end
45
39
  code = response.code.to_i
46
40
  if code.between?(200, 299)
47
- Pinnacle::Types::ListFormSubmissionsResponse.load(response.body)
41
+ Pinnacle::Types::SimulateUserResponse.load(response.body)
48
42
  else
49
43
  error_class = Pinnacle::Errors::ResponseError.subclass_for_code(code)
50
44
  raise error_class.new(response.body, code: code)
@@ -30,7 +30,7 @@ module Pinnacle
30
30
  request = Pinnacle::Internal::JSON::Request.new(
31
31
  base_url: request_options[:base_url],
32
32
  method: "GET",
33
- path: "rcs/#{URI.encode_uri_component(params[:agent_id].to_s)}",
33
+ path: "rcs/#{params[:agent_id]}",
34
34
  request_options: request_options
35
35
  )
36
36
  begin
@@ -115,7 +115,7 @@ module Pinnacle
115
115
  request = Pinnacle::Internal::JSON::Request.new(
116
116
  base_url: request_options[:base_url],
117
117
  method: "PATCH",
118
- path: "rcs/test/agents/#{URI.encode_uri_component(params[:agent_id].to_s)}",
118
+ path: "rcs/test/agents/#{params[:agent_id]}",
119
119
  body: body,
120
120
  request_options: request_options
121
121
  )
@@ -186,7 +186,7 @@ module Pinnacle
186
186
  request = Pinnacle::Internal::JSON::Request.new(
187
187
  base_url: request_options[:base_url],
188
188
  method: "POST",
189
- path: "rcs/test/agents/#{URI.encode_uri_component(params[:agent_id].to_s)}/whitelist",
189
+ path: "rcs/test/agents/#{params[:agent_id]}/whitelist",
190
190
  body: body,
191
191
  request_options: request_options
192
192
  )
@@ -252,7 +252,7 @@ module Pinnacle
252
252
  request = Pinnacle::Internal::JSON::Request.new(
253
253
  base_url: request_options[:base_url],
254
254
  method: "GET",
255
- path: "rcs/test/agents/#{URI.encode_uri_component(params[:agent_id].to_s)}/numbers",
255
+ path: "rcs/test/agents/#{params[:agent_id]}/numbers",
256
256
  query: query_params,
257
257
  request_options: request_options
258
258
  )
@@ -28,7 +28,7 @@ module Pinnacle
28
28
  request = Pinnacle::Internal::JSON::Request.new(
29
29
  base_url: request_options[:base_url],
30
30
  method: "GET",
31
- path: "status/brand/#{URI.encode_uri_component(params[:brand_id].to_s)}",
31
+ path: "status/brand/#{params[:brand_id]}",
32
32
  request_options: request_options
33
33
  )
34
34
  begin
@@ -62,7 +62,7 @@ module Pinnacle
62
62
  request = Pinnacle::Internal::JSON::Request.new(
63
63
  base_url: request_options[:base_url],
64
64
  method: "GET",
65
- path: "status/toll-free-campaign/#{URI.encode_uri_component(params[:campaign_id].to_s)}",
65
+ path: "status/toll-free-campaign/#{params[:campaign_id]}",
66
66
  request_options: request_options
67
67
  )
68
68
  begin
@@ -96,7 +96,7 @@ module Pinnacle
96
96
  request = Pinnacle::Internal::JSON::Request.new(
97
97
  base_url: request_options[:base_url],
98
98
  method: "GET",
99
- path: "status/dlc-campaign/#{URI.encode_uri_component(params[:campaign_id].to_s)}",
99
+ path: "status/dlc-campaign/#{params[:campaign_id]}",
100
100
  request_options: request_options
101
101
  )
102
102
  begin
@@ -130,7 +130,7 @@ module Pinnacle
130
130
  request = Pinnacle::Internal::JSON::Request.new(
131
131
  base_url: request_options[:base_url],
132
132
  method: "GET",
133
- path: "status/rcs-campaign/#{URI.encode_uri_component(params[:campaign_id].to_s)}",
133
+ path: "status/rcs-campaign/#{params[:campaign_id]}",
134
134
  request_options: request_options
135
135
  )
136
136
  begin
@@ -166,7 +166,7 @@ module Pinnacle
166
166
  request = Pinnacle::Internal::JSON::Request.new(
167
167
  base_url: request_options[:base_url],
168
168
  method: "GET",
169
- path: "status/phone-number/#{URI.encode_uri_component(params[:phone_number].to_s)}",
169
+ path: "status/phone-number/#{params[:phone_number]}",
170
170
  request_options: request_options
171
171
  )
172
172
  begin
@@ -62,7 +62,7 @@ module Pinnacle
62
62
  request = Pinnacle::Internal::JSON::Request.new(
63
63
  base_url: request_options[:base_url],
64
64
  method: "GET",
65
- path: "tools/url/#{URI.encode_uri_component(params[:link_id].to_s)}",
65
+ path: "tools/url/#{params[:link_id]}",
66
66
  request_options: request_options
67
67
  )
68
68
  begin
@@ -101,7 +101,7 @@ module Pinnacle
101
101
  request = Pinnacle::Internal::JSON::Request.new(
102
102
  base_url: request_options[:base_url],
103
103
  method: "PUT",
104
- path: "tools/url/#{URI.encode_uri_component(params[:link_id].to_s)}",
104
+ path: "tools/url/#{params[:link_id]}",
105
105
  body: body,
106
106
  request_options: request_options
107
107
  )
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # User message payload. At least one of `text` or `mediaUrls` must be non-empty.
6
+ # Send only `text` to simulate an inbound SMS; include `mediaUrls` to simulate an inbound MMS.
7
+ class SimulateMessageInput < Internal::Types::Model
8
+ field :text, -> { String }, optional: true, nullable: false
9
+ field :media_urls, -> { Internal::Types::Array[String] }, optional: true, nullable: false, api_name: "mediaUrls"
10
+ end
11
+ end
12
+ end
@@ -2,11 +2,11 @@
2
2
 
3
3
  module Pinnacle
4
4
  module Types
5
- # A single light- or dark-mode gradient stop pair.
6
- class FormGradient < Internal::Types::Model
5
+ # Simulate a button press from a user.
6
+ class SimulateUserButton < Internal::Types::Model
7
7
  field :from, -> { String }, optional: false, nullable: false
8
8
  field :to, -> { String }, optional: false, nullable: false
9
- field :angle, -> { Pinnacle::Types::FormGradientAngle }, optional: false, nullable: false
9
+ field :button, -> { Pinnacle::Types::UserButtonPress }, optional: false, nullable: false
10
10
  end
11
11
  end
12
12
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Simulate an inbound message from a user.
6
+ class SimulateUserMessage < Internal::Types::Model
7
+ field :from, -> { String }, optional: false, nullable: false
8
+ field :to, -> { String }, optional: false, nullable: false
9
+ field :message, -> { Pinnacle::Types::SimulateMessageInput }, optional: false, nullable: false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Request body for simulating an inbound event from a user.
6
+ class SimulateUserParams < Internal::Types::Model
7
+ extend Pinnacle::Internal::Types::Union
8
+
9
+ member -> { Pinnacle::Types::SimulateUserMessage }
10
+ member -> { Pinnacle::Types::SimulateUserButton }
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Result of the simulation.
6
+ class SimulateUserResponse < Internal::Types::Model
7
+ field :success, -> { Internal::Types::Boolean }, optional: false, nullable: false
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Discriminated union of button presses that can be simulated for a user.
6
+ class UserButtonPress < Internal::Types::Model
7
+ extend Pinnacle::Internal::Types::Union
8
+
9
+ discriminant :type
10
+
11
+ member -> { Pinnacle::Types::UserButtonPressTrigger }, key: "TRIGGER"
12
+ member -> { Pinnacle::Types::UserButtonPressOpenUrl }, key: "OPEN_URL"
13
+ member -> { Pinnacle::Types::UserButtonPressCall }, key: "CALL"
14
+ member -> { Pinnacle::Types::UserButtonPressScheduleEvent }, key: "SCHEDULE_EVENT"
15
+ member -> { Pinnacle::Types::UserButtonPressSendLocation }, key: "SEND_LOCATION"
16
+ member -> { Pinnacle::Types::UserButtonPressRequestUserLocation }, key: "REQUEST_USER_LOCATION"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Simulates when a user presses a `call` button.
6
+ class UserButtonPressCall < Internal::Types::Model
7
+ field :title, -> { String }, optional: false, nullable: false
8
+ field :metadata, -> { String }, optional: true, nullable: false
9
+ field :payload, -> { String }, optional: true, nullable: false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Simulates when a user presses an `openUrl` button.
6
+ class UserButtonPressOpenUrl < Internal::Types::Model
7
+ field :title, -> { String }, optional: false, nullable: false
8
+ field :metadata, -> { String }, optional: true, nullable: false
9
+ field :payload, -> { String }, optional: true, nullable: false
10
+ end
11
+ end
12
+ end