rcs 2.0.20.pre.rc.2 → 2.0.20.pre.rc.3

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 (76) hide show
  1. checksums.yaml +4 -4
  2. data/.fern/metadata.json +7 -5
  3. data/.fern/replay.lock +16 -0
  4. data/.fernignore +3 -0
  5. data/lib/pinnacle/client.rb +4 -9
  6. data/lib/pinnacle/faxes/client.rb +235 -0
  7. data/lib/pinnacle/faxes/types/faxes_list_request.rb +15 -0
  8. data/lib/pinnacle/faxes/types/send_fax_params.rb +19 -0
  9. data/lib/pinnacle/forms/client.rb +1 -1
  10. data/lib/pinnacle/pinnacle_client.rb +0 -8
  11. data/lib/pinnacle/types/agent_summary_carrier_launches.rb +1 -1
  12. data/lib/pinnacle/types/fax.rb +37 -0
  13. data/lib/pinnacle/types/{recording_state.rb → fax_billing_status_enum.rb} +2 -4
  14. data/lib/pinnacle/types/fax_detail.rb +39 -0
  15. data/lib/pinnacle/types/{call_direction.rb → fax_direction_enum.rb} +1 -1
  16. data/lib/pinnacle/types/fax_event.rb +19 -0
  17. data/lib/pinnacle/types/{silent_auth_check_response_status.rb → fax_event_type.rb} +3 -3
  18. data/lib/pinnacle/types/fax_failure_reason_enum.rb +16 -0
  19. data/lib/pinnacle/types/fax_quality_enum.rb +15 -0
  20. data/lib/pinnacle/types/fax_status_enum.rb +21 -0
  21. data/lib/pinnacle/types/list_faxes_response.rb +11 -0
  22. data/lib/pinnacle/types/webhook_event_enum.rb +2 -1
  23. data/lib/pinnacle/version.rb +1 -1
  24. data/lib/pinnacle/wrapper/messages/client.rb +1 -4
  25. data/lib/pinnacle.rb +13 -49
  26. data/reference.md +898 -1759
  27. metadata +17 -75
  28. data/lib/pinnacle/calls/client.rb +0 -359
  29. data/lib/pinnacle/calls/types/calls_download_recording_request.rb +0 -13
  30. data/lib/pinnacle/calls/types/calls_list_events_request.rb +0 -15
  31. data/lib/pinnacle/calls/types/calls_list_request.rb +0 -25
  32. data/lib/pinnacle/calls/types/create_call_params.rb +0 -17
  33. data/lib/pinnacle/calls/types/create_stream_token_params.rb +0 -17
  34. data/lib/pinnacle/calls/types/update_call_params.rb +0 -13
  35. data/lib/pinnacle/network/client.rb +0 -34
  36. data/lib/pinnacle/network/requests/client.rb +0 -94
  37. data/lib/pinnacle/network/requests/types/list_network_requests_params.rb +0 -21
  38. data/lib/pinnacle/network/silent_auth/client.rb +0 -107
  39. data/lib/pinnacle/network/silent_auth/types/silent_auth_check_request.rb +0 -15
  40. data/lib/pinnacle/network/silent_auth/types/silent_auth_request.rb +0 -17
  41. data/lib/pinnacle/network/sim_swap/client.rb +0 -55
  42. data/lib/pinnacle/network/sim_swap/types/sim_swap_request.rb +0 -15
  43. data/lib/pinnacle/network/subscriber_match/client.rb +0 -55
  44. data/lib/pinnacle/network/subscriber_match/types/subscriber_match_request.rb +0 -15
  45. data/lib/pinnacle/types/call.rb +0 -31
  46. data/lib/pinnacle/types/call_event.rb +0 -27
  47. data/lib/pinnacle/types/call_event_source.rb +0 -14
  48. data/lib/pinnacle/types/call_metadata.rb +0 -23
  49. data/lib/pinnacle/types/call_state.rb +0 -19
  50. data/lib/pinnacle/types/call_status_event.rb +0 -14
  51. data/lib/pinnacle/types/call_status_event_call.rb +0 -17
  52. data/lib/pinnacle/types/call_stream_token.rb +0 -13
  53. data/lib/pinnacle/types/created_call.rb +0 -33
  54. data/lib/pinnacle/types/e_164_phone_number.rb +0 -23
  55. data/lib/pinnacle/types/hosted_silent_auth_response.rb +0 -13
  56. data/lib/pinnacle/types/json_silent_auth_response.rb +0 -13
  57. data/lib/pinnacle/types/list_call_events_response.rb +0 -11
  58. data/lib/pinnacle/types/list_calls_response.rb +0 -11
  59. data/lib/pinnacle/types/list_network_requests_response.rb +0 -13
  60. data/lib/pinnacle/types/network_insight_status.rb +0 -14
  61. data/lib/pinnacle/types/network_request_id.rb +0 -23
  62. data/lib/pinnacle/types/network_request_result.rb +0 -16
  63. data/lib/pinnacle/types/network_request_status.rb +0 -15
  64. data/lib/pinnacle/types/network_request_summary.rb +0 -27
  65. data/lib/pinnacle/types/network_request_type.rb +0 -13
  66. data/lib/pinnacle/types/recording_download.rb +0 -11
  67. data/lib/pinnacle/types/silent_auth_check_response.rb +0 -11
  68. data/lib/pinnacle/types/silent_auth_response.rb +0 -15
  69. data/lib/pinnacle/types/sim_swap_response.rb +0 -15
  70. data/lib/pinnacle/types/subscriber_match_attributes.rb +0 -30
  71. data/lib/pinnacle/types/subscriber_match_response.rb +0 -13
  72. data/lib/pinnacle/types/subscriber_match_response_matches.rb +0 -41
  73. data/lib/pinnacle/types/subscriber_match_result.rb +0 -18
  74. data/lib/pinnacle/wrapper/voice/client.rb +0 -134
  75. data/lib/pinnacle/wrapper/voice/types.rb +0 -38
  76. data/lib/pinnacle/wrapper/voice/voice_socket.rb +0 -354
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ccbbc6dc767021aef18babc8b73dba4a751a1357def4696cbcc27809e37ff6a2
4
- data.tar.gz: 2761ebbc4a2433bfbad74625857004a2b4de29e39fc3693d34aef98b75624a90
3
+ metadata.gz: ba7d9ba5390b5d6626c381e09321c593f9b4dcb787dfcb2d4af2bb1ed6d77b23
4
+ data.tar.gz: 4bec3c784d4b39d230481cef0ffd0f4f23603ef93d395ab0b68d4f3c3987968b
5
5
  SHA512:
