Add events to cta clicks (#25325)

* (wip) add unlock feature button to support page

* Fix typo

* (wip) add locked feature join session

* Improve session join style

* Add session join lock button

* Remove hover on locked join menu

* Update copy

* Only show `join as...` when appropriate

* (wip)

* Make ButtonLockedFeature theme sensitive

* Remove debug stuff

* Adjust feature button height

* Fix session join button on locked

* Remove unused import

* typo

* Add link to cta button

* Remove teams flag

* Add cta service

* Update snapshots

* Lock button style

* Add cta to context

* Rename cta to ctaService

* Stories and tests

* Add comments clarifying that ctas are not used currently

* add showActiveSessionsCTA to useSessions

* Licenses

* Lint license

* Remove commented out code

* Add missing types

* Replace cta service for an object with cta on context

* Fix menu hack

* small refactor in styled stuff

* Update SessionJoinBtn to use master code

* Snapshot update

* Add events to cta clicks

* rebase

* revert e ref update

* Revert e change

* Update proto message to start at 1

* Use enum from proto files instead of rewriting

* Improve comments on usageevents.proto cta enum

* Fix import

* Fix type errs

* Add comments

* Rename CtaEvents > CtaEvent

* Copy the CtaEvent enum instead of importing from proto

* Add back blank line

* Fix import order

* Update proto files

* Add TODO comment
This commit is contained in:
matheus
2023-05-05 18:53:02 +00:00
committed by GitHub
parent 72faa34ca7
commit 0697011eaa
15 changed files with 1447 additions and 549 deletions
+467 -163
View File
@@ -195,6 +195,50 @@ func (DiscoverStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{1}
}
// CTA represents teleport web UI's call to action buttons.
// We can't use prehog.v1alpha.CTA here because AuthService (and thus this file)
// is generated with gogofast, so we just copy the enum definition here instead.
// Make sure you update both.
type CTA int32
const (
CTA_CTA_UNSPECIFIED CTA = 0
CTA_CTA_AUTH_CONNECTOR CTA = 1
CTA_CTA_ACTIVE_SESSIONS CTA = 2
CTA_CTA_ACCESS_REQUESTS CTA = 3
CTA_CTA_PREMIUM_SUPPORT CTA = 4
CTA_CTA_TRUSTED_DEVICES CTA = 5
CTA_CTA_UPGRADE_BANNER CTA = 6
)
var CTA_name = map[int32]string{
0: "CTA_UNSPECIFIED",
1: "CTA_AUTH_CONNECTOR",
2: "CTA_ACTIVE_SESSIONS",
3: "CTA_ACCESS_REQUESTS",
4: "CTA_PREMIUM_SUPPORT",
5: "CTA_TRUSTED_DEVICES",
6: "CTA_UPGRADE_BANNER",
}
var CTA_value = map[string]int32{
"CTA_UNSPECIFIED": 0,
"CTA_AUTH_CONNECTOR": 1,
"CTA_ACTIVE_SESSIONS": 2,
"CTA_ACCESS_REQUESTS": 3,
"CTA_PREMIUM_SUPPORT": 4,
"CTA_TRUSTED_DEVICES": 5,
"CTA_UPGRADE_BANNER": 6,
}
func (x CTA) String() string {
return proto.EnumName(CTA_name, int32(x))
}
func (CTA) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{2}
}
// UIBannerClickEvent is a usage event sent by the UI when the upgrade
// banner is clicked.
type UIBannerClickEvent struct {
@@ -1070,6 +1114,54 @@ func (m *UIDiscoverDatabaseRDSEnrollEvent) GetSelectedResourcesCount() int64 {
return 0
}
// UICallToActionClickEvent is emmited when a user clicks a Teleport Web UI's CTA.
type UICallToActionClickEvent struct {
Cta CTA `protobuf:"varint,1,opt,name=cta,proto3,enum=teleport.usageevents.v1.CTA" json:"cta,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *UICallToActionClickEvent) Reset() { *m = UICallToActionClickEvent{} }
func (m *UICallToActionClickEvent) String() string { return proto.CompactTextString(m) }
func (*UICallToActionClickEvent) ProtoMessage() {}
func (*UICallToActionClickEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{16}
}
func (m *UICallToActionClickEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *UICallToActionClickEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_UICallToActionClickEvent.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalToSizedBuffer(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (m *UICallToActionClickEvent) XXX_Merge(src proto.Message) {
xxx_messageInfo_UICallToActionClickEvent.Merge(m, src)
}
func (m *UICallToActionClickEvent) XXX_Size() int {
return m.Size()
}
func (m *UICallToActionClickEvent) XXX_DiscardUnknown() {
xxx_messageInfo_UICallToActionClickEvent.DiscardUnknown(m)
}
var xxx_messageInfo_UICallToActionClickEvent proto.InternalMessageInfo
func (m *UICallToActionClickEvent) GetCta() CTA {
if m != nil {
return m.Cta
}
return CTA_CTA_UNSPECIFIED
}
// UIDiscoverDeployServiceEvent is emitted after the user installs a Teleport Agent.
// For SSH this is the Teleport 'install-node' script.
//
@@ -1090,7 +1182,7 @@ func (m *UIDiscoverDeployServiceEvent) Reset() { *m = UIDiscoverDeploySe
func (m *UIDiscoverDeployServiceEvent) String() string { return proto.CompactTextString(m) }
func (*UIDiscoverDeployServiceEvent) ProtoMessage() {}
func (*UIDiscoverDeployServiceEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{16}
return fileDescriptor_94cf2ca1c69fd564, []int{17}
}
func (m *UIDiscoverDeployServiceEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1154,7 +1246,7 @@ func (m *UIDiscoverDatabaseRegisterEvent) Reset() { *m = UIDiscoverDatab
func (m *UIDiscoverDatabaseRegisterEvent) String() string { return proto.CompactTextString(m) }
func (*UIDiscoverDatabaseRegisterEvent) ProtoMessage() {}
func (*UIDiscoverDatabaseRegisterEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{17}
return fileDescriptor_94cf2ca1c69fd564, []int{18}
}
func (m *UIDiscoverDatabaseRegisterEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1218,7 +1310,7 @@ func (m *UIDiscoverDatabaseConfigureMTLSEvent) Reset() { *m = UIDiscover
func (m *UIDiscoverDatabaseConfigureMTLSEvent) String() string { return proto.CompactTextString(m) }
func (*UIDiscoverDatabaseConfigureMTLSEvent) ProtoMessage() {}
func (*UIDiscoverDatabaseConfigureMTLSEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{18}
return fileDescriptor_94cf2ca1c69fd564, []int{19}
}
func (m *UIDiscoverDatabaseConfigureMTLSEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1286,7 +1378,7 @@ func (m *UIDiscoverDesktopActiveDirectoryToolsInstallEvent) String() string {
}
func (*UIDiscoverDesktopActiveDirectoryToolsInstallEvent) ProtoMessage() {}
func (*UIDiscoverDesktopActiveDirectoryToolsInstallEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{19}
return fileDescriptor_94cf2ca1c69fd564, []int{20}
}
func (m *UIDiscoverDesktopActiveDirectoryToolsInstallEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1354,7 +1446,7 @@ func (m *UIDiscoverDesktopActiveDirectoryConfigureEvent) String() string {
}
func (*UIDiscoverDesktopActiveDirectoryConfigureEvent) ProtoMessage() {}
func (*UIDiscoverDesktopActiveDirectoryConfigureEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{20}
return fileDescriptor_94cf2ca1c69fd564, []int{21}
}
func (m *UIDiscoverDesktopActiveDirectoryConfigureEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1422,7 +1514,7 @@ func (m *UIDiscoverAutoDiscoveredResourcesEvent) Reset() {
func (m *UIDiscoverAutoDiscoveredResourcesEvent) String() string { return proto.CompactTextString(m) }
func (*UIDiscoverAutoDiscoveredResourcesEvent) ProtoMessage() {}
func (*UIDiscoverAutoDiscoveredResourcesEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{21}
return fileDescriptor_94cf2ca1c69fd564, []int{22}
}
func (m *UIDiscoverAutoDiscoveredResourcesEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1497,7 +1589,7 @@ func (m *UIDiscoverDatabaseConfigureIAMPolicyEvent) String() string {
}
func (*UIDiscoverDatabaseConfigureIAMPolicyEvent) ProtoMessage() {}
func (*UIDiscoverDatabaseConfigureIAMPolicyEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{22}
return fileDescriptor_94cf2ca1c69fd564, []int{23}
}
func (m *UIDiscoverDatabaseConfigureIAMPolicyEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1561,7 +1653,7 @@ func (m *UIDiscoverPrincipalsConfigureEvent) Reset() { *m = UIDiscoverPr
func (m *UIDiscoverPrincipalsConfigureEvent) String() string { return proto.CompactTextString(m) }
func (*UIDiscoverPrincipalsConfigureEvent) ProtoMessage() {}
func (*UIDiscoverPrincipalsConfigureEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{23}
return fileDescriptor_94cf2ca1c69fd564, []int{24}
}
func (m *UIDiscoverPrincipalsConfigureEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1626,7 +1718,7 @@ func (m *UIDiscoverTestConnectionEvent) Reset() { *m = UIDiscoverTestCon
func (m *UIDiscoverTestConnectionEvent) String() string { return proto.CompactTextString(m) }
func (*UIDiscoverTestConnectionEvent) ProtoMessage() {}
func (*UIDiscoverTestConnectionEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{24}
return fileDescriptor_94cf2ca1c69fd564, []int{25}
}
func (m *UIDiscoverTestConnectionEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1690,7 +1782,7 @@ func (m *UIDiscoverCompletedEvent) Reset() { *m = UIDiscoverCompletedEve
func (m *UIDiscoverCompletedEvent) String() string { return proto.CompactTextString(m) }
func (*UIDiscoverCompletedEvent) ProtoMessage() {}
func (*UIDiscoverCompletedEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{25}
return fileDescriptor_94cf2ca1c69fd564, []int{26}
}
func (m *UIDiscoverCompletedEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1751,7 +1843,7 @@ func (m *UICreateNewRoleClickEvent) Reset() { *m = UICreateNewRoleClickE
func (m *UICreateNewRoleClickEvent) String() string { return proto.CompactTextString(m) }
func (*UICreateNewRoleClickEvent) ProtoMessage() {}
func (*UICreateNewRoleClickEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{26}
return fileDescriptor_94cf2ca1c69fd564, []int{27}
}
func (m *UICreateNewRoleClickEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1791,7 +1883,7 @@ func (m *UICreateNewRoleSaveClickEvent) Reset() { *m = UICreateNewRoleSa
func (m *UICreateNewRoleSaveClickEvent) String() string { return proto.CompactTextString(m) }
func (*UICreateNewRoleSaveClickEvent) ProtoMessage() {}
func (*UICreateNewRoleSaveClickEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{27}
return fileDescriptor_94cf2ca1c69fd564, []int{28}
}
func (m *UICreateNewRoleSaveClickEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1831,7 +1923,7 @@ func (m *UICreateNewRoleCancelClickEvent) Reset() { *m = UICreateNewRole
func (m *UICreateNewRoleCancelClickEvent) String() string { return proto.CompactTextString(m) }
func (*UICreateNewRoleCancelClickEvent) ProtoMessage() {}
func (*UICreateNewRoleCancelClickEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{28}
return fileDescriptor_94cf2ca1c69fd564, []int{29}
}
func (m *UICreateNewRoleCancelClickEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1875,7 +1967,7 @@ func (m *UICreateNewRoleViewDocumentationClickEvent) String() string {
}
func (*UICreateNewRoleViewDocumentationClickEvent) ProtoMessage() {}
func (*UICreateNewRoleViewDocumentationClickEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{29}
return fileDescriptor_94cf2ca1c69fd564, []int{30}
}
func (m *UICreateNewRoleViewDocumentationClickEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1936,6 +2028,7 @@ type UsageEventOneOf struct {
// *UsageEventOneOf_UiCreateNewRoleViewDocumentationClick
// *UsageEventOneOf_UiDiscoverIntegrationAwsOidcConnectEvent
// *UsageEventOneOf_UiDiscoverDatabaseRdsEnrollEvent
// *UsageEventOneOf_UiCallToActionClickEvent
Event isUsageEventOneOf_Event `protobuf_oneof:"event"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
@@ -1946,7 +2039,7 @@ func (m *UsageEventOneOf) Reset() { *m = UsageEventOneOf{} }
func (m *UsageEventOneOf) String() string { return proto.CompactTextString(m) }
func (*UsageEventOneOf) ProtoMessage() {}
func (*UsageEventOneOf) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{30}
return fileDescriptor_94cf2ca1c69fd564, []int{31}
}
func (m *UsageEventOneOf) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2062,6 +2155,9 @@ type UsageEventOneOf_UiDiscoverIntegrationAwsOidcConnectEvent struct {
type UsageEventOneOf_UiDiscoverDatabaseRdsEnrollEvent struct {
UiDiscoverDatabaseRdsEnrollEvent *UIDiscoverDatabaseRDSEnrollEvent `protobuf:"bytes,28,opt,name=ui_discover_database_rds_enroll_event,json=uiDiscoverDatabaseRdsEnrollEvent,proto3,oneof" json:"ui_discover_database_rds_enroll_event,omitempty"`
}
type UsageEventOneOf_UiCallToActionClickEvent struct {
UiCallToActionClickEvent *UICallToActionClickEvent `protobuf:"bytes,29,opt,name=ui_call_to_action_click_event,json=uiCallToActionClickEvent,proto3,oneof" json:"ui_call_to_action_click_event,omitempty"`
}
func (*UsageEventOneOf_UiBannerClick) isUsageEventOneOf_Event() {}
func (*UsageEventOneOf_UiOnboardCompleteGoToDashboardClick) isUsageEventOneOf_Event() {}
@@ -2090,6 +2186,7 @@ func (*UsageEventOneOf_UiCreateNewRoleCancelClick) isUsageEventOneOf_Event()
func (*UsageEventOneOf_UiCreateNewRoleViewDocumentationClick) isUsageEventOneOf_Event() {}
func (*UsageEventOneOf_UiDiscoverIntegrationAwsOidcConnectEvent) isUsageEventOneOf_Event() {}
func (*UsageEventOneOf_UiDiscoverDatabaseRdsEnrollEvent) isUsageEventOneOf_Event() {}
func (*UsageEventOneOf_UiCallToActionClickEvent) isUsageEventOneOf_Event() {}
func (m *UsageEventOneOf) GetEvent() isUsageEventOneOf_Event {
if m != nil {
@@ -2287,6 +2384,13 @@ func (m *UsageEventOneOf) GetUiDiscoverDatabaseRdsEnrollEvent() *UIDiscoverDatab
return nil
}
func (m *UsageEventOneOf) GetUiCallToActionClickEvent() *UICallToActionClickEvent {
if x, ok := m.GetEvent().(*UsageEventOneOf_UiCallToActionClickEvent); ok {
return x.UiCallToActionClickEvent
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*UsageEventOneOf) XXX_OneofWrappers() []interface{} {
return []interface{}{
@@ -2317,12 +2421,14 @@ func (*UsageEventOneOf) XXX_OneofWrappers() []interface{} {
(*UsageEventOneOf_UiCreateNewRoleViewDocumentationClick)(nil),
(*UsageEventOneOf_UiDiscoverIntegrationAwsOidcConnectEvent)(nil),
(*UsageEventOneOf_UiDiscoverDatabaseRdsEnrollEvent)(nil),
(*UsageEventOneOf_UiCallToActionClickEvent)(nil),
}
}
func init() {
proto.RegisterEnum("teleport.usageevents.v1.DiscoverResource", DiscoverResource_name, DiscoverResource_value)
proto.RegisterEnum("teleport.usageevents.v1.DiscoverStatus", DiscoverStatus_name, DiscoverStatus_value)
proto.RegisterEnum("teleport.usageevents.v1.CTA", CTA_name, CTA_value)
proto.RegisterType((*UIBannerClickEvent)(nil), "teleport.usageevents.v1.UIBannerClickEvent")
proto.RegisterType((*UIOnboardCompleteGoToDashboardClickEvent)(nil), "teleport.usageevents.v1.UIOnboardCompleteGoToDashboardClickEvent")
proto.RegisterType((*UIOnboardAddFirstResourceClickEvent)(nil), "teleport.usageevents.v1.UIOnboardAddFirstResourceClickEvent")
@@ -2339,6 +2445,7 @@ func init() {
proto.RegisterType((*UIDiscoverResourceSelectionEvent)(nil), "teleport.usageevents.v1.UIDiscoverResourceSelectionEvent")
proto.RegisterType((*UIDiscoverIntegrationAWSOIDCConnectEvent)(nil), "teleport.usageevents.v1.UIDiscoverIntegrationAWSOIDCConnectEvent")
proto.RegisterType((*UIDiscoverDatabaseRDSEnrollEvent)(nil), "teleport.usageevents.v1.UIDiscoverDatabaseRDSEnrollEvent")
proto.RegisterType((*UICallToActionClickEvent)(nil), "teleport.usageevents.v1.UICallToActionClickEvent")
proto.RegisterType((*UIDiscoverDeployServiceEvent)(nil), "teleport.usageevents.v1.UIDiscoverDeployServiceEvent")
proto.RegisterType((*UIDiscoverDatabaseRegisterEvent)(nil), "teleport.usageevents.v1.UIDiscoverDatabaseRegisterEvent")
proto.RegisterType((*UIDiscoverDatabaseConfigureMTLSEvent)(nil), "teleport.usageevents.v1.UIDiscoverDatabaseConfigureMTLSEvent")
@@ -2361,154 +2468,164 @@ func init() {
}
var fileDescriptor_94cf2ca1c69fd564 = []byte{
// 2342 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xdd, 0x6f, 0xdc, 0x58,
0x15, 0x1f, 0x4f, 0xfa, 0x91, 0xde, 0xdd, 0xa6, 0xde, 0xbb, 0xdd, 0x76, 0xd2, 0x7c, 0x4f, 0xbf,
0x92, 0x6c, 0x49, 0x36, 0x6d, 0xd9, 0x16, 0xba, 0x50, 0x39, 0xb6, 0x13, 0x7b, 0x33, 0x89, 0x67,
0xaf, 0x3d, 0x2d, 0x59, 0x09, 0x5d, 0x39, 0xe3, 0x9b, 0xa9, 0x55, 0xc7, 0x1e, 0xd9, 0x77, 0x12,
0x22, 0x84, 0x56, 0x20, 0x40, 0x48, 0x45, 0x08, 0xde, 0x90, 0x90, 0x90, 0x10, 0x20, 0xf1, 0xc0,
0x33, 0xfb, 0xcc, 0x1b, 0x8f, 0xfc, 0x09, 0xa8, 0xef, 0x3c, 0xf2, 0x00, 0x02, 0x81, 0xe6, 0xfa,
0x73, 0x3e, 0xed, 0xad, 0x78, 0xca, 0xbe, 0x8d, 0xe7, 0xfe, 0xce, 0x39, 0xbf, 0x7b, 0xce, 0xb9,
0x1f, 0xe7, 0xd8, 0x60, 0x85, 0x12, 0x87, 0xb4, 0x3d, 0x9f, 0xae, 0x77, 0x02, 0xb3, 0x45, 0xc8,
0x31, 0x71, 0x69, 0xb0, 0x7e, 0xbc, 0x91, 0x7d, 0x5c, 0x6b, 0xfb, 0x1e, 0xf5, 0xe0, 0xf5, 0x18,
0xba, 0x96, 0x1d, 0x3b, 0xde, 0xa8, 0xae, 0x02, 0xd8, 0x50, 0x37, 0x4d, 0xd7, 0x25, 0xbe, 0xe8,
0xd8, 0xcd, 0x97, 0x72, 0x77, 0x04, 0x5e, 0x05, 0xe7, 0x4d, 0x87, 0xf8, 0xb4, 0xc2, 0x2d, 0x72,
0xcb, 0x97, 0x50, 0xf8, 0x50, 0xdd, 0x02, 0xcb, 0x0d, 0x55, 0x73, 0x0f, 0x3c, 0xd3, 0xb7, 0x44,
0xef, 0xa8, 0xed, 0x10, 0x4a, 0xb6, 0x3d, 0xc3, 0x93, 0xcc, 0xe0, 0x45, 0xf8, 0x67, 0xaa, 0xe1,
0x06, 0x98, 0xec, 0x04, 0xc4, 0x77, 0xcd, 0x23, 0x12, 0x29, 0x49, 0x9e, 0xab, 0xb7, 0xc1, 0xcd,
0x44, 0x8f, 0x60, 0x59, 0x5b, 0xb6, 0x1f, 0x50, 0x44, 0x02, 0xaf, 0xe3, 0x37, 0x49, 0xaa, 0xa2,
0xba, 0x9a, 0x31, 0xd7, 0x0f, 0xab, 0x99, 0x34, 0x4b, 0xb8, 0xfa, 0x14, 0x2c, 0x25, 0x58, 0x9d,
0x50, 0xd1, 0x27, 0x16, 0x71, 0xa9, 0x6d, 0x3a, 0x7a, 0xe7, 0xe0, 0xc8, 0xa6, 0xf9, 0x9c, 0xbe,
0x07, 0x6e, 0x27, 0x0a, 0x10, 0x69, 0xd9, 0x41, 0x57, 0xff, 0x0b, 0xd3, 0x71, 0x88, 0xdb, 0x22,
0x05, 0x95, 0xc0, 0x69, 0x30, 0x79, 0x74, 0x68, 0x62, 0x7a, 0xda, 0x26, 0x95, 0x32, 0x1b, 0xbb,
0x78, 0x74, 0x68, 0x1a, 0xa7, 0x6d, 0x02, 0xe7, 0x00, 0x70, 0xbc, 0x96, 0xed, 0xe2, 0x43, 0xc7,
0x3b, 0xa9, 0x4c, 0xb0, 0xc1, 0x4b, 0xec, 0x9f, 0x2d, 0xc7, 0x3b, 0x09, 0xf9, 0x23, 0xd2, 0xf4,
0x8e, 0x89, 0x7f, 0x2a, 0x7a, 0x16, 0x09, 0x44, 0xcf, 0xa5, 0xb6, 0xdb, 0x21, 0x05, 0x7d, 0xfa,
0x04, 0xcc, 0x0d, 0x28, 0x68, 0x9f, 0x16, 0x14, 0xfe, 0x08, 0xcc, 0xf7, 0x09, 0xd7, 0x7d, 0xdb,
0xa5, 0x05, 0xa5, 0xab, 0x80, 0x97, 0xec, 0x80, 0x09, 0xef, 0x12, 0x6a, 0x5a, 0x26, 0x35, 0xe1,
0x14, 0x28, 0xdb, 0x56, 0x84, 0x2c, 0xdb, 0x56, 0xd5, 0x04, 0x95, 0x18, 0x13, 0x87, 0x30, 0xc1,
0xca, 0x60, 0xd2, 0x8f, 0xfe, 0x63, 0x12, 0x53, 0xf7, 0x57, 0xd6, 0x46, 0xa4, 0xeb, 0x5a, 0xbf,
0x12, 0x94, 0x88, 0x56, 0x5f, 0x02, 0x18, 0x8f, 0xea, 0x94, 0xb4, 0x75, 0x6a, 0xd2, 0x4e, 0x00,
0x9f, 0x82, 0x0b, 0x01, 0xfb, 0x15, 0xa9, 0xbe, 0x9b, 0xab, 0x3a, 0x14, 0x44, 0x91, 0x58, 0x77,
0x29, 0x10, 0xdf, 0xf7, 0xfc, 0x28, 0xa0, 0xe1, 0x43, 0xf5, 0x77, 0x1c, 0xb8, 0xd6, 0x50, 0x33,
0x22, 0x3e, 0x25, 0x56, 0xe8, 0x2a, 0x19, 0x4c, 0x1e, 0x45, 0x53, 0x63, 0x36, 0xdf, 0x2a, 0x30,
0x9d, 0xd8, 0x17, 0x28, 0x11, 0x85, 0x62, 0x42, 0xbc, 0xcc, 0x94, 0xbc, 0x5f, 0x80, 0x78, 0x3c,
0xeb, 0x98, 0x7c, 0xf5, 0x3f, 0x1c, 0x58, 0x4c, 0x69, 0xc6, 0x4e, 0xd3, 0x89, 0x43, 0x9a, 0xd4,
0xf6, 0xdc, 0xff, 0x2b, 0xe1, 0xdd, 0x4c, 0x18, 0x43, 0xca, 0x1b, 0x85, 0xc3, 0x98, 0xaa, 0x8b,
0x55, 0x64, 0xe6, 0x3f, 0xf1, 0xe6, 0xf3, 0xff, 0x51, 0xb9, 0xbb, 0x87, 0xc4, 0x00, 0xd5, 0xa5,
0xa4, 0xe5, 0x9b, 0xdd, 0x99, 0x0b, 0xcf, 0x75, 0x4d, 0x95, 0x44, 0xd1, 0x73, 0x5d, 0xd2, 0xa4,
0x67, 0xde, 0x0f, 0x9f, 0x97, 0xb3, 0x79, 0x20, 0x99, 0xd4, 0x3c, 0x30, 0x03, 0x82, 0x24, 0x5d,
0x76, 0x7d, 0xcf, 0x71, 0xce, 0xfa, 0xfc, 0xe1, 0x63, 0x50, 0x09, 0x58, 0xd2, 0x13, 0x0b, 0xc7,
0x9a, 0x03, 0xdc, 0xf4, 0x3a, 0x2e, 0xad, 0x9c, 0x5b, 0xe4, 0x96, 0x27, 0xd0, 0xb5, 0x78, 0x3c,
0xa6, 0x12, 0x88, 0xdd, 0xd1, 0xea, 0x3f, 0x39, 0x30, 0x9b, 0xf1, 0x1c, 0x69, 0x3b, 0xde, 0xa9,
0x4e, 0xfc, 0x63, 0xbb, 0x49, 0xce, 0x7c, 0xd6, 0xfc, 0x9b, 0x03, 0x0b, 0x43, 0xb2, 0x26, 0x3a,
0x1d, 0xcf, 0xfc, 0xf4, 0xbf, 0x5f, 0x06, 0xb7, 0x06, 0xa7, 0x2f, 0x7a, 0xee, 0xa1, 0xdd, 0xea,
0xf8, 0x64, 0xd7, 0xa8, 0xe9, 0x67, 0xde, 0x07, 0x3f, 0x2b, 0x83, 0x8d, 0x6c, 0xfa, 0x07, 0x2f,
0xa9, 0xd7, 0x16, 0x9a, 0xd4, 0x3e, 0x26, 0x92, 0xed, 0x93, 0x26, 0xf5, 0xfc, 0x53, 0xc3, 0xf3,
0x9c, 0x40, 0x75, 0x03, 0x6a, 0x9e, 0xfd, 0x9d, 0xa4, 0xfa, 0xaa, 0x0c, 0xd6, 0xf2, 0x1c, 0x92,
0xa4, 0xc8, 0x99, 0xf7, 0xc6, 0x1f, 0xcb, 0xe0, 0x4e, 0xea, 0x0d, 0xa1, 0x43, 0xbd, 0xf8, 0x77,
0x66, 0x23, 0x3d, 0xf3, 0xa7, 0xcb, 0x5d, 0x70, 0x65, 0xf8, 0xa1, 0x32, 0xe5, 0xf7, 0x1e, 0x26,
0x3f, 0x2e, 0x83, 0x95, 0x31, 0x3b, 0x8a, 0x2a, 0xec, 0xd6, 0x3d, 0xc7, 0x6e, 0x9e, 0x9e, 0xf9,
0xbc, 0xf9, 0x2f, 0x07, 0xaa, 0xa9, 0x23, 0xba, 0xc5, 0x46, 0xd3, 0x6e, 0x9b, 0x4e, 0xf0, 0xe5,
0x59, 0x39, 0xff, 0xe2, 0xba, 0x05, 0x5b, 0x0c, 0x30, 0x48, 0x40, 0xa3, 0xbb, 0xe8, 0x97, 0xe1,
0x5a, 0xfe, 0x0f, 0x0e, 0x54, 0xd2, 0xc9, 0xc7, 0xad, 0x04, 0xeb, 0xcc, 0xcf, 0x7b, 0x06, 0x4c,
0x37, 0x54, 0xd1, 0x27, 0x26, 0x25, 0x7b, 0xe4, 0x04, 0x79, 0x4e, 0xb6, 0xdd, 0xb1, 0xd0, 0x4d,
0x88, 0x9e, 0x41, 0xdd, 0x3c, 0xce, 0x02, 0x96, 0xba, 0xb7, 0xb1, 0x5e, 0x69, 0xd3, 0x6d, 0x12,
0x27, 0x03, 0xb9, 0x07, 0x56, 0xfb, 0x20, 0xcf, 0x6c, 0x72, 0x22, 0x79, 0xcd, 0xce, 0x11, 0x71,
0x29, 0xab, 0x7c, 0x32, 0xe8, 0x3f, 0xcd, 0x83, 0x2b, 0x8d, 0x2e, 0x79, 0xf6, 0xa8, 0xb9, 0x44,
0x3b, 0x84, 0x0d, 0x70, 0xa5, 0x63, 0xe3, 0x03, 0xd6, 0x10, 0xc2, 0xcd, 0x2e, 0x36, 0x0a, 0xc2,
0xe8, 0x09, 0x0f, 0xf6, 0x8f, 0x94, 0x12, 0xba, 0xdc, 0xb1, 0x33, 0xff, 0xc2, 0x5f, 0x71, 0x60,
0xa5, 0x63, 0x63, 0x2f, 0x6c, 0xb0, 0xe0, 0x66, 0x14, 0x72, 0xdc, 0xf2, 0x30, 0xf5, 0xb0, 0x15,
0x37, 0x90, 0x22, 0x8b, 0xa1, 0x8b, 0x85, 0x31, 0x16, 0x8b, 0x75, 0xa1, 0x94, 0x12, 0xba, 0xd9,
0xb1, 0x73, 0xb1, 0xf0, 0x15, 0x07, 0x6e, 0x66, 0xd8, 0x99, 0x96, 0x85, 0x0f, 0x6d, 0x3f, 0xa0,
0x49, 0xad, 0x10, 0xf1, 0x3a, 0xc7, 0x78, 0x7d, 0x94, 0xcf, 0x6b, 0x74, 0x57, 0x4b, 0x29, 0xa1,
0xf9, 0x84, 0xd2, 0x50, 0x58, 0xbf, 0xaf, 0x86, 0xb0, 0x71, 0x4c, 0x9a, 0x44, 0xe7, 0x7c, 0x51,
0x5f, 0xe5, 0xb4, 0xd0, 0x7a, 0x7c, 0x35, 0x1a, 0x0b, 0x7f, 0xc8, 0x81, 0xc5, 0x0c, 0xbb, 0x80,
0x50, 0xdc, 0x4c, 0xba, 0x6d, 0x38, 0x60, 0x9d, 0xb2, 0xca, 0x05, 0x46, 0xea, 0xeb, 0xf9, 0xa4,
0x46, 0xf5, 0xea, 0x94, 0x12, 0x9a, 0x4d, 0xd8, 0x0c, 0x01, 0xc1, 0x9f, 0x73, 0xe0, 0x56, 0x86,
0x86, 0x1f, 0x15, 0x25, 0xb8, 0x19, 0xf7, 0xec, 0x62, 0x2a, 0x17, 0x19, 0x95, 0x6f, 0xe6, 0x53,
0x19, 0xd7, 0xf5, 0x53, 0x4a, 0x68, 0x31, 0xa1, 0x33, 0x02, 0x18, 0x7b, 0xc6, 0x8f, 0xfa, 0x68,
0xb8, 0xe9, 0x59, 0xec, 0x3e, 0x10, 0xf6, 0xf1, 0xa2, 0x70, 0x4d, 0xe6, 0x7a, 0x26, 0xa7, 0x0b,
0x18, 0x7a, 0x66, 0x34, 0x08, 0x7e, 0x07, 0xcc, 0x0e, 0x63, 0xd1, 0x3e, 0x8d, 0x18, 0x5c, 0x62,
0x0c, 0x3e, 0x2c, 0xce, 0x20, 0xdb, 0x46, 0x54, 0x4a, 0xa8, 0x32, 0x60, 0x3d, 0x02, 0xc0, 0xef,
0x82, 0xb9, 0x41, 0xcb, 0x6d, 0xdf, 0x76, 0x69, 0x64, 0x1a, 0x30, 0xd3, 0x8f, 0x8a, 0x9a, 0xee,
0x6b, 0x42, 0x2a, 0x25, 0x34, 0xdd, 0x67, 0x3b, 0x45, 0x40, 0x07, 0x4c, 0x77, 0x6c, 0x6c, 0x45,
0x9b, 0x2f, 0x0e, 0xc2, 0x96, 0x1c, 0x66, 0xca, 0x2b, 0x6f, 0x31, 0xc3, 0xeb, 0x63, 0x0c, 0x0f,
0x6b, 0xe5, 0x29, 0x25, 0x74, 0xad, 0x63, 0x0f, 0x6d, 0xf2, 0xbd, 0x0a, 0xd3, 0x2f, 0x31, 0x97,
0x2c, 0xcd, 0x20, 0xee, 0xad, 0x45, 0x96, 0xdf, 0x66, 0x96, 0xbf, 0x56, 0xc0, 0xf2, 0xf0, 0xee,
0x5c, 0x98, 0x79, 0x39, 0x1d, 0xbc, 0xcf, 0x58, 0xe2, 0x25, 0x64, 0x2c, 0xd6, 0xa5, 0xc0, 0x41,
0xd8, 0xa6, 0x88, 0x88, 0x5c, 0x66, 0x44, 0xbe, 0x5a, 0x80, 0xc8, 0x60, 0x93, 0x23, 0xcc, 0xb9,
0x31, 0x4d, 0x90, 0x9f, 0x84, 0x1b, 0x68, 0xca, 0x20, 0xba, 0xda, 0xa6, 0xeb, 0x32, 0x24, 0x31,
0xc5, 0x48, 0x3c, 0x2e, 0x42, 0x62, 0x58, 0xb7, 0x41, 0x29, 0xa1, 0x85, 0x0c, 0x8f, 0xa1, 0x0d,
0x89, 0x5f, 0x86, 0xbb, 0xe7, 0x20, 0x95, 0x66, 0x7c, 0xb7, 0xc4, 0x47, 0xd4, 0x09, 0x22, 0x42,
0x57, 0x18, 0xa1, 0x6f, 0x7c, 0x01, 0x42, 0x83, 0xf5, 0xbf, 0x52, 0x42, 0xb7, 0x06, 0x59, 0xa5,
0x38, 0xea, 0x44, 0x25, 0xd0, 0x9f, 0x39, 0xf0, 0xb8, 0x37, 0x4e, 0xac, 0x7a, 0xc4, 0x26, 0x2b,
0x1f, 0xb1, 0x15, 0xd7, 0x8f, 0x98, 0x76, 0x2b, 0x6a, 0x6c, 0x87, 0x25, 0x75, 0xc4, 0x94, 0x67,
0x4c, 0x3f, 0x2e, 0x14, 0xbf, 0x42, 0x55, 0xba, 0x52, 0x42, 0x1b, 0xd9, 0xa0, 0x16, 0x2b, 0xed,
0x3f, 0xe7, 0xc0, 0xc3, 0x42, 0x73, 0x48, 0xdd, 0x1d, 0xf2, 0x7f, 0x87, 0xf1, 0xdf, 0x7e, 0x63,
0xfe, 0xbd, 0xa5, 0x81, 0x52, 0x42, 0x6b, 0x79, 0xe4, 0xfb, 0x8a, 0x89, 0x5f, 0x73, 0xe0, 0xfd,
0x2c, 0x73, 0xb3, 0xd3, 0xbd, 0x79, 0x24, 0xe5, 0x6a, 0xa6, 0x2f, 0x18, 0x12, 0x86, 0x8c, 0xf0,
0xd3, 0x02, 0x84, 0xc7, 0xd5, 0xbd, 0x4a, 0x09, 0xdd, 0x49, 0x89, 0x8e, 0xad, 0x90, 0xff, 0xc0,
0x81, 0xf5, 0x9c, 0xcc, 0xb5, 0xcd, 0x23, 0xdc, 0x66, 0x25, 0x62, 0x44, 0xf2, 0x5d, 0x46, 0x72,
0xf3, 0x4d, 0xf2, 0xb7, 0xb7, 0xda, 0x54, 0x4a, 0x68, 0x65, 0x4c, 0x12, 0xab, 0xe6, 0x51, 0xb6,
0x34, 0xfd, 0x05, 0x07, 0xee, 0x64, 0xa9, 0xb6, 0x93, 0x0a, 0x6e, 0x20, 0xee, 0x57, 0x19, 0xc3,
0x27, 0x05, 0x18, 0x8e, 0x2a, 0x03, 0x95, 0x12, 0xaa, 0xa6, 0xd4, 0x46, 0x16, 0x8b, 0x3f, 0xe0,
0xc0, 0x52, 0x96, 0x13, 0x25, 0x01, 0xed, 0xb2, 0x71, 0x7b, 0xf6, 0xe3, 0xf7, 0x72, 0x4f, 0xbf,
0x31, 0x35, 0x99, 0x52, 0x42, 0x73, 0x29, 0x93, 0x61, 0x45, 0x9b, 0x0f, 0x66, 0xb2, 0x1c, 0xe2,
0x7b, 0x6e, 0x7c, 0x0e, 0x5d, 0xcb, 0x29, 0x44, 0x46, 0x15, 0x45, 0xe1, 0xb1, 0x3b, 0xa2, 0x60,
0x72, 0x40, 0xa5, 0x63, 0x77, 0x2f, 0x61, 0x26, 0x25, 0xd8, 0x25, 0x27, 0xd8, 0xf7, 0x9c, 0xf8,
0xba, 0x71, 0x9d, 0x19, 0xbc, 0x3f, 0xc6, 0xe0, 0x88, 0x72, 0x44, 0x29, 0xa1, 0xab, 0x1d, 0x7b,
0x70, 0x10, 0x9e, 0xb2, 0x43, 0xbe, 0xdf, 0x5a, 0x60, 0x1e, 0xc7, 0x26, 0x2b, 0xb9, 0x1e, 0x1e,
0x53, 0xe4, 0x84, 0x13, 0x1d, 0x0e, 0x80, 0x9f, 0x81, 0x85, 0x61, 0x13, 0x65, 0x45, 0x50, 0x64,
0x7c, 0x3a, 0xf7, 0x80, 0x19, 0x5b, 0x40, 0x29, 0x25, 0x74, 0xa3, 0x7f, 0xd6, 0x29, 0x04, 0xfe,
0x26, 0xdc, 0x42, 0xfa, 0x19, 0x1c, 0xdb, 0xe4, 0x04, 0x5b, 0xd9, 0x22, 0x2b, 0x62, 0x73, 0x83,
0xb1, 0x11, 0x8b, 0xb2, 0x19, 0x53, 0xab, 0x29, 0x25, 0x74, 0xbb, 0x8f, 0xd8, 0x70, 0x34, 0xfc,
0x3d, 0x07, 0xd6, 0xb2, 0x29, 0x68, 0xa7, 0x2f, 0xbd, 0xb0, 0x79, 0x12, 0x60, 0xcf, 0xb6, 0x9a,
0xf1, 0xb2, 0x88, 0xb2, 0x72, 0x26, 0xb7, 0x84, 0x28, 0xf6, 0x06, 0x4d, 0x29, 0xa1, 0xe5, 0x34,
0x4b, 0xb3, 0xd8, 0x93, 0x40, 0xb3, 0xad, 0x66, 0xcf, 0xdb, 0xb6, 0x9f, 0x72, 0xe0, 0xf6, 0xf0,
0x2b, 0x83, 0x15, 0x60, 0xc2, 0x5e, 0x4b, 0x45, 0xf4, 0x66, 0x0b, 0x5f, 0xa1, 0x86, 0xbf, 0xd8,
0xea, 0xbd, 0x42, 0x25, 0x18, 0x2b, 0xc8, 0x60, 0x36, 0x2f, 0x82, 0xf3, 0x4c, 0xe3, 0xc7, 0xe7,
0x26, 0xcb, 0xfc, 0x44, 0xf7, 0xba, 0x93, 0xd4, 0x16, 0x2d, 0x42, 0x93, 0xeb, 0x24, 0x8b, 0xeb,
0xea, 0xdf, 0x2f, 0xa7, 0xaf, 0xbc, 0xe3, 0x4d, 0x1c, 0x2e, 0x81, 0x39, 0x49, 0xd5, 0x45, 0xed,
0x99, 0x8c, 0x30, 0x92, 0x75, 0xad, 0x81, 0x44, 0x19, 0x37, 0xf6, 0xf4, 0xba, 0x2c, 0xaa, 0x5b,
0xaa, 0x2c, 0xf1, 0x25, 0x38, 0x0b, 0x2a, 0x83, 0x10, 0x5d, 0x46, 0xcf, 0x64, 0xc4, 0x73, 0x70,
0x11, 0xcc, 0x0e, 0x8e, 0xee, 0x34, 0x36, 0x65, 0xb4, 0x27, 0x1b, 0xb2, 0xce, 0x97, 0xe1, 0x03,
0xb0, 0x3e, 0x88, 0x90, 0x04, 0x43, 0xd8, 0x14, 0x74, 0x19, 0xd7, 0x35, 0xdd, 0xd8, 0x46, 0xb2,
0x8e, 0x75, 0xb9, 0xb6, 0x85, 0x15, 0x4d, 0x37, 0x64, 0x89, 0x9f, 0x80, 0x1f, 0x80, 0x7b, 0x63,
0x84, 0x76, 0xf7, 0xf5, 0x4f, 0x6a, 0x3d, 0x12, 0xe7, 0xe0, 0x7d, 0xb0, 0x36, 0x4e, 0x42, 0xdb,
0xdb, 0xd6, 0xa4, 0xcd, 0x1e, 0x99, 0xf3, 0xf0, 0x7d, 0x70, 0xb7, 0x08, 0x35, 0x24, 0xe9, 0xfc,
0x05, 0xb8, 0x0c, 0x6e, 0xe5, 0x52, 0xea, 0x22, 0x2f, 0xc2, 0x3b, 0xa0, 0x3a, 0x88, 0x14, 0xea,
0xf5, 0x9a, 0x2a, 0x0a, 0x86, 0xaa, 0xed, 0x61, 0xc5, 0x30, 0xea, 0xfc, 0x24, 0xbc, 0x0d, 0x96,
0xc6, 0xe3, 0x0c, 0xb1, 0xce, 0x5f, 0x1a, 0x0e, 0x7b, 0xae, 0xee, 0x49, 0xda, 0x73, 0x1d, 0x4b,
0xb2, 0xbe, 0x63, 0x68, 0x75, 0x1e, 0xc0, 0x7b, 0x60, 0x79, 0x0c, 0x3f, 0xfd, 0x93, 0x5a, 0x18,
0x33, 0xc6, 0xf1, 0xad, 0x1c, 0x07, 0xa7, 0x53, 0x97, 0x25, 0x5d, 0x51, 0xb7, 0x0c, 0xfe, 0x6d,
0xf8, 0x10, 0x7c, 0x50, 0x48, 0x7f, 0xd6, 0xc5, 0x97, 0x73, 0xec, 0x20, 0x59, 0x52, 0x7b, 0x43,
0x3f, 0x55, 0x34, 0x28, 0xdb, 0x62, 0x9d, 0xbf, 0x52, 0x28, 0x28, 0x5d, 0x24, 0x5f, 0xd8, 0x3d,
0x5d, 0xf4, 0x3b, 0xf0, 0x09, 0x78, 0xf4, 0x45, 0xdc, 0x13, 0xad, 0x87, 0x9a, 0xac, 0xeb, 0x3c,
0x84, 0x5f, 0x01, 0x2b, 0x45, 0x84, 0x85, 0x4f, 0x1b, 0x48, 0xe6, 0xdf, 0x85, 0x77, 0xc1, 0xcd,
0x31, 0x70, 0x69, 0x7f, 0x4f, 0xd8, 0xd5, 0xa4, 0x4d, 0xfe, 0x6a, 0x4e, 0x8a, 0x8b, 0x82, 0xae,
0x0b, 0x7b, 0x12, 0x12, 0xf0, 0x8e, 0xbc, 0xaf, 0xd7, 0x05, 0x51, 0xd6, 0xf9, 0xf7, 0x72, 0xa2,
0x96, 0xca, 0x64, 0x63, 0x70, 0x0d, 0x3e, 0x06, 0x0f, 0xc7, 0x48, 0xc9, 0x35, 0x41, 0x37, 0x54,
0x51, 0x97, 0x05, 0x24, 0x2a, 0x3d, 0x92, 0xd7, 0x0b, 0xc5, 0x3b, 0x92, 0x17, 0x44, 0x45, 0xe6,
0x2b, 0x39, 0xde, 0x0a, 0x25, 0x76, 0xe5, 0x5d, 0x0d, 0xed, 0x4b, 0x9b, 0xfc, 0x74, 0x21, 0x03,
0xcc, 0xb3, 0x38, 0x34, 0x70, 0x23, 0x67, 0x32, 0xa1, 0x84, 0x58, 0x6b, 0xe8, 0x46, 0x5f, 0xf2,
0xce, 0xc0, 0x55, 0x70, 0x27, 0x37, 0xbb, 0xc2, 0x28, 0xce, 0xc2, 0x35, 0xb0, 0x5a, 0x28, 0xbf,
0x42, 0xfc, 0x5c, 0x4e, 0x30, 0x53, 0xfc, 0xae, 0x2a, 0x22, 0x4d, 0xd7, 0xb6, 0x0c, 0x7e, 0x1e,
0x7e, 0x08, 0xee, 0x8f, 0x0b, 0xa6, 0x26, 0xee, 0x20, 0x4d, 0x10, 0x95, 0xbe, 0x7d, 0x6e, 0x21,
0x27, 0xf7, 0xe3, 0xbd, 0x51, 0x30, 0x6a, 0x82, 0xce, 0x2f, 0xe6, 0xac, 0x29, 0x7d, 0x4f, 0x7b,
0xbe, 0x55, 0x13, 0x76, 0x64, 0x7e, 0x69, 0x84, 0x5e, 0x4d, 0xcc, 0x78, 0x57, 0xd2, 0x71, 0x1d,
0x69, 0xdf, 0xda, 0xe7, 0xab, 0x23, 0x52, 0x31, 0x8b, 0x56, 0xd4, 0x6d, 0x05, 0x0b, 0xcf, 0x04,
0xb5, 0x26, 0x6c, 0xaa, 0x35, 0xd5, 0xd8, 0xe7, 0x6f, 0xc2, 0x47, 0xe0, 0x41, 0x8e, 0x14, 0x5b,
0x21, 0xaa, 0x88, 0x91, 0xbc, 0xad, 0xea, 0x06, 0x62, 0x5b, 0x27, 0x7f, 0x6b, 0xf5, 0xb7, 0x1c,
0x98, 0xea, 0xfd, 0x3c, 0x0a, 0x2e, 0x80, 0x99, 0x44, 0x97, 0x6e, 0x08, 0x46, 0x43, 0xef, 0x3b,
0xeb, 0x66, 0xc0, 0xf5, 0x7e, 0x80, 0xde, 0x10, 0xc5, 0xee, 0xb2, 0xe6, 0x86, 0x0e, 0xee, 0xa8,
0xf5, 0xba, 0x2c, 0xf1, 0x65, 0x38, 0x0d, 0xde, 0xeb, 0x1f, 0x94, 0x11, 0xd2, 0x10, 0x3f, 0x31,
0x4c, 0x4e, 0xd8, 0xd4, 0x10, 0x3b, 0xb6, 0x36, 0xbf, 0xfd, 0x97, 0xd7, 0xf3, 0xdc, 0x5f, 0x5f,
0xcf, 0x73, 0x7f, 0x7b, 0x3d, 0xcf, 0x7d, 0xaa, 0xb5, 0x6c, 0xfa, 0xa2, 0x73, 0xb0, 0xd6, 0xf4,
0x8e, 0xd6, 0x5b, 0xbe, 0x79, 0x6c, 0x87, 0x97, 0x24, 0xd3, 0x59, 0x4f, 0xbe, 0x9a, 0x34, 0xdb,
0xf6, 0x7a, 0x8b, 0xb8, 0xeb, 0xec, 0x13, 0xc9, 0xf5, 0x96, 0xd7, 0xf7, 0x19, 0xe5, 0x93, 0xcc,
0xe3, 0xf1, 0xc6, 0xc1, 0x05, 0x06, 0x7b, 0xf0, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x86, 0x6e,
0xe0, 0x5e, 0x76, 0x29, 0x00, 0x00,
// 2507 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcb, 0x6f, 0xe4, 0x58,
0xd5, 0x2f, 0x57, 0xfa, 0x91, 0xbe, 0x33, 0x9d, 0x78, 0x6e, 0xf7, 0xa4, 0x2b, 0x9d, 0x77, 0xf5,
0x2b, 0xc9, 0xcc, 0x97, 0x4c, 0x7a, 0xe6, 0x9b, 0x69, 0xe8, 0x81, 0x91, 0xcb, 0x76, 0x62, 0x4f,
0x2a, 0xe5, 0x9a, 0x7b, 0x5d, 0x69, 0x32, 0x12, 0xba, 0x72, 0xaa, 0x6e, 0x6a, 0xac, 0x71, 0xec,
0x92, 0xed, 0x4a, 0x88, 0x10, 0x1a, 0x81, 0x00, 0x21, 0x35, 0x42, 0xb0, 0x43, 0x42, 0x42, 0x42,
0x80, 0xc4, 0x62, 0xc4, 0x76, 0xd6, 0xec, 0x58, 0xf2, 0x27, 0xa0, 0xde, 0xb3, 0x64, 0x01, 0x02,
0x81, 0x7c, 0xfd, 0x28, 0xd7, 0xd3, 0x9e, 0x16, 0xab, 0xcc, 0xae, 0xec, 0xfb, 0x3b, 0xe7, 0xfc,
0xee, 0x39, 0xe7, 0x3e, 0xce, 0x71, 0x81, 0x0d, 0x9f, 0x5a, 0xb4, 0xe3, 0xb8, 0xfe, 0x76, 0xd7,
0x33, 0xda, 0x94, 0x9e, 0x51, 0xdb, 0xf7, 0xb6, 0xcf, 0x76, 0xd2, 0x8f, 0x5b, 0x1d, 0xd7, 0xf1,
0x1d, 0x78, 0x27, 0x86, 0x6e, 0xa5, 0xc7, 0xce, 0x76, 0xca, 0x9b, 0x00, 0x36, 0xd4, 0x8a, 0x61,
0xdb, 0xd4, 0x15, 0x2d, 0xb3, 0xf9, 0xa9, 0x1c, 0x8c, 0xc0, 0xdb, 0xe0, 0xaa, 0x61, 0x51, 0xd7,
0x2f, 0x71, 0xab, 0xdc, 0xfa, 0x0d, 0x14, 0x3e, 0x94, 0x77, 0xc1, 0x7a, 0x43, 0xd5, 0xec, 0x63,
0xc7, 0x70, 0x5b, 0xa2, 0x73, 0xda, 0xb1, 0xa8, 0x4f, 0xf7, 0x1c, 0xdd, 0x91, 0x0c, 0xef, 0x93,
0xf0, 0x65, 0x4f, 0xc3, 0x5d, 0x30, 0xdd, 0xf5, 0xa8, 0x6b, 0x1b, 0xa7, 0x34, 0x52, 0x92, 0x3c,
0x97, 0x1f, 0x80, 0x7b, 0x89, 0x1e, 0xa1, 0xd5, 0xda, 0x35, 0x5d, 0xcf, 0x47, 0xd4, 0x73, 0xba,
0x6e, 0x93, 0xf6, 0x54, 0x94, 0x37, 0x53, 0xe6, 0x06, 0x61, 0x55, 0xc3, 0x4f, 0x13, 0x2e, 0x7f,
0x00, 0xd6, 0x12, 0x2c, 0xa6, 0xbe, 0xe8, 0xd2, 0x16, 0xb5, 0x7d, 0xd3, 0xb0, 0x70, 0xf7, 0xf8,
0xd4, 0xf4, 0xb3, 0x39, 0x7d, 0x0f, 0x3c, 0x48, 0x14, 0x20, 0xda, 0x36, 0xbd, 0x40, 0xff, 0x27,
0x86, 0x65, 0x51, 0xbb, 0x4d, 0x73, 0x2a, 0x81, 0xf3, 0x60, 0xfa, 0xf4, 0xc4, 0x20, 0xfe, 0x45,
0x87, 0x96, 0x8a, 0x6c, 0xec, 0xfa, 0xe9, 0x89, 0xa1, 0x5f, 0x74, 0x28, 0x5c, 0x02, 0xc0, 0x72,
0xda, 0xa6, 0x4d, 0x4e, 0x2c, 0xe7, 0xbc, 0x34, 0xc5, 0x06, 0x6f, 0xb0, 0x37, 0xbb, 0x96, 0x73,
0x1e, 0xf2, 0x47, 0xb4, 0xe9, 0x9c, 0x51, 0xf7, 0x42, 0x74, 0x5a, 0xd4, 0x13, 0x1d, 0xdb, 0x37,
0xed, 0x2e, 0xcd, 0xe9, 0xd3, 0xa7, 0x60, 0x69, 0x48, 0x41, 0xe7, 0x22, 0xa7, 0xf0, 0xfb, 0x60,
0x79, 0x40, 0xb8, 0xee, 0x9a, 0xb6, 0x9f, 0x53, 0xba, 0x0c, 0x78, 0xc9, 0xf4, 0x98, 0xf0, 0x01,
0xf5, 0x8d, 0x96, 0xe1, 0x1b, 0x70, 0x06, 0x14, 0xcd, 0x56, 0x84, 0x2c, 0x9a, 0xad, 0xb2, 0x01,
0x4a, 0x31, 0x26, 0x0e, 0x61, 0x82, 0x95, 0xc1, 0xb4, 0x1b, 0xbd, 0x63, 0x12, 0x33, 0x8f, 0x37,
0xb6, 0xc6, 0xa4, 0xeb, 0xd6, 0xa0, 0x12, 0x94, 0x88, 0x96, 0x3f, 0x05, 0x30, 0x1e, 0xc5, 0x3e,
0xed, 0x60, 0xdf, 0xf0, 0xbb, 0x1e, 0xfc, 0x00, 0x5c, 0xf3, 0xd8, 0xaf, 0x48, 0xf5, 0xa3, 0x4c,
0xd5, 0xa1, 0x20, 0x8a, 0xc4, 0x82, 0xa5, 0x40, 0x5d, 0xd7, 0x71, 0xa3, 0x80, 0x86, 0x0f, 0xe5,
0xdf, 0x71, 0x60, 0xae, 0xa1, 0xa6, 0x44, 0x5c, 0x9f, 0xb6, 0x42, 0x57, 0xc9, 0x60, 0xfa, 0x34,
0x9a, 0x1a, 0xb3, 0xf9, 0x4a, 0x8e, 0xe9, 0xc4, 0xbe, 0x40, 0x89, 0x28, 0x14, 0x13, 0xe2, 0x45,
0xa6, 0xe4, 0x8d, 0x1c, 0xc4, 0xe3, 0x59, 0xc7, 0xe4, 0xcb, 0xff, 0xe6, 0xc0, 0x6a, 0x8f, 0x66,
0xec, 0x34, 0x4c, 0x2d, 0xda, 0xf4, 0x4d, 0xc7, 0xfe, 0x9f, 0x12, 0x3e, 0x48, 0x85, 0x31, 0xa4,
0xbc, 0x93, 0x3b, 0x8c, 0x3d, 0x75, 0xb1, 0x8a, 0xd4, 0xfc, 0xa7, 0x5e, 0x7e, 0xfe, 0x3f, 0x2a,
0x06, 0x7b, 0x48, 0x0c, 0x50, 0x6d, 0x9f, 0xb6, 0x5d, 0x23, 0x98, 0xb9, 0xf0, 0x0c, 0x6b, 0xaa,
0x24, 0x8a, 0x8e, 0x6d, 0xd3, 0xa6, 0x7f, 0xe9, 0xfd, 0xf0, 0x45, 0x31, 0x9d, 0x07, 0x92, 0xe1,
0x1b, 0xc7, 0x86, 0x47, 0x91, 0x84, 0x65, 0xdb, 0x75, 0x2c, 0xeb, 0xb2, 0xcf, 0x1f, 0x3e, 0x01,
0x25, 0x8f, 0x25, 0x3d, 0x6d, 0x91, 0x58, 0xb3, 0x47, 0x9a, 0x4e, 0xd7, 0xf6, 0x4b, 0x57, 0x56,
0xb9, 0xf5, 0x29, 0x34, 0x17, 0x8f, 0xc7, 0x54, 0x3c, 0x31, 0x18, 0x2d, 0x7f, 0x08, 0x4a, 0x0d,
0x55, 0x34, 0x2c, 0x4b, 0x77, 0x04, 0xb6, 0x66, 0x52, 0x9b, 0xe2, 0x16, 0x98, 0x6a, 0x46, 0xbe,
0x9a, 0x79, 0xbc, 0x38, 0x96, 0x97, 0xa8, 0x0b, 0x28, 0x00, 0x96, 0xff, 0xc1, 0x81, 0xc5, 0x54,
0x14, 0x68, 0xc7, 0x72, 0x2e, 0x30, 0x75, 0xcf, 0xcc, 0x26, 0xbd, 0xf4, 0x19, 0xf8, 0x2f, 0x0e,
0xac, 0x8c, 0xc8, 0xc0, 0xe8, 0xa4, 0xbd, 0xf4, 0xd3, 0xff, 0x7e, 0x11, 0xdc, 0x1f, 0x9e, 0xbe,
0xe8, 0xd8, 0x27, 0x66, 0xbb, 0xeb, 0xd2, 0x03, 0xbd, 0x8a, 0x2f, 0xbd, 0x0f, 0x7e, 0x56, 0x04,
0x3b, 0xe9, 0xf4, 0xf7, 0x3e, 0xf5, 0x9d, 0x4e, 0xb0, 0xa8, 0xce, 0xa8, 0x64, 0xba, 0xb4, 0xe9,
0x3b, 0xee, 0x85, 0xee, 0x38, 0x96, 0xa7, 0xda, 0x9e, 0x6f, 0x5c, 0xfe, 0x5d, 0xa9, 0xfc, 0xbc,
0x08, 0xb6, 0xb2, 0x1c, 0x92, 0xa4, 0xc8, 0xa5, 0xf7, 0xc6, 0xe7, 0x45, 0xf0, 0xb0, 0xe7, 0x0d,
0xa1, 0xeb, 0x3b, 0xf1, 0xef, 0xd4, 0xa6, 0x7c, 0xe9, 0x4f, 0xaa, 0x47, 0x60, 0x76, 0xf4, 0x01,
0x35, 0xe3, 0xf6, 0x1f, 0x4c, 0x3f, 0x2e, 0x82, 0x8d, 0x09, 0x3b, 0x8a, 0x2a, 0x1c, 0xd4, 0x1d,
0xcb, 0x6c, 0x5e, 0x5c, 0xfa, 0xbc, 0xf9, 0x0f, 0x07, 0xca, 0x3d, 0x47, 0x04, 0x85, 0x4b, 0xd3,
0xec, 0x18, 0x96, 0xf7, 0xd5, 0x59, 0x39, 0xff, 0xe4, 0x82, 0xe2, 0x2f, 0x06, 0xe8, 0xd4, 0xf3,
0xa3, 0x7b, 0xed, 0x57, 0xe1, 0x8a, 0xff, 0x77, 0x2e, 0xb8, 0xa1, 0xc5, 0x80, 0xb8, 0x2d, 0xd1,
0xba, 0xf4, 0xf3, 0x5e, 0x00, 0xf3, 0x0d, 0x55, 0x74, 0xa9, 0xe1, 0xd3, 0x1a, 0x3d, 0x47, 0x8e,
0x95, 0x6e, 0x9d, 0xac, 0x04, 0x09, 0xd1, 0x37, 0x88, 0x8d, 0xb3, 0x34, 0x60, 0x2d, 0xb8, 0x8d,
0xf5, 0x4b, 0x1b, 0x76, 0x93, 0x5a, 0x29, 0xc8, 0x9b, 0x60, 0x73, 0x00, 0x72, 0x68, 0xd2, 0x73,
0xc9, 0x69, 0x76, 0x4f, 0xa9, 0xed, 0x1b, 0xfd, 0x77, 0xe1, 0xf2, 0xe7, 0x2b, 0x60, 0xb6, 0x11,
0x90, 0x67, 0x8f, 0x9a, 0x4d, 0xb5, 0x13, 0xd8, 0x00, 0xb3, 0x5d, 0x93, 0x1c, 0xb3, 0xe6, 0x12,
0x69, 0x06, 0xd8, 0x28, 0x08, 0xe3, 0x27, 0x3c, 0xdc, 0x8b, 0x52, 0x0a, 0xe8, 0x66, 0xd7, 0x4c,
0xbd, 0x85, 0xbf, 0xe2, 0xc0, 0x46, 0xd7, 0x24, 0x4e, 0xd8, 0xac, 0x21, 0xcd, 0x28, 0xe4, 0xa4,
0xed, 0x10, 0xdf, 0x21, 0xad, 0xb8, 0x19, 0x15, 0x59, 0x0c, 0x5d, 0x2c, 0x4c, 0xb0, 0x98, 0xaf,
0xa3, 0xa5, 0x14, 0xd0, 0xbd, 0xae, 0x99, 0x89, 0x85, 0xcf, 0x39, 0x70, 0x2f, 0xc5, 0xce, 0x68,
0xb5, 0xc8, 0x89, 0xe9, 0x7a, 0x7e, 0x52, 0x77, 0x44, 0xbc, 0xae, 0x30, 0x5e, 0xef, 0x67, 0xf3,
0x1a, 0xdf, 0x21, 0x53, 0x0a, 0x68, 0x39, 0xa1, 0x34, 0x12, 0x36, 0xe8, 0xab, 0x11, 0x6c, 0x2c,
0xc3, 0x4f, 0xa2, 0x73, 0x35, 0xaf, 0xaf, 0x32, 0xda, 0x71, 0x7d, 0xbe, 0x1a, 0x8f, 0x85, 0x3f,
0xe4, 0xc0, 0x6a, 0x8a, 0x9d, 0x47, 0x7d, 0xd2, 0x4c, 0x3a, 0x77, 0xc4, 0x63, 0x5d, 0xb7, 0xd2,
0x35, 0x46, 0xea, 0xeb, 0xd9, 0xa4, 0xc6, 0xf5, 0xfd, 0x94, 0x02, 0x5a, 0x4c, 0xd8, 0x8c, 0x00,
0xc1, 0x9f, 0x73, 0xe0, 0x7e, 0x8a, 0x86, 0x1b, 0x15, 0x25, 0xa4, 0x19, 0xf7, 0xff, 0x62, 0x2a,
0xd7, 0x19, 0x95, 0x6f, 0x66, 0x53, 0x99, 0xd4, 0x41, 0x54, 0x0a, 0x68, 0x35, 0xa1, 0x33, 0x06,
0x18, 0x7b, 0xc6, 0x8d, 0x7a, 0x72, 0xa4, 0xe9, 0xb4, 0xd8, 0x7d, 0x20, 0xec, 0x09, 0x46, 0xe1,
0x9a, 0xce, 0xf4, 0x4c, 0x46, 0x47, 0x31, 0xf4, 0xcc, 0x78, 0x10, 0xfc, 0x0e, 0x58, 0x1c, 0xc5,
0xa2, 0x73, 0x11, 0x31, 0xb8, 0xc1, 0x18, 0xbc, 0x9b, 0x9f, 0x41, 0xba, 0x25, 0xa9, 0x14, 0x50,
0x69, 0xc8, 0x7a, 0x04, 0x80, 0xdf, 0x05, 0x4b, 0xc3, 0x96, 0x3b, 0xae, 0x69, 0xfb, 0x91, 0x69,
0xc0, 0x4c, 0xbf, 0x97, 0xd7, 0xf4, 0x40, 0x43, 0x53, 0x29, 0xa0, 0xf9, 0x01, 0xdb, 0x3d, 0x04,
0xb4, 0xc0, 0x7c, 0xd7, 0x24, 0xad, 0x68, 0xf3, 0x25, 0x5e, 0xd8, 0xde, 0x23, 0x4c, 0x79, 0xe9,
0x15, 0x66, 0x78, 0x7b, 0x82, 0xe1, 0x51, 0x6d, 0x41, 0xa5, 0x80, 0xe6, 0xba, 0xe6, 0xc8, 0x86,
0xe1, 0xf3, 0x30, 0xfd, 0x12, 0x73, 0xc9, 0xd2, 0xf4, 0xe2, 0x3e, 0x5d, 0x64, 0xf9, 0x55, 0x66,
0xf9, 0x6b, 0x39, 0x2c, 0x8f, 0xee, 0xf4, 0x85, 0x99, 0x97, 0xd1, 0x0d, 0xfc, 0x8c, 0x25, 0x5e,
0x42, 0xa6, 0xc5, 0xba, 0x14, 0xc4, 0x0b, 0xdb, 0x14, 0x11, 0x91, 0x9b, 0x8c, 0xc8, 0xff, 0xe7,
0x20, 0x32, 0xdc, 0xe4, 0x08, 0x73, 0x6e, 0x42, 0x13, 0xe4, 0x27, 0xe1, 0x06, 0xda, 0x63, 0x10,
0x5d, 0x6d, 0x7b, 0xeb, 0x32, 0x24, 0x31, 0xc3, 0x48, 0x3c, 0xc9, 0x43, 0x62, 0x54, 0xb7, 0x41,
0x29, 0xa0, 0x95, 0x14, 0x8f, 0x91, 0x0d, 0x89, 0x5f, 0x86, 0xbb, 0xe7, 0x30, 0x95, 0x66, 0x7c,
0xb7, 0x24, 0xa7, 0xbe, 0xe5, 0x45, 0x84, 0x66, 0x19, 0xa1, 0x6f, 0x7c, 0x09, 0x42, 0xc3, 0xf5,
0xbf, 0x52, 0x40, 0xf7, 0x87, 0x59, 0xf5, 0x70, 0xbe, 0x15, 0x95, 0x40, 0x7f, 0xe2, 0xc0, 0x93,
0xfe, 0x38, 0xb1, 0xea, 0x91, 0x18, 0xac, 0x7c, 0x24, 0xad, 0xb8, 0x7e, 0x24, 0x7e, 0x50, 0x51,
0x13, 0x33, 0x2c, 0xa9, 0x23, 0xa6, 0x3c, 0x63, 0xfa, 0x61, 0xae, 0xf8, 0xe5, 0xaa, 0xd2, 0x95,
0x02, 0xda, 0x49, 0x07, 0x35, 0x5f, 0x69, 0xff, 0x05, 0x07, 0xde, 0xc9, 0x35, 0x87, 0x9e, 0xbb,
0x43, 0xfe, 0xaf, 0x31, 0xfe, 0x7b, 0x2f, 0xcd, 0xbf, 0xbf, 0x34, 0x50, 0x0a, 0x68, 0x2b, 0x8b,
0xfc, 0x40, 0x31, 0xf1, 0x6b, 0x0e, 0xbc, 0x91, 0x66, 0x6e, 0x74, 0x83, 0x9b, 0x47, 0x52, 0xae,
0xa6, 0x7a, 0x8c, 0x21, 0x61, 0xc8, 0x08, 0x7f, 0x90, 0x83, 0xf0, 0xa4, 0xba, 0x57, 0x29, 0xa0,
0x87, 0x3d, 0xa2, 0x13, 0x2b, 0xe4, 0x3f, 0x70, 0x60, 0x3b, 0x23, 0x73, 0x4d, 0xe3, 0x94, 0x74,
0x58, 0x89, 0x18, 0x91, 0xbc, 0xc5, 0x48, 0x56, 0x5e, 0x26, 0x7f, 0xfb, 0xab, 0x4d, 0xa5, 0x80,
0x36, 0x26, 0x24, 0xb1, 0x6a, 0x9c, 0xa6, 0x4b, 0xd3, 0x5f, 0x70, 0xe0, 0x61, 0x9a, 0x6a, 0x27,
0xa9, 0xe0, 0x86, 0xe2, 0x7e, 0x9b, 0x31, 0x7c, 0x9a, 0x83, 0xe1, 0xb8, 0x32, 0x50, 0x29, 0xa0,
0x72, 0x8f, 0xda, 0xd8, 0x62, 0xf1, 0x07, 0x1c, 0x58, 0x4b, 0x73, 0xf2, 0xa9, 0xe7, 0x07, 0x6c,
0xec, 0xbe, 0xfd, 0xf8, 0xf5, 0xcc, 0xd3, 0x6f, 0x42, 0x4d, 0xa6, 0x14, 0xd0, 0x52, 0x8f, 0xc9,
0xa8, 0xa2, 0xcd, 0x05, 0x0b, 0x69, 0x0e, 0xf1, 0x3d, 0x37, 0x3e, 0x87, 0xe6, 0x32, 0x0a, 0x91,
0x71, 0x45, 0x51, 0x78, 0xec, 0x8e, 0x29, 0x98, 0x2c, 0x50, 0xea, 0x9a, 0xc1, 0x25, 0xcc, 0xf0,
0x29, 0xb1, 0xe9, 0x39, 0x71, 0x1d, 0x2b, 0xbe, 0x6e, 0xdc, 0x61, 0x06, 0x1f, 0x4f, 0x30, 0x38,
0xa6, 0x1c, 0x51, 0x0a, 0xe8, 0x76, 0xd7, 0x1c, 0x1e, 0x84, 0x17, 0xec, 0x90, 0x1f, 0xb4, 0xe6,
0x19, 0x67, 0xb1, 0xc9, 0x52, 0xa6, 0x87, 0x27, 0x14, 0x39, 0xe1, 0x44, 0x47, 0x03, 0xe0, 0x67,
0x60, 0x65, 0xd4, 0x44, 0x59, 0x11, 0x14, 0x19, 0x9f, 0xcf, 0x3c, 0x60, 0x26, 0x16, 0x50, 0x4a,
0x01, 0xdd, 0x1d, 0x9c, 0x75, 0x0f, 0x02, 0x7f, 0x13, 0x6e, 0x21, 0x83, 0x0c, 0xce, 0x4c, 0x7a,
0x4e, 0x5a, 0xe9, 0x22, 0x2b, 0x62, 0x73, 0x97, 0xb1, 0x11, 0xf3, 0xb2, 0x99, 0x50, 0xab, 0x29,
0x05, 0xf4, 0x60, 0x80, 0xd8, 0x68, 0x34, 0xfc, 0x3d, 0x07, 0xb6, 0xd2, 0x29, 0x68, 0xf6, 0x3e,
0xa0, 0x11, 0xe3, 0xdc, 0x23, 0x8e, 0xd9, 0x6a, 0xc6, 0xcb, 0x22, 0xca, 0xca, 0x85, 0xcc, 0x12,
0x22, 0xdf, 0xd7, 0x38, 0xa5, 0x80, 0xd6, 0x7b, 0x59, 0x9a, 0xc6, 0x9e, 0x7b, 0x9a, 0xd9, 0x6a,
0xf6, 0x7d, 0xb9, 0xfb, 0x29, 0x07, 0x1e, 0x8c, 0xbe, 0x32, 0xb4, 0x3c, 0x42, 0xd9, 0x27, 0xae,
0x88, 0xde, 0x62, 0xee, 0x2b, 0xd4, 0xe8, 0x8f, 0x64, 0xfd, 0x57, 0xa8, 0x04, 0xd3, 0xf2, 0xd2,
0x1f, 0xd2, 0xfc, 0x30, 0xad, 0x83, 0xf3, 0xd6, 0x77, 0xd8, 0x69, 0x16, 0x47, 0x31, 0x62, 0xb1,
0x94, 0xb9, 0x74, 0x47, 0x7f, 0x71, 0x8a, 0x32, 0x7a, 0xe4, 0x58, 0xe5, 0x3a, 0xb8, 0xca, 0x34,
0x7c, 0x78, 0x65, 0xba, 0xc8, 0x4f, 0x05, 0x97, 0xac, 0xa4, 0xa2, 0x69, 0x53, 0x3f, 0xb9, 0xc4,
0x32, 0x1e, 0x9b, 0x7f, 0xbb, 0xd9, 0xfb, 0x68, 0x1f, 0x1f, 0x1d, 0x70, 0x0d, 0x2c, 0x49, 0x2a,
0x16, 0xb5, 0x43, 0x19, 0x11, 0x24, 0x63, 0xad, 0x81, 0x44, 0x99, 0x34, 0x6a, 0xb8, 0x2e, 0x8b,
0xea, 0xae, 0x2a, 0x4b, 0x7c, 0x01, 0x2e, 0x82, 0xd2, 0x30, 0x04, 0xcb, 0xe8, 0x50, 0x46, 0x3c,
0x07, 0x57, 0xc1, 0xe2, 0xf0, 0xe8, 0x7e, 0xa3, 0x22, 0xa3, 0x9a, 0xac, 0xcb, 0x98, 0x2f, 0xc2,
0xb7, 0xc1, 0xf6, 0x30, 0x42, 0x12, 0x74, 0xa1, 0x22, 0x60, 0x99, 0xd4, 0x35, 0xac, 0xef, 0x21,
0x19, 0x13, 0x2c, 0x57, 0x77, 0x89, 0xa2, 0x61, 0x5d, 0x96, 0xf8, 0x29, 0xf8, 0x16, 0x78, 0x73,
0x82, 0xd0, 0xc1, 0x11, 0xfe, 0xa8, 0xda, 0x27, 0x71, 0x05, 0x3e, 0x06, 0x5b, 0x93, 0x24, 0xb4,
0xda, 0x9e, 0x26, 0x55, 0xfa, 0x64, 0xae, 0xc2, 0x37, 0xc0, 0xa3, 0x3c, 0xd4, 0x90, 0x84, 0xf9,
0x6b, 0x70, 0x1d, 0xdc, 0xcf, 0xa4, 0x14, 0x20, 0xaf, 0xc3, 0x87, 0xa0, 0x3c, 0x8c, 0x14, 0xea,
0xf5, 0xaa, 0x2a, 0x0a, 0xba, 0xaa, 0xd5, 0x88, 0xa2, 0xeb, 0x75, 0x7e, 0x1a, 0x3e, 0x00, 0x6b,
0x93, 0x71, 0xba, 0x58, 0xe7, 0x6f, 0x8c, 0x86, 0x3d, 0x53, 0x6b, 0x92, 0xf6, 0x0c, 0x13, 0x49,
0xc6, 0xfb, 0xba, 0x56, 0xe7, 0x01, 0x7c, 0x13, 0xac, 0x4f, 0xe0, 0x87, 0x3f, 0xaa, 0x86, 0x31,
0x63, 0x1c, 0x5f, 0xc9, 0x70, 0x70, 0x6f, 0xea, 0xb2, 0x84, 0x15, 0x75, 0x57, 0xe7, 0x5f, 0x85,
0xef, 0x80, 0xb7, 0x72, 0xe9, 0x4f, 0xbb, 0xf8, 0x66, 0x86, 0x1d, 0x24, 0x4b, 0x6a, 0x7f, 0xe8,
0x67, 0xf2, 0x06, 0x65, 0x4f, 0xac, 0xf3, 0xb3, 0xb9, 0x82, 0x12, 0x20, 0xf9, 0xdc, 0xee, 0x09,
0xd0, 0xaf, 0xc1, 0xa7, 0xe0, 0xbd, 0x2f, 0xe3, 0x9e, 0x68, 0x3d, 0x54, 0x65, 0x8c, 0x79, 0x08,
0xff, 0x0f, 0x6c, 0xe4, 0x11, 0x16, 0x3e, 0x6e, 0x20, 0x99, 0xbf, 0x05, 0x1f, 0x81, 0x7b, 0x13,
0xe0, 0xd2, 0x51, 0x4d, 0x38, 0xd0, 0xa4, 0x0a, 0x7f, 0x3b, 0x23, 0xc5, 0x45, 0x01, 0x63, 0xa1,
0x26, 0x21, 0x81, 0xec, 0xcb, 0x47, 0xb8, 0x2e, 0x88, 0x32, 0xe6, 0x5f, 0xcf, 0x88, 0x5a, 0x4f,
0x26, 0x1d, 0x83, 0x39, 0xf8, 0x04, 0xbc, 0x33, 0x41, 0x4a, 0xae, 0x0a, 0x58, 0x57, 0x45, 0x2c,
0x0b, 0x48, 0x54, 0xfa, 0x24, 0xef, 0xe4, 0x8a, 0x77, 0x24, 0x2f, 0x88, 0x8a, 0xcc, 0x97, 0x32,
0xbc, 0x15, 0x4a, 0x1c, 0xc8, 0x07, 0x1a, 0x3a, 0x92, 0x2a, 0xfc, 0x7c, 0x2e, 0x03, 0xcc, 0xb3,
0x24, 0x34, 0x70, 0x37, 0x63, 0x32, 0xa1, 0x84, 0x58, 0x6d, 0x60, 0x7d, 0x20, 0x79, 0x17, 0xe0,
0x26, 0x78, 0x98, 0x99, 0x5d, 0x61, 0x14, 0x17, 0xe1, 0x16, 0xd8, 0xcc, 0x95, 0x5f, 0x21, 0x7e,
0x29, 0x23, 0x98, 0x3d, 0xfc, 0x81, 0x2a, 0x22, 0x0d, 0x6b, 0xbb, 0x3a, 0xbf, 0x0c, 0xdf, 0x05,
0x8f, 0x27, 0x05, 0x53, 0x13, 0xf7, 0x91, 0x26, 0x88, 0xca, 0xc0, 0x3e, 0xb7, 0x92, 0x91, 0xfb,
0xf1, 0xde, 0x28, 0xe8, 0x55, 0x01, 0xf3, 0xab, 0x19, 0x6b, 0x0a, 0xd7, 0xb4, 0x67, 0xbb, 0x55,
0x61, 0x5f, 0xe6, 0xd7, 0xc6, 0xe8, 0xd5, 0xc4, 0x94, 0x77, 0x25, 0x4c, 0xea, 0x48, 0xfb, 0xd6,
0x11, 0x5f, 0x1e, 0x93, 0x8a, 0x69, 0xb4, 0xa2, 0xee, 0x29, 0x44, 0x38, 0x14, 0xd4, 0xaa, 0x50,
0x51, 0xab, 0xaa, 0x7e, 0xc4, 0xdf, 0x83, 0xef, 0x81, 0xb7, 0x33, 0xa4, 0xd8, 0x0a, 0x51, 0x45,
0x82, 0xe4, 0x3d, 0x15, 0xeb, 0x88, 0x6d, 0x9d, 0xfc, 0xfd, 0xcd, 0xdf, 0x72, 0x60, 0xa6, 0xff,
0x0f, 0x5e, 0x70, 0x05, 0x2c, 0x24, 0xba, 0xb0, 0x2e, 0xe8, 0x0d, 0x3c, 0x70, 0xd6, 0x2d, 0x80,
0x3b, 0x83, 0x00, 0xdc, 0x10, 0xc5, 0x60, 0x59, 0x73, 0x23, 0x07, 0xf7, 0xd5, 0x7a, 0x5d, 0x96,
0xf8, 0x22, 0x9c, 0x07, 0xaf, 0x0f, 0x0e, 0xca, 0x08, 0x69, 0x88, 0x9f, 0x1a, 0x25, 0x27, 0x54,
0x34, 0xc4, 0x8e, 0xad, 0xcd, 0x3f, 0x72, 0x60, 0x4a, 0xd4, 0x05, 0x78, 0x0b, 0xcc, 0x8a, 0xba,
0x30, 0x40, 0x67, 0x0e, 0xc0, 0xe0, 0xa5, 0xd0, 0xd0, 0x15, 0x22, 0x6a, 0xb5, 0x9a, 0x2c, 0xea,
0x5a, 0x70, 0xe8, 0xde, 0x01, 0xb7, 0xd8, 0x7b, 0x51, 0x57, 0x0f, 0x83, 0xb3, 0x18, 0x63, 0x55,
0xab, 0x05, 0x67, 0x6d, 0x32, 0x10, 0x50, 0x26, 0x48, 0xfe, 0xa8, 0x21, 0x63, 0x1d, 0xf3, 0x53,
0xf1, 0x40, 0x1d, 0xc9, 0x07, 0x6a, 0xe3, 0x80, 0xe0, 0x46, 0xbd, 0xae, 0x21, 0x9d, 0xbf, 0x12,
0x0f, 0xe8, 0x28, 0xc8, 0x7f, 0x89, 0x48, 0xf2, 0xa1, 0x1a, 0x6c, 0x1c, 0x57, 0x63, 0xdb, 0x8d,
0xfa, 0x1e, 0x12, 0x24, 0x99, 0x54, 0x84, 0x5a, 0x4d, 0x46, 0xfc, 0xb5, 0xca, 0xb7, 0xff, 0xfc,
0x62, 0x99, 0xfb, 0xcb, 0x8b, 0x65, 0xee, 0xaf, 0x2f, 0x96, 0xb9, 0x8f, 0xb5, 0xb6, 0xe9, 0x7f,
0xd2, 0x3d, 0xde, 0x6a, 0x3a, 0xa7, 0xdb, 0x6d, 0xd7, 0x38, 0x33, 0xc3, 0xbb, 0xa4, 0x61, 0x6d,
0x27, 0x7f, 0x54, 0x35, 0x3a, 0xe6, 0x76, 0x9b, 0xda, 0xdb, 0xec, 0x5f, 0xa9, 0xdb, 0x6d, 0x67,
0xe0, 0x9f, 0xab, 0x4f, 0x53, 0x8f, 0x67, 0x3b, 0xc7, 0xd7, 0x18, 0xec, 0xed, 0xff, 0x06, 0x00,
0x00, 0xff, 0xff, 0x4d, 0xbd, 0x08, 0x6a, 0xe9, 0x2a, 0x00, 0x00,
}
func (m *UIBannerClickEvent) Marshal() (dAtA []byte, err error) {
@@ -3167,6 +3284,38 @@ func (m *UIDiscoverDatabaseRDSEnrollEvent) MarshalToSizedBuffer(dAtA []byte) (in
return len(dAtA) - i, nil
}
func (m *UICallToActionClickEvent) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *UICallToActionClickEvent) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *UICallToActionClickEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if m.XXX_unrecognized != nil {
i -= len(m.XXX_unrecognized)
copy(dAtA[i:], m.XXX_unrecognized)
}
if m.Cta != 0 {
i = encodeVarintUsageevents(dAtA, i, uint64(m.Cta))
i--
dAtA[i] = 0x8
}
return len(dAtA) - i, nil
}
func (m *UIDiscoverDeployServiceEvent) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -4539,6 +4688,29 @@ func (m *UsageEventOneOf_UiDiscoverDatabaseRdsEnrollEvent) MarshalToSizedBuffer(
}
return len(dAtA) - i, nil
}
func (m *UsageEventOneOf_UiCallToActionClickEvent) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *UsageEventOneOf_UiCallToActionClickEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
if m.UiCallToActionClickEvent != nil {
{
size, err := m.UiCallToActionClickEvent.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintUsageevents(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x1
i--
dAtA[i] = 0xea
}
return len(dAtA) - i, nil
}
func encodeVarintUsageevents(dAtA []byte, offset int, v uint64) int {
offset -= sovUsageevents(v)
base := offset
@@ -4839,6 +5011,21 @@ func (m *UIDiscoverDatabaseRDSEnrollEvent) Size() (n int) {
return n
}
func (m *UICallToActionClickEvent) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
if m.Cta != 0 {
n += 1 + sovUsageevents(uint64(m.Cta))
}
if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized)
}
return n
}
func (m *UIDiscoverDeployServiceEvent) Size() (n int) {
if m == nil {
return 0
@@ -5469,6 +5656,18 @@ func (m *UsageEventOneOf_UiDiscoverDatabaseRdsEnrollEvent) Size() (n int) {
}
return n
}
func (m *UsageEventOneOf_UiCallToActionClickEvent) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
if m.UiCallToActionClickEvent != nil {
l = m.UiCallToActionClickEvent.Size()
n += 2 + l + sovUsageevents(uint64(l))
}
return n
}
func sovUsageevents(x uint64) (n int) {
return (math_bits.Len64(x|1) + 6) / 7
@@ -7097,6 +7296,76 @@ func (m *UIDiscoverDatabaseRDSEnrollEvent) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *UICallToActionClickEvent) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowUsageevents
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: UICallToActionClickEvent: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: UICallToActionClickEvent: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Cta", wireType)
}
m.Cta = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowUsageevents
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.Cta |= CTA(b&0x7F) << shift
if b < 0x80 {
break
}
}
default:
iNdEx = preIndex
skippy, err := skipUsageevents(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthUsageevents
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *UIDiscoverDeployServiceEvent) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
@@ -9884,6 +10153,41 @@ func (m *UsageEventOneOf) Unmarshal(dAtA []byte) error {
}
m.Event = &UsageEventOneOf_UiDiscoverDatabaseRdsEnrollEvent{v}
iNdEx = postIndex
case 29:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field UiCallToActionClickEvent", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowUsageevents
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthUsageevents
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthUsageevents
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
v := &UICallToActionClickEvent{}
if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
m.Event = &UsageEventOneOf_UiCallToActionClickEvent{v}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipUsageevents(dAtA[iNdEx:])
@@ -194,6 +194,25 @@ message UIDiscoverDatabaseRDSEnrollEvent {
int64 selected_resources_count = 4;
}
// UICallToActionClickEvent is emmited when a user clicks a Teleport Web UI's CTA.
message UICallToActionClickEvent {
CTA cta = 1;
}
// CTA represents teleport web UI's call to action buttons.
// We can't use prehog.v1alpha.CTA here because AuthService (and thus this file)
// is generated with gogofast, so we just copy the enum definition here instead.
// Make sure you update both.
enum CTA {
CTA_UNSPECIFIED = 0;
CTA_AUTH_CONNECTOR = 1;
CTA_ACTIVE_SESSIONS = 2;
CTA_ACCESS_REQUESTS = 3;
CTA_PREMIUM_SUPPORT = 4;
CTA_TRUSTED_DEVICES = 5;
CTA_UPGRADE_BANNER = 6;
}
// UIDiscoverDeployServiceEvent is emitted after the user installs a Teleport Agent.
// For SSH this is the Teleport 'install-node' script.
//
@@ -316,6 +335,7 @@ message UsageEventOneOf {
UICreateNewRoleViewDocumentationClickEvent ui_create_new_role_view_documentation_click = 26;
UIDiscoverIntegrationAWSOIDCConnectEvent ui_discover_integration_aws_oidc_connect_event = 27;
UIDiscoverDatabaseRDSEnrollEvent ui_discover_database_rds_enroll_event = 28;
UICallToActionClickEvent ui_call_to_action_click_event = 29;
}
reserved 2; //UIOnboardGetStartedClickEvent
reserved "ui_onboard_get_started_click";
+18 -17
View File
@@ -60,23 +60,6 @@ import (
_ "github.com/gravitational/kingpin"
_ "github.com/gravitational/license"
_ "github.com/gravitational/roundtrip"
_ "github.com/gravitational/teleport/api/breaker"
_ "github.com/gravitational/teleport/api/client"
_ "github.com/gravitational/teleport/api/client/proto"
_ "github.com/gravitational/teleport/api/client/webclient"
_ "github.com/gravitational/teleport/api/constants"
_ "github.com/gravitational/teleport/api/defaults"
_ "github.com/gravitational/teleport/api/gen/proto/go/attestation/v1"
_ "github.com/gravitational/teleport/api/gen/proto/go/teleport/devicetrust/v1"
_ "github.com/gravitational/teleport/api/gen/proto/go/teleport/loginrule/v1"
_ "github.com/gravitational/teleport/api/gen/proto/go/teleport/plugins/v1"
_ "github.com/gravitational/teleport/api/gen/proto/go/teleport/samlidp/v1"
_ "github.com/gravitational/teleport/api/types"
_ "github.com/gravitational/teleport/api/types/events"
_ "github.com/gravitational/teleport/api/types/wrappers"
_ "github.com/gravitational/teleport/api/utils"
_ "github.com/gravitational/teleport/api/utils/keys"
_ "github.com/gravitational/teleport/api/utils/retryutils"
_ "github.com/gravitational/trace"
_ "github.com/gravitational/trace/trail"
_ "github.com/jonboulle/clockwork"
@@ -118,4 +101,22 @@ import (
_ "google.golang.org/protobuf/types/known/timestamppb"
_ "gopkg.in/check.v1"
_ "k8s.io/apimachinery/pkg/util/yaml"
_ "github.com/gravitational/teleport/api/breaker"
_ "github.com/gravitational/teleport/api/client"
_ "github.com/gravitational/teleport/api/client/proto"
_ "github.com/gravitational/teleport/api/client/webclient"
_ "github.com/gravitational/teleport/api/constants"
_ "github.com/gravitational/teleport/api/defaults"
_ "github.com/gravitational/teleport/api/gen/proto/go/attestation/v1"
_ "github.com/gravitational/teleport/api/gen/proto/go/teleport/devicetrust/v1"
_ "github.com/gravitational/teleport/api/gen/proto/go/teleport/loginrule/v1"
_ "github.com/gravitational/teleport/api/gen/proto/go/teleport/plugins/v1"
_ "github.com/gravitational/teleport/api/gen/proto/go/teleport/samlidp/v1"
_ "github.com/gravitational/teleport/api/types"
_ "github.com/gravitational/teleport/api/types/events"
_ "github.com/gravitational/teleport/api/types/wrappers"
_ "github.com/gravitational/teleport/api/utils"
_ "github.com/gravitational/teleport/api/utils/keys"
_ "github.com/gravitational/teleport/api/utils/retryutils"
)
File diff suppressed because it is too large Load Diff
+44
View File
@@ -1101,6 +1101,31 @@ export namespace UICreateNewRoleViewDocumentationClickEvent {
}
}
export class UICallToActionClickEvent extends jspb.Message {
getUserName(): string;
setUserName(value: string): UICallToActionClickEvent;
getCta(): CTA;
setCta(value: CTA): UICallToActionClickEvent;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): UICallToActionClickEvent.AsObject;
static toObject(includeInstance: boolean, msg: UICallToActionClickEvent): UICallToActionClickEvent.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: UICallToActionClickEvent, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): UICallToActionClickEvent;
static deserializeBinaryFromReader(message: UICallToActionClickEvent, reader: jspb.BinaryReader): UICallToActionClickEvent;
}
export namespace UICallToActionClickEvent {
export type AsObject = {
userName: string,
cta: CTA,
}
}
export class KubeRequestEvent extends jspb.Message {
getUserName(): string;
setUserName(value: string): KubeRequestEvent;
@@ -1451,6 +1476,12 @@ export class SubmitEventRequest extends jspb.Message {
setUiDiscoverDatabaseRdsEnrollEvent(value?: UIDiscoverDatabaseRDSEnrollEvent): SubmitEventRequest;
hasUiCallToActionClickEvent(): boolean;
clearUiCallToActionClickEvent(): void;
getUiCallToActionClickEvent(): UICallToActionClickEvent | undefined;
setUiCallToActionClickEvent(value?: UICallToActionClickEvent): SubmitEventRequest;
getEventCase(): SubmitEventRequest.EventCase;
serializeBinary(): Uint8Array;
@@ -1505,6 +1536,7 @@ export namespace SubmitEventRequest {
resourceHeartbeat?: ResourceHeartbeatEvent.AsObject,
uiDiscoverIntegrationAwsOidcConnectEvent?: UIDiscoverIntegrationAWSOIDCConnectEvent.AsObject,
uiDiscoverDatabaseRdsEnrollEvent?: UIDiscoverDatabaseRDSEnrollEvent.AsObject,
uiCallToActionClickEvent?: UICallToActionClickEvent.AsObject,
}
export enum EventCase {
@@ -1586,6 +1618,8 @@ export namespace SubmitEventRequest {
UI_DISCOVER_DATABASE_RDS_ENROLL_EVENT = 41,
UI_CALL_TO_ACTION_CLICK_EVENT = 42,
}
}
@@ -1738,3 +1772,13 @@ export enum DiscoverStatus {
DISCOVER_STATUS_ERROR = 3,
DISCOVER_STATUS_ABORTED = 4,
}
export enum CTA {
CTA_UNSPECIFIED = 0,
CTA_AUTH_CONNECTOR = 1,
CTA_ACTIVE_SESSIONS = 2,
CTA_ACCESS_REQUESTS = 3,
CTA_PREMIUM_SUPPORT = 4,
CTA_TRUSTED_DEVICES = 5,
CTA_UPGRADE_BANNER = 6,
}
+251 -3
View File
@@ -20,6 +20,7 @@ goog.object.extend(proto, google_protobuf_duration_pb);
var google_protobuf_timestamp_pb = require('google-protobuf/google/protobuf/timestamp_pb.js');
goog.object.extend(proto, google_protobuf_timestamp_pb);
goog.exportSymbol('proto.prehog.v1alpha.AgentMetadataEvent', null, global);
goog.exportSymbol('proto.prehog.v1alpha.CTA', null, global);
goog.exportSymbol('proto.prehog.v1alpha.DiscoverMetadata', null, global);
goog.exportSymbol('proto.prehog.v1alpha.DiscoverResource', null, global);
goog.exportSymbol('proto.prehog.v1alpha.DiscoverResourceMetadata', null, global);
@@ -41,6 +42,7 @@ goog.exportSymbol('proto.prehog.v1alpha.SubmitEventResponse', null, global);
goog.exportSymbol('proto.prehog.v1alpha.SubmitEventsRequest', null, global);
goog.exportSymbol('proto.prehog.v1alpha.SubmitEventsResponse', null, global);
goog.exportSymbol('proto.prehog.v1alpha.UIBannerClickEvent', null, global);
goog.exportSymbol('proto.prehog.v1alpha.UICallToActionClickEvent', null, global);
goog.exportSymbol('proto.prehog.v1alpha.UICreateNewRoleCancelClickEvent', null, global);
goog.exportSymbol('proto.prehog.v1alpha.UICreateNewRoleClickEvent', null, global);
goog.exportSymbol('proto.prehog.v1alpha.UICreateNewRoleSaveClickEvent', null, global);
@@ -846,6 +848,27 @@ if (goog.DEBUG && !COMPILED) {
*/
proto.prehog.v1alpha.UICreateNewRoleViewDocumentationClickEvent.displayName = 'proto.prehog.v1alpha.UICreateNewRoleViewDocumentationClickEvent';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
* server response, or constructed directly in Javascript. The array is used
* in place and becomes part of the constructed object. It is not cloned.
* If no data is provided, the constructed object will be empty, but still
* valid.
* @extends {jspb.Message}
* @constructor
*/
proto.prehog.v1alpha.UICallToActionClickEvent = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.prehog.v1alpha.UICallToActionClickEvent, jspb.Message);
if (goog.DEBUG && !COMPILED) {
/**
* @public
* @override
*/
proto.prehog.v1alpha.UICallToActionClickEvent.displayName = 'proto.prehog.v1alpha.UICallToActionClickEvent';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
@@ -8164,6 +8187,166 @@ proto.prehog.v1alpha.UICreateNewRoleViewDocumentationClickEvent.prototype.setUse
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.
* Field names that are reserved in JavaScript and will be renamed to pb_name.
* Optional fields that are not set will be set to undefined.
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
* For the list of reserved names please see:
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
* JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @return {!Object}
*/
proto.prehog.v1alpha.UICallToActionClickEvent.prototype.toObject = function(opt_includeInstance) {
return proto.prehog.v1alpha.UICallToActionClickEvent.toObject(opt_includeInstance, this);
};
/**
* Static version of the {@see toObject} method.
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
* the JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @param {!proto.prehog.v1alpha.UICallToActionClickEvent} msg The msg instance to transform.
* @return {!Object}
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.prehog.v1alpha.UICallToActionClickEvent.toObject = function(includeInstance, msg) {
var f, obj = {
userName: jspb.Message.getFieldWithDefault(msg, 1, ""),
cta: jspb.Message.getFieldWithDefault(msg, 2, 0)
};
if (includeInstance) {
obj.$jspbMessageInstance = msg;
}
return obj;
};
}
/**
* Deserializes binary data (in protobuf wire format).
* @param {jspb.ByteSource} bytes The bytes to deserialize.
* @return {!proto.prehog.v1alpha.UICallToActionClickEvent}
*/
proto.prehog.v1alpha.UICallToActionClickEvent.deserializeBinary = function(bytes) {
var reader = new jspb.BinaryReader(bytes);
var msg = new proto.prehog.v1alpha.UICallToActionClickEvent;
return proto.prehog.v1alpha.UICallToActionClickEvent.deserializeBinaryFromReader(msg, reader);
};
/**
* Deserializes binary data (in protobuf wire format) from the
* given reader into the given message object.
* @param {!proto.prehog.v1alpha.UICallToActionClickEvent} msg The message object to deserialize into.
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
* @return {!proto.prehog.v1alpha.UICallToActionClickEvent}
*/
proto.prehog.v1alpha.UICallToActionClickEvent.deserializeBinaryFromReader = function(msg, reader) {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
var field = reader.getFieldNumber();
switch (field) {
case 1:
var value = /** @type {string} */ (reader.readString());
msg.setUserName(value);
break;
case 2:
var value = /** @type {!proto.prehog.v1alpha.CTA} */ (reader.readEnum());
msg.setCta(value);
break;
default:
reader.skipField();
break;
}
}
return msg;
};
/**
* Serializes the message to binary data (in protobuf wire format).
* @return {!Uint8Array}
*/
proto.prehog.v1alpha.UICallToActionClickEvent.prototype.serializeBinary = function() {
var writer = new jspb.BinaryWriter();
proto.prehog.v1alpha.UICallToActionClickEvent.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
};
/**
* Serializes the given message to binary data (in protobuf wire
* format), writing to the given BinaryWriter.
* @param {!proto.prehog.v1alpha.UICallToActionClickEvent} message
* @param {!jspb.BinaryWriter} writer
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.prehog.v1alpha.UICallToActionClickEvent.serializeBinaryToWriter = function(message, writer) {
var f = undefined;
f = message.getUserName();
if (f.length > 0) {
writer.writeString(
1,
f
);
}
f = message.getCta();
if (f !== 0.0) {
writer.writeEnum(
2,
f
);
}
};
/**
* optional string user_name = 1;
* @return {string}
*/
proto.prehog.v1alpha.UICallToActionClickEvent.prototype.getUserName = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};
/**
* @param {string} value
* @return {!proto.prehog.v1alpha.UICallToActionClickEvent} returns this
*/
proto.prehog.v1alpha.UICallToActionClickEvent.prototype.setUserName = function(value) {
return jspb.Message.setProto3StringField(this, 1, value);
};
/**
* optional CTA cta = 2;
* @return {!proto.prehog.v1alpha.CTA}
*/
proto.prehog.v1alpha.UICallToActionClickEvent.prototype.getCta = function() {
return /** @type {!proto.prehog.v1alpha.CTA} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
};
/**
* @param {!proto.prehog.v1alpha.CTA} value
* @return {!proto.prehog.v1alpha.UICallToActionClickEvent} returns this
*/
proto.prehog.v1alpha.UICallToActionClickEvent.prototype.setCta = function(value) {
return jspb.Message.setProto3EnumField(this, 2, value);
};
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.
@@ -8935,7 +9118,7 @@ proto.prehog.v1alpha.AgentMetadataEvent.prototype.setCloudEnvironment = function
* @private {!Array<!Array<number>>}
* @const
*/
proto.prehog.v1alpha.SubmitEventRequest.oneofGroups_ = [[3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41]];
proto.prehog.v1alpha.SubmitEventRequest.oneofGroups_ = [[3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42]];
/**
* @enum {number}
@@ -8979,7 +9162,8 @@ proto.prehog.v1alpha.SubmitEventRequest.EventCase = {
AGENT_METADATA_EVENT: 38,
RESOURCE_HEARTBEAT: 39,
UI_DISCOVER_INTEGRATION_AWS_OIDC_CONNECT_EVENT: 40,
UI_DISCOVER_DATABASE_RDS_ENROLL_EVENT: 41
UI_DISCOVER_DATABASE_RDS_ENROLL_EVENT: 41,
UI_CALL_TO_ACTION_CLICK_EVENT: 42
};
/**
@@ -9059,7 +9243,8 @@ proto.prehog.v1alpha.SubmitEventRequest.toObject = function(includeInstance, msg
agentMetadataEvent: (f = msg.getAgentMetadataEvent()) && proto.prehog.v1alpha.AgentMetadataEvent.toObject(includeInstance, f),
resourceHeartbeat: (f = msg.getResourceHeartbeat()) && proto.prehog.v1alpha.ResourceHeartbeatEvent.toObject(includeInstance, f),
uiDiscoverIntegrationAwsOidcConnectEvent: (f = msg.getUiDiscoverIntegrationAwsOidcConnectEvent()) && proto.prehog.v1alpha.UIDiscoverIntegrationAWSOIDCConnectEvent.toObject(includeInstance, f),
uiDiscoverDatabaseRdsEnrollEvent: (f = msg.getUiDiscoverDatabaseRdsEnrollEvent()) && proto.prehog.v1alpha.UIDiscoverDatabaseRDSEnrollEvent.toObject(includeInstance, f)
uiDiscoverDatabaseRdsEnrollEvent: (f = msg.getUiDiscoverDatabaseRdsEnrollEvent()) && proto.prehog.v1alpha.UIDiscoverDatabaseRDSEnrollEvent.toObject(includeInstance, f),
uiCallToActionClickEvent: (f = msg.getUiCallToActionClickEvent()) && proto.prehog.v1alpha.UICallToActionClickEvent.toObject(includeInstance, f)
};
if (includeInstance) {
@@ -9295,6 +9480,11 @@ proto.prehog.v1alpha.SubmitEventRequest.deserializeBinaryFromReader = function(m
reader.readMessage(value,proto.prehog.v1alpha.UIDiscoverDatabaseRDSEnrollEvent.deserializeBinaryFromReader);
msg.setUiDiscoverDatabaseRdsEnrollEvent(value);
break;
case 42:
var value = new proto.prehog.v1alpha.UICallToActionClickEvent;
reader.readMessage(value,proto.prehog.v1alpha.UICallToActionClickEvent.deserializeBinaryFromReader);
msg.setUiCallToActionClickEvent(value);
break;
default:
reader.skipField();
break;
@@ -9643,6 +9833,14 @@ proto.prehog.v1alpha.SubmitEventRequest.serializeBinaryToWriter = function(messa
proto.prehog.v1alpha.UIDiscoverDatabaseRDSEnrollEvent.serializeBinaryToWriter
);
}
f = message.getUiCallToActionClickEvent();
if (f != null) {
writer.writeMessage(
42,
f,
proto.prehog.v1alpha.UICallToActionClickEvent.serializeBinaryToWriter
);
}
};
@@ -11107,6 +11305,43 @@ proto.prehog.v1alpha.SubmitEventRequest.prototype.hasUiDiscoverDatabaseRdsEnroll
};
/**
* optional UICallToActionClickEvent ui_call_to_action_click_event = 42;
* @return {?proto.prehog.v1alpha.UICallToActionClickEvent}
*/
proto.prehog.v1alpha.SubmitEventRequest.prototype.getUiCallToActionClickEvent = function() {
return /** @type{?proto.prehog.v1alpha.UICallToActionClickEvent} */ (
jspb.Message.getWrapperField(this, proto.prehog.v1alpha.UICallToActionClickEvent, 42));
};
/**
* @param {?proto.prehog.v1alpha.UICallToActionClickEvent|undefined} value
* @return {!proto.prehog.v1alpha.SubmitEventRequest} returns this
*/
proto.prehog.v1alpha.SubmitEventRequest.prototype.setUiCallToActionClickEvent = function(value) {
return jspb.Message.setOneofWrapperField(this, 42, proto.prehog.v1alpha.SubmitEventRequest.oneofGroups_[0], value);
};
/**
* Clears the message field making it undefined.
* @return {!proto.prehog.v1alpha.SubmitEventRequest} returns this
*/
proto.prehog.v1alpha.SubmitEventRequest.prototype.clearUiCallToActionClickEvent = function() {
return this.setUiCallToActionClickEvent(undefined);
};
/**
* Returns whether this field is set.
* @return {boolean}
*/
proto.prehog.v1alpha.SubmitEventRequest.prototype.hasUiCallToActionClickEvent = function() {
return jspb.Message.getField(this, 42) != null;
};
@@ -11738,4 +11973,17 @@ proto.prehog.v1alpha.DiscoverStatus = {
DISCOVER_STATUS_ABORTED: 4
};
/**
* @enum {number}
*/
proto.prehog.v1alpha.CTA = {
CTA_UNSPECIFIED: 0,
CTA_AUTH_CONNECTOR: 1,
CTA_ACTIVE_SESSIONS: 2,
CTA_ACCESS_REQUESTS: 3,
CTA_PREMIUM_SUPPORT: 4,
CTA_TRUSTED_DEVICES: 5,
CTA_UPGRADE_BANNER: 6
};
goog.object.extend(exports, proto.prehog.v1alpha);
+20
View File
@@ -292,6 +292,20 @@ func (u *UICreateNewRoleViewDocumentationClickEvent) Anonymize(a utils.Anonymize
}
}
// UICallToActionClickEvent is a UI event sent when a user prints recovery codes.
type UICallToActionClickEvent prehogv1a.UICallToActionClickEvent
func (u *UICallToActionClickEvent) Anonymize(a utils.Anonymizer) prehogv1a.SubmitEventRequest {
return prehogv1a.SubmitEventRequest{
Event: &prehogv1a.SubmitEventRequest_UiCallToActionClickEvent{
UiCallToActionClickEvent: &prehogv1a.UICallToActionClickEvent{
Cta: u.Cta,
UserName: a.AnonymizeString(u.UserName),
},
},
}
}
// UserCertificateIssuedEvent is an event emitted when a certificate has been
// issued, used to track the duration and restriction.
type UserCertificateIssuedEvent prehogv1a.UserCertificateIssuedEvent
@@ -524,6 +538,12 @@ func ConvertUsageEvent(event *usageeventsv1.UsageEventOneOf, userMD UserMetadata
}
return ret, nil
case *usageeventsv1.UsageEventOneOf_UiCallToActionClickEvent:
return &UICallToActionClickEvent{
UserName: userMD.Username,
Cta: prehogv1a.CTA(e.UiCallToActionClickEvent.Cta),
}, nil
case *usageeventsv1.UsageEventOneOf_UiDiscoverDeployServiceEvent:
ret := &UIDiscoverDeployServiceEvent{
Metadata: discoverMetadataToPrehog(e.UiDiscoverDeployServiceEvent.Metadata, userMD),
+13
View File
@@ -56,6 +56,8 @@ const (
uiDiscoverPrincipalsConfigureEvent = "tp.ui.discover.principals.configure"
uiDiscoverTestConnectionEvent = "tp.ui.discover.testConnection"
uiDiscoverCompletedEvent = "tp.ui.discover.completed"
uiCallToActionClickEvent = "tp.ui.callToAction.click"
)
// Events that require extra metadata.
@@ -259,6 +261,17 @@ func ConvertUserEventRequestToUsageEvent(req CreateUserEventRequest) (*usageeven
}},
nil
case uiCallToActionClickEvent:
var cta int32
if err := json.Unmarshal([]byte(*req.EventData), &cta); err != nil {
return nil, trace.BadParameter("eventData is invalid: %v", err)
}
return &usageeventsv1.UsageEventOneOf{Event: &usageeventsv1.UsageEventOneOf_UiCallToActionClickEvent{
UiCallToActionClickEvent: &usageeventsv1.UICallToActionClickEvent{
Cta: usageeventsv1.CTA(cta),
}}},
nil
}
return nil, trace.BadParameter("invalid event %s", req.Event)
+20
View File
@@ -361,6 +361,24 @@ message UICreateNewRoleViewDocumentationClickEvent {
string user_name = 1;
}
// UICallToActionClickEvent is a click in a Teleport Web UI's CTA
message UICallToActionClickEvent {
//anonymized
string user_name = 1;
CTA cta = 2;
}
// CTA represents teleport web UI's call to action buttons
enum CTA {
CTA_UNSPECIFIED = 0;
CTA_AUTH_CONNECTOR = 1;
CTA_ACTIVE_SESSIONS = 2;
CTA_ACCESS_REQUESTS = 3;
CTA_PREMIUM_SUPPORT = 4;
CTA_TRUSTED_DEVICES = 5;
CTA_UPGRADE_BANNER = 6;
}
message KubeRequestEvent {
// anonymized
string user_name = 1;
@@ -448,6 +466,8 @@ message SubmitEventRequest {
UIDiscoverIntegrationAWSOIDCConnectEvent ui_discover_integration_aws_oidc_connect_event = 40;
UIDiscoverDatabaseRDSEnrollEvent ui_discover_database_rds_enroll_event = 41;
UICallToActionClickEvent ui_call_to_action_click_event = 42;
}
reserved 8; // UIOnboardGetStartedClickEvent
@@ -22,6 +22,7 @@ import { CarrotDown, Warning } from 'design/Icon';
import cfg from 'teleport/config';
import { ParticipantMode } from 'teleport/services/session';
import { ButtonLockedFeature } from 'teleport/components/ButtonLockedFeature';
import { CtaEvent } from 'teleport/services/userEvent';
export const SessionJoinBtn = ({
sid,
@@ -38,7 +39,11 @@ export const SessionJoinBtn = ({
<JoinMenu>
{showCTA && (
<Box mx="12px" my="3">
<ButtonLockedFeature noIcon>
<ButtonLockedFeature
noIcon
height="40px"
event={CtaEvent.CTA_ACTIVE_SESSIONS}
>
Join Active Sessions with Teleport Enterprise
</ButtonLockedFeature>
</Box>
@@ -29,6 +29,8 @@ import useStickerClusterId from 'teleport/useStickyClusterId';
import { ButtonLockedFeature } from 'teleport/components/ButtonLockedFeature';
import { CtaEvent } from 'teleport/services/userEvent';
import SessionList from './SessionList';
import useSessions from './useSessions';
@@ -47,7 +49,10 @@ export function Sessions(props: ReturnType<typeof useSessions>) {
<FeatureHeaderTitle>Active Sessions</FeatureHeaderTitle>
{showActiveSessionsCTA && (
<Box width="340px">
<ButtonLockedFeature height="36px">
<ButtonLockedFeature
height="36px"
event={CtaEvent.CTA_ACTIVE_SESSIONS}
>
Join Active Sessions With Teleport Enterprise
</ButtonLockedFeature>
</Box>
@@ -24,6 +24,7 @@ import { FeatureBox } from 'teleport/components/Layout';
import useTeleport from 'teleport/useTeleport';
import cfg from 'teleport/config';
import { ButtonLockedFeature } from 'teleport/components/ButtonLockedFeature';
import { CtaEvent } from 'teleport/services/userEvent';
export default function Container({
children,
@@ -82,7 +83,7 @@ export const Support = ({
url="mailto:support@goteleport.com"
/>
{isEnterprise && showPremiumSupportCTA && (
<ButtonLockedFeature>
<ButtonLockedFeature event={CtaEvent.CTA_PREMIUM_SUPPORT}>
Unlock Premium Support w/Enterprise
</ButtonLockedFeature>
)}
@@ -20,17 +20,30 @@ import { ButtonPrimary } from 'design/Button';
import { Unlock } from 'design/Icon';
import Flex from 'design/Flex';
import { CtaEvent, userEventService } from 'teleport/services/userEvent';
export type Props = {
children: React.ReactNode;
noIcon?: boolean;
event?: CtaEvent;
[index: string]: any;
};
const salesUrl = 'https://goteleport.com/signup/enterprise/';
export function ButtonLockedFeature({ children, noIcon = false, ...rest }) {
export function ButtonLockedFeature({
children,
noIcon = false,
event,
...rest
}: Props) {
function handleClick() {
userEventService.captureCtaEvent(event);
window.open(salesUrl, 'blank');
}
return (
<StyledButton onClick={() => window.open(salesUrl, 'blank')} {...rest}>
<StyledButton onClick={handleClick} {...rest}>
<Flex alignItems="center">
{!noIcon && <UnlockIcon />}
{children}
@@ -25,6 +25,7 @@ export enum CaptureEvent {
CreateNewRoleSaveClickEvent = 'tp.ui.createNewRoleSave.click',
CreateNewRoleCancelClickEvent = 'tp.ui.createNewRoleCancel.click',
CreateNewRoleViewDocumentationClickEvent = 'tp.ui.createNewRoleViewDocumentation.click',
UiCallToActionClickEvent = 'tp.ui.callToAction.click',
// PreUserEvent types
// these events are unauthenticated,
@@ -148,3 +149,14 @@ export type DiscoverEventStepStatus = {
stepStatus: DiscoverEventStatus;
stepStatusError?: string;
};
// TODO(mcbattirola): import this from protofile instead of copying it here
export enum CtaEvent {
CTA_UNSPECIFIED = 0,
CTA_AUTH_CONNECTOR = 1,
CTA_ACTIVE_SESSIONS = 2,
CTA_ACCESS_REQUESTS = 3,
CTA_PREMIUM_SUPPORT = 4,
CTA_TRUSTED_DEVICES = 5,
CTA_UPGRADE_BANNER = 6,
}
@@ -17,7 +17,13 @@
import api from 'teleport/services/api';
import cfg from 'teleport/config';
import { UserEvent, PreUserEvent, DiscoverEventRequest } from './types';
import {
UserEvent,
PreUserEvent,
DiscoverEventRequest,
CtaEvent,
CaptureEvent,
} from './types';
export const userEventService = {
captureUserEvent(userEvent: UserEvent) {
@@ -46,4 +52,16 @@ export const userEventService = {
body: JSON.stringify(event),
});
},
captureCtaEvent(event: CtaEvent) {
// using api.fetch instead of api.fetchJSON
// because we are not expecting a JSON response
void api.fetch(cfg.api.captureUserEventPath, {
method: 'POST',
body: JSON.stringify({
event: CaptureEvent.UiCallToActionClickEvent,
eventData: event,
}),
});
},
};