rcs 2.0.16 → 2.0.18
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 +6 -5
- data/.rubocop.yml +5 -15
- data/lib/pinnacle/brands/client.rb +3 -3
- data/lib/pinnacle/campaigns/dlc/client.rb +2 -2
- data/lib/pinnacle/campaigns/rcs/client.rb +2 -2
- data/lib/pinnacle/campaigns/toll_free/client.rb +2 -2
- data/lib/pinnacle/client.rb +6 -1
- data/lib/pinnacle/conversations/client.rb +1 -1
- data/lib/pinnacle/forms/client.rb +217 -0
- data/lib/pinnacle/forms/submissions/client.rb +56 -0
- data/lib/pinnacle/forms/submissions/types/list_form_submissions_params.rb +15 -0
- data/lib/pinnacle/forms/types/forms_send_response.rb +14 -0
- data/lib/pinnacle/forms/types/list_forms_params.rb +12 -0
- data/lib/pinnacle/forms/types/update_form_params.rb +18 -0
- data/lib/pinnacle/internal/http/base_request.rb +14 -0
- data/lib/pinnacle/internal/http/raw_client.rb +21 -3
- data/lib/pinnacle/internal/json/request.rb +6 -4
- data/lib/pinnacle/internal/multipart/multipart_request.rb +6 -4
- data/lib/pinnacle/internal/types/boolean.rb +1 -1
- data/lib/pinnacle/internal/types/union.rb +1 -1
- data/lib/pinnacle/internal/types/utils.rb +2 -2
- data/lib/pinnacle/messages/client.rb +1 -1
- data/lib/pinnacle/messages/schedule/client.rb +1 -1
- data/lib/pinnacle/rcs/client.rb +1 -1
- data/lib/pinnacle/rcs/test/client.rb +3 -3
- data/lib/pinnacle/status/get/client.rb +5 -5
- data/lib/pinnacle/tools/url/client.rb +2 -2
- data/lib/pinnacle/types/address_field.rb +14 -0
- data/lib/pinnacle/types/agent_summary_carrier_launches.rb +7 -1
- data/lib/pinnacle/types/campaign_status_event.rb +21 -0
- data/lib/pinnacle/types/campaign_status_event_agent.rb +11 -0
- data/lib/pinnacle/types/campaign_status_event_brand.rb +11 -0
- data/lib/pinnacle/types/campaign_status_event_campaign.rb +11 -0
- data/lib/pinnacle/types/campaign_status_event_campaign_type.rb +13 -0
- data/lib/pinnacle/types/campaign_status_event_carrier_launches.rb +13 -0
- data/lib/pinnacle/types/campaign_status_event_carrier_launches_carriers.rb +16 -0
- data/lib/pinnacle/types/campaign_status_event_carrier_launches_verification.rb +15 -0
- data/lib/pinnacle/types/carrier_launches.rb +5 -5
- data/lib/pinnacle/types/carrier_launches_carriers.rb +16 -0
- data/lib/pinnacle/types/carrier_launches_verification.rb +15 -0
- data/lib/pinnacle/types/checkbox_field.rb +13 -0
- data/lib/pinnacle/types/color_field.rb +8 -0
- data/lib/pinnacle/types/create_form_request.rb +23 -0
- data/lib/pinnacle/types/date_field.rb +12 -0
- data/lib/pinnacle/types/datetime_field.rb +12 -0
- data/lib/pinnacle/types/email_field.rb +10 -0
- data/lib/pinnacle/types/field_base.rb +14 -0
- data/lib/pinnacle/types/form.rb +22 -0
- data/lib/pinnacle/types/form_background.rb +17 -0
- data/lib/pinnacle/types/form_background_gradient.rb +12 -0
- data/lib/pinnacle/types/form_background_image.rb +13 -0
- data/lib/pinnacle/types/form_background_pattern.rb +10 -0
- data/lib/pinnacle/types/form_background_pattern_preset.rb +16 -0
- data/lib/pinnacle/types/form_background_solid.rb +34 -0
- data/lib/pinnacle/types/form_color_palette.rb +12 -0
- data/lib/pinnacle/types/form_definition.rb +15 -0
- data/lib/pinnacle/types/form_field.rb +29 -0
- data/lib/pinnacle/types/form_field_option.rb +11 -0
- data/lib/pinnacle/types/form_gradient.rb +12 -0
- data/lib/pinnacle/types/form_gradient_angle.rb +12 -0
- data/lib/pinnacle/types/form_id_reference.rb +23 -0
- data/lib/pinnacle/types/form_submission.rb +19 -0
- data/lib/pinnacle/types/form_submission_answer.rb +20 -0
- data/lib/pinnacle/types/form_submission_event.rb +15 -0
- data/lib/pinnacle/types/form_submission_event_conversation.rb +20 -0
- data/lib/pinnacle/types/form_submission_event_form.rb +12 -0
- data/lib/pinnacle/types/form_submission_event_submission.rb +17 -0
- data/lib/pinnacle/types/form_submitted_field.rb +13 -0
- data/lib/pinnacle/types/form_theme_override.rb +25 -0
- data/lib/pinnacle/types/form_theme_override_colors.rb +12 -0
- data/lib/pinnacle/types/form_theme_override_content_alignment.rb +13 -0
- data/lib/pinnacle/types/form_theme_override_corner_radius.rb +13 -0
- data/lib/pinnacle/types/form_theme_override_font_family.rb +15 -0
- data/lib/pinnacle/types/form_theme_override_theme_mode.rb +13 -0
- data/lib/pinnacle/types/list_form_submissions_response.rb +12 -0
- data/lib/pinnacle/types/list_forms_response.rb +12 -0
- data/lib/pinnacle/types/message_event.rb +1 -1
- data/lib/pinnacle/types/message_event_type.rb +12 -0
- data/lib/pinnacle/types/number_field.rb +13 -0
- data/lib/pinnacle/types/phone_field.rb +11 -0
- data/lib/pinnacle/types/radio_field.rb +10 -0
- data/lib/pinnacle/types/range_field.rb +12 -0
- data/lib/pinnacle/types/rating_field.rb +11 -0
- data/lib/pinnacle/types/scheduled_form_send_response_form.rb +10 -0
- data/lib/pinnacle/types/scheduled_form_send_response_submission.rb +10 -0
- data/lib/pinnacle/types/scheduled_form_send_result.rb +13 -0
- data/lib/pinnacle/types/select_field.rb +11 -0
- data/lib/pinnacle/types/send_form_options.rb +11 -0
- data/lib/pinnacle/types/send_form_options_webview_mode.rb +13 -0
- data/lib/pinnacle/types/send_form_params.rb +20 -0
- data/lib/pinnacle/types/send_form_result.rb +17 -0
- data/lib/pinnacle/types/send_form_via_rcs_params.rb +14 -0
- data/lib/pinnacle/types/send_form_via_rcs_request_fallback.rb +10 -0
- data/lib/pinnacle/types/send_form_via_rcs_request_form.rb +13 -0
- data/lib/pinnacle/types/send_form_via_sms_params.rb +13 -0
- data/lib/pinnacle/types/send_form_via_sms_request_form.rb +12 -0
- data/lib/pinnacle/types/text_field.rb +13 -0
- data/lib/pinnacle/types/textarea_field.rb +13 -0
- data/lib/pinnacle/types/time_field.rb +12 -0
- data/lib/pinnacle/types/url_field.rb +10 -0
- data/lib/pinnacle/types/user_event_conversation.rb +1 -1
- data/lib/pinnacle/types/verification_status.rb +13 -0
- data/lib/pinnacle/types/webhook_event_enum.rb +2 -0
- data/lib/pinnacle/version.rb +1 -1
- data/lib/pinnacle/wrapper/messages/client.rb +11 -2
- data/lib/pinnacle.rb +79 -2
- data/lib/rcs.rb +206 -15
- data/reference.md +807 -300
- metadata +79 -2
|
@@ -81,10 +81,10 @@ module Pinnacle
|
|
|
81
81
|
}
|
|
82
82
|
return type.coerce(value, strict: strict)
|
|
83
83
|
else
|
|
84
|
-
value
|
|
84
|
+
value # rubocop:disable Lint/Void
|
|
85
85
|
end
|
|
86
86
|
else
|
|
87
|
-
value
|
|
87
|
+
value # rubocop:disable Lint/Void
|
|
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/#{params[:id]}",
|
|
30
|
+
path: "messages/#{URI.encode_uri_component(params[:id].to_s)}",
|
|
31
31
|
request_options: request_options
|
|
32
32
|
)
|
|
33
33
|
begin
|
|
@@ -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/#{params[:id]}",
|
|
34
|
+
path: "messages/schedule/#{URI.encode_uri_component(params[:id].to_s)}",
|
|
35
35
|
request_options: request_options
|
|
36
36
|
)
|
|
37
37
|
begin
|
data/lib/pinnacle/rcs/client.rb
CHANGED
|
@@ -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/#{params[:agent_id]}",
|
|
33
|
+
path: "rcs/#{URI.encode_uri_component(params[:agent_id].to_s)}",
|
|
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/#{params[:agent_id]}",
|
|
118
|
+
path: "rcs/test/agents/#{URI.encode_uri_component(params[:agent_id].to_s)}",
|
|
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/#{params[:agent_id]}/whitelist",
|
|
189
|
+
path: "rcs/test/agents/#{URI.encode_uri_component(params[:agent_id].to_s)}/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/#{params[:agent_id]}/numbers",
|
|
255
|
+
path: "rcs/test/agents/#{URI.encode_uri_component(params[:agent_id].to_s)}/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/#{params[:brand_id]}",
|
|
31
|
+
path: "status/brand/#{URI.encode_uri_component(params[:brand_id].to_s)}",
|
|
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/#{params[:campaign_id]}",
|
|
65
|
+
path: "status/toll-free-campaign/#{URI.encode_uri_component(params[:campaign_id].to_s)}",
|
|
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/#{params[:campaign_id]}",
|
|
99
|
+
path: "status/dlc-campaign/#{URI.encode_uri_component(params[:campaign_id].to_s)}",
|
|
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/#{params[:campaign_id]}",
|
|
133
|
+
path: "status/rcs-campaign/#{URI.encode_uri_component(params[:campaign_id].to_s)}",
|
|
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/#{params[:phone_number]}",
|
|
169
|
+
path: "status/phone-number/#{URI.encode_uri_component(params[:phone_number].to_s)}",
|
|
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/#{params[:link_id]}",
|
|
65
|
+
path: "tools/url/#{URI.encode_uri_component(params[:link_id].to_s)}",
|
|
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/#{params[:link_id]}",
|
|
104
|
+
path: "tools/url/#{URI.encode_uri_component(params[:link_id].to_s)}",
|
|
105
105
|
body: body,
|
|
106
106
|
request_options: request_options
|
|
107
107
|
)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# Free-form text input backed by a client-side Google Places autocomplete. Shares text-field validation (length /
|
|
6
|
+
# pattern); the place lookup happens entirely in the browser and is purely for suggestion UX.
|
|
7
|
+
class AddressField < Internal::Types::Model
|
|
8
|
+
field :placeholder, -> { String }, optional: true, nullable: false
|
|
9
|
+
field :pattern, -> { String }, optional: true, nullable: false
|
|
10
|
+
field :min_length, -> { Integer }, optional: true, nullable: false
|
|
11
|
+
field :max_length, -> { Integer }, optional: true, nullable: false
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -2,12 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
module Pinnacle
|
|
4
4
|
module Types
|
|
5
|
-
#
|
|
5
|
+
# Raw per-carrier launch + verification state for the agent. Each
|
|
6
|
+
# value is tri-state — `null` means "no launch requested" or "not
|
|
7
|
+
# sent yet"; `false` means "pending" / "sent"; `true` means
|
|
8
|
+
# "launched" / "verified". Use the [GET /rcs/{agentId}](/api-reference/rcs-agents/get)
|
|
9
|
+
# endpoint for the resolved enum representation.
|
|
6
10
|
class AgentSummaryCarrierLaunches < Internal::Types::Model
|
|
7
11
|
field :att, -> { Internal::Types::Boolean }, optional: true, nullable: false, api_name: "ATT"
|
|
8
12
|
field :others, -> { Internal::Types::Boolean }, optional: true, nullable: false, api_name: "OTHERS"
|
|
9
13
|
field :tmobile, -> { Internal::Types::Boolean }, optional: true, nullable: false, api_name: "TMOBILE"
|
|
10
14
|
field :verizon, -> { Internal::Types::Boolean }, optional: true, nullable: false, api_name: "VERIZON"
|
|
15
|
+
field :aegis, -> { Internal::Types::Boolean }, optional: true, nullable: false, api_name: "AEGIS"
|
|
16
|
+
field :google, -> { Internal::Types::Boolean }, optional: true, nullable: false, api_name: "GOOGLE"
|
|
11
17
|
end
|
|
12
18
|
end
|
|
13
19
|
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# Webhook body delivered to subscribers of `CAMPAIGN.STATUS` whenever
|
|
6
|
+
# an RCS campaign's per-carrier launch status or verification status
|
|
7
|
+
# (AEGIS / Google) changes. `CAMPAIGN.STATUS` is only supported for
|
|
8
|
+
# RCS agent senders — the attach call rejects phone-number senders
|
|
9
|
+
# with `400 Bad Request`. Verify the `PINNACLE-SIGNING-SECRET` header
|
|
10
|
+
# matches the signing secret of the webhook this event was delivered
|
|
11
|
+
# to before trusting the payload.
|
|
12
|
+
class CampaignStatusEvent < Internal::Types::Model
|
|
13
|
+
field :type, -> { String }, optional: false, nullable: false
|
|
14
|
+
field :agent, -> { Pinnacle::Types::CampaignStatusEventAgent }, optional: false, nullable: false
|
|
15
|
+
field :campaign, -> { Pinnacle::Types::CampaignStatusEventCampaign }, optional: false, nullable: false
|
|
16
|
+
field :brand, -> { Pinnacle::Types::CampaignStatusEventBrand }, optional: false, nullable: false
|
|
17
|
+
field :carrier_launches, -> { Pinnacle::Types::CampaignStatusEventCarrierLaunches }, optional: false, nullable: false, api_name: "carrierLaunches"
|
|
18
|
+
field :updated_at, -> { String }, optional: false, nullable: false, api_name: "updatedAt"
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# The RCS agent the campaign-status update is for.
|
|
6
|
+
class CampaignStatusEventAgent < Internal::Types::Model
|
|
7
|
+
field :id, -> { String }, optional: false, nullable: false
|
|
8
|
+
field :name, -> { String }, optional: false, nullable: true
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# Reference to the brand owning the agent's connected campaign.
|
|
6
|
+
class CampaignStatusEventBrand < Internal::Types::Model
|
|
7
|
+
field :public_id, -> { String }, optional: false, nullable: true, api_name: "publicId"
|
|
8
|
+
field :name, -> { String }, optional: false, nullable: true
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# Reference to the connected campaign.
|
|
6
|
+
class CampaignStatusEventCampaign < Internal::Types::Model
|
|
7
|
+
field :public_id, -> { String }, optional: false, nullable: true, api_name: "publicId"
|
|
8
|
+
field :type, -> { Pinnacle::Types::CampaignStatusEventCampaignType }, optional: false, nullable: false
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# Resolved per-key launch status for the campaign's agent. Carrier
|
|
6
|
+
# statuses live under `carriers` and verifier statuses under
|
|
7
|
+
# `verification`.
|
|
8
|
+
class CampaignStatusEventCarrierLaunches < Internal::Types::Model
|
|
9
|
+
field :carriers, -> { Pinnacle::Types::CampaignStatusEventCarrierLaunchesCarriers }, optional: false, nullable: false
|
|
10
|
+
field :verification, -> { Pinnacle::Types::CampaignStatusEventCarrierLaunchesVerification }, optional: false, nullable: false
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# Per-carrier launch status. Each carrier moves through
|
|
6
|
+
# `NOT_LAUNCHED` → `PENDING` → `LAUNCHED` as Pinnacle submits the
|
|
7
|
+
# agent for review and the carrier accepts it. The agent is only
|
|
8
|
+
# deliverable on a carrier once that carrier reports `LAUNCHED`.
|
|
9
|
+
class CampaignStatusEventCarrierLaunchesCarriers < Internal::Types::Model
|
|
10
|
+
field :att, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "ATT"
|
|
11
|
+
field :tmobile, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "TMOBILE"
|
|
12
|
+
field :verizon, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "VERIZON"
|
|
13
|
+
field :others, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "OTHERS"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# External verifier status. AEGIS (the U.S. carrier vetting
|
|
6
|
+
# authority used by AT&T, T-Mobile, and Verizon) and Google each
|
|
7
|
+
# send a verification email to the brand's contact address. Each
|
|
8
|
+
# verifier moves through `NOT_SENT` → `SENT` → `VERIFIED` once
|
|
9
|
+
# the brand replies and the verifier confirms ownership.
|
|
10
|
+
class CampaignStatusEventCarrierLaunchesVerification < Internal::Types::Model
|
|
11
|
+
field :aegis, -> { Pinnacle::Types::VerificationStatus }, optional: false, nullable: false, api_name: "AEGIS"
|
|
12
|
+
field :google, -> { Pinnacle::Types::VerificationStatus }, optional: false, nullable: false, api_name: "GOOGLE"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
module Pinnacle
|
|
4
4
|
module Types
|
|
5
|
-
# Per-carrier launch status.
|
|
5
|
+
# Per-carrier launch status grouped by category. `carriers` covers
|
|
6
|
+
# AT&T / T-Mobile / Verizon / other carriers; `verification` covers
|
|
7
|
+
# the AEGIS and Google verification flows.
|
|
6
8
|
class CarrierLaunches < Internal::Types::Model
|
|
7
|
-
field :
|
|
8
|
-
field :
|
|
9
|
-
field :verizon, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "VERIZON"
|
|
10
|
-
field :others, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "OTHERS"
|
|
9
|
+
field :carriers, -> { Pinnacle::Types::CarrierLaunchesCarriers }, optional: false, nullable: false
|
|
10
|
+
field :verification, -> { Pinnacle::Types::CarrierLaunchesVerification }, optional: false, nullable: false
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# Per-carrier launch status. Each carrier moves through
|
|
6
|
+
# `NOT_LAUNCHED` → `PENDING` → `LAUNCHED` as Pinnacle submits the
|
|
7
|
+
# agent for review and the carrier accepts it. The agent is only
|
|
8
|
+
# deliverable on a carrier once that carrier reports `LAUNCHED`.
|
|
9
|
+
class CarrierLaunchesCarriers < Internal::Types::Model
|
|
10
|
+
field :att, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "ATT"
|
|
11
|
+
field :tmobile, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "TMOBILE"
|
|
12
|
+
field :verizon, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "VERIZON"
|
|
13
|
+
field :others, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "OTHERS"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# External verifier status. AEGIS (the U.S. carrier vetting
|
|
6
|
+
# authority used by AT&T, T-Mobile, and Verizon) and Google each
|
|
7
|
+
# send a verification email to the brand's contact address. Each
|
|
8
|
+
# verifier moves through `NOT_SENT` → `SENT` → `VERIFIED` once
|
|
9
|
+
# the brand replies and the verifier confirms ownership.
|
|
10
|
+
class CarrierLaunchesVerification < Internal::Types::Model
|
|
11
|
+
field :aegis, -> { Pinnacle::Types::VerificationStatus }, optional: false, nullable: false, api_name: "AEGIS"
|
|
12
|
+
field :google, -> { Pinnacle::Types::VerificationStatus }, optional: false, nullable: false, api_name: "GOOGLE"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# Multi-select checkbox group when `options` is provided. If `options` is omitted the field renders as a single
|
|
6
|
+
# boolean checkbox.
|
|
7
|
+
class CheckboxField < Internal::Types::Model
|
|
8
|
+
field :options, -> { Internal::Types::Array[Pinnacle::Types::FormFieldOption] }, optional: true, nullable: false
|
|
9
|
+
field :min_selected, -> { Integer }, optional: true, nullable: false
|
|
10
|
+
field :max_selected, -> { Integer }, optional: true, nullable: false
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
module CreateFormRequest
|
|
6
|
+
# CreateFormRequest is an alias for FormDefinition
|
|
7
|
+
|
|
8
|
+
# @option str [String]
|
|
9
|
+
#
|
|
10
|
+
# @return [untyped]
|
|
11
|
+
def self.load(str)
|
|
12
|
+
::JSON.parse(str)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @option value [untyped]
|
|
16
|
+
#
|
|
17
|
+
# @return [String]
|
|
18
|
+
def self.dump(value)
|
|
19
|
+
::JSON.generate(value)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# Date picker. `min`/`max` accept `YYYY-MM-DD`.
|
|
6
|
+
class DateField < Internal::Types::Model
|
|
7
|
+
field :placeholder, -> { String }, optional: true, nullable: false
|
|
8
|
+
field :min, -> { String }, optional: true, nullable: false
|
|
9
|
+
field :max, -> { 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
|
+
# Local-datetime picker. `min`/`max` accept ISO 8601 timestamps.
|
|
6
|
+
class DatetimeField < Internal::Types::Model
|
|
7
|
+
field :placeholder, -> { String }, optional: true, nullable: false
|
|
8
|
+
field :min, -> { String }, optional: true, nullable: false
|
|
9
|
+
field :max, -> { String }, optional: true, nullable: false
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# Email input. Server rejects values that fail RFC 5322 validation.
|
|
6
|
+
class EmailField < Internal::Types::Model
|
|
7
|
+
field :placeholder, -> { String }, optional: true, nullable: false
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# Properties shared by every field variant. Not intended to be referenced directly — use a specific field type from
|
|
6
|
+
# `FormField`.
|
|
7
|
+
class FieldBase < Internal::Types::Model
|
|
8
|
+
field :key, -> { String }, optional: false, nullable: false
|
|
9
|
+
field :label, -> { String }, optional: false, nullable: false
|
|
10
|
+
field :required, -> { Internal::Types::Boolean }, optional: true, nullable: false
|
|
11
|
+
field :help_text, -> { String }, optional: true, nullable: false
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# A hosted form definition.
|
|
6
|
+
class Form < Internal::Types::Model
|
|
7
|
+
field :id, -> { String }, optional: false, nullable: false
|
|
8
|
+
field :url, -> { String }, optional: false, nullable: false
|
|
9
|
+
field :name, -> { String }, optional: false, nullable: true
|
|
10
|
+
field :description, -> { String }, optional: false, nullable: true
|
|
11
|
+
field :fields, -> { Internal::Types::Array[Pinnacle::Types::FormField] }, optional: false, nullable: false
|
|
12
|
+
field :can_update, -> { Internal::Types::Boolean }, optional: false, nullable: false
|
|
13
|
+
field :expires_at, -> { String }, optional: false, nullable: true
|
|
14
|
+
field :theme_override, -> { Pinnacle::Types::FormThemeOverride }, optional: false, nullable: true
|
|
15
|
+
field :submission_count, -> { Integer }, optional: false, nullable: false
|
|
16
|
+
field :last_submitted_at, -> { String }, optional: false, nullable: true
|
|
17
|
+
field :archived_at, -> { String }, optional: false, nullable: true
|
|
18
|
+
field :created_at, -> { String }, optional: false, nullable: false
|
|
19
|
+
field :updated_at, -> { String }, optional: false, nullable: false
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# Background layer for the form page. Discriminated by `type`.
|
|
6
|
+
class FormBackground < Internal::Types::Model
|
|
7
|
+
extend Pinnacle::Internal::Types::Union
|
|
8
|
+
|
|
9
|
+
discriminant :type
|
|
10
|
+
|
|
11
|
+
member -> { Pinnacle::Types::FormBackgroundSolid }, key: "SOLID"
|
|
12
|
+
member -> { Pinnacle::Types::FormBackgroundGradient }, key: "GRADIENT"
|
|
13
|
+
member -> { Pinnacle::Types::FormBackgroundImage }, key: "IMAGE"
|
|
14
|
+
member -> { Pinnacle::Types::FormBackgroundPattern }, key: "PATTERN"
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# Two-stop linear gradient. Supply separate light- and dark-mode gradients; the renderer picks based on
|
|
6
|
+
# `theme_mode`.
|
|
7
|
+
class FormBackgroundGradient < Internal::Types::Model
|
|
8
|
+
field :light, -> { Pinnacle::Types::FormGradient }, optional: false, nullable: false
|
|
9
|
+
field :dark, -> { Pinnacle::Types::FormGradient }, 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
|
+
# Image background. The image is tiled or scaled across the page with optional blur and dark tint overlay.
|
|
6
|
+
class FormBackgroundImage < Internal::Types::Model
|
|
7
|
+
field :url, -> { String }, optional: false, nullable: false
|
|
8
|
+
field :tint_opacity, -> { Integer }, optional: false, nullable: false
|
|
9
|
+
field :blur, -> { Internal::Types::Boolean }, optional: false, nullable: false
|
|
10
|
+
field :zoom, -> { Integer }, optional: false, nullable: false
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# Subtle repeating SVG pattern tinted by the palette's foreground color.
|
|
6
|
+
class FormBackgroundPattern < Internal::Types::Model
|
|
7
|
+
field :preset, -> { Pinnacle::Types::FormBackgroundPatternPreset }, optional: false, nullable: false
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
module FormBackgroundPatternPreset
|
|
6
|
+
extend Pinnacle::Internal::Types::Enum
|
|
7
|
+
|
|
8
|
+
NOISE = "noise"
|
|
9
|
+
DOTS = "dots"
|
|
10
|
+
MESH = "mesh"
|
|
11
|
+
GRID = "grid"
|
|
12
|
+
WAVES = "waves"
|
|
13
|
+
TOPO = "topo"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# No background effect — the form page is filled with a single flat color. The color itself isn't specified on this
|
|
6
|
+
# object; it's read from the sibling `colors` field on the same `theme_override` object (i.e.
|
|
7
|
+
# `theme_override.colors.light.background` in light mode, `theme_override.colors.dark.background` in dark mode). If
|
|
8
|
+
# you don't override `colors`, the color falls back to the one your team has configured in the [Pinnacle
|
|
9
|
+
# Dashboard](https://app.pinnacle.sh/dashboard/forms).
|
|
10
|
+
#
|
|
11
|
+
# Complete example — a POST `/forms` body that sets a white form in light mode and near-black in dark mode with no
|
|
12
|
+
# background effect:
|
|
13
|
+
#
|
|
14
|
+
# ```json
|
|
15
|
+
# {
|
|
16
|
+
# "name": "Contact request",
|
|
17
|
+
# "fields": [
|
|
18
|
+
# { "type": "text", "key": "full_name", "label": "Full name", "required": true }
|
|
19
|
+
# ],
|
|
20
|
+
# "theme_override": {
|
|
21
|
+
# "background": { "type": "solid" },
|
|
22
|
+
# "colors": {
|
|
23
|
+
# "light": { "background": "#ffffff" },
|
|
24
|
+
# "dark": { "background": "#0a0a0a" }
|
|
25
|
+
# }
|
|
26
|
+
# }
|
|
27
|
+
# }
|
|
28
|
+
# ```
|
|
29
|
+
#
|
|
30
|
+
# Pick `solid` when you want a clean one-color page with no gradient / image / pattern overlay. Use `gradient`,
|
|
31
|
+
# `image`, or `pattern` instead when you want something layered on top of the base color.
|
|
32
|
+
class FormBackgroundSolid < Internal::Types::Model; end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# Per-mode palette. All three colors are optional; any you omit fall back to the team default for that mode.
|
|
6
|
+
class FormColorPalette < Internal::Types::Model
|
|
7
|
+
field :primary, -> { String }, optional: true, nullable: false
|
|
8
|
+
field :background, -> { String }, optional: true, nullable: false
|
|
9
|
+
field :text, -> { String }, optional: true, nullable: false
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# The minimum shape needed to create a form. Used by `POST /forms` and inline by `POST /forms/send`.
|
|
6
|
+
class FormDefinition < Internal::Types::Model
|
|
7
|
+
field :name, -> { String }, optional: true, nullable: false
|
|
8
|
+
field :description, -> { String }, optional: true, nullable: false
|
|
9
|
+
field :fields, -> { Internal::Types::Array[Pinnacle::Types::FormField] }, optional: false, nullable: false
|
|
10
|
+
field :can_update, -> { Internal::Types::Boolean }, optional: true, nullable: false
|
|
11
|
+
field :expires_at, -> { String }, optional: true, nullable: false
|
|
12
|
+
field :theme_override, -> { Pinnacle::Types::FormThemeOverride }, optional: true, nullable: false
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# A single field definition inside a form. Discriminated by `type`.
|
|
6
|
+
class FormField < Internal::Types::Model
|
|
7
|
+
extend Pinnacle::Internal::Types::Union
|
|
8
|
+
|
|
9
|
+
discriminant :type
|
|
10
|
+
|
|
11
|
+
member -> { Pinnacle::Types::TextField }, key: "TEXT"
|
|
12
|
+
member -> { Pinnacle::Types::TextareaField }, key: "TEXTAREA"
|
|
13
|
+
member -> { Pinnacle::Types::AddressField }, key: "ADDRESS"
|
|
14
|
+
member -> { Pinnacle::Types::EmailField }, key: "EMAIL"
|
|
15
|
+
member -> { Pinnacle::Types::UrlField }, key: "URL"
|
|
16
|
+
member -> { Pinnacle::Types::PhoneField }, key: "PHONE"
|
|
17
|
+
member -> { Pinnacle::Types::NumberField }, key: "NUMBER"
|
|
18
|
+
member -> { Pinnacle::Types::RangeField }, key: "RANGE"
|
|
19
|
+
member -> { Pinnacle::Types::RatingField }, key: "RATING"
|
|
20
|
+
member -> { Pinnacle::Types::DateField }, key: "DATE"
|
|
21
|
+
member -> { Pinnacle::Types::TimeField }, key: "TIME"
|
|
22
|
+
member -> { Pinnacle::Types::DatetimeField }, key: "DATETIME"
|
|
23
|
+
member -> { Pinnacle::Types::ColorField }, key: "COLOR"
|
|
24
|
+
member -> { Pinnacle::Types::SelectField }, key: "SELECT"
|
|
25
|
+
member -> { Pinnacle::Types::RadioField }, key: "RADIO"
|
|
26
|
+
member -> { Pinnacle::Types::CheckboxField }, key: "CHECKBOX"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|