6
- metadata.gz: b27ffcfea404220fef933fef4b8f580430a56931b0afd4beec977f0dfd8f0d5f701d771e4ba7231c1840c0ed961363a957c8ff1df5076d4b4420ede586be3d53
7
- data.tar.gz: 8b2f10934b6307adae6a58d07c3b1543af07c00678d0f0d682ed40b21701b7ccb1961cbe43a03298cce04889968b991e367496aace59c0738484a09623562875
6
+ metadata.gz: '0944bf2782cd1b0c365b6f1835b5bc742a1c979f969a0e464c8a7d343170800bfd81b94b6732a3dc86e0aeaa57225110493b92141c6ef2fb77cba822cdb1f956'
7
+ data.tar.gz: 6f2770fe602aadb266b8df1a9e8451313a091ad704f503a3184162e9d39ec196502e68659fae7d29ec2d515c20c27c21c391776ecb556145ca689cd11f87cf26
data/.fern/metadata.json CHANGED
@@ -8,8 +8,10 @@
8
8
  "useProvidedDefaults": true,
9
9
  "rubocopVariableNumberStyle": "snake_case"
10
10
  },
11
- "originGitCommit": "4107f10ce57b97cf22a650949d197352235c1567",
12
- "originGitCommitIsDirty": true,
13
- "invokedBy": "manual",
14
- "sdkVersion": "2.0.20.pre.rc.1"
15
- }
11
+ "originGitCommit": "383d6b59c43597874070074325db9ee4bd58f911",
12
+ "originGitCommitIsDirty": false,
13
+ "invokedBy": "ci",
14
+ "requestedVersion": "2.0.20.pre.rc.3",
15
+ "ciProvider": "github",
16
+ "sdkVersion": "2.0.20.pre.rc.3"
17
+ }
data/.fern/replay.lock ADDED
@@ -0,0 +1,16 @@
1
+ # DO NOT EDIT MANUALLY - Managed by Fern Replay
2
+ version: "1.0"
3
+ generations:
4
+ - commit_sha: 677e97edc210ae7352691433588e7c5c51130e3c
5
+ tree_hash: 811e422fb2621b0414257f02d722dd3bb8d76fdb
6
+ timestamp: 2026-09-18T21:49:30.155Z
7
+ cli_version: unknown
8
+ generator_versions: {}
9
+ - commit_sha: caa4d7194b779ef05c20600a1d3da0499b58055a
10
+ tree_hash: 4f7d9e328f29a5e6cb7b90c80b1a88aab9d88e01
11
+ timestamp: 2026-09-18T21:49:31.069Z
12
+ cli_version: unknown
13
+ generator_versions:
14
+ fernapi/fern-ruby-sdk: 1.12.1
15
+ current_generation: caa4d7194b779ef05c20600a1d3da0499b58055a
16
+ patches: []
data/.fernignore CHANGED
@@ -4,3 +4,6 @@ lib/pinnacle/wrapper
4
4
  lib/pinnacle/pinnacle_client.rb
5
5
  lib/rcs.rb
6
6
  .github/workflows/ci.yml
7
+ .fern/replay.lock
8
+ .fern/replay.yml
9
+ .gitattributes
@@ -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.20.pre.rc.1",
13
+ "User-Agent" => "rcs/2.0.20.pre.rc.3",
14
14
  "X-Fern-Language" => "Ruby",
15
15
  "PINNACLE-API-KEY" => api_key.to_s
16
16
  }
@@ -57,9 +57,9 @@ module Pinnacle
57
57
  @webhooks ||= Pinnacle::Webhooks::Client.new(client: @raw_client)
58
58
  end
59
59
 
60
- # @return [Pinnacle::Calls::Client]
61
- def calls
62
- @calls ||= Pinnacle::Calls::Client.new(client: @raw_client)
60
+ # @return [Pinnacle::Faxes::Client]
61
+ def faxes
62
+ @faxes ||= Pinnacle::Faxes::Client.new(client: @raw_client)
63
63
  end
64
64
 
65
65
  # @return [Pinnacle::Forms::Client]
@@ -72,11 +72,6 @@ module Pinnacle
72
72
  @campaigns ||= Pinnacle::Campaigns::Client.new(client: @raw_client)
73
73
  end
74
74
 
75
- # @return [Pinnacle::Network::Client]
76
- def network
77
- @network ||= Pinnacle::Network::Client.new(client: @raw_client)
78
- end
79
-
80
75
  # @return [Pinnacle::Status::Client]
81
76
  def status
82
77
  @status ||= Pinnacle::Status::Client.new(client: @raw_client)
@@ -0,0 +1,235 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Faxes
5
+ class Client
6
+ # @param client [Pinnacle::Internal::Http::RawClient]
7
+ #
8
+ # @return [void]
9
+ def initialize(client:)
10
+ @client = client
11
+ end
12
+
13
+ # List your team's fax history, newest first.
14
+ #
15
+ # **HIPAA only:** this endpoint exists only in Pinnacle's HIPAA cell and is unavailable at
16
+ # `https://api.pinnacle.sh`.
17
+ #
18
+ # Results contain complete faxes only. Use `nextOffset` until it is null. The maximum page size is 100 records and
19
+ # the maximum offset is 100,000.
20
+ #
21
+ # @param request_options [Hash]
22
+ # @param params [Hash]
23
+ # @option request_options [String] :base_url
24
+ # @option request_options [Hash{String => Object}] :additional_headers
25
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
26
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
27
+ # @option request_options [Integer] :timeout_in_seconds
28
+ # @option params [Integer, nil] :limit
29
+ # @option params [Integer, nil] :offset
30
+ # @option params [Pinnacle::Types::FaxDirectionEnum, nil] :direction
31
+ #
32
+ # @return [Pinnacle::Types::ListFaxesResponse]
33
+ def list(request_options: {}, **params)
34
+ params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
35
+ query_params = {}
36
+ query_params["limit"] = params[:limit] if params.key?(:limit)
37
+ query_params["offset"] = params[:offset] if params.key?(:offset)
38
+ query_params["direction"] = params[:direction] if params.key?(:direction)
39
+
40
+ request = Pinnacle::Internal::JSON::Request.new(
41
+ base_url: request_options[:base_url],
42
+ method: "GET",
43
+ path: "fax",
44
+ query: query_params,
45
+ request_options: request_options
46
+ )
47
+ begin
48
+ response = @client.send(request)
49
+ rescue Net::HTTPRequestTimeout
50
+ raise Pinnacle::Errors::TimeoutError
51
+ end
52
+ code = response.code.to_i
53
+ if code.between?(200, 299)
54
+ Pinnacle::Types::ListFaxesResponse.load(response.body)
55
+ else
56
+ error_class = Pinnacle::Errors::ResponseError.subclass_for_code(code)
57
+ raise error_class.new(response.body, code: code)
58
+ end
59
+ end
60
+
61
+ # Send one PDF, TIFF, JPEG, PNG, DOC, DOCX, RTF, or TXT document from a configured fax number.
62
+ #
63
+ # **HIPAA only:** this endpoint exists only in Pinnacle's HIPAA cell. Complete HIPAA onboarding and use the
64
+ # connection details provided by Pinnacle. It is not available at `https://api.pinnacle.sh`.
65
+ #
66
+ # **Availability:** `from` must be an enabled fax number owned by your team. Fax sending is unavailable for
67
+ # development-mode teams and sandbox numbers. Each request accepts exactly one document; cover pages and
68
+ # per-request webhook URLs are not supported.
69
+ #
70
+ # **Source URL:** `mediaUrl` must be a publicly reachable HTTPS URL on port 443. Signed query parameters are
71
+ # supported. URLs with credentials, redirects, private or local network addresses, and non-200 responses are
72
+ # rejected. Downloads must complete within 30 seconds.
73
+ #
74
+ # **Document limits:** the document must contain 1–3,500 pages and be no larger than 50 MB. Documents over 350
75
+ # pages are split automatically and remain one fax in the API. File extensions and response headers do not
76
+ # override file validation.
77
+ #
78
+ # **Document safety:** encrypted files, macros, ActiveX controls, embedded objects, symbolic links, unsafe archive
79
+ # paths, and malformed documents are rejected.
80
+ #
81
+ # **Quality:** `HIGH` is the default and recommended choice for most documents. Use `NORMAL` when speed matters
82
+ # more than detail, `VERY_HIGH` for small text and fine lines, `ULTRA_LIGHT` for image-heavy documents, or
83
+ # `ULTRA_DARK` for text-heavy documents.
84
+ #
85
+ # **Asynchronous processing:** the request returns 202 after preparation is queued. Downloading, validation,
86
+ # conversion, splitting, and archival happen afterward. A 202 response does not mean the document is valid or
87
+ # delivered. Watch `FAX.STATUS` webhooks or retrieve the fax for the final result. The initial status is
88
+ # `PREPARING`, `reservedCost` is zero, and `hasMedia` is false.
89
+ #
90
+ # **Multipart delivery:** the original `id` identifies the complete fax across list, detail, cancellation,
91
+ # billing, media, and webhooks. Parts are sent in order. If a part fails, later parts are not sent. The fax
92
+ # becomes `FAILED`, and `partialContent` is true if any earlier pages were transmitted.
93
+ #
94
+ # **Pricing:** sent and received faxes cost $0.025 per transmitted page. Quality does not change the rate.
95
+ # Pinnacle reserves the estimated cost after preparation, charges only for transmitted pages, and returns unused
96
+ # reserved credits. If your balance is too low, the fax becomes `FAILED` with `failureReason:
97
+ # INSUFFICIENT_CREDITS`.
98
+ #
99
+ # **Delivery uncertainty:** Pinnacle does not automatically retry a fax after transmission may have started, which
100
+ # prevents duplicate delivery and charges. If transmission cannot be confirmed, status becomes
101
+ # `SUBMISSION_UNKNOWN` while Pinnacle reconciles the fax.
102
+ #
103
+ # **Idempotency:** reuse the same `Idempotency-Key` and identical body after a client timeout. The key is scoped
104
+ # to your team and covers `from`, `to`, `mediaUrl`, and `quality`. Reusing it with an identical body returns the
105
+ # existing logical fax; changing any of those fields returns 409 and never sends another fax.
106
+ #
107
+ # @param request_options [Hash]
108
+ # @param params [Pinnacle::Faxes::Types::SendFaxParams]
109
+ # @option request_options [String] :base_url
110
+ # @option request_options [Hash{String => Object}] :additional_headers
111
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
112
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
113
+ # @option request_options [Integer] :timeout_in_seconds
114
+ # @option params [String] :idempotency_key
115
+ #
116
+ # @return [Pinnacle::Types::Fax]
117
+ def send_(request_options: {}, **params)
118
+ params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
119
+ request_data = Pinnacle::Faxes::Types::SendFaxParams.new(params).to_h
120
+ non_body_param_names = %w[Idempotency-Key]
121
+ body = request_data.except(*non_body_param_names)
122
+
123
+ headers = {}
124
+ headers["Idempotency-Key"] = params[:idempotency_key] if params[:idempotency_key]
125
+
126
+ request = Pinnacle::Internal::JSON::Request.new(
127
+ base_url: request_options[:base_url],
128
+ method: "POST",
129
+ path: "fax",
130
+ headers: headers,
131
+ body: body,
132
+ request_options: request_options
133
+ )
134
+ begin
135
+ response = @client.send(request)
136
+ rescue Net::HTTPRequestTimeout
137
+ raise Pinnacle::Errors::TimeoutError
138
+ end
139
+ code = response.code.to_i
140
+ if code.between?(200, 299)
141
+ Pinnacle::Types::Fax.load(response.body)
142
+ else
143
+ error_class = Pinnacle::Errors::ResponseError.subclass_for_code(code)
144
+ raise error_class.new(response.body, code: code)
145
+ end
146
+ end
147
+
148
+ # Retrieve a fax and a one-hour signed document URL when its media is available.
149
+ #
150
+ # **HIPAA only:** this endpoint exists only in Pinnacle's HIPAA cell and is unavailable at
151
+ # `https://api.pinnacle.sh`.
152
+ #
153
+ # Only faxes owned by your team are accessible. Unknown IDs and records removed by your team's HIPAA retention
154
+ # policy return 404. `mediaUrl` is null until archival completes and expires one hour after retrieval; request the
155
+ # fax again for a new URL.
156
+ #
157
+ # @param request_options [Hash]
158
+ # @param params [Hash]
159
+ # @option request_options [String] :base_url
160
+ # @option request_options [Hash{String => Object}] :additional_headers
161
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
162
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
163
+ # @option request_options [Integer] :timeout_in_seconds
164
+ # @option params [String] :id
165
+ #
166
+ # @return [Pinnacle::Types::FaxDetail]
167
+ def get(request_options: {}, **params)
168
+ params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
169
+ request = Pinnacle::Internal::JSON::Request.new(
170
+ base_url: request_options[:base_url],
171
+ method: "GET",
172
+ path: "fax/#{URI.encode_uri_component(params[:id].to_s)}",
173
+ request_options: request_options
174
+ )
175
+ begin
176
+ response = @client.send(request)
177
+ rescue Net::HTTPRequestTimeout
178
+ raise Pinnacle::Errors::TimeoutError
179
+ end
180
+ code = response.code.to_i
181
+ if code.between?(200, 299)
182
+ Pinnacle::Types::FaxDetail.load(response.body)
183
+ else
184
+ error_class = Pinnacle::Errors::ResponseError.subclass_for_code(code)
185
+ raise error_class.new(response.body, code: code)
186
+ end
187
+ end
188
+
189
+ # Cancel an outbound fax before transmission starts.
190
+ #
191
+ # Cancellation stops queued preparation and every unsent part, releases the credit reservation, and changes the
192
+ # status to `CANCELLED`. Repeating a successful cancellation returns the same fax.
193
+ #
194
+ # Cancellation is unavailable for inbound faxes, completed faxes, and `SUBMISSION_UNKNOWN` faxes. Pinnacle returns
195
+ # 409 once transmission may have started, even when later parts remain unsent.
196
+ #
197
+ # **HIPAA only:** this endpoint exists only in Pinnacle's HIPAA cell and is unavailable at
198
+ # `https://api.pinnacle.sh`.
199
+ #
200
+ # Only a fax ID owned by your team is accepted. Unknown IDs return 404.
201
+ #
202
+ # @param request_options [Hash]
203
+ # @param params [Hash]
204
+ # @option request_options [String] :base_url
205
+ # @option request_options [Hash{String => Object}] :additional_headers
206
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
207
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
208
+ # @option request_options [Integer] :timeout_in_seconds
209
+ # @option params [String] :id
210
+ #
211
+ # @return [Pinnacle::Types::Fax]
212
+ def cancel(request_options: {}, **params)
213
+ params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
214
+ request = Pinnacle::Internal::JSON::Request.new(
215
+ base_url: request_options[:base_url],
216
+ method: "POST",
217
+ path: "fax/#{URI.encode_uri_component(params[:id].to_s)}/cancel",
218
+ request_options: request_options
219
+ )
220
+ begin
221
+ response = @client.send(request)
222
+ rescue Net::HTTPRequestTimeout
223
+ raise Pinnacle::Errors::TimeoutError
224
+ end
225
+ code = response.code.to_i
226
+ if code.between?(200, 299)
227
+ Pinnacle::Types::Fax.load(response.body)
228
+ else
229
+ error_class = Pinnacle::Errors::ResponseError.subclass_for_code(code)
230
+ raise error_class.new(response.body, code: code)
231
+ end
232
+ end
233
+ end
234
+ end
235
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Faxes
5
+ module Types
6
+ class FaxesListRequest < Internal::Types::Model
7
+ field :limit, -> { Integer }, optional: true, nullable: false
8
+
9
+ field :offset, -> { Integer }, optional: true, nullable: false
10
+
11
+ field :direction, -> { Pinnacle::Types::FaxDirectionEnum }, optional: true, nullable: false
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Faxes
5
+ module Types
6
+ class SendFaxParams < Internal::Types::Model
7
+ field :idempotency_key, -> { String }, optional: false, nullable: false, api_name: "Idempotency-Key"
8
+
9
+ field :from, -> { String }, optional: false, nullable: false
10
+
11
+ field :to, -> { String }, optional: false, nullable: false
12
+
13
+ field :media_url, -> { String }, optional: false, nullable: false, api_name: "mediaUrl"
14
+
15
+ field :quality, -> { Pinnacle::Types::FaxQualityEnum }, optional: true, nullable: false
16
+ end
17
+ end
18
+ end
19
+ end
@@ -174,7 +174,7 @@ module Pinnacle
174
174
  # for embedding the URL in your own outreach.
175
175
  #
176
176
  # On completion, a `FORM.SUBMISSION` webhook event is delivered to webhooks subscribed to the sender. See
177
- # [Receiving Message, Call, and User Events](/guides/messages/receiving).
177
+ # [Receiving Messages and User Events](/guides/messages/receiving).
178
178
  #
179
179
  # @param request_options [Hash]
180
180
  # @param params [Pinnacle::Types::SendFormParams]
@@ -3,7 +3,6 @@
3
3
  require_relative "wrapper/messages/client"
4
4
  require_relative "wrapper/tools/file_uploader"
5
5
  require_relative "wrapper/tools/client"
6
- require_relative "wrapper/voice/client"
7
6
 
8
7
  module Pinnacle
9
8
  # Client class that extends PinnacleBaseClient with custom methods for webhook processing and file uploads.
@@ -21,12 +20,5 @@ module Pinnacle
21
20
  def tools
22
21
  @tools ||= Pinnacle::Wrapper::Tools::Client.new(client: @raw_client)
23
22
  end
24
-
25
- # Returns an enhanced voice client with WebSocket stream helpers.
26
- #
27
- # @return [Pinnacle::Wrapper::Voice::Client]
28
- def voice
29
- @voice ||= Pinnacle::Wrapper::Voice::Client.new(client: @raw_client)
30
- end
31
23
  end
32
24
  end
@@ -5,7 +5,7 @@ module Pinnacle
5
5
  # Raw per-carrier launch + verification state for the agent. Each
6
6
  # value is tri-state — `null` means "no launch requested" or "not
7
7
  # sent yet"; `false` means "pending" / "sent"; `true` means
8
- # "launched" / "verified". Use the [GET /rcs/{agentId}](/api-reference/rcs-agents/get-agent)
8
+ # "launched" / "verified". Use the [GET /rcs/{agentId}](/api-reference/rcs-agents/get)
9
9
  # endpoint for the resolved enum representation.
10
10
  class AgentSummaryCarrierLaunches < Internal::Types::Model
11
11
  field :att, -> { Internal::Types::Boolean }, optional: true, nullable: false, api_name: "ATT"
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ class Fax < Internal::Types::Model
6
+ field :id, -> { String }, optional: false, nullable: false
7
+
8
+ field :direction, -> { Pinnacle::Types::FaxDirectionEnum }, optional: false, nullable: false
9
+
10
+ field :from, -> { String }, optional: false, nullable: false
11
+
12
+ field :to, -> { String }, optional: false, nullable: false
13
+
14
+ field :status, -> { Pinnacle::Types::FaxStatusEnum }, optional: false, nullable: false
15
+
16
+ field :pages, -> { Integer }, optional: false, nullable: false
17
+
18
+ field :duration_seconds, -> { Integer }, optional: false, nullable: false, api_name: "durationSeconds"
19
+
20
+ field :partial_content, -> { Internal::Types::Boolean }, optional: false, nullable: false, api_name: "partialContent"
21
+
22
+ field :failure_reason, -> { Pinnacle::Types::FaxFailureReasonEnum }, optional: false, nullable: true, api_name: "failureReason"
23
+
24
+ field :cost, -> { Integer }, optional: false, nullable: false
25
+
26
+ field :reserved_cost, -> { Integer }, optional: false, nullable: false, api_name: "reservedCost"
27
+
28
+ field :billing_status, -> { Pinnacle::Types::FaxBillingStatusEnum }, optional: false, nullable: false, api_name: "billingStatus"
29
+
30
+ field :has_media, -> { Internal::Types::Boolean }, optional: false, nullable: false, api_name: "hasMedia"
31
+
32
+ field :created_at, -> { String }, optional: false, nullable: false, api_name: "createdAt"
33
+
34
+ field :updated_at, -> { String }, optional: false, nullable: false, api_name: "updatedAt"
35
+ end
36
+ end
37
+ end
@@ -2,13 +2,11 @@
2
2
 
3
3
  module Pinnacle
4
4
  module Types
5
- module RecordingState
5
+ module FaxBillingStatusEnum
6
6
  extend Pinnacle::Internal::Types::Enum
7
7
 
8
8
  PENDING = "PENDING"
9
- READY = "READY"
10
- FAILED = "FAILED"
11
- DELETED = "DELETED"
9
+ SETTLED = "SETTLED"
12
10
  end
13
11
  end
14
12
  end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ class FaxDetail < Internal::Types::Model
6
+ field :id, -> { String }, optional: false, nullable: false
7
+
8
+ field :direction, -> { Pinnacle::Types::FaxDirectionEnum }, optional: false, nullable: false
9
+
10
+ field :from, -> { String }, optional: false, nullable: false
11
+
12
+ field :to, -> { String }, optional: false, nullable: false
13
+
14
+ field :status, -> { Pinnacle::Types::FaxStatusEnum }, optional: false, nullable: false
15
+
16
+ field :pages, -> { Integer }, optional: false, nullable: false
17
+
18
+ field :duration_seconds, -> { Integer }, optional: false, nullable: false, api_name: "durationSeconds"
19
+
20
+ field :partial_content, -> { Internal::Types::Boolean }, optional: false, nullable: false, api_name: "partialContent"
21
+
22
+ field :failure_reason, -> { Pinnacle::Types::FaxFailureReasonEnum }, optional: false, nullable: true, api_name: "failureReason"
23
+
24
+ field :cost, -> { Integer }, optional: false, nullable: false
25
+
26
+ field :reserved_cost, -> { Integer }, optional: false, nullable: false, api_name: "reservedCost"
27
+
28
+ field :billing_status, -> { Pinnacle::Types::FaxBillingStatusEnum }, optional: false, nullable: false, api_name: "billingStatus"
29
+
30
+ field :has_media, -> { Internal::Types::Boolean }, optional: false, nullable: false, api_name: "hasMedia"
31
+
32
+ field :created_at, -> { String }, optional: false, nullable: false, api_name: "createdAt"
33
+
34
+ field :updated_at, -> { String }, optional: false, nullable: false, api_name: "updatedAt"
35
+
36
+ field :media_url, -> { String }, optional: false, nullable: true, api_name: "mediaUrl"
37
+ end
38
+ end
39
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Pinnacle
4
4
  module Types
5
- module CallDirection
5
+ module FaxDirectionEnum
6
6
  extend Pinnacle::Internal::Types::Enum
7
7
 
8
8
  INBOUND = "INBOUND"
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Fax webhook notification. `FAX.STATUS` reports lifecycle changes, and `FAX.RECEIVED` means an inbound fax is
6
+ # ready.
7
+ #
8
+ # Webhooks intentionally omit `mediaUrl`. When `fax.hasMedia` is true, call the authenticated `GET /fax/{fax.id}`
9
+ # endpoint to receive a signed document URL that expires after one hour. Treat the URL as sensitive: do not log or
10
+ # store it, and request a new one after it expires.
11
+ class FaxEvent < Internal::Types::Model
12
+ field :id, -> { String }, optional: false, nullable: false
13
+
14
+ field :type, -> { Pinnacle::Types::FaxEventType }, optional: false, nullable: false
15
+
16
+ field :fax, -> { Pinnacle::Types::Fax }, optional: false, nullable: false
17
+ end
18
+ end
19
+ end
@@ -2,11 +2,11 @@
2
2
 
3
3
  module Pinnacle
4
4
  module Types
5
- module SilentAuthCheckResponseStatus
5
+ module FaxEventType
6
6
  extend Pinnacle::Internal::Types::Enum
7
7
 
8
- COMPLETED = "completed"
9
- FAILED = "failed"
8
+ FAX_STATUS = "FAX.STATUS"
9
+ FAX_RECEIVED = "FAX.RECEIVED"
10
10
  end
11
11
  end
12
12
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ module FaxFailureReasonEnum
6
+ extend Pinnacle::Internal::Types::Enum
7
+
8
+ MEDIA_PREPARATION_FAILED = "MEDIA_PREPARATION_FAILED"
9
+ MEDIA_PREPARATION_INTERRUPTED = "MEDIA_PREPARATION_INTERRUPTED"
10
+ INSUFFICIENT_CREDITS = "INSUFFICIENT_CREDITS"
11
+ SUBMISSION_UNCONFIRMED = "SUBMISSION_UNCONFIRMED"
12
+ SUBMISSION_REJECTED = "SUBMISSION_REJECTED"
13
+ DELIVERY_FAILED = "DELIVERY_FAILED"
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ module FaxQualityEnum
6
+ extend Pinnacle::Internal::Types::Enum
7
+
8
+ NORMAL = "NORMAL"
9
+ HIGH = "HIGH"
10
+ VERY_HIGH = "VERY_HIGH"
11
+ ULTRA_LIGHT = "ULTRA_LIGHT"
12
+ ULTRA_DARK = "ULTRA_DARK"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ module FaxStatusEnum
6
+ extend Pinnacle::Internal::Types::Enum
7
+
8
+ PREPARING = "PREPARING"
9
+ SUBMITTING = "SUBMITTING"
10
+ SUBMISSION_UNKNOWN = "SUBMISSION_UNKNOWN"
11
+ QUEUED = "QUEUED"
12
+ PROCESSING = "PROCESSING"
13
+ SENDING = "SENDING"
14
+ RECEIVING = "RECEIVING"
15
+ DELIVERED = "DELIVERED"
16
+ RECEIVED = "RECEIVED"
17
+ FAILED = "FAILED"
18
+ CANCELLED = "CANCELLED"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ class ListFaxesResponse < Internal::Types::Model
6
+ field :data, -> { Internal::Types::Array[Pinnacle::Types::Fax] }, optional: false, nullable: false
7
+
8
+ field :next_offset, -> { Integer }, optional: false, nullable: true, api_name: "nextOffset"
9
+ end
10
+ end
11
+ end
@@ -10,7 +10,8 @@ module Pinnacle
10
10
  USER_TYPING = "USER.TYPING"
11
11
  FORM_SUBMISSION = "FORM.SUBMISSION"
12
12
  CAMPAIGN_STATUS = "CAMPAIGN.STATUS"
13
- CALL_STATUS = "CALL.STATUS"
13
+ FAX_STATUS = "FAX.STATUS"
14
+ FAX_RECEIVED = "FAX.RECEIVED"
14
15
  end
15
16
  end
16
17
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pinnacle
4
- VERSION = "2.0.20.pre.rc.2"
4
+ VERSION = "2.0.20.pre.rc.3"
5
5
  end
@@ -5,7 +5,6 @@ require_relative "../../types/message_event"
5
5
  require_relative "../../types/user_event"
6
6
  require_relative "../../types/form_submission_event"
7
7
  require_relative "../../types/campaign_status_event"
8
- require_relative "../../types/call_status_event"
9
8
 
10
9
  module Pinnacle
11
10
  module Wrapper
@@ -24,7 +23,7 @@ module Pinnacle
24
23
  # @param request [Hash] Request with :headers and :body keys
25
24
  # @param secret [String, nil] Webhook secret (falls back to PINNACLE_SIGNING_SECRET env var)
26
25
  #
27
- # @return [Pinnacle::Types::MessageEvent, Pinnacle::Types::UserEvent, Pinnacle::Types::FormSubmissionEvent, Pinnacle::Types::CampaignStatusEvent, Pinnacle::Types::CallStatusEvent]
26
+ # @return [Pinnacle::Types::MessageEvent, Pinnacle::Types::UserEvent, Pinnacle::Types::FormSubmissionEvent, Pinnacle::Types::CampaignStatusEvent]
28
27
  # @raise [Pinnacle::Errors::UnauthorizedError] If webhook signature is invalid or missing
29
28
  # @raise [Pinnacle::Errors::ClientError] If request body cannot be parsed
30
29
  def process(request, secret: nil)
@@ -67,8 +66,6 @@ module Pinnacle
67
66
  Pinnacle::Types::FormSubmissionEvent.coerce(parsed)
68
67
  when "CAMPAIGN.STATUS"
69
68
  Pinnacle::Types::CampaignStatusEvent.coerce(parsed)
70
- when "CALL.STATUS"
71
- Pinnacle::Types::CallStatusEvent.coerce(parsed)
72
69
  else
73
70
  Pinnacle::Types::MessageEvent.coerce(parsed)
74
71
  end